themelia-react-ui 1.0.1 → 2.0.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 (640) hide show
  1. package/CHANGELOG.md +417 -0
  2. package/README.md +67 -16
  3. package/dist/{accordion-B-5Focs8.js → accordion-CQXVcd7Q.js} +15 -15
  4. package/dist/accordion-CQXVcd7Q.js.map +1 -0
  5. package/dist/action-menu-BTpyPWJ2.js +264 -0
  6. package/dist/action-menu-BTpyPWJ2.js.map +1 -0
  7. package/dist/affordance-geometry.generated-CCIXb2A1.js +68 -0
  8. package/dist/affordance-geometry.generated-CCIXb2A1.js.map +1 -0
  9. package/dist/{ai-artifact-B5tPpXnS.js → ai-artifact-2PQ2fItc.js} +206 -215
  10. package/dist/ai-artifact-2PQ2fItc.js.map +1 -0
  11. package/dist/{app-shell-at8Kt4l_.js → app-shell-BE_j8-AT.js} +11 -10
  12. package/dist/app-shell-BE_j8-AT.js.map +1 -0
  13. package/dist/{attachment-BO2R47wn.js → attachment-q69dlt5Y.js} +14 -14
  14. package/dist/attachment-q69dlt5Y.js.map +1 -0
  15. package/dist/auth-M3vGMgDR.js +723 -0
  16. package/dist/auth-M3vGMgDR.js.map +1 -0
  17. package/dist/{avatar-Bpzty83c.js → avatar-djdaaQ_s.js} +15 -13
  18. package/dist/avatar-djdaaQ_s.js.map +1 -0
  19. package/dist/{badge-BZXZT9wd.js → badge-0tATj-tW.js} +9 -9
  20. package/dist/badge-0tATj-tW.js.map +1 -0
  21. package/dist/base/accordion.js +1 -1
  22. package/dist/base/action-menu.js +1 -1
  23. package/dist/base/attachment.js +1 -1
  24. package/dist/base/avatar.js +1 -1
  25. package/dist/base/badge.js +1 -1
  26. package/dist/base/buttons.js +3 -2
  27. package/dist/base/cards.js +3 -3
  28. package/dist/base/carousel.js +33 -35
  29. package/dist/base/carousel.js.map +1 -1
  30. package/dist/base/cascader.js +246 -222
  31. package/dist/base/cascader.js.map +1 -1
  32. package/dist/base/chart.js +1 -1
  33. package/dist/base/choice-inputs.js +2 -2
  34. package/dist/base/code-block.js +1 -1
  35. package/dist/base/combobox.js +1 -1
  36. package/dist/base/command.js +1 -1
  37. package/dist/base/copyable.js +1 -1
  38. package/dist/base/date-pickers.js +3 -3
  39. package/dist/base/display.js +7 -7
  40. package/dist/base/feedback.js +4 -4
  41. package/dist/base/forms-numeric.js +1 -1
  42. package/dist/base/forms.js +2 -2
  43. package/dist/base/inline-edit.js +94 -92
  44. package/dist/base/inline-edit.js.map +1 -1
  45. package/dist/base/item.js +1 -1
  46. package/dist/base/media-gallery.js +1 -1
  47. package/dist/base/navigation.js +6 -6
  48. package/dist/base/popover-menu.js +1 -1
  49. package/dist/base/popover.js +1 -1
  50. package/dist/base/qr-code.js +7 -4
  51. package/dist/base/qr-code.js.map +1 -1
  52. package/dist/base/repeaters.js +53 -53
  53. package/dist/base/repeaters.js.map +1 -1
  54. package/dist/base/sheet.js +1 -1
  55. package/dist/base/sidebar.js +1 -1
  56. package/dist/base/signature-pad.js +84 -82
  57. package/dist/base/signature-pad.js.map +1 -1
  58. package/dist/base/skeleton.js +1 -1
  59. package/dist/base/spinner.js +1 -1
  60. package/dist/base/structure.js +1 -1
  61. package/dist/base/table.js +1 -1
  62. package/dist/base/text-inputs.js +2 -2
  63. package/dist/base/toaster.js +7 -7
  64. package/dist/base/toaster.js.map +1 -1
  65. package/dist/base/tree.js +1 -1
  66. package/dist/base/upload-queue.js +1 -1
  67. package/dist/base/upload.js +3 -3
  68. package/dist/base/value-inputs.js +1 -1
  69. package/dist/blocks/admin.js +228 -219
  70. package/dist/blocks/admin.js.map +1 -1
  71. package/dist/blocks/ai.js +182 -212
  72. package/dist/blocks/ai.js.map +1 -1
  73. package/dist/blocks/analytics/usage-card.js +1 -1
  74. package/dist/blocks/analytics.js +665 -620
  75. package/dist/blocks/analytics.js.map +1 -1
  76. package/dist/blocks/collaboration.js +2 -2
  77. package/dist/blocks/commerce/receipt.js +1 -1
  78. package/dist/blocks/commerce.js +1439 -1553
  79. package/dist/blocks/commerce.js.map +1 -1
  80. package/dist/blocks/data-display.js +1 -1
  81. package/dist/blocks/onboarding.js +6 -6
  82. package/dist/blocks/onboarding.js.map +1 -1
  83. package/dist/blocks/planning.js +88 -97
  84. package/dist/blocks/planning.js.map +1 -1
  85. package/dist/blocks/timelines.js +1 -1
  86. package/dist/{breadcrumbs-DdQ_I5ra.js → breadcrumbs-BG_FfMK4.js} +10 -9
  87. package/dist/breadcrumbs-BG_FfMK4.js.map +1 -0
  88. package/dist/button-BS3KDg00.js +674 -0
  89. package/dist/button-BS3KDg00.js.map +1 -0
  90. package/dist/{button-BS6l5JUw.js → button-R9CCoH7A.js} +3 -3
  91. package/dist/button-R9CCoH7A.js.map +1 -0
  92. package/dist/buttons-DS0ZIwJ_.js +99 -0
  93. package/dist/buttons-DS0ZIwJ_.js.map +1 -0
  94. package/dist/{cards-Cum56XOF.js → cards-QoJ4syG9.js} +12 -12
  95. package/dist/{cards-Cum56XOF.js.map → cards-QoJ4syG9.js.map} +1 -1
  96. package/dist/chart-DwYRKKc-.js +152 -0
  97. package/dist/chart-DwYRKKc-.js.map +1 -0
  98. package/dist/checkbox-B7ygNTYp.js +35 -0
  99. package/dist/checkbox-B7ygNTYp.js.map +1 -0
  100. package/dist/choice-inputs-DrJ17tpL.js +752 -0
  101. package/dist/choice-inputs-DrJ17tpL.js.map +1 -0
  102. package/dist/{code-block-xHKbAJDj.js → code-block-CD0B7M93.js} +27 -27
  103. package/dist/code-block-CD0B7M93.js.map +1 -0
  104. package/dist/{collapsible-DsnktFNv.js → collapsible-oMUGM4tr.js} +3 -3
  105. package/dist/{collapsible-DsnktFNv.js.map → collapsible-oMUGM4tr.js.map} +1 -1
  106. package/dist/{collection-content-C4fthJV_.js → collection-content-Ys-OZOkY.js} +3 -3
  107. package/dist/{collection-content-C4fthJV_.js.map → collection-content-Ys-OZOkY.js.map} +1 -1
  108. package/dist/combobox-6dvVny2q.js +272 -0
  109. package/dist/combobox-6dvVny2q.js.map +1 -0
  110. package/dist/combobox-CB7039j7.js +865 -0
  111. package/dist/combobox-CB7039j7.js.map +1 -0
  112. package/dist/{command-C0xe7u9B.js → command-kPMPjIxJ.js} +35 -31
  113. package/dist/command-kPMPjIxJ.js.map +1 -0
  114. package/dist/{comments-DviPLnwy.js → comments-You0Bzbr.js} +434 -409
  115. package/dist/comments-You0Bzbr.js.map +1 -0
  116. package/dist/components/base/accordion/accordion-variants.d.ts +3 -3
  117. package/dist/components/base/action-menu/action-menu.d.ts +7 -2
  118. package/dist/components/base/avatar/stacked-avatars.d.ts +5 -4
  119. package/dist/components/base/badge/badge.d.ts +1 -1
  120. package/dist/components/base/badge/badge.recipes.d.ts +4 -4
  121. package/dist/components/base/buttons/base-button.d.ts +7 -0
  122. package/dist/components/base/buttons/button-group.recipes.d.ts +2 -2
  123. package/dist/components/base/buttons/button.recipes.d.ts +10 -19
  124. package/dist/components/base/buttons/button.variants.d.ts +1 -0
  125. package/dist/components/base/buttons/loader-button.d.ts +3 -1
  126. package/dist/components/base/buttons/text-button.d.ts +2 -2
  127. package/dist/components/base/buttons/use-pending-button-focus.d.ts +3 -0
  128. package/dist/components/base/cards/card.recipes.d.ts +13 -5
  129. package/dist/components/base/cards/partials/card-primitives.d.ts +9 -4
  130. package/dist/components/base/cards/smart-card.types.d.ts +1 -1
  131. package/dist/components/base/carousel/carousel.d.ts +3 -1
  132. package/dist/components/base/chart/chart.d.ts +7 -7
  133. package/dist/components/base/choice-inputs/checkbox.d.ts +6 -7
  134. package/dist/components/base/choice-inputs/choice-types.d.ts +10 -1
  135. package/dist/components/base/choice-inputs/pill-radio-group.d.ts +9 -0
  136. package/dist/components/base/choice-inputs/select-popup.d.ts +9 -1
  137. package/dist/components/base/choice-inputs/switch-card.d.ts +1 -1
  138. package/dist/components/base/date-pickers/date-picker-field.d.ts +23 -0
  139. package/dist/components/base/date-pickers/date-picker.recipes.d.ts +5 -18
  140. package/dist/components/base/date-pickers/datepicker.types.d.ts +16 -3
  141. package/dist/components/base/display/alert-dialog.d.ts +8 -2
  142. package/dist/components/base/display/content-block.d.ts +4 -2
  143. package/dist/components/base/display/date-block.d.ts +1 -1
  144. package/dist/components/base/display/dialog.d.ts +12 -5
  145. package/dist/components/base/display/surface-title.d.ts +6 -1
  146. package/dist/components/base/feedback/alert.d.ts +1 -1
  147. package/dist/components/base/feedback/state-display.d.ts +5 -4
  148. package/dist/components/base/forms/form-field.d.ts +1 -0
  149. package/dist/components/base/forms/form-sizing.d.ts +35 -3
  150. package/dist/components/base/forms/workflow.d.ts +2 -0
  151. package/dist/components/base/forms-numeric/coordinates-input.d.ts +3 -0
  152. package/dist/components/base/forms-numeric/rounding-mode-select.d.ts +4 -1
  153. package/dist/components/base/navigation/dropdown-menu.d.ts +2 -2
  154. package/dist/components/base/navigation/language-switcher.d.ts +4 -1
  155. package/dist/components/base/navigation/overflow-tab-bar.d.ts +7 -0
  156. package/dist/components/base/navigation/page-header/page-header.d.ts +4 -1
  157. package/dist/components/base/navigation/tabs.d.ts +3 -5
  158. package/dist/components/base/popover/popover.recipes.d.ts +3 -3
  159. package/dist/components/base/qr-code/qr-code.d.ts +2 -0
  160. package/dist/components/base/sheet/index.d.ts +29 -1
  161. package/dist/components/base/sheet/sheet.d.ts +14 -5
  162. package/dist/components/base/spinner/spinner.d.ts +3 -2
  163. package/dist/components/base/structure/structure.types.d.ts +1 -1
  164. package/dist/components/base/table/index.d.ts +1 -1
  165. package/dist/components/base/text-inputs/clear-native-field.d.ts +2 -0
  166. package/dist/components/base/text-inputs/input-group.d.ts +2 -2
  167. package/dist/components/base/text-inputs/input-trailing-action.d.ts +3 -0
  168. package/dist/components/base/upload/upload.recipes.d.ts +11 -0
  169. package/dist/components/base/value-inputs/date-time-input.d.ts +4 -2
  170. package/dist/components/base/value-inputs/tags-input.d.ts +2 -0
  171. package/dist/components/blocks/admin/api-key-list/api-key-list.types.d.ts +1 -1
  172. package/dist/components/blocks/analytics/format-metric-value.d.ts +11 -1
  173. package/dist/components/blocks/analytics/index.d.ts +1 -1
  174. package/dist/components/blocks/analytics/types.d.ts +1 -1
  175. package/dist/components/blocks/analytics/use-metric-format-options.d.ts +3 -0
  176. package/dist/components/blocks/collaboration/message/message.recipes.d.ts +12 -0
  177. package/dist/components/blocks/commerce/address-card/address-card.d.ts +1 -1
  178. package/dist/components/blocks/commerce/address-card/types.d.ts +3 -1
  179. package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.d.ts +4 -0
  180. package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.types.d.ts +2 -2
  181. package/dist/components/blocks/commerce/discount-stack/types.d.ts +1 -1
  182. package/dist/components/blocks/commerce/inventory-section/types.d.ts +4 -1
  183. package/dist/components/blocks/commerce/loyalty-points/types.d.ts +1 -1
  184. package/dist/components/blocks/commerce/order-status/types.d.ts +4 -0
  185. package/dist/components/blocks/commerce/payment-method/payment-method.d.ts +1 -1
  186. package/dist/components/blocks/commerce/payment-method/types.d.ts +3 -1
  187. package/dist/components/blocks/commerce/seo-listing/seo-listing-card.d.ts +1 -1
  188. package/dist/components/blocks/commerce/seo-listing/types.d.ts +3 -1
  189. package/dist/components/blocks/commerce/vendor-profile/types.d.ts +4 -1
  190. package/dist/components/blocks/data-display/dense-info-card/dense-info.strings.d.ts +4 -1
  191. package/dist/components/blocks/data-display/empty-state/partials/illustrations/document-stack.d.ts +1 -4
  192. package/dist/components/blocks/data-display/empty-state/partials/illustrations/inbox-clean.d.ts +1 -4
  193. package/dist/components/blocks/data-display/empty-state/partials/illustrations/index.d.ts +3 -3
  194. package/dist/components/blocks/data-display/empty-state/partials/illustrations/stacked-cards.d.ts +1 -6
  195. package/dist/components/blocks/data-display/inline-stat/inline-stat.d.ts +4 -1
  196. package/dist/components/features/combobox/components/error-message.d.ts +1 -1
  197. package/dist/components/features/comments/hooks/use-attachment-upload.d.ts +5 -0
  198. package/dist/components/features/filters/facets/search-facet.d.ts +0 -12
  199. package/dist/components/features/filters/facets/tags-facet.d.ts +1 -1
  200. package/dist/components/features/global-search/partials/global-search-idle-state.d.ts +1 -1
  201. package/dist/components/features/media-library/media-library.d.ts +1 -1
  202. package/dist/components/features/media-library/media-library.types.d.ts +9 -1
  203. package/dist/components/features/media-library/partials/media-library-partials.d.ts +1 -1
  204. package/dist/components/features/overlays/alert-dialog.d.ts +1 -1
  205. package/dist/components/features/overlays/drawer.d.ts +1 -1
  206. package/dist/components/features/overlays/hooks/use-overlay-actions.d.ts +2 -2
  207. package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts +11 -4
  208. package/dist/components/features/overlays/hooks/use-pending-overlay-focus.d.ts +2 -0
  209. package/dist/components/features/overlays/overlay-tone-icon.d.ts +37 -0
  210. package/dist/components/features/overlays/overlays.types.d.ts +46 -22
  211. package/dist/components/features/products/components/product-variants-manager.d.ts +1 -1
  212. package/dist/components/features/products/partials/index.d.ts +1 -1
  213. package/dist/components/features/products/partials/product-metric-tile.d.ts +6 -0
  214. package/dist/components/features/products/partials/product-tone.d.ts +11 -1
  215. package/dist/components/features/products/products.types.d.ts +2 -1
  216. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +2 -1
  217. package/dist/components/features/table/data-table.d.ts +1 -1
  218. package/dist/components/features/table/partials/cell-renderers.d.ts +1 -1
  219. package/dist/components/features/table/table.types.d.ts +1 -1
  220. package/dist/components/features/theme-tweaker/theme-provider-settings.d.ts +3 -1
  221. package/dist/components/layout/auth/auth.types.d.ts +1 -0
  222. package/dist/components/layout/page/index.d.ts +1 -1
  223. package/dist/components/layout/page/page.d.ts +0 -1
  224. package/dist/components/layout/page/page.types.d.ts +62 -6
  225. package/dist/components/layout/page/partials/page-header-commands.d.ts +13 -0
  226. package/dist/components/layout/page/partials/page-header.d.ts +1 -1
  227. package/dist/components/layout/sidebar/sidebar.context.d.ts +1 -1
  228. package/dist/components/layout/sidebar/sidebar.types.d.ts +4 -0
  229. package/dist/components/layout/workspace/workspace.types.d.ts +3 -0
  230. package/dist/components/primitives/date.d.ts +16 -3
  231. package/dist/components/primitives/dimensions.d.ts +6 -0
  232. package/dist/components/primitives/duration.d.ts +6 -0
  233. package/dist/components/primitives/file-size.d.ts +6 -0
  234. package/dist/components/primitives/index.d.ts +1 -1
  235. package/dist/components/primitives/initials.d.ts +11 -2
  236. package/dist/components/primitives/link.d.ts +7 -0
  237. package/dist/components/primitives/money.d.ts +29 -7
  238. package/dist/components/primitives/number.d.ts +17 -0
  239. package/dist/components/primitives/value-typography.d.ts +54 -0
  240. package/dist/components/primitives/value.d.ts +31 -6
  241. package/dist/components/typography/heading.d.ts +13 -2
  242. package/dist/components/typography/index.d.ts +1 -1
  243. package/dist/components/typography/label.d.ts +3 -0
  244. package/dist/components/typography/running-text.d.ts +12 -0
  245. package/dist/components/typography/text-link.d.ts +23 -1
  246. package/dist/components/typography/text.d.ts +12 -0
  247. package/dist/components/typography/text.styles.d.ts +37 -5
  248. package/dist/components/ui/button.d.ts +1 -1
  249. package/dist/components/ui/checkbox.d.ts +5 -0
  250. package/dist/components/ui/overlay.recipes.d.ts +15 -2
  251. package/dist/components/ui/popover.d.ts +1 -1
  252. package/dist/components/ui/select.d.ts +3 -1
  253. package/dist/components/ui/sidebar.d.ts +1 -1
  254. package/dist/components/ui/switch.d.ts +5 -0
  255. package/dist/components/ui/table.d.ts +2 -1
  256. package/dist/container.recipes-D9t8MHR3.js +27 -0
  257. package/dist/container.recipes-D9t8MHR3.js.map +1 -0
  258. package/dist/{containers-6s-ucRQQ.js → containers-D_L4mTVb.js} +34 -57
  259. package/dist/containers-D_L4mTVb.js.map +1 -0
  260. package/dist/control-group-recipes-DBXmfh2E.js +21 -0
  261. package/dist/control-group-recipes-DBXmfh2E.js.map +1 -0
  262. package/dist/{copyable-B7SBXJMr.js → copyable-DDjTeW_j.js} +6 -6
  263. package/dist/{copyable-B7SBXJMr.js.map → copyable-DDjTeW_j.js.map} +1 -1
  264. package/dist/data-display-3xWQUnMA.js +1335 -0
  265. package/dist/data-display-3xWQUnMA.js.map +1 -0
  266. package/dist/date-picker-DrDFj8Lo.js +1527 -0
  267. package/dist/date-picker-DrDFj8Lo.js.map +1 -0
  268. package/dist/date-pickers-CnFCb0n2.js +174 -0
  269. package/dist/date-pickers-CnFCb0n2.js.map +1 -0
  270. package/dist/date-uf3z37Nm.js +144 -0
  271. package/dist/date-uf3z37Nm.js.map +1 -0
  272. package/dist/{display-CFM5myut.js → display-DrdvPwF0.js} +25 -25
  273. package/dist/display-DrdvPwF0.js.map +1 -0
  274. package/dist/{dropdown-menu-BlnyHr-9.js → dropdown-menu-CURh59jb.js} +22 -15
  275. package/dist/dropdown-menu-CURh59jb.js.map +1 -0
  276. package/dist/features/activities.js +177 -163
  277. package/dist/features/activities.js.map +1 -1
  278. package/dist/features/ai-chat.js +187 -183
  279. package/dist/features/ai-chat.js.map +1 -1
  280. package/dist/features/async-preview.js +9 -9
  281. package/dist/features/async-preview.js.map +1 -1
  282. package/dist/features/combobox.js +1 -1
  283. package/dist/features/comments.js +1 -1
  284. package/dist/features/data-view.js +25 -23
  285. package/dist/features/data-view.js.map +1 -1
  286. package/dist/features/email-composer/engine.js +1 -1
  287. package/dist/features/email-composer.js +353 -355
  288. package/dist/features/email-composer.js.map +1 -1
  289. package/dist/features/event-calendar.js +346 -354
  290. package/dist/features/event-calendar.js.map +1 -1
  291. package/dist/features/filters.js +1 -1
  292. package/dist/features/global-search.js +225 -227
  293. package/dist/features/global-search.js.map +1 -1
  294. package/dist/features/kanban.js +29 -29
  295. package/dist/features/kanban.js.map +1 -1
  296. package/dist/features/map.js +59 -58
  297. package/dist/features/map.js.map +1 -1
  298. package/dist/features/media-library.js +898 -900
  299. package/dist/features/media-library.js.map +1 -1
  300. package/dist/features/mentions.js +1 -1
  301. package/dist/features/overlays.js +1 -1
  302. package/dist/features/products.js +1412 -1444
  303. package/dist/features/products.js.map +1 -1
  304. package/dist/features/questionnaire.js +51 -49
  305. package/dist/features/questionnaire.js.map +1 -1
  306. package/dist/features/resource-assignment.js +103 -97
  307. package/dist/features/resource-assignment.js.map +1 -1
  308. package/dist/features/resource.js +13 -13
  309. package/dist/features/resource.js.map +1 -1
  310. package/dist/features/rich-text-editor.js +2 -2
  311. package/dist/features/schema-form.js +187 -183
  312. package/dist/features/schema-form.js.map +1 -1
  313. package/dist/features/suggestions.js +3 -3
  314. package/dist/features/sync.js +7 -7
  315. package/dist/features/sync.js.map +1 -1
  316. package/dist/features/table.js +1 -1
  317. package/dist/features/theme-tweaker.js +508 -503
  318. package/dist/features/theme-tweaker.js.map +1 -1
  319. package/dist/{feedback-DWUkgEjR.js → feedback-C7nR0UtT.js} +30 -31
  320. package/dist/feedback-C7nR0UtT.js.map +1 -0
  321. package/dist/field-affordance-recipes-CkOCdE2y.js +46 -0
  322. package/dist/field-affordance-recipes-CkOCdE2y.js.map +1 -0
  323. package/dist/{field-state-recipes-CBTRt9Bt.js → field-state-recipes-C-MFBX_8.js} +5 -5
  324. package/dist/field-state-recipes-C-MFBX_8.js.map +1 -0
  325. package/dist/{filters-BhsUtsxW.js → filters-Da-gNPsE.js} +760 -765
  326. package/dist/filters-Da-gNPsE.js.map +1 -0
  327. package/dist/{form-field-Bn7ZH1rA.js → form-field-VZRULhUK.js} +20 -12
  328. package/dist/form-field-VZRULhUK.js.map +1 -0
  329. package/dist/form-sizing-uWP4lzVh.js +126 -0
  330. package/dist/form-sizing-uWP4lzVh.js.map +1 -0
  331. package/dist/{forms-B7pzS25o.js → forms-DDeEnXSY.js} +38 -38
  332. package/dist/forms-DDeEnXSY.js.map +1 -0
  333. package/dist/forms-numeric-D3CO60IF.js +905 -0
  334. package/dist/forms-numeric-D3CO60IF.js.map +1 -0
  335. package/dist/{header-C59QZyxV.js → header-2ycNqGOR.js} +42 -37
  336. package/dist/header-2ycNqGOR.js.map +1 -0
  337. package/dist/{hooks-CM1Vp9Pe.js → hooks-DQ5SPwZw.js} +2 -2
  338. package/dist/{hooks-CM1Vp9Pe.js.map → hooks-DQ5SPwZw.js.map} +1 -1
  339. package/dist/{http-CLTVJc5I.js → http-CdEIHyQf.js} +2 -2
  340. package/dist/http-CdEIHyQf.js.map +1 -0
  341. package/dist/{icon-badge-Dv0RYQwj.js → icon-badge-DKlaKXoo.js} +4 -4
  342. package/dist/{icon-badge-Dv0RYQwj.js.map → icon-badge-DKlaKXoo.js.map} +1 -1
  343. package/dist/index.js +2 -2
  344. package/dist/input-BoLm9Hks.js +20 -0
  345. package/dist/input-BoLm9Hks.js.map +1 -0
  346. package/dist/input-DhQdBnV3.js +255 -0
  347. package/dist/input-DhQdBnV3.js.map +1 -0
  348. package/dist/item-xzh8Df65.js +264 -0
  349. package/dist/item-xzh8Df65.js.map +1 -0
  350. package/dist/layout/app-shell.js +1 -1
  351. package/dist/layout/auth.js +1 -1
  352. package/dist/layout/containers.js +1 -1
  353. package/dist/layout/header.js +1 -1
  354. package/dist/layout/hooks.js +1 -1
  355. package/dist/layout/navigation.js +1 -1
  356. package/dist/layout/page.js +1 -1
  357. package/dist/layout/settings.js +1 -1
  358. package/dist/layout/sidebar.js +2 -2
  359. package/dist/layout/workspace.js +1 -1
  360. package/dist/layout.js +10 -10
  361. package/dist/lib/affordance-geometry.generated.d.ts +46 -10
  362. package/dist/lib/control-group-recipes.d.ts +22 -0
  363. package/dist/lib/field-affordance-recipes.d.ts +70 -2
  364. package/dist/lib/field-state-recipes.d.ts +6 -4
  365. package/dist/lib/format.d.ts +9 -0
  366. package/dist/lib/money-format.d.ts +30 -0
  367. package/dist/lib/navigation-row-recipes.d.ts +3 -2
  368. package/dist/lib/overlay-anatomy-recipes.d.ts +2 -2
  369. package/dist/lib/surface-recipes.d.ts +13 -8
  370. package/dist/lib/token-merge.generated.d.ts +144 -2
  371. package/dist/lib/track-recipes.d.ts +1 -1
  372. package/dist/lib/ui-provider/provider.d.ts +7 -2
  373. package/dist/lib/ui-provider/store.d.ts +6 -2
  374. package/dist/lib/ui-provider/types.d.ts +9 -4
  375. package/dist/lib/use-prefers-reduced-motion.d.ts +2 -0
  376. package/dist/lib/utils.js +1 -1
  377. package/dist/media-gallery-DQUQ0m3O.js +201 -0
  378. package/dist/media-gallery-DQUQ0m3O.js.map +1 -0
  379. package/dist/{mentions-B8Ko-fhS.js → mentions-DwnO1hh4.js} +40 -39
  380. package/dist/{mentions-B8Ko-fhS.js.map → mentions-DwnO1hh4.js.map} +1 -1
  381. package/dist/message-YfFmbXNP.js +127 -0
  382. package/dist/message-YfFmbXNP.js.map +1 -0
  383. package/dist/{navigation-BUIn2Qxx.js → navigation-Cbp5V8gG.js} +27 -28
  384. package/dist/navigation-Cbp5V8gG.js.map +1 -0
  385. package/dist/navigation-Cs1npsPm.js +300 -0
  386. package/dist/navigation-Cs1npsPm.js.map +1 -0
  387. package/dist/{navigation-row-recipes-GVh11KiT.js → navigation-row-recipes-DlU-4QYO.js} +3 -3
  388. package/dist/navigation-row-recipes-DlU-4QYO.js.map +1 -0
  389. package/dist/number-CKRBYmZK.js +352 -0
  390. package/dist/number-CKRBYmZK.js.map +1 -0
  391. package/dist/overlay.recipes-CNO2S9V6.js +34 -0
  392. package/dist/overlay.recipes-CNO2S9V6.js.map +1 -0
  393. package/dist/overlays-DhZO7N-I.js +994 -0
  394. package/dist/overlays-DhZO7N-I.js.map +1 -0
  395. package/dist/page-C6R_8jFt.js +325 -0
  396. package/dist/page-C6R_8jFt.js.map +1 -0
  397. package/dist/{page-header-DQRa0jug.js → page-header-hUTzcRZX.js} +12 -12
  398. package/dist/page-header-hUTzcRZX.js.map +1 -0
  399. package/dist/{pagination-C29vvt3I.js → pagination-Cm0jqa3I.js} +21 -21
  400. package/dist/pagination-Cm0jqa3I.js.map +1 -0
  401. package/dist/{popover-CoLDEg19.js → popover-Dcv_9jxr.js} +23 -22
  402. package/dist/popover-Dcv_9jxr.js.map +1 -0
  403. package/dist/{popover-menu-GLIQTJTx.js → popover-menu-DnRFKnHP.js} +6 -6
  404. package/dist/{popover-menu-GLIQTJTx.js.map → popover-menu-DnRFKnHP.js.map} +1 -1
  405. package/dist/{popover.recipes-zgBhMlUu.js → popover.recipes-wmbvL8Ah.js} +5 -5
  406. package/dist/popover.recipes-wmbvL8Ah.js.map +1 -0
  407. package/dist/primitives-BHrwQXFC.js +379 -0
  408. package/dist/primitives-BHrwQXFC.js.map +1 -0
  409. package/dist/primitives.js +5 -5
  410. package/dist/{progress-BOe8l_FZ.js → progress-Br9WTFya.js} +12 -11
  411. package/dist/progress-Br9WTFya.js.map +1 -0
  412. package/dist/{receipt-BM8xsGFy.js → receipt-CV89q1fs.js} +8 -8
  413. package/dist/{receipt-BM8xsGFy.js.map → receipt-CV89q1fs.js.map} +1 -1
  414. package/dist/rich-text-editor-CF8QYt5p.js +574 -0
  415. package/dist/rich-text-editor-CF8QYt5p.js.map +1 -0
  416. package/dist/{rich-text-editor.recipes-DxvOE0Lp.js → rich-text-editor.recipes-CnrbmTS1.js} +35 -26
  417. package/dist/rich-text-editor.recipes-CnrbmTS1.js.map +1 -0
  418. package/dist/{rich-text-B7sBAdDG.js → rich-text-j-FGAeZW.js} +4 -4
  419. package/dist/{rich-text-B7sBAdDG.js.map → rich-text-j-FGAeZW.js.map} +1 -1
  420. package/dist/{scroll-area-BheMQ270.js → scroll-area-DRdr16Pt.js} +3 -3
  421. package/dist/scroll-area-DRdr16Pt.js.map +1 -0
  422. package/dist/{separator-DO0EbCEm.js → separator-BMEvwnSX.js} +2 -2
  423. package/dist/{separator-DO0EbCEm.js.map → separator-BMEvwnSX.js.map} +1 -1
  424. package/dist/{separator-Gk_WXH-l.js → separator-Do5GWDYi.js} +4 -4
  425. package/dist/separator-Do5GWDYi.js.map +1 -0
  426. package/dist/services/actions/action-adapters.d.ts +4 -0
  427. package/dist/services/actions.js +8 -3
  428. package/dist/services/actions.js.map +1 -1
  429. package/dist/{settings-BnCyyPOJ.js → settings-DHk0L2MF.js} +20 -19
  430. package/dist/settings-DHk0L2MF.js.map +1 -0
  431. package/dist/sheet-DRFNY1_D.js +207 -0
  432. package/dist/sheet-DRFNY1_D.js.map +1 -0
  433. package/dist/sidebar-Cb8WzOvE.js +511 -0
  434. package/dist/sidebar-Cb8WzOvE.js.map +1 -0
  435. package/dist/{sidebar-DPR7fmqN.js → sidebar-Crc9M9JV.js} +220 -201
  436. package/dist/sidebar-Crc9M9JV.js.map +1 -0
  437. package/dist/{skeleton-CmT1ppqb.js → skeleton-DVMXr15h.js} +5 -5
  438. package/dist/{skeleton-CmT1ppqb.js.map → skeleton-DVMXr15h.js.map} +1 -1
  439. package/dist/smart-card-Bek-TwUp.js +599 -0
  440. package/dist/smart-card-Bek-TwUp.js.map +1 -0
  441. package/dist/{spinner-BY9HbUEh.js → spinner-CmTAbEp0.js} +8 -6
  442. package/dist/spinner-CmTAbEp0.js.map +1 -0
  443. package/dist/{structure-MvKVq-oL.js → structure-hzCW-XsV.js} +3 -3
  444. package/dist/{structure-MvKVq-oL.js.map → structure-hzCW-XsV.js.map} +1 -1
  445. package/dist/{structure.recipes-Bqhf9oIh.js → structure.recipes-EPz60cU8.js} +37 -19
  446. package/dist/structure.recipes-EPz60cU8.js.map +1 -0
  447. package/dist/style.css +1 -1
  448. package/dist/surface-recipes-DOdoBXGm.js +28 -0
  449. package/dist/surface-recipes-DOdoBXGm.js.map +1 -0
  450. package/dist/table-D6zKeYQX.js +162 -0
  451. package/dist/table-D6zKeYQX.js.map +1 -0
  452. package/dist/table-Dn4XSrSB.js +1444 -0
  453. package/dist/table-Dn4XSrSB.js.map +1 -0
  454. package/dist/tabs-Dk8E_knt.js +189 -0
  455. package/dist/tabs-Dk8E_knt.js.map +1 -0
  456. package/dist/text-inputs-BFpku0Qd.js +331 -0
  457. package/dist/text-inputs-BFpku0Qd.js.map +1 -0
  458. package/dist/{text.styles-BwB7vAF2.js → text.styles-g4He6UIW.js} +26 -15
  459. package/dist/text.styles-g4He6UIW.js.map +1 -0
  460. package/dist/theme.css +90 -124
  461. package/dist/themes/green.css +24 -0
  462. package/dist/{timelines-B9ICkQcV.js → timelines-CxuAFIc2.js} +97 -104
  463. package/dist/timelines-CxuAFIc2.js.map +1 -0
  464. package/dist/track-recipes-CDcKmndW.js +10 -0
  465. package/dist/track-recipes-CDcKmndW.js.map +1 -0
  466. package/dist/{tree-BdWSaoFT.js → tree-BotPlyiD.js} +13 -13
  467. package/dist/{tree-BdWSaoFT.js.map → tree-BotPlyiD.js.map} +1 -1
  468. package/dist/typography/rich-text.js +1 -1
  469. package/dist/typography-CAr3dQhX.js +116 -0
  470. package/dist/typography-CAr3dQhX.js.map +1 -0
  471. package/dist/typography.js +2 -2
  472. package/dist/{ui-provider-CftIB6TY.js → ui-provider-D2_TeLqw.js} +22 -22
  473. package/dist/ui-provider-D2_TeLqw.js.map +1 -0
  474. package/dist/ui-provider.js +1 -1
  475. package/dist/{upload-D8Za5x_c.js → upload-B0WHW7ak.js} +278 -274
  476. package/dist/upload-B0WHW7ak.js.map +1 -0
  477. package/dist/{upload-queue-hIIYBLS7.js → upload-queue-BHZ_wBfd.js} +72 -75
  478. package/dist/upload-queue-BHZ_wBfd.js.map +1 -0
  479. package/dist/{usage-card-DnmnJ58D.js → usage-card-U0YBLTNT.js} +31 -33
  480. package/dist/usage-card-U0YBLTNT.js.map +1 -0
  481. package/dist/utils-Cospvlj1.js +4445 -0
  482. package/dist/utils-Cospvlj1.js.map +1 -0
  483. package/dist/value-inputs-CjfzGMsN.js +854 -0
  484. package/dist/value-inputs-CjfzGMsN.js.map +1 -0
  485. package/dist/value-typography-Deb3yQZg.js +116 -0
  486. package/dist/value-typography-Deb3yQZg.js.map +1 -0
  487. package/dist/{workspace-C1PZmk8L.js → workspace-YoFjXi6i.js} +97 -105
  488. package/dist/workspace-YoFjXi6i.js.map +1 -0
  489. package/docs/consumer-skill/SKILL.md +123 -119
  490. package/docs/consumer-skill/examples/analytics.tsx +34 -0
  491. package/docs/consumer-skill/examples/app-layout.tsx +42 -14
  492. package/docs/consumer-skill/examples/detail.tsx +20 -5
  493. package/docs/consumer-skill/examples/edit.tsx +1 -1
  494. package/docs/consumer-skill/examples/layout-blocks.tsx +20 -0
  495. package/docs/consumer-skill/examples/manifest.json +37 -3
  496. package/docs/consumer-skill/examples/scoped-directory.tsx +2 -2
  497. package/docs/consumer-skill/examples/website.tsx +56 -0
  498. package/docs/consumer-skill/references/analytics.md +70 -0
  499. package/docs/consumer-skill/references/composition.md +195 -9
  500. package/docs/consumer-skill/references/design-contract.md +33 -7
  501. package/docs/consumer-skill/references/discovery.md +80 -5
  502. package/docs/consumer-skill/references/installation.md +22 -0
  503. package/docs/consumer-skill/references/integration.md +46 -1
  504. package/docs/consumer-skill/references/public-api.json +2083 -237
  505. package/docs/consumer-skill/references/review.md +74 -6
  506. package/docs/consumer-skill/references/theming.md +59 -8
  507. package/docs/consumer-skill/references/tokens.json +180 -9
  508. package/docs/consumer-skill/references/workflows.md +34 -0
  509. package/docs/consumer-skill/scripts/check-composition.mjs +1 -1
  510. package/docs/consumer-skill/scripts/composition-policy.mjs +271 -18
  511. package/docs/consumer-skill/scripts/discovery.mjs +69 -9
  512. package/docs/consumer-skill/scripts/pin-button-defaults.mjs +95 -0
  513. package/docs/consumer-skill/scripts/surface-policy.mjs +44 -0
  514. package/package.json +11 -6
  515. package/dist/accordion-B-5Focs8.js.map +0 -1
  516. package/dist/action-menu-Cx3SdfbN.js +0 -265
  517. package/dist/action-menu-Cx3SdfbN.js.map +0 -1
  518. package/dist/affordance-geometry.generated-D8Jcfb0G.js +0 -32
  519. package/dist/affordance-geometry.generated-D8Jcfb0G.js.map +0 -1
  520. package/dist/ai-artifact-B5tPpXnS.js.map +0 -1
  521. package/dist/app-shell-at8Kt4l_.js.map +0 -1
  522. package/dist/attachment-BO2R47wn.js.map +0 -1
  523. package/dist/auth-OFwWSAap.js +0 -704
  524. package/dist/auth-OFwWSAap.js.map +0 -1
  525. package/dist/avatar-Bpzty83c.js.map +0 -1
  526. package/dist/badge-BZXZT9wd.js.map +0 -1
  527. package/dist/breadcrumbs-DdQ_I5ra.js.map +0 -1
  528. package/dist/button-BS6l5JUw.js.map +0 -1
  529. package/dist/buttons-Co6GavvM.js +0 -674
  530. package/dist/buttons-Co6GavvM.js.map +0 -1
  531. package/dist/chart-DVfcwQu6.js +0 -149
  532. package/dist/chart-DVfcwQu6.js.map +0 -1
  533. package/dist/checkbox-BavDRjF7.js +0 -34
  534. package/dist/checkbox-BavDRjF7.js.map +0 -1
  535. package/dist/choice-inputs-CC7XqPQO.js +0 -619
  536. package/dist/choice-inputs-CC7XqPQO.js.map +0 -1
  537. package/dist/code-block-xHKbAJDj.js.map +0 -1
  538. package/dist/combobox-DEbdr-3u.js +0 -273
  539. package/dist/combobox-DEbdr-3u.js.map +0 -1
  540. package/dist/combobox-xv3yJbzl.js +0 -850
  541. package/dist/combobox-xv3yJbzl.js.map +0 -1
  542. package/dist/command-C0xe7u9B.js.map +0 -1
  543. package/dist/comments-DviPLnwy.js.map +0 -1
  544. package/dist/containers-6s-ucRQQ.js.map +0 -1
  545. package/dist/data-display-cWIRdeaf.js +0 -1129
  546. package/dist/data-display-cWIRdeaf.js.map +0 -1
  547. package/dist/date-BFNMnrS5.js +0 -140
  548. package/dist/date-BFNMnrS5.js.map +0 -1
  549. package/dist/date-picker-CA6ogMQB.js +0 -1521
  550. package/dist/date-picker-CA6ogMQB.js.map +0 -1
  551. package/dist/date-pickers-BPIKLdsD.js +0 -224
  552. package/dist/date-pickers-BPIKLdsD.js.map +0 -1
  553. package/dist/display-CFM5myut.js.map +0 -1
  554. package/dist/dropdown-menu-BlnyHr-9.js.map +0 -1
  555. package/dist/feedback-DWUkgEjR.js.map +0 -1
  556. package/dist/field-affordance-recipes-IjzPrCTw.js +0 -17
  557. package/dist/field-affordance-recipes-IjzPrCTw.js.map +0 -1
  558. package/dist/field-state-recipes-CBTRt9Bt.js.map +0 -1
  559. package/dist/filters-BhsUtsxW.js.map +0 -1
  560. package/dist/form-field-Bn7ZH1rA.js.map +0 -1
  561. package/dist/form-sizing-BWs70_a2.js +0 -100
  562. package/dist/form-sizing-BWs70_a2.js.map +0 -1
  563. package/dist/format-iamDSqs2.js +0 -110
  564. package/dist/format-iamDSqs2.js.map +0 -1
  565. package/dist/forms-B7pzS25o.js.map +0 -1
  566. package/dist/forms-numeric-BUBxELBv.js +0 -867
  567. package/dist/forms-numeric-BUBxELBv.js.map +0 -1
  568. package/dist/header-C59QZyxV.js.map +0 -1
  569. package/dist/http-CLTVJc5I.js.map +0 -1
  570. package/dist/input-WwYQZJzG.js +0 -202
  571. package/dist/input-WwYQZJzG.js.map +0 -1
  572. package/dist/input-ci9fIgFH.js +0 -20
  573. package/dist/input-ci9fIgFH.js.map +0 -1
  574. package/dist/item-pJ0GsOiJ.js +0 -257
  575. package/dist/item-pJ0GsOiJ.js.map +0 -1
  576. package/dist/media-gallery-DhDRgnVZ.js +0 -200
  577. package/dist/media-gallery-DhDRgnVZ.js.map +0 -1
  578. package/dist/message-COsdEvXT.js +0 -108
  579. package/dist/message-COsdEvXT.js.map +0 -1
  580. package/dist/navigation-BUIn2Qxx.js.map +0 -1
  581. package/dist/navigation-DBEu4POU.js +0 -267
  582. package/dist/navigation-DBEu4POU.js.map +0 -1
  583. package/dist/navigation-row-recipes-GVh11KiT.js.map +0 -1
  584. package/dist/number-BNT_BIzJ.js +0 -269
  585. package/dist/number-BNT_BIzJ.js.map +0 -1
  586. package/dist/overlay.recipes-BxW5FIfK.js +0 -6
  587. package/dist/overlay.recipes-BxW5FIfK.js.map +0 -1
  588. package/dist/overlays-B11wZka6.js +0 -982
  589. package/dist/overlays-B11wZka6.js.map +0 -1
  590. package/dist/page-BV6ioQg3.js +0 -202
  591. package/dist/page-BV6ioQg3.js.map +0 -1
  592. package/dist/page-header-DQRa0jug.js.map +0 -1
  593. package/dist/pagination-C29vvt3I.js.map +0 -1
  594. package/dist/popover-CoLDEg19.js.map +0 -1
  595. package/dist/popover.recipes-zgBhMlUu.js.map +0 -1
  596. package/dist/primitives-DKPOGVpj.js +0 -330
  597. package/dist/primitives-DKPOGVpj.js.map +0 -1
  598. package/dist/progress-BOe8l_FZ.js.map +0 -1
  599. package/dist/rich-text-editor-CoVrTiSv.js +0 -575
  600. package/dist/rich-text-editor-CoVrTiSv.js.map +0 -1
  601. package/dist/rich-text-editor.recipes-DxvOE0Lp.js.map +0 -1
  602. package/dist/scroll-area-BheMQ270.js.map +0 -1
  603. package/dist/select-B2mb-qN2.js +0 -108
  604. package/dist/select-B2mb-qN2.js.map +0 -1
  605. package/dist/separator-Gk_WXH-l.js.map +0 -1
  606. package/dist/settings-BnCyyPOJ.js.map +0 -1
  607. package/dist/sheet-B-q914Ad.js +0 -205
  608. package/dist/sheet-B-q914Ad.js.map +0 -1
  609. package/dist/sidebar-C_2p3Tfj.js +0 -501
  610. package/dist/sidebar-C_2p3Tfj.js.map +0 -1
  611. package/dist/sidebar-DPR7fmqN.js.map +0 -1
  612. package/dist/smart-card-CYLn46e6.js +0 -578
  613. package/dist/smart-card-CYLn46e6.js.map +0 -1
  614. package/dist/spinner-BY9HbUEh.js.map +0 -1
  615. package/dist/structure.recipes-Bqhf9oIh.js.map +0 -1
  616. package/dist/surface-recipes-CQfRr-VL.js +0 -27
  617. package/dist/surface-recipes-CQfRr-VL.js.map +0 -1
  618. package/dist/table-BS39xnlq.js +0 -1424
  619. package/dist/table-BS39xnlq.js.map +0 -1
  620. package/dist/table-DnlAJ-xR.js +0 -146
  621. package/dist/table-DnlAJ-xR.js.map +0 -1
  622. package/dist/tabs-B5cNMWiP.js +0 -187
  623. package/dist/tabs-B5cNMWiP.js.map +0 -1
  624. package/dist/text-inputs-Dh9XGyiS.js +0 -331
  625. package/dist/text-inputs-Dh9XGyiS.js.map +0 -1
  626. package/dist/text.styles-BwB7vAF2.js.map +0 -1
  627. package/dist/timelines-B9ICkQcV.js.map +0 -1
  628. package/dist/track-recipes-LLPNVwFg.js +0 -10
  629. package/dist/track-recipes-LLPNVwFg.js.map +0 -1
  630. package/dist/typography-Cv8MT-82.js +0 -96
  631. package/dist/typography-Cv8MT-82.js.map +0 -1
  632. package/dist/ui-provider-CftIB6TY.js.map +0 -1
  633. package/dist/upload-D8Za5x_c.js.map +0 -1
  634. package/dist/upload-queue-hIIYBLS7.js.map +0 -1
  635. package/dist/usage-card-DnmnJ58D.js.map +0 -1
  636. package/dist/utils-C2EKeIw3.js +0 -72
  637. package/dist/utils-C2EKeIw3.js.map +0 -1
  638. package/dist/value-inputs-DX2dbxjj.js +0 -824
  639. package/dist/value-inputs-DX2dbxjj.js.map +0 -1
  640. package/dist/workspace-C1PZmk8L.js.map +0 -1
