themelia-react-ui 1.0.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (640) hide show
  1. package/CHANGELOG.md +417 -0
  2. package/README.md +67 -16
  3. package/dist/{accordion-B-5Focs8.js → accordion-CQXVcd7Q.js} +15 -15
  4. package/dist/accordion-CQXVcd7Q.js.map +1 -0
  5. package/dist/action-menu-BTpyPWJ2.js +264 -0
  6. package/dist/action-menu-BTpyPWJ2.js.map +1 -0
  7. package/dist/affordance-geometry.generated-CCIXb2A1.js +68 -0
  8. package/dist/affordance-geometry.generated-CCIXb2A1.js.map +1 -0
  9. package/dist/{ai-artifact-B5tPpXnS.js → ai-artifact-2PQ2fItc.js} +206 -215
  10. package/dist/ai-artifact-2PQ2fItc.js.map +1 -0
  11. package/dist/{app-shell-at8Kt4l_.js → app-shell-BE_j8-AT.js} +11 -10
  12. package/dist/app-shell-BE_j8-AT.js.map +1 -0
  13. package/dist/{attachment-BO2R47wn.js → attachment-q69dlt5Y.js} +14 -14
  14. package/dist/attachment-q69dlt5Y.js.map +1 -0
  15. package/dist/auth-M3vGMgDR.js +723 -0
  16. package/dist/auth-M3vGMgDR.js.map +1 -0
  17. package/dist/{avatar-Bpzty83c.js → avatar-djdaaQ_s.js} +15 -13
  18. package/dist/avatar-djdaaQ_s.js.map +1 -0
  19. package/dist/{badge-BZXZT9wd.js → badge-0tATj-tW.js} +9 -9
  20. package/dist/badge-0tATj-tW.js.map +1 -0
  21. package/dist/base/accordion.js +1 -1
  22. package/dist/base/action-menu.js +1 -1
  23. package/dist/base/attachment.js +1 -1
  24. package/dist/base/avatar.js +1 -1
  25. package/dist/base/badge.js +1 -1
  26. package/dist/base/buttons.js +3 -2
  27. package/dist/base/cards.js +3 -3
  28. package/dist/base/carousel.js +33 -35
  29. package/dist/base/carousel.js.map +1 -1
  30. package/dist/base/cascader.js +246 -222
  31. package/dist/base/cascader.js.map +1 -1
  32. package/dist/base/chart.js +1 -1
  33. package/dist/base/choice-inputs.js +2 -2
  34. package/dist/base/code-block.js +1 -1
  35. package/dist/base/combobox.js +1 -1
  36. package/dist/base/command.js +1 -1
  37. package/dist/base/copyable.js +1 -1
  38. package/dist/base/date-pickers.js +3 -3
  39. package/dist/base/display.js +7 -7
  40. package/dist/base/feedback.js +4 -4
  41. package/dist/base/forms-numeric.js +1 -1
  42. package/dist/base/forms.js +2 -2
  43. package/dist/base/inline-edit.js +94 -92
  44. package/dist/base/inline-edit.js.map +1 -1
  45. package/dist/base/item.js +1 -1
  46. package/dist/base/media-gallery.js +1 -1
  47. package/dist/base/navigation.js +6 -6
  48. package/dist/base/popover-menu.js +1 -1
  49. package/dist/base/popover.js +1 -1
  50. package/dist/base/qr-code.js +7 -4
  51. package/dist/base/qr-code.js.map +1 -1
  52. package/dist/base/repeaters.js +53 -53
  53. package/dist/base/repeaters.js.map +1 -1
  54. package/dist/base/sheet.js +1 -1
  55. package/dist/base/sidebar.js +1 -1
  56. package/dist/base/signature-pad.js +84 -82
  57. package/dist/base/signature-pad.js.map +1 -1
  58. package/dist/base/skeleton.js +1 -1
  59. package/dist/base/spinner.js +1 -1
  60. package/dist/base/structure.js +1 -1
  61. package/dist/base/table.js +1 -1
  62. package/dist/base/text-inputs.js +2 -2
  63. package/dist/base/toaster.js +7 -7
  64. package/dist/base/toaster.js.map +1 -1
  65. package/dist/base/tree.js +1 -1
  66. package/dist/base/upload-queue.js +1 -1
  67. package/dist/base/upload.js +3 -3
  68. package/dist/base/value-inputs.js +1 -1
  69. package/dist/blocks/admin.js +228 -219
  70. package/dist/blocks/admin.js.map +1 -1
  71. package/dist/blocks/ai.js +182 -212
  72. package/dist/blocks/ai.js.map +1 -1
  73. package/dist/blocks/analytics/usage-card.js +1 -1
  74. package/dist/blocks/analytics.js +665 -620
  75. package/dist/blocks/analytics.js.map +1 -1
  76. package/dist/blocks/collaboration.js +2 -2
  77. package/dist/blocks/commerce/receipt.js +1 -1
  78. package/dist/blocks/commerce.js +1439 -1553
  79. package/dist/blocks/commerce.js.map +1 -1
  80. package/dist/blocks/data-display.js +1 -1
  81. package/dist/blocks/onboarding.js +6 -6
  82. package/dist/blocks/onboarding.js.map +1 -1
  83. package/dist/blocks/planning.js +88 -97
  84. package/dist/blocks/planning.js.map +1 -1
  85. package/dist/blocks/timelines.js +1 -1
  86. package/dist/{breadcrumbs-DdQ_I5ra.js → breadcrumbs-BG_FfMK4.js} +10 -9
  87. package/dist/breadcrumbs-BG_FfMK4.js.map +1 -0
  88. package/dist/button-BS3KDg00.js +674 -0
  89. package/dist/button-BS3KDg00.js.map +1 -0
  90. package/dist/{button-BS6l5JUw.js → button-R9CCoH7A.js} +3 -3
  91. package/dist/button-R9CCoH7A.js.map +1 -0
  92. package/dist/buttons-DS0ZIwJ_.js +99 -0
  93. package/dist/buttons-DS0ZIwJ_.js.map +1 -0
  94. package/dist/{cards-Cum56XOF.js → cards-QoJ4syG9.js} +12 -12
  95. package/dist/{cards-Cum56XOF.js.map → cards-QoJ4syG9.js.map} +1 -1
  96. package/dist/chart-DwYRKKc-.js +152 -0
  97. package/dist/chart-DwYRKKc-.js.map +1 -0
  98. package/dist/checkbox-B7ygNTYp.js +35 -0
  99. package/dist/checkbox-B7ygNTYp.js.map +1 -0
  100. package/dist/choice-inputs-DrJ17tpL.js +752 -0
  101. package/dist/choice-inputs-DrJ17tpL.js.map +1 -0
  102. package/dist/{code-block-xHKbAJDj.js → code-block-CD0B7M93.js} +27 -27
  103. package/dist/code-block-CD0B7M93.js.map +1 -0
  104. package/dist/{collapsible-DsnktFNv.js → collapsible-oMUGM4tr.js} +3 -3
  105. package/dist/{collapsible-DsnktFNv.js.map → collapsible-oMUGM4tr.js.map} +1 -1
  106. package/dist/{collection-content-C4fthJV_.js → collection-content-Ys-OZOkY.js} +3 -3
  107. package/dist/{collection-content-C4fthJV_.js.map → collection-content-Ys-OZOkY.js.map} +1 -1
  108. package/dist/combobox-6dvVny2q.js +272 -0
  109. package/dist/combobox-6dvVny2q.js.map +1 -0
  110. package/dist/combobox-CB7039j7.js +865 -0
  111. package/dist/combobox-CB7039j7.js.map +1 -0
  112. package/dist/{command-C0xe7u9B.js → command-kPMPjIxJ.js} +35 -31
  113. package/dist/command-kPMPjIxJ.js.map +1 -0
  114. package/dist/{comments-DviPLnwy.js → comments-You0Bzbr.js} +434 -409
  115. package/dist/comments-You0Bzbr.js.map +1 -0
  116. package/dist/components/base/accordion/accordion-variants.d.ts +3 -3
  117. package/dist/components/base/action-menu/action-menu.d.ts +7 -2
  118. package/dist/components/base/avatar/stacked-avatars.d.ts +5 -4
  119. package/dist/components/base/badge/badge.d.ts +1 -1
  120. package/dist/components/base/badge/badge.recipes.d.ts +4 -4
  121. package/dist/components/base/buttons/base-button.d.ts +7 -0
  122. package/dist/components/base/buttons/button-group.recipes.d.ts +2 -2
  123. package/dist/components/base/buttons/button.recipes.d.ts +10 -19
  124. package/dist/components/base/buttons/button.variants.d.ts +1 -0
  125. package/dist/components/base/buttons/loader-button.d.ts +3 -1
  126. package/dist/components/base/buttons/text-button.d.ts +2 -2
  127. package/dist/components/base/buttons/use-pending-button-focus.d.ts +3 -0
  128. package/dist/components/base/cards/card.recipes.d.ts +13 -5
  129. package/dist/components/base/cards/partials/card-primitives.d.ts +9 -4
  130. package/dist/components/base/cards/smart-card.types.d.ts +1 -1
  131. package/dist/components/base/carousel/carousel.d.ts +3 -1
  132. package/dist/components/base/chart/chart.d.ts +7 -7
  133. package/dist/components/base/choice-inputs/checkbox.d.ts +6 -7
  134. package/dist/components/base/choice-inputs/choice-types.d.ts +10 -1
  135. package/dist/components/base/choice-inputs/pill-radio-group.d.ts +9 -0
  136. package/dist/components/base/choice-inputs/select-popup.d.ts +9 -1
  137. package/dist/components/base/choice-inputs/switch-card.d.ts +1 -1
  138. package/dist/components/base/date-pickers/date-picker-field.d.ts +23 -0
  139. package/dist/components/base/date-pickers/date-picker.recipes.d.ts +5 -18
  140. package/dist/components/base/date-pickers/datepicker.types.d.ts +16 -3
  141. package/dist/components/base/display/alert-dialog.d.ts +8 -2
  142. package/dist/components/base/display/content-block.d.ts +4 -2
  143. package/dist/components/base/display/date-block.d.ts +1 -1
  144. package/dist/components/base/display/dialog.d.ts +12 -5
  145. package/dist/components/base/display/surface-title.d.ts +6 -1
  146. package/dist/components/base/feedback/alert.d.ts +1 -1
  147. package/dist/components/base/feedback/state-display.d.ts +5 -4
  148. package/dist/components/base/forms/form-field.d.ts +1 -0
  149. package/dist/components/base/forms/form-sizing.d.ts +35 -3
  150. package/dist/components/base/forms/workflow.d.ts +2 -0
  151. package/dist/components/base/forms-numeric/coordinates-input.d.ts +3 -0
  152. package/dist/components/base/forms-numeric/rounding-mode-select.d.ts +4 -1
  153. package/dist/components/base/navigation/dropdown-menu.d.ts +2 -2
  154. package/dist/components/base/navigation/language-switcher.d.ts +4 -1
  155. package/dist/components/base/navigation/overflow-tab-bar.d.ts +7 -0
  156. package/dist/components/base/navigation/page-header/page-header.d.ts +4 -1
  157. package/dist/components/base/navigation/tabs.d.ts +3 -5
  158. package/dist/components/base/popover/popover.recipes.d.ts +3 -3
  159. package/dist/components/base/qr-code/qr-code.d.ts +2 -0
  160. package/dist/components/base/sheet/index.d.ts +29 -1
  161. package/dist/components/base/sheet/sheet.d.ts +14 -5
  162. package/dist/components/base/spinner/spinner.d.ts +3 -2
  163. package/dist/components/base/structure/structure.types.d.ts +1 -1
  164. package/dist/components/base/table/index.d.ts +1 -1
  165. package/dist/components/base/text-inputs/clear-native-field.d.ts +2 -0
  166. package/dist/components/base/text-inputs/input-group.d.ts +2 -2
  167. package/dist/components/base/text-inputs/input-trailing-action.d.ts +3 -0
  168. package/dist/components/base/upload/upload.recipes.d.ts +11 -0
  169. package/dist/components/base/value-inputs/date-time-input.d.ts +4 -2
  170. package/dist/components/base/value-inputs/tags-input.d.ts +2 -0
  171. package/dist/components/blocks/admin/api-key-list/api-key-list.types.d.ts +1 -1
  172. package/dist/components/blocks/analytics/format-metric-value.d.ts +11 -1
  173. package/dist/components/blocks/analytics/index.d.ts +1 -1
  174. package/dist/components/blocks/analytics/types.d.ts +1 -1
  175. package/dist/components/blocks/analytics/use-metric-format-options.d.ts +3 -0
  176. package/dist/components/blocks/collaboration/message/message.recipes.d.ts +12 -0
  177. package/dist/components/blocks/commerce/address-card/address-card.d.ts +1 -1
  178. package/dist/components/blocks/commerce/address-card/types.d.ts +3 -1
  179. package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.d.ts +4 -0
  180. package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.types.d.ts +2 -2
  181. package/dist/components/blocks/commerce/discount-stack/types.d.ts +1 -1
  182. package/dist/components/blocks/commerce/inventory-section/types.d.ts +4 -1
  183. package/dist/components/blocks/commerce/loyalty-points/types.d.ts +1 -1
  184. package/dist/components/blocks/commerce/order-status/types.d.ts +4 -0
  185. package/dist/components/blocks/commerce/payment-method/payment-method.d.ts +1 -1
  186. package/dist/components/blocks/commerce/payment-method/types.d.ts +3 -1
  187. package/dist/components/blocks/commerce/seo-listing/seo-listing-card.d.ts +1 -1
  188. package/dist/components/blocks/commerce/seo-listing/types.d.ts +3 -1
  189. package/dist/components/blocks/commerce/vendor-profile/types.d.ts +4 -1
  190. package/dist/components/blocks/data-display/dense-info-card/dense-info.strings.d.ts +4 -1
  191. package/dist/components/blocks/data-display/empty-state/partials/illustrations/document-stack.d.ts +1 -4
  192. package/dist/components/blocks/data-display/empty-state/partials/illustrations/inbox-clean.d.ts +1 -4
  193. package/dist/components/blocks/data-display/empty-state/partials/illustrations/index.d.ts +3 -3
  194. package/dist/components/blocks/data-display/empty-state/partials/illustrations/stacked-cards.d.ts +1 -6
  195. package/dist/components/blocks/data-display/inline-stat/inline-stat.d.ts +4 -1
  196. package/dist/components/features/combobox/components/error-message.d.ts +1 -1
  197. package/dist/components/features/comments/hooks/use-attachment-upload.d.ts +5 -0
  198. package/dist/components/features/filters/facets/search-facet.d.ts +0 -12
  199. package/dist/components/features/filters/facets/tags-facet.d.ts +1 -1
  200. package/dist/components/features/global-search/partials/global-search-idle-state.d.ts +1 -1
  201. package/dist/components/features/media-library/media-library.d.ts +1 -1
  202. package/dist/components/features/media-library/media-library.types.d.ts +9 -1
  203. package/dist/components/features/media-library/partials/media-library-partials.d.ts +1 -1
  204. package/dist/components/features/overlays/alert-dialog.d.ts +1 -1
  205. package/dist/components/features/overlays/drawer.d.ts +1 -1
  206. package/dist/components/features/overlays/hooks/use-overlay-actions.d.ts +2 -2
  207. package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts +11 -4
  208. package/dist/components/features/overlays/hooks/use-pending-overlay-focus.d.ts +2 -0
  209. package/dist/components/features/overlays/overlay-tone-icon.d.ts +37 -0
  210. package/dist/components/features/overlays/overlays.types.d.ts +46 -22
  211. package/dist/components/features/products/components/product-variants-manager.d.ts +1 -1
  212. package/dist/components/features/products/partials/index.d.ts +1 -1
  213. package/dist/components/features/products/partials/product-metric-tile.d.ts +6 -0
  214. package/dist/components/features/products/partials/product-tone.d.ts +11 -1
  215. package/dist/components/features/products/products.types.d.ts +2 -1
  216. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +2 -1
  217. package/dist/components/features/table/data-table.d.ts +1 -1
  218. package/dist/components/features/table/partials/cell-renderers.d.ts +1 -1
  219. package/dist/components/features/table/table.types.d.ts +1 -1
  220. package/dist/components/features/theme-tweaker/theme-provider-settings.d.ts +3 -1
  221. package/dist/components/layout/auth/auth.types.d.ts +1 -0
  222. package/dist/components/layout/page/index.d.ts +1 -1
  223. package/dist/components/layout/page/page.d.ts +0 -1
  224. package/dist/components/layout/page/page.types.d.ts +62 -6
  225. package/dist/components/layout/page/partials/page-header-commands.d.ts +13 -0
  226. package/dist/components/layout/page/partials/page-header.d.ts +1 -1
  227. package/dist/components/layout/sidebar/sidebar.context.d.ts +1 -1
  228. package/dist/components/layout/sidebar/sidebar.types.d.ts +4 -0
  229. package/dist/components/layout/workspace/workspace.types.d.ts +3 -0
  230. package/dist/components/primitives/date.d.ts +16 -3
  231. package/dist/components/primitives/dimensions.d.ts +6 -0
  232. package/dist/components/primitives/duration.d.ts +6 -0
  233. package/dist/components/primitives/file-size.d.ts +6 -0
  234. package/dist/components/primitives/index.d.ts +1 -1
  235. package/dist/components/primitives/initials.d.ts +11 -2
  236. package/dist/components/primitives/link.d.ts +7 -0
  237. package/dist/components/primitives/money.d.ts +29 -7
  238. package/dist/components/primitives/number.d.ts +17 -0
  239. package/dist/components/primitives/value-typography.d.ts +54 -0
  240. package/dist/components/primitives/value.d.ts +31 -6
  241. package/dist/components/typography/heading.d.ts +13 -2
  242. package/dist/components/typography/index.d.ts +1 -1
  243. package/dist/components/typography/label.d.ts +3 -0
  244. package/dist/components/typography/running-text.d.ts +12 -0
  245. package/dist/components/typography/text-link.d.ts +23 -1
  246. package/dist/components/typography/text.d.ts +12 -0
  247. package/dist/components/typography/text.styles.d.ts +37 -5
  248. package/dist/components/ui/button.d.ts +1 -1
  249. package/dist/components/ui/checkbox.d.ts +5 -0
  250. package/dist/components/ui/overlay.recipes.d.ts +15 -2
  251. package/dist/components/ui/popover.d.ts +1 -1
  252. package/dist/components/ui/select.d.ts +3 -1
  253. package/dist/components/ui/sidebar.d.ts +1 -1
  254. package/dist/components/ui/switch.d.ts +5 -0
  255. package/dist/components/ui/table.d.ts +2 -1
  256. package/dist/container.recipes-D9t8MHR3.js +27 -0
  257. package/dist/container.recipes-D9t8MHR3.js.map +1 -0
  258. package/dist/{containers-6s-ucRQQ.js → containers-D_L4mTVb.js} +34 -57
  259. package/dist/containers-D_L4mTVb.js.map +1 -0
  260. package/dist/control-group-recipes-DBXmfh2E.js +21 -0
  261. package/dist/control-group-recipes-DBXmfh2E.js.map +1 -0
  262. package/dist/{copyable-B7SBXJMr.js → copyable-DDjTeW_j.js} +6 -6
  263. package/dist/{copyable-B7SBXJMr.js.map → copyable-DDjTeW_j.js.map} +1 -1
  264. package/dist/data-display-3xWQUnMA.js +1335 -0
  265. package/dist/data-display-3xWQUnMA.js.map +1 -0
  266. package/dist/date-picker-DrDFj8Lo.js +1527 -0
  267. package/dist/date-picker-DrDFj8Lo.js.map +1 -0
  268. package/dist/date-pickers-CnFCb0n2.js +174 -0
  269. package/dist/date-pickers-CnFCb0n2.js.map +1 -0
  270. package/dist/date-uf3z37Nm.js +144 -0
  271. package/dist/date-uf3z37Nm.js.map +1 -0
  272. package/dist/{display-CFM5myut.js → display-DrdvPwF0.js} +25 -25
  273. package/dist/display-DrdvPwF0.js.map +1 -0
  274. package/dist/{dropdown-menu-BlnyHr-9.js → dropdown-menu-CURh59jb.js} +22 -15
  275. package/dist/dropdown-menu-CURh59jb.js.map +1 -0
  276. package/dist/features/activities.js +177 -163
  277. package/dist/features/activities.js.map +1 -1
  278. package/dist/features/ai-chat.js +187 -183
  279. package/dist/features/ai-chat.js.map +1 -1
  280. package/dist/features/async-preview.js +9 -9
  281. package/dist/features/async-preview.js.map +1 -1
  282. package/dist/features/combobox.js +1 -1
  283. package/dist/features/comments.js +1 -1
  284. package/dist/features/data-view.js +25 -23
  285. package/dist/features/data-view.js.map +1 -1
  286. package/dist/features/email-composer/engine.js +1 -1
  287. package/dist/features/email-composer.js +353 -355
  288. package/dist/features/email-composer.js.map +1 -1
  289. package/dist/features/event-calendar.js +346 -354
  290. package/dist/features/event-calendar.js.map +1 -1
  291. package/dist/features/filters.js +1 -1
  292. package/dist/features/global-search.js +225 -227
  293. package/dist/features/global-search.js.map +1 -1
  294. package/dist/features/kanban.js +29 -29
  295. package/dist/features/kanban.js.map +1 -1
  296. package/dist/features/map.js +59 -58
  297. package/dist/features/map.js.map +1 -1
  298. package/dist/features/media-library.js +898 -900
  299. package/dist/features/media-library.js.map +1 -1
  300. package/dist/features/mentions.js +1 -1
  301. package/dist/features/overlays.js +1 -1
  302. package/dist/features/products.js +1412 -1444
  303. package/dist/features/products.js.map +1 -1
  304. package/dist/features/questionnaire.js +51 -49
  305. package/dist/features/questionnaire.js.map +1 -1
  306. package/dist/features/resource-assignment.js +103 -97
  307. package/dist/features/resource-assignment.js.map +1 -1
  308. package/dist/features/resource.js +13 -13
  309. package/dist/features/resource.js.map +1 -1
  310. package/dist/features/rich-text-editor.js +2 -2
  311. package/dist/features/schema-form.js +187 -183
  312. package/dist/features/schema-form.js.map +1 -1
  313. package/dist/features/suggestions.js +3 -3
  314. package/dist/features/sync.js +7 -7
  315. package/dist/features/sync.js.map +1 -1
  316. package/dist/features/table.js +1 -1
  317. package/dist/features/theme-tweaker.js +508 -503
  318. package/dist/features/theme-tweaker.js.map +1 -1
  319. package/dist/{feedback-DWUkgEjR.js → feedback-C7nR0UtT.js} +30 -31
  320. package/dist/feedback-C7nR0UtT.js.map +1 -0
  321. package/dist/field-affordance-recipes-CkOCdE2y.js +46 -0
  322. package/dist/field-affordance-recipes-CkOCdE2y.js.map +1 -0
  323. package/dist/{field-state-recipes-CBTRt9Bt.js → field-state-recipes-C-MFBX_8.js} +5 -5
  324. package/dist/field-state-recipes-C-MFBX_8.js.map +1 -0
  325. package/dist/{filters-BhsUtsxW.js → filters-Da-gNPsE.js} +760 -765
  326. package/dist/filters-Da-gNPsE.js.map +1 -0
  327. package/dist/{form-field-Bn7ZH1rA.js → form-field-VZRULhUK.js} +20 -12
  328. package/dist/form-field-VZRULhUK.js.map +1 -0
  329. package/dist/form-sizing-uWP4lzVh.js +126 -0
  330. package/dist/form-sizing-uWP4lzVh.js.map +1 -0
  331. package/dist/{forms-B7pzS25o.js → forms-DDeEnXSY.js} +38 -38
  332. package/dist/forms-DDeEnXSY.js.map +1 -0
  333. package/dist/forms-numeric-D3CO60IF.js +905 -0
  334. package/dist/forms-numeric-D3CO60IF.js.map +1 -0
  335. package/dist/{header-C59QZyxV.js → header-2ycNqGOR.js} +42 -37
  336. package/dist/header-2ycNqGOR.js.map +1 -0
  337. package/dist/{hooks-CM1Vp9Pe.js → hooks-DQ5SPwZw.js} +2 -2
  338. package/dist/{hooks-CM1Vp9Pe.js.map → hooks-DQ5SPwZw.js.map} +1 -1
  339. package/dist/{http-CLTVJc5I.js → http-CdEIHyQf.js} +2 -2
  340. package/dist/http-CdEIHyQf.js.map +1 -0
  341. package/dist/{icon-badge-Dv0RYQwj.js → icon-badge-DKlaKXoo.js} +4 -4
  342. package/dist/{icon-badge-Dv0RYQwj.js.map → icon-badge-DKlaKXoo.js.map} +1 -1
  343. package/dist/index.js +2 -2
  344. package/dist/input-BoLm9Hks.js +20 -0
  345. package/dist/input-BoLm9Hks.js.map +1 -0
  346. package/dist/input-DhQdBnV3.js +255 -0
  347. package/dist/input-DhQdBnV3.js.map +1 -0
  348. package/dist/item-xzh8Df65.js +264 -0
  349. package/dist/item-xzh8Df65.js.map +1 -0
  350. package/dist/layout/app-shell.js +1 -1
  351. package/dist/layout/auth.js +1 -1
  352. package/dist/layout/containers.js +1 -1
  353. package/dist/layout/header.js +1 -1
  354. package/dist/layout/hooks.js +1 -1
  355. package/dist/layout/navigation.js +1 -1
  356. package/dist/layout/page.js +1 -1
  357. package/dist/layout/settings.js +1 -1
  358. package/dist/layout/sidebar.js +2 -2
  359. package/dist/layout/workspace.js +1 -1
  360. package/dist/layout.js +10 -10
  361. package/dist/lib/affordance-geometry.generated.d.ts +46 -10
  362. package/dist/lib/control-group-recipes.d.ts +22 -0
  363. package/dist/lib/field-affordance-recipes.d.ts +70 -2
  364. package/dist/lib/field-state-recipes.d.ts +6 -4
  365. package/dist/lib/format.d.ts +9 -0
  366. package/dist/lib/money-format.d.ts +30 -0
  367. package/dist/lib/navigation-row-recipes.d.ts +3 -2
  368. package/dist/lib/overlay-anatomy-recipes.d.ts +2 -2
  369. package/dist/lib/surface-recipes.d.ts +13 -8
  370. package/dist/lib/token-merge.generated.d.ts +144 -2
  371. package/dist/lib/track-recipes.d.ts +1 -1
  372. package/dist/lib/ui-provider/provider.d.ts +7 -2
  373. package/dist/lib/ui-provider/store.d.ts +6 -2
  374. package/dist/lib/ui-provider/types.d.ts +9 -4
  375. package/dist/lib/use-prefers-reduced-motion.d.ts +2 -0
  376. package/dist/lib/utils.js +1 -1
  377. package/dist/media-gallery-DQUQ0m3O.js +201 -0
  378. package/dist/media-gallery-DQUQ0m3O.js.map +1 -0
  379. package/dist/{mentions-B8Ko-fhS.js → mentions-DwnO1hh4.js} +40 -39
  380. package/dist/{mentions-B8Ko-fhS.js.map → mentions-DwnO1hh4.js.map} +1 -1
  381. package/dist/message-YfFmbXNP.js +127 -0
  382. package/dist/message-YfFmbXNP.js.map +1 -0
  383. package/dist/{navigation-BUIn2Qxx.js → navigation-Cbp5V8gG.js} +27 -28
  384. package/dist/navigation-Cbp5V8gG.js.map +1 -0
  385. package/dist/navigation-Cs1npsPm.js +300 -0
  386. package/dist/navigation-Cs1npsPm.js.map +1 -0
  387. package/dist/{navigation-row-recipes-GVh11KiT.js → navigation-row-recipes-DlU-4QYO.js} +3 -3
  388. package/dist/navigation-row-recipes-DlU-4QYO.js.map +1 -0
  389. package/dist/number-CKRBYmZK.js +352 -0
  390. package/dist/number-CKRBYmZK.js.map +1 -0
  391. package/dist/overlay.recipes-CNO2S9V6.js +34 -0
  392. package/dist/overlay.recipes-CNO2S9V6.js.map +1 -0
  393. package/dist/overlays-DhZO7N-I.js +994 -0
  394. package/dist/overlays-DhZO7N-I.js.map +1 -0
  395. package/dist/page-C6R_8jFt.js +325 -0
  396. package/dist/page-C6R_8jFt.js.map +1 -0
  397. package/dist/{page-header-DQRa0jug.js → page-header-hUTzcRZX.js} +12 -12
  398. package/dist/page-header-hUTzcRZX.js.map +1 -0
  399. package/dist/{pagination-C29vvt3I.js → pagination-Cm0jqa3I.js} +21 -21
  400. package/dist/pagination-Cm0jqa3I.js.map +1 -0
  401. package/dist/{popover-CoLDEg19.js → popover-Dcv_9jxr.js} +23 -22
  402. package/dist/popover-Dcv_9jxr.js.map +1 -0
  403. package/dist/{popover-menu-GLIQTJTx.js → popover-menu-DnRFKnHP.js} +6 -6
  404. package/dist/{popover-menu-GLIQTJTx.js.map → popover-menu-DnRFKnHP.js.map} +1 -1
  405. package/dist/{popover.recipes-zgBhMlUu.js → popover.recipes-wmbvL8Ah.js} +5 -5
  406. package/dist/popover.recipes-wmbvL8Ah.js.map +1 -0
  407. package/dist/primitives-BHrwQXFC.js +379 -0
  408. package/dist/primitives-BHrwQXFC.js.map +1 -0
  409. package/dist/primitives.js +5 -5
  410. package/dist/{progress-BOe8l_FZ.js → progress-Br9WTFya.js} +12 -11
  411. package/dist/progress-Br9WTFya.js.map +1 -0
  412. package/dist/{receipt-BM8xsGFy.js → receipt-CV89q1fs.js} +8 -8
  413. package/dist/{receipt-BM8xsGFy.js.map → receipt-CV89q1fs.js.map} +1 -1
  414. package/dist/rich-text-editor-CF8QYt5p.js +574 -0
  415. package/dist/rich-text-editor-CF8QYt5p.js.map +1 -0
  416. package/dist/{rich-text-editor.recipes-DxvOE0Lp.js → rich-text-editor.recipes-CnrbmTS1.js} +35 -26
  417. package/dist/rich-text-editor.recipes-CnrbmTS1.js.map +1 -0
  418. package/dist/{rich-text-B7sBAdDG.js → rich-text-j-FGAeZW.js} +4 -4
  419. package/dist/{rich-text-B7sBAdDG.js.map → rich-text-j-FGAeZW.js.map} +1 -1
  420. package/dist/{scroll-area-BheMQ270.js → scroll-area-DRdr16Pt.js} +3 -3
  421. package/dist/scroll-area-DRdr16Pt.js.map +1 -0
  422. package/dist/{separator-DO0EbCEm.js → separator-BMEvwnSX.js} +2 -2
  423. package/dist/{separator-DO0EbCEm.js.map → separator-BMEvwnSX.js.map} +1 -1
  424. package/dist/{separator-Gk_WXH-l.js → separator-Do5GWDYi.js} +4 -4
  425. package/dist/separator-Do5GWDYi.js.map +1 -0
  426. package/dist/services/actions/action-adapters.d.ts +4 -0
  427. package/dist/services/actions.js +8 -3
  428. package/dist/services/actions.js.map +1 -1
  429. package/dist/{settings-BnCyyPOJ.js → settings-DHk0L2MF.js} +20 -19
  430. package/dist/settings-DHk0L2MF.js.map +1 -0
  431. package/dist/sheet-DRFNY1_D.js +207 -0
  432. package/dist/sheet-DRFNY1_D.js.map +1 -0
  433. package/dist/sidebar-Cb8WzOvE.js +511 -0
  434. package/dist/sidebar-Cb8WzOvE.js.map +1 -0
  435. package/dist/{sidebar-DPR7fmqN.js → sidebar-Crc9M9JV.js} +220 -201
  436. package/dist/sidebar-Crc9M9JV.js.map +1 -0
  437. package/dist/{skeleton-CmT1ppqb.js → skeleton-DVMXr15h.js} +5 -5
  438. package/dist/{skeleton-CmT1ppqb.js.map → skeleton-DVMXr15h.js.map} +1 -1
  439. package/dist/smart-card-Bek-TwUp.js +599 -0
  440. package/dist/smart-card-Bek-TwUp.js.map +1 -0
  441. package/dist/{spinner-BY9HbUEh.js → spinner-CmTAbEp0.js} +8 -6
  442. package/dist/spinner-CmTAbEp0.js.map +1 -0
  443. package/dist/{structure-MvKVq-oL.js → structure-hzCW-XsV.js} +3 -3
  444. package/dist/{structure-MvKVq-oL.js.map → structure-hzCW-XsV.js.map} +1 -1
  445. package/dist/{structure.recipes-Bqhf9oIh.js → structure.recipes-EPz60cU8.js} +37 -19
  446. package/dist/structure.recipes-EPz60cU8.js.map +1 -0
  447. package/dist/style.css +1 -1
  448. package/dist/surface-recipes-DOdoBXGm.js +28 -0
  449. package/dist/surface-recipes-DOdoBXGm.js.map +1 -0
  450. package/dist/table-D6zKeYQX.js +162 -0
  451. package/dist/table-D6zKeYQX.js.map +1 -0
  452. package/dist/table-Dn4XSrSB.js +1444 -0
  453. package/dist/table-Dn4XSrSB.js.map +1 -0
  454. package/dist/tabs-Dk8E_knt.js +189 -0
  455. package/dist/tabs-Dk8E_knt.js.map +1 -0
  456. package/dist/text-inputs-BFpku0Qd.js +331 -0
  457. package/dist/text-inputs-BFpku0Qd.js.map +1 -0
  458. package/dist/{text.styles-BwB7vAF2.js → text.styles-g4He6UIW.js} +26 -15
  459. package/dist/text.styles-g4He6UIW.js.map +1 -0
  460. package/dist/theme.css +90 -124
  461. package/dist/themes/green.css +24 -0
  462. package/dist/{timelines-B9ICkQcV.js → timelines-CxuAFIc2.js} +97 -104
  463. package/dist/timelines-CxuAFIc2.js.map +1 -0
  464. package/dist/track-recipes-CDcKmndW.js +10 -0
  465. package/dist/track-recipes-CDcKmndW.js.map +1 -0
  466. package/dist/{tree-BdWSaoFT.js → tree-BotPlyiD.js} +13 -13
  467. package/dist/{tree-BdWSaoFT.js.map → tree-BotPlyiD.js.map} +1 -1
  468. package/dist/typography/rich-text.js +1 -1
  469. package/dist/typography-CAr3dQhX.js +116 -0
  470. package/dist/typography-CAr3dQhX.js.map +1 -0
  471. package/dist/typography.js +2 -2
  472. package/dist/{ui-provider-CftIB6TY.js → ui-provider-D2_TeLqw.js} +22 -22
  473. package/dist/ui-provider-D2_TeLqw.js.map +1 -0
  474. package/dist/ui-provider.js +1 -1
  475. package/dist/{upload-D8Za5x_c.js → upload-B0WHW7ak.js} +278 -274
  476. package/dist/upload-B0WHW7ak.js.map +1 -0
  477. package/dist/{upload-queue-hIIYBLS7.js → upload-queue-BHZ_wBfd.js} +72 -75
  478. package/dist/upload-queue-BHZ_wBfd.js.map +1 -0
  479. package/dist/{usage-card-DnmnJ58D.js → usage-card-U0YBLTNT.js} +31 -33
  480. package/dist/usage-card-U0YBLTNT.js.map +1 -0
  481. package/dist/utils-Cospvlj1.js +4445 -0
  482. package/dist/utils-Cospvlj1.js.map +1 -0
  483. package/dist/value-inputs-CjfzGMsN.js +854 -0
  484. package/dist/value-inputs-CjfzGMsN.js.map +1 -0
  485. package/dist/value-typography-Deb3yQZg.js +116 -0
  486. package/dist/value-typography-Deb3yQZg.js.map +1 -0
  487. package/dist/{workspace-C1PZmk8L.js → workspace-YoFjXi6i.js} +97 -105
  488. package/dist/workspace-YoFjXi6i.js.map +1 -0
  489. package/docs/consumer-skill/SKILL.md +123 -119
  490. package/docs/consumer-skill/examples/analytics.tsx +34 -0
  491. package/docs/consumer-skill/examples/app-layout.tsx +42 -14
  492. package/docs/consumer-skill/examples/detail.tsx +20 -5
  493. package/docs/consumer-skill/examples/edit.tsx +1 -1
  494. package/docs/consumer-skill/examples/layout-blocks.tsx +20 -0
  495. package/docs/consumer-skill/examples/manifest.json +37 -3
  496. package/docs/consumer-skill/examples/scoped-directory.tsx +2 -2
  497. package/docs/consumer-skill/examples/website.tsx +56 -0
  498. package/docs/consumer-skill/references/analytics.md +70 -0
  499. package/docs/consumer-skill/references/composition.md +195 -9
  500. package/docs/consumer-skill/references/design-contract.md +33 -7
  501. package/docs/consumer-skill/references/discovery.md +80 -5
  502. package/docs/consumer-skill/references/installation.md +22 -0
  503. package/docs/consumer-skill/references/integration.md +46 -1
  504. package/docs/consumer-skill/references/public-api.json +2083 -237
  505. package/docs/consumer-skill/references/review.md +74 -6
  506. package/docs/consumer-skill/references/theming.md +59 -8
  507. package/docs/consumer-skill/references/tokens.json +180 -9
  508. package/docs/consumer-skill/references/workflows.md +34 -0
  509. package/docs/consumer-skill/scripts/check-composition.mjs +1 -1
  510. package/docs/consumer-skill/scripts/composition-policy.mjs +271 -18
  511. package/docs/consumer-skill/scripts/discovery.mjs +69 -9
  512. package/docs/consumer-skill/scripts/pin-button-defaults.mjs +95 -0
  513. package/docs/consumer-skill/scripts/surface-policy.mjs +44 -0
  514. package/package.json +11 -6
  515. package/dist/accordion-B-5Focs8.js.map +0 -1
  516. package/dist/action-menu-Cx3SdfbN.js +0 -265
  517. package/dist/action-menu-Cx3SdfbN.js.map +0 -1
  518. package/dist/affordance-geometry.generated-D8Jcfb0G.js +0 -32
  519. package/dist/affordance-geometry.generated-D8Jcfb0G.js.map +0 -1
  520. package/dist/ai-artifact-B5tPpXnS.js.map +0 -1
  521. package/dist/app-shell-at8Kt4l_.js.map +0 -1
  522. package/dist/attachment-BO2R47wn.js.map +0 -1
  523. package/dist/auth-OFwWSAap.js +0 -704
  524. package/dist/auth-OFwWSAap.js.map +0 -1
  525. package/dist/avatar-Bpzty83c.js.map +0 -1
  526. package/dist/badge-BZXZT9wd.js.map +0 -1
  527. package/dist/breadcrumbs-DdQ_I5ra.js.map +0 -1
  528. package/dist/button-BS6l5JUw.js.map +0 -1
  529. package/dist/buttons-Co6GavvM.js +0 -674
  530. package/dist/buttons-Co6GavvM.js.map +0 -1
  531. package/dist/chart-DVfcwQu6.js +0 -149
  532. package/dist/chart-DVfcwQu6.js.map +0 -1
  533. package/dist/checkbox-BavDRjF7.js +0 -34
  534. package/dist/checkbox-BavDRjF7.js.map +0 -1
  535. package/dist/choice-inputs-CC7XqPQO.js +0 -619
  536. package/dist/choice-inputs-CC7XqPQO.js.map +0 -1
  537. package/dist/code-block-xHKbAJDj.js.map +0 -1
  538. package/dist/combobox-DEbdr-3u.js +0 -273
  539. package/dist/combobox-DEbdr-3u.js.map +0 -1
  540. package/dist/combobox-xv3yJbzl.js +0 -850
  541. package/dist/combobox-xv3yJbzl.js.map +0 -1
  542. package/dist/command-C0xe7u9B.js.map +0 -1
  543. package/dist/comments-DviPLnwy.js.map +0 -1
  544. package/dist/containers-6s-ucRQQ.js.map +0 -1
  545. package/dist/data-display-cWIRdeaf.js +0 -1129
  546. package/dist/data-display-cWIRdeaf.js.map +0 -1
  547. package/dist/date-BFNMnrS5.js +0 -140
  548. package/dist/date-BFNMnrS5.js.map +0 -1
  549. package/dist/date-picker-CA6ogMQB.js +0 -1521
  550. package/dist/date-picker-CA6ogMQB.js.map +0 -1
  551. package/dist/date-pickers-BPIKLdsD.js +0 -224
  552. package/dist/date-pickers-BPIKLdsD.js.map +0 -1
  553. package/dist/display-CFM5myut.js.map +0 -1
  554. package/dist/dropdown-menu-BlnyHr-9.js.map +0 -1
  555. package/dist/feedback-DWUkgEjR.js.map +0 -1
  556. package/dist/field-affordance-recipes-IjzPrCTw.js +0 -17
  557. package/dist/field-affordance-recipes-IjzPrCTw.js.map +0 -1
  558. package/dist/field-state-recipes-CBTRt9Bt.js.map +0 -1
  559. package/dist/filters-BhsUtsxW.js.map +0 -1
  560. package/dist/form-field-Bn7ZH1rA.js.map +0 -1
  561. package/dist/form-sizing-BWs70_a2.js +0 -100
  562. package/dist/form-sizing-BWs70_a2.js.map +0 -1
  563. package/dist/format-iamDSqs2.js +0 -110
  564. package/dist/format-iamDSqs2.js.map +0 -1
  565. package/dist/forms-B7pzS25o.js.map +0 -1
  566. package/dist/forms-numeric-BUBxELBv.js +0 -867
  567. package/dist/forms-numeric-BUBxELBv.js.map +0 -1
  568. package/dist/header-C59QZyxV.js.map +0 -1
  569. package/dist/http-CLTVJc5I.js.map +0 -1
  570. package/dist/input-WwYQZJzG.js +0 -202
  571. package/dist/input-WwYQZJzG.js.map +0 -1
  572. package/dist/input-ci9fIgFH.js +0 -20
  573. package/dist/input-ci9fIgFH.js.map +0 -1
  574. package/dist/item-pJ0GsOiJ.js +0 -257
  575. package/dist/item-pJ0GsOiJ.js.map +0 -1
  576. package/dist/media-gallery-DhDRgnVZ.js +0 -200
  577. package/dist/media-gallery-DhDRgnVZ.js.map +0 -1
  578. package/dist/message-COsdEvXT.js +0 -108
  579. package/dist/message-COsdEvXT.js.map +0 -1
  580. package/dist/navigation-BUIn2Qxx.js.map +0 -1
  581. package/dist/navigation-DBEu4POU.js +0 -267
  582. package/dist/navigation-DBEu4POU.js.map +0 -1
  583. package/dist/navigation-row-recipes-GVh11KiT.js.map +0 -1
  584. package/dist/number-BNT_BIzJ.js +0 -269
  585. package/dist/number-BNT_BIzJ.js.map +0 -1
  586. package/dist/overlay.recipes-BxW5FIfK.js +0 -6
  587. package/dist/overlay.recipes-BxW5FIfK.js.map +0 -1
  588. package/dist/overlays-B11wZka6.js +0 -982
  589. package/dist/overlays-B11wZka6.js.map +0 -1
  590. package/dist/page-BV6ioQg3.js +0 -202
  591. package/dist/page-BV6ioQg3.js.map +0 -1
  592. package/dist/page-header-DQRa0jug.js.map +0 -1
  593. package/dist/pagination-C29vvt3I.js.map +0 -1
  594. package/dist/popover-CoLDEg19.js.map +0 -1
  595. package/dist/popover.recipes-zgBhMlUu.js.map +0 -1
  596. package/dist/primitives-DKPOGVpj.js +0 -330
  597. package/dist/primitives-DKPOGVpj.js.map +0 -1
  598. package/dist/progress-BOe8l_FZ.js.map +0 -1
  599. package/dist/rich-text-editor-CoVrTiSv.js +0 -575
  600. package/dist/rich-text-editor-CoVrTiSv.js.map +0 -1
  601. package/dist/rich-text-editor.recipes-DxvOE0Lp.js.map +0 -1
  602. package/dist/scroll-area-BheMQ270.js.map +0 -1
  603. package/dist/select-B2mb-qN2.js +0 -108
  604. package/dist/select-B2mb-qN2.js.map +0 -1
  605. package/dist/separator-Gk_WXH-l.js.map +0 -1
  606. package/dist/settings-BnCyyPOJ.js.map +0 -1
  607. package/dist/sheet-B-q914Ad.js +0 -205
  608. package/dist/sheet-B-q914Ad.js.map +0 -1
  609. package/dist/sidebar-C_2p3Tfj.js +0 -501
  610. package/dist/sidebar-C_2p3Tfj.js.map +0 -1
  611. package/dist/sidebar-DPR7fmqN.js.map +0 -1
  612. package/dist/smart-card-CYLn46e6.js +0 -578
  613. package/dist/smart-card-CYLn46e6.js.map +0 -1
  614. package/dist/spinner-BY9HbUEh.js.map +0 -1
  615. package/dist/structure.recipes-Bqhf9oIh.js.map +0 -1
  616. package/dist/surface-recipes-CQfRr-VL.js +0 -27
  617. package/dist/surface-recipes-CQfRr-VL.js.map +0 -1
  618. package/dist/table-BS39xnlq.js +0 -1424
  619. package/dist/table-BS39xnlq.js.map +0 -1
  620. package/dist/table-DnlAJ-xR.js +0 -146
  621. package/dist/table-DnlAJ-xR.js.map +0 -1
  622. package/dist/tabs-B5cNMWiP.js +0 -187
  623. package/dist/tabs-B5cNMWiP.js.map +0 -1
  624. package/dist/text-inputs-Dh9XGyiS.js +0 -331
  625. package/dist/text-inputs-Dh9XGyiS.js.map +0 -1
  626. package/dist/text.styles-BwB7vAF2.js.map +0 -1
  627. package/dist/timelines-B9ICkQcV.js.map +0 -1
  628. package/dist/track-recipes-LLPNVwFg.js +0 -10
  629. package/dist/track-recipes-LLPNVwFg.js.map +0 -1
  630. package/dist/typography-Cv8MT-82.js +0 -96
  631. package/dist/typography-Cv8MT-82.js.map +0 -1
  632. package/dist/ui-provider-CftIB6TY.js.map +0 -1
  633. package/dist/upload-D8Za5x_c.js.map +0 -1
  634. package/dist/upload-queue-hIIYBLS7.js.map +0 -1
  635. package/dist/usage-card-DnmnJ58D.js.map +0 -1
  636. package/dist/utils-C2EKeIw3.js +0 -72
  637. package/dist/utils-C2EKeIw3.js.map +0 -1
  638. package/dist/value-inputs-DX2dbxjj.js +0 -824
  639. package/dist/value-inputs-DX2dbxjj.js.map +0 -1
  640. package/dist/workspace-C1PZmk8L.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"admin.js","names":["Text","DisplayLabel","Grid","Stack","AlertTitle","Alert","AlertDescription","AlertAction","ActionMenu","MonoValue","IconBadge","Badge","Input","Copyable","ContentBlock","CollapsibleContent","CollapsibleTrigger","Collapsible","FormField","Checkbox","ItemMedia","ItemActions","ItemContent","Item","defaultRolePermissionStrings","count","RolePermission","stringsProp","strings","useStrings","cn","className","roleName","description","memberCount","sections","section","perm","Check","Minus","onEdit","Button","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-5\" 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-radius 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-3\">\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-2.5\">\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-radius-sm bg-muted px-2 py-1\">\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<div 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\" className=\"mt-0.5\">\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</div>\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-radius-md bg-background px-2 py-1\"\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-md border border-border/70 bg-background px-3 py-2\"\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":";;;;;;;;;;;;;;;;;;;;;;;AAWA,IAAawB,IAAgE;CAC5E,UAAU;CACV,mBAAmB;CACnB,kBAAkB;CAClB,oBAAoB,MAAU,GAAGC,EAAM;AACxC;;;ACIA,SAAgBC,EAAe,EAC9B,aACA,gBACA,gBACA,aACA,WACA,cACA,SAASC,KACc;CACvB,IAAMC,IAAUC,EAAWL,GAA8BG,CAAW;CACpE,OACC,kBAAC,OAAD;EACC,kBAAe;EACf,aAAU;EACV,WAAWG,EAAG,8BAA8BC,CAAS;EAHtD,UAAA;GAKC,kBAAC5B,GAAD;IAAO,WAAU;IAAa,KAAI;IAAK,OAAM;IAAQ,SAAQ;IAAU,WAAU;IAAjF,UAAA,CACC,kBAACA,GAAD;KAAO,KAAI;KAAS,WAAU;KAA9B,UAAA,CACC,kBAACH,GAAD;MAAM,QAAO;MAAY,UAAAgC;KAAe,CAAA,GACvC,CAAC,CAACC,KAAe,kBAACjC,GAAD;MAAM,MAAK;MAAK,MAAK;MAAa,UAAAiC;KAAkB,CAAA,CAChE;IACN,CAAA,GAAAC,MAAgB,KAAA,KAAa,kBAACvB,GAAD;KAAO,MAAK;KAAQ,UAAAiB,EAAQ,kBAAkBM,CAAW;IAAS,CAAA,CAC1F;;GAEP,kBAAC/B,GAAD;IAAO,KAAI;IAAK,WAAU;IACxB,UAAAgC,EAAS,KAAK,MACd,kBAAC,OAAD,EAAA,UAAA,CACC,kBAAClC,GAAD,EAAA,UACEmC,EAAQ,KACI,CAAA,GACd,kBAAC,OAAD;KAAK,WAAU;KACb,UAAAA,EAAQ,YAAY,KAAK,MACzB,kBAAC,OAAD;MAAsB,WAAU;MAAhC,UAAA,CACC,kBAAC,QAAD;OACC,MAAK;OACL,cAAY,GAAGC,EAAK,MAAM,IAAIA,EAAK,SAAST,EAAQ,oBAAoBA,EAAQ;OAChF,WAAWE,EAAG,qCAAqCO,EAAK,SAAS,iBAAiB,uBAAuB;OAExG,UAAAA,EAAK,SAAS,kBAACC,GAAD;QAAO,WAAU;QAAY,eAAA;OAAa,CAAA,IAAI,kBAACC,GAAD;QAAO,WAAU;QAAY,eAAA;OAAa,CAAA;MAClG,CAAA,GACN,kBAACvC,GAAD;OAAM,WAAWqC,EAAK,SAAS,oBAAoB;OACjD,UAAAA,EAAK;MACD,CAAA,CACF;KAXK,GAAAA,EAAK,KAWV,CACL;IACG,CAAA,CACD,EAAA,GApBKD,EAAQ,IAoBb,CACL;GACK,CAAA;GAEN,CAAC,CAACI,KACF,kBAACC,GAAD;IAAQ,MAAK;IAAY,aAAY;IAAQ,MAAMC;IAAQ,WAAU;IAAO,SAASF;IACnF,UAAAZ,EAAQ;GACF,CAAA;EAEL;;AAEP;AAEA,EAAe,cAAc;;;AC/D7B,IAAae,IAA8C;CAC1D,OAAO;CACP,SAAS;CACT,aAAa;CACb,cAAc;CACd,gBAAgB;CAChB,gBAAgB;CAChB,kBAAkB;CAClB,gBAAgB;CAChB,cAAc;AACf,GCWaC,IAAaC,EAA4C,SAAoB,EACzF,UACA,iBAAc,IACd,SACA,iBACA,UACA,aACA,WACA,UACA,cACA,SAASlB,KACP,GAAK;CACP,IAAMC,IAAUC,EAAWc,GAA0BhB,CAAW,GAC1DmB,IAAeC,MAAS,KAAA,GACxB,CAACC,GAAcC,KAAmBC,EAASC,CAAW,GACtDC,IAAWN,IAAeC,IAAOC,GAEjCK,IAAmBC,GACvB,MAAkB;EAElB,AADKR,KAAcG,EAAgBM,CAAI,GACvCC,IAAeD,CAAI;CACpB,GACA,CAACT,GAAcU,CAAY,CAC5B;CAEA,OACC,kBAAC,OAAD;EACM;EACL,kBAAe;EACf,aAAU;EACV,WAAW1B,EAAG,2DAA2DC,CAAS;EAElF,UAAA,kBAACd,GAAD;GAAa,MAAMmC;GAAU,cAAcC;GAA3C,UAAA,CACC,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACC,kBAACrC,GAAD;KAAoB,SAAA;KACnB,UAAA,kBAACyB,GAAD;MACC,MAAK;MACL,MAAK;MACL,aAAY;MACZ,MAAK;MAIL,WAAU;MARX,UAAA,CAUC,kBAACgB,IAAD;OACC,eAAY;OACZ,WAAW3B,EACV,wDACAsB,KAAY,WACb;MACA,CAAA,GACD,kBAACpD,GAAD;OAAM,KAAI;OAAO,QAAO;OACtB,UAAA0D,KAAS9B,EAAQ;MACb,CAAA,CACC;;IACW,CAAA,GACnB,CAAC,CAAC+B,KACF,kBAAClB,GAAD;KACC,MAAK;KACL,aAAY;KACZ,MAAK;KAAK,UAAA;KACV,SAASkB;KACT,cAAY/B,EAAQ;KAEpB,UAAA,kBAACgC,GAAD,EAAM,WAAU,YAAa,CAAA;IACtB,CAAA,CAEL;GACL,CAAA,GAAA,kBAAC7C,GAAD;IAAoB,WAAU;IAC5B,UAAA8C,EAAM,WAAW,IACjB,kBAAC7D,GAAD;KAAM,MAAK;KACT,UAAA4B,EAAQ;IACJ,CAAA,IAEN,kBAACzB,GAAD;KAAO,KAAI;KACT,UAAA0D,EAAM,KAAK,MACX,kBAACC,GAAD;MAEO;MACI;MACF;MACR,eAAelC,EAAQ;MACvB,iBAAiBA,EAAQ;MACzB,iBAAiBA,EAAQ;MACzB,aAAaA,EAAQ;MACrB,kBAAkBA,EAAQ;MAC1B,gBAAgBA,EAAQ;KACxB,GAVKmC,EAAK,EAUV,CACD;IACK,CAAA;GAEW,CAAA,CACR;;CACT,CAAA;AAEP,CAAC;AAED,EAAW,cAAc;AAgBzB,SAASD,EAAU,EAClB,SACA,aACA,WACA,kBACA,oBACA,oBACA,gBACA,qBACA,qBACkB;CAClB,IAAM,CAACE,GAAQC,KAAaf,EAAS,EAAK,GAEpCgB,IAAaZ,EAAY,YAAY;EAC1C,IAAI;GAKH,AAJA,MAAM,UAAU,UAAU,UAAUS,EAAK,KAAK,GAC9CE,EAAU,EAAI,GACd,iBAAiBA,EAAU,EAAK,GAAG,IAAI,GACvCE,EAAM,QAAQC,CAAgB,GAC9BC,IAASN,EAAK,IAAIA,CAAI;EACvB,QAAc;GACb,EAAM,MAAMO,CAAc;EAI3B;CACD,GAAG;EAACP;EAAMM;EAAQD;EAAkBE;CAAc,CAAC,GAE7CC,IAAUR,EAAK,gBAAgBA,EAAK,OACpCS,IAA8B,CACnC,GAAIT,EAAK,aAAa,KAQjB,CAAC,IARwB,CAAC;EAC9B,IAAI;EACJ,OAAOC,IAASS,IAAkBC;EAClC,MAAMC;EACN,eAAe;GACd,EAAgB;EACjB;EACA,UAAUZ,EAAK;CAChB,CAAC,GACD,GAAIa,IAAW,CAAC;EACf,IAAI;EACJ,OAAOC;EACP,MAAMC;EACN,MAAM;EACN,UAAUf,EAAK;EACf,eAAea,EAASb,EAAK,IAAIA,CAAI;CACtC,CAAC,IAAI,CAAC,CACP;CAEA,OACC,kBAACxC,GAAD;EAAM,MAAK;EAAK,aAAU;EAAc,WAAU;EAAlD,UAAA;GACC,kBAACH,GAAD;IAAW,SAAQ;IAClB,UAAA,kBAACV,GAAD;KACC,MAAK;KACL,OAAM;KACN,MAAK;KACL,UAAA;KACA,WAAU;KAET,UAAAqD,EAAK,QAAQ,kBAACgB,GAAD,EAAM,WAAU,eAAgB,CAAA;IACpC,CAAA;GACD,CAAA;GACX,kBAACzD,GAAD;IAAa,WAAU;IAAvB,UAAA,CACC,kBAACtB,GAAD;KAAM,KAAI;KAAO,QAAO;KAAS,WAAU;KACzC,UAAA+D,EAAK;IACD,CAAA,GACN,kBAACtD,GAAD;KAAW,WAAU;KACnB,UAAA8D;IACS,CAAA,CACC;;GACb,kBAAClD,GAAD;IAAa,WAAU;IACtB,UAAA,kBAACb,GAAD;KACU;KACT,QAAQwE;KACR,OAAM;KACN,eAAA;KACA,aAAa;MAAE,aAAa;MAAS,MAAM;KAAY;IACvD,CAAA;GACW,CAAA;EACR;;AAER;AAEA,EAAU,cAAc;;;AC1LxB,SAAgBC,EAAoB,EACnC,UACA,gBACA,iBACA,WACA,MAAMC,IAAOC,GACb,aAAU,MACV,aAAU,QACV,gBAC4B;CAC5B,OACC,kBAACrE,GAAD;EACC,kBAAe;EACf,aAAU;EACD;EACA;EACT,WAAWgB,EAAG,0DAA0DC,CAAS;EACjF,kBAAiB;EANlB,UAAA,CAQC,kBAAC5B,GAAD;GAAO,WAAU;GAAa,OAAM;GAAQ,KAAI;GAAK,WAAU;GAA/D,UAAA;IACC,kBAACO,GAAD;KAAW,MAAMwE;KAAM,MAAK;KAAc,OAAM;KAAS,MAAK;IAAM,CAAA;IACpE,kBAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACC,kBAAClF,GAAD;MAAM,QAAO;MAAY,UAAA0D;KAAY,CAAA,GACpC,CAAC,CAACzB,KACF,kBAACjC,GAAD;MAAM,MAAK;MAAY,WAAU;MAC/B,UAAAiC;KACI,CAAA,CAEH;;IACJ,CAAC,CAACmD,KAAU,kBAAC,OAAD;KAAK,WAAU;KAAY,UAAAA;IAAY,CAAA;GAC9C;EACN,CAAA,GAAA,CAAC,CAACC,KACF,kBAAChF,GAAD;GAAO,MAAK;GAAc,MAAK;GAAO,WAAU;GAC/C,UAAA,kBAACC,GAAD,EAAA,UAAmB+E,EAA+B,CAAA;EAC5C,CAAA,CAEK;;AAEhB;AAUA,IAAaC,IAAgE;CAC5E,OAAO;CACP,aAAa;CACb,aAAa;AACd;AAmBA,SAAgBC,EAAoB,EACnC,UACA,iBACA,UACA,gBACA,WACA,cACA,SAAS5D,KACmB;CAC5B,IAAMC,IAAUC,EAAWyD,GAAmC3D,CAAW;CAEzE,OACC,kBAACtB,GAAD;EACC,kBAAe;EACf,aAAU;EACV,MAAK;EACL,WAAWyB,EAAG,oCAAoCC,CAAS;EAJ5D,UAAA;GAMC,kBAACyD,GAAD,EAAU,WAAU,YAAa,CAAA;GACjC,kBAACpF,GAAD,EAAA,UAAasD,KAAS9B,EAAQ,MAAkB,CAAA;GAChD,kBAACtB,GAAD,EAAA,UACC,kBAACH,GAAD;IAAO,QAAQ,kBAAC,QAAD,CAAO,CAAA;IAAG,KAAI;IAA7B,UAAA,CACC,kBAACH,GAAD;KAAM,KAAI;KAAO,MAAK;KACpB,UAAAiC,KAAeL,EAAQ;IACnB,CAAA,GACN,kBAACf,GAAD;KACQ;KACP,cAAc4E,KAAgBC;KAC9B,MAAA;KACA,UAAA;KACA,WAAU;KACV,SAAS,EAAE,SAAS9D,EAAQ,YAAY;IACxC,CAAA,CACK;GACU,CAAA,EAAA,CAAA;GACjB,CAAC,CAACwD,KAAU,kBAAC7E,GAAD,EAAA,UAAc6E,EAAoB,CAAA;EACzC;;AAET;AA2CA,IAAaO,IAAwD;CACpE,OAAO;CACP,aAAa;CACb,WAAW;CACX,iBAAiB;CACjB,gBAAgB;CAChB,QAAQ;CACR,WAAW;CACX,cAAc;CACd,oBAAoB;AACrB;AA+BA,SAAgBC,EAAgB,EAC/B,WACA,eAAY,CAAC,GACb,iBACA,SACA,iBAAc,IACd,iBACA,sBACA,8BAA2B,CAAC,GAC5B,8BACA,kBACA,kBACA,sBACA,kBACA,YACA,UAAUC,IAAe,IACzB,aAAaC,IAAkB,IAC/B,cAAW,IACX,cACA,SAASnE,MACe;CACxB,IAAMC,IAAUC,EAAW8D,GAA+BhE,EAAW,GAC/DoE,IAAmBC,MAAS,KAAA,GAC5BC,IAAwBC,MAAsB,KAAA,GAC9C,CAACC,GAAcC,KAAmBlD,EAASmD,CAAW,GACtD,CAACC,GAAmBC,KAAwBrD,EAAmB,CAAC,GAAGsD,CAAwB,CAAC,GAC5F,CAACC,GAAcC,KAAmBxD,EAAoD,IAAI,GAC1FyD,IAAeZ,IAAmBC,IAAOG,GACzCS,IAAoBC,SACnBZ,IAAwB,CAAC,GAAGC,CAAiB,IAAII,GACvD;EAACA;EAAmBL;EAAuBC;CAAiB,CAC7D,GACMY,IAAWjB,KAAgBY,MAAiB,UAC5CM,IAAcjB,KAAmBW,MAAiB,cAElDO,IAAU1D,GACd,MAAqB;EAErB,AADKyC,KAAkBK,EAAgBa,CAAQ,GAC/CC,IAAeD,CAAQ;CACxB,GACA,CAAClB,GAAkBmB,CAAY,CAChC,GAEMC,IAAe7D,GACnB,MAA4B;EAE5B,AADK2C,KAAuBM,EAAqBa,CAAa,GAC9DC,IAA4BD,CAAa;CAC1C,GACA,CAACnB,GAAuBoB,CAAyB,CAClD,GAEMC,KAAgBhE,GACpB,GAAmB,MAAuC;EAE1D,IAAMC,IADcgE,MAAY,KAE7B,MAAM,qBAAK,IAAI,IAAI,CAAC,GAAGX,GAAmBY,CAAS,CAAC,CAAC,IACrDZ,EAAkB,QAAQ,MAAOa,MAAOD,CAAS;EACpD,EAAajE,CAAI;CAClB,GACA,CAACqD,GAAmBO,CAAY,CACjC,GAEMO,IAAcpE,EACnB,OACC,GACA,GACA,MACI;EACJ,EAAgBqE,CAAK;EACrB,IAAI;GAEH,AADA,MAAMC,EAAK,GACXC,IAAgB;IAAE,MAAMF;IAAO;GAAQ,CAAC;EACzC,SAASG,GAAO;GAIf,IAAUA,GAAO,EAAE,SAAM,CAAC;EAC3B,UAAU;GACT,EAAgB,IAAI;EACrB;CACD,GACA,CAACD,GAAeE,CAAO,CACxB,GAEMC,KAAe1E,QAAkB;EACtC,IAAI,CAAC2E,GAAe;EACpB,IAAMC,IAAS;GAAE,MAAMvB;GAAc,WAAWC;EAAkB;EAClE,EAAiB,gBAAgBqB,EAAcC,CAAM,GAAGA,CAAM;CAC/D,GAAG;EAACD;EAAerB;EAAmBD;EAAce;CAAW,CAAC,GAE1DS,KAAe7E,GACnB,GAAY,MAA0B;EACtC,AAAK8E,KACLV,EAAiB,gBAAgBU,EAAcX,GAAIY,CAAK,GAAGA,CAAK;CACjE,GACA,CAACD,GAAeV,CAAW,CAC5B,GAEMY,KAAkBhF,QAAkB;EACzC,AAAKiF,KACLb,EAAiB,cAAca,CAAiB;CACjD,GAAG,CAACA,GAAmBb,CAAW,CAAC;CAEnC,OACC,kBAAC5G,GAAD;EACC,kBAAe;EACf,aAAU;EACV,OAAOc,EAAQ;EACf,aAAaA,EAAQ;EACrB,cAAc2G,IACb,kBAAC9F,GAAD;GACC,MAAK;GACL,MAAK;GACL,aAAY;GACZ,SAASsE;GACT,UAAUyB,KAAYC,EAAO,WAAW;GACxC,SAASH;GANV,UAAA,CAQC,kBAACxD,GAAD,EAAQ,WAAU,YAAa,CAAA,GAC9BlD,EAAQ,SACF;EACL,CAAA,IAAA,KAAA;EACJ,WAAWE,EAAG,gCAAgCC,CAAS;EAlBxD,UAAA,CAoBC,kBAAC5B,GAAD;GAAO,KAAI;GAAK,WAAU;GAA1B,UAAA,CACE,CAAC,CAACuI,KACF,kBAACnD,GAAD;IACC,OAAOmD,EAAa;IACpB,cAAcA,EAAa;IAC3B,OAAOA,EAAa,QAAQ9G,EAAQ;IACpC,aAAaA,EAAQ;GACrB,CAAA,GAGH,kBAAC,OAAD;IAAK,WAAU;IACf,UAAA,kBAACzB,GAAD;KAAO,KAAI;KAAX,UAAA;MACC,kBAACe,GAAD;OAAW,OAAOU,EAAQ;OACzB,UAAA,kBAAChB,GAAD;QACC,OAAO+F;QACP,aAAa/E,EAAQ;QACrB,WAAW,MAAUoF,EAAQ2B,EAAM,cAAc,KAAK;QACtD,UAAUH,KAAY1B;OACtB,CAAA;MACS,CAAA;MAEV8B,EAAU,SAAS,KACnB,kBAACzI,GAAD;OAAO,KAAI;OAAK,WAAU;OAA1B,UAAA,CACC,kBAACF,GAAD,EAAA,UAAe2B,EAAQ,eAA6B,CAAA,GACpD,kBAAC1B,GAAD;QAAM,SAAS;SAAE,MAAM;SAAG,IAAI;QAAE;QAAG,KAAI;QACrC,UAAA0I,EAAU,KAAK,MAAY;SAC3B,IAAMrB,IAAUX,EAAkB,SAASiC,EAAQ,EAAE;SACrD,OACC,kBAAC,SAAD;UAEC,WAAU;UAFX,UAAA,CAIC,kBAAC1H,GAAD;WACU;WACT,UAAUqH,KAAY1B,KAAY+B,EAAQ;WAC1C,kBAAkB,MAASvB,GAAcuB,EAAQ,IAAItF,CAAI;UACzD,CAAA,GACD,kBAACpD,GAAD;WAAO,QAAQ,kBAAC,QAAD,CAAO,CAAA;WAAG,KAAI;WAA7B,UAAA,CACC,kBAACH,GAAD;YAAM,KAAI;YAAO,QAAO;YAAU,UAAA6I,EAAQ;WAAY,CAAA,GACrD,CAAC,CAACA,EAAQ,eACV,kBAAC7I,GAAD;YAAM,KAAI;YAAO,MAAK;YAAK,MAAK;YAAa,UAAA6I,EAAQ;WAAkB,CAAA,CAElE;UACD,CAAA,CAAA;SAdD,GAAAA,EAAQ,EAcP;QAET,CAAC;OACI,CAAA,CACA;;MAGR,kBAAC1I,GAAD;OAAO,WAAU;OAAa,KAAI;OAAO,SAAQ;OAChD,UAAA,kBAACsC,GAAD;QACC,MAAK;QACL,MAAK;QACL,SAASqE;QACT,UAAU0B,KAAY,CAACP,KAAiBtB,EAAa,KAAK,CAAC,CAAC,WAAW;QACvE,SAASqB;QALV,UAAA,CAOC,kBAACpE,GAAD,EAAM,WAAU,YAAa,CAAA,GAC5BhC,EAAQ,MACF;;MACF,CAAA;KACD;;GACF,CAAA,CACE;EAEP,CAAA,GAAA,kBAACgB,GAAD;GACC,OAAO6F;GACP,UAAUL,IAAgBD,KAAe,KAAA;EACzC,CAAA,CACY;;AAEhB;AAEA,EAAgB,cAAc"}
