@mich8060/unified-design-system 0.2.14 → 0.2.16

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 (159) hide show
  1. package/dist/ai/discovery.json +14 -0
  2. package/dist/ai/examples/training.examples.cjs +1 -1
  3. package/dist/ai/examples/training.examples.js +1 -1
  4. package/dist/ai/figma-make.contract.json +190 -0
  5. package/dist/ai/figma-make.md +71 -0
  6. package/dist/ai/icons/catalog.json +76 -0
  7. package/dist/ai/index.cjs +1 -1
  8. package/dist/ai/index.js +1 -1
  9. package/dist/ai/manifest/components.manifest.cjs +1 -1
  10. package/dist/ai/manifest/components.manifest.js +1 -1
  11. package/dist/ai/manifest/index.cjs +1 -1
  12. package/dist/ai/manifest/index.js +1 -1
  13. package/dist/ai/manifest/intent-mappings.manifest.cjs +1 -0
  14. package/dist/ai/manifest/intent-mappings.manifest.js +1 -0
  15. package/dist/ai/manifest/system.manifest.cjs +1 -1
  16. package/dist/ai/manifest/system.manifest.js +1 -1
  17. package/dist/ai/manifest.json +366 -2
  18. package/dist/ai/policies/policy.engine.cjs +1 -1
  19. package/dist/ai/policies/policy.engine.js +1 -1
  20. package/dist/ai/policies/rules/props.rules.cjs +1 -1
  21. package/dist/ai/policies/rules/props.rules.js +1 -1
  22. package/dist/ai/policies/rules/tailwind.rules.cjs +1 -0
  23. package/dist/ai/policies/rules/tailwind.rules.js +1 -0
  24. package/dist/ai/policies/rules/token-variable.rules.cjs +1 -0
  25. package/dist/ai/policies/rules/token-variable.rules.js +1 -0
  26. package/dist/ai/prompts/figma-make.prompt.md +59 -0
  27. package/dist/ai/prompts/repair.prompt.md +13 -0
  28. package/dist/ai/prompts/starter.prompt.md +59 -0
  29. package/dist/ai/prompts/system.prompt.md +33 -0
  30. package/dist/ai/templates/layouts.json +272 -37
  31. package/dist/ai/validation/deterministicFeedback.cjs +1 -1
  32. package/dist/ai/validation/deterministicFeedback.js +1 -1
  33. package/dist/ai/validation/driftDetection.cjs +1 -1
  34. package/dist/ai/validation/driftDetection.js +1 -1
  35. package/dist/app-shell/AppShell.d.ts +8 -0
  36. package/dist/charts/BizChartsAdapters.cjs +1 -0
  37. package/dist/charts/BizChartsAdapters.js +1 -0
  38. package/dist/charts-bizcharts/index.cjs +1 -0
  39. package/dist/charts-bizcharts/index.js +1 -0
  40. package/dist/components/ButtonGroup/ButtonGroup.cjs +1 -0
  41. package/dist/components/ButtonGroup/ButtonGroup.js +1 -0
  42. package/dist/components/CheckboxGroup/CheckboxGroup.cjs +1 -0
  43. package/dist/components/CheckboxGroup/CheckboxGroup.js +1 -0
  44. package/dist/components/Checklist/Checklist.cjs +1 -0
  45. package/dist/components/Checklist/Checklist.js +1 -0
  46. package/dist/components/Chip/Chip.cjs +1 -1
  47. package/dist/components/Chip/Chip.js +1 -1
  48. package/dist/components/CurrencyInput/CurrencyInput.cjs +1 -0
  49. package/dist/components/CurrencyInput/CurrencyInput.js +1 -0
  50. package/dist/components/DateInput/DateInput.cjs +1 -0
  51. package/dist/components/DateInput/DateInput.js +1 -0
  52. package/dist/components/DateRangeInput/DateRangeInput.cjs +1 -0
  53. package/dist/components/DateRangeInput/DateRangeInput.js +1 -0
  54. package/dist/components/Icon/Icon.cjs +1 -1
  55. package/dist/components/Icon/Icon.js +1 -1
  56. package/dist/components/Menu/Menu.cjs +1 -1
  57. package/dist/components/Menu/Menu.js +1 -1
  58. package/dist/components/NumberInput/NumberInput.cjs +1 -0
  59. package/dist/components/NumberInput/NumberInput.js +1 -0
  60. package/dist/components/PasswordInput/PasswordInput.cjs +1 -0
  61. package/dist/components/PasswordInput/PasswordInput.js +1 -0
  62. package/dist/components/PhoneInput/PhoneInput.cjs +1 -0
  63. package/dist/components/PhoneInput/PhoneInput.js +1 -0
  64. package/dist/components/RadioGroup/RadioGroup.cjs +1 -0
  65. package/dist/components/RadioGroup/RadioGroup.js +1 -0
  66. package/dist/components/SearchInput/SearchInput.cjs +1 -0
  67. package/dist/components/SearchInput/SearchInput.js +1 -0
  68. package/dist/components/SectionHeader/SectionHeader.cjs +1 -0
  69. package/dist/components/SectionHeader/SectionHeader.js +1 -0
  70. package/dist/components/Statistics/Statistics.cjs +1 -0
  71. package/dist/components/Statistics/Statistics.js +1 -0
  72. package/dist/components/Status/Status.cjs +1 -1
  73. package/dist/components/Status/Status.js +1 -1
  74. package/dist/components/Table/Table.cjs +1 -1
  75. package/dist/components/Table/Table.js +1 -1
  76. package/dist/components/Tabs/Tabs.cjs +1 -1
  77. package/dist/components/Tabs/Tabs.js +1 -1
  78. package/dist/components/TimeInput/TimeInput.cjs +1 -0
  79. package/dist/components/TimeInput/TimeInput.js +1 -0
  80. package/dist/components/TokenInput/TokenInput.cjs +1 -0
  81. package/dist/components/TokenInput/TokenInput.js +1 -0
  82. package/dist/components/Toolbar/Toolbar.cjs +1 -0
  83. package/dist/components/Toolbar/Toolbar.js +1 -0
  84. package/dist/design-system/ai/index.d.ts +2 -1
  85. package/dist/design-system/ai/manifest/index.d.ts +1 -0
  86. package/dist/design-system/ai/manifest/intent-mappings.manifest.d.ts +63 -0
  87. package/dist/design-system/ai/manifest/types.d.ts +8 -0
  88. package/dist/design-system/ai/policies/rules/tailwind.rules.d.ts +2 -0
  89. package/dist/design-system/ai/policies/rules/token-variable.rules.d.ts +2 -0
  90. package/dist/design-system/charts/BizChartsAdapters.d.ts +40 -0
  91. package/dist/design-system/charts/index.d.ts +1 -0
  92. package/dist/design-system/components/ButtonGroup/ButtonGroup.d.ts +3 -0
  93. package/dist/design-system/components/ButtonGroup/ButtonGroup.types.d.ts +19 -0
  94. package/dist/design-system/components/ButtonGroup/index.d.ts +2 -0
  95. package/dist/design-system/components/CheckboxGroup/CheckboxGroup.d.ts +3 -0
  96. package/dist/design-system/components/CheckboxGroup/CheckboxGroup.types.d.ts +15 -0
  97. package/dist/design-system/components/CheckboxGroup/index.d.ts +2 -0
  98. package/dist/design-system/components/Checklist/Checklist.d.ts +3 -0
  99. package/dist/design-system/components/Checklist/Checklist.types.d.ts +13 -0
  100. package/dist/design-system/components/Checklist/index.d.ts +2 -0
  101. package/dist/design-system/components/Chip/Chip.d.ts +1 -1
  102. package/dist/design-system/components/Chip/Chip.types.d.ts +1 -1
  103. package/dist/design-system/components/CurrencyInput/CurrencyInput.d.ts +2 -0
  104. package/dist/design-system/components/CurrencyInput/CurrencyInput.types.d.ts +3 -0
  105. package/dist/design-system/components/CurrencyInput/index.d.ts +2 -0
  106. package/dist/design-system/components/DateInput/DateInput.d.ts +2 -0
  107. package/dist/design-system/components/DateInput/DateInput.types.d.ts +3 -0
  108. package/dist/design-system/components/DateInput/index.d.ts +2 -0
  109. package/dist/design-system/components/DateRangeInput/DateRangeInput.d.ts +3 -0
  110. package/dist/design-system/components/DateRangeInput/DateRangeInput.types.d.ts +15 -0
  111. package/dist/design-system/components/DateRangeInput/index.d.ts +2 -0
  112. package/dist/design-system/components/Menu/index.d.ts +3 -0
  113. package/dist/design-system/components/NumberInput/NumberInput.d.ts +3 -0
  114. package/dist/design-system/components/NumberInput/NumberInput.types.d.ts +2 -0
  115. package/dist/design-system/components/NumberInput/index.d.ts +2 -0
  116. package/dist/design-system/components/PasswordInput/PasswordInput.d.ts +2 -0
  117. package/dist/design-system/components/PasswordInput/PasswordInput.types.d.ts +5 -0
  118. package/dist/design-system/components/PasswordInput/index.d.ts +2 -0
  119. package/dist/design-system/components/PhoneInput/PhoneInput.d.ts +2 -0
  120. package/dist/design-system/components/PhoneInput/PhoneInput.types.d.ts +5 -0
  121. package/dist/design-system/components/PhoneInput/index.d.ts +2 -0
  122. package/dist/design-system/components/RadioGroup/RadioGroup.d.ts +3 -0
  123. package/dist/design-system/components/RadioGroup/RadioGroup.types.d.ts +16 -0
  124. package/dist/design-system/components/RadioGroup/index.d.ts +2 -0
  125. package/dist/design-system/components/SearchInput/SearchInput.d.ts +2 -0
  126. package/dist/design-system/components/SearchInput/SearchInput.types.d.ts +3 -0
  127. package/dist/design-system/components/SearchInput/index.d.ts +2 -0
  128. package/dist/design-system/components/SectionHeader/SectionHeader.d.ts +3 -0
  129. package/dist/design-system/components/SectionHeader/SectionHeader.types.d.ts +9 -0
  130. package/dist/design-system/components/SectionHeader/index.d.ts +2 -0
  131. package/dist/design-system/components/Statistics/Statistics.d.ts +3 -0
  132. package/dist/design-system/components/Statistics/Statistics.types.d.ts +18 -0
  133. package/dist/design-system/components/Statistics/index.d.ts +2 -0
  134. package/dist/design-system/components/Status/Status.types.d.ts +4 -2
  135. package/dist/design-system/components/Tabs/Tabs.d.ts +1 -1
  136. package/dist/design-system/components/Tabs/Tabs.types.d.ts +4 -1
  137. package/dist/design-system/components/TimeInput/TimeInput.d.ts +2 -0
  138. package/dist/design-system/components/TimeInput/TimeInput.types.d.ts +3 -0
  139. package/dist/design-system/components/TimeInput/index.d.ts +2 -0
  140. package/dist/design-system/components/Toggle/index.d.ts +2 -0
  141. package/dist/design-system/components/TokenInput/TokenInput.d.ts +4 -0
  142. package/dist/design-system/components/TokenInput/TokenInput.types.d.ts +17 -0
  143. package/dist/design-system/components/TokenInput/index.d.ts +3 -0
  144. package/dist/design-system/components/Toolbar/Toolbar.d.ts +3 -0
  145. package/dist/design-system/components/Toolbar/Toolbar.types.d.ts +8 -0
  146. package/dist/design-system/components/Toolbar/index.d.ts +2 -0
  147. package/dist/design-system/figma-make/index.d.ts +42 -0
  148. package/dist/design-system/generated/component-api.d.ts +477 -2
  149. package/dist/design-system/index.d.ts +17 -0
  150. package/dist/figma-make/index.cjs +1 -0
  151. package/dist/figma-make/index.js +1 -0
  152. package/dist/generated/component-api.cjs +1 -1
  153. package/dist/generated/component-api.js +1 -1
  154. package/dist/index.cjs +1 -1
  155. package/dist/index.js +1 -1
  156. package/dist/src/app-shell/AppShell.cjs +1 -1
  157. package/dist/src/app-shell/AppShell.js +1 -1
  158. package/dist/style.css +1 -1
  159. package/package.json +52 -2