@@ -19,7 +19,8 @@ workflow/declarations; this is a review aid, not a new design system.
19
19
  empty/missing values and narrow parent width? Zero and unavailable differ.
20
20
 
21
21
  These criteria allow different product layouts. Do not impose a universal card
22
- count, row-line limit, primary button count or one-column form rule.
22
+ count, row-line limit or one-column form rule. Emphasis is the exception: keep
23
+ one solid primary command per page or surface, so the next action stays obvious.
23
24
 
24
25
  ## Optional source checker
25
26
 
@@ -37,14 +38,48 @@ identity check. It neither edits files nor installs dependencies. Add this
37
38
  command to app CI if useful; repository lint is not automatically installed.
38
39
 
39
40
  Errors cover unknown package entrypoints/symbols and statically detected overrides
40
- of protected popup insets or control geometry/typography. Deprecated migration
41
- owners, nested framed subjects and repeated literal headings produce review
42
- warnings; warnings alone do not fail CI. Messages identify the owner and remedy.
41
+ of protected Card/popup insets, Card badges in headerAction/headerStart rather
42
+ than titleSuffix, control geometry/typography, fixed DisplayLabel/Badge
43
+ roles, cross-role shell/inner radius replacements, display-copy margins, or
44
+ attenuated shared focus rings on imported controls. Intentional nested bodies,
45
+ circular owners and joined-edge corner resets retain their roles. Import ownership
46
+ follows lexical bindings, preserving locally shadowed application components. Imports of
47
+ symbols the public index marks deprecated, nested framed subjects and repeated
48
+ literal headings produce review warnings; warnings alone do not fail CI. Messages
49
+ identify the owner and remedy. Dialog-like UI outside the overlay owners warns
50
+ too: native elements with `role="dialog"`/`"alertdialog"` or `aria-modal`, a
51
+ `fixed inset-0` layer, and imports of another modal library.
52
+ Standalone compact Cards and Page gutter removal also produce review warnings.
53
+ Buttons placed in a Page or PageHeader `actions` region warn as well: pass
54
+ commands as `primaryAction` and ordered `secondaryActions` so the header owns
55
+ their emphasis, size and overflow. Non-command controls stay valid there.
56
+ A Page with more than one solid primary command, counting `header.primaryAction`
57
+ and every Button with `tone="primary"` and no other style, warns as well. Overlays own
58
+ their own primary command and are not counted. Raw palette classes such as
59
+ `bg-blue-500`, `text-gray-600` or `border-white` warn on any element; use a
60
+ semantic surface/foreground pair or a status tone. A Card title icon and an icon on
61
+ more than one MetadataList fact warn as decoration; keep a glyph only when it
62
+ encodes state or a brand. Native `<button>` and
63
+ `<h1>`–`<h6>` elements warn in favour of Button/TextButton and Heading, which
64
+ own focus, loading and disabled states or margins and the heading scale.
65
+ Verified Card-owning Metric/card-grid, UsageCard and TaskCard compositions also
66
+ participate in nested-surface and peer-gap review. Metric without its card variant,
67
+ compact MetricGrid, flat TaskCard, ChartCard and Receipt do not establish a frame.
68
+ Direct framed/default Card peers, including GridCell-wrapped peers, in a statically
69
+ small Stack/Grid gap also warn; omitted gaps use the actual component defaults.
70
+ Review visible ring clearance and the application's ordinary surface policy.
71
+ Review the compact subject and actual parent inset; PageViewport supplies none.
72
+ Recognizable metric cards, repeated fact rows and centered empty regions suggest
73
+ Metric/MetricGrid, MetadataList/InlineStat or EmptyState. Lower-level Empty and
74
+ modal anatomy suggest their complete workflow owners. These semantic guesses
75
+ are contextual warnings: keep valid custom subjects, editable rows and modal
76
+ lifecycles when the complete owner's contract differs. An arbitrary *Card name
77
+ never establishes ownership; ChartCard and Receipt are useful counterexamples.
43
78
  Use existing app lint/typechecking for wider language, utility and accessibility
