themelia-react-ui 1.0.2 → 2.0.1

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 (748) hide show
  1. package/CHANGELOG.md +632 -1
  2. package/README.md +31 -13
  3. package/dist/accordion-B6a3vVgA.js +207 -0
  4. package/dist/accordion-B6a3vVgA.js.map +1 -0
  5. package/dist/action-menu-TzCoSlwL.js +280 -0
  6. package/dist/action-menu-TzCoSlwL.js.map +1 -0
  7. package/dist/{affordance-geometry.generated-CL84ZN9A.js → affordance-geometry.generated-B5iu-Mkr.js} +9 -3
  8. package/dist/affordance-geometry.generated-B5iu-Mkr.js.map +1 -0
  9. package/dist/{ai-artifact-DLVdK0Py.js → ai-artifact-BMJdv-6q.js} +389 -391
  10. package/dist/ai-artifact-BMJdv-6q.js.map +1 -0
  11. package/dist/{app-shell-C_fKpljx.js → app-shell-ZK5RWdo6.js} +4 -4
  12. package/dist/{app-shell-C_fKpljx.js.map → app-shell-ZK5RWdo6.js.map} +1 -1
  13. package/dist/attachment-BtfhGm8i.js +245 -0
  14. package/dist/attachment-BtfhGm8i.js.map +1 -0
  15. package/dist/{auth-CAQcasMV.js → auth-CYxKfo69.js} +239 -237
  16. package/dist/auth-CYxKfo69.js.map +1 -0
  17. package/dist/{avatar-Bu2HhitA.js → avatar-BBnEJIx8.js} +71 -68
  18. package/dist/avatar-BBnEJIx8.js.map +1 -0
  19. package/dist/badge-MrKVNzW9.js +93 -0
  20. package/dist/badge-MrKVNzW9.js.map +1 -0
  21. package/dist/base/accordion.js +1 -1
  22. package/dist/base/action-menu.js +1 -1
  23. package/dist/base/attachment.js +1 -1
  24. package/dist/base/avatar.js +1 -1
  25. package/dist/base/badge.js +1 -1
  26. package/dist/base/batch-action-bar.js +3 -0
  27. package/dist/base/buttons.js +2 -3
  28. package/dist/base/cards.js +2 -2
  29. package/dist/base/carousel.js +19 -19
  30. package/dist/base/carousel.js.map +1 -1
  31. package/dist/base/cascader.js +234 -224
  32. package/dist/base/cascader.js.map +1 -1
  33. package/dist/base/chart.js +1 -1
  34. package/dist/base/choice-inputs.js +3 -3
  35. package/dist/base/code-block.js +1 -1
  36. package/dist/base/combobox.js +1 -1
  37. package/dist/base/command.js +1 -1
  38. package/dist/base/copyable.js +1 -1
  39. package/dist/base/date-pickers.js +2 -2
  40. package/dist/base/display.js +7 -7
  41. package/dist/base/feedback.js +3 -3
  42. package/dist/base/forms-numeric.js +1 -1
  43. package/dist/base/forms.js +2 -2
  44. package/dist/base/inline-edit.js +81 -76
  45. package/dist/base/inline-edit.js.map +1 -1
  46. package/dist/base/item.js +1 -1
  47. package/dist/base/media-gallery.js +1 -1
  48. package/dist/base/metadata-list.js +3 -0
  49. package/dist/base/navigation.js +7 -7
  50. package/dist/base/popover-menu.js +1 -1
  51. package/dist/base/popover.js +1 -1
  52. package/dist/base/qr-code.js +7 -4
  53. package/dist/base/qr-code.js.map +1 -1
  54. package/dist/base/repeaters.js +175 -174
  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 +148 -138
  59. package/dist/base/signature-pad.js.map +1 -1
  60. package/dist/base/skeleton.js +1 -1
  61. package/dist/base/spinner.js +1 -1
  62. package/dist/base/structure.js +1 -1
  63. package/dist/base/table.js +1 -1
  64. package/dist/base/text-inputs.js +2 -2
  65. package/dist/base/toaster.js +4 -4
  66. package/dist/base/toaster.js.map +1 -1
  67. package/dist/base/tree.js +1 -1
  68. package/dist/base/upload-queue.js +1 -1
  69. package/dist/base/upload.js +3 -3
  70. package/dist/base/value-inputs.js +2 -2
  71. package/dist/batch-action-bar-BZGDG-Si.js +104 -0
  72. package/dist/batch-action-bar-BZGDG-Si.js.map +1 -0
  73. package/dist/blocks/admin.js +264 -253
  74. package/dist/blocks/admin.js.map +1 -1
  75. package/dist/blocks/ai.js +293 -323
  76. package/dist/blocks/ai.js.map +1 -1
  77. package/dist/blocks/analytics/usage-card.js +1 -1
  78. package/dist/blocks/analytics.js +596 -587
  79. package/dist/blocks/analytics.js.map +1 -1
  80. package/dist/blocks/collaboration.js +1 -1
  81. package/dist/blocks/commerce/receipt.js +1 -1
  82. package/dist/blocks/commerce.js +2246 -1693
  83. package/dist/blocks/commerce.js.map +1 -1
  84. package/dist/blocks/data-display.js +3 -2
  85. package/dist/blocks/onboarding.js +50 -49
  86. package/dist/blocks/onboarding.js.map +1 -1
  87. package/dist/blocks/planning.js +82 -91
  88. package/dist/blocks/planning.js.map +1 -1
  89. package/dist/blocks/timelines.js +1 -1
  90. package/dist/breadcrumbs-D5t7I023.js +129 -0
  91. package/dist/breadcrumbs-D5t7I023.js.map +1 -0
  92. package/dist/{button-BZyfTvwm.js → button-QYwiyhD2.js} +15 -14
  93. package/dist/button-QYwiyhD2.js.map +1 -0
  94. package/dist/buttons-SbIcm1HJ.js +661 -0
  95. package/dist/buttons-SbIcm1HJ.js.map +1 -0
  96. package/dist/{cards-qGSErLw_.js → cards-CiiHpKYd.js} +8 -8
  97. package/dist/cards-CiiHpKYd.js.map +1 -0
  98. package/dist/{chart-Bsc5BICK.js → chart-QfrARkXl.js} +17 -15
  99. package/dist/chart-QfrARkXl.js.map +1 -0
  100. package/dist/checkbox-DhB6K0bK.js +36 -0
  101. package/dist/checkbox-DhB6K0bK.js.map +1 -0
  102. package/dist/choice-inputs-t6w3ATNz.js +766 -0
  103. package/dist/choice-inputs-t6w3ATNz.js.map +1 -0
  104. package/dist/code-block-Dgbu-CU3.js +185 -0
  105. package/dist/code-block-Dgbu-CU3.js.map +1 -0
  106. package/dist/{collapsible-ClvC7Bj3.js → collapsible-D8AEGU1-.js} +4 -4
  107. package/dist/{collapsible-ClvC7Bj3.js.map → collapsible-D8AEGU1-.js.map} +1 -1
  108. package/dist/{collection-content-D6S8cv_n.js → collection-content-uK16Grv0.js} +3 -3
  109. package/dist/{collection-content-D6S8cv_n.js.map → collection-content-uK16Grv0.js.map} +1 -1
  110. package/dist/{combobox-BFnbJJp3.js → combobox-2Ic8N9bL.js} +103 -98
  111. package/dist/combobox-2Ic8N9bL.js.map +1 -0
  112. package/dist/combobox-DLl0bfiq.js +867 -0
  113. package/dist/combobox-DLl0bfiq.js.map +1 -0
  114. package/dist/{command-BnmSchli.js → command-kNR20o7x.js} +34 -30
  115. package/dist/command-kNR20o7x.js.map +1 -0
  116. package/dist/{comments-u5L0OGip.js → comments-BpDuCUUu.js} +304 -301
  117. package/dist/comments-BpDuCUUu.js.map +1 -0
  118. package/dist/components/base/accordion/accordion-variants.d.ts +3 -3
  119. package/dist/components/base/action-menu/action-menu.d.ts +27 -5
  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/avatar/stacked-avatars.d.ts +5 -4
  123. package/dist/components/base/badge/badge.d.ts +1 -1
  124. package/dist/components/base/badge/badge.recipes.d.ts +6 -6
  125. package/dist/components/base/batch-action-bar/batch-action-bar.d.ts +50 -0
  126. package/dist/components/base/batch-action-bar/batch-action-bar.strings.d.ts +20 -0
  127. package/dist/components/base/batch-action-bar/index.d.ts +8 -0
  128. package/dist/components/base/buttons/base-button.d.ts +7 -0
  129. package/dist/components/base/buttons/button-group.recipes.d.ts +2 -2
  130. package/dist/components/base/buttons/button.recipes.d.ts +2 -2
  131. package/dist/components/base/buttons/button.variants.d.ts +1 -0
  132. package/dist/components/base/buttons/loader-button.d.ts +3 -1
  133. package/dist/components/base/buttons/text-button.d.ts +2 -2
  134. package/dist/components/base/carousel/carousel.d.ts +3 -1
  135. package/dist/components/base/chart/chart.d.ts +7 -7
  136. package/dist/components/base/choice-inputs/checkbox.d.ts +6 -7
  137. package/dist/components/base/choice-inputs/choice-types.d.ts +24 -3
  138. package/dist/components/base/choice-inputs/pill-radio-group.d.ts +9 -0
  139. package/dist/components/base/choice-inputs/select-popup.d.ts +9 -1
  140. package/dist/components/base/choice-inputs/switch-card.d.ts +1 -1
  141. package/dist/components/base/date-pickers/date-picker-field.d.ts +23 -0
  142. package/dist/components/base/date-pickers/datepicker.types.d.ts +13 -3
  143. package/dist/components/base/display/alert-dialog.d.ts +10 -3
  144. package/dist/components/base/display/content-block.d.ts +4 -2
  145. package/dist/components/base/display/date-block.d.ts +1 -1
  146. package/dist/components/base/display/dialog.d.ts +8 -5
  147. package/dist/components/base/display/icon-badge/icon-badge.d.ts +1 -1
  148. package/dist/components/base/display/surface-title.d.ts +6 -1
  149. package/dist/components/base/feedback/alert.d.ts +1 -1
  150. package/dist/components/base/feedback/state-display.d.ts +5 -4
  151. package/dist/components/base/forms/form-sizing.d.ts +43 -8
  152. package/dist/components/base/forms/workflow.d.ts +2 -0
  153. package/dist/components/base/forms-numeric/coordinates-input.d.ts +3 -0
  154. package/dist/components/base/forms-numeric/rounding-mode-select.d.ts +4 -1
  155. package/dist/components/base/metadata-list/index.d.ts +12 -0
  156. package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-list.d.ts +28 -25
  157. package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-value.d.ts +2 -2
  158. package/dist/components/base/navigation/dropdown-menu.d.ts +2 -2
  159. package/dist/components/base/navigation/index.d.ts +1 -1
  160. package/dist/components/base/navigation/language-switcher.d.ts +4 -1
  161. package/dist/components/base/navigation/overflow-tab-bar.d.ts +7 -0
  162. package/dist/components/base/navigation/page-header/index.d.ts +1 -0
  163. package/dist/components/base/navigation/page-header/page-header-commands.d.ts +73 -0
  164. package/dist/components/base/navigation/page-header/page-header.d.ts +30 -4
  165. package/dist/components/base/qr-code/qr-code.d.ts +2 -0
  166. package/dist/components/base/sheet/index.d.ts +29 -1
  167. package/dist/components/base/sheet/sheet.d.ts +10 -5
  168. package/dist/components/base/signature-pad/signature-pad.types.d.ts +5 -1
  169. package/dist/components/base/signature-pad/signature-pad.utils.d.ts +11 -3
  170. package/dist/components/base/spinner/spinner.d.ts +3 -2
  171. package/dist/components/base/structure/structure.types.d.ts +1 -1
  172. package/dist/components/base/text-inputs/field-clear-button.d.ts +6 -0
  173. package/dist/components/base/text-inputs/input-group.d.ts +2 -2
  174. package/dist/components/base/upload/upload.recipes.d.ts +33 -0
  175. package/dist/components/base/value-inputs/date-time-input.d.ts +4 -2
  176. package/dist/components/base/value-inputs/index.d.ts +5 -5
  177. package/dist/components/base/value-inputs/tags-input.d.ts +38 -12
  178. package/dist/components/blocks/admin/api-key-list/api-key-list.types.d.ts +1 -1
  179. package/dist/components/blocks/analytics/format-metric-value.d.ts +11 -1
  180. package/dist/components/blocks/analytics/index.d.ts +1 -1
  181. package/dist/components/blocks/analytics/use-metric-format-options.d.ts +3 -0
  182. package/dist/components/blocks/commerce/address-card/address-card.d.ts +1 -1
  183. package/dist/components/blocks/commerce/address-card/types.d.ts +4 -1
  184. package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.d.ts +4 -0
  185. package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.types.d.ts +2 -2
  186. package/dist/components/blocks/commerce/cart-summary/cart-summary.d.ts +3 -1
  187. package/dist/components/blocks/commerce/cart-summary/index.d.ts +2 -2
  188. package/dist/components/blocks/commerce/cart-summary/types.d.ts +6 -1
  189. package/dist/components/blocks/commerce/discount-stack/discount-stack.d.ts +3 -1
  190. package/dist/components/blocks/commerce/discount-stack/index.d.ts +2 -2
  191. package/dist/components/blocks/commerce/discount-stack/types.d.ts +16 -4
  192. package/dist/components/blocks/commerce/fulfillment-group/fulfillment-group.d.ts +5 -0
  193. package/dist/components/blocks/commerce/fulfillment-group/index.d.ts +2 -0
  194. package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +43 -0
  195. package/dist/components/blocks/commerce/index.d.ts +13 -5
  196. package/dist/components/blocks/commerce/inventory-section/types.d.ts +4 -1
  197. package/dist/components/blocks/commerce/invoice-header/invoice-header.d.ts +1 -1
  198. package/dist/components/blocks/commerce/invoice-header/types.d.ts +4 -2
  199. package/dist/components/blocks/commerce/invoice-mini/invoice-mini.d.ts +1 -1
  200. package/dist/components/blocks/commerce/invoice-mini/types.d.ts +2 -1
  201. package/dist/components/blocks/commerce/loyalty-points/types.d.ts +1 -1
  202. package/dist/components/blocks/commerce/order-customer/index.d.ts +2 -0
  203. package/dist/components/blocks/commerce/order-customer/order-customer.d.ts +5 -0
  204. package/dist/components/blocks/commerce/order-customer/types.d.ts +48 -0
  205. package/dist/components/blocks/commerce/order-header/index.d.ts +2 -0
  206. package/dist/components/blocks/commerce/order-header/order-header.d.ts +5 -0
  207. package/dist/components/blocks/commerce/order-header/types.d.ts +37 -0
  208. package/dist/components/blocks/commerce/order-line-item/index.d.ts +2 -0
  209. package/dist/components/blocks/commerce/order-line-item/order-line-item.d.ts +5 -0
  210. package/dist/components/blocks/commerce/order-line-item/types.d.ts +46 -0
  211. package/dist/components/blocks/commerce/order-status/types.d.ts +4 -0
  212. package/dist/components/blocks/commerce/order-summary/index.d.ts +2 -0
  213. package/dist/components/blocks/commerce/order-summary/order-summary.d.ts +5 -0
  214. package/dist/components/blocks/commerce/order-summary/types.d.ts +42 -0
  215. package/dist/components/blocks/commerce/order-transactions/index.d.ts +2 -0
  216. package/dist/components/blocks/commerce/order-transactions/order-transactions.d.ts +5 -0
  217. package/dist/components/blocks/commerce/order-transactions/types.d.ts +46 -0
  218. package/dist/components/blocks/commerce/payment-method/index.d.ts +2 -2
  219. package/dist/components/blocks/commerce/payment-method/payment-method.d.ts +9 -1
  220. package/dist/components/blocks/commerce/payment-method/types.d.ts +14 -1
  221. package/dist/components/blocks/commerce/refund-status/index.d.ts +2 -2
  222. package/dist/components/blocks/commerce/refund-status/refund-status.d.ts +3 -1
  223. package/dist/components/blocks/commerce/refund-status/types.d.ts +6 -3
  224. package/dist/components/blocks/commerce/seo-listing/seo-listing-card.d.ts +1 -1
  225. package/dist/components/blocks/commerce/seo-listing/types.d.ts +3 -1
  226. package/dist/components/blocks/commerce/shared/address-lines.d.ts +21 -0
  227. package/dist/components/blocks/commerce/shared/line-thumbnail.d.ts +9 -0
  228. package/dist/components/blocks/commerce/shared/order-status.d.ts +51 -0
  229. package/dist/components/blocks/commerce/shipment-tracking/shipment-tracking.d.ts +1 -1
  230. package/dist/components/blocks/commerce/shipment-tracking/types.d.ts +27 -6
  231. package/dist/components/blocks/commerce/summary-panel/amount-row.d.ts +2 -0
  232. package/dist/components/blocks/commerce/summary-panel/index.d.ts +3 -0
  233. package/dist/components/blocks/commerce/summary-panel/summary-panel.d.ts +2 -0
  234. package/dist/components/blocks/commerce/summary-panel/types.d.ts +26 -0
  235. package/dist/components/blocks/commerce/tax-breakdown/tax-breakdown.d.ts +1 -1
  236. package/dist/components/blocks/commerce/tax-breakdown/types.d.ts +2 -1
  237. package/dist/components/blocks/commerce/vendor-profile/types.d.ts +4 -1
  238. package/dist/components/blocks/data-display/dense-info-card/dense-info.strings.d.ts +4 -1
  239. package/dist/components/blocks/data-display/inline-stat/inline-stat.d.ts +4 -1
  240. package/dist/components/blocks/data-display/metadata/index.d.ts +30 -4
  241. package/dist/components/features/activities/partials/activity-row.d.ts +6 -2
  242. package/dist/components/features/activities/partials/tone-tokens.d.ts +0 -6
  243. package/dist/components/features/global-search/partials/global-search-group-heading.d.ts +15 -0
  244. package/dist/components/features/global-search/partials/global-search-idle-state.d.ts +1 -1
  245. package/dist/components/features/global-search/partials/tone-palettes.d.ts +0 -5
  246. package/dist/components/features/kanban/kanban.d.ts +1 -1
  247. package/dist/components/features/kanban/kanban.strings.d.ts +1 -1
  248. package/dist/components/features/kanban/kanban.types.d.ts +2 -2
  249. package/dist/components/features/media-library/hooks/use-media-library.d.ts +1 -1
  250. package/dist/components/features/media-library/index.d.ts +1 -1
  251. package/dist/components/features/media-library/media-library.d.ts +1 -1
  252. package/dist/components/features/media-library/media-library.strings.d.ts +4 -0
  253. package/dist/components/features/media-library/media-library.types.d.ts +74 -1
  254. package/dist/components/features/media-library/partials/media-library-partials.d.ts +3 -3
  255. package/dist/components/features/mentions/partials/mention-kind-toggles.d.ts +16 -0
  256. package/dist/components/features/overlays/alert-dialog.d.ts +1 -1
  257. package/dist/components/features/overlays/dialog.d.ts +1 -1
  258. package/dist/components/features/overlays/drawer.d.ts +1 -1
  259. package/dist/components/features/overlays/hooks/use-overlay-actions.d.ts +2 -2
  260. package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts +11 -4
  261. package/dist/components/features/overlays/index.d.ts +1 -1
  262. package/dist/components/features/overlays/overlay-tone-icon.d.ts +37 -0
  263. package/dist/components/features/overlays/overlays.types.d.ts +62 -19
  264. package/dist/components/features/products/components/product-contract-overview.d.ts +5 -0
  265. package/dist/components/features/products/components/product-details-card.d.ts +5 -0
  266. package/dist/components/features/products/components/product-operations-card.d.ts +5 -0
  267. package/dist/components/features/products/components/product-option-action-menu.d.ts +5 -0
  268. package/dist/components/features/products/components/product-options-summary.d.ts +5 -0
  269. package/dist/components/features/products/components/product-policies-card.d.ts +5 -0
  270. package/dist/components/features/products/components/product-quote-preview-card.d.ts +5 -0
  271. package/dist/components/features/products/components/product-readiness-card.d.ts +5 -0
  272. package/dist/components/features/products/components/product-structure-card.d.ts +5 -0
  273. package/dist/components/features/products/components/product-variant-action-menu.d.ts +23 -1
  274. package/dist/components/features/products/components/product-variants-manager.d.ts +1 -1
  275. package/dist/components/features/products/partials/index.d.ts +1 -1
  276. package/dist/components/features/products/partials/product-metric-tile.d.ts +6 -0
  277. package/dist/components/features/products/partials/product-tone.d.ts +11 -1
  278. package/dist/components/features/products/products.types.d.ts +11 -3
  279. package/dist/components/features/resource/index.d.ts +1 -1
  280. package/dist/components/features/resource/resource.d.ts +1 -1
  281. package/dist/components/features/resource/resource.types.d.ts +34 -6
  282. package/dist/components/features/rich-text-editor/index.d.ts +2 -1
  283. package/dist/components/features/rich-text-editor/partials/image-nodes.d.ts +13 -0
  284. package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +66 -0
  285. package/dist/components/features/rich-text-editor/partials/inline-reference-node.d.ts +19 -0
  286. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +1 -1
  287. package/dist/components/features/rich-text-editor/rich-text-editor.strings.d.ts +14 -0
  288. package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +45 -0
  289. package/dist/components/features/rich-text-editor/use-rich-text-images.d.ts +18 -0
  290. package/dist/components/features/sync/index.d.ts +26 -3
  291. package/dist/components/features/table/data-table.d.ts +1 -1
  292. package/dist/components/features/table/partials/cell-renderers.d.ts +1 -1
  293. package/dist/components/features/table/table.types.d.ts +32 -7
  294. package/dist/components/layout/page/index.d.ts +1 -1
  295. package/dist/components/layout/page/page.types.d.ts +51 -4
  296. package/dist/components/layout/page/partials/page-actions.d.ts +1 -0
  297. package/dist/components/layout/page/partials/page-header.d.ts +1 -1
  298. package/dist/components/layout/settings/settings.d.ts +16 -2
  299. package/dist/components/layout/workspace/workspace.types.d.ts +21 -4
  300. package/dist/components/primitives/date.d.ts +16 -3
  301. package/dist/components/primitives/dimensions.d.ts +6 -0
  302. package/dist/components/primitives/duration.d.ts +6 -0
  303. package/dist/components/primitives/file-size.d.ts +6 -0
  304. package/dist/components/primitives/index.d.ts +1 -1
  305. package/dist/components/primitives/initials.d.ts +11 -2
  306. package/dist/components/primitives/link.d.ts +7 -0
  307. package/dist/components/primitives/money.d.ts +29 -7
  308. package/dist/components/primitives/number.d.ts +17 -0
  309. package/dist/components/primitives/value-typography.d.ts +54 -0
  310. package/dist/components/primitives/value.d.ts +31 -6
  311. package/dist/components/typography/heading.d.ts +9 -1
  312. package/dist/components/typography/label.d.ts +3 -0
  313. package/dist/components/typography/rich-text/index.d.ts +1 -1
  314. package/dist/components/typography/rich-text/rich-text-tree.d.ts +19 -0
  315. package/dist/components/typography/rich-text/rich-text.d.ts +16 -0
  316. package/dist/components/typography/running-text.d.ts +12 -0
  317. package/dist/components/typography/text-link.d.ts +24 -1
  318. package/dist/components/typography/text.d.ts +12 -0
  319. package/dist/components/typography/text.styles.d.ts +35 -13
  320. package/dist/components/ui/button.d.ts +1 -1
  321. package/dist/components/ui/checkbox.d.ts +6 -0
  322. package/dist/components/ui/overlay.recipes.d.ts +6 -2
  323. package/dist/components/ui/select.d.ts +3 -1
  324. package/dist/components/ui/switch.d.ts +5 -0
  325. package/dist/{containers-DqB-bSYE.js → containers-DmWiJa2I.js} +36 -35
  326. package/dist/containers-DmWiJa2I.js.map +1 -0
  327. package/dist/{copyable-BTSByfmq.js → copyable-B3Gwgdqc.js} +6 -6
  328. package/dist/{copyable-BTSByfmq.js.map → copyable-B3Gwgdqc.js.map} +1 -1
  329. package/dist/data-display-DafIvCl5.js +960 -0
  330. package/dist/data-display-DafIvCl5.js.map +1 -0
  331. package/dist/date-BgK3bTdo.js +144 -0
  332. package/dist/date-BgK3bTdo.js.map +1 -0
  333. package/dist/date-picker-CF-DtUpF.js +1529 -0
  334. package/dist/date-picker-CF-DtUpF.js.map +1 -0
  335. package/dist/date-pickers-BmzxJl5l.js +174 -0
  336. package/dist/date-pickers-BmzxJl5l.js.map +1 -0
  337. package/dist/{display-CS6Hbk18.js → display-DsQTVzMz.js} +88 -87
  338. package/dist/display-DsQTVzMz.js.map +1 -0
  339. package/dist/{dropdown-menu-D-boNgGO.js → dropdown-menu-E2qmdC7o.js} +23 -16
  340. package/dist/dropdown-menu-E2qmdC7o.js.map +1 -0
  341. package/dist/features/activities.js +437 -521
  342. package/dist/features/activities.js.map +1 -1
  343. package/dist/features/ai-chat.js +174 -172
  344. package/dist/features/ai-chat.js.map +1 -1
  345. package/dist/features/async-preview.js +8 -8
  346. package/dist/features/async-preview.js.map +1 -1
  347. package/dist/features/combobox.js +1 -1
  348. package/dist/features/comments.js +1 -1
  349. package/dist/features/data-view.js +139 -138
  350. package/dist/features/data-view.js.map +1 -1
  351. package/dist/features/email-composer/engine.js +1 -1
  352. package/dist/features/email-composer.js +353 -352
  353. package/dist/features/email-composer.js.map +1 -1
  354. package/dist/features/event-calendar.js +262 -269
  355. package/dist/features/event-calendar.js.map +1 -1
  356. package/dist/features/filters.js +1 -1
  357. package/dist/features/global-search.js +307 -310
  358. package/dist/features/global-search.js.map +1 -1
  359. package/dist/features/kanban.js +95 -97
  360. package/dist/features/kanban.js.map +1 -1
  361. package/dist/features/map.js +56 -57
  362. package/dist/features/map.js.map +1 -1
  363. package/dist/features/media-library.js +914 -824
  364. package/dist/features/media-library.js.map +1 -1
  365. package/dist/features/mentions.js +1 -1
  366. package/dist/features/overlays.js +1 -1
  367. package/dist/features/products.js +1272 -1311
  368. package/dist/features/products.js.map +1 -1
  369. package/dist/features/questionnaire.js +204 -194
  370. package/dist/features/questionnaire.js.map +1 -1
  371. package/dist/features/resource-assignment.js +103 -95
  372. package/dist/features/resource-assignment.js.map +1 -1
  373. package/dist/features/resource.js +77 -69
  374. package/dist/features/resource.js.map +1 -1
  375. package/dist/features/rich-text-editor.js +30 -11
  376. package/dist/features/rich-text-editor.js.map +1 -1
  377. package/dist/features/schema-form.js +193 -189
  378. package/dist/features/schema-form.js.map +1 -1
  379. package/dist/features/suggestions.js +3 -3
  380. package/dist/features/sync.js +7 -7
  381. package/dist/features/sync.js.map +1 -1
  382. package/dist/features/table.js +1 -1
  383. package/dist/features/theme-tweaker.js +455 -455
  384. package/dist/features/theme-tweaker.js.map +1 -1
  385. package/dist/feedback-qNuMBtRH.js +233 -0
  386. package/dist/feedback-qNuMBtRH.js.map +1 -0
  387. package/dist/field-affordance-recipes-qQeIf4lG.js +48 -0
  388. package/dist/field-affordance-recipes-qQeIf4lG.js.map +1 -0
  389. package/dist/field-state-recipes-BVA2CWHo.js +12 -0
  390. package/dist/field-state-recipes-BVA2CWHo.js.map +1 -0
  391. package/dist/{filters-D6FF8L6s.js → filters-BkHH53uv.js} +414 -412
  392. package/dist/filters-BkHH53uv.js.map +1 -0
  393. package/dist/focus-recipes-B653VaLq.js +12 -0
  394. package/dist/focus-recipes-B653VaLq.js.map +1 -0
  395. package/dist/{form-field-CZwrkP7m.js → form-field-DUt4UxSV.js} +7 -7
  396. package/dist/{form-field-CZwrkP7m.js.map → form-field-DUt4UxSV.js.map} +1 -1
  397. package/dist/form-sizing-By94KzXE.js +130 -0
  398. package/dist/form-sizing-By94KzXE.js.map +1 -0
  399. package/dist/{forms-B5NCbkSC.js → forms-Bzha-Y3B.js} +25 -25
  400. package/dist/forms-Bzha-Y3B.js.map +1 -0
  401. package/dist/forms-numeric-C0bvjRPZ.js +906 -0
  402. package/dist/forms-numeric-C0bvjRPZ.js.map +1 -0
  403. package/dist/{header-kxruN3RM.js → header-BOefOKd1.js} +38 -41
  404. package/dist/header-BOefOKd1.js.map +1 -0
  405. package/dist/{hooks-BrlnCwQd.js → hooks-9k_TtmKh.js} +2 -2
  406. package/dist/{hooks-BrlnCwQd.js.map → hooks-9k_TtmKh.js.map} +1 -1
  407. package/dist/{http-CdEIHyQf.js → http-D_6rOnzU.js} +2 -2
  408. package/dist/{http-CdEIHyQf.js.map → http-D_6rOnzU.js.map} +1 -1
  409. package/dist/icon-badge-CAuKupo9.js +55 -0
  410. package/dist/icon-badge-CAuKupo9.js.map +1 -0
  411. package/dist/index.js +7 -7
  412. package/dist/input-DWhBBBww.js +262 -0
  413. package/dist/input-DWhBBBww.js.map +1 -0
  414. package/dist/{input-vxcaNCYC.js → input-Ddi_LSYv.js} +3 -3
  415. package/dist/{input-vxcaNCYC.js.map → input-Ddi_LSYv.js.map} +1 -1
  416. package/dist/interaction-recipes-CHr0dJUs.js +24 -0
  417. package/dist/interaction-recipes-CHr0dJUs.js.map +1 -0
  418. package/dist/item-DEmDiTlD.js +265 -0
  419. package/dist/item-DEmDiTlD.js.map +1 -0
  420. package/dist/layer-recipes-CCpklYME.js +13 -0
  421. package/dist/layer-recipes-CCpklYME.js.map +1 -0
  422. package/dist/layout/app-shell.js +1 -1
  423. package/dist/layout/auth.js +1 -1
  424. package/dist/layout/containers.js +1 -1
  425. package/dist/layout/header.js +1 -1
  426. package/dist/layout/hooks.js +1 -1
  427. package/dist/layout/navigation.js +1 -1
  428. package/dist/layout/page.js +1 -1
  429. package/dist/layout/settings.js +1 -1
  430. package/dist/layout/sidebar.js +2 -2
  431. package/dist/layout/workspace.js +1 -1
  432. package/dist/layout.js +10 -10
  433. package/dist/lib/affordance-geometry.generated.d.ts +7 -1
  434. package/dist/lib/field-affordance-recipes.d.ts +41 -1
  435. package/dist/lib/field-state-recipes.d.ts +9 -6
  436. package/dist/lib/focus-recipes.d.ts +24 -0
  437. package/dist/lib/format.d.ts +9 -0
  438. package/dist/lib/interaction-recipes.d.ts +35 -0
  439. package/dist/lib/layer-recipes.d.ts +19 -0
  440. package/dist/lib/money-format.d.ts +30 -0
  441. package/dist/lib/motion-recipes.d.ts +1 -0
  442. package/dist/lib/overlay-anatomy-recipes.d.ts +2 -1
  443. package/dist/lib/safe-image-src.d.ts +10 -0
  444. package/dist/lib/sanitize-html.d.ts +15 -3
  445. package/dist/lib/surface-recipes.d.ts +48 -6
  446. package/dist/lib/token-merge.generated.d.ts +17 -14
  447. package/dist/lib/tone-recipes.d.ts +79 -0
  448. package/dist/lib/track-recipes.d.ts +1 -1
  449. package/dist/lib/ui-provider/hooks.d.ts +2 -1
  450. package/dist/lib/ui-provider/index.d.ts +2 -2
  451. package/dist/lib/ui-provider/provider.d.ts +7 -2
  452. package/dist/lib/ui-provider/store.d.ts +6 -2
  453. package/dist/lib/ui-provider/types.d.ts +14 -2
  454. package/dist/lib/utils.js +1 -1
  455. package/dist/media-gallery-DcTtAaeC.js +203 -0
  456. package/dist/media-gallery-DcTtAaeC.js.map +1 -0
  457. package/dist/mentions-D-uyCh01.js +568 -0
  458. package/dist/mentions-D-uyCh01.js.map +1 -0
  459. package/dist/{message-SZUNB1eX.js → message-CdHgIWKf.js} +5 -5
  460. package/dist/{message-SZUNB1eX.js.map → message-CdHgIWKf.js.map} +1 -1
  461. package/dist/metadata-list-X5rYAKSB.js +394 -0
  462. package/dist/metadata-list-X5rYAKSB.js.map +1 -0
  463. package/dist/{motion-recipes-B6jKXEcN.js → motion-recipes-ChBg4HBq.js} +3 -2
  464. package/dist/{motion-recipes-B6jKXEcN.js.map → motion-recipes-ChBg4HBq.js.map} +1 -1
  465. package/dist/navigation-D3KwXmaq.js +145 -0
  466. package/dist/navigation-D3KwXmaq.js.map +1 -0
  467. package/dist/navigation-HJf5zxlH.js +268 -0
  468. package/dist/navigation-HJf5zxlH.js.map +1 -0
  469. package/dist/{navigation-row-recipes-DQEXQcqY.js → navigation-row-recipes-BVowojQw.js} +2 -2
  470. package/dist/{navigation-row-recipes-DQEXQcqY.js.map → navigation-row-recipes-BVowojQw.js.map} +1 -1
  471. package/dist/number-DMhe-Vsk.js +352 -0
  472. package/dist/number-DMhe-Vsk.js.map +1 -0
  473. package/dist/overflow-tab-bar-sQHXLlwQ.js +280 -0
  474. package/dist/overflow-tab-bar-sQHXLlwQ.js.map +1 -0
  475. package/dist/overlay.recipes-8GHqmlb4.js +6 -0
  476. package/dist/overlay.recipes-8GHqmlb4.js.map +1 -0
  477. package/dist/overlays-I0axtYA6.js +999 -0
  478. package/dist/overlays-I0axtYA6.js.map +1 -0
  479. package/dist/{page-hGmT4nWK.js → page-B5dTH9gE.js} +79 -68
  480. package/dist/page-B5dTH9gE.js.map +1 -0
  481. package/dist/page-header-commands-DjzFEq3E.js +126 -0
  482. package/dist/page-header-commands-DjzFEq3E.js.map +1 -0
  483. package/dist/{pagination-NLGqRirf.js → pagination-3bPA_a6K.js} +19 -19
  484. package/dist/{pagination-NLGqRirf.js.map → pagination-3bPA_a6K.js.map} +1 -1
  485. package/dist/{popover-CghIYdQf.js → popover-Di55PyAI.js} +8 -8
  486. package/dist/popover-Di55PyAI.js.map +1 -0
  487. package/dist/{popover-menu-B4PoWhRl.js → popover-menu-B71Tn2Qz.js} +6 -6
  488. package/dist/{popover-menu-B4PoWhRl.js.map → popover-menu-B71Tn2Qz.js.map} +1 -1
  489. package/dist/{popover.recipes-QlD4JenO.js → popover.recipes-Bdyhj2db.js} +2 -2
  490. package/dist/{popover.recipes-QlD4JenO.js.map → popover.recipes-Bdyhj2db.js.map} +1 -1
  491. package/dist/primitives-B-CkiEMU.js +379 -0
  492. package/dist/primitives-B-CkiEMU.js.map +1 -0
  493. package/dist/primitives.js +5 -5
  494. package/dist/{progress-BroqrAyV.js → progress-rnS8-uAW.js} +11 -11
  495. package/dist/progress-rnS8-uAW.js.map +1 -0
  496. package/dist/{receipt-BuJynLgf.js → receipt-D0oswZ0p.js} +6 -6
  497. package/dist/{receipt-BuJynLgf.js.map → receipt-D0oswZ0p.js.map} +1 -1
  498. package/dist/rich-text-DvGulsNJ.js +78 -0
  499. package/dist/rich-text-DvGulsNJ.js.map +1 -0
  500. package/dist/rich-text-editor-sMU_Scqm.js +1204 -0
  501. package/dist/rich-text-editor-sMU_Scqm.js.map +1 -0
  502. package/dist/rich-text-editor.recipes-CadiF_Uu.js +88 -0
  503. package/dist/rich-text-editor.recipes-CadiF_Uu.js.map +1 -0
  504. package/dist/rich-text-editor.strings-CB59ekH2.js +38 -0
  505. package/dist/rich-text-editor.strings-CB59ekH2.js.map +1 -0
  506. package/dist/safe-image-src-C6kQSMBZ.js +17 -0
  507. package/dist/safe-image-src-C6kQSMBZ.js.map +1 -0
  508. package/dist/sanitize-html-DsQmI48u.js +92 -0
  509. package/dist/sanitize-html-DsQmI48u.js.map +1 -0
  510. package/dist/scroll-area-Bt_vXY2b.js +48 -0
  511. package/dist/scroll-area-Bt_vXY2b.js.map +1 -0
  512. package/dist/{separator-BNIgG3au.js → separator-C8DlRGwF.js} +4 -4
  513. package/dist/separator-C8DlRGwF.js.map +1 -0
  514. package/dist/{separator-BhtFyo4x.js → separator-CYHnjsAb.js} +2 -2
  515. package/dist/{separator-BhtFyo4x.js.map → separator-CYHnjsAb.js.map} +1 -1
  516. package/dist/services/actions/action-adapters.d.ts +22 -0
  517. package/dist/services/actions/index.d.ts +1 -1
  518. package/dist/services/actions.js +23 -6
  519. package/dist/services/actions.js.map +1 -1
  520. package/dist/settings-CQW3b-Cu.js +170 -0
  521. package/dist/settings-CQW3b-Cu.js.map +1 -0
  522. package/dist/sheet-4SEvVYzA.js +210 -0
  523. package/dist/sheet-4SEvVYzA.js.map +1 -0
  524. package/dist/{sidebar-CyR4XKwR.js → sidebar-C7WWR29L.js} +181 -180
  525. package/dist/sidebar-C7WWR29L.js.map +1 -0
  526. package/dist/sidebar-d7Dg80ln.js +511 -0
  527. package/dist/sidebar-d7Dg80ln.js.map +1 -0
  528. package/dist/{skeleton-3F0uhYn3.js → skeleton-Cz890JZF.js} +10 -10
  529. package/dist/skeleton-Cz890JZF.js.map +1 -0
  530. package/dist/smart-card-lFKxn5Hu.js +595 -0
  531. package/dist/smart-card-lFKxn5Hu.js.map +1 -0
  532. package/dist/{spinner-Cpf7oRkF.js → spinner-fa3h1Aif.js} +10 -8
  533. package/dist/spinner-fa3h1Aif.js.map +1 -0
  534. package/dist/{structure-CRdqVawd.js → structure-DC2dygdA.js} +3 -3
  535. package/dist/{structure-CRdqVawd.js.map → structure-DC2dygdA.js.map} +1 -1
  536. package/dist/{structure.recipes-Bqhf9oIh.js → structure.recipes-EPz60cU8.js} +37 -19
  537. package/dist/structure.recipes-EPz60cU8.js.map +1 -0
  538. package/dist/style.css +1 -1
  539. package/dist/surface-recipes-BKRVW8Os.js +43 -0
  540. package/dist/surface-recipes-BKRVW8Os.js.map +1 -0
  541. package/dist/table-CIKyLUsy.js +163 -0
  542. package/dist/table-CIKyLUsy.js.map +1 -0
  543. package/dist/{table-CcRDZiLP.js → table-CrcLN9Io.js} +544 -530
  544. package/dist/table-CrcLN9Io.js.map +1 -0
  545. package/dist/tabs-DwBJfjxX.js +190 -0
  546. package/dist/tabs-DwBJfjxX.js.map +1 -0
  547. package/dist/{text-inputs-DsR56TR-.js → text-inputs-aaK9wcDT.js} +151 -155
  548. package/dist/text-inputs-aaK9wcDT.js.map +1 -0
  549. package/dist/{text.styles-Q4sGAIgA.js → text.styles-g4He6UIW.js} +17 -14
  550. package/dist/text.styles-g4He6UIW.js.map +1 -0
  551. package/dist/theme.css +16 -12
  552. package/dist/themes/green.css +24 -0
  553. package/dist/{timelines-D1pkt3se.js → timelines-C_SBwHNP.js} +154 -164
  554. package/dist/timelines-C_SBwHNP.js.map +1 -0
  555. package/dist/tone-recipes-CPoExcTE.js +70 -0
  556. package/dist/tone-recipes-CPoExcTE.js.map +1 -0
  557. package/dist/tooltip-CsfgrfS7.js +111 -0
  558. package/dist/tooltip-CsfgrfS7.js.map +1 -0
  559. package/dist/track-recipes-CDcKmndW.js +10 -0
  560. package/dist/track-recipes-CDcKmndW.js.map +1 -0
  561. package/dist/{tree-BtmYyMZV.js → tree-BiKhg8AY.js} +72 -70
  562. package/dist/tree-BiKhg8AY.js.map +1 -0
  563. package/dist/typography/rich-text.js +1 -1
  564. package/dist/typography-DTRkE9zL.js +117 -0
  565. package/dist/typography-DTRkE9zL.js.map +1 -0
  566. package/dist/typography.js +2 -2
  567. package/dist/{ui-provider-DRPn3qNl.js → ui-provider-1D_NSYzO.js} +30 -23
  568. package/dist/ui-provider-1D_NSYzO.js.map +1 -0
  569. package/dist/ui-provider.js +3 -3
  570. package/dist/{upload-CDbYw1WN.js → upload-BO8-CLN6.js} +294 -293
  571. package/dist/upload-BO8-CLN6.js.map +1 -0
  572. package/dist/{upload-queue-CNd_hH_a.js → upload-queue-EOC8g1gf.js} +133 -138
  573. package/dist/upload-queue-EOC8g1gf.js.map +1 -0
  574. package/dist/upload.recipes-BbxTqrCT.js +61 -0
  575. package/dist/upload.recipes-BbxTqrCT.js.map +1 -0
  576. package/dist/{usage-card-VyJLUwRr.js → usage-card-obRaBskq.js} +42 -43
  577. package/dist/{usage-card-VyJLUwRr.js.map → usage-card-obRaBskq.js.map} +1 -1
  578. package/dist/{utils-BvH9PSmq.js → utils-l5LpDw2z.js} +264 -62
  579. package/dist/utils-l5LpDw2z.js.map +1 -0
  580. package/dist/value-inputs-TAYMX111.js +947 -0
  581. package/dist/value-inputs-TAYMX111.js.map +1 -0
  582. package/dist/value-typography-b8wpz1eX.js +116 -0
  583. package/dist/value-typography-b8wpz1eX.js.map +1 -0
  584. package/dist/workspace-DH0v0KcB.js +407 -0
  585. package/dist/workspace-DH0v0KcB.js.map +1 -0
  586. package/docs/consumer-skill/SKILL.md +62 -50
  587. package/docs/consumer-skill/examples/app-layout.tsx +3 -5
  588. package/docs/consumer-skill/examples/composition.tsx +3 -3
  589. package/docs/consumer-skill/examples/detail.tsx +59 -13
  590. package/docs/consumer-skill/examples/edit.tsx +2 -2
  591. package/docs/consumer-skill/examples/layout-blocks.tsx +20 -0
  592. package/docs/consumer-skill/examples/manifest.json +28 -6
  593. package/docs/consumer-skill/examples/receipt.tsx +2 -2
  594. package/docs/consumer-skill/examples/scoped-directory.tsx +3 -3
  595. package/docs/consumer-skill/examples/website.tsx +1 -1
  596. package/docs/consumer-skill/references/agents-md.md +33 -0
  597. package/docs/consumer-skill/references/analytics.md +1 -1
  598. package/docs/consumer-skill/references/composition.md +139 -24
  599. package/docs/consumer-skill/references/design-contract.md +12 -3
  600. package/docs/consumer-skill/references/discovery.md +4 -0
  601. package/docs/consumer-skill/references/installation.md +33 -1
  602. package/docs/consumer-skill/references/integration.md +32 -1
  603. package/docs/consumer-skill/references/public-api.json +1051 -610
  604. package/docs/consumer-skill/references/review.md +44 -8
  605. package/docs/consumer-skill/references/theming.md +14 -4
  606. package/docs/consumer-skill/references/tokens.json +5 -2
  607. package/docs/consumer-skill/references/workflows.md +30 -9
  608. package/docs/consumer-skill/scripts/composition-policy.mjs +127 -6
  609. package/docs/consumer-skill/scripts/discovery.mjs +11 -3
  610. package/docs/consumer-skill/scripts/pin-button-defaults.mjs +95 -0
  611. package/docs/consumer-skill/scripts/surface-policy.mjs +139 -5
  612. package/package.json +13 -3
  613. package/dist/accordion-BRTcsp8J.js +0 -205
  614. package/dist/accordion-BRTcsp8J.js.map +0 -1
  615. package/dist/action-menu-Drxw_vJk.js +0 -265
  616. package/dist/action-menu-Drxw_vJk.js.map +0 -1
  617. package/dist/affordance-geometry.generated-CL84ZN9A.js.map +0 -1
  618. package/dist/ai-artifact-DLVdK0Py.js.map +0 -1
  619. package/dist/attachment-DbjUWsP0.js +0 -244
  620. package/dist/attachment-DbjUWsP0.js.map +0 -1
  621. package/dist/auth-CAQcasMV.js.map +0 -1
  622. package/dist/avatar-Bu2HhitA.js.map +0 -1
  623. package/dist/badge-CzId1Wlm.js +0 -92
  624. package/dist/badge-CzId1Wlm.js.map +0 -1
  625. package/dist/breadcrumbs-BuYz5SDU.js +0 -128
  626. package/dist/breadcrumbs-BuYz5SDU.js.map +0 -1
  627. package/dist/button-BZDasD04.js +0 -651
  628. package/dist/button-BZDasD04.js.map +0 -1
  629. package/dist/button-BZyfTvwm.js.map +0 -1
  630. package/dist/buttons-D_6KJvEE.js +0 -99
  631. package/dist/buttons-D_6KJvEE.js.map +0 -1
  632. package/dist/cards-qGSErLw_.js.map +0 -1
  633. package/dist/chart-Bsc5BICK.js.map +0 -1
  634. package/dist/checkbox-BQNDjUCh.js +0 -34
  635. package/dist/checkbox-BQNDjUCh.js.map +0 -1
  636. package/dist/choice-inputs-Mk3iWbhr.js +0 -725
  637. package/dist/choice-inputs-Mk3iWbhr.js.map +0 -1
  638. package/dist/code-block-DzHKRybS.js +0 -183
  639. package/dist/code-block-DzHKRybS.js.map +0 -1
  640. package/dist/combobox-BFnbJJp3.js.map +0 -1
  641. package/dist/combobox-hozNwUcc.js +0 -847
  642. package/dist/combobox-hozNwUcc.js.map +0 -1
  643. package/dist/command-BnmSchli.js.map +0 -1
  644. package/dist/comments-u5L0OGip.js.map +0 -1
  645. package/dist/containers-DqB-bSYE.js.map +0 -1
  646. package/dist/data-display-Bihs9Ven.js +0 -1342
  647. package/dist/data-display-Bihs9Ven.js.map +0 -1
  648. package/dist/date-DOKhJPu7.js +0 -140
  649. package/dist/date-DOKhJPu7.js.map +0 -1
  650. package/dist/date-picker-DzP5HQq7.js +0 -1541
  651. package/dist/date-picker-DzP5HQq7.js.map +0 -1
  652. package/dist/date-pickers-BpgGz7S-.js +0 -196
  653. package/dist/date-pickers-BpgGz7S-.js.map +0 -1
  654. package/dist/display-CS6Hbk18.js.map +0 -1
  655. package/dist/dropdown-menu-D-boNgGO.js.map +0 -1
  656. package/dist/feedback-CJkUAapr.js +0 -233
  657. package/dist/feedback-CJkUAapr.js.map +0 -1
  658. package/dist/field-affordance-recipes-uKY4MsZ_.js +0 -25
  659. package/dist/field-affordance-recipes-uKY4MsZ_.js.map +0 -1
  660. package/dist/field-state-recipes-DQQpiLWC.js +0 -11
  661. package/dist/field-state-recipes-DQQpiLWC.js.map +0 -1
  662. package/dist/filters-D6FF8L6s.js.map +0 -1
  663. package/dist/form-sizing-QP8aIRaW.js +0 -103
  664. package/dist/form-sizing-QP8aIRaW.js.map +0 -1
  665. package/dist/format-iamDSqs2.js +0 -110
  666. package/dist/format-iamDSqs2.js.map +0 -1
  667. package/dist/forms-B5NCbkSC.js.map +0 -1
  668. package/dist/forms-numeric-Crrm80Lm.js +0 -867
  669. package/dist/forms-numeric-Crrm80Lm.js.map +0 -1
  670. package/dist/header-kxruN3RM.js.map +0 -1
  671. package/dist/icon-badge-Btc6pQrp.js +0 -53
  672. package/dist/icon-badge-Btc6pQrp.js.map +0 -1
  673. package/dist/input-SX9V0AL3.js +0 -255
  674. package/dist/input-SX9V0AL3.js.map +0 -1
  675. package/dist/item-DE4YnuJx.js +0 -258
  676. package/dist/item-DE4YnuJx.js.map +0 -1
  677. package/dist/media-gallery-DLp3HAz0.js +0 -201
  678. package/dist/media-gallery-DLp3HAz0.js.map +0 -1
  679. package/dist/mentions-Cl0Kt_Pd.js +0 -565
  680. package/dist/mentions-Cl0Kt_Pd.js.map +0 -1
  681. package/dist/navigation-DnQSNMT0.js +0 -276
  682. package/dist/navigation-DnQSNMT0.js.map +0 -1
  683. package/dist/navigation-DyytsLRB.js +0 -265
  684. package/dist/navigation-DyytsLRB.js.map +0 -1
  685. package/dist/number-DasMFWEG.js +0 -269
  686. package/dist/number-DasMFWEG.js.map +0 -1
  687. package/dist/overlay.recipes-BxW5FIfK.js +0 -6
  688. package/dist/overlay.recipes-BxW5FIfK.js.map +0 -1
  689. package/dist/overlays-DUbs1KEi.js +0 -1011
  690. package/dist/overlays-DUbs1KEi.js.map +0 -1
  691. package/dist/page-hGmT4nWK.js.map +0 -1
  692. package/dist/page-header-D8nERkn5.js +0 -112
  693. package/dist/page-header-D8nERkn5.js.map +0 -1
  694. package/dist/popover-CghIYdQf.js.map +0 -1
  695. package/dist/primitives-C7ff0QaI.js +0 -337
  696. package/dist/primitives-C7ff0QaI.js.map +0 -1
  697. package/dist/progress-BroqrAyV.js.map +0 -1
  698. package/dist/rich-text-DlxDOtf4.js +0 -32
  699. package/dist/rich-text-DlxDOtf4.js.map +0 -1
  700. package/dist/rich-text-editor-BKyG7rWz.js +0 -574
  701. package/dist/rich-text-editor-BKyG7rWz.js.map +0 -1
  702. package/dist/rich-text-editor.recipes-B72Nfuze.js +0 -81
  703. package/dist/rich-text-editor.recipes-B72Nfuze.js.map +0 -1
  704. package/dist/rich-text-editor.strings-BpnIQgMl.js +0 -25
  705. package/dist/rich-text-editor.strings-BpnIQgMl.js.map +0 -1
  706. package/dist/sanitize-html-BG9FGe-j.js +0 -64
  707. package/dist/sanitize-html-BG9FGe-j.js.map +0 -1
  708. package/dist/scroll-area-D-pIhEKl.js +0 -47
  709. package/dist/scroll-area-D-pIhEKl.js.map +0 -1
  710. package/dist/separator-BNIgG3au.js.map +0 -1
  711. package/dist/settings-DOTOzeZ2.js +0 -161
  712. package/dist/settings-DOTOzeZ2.js.map +0 -1
  713. package/dist/sheet-BFhrNehm.js +0 -205
  714. package/dist/sheet-BFhrNehm.js.map +0 -1
  715. package/dist/sidebar-CyR4XKwR.js.map +0 -1
  716. package/dist/sidebar-SvGJ0Zwi.js +0 -506
  717. package/dist/sidebar-SvGJ0Zwi.js.map +0 -1
  718. package/dist/skeleton-3F0uhYn3.js.map +0 -1
  719. package/dist/smart-card-DjGVV2xr.js +0 -584
  720. package/dist/smart-card-DjGVV2xr.js.map +0 -1
  721. package/dist/spinner-Cpf7oRkF.js.map +0 -1
  722. package/dist/structure.recipes-Bqhf9oIh.js.map +0 -1
  723. package/dist/surface-recipes-Dd__PD-w.js +0 -28
  724. package/dist/surface-recipes-Dd__PD-w.js.map +0 -1
  725. package/dist/table-CLtJTxoR.js +0 -147
  726. package/dist/table-CLtJTxoR.js.map +0 -1
  727. package/dist/table-CcRDZiLP.js.map +0 -1
  728. package/dist/tabs-BNgu7g0u.js +0 -188
  729. package/dist/tabs-BNgu7g0u.js.map +0 -1
  730. package/dist/text-inputs-DsR56TR-.js.map +0 -1
  731. package/dist/text.styles-Q4sGAIgA.js.map +0 -1
  732. package/dist/timelines-D1pkt3se.js.map +0 -1
  733. package/dist/track-recipes-LLPNVwFg.js +0 -10
  734. package/dist/track-recipes-LLPNVwFg.js.map +0 -1
  735. package/dist/tree-BtmYyMZV.js.map +0 -1
  736. package/dist/typography-BxQgiZyw.js +0 -96
  737. package/dist/typography-BxQgiZyw.js.map +0 -1
  738. package/dist/ui-provider-DRPn3qNl.js.map +0 -1
  739. package/dist/upload-CDbYw1WN.js.map +0 -1
  740. package/dist/upload-queue-CNd_hH_a.js.map +0 -1
  741. package/dist/use-file-drop-target-BX7GnhoQ.js +0 -39
  742. package/dist/use-file-drop-target-BX7GnhoQ.js.map +0 -1
  743. package/dist/utils-BvH9PSmq.js.map +0 -1
  744. package/dist/value-inputs-D0KCrfVC.js +0 -840
  745. package/dist/value-inputs-D0KCrfVC.js.map +0 -1
  746. package/dist/workspace-CcR8r-Nt.js +0 -395
  747. package/dist/workspace-CcR8r-Nt.js.map +0 -1
  748. /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":["Text","Button","Grid","Stack","AlertDescription","AlertAction","Alert","AlertTitle","ActionMenu","MonoValue","IconBadge","Badge","Input","Copyable","Checkbox","ContentBlock","CollapsibleContent","CollapsibleTrigger","Collapsible","FormField","ItemMedia","ItemActions","ItemContent","Item","defaultRolePermissionStrings","count","RolePermission","stringsProp","strings","useStrings","cn","className","roleName","description","memberCount","sections","DisplayLabel","section","perm","Check","Minus","onEdit","Pencil","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","Lock","rowMenuAria","SensitiveActionCard","Icon","ShieldAlert","action","confirmation","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, Pencil } 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\treturn (\n\t\t<div\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 direction=\"horizontal\" gap=\"md\" align=\"start\" justify=\"between\" className=\"role-permission--header\">\n\t\t\t\t<Stack gap=\"normal\" className=\"flex-1\">\n\t\t\t\t\t<Text weight=\"semibold\">{roleName}</Text>\n\t\t\t\t\t{!!description && <Text size=\"xs\" type=\"secondary\">{description}</Text>}\n\t\t\t\t</Stack>\n\t\t\t\t{memberCount !== undefined && <Badge tone=\"info\">{strings.formatMemberCount(memberCount)}</Badge>}\n\t\t\t</Stack>\n\n\t\t\t<Stack gap=\"xl\" className=\"mt-space-2xl\">\n\t\t\t\t{sections.map((section) => (\n\t\t\t\t\t<div key={section.name}>\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=\"mt-space-md 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</div>\n\t\t\t\t))}\n\t\t\t</Stack>\n\n\t\t\t{!!onEdit && (\n\t\t\t\t<Button tone=\"secondary\" buttonStyle=\"ghost\" icon={Pencil} className=\"mt-space-xl\" onClick={onEdit}>\n\t\t\t\t\t{strings.editRole}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t</div>\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, Lock, 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, ItemMedia } from '../../../base/item';\nimport { ActionMenu, type ActionMenuAction } from '../../../base/action-menu';\nimport { Stack } from '../../../base/structure';\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<Stack gap=\"lg\">\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</Stack>\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\" data-slot=\"api-key-row\" className=\"flex-nowrap\">\n\t\t\t<ItemMedia variant=\"icon\">\n\t\t\t\t<IconBadge\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tshape=\"square\"\n\t\t\t\t\ttone=\"neutral\"\n\t\t\t\t\tbordered\n\t\t\t\t\tclassName=\"text-success\"\n\t\t\t\t>\n\t\t\t\t\t{item.icon ?? <Lock className=\"size-icon-md\" />}\n\t\t\t\t</IconBadge>\n\t\t\t</ItemMedia>\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={{ buttonStyle: 'ghost', tone: 'secondary' }}\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\tShieldAlert,\n\tTrash2,\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 = ShieldAlert,\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<Stack direction=\"horizontal\" align=\"start\" gap=\"lg\" className=\"min-w-0\">\n\t\t\t\t<IconBadge icon={Icon} tone=\"destructive\" shape=\"square\" size=\"md\" />\n\t\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\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</Stack>\n\t\t\t\t{!!action && <div className=\"shrink-0\">{action}</div>}\n\t\t\t</Stack>\n\t\t\t{!!confirmation && (\n\t\t\t\t<Alert tone=\"destructive\" role=\"note\" className=\"sensitive-action-card--confirmation\">\n\t\t\t\t\t<AlertDescription>{confirmation}</AlertDescription>\n\t\t\t\t</Alert>\n\t\t\t)}\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<Trash2 className=\"size-icon\" />\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<div className=\"api-token-manager--form rounded-radius border border-border/70 bg-muted/20 p-surface\">\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","DisplayLabel","Text","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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"}