@alfakit/vue 0.1.1 → 0.1.6

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 (372) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/AlfakitRoot.js.map +1 -1
  3. package/dist/AlfakitRoot.vue.d.ts.map +1 -1
  4. package/dist/AlfakitRoot.vue_vue_type_script_setup_true_lang.js +3 -1
  5. package/dist/AlfakitRoot.vue_vue_type_script_setup_true_lang.js.map +1 -1
  6. package/dist/components/actions/ActionButton.js.map +1 -1
  7. package/dist/components/actions/ActionButton.vue.d.ts.map +1 -1
  8. package/dist/components/actions/ActionButton.vue_vue_type_script_setup_true_lang.js +160 -159
  9. package/dist/components/actions/ActionButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  10. package/dist/components/actions/ActionGroupMenu.js.map +1 -1
  11. package/dist/components/actions/ActionGroupMenu.vue.d.ts.map +1 -1
  12. package/dist/components/actions/ActionGroupMenu.vue_vue_type_script_setup_true_lang.js +69 -65
  13. package/dist/components/actions/ActionGroupMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  14. package/dist/components/actions/ActionModal.js.map +1 -1
  15. package/dist/components/actions/ActionModal.vue.d.ts.map +1 -1
  16. package/dist/components/actions/ActionModal.vue_vue_type_script_setup_true_lang.js +221 -219
  17. package/dist/components/actions/ActionModal.vue_vue_type_script_setup_true_lang.js.map +1 -1
  18. package/dist/components/ai/AiCopilot.js.map +1 -1
  19. package/dist/components/ai/AiCopilot.vue.d.ts +2 -0
  20. package/dist/components/ai/AiCopilot.vue.d.ts.map +1 -1
  21. package/dist/components/ai/AiCopilot.vue_vue_type_script_setup_true_lang.js +7 -2
  22. package/dist/components/ai/AiCopilot.vue_vue_type_script_setup_true_lang.js.map +1 -1
  23. package/dist/components/cms/CmsPage.vue_vue_type_script_setup_true_lang.js +19 -19
  24. package/dist/components/cms/CmsPage.vue_vue_type_script_setup_true_lang.js.map +1 -1
  25. package/dist/components/cms/LivePreview.js.map +1 -1
  26. package/dist/components/cms/LivePreview.vue.d.ts.map +1 -1
  27. package/dist/components/cms/LivePreview.vue_vue_type_script_setup_true_lang.js +83 -83
  28. package/dist/components/cms/LivePreview.vue_vue_type_script_setup_true_lang.js.map +1 -1
  29. package/dist/components/fields/BuilderField.js.map +1 -1
  30. package/dist/components/fields/BuilderField.vue.d.ts.map +1 -1
  31. package/dist/components/fields/BuilderField.vue_vue_type_script_setup_true_lang.js +162 -157
  32. package/dist/components/fields/BuilderField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  33. package/dist/components/fields/ColorPickerField.js.map +1 -1
  34. package/dist/components/fields/ColorPickerField.vue.d.ts.map +1 -1
  35. package/dist/components/fields/ColorPickerField.vue_vue_type_script_setup_true_lang.js +1 -0
  36. package/dist/components/fields/ColorPickerField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  37. package/dist/components/fields/ComboboxSelect.js.map +1 -1
  38. package/dist/components/fields/ComboboxSelect.vue.d.ts.map +1 -1
  39. package/dist/components/fields/ComboboxSelect.vue_vue_type_script_setup_true_lang.js +1 -1
  40. package/dist/components/fields/ComboboxSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  41. package/dist/components/fields/FileUploadField.js.map +1 -1
  42. package/dist/components/fields/FileUploadField.vue.d.ts.map +1 -1
  43. package/dist/components/fields/FileUploadField.vue_vue_type_script_setup_true_lang.js +183 -183
  44. package/dist/components/fields/FileUploadField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  45. package/dist/components/fields/ImageEditorDialog.js.map +1 -1
  46. package/dist/components/fields/ImageEditorDialog.vue.d.ts.map +1 -1
  47. package/dist/components/fields/ImageEditorDialog.vue_vue_type_script_setup_true_lang.js +46 -46
  48. package/dist/components/fields/ImageEditorDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  49. package/dist/components/fields/KeyValueField.js.map +1 -1
  50. package/dist/components/fields/KeyValueField.vue.d.ts.map +1 -1
  51. package/dist/components/fields/KeyValueField.vue_vue_type_script_setup_true_lang.js +66 -66
  52. package/dist/components/fields/KeyValueField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  53. package/dist/components/fields/ModalTablePicker.js.map +1 -1
  54. package/dist/components/fields/ModalTablePicker.vue.d.ts.map +1 -1
  55. package/dist/components/fields/ModalTablePicker.vue_vue_type_script_setup_true_lang.js +113 -113
  56. package/dist/components/fields/ModalTablePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  57. package/dist/components/fields/OneTimeCodeInputField.js.map +1 -1
  58. package/dist/components/fields/OneTimeCodeInputField.vue_vue_type_script_setup_true_lang.js +1 -2
  59. package/dist/components/fields/OneTimeCodeInputField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  60. package/dist/components/fields/RepeaterField.js.map +1 -1
  61. package/dist/components/fields/RepeaterField.vue.d.ts.map +1 -1
  62. package/dist/components/fields/RepeaterField.vue_vue_type_script_setup_true_lang.js +12 -12
  63. package/dist/components/fields/RepeaterField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  64. package/dist/components/fields/RichEditorInput.js.map +1 -1
  65. package/dist/components/fields/RichEditorInput.vue.d.ts.map +1 -1
  66. package/dist/components/fields/RichEditorInput.vue_vue_type_script_setup_true_lang.js +166 -165
  67. package/dist/components/fields/RichEditorInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  68. package/dist/components/fields/SelectField.js.map +1 -1
  69. package/dist/components/fields/SelectField.vue.d.ts.map +1 -1
  70. package/dist/components/fields/SelectField.vue_vue_type_script_setup_true_lang.js +2 -2
  71. package/dist/components/fields/SelectField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  72. package/dist/components/fields/SliderField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  73. package/dist/components/fields/TableColumnHeaders.js.map +1 -1
  74. package/dist/components/fields/TableColumnHeaders.vue.d.ts.map +1 -1
  75. package/dist/components/fields/TableColumnHeaders.vue_vue_type_script_setup_true_lang.js +6 -3
  76. package/dist/components/fields/TableColumnHeaders.vue_vue_type_script_setup_true_lang.js.map +1 -1
  77. package/dist/components/fields/item-actions.d.ts +2 -2
  78. package/dist/components/fields/item-actions.d.ts.map +1 -1
  79. package/dist/components/fields/item-actions.js +31 -31
  80. package/dist/components/fields/item-actions.js.map +1 -1
  81. package/dist/components/file-manager/FileManagerView.js.map +1 -1
  82. package/dist/components/file-manager/FileManagerView.vue_vue_type_script_setup_true_lang.js +1 -1
  83. package/dist/components/file-manager/FileManagerView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  84. package/dist/components/form/FormBlock.js.map +1 -1
  85. package/dist/components/form/FormBlock.vue.d.ts.map +1 -1
  86. package/dist/components/form/FormBlock.vue_vue_type_script_setup_true_lang.js +81 -77
  87. package/dist/components/form/FormBlock.vue_vue_type_script_setup_true_lang.js.map +1 -1
  88. package/dist/components/form/form-context.js +25 -25
  89. package/dist/components/form/form-context.js.map +1 -1
  90. package/dist/components/kanban/KanbanBoard.js.map +1 -1
  91. package/dist/components/kanban/KanbanBoard.vue.d.ts.map +1 -1
  92. package/dist/components/kanban/KanbanBoard.vue_vue_type_script_setup_true_lang.js +5 -2
  93. package/dist/components/kanban/KanbanBoard.vue_vue_type_script_setup_true_lang.js.map +1 -1
  94. package/dist/components/kanban/KanbanColumnHeader.js.map +1 -1
  95. package/dist/components/kanban/KanbanColumnHeader.vue.d.ts.map +1 -1
  96. package/dist/components/kanban/KanbanColumnHeader.vue_vue_type_script_setup_true_lang.js +64 -64
  97. package/dist/components/kanban/KanbanColumnHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  98. package/dist/components/layout/FusedGroupComponent.js.map +1 -1
  99. package/dist/components/layout/FusedGroupComponent.vue.d.ts.map +1 -1
  100. package/dist/components/layout/FusedGroupComponent.vue_vue_type_script_setup_true_lang.js +1 -0
  101. package/dist/components/layout/FusedGroupComponent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  102. package/dist/components/layout/SectionComponent.js.map +1 -1
  103. package/dist/components/layout/SectionComponent.vue.d.ts.map +1 -1
  104. package/dist/components/layout/SectionComponent.vue_vue_type_script_setup_true_lang.js +23 -23
  105. package/dist/components/layout/SectionComponent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  106. package/dist/components/layout/TabsComponent.js.map +1 -1
  107. package/dist/components/layout/TabsComponent.vue.d.ts.map +1 -1
  108. package/dist/components/layout/TabsComponent.vue_vue_type_script_setup_true_lang.js +76 -55
  109. package/dist/components/layout/TabsComponent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  110. package/dist/components/notifications/NotificationsMenu.js.map +1 -1
  111. package/dist/components/notifications/NotificationsMenu.vue.d.ts.map +1 -1
  112. package/dist/components/notifications/NotificationsMenu.vue_vue_type_script_setup_true_lang.js +44 -42
  113. package/dist/components/notifications/NotificationsMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  114. package/dist/components/panel/DebugPanel.vue_vue_type_script_setup_true_lang.js +8 -8
  115. package/dist/components/panel/DebugPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  116. package/dist/components/panel/GlobalSearch.js.map +1 -1
  117. package/dist/components/panel/GlobalSearch.vue.d.ts.map +1 -1
  118. package/dist/components/panel/GlobalSearch.vue_vue_type_script_setup_true_lang.js +1 -0
  119. package/dist/components/panel/GlobalSearch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  120. package/dist/components/panel/GlobalSearchPalette.js.map +1 -1
  121. package/dist/components/panel/GlobalSearchPalette.vue.d.ts.map +1 -1
  122. package/dist/components/panel/GlobalSearchPalette.vue_vue_type_script_setup_true_lang.js +102 -96
  123. package/dist/components/panel/GlobalSearchPalette.vue_vue_type_script_setup_true_lang.js.map +1 -1
  124. package/dist/components/panel/NavGroup.vue_vue_type_script_setup_true_lang.js +10 -10
  125. package/dist/components/panel/NavGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  126. package/dist/components/panel/NavGroupFlyout.vue_vue_type_script_setup_true_lang.js +9 -9
  127. package/dist/components/panel/NavGroupFlyout.vue_vue_type_script_setup_true_lang.js.map +1 -1
  128. package/dist/components/panel/NavItem.vue_vue_type_script_setup_true_lang.js +16 -16
  129. package/dist/components/panel/NavItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  130. package/dist/components/panel/NavSubItem.vue_vue_type_script_setup_true_lang.js +10 -10
  131. package/dist/components/panel/NavSubItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  132. package/dist/components/panel/ShortcutKeys.js.map +1 -1
  133. package/dist/components/panel/ShortcutKeys.vue.d.ts.map +1 -1
  134. package/dist/components/panel/ShortcutKeys.vue_vue_type_script_setup_true_lang.js +4 -1
  135. package/dist/components/panel/ShortcutKeys.vue_vue_type_script_setup_true_lang.js.map +1 -1
  136. package/dist/components/panel/TenantMenu.js.map +1 -1
  137. package/dist/components/panel/TenantMenu.vue_vue_type_script_setup_true_lang.js +37 -37
  138. package/dist/components/panel/TenantMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  139. package/dist/components/panel/Topbar.vue_vue_type_script_setup_true_lang.js +11 -11
  140. package/dist/components/panel/Topbar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  141. package/dist/components/realtime/use-live-updates.d.ts.map +1 -1
  142. package/dist/components/realtime/use-live-updates.js +24 -23
  143. package/dist/components/realtime/use-live-updates.js.map +1 -1
  144. package/dist/components/table/BooleanCell.vue_vue_type_script_setup_true_lang.js +2 -1
  145. package/dist/components/table/BooleanCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  146. package/dist/components/table/ColumnHeader.js.map +1 -1
  147. package/dist/components/table/ColumnHeader.vue.d.ts.map +1 -1
  148. package/dist/components/table/ColumnHeader.vue_vue_type_script_setup_true_lang.js +55 -49
  149. package/dist/components/table/ColumnHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  150. package/dist/components/table/ColumnManager.js.map +1 -1
  151. package/dist/components/table/ColumnManager.vue.d.ts.map +1 -1
  152. package/dist/components/table/ColumnManager.vue_vue_type_script_setup_true_lang.js +5 -4
  153. package/dist/components/table/ColumnManager.vue_vue_type_script_setup_true_lang.js.map +1 -1
  154. package/dist/components/table/ContentLayoutSort.js.map +1 -1
  155. package/dist/components/table/ContentLayoutSort.vue.d.ts.map +1 -1
  156. package/dist/components/table/ContentLayoutSort.vue_vue_type_script_setup_true_lang.js +5 -5
  157. package/dist/components/table/ContentLayoutSort.vue_vue_type_script_setup_true_lang.js.map +1 -1
  158. package/dist/components/table/GroupHeaderRow.js.map +1 -1
  159. package/dist/components/table/GroupHeaderRow.vue.d.ts.map +1 -1
  160. package/dist/components/table/GroupHeaderRow.vue_vue_type_script_setup_true_lang.js +55 -34
  161. package/dist/components/table/GroupHeaderRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
  162. package/dist/components/table/SelectCell.js.map +1 -1
  163. package/dist/components/table/SelectCell.vue.d.ts.map +1 -1
  164. package/dist/components/table/SelectCell.vue_vue_type_script_setup_true_lang.js +26 -20
  165. package/dist/components/table/SelectCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  166. package/dist/components/table/SelectComboboxCell.vue_vue_type_script_setup_true_lang.js +2 -1
  167. package/dist/components/table/SelectComboboxCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  168. package/dist/components/table/TableCellContent.js.map +1 -1
  169. package/dist/components/table/TableCellContent.vue.d.ts.map +1 -1
  170. package/dist/components/table/TableCellContent.vue_vue_type_script_setup_true_lang.js +4 -3
  171. package/dist/components/table/TableCellContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  172. package/dist/components/table/TablePagination.js.map +1 -1
  173. package/dist/components/table/TablePagination.vue.d.ts.map +1 -1
  174. package/dist/components/table/TablePagination.vue_vue_type_script_setup_true_lang.js +87 -87
  175. package/dist/components/table/TablePagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
  176. package/dist/components/table/TextInputCell.js.map +1 -1
  177. package/dist/components/table/TextInputCell.vue.d.ts.map +1 -1
  178. package/dist/components/table/TextInputCell.vue_vue_type_script_setup_true_lang.js +40 -34
  179. package/dist/components/table/TextInputCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  180. package/dist/components/table/cell-update.d.ts +6 -0
  181. package/dist/components/table/cell-update.d.ts.map +1 -1
  182. package/dist/components/table/cell-update.js.map +1 -1
  183. package/dist/components/translation-manager/TranslationManagerView.vue_vue_type_script_setup_true_lang.js +1 -1
  184. package/dist/components/translation-manager/TranslationManagerView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  185. package/dist/components/ui/CommandAutoHighlight.js +7 -0
  186. package/dist/components/ui/CommandAutoHighlight.js.map +1 -0
  187. package/dist/components/ui/CommandAutoHighlight.vue.d.ts +21 -0
  188. package/dist/components/ui/CommandAutoHighlight.vue.d.ts.map +1 -0
  189. package/dist/components/ui/CommandAutoHighlight.vue_vue_type_script_setup_true_lang.js +18 -0
  190. package/dist/components/ui/CommandAutoHighlight.vue_vue_type_script_setup_true_lang.js.map +1 -0
  191. package/dist/components/ui/DialogContent.js.map +1 -1
  192. package/dist/components/ui/DialogContent.vue.d.ts.map +1 -1
  193. package/dist/components/ui/DialogContent.vue_vue_type_script_setup_true_lang.js +13 -12
  194. package/dist/components/ui/DialogContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  195. package/dist/components/ui/PopoverContent.js.map +1 -1
  196. package/dist/components/ui/PopoverContent.vue.d.ts.map +1 -1
  197. package/dist/components/ui/PopoverContent.vue_vue_type_script_setup_true_lang.js +9 -8
  198. package/dist/components/ui/PopoverContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  199. package/dist/components/ui/SheetContent.js.map +1 -1
  200. package/dist/components/ui/SheetContent.vue.d.ts.map +1 -1
  201. package/dist/components/ui/SheetContent.vue_vue_type_script_setup_true_lang.js +13 -12
  202. package/dist/components/ui/SheetContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  203. package/dist/components/ui/TooltipContent.js.map +1 -1
  204. package/dist/components/ui/TooltipContent.vue.d.ts.map +1 -1
  205. package/dist/components/ui/TooltipContent.vue_vue_type_script_setup_true_lang.js +9 -8
  206. package/dist/components/ui/TooltipContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  207. package/dist/components.css +347 -0
  208. package/dist/context.d.ts +7 -0
  209. package/dist/context.d.ts.map +1 -1
  210. package/dist/context.js +29 -26
  211. package/dist/context.js.map +1 -1
  212. package/dist/create-alfakit.d.ts.map +1 -1
  213. package/dist/create-alfakit.js +33 -31
  214. package/dist/create-alfakit.js.map +1 -1
  215. package/dist/eject-manifest.json +11 -2
  216. package/dist/index.d.ts +1 -0
  217. package/dist/index.d.ts.map +1 -1
  218. package/dist/index.js +219 -217
  219. package/dist/layouts/AppLayout.vue_vue_type_script_setup_true_lang.js +8 -8
  220. package/dist/layouts/AppLayout.vue_vue_type_script_setup_true_lang.js.map +1 -1
  221. package/dist/layouts/AuthLayout.vue_vue_type_script_setup_true_lang.js +9 -9
  222. package/dist/layouts/FullscreenLayout.vue_vue_type_script_setup_true_lang.js +8 -8
  223. package/dist/layouts/FullscreenLayout.vue_vue_type_script_setup_true_lang.js.map +1 -1
  224. package/dist/layouts/TopNavLayout.vue_vue_type_script_setup_true_lang.js +15 -15
  225. package/dist/layouts/TopNavLayout.vue_vue_type_script_setup_true_lang.js.map +1 -1
  226. package/dist/layouts/lazy-layouts.d.ts +10 -0
  227. package/dist/layouts/lazy-layouts.d.ts.map +1 -0
  228. package/dist/layouts/lazy-layouts.js +8 -0
  229. package/dist/layouts/lazy-layouts.js.map +1 -0
  230. package/dist/layouts/panel-layouts.d.ts +8 -0
  231. package/dist/layouts/panel-layouts.d.ts.map +1 -0
  232. package/dist/layouts/panel-layouts.js +15 -0
  233. package/dist/layouts/panel-layouts.js.map +1 -0
  234. package/dist/lib/lazy.d.ts.map +1 -1
  235. package/dist/lib/lazy.js +2 -2
  236. package/dist/lib/lazy.js.map +1 -1
  237. package/dist/pages/PageShell.js.map +1 -1
  238. package/dist/pages/PageShell.vue.d.ts.map +1 -1
  239. package/dist/pages/PageShell.vue_vue_type_script_setup_true_lang.js +39 -42
  240. package/dist/pages/PageShell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  241. package/dist/standalone/AlfakitComponent.js.map +1 -1
  242. package/dist/standalone/AlfakitComponent.vue.d.ts.map +1 -1
  243. package/dist/standalone/AlfakitComponent.vue_vue_type_script_setup_true_lang.js +56 -52
  244. package/dist/standalone/AlfakitComponent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  245. package/dist/standalone/AlfakitToaster.js.map +1 -1
  246. package/dist/standalone/AlfakitToaster.vue.d.ts.map +1 -1
  247. package/dist/standalone/AlfakitToaster.vue_vue_type_script_setup_true_lang.js +23 -15
  248. package/dist/standalone/AlfakitToaster.vue_vue_type_script_setup_true_lang.js.map +1 -1
  249. package/dist/standalone.css +54 -0
  250. package/dist/starter-kit/AlfakitStarterKitRoot.js.map +1 -1
  251. package/dist/starter-kit/AlfakitStarterKitRoot.vue.d.ts +2 -2
  252. package/dist/starter-kit/AlfakitStarterKitRoot.vue.d.ts.map +1 -1
  253. package/dist/starter-kit/AlfakitStarterKitRoot.vue_vue_type_script_setup_true_lang.js +17 -12
  254. package/dist/starter-kit/AlfakitStarterKitRoot.vue_vue_type_script_setup_true_lang.js.map +1 -1
  255. package/dist/starter-kit/dashboard-widgets.d.ts +54 -0
  256. package/dist/starter-kit/dashboard-widgets.d.ts.map +1 -0
  257. package/dist/starter-kit/dashboard-widgets.js +54 -0
  258. package/dist/starter-kit/dashboard-widgets.js.map +1 -0
  259. package/dist/starter-kit/index.d.ts +2 -1
  260. package/dist/starter-kit/index.d.ts.map +1 -1
  261. package/dist/starter-kit/index.js +5 -4
  262. package/dist/starter-kit/runtime.d.ts +6 -0
  263. package/dist/starter-kit/runtime.d.ts.map +1 -1
  264. package/dist/starter-kit/runtime.js +19 -15
  265. package/dist/starter-kit/runtime.js.map +1 -1
  266. package/dist/starter-kit/starter-kit.d.ts.map +1 -1
  267. package/dist/starter-kit/starter-kit.js +8 -8
  268. package/dist/starter-kit/starter-kit.js.map +1 -1
  269. package/dist/starter-kit/widgets/CopilotTrigger.js +7 -0
  270. package/dist/starter-kit/widgets/CopilotTrigger.js.map +1 -0
  271. package/dist/starter-kit/widgets/CopilotTrigger.vue.d.ts +12 -0
  272. package/dist/starter-kit/widgets/CopilotTrigger.vue.d.ts.map +1 -0
  273. package/dist/starter-kit/widgets/CopilotTrigger.vue_vue_type_script_setup_true_lang.js +23 -0
  274. package/dist/starter-kit/widgets/CopilotTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -0
  275. package/dist/starter-kit/widgets/LoadedCopilot.js +7 -0
  276. package/dist/starter-kit/widgets/LoadedCopilot.js.map +1 -0
  277. package/dist/starter-kit/widgets/LoadedCopilot.vue.d.ts +8 -0
  278. package/dist/starter-kit/widgets/LoadedCopilot.vue.d.ts.map +1 -0
  279. package/dist/starter-kit/widgets/LoadedCopilot.vue_vue_type_script_setup_true_lang.js +31 -0
  280. package/dist/starter-kit/widgets/LoadedCopilot.vue_vue_type_script_setup_true_lang.js.map +1 -0
  281. package/dist/starter-kit/widgets/SearchTrigger.js.map +1 -1
  282. package/dist/starter-kit/widgets/SearchTrigger.vue.d.ts.map +1 -1
  283. package/dist/starter-kit/widgets/SearchTrigger.vue_vue_type_script_setup_true_lang.js +1 -0
  284. package/dist/starter-kit/widgets/SearchTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
  285. package/dist/starter-kit/widgets/StarterKitImpersonationBanner.js +7 -0
  286. package/dist/starter-kit/widgets/StarterKitImpersonationBanner.js.map +1 -0
  287. package/dist/starter-kit/widgets/StarterKitImpersonationBanner.vue.d.ts +8 -0
  288. package/dist/starter-kit/widgets/StarterKitImpersonationBanner.vue.d.ts.map +1 -0
  289. package/dist/starter-kit/widgets/StarterKitImpersonationBanner.vue_vue_type_script_setup_true_lang.js +34 -0
  290. package/dist/starter-kit/widgets/StarterKitImpersonationBanner.vue_vue_type_script_setup_true_lang.js.map +1 -0
  291. package/dist/starter-kit/widgets/TenantChooser.js.map +1 -1
  292. package/dist/starter-kit/widgets/TenantChooser.vue_vue_type_script_setup_true_lang.js +1 -1
  293. package/dist/starter-kit/widgets/TenantChooser.vue_vue_type_script_setup_true_lang.js.map +1 -1
  294. package/dist/starter-kit/widgets/index.d.ts +40 -9
  295. package/dist/starter-kit/widgets/index.d.ts.map +1 -1
  296. package/dist/starter-kit/widgets/index.js +21 -18
  297. package/dist/starter-kit/widgets/index.js.map +1 -1
  298. package/dist/starter-kit/widgets/loaded.d.ts +10 -0
  299. package/dist/starter-kit/widgets/loaded.d.ts.map +1 -0
  300. package/dist/starter-kit/widgets/loaded.js +5 -0
  301. package/dist/styles.css +9 -2
  302. package/dist/themes.css +8 -335
  303. package/package.json +3 -3
  304. package/src/AlfakitRoot.vue +9 -1
  305. package/src/components/actions/ActionButton.vue +14 -6
  306. package/src/components/actions/ActionGroupMenu.vue +13 -1
  307. package/src/components/actions/ActionModal.vue +12 -1
  308. package/src/components/ai/AiCopilot.vue +7 -1
  309. package/src/components/cms/LivePreview.vue +8 -2
  310. package/src/components/fields/BuilderField.vue +15 -2
  311. package/src/components/fields/ColorPickerField.vue +1 -0
  312. package/src/components/fields/ComboboxSelect.vue +1 -1
  313. package/src/components/fields/FileUploadField.vue +14 -11
  314. package/src/components/fields/ImageEditorDialog.vue +7 -3
  315. package/src/components/fields/KeyValueField.vue +3 -2
  316. package/src/components/fields/ModalTablePicker.vue +7 -2
  317. package/src/components/fields/OneTimeCodeInputField.vue +1 -1
  318. package/src/components/fields/RepeaterField.vue +2 -3
  319. package/src/components/fields/RichEditorInput.vue +3 -0
  320. package/src/components/fields/SelectField.vue +4 -2
  321. package/src/components/fields/TableColumnHeaders.vue +6 -1
  322. package/src/components/fields/item-actions.ts +31 -10
  323. package/src/components/file-manager/FileManagerView.vue +1 -1
  324. package/src/components/form/FormBlock.vue +26 -1
  325. package/src/components/form/form-context.ts +3 -3
  326. package/src/components/kanban/KanbanBoard.vue +15 -3
  327. package/src/components/kanban/KanbanColumnHeader.vue +6 -4
  328. package/src/components/layout/FusedGroupComponent.vue +1 -0
  329. package/src/components/layout/SectionComponent.vue +10 -4
  330. package/src/components/layout/TabsComponent.vue +61 -5
  331. package/src/components/notifications/NotificationsMenu.vue +11 -0
  332. package/src/components/panel/GlobalSearch.vue +1 -0
  333. package/src/components/panel/GlobalSearchPalette.vue +2 -0
  334. package/src/components/panel/ShortcutKeys.vue +1 -0
  335. package/src/components/panel/TenantMenu.vue +2 -2
  336. package/src/components/realtime/use-live-updates.ts +3 -1
  337. package/src/components/table/ColumnHeader.vue +23 -12
  338. package/src/components/table/ColumnManager.vue +12 -8
  339. package/src/components/table/ContentLayoutSort.vue +7 -1
  340. package/src/components/table/GroupHeaderRow.vue +27 -0
  341. package/src/components/table/SelectCell.vue +5 -2
  342. package/src/components/table/TableCellContent.vue +4 -2
  343. package/src/components/table/TablePagination.vue +12 -7
  344. package/src/components/table/TextInputCell.vue +11 -5
  345. package/src/components/table/cell-update.ts +6 -0
  346. package/src/components/ui/CommandAutoHighlight.vue +27 -0
  347. package/src/components/ui/DialogContent.vue +5 -1
  348. package/src/components/ui/PopoverContent.vue +5 -1
  349. package/src/components/ui/SheetContent.vue +5 -1
  350. package/src/components/ui/TooltipContent.vue +5 -1
  351. package/src/context.ts +10 -0
  352. package/src/create-alfakit.ts +5 -0
  353. package/src/index.ts +2 -0
  354. package/src/layouts/lazy-layouts.ts +14 -0
  355. package/src/layouts/panel-layouts.ts +17 -0
  356. package/src/lib/lazy.ts +11 -1
  357. package/src/pages/PageShell.vue +5 -6
  358. package/src/standalone/AlfakitComponent.vue +17 -6
  359. package/src/standalone/AlfakitToaster.vue +12 -2
  360. package/src/starter-kit/AlfakitStarterKitRoot.vue +12 -3
  361. package/src/starter-kit/dashboard-widgets.ts +93 -0
  362. package/src/starter-kit/index.ts +7 -1
  363. package/src/starter-kit/runtime.ts +17 -1
  364. package/src/starter-kit/starter-kit.ts +2 -1
  365. package/src/starter-kit/widgets/CopilotTrigger.vue +58 -0
  366. package/src/starter-kit/widgets/LoadedCopilot.vue +29 -0
  367. package/src/starter-kit/widgets/SearchTrigger.vue +1 -0
  368. package/src/starter-kit/widgets/StarterKitImpersonationBanner.vue +57 -0
  369. package/src/starter-kit/widgets/TenantChooser.vue +1 -1
  370. package/src/starter-kit/widgets/index.ts +56 -11
  371. package/src/starter-kit/widgets/loaded.ts +9 -0
  372. package/src/styles.css +9 -2