44
79
  coverage. The script is deliberately small and does not replace them.
45
80
 
46
- Coverage is limited to direct public imports, aliases/namespaces, and same-file
47
- static classes/styles/props. Dynamic expressions are reported as unresolved;
81
+ Coverage is limited to direct public imports, aliases/namespaces, native paragraph/
82
+ heading copy and same-file static classes/styles/props. Dynamic expressions are reported as unresolved;
48
83
  cross-file wrappers, external CSS, render functions and runtime values require
49
84
  review. Do not treat an empty report as proof of complete compliance or taste.
50
85
 
@@ -60,6 +95,14 @@ and failure/retry states. Use deferred requests to observe pending behavior.
60
95
  Confirm accepted data changes and draft retention; a toast is only feedback.
61
96
  Compare before/after at the same conditions and record unverified limits.
62
97
 
98
+ Treat the user's appearance feedback as an acceptance criterion. Reproduce the
99
+ reported state at its actual width/theme and improve the responsible composition
100
+ or shared recipe. Keep source findings, measurements and inspected-image judgment
101
+ distinct: matching classes/radii and zero overflow do not establish a coherent
102
+ appearance. Inspect borders, rings, clipping and settled transforms in the actual
103
+ state. Compare the requested theme value before changing a shared default; an
104
+ image should demonstrate that the correction addresses the visible complaint.
105
+
63
106
  ## Application policy