1
+ {"version":3,"file":"admin.js","names":["DisplayLabel","Text","Button","Grid","Stack","AlertDescription","AlertAction","Alert","AlertTitle","ActionMenu","MonoValue","IconBadge","Badge","Input","Copyable","FormField","Checkbox","ContentBlock","CollapsibleContent","CollapsibleTrigger","Collapsible","ItemMedia","ItemActions","ItemGroup","ItemContent","Item","defaultRolePermissionStrings","count","RolePermission","stringsProp","strings","useStrings","cn","className","roleName","memberCount","description","sections","section","perm","Check","Minus","onEdit","defaultApiKeyListStrings","ApiKeyList","forwardRef","isControlled","open","internalOpen","setInternalOpen","useState","defaultOpen","expanded","handleOpenChange","useCallback","next","onOpenChange","ChevronRight","title","onAdd","Plus","items","ApiKeyRow","item","copied","setCopied","handleCopy","toast","copyToastSuccess","onCopy","copyToastError","display","actions","copiedMenuLabel","copyMenuLabel","Copy","onDelete","deleteMenuLabel","Trash2","rowMenuAria","SensitiveActionCard","Icon","confirmation","action","defaultCopyableSecretAlertStrings","CopyableSecretAlert","KeyRound","displayValue","value","defaultApiTokenManagerStrings","ApiTokenManager","creatingProp","revokingAllProp","isNameControlled","name","isAbilitiesControlled","selectedAbilities","internalName","setInternalName","defaultName","internalAbilities","setInternalAbilities","defaultSelectedAbilities","pendingPhase","setPendingPhase","resolvedName","resolvedAbilities","useMemo","creating","revokingAll","setName","nextName","onNameChange","setAbilities","nextAbilities","onSelectedAbilitiesChange","toggleAbility","checked","abilityId","id","runMutation","phase","task","onAfterMutate","error","onError","handleCreate","onCreateToken","values","handleRevoke","onRevokeToken","token","handleRevokeAll","onRevokeAllTokens","disabled","tokens","createdToken","event","abilities","ability"],"sources":["../../src/components/blocks/admin/admin.strings.ts","../../src/components/blocks/admin/role-permission/role-permission.tsx","../../src/components/blocks/admin/api-key-list/api-key-list.strings.ts","../../src/components/blocks/admin/api-key-list/api-key-list.tsx","../../src/components/blocks/admin/action-surfaces/index.tsx"],"sourcesContent":["export interface RolePermissionStrings {\n\t/** Edit-role button label. */\n\teditRole: string;\n\t/** Accessible state name for an allowed permission. */\n\tpermissionAllowed?: string;\n\t/** Accessible state name for a permission that is not allowed. */\n\tpermissionDenied?: string;\n\t/** Format string for the member-count badge. Receives the count. */\n\tformatMemberCount: (count: number) => string;\n}\n\nexport const defaultRolePermissionStrings: Required<RolePermissionStrings> = {\n\teditRole: 'Edit role',\n\tpermissionAllowed: 'Allowed',\n\tpermissionDenied: 'Not allowed',\n\tformatMemberCount: (count) => `${count} members`,\n};\n","/**\n * RolePermission — admin surface for a role with description, member\n * count badge, grouped permission states (check vs minus), and an\n * optional Edit button.\n *\n * Strings overridable via `strings` prop. `strings.formatMemberCount` is a\n * function so consumers can localise pluralisation rules.\n */\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { Stack } from '../../../base/structure';\nimport { DisplayLabel } from '../../../typography/display-label';\nimport { Text } from '../../../typography/text';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\nimport { Check, Minus } from 'lucide-react';\n\nimport { defaultRolePermissionStrings } from '../admin.strings';\nimport type { RolePermissionProps } from './types';\n\nexport function RolePermission({\n\troleName,\n\tdescription,\n\tmemberCount,\n\tsections,\n\tonEdit,\n\tclassName,\n\tstrings: stringsProp,\n}: RolePermissionProps) {\n\tconst strings = useStrings(defaultRolePermissionStrings, stringsProp);\n\t// One spacing owner: the outer Stack separates header, sections and the edit\n\t// action; the member count is a neutral count that reads with the role name.\n\treturn (\n\t\t<Stack\n\t\t\tgap=\"2xl\"\n\t\t\tdata-component=\"role-permission\"\n\t\t\tdata-slot=\"role-permission\"\n\t\t\tclassName={cn('role-permission--component', className)}\n\t\t>\n\t\t\t<Stack gap=\"normal\" className=\"role-permission--header\">\n\t\t\t\t<Stack direction=\"horizontal\" wrap align=\"center\" gap=\"sm\">\n\t\t\t\t\t<Text weight=\"semibold\">{roleName}</Text>\n\t\t\t\t\t{memberCount !== undefined && <Badge>{strings.formatMemberCount(memberCount)}</Badge>}\n\t\t\t\t</Stack>\n\t\t\t\t{!!description && <Text size=\"xs\" type=\"secondary\">{description}</Text>}\n\t\t\t</Stack>\n\n\t\t\t<Stack gap=\"xl\">\n\t\t\t\t{sections.map((section) => (\n\t\t\t\t\t<Stack key={section.name} gap=\"md\">\n\t\t\t\t\t\t<DisplayLabel>\n\t\t\t\t\t\t\t{section.name}\n\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t<div className=\"flex flex-wrap gap-space-md\">\n\t\t\t\t\t\t\t{section.permissions.map((perm) => (\n\t\t\t\t\t\t\t\t<div key={perm.label} className=\"flex items-center gap-space-sm\">\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\trole=\"img\"\n\t\t\t\t\t\t\t\t\t\taria-label={`${perm.label}: ${perm.active ? strings.permissionAllowed : strings.permissionDenied}`}\n\t\t\t\t\t\t\t\t\t\tclassName={cn('inline-flex size-icon-sm shrink-0', perm.active ? 'text-success' : 'text-muted-foreground')}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{perm.active ? <Check className=\"size-full\" aria-hidden /> : <Minus className=\"size-full\" aria-hidden />}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t<Text className={perm.active ? 'text-foreground' : 'text-muted-foreground'}>\n\t\t\t\t\t\t\t\t\t\t{perm.label}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</Stack>\n\t\t\t\t))}\n\t\t\t</Stack>\n\n\t\t\t{!!onEdit && (\n\t\t\t\t<div className=\"role-permission--actions\">\n\t\t\t\t\t<Button tone=\"neutral\" buttonStyle=\"outline\" size=\"sm\" onClick={onEdit}>\n\t\t\t\t\t\t{strings.editRole}\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n\nRolePermission.displayName = 'RolePermission';\n","/**\n * Strings for `<ApiKeyList>`. English defaults; deep-merge-overridable.\n */\nexport interface ApiKeyListStrings {\n\t/** Surface title. */\n\ttitle: string;\n\taddAria: string;\n\trowMenuAria: string;\n\tcopyMenuItem: string;\n\tcopiedMenuItem: string;\n\tdeleteMenuItem: string;\n\tcopyToastSuccess: string;\n\tcopyToastError: string;\n\temptyMessage: string;\n}\n\nexport const defaultApiKeyListStrings: ApiKeyListStrings = {\n\ttitle: 'API keys',\n\taddAria: 'Add API key',\n\trowMenuAria: 'Key actions',\n\tcopyMenuItem: 'Copy key',\n\tcopiedMenuItem: 'Copied',\n\tdeleteMenuItem: 'Delete',\n\tcopyToastSuccess: 'Copied to clipboard',\n\tcopyToastError: 'Failed to copy',\n\temptyMessage: 'No keys yet.',\n};\n","/**\n * ApiKeyList — collapsible section listing API keys / credentials with a\n * per-row dropdown menu (Copy / Delete) and an optional add-new action\n * in the header. Generic enough to use for any \"named secret list\":\n * service tokens, webhook URLs, deployment hooks, …\n *\n * Composes:\n * - `base/display/collapsible` (the shadcn-wrapped collapsible shell)\n * - `base/buttons`, `base/badge` (header actions, status pills)\n * - `base/action-menu/ActionMenu` (per-row dropdown)\n * - `base/copyable/Copyable` (copy-to-clipboard with toast)\n *\n * Framework-agnostic — every action is callback-driven; the library\n * doesn't fetch, navigate, or render delete confirmations.\n */\nimport { ChevronRight, Copy, Plus, Trash2 } from 'lucide-react';\nimport { forwardRef, useCallback, useState } from 'react';\nimport { toast } from 'sonner';\n\nimport { Button } from '../../../base/buttons';\nimport {\n\tCollapsible,\n\tCollapsibleContent,\n\tCollapsibleTrigger,\n} from '../../../base/display/collapsible';\nimport { IconBadge } from '../../../base/display/icon-badge';\nimport { Item, ItemActions, ItemContent, ItemGroup, ItemMedia } from '../../../base/item';\nimport { ActionMenu, type ActionMenuAction } from '../../../base/action-menu';\nimport { MonoValue } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultApiKeyListStrings } from './api-key-list.strings';\nimport type { ApiKeyListItem, ApiKeyListProps } from './api-key-list.types';\n\nexport const ApiKeyList = forwardRef<HTMLDivElement, ApiKeyListProps>(function ApiKeyList({\n\titems,\n\tdefaultOpen = true,\n\topen,\n\tonOpenChange,\n\tonAdd,\n\tonDelete,\n\tonCopy,\n\ttitle,\n\tclassName,\n\tstrings: stringsProp,\n}, ref) {\n\tconst strings = useStrings(defaultApiKeyListStrings, stringsProp);\n\tconst isControlled = open !== undefined;\n\tconst [internalOpen, setInternalOpen] = useState(defaultOpen);\n\tconst expanded = isControlled ? open : internalOpen;\n\n\tconst handleOpenChange = useCallback(\n\t\t(next: boolean) => {\n\t\t\tif (!isControlled) setInternalOpen(next);\n\t\t\tonOpenChange?.(next);\n\t\t},\n\t\t[isControlled, onOpenChange],\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tdata-component=\"api-key-list\"\n\t\t\tdata-slot=\"api-key-list\"\n\t\t\tclassName={cn('api-key-list--component @container/api-key-list min-w-0', className)}\n\t\t>\n\t\t\t<Collapsible open={expanded} onOpenChange={handleOpenChange}>\n\t\t\t\t<div className=\"flex items-center gap-space-md\">\n\t\t\t\t\t<CollapsibleTrigger asChild>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\tsize=\"md\"\n\t\t\t\t\t\t\t// Keep the tokenized action height and radius so the toggle lines up with\n\t\t\t\t\t\t\t// the add action beside it; `h-auto` collapsed it to 23px next to a\n\t\t\t\t\t\t\t// 32px sibling. `px-0` stays so the title aligns with the rows below.\n\t\t\t\t\t\t\tclassName=\"h-action flex-1 justify-start gap-space-md rounded-inner px-0 py-0 text-left\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ChevronRight\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'size-icon text-muted-foreground transition-transform',\n\t\t\t\t\t\t\t\t\texpanded && 'rotate-90',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"semibold\">\n\t\t\t\t\t\t\t\t{title ?? strings.title}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</CollapsibleTrigger>\n\t\t\t\t\t{!!onAdd && (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\t\t\tonClick={onAdd}\n\t\t\t\t\t\t\taria-label={strings.addAria}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Plus className=\"size-icon\" />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<CollapsibleContent className=\"pt-space-lg\">\n\t\t\t\t\t{items.length === 0 ? (\n\t\t\t\t\t\t<Text type=\"secondary\">\n\t\t\t\t\t\t\t{strings.emptyMessage}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t// Rows touch: each row's density padding is the only space between keys.\n\t\t\t\t\t\t// (Rows keep their `api-key-row` slot hook, so the group states gap-0.)\n\t\t\t\t\t\t<ItemGroup role=\"list\" className=\"gap-0\">\n\t\t\t\t\t\t\t{items.map((item) => (\n\t\t\t\t\t\t\t\t<ApiKeyRow\n\t\t\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\t\t\tonDelete={onDelete}\n\t\t\t\t\t\t\t\t\tonCopy={onCopy}\n\t\t\t\t\t\t\t\t\tcopyMenuLabel={strings.copyMenuItem}\n\t\t\t\t\t\t\t\t\tcopiedMenuLabel={strings.copiedMenuItem}\n\t\t\t\t\t\t\t\t\tdeleteMenuLabel={strings.deleteMenuItem}\n\t\t\t\t\t\t\t\t\trowMenuAria={strings.rowMenuAria}\n\t\t\t\t\t\t\t\t\tcopyToastSuccess={strings.copyToastSuccess}\n\t\t\t\t\t\t\t\t\tcopyToastError={strings.copyToastError}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t)}\n\t\t\t\t</CollapsibleContent>\n\t\t\t</Collapsible>\n\t\t</div>\n\t);\n});\n\nApiKeyList.displayName = 'ApiKeyList';\n\ninterface ApiKeyRowProps {\n\titem: ApiKeyListItem;\n\t/** Fired when an entry is removed. */\n\tonDelete?: ApiKeyListProps['onDelete'];\n\t/** Fired when an entry is copied. */\n\tonCopy?: ApiKeyListProps['onCopy'];\n\tcopyMenuLabel: string;\n\tcopiedMenuLabel: string;\n\tdeleteMenuLabel: string;\n\trowMenuAria: string;\n\tcopyToastSuccess: string;\n\tcopyToastError: string;\n}\n\nfunction ApiKeyRow({\n\titem,\n\tonDelete,\n\tonCopy,\n\tcopyMenuLabel,\n\tcopiedMenuLabel,\n\tdeleteMenuLabel,\n\trowMenuAria,\n\tcopyToastSuccess,\n\tcopyToastError,\n}: ApiKeyRowProps) {\n\tconst [copied, setCopied] = useState(false);\n\n\tconst handleCopy = useCallback(async () => {\n\t\ttry {\n\t\t\tawait navigator.clipboard.writeText(item.value);\n\t\t\tsetCopied(true);\n\t\t\tsetTimeout(() => setCopied(false), 1500);\n\t\t\ttoast.success(copyToastSuccess);\n\t\t\tonCopy?.(item.id, item);\n\t\t} catch (err) {\n\t\t\ttoast.error(copyToastError);\n\t\t\tif (import.meta.env?.DEV) {\n\t\t\t\tconsole.warn('[ApiKeyList] copy failed', err);\n\t\t\t}\n\t\t}\n\t}, [item, onCopy, copyToastSuccess, copyToastError]);\n\n\tconst display = item.displayValue ?? item.value;\n\tconst actions: ActionMenuAction[] = [\n\t\t...(item.copyable !== false ? [{\n\t\t\tid: 'copy',\n\t\t\tlabel: copied ? copiedMenuLabel : copyMenuLabel,\n\t\t\ticon: Copy,\n\t\t\tonClick: () => {\n\t\t\t\tvoid handleCopy();\n\t\t\t},\n\t\t\tdisabled: item.disabled,\n\t\t}] : []),\n\t\t...(onDelete ? [{\n\t\t\tid: 'delete',\n\t\t\tlabel: deleteMenuLabel,\n\t\t\ticon: Trash2,\n\t\t\ttone: 'destructive' as const,\n\t\t\tdisabled: item.disabled,\n\t\t\tonClick: () => onDelete(item.id, item),\n\t\t}] : []),\n\t];\n\n\treturn (\n\t\t<Item size=\"sm\" role=\"listitem\" data-slot=\"api-key-row\" className=\"flex-nowrap\">\n\t\t\t{/* No default glyph: a lock on every row repeats what the list title says.\n\t\t\t A consumer-supplied icon still renders as neutral media. */}\n\t\t\t{!!item.icon && (\n\t\t\t\t<ItemMedia variant=\"icon\">\n\t\t\t\t\t<IconBadge size=\"sm\" shape=\"square\" tone=\"neutral\" bordered>\n\t\t\t\t\t\t{item.icon}\n\t\t\t\t\t</IconBadge>\n\t\t\t\t</ItemMedia>\n\t\t\t)}\n\t\t\t<ItemContent className=\"min-w-0 flex-row items-center gap-space-md\">\n\t\t\t\t<Text tag=\"span\" weight=\"medium\" className=\"w-20 shrink-0 truncate @md/api-key-list:w-24\">\n\t\t\t\t\t{item.name}\n\t\t\t\t</Text>\n\t\t\t\t<MonoValue className=\"min-w-0 flex-1 truncate rounded-inner bg-muted px-space-md py-space-xs\">\n\t\t\t\t\t{display}\n\t\t\t\t</MonoValue>\n\t\t\t</ItemContent>\n\t\t\t<ItemActions className=\"shrink-0\">\n\t\t\t\t{/* Same compact trigger as the header's add action, so the row height\n\t\t\t\t follows the key preview rather than a taller menu button. */}\n\t\t\t\t<ActionMenu\n\t\t\t\t\tactions={actions}\n\t\t\t\t\tsrText={rowMenuAria}\n\t\t\t\t\talign=\"end\"\n\t\t\t\t\tcloseOnSelect\n\t\t\t\t\tbuttonProps={{ buttonStyle: 'ghost', tone: 'secondary', size: 'sm', className: 'size-action-sm' }}\n\t\t\t\t/>\n\t\t\t</ItemActions>\n\t\t</Item>\n\t);\n}\n\nApiKeyRow.displayName = 'ApiKeyRow';\n","import {\n\tuseCallback,\n\tuseMemo,\n\tuseState,\n\ttype ReactNode } from 'react';\nimport { KeyRound,\n\tPlus,\n\ttype LucideIcon } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { Copyable } from '../../../base/copyable';\nimport { ContentBlock, IconBadge } from '../../../base/display';\nimport { Alert, AlertAction, AlertDescription, AlertTitle } from '../../../base/feedback';\nimport { Checkbox } from '../../../base/choice-inputs';\nimport { FormField } from '../../../base/forms';\nimport { Input } from '../../../base/text-inputs';\nimport { Grid, Stack } from '../../../base/structure';\nimport { DisplayLabel, Text } from '../../../typography';\nimport { useStrings, type StringsProp } from '../../../../lib/strings';\nimport type { CardSurface, ComponentScale } from '../../../../lib/component-vocabulary';\nimport { cn } from '../../../../lib/utils';\n\nimport { ApiKeyList, type ApiKeyListItem } from '../api-key-list';\n\ntype ActionSurfacePadding = ComponentScale;\ntype ActionSurfaceSurface = CardSurface;\n\nexport interface SensitiveActionCardProps {\n\t/** Surface title. */\n\ttitle: ReactNode;\n\t/** Supporting copy shown under the label. */\n\tdescription?: ReactNode;\n\t/** Confirmation copy shown before the action runs. */\n\tconfirmation?: ReactNode;\n\t/** The action this surface performs. */\n\taction?: ReactNode;\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n\t/** Surface inset. */\n\tpadding?: ActionSurfacePadding;\n\t/** Outer chrome. */\n\tsurface?: ActionSurfaceSurface;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n}\n\nexport function SensitiveActionCard({\n\ttitle,\n\tdescription,\n\tconfirmation,\n\taction,\n\ticon: Icon,\n\tpadding = 'md',\n\tsurface = 'card',\n\tclassName,\n}: SensitiveActionCardProps) {\n\treturn (\n\t\t<ContentBlock\n\t\t\tdata-component=\"sensitive-action-card\"\n\t\t\tdata-slot=\"sensitive-action-card\"\n\t\t\tpadding={padding}\n\t\t\tsurface={surface}\n\t\t\tclassName={cn('sensitive-action-card--component border-destructive/30', className)}\n\t\t\tcontentClassName=\"sensitive-action-card--content grid gap-space-lg\"\n\t\t>\n\t\t\t{/* The destructive frame and action carry the danger; an icon is opt-in and\n\t\t\t the confirmation note is copy in the text column, not a nested panel. */}\n\t\t\t<Stack direction=\"horizontal\" align=\"start\" gap=\"lg\" className=\"min-w-0\">\n\t\t\t\t{!!Icon && <IconBadge icon={Icon} tone=\"destructive\" shape=\"square\" size=\"md\" />}\n\t\t\t\t<Stack gap=\"normal\" className=\"min-w-0 flex-1\">\n\t\t\t\t\t<Text weight=\"semibold\">{title}</Text>\n\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t<Text type=\"secondary\">\n\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t\t{!!confirmation && (\n\t\t\t\t\t\t<Text tag=\"div\" type=\"secondary\" role=\"note\" className=\"sensitive-action-card--confirmation\">\n\t\t\t\t\t\t\t{confirmation}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t\t{!!action && <div className=\"shrink-0\">{action}</div>}\n\t\t\t</Stack>\n\t\t</ContentBlock>\n\t);\n}\n\nexport interface CopyableSecretAlertStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcopySuccess: string;\n}\n\nexport const defaultCopyableSecretAlertStrings: CopyableSecretAlertStrings = {\n\ttitle: 'Secret created',\n\tdescription: 'Copy this value now. It may not be shown again.',\n\tcopySuccess: 'Secret copied',\n};\n\nexport interface CopyableSecretAlertProps {\n\t/** Current value. Controlled. */\n\tvalue: string;\n\t/** Formatted value shown to the user. */\n\tdisplayValue?: ReactNode;\n\t/** Surface title. */\n\ttitle?: ReactNode;\n\t/** Supporting copy shown under the label. */\n\tdescription?: ReactNode;\n\t/** The action this surface performs. */\n\taction?: ReactNode;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<CopyableSecretAlertStrings>;\n}\n\nexport function CopyableSecretAlert({\n\tvalue,\n\tdisplayValue,\n\ttitle,\n\tdescription,\n\taction,\n\tclassName,\n\tstrings: stringsProp,\n}: CopyableSecretAlertProps) {\n\tconst strings = useStrings(defaultCopyableSecretAlertStrings, stringsProp);\n\n\treturn (\n\t\t<Alert\n\t\t\tdata-component=\"copyable-secret-alert\"\n\t\t\tdata-slot=\"copyable-secret-alert\"\n\t\t\ttone=\"success\"\n\t\t\tclassName={cn('copyable-secret-alert--component', className)}\n\t\t>\n\t\t\t<KeyRound className=\"size-icon\" />\n\t\t\t<AlertTitle>{title ?? strings.title}</AlertTitle>\n\t\t\t<AlertDescription>\n\t\t\t\t<Stack render={<span />} gap=\"md\">\n\t\t\t\t\t<Text tag=\"span\" type=\"secondary\">\n\t\t\t\t\t\t{description ?? strings.description}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Copyable\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tdisplayValue={displayValue ?? value}\n\t\t\t\t\t\tmono\n\t\t\t\t\t\ttruncate\n\t\t\t\t\t\tclassName=\"copyable-secret-alert--value max-w-full rounded-inner bg-background px-space-md py-space-xs\"\n\t\t\t\t\t\tstrings={{ success: strings.copySuccess }}\n\t\t\t\t\t/>\n\t\t\t\t</Stack>\n\t\t\t</AlertDescription>\n\t\t\t{!!action && <AlertAction>{action}</AlertAction>}\n\t\t</Alert>\n\t);\n}\n\nexport interface ApiTokenAbility {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Display label. */\n\tlabel: ReactNode;\n\t/** Supporting copy shown under the label. */\n\tdescription?: ReactNode;\n\t/** Renders the entry as unselectable. */\n\tdisabled?: boolean;\n}\n\nexport interface ApiTokenCreatedToken {\n\t/** Current value. Controlled. */\n\tvalue: string;\n\t/** Formatted value shown to the user. */\n\tdisplayValue?: ReactNode;\n\t/** Display name. */\n\tname?: ReactNode;\n}\n\nexport interface ApiTokenCreateValues {\n\t/** Display name. */\n\tname: string;\n\t/** Capabilities the viewer is permitted to use. */\n\tabilities: string[];\n}\n\nexport interface ApiTokenManagerStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tnameLabel: string;\n\tnamePlaceholder: string;\n\tabilitiesLabel: string;\n\tcreate: string;\n\trevokeAll: string;\n\tcreatedTitle: string;\n\tcreatedDescription: string;\n}\n\nexport const defaultApiTokenManagerStrings: ApiTokenManagerStrings = {\n\ttitle: 'API tokens',\n\tdescription: 'Create and revoke access tokens.',\n\tnameLabel: 'Token name',\n\tnamePlaceholder: 'Production deploy key',\n\tabilitiesLabel: 'Abilities',\n\tcreate: 'Create token',\n\trevokeAll: 'Revoke all',\n\tcreatedTitle: 'Token created',\n\tcreatedDescription: 'Copy this token now. It will not be shown again.',\n};\n\nexport interface ApiTokenManagerProps {\n\t/** API access credentials to display and manage. */\n\ttokens: ApiKeyListItem[];\n\t/** Capabilities the viewer is permitted to use. */\n\tabilities?: readonly ApiTokenAbility[];\n\tcreatedToken?: ApiTokenCreatedToken | null;\n\t/** Display name. */\n\tname?: string;\n\tdefaultName?: string;\n\tonNameChange?: (name: string) => void;\n\tselectedAbilities?: readonly string[];\n\tdefaultSelectedAbilities?: readonly string[];\n\tonSelectedAbilitiesChange?: (abilities: string[]) => void;\n\t/** Fired when the user asks to create a token. */\n\tonCreateToken?: (values: ApiTokenCreateValues) => void | Promise<void>;\n\tonRevokeToken?: (id: string, token: ApiKeyListItem) => void | Promise<void>;\n\tonRevokeAllTokens?: () => void | Promise<void>;\n\tonAfterMutate?: (event: { type: 'create' | 'revoke' | 'revoke-all'; payload?: unknown }) => void;\n\tonError?: (error: unknown, context: { phase: 'create' | 'revoke' | 'revoke-all' }) => void;\n\tcreating?: boolean;\n\trevokingAll?: boolean;\n\t/** Renders the entry as unselectable. */\n\tdisabled?: boolean;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<ApiTokenManagerStrings>;\n}\n\nexport function ApiTokenManager({\n\ttokens,\n\tabilities = [],\n\tcreatedToken,\n\tname,\n\tdefaultName = '',\n\tonNameChange,\n\tselectedAbilities,\n\tdefaultSelectedAbilities = [],\n\tonSelectedAbilitiesChange,\n\tonCreateToken,\n\tonRevokeToken,\n\tonRevokeAllTokens,\n\tonAfterMutate,\n\tonError,\n\tcreating: creatingProp = false,\n\trevokingAll: revokingAllProp = false,\n\tdisabled = false,\n\tclassName,\n\tstrings: stringsProp,\n}: ApiTokenManagerProps) {\n\tconst strings = useStrings(defaultApiTokenManagerStrings, stringsProp);\n\tconst isNameControlled = name !== undefined;\n\tconst isAbilitiesControlled = selectedAbilities !== undefined;\n\tconst [internalName, setInternalName] = useState(defaultName);\n\tconst [internalAbilities, setInternalAbilities] = useState<string[]>([...defaultSelectedAbilities]);\n\tconst [pendingPhase, setPendingPhase] = useState<'create' | 'revoke' | 'revoke-all' | null>(null);\n\tconst resolvedName = isNameControlled ? name : internalName;\n\tconst resolvedAbilities = useMemo(\n\t\t() => isAbilitiesControlled ? [...selectedAbilities] : internalAbilities,\n\t\t[internalAbilities, isAbilitiesControlled, selectedAbilities],\n\t);\n\tconst creating = creatingProp || pendingPhase === 'create';\n\tconst revokingAll = revokingAllProp || pendingPhase === 'revoke-all';\n\n\tconst setName = useCallback(\n\t\t(nextName: string) => {\n\t\t\tif (!isNameControlled) setInternalName(nextName);\n\t\t\tonNameChange?.(nextName);\n\t\t},\n\t\t[isNameControlled, onNameChange],\n\t);\n\n\tconst setAbilities = useCallback(\n\t\t(nextAbilities: string[]) => {\n\t\t\tif (!isAbilitiesControlled) setInternalAbilities(nextAbilities);\n\t\t\tonSelectedAbilitiesChange?.(nextAbilities);\n\t\t},\n\t\t[isAbilitiesControlled, onSelectedAbilitiesChange],\n\t);\n\n\tconst toggleAbility = useCallback(\n\t\t(abilityId: string, checked: boolean | 'indeterminate') => {\n\t\t\tconst nextChecked = checked === true;\n\t\t\tconst next = nextChecked\n\t\t\t\t? Array.from(new Set([...resolvedAbilities, abilityId]))\n\t\t\t\t: resolvedAbilities.filter((id) => id !== abilityId);\n\t\t\tsetAbilities(next);\n\t\t},\n\t\t[resolvedAbilities, setAbilities],\n\t);\n\n\tconst runMutation = useCallback(\n\t\tasync (\n\t\t\tphase: 'create' | 'revoke' | 'revoke-all',\n\t\t\ttask: () => void | Promise<void>,\n\t\t\tpayload?: unknown,\n\t\t) => {\n\t\t\tsetPendingPhase(phase);\n\t\t\ttry {\n\t\t\t\tawait task();\n\t\t\t\tonAfterMutate?.({ type: phase, payload });\n\t\t\t} catch (error) {\n\t\t\t\tif (import.meta.env?.DEV) {\n\t\t\t\t\tconsole.warn(`[ApiTokenManager] ${phase} failed`, error);\n\t\t\t\t}\n\t\t\t\tonError?.(error, { phase });\n\t\t\t} finally {\n\t\t\t\tsetPendingPhase(null);\n\t\t\t}\n\t\t},\n\t\t[onAfterMutate, onError],\n\t);\n\n\tconst handleCreate = useCallback(() => {\n\t\tif (!onCreateToken) return;\n\t\tconst values = { name: resolvedName, abilities: resolvedAbilities };\n\t\tvoid runMutation('create', () => onCreateToken(values), values);\n\t}, [onCreateToken, resolvedAbilities, resolvedName, runMutation]);\n\n\tconst handleRevoke = useCallback(\n\t\t(id: string, token: ApiKeyListItem) => {\n\t\t\tif (!onRevokeToken) return;\n\t\t\tvoid runMutation('revoke', () => onRevokeToken(id, token), token);\n\t\t},\n\t\t[onRevokeToken, runMutation],\n\t);\n\n\tconst handleRevokeAll = useCallback(() => {\n\t\tif (!onRevokeAllTokens) return;\n\t\tvoid runMutation('revoke-all', onRevokeAllTokens);\n\t}, [onRevokeAllTokens, runMutation]);\n\n\treturn (\n\t\t<ContentBlock\n\t\t\tdata-component=\"api-token-manager\"\n\t\t\tdata-slot=\"api-token-manager\"\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\theaderAction={onRevokeAllTokens ? (\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"destructive\"\n\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\tloading={revokingAll}\n\t\t\t\t\tdisabled={disabled || tokens.length === 0}\n\t\t\t\t\tonClick={handleRevokeAll}\n\t\t\t\t>\n\t\t\t\t\t{strings.revokeAll}\n\t\t\t\t</Button>\n\t\t\t) : undefined}\n\t\t\tclassName={cn('api-token-manager--component', className)}\n\t\t>\n\t\t\t<Stack gap=\"xl\" className=\"api-token-manager--content\">\n\t\t\t\t{!!createdToken && (\n\t\t\t\t\t<CopyableSecretAlert\n\t\t\t\t\t\tvalue={createdToken.value}\n\t\t\t\t\t\tdisplayValue={createdToken.displayValue}\n\t\t\t\t\t\ttitle={createdToken.name ?? strings.createdTitle}\n\t\t\t\t\t\tdescription={strings.createdDescription}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t{/* The form is part of this surface, not a muted box inside it. */}\n\t\t\t<div className=\"api-token-manager--form\">\n\t\t\t<Stack gap=\"lg\">\n\t\t\t\t<FormField label={strings.nameLabel}>\n\t\t\t\t\t<Input\n\t\t\t\t\t\tvalue={resolvedName}\n\t\t\t\t\t\tplaceholder={strings.namePlaceholder}\n\t\t\t\t\t\tonChange={(event) => setName(event.currentTarget.value)}\n\t\t\t\t\t\tdisabled={disabled || creating}\n\t\t\t\t\t/>\n\t\t\t\t</FormField>\n\n\t\t\t\t{abilities.length > 0 && (\n\t\t\t\t\t<Stack gap=\"md\" className=\"api-token-manager--abilities\">\n\t\t\t\t\t\t<DisplayLabel>{strings.abilitiesLabel}</DisplayLabel>\n\t\t\t\t\t\t<Grid columns={{ base: 1, sm: 2 }} gap=\"md\">\n\t\t\t\t\t\t\t{abilities.map((ability) => {\n\t\t\t\t\t\t\t\tconst checked = resolvedAbilities.includes(ability.id);\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<label\n\t\t\t\t\t\t\t\t\t\tkey={ability.id}\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex min-w-0 items-start gap-space-md rounded-radius border border-border/70 bg-background px-row-x py-row-y\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\t\t\t\tchecked={checked}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled || creating || ability.disabled}\n\t\t\t\t\t\t\t\t\t\t\tonCheckedChange={(next) => toggleAbility(ability.id, next)}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t<Stack render={<span />} gap=\"dense\">\n\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"medium\">{ability.label}</Text>\n\t\t\t\t\t\t\t\t\t\t\t{!!ability.description && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">{ability.description}</Text>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</Grid>\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"none\" justify=\"end\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttone=\"primary\"\n\t\t\t\t\t\tloading={creating}\n\t\t\t\t\t\tdisabled={disabled || !onCreateToken || resolvedName.trim().length === 0}\n\t\t\t\t\t\tonClick={handleCreate}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Plus className=\"size-icon\" />\n\t\t\t\t\t\t{strings.create}\n\t\t\t\t\t</Button>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t\t</div>\n\t\t\t</Stack>\n\n\t\t\t<ApiKeyList\n\t\t\t\titems={tokens}\n\t\t\t\tonDelete={onRevokeToken ? handleRevoke : undefined}\n\t\t\t/>\n\t\t</ContentBlock>\n\t);\n}\n\nApiTokenManager.displayName = 'ApiTokenManager';\n"],"mappings":"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"}