@3fn/core 14.0.0 → 14.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/.kiro/steering/Civitas-System-Overview.md +3 -12
  2. package/.kiro/steering/Spec-Feedback-Protocol.md +2 -11
  3. package/.kiro/steering/Task-Completion-Protocol.md +7 -7
  4. package/.kiro/steering/start-up-tasks.md +4 -4
  5. package/dist/ComponentTokens.android.kt +12 -12
  6. package/dist/ComponentTokens.ios.swift +12 -12
  7. package/dist/ComponentTokens.web.css +3 -3
  8. package/dist/DesignTokens.android.kt +1 -1
  9. package/dist/DesignTokens.dtcg.json +2 -2
  10. package/dist/DesignTokens.ios.swift +1 -1
  11. package/dist/DesignTokens.web.css +1 -1
  12. package/dist/android/DesignTokens.android.kt +1 -1
  13. package/dist/browser/designerpunk.esm.js +14 -9
  14. package/dist/browser/designerpunk.esm.min.js +7 -7
  15. package/dist/browser/designerpunk.umd.js +14 -9
  16. package/dist/browser/designerpunk.umd.min.js +12 -12
  17. package/dist/browser/tokens.css +3 -3
  18. package/dist/build/tokens/defineComponentTokens.d.ts +10 -0
  19. package/dist/build/tokens/defineComponentTokens.js +26 -0
  20. package/dist/components/core/Avatar-Base/avatar.tokens.d.ts +21 -26
  21. package/dist/components/core/Avatar-Base/avatar.tokens.js +31 -34
  22. package/dist/components/core/Avatar-Base/index.d.ts +1 -1
  23. package/dist/components/core/Avatar-Base/index.js +2 -2
  24. package/dist/components/core/Button-Icon/buttonIcon.tokens.d.ts +28 -14
  25. package/dist/components/core/Button-Icon/buttonIcon.tokens.js +35 -20
  26. package/dist/generators/TokenFileGenerator.js +7 -2
  27. package/dist/ios/DesignTokens.ios.swift +1 -1
  28. package/dist/tokens/component/progress.d.ts +65 -5
  29. package/dist/tokens/component/progress.js +79 -18
  30. package/dist/types/generated/TokenTypes.d.ts +1 -1
  31. package/dist/types/generated/TokenTypes.js +1 -1
  32. package/dist/web/DesignTokens.web.css +1 -1
  33. package/governance/BUILD-SYSTEM-SETUP.md +1 -2
  34. package/governance/Component-Development-Guide.md +1 -1
  35. package/governance/Component-Development-Standards.md +19 -18
  36. package/governance/Component-Family-Avatar.md +6 -6
  37. package/governance/Component-Family-Badge.md +19 -19
  38. package/governance/Component-Family-Button.md +26 -26
  39. package/governance/Component-Family-Chip.md +14 -14
  40. package/governance/Component-Family-Container.md +12 -12
  41. package/governance/Component-Family-Form-Inputs.md +61 -61
  42. package/governance/Component-Family-Icon.md +8 -8
  43. package/governance/Component-Family-Navigation.md +1 -1
  44. package/governance/Component-Inheritance-Structures.md +29 -28
  45. package/governance/Component-Readiness-Status.md +6 -7
  46. package/governance/Component-Templates.md +26 -26
  47. package/governance/Contract-System-Reference.md +1 -1
  48. package/governance/Process-Development-Workflow.md +4 -4
  49. package/governance/Process-File-Organization.md +1 -4
  50. package/governance/Process-Hook-Operations.md +6 -7
  51. package/governance/Process-Spec-Planning.md +8 -14
  52. package/governance/Rosetta-System-Architecture.md +7 -5
  53. package/governance/Token-Quick-Reference.md +35 -22
  54. package/governance/Web-Authoring-Standards.md +1 -1
  55. package/governance/classification-map.md +109 -3
  56. package/governance/completion-documentation-guide.md +14 -31
  57. package/governance/platform-implementation-guidelines.md +1 -2
  58. package/governance/release-management-system.md +28 -63
  59. package/package.json +2 -6
  60. package/src/build/tokens/__tests__/defineComponentTokens.test.ts +113 -0
  61. package/src/build/tokens/defineComponentTokens.ts +43 -1
  62. package/src/components/core/Avatar-Base/avatar.tokens.ts +31 -34
  63. package/src/components/core/Avatar-Base/index.ts +1 -1
  64. package/src/components/core/Button-Icon/buttonIcon.tokens.ts +43 -27
  65. package/src/generators/TokenFileGenerator.ts +7 -2
  66. package/src/tokens/__tests__/ProgressTokenCompliance.test.ts +5 -3
  67. package/src/tokens/__tests__/ProgressTokenFormulas.test.ts +11 -11
  68. package/src/tokens/__tests__/ProgressTokenTranslation.test.ts +22 -20
  69. package/src/tokens/component/progress.ts +83 -21
  70. package/src/types/generated/TokenTypes.ts +1 -1
  71. package/token-index/components.yaml +8 -8
  72. package/src/tools/release/__tests__/ChangeClassifier.test.ts +0 -133
  73. package/src/tools/release/__tests__/ChangeExtractor.test.ts +0 -222
  74. package/src/tools/release/__tests__/GitHubPublisher.test.ts +0 -240
  75. package/src/tools/release/__tests__/NotesRenderer.test.ts +0 -142
  76. package/src/tools/release/__tests__/NpmPublisher.test.ts +0 -289
  77. package/src/tools/release/__tests__/PipelineIntegration.test.ts +0 -188
  78. package/src/tools/release/__tests__/ReleasePipeline.test.ts +0 -192
  79. package/src/tools/release/__tests__/SemanticVersionValidator.test.ts +0 -49
  80. package/src/tools/release/__tests__/SummaryScanner.test.ts +0 -141
  81. package/src/tools/release/__tests__/TagResolver.test.ts +0 -91
  82. package/src/tools/release/__tests__/VersionCalculator.test.ts +0 -270
  83. package/src/tools/release/__tests__/helpers/NpmMockHelper.ts +0 -80
  84. package/src/tools/release/cli/ReleasePipeline.ts +0 -165
  85. package/src/tools/release/cli/release-tool.ts +0 -107
  86. package/src/tools/release/pipeline/ChangeClassifier.ts +0 -61
  87. package/src/tools/release/pipeline/ChangeExtractor.ts +0 -87
  88. package/src/tools/release/pipeline/NotesRenderer.ts +0 -66
  89. package/src/tools/release/pipeline/SummaryScanner.ts +0 -70
  90. package/src/tools/release/pipeline/TagResolver.ts +0 -40
  91. package/src/tools/release/pipeline/VersionCalculator.ts +0 -375
  92. package/src/tools/release/publishers/GitHubPublisher.ts +0 -228
  93. package/src/tools/release/publishers/NpmPublisher.ts +0 -196
  94. package/src/tools/release/release-config.json +0 -5
  95. package/src/tools/release/types/index.ts +0 -282
  96. package/src/tools/release/validators/SemanticVersionValidator.ts +0 -67