64
107
 
65
108
  Keep a small app-owned reference linked from its agent instructions: name the
@@ -68,7 +111,32 @@ information priorities and relevant local tests. Link current representative
68
111
  pages. Preserve permissions, transport, translations and product-specific forms.
69
112
  Do not copy the package API manual or edit the packaged skill to encode local policy.
70
113
 
114
+ When agent output is wrong, inspect installed/copied identity, whether the skill
115
+ was loaded, its discovery results, the actual declarations/runtime, and competing
116
+ app adapters/guides. An import-valid screen can still follow the wrong ownership
117
+ rule. Check current source rather than strengthening every sentence into a ban;
118
+ document concrete contradictions and fix the owning policy. Static checks cannot
119
+ infer product meaning or prove which instructions an agent actually followed.
120
+
71
121
  Package declarations define supported props; this skill defines shared composition
72
122
  and anatomy; the app defines business meaning and page conventions. If a shared
73
123
  owner fails in a valid composition, isolate a reproduction and report the owning
74
124
  contract. Do not spread private selectors or copy the control to hide the issue.
125
+
126
+ ## When a valid composition looks wrong
127
+
128
+ Compare the installed declarations, shipped CSS and copied skill version first.
129
+ Test without the app reset when fonts, borders or list insets differ. Combine
130
+ field affordances and vary density separately from spacing; inspect long copy
131
+ in a narrow parent at a wide viewport too. Source checks cannot detect these.
132
+
133
+ Prefer a minimal public-API reproduction over private descendant CSS. For example,
134
+ use Metric's card variant for a navigable KPI with formatted value/trend instead
135
+ of recreating its hierarchy with Card + Text. Use Heading's `size` for visual
136
+ emphasis while `tag` keeps semantic level; its default admin scale is deliberate.
137
+ A custom Card subject or an application-owned hero remains valid.
138
+
139
+ Run discovery using both the task phrase and exact family/symbol. A zero result
140
+ is not permission to invent an export: inspect public-api.json/declarations and
141
+ report a missing capability. Static unknown spreads/classes remain unresolved;
142
+ review them at runtime rather than treating an empty finding list as approval.
@@ -4,25 +4,54 @@ The [design contract](design-contract.md) records which geometry changes togethe
4
4
  and which variant choices remain independent. Retheme shared responsibilities;
