From 189b67168addd9b9e302e65fd4e53f284f692e69 Mon Sep 17 00:00:00 2001 From: Fabio Gartenmann <137318798+artiphishle@users.noreply.github.com> Date: Thu, 6 Aug 2026 02:22:56 +0200 Subject: [PATCH 1/6] feat: classify Heading authoring authority --- src/components/heading/meta.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/components/heading/meta.ts b/src/components/heading/meta.ts index 886d4372..247171b7 100644 --- a/src/components/heading/meta.ts +++ b/src/components/heading/meta.ts @@ -22,11 +22,13 @@ export const headingMeta = { category: 'Content', label: 'Text', default: 'Heading', + authoring: { authority: 'instance' }, }, i18nKey: { type: 'string', category: 'Content', label: 'i18n key', + authoring: { authority: 'instance' }, }, level: { type: 'enum', @@ -34,41 +36,55 @@ export const headingMeta = { label: 'Level', enum: [1, 2, 3, 4, 5, 6], default: 2, + authoring: { authority: 'instance' }, + }, + size: { + type: 'enum', + category: 'Typography', + label: 'Size', + enum: ['display', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'], + authoring: { authority: 'theme', scope: 'component' }, }, color: { type: 'enum', category: 'Style', label: 'Color', enum: ZORA_COLORS, + authoring: { authority: 'theme', scope: 'component' }, }, emphasis: { type: 'enum', category: 'Style', label: 'Emphasis', enum: ZORA_EMPHASES, + authoring: { authority: 'theme', scope: 'component' }, }, align: { type: 'enum', category: 'Layout', label: 'Align', enum: ['auto', 'left', 'right', 'center', 'justify'], + authoring: { authority: 'theme', scope: 'component' }, }, weight: { type: 'enum', category: 'Typography', label: 'Weight', enum: ['regular', 'medium', 'semiBold', 'bold'], + authoring: { authority: 'theme', scope: 'component' }, }, italic: { type: 'boolean', category: 'Typography', label: 'Italic', default: false, + authoring: { authority: 'theme', scope: 'component' }, }, numberOfLines: { type: 'number', category: 'Layout', label: 'Line clamp', + authoring: { authority: 'instance' }, }, }, } as const satisfies ZoraComponentMeta; From 360c3e8b4936d6a0f271d1052e6a21cec88e2200 Mon Sep 17 00:00:00 2001 From: Fabio Gartenmann <137318798+artiphishle@users.noreply.github.com> Date: Thu, 6 Aug 2026 02:23:14 +0200 Subject: [PATCH 2/6] test: cover Heading authoring metadata --- src/metadata/authoringMeta.test.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/metadata/authoringMeta.test.ts b/src/metadata/authoringMeta.test.ts index 80aa519b..bf797bc7 100644 --- a/src/metadata/authoringMeta.test.ts +++ b/src/metadata/authoringMeta.test.ts @@ -24,6 +24,8 @@ describe('ZORA component prop authoring authority', () => { authority: 'instance', }); expect(ZORA_COMPONENT_META.Card.props.title?.authoring).toEqual({ authority: 'instance' }); + expect(ZORA_COMPONENT_META.Heading.props.text?.authoring).toEqual({ authority: 'instance' }); + expect(ZORA_COMPONENT_META.Heading.props.level?.authoring).toEqual({ authority: 'instance' }); expect(ZORA_COMPONENT_META.Text.props.text?.authoring).toEqual({ authority: 'instance' }); expect(ZORA_COMPONENT_META.Panel.props.description?.authoring).toEqual({ authority: 'instance', @@ -39,6 +41,10 @@ describe('ZORA component prop authoring authority', () => { authority: 'theme', scope: 'component', }); + expect(ZORA_COMPONENT_META.Heading.props.size?.authoring).toEqual({ + authority: 'theme', + scope: 'component', + }); expect(ZORA_COMPONENT_META.Text.props.variant?.authoring).toEqual({ authority: 'theme', scope: 'component', @@ -49,6 +55,13 @@ describe('ZORA component prop authoring authority', () => { }); }); + test('keeps Heading blueprint content useful before instance editing', () => { + expect(ZORA_COMPONENT_META.Heading.blueprint?.defaultProps).toEqual({ + text: 'Heading', + level: 2, + }); + }); + test('treats absent authoring metadata as not authorable', () => { expect(ZORA_COMPONENT_META.Progress.props.value?.authoring).toBeUndefined(); }); From 7bb5efad4d20a01a19322f960a2fec0c7c95bcce Mon Sep 17 00:00:00 2001 From: Fabio Gartenmann <137318798+artiphishle@users.noreply.github.com> Date: Thu, 6 Aug 2026 02:23:30 +0200 Subject: [PATCH 3/6] docs: explain Heading authoring ownership --- docs/authoring-metadata.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/authoring-metadata.md b/docs/authoring-metadata.md index 66a0e883..bf955566 100644 --- a/docs/authoring-metadata.md +++ b/docs/authoring-metadata.md @@ -24,7 +24,9 @@ A prop participates in authoring only when its schema has `authoring` metadata. { authority: 'theme', scope: 'global' | 'component' | 'pattern' } ``` -Instance authority is reserved for legitimate per-node content or behavior. Theme authority prevents visual design props from becoming unrelated per-instance overrides. Internal or technical props have no `authoring` property. There is no `system` authority. +Instance authority is reserved for legitimate per-node content, behavior, or semantics. For example, a Heading owns its text, semantic level, translation key, and optional line clamp per instance. Its size, color, emphasis, alignment, weight, and italic presentation remain component-theme concerns. + +Theme authority prevents visual design props from becoming unrelated per-instance overrides. Internal or technical props have no `authoring` property. There is no `system` authority. ## Theme recipe direction From 6f33ed3547122750e3630718a92736654a4d9430 Mon Sep 17 00:00:00 2001 From: Fabio Gartenmann <137318798+artiphishle@users.noreply.github.com> Date: Thu, 6 Aug 2026 02:23:43 +0200 Subject: [PATCH 4/6] chore: add Heading authoring changeset --- .changeset/neat-heading-authoring.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/neat-heading-authoring.md diff --git a/.changeset/neat-heading-authoring.md b/.changeset/neat-heading-authoring.md new file mode 100644 index 00000000..439ec6d5 --- /dev/null +++ b/.changeset/neat-heading-authoring.md @@ -0,0 +1,5 @@ +--- +"@ankhorage/zora": patch +--- + +Classify Heading content and semantics for instance authoring while keeping visual presentation under component theme authority. From 84e0818de82d1ddcc173eb4dda6dbd7453234435 Mon Sep 17 00:00:00 2001 From: Fabio Gartenmann <137318798+artiphishle@users.noreply.github.com> Date: Thu, 6 Aug 2026 02:24:13 +0200 Subject: [PATCH 5/6] chore: validate Heading authoring metadata --- .../validate-adm3-heading-authoring.yml | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 .github/workflows/validate-adm3-heading-authoring.yml diff --git a/.github/workflows/validate-adm3-heading-authoring.yml b/.github/workflows/validate-adm3-heading-authoring.yml new file mode 100644 index 00000000..9fa11a57 --- /dev/null +++ b/.github/workflows/validate-adm3-heading-authoring.yml @@ -0,0 +1,75 @@ +name: Validate ADM 3 Heading authoring + +on: + push: + branches: + - agent/adm-3-heading-authoring-metadata + +permissions: + contents: write + +concurrency: + group: adm-3-heading-authoring-metadata + cancel-in-progress: false + +jobs: + validate: + if: github.actor != 'github-actions[bot]' + runs-on: ubuntu-latest + + steps: + - name: Checkout branch + uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: agent/adm-3-heading-authoring-metadata + + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + with: + bun-version: '1.3.13' + + - name: Install dependencies + run: bun install --frozen-lockfile + + - name: Regenerate and format + run: | + bun run lint:fix + bun run docs + bun run format + + - name: Build + run: bun run build + + - name: Validate repository + run: bunx @ankhorage/ankh doctor validate . + + - name: Lint + run: bun run lint + + - name: Format check + run: bun run format:check + + - name: Knip + run: bun run knip + + - name: Tests + run: bun run test + + - name: Typecheck + run: bun run typecheck + + - name: Changeset status + run: bun run changeset:status + + - name: Package smoke + run: npm pack --dry-run + + - name: Commit validated implementation + run: | + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git rm .github/workflows/validate-adm3-heading-authoring.yml + git add -A + git commit -m "feat: classify Heading authoring metadata" + git push origin HEAD:agent/adm-3-heading-authoring-metadata From 48d63e2a5a35bc38285a0617c28729453ce57bfa Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 6 Aug 2026 00:25:40 +0000 Subject: [PATCH 6/6] feat: classify Heading authoring metadata --- .changeset/neat-heading-authoring.md | 2 +- .../validate-adm3-heading-authoring.yml | 75 ------------------- README.md | 2 +- paradox/badges/npm.svg | 6 +- paradox/paradox.json | 2 +- 5 files changed, 6 insertions(+), 81 deletions(-) delete mode 100644 .github/workflows/validate-adm3-heading-authoring.yml diff --git a/.changeset/neat-heading-authoring.md b/.changeset/neat-heading-authoring.md index 439ec6d5..242d7c63 100644 --- a/.changeset/neat-heading-authoring.md +++ b/.changeset/neat-heading-authoring.md @@ -1,5 +1,5 @@ --- -"@ankhorage/zora": patch +'@ankhorage/zora': patch --- Classify Heading content and semantics for instance authoring while keeping visual presentation under component theme authority. diff --git a/.github/workflows/validate-adm3-heading-authoring.yml b/.github/workflows/validate-adm3-heading-authoring.yml deleted file mode 100644 index 9fa11a57..00000000 --- a/.github/workflows/validate-adm3-heading-authoring.yml +++ /dev/null @@ -1,75 +0,0 @@ -name: Validate ADM 3 Heading authoring - -on: - push: - branches: - - agent/adm-3-heading-authoring-metadata - -permissions: - contents: write - -concurrency: - group: adm-3-heading-authoring-metadata - cancel-in-progress: false - -jobs: - validate: - if: github.actor != 'github-actions[bot]' - runs-on: ubuntu-latest - - steps: - - name: Checkout branch - uses: actions/checkout@v4 - with: - fetch-depth: 0 - ref: agent/adm-3-heading-authoring-metadata - - - name: Setup Bun - uses: oven-sh/setup-bun@v2 - with: - bun-version: '1.3.13' - - - name: Install dependencies - run: bun install --frozen-lockfile - - - name: Regenerate and format - run: | - bun run lint:fix - bun run docs - bun run format - - - name: Build - run: bun run build - - - name: Validate repository - run: bunx @ankhorage/ankh doctor validate . - - - name: Lint - run: bun run lint - - - name: Format check - run: bun run format:check - - - name: Knip - run: bun run knip - - - name: Tests - run: bun run test - - - name: Typecheck - run: bun run typecheck - - - name: Changeset status - run: bun run changeset:status - - - name: Package smoke - run: npm pack --dry-run - - - name: Commit validated implementation - run: | - git config user.name "github-actions[bot]" - git config user.email "41898282+github-actions[bot]@users.noreply.github.com" - git rm .github/workflows/validate-adm3-heading-authoring.yml - git add -A - git commit -m "feat: classify Heading authoring metadata" - git push origin HEAD:agent/adm-3-heading-authoring-metadata diff --git a/README.md b/README.md index b609af4c..8b142916 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ # ZORA -![license: MIT](././paradox/badges/license.svg) ![npm: v2.9.1](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg) +![license: MIT](././paradox/badges/license.svg) ![npm: v2.9.2](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg) Opinionated React Native and React Native Web UI kit built on @ankhorage/surface. diff --git a/paradox/badges/npm.svg b/paradox/badges/npm.svg index 3cdfc3df..8b33561c 100644 --- a/paradox/badges/npm.svg +++ b/paradox/badges/npm.svg @@ -1,7 +1,7 @@ - -npm: v2.9.1 + +npm: v2.9.2 npm -v2.9.1 +v2.9.2 diff --git a/paradox/paradox.json b/paradox/paradox.json index e1352efc..363323af 100644 --- a/paradox/paradox.json +++ b/paradox/paradox.json @@ -12,7 +12,7 @@ { "id": "npm", "label": "npm", - "value": "v2.9.1", + "value": "v2.9.2", "color": "cb3837" }, {