@@ -0,0 +1,59 @@
1
+ Set up this repository from scratch so `@mich8060/unified-design-system` is used end-to-end with no Tailwind fallback.
2
+
3
+ Execution order:
4
+ 1. Install and verify toolchain.
5
+ 2. Build and validate AI contract artifacts.
6
+ 3. Implement UI using UDS components and tokens only.
7
+ 4. Ensure root layout uses `AppShell`.
8
+
9
+ Hard rules:
10
+ - Use package exports from `@mich8060/unified-design-system`.
11
+ - Never deep import component internals.
12
+ - Never use Tailwind classes/utilities.
13
+ - Never invent CSS variables. Use `--uds-*` tokens or hardcoded literals.
14
+ - Prefer canonical props from the AI manifest and component contracts.
15
+
16
+ Required layout scaffold:
17
+ - Root must be:
18
+ - `AppShell`
19
+ - `AppShell.Menu`
20
+ - `AppShell.Content`
21
+ - `AppShell.Main`
22
+ - Place route/page content in `AppShell.Main`.
23
+
24
+ Brand menu requirements:
25
+ - `comphealth`, `gms`, `weatherby`:
26
+ - Dashboard (`Layout`)
27
+ - Schedule (`CalendarBlank`)
28
+ - Job Board (`Briefcase`)
29
+ - Application (`NotePencil`)
30
+ - Documents (`FolderOpen`) -> Credentialing, Financial
31
+ - Time Entry (`Clock`)
32
+ - Travel (`Airplane`)
33
+ - `locumsmart`:
34
+ - Dashboard (`Layout`)
35
+ - Workflow (`FolderOpen`)
36
+ - CRM (`Users`)
37
+ - Analytics (`ChartBar`)
38
+ - Administration (`BuildingApartment`)
39
+ - `modio`:
40
+ - Dashboard (`Layout`)
41
+ - Reports (`FolderOpen`)
42
+ - Providers (`Users`)
43
+ - Facilities (`Buildings`)
44
+ - Payors (`Wallet`)
45
+ - Tracking (`GpsFix`)
46
+ - `connect`:
47
+ - Dashboard (`Layout`)
48
+ - Requests (`Briefcase`)
49
+ - Providers (`Users`)
50
+ - Calendar (`CalendarBlank`)
51
+ - Invoices (`Invoice`)
52
+ - Reporting (`ChartBar`)
53
+ - `wireframe`:
54
+ - Five placeholder links labeled `Menu Item`.
55
+
56
+ Output guidance:
57
+ - Return code that imports UDS components directly from package exports.
58
+ - Prefer `Flex`, `Container`, `Card`, `Text`, `Button`, `Menu`, `Toolbar`, `Statistics`, and `Checklist` where appropriate.
59
+ - Ensure no Tailwind tokens/classes appear anywhere in source.
@@ -0,0 +1,33 @@
1
+ You are generating UI JSON for `@mich8060/unified-design-system`.
2
+
3
+ Contract discovery order:
4
+ - `@mich8060/unified-design-system/ai/discovery.json`
5
+ - `@mich8060/unified-design-system/ai/manifest.json`
6
+ - `@mich8060/unified-design-system/ai/schema`
7
+ - `@mich8060/unified-design-system/ai/icons`
8
+ - `@mich8060/unified-design-system/ai/templates`
9
+
10
+ Hard constraints:
11
+ - Return JSON only.
12
+ - Use only components from `ai/manifest/components.manifest.ts`.
13
+ - Use spacing tokens from `ai/manifest/layout.manifest.ts`.
14
+ - Use semantic token intents from `ai/manifest/tokens.intent.manifest.ts`.
15
+ - Resolve UI intents using `ai/manifest/intent-mappings.manifest.ts` before freeform composition.
16
+ - Respect governance limits from `ai/manifest/governance.manifest.ts`.
17
+ - Use icon names from the icon catalog (`ai/icons/catalog.json`) when adding icons.
18
+ - Maximum one primary button per section.
19
+ - No raw HTML tags.
20
+ - No inline styles.
21
+ - Never create custom CSS variables (no `--brand-*`, `--foo-*`, etc.).
22
+ - Only use `--uds-*` variables (for example `--uds-spacing-16`, `var(--uds-text-primary)`) or hardcoded literal values.
23
+ - Never use deep component imports (`@/.../components/*`) in generated guidance/output.
24
+ - Reject non-UDS prop APIs (for example `Menu.items`, `Flex.vertical`, `Button.type`).
25
+
26
+ Output contract:
27
+ {
28
+ "manifestVersion": "...",
29
+ "governanceVersion": "...",
30
+ "policyVersion": "...",
31
+ "tree": {...},
32
+ "audit": {...}
33
+ }
@@ -5,7 +5,11 @@
5
5
  {
6
6
  "id": "auth-form-card",
7
7
  "intent": "Authentication form with one primary action and optional secondary action.",
8
- "tags": ["form", "auth", "card"],
8
+ "tags": [
9
+ "form",
10
+ "auth",
11
+ "card"
12
+ ],
9
13
  "slots": {
10
14
  "title": "Sign in",
11
15
  "subtitle": "Use your work account",
@@ -14,20 +18,66 @@
14
18
  },
15
19
  "tree": {
16
20
  "type": "Container",
17
- "props": { "gap": "--uds-spacing-24" },
21
+ "props": {
22
+ "gap": "--uds-spacing-24"
23
+ },
18
24
  "children": [
19
25
  {
20
26
  "type": "Card",
21
27
  "children": [
22
- { "type": "Text", "props": { "variant": "heading-24", "text": "{{title}}" } },
23
- { "type": "Text", "props": { "variant": "body-16", "text": "{{subtitle}}" } },
24
- { "type": "Field", "children": [{ "type": "TextInput", "props": { "type": "email" } }] },
25
- { "type": "Field", "children": [{ "type": "TextInput", "props": { "type": "password" } }] },
28
+ {
29
+ "type": "Text",
30
+ "props": {
31
+ "variant": "heading-24",
32
+ "text": "{{title}}"
33
+ }
34
+ },
35
+ {
36
+ "type": "Text",
37
+ "props": {
38
+ "variant": "body-16",
39
+ "text": "{{subtitle}}"
40
+ }
41
+ },
42
+ {
43
+ "type": "Field",
44
+ "children": [
45
+ {
46
+ "type": "TextInput",
47
+ "props": {
48
+ "type": "email"
49
+ }
50
+ }
51
+ ]
52
+ },
53
+ {
54
+ "type": "Field",
55
+ "children": [
56
+ {
57
+ "type": "TextInput",
58
+ "props": {
59
+ "type": "password"
60
+ }
61
+ }
62
+ ]
63
+ },
26
64
  {
27
65
  "type": "Flex",
28
66
  "children": [
29
- { "type": "Button", "props": { "appearance": "primary", "label": "{{primaryActionLabel}}" } },
30
- { "type": "Button", "props": { "appearance": "text", "label": "{{secondaryActionLabel}}" } }
67
+ {
68
+ "type": "Button",
69
+ "props": {
70
+ "appearance": "primary",
71
+ "label": "{{primaryActionLabel}}"
72
+ }
73
+ },
74
+ {
75
+ "type": "Button",
76
+ "props": {
77
+ "appearance": "text",
78
+ "label": "{{secondaryActionLabel}}"
79
+ }
80
+ }
31
81
  ]
32
82
  }
33
83
  ]
@@ -37,71 +87,163 @@
37
87
  "constraints": [
38
88
  "Keep max one primary Button in the section.",
39
89
  "Wrap all form controls with Field."
90
+ ],
91
+ "priority": "first-choice",
92
+ "recommendedFor": [
93
+ "figma-make"
40
94
  ]
41
95
  },
42
96
  {
43
97
  "id": "dashboard-table-summary",
44
98
  "intent": "Summary header with data table and row actions.",
45
- "tags": ["dashboard", "table", "summary"],
99
+ "tags": [
100
+ "dashboard",
101
+ "table",
102
+ "summary"
103
+ ],
46
104
  "slots": {
47
105
  "heading": "Open Requests",
48
106
  "primaryActionLabel": "Create request"
49
107
  },
50
108
  "tree": {
51
109
  "type": "Container",
52
- "props": { "gap": "--uds-spacing-16" },
110
+ "props": {
111
+ "gap": "--uds-spacing-16"
112
+ },
53
113
  "children": [
54
114
  {
55
115
  "type": "Flex",
56
116
  "children": [
57
- { "type": "Text", "props": { "variant": "heading-24", "text": "{{heading}}" } },
58
- { "type": "Button", "props": { "appearance": "primary", "label": "{{primaryActionLabel}}" } }
117
+ {
118
+ "type": "Text",
119
+ "props": {
120
+ "variant": "heading-24",
121
+ "text": "{{heading}}"
122
+ }
123
+ },
124
+ {
125
+ "type": "Button",
126
+ "props": {
127
+ "appearance": "primary",
128
+ "label": "{{primaryActionLabel}}"
129
+ }
130
+ }
59
131
  ]
60
132
  },
61
133
  {
62
134
  "type": "Table",
63
135
  "children": [
64
- { "type": "Status", "props": { "variant": "success", "text": "Ready" } },
65
- { "type": "Tag", "props": { "color": "blue", "label": "Active" } },
66
- { "type": "ActionMenu", "props": { "triggerLabel": "Row actions" } }
136
+ {
137
+ "type": "Status",
138
+ "props": {
139
+ "variant": "success",
140
+ "text": "Ready"
141
+ }
142
+ },
143
+ {
144
+ "type": "Tag",
145
+ "props": {
146
+ "color": "blue",
147
+ "label": "Active"
148
+ }
149
+ },
150
+ {
151
+ "type": "ActionMenu",
152
+ "props": {
153
+ "triggerLabel": "Row actions"
154
+ }
155
+ }
67
156
  ]
68
157
  }
69
158
  ]
70
159
  },
71
160
  "constraints": [
72
161
  "Only use allowed Table children (Tag, Status, Avatar, Button, ActionMenu, ProgressIndicator, DotStatus)."
162
+ ],
163
+ "priority": "first-choice",
164
+ "recommendedFor": [
165
+ "figma-make"
73
166
  ]
74
167
  },
75
168
  {
76
169
  "id": "settings-two-column",
77
170
  "intent": "Two-column settings page with form area and contextual summary card.",
78
- "tags": ["settings", "form", "two-column"],
171
+ "tags": [
172
+ "settings",
173
+ "form",
174
+ "two-column"
175
+ ],
79
176
  "slots": {
80
177
  "pageTitle": "Account Settings",
81
178
  "saveLabel": "Save changes"
82
179
  },
83
180
  "tree": {
84
181
  "type": "Container",
85
- "props": { "gap": "--uds-spacing-24" },
182
+ "props": {
183
+ "gap": "--uds-spacing-24"
184
+ },
86
185
  "children": [
87
- { "type": "Text", "props": { "variant": "heading-24", "text": "{{pageTitle}}" } },
186
+ {
187
+ "type": "Text",
188
+ "props": {
189
+ "variant": "heading-24",
190
+ "text": "{{pageTitle}}"
191
+ }
192
+ },
88
193
  {
89
194
  "type": "Flex",
90
- "props": { "gap": "--uds-spacing-24" },
195
+ "props": {
196
+ "gap": "--uds-spacing-24"
197
+ },
91
198
  "children": [
92
199
  {
93
200
  "type": "Card",
94
201
  "children": [
95
- { "type": "Field", "children": [{ "type": "TextInput", "props": { "type": "text" } }] },
96
- { "type": "Field", "children": [{ "type": "Dropdown" }] },
97
- { "type": "Button", "props": { "appearance": "primary", "label": "{{saveLabel}}" } }
202
+ {
203
+ "type": "Field",
204
+ "children": [
205
+ {
206
+ "type": "TextInput",
207
+ "props": {
208
+ "type": "text"
209
+ }
210
+ }
211
+ ]
212
+ },
213
+ {
214
+ "type": "Field",
215
+ "children": [
216
+ {
217
+ "type": "Dropdown"
218
+ }
219
+ ]
220
+ },
221
+ {
222
+ "type": "Button",
223
+ "props": {
224
+ "appearance": "primary",
225
+ "label": "{{saveLabel}}"
226
+ }
227
+ }
98
228
  ]
99
229
  },
100
230
  {
101
231
  "type": "Card",
102
232
  "children": [
103
- { "type": "Text", "props": { "variant": "body-16", "text": "Changes apply to your profile." } },
104
- { "type": "Tag", "props": { "color": "neutral", "label": "Profile" } }
233
+ {
234
+ "type": "Text",
235
+ "props": {
236
+ "variant": "body-16",
237
+ "text": "Changes apply to your profile."
238
+ }
239
+ },
240
+ {
241
+ "type": "Tag",
242
+ "props": {
243
+ "color": "neutral",
244
+ "label": "Profile"
245
+ }
246
+ }
105
247
  ]
106
248
  }
107
249
  ]
@@ -111,12 +253,20 @@
111
253
  "constraints": [
112
254
  "Avoid multiple primary buttons in the same section.",
113
255
  "Use spacing tokens from the governed spacing system."
256
+ ],
257
+ "priority": "first-choice",
258
+ "recommendedFor": [
259
+ "figma-make"
114
260
  ]
115
261
  },
116
262
  {
117
263
  "id": "modal-confirmation",
118
264
  "intent": "Confirmation flow in modal with primary and dismissive actions.",
119
- "tags": ["modal", "confirmation", "destructive"],
265
+ "tags": [
266
+ "modal",
267
+ "confirmation",
268
+ "destructive"
269
+ ],
120
270
  "slots": {
121
271
  "title": "Delete item?",
122
272
  "body": "This action cannot be undone.",
@@ -126,13 +276,37 @@
126
276
  "tree": {
127
277
  "type": "Modal",
128
278
  "children": [
129
- { "type": "Text", "props": { "variant": "heading-24", "text": "{{title}}" } },
130
- { "type": "Text", "props": { "variant": "body-16", "text": "{{body}}" } },
279
+ {
280
+ "type": "Text",
281
+ "props": {
282
+ "variant": "heading-24",
283
+ "text": "{{title}}"
284
+ }
285
+ },
286
+ {
287
+ "type": "Text",
288
+ "props": {
289
+ "variant": "body-16",
290
+ "text": "{{body}}"
291
+ }
292
+ },
131
293
  {
132
294
  "type": "Flex",
133
295
  "children": [
134
- { "type": "Button", "props": { "appearance": "text", "label": "{{cancelLabel}}" } },
135
- { "type": "Button", "props": { "appearance": "destructive", "label": "{{confirmLabel}}" } }
296
+ {
297
+ "type": "Button",
298
+ "props": {
299
+ "appearance": "text",
300
+ "label": "{{cancelLabel}}"
301
+ }
302
+ },
303
+ {
304
+ "type": "Button",
305
+ "props": {
306
+ "appearance": "destructive",
307
+ "label": "{{confirmLabel}}"
308
+ }
309
+ }
136
310
  ]
137
311
  }
138
312
  ]
@@ -140,12 +314,20 @@
140
314
  "constraints": [
141
315
  "Do not nest Modal inside Modal.",
142
316
  "Keep one destructive primary-like action."
317
+ ],
318
+ "priority": "first-choice",
319
+ "recommendedFor": [
320
+ "figma-make"
143
321
  ]
144
322
  },
145
323
  {
146
324
  "id": "wizard-steps-form",
147
325
  "intent": "Multi-step form shell with progress indicator and staged actions.",
148
- "tags": ["wizard", "steps", "form"],
326
+ "tags": [
327
+ "wizard",
328
+ "steps",
329
+ "form"
330
+ ],
149
331
  "slots": {
150
332
  "title": "Create Job Posting",
151
333
  "nextLabel": "Next",
@@ -154,18 +336,55 @@
154
336
  "tree": {
155
337
  "type": "Container",
156
338
  "children": [
157
- { "type": "Text", "props": { "variant": "heading-24", "text": "{{title}}" } },
158
- { "type": "Steps" },
339
+ {
340
+ "type": "Text",
341
+ "props": {
342
+ "variant": "heading-24",
343
+ "text": "{{title}}"
344
+ }
345
+ },
346
+ {
347
+ "type": "Steps"
348
+ },
159
349
  {
160
350
  "type": "Card",
161
351
  "children": [
162
- { "type": "Field", "children": [{ "type": "TextInput", "props": { "type": "text" } }] },
163
- { "type": "Field", "children": [{ "type": "Textarea" }] },
352
+ {
353
+ "type": "Field",
354
+ "children": [
355
+ {
356
+ "type": "TextInput",
357
+ "props": {
358
+ "type": "text"
359
+ }
360
+ }
361
+ ]
362
+ },
363
+ {
364
+ "type": "Field",
365
+ "children": [
366
+ {
367
+ "type": "Textarea"
368
+ }
369
+ ]
370
+ },
164
371
  {
165
372
  "type": "Flex",
166
373
  "children": [
167
- { "type": "Button", "props": { "appearance": "text", "label": "{{backLabel}}" } },
168
- { "type": "Button", "props": { "appearance": "primary", "label": "{{nextLabel}}" } }
374
+ {
375
+ "type": "Button",
376
+ "props": {
377
+ "appearance": "text",
378
+ "label": "{{backLabel}}"
379
+ }
380
+ },
381
+ {
382
+ "type": "Button",
383
+ "props": {
384
+ "appearance": "primary",
385
+ "label": "{{nextLabel}}"
386
+ }
387
+ }
169
388
  ]
170
389
  }
171
390
  ]
@@ -175,7 +394,23 @@
175
394
  "constraints": [
176
395
  "Fields must contain form controls.",
177
396
  "Keep one primary action for each step section."
397
+ ],
398
+ "priority": "first-choice",
399
+ "recommendedFor": [
400
+ "figma-make"
178
401
  ]
179
402
  }
180
- ]
403
+ ],
404
+ "selectionPolicy": {
405
+ "mode": "template-first",
406
+ "recommendedFor": [
407
+ "figma-make"
408
+ ],
409
+ "fallback": "Only use freeform composition when no template intent matches.",
410
+ "guards": [
411
+ "Use UDS components only.",
412
+ "Do not use Tailwind utilities or className styling.",
413
+ "Use --uds-* tokens or hardcoded literals only."
414
+ ]
415
+ }
181
416
  }
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m={SCHEMA_NODE_OBJECT:"Return each tree node as an object with type/props/children keys.",SCHEMA_NODE_TYPE:"Set node.type to a non-empty UDS component name.",SCHEMA_NODE_PROPS:"Provide node.props as a plain object.",SCHEMA_NODE_CHILDREN:"Provide node.children as an array of child nodes.",RULE_UNKNOWN_COMPONENT:"Replace unknown components with supported UDS components.",RULE_RAW_HTML_DISALLOWED:"Use UDS components instead of raw HTML tags.",RULE_INVALID_COMPOSITION:"Use only allowed child components for the parent component.",RULE_INVALID_PARENT_COMPOSITION:"Move the component under one of its allowed parent components.",RULE_DISALLOWED_NESTING:"Remove or refactor disallowed parent/child nesting.",RULE_MAX_PRIMARY_ACTIONS:"Keep at most one primary Button per section.",RULE_SPACING_TOKEN_ONLY:"Use --uds-spacing-* tokens for spacing-related props.",RULE_UNKNOWN_SPACING_TOKEN:"Replace unknown spacing token with an allowed spacing token.",RULE_AMBIGUOUS_PROP_ALIAS:"Replace ambiguous alias props with canonical prop names.",RULE_VERSION_MISMATCH_MANIFESTVERSION:"Set manifestVersion to the current manifest contract version.",RULE_VERSION_MISMATCH_GOVERNANCEVERSION:"Set governanceVersion to the current governance version.",RULE_VERSION_MISMATCH_POLICYVERSION:"Set policyVersion to the current policy version.",RULE_MAX_NESTING_DEPTH:"Reduce UI nesting depth to stay within governance limits.",RULE_INLINE_STYLE_DISALLOWED:"Remove inline styles and use tokenized component props.",DRIFT_UNKNOWN_COMPONENT:"Align with ComponentRegistry component names.",DRIFT_DISALLOWED_NESTING:"Align nesting with layout disallowed pair rules.",DRIFT_MARGIN_USAGE:"Replace margin usage with composition spacing tokens.",DRIFT_INLINE_STYLE:"Replace inline style usage with UDS tokenized styling.",DRIFT_UNKNOWN_TOKEN:"Use a known token from the published UDS token contract.",DRIFT_HARDCODED_COLOR:"Replace color literals with semantic UDS tokens."},i=(e,t)=>String(e??"").localeCompare(String(t??"")),a=e=>[e.severity,e.code,e.path,e.component??"",e.token??"",e.message].join("|"),N=e=>{let t=2166136261;for(let r=0;r<e.length;r+=1)t^=e.charCodeAt(r),t=Math.imul(t,16777619);return(t>>>0).toString(16).padStart(8,"0")};function S(e){const t=[...e].sort((n,o)=>{const s=i(n.severity,o.severity);if(s!==0)return s;const p=i(n.code,o.code);if(p!==0)return p;const _=i(n.path,o.path);if(_!==0)return _;const d=i(n.component,o.component);if(d!==0)return d;const E=i(n.token,o.token);return E!==0?E:i(n.message,o.message)}),r=[],c=new Set;for(const n of t){const o=a(n);c.has(o)||(c.add(o),r.push(n))}return r}function l(e){const t=S(e),r=t.map(a).join("||"),c=`fb-${N(r)}`,n=t.map(s=>({id:`${s.code}:${s.path}:${N(a(s))}`,code:s.code,path:s.path,message:s.message,fix:m[s.code]??"Apply governance-compliant correction for this violation.",severity:s.severity})),o=`${n.length} deterministic violation(s)`;return{fingerprint:c,summary:o,items:n}}exports.buildDeterministicFeedback=l;exports.sortAndDedupeViolations=S;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const R={SCHEMA_NODE_OBJECT:"Return each tree node as an object with type/props/children keys.",SCHEMA_NODE_TYPE:"Set node.type to a non-empty UDS component name.",SCHEMA_NODE_PROPS:"Provide node.props as a plain object.",SCHEMA_NODE_CHILDREN:"Provide node.children as an array of child nodes.",RULE_UNKNOWN_COMPONENT:"Replace unknown components with supported UDS components.",RULE_RAW_HTML_DISALLOWED:"Use UDS components instead of raw HTML tags.",RULE_INVALID_COMPOSITION:"Use only allowed child components for the parent component.",RULE_INVALID_PARENT_COMPOSITION:"Move the component under one of its allowed parent components.",RULE_DISALLOWED_NESTING:"Remove or refactor disallowed parent/child nesting.",RULE_MAX_PRIMARY_ACTIONS:"Keep at most one primary Button per section.",RULE_SPACING_TOKEN_ONLY:"Use --uds-spacing-* tokens for spacing-related props.",RULE_UNKNOWN_SPACING_TOKEN:"Replace unknown spacing token with an allowed spacing token.",RULE_CUSTOM_CSS_VAR_DISALLOWED:"Use only --uds-* CSS variables or hardcoded literals.",RULE_CSS_VAR_DEFINITION_DISALLOWED:"Do not define CSS custom properties in generated output.",RULE_TAILWIND_CLASS_DISALLOWED:"Remove Tailwind utilities and use UDS components/tokens instead.",RULE_FORBIDDEN_PROP:"Replace forbidden props with UDS canonical contract props for that component.",RULE_AMBIGUOUS_PROP_ALIAS:"Replace ambiguous alias props with canonical prop names.",RULE_VERSION_MISMATCH_MANIFESTVERSION:"Set manifestVersion to the current manifest contract version.",RULE_VERSION_MISMATCH_GOVERNANCEVERSION:"Set governanceVersion to the current governance version.",RULE_VERSION_MISMATCH_POLICYVERSION:"Set policyVersion to the current policy version.",RULE_MAX_NESTING_DEPTH:"Reduce UI nesting depth to stay within governance limits.",RULE_INLINE_STYLE_DISALLOWED:"Remove inline styles and use tokenized component props.",DRIFT_UNKNOWN_COMPONENT:"Align with ComponentRegistry component names.",DRIFT_DISALLOWED_NESTING:"Align nesting with layout disallowed pair rules.",DRIFT_MARGIN_USAGE:"Replace margin usage with composition spacing tokens.",DRIFT_INLINE_STYLE:"Replace inline style usage with UDS tokenized styling.",DRIFT_UNKNOWN_TOKEN:"Use a known token from the published UDS token contract.",DRIFT_HARDCODED_COLOR:"Replace color literals with semantic UDS tokens."},r=(e,t)=>String(e??"").localeCompare(String(t??"")),c=e=>[e.severity,e.code,e.path,e.component??"",e.token??"",e.message].join("|"),E=e=>{let t=2166136261;for(let i=0;i<e.length;i+=1)t^=e.charCodeAt(i),t=Math.imul(t,16777619);return(t>>>0).toString(16).padStart(8,"0")};function N(e){const t=[...e].sort((n,o)=>{const s=r(n.severity,o.severity);if(s!==0)return s;const p=r(n.code,o.code);if(p!==0)return p;const _=r(n.path,o.path);if(_!==0)return _;const d=r(n.component,o.component);if(d!==0)return d;const S=r(n.token,o.token);return S!==0?S:r(n.message,o.message)}),i=[],a=new Set;for(const n of t){const o=c(n);a.has(o)||(a.add(o),i.push(n))}return i}function l(e){const t=N(e),i=t.map(c).join("||"),a=`fb-${E(i)}`,n=t.map(s=>({id:`${s.code}:${s.path}:${E(c(s))}`,code:s.code,path:s.path,message:s.message,fix:R[s.code]??"Apply governance-compliant correction for this violation.",severity:s.severity})),o=`${n.length} deterministic violation(s)`;return{fingerprint:a,summary:o,items:n}}exports.buildDeterministicFeedback=l;exports.sortAndDedupeViolations=N;
@@ -1 +1 @@
1
- const S={SCHEMA_NODE_OBJECT:"Return each tree node as an object with type/props/children keys.",SCHEMA_NODE_TYPE:"Set node.type to a non-empty UDS component name.",SCHEMA_NODE_PROPS:"Provide node.props as a plain object.",SCHEMA_NODE_CHILDREN:"Provide node.children as an array of child nodes.",RULE_UNKNOWN_COMPONENT:"Replace unknown components with supported UDS components.",RULE_RAW_HTML_DISALLOWED:"Use UDS components instead of raw HTML tags.",RULE_INVALID_COMPOSITION:"Use only allowed child components for the parent component.",RULE_INVALID_PARENT_COMPOSITION:"Move the component under one of its allowed parent components.",RULE_DISALLOWED_NESTING:"Remove or refactor disallowed parent/child nesting.",RULE_MAX_PRIMARY_ACTIONS:"Keep at most one primary Button per section.",RULE_SPACING_TOKEN_ONLY:"Use --uds-spacing-* tokens for spacing-related props.",RULE_UNKNOWN_SPACING_TOKEN:"Replace unknown spacing token with an allowed spacing token.",RULE_AMBIGUOUS_PROP_ALIAS:"Replace ambiguous alias props with canonical prop names.",RULE_VERSION_MISMATCH_MANIFESTVERSION:"Set manifestVersion to the current manifest contract version.",RULE_VERSION_MISMATCH_GOVERNANCEVERSION:"Set governanceVersion to the current governance version.",RULE_VERSION_MISMATCH_POLICYVERSION:"Set policyVersion to the current policy version.",RULE_MAX_NESTING_DEPTH:"Reduce UI nesting depth to stay within governance limits.",RULE_INLINE_STYLE_DISALLOWED:"Remove inline styles and use tokenized component props.",DRIFT_UNKNOWN_COMPONENT:"Align with ComponentRegistry component names.",DRIFT_DISALLOWED_NESTING:"Align nesting with layout disallowed pair rules.",DRIFT_MARGIN_USAGE:"Replace margin usage with composition spacing tokens.",DRIFT_INLINE_STYLE:"Replace inline style usage with UDS tokenized styling.",DRIFT_UNKNOWN_TOKEN:"Use a known token from the published UDS token contract.",DRIFT_HARDCODED_COLOR:"Replace color literals with semantic UDS tokens."},c=(e,t)=>String(e??"").localeCompare(String(t??"")),a=e=>[e.severity,e.code,e.path,e.component??"",e.token??"",e.message].join("|"),d=e=>{let t=2166136261;for(let r=0;r<e.length;r+=1)t^=e.charCodeAt(r),t=Math.imul(t,16777619);return(t>>>0).toString(16).padStart(8,"0")};function R(e){const t=[...e].sort((n,o)=>{const s=c(n.severity,o.severity);if(s!==0)return s;const p=c(n.code,o.code);if(p!==0)return p;const _=c(n.path,o.path);if(_!==0)return _;const E=c(n.component,o.component);if(E!==0)return E;const N=c(n.token,o.token);return N!==0?N:c(n.message,o.message)}),r=[],i=new Set;for(const n of t){const o=a(n);i.has(o)||(i.add(o),r.push(n))}return r}function m(e){const t=R(e),r=t.map(a).join("||"),i=`fb-${d(r)}`,n=t.map(s=>({id:`${s.code}:${s.path}:${d(a(s))}`,code:s.code,path:s.path,message:s.message,fix:S[s.code]??"Apply governance-compliant correction for this violation.",severity:s.severity})),o=`${n.length} deterministic violation(s)`;return{fingerprint:i,summary:o,items:n}}export{m as buildDeterministicFeedback,R as sortAndDedupeViolations};
1
+ const N={SCHEMA_NODE_OBJECT:"Return each tree node as an object with type/props/children keys.",SCHEMA_NODE_TYPE:"Set node.type to a non-empty UDS component name.",SCHEMA_NODE_PROPS:"Provide node.props as a plain object.",SCHEMA_NODE_CHILDREN:"Provide node.children as an array of child nodes.",RULE_UNKNOWN_COMPONENT:"Replace unknown components with supported UDS components.",RULE_RAW_HTML_DISALLOWED:"Use UDS components instead of raw HTML tags.",RULE_INVALID_COMPOSITION:"Use only allowed child components for the parent component.",RULE_INVALID_PARENT_COMPOSITION:"Move the component under one of its allowed parent components.",RULE_DISALLOWED_NESTING:"Remove or refactor disallowed parent/child nesting.",RULE_MAX_PRIMARY_ACTIONS:"Keep at most one primary Button per section.",RULE_SPACING_TOKEN_ONLY:"Use --uds-spacing-* tokens for spacing-related props.",RULE_UNKNOWN_SPACING_TOKEN:"Replace unknown spacing token with an allowed spacing token.",RULE_CUSTOM_CSS_VAR_DISALLOWED:"Use only --uds-* CSS variables or hardcoded literals.",RULE_CSS_VAR_DEFINITION_DISALLOWED:"Do not define CSS custom properties in generated output.",RULE_TAILWIND_CLASS_DISALLOWED:"Remove Tailwind utilities and use UDS components/tokens instead.",RULE_FORBIDDEN_PROP:"Replace forbidden props with UDS canonical contract props for that component.",RULE_AMBIGUOUS_PROP_ALIAS:"Replace ambiguous alias props with canonical prop names.",RULE_VERSION_MISMATCH_MANIFESTVERSION:"Set manifestVersion to the current manifest contract version.",RULE_VERSION_MISMATCH_GOVERNANCEVERSION:"Set governanceVersion to the current governance version.",RULE_VERSION_MISMATCH_POLICYVERSION:"Set policyVersion to the current policy version.",RULE_MAX_NESTING_DEPTH:"Reduce UI nesting depth to stay within governance limits.",RULE_INLINE_STYLE_DISALLOWED:"Remove inline styles and use tokenized component props.",DRIFT_UNKNOWN_COMPONENT:"Align with ComponentRegistry component names.",DRIFT_DISALLOWED_NESTING:"Align nesting with layout disallowed pair rules.",DRIFT_MARGIN_USAGE:"Replace margin usage with composition spacing tokens.",DRIFT_INLINE_STYLE:"Replace inline style usage with UDS tokenized styling.",DRIFT_UNKNOWN_TOKEN:"Use a known token from the published UDS token contract.",DRIFT_HARDCODED_COLOR:"Replace color literals with semantic UDS tokens."},i=(e,t)=>String(e??"").localeCompare(String(t??"")),c=e=>[e.severity,e.code,e.path,e.component??"",e.token??"",e.message].join("|"),E=e=>{let t=2166136261;for(let r=0;r<e.length;r+=1)t^=e.charCodeAt(r),t=Math.imul(t,16777619);return(t>>>0).toString(16).padStart(8,"0")};function R(e){const t=[...e].sort((n,o)=>{const s=i(n.severity,o.severity);if(s!==0)return s;const p=i(n.code,o.code);if(p!==0)return p;const _=i(n.path,o.path);if(_!==0)return _;const S=i(n.component,o.component);if(S!==0)return S;const d=i(n.token,o.token);return d!==0?d:i(n.message,o.message)}),r=[],a=new Set;for(const n of t){const o=c(n);a.has(o)||(a.add(o),r.push(n))}return r}function I(e){const t=R(e),r=t.map(c).join("||"),a=`fb-${E(r)}`,n=t.map(s=>({id:`${s.code}:${s.path}:${E(c(s))}`,code:s.code,path:s.path,message:s.message,fix:N[s.code]??"Apply governance-compliant correction for this violation.",severity:s.severity})),o=`${n.length} deterministic violation(s)`;return{fingerprint:a,summary:o,items:n}}export{I as buildDeterministicFeedback,R as sortAndDedupeViolations};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("../manifest/components.manifest.cjs"),p=require("../manifest/layout.manifest.cjs"),a=require("../manifest/tokens.intent.manifest.cjs"),f=/#(?:[a-fA-F0-9]{3,8})\b|rgb\(|rgba\(|hsl\(|hsla\(/,y=new Set([...p.LayoutRules.spacingSystem.allowedTokens,...Object.values(a.TokenIntentMap.surface),...Object.values(a.TokenIntentMap.action),...Object.values(a.TokenIntentMap.text),...Object.values(a.TokenIntentMap.border),...Object.values(a.TokenIntentMap.state),"--uds-radius-8","--uds-elevation-overlay"]),i=(l,n,c,t,o,r)=>{l.push({severity:"warning",code:n,message:c,path:t,component:o,token:r})};function T(l){const n=[],c=(t,o,r)=>{d.ComponentRegistry[t.type]||i(n,"DRIFT_UNKNOWN_COMPONENT",`Component "${t.type}" is not in ComponentRegistry.`,o,t.type),r&&p.LayoutRules.disallowedNesting.some(e=>e.parent===r.type&&e.child===t.type)&&i(n,"DRIFT_DISALLOWED_NESTING",`${t.type} nested inside ${r.type} violates layout rules.`,o,t.type);const u=t.props??{};Object.entries(u).forEach(([s,e])=>{s.toLowerCase().startsWith("margin")&&i(n,"DRIFT_MARGIN_USAGE","Margin usage detected. Prefer governed spacing composition tokens.",`${o}.${s}`,t.type),(s==="style"||s==="inlineStyle")&&i(n,"DRIFT_INLINE_STYLE","Inline CSS detected. Use tokenized props or class-based styling.",`${o}.${s}`,t.type),typeof e=="string"&&(e.startsWith("--uds-")&&!y.has(e)&&i(n,"DRIFT_UNKNOWN_TOKEN",`Unknown UDS token "${e}".`,`${o}.${s}`,t.type,e),f.test(e)&&i(n,"DRIFT_HARDCODED_COLOR","Hardcoded color literal detected. Use semantic UDS token values.",`${o}.${s}`,t.type))}),(t.children??[]).forEach((s,e)=>c(s,`${o}.children[${e}]`,t))};return c(l,"root"),n}exports.detectDrift=T;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("../manifest/components.manifest.cjs"),p=require("../manifest/layout.manifest.cjs"),r=require("../manifest/tokens.intent.manifest.cjs"),f=new Set([...p.LayoutRules.spacingSystem.allowedTokens,...Object.values(r.TokenIntentMap.surface),...Object.values(r.TokenIntentMap.action),...Object.values(r.TokenIntentMap.text),...Object.values(r.TokenIntentMap.border),...Object.values(r.TokenIntentMap.state),"--uds-radius-8","--uds-elevation-overlay"]),a=(l,n,c,t,i,o)=>{l.push({severity:"warning",code:n,message:c,path:t,component:i,token:o})};function d(l){const n=[],c=(t,i,o)=>{y.ComponentRegistry[t.type]||a(n,"DRIFT_UNKNOWN_COMPONENT",`Component "${t.type}" is not in ComponentRegistry.`,i,t.type),o&&p.LayoutRules.disallowedNesting.some(e=>e.parent===o.type&&e.child===t.type)&&a(n,"DRIFT_DISALLOWED_NESTING",`${t.type} nested inside ${o.type} violates layout rules.`,i,t.type);const u=t.props??{};Object.entries(u).forEach(([s,e])=>{s.toLowerCase().startsWith("margin")&&a(n,"DRIFT_MARGIN_USAGE","Margin usage detected. Prefer governed spacing composition tokens.",`${i}.${s}`,t.type),(s==="style"||s==="inlineStyle")&&a(n,"DRIFT_INLINE_STYLE","Inline CSS detected. Use tokenized props or class-based styling.",`${i}.${s}`,t.type),typeof e=="string"&&e.startsWith("--uds-")&&!f.has(e)&&a(n,"DRIFT_UNKNOWN_TOKEN",`Unknown UDS token "${e}".`,`${i}.${s}`,t.type,e)}),(t.children??[]).forEach((s,e)=>c(s,`${i}.children[${e}]`,t))};return c(l,"root"),n}exports.detectDrift=d;
@@ -1 +1 @@
1
- import{ComponentRegistry as d}from"../manifest/components.manifest.js";import{LayoutRules as p}from"../manifest/layout.manifest.js";import{TokenIntentMap as c}from"../manifest/tokens.intent.manifest.js";const y=/#(?:[a-fA-F0-9]{3,8})\b|rgb\(|rgba\(|hsl\(|hsla\(/,O=new Set([...p.spacingSystem.allowedTokens,...Object.values(c.surface),...Object.values(c.action),...Object.values(c.text),...Object.values(c.border),...Object.values(c.state),"--uds-radius-8","--uds-elevation-overlay"]),n=(l,i,a,t,o,r)=>{l.push({severity:"warning",code:i,message:a,path:t,component:o,token:r})};function m(l){const i=[],a=(t,o,r)=>{d[t.type]||n(i,"DRIFT_UNKNOWN_COMPONENT",`Component "${t.type}" is not in ComponentRegistry.`,o,t.type),r&&p.disallowedNesting.some(e=>e.parent===r.type&&e.child===t.type)&&n(i,"DRIFT_DISALLOWED_NESTING",`${t.type} nested inside ${r.type} violates layout rules.`,o,t.type);const f=t.props??{};Object.entries(f).forEach(([s,e])=>{s.toLowerCase().startsWith("margin")&&n(i,"DRIFT_MARGIN_USAGE","Margin usage detected. Prefer governed spacing composition tokens.",`${o}.${s}`,t.type),(s==="style"||s==="inlineStyle")&&n(i,"DRIFT_INLINE_STYLE","Inline CSS detected. Use tokenized props or class-based styling.",`${o}.${s}`,t.type),typeof e=="string"&&(e.startsWith("--uds-")&&!O.has(e)&&n(i,"DRIFT_UNKNOWN_TOKEN",`Unknown UDS token "${e}".`,`${o}.${s}`,t.type,e),y.test(e)&&n(i,"DRIFT_HARDCODED_COLOR","Hardcoded color literal detected. Use semantic UDS token values.",`${o}.${s}`,t.type))}),(t.children??[]).forEach((s,e)=>a(s,`${o}.children[${e}]`,t))};return a(l,"root"),i}export{m as detectDrift};
1
+ import{ComponentRegistry as y}from"../manifest/components.manifest.js";import{LayoutRules as p}from"../manifest/layout.manifest.js";import{TokenIntentMap as r}from"../manifest/tokens.intent.manifest.js";const N=new Set([...p.spacingSystem.allowedTokens,...Object.values(r.surface),...Object.values(r.action),...Object.values(r.text),...Object.values(r.border),...Object.values(r.state),"--uds-radius-8","--uds-elevation-overlay"]),c=(l,i,a,t,o,n)=>{l.push({severity:"warning",code:i,message:a,path:t,component:o,token:n})};function g(l){const i=[],a=(t,o,n)=>{y[t.type]||c(i,"DRIFT_UNKNOWN_COMPONENT",`Component "${t.type}" is not in ComponentRegistry.`,o,t.type),n&&p.disallowedNesting.some(e=>e.parent===n.type&&e.child===t.type)&&c(i,"DRIFT_DISALLOWED_NESTING",`${t.type} nested inside ${n.type} violates layout rules.`,o,t.type);const f=t.props??{};Object.entries(f).forEach(([s,e])=>{s.toLowerCase().startsWith("margin")&&c(i,"DRIFT_MARGIN_USAGE","Margin usage detected. Prefer governed spacing composition tokens.",`${o}.${s}`,t.type),(s==="style"||s==="inlineStyle")&&c(i,"DRIFT_INLINE_STYLE","Inline CSS detected. Use tokenized props or class-based styling.",`${o}.${s}`,t.type),typeof e=="string"&&e.startsWith("--uds-")&&!N.has(e)&&c(i,"DRIFT_UNKNOWN_TOKEN",`Unknown UDS token "${e}".`,`${o}.${s}`,t.type,e)}),(t.children??[]).forEach((s,e)=>a(s,`${o}.children[${e}]`,t))};return a(l,"root"),i}export{g as detectDrift};
@@ -28,6 +28,14 @@ export interface AppShellProps {
28
28
  brand?: string;
29
29
  theme?: "light" | "dark";
30
30
  className?: string;
31
+ skipToContent?: boolean;
32
+ skipToContentLabel?: string;
33
+ mainContentId?: string;
34
+ mobileBrandLabel?: string;
35
+ mobileUserName?: string;
36
+ mobileUserInitials?: string;
37
+ mobileUserAvatarSrc?: string;
38
+ mobileAccountMenuItems?: unknown[];
31
39
  }
32
40
  /** Slot wrapper props used by AppShell compound regions. */
33
41
  export interface AppShellSectionProps {
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),c=require("react"),r=require("bizcharts"),l={width:"100%"};function p({data:o,xField:e="x",yField:n="y",seriesField:s,height:a=320,autoFit:i=!0,className:h,style:u}){return t.jsxs(r.Chart,{data:o,autoFit:i,height:a,className:h,style:{...l,...u},children:[t.jsx(r.Tooltip,{shared:!0}),t.jsx(r.Legend,{}),t.jsx(r.Line,{position:`${e}*${n}`,color:s}),t.jsx(r.Point,{position:`${e}*${n}`,color:s})]})}const d=c.memo(p);function S({data:o,xField:e="x",yField:n="y",seriesField:s,height:a=320,autoFit:i=!0,className:h,style:u}){return t.jsxs(r.Chart,{data:o,autoFit:i,height:a,className:h,style:{...l,...u},children:[t.jsx(r.Tooltip,{shared:!0}),t.jsx(r.Legend,{}),t.jsx(r.Interval,{position:`${e}*${n}`,color:s})]})}const D=c.memo(S);function m({data:o,angleField:e="value",colorField:n="type",height:s=320,autoFit:a=!0,className:i,style:h}){return t.jsxs(r.Chart,{data:o,autoFit:a,height:s,className:i,style:{...l,...h},children:[t.jsx(r.Coordinate,{type:"theta",radius:.85}),t.jsx(r.Tooltip,{showTitle:!1}),t.jsx(r.Legend,{}),t.jsx(r.Interval,{position:e,color:n,adjust:"stack"})]})}const U=c.memo(m);function y({data:o,angleField:e="value",colorField:n="type",height:s=320,autoFit:a=!0,className:i,style:h}){return t.jsxs(r.Chart,{data:o,autoFit:a,height:s,className:i,style:{...l,...h},children:[t.jsx(r.Coordinate,{type:"theta",radius:.85,innerRadius:.62}),t.jsx(r.Tooltip,{showTitle:!1}),t.jsx(r.Legend,{}),t.jsx(r.Interval,{position:e,color:n,adjust:"stack"})]})}const $=c.memo(y);function g({data:o,xField:e="x",yField:n="y",colorField:s,sizeField:a,height:i=320,autoFit:h=!0,className:u,style:j}){const x=`${e}*${n}`;return t.jsxs(r.Chart,{data:o,autoFit:h,height:i,className:u,style:{...l,...j},children:[t.jsx(r.Tooltip,{shared:!0}),t.jsx(r.Legend,{}),t.jsx(r.Point,{position:x,color:s,size:a,shape:"circle"})]})}const C=c.memo(g);function f(o){return t.jsx(C,{...o})}function L({data:o,xField:e="x",yField:n="y",seriesField:s,height:a=320,autoFit:i=!0,className:h,style:u}){return t.jsxs(r.Chart,{data:o,autoFit:i,height:a,className:h,style:{...l,...u},children:[t.jsx(r.Coordinate,{type:"polar",radius:.8}),t.jsx(r.Tooltip,{shared:!0}),t.jsx(r.Legend,{}),t.jsx(r.Line,{position:`${e}*${n}`,color:s}),t.jsx(r.Point,{position:`${e}*${n}`,color:s})]})}const P=c.memo(L);function T({data:o,xField:e="x",yField:n="y",seriesField:s,height:a=320,autoFit:i=!0,className:h,style:u}){return t.jsxs(r.Chart,{data:o,autoFit:i,height:a,className:h,style:{...l,...u},children:[t.jsx(r.Coordinate,{type:"polar",radius:.8}),t.jsx(r.Tooltip,{shared:!0}),t.jsx(r.Legend,{}),t.jsx(r.Polygon,{position:`${e}*${n}`,color:s})]})}const b=c.memo(T);exports.UDSBarChart=D;exports.UDSBubbleChart=f;exports.UDSDoughnutChart=$;exports.UDSLineChart=d;exports.UDSPieChart=U;exports.UDSPolarAreaChart=b;exports.UDSRadarChart=P;exports.UDSScatterChart=C;
@@ -0,0 +1 @@
1
+ import{jsx as t,jsxs as c}from"react/jsx-runtime";import{memo as h}from"react";import{Chart as l,Tooltip as p,Legend as C,Interval as S,Coordinate as y,Line as m,Point as D,Polygon as $}from"bizcharts";const d={width:"100%"};function x({data:r,xField:o="x",yField:n="y",seriesField:e,height:a=320,autoFit:i=!0,className:s,style:u}){return c(l,{data:r,autoFit:i,height:a,className:s,style:{...d,...u},children:[t(p,{shared:!0}),t(C,{}),t(m,{position:`${o}*${n}`,color:e}),t(D,{position:`${o}*${n}`,color:e})]})}const k=h(x);function P({data:r,xField:o="x",yField:n="y",seriesField:e,height:a=320,autoFit:i=!0,className:s,style:u}){return c(l,{data:r,autoFit:i,height:a,className:s,style:{...d,...u},children:[t(p,{shared:!0}),t(C,{}),t(S,{position:`${o}*${n}`,color:e})]})}const A=h(P);function g({data:r,angleField:o="value",colorField:n="type",height:e=320,autoFit:a=!0,className:i,style:s}){return c(l,{data:r,autoFit:a,height:e,className:i,style:{...d,...s},children:[t(y,{type:"theta",radius:.85}),t(p,{showTitle:!1}),t(C,{}),t(S,{position:o,color:n,adjust:"stack"})]})}const z=h(g);function j({data:r,angleField:o="value",colorField:n="type",height:e=320,autoFit:a=!0,className:i,style:s}){return c(l,{data:r,autoFit:a,height:e,className:i,style:{...d,...s},children:[t(y,{type:"theta",radius:.85,innerRadius:.62}),t(p,{showTitle:!1}),t(C,{}),t(S,{position:o,color:n,adjust:"stack"})]})}const I=h(j);function L({data:r,xField:o="x",yField:n="y",colorField:e,sizeField:a,height:i=320,autoFit:s=!0,className:u,style:U}){const f=`${o}*${n}`;return c(l,{data:r,autoFit:s,height:i,className:u,style:{...d,...U},children:[t(p,{shared:!0}),t(C,{}),t(D,{position:f,color:e,size:a,shape:"circle"})]})}const v=h(L);function q(r){return t(v,{...r})}function w({data:r,xField:o="x",yField:n="y",seriesField:e,height:a=320,autoFit:i=!0,className:s,style:u}){return c(l,{data:r,autoFit:i,height:a,className:s,style:{...d,...u},children:[t(y,{type:"polar",radius:.8}),t(p,{shared:!0}),t(C,{}),t(m,{position:`${o}*${n}`,color:e}),t(D,{position:`${o}*${n}`,color:e})]})}const E=h(w);function B({data:r,xField:o="x",yField:n="y",seriesField:e,height:a=320,autoFit:i=!0,className:s,style:u}){return c(l,{data:r,autoFit:i,height:a,className:s,style:{...d,...u},children:[t(y,{type:"polar",radius:.8}),t(p,{shared:!0}),t(C,{}),t($,{position:`${o}*${n}`,color:e})]})}const G=h(B);export{A as UDSBarChart,q as UDSBubbleChart,I as UDSDoughnutChart,k as UDSLineChart,z as UDSPieChart,G as UDSPolarAreaChart,E as UDSRadarChart,v as UDSScatterChart};
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../charts/BizChartsAdapters.cjs");exports.UDSBarChart=r.UDSBarChart;exports.UDSBubbleChart=r.UDSBubbleChart;exports.UDSDoughnutChart=r.UDSDoughnutChart;exports.UDSLineChart=r.UDSLineChart;exports.UDSPieChart=r.UDSPieChart;exports.UDSPolarAreaChart=r.UDSPolarAreaChart;exports.UDSRadarChart=r.UDSRadarChart;exports.UDSScatterChart=r.UDSScatterChart;
@@ -0,0 +1 @@
1
+ import{UDSBarChart as t,UDSBubbleChart as h,UDSDoughnutChart as D,UDSLineChart as S,UDSPieChart as C,UDSPolarAreaChart as U,UDSRadarChart as e,UDSScatterChart as o}from"../charts/BizChartsAdapters.js";export{t as UDSBarChart,h as UDSBubbleChart,D as UDSDoughnutChart,S as UDSLineChart,C as UDSPieChart,U as UDSPolarAreaChart,e as UDSRadarChart,o as UDSScatterChart};
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("react/jsx-runtime"),d=require("../Button/Button.cjs");;/* empty css */function b({options:l=[],orientation:a="horizontal",size:t="default",disabled:n=!1,className:s="",children:o,...r}){const i=["uds-button-group",`uds-button-group--${a}`,s].filter(Boolean).join(" "),c=l.length>0;return u.jsx("div",{className:i,role:"group",...r,children:c?l.map(e=>u.jsx(d.default,{label:e.label,appearance:"outline",layout:e.layout??"label-only",size:e.size??t,icon:e.icon,iconSize:e.iconSize,disabled:n||e.disabled,loading:e.loading,onClick:e.onClick,className:"uds-button-group__button"},e.id)):o})}exports.ButtonGroup=b;
@@ -0,0 +1 @@
1
+ import{jsx as e}from"react/jsx-runtime";import d from"../Button/Button.js";/* empty css */function f({options:a=[],orientation:o="horizontal",size:u="default",disabled:n=!1,className:s="",children:t,...r}){const i=["uds-button-group",`uds-button-group--${o}`,s].filter(Boolean).join(" "),c=a.length>0;return e("div",{className:i,role:"group",...r,children:c?a.map(l=>e(d,{label:l.label,appearance:"outline",layout:l.layout??"label-only",size:l.size??u,icon:l.icon,iconSize:l.iconSize,disabled:n||l.disabled,loading:l.loading,onClick:l.onClick,className:"uds-button-group__button"},l.id)):t})}export{f as ButtonGroup};
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),v=require("react"),g=require("../Checkbox/Checkbox.cjs");;/* empty css */function p({options:o,values:u,defaultValues:d=[],onChange:l,label:a,orientation:i="vertical",disabled:n=!1,className:b="",...x}){const[h,k]=v.useState(d),c=u??h,f=["uds-checkbox-group",`uds-checkbox-group--${i}`,b].filter(Boolean).join(" "),j=(e,r)=>{const t=r?[...c,e]:c.filter(m=>m!==e);u===void 0&&k(t),l==null||l(t)};return s.jsxs("div",{className:f,role:"group",...x,children:[a?s.jsx("span",{className:"uds-checkbox-group__label",children:a}):null,s.jsx("div",{className:"uds-checkbox-group__options",children:o.map(e=>s.jsx(g.default,{checked:c.includes(e.value),label:e.label,disabled:n||e.disabled,onChange:r=>j(e.value,!!r)},e.value))})]})}exports.CheckboxGroup=p;