@@ -120,15 +120,6 @@ The three systems form a complete design system ecosystem: Rosetta defines the v
120
120
 
121
121
  ---
122
122
 
123
- ## MCP Query
124
-
125
- For the full document:
126
- ```
127
- get_document_full({ path: "civitas-system-overview" })
128
- ```
129
-
130
- For specific sections:
131
- ```
132
- get_section({ path: "civitas-system-overview", heading: "The Three-Layer Boundary" })
133
- get_section({ path: "civitas-system-overview", heading: "Relationship to Rosetta and Stemma" })
134
- ```
123
+ ## Document Access
124
+
125
+ This is an identity doc (Spec 119) — never MCP-served, always loaded in full into every agent's context. No query is needed to access it. If you need to point to a specific part of it, use an in-document § reference (e.g., this doc's § "The Three-Layer Boundary" or § "Relationship to Rosetta and Stemma"), not an MCP call.
@@ -228,15 +228,6 @@ The feedback document uses this structure:
228
228
 
229
229
  ---
230
230
 
231
- ## MCP Query
231
+ ## Document Access
232
232
 
233
- For the full protocol:
234
- ```
235
- get_document_full({ path: "spec-feedback-protocol" })
236
- ```
237
-
238
- For specific sections:
239
- ```
240
- get_section({ path: "spec-feedback-protocol", heading: "Stamp Format" })
241
- get_section({ path: "spec-feedback-protocol", heading: "Mandatory @ Mention Scanning" })
242
- ```
233
+ This is an identity doc (Spec 119) — never MCP-served, always loaded in full into every agent's context. No query is needed to access it. If you need to point to a specific part of it, use an in-document § reference (e.g., this doc's § "Stamp Format" or § "Mandatory @ Mention Scanning"), not an MCP call.
@@ -8,7 +8,7 @@ description: Operational law for ending a task — when to write completion docs
8
8
  # Task Completion Protocol
