themelia-react-ui 2.0.0 → 2.0.2

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 (707) hide show
  1. package/CHANGELOG.md +527 -0
  2. package/README.md +47 -14
  3. package/THIRD_PARTY_NOTICES.md +13 -0
  4. package/dist/accordion-Cjb6sx0G.js +208 -0
  5. package/dist/accordion-Cjb6sx0G.js.map +1 -0
  6. package/dist/action-menu-CllU52Mm.js +280 -0
  7. package/dist/action-menu-CllU52Mm.js.map +1 -0
  8. package/dist/affordance-geometry.generated-tF36bREk.js +140 -0
  9. package/dist/affordance-geometry.generated-tF36bREk.js.map +1 -0
  10. package/dist/ai-artifact-DvTwDVyL.js +1148 -0
  11. package/dist/ai-artifact-DvTwDVyL.js.map +1 -0
  12. package/dist/{app-shell-BE_j8-AT.js → app-shell-C4FhvCqF.js} +5 -5
  13. package/dist/{app-shell-BE_j8-AT.js.map → app-shell-C4FhvCqF.js.map} +1 -1
  14. package/dist/attachment-BxDfL2mw.js +246 -0
  15. package/dist/attachment-BxDfL2mw.js.map +1 -0
  16. package/dist/{auth-M3vGMgDR.js → auth-ax2BqjrI.js} +241 -235
  17. package/dist/auth-ax2BqjrI.js.map +1 -0
  18. package/dist/{avatar-djdaaQ_s.js → avatar-DAPlDvhJ.js} +67 -66
  19. package/dist/avatar-DAPlDvhJ.js.map +1 -0
  20. package/dist/badge-HpFqoqSY.js +93 -0
  21. package/dist/badge-HpFqoqSY.js.map +1 -0
  22. package/dist/base/accordion.js +1 -1
  23. package/dist/base/action-menu.js +1 -1
  24. package/dist/base/attachment.js +1 -1
  25. package/dist/base/avatar.js +1 -1
  26. package/dist/base/badge.js +1 -1
  27. package/dist/base/batch-action-bar.js +3 -0
  28. package/dist/base/buttons.js +2 -3
  29. package/dist/base/cards.js +2 -2
  30. package/dist/base/carousel.js +50 -46
  31. package/dist/base/carousel.js.map +1 -1
  32. package/dist/base/cascader.js +69 -81
  33. package/dist/base/cascader.js.map +1 -1
  34. package/dist/base/chart.js +1 -1
  35. package/dist/base/choice-inputs.js +3 -3
  36. package/dist/base/code-block.js +1 -1
  37. package/dist/base/combobox.js +2 -2
  38. package/dist/base/command.js +1 -1
  39. package/dist/base/copyable.js +1 -1
  40. package/dist/base/date-pickers.js +2 -2
  41. package/dist/base/display.js +7 -7
  42. package/dist/base/feedback.js +3 -3
  43. package/dist/base/forms-numeric.js +1 -1
  44. package/dist/base/forms.js +2 -2
  45. package/dist/base/inline-edit.js +20 -20
  46. package/dist/base/inline-edit.js.map +1 -1
  47. package/dist/base/item.js +1 -1
  48. package/dist/base/media-gallery.js +1 -1
  49. package/dist/base/metadata-list.js +3 -0
  50. package/dist/base/navigation.js +7 -7
  51. package/dist/base/popover-menu.js +1 -1
  52. package/dist/base/popover.js +1 -1
  53. package/dist/base/qr-code.js +1 -1
  54. package/dist/base/repeaters.js +216 -220
  55. package/dist/base/repeaters.js.map +1 -1
  56. package/dist/base/sheet.js +1 -1
  57. package/dist/base/sidebar.js +1 -1
  58. package/dist/base/signature-pad.js +147 -137
  59. package/dist/base/signature-pad.js.map +1 -1
  60. package/dist/base/skeleton.js +1 -1
  61. package/dist/base/spinner.js +79 -2
  62. package/dist/base/spinner.js.map +1 -0
  63. package/dist/base/structure.js +1 -1
  64. package/dist/base/table.js +1 -1
  65. package/dist/base/text-inputs.js +2 -2
  66. package/dist/base/toaster.js +46 -45
  67. package/dist/base/toaster.js.map +1 -1
  68. package/dist/base/tree.js +1 -1
  69. package/dist/base/upload-queue.js +1 -1
  70. package/dist/base/upload.js +3 -3
  71. package/dist/base/value-inputs.js +2 -2
  72. package/dist/batch-action-bar-DnUJ21NQ.js +105 -0
  73. package/dist/batch-action-bar-DnUJ21NQ.js.map +1 -0
  74. package/dist/blocks/admin.js +171 -169
  75. package/dist/blocks/admin.js.map +1 -1
  76. package/dist/blocks/ai.js +308 -285
  77. package/dist/blocks/ai.js.map +1 -1
  78. package/dist/blocks/analytics/usage-card.js +1 -1
  79. package/dist/blocks/analytics.js +626 -589
  80. package/dist/blocks/analytics.js.map +1 -1
  81. package/dist/blocks/collaboration.js +1 -1
  82. package/dist/blocks/commerce/receipt.js +1 -1
  83. package/dist/blocks/commerce.js +2051 -1329
  84. package/dist/blocks/commerce.js.map +1 -1
  85. package/dist/blocks/data-display.js +3 -2
  86. package/dist/blocks/onboarding.js +68 -58
  87. package/dist/blocks/onboarding.js.map +1 -1
  88. package/dist/blocks/planning.js +27 -26
  89. package/dist/blocks/planning.js.map +1 -1
  90. package/dist/blocks/timelines.js +1 -1
  91. package/dist/breadcrumbs-C-oqs1sQ.js +129 -0
  92. package/dist/breadcrumbs-C-oqs1sQ.js.map +1 -0
  93. package/dist/{button-R9CCoH7A.js → button-DVzspB_G.js} +15 -14
  94. package/dist/button-DVzspB_G.js.map +1 -0
  95. package/dist/{button-BS3KDg00.js → buttons-DPZekJFu.js} +208 -216
  96. package/dist/buttons-DPZekJFu.js.map +1 -0
  97. package/dist/cards-BaBZR-AU.js +68 -0
  98. package/dist/cards-BaBZR-AU.js.map +1 -0
  99. package/dist/{chart-DwYRKKc-.js → chart-ZOYyK2xG.js} +58 -55
  100. package/dist/chart-ZOYyK2xG.js.map +1 -0
  101. package/dist/checkbox-AWIhNhmo.js +36 -0
  102. package/dist/checkbox-AWIhNhmo.js.map +1 -0
  103. package/dist/choice-inputs-CNHvARCJ.js +770 -0
  104. package/dist/choice-inputs-CNHvARCJ.js.map +1 -0
  105. package/dist/code-block-DeneBJR_.js +185 -0
  106. package/dist/code-block-DeneBJR_.js.map +1 -0
  107. package/dist/{collapsible-oMUGM4tr.js → collapsible-C-_l4hpy.js} +4 -4
  108. package/dist/{collapsible-oMUGM4tr.js.map → collapsible-C-_l4hpy.js.map} +1 -1
  109. package/dist/{collection-content-Ys-OZOkY.js → collection-content-By56pLog.js} +3 -3
  110. package/dist/{collection-content-Ys-OZOkY.js.map → collection-content-By56pLog.js.map} +1 -1
  111. package/dist/combobox-C0EQW6dr.js +875 -0
  112. package/dist/combobox-C0EQW6dr.js.map +1 -0
  113. package/dist/combobox-xCQ2RMNE.js +309 -0
  114. package/dist/combobox-xCQ2RMNE.js.map +1 -0
  115. package/dist/{command-kPMPjIxJ.js → command-C25VMRII.js} +7 -7
  116. package/dist/{command-kPMPjIxJ.js.map → command-C25VMRII.js.map} +1 -1
  117. package/dist/{comments-You0Bzbr.js → comments-BYYlTA8E.js} +390 -379
  118. package/dist/comments-BYYlTA8E.js.map +1 -0
  119. package/dist/components/base/action-menu/action-menu.d.ts +21 -4
  120. package/dist/components/base/action-menu/action-menu.recipes.d.ts +21 -0
  121. package/dist/components/base/action-menu/index.d.ts +1 -0
  122. package/dist/components/base/badge/badge.recipes.d.ts +5 -5
  123. package/dist/components/base/batch-action-bar/batch-action-bar.d.ts +50 -0
  124. package/dist/components/base/batch-action-bar/batch-action-bar.strings.d.ts +20 -0
  125. package/dist/components/base/batch-action-bar/index.d.ts +8 -0
  126. package/dist/components/base/buttons/button-group.recipes.d.ts +1 -1
  127. package/dist/components/base/buttons/button.recipes.d.ts +2 -2
  128. package/dist/components/base/buttons/loader-button.d.ts +2 -1
  129. package/dist/components/base/cards/card.recipes.d.ts +2 -3
  130. package/dist/components/base/cards/partials/smart-card-skeleton.d.ts +3 -13
  131. package/dist/components/base/cards/smart-card.types.d.ts +11 -4
  132. package/dist/components/base/chart/chart.d.ts +2 -5
  133. package/dist/components/base/choice-inputs/checkbox.d.ts +2 -2
  134. package/dist/components/base/choice-inputs/choice-types.d.ts +18 -6
  135. package/dist/components/base/combobox/combobox.strings.d.ts +7 -0
  136. package/dist/components/base/combobox/index.d.ts +30 -4
  137. package/dist/components/base/display/alert-dialog.d.ts +6 -5
  138. package/dist/components/base/display/dialog.d.ts +4 -8
  139. package/dist/components/base/display/icon-badge/icon-badge.d.ts +1 -1
  140. package/dist/components/base/forms/form-sizing.d.ts +26 -15
  141. package/dist/components/base/metadata-list/index.d.ts +12 -0
  142. package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-list.d.ts +28 -25
  143. package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-value.d.ts +2 -2
  144. package/dist/components/base/navigation/index.d.ts +1 -1
  145. package/dist/components/base/navigation/page-header/index.d.ts +1 -0
  146. package/dist/components/base/navigation/page-header/page-header-commands.d.ts +73 -0
  147. package/dist/components/base/navigation/page-header/page-header.d.ts +26 -3
  148. package/dist/components/base/navigation/pagination.d.ts +5 -2
  149. package/dist/components/base/popover/popover.recipes.d.ts +15 -1
  150. package/dist/components/base/sheet/sheet.d.ts +4 -8
  151. package/dist/components/base/signature-pad/signature-pad.types.d.ts +5 -1
  152. package/dist/components/base/signature-pad/signature-pad.utils.d.ts +11 -3
  153. package/dist/components/base/table/index.d.ts +9 -2
  154. package/dist/components/base/text-inputs/field-clear-button.d.ts +6 -0
  155. package/dist/components/base/text-inputs/input-group.d.ts +2 -2
  156. package/dist/components/base/upload/upload.recipes.d.ts +25 -3
  157. package/dist/components/base/value-inputs/index.d.ts +5 -5
  158. package/dist/components/base/value-inputs/tags-input.d.ts +36 -12
  159. package/dist/components/blocks/ai/ai-shimmer/ai-shimmer.d.ts +1 -1
  160. package/dist/components/blocks/ai/ai-shimmer/types.d.ts +3 -0
  161. package/dist/components/blocks/commerce/address-card/address-card.d.ts +1 -1
  162. package/dist/components/blocks/commerce/address-card/types.d.ts +2 -1
  163. package/dist/components/blocks/commerce/cart-summary/cart-summary.d.ts +3 -1
  164. package/dist/components/blocks/commerce/cart-summary/index.d.ts +2 -2
  165. package/dist/components/blocks/commerce/cart-summary/types.d.ts +6 -1
  166. package/dist/components/blocks/commerce/discount-stack/discount-stack.d.ts +3 -1
  167. package/dist/components/blocks/commerce/discount-stack/index.d.ts +2 -2
  168. package/dist/components/blocks/commerce/discount-stack/types.d.ts +16 -4
  169. package/dist/components/blocks/commerce/fulfillment-group/fulfillment-group.d.ts +5 -0
  170. package/dist/components/blocks/commerce/fulfillment-group/index.d.ts +2 -0
  171. package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +45 -0
  172. package/dist/components/blocks/commerce/index.d.ts +13 -5
  173. package/dist/components/blocks/commerce/invoice-header/invoice-header.d.ts +1 -1
  174. package/dist/components/blocks/commerce/invoice-header/types.d.ts +4 -2
  175. package/dist/components/blocks/commerce/invoice-mini/invoice-mini.d.ts +1 -1
  176. package/dist/components/blocks/commerce/invoice-mini/types.d.ts +2 -1
  177. package/dist/components/blocks/commerce/order-customer/index.d.ts +2 -0
  178. package/dist/components/blocks/commerce/order-customer/order-customer.d.ts +5 -0
  179. package/dist/components/blocks/commerce/order-customer/types.d.ts +48 -0
  180. package/dist/components/blocks/commerce/order-header/index.d.ts +2 -0
  181. package/dist/components/blocks/commerce/order-header/order-header.d.ts +5 -0
  182. package/dist/components/blocks/commerce/order-header/types.d.ts +37 -0
  183. package/dist/components/blocks/commerce/order-line-item/index.d.ts +2 -0
  184. package/dist/components/blocks/commerce/order-line-item/order-line-item.d.ts +5 -0
  185. package/dist/components/blocks/commerce/order-line-item/types.d.ts +46 -0
  186. package/dist/components/blocks/commerce/order-summary/index.d.ts +2 -0
  187. package/dist/components/blocks/commerce/order-summary/order-summary.d.ts +5 -0
  188. package/dist/components/blocks/commerce/order-summary/types.d.ts +42 -0
  189. package/dist/components/blocks/commerce/order-transactions/index.d.ts +2 -0
  190. package/dist/components/blocks/commerce/order-transactions/order-transactions.d.ts +5 -0
  191. package/dist/components/blocks/commerce/order-transactions/types.d.ts +46 -0
  192. package/dist/components/blocks/commerce/payment-method/index.d.ts +2 -2
  193. package/dist/components/blocks/commerce/payment-method/payment-method.d.ts +9 -1
  194. package/dist/components/blocks/commerce/payment-method/types.d.ts +12 -1
  195. package/dist/components/blocks/commerce/refund-status/index.d.ts +2 -2
  196. package/dist/components/blocks/commerce/refund-status/refund-status.d.ts +3 -1
  197. package/dist/components/blocks/commerce/refund-status/types.d.ts +6 -3
  198. package/dist/components/blocks/commerce/shared/address-lines.d.ts +21 -0
  199. package/dist/components/blocks/commerce/shared/line-thumbnail.d.ts +9 -0
  200. package/dist/components/blocks/commerce/shared/order-status.d.ts +51 -0
  201. package/dist/components/blocks/commerce/shipment-tracking/shipment-tracking.d.ts +1 -1
  202. package/dist/components/blocks/commerce/shipment-tracking/types.d.ts +27 -6
  203. package/dist/components/blocks/commerce/summary-panel/amount-row.d.ts +2 -0
  204. package/dist/components/blocks/commerce/summary-panel/index.d.ts +3 -0
  205. package/dist/components/blocks/commerce/summary-panel/summary-panel.d.ts +2 -0
  206. package/dist/components/blocks/commerce/summary-panel/types.d.ts +26 -0
  207. package/dist/components/blocks/commerce/tax-breakdown/tax-breakdown.d.ts +1 -1
  208. package/dist/components/blocks/commerce/tax-breakdown/types.d.ts +2 -1
  209. package/dist/components/blocks/data-display/inline-stat/inline-stat.d.ts +16 -8
  210. package/dist/components/blocks/data-display/metadata/index.d.ts +30 -4
  211. package/dist/components/features/activities/partials/activity-marker.d.ts +6 -3
  212. package/dist/components/features/activities/partials/activity-row.d.ts +6 -2
  213. package/dist/components/features/activities/partials/tone-tokens.d.ts +0 -6
  214. package/dist/components/features/appointment-calendar/appointment-calendar.d.ts +5 -0
  215. package/dist/components/features/appointment-calendar/appointment-calendar.types.d.ts +220 -0
  216. package/dist/components/features/appointment-calendar/appointment-calendar.utils.d.ts +41 -0
  217. package/dist/components/features/appointment-calendar/index.d.ts +3 -0
  218. package/dist/components/features/appointment-calendar/partials/appointment-agenda.d.ts +32 -0
  219. package/dist/components/features/appointment-calendar/partials/appointment-month.d.ts +13 -0
  220. package/dist/components/features/combobox/combobox.strings.d.ts +15 -1
  221. package/dist/components/features/combobox/types.d.ts +4 -0
  222. package/dist/components/features/global-search/partials/global-search-group-heading.d.ts +15 -0
  223. package/dist/components/features/global-search/partials/tone-palettes.d.ts +0 -5
  224. package/dist/components/features/kanban/kanban.d.ts +1 -1
  225. package/dist/components/features/kanban/kanban.strings.d.ts +1 -1
  226. package/dist/components/features/kanban/kanban.types.d.ts +2 -2
  227. package/dist/components/features/media-library/hooks/use-media-library.d.ts +1 -1
  228. package/dist/components/features/media-library/index.d.ts +1 -1
  229. package/dist/components/features/media-library/media-library.d.ts +1 -1
  230. package/dist/components/features/media-library/media-library.strings.d.ts +6 -0
  231. package/dist/components/features/media-library/media-library.types.d.ts +74 -1
  232. package/dist/components/features/media-library/partials/media-library-partials.d.ts +3 -3
  233. package/dist/components/features/mentions/partials/mention-kind-toggles.d.ts +16 -0
  234. package/dist/components/features/overlays/alert-dialog.d.ts +1 -1
  235. package/dist/components/features/overlays/dialog.d.ts +1 -1
  236. package/dist/components/features/overlays/index.d.ts +1 -1
  237. package/dist/components/features/overlays/overlay-tone-icon.d.ts +3 -3
  238. package/dist/components/features/overlays/overlays.types.d.ts +20 -0
  239. package/dist/components/features/products/components/product-contract-overview.d.ts +5 -0
  240. package/dist/components/features/products/components/product-details-card.d.ts +5 -0
  241. package/dist/components/features/products/components/product-operations-card.d.ts +5 -0
  242. package/dist/components/features/products/components/product-option-action-menu.d.ts +5 -0
  243. package/dist/components/features/products/components/product-options-summary.d.ts +5 -0
  244. package/dist/components/features/products/components/product-policies-card.d.ts +5 -0
  245. package/dist/components/features/products/components/product-quote-preview-card.d.ts +5 -0
  246. package/dist/components/features/products/components/product-readiness-card.d.ts +5 -0
  247. package/dist/components/features/products/components/product-structure-card.d.ts +5 -0
  248. package/dist/components/features/products/components/product-variant-action-menu.d.ts +23 -1
  249. package/dist/components/features/products/products.types.d.ts +9 -2
  250. package/dist/components/features/resource/index.d.ts +1 -1
  251. package/dist/components/features/resource/resource.d.ts +1 -1
  252. package/dist/components/features/resource/resource.types.d.ts +34 -6
  253. package/dist/components/features/rich-text-editor/index.d.ts +2 -1
  254. package/dist/components/features/rich-text-editor/partials/image-nodes.d.ts +13 -0
  255. package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +66 -0
  256. package/dist/components/features/rich-text-editor/partials/inline-reference-node.d.ts +19 -0
  257. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +7 -1
  258. package/dist/components/features/rich-text-editor/rich-text-editor.strings.d.ts +14 -0
  259. package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +54 -1
  260. package/dist/components/features/rich-text-editor/use-rich-text-images.d.ts +18 -0
  261. package/dist/components/features/sync/index.d.ts +26 -3
  262. package/dist/components/features/table/data-table.d.ts +1 -1
  263. package/dist/components/features/table/table-header.d.ts +1 -1
  264. package/dist/components/features/table/table.strings.d.ts +55 -1
  265. package/dist/components/features/table/table.types.d.ts +49 -11
  266. package/dist/components/features/theme-tweaker/theme-tweaker.types.d.ts +5 -0
  267. package/dist/components/layout/page/index.d.ts +1 -1
  268. package/dist/components/layout/page/page.types.d.ts +33 -36
  269. package/dist/components/layout/page/partials/page-actions.d.ts +1 -0
  270. package/dist/components/layout/page/partials/page-header.d.ts +1 -1
  271. package/dist/components/layout/settings/settings.d.ts +16 -2
  272. package/dist/components/layout/workspace/workspace.types.d.ts +21 -4
  273. package/dist/components/primitives/number.d.ts +4 -2
  274. package/dist/components/primitives/value.d.ts +3 -1
  275. package/dist/components/typography/rich-text/index.d.ts +1 -1
  276. package/dist/components/typography/rich-text/rich-text-tree.d.ts +19 -0
  277. package/dist/components/typography/rich-text/rich-text.d.ts +16 -0
  278. package/dist/components/typography/text-link.d.ts +8 -3
  279. package/dist/components/ui/checkbox.d.ts +4 -3
  280. package/dist/components/ui/combobox.d.ts +6 -2
  281. package/dist/components/ui/item.d.ts +8 -8
  282. package/dist/components/ui/overlay.recipes.d.ts +0 -9
  283. package/dist/components/ui/switch.d.ts +2 -2
  284. package/dist/components/ui/tabs.d.ts +1 -1
  285. package/dist/{containers-D_L4mTVb.js → containers-Mu1LMGV1.js} +36 -35
  286. package/dist/containers-Mu1LMGV1.js.map +1 -0
  287. package/dist/{copyable-DDjTeW_j.js → copyable-ClBuk_UK.js} +6 -6
  288. package/dist/{copyable-DDjTeW_j.js.map → copyable-ClBuk_UK.js.map} +1 -1
  289. package/dist/data-display-DT_khPl_.js +971 -0
  290. package/dist/data-display-DT_khPl_.js.map +1 -0
  291. package/dist/{date-uf3z37Nm.js → date-DCrsDTZc.js} +5 -5
  292. package/dist/{date-uf3z37Nm.js.map → date-DCrsDTZc.js.map} +1 -1
  293. package/dist/date-picker-ay0Pha_a.js +1530 -0
  294. package/dist/date-picker-ay0Pha_a.js.map +1 -0
  295. package/dist/date-pickers-Ccw8DL2b.js +175 -0
  296. package/dist/date-pickers-Ccw8DL2b.js.map +1 -0
  297. package/dist/display-hAc1HjpI.js +344 -0
  298. package/dist/display-hAc1HjpI.js.map +1 -0
  299. package/dist/dropdown-menu-Cl4X7L5S.js +193 -0
  300. package/dist/dropdown-menu-Cl4X7L5S.js.map +1 -0
  301. package/dist/editable-text-recipe-Cn61kEcv.js +10 -0
  302. package/dist/editable-text-recipe-Cn61kEcv.js.map +1 -0
  303. package/dist/features/activities.js +478 -542
  304. package/dist/features/activities.js.map +1 -1
  305. package/dist/features/ai-chat.js +209 -199
  306. package/dist/features/ai-chat.js.map +1 -1
  307. package/dist/features/appointment-calendar.js +683 -0
  308. package/dist/features/appointment-calendar.js.map +1 -0
  309. package/dist/features/async-preview.js +109 -107
  310. package/dist/features/async-preview.js.map +1 -1
  311. package/dist/features/combobox.js +1 -1
  312. package/dist/features/comments.js +1 -1
  313. package/dist/features/data-view.js +30 -29
  314. package/dist/features/data-view.js.map +1 -1
  315. package/dist/features/email-composer/engine.js +1 -1
  316. package/dist/features/email-composer.js +285 -283
  317. package/dist/features/email-composer.js.map +1 -1
  318. package/dist/features/event-calendar.js +282 -273
  319. package/dist/features/event-calendar.js.map +1 -1
  320. package/dist/features/filters.js +1 -1
  321. package/dist/features/global-search.js +318 -318
  322. package/dist/features/global-search.js.map +1 -1
  323. package/dist/features/kanban.js +146 -147
  324. package/dist/features/kanban.js.map +1 -1
  325. package/dist/features/map.js +269 -268
  326. package/dist/features/map.js.map +1 -1
  327. package/dist/features/media-library.js +970 -863
  328. package/dist/features/media-library.js.map +1 -1
  329. package/dist/features/mentions.js +1 -1
  330. package/dist/features/overlays.js +1 -1
  331. package/dist/features/products.js +1137 -1124
  332. package/dist/features/products.js.map +1 -1
  333. package/dist/features/questionnaire.js +206 -194
  334. package/dist/features/questionnaire.js.map +1 -1
  335. package/dist/features/resource-assignment.js +24 -21
  336. package/dist/features/resource-assignment.js.map +1 -1
  337. package/dist/features/resource.js +77 -69
  338. package/dist/features/resource.js.map +1 -1
  339. package/dist/features/rich-text-editor.js +30 -11
  340. package/dist/features/rich-text-editor.js.map +1 -1
  341. package/dist/features/schema-form.js +35 -33
  342. package/dist/features/schema-form.js.map +1 -1
  343. package/dist/features/suggestions.js +3 -3
  344. package/dist/features/sync.js +11 -5
  345. package/dist/features/sync.js.map +1 -1
  346. package/dist/features/table.js +1 -1
  347. package/dist/features/theme-tweaker.js +501 -496
  348. package/dist/features/theme-tweaker.js.map +1 -1
  349. package/dist/feedback-BYIhtitP.js +239 -0
  350. package/dist/feedback-BYIhtitP.js.map +1 -0
  351. package/dist/field-affordance-recipes-DZhnIL_Y.js +41 -0
  352. package/dist/field-affordance-recipes-DZhnIL_Y.js.map +1 -0
  353. package/dist/field-state-recipes-BVA2CWHo.js +12 -0
  354. package/dist/field-state-recipes-BVA2CWHo.js.map +1 -0
  355. package/dist/{filters-Da-gNPsE.js → filters-BGfvjP4d.js} +483 -472
  356. package/dist/filters-BGfvjP4d.js.map +1 -0
  357. package/dist/focus-recipes-B653VaLq.js +12 -0
  358. package/dist/focus-recipes-B653VaLq.js.map +1 -0
  359. package/dist/{form-field-VZRULhUK.js → form-field-CwH9y77i.js} +6 -5
  360. package/dist/form-field-CwH9y77i.js.map +1 -0
  361. package/dist/{form-sizing-uWP4lzVh.js → form-sizing-BdP_Mf5p.js} +45 -46
  362. package/dist/form-sizing-BdP_Mf5p.js.map +1 -0
  363. package/dist/{forms-DDeEnXSY.js → forms-B9G_xwzi.js} +22 -22
  364. package/dist/{forms-DDeEnXSY.js.map → forms-B9G_xwzi.js.map} +1 -1
  365. package/dist/forms-numeric-B_jraJaQ.js +906 -0
  366. package/dist/forms-numeric-B_jraJaQ.js.map +1 -0
  367. package/dist/{header-2ycNqGOR.js → header-CGXuhcRm.js} +164 -161
  368. package/dist/header-CGXuhcRm.js.map +1 -0
  369. package/dist/{hooks-DQ5SPwZw.js → hooks-Dkz0K2WT.js} +2 -2
  370. package/dist/{hooks-DQ5SPwZw.js.map → hooks-Dkz0K2WT.js.map} +1 -1
  371. package/dist/{http-CdEIHyQf.js → http-D_6rOnzU.js} +2 -2
  372. package/dist/{http-CdEIHyQf.js.map → http-D_6rOnzU.js.map} +1 -1
  373. package/dist/icon-badge-DYKIwvOV.js +55 -0
  374. package/dist/icon-badge-DYKIwvOV.js.map +1 -0
  375. package/dist/index.js +7 -7
  376. package/dist/input-CZw8iU99.js +21 -0
  377. package/dist/input-CZw8iU99.js.map +1 -0
  378. package/dist/input-DQdEd0YD.js +263 -0
  379. package/dist/input-DQdEd0YD.js.map +1 -0
  380. package/dist/interaction-recipes-XR9ZpVYL.js +25 -0
  381. package/dist/interaction-recipes-XR9ZpVYL.js.map +1 -0
  382. package/dist/item-K5_ghvze.js +275 -0
  383. package/dist/item-K5_ghvze.js.map +1 -0
  384. package/dist/layer-recipes-CCpklYME.js +13 -0
  385. package/dist/layer-recipes-CCpklYME.js.map +1 -0
  386. package/dist/layout/app-shell.js +1 -1
  387. package/dist/layout/auth.js +1 -1
  388. package/dist/layout/containers.js +1 -1
  389. package/dist/layout/header.js +1 -1
  390. package/dist/layout/hooks.js +1 -1
  391. package/dist/layout/navigation.js +1 -1
  392. package/dist/layout/page.js +1 -1
  393. package/dist/layout/settings.js +1 -1
  394. package/dist/layout/sidebar.js +2 -2
  395. package/dist/layout/workspace.js +1 -1
  396. package/dist/layout.js +10 -10
  397. package/dist/lib/affordance-geometry.generated.d.ts +72 -0
  398. package/dist/lib/editable-text-recipe.d.ts +4 -4
  399. package/dist/lib/field-affordance-recipes.d.ts +8 -3
  400. package/dist/lib/field-state-recipes.d.ts +9 -8
  401. package/dist/lib/focus-recipes.d.ts +24 -0
  402. package/dist/lib/interaction-recipes.d.ts +40 -0
  403. package/dist/lib/layer-recipes.d.ts +19 -0
  404. package/dist/lib/motion-recipes.d.ts +1 -0
  405. package/dist/lib/overlay-anatomy-recipes.d.ts +1 -0
  406. package/dist/lib/safe-image-src.d.ts +10 -0
  407. package/dist/lib/sanitize-html.d.ts +15 -3
  408. package/dist/lib/surface-recipes.d.ts +47 -7
  409. package/dist/lib/theme-mode-css.d.ts +7 -0
  410. package/dist/lib/token-merge.generated.d.ts +9 -6
  411. package/dist/lib/tone-recipes.d.ts +87 -0
  412. package/dist/lib/ui-provider/hooks.d.ts +2 -1
  413. package/dist/lib/ui-provider/index.d.ts +2 -2
  414. package/dist/lib/ui-provider/types.d.ts +11 -2
  415. package/dist/lib/utils.js +1 -1
  416. package/dist/media-gallery-3zIVLMWH.js +203 -0
  417. package/dist/media-gallery-3zIVLMWH.js.map +1 -0
  418. package/dist/mentions-utuUvH1K.js +570 -0
  419. package/dist/mentions-utuUvH1K.js.map +1 -0
  420. package/dist/{message-YfFmbXNP.js → message-DZ_ruyUV.js} +7 -6
  421. package/dist/message-DZ_ruyUV.js.map +1 -0
  422. package/dist/metadata-list-8N16ZMW_.js +405 -0
  423. package/dist/metadata-list-8N16ZMW_.js.map +1 -0
  424. package/dist/{motion-recipes-B6jKXEcN.js → motion-recipes-ChBg4HBq.js} +3 -2
  425. package/dist/{motion-recipes-B6jKXEcN.js.map → motion-recipes-ChBg4HBq.js.map} +1 -1
  426. package/dist/navigation-Bnotn4AQ.js +145 -0
  427. package/dist/navigation-Bnotn4AQ.js.map +1 -0
  428. package/dist/navigation-BzhHI3lo.js +269 -0
  429. package/dist/navigation-BzhHI3lo.js.map +1 -0
  430. package/dist/{navigation-row-recipes-DlU-4QYO.js → navigation-row-recipes-BFLCk_Aq.js} +2 -2
  431. package/dist/{navigation-row-recipes-DlU-4QYO.js.map → navigation-row-recipes-BFLCk_Aq.js.map} +1 -1
  432. package/dist/{number-CKRBYmZK.js → number-DbV1Dija.js} +36 -34
  433. package/dist/{number-CKRBYmZK.js.map → number-DbV1Dija.js.map} +1 -1
  434. package/dist/overflow-tab-bar-CWY7Nogn.js +282 -0
  435. package/dist/overflow-tab-bar-CWY7Nogn.js.map +1 -0
  436. package/dist/overlay.recipes-8GHqmlb4.js +6 -0
  437. package/dist/overlay.recipes-8GHqmlb4.js.map +1 -0
  438. package/dist/overlays-DNWmZrJ4.js +1001 -0
  439. package/dist/overlays-DNWmZrJ4.js.map +1 -0
  440. package/dist/page-Bgl1F560.js +224 -0
  441. package/dist/page-Bgl1F560.js.map +1 -0
  442. package/dist/page-header-commands-DOb6WsfD.js +126 -0
  443. package/dist/page-header-commands-DOb6WsfD.js.map +1 -0
  444. package/dist/pagination-BL25hu2s.js +158 -0
  445. package/dist/pagination-BL25hu2s.js.map +1 -0
  446. package/dist/{popover-Dcv_9jxr.js → popover-7_m66eYW.js} +11 -10
  447. package/dist/popover-7_m66eYW.js.map +1 -0
  448. package/dist/popover-menu-B9WWygpa.js +100 -0
  449. package/dist/popover-menu-B9WWygpa.js.map +1 -0
  450. package/dist/{popover.recipes-wmbvL8Ah.js → popover.recipes-D3j8R8Yp.js} +18 -11
  451. package/dist/popover.recipes-D3j8R8Yp.js.map +1 -0
  452. package/dist/{primitives-BHrwQXFC.js → primitives-BFK08r9M.js} +45 -44
  453. package/dist/primitives-BFK08r9M.js.map +1 -0
  454. package/dist/primitives.js +4 -4
  455. package/dist/{progress-Br9WTFya.js → progress-B1VnCT0K.js} +9 -9
  456. package/dist/{progress-Br9WTFya.js.map → progress-B1VnCT0K.js.map} +1 -1
  457. package/dist/{receipt-CV89q1fs.js → receipt-BVSOH3Xo.js} +9 -6
  458. package/dist/{receipt-CV89q1fs.js.map → receipt-BVSOH3Xo.js.map} +1 -1
  459. package/dist/rich-text-GOUyKQ-s.js +78 -0
  460. package/dist/rich-text-GOUyKQ-s.js.map +1 -0
  461. package/dist/rich-text-editor-cRLC-eBK.js +1196 -0
  462. package/dist/rich-text-editor-cRLC-eBK.js.map +1 -0
  463. package/dist/rich-text-editor-toolbar-DfXg0-VC.js +94 -0
  464. package/dist/rich-text-editor-toolbar-DfXg0-VC.js.map +1 -0
  465. package/dist/rich-text-editor.strings-CB59ekH2.js +38 -0
  466. package/dist/rich-text-editor.strings-CB59ekH2.js.map +1 -0
  467. package/dist/safe-image-src-C6kQSMBZ.js +17 -0
  468. package/dist/safe-image-src-C6kQSMBZ.js.map +1 -0
  469. package/dist/sanitize-html-DsQmI48u.js +92 -0
  470. package/dist/sanitize-html-DsQmI48u.js.map +1 -0
  471. package/dist/scroll-area-DcI-M1UT.js +48 -0
  472. package/dist/scroll-area-DcI-M1UT.js.map +1 -0
  473. package/dist/{separator-Do5GWDYi.js → separator-BDV-Y648.js} +3 -3
  474. package/dist/{separator-Do5GWDYi.js.map → separator-BDV-Y648.js.map} +1 -1
  475. package/dist/{separator-BMEvwnSX.js → separator-Bom7NsGO.js} +2 -2
  476. package/dist/{separator-BMEvwnSX.js.map → separator-Bom7NsGO.js.map} +1 -1
  477. package/dist/services/actions/action-adapters.d.ts +18 -0
  478. package/dist/services/actions/index.d.ts +1 -1
  479. package/dist/services/actions.js +16 -4
  480. package/dist/services/actions.js.map +1 -1
  481. package/dist/settings-ybnjVwbd.js +171 -0
  482. package/dist/settings-ybnjVwbd.js.map +1 -0
  483. package/dist/sheet-CGpB3omz.js +211 -0
  484. package/dist/sheet-CGpB3omz.js.map +1 -0
  485. package/dist/{sidebar-Cb8WzOvE.js → sidebar-A0ElHINE.js} +17 -16
  486. package/dist/sidebar-A0ElHINE.js.map +1 -0
  487. package/dist/{sidebar-Crc9M9JV.js → sidebar-CPx_7YBa.js} +205 -203
  488. package/dist/sidebar-CPx_7YBa.js.map +1 -0
  489. package/dist/{skeleton-DVMXr15h.js → skeleton-Byjnt7qr.js} +9 -9
  490. package/dist/{skeleton-DVMXr15h.js.map → skeleton-Byjnt7qr.js.map} +1 -1
  491. package/dist/smart-card-DiC5aac3.js +604 -0
  492. package/dist/smart-card-DiC5aac3.js.map +1 -0
  493. package/dist/{structure-hzCW-XsV.js → structure-BmisBK-3.js} +2 -2
  494. package/dist/{structure-hzCW-XsV.js.map → structure-BmisBK-3.js.map} +1 -1
  495. package/dist/style.css +1 -1
  496. package/dist/surface-recipes-BKRVW8Os.js +43 -0
  497. package/dist/surface-recipes-BKRVW8Os.js.map +1 -0
  498. package/dist/table-BweFy_P9.js +1530 -0
  499. package/dist/table-BweFy_P9.js.map +1 -0
  500. package/dist/table-DsfzoUia.js +175 -0
  501. package/dist/table-DsfzoUia.js.map +1 -0
  502. package/dist/tabs-CDocW5D1.js +191 -0
  503. package/dist/tabs-CDocW5D1.js.map +1 -0
  504. package/dist/text-inputs-f9Ia-aCi.js +353 -0
  505. package/dist/text-inputs-f9Ia-aCi.js.map +1 -0
  506. package/dist/theme-mode-css-BB-_RYab.js +14 -0
  507. package/dist/theme-mode-css-BB-_RYab.js.map +1 -0
  508. package/dist/theme-scope-BJ6eE2xt.js +50 -0
  509. package/dist/theme-scope-BJ6eE2xt.js.map +1 -0
  510. package/dist/theme.css +285 -228
  511. package/dist/themes/green.css +16 -12
  512. package/dist/timelines-CwM_9IhD.js +457 -0
  513. package/dist/timelines-CwM_9IhD.js.map +1 -0
  514. package/dist/tone-recipes-BPsRAvhu.js +73 -0
  515. package/dist/tone-recipes-BPsRAvhu.js.map +1 -0
  516. package/dist/tooltip-yiRJUFjp.js +111 -0
  517. package/dist/tooltip-yiRJUFjp.js.map +1 -0
  518. package/dist/{tree-BotPlyiD.js → tree-WnKQzwbq.js} +69 -67
  519. package/dist/tree-WnKQzwbq.js.map +1 -0
  520. package/dist/typography/rich-text.js +1 -1
  521. package/dist/typography-UTnveOEy.js +117 -0
  522. package/dist/typography-UTnveOEy.js.map +1 -0
  523. package/dist/typography.js +2 -2
  524. package/dist/{ui-provider-D2_TeLqw.js → ui-provider-C_U0Xma4.js} +13 -5
  525. package/dist/ui-provider-C_U0Xma4.js.map +1 -0
  526. package/dist/ui-provider.js +3 -3
  527. package/dist/{upload-B0WHW7ak.js → upload-CXyxmQBP.js} +210 -209
  528. package/dist/upload-CXyxmQBP.js.map +1 -0
  529. package/dist/{upload-queue-BHZ_wBfd.js → upload-queue-Boscubn9.js} +111 -111
  530. package/dist/upload-queue-Boscubn9.js.map +1 -0
  531. package/dist/upload.recipes-BbxTqrCT.js +61 -0
  532. package/dist/upload.recipes-BbxTqrCT.js.map +1 -0
  533. package/dist/{usage-card-U0YBLTNT.js → usage-card-BhO5eqkX.js} +45 -29
  534. package/dist/usage-card-BhO5eqkX.js.map +1 -0
  535. package/dist/{utils-Cospvlj1.js → utils-BRhFDwuU.js} +114 -67
  536. package/dist/utils-BRhFDwuU.js.map +1 -0
  537. package/dist/value-inputs-DXPDjvBU.js +963 -0
  538. package/dist/value-inputs-DXPDjvBU.js.map +1 -0
  539. package/dist/{value-typography-Deb3yQZg.js → value-typography-BP8OG6h5.js} +2 -2
  540. package/dist/{value-typography-Deb3yQZg.js.map → value-typography-BP8OG6h5.js.map} +1 -1
  541. package/dist/workspace-Cdrg7k9f.js +408 -0
  542. package/dist/workspace-Cdrg7k9f.js.map +1 -0
  543. package/docs/consumer-skill/SKILL.md +21 -22
  544. package/docs/consumer-skill/examples/app-layout.tsx +1 -1
  545. package/docs/consumer-skill/examples/composition.tsx +3 -3
  546. package/docs/consumer-skill/examples/detail.tsx +59 -12
  547. package/docs/consumer-skill/examples/edit.tsx +1 -1
  548. package/docs/consumer-skill/examples/receipt.tsx +2 -2
  549. package/docs/consumer-skill/examples/scoped-directory.tsx +1 -1
  550. package/docs/consumer-skill/examples/website.tsx +1 -1
  551. package/docs/consumer-skill/references/agents-md.md +33 -0
  552. package/docs/consumer-skill/references/analytics.md +1 -1
  553. package/docs/consumer-skill/references/composition.md +58 -13
  554. package/docs/consumer-skill/references/design-contract.md +12 -3
  555. package/docs/consumer-skill/references/installation.md +11 -1
  556. package/docs/consumer-skill/references/integration.md +4 -3
  557. package/docs/consumer-skill/references/public-api.json +956 -453
  558. package/docs/consumer-skill/references/review.md +32 -5
  559. package/docs/consumer-skill/references/theming.md +78 -9
  560. package/docs/consumer-skill/references/tokens.json +1 -1
  561. package/docs/consumer-skill/references/workflows.md +54 -10
  562. package/docs/consumer-skill/scripts/composition-policy.mjs +42 -11
  563. package/docs/consumer-skill/scripts/surface-policy.mjs +150 -5
  564. package/package.json +17 -5
  565. package/dist/accordion-CQXVcd7Q.js +0 -205
  566. package/dist/accordion-CQXVcd7Q.js.map +0 -1
  567. package/dist/action-menu-BTpyPWJ2.js +0 -264
  568. package/dist/action-menu-BTpyPWJ2.js.map +0 -1
  569. package/dist/affordance-geometry.generated-CCIXb2A1.js +0 -68
  570. package/dist/affordance-geometry.generated-CCIXb2A1.js.map +0 -1
  571. package/dist/ai-artifact-2PQ2fItc.js +0 -1112
  572. package/dist/ai-artifact-2PQ2fItc.js.map +0 -1
  573. package/dist/attachment-q69dlt5Y.js +0 -244
  574. package/dist/attachment-q69dlt5Y.js.map +0 -1
  575. package/dist/auth-M3vGMgDR.js.map +0 -1
  576. package/dist/avatar-djdaaQ_s.js.map +0 -1
  577. package/dist/badge-0tATj-tW.js +0 -92
  578. package/dist/badge-0tATj-tW.js.map +0 -1
  579. package/dist/breadcrumbs-BG_FfMK4.js +0 -128
  580. package/dist/breadcrumbs-BG_FfMK4.js.map +0 -1
  581. package/dist/button-BS3KDg00.js.map +0 -1
  582. package/dist/button-R9CCoH7A.js.map +0 -1
  583. package/dist/buttons-DS0ZIwJ_.js +0 -99
  584. package/dist/buttons-DS0ZIwJ_.js.map +0 -1
  585. package/dist/cards-QoJ4syG9.js +0 -66
  586. package/dist/cards-QoJ4syG9.js.map +0 -1
  587. package/dist/chart-DwYRKKc-.js.map +0 -1
  588. package/dist/checkbox-B7ygNTYp.js +0 -35
  589. package/dist/checkbox-B7ygNTYp.js.map +0 -1
  590. package/dist/choice-inputs-DrJ17tpL.js +0 -752
  591. package/dist/choice-inputs-DrJ17tpL.js.map +0 -1
  592. package/dist/code-block-CD0B7M93.js +0 -183
  593. package/dist/code-block-CD0B7M93.js.map +0 -1
  594. package/dist/combobox-6dvVny2q.js +0 -272
  595. package/dist/combobox-6dvVny2q.js.map +0 -1
  596. package/dist/combobox-CB7039j7.js +0 -865
  597. package/dist/combobox-CB7039j7.js.map +0 -1
  598. package/dist/comments-You0Bzbr.js.map +0 -1
  599. package/dist/components/layout/page/partials/page-header-commands.d.ts +0 -13
  600. package/dist/containers-D_L4mTVb.js.map +0 -1
  601. package/dist/data-display-3xWQUnMA.js +0 -1335
  602. package/dist/data-display-3xWQUnMA.js.map +0 -1
  603. package/dist/date-picker-DrDFj8Lo.js +0 -1527
  604. package/dist/date-picker-DrDFj8Lo.js.map +0 -1
  605. package/dist/date-pickers-CnFCb0n2.js +0 -174
  606. package/dist/date-pickers-CnFCb0n2.js.map +0 -1
  607. package/dist/display-DrdvPwF0.js +0 -343
  608. package/dist/display-DrdvPwF0.js.map +0 -1
  609. package/dist/dropdown-menu-CURh59jb.js +0 -193
  610. package/dist/dropdown-menu-CURh59jb.js.map +0 -1
  611. package/dist/editable-text-recipe-Bkm6wKHp.js +0 -10
  612. package/dist/editable-text-recipe-Bkm6wKHp.js.map +0 -1
  613. package/dist/feedback-C7nR0UtT.js +0 -232
  614. package/dist/feedback-C7nR0UtT.js.map +0 -1
  615. package/dist/field-affordance-recipes-CkOCdE2y.js +0 -46
  616. package/dist/field-affordance-recipes-CkOCdE2y.js.map +0 -1
  617. package/dist/field-state-recipes-C-MFBX_8.js +0 -11
  618. package/dist/field-state-recipes-C-MFBX_8.js.map +0 -1
  619. package/dist/filters-Da-gNPsE.js.map +0 -1
  620. package/dist/form-field-VZRULhUK.js.map +0 -1
  621. package/dist/form-sizing-uWP4lzVh.js.map +0 -1
  622. package/dist/forms-numeric-D3CO60IF.js +0 -905
  623. package/dist/forms-numeric-D3CO60IF.js.map +0 -1
  624. package/dist/header-2ycNqGOR.js.map +0 -1
  625. package/dist/icon-badge-DKlaKXoo.js +0 -53
  626. package/dist/icon-badge-DKlaKXoo.js.map +0 -1
  627. package/dist/input-BoLm9Hks.js +0 -20
  628. package/dist/input-BoLm9Hks.js.map +0 -1
  629. package/dist/input-DhQdBnV3.js +0 -255
  630. package/dist/input-DhQdBnV3.js.map +0 -1
  631. package/dist/item-xzh8Df65.js +0 -264
  632. package/dist/item-xzh8Df65.js.map +0 -1
  633. package/dist/media-gallery-DQUQ0m3O.js +0 -201
  634. package/dist/media-gallery-DQUQ0m3O.js.map +0 -1
  635. package/dist/mentions-DwnO1hh4.js +0 -564
  636. package/dist/mentions-DwnO1hh4.js.map +0 -1
  637. package/dist/message-YfFmbXNP.js.map +0 -1
  638. package/dist/navigation-Cbp5V8gG.js +0 -264
  639. package/dist/navigation-Cbp5V8gG.js.map +0 -1
  640. package/dist/navigation-Cs1npsPm.js +0 -300
  641. package/dist/navigation-Cs1npsPm.js.map +0 -1
  642. package/dist/overlay.recipes-CNO2S9V6.js +0 -34
  643. package/dist/overlay.recipes-CNO2S9V6.js.map +0 -1
  644. package/dist/overlays-DhZO7N-I.js +0 -994
  645. package/dist/overlays-DhZO7N-I.js.map +0 -1
  646. package/dist/page-C6R_8jFt.js +0 -325
  647. package/dist/page-C6R_8jFt.js.map +0 -1
  648. package/dist/page-header-hUTzcRZX.js +0 -112
  649. package/dist/page-header-hUTzcRZX.js.map +0 -1
  650. package/dist/pagination-Cm0jqa3I.js +0 -149
  651. package/dist/pagination-Cm0jqa3I.js.map +0 -1
  652. package/dist/popover-Dcv_9jxr.js.map +0 -1
  653. package/dist/popover-menu-DnRFKnHP.js +0 -99
  654. package/dist/popover-menu-DnRFKnHP.js.map +0 -1
  655. package/dist/popover.recipes-wmbvL8Ah.js.map +0 -1
  656. package/dist/primitives-BHrwQXFC.js.map +0 -1
  657. package/dist/rich-text-editor-CF8QYt5p.js +0 -574
  658. package/dist/rich-text-editor-CF8QYt5p.js.map +0 -1
  659. package/dist/rich-text-editor.recipes-CnrbmTS1.js +0 -81
  660. package/dist/rich-text-editor.recipes-CnrbmTS1.js.map +0 -1
  661. package/dist/rich-text-editor.strings-BpnIQgMl.js +0 -25
  662. package/dist/rich-text-editor.strings-BpnIQgMl.js.map +0 -1
  663. package/dist/rich-text-j-FGAeZW.js +0 -32
  664. package/dist/rich-text-j-FGAeZW.js.map +0 -1
  665. package/dist/sanitize-html-BG9FGe-j.js +0 -64
  666. package/dist/sanitize-html-BG9FGe-j.js.map +0 -1
  667. package/dist/scroll-area-DRdr16Pt.js +0 -47
  668. package/dist/scroll-area-DRdr16Pt.js.map +0 -1
  669. package/dist/settings-DHk0L2MF.js +0 -161
  670. package/dist/settings-DHk0L2MF.js.map +0 -1
  671. package/dist/sheet-DRFNY1_D.js +0 -207
  672. package/dist/sheet-DRFNY1_D.js.map +0 -1
  673. package/dist/sidebar-Cb8WzOvE.js.map +0 -1
  674. package/dist/sidebar-Crc9M9JV.js.map +0 -1
  675. package/dist/smart-card-Bek-TwUp.js +0 -599
  676. package/dist/smart-card-Bek-TwUp.js.map +0 -1
  677. package/dist/spinner-CmTAbEp0.js +0 -80
  678. package/dist/spinner-CmTAbEp0.js.map +0 -1
  679. package/dist/surface-recipes-DOdoBXGm.js +0 -28
  680. package/dist/surface-recipes-DOdoBXGm.js.map +0 -1
  681. package/dist/table-D6zKeYQX.js +0 -162
  682. package/dist/table-D6zKeYQX.js.map +0 -1
  683. package/dist/table-Dn4XSrSB.js +0 -1444
  684. package/dist/table-Dn4XSrSB.js.map +0 -1
  685. package/dist/tabs-Dk8E_knt.js +0 -189
  686. package/dist/tabs-Dk8E_knt.js.map +0 -1
  687. package/dist/text-inputs-BFpku0Qd.js +0 -331
  688. package/dist/text-inputs-BFpku0Qd.js.map +0 -1
  689. package/dist/theme-scope-kStaAer0.js +0 -39
  690. package/dist/theme-scope-kStaAer0.js.map +0 -1
  691. package/dist/timelines-CxuAFIc2.js +0 -439
  692. package/dist/timelines-CxuAFIc2.js.map +0 -1
  693. package/dist/tree-BotPlyiD.js.map +0 -1
  694. package/dist/typography-CAr3dQhX.js +0 -116
  695. package/dist/typography-CAr3dQhX.js.map +0 -1
  696. package/dist/ui-provider-D2_TeLqw.js.map +0 -1
  697. package/dist/upload-B0WHW7ak.js.map +0 -1
  698. package/dist/upload-queue-BHZ_wBfd.js.map +0 -1
  699. package/dist/usage-card-U0YBLTNT.js.map +0 -1
  700. package/dist/use-file-drop-target-BX7GnhoQ.js +0 -39
  701. package/dist/use-file-drop-target-BX7GnhoQ.js.map +0 -1
  702. package/dist/utils-Cospvlj1.js.map +0 -1
  703. package/dist/value-inputs-CjfzGMsN.js +0 -854
  704. package/dist/value-inputs-CjfzGMsN.js.map +0 -1
  705. package/dist/workspace-YoFjXi6i.js +0 -394
  706. package/dist/workspace-YoFjXi6i.js.map +0 -1
  707. /package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-list.strings.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"admin.js","names":["DisplayLabel","Text","Button","Grid","Stack","AlertDescription","AlertAction","Alert","AlertTitle","ActionMenu","MonoValue","IconBadge","Badge","Input","Copyable","FormField","Checkbox","ContentBlock","CollapsibleContent","CollapsibleTrigger","Collapsible","ItemMedia","ItemActions","ItemGroup","ItemContent","Item","defaultRolePermissionStrings","count","RolePermission","stringsProp","strings","useStrings","cn","className","roleName","memberCount","description","sections","section","perm","Check","Minus","onEdit","defaultApiKeyListStrings","ApiKeyList","forwardRef","isControlled","open","internalOpen","setInternalOpen","useState","defaultOpen","expanded","handleOpenChange","useCallback","next","onOpenChange","ChevronRight","title","onAdd","Plus","items","ApiKeyRow","item","copied","setCopied","handleCopy","toast","copyToastSuccess","onCopy","copyToastError","display","actions","copiedMenuLabel","copyMenuLabel","Copy","onDelete","deleteMenuLabel","Trash2","rowMenuAria","SensitiveActionCard","Icon","confirmation","action","defaultCopyableSecretAlertStrings","CopyableSecretAlert","KeyRound","displayValue","value","defaultApiTokenManagerStrings","ApiTokenManager","creatingProp","revokingAllProp","isNameControlled","name","isAbilitiesControlled","selectedAbilities","internalName","setInternalName","defaultName","internalAbilities","setInternalAbilities","defaultSelectedAbilities","pendingPhase","setPendingPhase","resolvedName","resolvedAbilities","useMemo","creating","revokingAll","setName","nextName","onNameChange","setAbilities","nextAbilities","onSelectedAbilitiesChange","toggleAbility","checked","abilityId","id","runMutation","phase","task","onAfterMutate","error","onError","handleCreate","onCreateToken","values","handleRevoke","onRevokeToken","token","handleRevokeAll","onRevokeAllTokens","disabled","tokens","createdToken","event","abilities","ability"],"sources":["../../src/components/blocks/admin/admin.strings.ts","../../src/components/blocks/admin/role-permission/role-permission.tsx","../../src/components/blocks/admin/api-key-list/api-key-list.strings.ts","../../src/components/blocks/admin/api-key-list/api-key-list.tsx","../../src/components/blocks/admin/action-surfaces/index.tsx"],"sourcesContent":["export interface RolePermissionStrings {\n\t/** Edit-role button label. */\n\teditRole: string;\n\t/** Accessible state name for an allowed permission. */\n\tpermissionAllowed?: string;\n\t/** Accessible state name for a permission that is not allowed. */\n\tpermissionDenied?: string;\n\t/** Format string for the member-count badge. Receives the count. */\n\tformatMemberCount: (count: number) => string;\n}\n\nexport const defaultRolePermissionStrings: Required<RolePermissionStrings> = {\n\teditRole: 'Edit role',\n\tpermissionAllowed: 'Allowed',\n\tpermissionDenied: 'Not allowed',\n\tformatMemberCount: (count) => `${count} members`,\n};\n","/**\n * RolePermission — admin surface for a role with description, member\n * count badge, grouped permission states (check vs minus), and an\n * optional Edit button.\n *\n * Strings overridable via `strings` prop. `strings.formatMemberCount` is a\n * function so consumers can localise pluralisation rules.\n */\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { Stack } from '../../../base/structure';\nimport { DisplayLabel } from '../../../typography/display-label';\nimport { Text } from '../../../typography/text';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\nimport { Check, Minus } from 'lucide-react';\n\nimport { defaultRolePermissionStrings } from '../admin.strings';\nimport type { RolePermissionProps } from './types';\n\nexport function RolePermission({\n\troleName,\n\tdescription,\n\tmemberCount,\n\tsections,\n\tonEdit,\n\tclassName,\n\tstrings: stringsProp,\n}: RolePermissionProps) {\n\tconst strings = useStrings(defaultRolePermissionStrings, stringsProp);\n\t// One spacing owner: the outer Stack separates header, sections and the edit\n\t// action; the member count is a neutral count that reads with the role name.\n\treturn (\n\t\t<Stack\n\t\t\tgap=\"2xl\"\n\t\t\tdata-component=\"role-permission\"\n\t\t\tdata-slot=\"role-permission\"\n\t\t\tclassName={cn('role-permission--component', className)}\n\t\t>\n\t\t\t<Stack gap=\"normal\" className=\"role-permission--header\">\n\t\t\t\t<Stack direction=\"horizontal\" wrap align=\"center\" gap=\"sm\">\n\t\t\t\t\t<Text weight=\"semibold\">{roleName}</Text>\n\t\t\t\t\t{memberCount !== undefined && <Badge>{strings.formatMemberCount(memberCount)}</Badge>}\n\t\t\t\t</Stack>\n\t\t\t\t{!!description && <Text size=\"xs\" type=\"secondary\">{description}</Text>}\n\t\t\t</Stack>\n\n\t\t\t<Stack gap=\"xl\">\n\t\t\t\t{sections.map((section) => (\n\t\t\t\t\t<Stack key={section.name} gap=\"md\">\n\t\t\t\t\t\t<DisplayLabel>\n\t\t\t\t\t\t\t{section.name}\n\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t<div className=\"flex flex-wrap gap-space-md\">\n\t\t\t\t\t\t\t{section.permissions.map((perm) => (\n\t\t\t\t\t\t\t\t<div key={perm.label} className=\"flex items-center gap-space-sm\">\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\trole=\"img\"\n\t\t\t\t\t\t\t\t\t\taria-label={`${perm.label}: ${perm.active ? strings.permissionAllowed : strings.permissionDenied}`}\n\t\t\t\t\t\t\t\t\t\tclassName={cn('inline-flex size-icon-sm shrink-0', perm.active ? 'text-success' : 'text-muted-foreground')}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{perm.active ? <Check className=\"size-full\" aria-hidden /> : <Minus className=\"size-full\" aria-hidden />}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t<Text className={perm.active ? 'text-foreground' : 'text-muted-foreground'}>\n\t\t\t\t\t\t\t\t\t\t{perm.label}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</Stack>\n\t\t\t\t))}\n\t\t\t</Stack>\n\n\t\t\t{!!onEdit && (\n\t\t\t\t<div className=\"role-permission--actions\">\n\t\t\t\t\t<Button tone=\"neutral\" buttonStyle=\"outline\" size=\"sm\" onClick={onEdit}>\n\t\t\t\t\t\t{strings.editRole}\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n\nRolePermission.displayName = 'RolePermission';\n","/**\n * Strings for `<ApiKeyList>`. English defaults; deep-merge-overridable.\n */\nexport interface ApiKeyListStrings {\n\t/** Surface title. */\n\ttitle: string;\n\taddAria: string;\n\trowMenuAria: string;\n\tcopyMenuItem: string;\n\tcopiedMenuItem: string;\n\tdeleteMenuItem: string;\n\tcopyToastSuccess: string;\n\tcopyToastError: string;\n\temptyMessage: string;\n}\n\nexport const defaultApiKeyListStrings: ApiKeyListStrings = {\n\ttitle: 'API keys',\n\taddAria: 'Add API key',\n\trowMenuAria: 'Key actions',\n\tcopyMenuItem: 'Copy key',\n\tcopiedMenuItem: 'Copied',\n\tdeleteMenuItem: 'Delete',\n\tcopyToastSuccess: 'Copied to clipboard',\n\tcopyToastError: 'Failed to copy',\n\temptyMessage: 'No keys yet.',\n};\n","/**\n * ApiKeyList — collapsible section listing API keys / credentials with a\n * per-row dropdown menu (Copy / Delete) and an optional add-new action\n * in the header. Generic enough to use for any \"named secret list\":\n * service tokens, webhook URLs, deployment hooks, …\n *\n * Composes:\n * - `base/display/collapsible` (the shadcn-wrapped collapsible shell)\n * - `base/buttons`, `base/badge` (header actions, status pills)\n * - `base/action-menu/ActionMenu` (per-row dropdown)\n * - `base/copyable/Copyable` (copy-to-clipboard with toast)\n *\n * Framework-agnostic — every action is callback-driven; the library\n * doesn't fetch, navigate, or render delete confirmations.\n */\nimport { ChevronRight, Copy, Plus, Trash2 } from 'lucide-react';\nimport { forwardRef, useCallback, useState } from 'react';\nimport { toast } from 'sonner';\n\nimport { Button } from '../../../base/buttons';\nimport {\n\tCollapsible,\n\tCollapsibleContent,\n\tCollapsibleTrigger,\n} from '../../../base/display/collapsible';\nimport { IconBadge } from '../../../base/display/icon-badge';\nimport { Item, ItemActions, ItemContent, ItemGroup, ItemMedia } from '../../../base/item';\nimport { ActionMenu, type ActionMenuAction } from '../../../base/action-menu';\nimport { MonoValue } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultApiKeyListStrings } from './api-key-list.strings';\nimport type { ApiKeyListItem, ApiKeyListProps } from './api-key-list.types';\n\nexport const ApiKeyList = forwardRef<HTMLDivElement, ApiKeyListProps>(function ApiKeyList({\n\titems,\n\tdefaultOpen = true,\n\topen,\n\tonOpenChange,\n\tonAdd,\n\tonDelete,\n\tonCopy,\n\ttitle,\n\tclassName,\n\tstrings: stringsProp,\n}, ref) {\n\tconst strings = useStrings(defaultApiKeyListStrings, stringsProp);\n\tconst isControlled = open !== undefined;\n\tconst [internalOpen, setInternalOpen] = useState(defaultOpen);\n\tconst expanded = isControlled ? open : internalOpen;\n\n\tconst handleOpenChange = useCallback(\n\t\t(next: boolean) => {\n\t\t\tif (!isControlled) setInternalOpen(next);\n\t\t\tonOpenChange?.(next);\n\t\t},\n\t\t[isControlled, onOpenChange],\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tdata-component=\"api-key-list\"\n\t\t\tdata-slot=\"api-key-list\"\n\t\t\tclassName={cn('api-key-list--component @container/api-key-list min-w-0', className)}\n\t\t>\n\t\t\t<Collapsible open={expanded} onOpenChange={handleOpenChange}>\n\t\t\t\t<div className=\"flex items-center gap-space-md\">\n\t\t\t\t\t<CollapsibleTrigger asChild>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\tsize=\"md\"\n\t\t\t\t\t\t\t// Keep the tokenized action height and radius so the toggle lines up with\n\t\t\t\t\t\t\t// the add action beside it; `h-auto` collapsed it to 23px next to a\n\t\t\t\t\t\t\t// 32px sibling. `px-0` stays so the title aligns with the rows below.\n\t\t\t\t\t\t\tclassName=\"h-action flex-1 justify-start gap-space-md rounded-inner px-0 py-0 text-left\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ChevronRight\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'size-icon text-muted-foreground transition-transform',\n\t\t\t\t\t\t\t\t\texpanded && 'rotate-90',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"semibold\">\n\t\t\t\t\t\t\t\t{title ?? strings.title}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</CollapsibleTrigger>\n\t\t\t\t\t{!!onAdd && (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\t\t\tonClick={onAdd}\n\t\t\t\t\t\t\taria-label={strings.addAria}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Plus className=\"size-icon\" />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<CollapsibleContent className=\"pt-space-lg\">\n\t\t\t\t\t{items.length === 0 ? (\n\t\t\t\t\t\t<Text type=\"secondary\">\n\t\t\t\t\t\t\t{strings.emptyMessage}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t// Rows touch: each row's density padding is the only space between keys.\n\t\t\t\t\t\t// (Rows keep their `api-key-row` slot hook, so the group states gap-0.)\n\t\t\t\t\t\t<ItemGroup role=\"list\" className=\"gap-0\">\n\t\t\t\t\t\t\t{items.map((item) => (\n\t\t\t\t\t\t\t\t<ApiKeyRow\n\t\t\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\t\t\tonDelete={onDelete}\n\t\t\t\t\t\t\t\t\tonCopy={onCopy}\n\t\t\t\t\t\t\t\t\tcopyMenuLabel={strings.copyMenuItem}\n\t\t\t\t\t\t\t\t\tcopiedMenuLabel={strings.copiedMenuItem}\n\t\t\t\t\t\t\t\t\tdeleteMenuLabel={strings.deleteMenuItem}\n\t\t\t\t\t\t\t\t\trowMenuAria={strings.rowMenuAria}\n\t\t\t\t\t\t\t\t\tcopyToastSuccess={strings.copyToastSuccess}\n\t\t\t\t\t\t\t\t\tcopyToastError={strings.copyToastError}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t)}\n\t\t\t\t</CollapsibleContent>\n\t\t\t</Collapsible>\n\t\t</div>\n\t);\n});\n\nApiKeyList.displayName = 'ApiKeyList';\n\ninterface ApiKeyRowProps {\n\titem: ApiKeyListItem;\n\t/** Fired when an entry is removed. */\n\tonDelete?: ApiKeyListProps['onDelete'];\n\t/** Fired when an entry is copied. */\n\tonCopy?: ApiKeyListProps['onCopy'];\n\tcopyMenuLabel: string;\n\tcopiedMenuLabel: string;\n\tdeleteMenuLabel: string;\n\trowMenuAria: string;\n\tcopyToastSuccess: string;\n\tcopyToastError: string;\n}\n\nfunction ApiKeyRow({\n\titem,\n\tonDelete,\n\tonCopy,\n\tcopyMenuLabel,\n\tcopiedMenuLabel,\n\tdeleteMenuLabel,\n\trowMenuAria,\n\tcopyToastSuccess,\n\tcopyToastError,\n}: ApiKeyRowProps) {\n\tconst [copied, setCopied] = useState(false);\n\n\tconst handleCopy = useCallback(async () => {\n\t\ttry {\n\t\t\tawait navigator.clipboard.writeText(item.value);\n\t\t\tsetCopied(true);\n\t\t\tsetTimeout(() => setCopied(false), 1500);\n\t\t\ttoast.success(copyToastSuccess);\n\t\t\tonCopy?.(item.id, item);\n\t\t} catch (err) {\n\t\t\ttoast.error(copyToastError);\n\t\t\tif (import.meta.env?.DEV) {\n\t\t\t\tconsole.warn('[ApiKeyList] copy failed', err);\n\t\t\t}\n\t\t}\n\t}, [item, onCopy, copyToastSuccess, copyToastError]);\n\n\tconst display = item.displayValue ?? item.value;\n\tconst actions: ActionMenuAction[] = [\n\t\t...(item.copyable !== false ? [{\n\t\t\tid: 'copy',\n\t\t\tlabel: copied ? copiedMenuLabel : copyMenuLabel,\n\t\t\ticon: Copy,\n\t\t\tonClick: () => {\n\t\t\t\tvoid handleCopy();\n\t\t\t},\n\t\t\tdisabled: item.disabled,\n\t\t}] : []),\n\t\t...(onDelete ? [{\n\t\t\tid: 'delete',\n\t\t\tlabel: deleteMenuLabel,\n\t\t\ticon: Trash2,\n\t\t\ttone: 'destructive' as const,\n\t\t\tdisabled: item.disabled,\n\t\t\tonClick: () => onDelete(item.id, item),\n\t\t}] : []),\n\t];\n\n\treturn (\n\t\t<Item size=\"sm\" role=\"listitem\" data-slot=\"api-key-row\" className=\"flex-nowrap\">\n\t\t\t{/* No default glyph: a lock on every row repeats what the list title says.\n\t\t\t A consumer-supplied icon still renders as neutral media. */}\n\t\t\t{!!item.icon && (\n\t\t\t\t<ItemMedia variant=\"icon\">\n\t\t\t\t\t<IconBadge size=\"sm\" shape=\"square\" tone=\"neutral\" bordered>\n\t\t\t\t\t\t{item.icon}\n\t\t\t\t\t</IconBadge>\n\t\t\t\t</ItemMedia>\n\t\t\t)}\n\t\t\t<ItemContent className=\"min-w-0 flex-row items-center gap-space-md\">\n\t\t\t\t<Text tag=\"span\" weight=\"medium\" className=\"w-20 shrink-0 truncate @md/api-key-list:w-24\">\n\t\t\t\t\t{item.name}\n\t\t\t\t</Text>\n\t\t\t\t<MonoValue className=\"min-w-0 flex-1 truncate rounded-inner bg-muted px-space-md py-space-xs\">\n\t\t\t\t\t{display}\n\t\t\t\t</MonoValue>\n\t\t\t</ItemContent>\n\t\t\t<ItemActions className=\"shrink-0\">\n\t\t\t\t{/* Same compact trigger as the header's add action, so the row height\n\t\t\t\t follows the key preview rather than a taller menu button. */}\n\t\t\t\t<ActionMenu\n\t\t\t\t\tactions={actions}\n\t\t\t\t\tsrText={rowMenuAria}\n\t\t\t\t\talign=\"end\"\n\t\t\t\t\tcloseOnSelect\n\t\t\t\t\tbuttonProps={{ buttonStyle: 'ghost', tone: 'secondary', size: 'sm', className: 'size-action-sm' }}\n\t\t\t\t/>\n\t\t\t</ItemActions>\n\t\t</Item>\n\t);\n}\n\nApiKeyRow.displayName = 'ApiKeyRow';\n","import {\n\tuseCallback,\n\tuseMemo,\n\tuseState,\n\ttype ReactNode } from 'react';\nimport { KeyRound,\n\tPlus,\n\ttype LucideIcon } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { Copyable } from '../../../base/copyable';\nimport { ContentBlock, IconBadge } from '../../../base/display';\nimport { Alert, AlertAction, AlertDescription, AlertTitle } from '../../../base/feedback';\nimport { Checkbox } from '../../../base/choice-inputs';\nimport { FormField } from '../../../base/forms';\nimport { Input } from '../../../base/text-inputs';\nimport { Grid, Stack } from '../../../base/structure';\nimport { DisplayLabel, Text } from '../../../typography';\nimport { useStrings, type StringsProp } from '../../../../lib/strings';\nimport type { CardSurface, ComponentScale } from '../../../../lib/component-vocabulary';\nimport { cn } from '../../../../lib/utils';\n\nimport { ApiKeyList, type ApiKeyListItem } from '../api-key-list';\n\ntype ActionSurfacePadding = ComponentScale;\ntype ActionSurfaceSurface = CardSurface;\n\nexport interface SensitiveActionCardProps {\n\t/** Surface title. */\n\ttitle: ReactNode;\n\t/** Supporting copy shown under the label. */\n\tdescription?: ReactNode;\n\t/** Confirmation copy shown before the action runs. */\n\tconfirmation?: ReactNode;\n\t/** The action this surface performs. */\n\taction?: ReactNode;\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n\t/** Surface inset. */\n\tpadding?: ActionSurfacePadding;\n\t/** Outer chrome. */\n\tsurface?: ActionSurfaceSurface;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n}\n\nexport function SensitiveActionCard({\n\ttitle,\n\tdescription,\n\tconfirmation,\n\taction,\n\ticon: Icon,\n\tpadding = 'md',\n\tsurface = 'card',\n\tclassName,\n}: SensitiveActionCardProps) {\n\treturn (\n\t\t<ContentBlock\n\t\t\tdata-component=\"sensitive-action-card\"\n\t\t\tdata-slot=\"sensitive-action-card\"\n\t\t\tpadding={padding}\n\t\t\tsurface={surface}\n\t\t\tclassName={cn('sensitive-action-card--component border-destructive/30', className)}\n\t\t\tcontentClassName=\"sensitive-action-card--content grid gap-space-lg\"\n\t\t>\n\t\t\t{/* The destructive frame and action carry the danger; an icon is opt-in and\n\t\t\t the confirmation note is copy in the text column, not a nested panel. */}\n\t\t\t<Stack direction=\"horizontal\" align=\"start\" gap=\"lg\" className=\"min-w-0\">\n\t\t\t\t{!!Icon && <IconBadge icon={Icon} tone=\"destructive\" shape=\"square\" size=\"md\" />}\n\t\t\t\t<Stack gap=\"normal\" className=\"min-w-0 flex-1\">\n\t\t\t\t\t<Text weight=\"semibold\">{title}</Text>\n\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t<Text type=\"secondary\">\n\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t\t{!!confirmation && (\n\t\t\t\t\t\t<Text tag=\"div\" type=\"secondary\" role=\"note\" className=\"sensitive-action-card--confirmation\">\n\t\t\t\t\t\t\t{confirmation}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t\t{!!action && <div className=\"shrink-0\">{action}</div>}\n\t\t\t</Stack>\n\t\t</ContentBlock>\n\t);\n}\n\nexport interface CopyableSecretAlertStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcopySuccess: string;\n}\n\nexport const defaultCopyableSecretAlertStrings: CopyableSecretAlertStrings = {\n\ttitle: 'Secret created',\n\tdescription: 'Copy this value now. It may not be shown again.',\n\tcopySuccess: 'Secret copied',\n};\n\nexport interface CopyableSecretAlertProps {\n\t/** Current value. Controlled. */\n\tvalue: string;\n\t/** Formatted value shown to the user. */\n\tdisplayValue?: ReactNode;\n\t/** Surface title. */\n\ttitle?: ReactNode;\n\t/** Supporting copy shown under the label. */\n\tdescription?: ReactNode;\n\t/** The action this surface performs. */\n\taction?: ReactNode;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<CopyableSecretAlertStrings>;\n}\n\nexport function CopyableSecretAlert({\n\tvalue,\n\tdisplayValue,\n\ttitle,\n\tdescription,\n\taction,\n\tclassName,\n\tstrings: stringsProp,\n}: CopyableSecretAlertProps) {\n\tconst strings = useStrings(defaultCopyableSecretAlertStrings, stringsProp);\n\n\treturn (\n\t\t<Alert\n\t\t\tdata-component=\"copyable-secret-alert\"\n\t\t\tdata-slot=\"copyable-secret-alert\"\n\t\t\ttone=\"success\"\n\t\t\tclassName={cn('copyable-secret-alert--component', className)}\n\t\t>\n\t\t\t<KeyRound className=\"size-icon\" />\n\t\t\t<AlertTitle>{title ?? strings.title}</AlertTitle>\n\t\t\t<AlertDescription>\n\t\t\t\t<Stack render={<span />} gap=\"md\">\n\t\t\t\t\t<Text tag=\"span\" type=\"secondary\">\n\t\t\t\t\t\t{description ?? strings.description}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Copyable\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tdisplayValue={displayValue ?? value}\n\t\t\t\t\t\tmono\n\t\t\t\t\t\ttruncate\n\t\t\t\t\t\tclassName=\"copyable-secret-alert--value max-w-full rounded-inner bg-background px-space-md py-space-xs\"\n\t\t\t\t\t\tstrings={{ success: strings.copySuccess }}\n\t\t\t\t\t/>\n\t\t\t\t</Stack>\n\t\t\t</AlertDescription>\n\t\t\t{!!action && <AlertAction>{action}</AlertAction>}\n\t\t</Alert>\n\t);\n}\n\nexport interface ApiTokenAbility {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Display label. */\n\tlabel: ReactNode;\n\t/** Supporting copy shown under the label. */\n\tdescription?: ReactNode;\n\t/** Renders the entry as unselectable. */\n\tdisabled?: boolean;\n}\n\nexport interface ApiTokenCreatedToken {\n\t/** Current value. Controlled. */\n\tvalue: string;\n\t/** Formatted value shown to the user. */\n\tdisplayValue?: ReactNode;\n\t/** Display name. */\n\tname?: ReactNode;\n}\n\nexport interface ApiTokenCreateValues {\n\t/** Display name. */\n\tname: string;\n\t/** Capabilities the viewer is permitted to use. */\n\tabilities: string[];\n}\n\nexport interface ApiTokenManagerStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tnameLabel: string;\n\tnamePlaceholder: string;\n\tabilitiesLabel: string;\n\tcreate: string;\n\trevokeAll: string;\n\tcreatedTitle: string;\n\tcreatedDescription: string;\n}\n\nexport const defaultApiTokenManagerStrings: ApiTokenManagerStrings = {\n\ttitle: 'API tokens',\n\tdescription: 'Create and revoke access tokens.',\n\tnameLabel: 'Token name',\n\tnamePlaceholder: 'Production deploy key',\n\tabilitiesLabel: 'Abilities',\n\tcreate: 'Create token',\n\trevokeAll: 'Revoke all',\n\tcreatedTitle: 'Token created',\n\tcreatedDescription: 'Copy this token now. It will not be shown again.',\n};\n\nexport interface ApiTokenManagerProps {\n\t/** API access credentials to display and manage. */\n\ttokens: ApiKeyListItem[];\n\t/** Capabilities the viewer is permitted to use. */\n\tabilities?: readonly ApiTokenAbility[];\n\tcreatedToken?: ApiTokenCreatedToken | null;\n\t/** Display name. */\n\tname?: string;\n\tdefaultName?: string;\n\tonNameChange?: (name: string) => void;\n\tselectedAbilities?: readonly string[];\n\tdefaultSelectedAbilities?: readonly string[];\n\tonSelectedAbilitiesChange?: (abilities: string[]) => void;\n\t/** Fired when the user asks to create a token. */\n\tonCreateToken?: (values: ApiTokenCreateValues) => void | Promise<void>;\n\tonRevokeToken?: (id: string, token: ApiKeyListItem) => void | Promise<void>;\n\tonRevokeAllTokens?: () => void | Promise<void>;\n\tonAfterMutate?: (event: { type: 'create' | 'revoke' | 'revoke-all'; payload?: unknown }) => void;\n\tonError?: (error: unknown, context: { phase: 'create' | 'revoke' | 'revoke-all' }) => void;\n\tcreating?: boolean;\n\trevokingAll?: boolean;\n\t/** Renders the entry as unselectable. */\n\tdisabled?: boolean;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<ApiTokenManagerStrings>;\n}\n\nexport function ApiTokenManager({\n\ttokens,\n\tabilities = [],\n\tcreatedToken,\n\tname,\n\tdefaultName = '',\n\tonNameChange,\n\tselectedAbilities,\n\tdefaultSelectedAbilities = [],\n\tonSelectedAbilitiesChange,\n\tonCreateToken,\n\tonRevokeToken,\n\tonRevokeAllTokens,\n\tonAfterMutate,\n\tonError,\n\tcreating: creatingProp = false,\n\trevokingAll: revokingAllProp = false,\n\tdisabled = false,\n\tclassName,\n\tstrings: stringsProp,\n}: ApiTokenManagerProps) {\n\tconst strings = useStrings(defaultApiTokenManagerStrings, stringsProp);\n\tconst isNameControlled = name !== undefined;\n\tconst isAbilitiesControlled = selectedAbilities !== undefined;\n\tconst [internalName, setInternalName] = useState(defaultName);\n\tconst [internalAbilities, setInternalAbilities] = useState<string[]>([...defaultSelectedAbilities]);\n\tconst [pendingPhase, setPendingPhase] = useState<'create' | 'revoke' | 'revoke-all' | null>(null);\n\tconst resolvedName = isNameControlled ? name : internalName;\n\tconst resolvedAbilities = useMemo(\n\t\t() => isAbilitiesControlled ? [...selectedAbilities] : internalAbilities,\n\t\t[internalAbilities, isAbilitiesControlled, selectedAbilities],\n\t);\n\tconst creating = creatingProp || pendingPhase === 'create';\n\tconst revokingAll = revokingAllProp || pendingPhase === 'revoke-all';\n\n\tconst setName = useCallback(\n\t\t(nextName: string) => {\n\t\t\tif (!isNameControlled) setInternalName(nextName);\n\t\t\tonNameChange?.(nextName);\n\t\t},\n\t\t[isNameControlled, onNameChange],\n\t);\n\n\tconst setAbilities = useCallback(\n\t\t(nextAbilities: string[]) => {\n\t\t\tif (!isAbilitiesControlled) setInternalAbilities(nextAbilities);\n\t\t\tonSelectedAbilitiesChange?.(nextAbilities);\n\t\t},\n\t\t[isAbilitiesControlled, onSelectedAbilitiesChange],\n\t);\n\n\tconst toggleAbility = useCallback(\n\t\t(abilityId: string, checked: boolean | 'indeterminate') => {\n\t\t\tconst nextChecked = checked === true;\n\t\t\tconst next = nextChecked\n\t\t\t\t? Array.from(new Set([...resolvedAbilities, abilityId]))\n\t\t\t\t: resolvedAbilities.filter((id) => id !== abilityId);\n\t\t\tsetAbilities(next);\n\t\t},\n\t\t[resolvedAbilities, setAbilities],\n\t);\n\n\tconst runMutation = useCallback(\n\t\tasync (\n\t\t\tphase: 'create' | 'revoke' | 'revoke-all',\n\t\t\ttask: () => void | Promise<void>,\n\t\t\tpayload?: unknown,\n\t\t) => {\n\t\t\tsetPendingPhase(phase);\n\t\t\ttry {\n\t\t\t\tawait task();\n\t\t\t\tonAfterMutate?.({ type: phase, payload });\n\t\t\t} catch (error) {\n\t\t\t\tif (import.meta.env?.DEV) {\n\t\t\t\t\tconsole.warn(`[ApiTokenManager] ${phase} failed`, error);\n\t\t\t\t}\n\t\t\t\tonError?.(error, { phase });\n\t\t\t} finally {\n\t\t\t\tsetPendingPhase(null);\n\t\t\t}\n\t\t},\n\t\t[onAfterMutate, onError],\n\t);\n\n\tconst handleCreate = useCallback(() => {\n\t\tif (!onCreateToken) return;\n\t\tconst values = { name: resolvedName, abilities: resolvedAbilities };\n\t\tvoid runMutation('create', () => onCreateToken(values), values);\n\t}, [onCreateToken, resolvedAbilities, resolvedName, runMutation]);\n\n\tconst handleRevoke = useCallback(\n\t\t(id: string, token: ApiKeyListItem) => {\n\t\t\tif (!onRevokeToken) return;\n\t\t\tvoid runMutation('revoke', () => onRevokeToken(id, token), token);\n\t\t},\n\t\t[onRevokeToken, runMutation],\n\t);\n\n\tconst handleRevokeAll = useCallback(() => {\n\t\tif (!onRevokeAllTokens) return;\n\t\tvoid runMutation('revoke-all', onRevokeAllTokens);\n\t}, [onRevokeAllTokens, runMutation]);\n\n\treturn (\n\t\t<ContentBlock\n\t\t\tdata-component=\"api-token-manager\"\n\t\t\tdata-slot=\"api-token-manager\"\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\theaderAction={onRevokeAllTokens ? (\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"destructive\"\n\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\tloading={revokingAll}\n\t\t\t\t\tdisabled={disabled || tokens.length === 0}\n\t\t\t\t\tonClick={handleRevokeAll}\n\t\t\t\t>\n\t\t\t\t\t{strings.revokeAll}\n\t\t\t\t</Button>\n\t\t\t) : undefined}\n\t\t\tclassName={cn('api-token-manager--component', className)}\n\t\t>\n\t\t\t<Stack gap=\"xl\" className=\"api-token-manager--content\">\n\t\t\t\t{!!createdToken && (\n\t\t\t\t\t<CopyableSecretAlert\n\t\t\t\t\t\tvalue={createdToken.value}\n\t\t\t\t\t\tdisplayValue={createdToken.displayValue}\n\t\t\t\t\t\ttitle={createdToken.name ?? strings.createdTitle}\n\t\t\t\t\t\tdescription={strings.createdDescription}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t{/* The form is part of this surface, not a muted box inside it. */}\n\t\t\t<div className=\"api-token-manager--form\">\n\t\t\t<Stack gap=\"lg\">\n\t\t\t\t<FormField label={strings.nameLabel}>\n\t\t\t\t\t<Input\n\t\t\t\t\t\tvalue={resolvedName}\n\t\t\t\t\t\tplaceholder={strings.namePlaceholder}\n\t\t\t\t\t\tonChange={(event) => setName(event.currentTarget.value)}\n\t\t\t\t\t\tdisabled={disabled || creating}\n\t\t\t\t\t/>\n\t\t\t\t</FormField>\n\n\t\t\t\t{abilities.length > 0 && (\n\t\t\t\t\t<Stack gap=\"md\" className=\"api-token-manager--abilities\">\n\t\t\t\t\t\t<DisplayLabel>{strings.abilitiesLabel}</DisplayLabel>\n\t\t\t\t\t\t<Grid columns={{ base: 1, sm: 2 }} gap=\"md\">\n\t\t\t\t\t\t\t{abilities.map((ability) => {\n\t\t\t\t\t\t\t\tconst checked = resolvedAbilities.includes(ability.id);\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<label\n\t\t\t\t\t\t\t\t\t\tkey={ability.id}\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex min-w-0 items-start gap-space-md rounded-radius border border-border/70 bg-background px-row-x py-row-y\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\t\t\t\tchecked={checked}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled || creating || ability.disabled}\n\t\t\t\t\t\t\t\t\t\t\tonCheckedChange={(next) => toggleAbility(ability.id, next)}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t<Stack render={<span />} gap=\"dense\">\n\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"medium\">{ability.label}</Text>\n\t\t\t\t\t\t\t\t\t\t\t{!!ability.description && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">{ability.description}</Text>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</Grid>\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"none\" justify=\"end\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttone=\"primary\"\n\t\t\t\t\t\tloading={creating}\n\t\t\t\t\t\tdisabled={disabled || !onCreateToken || resolvedName.trim().length === 0}\n\t\t\t\t\t\tonClick={handleCreate}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Plus className=\"size-icon\" />\n\t\t\t\t\t\t{strings.create}\n\t\t\t\t\t</Button>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t\t</div>\n\t\t\t</Stack>\n\n\t\t\t<ApiKeyList\n\t\t\t\titems={tokens}\n\t\t\t\tonDelete={onRevokeToken ? handleRevoke : undefined}\n\t\t\t/>\n\t\t</ContentBlock>\n\t);\n}\n\nApiTokenManager.displayName = 'ApiTokenManager';\n"],"mappings":"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"}