@@ -1 +1 @@
1
- {"version":3,"file":"ContentLayoutSort.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_unref","_Fragment","_renderList","_createBlock","Button","_withCtx","_createCommentVNode","Button_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","ContentLayoutSort_vue_vue_type_script_setup_true_lang_default","props","__props","t","useT","sortable","computed","column","direction","sortBy","value","event","flip","visitTable","openBlock","createElementBlock","createElementVNode","toDisplayString","unref","Fragment","renderList","createBlock","withCtx","ArrowUpIcon","ArrowDownIcon","createCommentVNode"],"sources":["../../../src/components/table/ContentLayoutSort.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ColumnSchema, TableSchema } from '@alfakit/core'\nimport { visitTable } from '@alfakit/core'\nimport { ArrowDownIcon, ArrowUpIcon } from '@lucide/vue'\nimport { computed } from 'vue'\nimport { useT } from '../../context'\nimport Button from '../ui/Button.vue'\n\n/**\n * Sorting for content layouts, which have no column headers: a select of the sortable\n * columns and a direction toggle.\n */\nconst props = defineProps<{ table: TableSchema; columns: ColumnSchema[] }>()\nconst t = useT()\nconst sortable = computed(() => props.columns.filter((column) => column.sortable))\nconst direction = computed(() => props.table.sort?.direction ?? 'asc')\n\nconst sortBy = (event: Event) => {\n const value = (event.target as HTMLSelectElement).value\n visitTable(\n props.table.identifier,\n { sort: value || null, direction: value ? direction.value : null },\n ['page'],\n )\n}\nconst flip = () =>\n visitTable(\n props.table.identifier,\n {\n sort: props.table.sort?.column ?? null,\n direction: direction.value === 'asc' ? 'desc' : 'asc',\n },\n ['page'],\n )\n</script>\n\n<template>\n <div v-if=\"sortable.length > 0\" class=\"flex items-center gap-1\">\n <label class=\"flex items-center gap-2 text-sm\">\n <span class=\"sr-only\">{{ t('table.sort_by', {}, 'Sort by') }}</span>\n <select\n :value=\"props.table.sort?.column ?? ''\"\n class=\"border-input h-8 rounded-md border bg-transparent px-2 text-sm\"\n @change=\"sortBy\"\n >\n <option value=\"\">\n {{ props.table.defaultSortOptionLabel ?? t('table.sort_by', {}, 'Sort by') }}\n </option>\n <option v-for=\"column in sortable\" :key=\"column.name\" :value=\"column.name\">\n {{ column.label }}\n </option>\n </select>\n </label>\n <Button\n v-if=\"props.table.sort\"\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n :aria-label=\"\n direction === 'asc'\n ? t('table.sort_ascending', {}, 'Ascending')\n : t('table.sort_descending', {}, 'Descending')\n \"\n @click=\"flip\"\n >\n <ArrowUpIcon v-if=\"direction === 'asc'\" />\n <ArrowDownIcon v-else />\n </Button>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;EAYA,IAAMmB,IAAQC,GACRC,IAAIC,EAAK,GACTC,IAAWC,QAAeL,EAAM,QAAQ,QAAQ,MAAWM,EAAO,QAAQ,CAAC,GAC3EC,IAAYF,QAAeL,EAAM,MAAM,MAAM,aAAa,KAAK,GAE/DQ,KAAU,MAAiB;GAC/B,IAAMC,IAASC,EAAM,OAA6B;GAClD,EACEV,EAAM,MAAM,YACZ;IAAE,MAAMS,KAAS;IAAM,WAAWA,IAAQF,EAAU,QAAQ;GAAK,GACjE,CAAC,MAAM,CACT;EACF,GACMI,UACJC,EACEZ,EAAM,MAAM,YACZ;GACE,MAAMA,EAAM,MAAM,MAAM,UAAU;GAClC,WAAWO,EAAU,UAAU,QAAQ,SAAS;EAClD,GACA,CAAC,MAAM,CACT;mBAIWH,EAAA,MAAS,SAAM,KAA1BvB,EAAA,GAAAC,EA+BM,OA/BNW,GA+BM,CA9BJV,EAcQ,SAdRW,GAcQ,CAbNX,EAAoE,QAApEY,GAAoEX,EAA3CC,EAAAiB,CAAA,CAAC,CAAA,iBAAA,CAAA,GAAA,SAAA,CAAA,GAAA,CAAA,GAC1BnB,EAWS,UAAA;GAVN,OAAOiB,EAAM,MAAM,MAAM,UAAM;GAChC,OAAM;GACL,UAAQQ;EAETzB,GAAAA,CAAAA,EAES,UAFTc,GAESb,EADJgB,EAAM,MAAM,0BAA0Bf,EAAAiB,CAAA,CAAC,CAAA,iBAAA,CAAA,GAAA,SAAA,CAAA,GAAA,CAAA,IAE5CrB,EAAA,EAAA,GAAAC,EAESI,GAAA,MAAAC,EAFgBiB,EAAA,QAAV,OAAfvB,EAAA,GAAAC,EAES,UAAA;GAF2B,KAAKwB,EAAO;GAAO,OAAOA,EAAO;EAChE,GAAAtB,EAAAsB,EAAO,KAAK,GAAA,GAAAR,CAAA,EAKb,GAAA,GAAA,EAAA,GAAA,IAAAF,CAAA,CAAA,CAAA,GAAAI,EAAM,MAAM,QADpBnB,EAAA,GAAAO,EAcSC,GAAA;;GAZP,MAAK;GACL,SAAQ;GACR,MAAK;GACJ,cAAqBkB,EAAA,UAAS,QAAuBtB,EAAAiB,CAAA,CAAC,CAAA,wBAAA,CAAA,GAAA,WAAA,IAAsDjB,EAAAiB,CAAA,CAAC,CAAA,yBAAA,CAAA,GAAA,YAAA;GAK7G,SAAOS;;GAER,SAAArB,QAA0C,CAAvBiB,EAAA,UAAS,SAA5B1B,EAAA,GAAAO,EAA0CH,EAAAqC,CAAA,GAAA,EAAA,KAAA,EAAA,CAAA,MAC1CzC,EAAA,GAAAO,EAAwBH,EAAAsC,CAAA,GAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA"}
1
+ {"version":3,"file":"ContentLayoutSort.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_unref","_Fragment","_renderList","_createBlock","Button","_withCtx","_createCommentVNode","Button_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","ContentLayoutSort_vue_vue_type_script_setup_true_lang_default","props","__props","t","useT","sortable","computed","column","direction","selected","sortBy","value","event","flip","visitTable","openBlock","createElementBlock","createElementVNode","toDisplayString","unref","Fragment","renderList","createBlock","withCtx","ArrowUpIcon","ArrowDownIcon","createCommentVNode"],"sources":["../../../src/components/table/ContentLayoutSort.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ColumnSchema, TableSchema } from '@alfakit/core'\nimport { visitTable } from '@alfakit/core'\nimport { ArrowDownIcon, ArrowUpIcon } from '@lucide/vue'\nimport { computed } from 'vue'\nimport { useT } from '../../context'\nimport Button from '../ui/Button.vue'\n\n/**\n * Sorting for content layouts, which have no column headers: a select of the sortable\n * columns and a direction toggle.\n */\nconst props = defineProps<{ table: TableSchema; columns: ColumnSchema[] }>()\nconst t = useT()\nconst sortable = computed(() => props.columns.filter((column) => column.sortable))\nconst direction = computed(() => props.table.sort?.direction ?? 'asc')\n// A default sort on a column the select doesn't list (`created_at`) shows the placeholder.\nconst selected = computed(() =>\n sortable.value.some((column) => column.name === props.table.sort?.column)\n ? (props.table.sort?.column ?? '')\n : '',\n)\n\nconst sortBy = (event: Event) => {\n const value = (event.target as HTMLSelectElement).value\n visitTable(\n props.table.identifier,\n { sort: value || null, direction: value ? direction.value : null },\n ['page'],\n )\n}\nconst flip = () =>\n visitTable(\n props.table.identifier,\n {\n sort: props.table.sort?.column ?? null,\n direction: direction.value === 'asc' ? 'desc' : 'asc',\n },\n ['page'],\n )\n</script>\n\n<template>\n <div v-if=\"sortable.length > 0\" class=\"flex items-center gap-1\">\n <label class=\"flex items-center gap-2 text-sm\">\n <span class=\"sr-only\">{{ t('table.sort_by', {}, 'Sort by') }}</span>\n <select\n :value=\"selected\"\n class=\"border-input h-8 rounded-md border bg-transparent px-2 text-sm\"\n @change=\"sortBy\"\n >\n <option value=\"\">\n {{ props.table.defaultSortOptionLabel ?? t('table.sort_by', {}, 'Sort by') }}\n </option>\n <option v-for=\"column in sortable\" :key=\"column.name\" :value=\"column.name\">\n {{ column.label }}\n </option>\n </select>\n </label>\n <Button\n v-if=\"props.table.sort\"\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n :aria-label=\"\n direction === 'asc'\n ? t('table.sort_ascending', {}, 'Ascending')\n : t('table.sort_descending', {}, 'Descending')\n \"\n @click=\"flip\"\n >\n <ArrowUpIcon v-if=\"direction === 'asc'\" />\n <ArrowDownIcon v-else />\n </Button>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;EAYA,IAAMmB,IAAQC,GACRC,IAAIC,EAAK,GACTC,IAAWC,QAAeL,EAAM,QAAQ,QAAQ,MAAWM,EAAO,QAAQ,CAAC,GAC3EC,IAAYF,QAAeL,EAAM,MAAM,MAAM,aAAa,KAAK,GAE/DQ,IAAWH,QACfD,EAAS,MAAM,MAAM,MAAWE,EAAO,SAASN,EAAM,MAAM,MAAM,MAAM,IACnEA,EAAM,MAAM,MAAM,UAAU,KAC7B,EACN,GAEMS,KAAU,MAAiB;GAC/B,IAAMC,IAASC,EAAM,OAA6B;GAClD,EACEX,EAAM,MAAM,YACZ;IAAE,MAAMU,KAAS;IAAM,WAAWA,IAAQH,EAAU,QAAQ;GAAK,GACjE,CAAC,MAAM,CACT;EACF,GACMK,UACJC,EACEb,EAAM,MAAM,YACZ;GACE,MAAMA,EAAM,MAAM,MAAM,UAAU;GAClC,WAAWO,EAAU,UAAU,QAAQ,SAAS;EAClD,GACA,CAAC,MAAM,CACT;mBAIWH,EAAA,MAAS,SAAM,KAA1BvB,EAAA,GAAAC,EA+BM,OA/BNW,GA+BM,CA9BJV,EAcQ,SAdRW,GAcQ,CAbNX,EAAoE,QAApEY,GAAoEX,EAA3CC,EAAAiB,CAAA,CAAC,CAAA,iBAAA,CAAA,GAAA,SAAA,CAAA,GAAA,CAAA,GAC1BnB,EAWS,UAAA;GAVN,OAAOyB,EAAA;GACR,OAAM;GACL,UAAQC;EAET1B,GAAAA,CAAAA,EAES,UAFTc,GAESb,EADJgB,EAAM,MAAM,0BAA0Bf,EAAAiB,CAAA,CAAC,CAAA,iBAAA,CAAA,GAAA,SAAA,CAAA,GAAA,CAAA,IAE5CrB,EAAA,EAAA,GAAAC,EAESI,GAAA,MAAAC,EAFgBiB,EAAA,QAAV,OAAfvB,EAAA,GAAAC,EAES,UAAA;GAF2B,KAAKwB,EAAO;GAAO,OAAOA,EAAO;EAChE,GAAAtB,EAAAsB,EAAO,KAAK,GAAA,GAAAR,CAAA,EAKb,GAAA,GAAA,EAAA,GAAA,IAAAF,CAAA,CAAA,CAAA,GAAAI,EAAM,MAAM,QADpBnB,EAAA,GAAAO,EAcSC,GAAA;;GAZP,MAAK;GACL,SAAQ;GACR,MAAK;GACJ,cAAqBkB,EAAA,UAAS,QAAuBtB,EAAAiB,CAAA,CAAC,CAAA,wBAAA,CAAA,GAAA,WAAA,IAAsDjB,EAAAiB,CAAA,CAAC,CAAA,yBAAA,CAAA,GAAA,YAAA;GAK7G,SAAOU;;GAER,SAAAtB,QAA0C,CAAvBiB,EAAA,UAAS,SAA5B1B,EAAA,GAAAO,EAA0CH,EAAAsC,CAAA,GAAA,EAAA,KAAA,EAAA,CAAA,MAC1C1C,EAAA,GAAAO,EAAwBH,EAAAuC,CAAA,GAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"GroupHeaderRow.js","names":["_sfc_main","GroupHeaderRow_vue_vue_type_script_setup_true_lang_default","GroupHeaderRow_default"],"sources":["../../../src/components/table/GroupHeaderRow.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { TableRecordGroupSchema } from '@alfakit/core'\nimport { ChevronDownIcon, ChevronRightIcon } from '@lucide/vue'\nimport { computed } from 'vue'\nimport { useT } from '../../context'\nimport { Icon } from '../../lib/icons'\nimport Checkbox from '../ui/Checkbox.vue'\nimport TableCell from '../ui/TableCell.vue'\nimport TableRow from '../ui/TableRow.vue'\n\n/** A group heading row (`data-slot=\"table-group\"`), with a collapse toggle when collapsible. */\nconst props = defineProps<{\n group: TableRecordGroupSchema\n collapsed: boolean\n collapsible: boolean\n colSpan: number\n /** `selectGroupsOnly()`: a checkbox selecting the group's records on the page. */\n selection?: { checked: boolean | 'indeterminate'; onChange: (checked: boolean) => void }\n}>()\nconst emit = defineEmits<{ toggle: [] }>()\nconst t = useT()\n\nconst toggleLabel = computed(\n () =>\n `${props.collapsed ? t('table_grouping.expand', {}, 'Expand group') : t('table_grouping.collapse', {}, 'Collapse group')}: ${props.group.title}`,\n)\n</script>\n\n<template>\n <TableRow data-slot=\"table-group\" class=\"bg-muted/50 hover:bg-muted/50\">\n <TableCell :colspan=\"props.colSpan\" class=\"py-2\">\n <span class=\"flex items-center gap-3\">\n <Checkbox\n v-if=\"props.selection\"\n :model-value=\"props.selection.checked\"\n :aria-label=\"t('table.select_group', { group: props.group.title }, 'Select group :group')\"\n @update:model-value=\"props.selection.onChange($event === true)\"\n />\n <button\n v-if=\"props.collapsible\"\n type=\"button\"\n class=\"focus-visible:ring-ring/50 flex items-center gap-2 rounded-sm text-start outline-none focus-visible:ring-[3px]\"\n :aria-expanded=\"!props.collapsed\"\n :aria-label=\"toggleLabel\"\n @click=\"emit('toggle')\"\n >\n <ChevronRightIcon\n v-if=\"props.collapsed\"\n class=\"size-4 shrink-0 rtl:rotate-180\"\n aria-hidden=\"true\"\n />\n <Icon\n v-else\n name=\"alfakit::tables.grouping.collapse-button\"\n :fallback=\"ChevronDownIcon\"\n class=\"size-4 shrink-0\"\n aria-hidden=\"true\"\n />\n <span class=\"flex flex-col items-start\">\n <span class=\"font-medium\">{{ props.group.title }}</span>\n <span\n v-if=\"props.group.description\"\n class=\"text-muted-foreground text-xs font-normal\"\n >{{ props.group.description }}</span\n >\n </span>\n </button>\n <span v-else class=\"flex flex-col items-start\">\n <span class=\"font-medium\">{{ props.group.title }}</span>\n <span v-if=\"props.group.description\" class=\"text-muted-foreground text-xs font-normal\">{{\n props.group.description\n }}</span>\n </span>\n </span>\n </TableCell>\n </TableRow>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"GroupHeaderRow.js","names":["_sfc_main","GroupHeaderRow_vue_vue_type_script_setup_true_lang_default","GroupHeaderRow_default"],"sources":["../../../src/components/table/GroupHeaderRow.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { TableRecordGroupSchema } from '@alfakit/core'\nimport { ChevronDownIcon, ChevronRightIcon } from '@lucide/vue'\nimport { computed } from 'vue'\nimport { useT } from '../../context'\nimport { colorClass, textColorClasses } from '../../lib/colors'\nimport { Icon } from '../../lib/icons'\nimport Checkbox from '../ui/Checkbox.vue'\nimport TableCell from '../ui/TableCell.vue'\nimport TableRow from '../ui/TableRow.vue'\n\n/** A group heading row (`data-slot=\"table-group\"`), with a collapse toggle when collapsible. */\nconst props = defineProps<{\n group: TableRecordGroupSchema\n collapsed: boolean\n collapsible: boolean\n colSpan: number\n /** `selectGroupsOnly()`: a checkbox selecting the group's records on the page. */\n selection?: { checked: boolean | 'indeterminate'; onChange: (checked: boolean) => void }\n}>()\nconst emit = defineEmits<{ toggle: [] }>()\nconst t = useT()\n\n// An enum group shows its `HasIcon` icon, in its `HasColor` colour, before the title.\nconst groupIconClass = computed(\n () => `size-4 shrink-0 ${colorClass(textColorClasses, props.group.color, 'gray')}`,\n)\n\nconst toggleLabel = computed(\n () =>\n `${props.collapsed ? t('table_grouping.expand', {}, 'Expand group') : t('table_grouping.collapse', {}, 'Collapse group')}: ${props.group.title}`,\n)\n</script>\n\n<template>\n <TableRow data-slot=\"table-group\" class=\"bg-muted/50 hover:bg-muted/50\">\n <TableCell :colspan=\"props.colSpan\" class=\"py-2\">\n <span class=\"flex items-center gap-3\">\n <Checkbox\n v-if=\"props.selection\"\n :model-value=\"props.selection.checked\"\n :aria-label=\"t('table.select_group', { group: props.group.title }, 'Select group :group')\"\n @update:model-value=\"props.selection.onChange($event === true)\"\n />\n <button\n v-if=\"props.collapsible\"\n type=\"button\"\n class=\"focus-visible:ring-ring/50 flex items-center gap-2 rounded-sm text-start outline-none focus-visible:ring-[3px]\"\n :aria-expanded=\"!props.collapsed\"\n :aria-label=\"toggleLabel\"\n @click=\"emit('toggle')\"\n >\n <ChevronRightIcon\n v-if=\"props.collapsed\"\n class=\"size-4 shrink-0 rtl:rotate-180\"\n aria-hidden=\"true\"\n />\n <Icon\n v-else\n name=\"alfakit::tables.grouping.collapse-button\"\n :fallback=\"ChevronDownIcon\"\n class=\"size-4 shrink-0\"\n aria-hidden=\"true\"\n />\n <Icon\n v-if=\"props.group.icon\"\n :name=\"props.group.icon\"\n :class=\"groupIconClass\"\n aria-hidden=\"true\"\n />\n <span class=\"flex flex-col items-start\">\n <span class=\"font-medium\">{{ props.group.title }}</span>\n <span\n v-if=\"props.group.description\"\n class=\"text-muted-foreground text-xs font-normal\"\n >{{ props.group.description }}</span\n >\n </span>\n </button>\n <span\n v-else-if=\"props.group.icon\"\n data-slot=\"table-group-title\"\n class=\"flex items-center gap-2\"\n >\n <Icon :name=\"props.group.icon\" :class=\"groupIconClass\" aria-hidden=\"true\" />\n <span class=\"flex flex-col items-start\">\n <span class=\"font-medium\">{{ props.group.title }}</span>\n <span\n v-if=\"props.group.description\"\n class=\"text-muted-foreground text-xs font-normal\"\n >{{ props.group.description }}</span\n >\n </span>\n </span>\n <span v-else class=\"flex flex-col items-start\">\n <span class=\"font-medium\">{{ props.group.title }}</span>\n <span v-if=\"props.group.description\" class=\"text-muted-foreground text-xs font-normal\">{{\n props.group.description\n }}</span>\n </span>\n </span>\n </TableCell>\n </TableRow>\n</template>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"GroupHeaderRow.vue.d.ts","sourceRoot":"","sources":["../../../src/components/table/GroupHeaderRow.vue"],"names":[],"mappings":"AA+EA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAS3D,gGAAgG;AAChG,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,sBAAsB,CAAA;IAC7B,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,kFAAkF;IAClF,SAAS,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,GAAG,eAAe,CAAC;QAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,CAAA;CACzF,CAAC;;;;;;AA4MF,wBAOG"}
1
+ {"version":3,"file":"GroupHeaderRow.vue.d.ts","sourceRoot":"","sources":["../../../src/components/table/GroupHeaderRow.vue"],"names":[],"mappings":"AA0GA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAU3D,gGAAgG;AAChG,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,sBAAsB,CAAA;IAC7B,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,kFAAkF;IAClF,SAAS,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,GAAG,eAAe,CAAC;QAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,CAAA;CACzF,CAAC;;;;;;AA2QF,wBAOG"}
@@ -1,21 +1,29 @@
1
1
  import { useT as e } from "../../context.js";
2
- import t from "../../lib/Icon.js";
3
- import n from "../ui/Checkbox.js";
4
- import r from "../ui/TableCell.js";
5
- import i from "../ui/TableRow.js";
6
- import { computed as a, createBlock as o, createCommentVNode as s, createElementBlock as c, createElementVNode as l, createVNode as u, defineComponent as d, openBlock as f, toDisplayString as p, unref as m, withCtx as h } from "vue";
7
- import { ChevronDownIcon as g, ChevronRightIcon as _ } from "@lucide/vue";
2
+ import { colorClass as t, textColorClasses as n } from "../../lib/colors.js";
3
+ import r from "../../lib/Icon.js";
4
+ import i from "../ui/Checkbox.js";
5
+ import a from "../ui/TableCell.js";
6
+ import o from "../ui/TableRow.js";
7
+ import { computed as s, createBlock as c, createCommentVNode as l, createElementBlock as u, createElementVNode as d, createVNode as f, defineComponent as p, normalizeClass as m, openBlock as h, toDisplayString as g, unref as _, withCtx as v } from "vue";
8
+ import { ChevronDownIcon as y, ChevronRightIcon as b } from "@lucide/vue";
8
9
  //#region src/components/table/GroupHeaderRow.vue?vue&type=script&setup=true&lang.ts
9
- var v = { class: "flex items-center gap-3" }, y = ["aria-expanded", "aria-label"], b = { class: "flex flex-col items-start" }, x = { class: "font-medium" }, S = {
10
+ var x = { class: "flex items-center gap-3" }, S = ["aria-expanded", "aria-label"], C = { class: "flex flex-col items-start" }, w = { class: "font-medium" }, T = {
10
11
  key: 0,
11
12
  class: "text-muted-foreground text-xs font-normal"
12
- }, C = {
13
+ }, E = {
13
14
  key: 2,
15
+ "data-slot": "table-group-title",
16
+ class: "flex items-center gap-2"
17
+ }, D = { class: "flex flex-col items-start" }, O = { class: "font-medium" }, k = {
18
+ key: 0,
19
+ class: "text-muted-foreground text-xs font-normal"
20
+ }, A = {
21
+ key: 3,
14
22
  class: "flex flex-col items-start"
15
- }, w = { class: "font-medium" }, T = {
23
+ }, j = { class: "font-medium" }, M = {
16
24
  key: 0,
17
25
  class: "text-muted-foreground text-xs font-normal"
18
- }, E = /*@__PURE__*/ d({
26
+ }, N = /*@__PURE__*/ p({
19
27
  __name: "GroupHeaderRow",
20
28
  props: {
21
29
  group: {},
@@ -25,39 +33,52 @@ var v = { class: "flex items-center gap-3" }, y = ["aria-expanded", "aria-label"
25
33
  selection: {}
26
34
  },
27
35
  emits: ["toggle"],
28
- setup(d, { emit: E }) {
29
- let D = d, O = E, k = e(), A = a(() => `${D.collapsed ? k("table_grouping.expand", {}, "Expand group") : k("table_grouping.collapse", {}, "Collapse group")}: ${D.group.title}`);
30
- return (e, a) => (f(), o(i, {
36
+ setup(p, { emit: N }) {
37
+ let P = p, F = N, I = e(), L = s(() => `size-4 shrink-0 ${t(n, P.group.color, "gray")}`), R = s(() => `${P.collapsed ? I("table_grouping.expand", {}, "Expand group") : I("table_grouping.collapse", {}, "Collapse group")}: ${P.group.title}`);
38
+ return (e, t) => (h(), c(o, {
31
39
  "data-slot": "table-group",
32
40
  class: "bg-muted/50 hover:bg-muted/50"
33
41
  }, {
34
- default: h(() => [u(r, {
35
- colspan: D.colSpan,
42
+ default: v(() => [f(a, {
43
+ colspan: P.colSpan,
36
44
  class: "py-2"
37
45
  }, {
38
- default: h(() => [l("span", v, [D.selection ? (f(), o(n, {
46
+ default: v(() => [d("span", x, [P.selection ? (h(), c(i, {
39
47
  key: 0,
40
- "model-value": D.selection.checked,
41
- "aria-label": m(k)("table.select_group", { group: D.group.title }, "Select group :group"),
42
- "onUpdate:modelValue": a[0] ||= (e) => D.selection.onChange(e === !0)
43
- }, null, 8, ["model-value", "aria-label"])) : s("", !0), D.collapsible ? (f(), c("button", {
48
+ "model-value": P.selection.checked,
49
+ "aria-label": _(I)("table.select_group", { group: P.group.title }, "Select group :group"),
50
+ "onUpdate:modelValue": t[0] ||= (e) => P.selection.onChange(e === !0)
51
+ }, null, 8, ["model-value", "aria-label"])) : l("", !0), P.collapsible ? (h(), u("button", {
44
52
  key: 1,
45
53
  type: "button",
46
54
  class: "focus-visible:ring-ring/50 flex items-center gap-2 rounded-sm text-start outline-none focus-visible:ring-[3px]",
47
- "aria-expanded": !D.collapsed,
48
- "aria-label": A.value,
49
- onClick: a[1] ||= (e) => O("toggle")
50
- }, [D.collapsed ? (f(), o(m(_), {
51
- key: 0,
52
- class: "size-4 shrink-0 rtl:rotate-180",
53
- "aria-hidden": "true"
54
- })) : (f(), o(m(t), {
55
- key: 1,
56
- name: "alfakit::tables.grouping.collapse-button",
57
- fallback: m(g),
58
- class: "size-4 shrink-0",
55
+ "aria-expanded": !P.collapsed,
56
+ "aria-label": R.value,
57
+ onClick: t[1] ||= (e) => F("toggle")
58
+ }, [
59
+ P.collapsed ? (h(), c(_(b), {
60
+ key: 0,
61
+ class: "size-4 shrink-0 rtl:rotate-180",
62
+ "aria-hidden": "true"
63
+ })) : (h(), c(_(r), {
64
+ key: 1,
65
+ name: "alfakit::tables.grouping.collapse-button",
66
+ fallback: _(y),
67
+ class: "size-4 shrink-0",
68
+ "aria-hidden": "true"
69
+ }, null, 8, ["fallback"])),
70
+ P.group.icon ? (h(), c(_(r), {
71
+ key: 2,
72
+ name: P.group.icon,
73
+ class: m(L.value),
74
+ "aria-hidden": "true"
75
+ }, null, 8, ["name", "class"])) : l("", !0),
76
+ d("span", C, [d("span", w, g(P.group.title), 1), P.group.description ? (h(), u("span", T, g(P.group.description), 1)) : l("", !0)])
77
+ ], 8, S)) : P.group.icon ? (h(), u("span", E, [f(_(r), {
78
+ name: P.group.icon,
79
+ class: m(L.value),
59
80
  "aria-hidden": "true"
60
- }, null, 8, ["fallback"])), l("span", b, [l("span", x, p(D.group.title), 1), D.group.description ? (f(), c("span", S, p(D.group.description), 1)) : s("", !0)])], 8, y)) : (f(), c("span", C, [l("span", w, p(D.group.title), 1), D.group.description ? (f(), c("span", T, p(D.group.description), 1)) : s("", !0)]))])]),
81
+ }, null, 8, ["name", "class"]), d("span", D, [d("span", O, g(P.group.title), 1), P.group.description ? (h(), u("span", k, g(P.group.description), 1)) : l("", !0)])])) : (h(), u("span", A, [d("span", j, g(P.group.title), 1), P.group.description ? (h(), u("span", M, g(P.group.description), 1)) : l("", !0)]))])]),
61
82
  _: 1
62
83
  }, 8, ["colspan"])]),
63
84
  _: 1
@@ -65,6 +86,6 @@ var v = { class: "flex items-center gap-3" }, y = ["aria-expanded", "aria-label"
65
86
  }
66
87
  });
67
88
  //#endregion
68
- export { E as default };
89
+ export { N as default };
69
90
 
70
91
  //# sourceMappingURL=GroupHeaderRow.vue_vue_type_script_setup_true_lang.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GroupHeaderRow.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","TableRow","_withCtx","_createVNode","TableCell","_createElementVNode","Checkbox","_unref","_createCommentVNode","_createElementBlock","Icon","_toDisplayString","Icon_default","Checkbox_default","TableCell_default","TableRow_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","GroupHeaderRow_vue_vue_type_script_setup_true_lang_default","__emit","props","__props","emit","t","useT","toggleLabel","computed","openBlock","createBlock","withCtx","createVNode","createElementVNode","unref","_cache","$event","createCommentVNode","createElementBlock","ChevronRightIcon","ChevronDownIcon","toDisplayString"],"sources":["../../../src/components/table/GroupHeaderRow.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { TableRecordGroupSchema } from '@alfakit/core'\nimport { ChevronDownIcon, ChevronRightIcon } from '@lucide/vue'\nimport { computed } from 'vue'\nimport { useT } from '../../context'\nimport { Icon } from '../../lib/icons'\nimport Checkbox from '../ui/Checkbox.vue'\nimport TableCell from '../ui/TableCell.vue'\nimport TableRow from '../ui/TableRow.vue'\n\n/** A group heading row (`data-slot=\"table-group\"`), with a collapse toggle when collapsible. */\nconst props = defineProps<{\n group: TableRecordGroupSchema\n collapsed: boolean\n collapsible: boolean\n colSpan: number\n /** `selectGroupsOnly()`: a checkbox selecting the group's records on the page. */\n selection?: { checked: boolean | 'indeterminate'; onChange: (checked: boolean) => void }\n}>()\nconst emit = defineEmits<{ toggle: [] }>()\nconst t = useT()\n\nconst toggleLabel = computed(\n () =>\n `${props.collapsed ? t('table_grouping.expand', {}, 'Expand group') : t('table_grouping.collapse', {}, 'Collapse group')}: ${props.group.title}`,\n)\n</script>\n\n<template>\n <TableRow data-slot=\"table-group\" class=\"bg-muted/50 hover:bg-muted/50\">\n <TableCell :colspan=\"props.colSpan\" class=\"py-2\">\n <span class=\"flex items-center gap-3\">\n <Checkbox\n v-if=\"props.selection\"\n :model-value=\"props.selection.checked\"\n :aria-label=\"t('table.select_group', { group: props.group.title }, 'Select group :group')\"\n @update:model-value=\"props.selection.onChange($event === true)\"\n />\n <button\n v-if=\"props.collapsible\"\n type=\"button\"\n class=\"focus-visible:ring-ring/50 flex items-center gap-2 rounded-sm text-start outline-none focus-visible:ring-[3px]\"\n :aria-expanded=\"!props.collapsed\"\n :aria-label=\"toggleLabel\"\n @click=\"emit('toggle')\"\n >\n <ChevronRightIcon\n v-if=\"props.collapsed\"\n class=\"size-4 shrink-0 rtl:rotate-180\"\n aria-hidden=\"true\"\n />\n <Icon\n v-else\n name=\"alfakit::tables.grouping.collapse-button\"\n :fallback=\"ChevronDownIcon\"\n class=\"size-4 shrink-0\"\n aria-hidden=\"true\"\n />\n <span class=\"flex flex-col items-start\">\n <span class=\"font-medium\">{{ props.group.title }}</span>\n <span\n v-if=\"props.group.description\"\n class=\"text-muted-foreground text-xs font-normal\"\n >{{ props.group.description }}</span\n >\n </span>\n </button>\n <span v-else class=\"flex flex-col items-start\">\n <span class=\"font-medium\">{{ props.group.title }}</span>\n <span v-if=\"props.group.description\" class=\"text-muted-foreground text-xs font-normal\">{{\n props.group.description\n }}</span>\n </span>\n </span>\n </TableCell>\n </TableRow>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWA,IAAM2B,IAAQC,GAQRC,IAAOH,GACPI,IAAIC,EAAK,GAETC,IAAcC,QAEhB,GAAGN,EAAM,YAAYG,EAAE,yBAAyB,CAAC,GAAG,cAAc,IAAIA,EAAE,2BAA2B,CAAC,GAAG,gBAAgB,EAAE,IAAIH,EAAM,MAAM,OAC7I;oBAIE3B,EAAA,GAAAC,EA8CWC,GAAA;GA9CD,aAAU;GAAc,OAAM;;GACtC,SAAAC,QA4CY,CA5CZC,EA4CYC,GAAA;IA5CA,SAASsB,EAAM;IAAS,OAAM;;IACxC,SAAAxB,QA0CO,CA1CPG,EA0CO,QA1CPW,GA0CO,CAxCGU,EAAM,aADd3B,EAAA,GAAAC,EAKEM,GAAA;;KAHC,eAAaoB,EAAM,UAAU;KAC7B,cAAYnB,EAAAsB,CAAA,CAAC,CAAA,sBAAA,EAAA,OAAgCH,EAAM,MAAM,MAAK,GAAA,qBAAA;KAC9D,uBAAkB,AAAAa,EAAA,QAAA,MAAEb,EAAM,UAAU,SAASc,MAAM,EAAA;IAG9C,GAAA,MAAA,GAAA,CAAA,eAAA,YAAA,CAAA,KAAAC,EAAA,IAAA,EAAA,GAAAf,EAAM,eADd3B,EAAA,GAAAU,EA4BS,UAAA;;KA1BP,MAAK;KACL,OAAM;KACL,iBAAa,CAAGiB,EAAM;KACtB,cAAYK,EAAA;KACZ,SAAK,AAAAQ,EAAA,QAAA,MAAEX,EAAI,QAAA;IAGJ,GAAA,CAAAF,EAAM,aADd3B,EAAA,GAAAC,EAIEO,EAAAoC,CAAA,GAAA;;KAFA,OAAM;KACN,eAAY;IAEd5C,CAAAA,MAAAA,EAAA,GAAAC,EAMEO,EAAAG,CAAA,GAAA;;KAJA,MAAK;KACJ,UAAUH,EAAAqC,CAAA;KACX,OAAM;KACN,eAAY;IAEdvC,GAAAA,MAAAA,GAAAA,CAAAA,UAAAA,CAAAA,IAAAA,EAOO,QAPPa,GAOO,CANLb,EAAwD,QAAxDc,GAAwDR,EAA3Be,EAAM,MAAM,KAAK,GAAA,CAAA,GAEtCA,EAAM,MAAM,eADpB3B,EAAA,GAAAU,EAIC,QAJDW,GAICT,EADKe,EAAM,MAAM,WAAW,GAAA,CAAA,KAAAe,EAAA,IAAA,EAAA,CAAA,CAAA,CAAA,GAAA,GAAAxB,CAAA,MAIjClB,EAAA,GAAAU,EAKO,QALPY,GAKO,CAJLhB,EAAwD,QAAxDiB,GAAwDX,EAA3Be,EAAM,MAAM,KAAK,GAAA,CAAA,GAClCA,EAAM,MAAM,eAAxB3B,EAAA,GAAAU,EAES,QAFTc,GAESZ,EADPe,EAAM,MAAM,WAAW,GAAA,CAAA,KAAAe,EAAA,IAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"GroupHeaderRow.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","TableRow","_withCtx","_createVNode","TableCell","_createElementVNode","Checkbox","_unref","_createCommentVNode","_createElementBlock","Icon","_normalizeClass","_toDisplayString","Icon_default","Checkbox_default","TableCell_default","TableRow_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","GroupHeaderRow_vue_vue_type_script_setup_true_lang_default","__emit","props","__props","emit","t","useT","groupIconClass","computed","colorClass","textColorClasses","toggleLabel","openBlock","createBlock","withCtx","createVNode","createElementVNode","unref","_cache","$event","createCommentVNode","createElementBlock","ChevronRightIcon","ChevronDownIcon","normalizeClass","toDisplayString"],"sources":["../../../src/components/table/GroupHeaderRow.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { TableRecordGroupSchema } from '@alfakit/core'\nimport { ChevronDownIcon, ChevronRightIcon } from '@lucide/vue'\nimport { computed } from 'vue'\nimport { useT } from '../../context'\nimport { colorClass, textColorClasses } from '../../lib/colors'\nimport { Icon } from '../../lib/icons'\nimport Checkbox from '../ui/Checkbox.vue'\nimport TableCell from '../ui/TableCell.vue'\nimport TableRow from '../ui/TableRow.vue'\n\n/** A group heading row (`data-slot=\"table-group\"`), with a collapse toggle when collapsible. */\nconst props = defineProps<{\n group: TableRecordGroupSchema\n collapsed: boolean\n collapsible: boolean\n colSpan: number\n /** `selectGroupsOnly()`: a checkbox selecting the group's records on the page. */\n selection?: { checked: boolean | 'indeterminate'; onChange: (checked: boolean) => void }\n}>()\nconst emit = defineEmits<{ toggle: [] }>()\nconst t = useT()\n\n// An enum group shows its `HasIcon` icon, in its `HasColor` colour, before the title.\nconst groupIconClass = computed(\n () => `size-4 shrink-0 ${colorClass(textColorClasses, props.group.color, 'gray')}`,\n)\n\nconst toggleLabel = computed(\n () =>\n `${props.collapsed ? t('table_grouping.expand', {}, 'Expand group') : t('table_grouping.collapse', {}, 'Collapse group')}: ${props.group.title}`,\n)\n</script>\n\n<template>\n <TableRow data-slot=\"table-group\" class=\"bg-muted/50 hover:bg-muted/50\">\n <TableCell :colspan=\"props.colSpan\" class=\"py-2\">\n <span class=\"flex items-center gap-3\">\n <Checkbox\n v-if=\"props.selection\"\n :model-value=\"props.selection.checked\"\n :aria-label=\"t('table.select_group', { group: props.group.title }, 'Select group :group')\"\n @update:model-value=\"props.selection.onChange($event === true)\"\n />\n <button\n v-if=\"props.collapsible\"\n type=\"button\"\n class=\"focus-visible:ring-ring/50 flex items-center gap-2 rounded-sm text-start outline-none focus-visible:ring-[3px]\"\n :aria-expanded=\"!props.collapsed\"\n :aria-label=\"toggleLabel\"\n @click=\"emit('toggle')\"\n >\n <ChevronRightIcon\n v-if=\"props.collapsed\"\n class=\"size-4 shrink-0 rtl:rotate-180\"\n aria-hidden=\"true\"\n />\n <Icon\n v-else\n name=\"alfakit::tables.grouping.collapse-button\"\n :fallback=\"ChevronDownIcon\"\n class=\"size-4 shrink-0\"\n aria-hidden=\"true\"\n />\n <Icon\n v-if=\"props.group.icon\"\n :name=\"props.group.icon\"\n :class=\"groupIconClass\"\n aria-hidden=\"true\"\n />\n <span class=\"flex flex-col items-start\">\n <span class=\"font-medium\">{{ props.group.title }}</span>\n <span\n v-if=\"props.group.description\"\n class=\"text-muted-foreground text-xs font-normal\"\n >{{ props.group.description }}</span\n >\n </span>\n </button>\n <span\n v-else-if=\"props.group.icon\"\n data-slot=\"table-group-title\"\n class=\"flex items-center gap-2\"\n >\n <Icon :name=\"props.group.icon\" :class=\"groupIconClass\" aria-hidden=\"true\" />\n <span class=\"flex flex-col items-start\">\n <span class=\"font-medium\">{{ props.group.title }}</span>\n <span\n v-if=\"props.group.description\"\n class=\"text-muted-foreground text-xs font-normal\"\n >{{ props.group.description }}</span\n >\n </span>\n </span>\n <span v-else class=\"flex flex-col items-start\">\n <span class=\"font-medium\">{{ props.group.title }}</span>\n <span v-if=\"props.group.description\" class=\"text-muted-foreground text-xs font-normal\">{{\n props.group.description\n }}</span>\n </span>\n </span>\n </TableCell>\n </TableRow>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectCell.js","names":["_sfc_main","SelectCell_vue_vue_type_script_setup_true_lang_default","SelectCell_default"],"sources":["../../../src/components/table/SelectCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { SelectColumnSchema } from '@alfakit/core'\nimport { isOptionGroup } from '@alfakit/core'\nimport { computed, ref } from 'vue'\nimport { cn } from '../../lib/utils'\nimport { useCellUpdate, type CellProps } from './cell-update'\n\nconst props = defineProps<CellProps>()\nconst schema = computed(() => props.column as SelectColumnSchema)\nconst { update, saving, error } = useCellUpdate(props)\nconst value = ref(\n props.cell.state === null || props.cell.state === undefined ? '' : String(props.cell.state),\n)\n// `optionsRelationship(ignoreRecord: true)`: the record itself is not an option.\nconst options = computed(() =>\n schema.value.options\n .flatMap((option) => (isOptionGroup(option) ? option.options : [option]))\n .filter((option) => !(schema.value.ignoreRecord && option.value === String(props.recordKey))),\n)\n\nconst onChange = (event: Event) => {\n value.value = (event.target as HTMLSelectElement).value\n void update(value.value === '' ? null : value.value)\n}\n</script>\n\n<template>\n <span @click.stop>\n <select\n :value=\"value\"\n :disabled=\"Boolean(props.cell.disabled) || saving\"\n :aria-invalid=\"error ? true : undefined\"\n :class=\"\n cn(\n 'border-input dark:bg-input/30 focus-visible:ring-ring/50 h-8 min-w-32 rounded-md border bg-transparent px-2 text-sm shadow-xs outline-none focus-visible:ring-[3px]',\n error && 'border-destructive',\n )\n \"\n @change=\"onChange\"\n >\n <option v-if=\"schema.selectablePlaceholder\" value=\"\">{{ schema.placeholder ?? '' }}</option>\n <option\n v-for=\"option in options\"\n :key=\"option.value\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n <span v-if=\"error\" class=\"text-destructive block text-xs\">{{ error }}</span>\n </span>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"SelectCell.js","names":["_sfc_main","SelectCell_vue_vue_type_script_setup_true_lang_default","SelectCell_default"],"sources":["../../../src/components/table/SelectCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { SelectColumnSchema } from '@alfakit/core'\nimport { isOptionGroup } from '@alfakit/core'\nimport { computed, ref, useId } from 'vue'\nimport { cn } from '../../lib/utils'\nimport { useCellUpdate, type CellProps } from './cell-update'\n\nconst props = defineProps<CellProps>()\nconst schema = computed(() => props.column as SelectColumnSchema)\nconst { update, saving, error } = useCellUpdate(props)\nconst errorId = useId()\nconst value = ref(\n props.cell.state === null || props.cell.state === undefined ? '' : String(props.cell.state),\n)\n// `optionsRelationship(ignoreRecord: true)`: the record itself is not an option.\nconst options = computed(() =>\n schema.value.options\n .flatMap((option) => (isOptionGroup(option) ? option.options : [option]))\n .filter((option) => !(schema.value.ignoreRecord && option.value === String(props.recordKey))),\n)\n\nconst onChange = (event: Event) => {\n value.value = (event.target as HTMLSelectElement).value\n void update(value.value === '' ? null : value.value)\n}\n</script>\n\n<template>\n <span @click.stop>\n <select\n :value=\"value\"\n :disabled=\"Boolean(props.cell.disabled) || saving\"\n :aria-label=\"props.column.label || props.column.name\"\n :aria-invalid=\"error ? true : undefined\"\n :aria-describedby=\"error ? errorId : undefined\"\n :class=\"\n cn(\n 'border-input dark:bg-input/30 focus-visible:ring-ring/50 h-8 min-w-32 rounded-md border bg-transparent px-2 text-sm shadow-xs outline-none focus-visible:ring-[3px]',\n error && 'border-destructive',\n )\n \"\n @change=\"onChange\"\n >\n <option v-if=\"schema.selectablePlaceholder\" value=\"\">{{ schema.placeholder ?? '' }}</option>\n <option\n v-for=\"option in options\"\n :key=\"option.value\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n <span v-if=\"error\" :id=\"errorId\" class=\"text-destructive block text-xs\">{{ error }}</span>\n </span>\n</template>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectCell.vue.d.ts","sourceRoot":"","sources":["../../../src/components/table/SelectCell.vue"],"names":[],"mappings":"AA2DA,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;;AA6F7D,wBAMG"}
1
+ {"version":3,"file":"SelectCell.vue.d.ts","sourceRoot":"","sources":["../../../src/components/table/SelectCell.vue"],"names":[],"mappings":"AA8DA,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;;AAkG7D,wBAMG"}
@@ -1,45 +1,51 @@
1
1
  import { cn as e } from "../../lib/utils.js";
2
2
  import { useCellUpdate as t } from "./cell-update.js";
3
3
  import { isOptionGroup as n } from "@alfakit/core";
4
- import { Fragment as r, computed as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, defineComponent as c, normalizeClass as l, openBlock as u, ref as d, renderList as f, toDisplayString as p, unref as m, withModifiers as h } from "vue";
4
+ import { Fragment as r, computed as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, defineComponent as c, normalizeClass as l, openBlock as u, ref as d, renderList as f, toDisplayString as p, unref as m, useId as h, withModifiers as g } from "vue";
5
5
  //#region src/components/table/SelectCell.vue?vue&type=script&setup=true&lang.ts
6
- var g = [
6
+ var _ = [
7
7
  "value",
8
8
  "disabled",
9
- "aria-invalid"
10
- ], _ = {
9
+ "aria-label",
10
+ "aria-invalid",
11
+ "aria-describedby"
12
+ ], v = {
11
13
  key: 0,
12
14
  value: ""
13
- }, v = ["value", "disabled"], y = {
14
- key: 0,
15
- class: "text-destructive block text-xs"
16
- }, b = /*@__PURE__*/ c({
15
+ }, y = ["value", "disabled"], b = ["id"], x = /*@__PURE__*/ c({
17
16
  __name: "SelectCell",
18
17
  props: {
19
18
  column: {},
20
19
  cell: {},
21
20
  recordKey: {},
22
21
  token: {},
23
- component: {}
22
+ component: {},
23
+ fromRegistry: { type: Boolean }
24
24
  },
25
25
  setup(c) {
26
- let b = c, x = i(() => b.column), { update: S, saving: C, error: w } = t(b), T = d(b.cell.state === null || b.cell.state === void 0 ? "" : String(b.cell.state)), E = i(() => x.value.options.flatMap((e) => n(e) ? e.options : [e]).filter((e) => !(x.value.ignoreRecord && e.value === String(b.recordKey)))), D = (e) => {
27
- T.value = e.target.value, S(T.value === "" ? null : T.value);
26
+ let x = c, S = i(() => x.column), { update: C, saving: w, error: T } = t(x), E = h(), D = d(x.cell.state === null || x.cell.state === void 0 ? "" : String(x.cell.state)), O = i(() => S.value.options.flatMap((e) => n(e) ? e.options : [e]).filter((e) => !(S.value.ignoreRecord && e.value === String(x.recordKey)))), k = (e) => {
27
+ D.value = e.target.value, C(D.value === "" ? null : D.value);
28
28
  };
29
- return (t, n) => (u(), o("span", { onClick: n[0] ||= h(() => {}, ["stop"]) }, [s("select", {
30
- value: T.value,
31
- disabled: !!b.cell.disabled || m(C),
32
- "aria-invalid": m(w) ? !0 : void 0,
33
- class: l(m(e)("border-input dark:bg-input/30 focus-visible:ring-ring/50 h-8 min-w-32 rounded-md border bg-transparent px-2 text-sm shadow-xs outline-none focus-visible:ring-[3px]", m(w) && "border-destructive")),
34
- onChange: D
35
- }, [x.value.selectablePlaceholder ? (u(), o("option", _, p(x.value.placeholder ?? ""), 1)) : a("", !0), (u(!0), o(r, null, f(E.value, (e) => (u(), o("option", {
29
+ return (t, n) => (u(), o("span", { onClick: n[0] ||= g(() => {}, ["stop"]) }, [s("select", {
30
+ value: D.value,
31
+ disabled: !!x.cell.disabled || m(w),
32
+ "aria-label": x.column.label || x.column.name,
33
+ "aria-invalid": m(T) ? !0 : void 0,
34
+ "aria-describedby": m(T) ? m(E) : void 0,
35
+ class: l(m(e)("border-input dark:bg-input/30 focus-visible:ring-ring/50 h-8 min-w-32 rounded-md border bg-transparent px-2 text-sm shadow-xs outline-none focus-visible:ring-[3px]", m(T) && "border-destructive")),
36
+ onChange: k
37
+ }, [S.value.selectablePlaceholder ? (u(), o("option", v, p(S.value.placeholder ?? ""), 1)) : a("", !0), (u(!0), o(r, null, f(O.value, (e) => (u(), o("option", {
36
38
  key: e.value,
37
39
  value: e.value,
38
40
  disabled: e.disabled
39
- }, p(e.label), 9, v))), 128))], 42, g), m(w) ? (u(), o("span", y, p(m(w)), 1)) : a("", !0)]));
41
+ }, p(e.label), 9, y))), 128))], 42, _), m(T) ? (u(), o("span", {
42
+ key: 0,
43
+ id: m(E),
44
+ class: "text-destructive block text-xs"
45
+ }, p(m(T)), 9, b)) : a("", !0)]));
40
46
  }
41
47
  });
42
48
  //#endregion
43
- export { b as default };
49
+ export { x as default };
44
50
 
45
51
  //# sourceMappingURL=SelectCell.vue_vue_type_script_setup_true_lang.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectCell.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_withModifiers","_createElementVNode","_unref","_normalizeClass","_toDisplayString","_createCommentVNode","_Fragment","_renderList","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","SelectCell_vue_vue_type_script_setup_true_lang_default","props","__props","schema","computed","useCellUpdate","value","ref","options","isOptionGroup","option","onChange","event","update","openBlock","createElementBlock","_cache","withModifiers","createElementVNode","unref","saving","error","normalizeClass","cn","toDisplayString","createCommentVNode","Fragment","renderList"],"sources":["../../../src/components/table/SelectCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { SelectColumnSchema } from '@alfakit/core'\nimport { isOptionGroup } from '@alfakit/core'\nimport { computed, ref } from 'vue'\nimport { cn } from '../../lib/utils'\nimport { useCellUpdate, type CellProps } from './cell-update'\n\nconst props = defineProps<CellProps>()\nconst schema = computed(() => props.column as SelectColumnSchema)\nconst { update, saving, error } = useCellUpdate(props)\nconst value = ref(\n props.cell.state === null || props.cell.state === undefined ? '' : String(props.cell.state),\n)\n// `optionsRelationship(ignoreRecord: true)`: the record itself is not an option.\nconst options = computed(() =>\n schema.value.options\n .flatMap((option) => (isOptionGroup(option) ? option.options : [option]))\n .filter((option) => !(schema.value.ignoreRecord && option.value === String(props.recordKey))),\n)\n\nconst onChange = (event: Event) => {\n value.value = (event.target as HTMLSelectElement).value\n void update(value.value === '' ? null : value.value)\n}\n</script>\n\n<template>\n <span @click.stop>\n <select\n :value=\"value\"\n :disabled=\"Boolean(props.cell.disabled) || saving\"\n :aria-invalid=\"error ? true : undefined\"\n :class=\"\n cn(\n 'border-input dark:bg-input/30 focus-visible:ring-ring/50 h-8 min-w-32 rounded-md border bg-transparent px-2 text-sm shadow-xs outline-none focus-visible:ring-[3px]',\n error && 'border-destructive',\n )\n \"\n @change=\"onChange\"\n >\n <option v-if=\"schema.selectablePlaceholder\" value=\"\">{{ schema.placeholder ?? '' }}</option>\n <option\n v-for=\"option in options\"\n :key=\"option.value\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n <span v-if=\"error\" class=\"text-destructive block text-xs\">{{ error }}</span>\n </span>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;EAOA,IAAMe,IAAQC,GACRC,IAASC,QAAeH,EAAM,MAA4B,GAC1D,EAAE,WAAQ,WAAQ,aAAUI,EAAcJ,CAAK,GAC/CK,IAAQC,EACZN,EAAM,KAAK,UAAU,QAAQA,EAAM,KAAK,UAAU,KAAA,IAAY,KAAK,OAAOA,EAAM,KAAK,KAAK,CAC5F,GAEMO,IAAUJ,QACdD,EAAO,MAAM,QACV,SAAS,MAAYM,EAAcC,CAAM,IAAIA,EAAO,UAAU,CAACA,CAAM,CAAE,CAAA,CACvE,QAAQ,MAAW,EAAEP,EAAO,MAAM,gBAAgBO,EAAO,UAAU,OAAOT,EAAM,SAAS,EAAE,CAChG,GAEMU,KAAY,MAAiB;GAEjC,AADA,EAAM,QAASC,EAAM,OAA6B,OAClDC,EAAYP,EAAM,UAAU,KAAK,OAAOA,EAAM,KAAK;EACrD;oBAIEpB,EAAA,GAAAC,EAwBO,QAAA,EAxBA,SAAK,AAAA6B,EAAA,OAAA5B,QAAN,CAAA,GAAW,CAAA,MAAA,CAAA,EAAA,GAAA,CACfC,EAqBS,UAAA;GApBN,OAAOiB,EAAA;GACP,UAAU,EAAQL,EAAM,KAAK,YAAaX,EAAA8B,CAAA;GAC1C,gBAAc9B,EAAA+B,CAAA,IAAK,KAAU,KAAA;GAC7B,OAAK9B,EAAWD,EAAAiC,CAAA,CAAE,CAAA,uKAA6LjC,EAAA+B,CAAA,KAAK,oBAAA,CAAA;GAM5M;EAEK,GAAA,CAAAlB,EAAA,MAAO,yBAArBjB,EAAA,GAAAC,EAA4F,UAA5FU,GAA4FL,EAApCW,EAAA,MAAO,eAAW,EAAA,GAAA,CAAA,KAAAsB,EAAA,IAAA,EAAA,IAC1EvC,EAAA,EAAA,GAAAC,EAOSO,GAAA,MAAAC,EANUa,EAAA,QAAV,OADTtB,EAAA,GAAAC,EAOS,UAAA;GALN,KAAKuB,EAAO;GACZ,OAAOA,EAAO;GACd,UAAUA,EAAO;EAEf,GAAAlB,EAAAkB,EAAO,KAAK,GAAA,GAAAZ,CAAA,EAGPR,GAAAA,GAAAA,EAAAA,GAAAA,IAAAA,CAAAA,GAAAA,EAAA+B,CAAA,KAAZnC,EAAA,GAAAC,EAA4E,QAA5EY,GAA4EP,EAAfF,EAAA+B,CAAA,CAAK,GAAA,CAAA,KAAAI,EAAA,IAAA,EAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"SelectCell.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_withModifiers","_createElementVNode","_unref","_normalizeClass","_toDisplayString","_createCommentVNode","_Fragment","_renderList","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","SelectCell_vue_vue_type_script_setup_true_lang_default","props","__props","schema","computed","useCellUpdate","errorId","useId","value","ref","options","isOptionGroup","option","onChange","event","update","openBlock","createElementBlock","_cache","withModifiers","createElementVNode","unref","saving","error","normalizeClass","cn","toDisplayString","createCommentVNode","Fragment","renderList"],"sources":["../../../src/components/table/SelectCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { SelectColumnSchema } from '@alfakit/core'\nimport { isOptionGroup } from '@alfakit/core'\nimport { computed, ref, useId } from 'vue'\nimport { cn } from '../../lib/utils'\nimport { useCellUpdate, type CellProps } from './cell-update'\n\nconst props = defineProps<CellProps>()\nconst schema = computed(() => props.column as SelectColumnSchema)\nconst { update, saving, error } = useCellUpdate(props)\nconst errorId = useId()\nconst value = ref(\n props.cell.state === null || props.cell.state === undefined ? '' : String(props.cell.state),\n)\n// `optionsRelationship(ignoreRecord: true)`: the record itself is not an option.\nconst options = computed(() =>\n schema.value.options\n .flatMap((option) => (isOptionGroup(option) ? option.options : [option]))\n .filter((option) => !(schema.value.ignoreRecord && option.value === String(props.recordKey))),\n)\n\nconst onChange = (event: Event) => {\n value.value = (event.target as HTMLSelectElement).value\n void update(value.value === '' ? null : value.value)\n}\n</script>\n\n<template>\n <span @click.stop>\n <select\n :value=\"value\"\n :disabled=\"Boolean(props.cell.disabled) || saving\"\n :aria-label=\"props.column.label || props.column.name\"\n :aria-invalid=\"error ? true : undefined\"\n :aria-describedby=\"error ? errorId : undefined\"\n :class=\"\n cn(\n 'border-input dark:bg-input/30 focus-visible:ring-ring/50 h-8 min-w-32 rounded-md border bg-transparent px-2 text-sm shadow-xs outline-none focus-visible:ring-[3px]',\n error && 'border-destructive',\n )\n \"\n @change=\"onChange\"\n >\n <option v-if=\"schema.selectablePlaceholder\" value=\"\">{{ schema.placeholder ?? '' }}</option>\n <option\n v-for=\"option in options\"\n :key=\"option.value\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n <span v-if=\"error\" :id=\"errorId\" class=\"text-destructive block text-xs\">{{ error }}</span>\n </span>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;EAOA,IAAMe,IAAQC,GACRC,IAASC,QAAeH,EAAM,MAA4B,GAC1D,EAAE,WAAQ,WAAQ,aAAUI,EAAcJ,CAAK,GAC/CK,IAAUC,EAAM,GAChBC,IAAQC,EACZR,EAAM,KAAK,UAAU,QAAQA,EAAM,KAAK,UAAU,KAAA,IAAY,KAAK,OAAOA,EAAM,KAAK,KAAK,CAC5F,GAEMS,IAAUN,QACdD,EAAO,MAAM,QACV,SAAS,MAAYQ,EAAcC,CAAM,IAAIA,EAAO,UAAU,CAACA,CAAM,CAAE,CAAA,CACvE,QAAQ,MAAW,EAAET,EAAO,MAAM,gBAAgBS,EAAO,UAAU,OAAOX,EAAM,SAAS,EAAE,CAChG,GAEMY,KAAY,MAAiB;GAEjC,AADA,EAAM,QAASC,EAAM,OAA6B,OAClDC,EAAYP,EAAM,UAAU,KAAK,OAAOA,EAAM,KAAK;EACrD;oBAIEtB,EAAA,GAAAC,EA0BO,QAAA,EA1BA,SAAK,AAAA+B,EAAA,OAAA9B,QAAN,CAAA,GAAW,CAAA,MAAA,CAAA,EAAA,GAAA,CACfC,EAuBS,UAAA;GAtBN,OAAOmB,EAAA;GACP,UAAU,EAAQP,EAAM,KAAK,YAAaX,EAAAgC,CAAA;GAC1C,cAAYrB,EAAM,OAAO,SAASA,EAAM,OAAO;GAC/C,gBAAcX,EAAAiC,CAAA,IAAK,KAAU,KAAA;GAC7B,oBAAkBjC,EAAAiC,CAAA,IAAQjC,EAAAgB,CAAA,IAAU,KAAA;GACpC,OAAKf,EAAWD,EAAAmC,CAAA,CAAE,CAAA,uKAA6LnC,EAAAiC,CAAA,KAAK,oBAAA,CAAA;GAM5M;EAEK,GAAA,CAAApB,EAAA,MAAO,yBAArBjB,EAAA,GAAAC,EAA4F,UAA5FU,GAA4FL,EAApCW,EAAA,MAAO,eAAW,EAAA,GAAA,CAAA,KAAAwB,EAAA,IAAA,EAAA,IAC1EzC,EAAA,EAAA,GAAAC,EAOSO,GAAA,MAAAC,EANUe,EAAA,QAAV,OADTxB,EAAA,GAAAC,EAOS,UAAA;GALN,KAAKyB,EAAO;GACZ,OAAOA,EAAO;GACd,UAAUA,EAAO;EAEf,GAAApB,EAAAoB,EAAO,KAAK,GAAA,GAAAd,CAAA,EAGPR,GAAAA,GAAAA,EAAAA,GAAAA,IAAAA,CAAAA,GAAAA,EAAAiC,CAAA,KAAZrC,EAAA,GAAAC,EAA0F,QAAA;;GAAtE,IAAIG,EAAAgB,CAAA;GAAS,OAAM;EAAoC,GAAAd,EAAAF,EAAAiC,CAAA,CAAK,GAAA,GAAAxB,CAAA,KAAA4B,EAAA,IAAA,EAAA,CAAA,CAAA"}
@@ -32,7 +32,8 @@ var de = ["innerHTML"], fe = {
32
32
  cell: {},
33
33
  recordKey: {},
34
34
  token: {},
35
- component: {}
35
+ component: {},
36
+ fromRegistry: { type: Boolean }
36
37
  },
37
38
  setup(x) {
38
39
  let j = x, M = t(), N = e(), P = m(() => j.column), { update: F, saving: I, error: L } = o(j), R = w(j.cell.state === null || j.cell.state === void 0 ? "" : String(j.cell.state)), z = w(j.cell.optionLabel), B = w(!1), V = w(""), H = w(!1), U = w([]), W = m(() => !!P.value.optionsSearchPath), G = m(() => P.value.options.flatMap((e) => u(e) ? e.options : [e])), K = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"SelectComboboxCell.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_withModifiers","_createVNode","Popover","_withCtx","PopoverTrigger","Button","_unref","_normalizeClass","_Fragment","_toDisplayString","_createBlock","Spinner","PopoverContent","Command","CommandInput","_createCommentVNode","CommandList","CommandEmpty","_createTextVNode","CommandGroup","CommandItem","_createElementVNode","_renderList","Button_default","Spinner_default","Popover_default","PopoverContent_default","PopoverTrigger_default","Command_default","CommandEmpty_default","CommandGroup_default","CommandInput_default","CommandItem_default","CommandList_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","SelectComboboxCell_vue_vue_type_script_setup_true_lang_default","props","__props","t","useT","panel","usePanel","schema","computed","useCellUpdate","value","ref","label","open","search","loading","remote","isRemote","staticOptions","isOptionGroup","option","request","isOpen","term","url","timer","current","searchTableColumnOptions","results","optionLabelClass","options","filterSelectColumnOptions","emptyMessage","selectColumnEmptyMessage","currentLabel","showsClear","onOpenChange","next","choose","nextLabel","update","openBlock","createElementBlock","_cache","withModifiers","createVNode","withCtx","unref","error","saving","normalizeClass","cn","Fragment","toDisplayString","createBlock","ChevronsUpDownIcon","$event","createCommentVNode","createTextVNode","createElementVNode","renderList","CheckIcon"],"sources":["../../../src/components/table/SelectComboboxCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { Option, SelectColumnSchema } from '@alfakit/core'\nimport {\n filterSelectColumnOptions,\n isOptionGroup,\n searchTableColumnOptions,\n selectColumnEmptyMessage,\n} from '@alfakit/core'\nimport { CheckIcon, ChevronsUpDownIcon } from '@lucide/vue'\nimport { computed, ref, watch } from 'vue'\nimport { usePanel, useT } from '../../context'\nimport { cn } from '../../lib/utils'\nimport Button from '../ui/Button.vue'\nimport Command from '../ui/Command.vue'\nimport CommandEmpty from '../ui/CommandEmpty.vue'\nimport CommandGroup from '../ui/CommandGroup.vue'\nimport CommandInput from '../ui/CommandInput.vue'\nimport CommandItem from '../ui/CommandItem.vue'\nimport CommandList from '../ui/CommandList.vue'\nimport Popover from '../ui/Popover.vue'\nimport PopoverContent from '../ui/PopoverContent.vue'\nimport PopoverTrigger from '../ui/PopoverTrigger.vue'\nimport Spinner from '../ui/Spinner.vue'\nimport { useCellUpdate, type CellProps } from './cell-update'\n\n/**\n * `SelectColumn::native(false)`: a combobox, searchable with `searchableOptions()`. Options\n * come with the table, or from the server (`optionsSearchPath`) as the user types.\n */\nconst props = defineProps<CellProps>()\nconst t = useT()\nconst panel = usePanel()\nconst schema = computed(() => props.column as SelectColumnSchema)\nconst { update, saving, error } = useCellUpdate(props)\nconst value = ref(\n props.cell.state === null || props.cell.state === undefined ? '' : String(props.cell.state),\n)\nconst label = ref<string | undefined>(props.cell.optionLabel)\nconst open = ref(false)\nconst search = ref('')\nconst loading = ref(false)\nconst remote = ref<Option[]>([])\nconst isRemote = computed(() => Boolean(schema.value.optionsSearchPath))\nconst staticOptions = computed(() =>\n schema.value.options.flatMap((option) => (isOptionGroup(option) ? option.options : [option])),\n)\nlet request = 0\n\nwatch([open, search], ([isOpen, term], _old, onCleanup) => {\n const url = panel.value.endpoints.schemaOptions\n\n if (!isOpen || !isRemote.value || !url) return\n\n const timer = setTimeout(() => {\n const current = ++request\n loading.value = true\n\n void searchTableColumnOptions(url, props.token, props.component, schema.value, term)\n .then((results) => {\n if (current === request) remote.value = results\n })\n .catch(() => {\n if (current === request) remote.value = []\n })\n .finally(() => {\n if (current === request) loading.value = false\n })\n }, schema.value.optionsSearchDebounce ?? 300)\n\n onCleanup(() => clearTimeout(timer))\n})\n\n// Long labels wrap unless `wrapOptionLabels(false)` truncates them.\nconst optionLabelClass = computed(() =>\n schema.value.wrapOptionLabels === false\n ? 'min-w-0 truncate'\n : 'min-w-0 break-words whitespace-normal',\n)\n\nconst options = computed(() =>\n filterSelectColumnOptions(\n isRemote.value ? remote.value : staticOptions.value,\n schema.value,\n isRemote.value ? '' : search.value,\n props.recordKey,\n ),\n)\nconst emptyMessage = computed(() =>\n selectColumnEmptyMessage(schema.value, {\n loading: loading.value,\n search: search.value,\n optionCount: options.value.length,\n }),\n)\nconst currentLabel = computed(\n () =>\n staticOptions.value.find((option) => option.value === value.value)?.label ??\n remote.value.find((option) => option.value === value.value)?.label ??\n label.value,\n)\nconst showsClear = computed(() => schema.value.selectablePlaceholder && value.value !== '')\n\nconst onOpenChange = (next: boolean) => {\n open.value = next\n\n if (!next) search.value = ''\n}\n\nconst choose = (next: string, nextLabel?: string) => {\n value.value = next\n label.value = nextLabel\n onOpenChange(false)\n void update(next === '' ? null : next)\n}\n</script>\n\n<template>\n <span @click.stop>\n <Popover :open=\"open\" @update:open=\"onOpenChange\">\n <PopoverTrigger as-child>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n role=\"combobox\"\n :aria-expanded=\"open\"\n :aria-label=\"props.column.label || props.column.name\"\n :aria-invalid=\"error ? true : undefined\"\n :disabled=\"Boolean(props.cell.disabled) || saving\"\n :class=\"cn('h-8 min-w-32 justify-between font-normal', error && 'border-destructive')\"\n >\n <template v-if=\"value !== '' && currentLabel !== undefined\">\n <!-- The server sanitises HTML labels (`Support\\Html::sanitize`). -->\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span v-if=\"schema.allowOptionsHtml\" class=\"min-w-0 truncate\" v-html=\"currentLabel\" />\n <span v-else class=\"min-w-0 truncate\">{{ currentLabel }}</span>\n </template>\n <span v-else class=\"text-muted-foreground\">{{\n schema.placeholder ??\n (value !== '' ? value : t('select_option', {}, 'Select an option'))\n }}</span>\n <Spinner v-if=\"loading\" class=\"opacity-50\" />\n <ChevronsUpDownIcon v-else class=\"size-4 shrink-0 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent class=\"w-64 p-0\" align=\"start\">\n <Command>\n <CommandInput\n v-if=\"schema.searchableOptions\"\n :model-value=\"search\"\n :placeholder=\"\n schema.searchPrompt ?? t('form.search_placeholder', {}, 'Type to search…')\n \"\n @update:model-value=\"search = $event\"\n />\n <CommandList>\n <CommandEmpty\n v-if=\"options.length === 0 && !showsClear\"\n data-slot=\"select-column-message\"\n >{{\n emptyMessage.message ?? t(emptyMessage.key, {}, emptyMessage.fallback)\n }}</CommandEmpty\n >\n <CommandGroup>\n <CommandItem v-if=\"showsClear\" value=\"\" @select=\"choose('')\">\n <span class=\"text-muted-foreground\">{{\n schema.placeholder ?? t('clear', {}, 'Clear')\n }}</span>\n </CommandItem>\n <CommandItem\n v-for=\"option in options\"\n :key=\"option.value\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n @select=\"choose(option.value, option.label)\"\n >\n <CheckIcon\n :class=\"cn('size-4', option.value === value ? 'opacity-100' : 'opacity-0')\"\n />\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span\n v-if=\"schema.allowOptionsHtml\"\n :class=\"optionLabelClass\"\n v-html=\"option.label\"\n />\n <span v-else :class=\"optionLabelClass\">{{ option.label }}</span>\n </CommandItem>\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n <span v-if=\"error\" class=\"text-destructive block text-xs\">{{ error }}</span>\n </span>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"SelectComboboxCell.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_withModifiers","_createVNode","Popover","_withCtx","PopoverTrigger","Button","_unref","_normalizeClass","_Fragment","_toDisplayString","_createBlock","Spinner","PopoverContent","Command","CommandInput","_createCommentVNode","CommandList","CommandEmpty","_createTextVNode","CommandGroup","CommandItem","_createElementVNode","_renderList","Button_default","Spinner_default","Popover_default","PopoverContent_default","PopoverTrigger_default","Command_default","CommandEmpty_default","CommandGroup_default","CommandInput_default","CommandItem_default","CommandList_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","SelectComboboxCell_vue_vue_type_script_setup_true_lang_default","props","__props","t","useT","panel","usePanel","schema","computed","useCellUpdate","value","ref","label","open","search","loading","remote","isRemote","staticOptions","isOptionGroup","option","request","isOpen","term","url","timer","current","searchTableColumnOptions","results","optionLabelClass","options","filterSelectColumnOptions","emptyMessage","selectColumnEmptyMessage","currentLabel","showsClear","onOpenChange","next","choose","nextLabel","update","openBlock","createElementBlock","_cache","withModifiers","createVNode","withCtx","unref","error","saving","normalizeClass","cn","Fragment","toDisplayString","createBlock","ChevronsUpDownIcon","$event","createCommentVNode","createTextVNode","createElementVNode","renderList","CheckIcon"],"sources":["../../../src/components/table/SelectComboboxCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { Option, SelectColumnSchema } from '@alfakit/core'\nimport {\n filterSelectColumnOptions,\n isOptionGroup,\n searchTableColumnOptions,\n selectColumnEmptyMessage,\n} from '@alfakit/core'\nimport { CheckIcon, ChevronsUpDownIcon } from '@lucide/vue'\nimport { computed, ref, watch } from 'vue'\nimport { usePanel, useT } from '../../context'\nimport { cn } from '../../lib/utils'\nimport Button from '../ui/Button.vue'\nimport Command from '../ui/Command.vue'\nimport CommandEmpty from '../ui/CommandEmpty.vue'\nimport CommandGroup from '../ui/CommandGroup.vue'\nimport CommandInput from '../ui/CommandInput.vue'\nimport CommandItem from '../ui/CommandItem.vue'\nimport CommandList from '../ui/CommandList.vue'\nimport Popover from '../ui/Popover.vue'\nimport PopoverContent from '../ui/PopoverContent.vue'\nimport PopoverTrigger from '../ui/PopoverTrigger.vue'\nimport Spinner from '../ui/Spinner.vue'\nimport { useCellUpdate, type CellProps } from './cell-update'\n\n/**\n * `SelectColumn::native(false)`: a combobox, searchable with `searchableOptions()`. Options\n * come with the table, or from the server (`optionsSearchPath`) as the user types.\n */\nconst props = defineProps<CellProps>()\nconst t = useT()\nconst panel = usePanel()\nconst schema = computed(() => props.column as SelectColumnSchema)\nconst { update, saving, error } = useCellUpdate(props)\nconst value = ref(\n props.cell.state === null || props.cell.state === undefined ? '' : String(props.cell.state),\n)\nconst label = ref<string | undefined>(props.cell.optionLabel)\nconst open = ref(false)\nconst search = ref('')\nconst loading = ref(false)\nconst remote = ref<Option[]>([])\nconst isRemote = computed(() => Boolean(schema.value.optionsSearchPath))\nconst staticOptions = computed(() =>\n schema.value.options.flatMap((option) => (isOptionGroup(option) ? option.options : [option])),\n)\nlet request = 0\n\nwatch([open, search], ([isOpen, term], _old, onCleanup) => {\n const url = panel.value.endpoints.schemaOptions\n\n if (!isOpen || !isRemote.value || !url) return\n\n const timer = setTimeout(() => {\n const current = ++request\n loading.value = true\n\n void searchTableColumnOptions(url, props.token, props.component, schema.value, term)\n .then((results) => {\n if (current === request) remote.value = results\n })\n .catch(() => {\n if (current === request) remote.value = []\n })\n .finally(() => {\n if (current === request) loading.value = false\n })\n }, schema.value.optionsSearchDebounce ?? 300)\n\n onCleanup(() => clearTimeout(timer))\n})\n\n// Long labels wrap unless `wrapOptionLabels(false)` truncates them.\nconst optionLabelClass = computed(() =>\n schema.value.wrapOptionLabels === false\n ? 'min-w-0 truncate'\n : 'min-w-0 break-words whitespace-normal',\n)\n\nconst options = computed(() =>\n filterSelectColumnOptions(\n isRemote.value ? remote.value : staticOptions.value,\n schema.value,\n isRemote.value ? '' : search.value,\n props.recordKey,\n ),\n)\nconst emptyMessage = computed(() =>\n selectColumnEmptyMessage(schema.value, {\n loading: loading.value,\n search: search.value,\n optionCount: options.value.length,\n }),\n)\nconst currentLabel = computed(\n () =>\n staticOptions.value.find((option) => option.value === value.value)?.label ??\n remote.value.find((option) => option.value === value.value)?.label ??\n label.value,\n)\nconst showsClear = computed(() => schema.value.selectablePlaceholder && value.value !== '')\n\nconst onOpenChange = (next: boolean) => {\n open.value = next\n\n if (!next) search.value = ''\n}\n\nconst choose = (next: string, nextLabel?: string) => {\n value.value = next\n label.value = nextLabel\n onOpenChange(false)\n void update(next === '' ? null : next)\n}\n</script>\n\n<template>\n <span @click.stop>\n <Popover :open=\"open\" @update:open=\"onOpenChange\">\n <PopoverTrigger as-child>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n role=\"combobox\"\n :aria-expanded=\"open\"\n :aria-label=\"props.column.label || props.column.name\"\n :aria-invalid=\"error ? true : undefined\"\n :disabled=\"Boolean(props.cell.disabled) || saving\"\n :class=\"cn('h-8 min-w-32 justify-between font-normal', error && 'border-destructive')\"\n >\n <template v-if=\"value !== '' && currentLabel !== undefined\">\n <!-- The server sanitises HTML labels (`Support\\Html::sanitize`). -->\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span v-if=\"schema.allowOptionsHtml\" class=\"min-w-0 truncate\" v-html=\"currentLabel\" />\n <span v-else class=\"min-w-0 truncate\">{{ currentLabel }}</span>\n </template>\n <span v-else class=\"text-muted-foreground\">{{\n schema.placeholder ??\n (value !== '' ? value : t('select_option', {}, 'Select an option'))\n }}</span>\n <Spinner v-if=\"loading\" class=\"opacity-50\" />\n <ChevronsUpDownIcon v-else class=\"size-4 shrink-0 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent class=\"w-64 p-0\" align=\"start\">\n <Command>\n <CommandInput\n v-if=\"schema.searchableOptions\"\n :model-value=\"search\"\n :placeholder=\"\n schema.searchPrompt ?? t('form.search_placeholder', {}, 'Type to search…')\n \"\n @update:model-value=\"search = $event\"\n />\n <CommandList>\n <CommandEmpty\n v-if=\"options.length === 0 && !showsClear\"\n data-slot=\"select-column-message\"\n >{{\n emptyMessage.message ?? t(emptyMessage.key, {}, emptyMessage.fallback)\n }}</CommandEmpty\n >\n <CommandGroup>\n <CommandItem v-if=\"showsClear\" value=\"\" @select=\"choose('')\">\n <span class=\"text-muted-foreground\">{{\n schema.placeholder ?? t('clear', {}, 'Clear')\n }}</span>\n </CommandItem>\n <CommandItem\n v-for=\"option in options\"\n :key=\"option.value\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n @select=\"choose(option.value, option.label)\"\n >\n <CheckIcon\n :class=\"cn('size-4', option.value === value ? 'opacity-100' : 'opacity-0')\"\n />\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span\n v-if=\"schema.allowOptionsHtml\"\n :class=\"optionLabelClass\"\n v-html=\"option.label\"\n />\n <span v-else :class=\"optionLabelClass\">{{ option.label }}</span>\n </CommandItem>\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n <span v-if=\"error\" class=\"text-destructive block text-xs\">{{ error }}</span>\n </span>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TableCellContent.js","names":["_sfc_main","TableCellContent_vue_vue_type_script_setup_true_lang_default","TableCellContent_default"],"sources":["../../../src/components/table/TableCellContent.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ColorColumnSchema, IconColumnSchema } from '@alfakit/core'\nimport {\n columnRegistryKey,\n remainingTextSizeClass,\n stackedImageStyle,\n usesDefaultImageStack,\n} from '@alfakit/core'\nimport { CheckIcon } from '@lucide/vue'\nimport { computed, ref } from 'vue'\nimport { useRegistry, useT } from '../../context'\nimport { colorClass, iconSizeClasses, textColorClasses } from '../../lib/colors'\nimport { Icon } from '../../lib/icons'\nimport { cn } from '../../lib/utils'\nimport FormattedText from '../entries/FormattedText.vue'\nimport BooleanCell from './BooleanCell.vue'\nimport type { CellProps } from './cell-update'\nimport SelectCell from './SelectCell.vue'\nimport SelectComboboxCell from './SelectComboboxCell.vue'\nimport TextInputCell from './TextInputCell.vue'\n\nconst props = defineProps<CellProps>()\nconst registry = useRegistry()\n// A component registered as `column:<type>` replaces the built-in cell renderer.\nconst custom = computed(() => registry.resolve(columnRegistryKey(props.column)))\nconst t = useT()\n// `ViewColumn`: the application component registered under the column's `view()` name.\nconst viewName = computed(() => (props.column as { component?: string }).component ?? '')\nconst view = computed(() =>\n props.column.type === 'ViewColumn' && viewName.value\n ? registry.resolve(viewName.value)\n : undefined,\n)\n\nconst imageSchema = computed(\n () =>\n props.column as {\n circular?: boolean\n square?: boolean\n size?: number | string\n height?: number | string\n width?: string\n stacked?: boolean\n limit?: number\n limitedRemainingText?: boolean\n limitedRemainingTextSize?: string\n wrap?: boolean\n ring?: number\n overlap?: number\n },\n)\nconst defaultImageStack = computed(() => usesDefaultImageStack(imageSchema.value))\nconst imageUrls = computed(() =>\n Array.isArray(props.cell.state) ? (props.cell.state as string[]) : [],\n)\nconst imageLimit = computed(() => imageSchema.value.limit ?? imageUrls.value.length)\nconst toCss = (value: number | string | undefined) =>\n typeof value === 'number' ? `${value}px` : value\nconst imageStyle = computed(() => {\n const size = imageSchema.value.size ?? 40\n\n return {\n height: toCss(imageSchema.value.height ?? size),\n width: toCss(\n imageSchema.value.width ??\n (imageSchema.value.square || imageSchema.value.circular ? size : undefined),\n ),\n }\n})\nconst colors = computed(() =>\n Array.isArray(props.cell.state)\n ? (props.cell.state as string[])\n : props.cell.state\n ? [String(props.cell.state)]\n : [],\n)\nconst colorSchema = computed(() => props.column as ColorColumnSchema)\nconst copiedColor = ref<string | null>(null)\nconst copyColor = (color: string) => {\n void navigator.clipboard?.writeText(color).then(() => {\n copiedColor.value = color\n setTimeout(() => {\n copiedColor.value = null\n }, colorSchema.value.copyMessageDuration ?? 1500)\n })\n}\nconst textSchema = computed(() => ({\n ...(props.column as object),\n color: props.cell.color,\n icon: props.cell.icon,\n iconPosition: props.cell.iconPosition,\n iconColor: props.cell.iconColor,\n itemColors: props.cell.itemColors,\n itemIcons: props.cell.itemIcons,\n itemUrls: props.cell.itemUrls,\n}))\n// `SelectColumn::native(false)` renders a combobox.\nconst isComboboxSelect = computed(\n () =>\n props.column.type === 'SelectColumn' && (props.column as { native?: boolean }).native === false,\n)\nconst descriptionPosition = computed(\n () =>\n (props.column as { descriptionPosition?: 'above' | 'below' }).descriptionPosition ?? 'below',\n)\n</script>\n\n<template>\n <component :is=\"custom\" v-if=\"custom\" v-bind=\"props\" />\n <component\n :is=\"view\"\n v-else-if=\"view\"\n v-bind=\"{ ...(props.cell.props ?? {}), state: props.cell.state, ...props }\"\n />\n <span v-else-if=\"props.column.type === 'ViewColumn'\" class=\"text-destructive text-xs\">{{\n t(\n 'component_not_registered',\n { component: viewName },\n `Component ${viewName} is not registered.`,\n )\n }}</span>\n <template v-else-if=\"props.column.type === 'IconColumn'\">\n <!-- A list state: one icon per item (`wrap()` lets them wrap). -->\n <div\n v-if=\"props.cell.icons\"\n data-slot=\"icon-column-icons\"\n :class=\"\n cn(\n 'flex items-center gap-1.5',\n (props.column as IconColumnSchema).wrap ? 'flex-wrap' : 'flex-nowrap',\n )\n \"\n >\n <span v-if=\"props.cell.icons.length === 0\" class=\"text-muted-foreground\">—</span>\n <Icon\n v-for=\"(item, index) in props.cell.icons\"\n :key=\"index\"\n :name=\"item.icon\"\n :class=\"\n cn(\n colorClass(iconSizeClasses, props.cell.size, 'md'),\n item.color && textColorClasses[item.color],\n )\n \"\n />\n </div>\n <Icon\n v-else-if=\"props.cell.icon\"\n :name=\"props.cell.icon\"\n :class=\"\n cn(\n colorClass(iconSizeClasses, props.cell.size, 'md'),\n props.cell.color && textColorClasses[props.cell.color],\n )\n \"\n />\n <span v-else class=\"text-muted-foreground\">—</span>\n </template>\n <template v-else-if=\"props.column.type === 'ImageColumn'\">\n <span v-if=\"imageUrls.length === 0\" class=\"text-muted-foreground\">—</span>\n <div\n v-else\n :class=\"\n cn(\n 'flex items-center',\n imageSchema.wrap && 'flex-wrap',\n imageSchema.stacked ? defaultImageStack && '-space-x-2' : 'gap-1.5',\n imageSchema.wrap && imageSchema.stacked && 'gap-y-1.5',\n )\n \"\n >\n <img\n v-for=\"(url, index) in imageUrls.slice(0, imageLimit)\"\n :key=\"index\"\n :src=\"url\"\n :alt=\"props.cell.alt ?? ''\"\n :style=\"[imageStyle, stackedImageStyle(index, imageSchema)]\"\n :class=\"\n cn(\n 'object-cover',\n imageSchema.circular ? 'rounded-full' : 'rounded-md',\n imageSchema.stacked && defaultImageStack && 'ring-background ring-2',\n )\n \"\n v-bind=\"props.cell.extraImgAttributes\"\n />\n <span\n v-if=\"imageSchema.limitedRemainingText && imageUrls.length > imageLimit\"\n data-slot=\"image-remaining\"\n :class=\"\n cn(\n 'text-muted-foreground ms-1',\n remainingTextSizeClass(imageSchema.limitedRemainingTextSize),\n )\n \"\n >+{{ imageUrls.length - imageLimit }}</span\n >\n </div>\n </template>\n <template v-else-if=\"props.column.type === 'ColorColumn'\">\n <span v-if=\"colors.length === 0\" class=\"text-muted-foreground\">—</span>\n <div\n v-else\n :class=\"cn('flex items-center gap-1.5', colorSchema.wrap ? 'flex-wrap' : 'flex-nowrap')\"\n >\n <template v-for=\"color in colors\" :key=\"color\">\n <!-- The cell may sit inside a link or a clickable row. -->\n <button\n v-if=\"colorSchema.copyable\"\n type=\"button\"\n data-slot=\"color-copy\"\n :title=\"color\"\n :aria-label=\"`${t('copy', {}, 'Copy')} ${color}`\"\n class=\"focus-visible:ring-ring/50 inline-flex rounded outline-none focus-visible:ring-[3px]\"\n @click.prevent.stop=\"copyColor(color)\"\n >\n <span\n class=\"inline-flex size-5 items-center justify-center rounded border shadow-xs\"\n :style=\"{ backgroundColor: color }\"\n >\n <CheckIcon\n v-if=\"copiedColor === color\"\n class=\"size-3 text-white mix-blend-difference\"\n />\n </span>\n </button>\n <span\n v-else\n :title=\"color\"\n class=\"size-5 rounded border shadow-xs\"\n :style=\"{ backgroundColor: color }\"\n />\n </template>\n <span\n v-if=\"colorSchema.copyable && copiedColor\"\n role=\"status\"\n :class=\"cn('text-xs', !colorSchema.copyMessage && 'sr-only')\"\n >{{ colorSchema.copyMessage ?? t('copied', {}, 'Copied') }}</span\n >\n </div>\n </template>\n <BooleanCell\n v-else-if=\"props.column.type === 'ToggleColumn' || props.column.type === 'CheckboxColumn'\"\n v-bind=\"props\"\n />\n <SelectComboboxCell v-else-if=\"isComboboxSelect\" v-bind=\"props\" />\n <SelectCell v-else-if=\"props.column.type === 'SelectColumn'\" v-bind=\"props\" />\n <TextInputCell v-else-if=\"props.column.type === 'TextInputColumn'\" v-bind=\"props\" />\n <div v-else class=\"flex flex-col gap-0.5\">\n <span\n v-if=\"props.cell.description && descriptionPosition === 'above'\"\n class=\"text-muted-foreground block text-xs\"\n >{{ props.cell.description }}</span\n >\n <FormattedText :value=\"props.cell.state\" :schema=\"textSchema\" />\n <span\n v-if=\"props.cell.description && descriptionPosition === 'below'\"\n class=\"text-muted-foreground block text-xs\"\n >{{ props.cell.description }}</span\n >\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"TableCellContent.js","names":["_sfc_main","TableCellContent_vue_vue_type_script_setup_true_lang_default","TableCellContent_default"],"sources":["../../../src/components/table/TableCellContent.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ColorColumnSchema, IconColumnSchema } from '@alfakit/core'\nimport {\n columnRegistryKey,\n remainingTextSizeClass,\n stackedImageStyle,\n usesDefaultImageStack,\n} from '@alfakit/core'\nimport { CheckIcon } from '@lucide/vue'\nimport { computed, ref } from 'vue'\nimport { useRegistry, useT } from '../../context'\nimport { colorClass, iconSizeClasses, textColorClasses } from '../../lib/colors'\nimport { Icon } from '../../lib/icons'\nimport { cn } from '../../lib/utils'\nimport FormattedText from '../entries/FormattedText.vue'\nimport BooleanCell from './BooleanCell.vue'\nimport type { CellProps } from './cell-update'\nimport SelectCell from './SelectCell.vue'\nimport SelectComboboxCell from './SelectComboboxCell.vue'\nimport TextInputCell from './TextInputCell.vue'\n\nconst props = defineProps<CellProps>()\nconst registry = useRegistry()\n// A component registered as `column:<type>` replaces the built-in cell renderer.\nconst custom = computed(() =>\n props.fromRegistry ? undefined : registry.resolve(columnRegistryKey(props.column)),\n)\nconst t = useT()\n// `ViewColumn`: the application component registered under the column's `view()` name.\nconst viewName = computed(() => (props.column as { component?: string }).component ?? '')\nconst view = computed(() =>\n props.column.type === 'ViewColumn' && viewName.value\n ? registry.resolve(viewName.value)\n : undefined,\n)\n\nconst imageSchema = computed(\n () =>\n props.column as {\n circular?: boolean\n square?: boolean\n size?: number | string\n height?: number | string\n width?: string\n stacked?: boolean\n limit?: number\n limitedRemainingText?: boolean\n limitedRemainingTextSize?: string\n wrap?: boolean\n ring?: number\n overlap?: number\n },\n)\nconst defaultImageStack = computed(() => usesDefaultImageStack(imageSchema.value))\nconst imageUrls = computed(() =>\n Array.isArray(props.cell.state) ? (props.cell.state as string[]) : [],\n)\nconst imageLimit = computed(() => imageSchema.value.limit ?? imageUrls.value.length)\nconst toCss = (value: number | string | undefined) =>\n typeof value === 'number' ? `${value}px` : value\nconst imageStyle = computed(() => {\n const size = imageSchema.value.size ?? 40\n\n return {\n height: toCss(imageSchema.value.height ?? size),\n width: toCss(\n imageSchema.value.width ??\n (imageSchema.value.square || imageSchema.value.circular ? size : undefined),\n ),\n }\n})\nconst colors = computed(() =>\n Array.isArray(props.cell.state)\n ? (props.cell.state as string[])\n : props.cell.state\n ? [String(props.cell.state)]\n : [],\n)\nconst colorSchema = computed(() => props.column as ColorColumnSchema)\nconst copiedColor = ref<string | null>(null)\nconst copyColor = (color: string) => {\n void navigator.clipboard?.writeText(color).then(() => {\n copiedColor.value = color\n setTimeout(() => {\n copiedColor.value = null\n }, colorSchema.value.copyMessageDuration ?? 1500)\n })\n}\nconst textSchema = computed(() => ({\n ...(props.column as object),\n color: props.cell.color,\n icon: props.cell.icon,\n iconPosition: props.cell.iconPosition,\n iconColor: props.cell.iconColor,\n itemColors: props.cell.itemColors,\n itemIcons: props.cell.itemIcons,\n itemUrls: props.cell.itemUrls,\n}))\n// `SelectColumn::native(false)` renders a combobox.\nconst isComboboxSelect = computed(\n () =>\n props.column.type === 'SelectColumn' && (props.column as { native?: boolean }).native === false,\n)\nconst descriptionPosition = computed(\n () =>\n (props.column as { descriptionPosition?: 'above' | 'below' }).descriptionPosition ?? 'below',\n)\n</script>\n\n<template>\n <component :is=\"custom\" v-if=\"custom\" v-bind=\"props\" :from-registry=\"true\" />\n <component\n :is=\"view\"\n v-else-if=\"view\"\n v-bind=\"{ ...(props.cell.props ?? {}), state: props.cell.state, ...props }\"\n />\n <span v-else-if=\"props.column.type === 'ViewColumn'\" class=\"text-destructive text-xs\">{{\n t(\n 'component_not_registered',\n { component: viewName },\n `Component ${viewName} is not registered.`,\n )\n }}</span>\n <template v-else-if=\"props.column.type === 'IconColumn'\">\n <!-- A list state: one icon per item (`wrap()` lets them wrap). -->\n <div\n v-if=\"props.cell.icons\"\n data-slot=\"icon-column-icons\"\n :class=\"\n cn(\n 'flex items-center gap-1.5',\n (props.column as IconColumnSchema).wrap ? 'flex-wrap' : 'flex-nowrap',\n )\n \"\n >\n <span v-if=\"props.cell.icons.length === 0\" class=\"text-muted-foreground\">—</span>\n <Icon\n v-for=\"(item, index) in props.cell.icons\"\n :key=\"index\"\n :name=\"item.icon\"\n :class=\"\n cn(\n colorClass(iconSizeClasses, props.cell.size, 'md'),\n item.color && textColorClasses[item.color],\n )\n \"\n />\n </div>\n <Icon\n v-else-if=\"props.cell.icon\"\n :name=\"props.cell.icon\"\n :class=\"\n cn(\n colorClass(iconSizeClasses, props.cell.size, 'md'),\n props.cell.color && textColorClasses[props.cell.color],\n )\n \"\n />\n <span v-else class=\"text-muted-foreground\">—</span>\n </template>\n <template v-else-if=\"props.column.type === 'ImageColumn'\">\n <span v-if=\"imageUrls.length === 0\" class=\"text-muted-foreground\">—</span>\n <div\n v-else\n :class=\"\n cn(\n 'flex items-center',\n imageSchema.wrap && 'flex-wrap',\n imageSchema.stacked ? defaultImageStack && '-space-x-2' : 'gap-1.5',\n imageSchema.wrap && imageSchema.stacked && 'gap-y-1.5',\n )\n \"\n >\n <img\n v-for=\"(url, index) in imageUrls.slice(0, imageLimit)\"\n :key=\"index\"\n :src=\"url\"\n :alt=\"props.cell.alt ?? ''\"\n :style=\"[imageStyle, stackedImageStyle(index, imageSchema)]\"\n :class=\"\n cn(\n 'object-cover',\n imageSchema.circular ? 'rounded-full' : 'rounded-md',\n imageSchema.stacked && defaultImageStack && 'ring-background ring-2',\n )\n \"\n v-bind=\"props.cell.extraImgAttributes\"\n />\n <span\n v-if=\"imageSchema.limitedRemainingText && imageUrls.length > imageLimit\"\n data-slot=\"image-remaining\"\n :class=\"\n cn(\n 'text-muted-foreground ms-1',\n remainingTextSizeClass(imageSchema.limitedRemainingTextSize),\n )\n \"\n >+{{ imageUrls.length - imageLimit }}</span\n >\n </div>\n </template>\n <template v-else-if=\"props.column.type === 'ColorColumn'\">\n <span v-if=\"colors.length === 0\" class=\"text-muted-foreground\">—</span>\n <div\n v-else\n :class=\"cn('flex items-center gap-1.5', colorSchema.wrap ? 'flex-wrap' : 'flex-nowrap')\"\n >\n <template v-for=\"color in colors\" :key=\"color\">\n <!-- The cell may sit inside a link or a clickable row. -->\n <button\n v-if=\"colorSchema.copyable\"\n type=\"button\"\n data-slot=\"color-copy\"\n :title=\"color\"\n :aria-label=\"`${t('copy', {}, 'Copy')} ${color}`\"\n class=\"focus-visible:ring-ring/50 inline-flex rounded outline-none focus-visible:ring-[3px]\"\n @click.prevent.stop=\"copyColor(color)\"\n >\n <span\n class=\"inline-flex size-5 items-center justify-center rounded border shadow-xs\"\n :style=\"{ backgroundColor: color }\"\n >\n <CheckIcon\n v-if=\"copiedColor === color\"\n class=\"size-3 text-white mix-blend-difference\"\n />\n </span>\n </button>\n <span\n v-else\n :title=\"color\"\n class=\"size-5 rounded border shadow-xs\"\n :style=\"{ backgroundColor: color }\"\n />\n </template>\n <span\n v-if=\"colorSchema.copyable && copiedColor\"\n role=\"status\"\n :class=\"cn('text-xs', !colorSchema.copyMessage && 'sr-only')\"\n >{{ colorSchema.copyMessage ?? t('copied', {}, 'Copied') }}</span\n >\n </div>\n </template>\n <BooleanCell\n v-else-if=\"props.column.type === 'ToggleColumn' || props.column.type === 'CheckboxColumn'\"\n v-bind=\"props\"\n />\n <SelectComboboxCell v-else-if=\"isComboboxSelect\" v-bind=\"props\" />\n <SelectCell v-else-if=\"props.column.type === 'SelectColumn'\" v-bind=\"props\" />\n <TextInputCell v-else-if=\"props.column.type === 'TextInputColumn'\" v-bind=\"props\" />\n <div v-else class=\"flex flex-col gap-0.5\">\n <span\n v-if=\"props.cell.description && descriptionPosition === 'above'\"\n class=\"text-muted-foreground block text-xs\"\n >{{ props.cell.description }}</span\n >\n <FormattedText :value=\"props.cell.state\" :schema=\"textSchema\" />\n <span\n v-if=\"props.cell.description && descriptionPosition === 'below'\"\n class=\"text-muted-foreground block text-xs\"\n >{{ props.cell.description }}</span\n >\n </div>\n</template>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"TableCellContent.vue.d.ts","sourceRoot":"","sources":["../../../src/components/table/TableCellContent.vue"],"names":[],"mappings":"AAuRA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;;AAyd9C,wBAMG"}
1
+ {"version":3,"file":"TableCellContent.vue.d.ts","sourceRoot":"","sources":["../../../src/components/table/TableCellContent.vue"],"names":[],"mappings":"AAyRA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;;AA6d9C,wBAMG"}
@@ -46,10 +46,11 @@ var ae = {
46
46
  cell: {},
47
47
  recordKey: {},
48
48
  token: {},
49
- component: {}
49
+ component: {},
50
+ fromRegistry: { type: Boolean }
50
51
  },
51
52
  setup(b) {
52
- let z = b, B = e(), V = g(() => B.resolve(d(z.column))), H = t(), U = g(() => z.column.component ?? ""), W = g(() => z.column.type === "ViewColumn" && U.value ? B.resolve(U.value) : void 0), G = g(() => z.column), K = g(() => m(G.value)), q = g(() => Array.isArray(z.cell.state) ? z.cell.state : []), J = g(() => G.value.limit ?? q.value.length), Y = (e) => typeof e == "number" ? `${e}px` : e, ce = g(() => {
53
+ let z = b, B = e(), V = g(() => z.fromRegistry ? void 0 : B.resolve(d(z.column))), H = t(), U = g(() => z.column.component ?? ""), W = g(() => z.column.type === "ViewColumn" && U.value ? B.resolve(U.value) : void 0), G = g(() => z.column), K = g(() => m(G.value)), q = g(() => Array.isArray(z.cell.state) ? z.cell.state : []), J = g(() => G.value.limit ?? q.value.length), Y = (e) => typeof e == "number" ? `${e}px` : e, ce = g(() => {
53
54
  let e = G.value.size ?? 40;
54
55
  return {
55
56
  height: Y(G.value.height ?? e),
@@ -71,7 +72,7 @@ var ae = {
71
72
  itemIcons: z.cell.itemIcons,
72
73
  itemUrls: z.cell.itemUrls
73
74
  })), de = g(() => z.column.type === "SelectColumn" && z.column.native === !1), $ = g(() => z.column.descriptionPosition ?? "below");
74
- return (e, t) => V.value ? (T(), _(O(V.value), C(x({ key: 0 }, z)), null, 16)) : W.value ? (T(), _(O(W.value), C(x({ key: 1 }, {
75
+ return (e, t) => V.value ? (T(), _(O(V.value), x({ key: 0 }, z, { "from-registry": !0 }), null, 16)) : W.value ? (T(), _(O(W.value), C(x({ key: 1 }, {
75
76
  ...z.cell.props ?? {},
76
77
  state: z.cell.state,
77
78
  ...z