9
9
 
10
10
  **Date**: 2026-06-29
11
- **Last Reviewed**: 2026-07-14
11
+ **Last Reviewed**: 2026-08-12
12
12
  **Purpose**: The end-of-task operational sequence (completion docs, tiers, parent vs. subtask, stop-and-wait, PR flow) — operational law, always loaded
13
13
  **Organization**: process-standard
14
14
  **Scope**: cross-project
@@ -37,7 +37,7 @@ get_section({ path: "completion-documentation-guide", heading: "Documentation Ti
37
37
  1. [ ] Run targeted tests relevant to the change (not the full suite)
38
38
  2. [ ] Create completion doc: `.kiro/specs/[spec]/completion/task-N-M-completion.md`
39
39
  3. [ ] Mark subtask complete (use the `taskStatus` tool)
40
- 4. [ ] **Commit is optional and judgment-based — not mechanical per subtask.** When you commit, **commit AND push the unit branch** (`task/<spec>-<unit-slug>` or `task/<spec>-<N>-<slug>`, created at the first subtask — `git switch -c` or the completion tooling's equivalent); the two stay coupled because the push is the off-machine backup guarantee (a local-only commit is not backed up). Commit-and-push at a **checkpoint** (delicate or potentially-breaking work — a restore point worth having), when **backup-worthy work has accumulated** (a unit branch is longer-lived than a single task, so more unpushed work sits at risk between merges — push before the pile grows), or at a **session/handoff boundary**. Do NOT commit mechanically after every trivial subtask — the unit squash-merges anyway, so subtask granularity is cosmetic to `main`'s history. No PR opens and no required checks fire until unit completion. Subtasks do NOT open PRs. Never commit to `main`.
40
+ 4. [ ] **Commit is optional and judgment-based — not mechanical per subtask.** When you commit, **commit AND push the unit branch** (`task/<spec>-<unit-slug>` or `task/<spec>-<N>-<slug>`, created at the first subtask — `git switch -c` or the completion tooling's equivalent); the two stay coupled because the push is the off-machine backup guarantee (a local-only commit is not backed up). Commit-and-push at a **checkpoint** (delicate or potentially-breaking work — a restore point worth having), when **backup-worthy work has accumulated** (a unit branch is longer-lived than a single task, so more unpushed work sits at risk between merges — push before the pile grows), or at a **session/handoff boundary**. Do NOT commit mechanically after every trivial subtask — the unit squash-merges anyway, so subtask granularity is cosmetic to `main`'s history. No PR opens and no required checks fire until unit completion. Subtasks do NOT open PRs.
41
41
  5. [ ] **STOP** and wait for user authorization
42
42
 
43
43
  ### For PARENT TASKS (Implementation or Architecture type)
@@ -48,7 +48,7 @@ get_section({ path: "completion-documentation-guide", heading: "Documentation Ti
48
48
  5. [ ] Complete the parent on its unit branch: `./.kiro/hooks/complete-task.sh "..."`.
49
49
  - **If this parent IS its own merge unit** (a standalone task, or a small single-unit spec): the tooling opens the PR and reports the URL.
50
50
  - **If this parent is one of several in a declared multi-parent unit** (see the spec's tasks.md unit grouping): the tooling commits the completion+summary docs on the branch — **no PR yet**. The PR opens when the UNIT completes (its final/gating parent).
51
- 6. [ ] **STOP** — if a PR opened, report the PR URL; otherwise report the on-branch parent completion. **The task is accepted when Peter merges the UNIT's PR** (merge on green = the authorization act). Never merge your own PR; never push to `main`.
51
+ 6. [ ] **STOP** — if a PR opened, report the PR URL; otherwise report the on-branch parent completion. **The task is accepted when Peter merges the UNIT's PR** (merge on green = the authorization act). Never merge your own PR.
52
52
 
53
53
  ### For PARENT TASKS (Setup or Documentation type)
54
54
  1. [ ] Verify artifacts created/updated as specified
@@ -58,7 +58,7 @@ get_section({ path: "completion-documentation-guide", heading: "Documentation Ti
58
58
  5. [ ] Complete the parent on its unit branch: `./.kiro/hooks/complete-task.sh "..."`.
59
59
  - **If this parent IS its own merge unit**: the tooling opens the PR and reports the URL.
60
60
  - **If this parent is one of several in a declared multi-parent unit** (spec's tasks.md unit grouping): the tooling commits the completion+summary docs on the branch — **no PR yet**; the PR opens at UNIT completion.
61
- 6. [ ] **STOP** — if a PR opened, report the PR URL; otherwise report the on-branch parent completion. **The task is accepted when Peter merges the UNIT's PR** (merge on green = the authorization act). Never merge your own PR; never push to `main`.
61
+ 6. [ ] **STOP** — if a PR opened, report the PR URL; otherwise report the on-branch parent completion. **The task is accepted when Peter merges the UNIT's PR** (merge on green = the authorization act). Never merge your own PR.
62
62
 
63
63
  ---
64
64
 
@@ -77,7 +77,7 @@ Branch → PR → required checks → merge.
77
77
  3. **Dependent tasks branch from `main` after the prior task's PR merges.** Starting a dependent task before the prior merge is not sanctioned by default — this composes with stop-and-wait (Peter's go for the next task typically follows his merge of the prior one), so the wait costs nothing in practice. Exception, only on Peter's explicit direction: branch from the prior task branch and declare `Stacked-on: #<PR>` in the PR body; stacked PRs merge in base-first order.
78
78
  4. At **unit** completion (a standalone task, a small single-unit spec, or the final/gating parent of a declared multi-parent unit), the tooling commits, pushes the branch, **opens a PR**, and reports the PR URL. A parent completing *inside* a multi-parent unit commits its completion+summary docs on the branch and does NOT open a PR — its acceptance is the unit's merge.
79
79
  5. Required checks run on the PR. A failing check blocks merge at the platform.
80
- 6. **Peter merges on green** (see The Merge Rule below). **Squash-merge is the ONLY merge method** — the repository is configured to allow squash-merge only (method drift closed by configuration, not convention). The PR collapses to one commit on `main`, preserving the atomic-commit-per-task history the release tool scans; the PR title becomes the commit subject.
80
+ 6. **Peter merges on green** (see The Merge Rule below). The repository is configured **squash-merge-only** (method drift closed by configuration, not convention). The PR collapses to one commit on `main`, preserving the atomic-commit-per-unit history that serves as the release changelog spine; the PR title becomes the commit subject.
81
81
  7. Direct pushes to `main` are rejected by branch protection, **admins included**.
82
82
 
83
83
  **A task is complete at MERGE, not at PR-open.** The PR is the submission; the merge is the acceptance.
@@ -121,7 +121,7 @@ Branch → PR → required checks → merge.
121
121
 
122
122
  ### The Merge Rule
123
123
 
124
- - **Agents open PRs; Peter merges on green** during bake-in (Spec 125-A Task 5's gate). Agents NEVER merge their own PRs and NEVER push to `main`.
124
+ - **Agents open PRs; Peter merges on green** during bake-in (Spec 125-A Task 5's gate). Agents NEVER merge their own PRs.
125
125
  - Any later **delegation of merge-on-green must be a recorded rule** (ballot or committed record with date and scope) — never a verbal grant. The relayed-authority lesson: authority is a record.
126
126
  - **Standing carve-out, surviving any delegation**: PRs touching governance law (`governance/**`, `.kiro/steering/**`, `.kiro/docs/ballots/**`, agent prompts/configs) stay Peter-merged — the closest ratification proxy until 125-B's CODEOWNERS layer.
127
127
 
@@ -148,7 +148,7 @@ When the gate must be bypassed (broken gate, urgent fix the checks themselves bl
148
148
  - **All tasks**: STOP after completion — never auto-proceed to the next task. Authorization to START the next task is governed by Start Up Tasks; the merge that completes this task is not that authorization.
149
149
  - **Parent vs. subtask** is the load-bearing distinction: subtasks get targeted tests + a completion doc + an **optional, judgment-based** branch commit-and-push (at a checkpoint, on backup-worthy accumulation, or at a session/handoff boundary — not mechanically per subtask); parents get full validation + completion doc + summary doc, committed on the branch.
150
150
  - **The merge unit is the coherent unit** — the smallest chunk that is coherent-on-its-own AND reviewable as a single diff, DECLARED in the spec's tasks.md (a small spec = one unit = one PR; a large spec declares internal units). The unit's completion opens the PR; a parent inside a multi-parent unit is done-on-branch, accepted at the unit's merge.
151
- - **A task is accepted at the MERGE of its unit.** Agents open PRs at unit completion; Peter merges on green. Never merge your own PR; never push to `main` (branch protection rejects it, admins included).
151
+ - **A task is accepted at the MERGE of its unit.** Agents open PRs at unit completion; Peter merges on green. Never merge your own PR. Pushes to `main` are rejected by branch protection (admins included).
152
152
  - **On merge, the unit's branch is cleaned up** — remote auto-deleted by repo setting; local deleted on return to `main`; stale/unmerged branches swept in the monthly Civitas health check.
153
153
  - **A checks-only merge is NOT ratification**: governance-law changes still ratify via the record-first ballot protocol (`.kiro/docs/ballots/README.md`).
154
154
  - **Delegated-tier capture (exception-based)**: if the agent/model that actually did the work **diverged** from the task's planned `**Agent**: <agent> (<Model>)` — a different tier, or additional agents pulled in — record the delta and a one-line reason in the completion doc. A plan that held needs no note. This is a cheap data-point, **not** a justification to defend (overriding a stale or rote stamp is the *correct* move) — it feeds model-tier recalibration and process audits. Agent-evolution (routing/scope estimate was off) and model-evolution (cognitive-demand estimate was off) are distinct signals — note which. See `process-orchestration-model-selection`.
@@ -19,7 +19,7 @@ description: Essential pre-task checklist — date verification, governance heal
19
19
 
20
20
  2. **Civitas Governance Health Check**
21
21
 
22
- IF it's been >30 days since last governance health check **[2026-08-02]**, THEN flag: "Governance health check overdue — Thurgood (Civitas steward) should run the monthly health check before proceeding."
22
+ IF it's been >30 days since last governance health check **[2026-08-25]**, THEN flag: "Governance health check overdue — Thurgood (Civitas steward) should run the monthly health check before proceeding."
23
23
 
24
24
  *Only Thurgood runs the health check. All agents check the date and flag if overdue.*
25
25
 
@@ -83,7 +83,7 @@ description: Essential pre-task checklist — date verification, governance heal
83
83
 
84
84
  **WHEN validating parent task completion THEN:**
85
85
  - **Default**: Use `npm test` (comprehensive functional validation)
86
- - **If task modifies release tool or is performance-critical**: Use `npm run test:all` (adds the performance suites; the cost difference is now seconds, so when in doubt, run `test:all`)
86
+ - **If task is performance-critical**: Use `npm run test:all` (adds the performance suites; the cost difference is now seconds, so when in doubt, run `test:all`)
87
87
 
88
88
  **WHEN task involves performance changes THEN:**
89
89
  - Run BOTH `npm run test:performance` AND `npm run test:performance:isolated` (perf coverage is split across the two lanes), or simply `npm run test:all`
@@ -92,7 +92,7 @@ description: Essential pre-task checklist — date verification, governance heal
92
92
  **Decision tree:**
93
93
  ```
94
94
  Is this a parent task completion?
95
- ├─ YES → Does task modify release tool or performance systems?
95
+ ├─ YES → Does task modify performance systems?
96
96
  │ ├─ YES → npm run test:all (includes performance regression tests)
97
97
  │ └─ NO → npm test (comprehensive functional validation)
98
98
  └─ NO → Does task involve performance changes?
@@ -105,7 +105,7 @@ description: Essential pre-task checklist — date verification, governance heal
105
105
  - `npm run test:all` additionally runs the performance suites (seconds of extra cost, but wall-clock-sensitive — avoid under heavy machine load)
106
106
  - Most parent tasks only need functional validation
107
107
 
108
- **Default assumption**: Use `npm test` for parent tasks unless working on release tool or performance systems.
108
+ **Default assumption**: Use `npm test` for parent tasks unless working on performance systems.
109
109
 
110
110
  6. **Model-tier calibration — when this task will delegate to subagents**
111
111
 
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * DesignerPunk Design System - Component Tokens
3
- * Generated: 2026-08-12T03:23:17.012Z
3
+ * Generated: 2026-08-26T14:15:24.259Z
4
4
  * Version: 1.0.0
5
5
  * Platform: Android (Kotlin Constants)
6
6
  *
@@ -45,11 +45,11 @@ object ButtonIconTokens {
45
45
  // Small button variant uses 8px padding (1× base) for minimal footprint in dense UI layouts while meeting minimum touch target requirements
46
46
  val insetSmall = SpacingTokens.space100
47
47
  // Large button size (48px = 6× base) provides generous touch target exceeding tapAreaRecommended, calculated as icon (24px) + padding (12px × 2)
48
- val sizeLarge = SpacingTokens.size600
48
+ val sizeLarge = SizingTokens.size600
49
49
  // Medium button size (40px = 5× base) provides standard touch target, calculated as icon (18px) + padding (10px × 2) rounded to grid
50
- val sizeMedium = SpacingTokens.size500
50
+ val sizeMedium = SizingTokens.size500
51
51
  // Small button size (32px = 4× base) provides compact visual footprint, calculated as icon (13px) + padding (8px × 2) rounded to grid
52
- val sizeSmall = SpacingTokens.size400
52
+ val sizeSmall = SizingTokens.size400
53
53
  }
54
54
 
55
55
  /** InputCheckbox Component Tokens */
@@ -74,26 +74,26 @@ object InputRadioTokens {
74
74
 
75
75
  /** Progress Component Tokens */
76
76
  object ProgressTokens {
77
+ // Connector line thickness (1px). References borderDefault primitive for consistent border treatment across the design system.
78
+ val connectorThickness = BorderWidthTokens.borderWidth100
77
79
  // Small node base size (12px). Inactive dots in compact mobile contexts.
78
- val nodeSizeSm = SpacingTokens.size150
80
+ val nodeSizeSm = SizingTokens.size150
79
81
  // Medium node base size (16px). Default inactive dot size.
80
- val nodeSizeMd = SpacingTokens.size200
82
+ val nodeSizeMd = SizingTokens.size200
81
83
  // Large node base size (20px). Inactive dots in desktop contexts.
82
- val nodeSizeLg = SpacingTokens.size250
84
+ val nodeSizeLg = SizingTokens.size250
83
85
  // Current node emphasis for sm (16px). +4px over base 12px for non-color visual differentiation.
84
- val nodeSizeSmCurrent = SpacingTokens.size200
86
+ val nodeSizeSmCurrent = SizingTokens.size200
85
87
  // Current node emphasis for md (20px). +4px over base 16px for non-color visual differentiation.
86
- val nodeSizeMdCurrent = SpacingTokens.size250
88
+ val nodeSizeMdCurrent = SizingTokens.size250
87
89
  // Current node emphasis for lg (24px). +4px over base 20px for non-color visual differentiation.
88
- val nodeSizeLgCurrent = SpacingTokens.size300
90
+ val nodeSizeLgCurrent = SizingTokens.size300
89
91
  // Small gap between nodes (6px = 0.75× base). Tight spacing for compact pagination dots in mobile contexts.
90
92
  val nodeGapSm = SpacingTokens.space075
91
93
  // Medium gap between nodes (8px = 1× base). Default spacing for stepper nodes, providing clear separation without excessive whitespace.
92
94
  val nodeGapMd = SpacingTokens.space100
93
95
  // Large gap between nodes (12px = 1.5× base). Generous spacing for detailed steppers with labels in desktop contexts.
94
96
  val nodeGapLg = SpacingTokens.space150
95
- // Connector line thickness (1px). References borderDefault primitive for consistent border treatment across the design system.
96
- val connectorThickness = SpacingTokens.borderWidth100
97
97
  }
98
98
 
99
99
  /** VerticalListItem Component Tokens */
@@ -1,6 +1,6 @@
1
1
  ///
2
2
  /// DesignerPunk Design System - Component Tokens
3
- /// Generated: 2026-08-12T03:23:17.012Z
3
+ /// Generated: 2026-08-26T14:15:24.259Z
4
4
  /// Version: 1.0.0
5
5
  /// Platform: iOS (Swift Constants)
6
6
  ///
@@ -45,11 +45,11 @@ public enum ButtonIconTokens {
45
45
  /// Small button variant uses 8px padding (1× base) for minimal footprint in dense UI layouts while meeting minimum touch target requirements
46
46
  public static let insetSmall: CGFloat = SpacingTokens.space100
47
47
  /// Large button size (48px = 6× base) provides generous touch target exceeding tapAreaRecommended, calculated as icon (24px) + padding (12px × 2)
48
- public static let sizeLarge: CGFloat = SpacingTokens.size600
48
+ public static let sizeLarge: CGFloat = SizingTokens.size600
49
49
  /// Medium button size (40px = 5× base) provides standard touch target, calculated as icon (18px) + padding (10px × 2) rounded to grid
50
- public static let sizeMedium: CGFloat = SpacingTokens.size500
50
+ public static let sizeMedium: CGFloat = SizingTokens.size500
51
51
  /// Small button size (32px = 4× base) provides compact visual footprint, calculated as icon (13px) + padding (8px × 2) rounded to grid
52
- public static let sizeSmall: CGFloat = SpacingTokens.size400
52
+ public static let sizeSmall: CGFloat = SizingTokens.size400
53
53
  }
54
54
 
55
55
  /// InputCheckbox Component Tokens
@@ -74,26 +74,26 @@ public enum InputRadioTokens {
74
74
 
75
75
  /// Progress Component Tokens
76
76
  public enum ProgressTokens {
77
+ /// Connector line thickness (1px). References borderDefault primitive for consistent border treatment across the design system.
78
+ public static let connectorThickness: CGFloat = BorderWidthTokens.borderWidth100
77
79
  /// Small node base size (12px). Inactive dots in compact mobile contexts.
78
- public static let nodeSizeSm: CGFloat = SpacingTokens.size150
80
+ public static let nodeSizeSm: CGFloat = SizingTokens.size150
79
81
  /// Medium node base size (16px). Default inactive dot size.
80
- public static let nodeSizeMd: CGFloat = SpacingTokens.size200
82
+ public static let nodeSizeMd: CGFloat = SizingTokens.size200
81
83
  /// Large node base size (20px). Inactive dots in desktop contexts.
82
- public static let nodeSizeLg: CGFloat = SpacingTokens.size250
84
+ public static let nodeSizeLg: CGFloat = SizingTokens.size250
83
85
  /// Current node emphasis for sm (16px). +4px over base 12px for non-color visual differentiation.
84
- public static let nodeSizeSmCurrent: CGFloat = SpacingTokens.size200
86
+ public static let nodeSizeSmCurrent: CGFloat = SizingTokens.size200
85
87
  /// Current node emphasis for md (20px). +4px over base 16px for non-color visual differentiation.
86
- public static let nodeSizeMdCurrent: CGFloat = SpacingTokens.size250
88
+ public static let nodeSizeMdCurrent: CGFloat = SizingTokens.size250
87
89
  /// Current node emphasis for lg (24px). +4px over base 20px for non-color visual differentiation.
88
- public static let nodeSizeLgCurrent: CGFloat = SpacingTokens.size300
90
+ public static let nodeSizeLgCurrent: CGFloat = SizingTokens.size300
89
91
  /// Small gap between nodes (6px = 0.75× base). Tight spacing for compact pagination dots in mobile contexts.
90
92
  public static let nodeGapSm: CGFloat = SpacingTokens.space075
91
93
  /// Medium gap between nodes (8px = 1× base). Default spacing for stepper nodes, providing clear separation without excessive whitespace.
92
94
  public static let nodeGapMd: CGFloat = SpacingTokens.space100
93
95
  /// Large gap between nodes (12px = 1.5× base). Generous spacing for detailed steppers with labels in desktop contexts.
94
96
  public static let nodeGapLg: CGFloat = SpacingTokens.space150
95
- /// Connector line thickness (1px). References borderDefault primitive for consistent border treatment across the design system.
96
- public static let connectorThickness: CGFloat = SpacingTokens.borderWidth100
97
97
  }
98
98
 
99
99
  /// VerticalListItem Component Tokens
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * DesignerPunk Design System - Component Tokens
3
- * Generated: 2026-08-12T03:23:17.012Z
3
+ * Generated: 2026-08-26T14:15:24.259Z
4
4
  * Version: 1.0.0
5
5
  * Platform: Web (CSS Custom Properties)
6
6
  *
@@ -63,6 +63,8 @@
63
63
  --inputradio-box-lg: var(--size-500);
64
64
 
65
65
  /* Progress Component Tokens */
66
+ /* Connector line thickness (1px). References borderDefault primitive for consistent border treatment across the design system. */
67
+ --progress-connector-thickness: var(--border-width-100);
66
68
  /* Small node base size (12px). Inactive dots in compact mobile contexts. */
67
69
  --progress-node-size-sm: var(--size-150);
68
70
  /* Medium node base size (16px). Default inactive dot size. */
@@ -81,8 +83,6 @@
81
83
  --progress-node-gap-md: var(--space-100);
82
84
  /* Large gap between nodes (12px = 1.5× base). Generous spacing for detailed steppers with labels in desktop contexts. */
83
85
  --progress-node-gap-lg: var(--space-150);
84
- /* Connector line thickness (1px). References borderDefault primitive for consistent border treatment across the design system. */
85
- --progress-connector-thickness: var(--border-width-100);
86
86
 
87
87
  /* VerticalListItem Component Tokens */
88
88
  /* Block padding at rest state (1px border). 11px padding + 1px border = 12px per side, achieving 48px total with 24px content. Uses TokenWithValue pattern as no primitive token exists for 11px. */
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * DesignerPunk Design System - Android Tokens
3
- * Generated: 2026-08-12T03:23:16.999Z
3
+ * Generated: 2026-08-26T14:15:24.246Z
4
4
  * Version: 1.0.0
5
5
  * Platform: Android (Kotlin Constants)
6
6
  */
@@ -3,8 +3,8 @@
3
3
  "$extensions": {
4
4
  "designerpunk": {
5
5
  "version": "1.0.0",
6
- "generatedAt": "2026-08-12T03:23:17.012Z",
7
- "rosettaVersion": "14.0.0"
6
+ "generatedAt": "2026-08-26T14:15:24.259Z",
7
+ "rosettaVersion": "14.1.0"
8
8
  }
9
9
  },
10
10
  "space": {
@@ -1,6 +1,6 @@
1
1
  ///
2
2
  /// DesignerPunk Design System - iOS Tokens
3
- /// Generated: 2026-08-12T03:23:16.997Z
3
+ /// Generated: 2026-08-26T14:15:24.243Z
4
4
  /// Version: 1.0.0
5
5
  /// Platform: iOS (Swift Constants)
6
6
  ///
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * DesignerPunk Design System - Web Tokens
3
- * Generated: 2026-08-12T03:23:16.987Z
3
+ * Generated: 2026-08-26T14:15:24.233Z
4
4
  * Version: 1.0.0
5
5
  * Platform: Web (CSS Custom Properties)
6
6
  *
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * DesignerPunk Design System - Android Tokens
3
- * Generated: 2026-08-02T19:49:06.784Z
3
+ * Generated: 2026-08-26T02:25:48.217Z
4
4
  * Version: 1.0.0
5
5
  * Platform: Android (Kotlin Constants)
6
6
  */
@@ -4830,6 +4830,11 @@ function defineComponentTokens(config) {
4830
4830
  const tokenName = `${component.toLowerCase()}.${key}`;
4831
4831
  if (isTokenWithReference(definition)) {
4832
4832
  const primitiveToken = definition.reference;
4833
+ if (typeof primitiveToken.category === "string" && primitiveToken.category !== family) {
4834
+ throw new Error(
4835
+ `Token family mismatch in defineComponentTokens() for component '${component}': token '${key}' is declared in a '${family}' family call but references primitive '${primitiveToken.name}' from the '${primitiveToken.category}' family. Every token in a call is stamped with that call's family, which drives platform output (e.g. the generated '${family.charAt(0).toUpperCase() + family.slice(1)}Tokens' class reference), so this would emit a non-existent platform member. Fix: move '${key}' into a separate defineComponentTokens() call with family: '${primitiveToken.category}', or use the value path if no token-chain relationship is intended.`
4836
+ );
4837
+ }
4833
4838
  const value = primitiveToken.baseValue;
4834
4839
  values[key] = value;
4835
4840
  registeredTokens.push({
@@ -7916,15 +7921,15 @@ var AvatarSizingTokens = defineComponentTokens({
7916
7921
  "size.xxl": {
7917
7922
  reference: sizingTokens.size1600,
7918
7923
  reasoning: "Extra extra large avatar (128px). Full profile view, onboarding."
7919
- }
7920
- }
7921
- });
7922
- var AvatarTokens = defineComponentTokens({
7923
- component: "Avatar",
7924
- family: "spacing",
7925
- tokens: {
7926
- // Icon size tokens (gap fillers for sizes without existing icon tokens)
7927
- // These fill gaps where no standard icon token exists at the required 50% ratio
7924
+ },
7925
+ // Icon size tokens (gap fillers for sizes without an existing icon token).
7926
+ // Kept on the VALUE path deliberately: sizing primitives exist at both values
7927
+ // (size150 = 12, size800 = 64), but the reference path currently emits a
7928
+ // fabricated `SizingTokens.<name>` class on iOS/Android that no generated or
7929
+ // hand-written platform file defines. Switching these to `reference:` would
7930
+ // trade compiling output (`12.dp`) for non-compiling output and break
7931
+ // Avatar.android.kt's `val iconSizeXs: Dp = GeneratedAvatarTokens.iconSizeXs`.
7932
+ // Revisit once TokenFileGenerator.getFamilyClassName emits a real platform type.
7928
7933
  "icon.size.xs": {
7929
7934
  value: SIZING_BASE_VALUE * 1.5,
7930
7935
  reasoning: "Icon size for xs avatar (12px = 1.5\xD7 base) maintains 50% ratio (12/24). No existing icon token at this size, so component token fills the gap."