1
+ {"version":3,"file":"admin.js","names":["useTypographyConfig","cn","Button","Text","DisplayLabel","textSizes","textLineHeights","Grid","Stack","toneRecipes","AlertDescription","AlertAction","AlertTitle","ActionMenu","MonoValue","IconBadge","Badge","Input","Copyable","FormField","choiceControlTrackClasses","Checkbox","ContentBlock","CollapsibleContent","CollapsibleTrigger","Collapsible","ItemMedia","ItemActions","ItemGroup","ItemContent","Item","defaultRolePermissionStrings","count","RolePermission","stringsProp","strings","useStrings","className","roleName","memberCount","description","sections","section","perm","Check","Minus","onEdit","defaultApiKeyListStrings","LIST_CONTROL_SIZE","ApiKeyList","forwardRef","isControlled","open","internalOpen","setInternalOpen","useState","defaultOpen","expanded","handleOpenChange","useCallback","next","onOpenChange","ChevronRight","title","onAdd","Plus","items","ApiKeyRow","item","copied","setCopied","handleCopy","toast","copyToastSuccess","onCopy","copyToastError","display","actions","copiedMenuLabel","copyMenuLabel","Copy","onDelete","deleteMenuLabel","Trash2","rowMenuAria","SensitiveActionCard","Icon","confirmation","action","defaultCopyableSecretAlertStrings","CopyableSecretAlert","Alert","KeyRound","displayValue","value","defaultApiTokenManagerStrings","ApiTokenManager","creatingProp","revokingAllProp","abilityCheckTrack","defaultTextSize","isNameControlled","name","isAbilitiesControlled","selectedAbilities","internalName","setInternalName","defaultName","internalAbilities","setInternalAbilities","defaultSelectedAbilities","pendingPhase","setPendingPhase","resolvedName","resolvedAbilities","useMemo","creating","revokingAll","setName","nextName","onNameChange","setAbilities","nextAbilities","onSelectedAbilitiesChange","toggleAbility","checked","abilityId","id","runMutation","phase","task","onAfterMutate","error","onError","handleCreate","onCreateToken","values","handleRevoke","onRevokeToken","token","handleRevokeAll","onRevokeAllTokens","disabled","tokens","createdToken","event","abilities","ability"],"sources":["../../src/components/blocks/admin/admin.strings.ts","../../src/components/blocks/admin/role-permission/role-permission.tsx","../../src/components/blocks/admin/api-key-list/api-key-list.strings.ts","../../src/components/blocks/admin/api-key-list/api-key-list.tsx","../../src/components/blocks/admin/action-surfaces/index.tsx"],"sourcesContent":["export interface RolePermissionStrings {\n\t/** Edit-role button label. */\n\teditRole: string;\n\t/** Accessible state name for an allowed permission. */\n\tpermissionAllowed?: string;\n\t/** Accessible state name for a permission that is not allowed. */\n\tpermissionDenied?: string;\n\t/** Format string for the member-count badge. Receives the count. */\n\tformatMemberCount: (count: number) => string;\n}\n\nexport const defaultRolePermissionStrings: Required<RolePermissionStrings> = {\n\teditRole: 'Edit role',\n\tpermissionAllowed: 'Allowed',\n\tpermissionDenied: 'Not allowed',\n\tformatMemberCount: (count) => `${count} members`,\n};\n","/**\n * RolePermission — admin surface for a role with description, member\n * count badge, grouped permission states (check vs minus), and an\n * optional Edit button.\n *\n * Strings overridable via `strings` prop. `strings.formatMemberCount` is a\n * function so consumers can localise pluralisation rules.\n */\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { Stack } from '../../../base/structure';\nimport { DisplayLabel } from '../../../typography/display-label';\nimport { Text } from '../../../typography/text';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\nimport { Check, Minus } from 'lucide-react';\n\nimport { defaultRolePermissionStrings } from '../admin.strings';\nimport type { RolePermissionProps } from './types';\n\nexport function RolePermission({\n\troleName,\n\tdescription,\n\tmemberCount,\n\tsections,\n\tonEdit,\n\tclassName,\n\tstrings: stringsProp,\n}: RolePermissionProps) {\n\tconst strings = useStrings(defaultRolePermissionStrings, stringsProp);\n\t// One spacing owner: the outer Stack separates header, sections and the edit\n\t// action; the member count is a neutral count that reads with the role name.\n\treturn (\n\t\t<Stack\n\t\t\tgap=\"2xl\"\n\t\t\tdata-component=\"role-permission\"\n\t\t\tdata-slot=\"role-permission\"\n\t\t\tclassName={cn('role-permission--component', className)}\n\t\t>\n\t\t\t<Stack gap=\"normal\" className=\"role-permission--header\">\n\t\t\t\t<Stack direction=\"horizontal\" wrap align=\"center\" gap=\"sm\">\n\t\t\t\t\t<Text weight=\"semibold\">{roleName}</Text>\n\t\t\t\t\t{memberCount !== undefined && <Badge>{strings.formatMemberCount(memberCount)}</Badge>}\n\t\t\t\t</Stack>\n\t\t\t\t{!!description && <Text size=\"xs\" type=\"secondary\">{description}</Text>}\n\t\t\t</Stack>\n\n\t\t\t<Stack gap=\"xl\">\n\t\t\t\t{sections.map((section) => (\n\t\t\t\t\t<Stack key={section.name} gap=\"md\">\n\t\t\t\t\t\t<DisplayLabel>\n\t\t\t\t\t\t\t{section.name}\n\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t<div className=\"flex flex-wrap gap-space-md\">\n\t\t\t\t\t\t\t{section.permissions.map((perm) => (\n\t\t\t\t\t\t\t\t<div key={perm.label} className=\"flex items-center gap-space-sm\">\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\trole=\"img\"\n\t\t\t\t\t\t\t\t\t\taria-label={`${perm.label}: ${perm.active ? strings.permissionAllowed : strings.permissionDenied}`}\n\t\t\t\t\t\t\t\t\t\tclassName={cn('inline-flex size-icon-sm shrink-0', perm.active ? 'text-success' : 'text-muted-foreground')}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{perm.active ? <Check className=\"size-full\" aria-hidden /> : <Minus className=\"size-full\" aria-hidden />}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t<Text className={perm.active ? 'text-foreground' : 'text-muted-foreground'}>\n\t\t\t\t\t\t\t\t\t\t{perm.label}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</Stack>\n\t\t\t\t))}\n\t\t\t</Stack>\n\n\t\t\t{!!onEdit && (\n\t\t\t\t<div className=\"role-permission--actions\">\n\t\t\t\t\t<Button tone=\"neutral\" buttonStyle=\"outline\" size=\"sm\" onClick={onEdit}>\n\t\t\t\t\t\t{strings.editRole}\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n\nRolePermission.displayName = 'RolePermission';\n","/**\n * Strings for `<ApiKeyList>`. English defaults; deep-merge-overridable.\n */\nexport interface ApiKeyListStrings {\n\t/** Surface title. */\n\ttitle: string;\n\taddAria: string;\n\trowMenuAria: string;\n\tcopyMenuItem: string;\n\tcopiedMenuItem: string;\n\tdeleteMenuItem: string;\n\tcopyToastSuccess: string;\n\tcopyToastError: string;\n\temptyMessage: string;\n}\n\nexport const defaultApiKeyListStrings: ApiKeyListStrings = {\n\ttitle: 'API keys',\n\taddAria: 'Add API key',\n\trowMenuAria: 'Key actions',\n\tcopyMenuItem: 'Copy key',\n\tcopiedMenuItem: 'Copied',\n\tdeleteMenuItem: 'Delete',\n\tcopyToastSuccess: 'Copied to clipboard',\n\tcopyToastError: 'Failed to copy',\n\temptyMessage: 'No keys yet.',\n};\n","/**\n * ApiKeyList — collapsible section listing API keys / credentials with a\n * per-row dropdown menu (Copy / Delete) and an optional add-new action\n * in the header. Generic enough to use for any \"named secret list\":\n * service tokens, webhook URLs, deployment hooks, …\n *\n * Composes:\n * - `base/display/collapsible` (the shadcn-wrapped collapsible shell)\n * - `base/buttons`, `base/badge` (header actions, status pills)\n * - `base/action-menu/ActionMenu` (per-row dropdown)\n * - `base/copyable/Copyable` (copy-to-clipboard with toast)\n *\n * Framework-agnostic — every action is callback-driven; the library\n * doesn't fetch, navigate, or render delete confirmations.\n */\nimport { ChevronRight, Copy, Plus, Trash2 } from 'lucide-react';\nimport { forwardRef, useCallback, useState } from 'react';\nimport { toast } from 'sonner';\n\nimport { Button } from '../../../base/buttons';\nimport {\n\tCollapsible,\n\tCollapsibleContent,\n\tCollapsibleTrigger,\n} from '../../../base/display/collapsible';\nimport { IconBadge } from '../../../base/display/icon-badge';\nimport { Item, ItemActions, ItemContent, ItemGroup, ItemMedia } from '../../../base/item';\nimport { ActionMenu, type ActionMenuAction } from '../../../base/action-menu';\nimport { MonoValue } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultApiKeyListStrings } from './api-key-list.strings';\nimport type { ApiKeyListItem, ApiKeyListProps } from './api-key-list.types';\n\n// The add action and each row's More actions square share one compact size, so\n// the list's action column lines up and rows follow the key preview rather than\n// a taller button.\nconst LIST_CONTROL_SIZE = 'sm';\n\nexport const ApiKeyList = forwardRef<HTMLDivElement, ApiKeyListProps>(function ApiKeyList({\n\titems,\n\tdefaultOpen = true,\n\topen,\n\tonOpenChange,\n\tonAdd,\n\tonDelete,\n\tonCopy,\n\ttitle,\n\tclassName,\n\tstrings: stringsProp,\n}, ref) {\n\tconst strings = useStrings(defaultApiKeyListStrings, stringsProp);\n\tconst isControlled = open !== undefined;\n\tconst [internalOpen, setInternalOpen] = useState(defaultOpen);\n\tconst expanded = isControlled ? open : internalOpen;\n\n\tconst handleOpenChange = useCallback(\n\t\t(next: boolean) => {\n\t\t\tif (!isControlled) setInternalOpen(next);\n\t\t\tonOpenChange?.(next);\n\t\t},\n\t\t[isControlled, onOpenChange],\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tdata-component=\"api-key-list\"\n\t\t\tdata-slot=\"api-key-list\"\n\t\t\tclassName={cn('api-key-list--component @container/api-key-list min-w-0', className)}\n\t\t>\n\t\t\t<Collapsible open={expanded} onOpenChange={handleOpenChange}>\n\t\t\t\t<div className=\"flex items-center gap-space-md\">\n\t\t\t\t\t<CollapsibleTrigger asChild>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\tsize=\"md\"\n\t\t\t\t\t\t\t// Keep the tokenized action height and radius so the toggle lines up with\n\t\t\t\t\t\t\t// the add action beside it; `h-auto` collapsed it to 23px next to a\n\t\t\t\t\t\t\t// 32px sibling. `px-0` stays so the title aligns with the rows below.\n\t\t\t\t\t\t\tclassName=\"h-action flex-1 justify-start gap-space-md rounded-inner px-0 py-0 text-left\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ChevronRight\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'size-icon text-muted-foreground transition-transform',\n\t\t\t\t\t\t\t\t\texpanded && 'rotate-90',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"semibold\">\n\t\t\t\t\t\t\t\t{title ?? strings.title}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</CollapsibleTrigger>\n\t\t\t\t\t{!!onAdd && (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\tsize={LIST_CONTROL_SIZE} iconOnly\n\t\t\t\t\t\t\tonClick={onAdd}\n\t\t\t\t\t\t\taria-label={strings.addAria}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Plus className=\"size-icon\" />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<CollapsibleContent className=\"pt-space-lg\">\n\t\t\t\t\t{items.length === 0 ? (\n\t\t\t\t\t\t<Text type=\"secondary\">\n\t\t\t\t\t\t\t{strings.emptyMessage}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t// Rows touch: each row's density padding is the only space between keys.\n\t\t\t\t\t\t// (Rows keep their `api-key-row` slot hook, so the group states gap-0.)\n\t\t\t\t\t\t<ItemGroup role=\"list\" className=\"gap-0\">\n\t\t\t\t\t\t\t{items.map((item) => (\n\t\t\t\t\t\t\t\t<ApiKeyRow\n\t\t\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\t\t\tonDelete={onDelete}\n\t\t\t\t\t\t\t\t\tonCopy={onCopy}\n\t\t\t\t\t\t\t\t\tcopyMenuLabel={strings.copyMenuItem}\n\t\t\t\t\t\t\t\t\tcopiedMenuLabel={strings.copiedMenuItem}\n\t\t\t\t\t\t\t\t\tdeleteMenuLabel={strings.deleteMenuItem}\n\t\t\t\t\t\t\t\t\trowMenuAria={strings.rowMenuAria}\n\t\t\t\t\t\t\t\t\tcopyToastSuccess={strings.copyToastSuccess}\n\t\t\t\t\t\t\t\t\tcopyToastError={strings.copyToastError}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t)}\n\t\t\t\t</CollapsibleContent>\n\t\t\t</Collapsible>\n\t\t</div>\n\t);\n});\n\nApiKeyList.displayName = 'ApiKeyList';\n\ninterface ApiKeyRowProps {\n\titem: ApiKeyListItem;\n\t/** Fired when an entry is removed. */\n\tonDelete?: ApiKeyListProps['onDelete'];\n\t/** Fired when an entry is copied. */\n\tonCopy?: ApiKeyListProps['onCopy'];\n\tcopyMenuLabel: string;\n\tcopiedMenuLabel: string;\n\tdeleteMenuLabel: string;\n\trowMenuAria: string;\n\tcopyToastSuccess: string;\n\tcopyToastError: string;\n}\n\nfunction ApiKeyRow({\n\titem,\n\tonDelete,\n\tonCopy,\n\tcopyMenuLabel,\n\tcopiedMenuLabel,\n\tdeleteMenuLabel,\n\trowMenuAria,\n\tcopyToastSuccess,\n\tcopyToastError,\n}: ApiKeyRowProps) {\n\tconst [copied, setCopied] = useState(false);\n\n\tconst handleCopy = useCallback(async () => {\n\t\ttry {\n\t\t\tawait navigator.clipboard.writeText(item.value);\n\t\t\tsetCopied(true);\n\t\t\tsetTimeout(() => setCopied(false), 1500);\n\t\t\ttoast.success(copyToastSuccess);\n\t\t\tonCopy?.(item.id, item);\n\t\t} catch (err) {\n\t\t\ttoast.error(copyToastError);\n\t\t\tif (import.meta.env?.DEV) {\n\t\t\t\tconsole.warn('[ApiKeyList] copy failed', err);\n\t\t\t}\n\t\t}\n\t}, [item, onCopy, copyToastSuccess, copyToastError]);\n\n\tconst display = item.displayValue ?? item.value;\n\tconst actions: ActionMenuAction[] = [\n\t\t...(item.copyable !== false ? [{\n\t\t\tid: 'copy',\n\t\t\tlabel: copied ? copiedMenuLabel : copyMenuLabel,\n\t\t\ticon: Copy,\n\t\t\tonClick: () => {\n\t\t\t\tvoid handleCopy();\n\t\t\t},\n\t\t\tdisabled: item.disabled,\n\t\t}] : []),\n\t\t...(onDelete ? [{\n\t\t\tid: 'delete',\n\t\t\tlabel: deleteMenuLabel,\n\t\t\ticon: Trash2,\n\t\t\ttone: 'destructive' as const,\n\t\t\tdisabled: item.disabled,\n\t\t\tonClick: () => onDelete(item.id, item),\n\t\t}] : []),\n\t];\n\n\treturn (\n\t\t<Item size=\"sm\" role=\"listitem\" data-slot=\"api-key-row\" className=\"flex-nowrap\">\n\t\t\t{/* No default glyph: a lock on every row repeats what the list title says.\n\t\t\t A consumer-supplied icon still renders as neutral media. */}\n\t\t\t{!!item.icon && (\n\t\t\t\t<ItemMedia variant=\"icon\">\n\t\t\t\t\t<IconBadge size=\"sm\" shape=\"square\" tone=\"neutral\" bordered>\n\t\t\t\t\t\t{item.icon}\n\t\t\t\t\t</IconBadge>\n\t\t\t\t</ItemMedia>\n\t\t\t)}\n\t\t\t<ItemContent className=\"min-w-0 flex-row items-center gap-space-md\">\n\t\t\t\t<Text tag=\"span\" weight=\"medium\" className=\"w-20 shrink-0 truncate @md/api-key-list:w-24\">\n\t\t\t\t\t{item.name}\n\t\t\t\t</Text>\n\t\t\t\t<MonoValue className=\"min-w-0 flex-1 truncate rounded-inner bg-muted px-space-md py-space-xs\">\n\t\t\t\t\t{display}\n\t\t\t\t</MonoValue>\n\t\t\t</ItemContent>\n\t\t\t<ItemActions className=\"shrink-0\">\n\t\t\t\t<ActionMenu\n\t\t\t\t\tactions={actions}\n\t\t\t\t\tsrText={rowMenuAria}\n\t\t\t\t\talign=\"end\"\n\t\t\t\t\tcloseOnSelect\n\t\t\t\t\tbuttonProps={{ size: LIST_CONTROL_SIZE }}\n\t\t\t\t/>\n\t\t\t</ItemActions>\n\t\t</Item>\n\t);\n}\n\nApiKeyRow.displayName = 'ApiKeyRow';\n","import {\n\tuseCallback,\n\tuseMemo,\n\tuseState,\n\ttype ReactNode } from 'react';\nimport { KeyRound,\n\tPlus,\n\ttype LucideIcon } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { Copyable } from '../../../base/copyable';\nimport { ContentBlock, IconBadge } from '../../../base/display';\nimport { Alert, AlertAction, AlertDescription, AlertTitle } from '../../../base/feedback';\nimport { Checkbox } from '../../../base/choice-inputs';\nimport { choiceControlTrackClasses } from '../../../base/choice-inputs/choice-types';\nimport { FormField } from '../../../base/forms';\nimport { Input } from '../../../base/text-inputs';\nimport { Grid, Stack } from '../../../base/structure';\nimport { DisplayLabel, Text } from '../../../typography';\nimport { textLineHeights, textSizes } from '../../../typography/text.styles';\nimport { useTypographyConfig } from '../../../../lib/ui-provider';\nimport { useStrings, type StringsProp } from '../../../../lib/strings';\nimport type { CardSurface, ComponentScale } from '../../../../lib/component-vocabulary';\nimport { cn } from '../../../../lib/utils';\n\nimport { ApiKeyList, type ApiKeyListItem } from '../api-key-list';\nimport { toneRecipes } from '../../../../lib/tone-recipes';\n\ntype ActionSurfacePadding = ComponentScale;\ntype ActionSurfaceSurface = CardSurface;\n\nexport interface SensitiveActionCardProps {\n\t/** Surface title. */\n\ttitle: ReactNode;\n\t/** Supporting copy shown under the label. */\n\tdescription?: ReactNode;\n\t/** Confirmation copy shown before the action runs. */\n\tconfirmation?: ReactNode;\n\t/** The action this surface performs. */\n\taction?: ReactNode;\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n\t/** Surface inset. */\n\tpadding?: ActionSurfacePadding;\n\t/** Outer chrome. */\n\tsurface?: ActionSurfaceSurface;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n}\n\nexport function SensitiveActionCard({\n\ttitle,\n\tdescription,\n\tconfirmation,\n\taction,\n\ticon: Icon,\n\tpadding = 'md',\n\tsurface = 'card',\n\tclassName,\n}: SensitiveActionCardProps) {\n\treturn (\n\t\t<ContentBlock\n\t\t\tdata-component=\"sensitive-action-card\"\n\t\t\tdata-slot=\"sensitive-action-card\"\n\t\t\tpadding={padding}\n\t\t\tsurface={surface}\n\t\t\tclassName={cn('sensitive-action-card--component', toneRecipes.destructive.edge, className)}\n\t\t\tcontentClassName=\"sensitive-action-card--content grid gap-space-lg\"\n\t\t>\n\t\t\t{/* The destructive frame and action carry the danger; an icon is opt-in and\n\t\t\t the confirmation note is copy in the text column, not a nested panel. */}\n\t\t\t<Stack direction=\"horizontal\" align=\"start\" gap=\"lg\" className=\"min-w-0\">\n\t\t\t\t{!!Icon && <IconBadge icon={Icon} tone=\"destructive\" shape=\"square\" size=\"md\" />}\n\t\t\t\t<Stack gap=\"normal\" className=\"min-w-0 flex-1\">\n\t\t\t\t\t<Text weight=\"semibold\">{title}</Text>\n\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t<Text type=\"secondary\">\n\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t\t{!!confirmation && (\n\t\t\t\t\t\t<Text tag=\"div\" type=\"secondary\" role=\"note\" className=\"sensitive-action-card--confirmation\">\n\t\t\t\t\t\t\t{confirmation}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t\t{!!action && <div className=\"shrink-0\">{action}</div>}\n\t\t\t</Stack>\n\t\t</ContentBlock>\n\t);\n}\n\nexport interface CopyableSecretAlertStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcopySuccess: string;\n}\n\nexport const defaultCopyableSecretAlertStrings: CopyableSecretAlertStrings = {\n\ttitle: 'Secret created',\n\tdescription: 'Copy this value now. It may not be shown again.',\n\tcopySuccess: 'Secret copied',\n};\n\nexport interface CopyableSecretAlertProps {\n\t/** Current value. Controlled. */\n\tvalue: string;\n\t/** Formatted value shown to the user. */\n\tdisplayValue?: ReactNode;\n\t/** Surface title. */\n\ttitle?: ReactNode;\n\t/** Supporting copy shown under the label. */\n\tdescription?: ReactNode;\n\t/** The action this surface performs. */\n\taction?: ReactNode;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<CopyableSecretAlertStrings>;\n}\n\nexport function CopyableSecretAlert({\n\tvalue,\n\tdisplayValue,\n\ttitle,\n\tdescription,\n\taction,\n\tclassName,\n\tstrings: stringsProp,\n}: CopyableSecretAlertProps) {\n\tconst strings = useStrings(defaultCopyableSecretAlertStrings, stringsProp);\n\n\treturn (\n\t\t<Alert\n\t\t\tdata-component=\"copyable-secret-alert\"\n\t\t\tdata-slot=\"copyable-secret-alert\"\n\t\t\ttone=\"success\"\n\t\t\tclassName={cn('copyable-secret-alert--component', className)}\n\t\t>\n\t\t\t<KeyRound className=\"size-icon\" />\n\t\t\t<AlertTitle>{title ?? strings.title}</AlertTitle>\n\t\t\t<AlertDescription>\n\t\t\t\t<Stack render={<span />} gap=\"md\">\n\t\t\t\t\t<Text tag=\"span\" type=\"secondary\">\n\t\t\t\t\t\t{description ?? strings.description}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Copyable\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tdisplayValue={displayValue ?? value}\n\t\t\t\t\t\tmono\n\t\t\t\t\t\ttruncate\n\t\t\t\t\t\tclassName=\"copyable-secret-alert--value max-w-full rounded-inner bg-background px-space-md py-space-xs\"\n\t\t\t\t\t\tstrings={{ success: strings.copySuccess }}\n\t\t\t\t\t/>\n\t\t\t\t</Stack>\n\t\t\t</AlertDescription>\n\t\t\t{!!action && <AlertAction>{action}</AlertAction>}\n\t\t</Alert>\n\t);\n}\n\nexport interface ApiTokenAbility {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Display label. */\n\tlabel: ReactNode;\n\t/** Supporting copy shown under the label. */\n\tdescription?: ReactNode;\n\t/** Renders the entry as unselectable. */\n\tdisabled?: boolean;\n}\n\nexport interface ApiTokenCreatedToken {\n\t/** Current value. Controlled. */\n\tvalue: string;\n\t/** Formatted value shown to the user. */\n\tdisplayValue?: ReactNode;\n\t/** Display name. */\n\tname?: ReactNode;\n}\n\nexport interface ApiTokenCreateValues {\n\t/** Display name. */\n\tname: string;\n\t/** Capabilities the viewer is permitted to use. */\n\tabilities: string[];\n}\n\nexport interface ApiTokenManagerStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tnameLabel: string;\n\tnamePlaceholder: string;\n\tabilitiesLabel: string;\n\tcreate: string;\n\trevokeAll: string;\n\tcreatedTitle: string;\n\tcreatedDescription: string;\n}\n\nexport const defaultApiTokenManagerStrings: ApiTokenManagerStrings = {\n\ttitle: 'API tokens',\n\tdescription: 'Create and revoke access tokens.',\n\tnameLabel: 'Token name',\n\tnamePlaceholder: 'Production deploy key',\n\tabilitiesLabel: 'Abilities',\n\tcreate: 'Create token',\n\trevokeAll: 'Revoke all',\n\tcreatedTitle: 'Token created',\n\tcreatedDescription: 'Copy this token now. It will not be shown again.',\n};\n\nexport interface ApiTokenManagerProps {\n\t/** API access credentials to display and manage. */\n\ttokens: ApiKeyListItem[];\n\t/** Capabilities the viewer is permitted to use. */\n\tabilities?: readonly ApiTokenAbility[];\n\tcreatedToken?: ApiTokenCreatedToken | null;\n\t/** Display name. */\n\tname?: string;\n\tdefaultName?: string;\n\tonNameChange?: (name: string) => void;\n\tselectedAbilities?: readonly string[];\n\tdefaultSelectedAbilities?: readonly string[];\n\tonSelectedAbilitiesChange?: (abilities: string[]) => void;\n\t/** Fired when the user asks to create a token. */\n\tonCreateToken?: (values: ApiTokenCreateValues) => void | Promise<void>;\n\tonRevokeToken?: (id: string, token: ApiKeyListItem) => void | Promise<void>;\n\tonRevokeAllTokens?: () => void | Promise<void>;\n\tonAfterMutate?: (event: { type: 'create' | 'revoke' | 'revoke-all'; payload?: unknown }) => void;\n\tonError?: (error: unknown, context: { phase: 'create' | 'revoke' | 'revoke-all' }) => void;\n\tcreating?: boolean;\n\trevokingAll?: boolean;\n\t/** Renders the entry as unselectable. */\n\tdisabled?: boolean;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<ApiTokenManagerStrings>;\n}\n\nexport function ApiTokenManager({\n\ttokens,\n\tabilities = [],\n\tcreatedToken,\n\tname,\n\tdefaultName = '',\n\tonNameChange,\n\tselectedAbilities,\n\tdefaultSelectedAbilities = [],\n\tonSelectedAbilitiesChange,\n\tonCreateToken,\n\tonRevokeToken,\n\tonRevokeAllTokens,\n\tonAfterMutate,\n\tonError,\n\tcreating: creatingProp = false,\n\trevokingAll: revokingAllProp = false,\n\tdisabled = false,\n\tclassName,\n\tstrings: stringsProp,\n}: ApiTokenManagerProps) {\n\tconst strings = useStrings(defaultApiTokenManagerStrings, stringsProp);\n\tconst { defaultTextSize } = useTypographyConfig();\n\t// The checkbox track is one line of the ability label's text role tall, so the\n\t// box centres on the label's first line.\n\tconst abilityCheckTrack = cn(choiceControlTrackClasses, textSizes[defaultTextSize ?? 'sm'], textLineHeights.normal);\n\tconst isNameControlled = name !== undefined;\n\tconst isAbilitiesControlled = selectedAbilities !== undefined;\n\tconst [internalName, setInternalName] = useState(defaultName);\n\tconst [internalAbilities, setInternalAbilities] = useState<string[]>([...defaultSelectedAbilities]);\n\tconst [pendingPhase, setPendingPhase] = useState<'create' | 'revoke' | 'revoke-all' | null>(null);\n\tconst resolvedName = isNameControlled ? name : internalName;\n\tconst resolvedAbilities = useMemo(\n\t\t() => isAbilitiesControlled ? [...selectedAbilities] : internalAbilities,\n\t\t[internalAbilities, isAbilitiesControlled, selectedAbilities],\n\t);\n\tconst creating = creatingProp || pendingPhase === 'create';\n\tconst revokingAll = revokingAllProp || pendingPhase === 'revoke-all';\n\n\tconst setName = useCallback(\n\t\t(nextName: string) => {\n\t\t\tif (!isNameControlled) setInternalName(nextName);\n\t\t\tonNameChange?.(nextName);\n\t\t},\n\t\t[isNameControlled, onNameChange],\n\t);\n\n\tconst setAbilities = useCallback(\n\t\t(nextAbilities: string[]) => {\n\t\t\tif (!isAbilitiesControlled) setInternalAbilities(nextAbilities);\n\t\t\tonSelectedAbilitiesChange?.(nextAbilities);\n\t\t},\n\t\t[isAbilitiesControlled, onSelectedAbilitiesChange],\n\t);\n\n\tconst toggleAbility = useCallback(\n\t\t(abilityId: string, checked: boolean | 'indeterminate') => {\n\t\t\tconst nextChecked = checked === true;\n\t\t\tconst next = nextChecked\n\t\t\t\t? Array.from(new Set([...resolvedAbilities, abilityId]))\n\t\t\t\t: resolvedAbilities.filter((id) => id !== abilityId);\n\t\t\tsetAbilities(next);\n\t\t},\n\t\t[resolvedAbilities, setAbilities],\n\t);\n\n\tconst runMutation = useCallback(\n\t\tasync (\n\t\t\tphase: 'create' | 'revoke' | 'revoke-all',\n\t\t\ttask: () => void | Promise<void>,\n\t\t\tpayload?: unknown,\n\t\t) => {\n\t\t\tsetPendingPhase(phase);\n\t\t\ttry {\n\t\t\t\tawait task();\n\t\t\t\tonAfterMutate?.({ type: phase, payload });\n\t\t\t} catch (error) {\n\t\t\t\tif (import.meta.env?.DEV) {\n\t\t\t\t\tconsole.warn(`[ApiTokenManager] ${phase} failed`, error);\n\t\t\t\t}\n\t\t\t\tonError?.(error, { phase });\n\t\t\t} finally {\n\t\t\t\tsetPendingPhase(null);\n\t\t\t}\n\t\t},\n\t\t[onAfterMutate, onError],\n\t);\n\n\tconst handleCreate = useCallback(() => {\n\t\tif (!onCreateToken) return;\n\t\tconst values = { name: resolvedName, abilities: resolvedAbilities };\n\t\tvoid runMutation('create', () => onCreateToken(values), values);\n\t}, [onCreateToken, resolvedAbilities, resolvedName, runMutation]);\n\n\tconst handleRevoke = useCallback(\n\t\t(id: string, token: ApiKeyListItem) => {\n\t\t\tif (!onRevokeToken) return;\n\t\t\tvoid runMutation('revoke', () => onRevokeToken(id, token), token);\n\t\t},\n\t\t[onRevokeToken, runMutation],\n\t);\n\n\tconst handleRevokeAll = useCallback(() => {\n\t\tif (!onRevokeAllTokens) return;\n\t\tvoid runMutation('revoke-all', onRevokeAllTokens);\n\t}, [onRevokeAllTokens, runMutation]);\n\n\treturn (\n\t\t<ContentBlock\n\t\t\tdata-component=\"api-token-manager\"\n\t\t\tdata-slot=\"api-token-manager\"\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\theaderAction={onRevokeAllTokens ? (\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"destructive\"\n\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\tloading={revokingAll}\n\t\t\t\t\tdisabled={disabled || tokens.length === 0}\n\t\t\t\t\tonClick={handleRevokeAll}\n\t\t\t\t>\n\t\t\t\t\t{strings.revokeAll}\n\t\t\t\t</Button>\n\t\t\t) : undefined}\n\t\t\tclassName={cn('api-token-manager--component', className)}\n\t\t>\n\t\t\t<Stack gap=\"xl\" className=\"api-token-manager--content\">\n\t\t\t\t{!!createdToken && (\n\t\t\t\t\t<CopyableSecretAlert\n\t\t\t\t\t\tvalue={createdToken.value}\n\t\t\t\t\t\tdisplayValue={createdToken.displayValue}\n\t\t\t\t\t\ttitle={createdToken.name ?? strings.createdTitle}\n\t\t\t\t\t\tdescription={strings.createdDescription}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t{/* The form is part of this surface, not a muted box inside it. */}\n\t\t\t<div className=\"api-token-manager--form\">\n\t\t\t<Stack gap=\"lg\">\n\t\t\t\t<FormField label={strings.nameLabel}>\n\t\t\t\t\t<Input\n\t\t\t\t\t\tvalue={resolvedName}\n\t\t\t\t\t\tplaceholder={strings.namePlaceholder}\n\t\t\t\t\t\tonChange={(event) => setName(event.currentTarget.value)}\n\t\t\t\t\t\tdisabled={disabled || creating}\n\t\t\t\t\t/>\n\t\t\t\t</FormField>\n\n\t\t\t\t{abilities.length > 0 && (\n\t\t\t\t\t<Stack gap=\"md\" className=\"api-token-manager--abilities\">\n\t\t\t\t\t\t<DisplayLabel>{strings.abilitiesLabel}</DisplayLabel>\n\t\t\t\t\t\t<Grid columns={{ base: 1, sm: 2 }} gap=\"md\">\n\t\t\t\t\t\t\t{abilities.map((ability) => {\n\t\t\t\t\t\t\t\tconst checked = resolvedAbilities.includes(ability.id);\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<label\n\t\t\t\t\t\t\t\t\t\tkey={ability.id}\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex min-w-0 items-start gap-space-md rounded-radius border border-border bg-background px-row-x py-row-y\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span className={abilityCheckTrack}>\n\t\t\t\t\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\t\t\t\t\tchecked={checked}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled || creating || ability.disabled}\n\t\t\t\t\t\t\t\t\t\t\t\tonCheckedChange={(next) => toggleAbility(ability.id, next)}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t<Stack render={<span />} gap=\"dense\">\n\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"medium\">{ability.label}</Text>\n\t\t\t\t\t\t\t\t\t\t\t{!!ability.description && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">{ability.description}</Text>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</Grid>\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"none\" justify=\"end\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttone=\"primary\"\n\t\t\t\t\t\tloading={creating}\n\t\t\t\t\t\tdisabled={disabled || !onCreateToken || resolvedName.trim().length === 0}\n\t\t\t\t\t\tonClick={handleCreate}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Plus className=\"size-icon\" />\n\t\t\t\t\t\t{strings.create}\n\t\t\t\t\t</Button>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t\t</div>\n\t\t\t</Stack>\n\n\t\t\t<ApiKeyList\n\t\t\t\titems={tokens}\n\t\t\t\tonDelete={onRevokeToken ? handleRevoke : undefined}\n\t\t\t/>\n\t\t</ContentBlock>\n\t);\n}\n\nApiTokenManager.displayName = 'ApiTokenManager';\n"],"mappings":"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"}