5
5
  avoid overriding individual components to imitate another density or inset.
6
6
 
7
- Use shadcn semantic surfaces/foregrounds: background, card, popover, primary, secondary, muted, accent, destructive, border, input, ring, charts and sidebar. Central success/info/warning foreground pairs express states; never overload primary or statuses as decoration.
7
+ Use shadcn semantic surfaces/foregrounds: background, card, popover, primary, secondary, muted, accent, destructive, border, input, ring, charts and sidebar. Central success/info/warning foreground pairs express states; never overload primary or statuses as decoration. `--input` is the control boundary and keeps 3:1 against every surface (WCAG 1.4.11); `--border` is for dividers and surface edges. Keep that split when rebranding.
8
8
 
9
9
  tokens.json distinguishes 23 structural roots, advanced typography/status settings, and derived utility spellings. A utility is not another public variable. Keep overrides in one stylesheet at root or ThemeScope, without copying computed CSS into JavaScript.
10
10
 
11
- Default --radius is 1rem (16px). rounded-radius is the default throughout the package. rounded-inner is opt-in for nested bodies/items and derives at 0.6× (9.6px). Do not invent an outer/surface radius or enlarge an individual card based on padding. Circular avatars/dots remain intentional shapes.
11
+ The default `--radius` is 0.75rem (12px). One public root drives two shared
12
+ roles; component owners choose the role, so ordinary callers add no radius class.
13
+
14
+ | Role | Owners | Default |
15
+ | --- | --- | --- |
16
+ | `rounded-radius` | Cards, popup/command shells and other outer surfaces | 12px |
17
+ | `rounded-inner` | Inputs, buttons, select/facet triggers, collection/navigation rows and intentional nested bodies | 9px |
18
+
19
+ Standalone controls retain the inner role; a complete nested Card retains its
20
+ outer-shell role. Physical nesting does not select a different recipe.
21
+
22
+ The inner role is `min(radius × 0.75, min(height-action, height-control) ×
23
+ density-scale ÷ 4)`. The height bound keeps short controls restrained when an app
24
+ increases the global radius; a 0.75 multiplier alone would still produce capsules.
25
+ The smaller base height preserves a common inner radius when action and field
26
+ heights differ. Density scales that bound once: the default roots at density
27
+ 0.875 yield 7.875px inner corners. Control size variants share the role; spacing
28
+ scale and surface padding do not change it. Do not override the derived alias as
29
+ another theme setting. Circular avatars/dots and joined-edge resets retain their
30
+ explicit shape mechanics; Badge retains its own root-based recipe.
31
+
32
+ CSS fits overlapping curves to the actual box, so computed values alone do not
33
+ prove the visible shape. Inspect settled corners, borders, clipping and focus
34
+ rings in opened surfaces. Change `--radius` at the theme boundary, rather than
35
+ replacing individual components' owned corners.
12
36
 
13
37
  ```css
14
- /* After themelia-react-ui/style.css; no Tailwind build needed for overrides. */
38
+ /* Intentional 40px controls, after style.css; overrides need no Tailwind build. */
15
39
  :root {
16
- --radius: 1rem;
40
+ --radius: 0.75rem;
17
41
  --height-action: 2.5rem;
18
42
  --height-control: 2.5rem;
19
- --surface-x: 1rem;
20
- --surface-y: 1rem;
43
+ --surface-x: 1.25rem;
44
+ --surface-y: 1.25rem;
21
45
  }
22
46
  ```
23
47
 
24
48
  Action and editable-control heights are separate roles; keep roots equal for adjoining alignment. `--space-scale` multiplies structural gaps, inline insets and surface padding. `--density-scale` multiplies action/control height and collection block padding. Roots are unscaled measurements; do not pre-multiply and then apply the utility again.
25
49
 
50
+ Both surface roots default to 1.25rem. At a 16px root font and space-scale 1,
51
+ ordinary surface insets are 20px, compact insets are 10px and large insets are
52
+ 36px. Page's default large gutters inherit that same recipe. Row insets,
53
+ control heights and copy gaps keep their independent roots.
54
+
26
55
  | Shared geometry | Root / derivation |
27
56
  | --- | --- |
28
57
  | Actions versus fields | `--height-action` versus `--height-control`; default size uses the root times density-scale |
@@ -34,12 +63,24 @@ Action and editable-control heights are separate roles; keep roots equal for adj
34
63
 
35
64
  Use discrete inset, density and size props for the component responsibility described in [composition](composition.md). CSS scales are independent continuous theme settings. Primary row text does not shrink to xs merely because a density is compact. Public Input and Command search retain normal desktop editable text; coarse-pointer devices use text-base at mobile and tablet widths. Typography components remain margin-free.
36
65
 
66
+ The default primary is near-black so success and other status colors never compete
67
+ with it. `themelia-react-ui/themes/green.css`, imported after `style.css`, is the
68
+ opt-in Themelia green brand (primary, its foreground, the dark accent and the first
69
+ chart series). Rebrand by setting `--primary` and `--primary-foreground` in both
70
+ `:root` and `.dark`; keep the brand hue clear of the status hues and check 4.5:1.
71
+
37
72
  Root overrides reach body portals. Scoped themes use ThemeScope from ui-provider. Advanced editing uses the theme-tweaker public API, editing CSS rather than adding another JavaScript styling system.
38
73
 
39
74
  Explicit portal containers take precedence over the nearest ThemeScope. Place those containers inside the intended theme boundary; a portal deliberately moved outside it cannot inherit that boundary automatically. Test the opened popup, not only its trigger.
40
75
 
41
76
  Apps using semantic utilities in their own JSX process themelia-react-ui/theme.css after Tailwind in a Tailwind v4 stylesheet. Compiled style.css styles shipped components but does not compile arbitrary app utility names. Keep app-owned classes namespaced and layout-focused.
42
77
 
78
+ The package class merger recognizes token overrides only for advertised utilities and exact class spellings emitted by the library stylesheet, including their negative, important and responsive forms. A valid Tailwind alias such as `m-space-2xl` can still be absent from that stylesheet. Unshipped aliases preserve existing fallback classes; they do not receive package override semantics merely because an app's separate Tailwind build can generate them. Use the app's own merge configuration for additional app-compiled aliases.
79
+
80
+ `ring` and `sidebar-ring` are focus roles tested at full strength. Preserve that
81
+ strength and verify at least 3:1 against adjacent surfaces when overriding the
82
+ theme; adding opacity can invalidate contrast even when the root color passes.
83
+
43
84
  ## Extend without drift
44
85
 
45
86
  Reuse existing color, text, action/control, row, surface or shell responsibilities first. An app token stays app-owned, not a package knob. New package tokens require multiple consumers, one owner/default/purpose, contract/docs updates and scoped behavior verification. Never expand the budget to fix one preview.
@@ -49,8 +90,18 @@ Use public structures/utilities for custom composition. Missing API seams should
49
90
 
50
91
  ## Copy rhythm
51
92
 
52
- Normal title/description gaps use `--gap-normal` (0.5rem); dense row and menu
53
- copy uses `--gap-dense` (0.25rem). Both multiply once by `--space-scale` and
93
+ Normal title/description gaps use `--gap-normal` (0.25rem); dense row and menu
94
+ copy uses `--gap-dense` (0.125rem). Both multiply once by `--space-scale` and
54
95
  inherit through ThemeScope and portaled surfaces. Control heights and insets
55
96
  remain separate. Use `textGap="normal" | "dense"` on headed surfaces and
56
97
  `gap="normal" | "dense"` on Stack/Grid instead of adding a description margin.
98
+
99
+ ## Independent geometry roles
100
+
101
+ Use `--space-scale` for room around content and `--density-scale` for control
102
+ heights. `--icon` and `--avatar` set media dimensions independently. Component
103
+ `size` picks a shared sm/md/lg recipe; collection `density` changes row padding.
104
+ Test these choices separately and in combination. Tables follow row insets,
105
+ Cards and code/message bodies follow surfaces, and image containment uses generic
106
+ spacing. Foundation directional spacing utilities ship with style.css and use
107
+ the same seven steps as gaps; generated spellings are not new theme roots.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "package": "themelia-react-ui",
3
- "version": "1.0.1",
3
+ "version": "2.0.0",
4
4
  "structural": [
5
5
  {
6
6
  "name": "--space-scale",
@@ -14,12 +14,12 @@
14
14
  },
15
15
  {
16
16
  "name": "--gap-normal",
17
- "default": "0.5rem",
17
+ "default": "0.25rem",
18
18
  "purpose": "Vertical rhythm between titles and structural descriptions."
19
19
  },
20
20
  {
21
21
  "name": "--gap-dense",
22
- "default": "0.25rem",
22
+ "default": "0.125rem",
23
23
  "purpose": "Vertical rhythm between row titles and compact supporting copy."
24
24
  },
25
25
  {
@@ -49,12 +49,12 @@
49
49
  },
50
50
  {
51
51
  "name": "--surface-x",
52
- "default": "1rem",
52
+ "default": "1.25rem",
53
53
  "purpose": "Default inline inset for cards and multi-content surfaces."
54
54
  },
55
55
  {
56
56
  "name": "--surface-y",
57
- "default": "1rem",
57
+ "default": "1.25rem",
58
58
  "purpose": "Default block inset for cards and multi-content surfaces."
59
59
  },
60
60
  {
@@ -120,11 +120,11 @@
120
120
  ],
121
121
  "radius": {
122
122
  "name": "--radius",
123
- "default": "1rem",
124
- "purpose": "Default corners throughout the package; opt-in nested corners derive from this root.",
123
+ "default": "0.75rem",
124
+ "purpose": "Shared 12px outer corners; inner control/row corners derive from this root and stay rectangular.",
125
125
  "defaultUtility": "rounded-radius",
126
126
  "innerUtility": "rounded-inner",
127
- "innerFormula": "calc(var(--radius) * 0.6)"
127
+ "innerFormula": "min(calc(var(--radius) * 0.75), calc(min(var(--height-action), var(--height-control)) * var(--density-scale) / 4))"
128
128
  },
129
129
  "advanced": [
130
130
  "--font-heading",
@@ -209,6 +209,7 @@
209
209
  "gap-space-lg",
210
210
  "gap-space-xl",
211
211
  "gap-space-2xl",
212
+ "gap-space-3xl",
212
213
  "gap-x-space-2xs",
213
214
  "gap-x-space-xs",
214
215
  "gap-x-space-sm",
@@ -216,6 +217,7 @@
216
217
  "gap-x-space-lg",
217
218
  "gap-x-space-xl",
218
219
  "gap-x-space-2xl",
220
+ "gap-x-space-3xl",
219
221
  "gap-y-space-2xs",
220
222
  "gap-y-space-xs",
221
223
  "gap-y-space-sm",
@@ -223,6 +225,7 @@
223
225
  "gap-y-space-lg",
224
226
  "gap-y-space-xl",
225
227
  "gap-y-space-2xl",
228
+ "gap-y-space-3xl",
226
229
  "p-space-2xs",
227
230
  "p-space-xs",
228
231
  "p-space-sm",
@@ -256,7 +259,175 @@
256
259
  "gap-x-normal",
257
260
  "gap-x-dense",
258
261
  "gap-y-normal",
259
- "gap-y-dense"
262
+ "gap-y-dense",
263
+ "pt-space-2xs",
264
+ "pt-space-xs",
265
+ "pt-space-sm",
266
+ "pt-space-md",
267
+ "pt-space-lg",
268
+ "pt-space-xl",
269
+ "pt-space-2xl",
270
+ "pb-space-2xs",
271
+ "pb-space-xs",
272
+ "pb-space-sm",
273
+ "pb-space-md",
274
+ "pb-space-lg",
275
+ "pb-space-xl",
276
+ "pb-space-2xl",
277
+ "pl-space-2xs",
278
+ "pl-space-xs",
279
+ "pl-space-sm",
280
+ "pl-space-md",
281
+ "pl-space-lg",
282
+ "pl-space-xl",
283
+ "pl-space-2xl",
284
+ "pr-space-2xs",
285
+ "pr-space-xs",
286
+ "pr-space-sm",
287
+ "pr-space-md",
288
+ "pr-space-lg",
289
+ "pr-space-xl",
290
+ "pr-space-2xl",
291
+ "ps-space-2xs",
292
+ "ps-space-xs",
293
+ "ps-space-sm",
294
+ "ps-space-md",
295
+ "ps-space-lg",
296
+ "ps-space-xl",
297
+ "ps-space-2xl",
298
+ "pe-space-2xs",
299
+ "pe-space-xs",
300
+ "pe-space-sm",
301
+ "pe-space-md",
302
+ "pe-space-lg",
303
+ "pe-space-xl",
304
+ "pe-space-2xl",
305
+ "m-space-2xs",
306
+ "m-space-xs",
307
+ "m-space-sm",
308
+ "m-space-md",
309
+ "m-space-lg",
310
+ "m-space-xl",
311
+ "m-space-2xl",
312
+ "mx-space-2xs",
313
+ "mx-space-xs",
314
+ "mx-space-sm",
315
+ "mx-space-md",
316
+ "mx-space-lg",
317
+ "mx-space-xl",
318
+ "mx-space-2xl",
319
+ "my-space-2xs",
320
+ "my-space-xs",
321
+ "my-space-sm",
322
+ "my-space-md",
323
+ "my-space-lg",
324
+ "my-space-xl",
325
+ "my-space-2xl",
326
+ "mt-space-2xs",
327
+ "mt-space-xs",
328
+ "mt-space-sm",
329
+ "mt-space-md",
330
+ "mt-space-lg",
331
+ "mt-space-xl",
332
+ "mt-space-2xl",
333
+ "mb-space-2xs",
334
+ "mb-space-xs",
335
+ "mb-space-sm",
336
+ "mb-space-md",
337
+ "mb-space-lg",
338
+ "mb-space-xl",
339
+ "mb-space-2xl",
340
+ "ml-space-2xs",
341
+ "ml-space-xs",
342
+ "ml-space-sm",
343
+ "ml-space-md",
344
+ "ml-space-lg",
345
+ "ml-space-xl",
346
+ "ml-space-2xl",
347
+ "mr-space-2xs",
348
+ "mr-space-xs",
349
+ "mr-space-sm",
350
+ "mr-space-md",
351
+ "mr-space-lg",
352
+ "mr-space-xl",
353
+ "mr-space-2xl",
354
+ "ms-space-2xs",
355
+ "ms-space-xs",
356
+ "ms-space-sm",
357
+ "ms-space-md",
358
+ "ms-space-lg",
359
+ "ms-space-xl",
360
+ "ms-space-2xl",
361
+ "me-space-2xs",
362
+ "me-space-xs",
363
+ "me-space-sm",
364
+ "me-space-md",
365
+ "me-space-lg",
366
+ "me-space-xl",
367
+ "me-space-2xl",
368
+ "top-space-2xs",
369
+ "top-space-xs",
370
+ "top-space-sm",
371
+ "top-space-md",
372
+ "top-space-lg",
373
+ "top-space-xl",
374
+ "top-space-2xl",
375
+ "bottom-space-2xs",
376
+ "bottom-space-xs",
377
+ "bottom-space-sm",
378
+ "bottom-space-md",
379
+ "bottom-space-lg",
380
+ "bottom-space-xl",
381
+ "bottom-space-2xl",
382
+ "left-space-2xs",
383
+ "left-space-xs",
384
+ "left-space-sm",
385
+ "left-space-md",
386
+ "left-space-lg",
387
+ "left-space-xl",
388
+ "left-space-2xl",
389
+ "right-space-2xs",
390
+ "right-space-xs",
391
+ "right-space-sm",
392
+ "right-space-md",
393
+ "right-space-lg",
394
+ "right-space-xl",
395
+ "right-space-2xl",
396
+ "start-space-2xs",
397
+ "start-space-xs",
398
+ "start-space-sm",
399
+ "start-space-md",
400
+ "start-space-lg",
401
+ "start-space-xl",
402
+ "start-space-2xl",
403
+ "end-space-2xs",
404
+ "end-space-xs",
405
+ "end-space-sm",
406
+ "end-space-md",
407
+ "end-space-lg",
408
+ "end-space-xl",
409
+ "end-space-2xl",
410
+ "inset-space-2xs",
411
+ "inset-space-xs",
412
+ "inset-space-sm",
413
+ "inset-space-md",
414
+ "inset-space-lg",
415
+ "inset-space-xl",
416
+ "inset-space-2xl",
417
+ "inset-x-space-2xs",
418
+ "inset-x-space-xs",
419
+ "inset-x-space-sm",
420
+ "inset-x-space-md",
421
+ "inset-x-space-lg",
422
+ "inset-x-space-xl",
423
+ "inset-x-space-2xl",
424
+ "inset-y-space-2xs",
425
+ "inset-y-space-xs",
426
+ "inset-y-space-sm",
427
+ "inset-y-space-md",
428
+ "inset-y-space-lg",
429
+ "inset-y-space-xl",
430
+ "inset-y-space-2xl"
260
431
  ],
261
432
  "states": [
262
433
  "text-link-color",
@@ -12,6 +12,20 @@ This recipe uses `themelia-react-ui/features/table`, so install `@tanstack/react
12
12
 
13
13
  Verify loading, empty refresh, failure/retry and ready records. Open the row menu with pointer and keyboard, activate Open account, and assert the requested URL. Check narrow overflow and email-link behavior. If you need a presentational table without TanStack features, discover `themelia-react-ui/base/table` and inspect its separate declaration.
14
14
 
15
+ `enableResizing` enables pointer and keyboard separators on individual/grouped
16
+ headers. Arrow keys follow inherited text direction; Home/End use leaf minimums
17
+ and explicit maximums from your column definitions. The table owns its one named
18
+ scroll region. Verify grouped widths, sticky header rows and first-column behavior
19
+ with real overflow in both directions, rather than adding another focusable wrapper.
20
+
21
+ ## Comment attachments
22
+
23
+ `Comments` and `CommentComposer` announce attachment validation/upload errors.
24
+ Use their existing attachment error `strings` for localization. Headless
25
+ `useAttachmentUpload` accepts those same keys through `strings`; render feedback
26
+ from `onError` in your own composer. Failed chips retain retry/remove actions.
27
+ Reset/removal aborts pending uploads; the app owns transport and persistence.
28
+
15
29
  ## Detail and framing
16
30
 
17
31
  [AccountDetail](../examples/detail.tsx) exports `AccountDetail`, `AccountDetailProps` and `AccountDetailRecord`. Supply `account`, `onEdit(id)` and `onBack()`. Card owns the frame/header/body/footer; Name, Email, Date, Money and Value own formatting and missing-value fallbacks. `balanceMinor` uses `Money unit="minor"`; currency and date values come from the app.
@@ -63,6 +77,26 @@ that callback stable when its meaning is unchanged. Stabilize these lifecycle
63
77
  inputs deliberately, not every object. A real record/scope change can replace
64
78
  definitions; the app then chooses appropriate destination focus.
65
79
 
80
+ ## Single resource page
81
+
82
+ Use `Page` from `themelia-react-ui/layout/page` for the record route's identity,
83
+ back navigation, content bounds and commands. Pass the record's main command as
84
+ `header.primaryAction` and supporting commands as `header.secondaryActions`;
85
+ `PageHeader` and `PageActions` remain for custom shells and toolbars.
86
+ The [layout recipe](../examples/app-layout.tsx) demonstrates that route boundary;
87
+ the [detail recipe](../examples/detail.tsx) demonstrates an independently framed
88
+ record subject with MetadataList and value primitives. Decide whether the record
89
+ needs that independent Card before nesting it under Page. Avoid repeating the
90
+ route heading just to frame the same facts. Page owns gutters; PageViewport owns
91
+ scrolling only. App navigation, record loading/missing/error/retry, permissions,
92
+ edit and delete callbacks remain application responsibilities.
93
+
94
+ Use `WorkspaceLayout` from `themelia-react-ui/layout/workspace` when independently composed record header,
95
+ sidebar/main/rail regions are needed; inspect `features/resource` for complete
96
+ resource coordination. A single record does not automatically need either.
97
+ Read [layout composition](composition.md#application-layouts) for boundary and
98
+ parent-width behavior, then the exact selected declaration for its current props.
99
+
66
100
  ## Validated editing
67
101
 
68
102
  [AccountEdit](../examples/edit.tsx) exports `AccountEdit`, `AccountEditProps` and `AccountEditValue`. Supply `initial`, `onSave(value): Promise<AccountEditValue>` and `onCancel()`. Mount with `key={initial.id}` when switching records. The draft is local to that mount; resetting the same record's draft deliberately also requires a new key or your own controlled adaptation.
@@ -23,7 +23,7 @@ try {
23
23
  const reports = [...files].sort().map(filename => analyzeComposition(fs.readFileSync(filename, 'utf8'), { filename, index, ts }));
24
24
  const findings = reports.flatMap(report => report.findings);
25
25
  const errors = findings.filter(finding => finding.severity === 'error').length;
26
- process.stdout.write(JSON.stringify({ package: index.package, version: index.version, files: files.size, errors, warnings: findings.length - errors, findings, unresolved: reports.flatMap(report => report.unresolved), limits: 'Direct public imports and same-file static JSX only; external CSS, cross-file wrappers and dynamic values require review.' }, null, 2) + '\n');
26
+ process.stdout.write(JSON.stringify({ package: index.package, version: index.version, files: files.size, errors, warnings: findings.length - errors, findings, unresolved: reports.flatMap(report => report.unresolved), limits: 'Source analysis only: recognized imports and same-file static JSX. External CSS, cross-file wrappers and dynamic values require review. No rendered, interaction, visual-acceptance or production-readiness verdict.' }, null, 2) + '\n');
27
27
  process.exitCode = errors ? 1 : 0;
28
28
  } catch (error) {
29
29
  process.stderr.write(`check-composition: ${error.message}\nRun from the consumer app with its TypeScript development dependency installed.\n`);