@alfakit/vue 0.1.2 → 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 (281) hide show
  1. package/CHANGELOG.md +8 -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/ActionGroupMenu.js.map +1 -1
  7. package/dist/components/actions/ActionGroupMenu.vue.d.ts.map +1 -1
  8. package/dist/components/actions/ActionGroupMenu.vue_vue_type_script_setup_true_lang.js +69 -65
  9. package/dist/components/actions/ActionGroupMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  10. package/dist/components/actions/ActionModal.js.map +1 -1
  11. package/dist/components/actions/ActionModal.vue.d.ts.map +1 -1
  12. package/dist/components/actions/ActionModal.vue_vue_type_script_setup_true_lang.js +17 -15
  13. package/dist/components/actions/ActionModal.vue_vue_type_script_setup_true_lang.js.map +1 -1
  14. package/dist/components/ai/AiCopilot.js.map +1 -1
  15. package/dist/components/ai/AiCopilot.vue.d.ts +2 -0
  16. package/dist/components/ai/AiCopilot.vue.d.ts.map +1 -1
  17. package/dist/components/ai/AiCopilot.vue_vue_type_script_setup_true_lang.js +7 -2
  18. package/dist/components/ai/AiCopilot.vue_vue_type_script_setup_true_lang.js.map +1 -1
  19. package/dist/components/cms/CmsPage.vue_vue_type_script_setup_true_lang.js +19 -19
  20. package/dist/components/cms/CmsPage.vue_vue_type_script_setup_true_lang.js.map +1 -1
  21. package/dist/components/cms/LivePreview.js.map +1 -1
  22. package/dist/components/cms/LivePreview.vue.d.ts.map +1 -1
  23. package/dist/components/cms/LivePreview.vue_vue_type_script_setup_true_lang.js +83 -83
  24. package/dist/components/cms/LivePreview.vue_vue_type_script_setup_true_lang.js.map +1 -1
  25. package/dist/components/fields/BuilderField.js.map +1 -1
  26. package/dist/components/fields/BuilderField.vue.d.ts.map +1 -1
  27. package/dist/components/fields/BuilderField.vue_vue_type_script_setup_true_lang.js +162 -157
  28. package/dist/components/fields/BuilderField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  29. package/dist/components/fields/ImageEditorDialog.js.map +1 -1
  30. package/dist/components/fields/ImageEditorDialog.vue.d.ts.map +1 -1
  31. package/dist/components/fields/ImageEditorDialog.vue_vue_type_script_setup_true_lang.js +46 -46
  32. package/dist/components/fields/ImageEditorDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  33. package/dist/components/fields/KeyValueField.js.map +1 -1
  34. package/dist/components/fields/KeyValueField.vue.d.ts.map +1 -1
  35. package/dist/components/fields/KeyValueField.vue_vue_type_script_setup_true_lang.js +66 -66
  36. package/dist/components/fields/KeyValueField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  37. package/dist/components/fields/ModalTablePicker.js.map +1 -1
  38. package/dist/components/fields/ModalTablePicker.vue.d.ts.map +1 -1
  39. package/dist/components/fields/ModalTablePicker.vue_vue_type_script_setup_true_lang.js +113 -113
  40. package/dist/components/fields/ModalTablePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  41. package/dist/components/fields/RepeaterField.js.map +1 -1
  42. package/dist/components/fields/RepeaterField.vue.d.ts.map +1 -1
  43. package/dist/components/fields/RepeaterField.vue_vue_type_script_setup_true_lang.js +12 -12
  44. package/dist/components/fields/RepeaterField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  45. package/dist/components/fields/RichEditorInput.js.map +1 -1
  46. package/dist/components/fields/RichEditorInput.vue.d.ts.map +1 -1
  47. package/dist/components/fields/RichEditorInput.vue_vue_type_script_setup_true_lang.js +166 -165
  48. package/dist/components/fields/RichEditorInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  49. package/dist/components/fields/SliderField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  50. package/dist/components/fields/item-actions.d.ts +2 -2
  51. package/dist/components/fields/item-actions.d.ts.map +1 -1
  52. package/dist/components/fields/item-actions.js +31 -31
  53. package/dist/components/fields/item-actions.js.map +1 -1
  54. package/dist/components/form/FormBlock.js.map +1 -1
  55. package/dist/components/form/FormBlock.vue.d.ts.map +1 -1
  56. package/dist/components/form/FormBlock.vue_vue_type_script_setup_true_lang.js +1 -1
  57. package/dist/components/form/FormBlock.vue_vue_type_script_setup_true_lang.js.map +1 -1
  58. package/dist/components/form/form-context.js +25 -25
  59. package/dist/components/form/form-context.js.map +1 -1
  60. package/dist/components/kanban/KanbanBoard.js.map +1 -1
  61. package/dist/components/kanban/KanbanBoard.vue.d.ts.map +1 -1
  62. package/dist/components/kanban/KanbanBoard.vue_vue_type_script_setup_true_lang.js +5 -2
  63. package/dist/components/kanban/KanbanBoard.vue_vue_type_script_setup_true_lang.js.map +1 -1
  64. package/dist/components/kanban/KanbanColumnHeader.js.map +1 -1
  65. package/dist/components/kanban/KanbanColumnHeader.vue.d.ts.map +1 -1
  66. package/dist/components/kanban/KanbanColumnHeader.vue_vue_type_script_setup_true_lang.js +64 -64
  67. package/dist/components/kanban/KanbanColumnHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  68. package/dist/components/layout/SectionComponent.js.map +1 -1
  69. package/dist/components/layout/SectionComponent.vue.d.ts.map +1 -1
  70. package/dist/components/layout/SectionComponent.vue_vue_type_script_setup_true_lang.js +23 -23
  71. package/dist/components/layout/SectionComponent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  72. package/dist/components/panel/DebugPanel.vue_vue_type_script_setup_true_lang.js +8 -8
  73. package/dist/components/panel/DebugPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  74. package/dist/components/panel/GlobalSearchPalette.js.map +1 -1
  75. package/dist/components/panel/GlobalSearchPalette.vue.d.ts.map +1 -1
  76. package/dist/components/panel/GlobalSearchPalette.vue_vue_type_script_setup_true_lang.js +102 -96
  77. package/dist/components/panel/GlobalSearchPalette.vue_vue_type_script_setup_true_lang.js.map +1 -1
  78. package/dist/components/panel/NavGroup.vue_vue_type_script_setup_true_lang.js +10 -10
  79. package/dist/components/panel/NavGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  80. package/dist/components/panel/NavGroupFlyout.vue_vue_type_script_setup_true_lang.js +9 -9
  81. package/dist/components/panel/NavGroupFlyout.vue_vue_type_script_setup_true_lang.js.map +1 -1
  82. package/dist/components/panel/NavItem.vue_vue_type_script_setup_true_lang.js +16 -16
  83. package/dist/components/panel/NavItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  84. package/dist/components/panel/NavSubItem.vue_vue_type_script_setup_true_lang.js +10 -10
  85. package/dist/components/panel/NavSubItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  86. package/dist/components/panel/TenantMenu.vue_vue_type_script_setup_true_lang.js +35 -35
  87. package/dist/components/panel/TenantMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  88. package/dist/components/panel/Topbar.vue_vue_type_script_setup_true_lang.js +11 -11
  89. package/dist/components/panel/Topbar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  90. package/dist/components/realtime/use-live-updates.d.ts.map +1 -1
  91. package/dist/components/realtime/use-live-updates.js +24 -23
  92. package/dist/components/realtime/use-live-updates.js.map +1 -1
  93. package/dist/components/table/BooleanCell.vue_vue_type_script_setup_true_lang.js +2 -1
  94. package/dist/components/table/BooleanCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  95. package/dist/components/table/ColumnHeader.js.map +1 -1
  96. package/dist/components/table/ColumnHeader.vue.d.ts.map +1 -1
  97. package/dist/components/table/ColumnHeader.vue_vue_type_script_setup_true_lang.js +55 -49
  98. package/dist/components/table/ColumnHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  99. package/dist/components/table/ColumnManager.js.map +1 -1
  100. package/dist/components/table/ColumnManager.vue.d.ts.map +1 -1
  101. package/dist/components/table/ColumnManager.vue_vue_type_script_setup_true_lang.js +5 -4
  102. package/dist/components/table/ColumnManager.vue_vue_type_script_setup_true_lang.js.map +1 -1
  103. package/dist/components/table/ContentLayoutSort.js.map +1 -1
  104. package/dist/components/table/ContentLayoutSort.vue.d.ts.map +1 -1
  105. package/dist/components/table/ContentLayoutSort.vue_vue_type_script_setup_true_lang.js +5 -5
  106. package/dist/components/table/ContentLayoutSort.vue_vue_type_script_setup_true_lang.js.map +1 -1
  107. package/dist/components/table/SelectCell.vue_vue_type_script_setup_true_lang.js +2 -1
  108. package/dist/components/table/SelectCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  109. package/dist/components/table/SelectComboboxCell.vue_vue_type_script_setup_true_lang.js +2 -1
  110. package/dist/components/table/SelectComboboxCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  111. package/dist/components/table/TableCellContent.js.map +1 -1
  112. package/dist/components/table/TableCellContent.vue.d.ts.map +1 -1
  113. package/dist/components/table/TableCellContent.vue_vue_type_script_setup_true_lang.js +4 -3
  114. package/dist/components/table/TableCellContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  115. package/dist/components/table/TablePagination.js.map +1 -1
  116. package/dist/components/table/TablePagination.vue.d.ts.map +1 -1
  117. package/dist/components/table/TablePagination.vue_vue_type_script_setup_true_lang.js +87 -87
  118. package/dist/components/table/TablePagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
  119. package/dist/components/table/TextInputCell.vue_vue_type_script_setup_true_lang.js +2 -1
  120. package/dist/components/table/TextInputCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  121. package/dist/components/table/cell-update.d.ts +6 -0
  122. package/dist/components/table/cell-update.d.ts.map +1 -1
  123. package/dist/components/table/cell-update.js.map +1 -1
  124. package/dist/components/translation-manager/TranslationManagerView.vue_vue_type_script_setup_true_lang.js +1 -1
  125. package/dist/components/translation-manager/TranslationManagerView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  126. package/dist/components/ui/CommandAutoHighlight.js +7 -0
  127. package/dist/components/ui/CommandAutoHighlight.js.map +1 -0
  128. package/dist/components/ui/CommandAutoHighlight.vue.d.ts +21 -0
  129. package/dist/components/ui/CommandAutoHighlight.vue.d.ts.map +1 -0
  130. package/dist/components/ui/CommandAutoHighlight.vue_vue_type_script_setup_true_lang.js +18 -0
  131. package/dist/components/ui/CommandAutoHighlight.vue_vue_type_script_setup_true_lang.js.map +1 -0
  132. package/dist/components/ui/DialogContent.js.map +1 -1
  133. package/dist/components/ui/DialogContent.vue.d.ts.map +1 -1
  134. package/dist/components/ui/DialogContent.vue_vue_type_script_setup_true_lang.js +13 -12
  135. package/dist/components/ui/DialogContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  136. package/dist/components/ui/PopoverContent.js.map +1 -1
  137. package/dist/components/ui/PopoverContent.vue.d.ts.map +1 -1
  138. package/dist/components/ui/PopoverContent.vue_vue_type_script_setup_true_lang.js +9 -8
  139. package/dist/components/ui/PopoverContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  140. package/dist/components/ui/SheetContent.js.map +1 -1
  141. package/dist/components/ui/SheetContent.vue.d.ts.map +1 -1
  142. package/dist/components/ui/SheetContent.vue_vue_type_script_setup_true_lang.js +13 -12
  143. package/dist/components/ui/SheetContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  144. package/dist/components/ui/TooltipContent.js.map +1 -1
  145. package/dist/components/ui/TooltipContent.vue.d.ts.map +1 -1
  146. package/dist/components/ui/TooltipContent.vue_vue_type_script_setup_true_lang.js +9 -8
  147. package/dist/components/ui/TooltipContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  148. package/dist/context.d.ts +7 -0
  149. package/dist/context.d.ts.map +1 -1
  150. package/dist/context.js +29 -26
  151. package/dist/context.js.map +1 -1
  152. package/dist/create-alfakit.d.ts.map +1 -1
  153. package/dist/create-alfakit.js +33 -31
  154. package/dist/create-alfakit.js.map +1 -1
  155. package/dist/eject-manifest.json +11 -2
  156. package/dist/index.d.ts +1 -0
  157. package/dist/index.d.ts.map +1 -1
  158. package/dist/index.js +219 -217
  159. package/dist/layouts/AppLayout.vue_vue_type_script_setup_true_lang.js +8 -8
  160. package/dist/layouts/AppLayout.vue_vue_type_script_setup_true_lang.js.map +1 -1
  161. package/dist/layouts/AuthLayout.vue_vue_type_script_setup_true_lang.js +9 -9
  162. package/dist/layouts/FullscreenLayout.vue_vue_type_script_setup_true_lang.js +8 -8
  163. package/dist/layouts/FullscreenLayout.vue_vue_type_script_setup_true_lang.js.map +1 -1
  164. package/dist/layouts/TopNavLayout.vue_vue_type_script_setup_true_lang.js +15 -15
  165. package/dist/layouts/TopNavLayout.vue_vue_type_script_setup_true_lang.js.map +1 -1
  166. package/dist/layouts/lazy-layouts.d.ts +10 -0
  167. package/dist/layouts/lazy-layouts.d.ts.map +1 -0
  168. package/dist/layouts/lazy-layouts.js +8 -0
  169. package/dist/layouts/lazy-layouts.js.map +1 -0
  170. package/dist/layouts/panel-layouts.d.ts +8 -0
  171. package/dist/layouts/panel-layouts.d.ts.map +1 -0
  172. package/dist/layouts/panel-layouts.js +15 -0
  173. package/dist/layouts/panel-layouts.js.map +1 -0
  174. package/dist/lib/lazy.d.ts.map +1 -1
  175. package/dist/lib/lazy.js +2 -2
  176. package/dist/lib/lazy.js.map +1 -1
  177. package/dist/pages/PageShell.js.map +1 -1
  178. package/dist/pages/PageShell.vue.d.ts.map +1 -1
  179. package/dist/pages/PageShell.vue_vue_type_script_setup_true_lang.js +39 -42
  180. package/dist/pages/PageShell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  181. package/dist/standalone/AlfakitComponent.js.map +1 -1
  182. package/dist/standalone/AlfakitComponent.vue.d.ts.map +1 -1
  183. package/dist/standalone/AlfakitComponent.vue_vue_type_script_setup_true_lang.js +56 -52
  184. package/dist/standalone/AlfakitComponent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  185. package/dist/standalone.css +7 -0
  186. package/dist/starter-kit/AlfakitStarterKitRoot.js.map +1 -1
  187. package/dist/starter-kit/AlfakitStarterKitRoot.vue.d.ts +2 -2
  188. package/dist/starter-kit/AlfakitStarterKitRoot.vue.d.ts.map +1 -1
  189. package/dist/starter-kit/AlfakitStarterKitRoot.vue_vue_type_script_setup_true_lang.js +17 -12
  190. package/dist/starter-kit/AlfakitStarterKitRoot.vue_vue_type_script_setup_true_lang.js.map +1 -1
  191. package/dist/starter-kit/dashboard-widgets.d.ts +54 -0
  192. package/dist/starter-kit/dashboard-widgets.d.ts.map +1 -0
  193. package/dist/starter-kit/dashboard-widgets.js +54 -0
  194. package/dist/starter-kit/dashboard-widgets.js.map +1 -0
  195. package/dist/starter-kit/index.d.ts +2 -1
  196. package/dist/starter-kit/index.d.ts.map +1 -1
  197. package/dist/starter-kit/index.js +5 -4
  198. package/dist/starter-kit/runtime.d.ts +6 -0
  199. package/dist/starter-kit/runtime.d.ts.map +1 -1
  200. package/dist/starter-kit/runtime.js +19 -15
  201. package/dist/starter-kit/runtime.js.map +1 -1
  202. package/dist/starter-kit/starter-kit.d.ts.map +1 -1
  203. package/dist/starter-kit/starter-kit.js +8 -8
  204. package/dist/starter-kit/starter-kit.js.map +1 -1
  205. package/dist/starter-kit/widgets/CopilotTrigger.js +7 -0
  206. package/dist/starter-kit/widgets/CopilotTrigger.js.map +1 -0
  207. package/dist/starter-kit/widgets/CopilotTrigger.vue.d.ts +12 -0
  208. package/dist/starter-kit/widgets/CopilotTrigger.vue.d.ts.map +1 -0
  209. package/dist/starter-kit/widgets/CopilotTrigger.vue_vue_type_script_setup_true_lang.js +23 -0
  210. package/dist/starter-kit/widgets/CopilotTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -0
  211. package/dist/starter-kit/widgets/LoadedCopilot.js +7 -0
  212. package/dist/starter-kit/widgets/LoadedCopilot.js.map +1 -0
  213. package/dist/starter-kit/widgets/LoadedCopilot.vue.d.ts +8 -0
  214. package/dist/starter-kit/widgets/LoadedCopilot.vue.d.ts.map +1 -0
  215. package/dist/starter-kit/widgets/LoadedCopilot.vue_vue_type_script_setup_true_lang.js +31 -0
  216. package/dist/starter-kit/widgets/LoadedCopilot.vue_vue_type_script_setup_true_lang.js.map +1 -0
  217. package/dist/starter-kit/widgets/StarterKitImpersonationBanner.js +7 -0
  218. package/dist/starter-kit/widgets/StarterKitImpersonationBanner.js.map +1 -0
  219. package/dist/starter-kit/widgets/StarterKitImpersonationBanner.vue.d.ts +8 -0
  220. package/dist/starter-kit/widgets/StarterKitImpersonationBanner.vue.d.ts.map +1 -0
  221. package/dist/starter-kit/widgets/StarterKitImpersonationBanner.vue_vue_type_script_setup_true_lang.js +34 -0
  222. package/dist/starter-kit/widgets/StarterKitImpersonationBanner.vue_vue_type_script_setup_true_lang.js.map +1 -0
  223. package/dist/starter-kit/widgets/index.d.ts +40 -9
  224. package/dist/starter-kit/widgets/index.d.ts.map +1 -1
  225. package/dist/starter-kit/widgets/index.js +21 -18
  226. package/dist/starter-kit/widgets/index.js.map +1 -1
  227. package/dist/starter-kit/widgets/loaded.d.ts +10 -0
  228. package/dist/starter-kit/widgets/loaded.d.ts.map +1 -0
  229. package/dist/starter-kit/widgets/loaded.js +5 -0
  230. package/dist/styles.css +9 -2
  231. package/dist/themes.css +6 -1
  232. package/package.json +2 -2
  233. package/src/AlfakitRoot.vue +9 -1
  234. package/src/components/actions/ActionGroupMenu.vue +13 -1
  235. package/src/components/actions/ActionModal.vue +9 -0
  236. package/src/components/ai/AiCopilot.vue +7 -1
  237. package/src/components/cms/LivePreview.vue +8 -2
  238. package/src/components/fields/BuilderField.vue +15 -2
  239. package/src/components/fields/ImageEditorDialog.vue +7 -3
  240. package/src/components/fields/KeyValueField.vue +3 -2
  241. package/src/components/fields/ModalTablePicker.vue +7 -2
  242. package/src/components/fields/RepeaterField.vue +2 -3
  243. package/src/components/fields/RichEditorInput.vue +3 -0
  244. package/src/components/fields/item-actions.ts +31 -10
  245. package/src/components/form/FormBlock.vue +2 -1
  246. package/src/components/form/form-context.ts +2 -2
  247. package/src/components/kanban/KanbanBoard.vue +15 -3
  248. package/src/components/kanban/KanbanColumnHeader.vue +6 -4
  249. package/src/components/layout/SectionComponent.vue +10 -4
  250. package/src/components/panel/GlobalSearchPalette.vue +2 -0
  251. package/src/components/realtime/use-live-updates.ts +3 -1
  252. package/src/components/table/ColumnHeader.vue +23 -12
  253. package/src/components/table/ColumnManager.vue +12 -8
  254. package/src/components/table/ContentLayoutSort.vue +7 -1
  255. package/src/components/table/TableCellContent.vue +4 -2
  256. package/src/components/table/TablePagination.vue +12 -7
  257. package/src/components/table/cell-update.ts +6 -0
  258. package/src/components/ui/CommandAutoHighlight.vue +27 -0
  259. package/src/components/ui/DialogContent.vue +5 -1
  260. package/src/components/ui/PopoverContent.vue +5 -1
  261. package/src/components/ui/SheetContent.vue +5 -1
  262. package/src/components/ui/TooltipContent.vue +5 -1
  263. package/src/context.ts +10 -0
  264. package/src/create-alfakit.ts +5 -0
  265. package/src/index.ts +2 -0
  266. package/src/layouts/lazy-layouts.ts +14 -0
  267. package/src/layouts/panel-layouts.ts +17 -0
  268. package/src/lib/lazy.ts +11 -1
  269. package/src/pages/PageShell.vue +5 -6
  270. package/src/standalone/AlfakitComponent.vue +17 -6
  271. package/src/starter-kit/AlfakitStarterKitRoot.vue +12 -3
  272. package/src/starter-kit/dashboard-widgets.ts +93 -0
  273. package/src/starter-kit/index.ts +7 -1
  274. package/src/starter-kit/runtime.ts +17 -1
  275. package/src/starter-kit/starter-kit.ts +2 -1
  276. package/src/starter-kit/widgets/CopilotTrigger.vue +58 -0
  277. package/src/starter-kit/widgets/LoadedCopilot.vue +29 -0
  278. package/src/starter-kit/widgets/StarterKitImpersonationBanner.vue +57 -0
  279. package/src/starter-kit/widgets/index.ts +56 -11
  280. package/src/starter-kit/widgets/loaded.ts +9 -0
  281. package/src/styles.css +9 -2
@@ -2,6 +2,7 @@ import {
2
2
  configureCharts,
3
3
  registerRichEditorExtensions,
4
4
  starterKitBreadcrumbsFromProps,
5
+ usesStarterKitHostLayout,
5
6
  } from '@alfakit/core'
6
7
  import { defineComponent, h, markRaw } from 'vue'
7
8
  import AlfakitPage from '../pages/AlfakitPage.vue'
@@ -38,7 +39,7 @@ export function createStarterKitPage(options: StarterKitPageOptions = {}) {
38
39
  // A layout callback: the host layout (with the page's breadcrumbs), then Alfakit's root.
39
40
  return Object.assign(page, {
40
41
  layout: (props: Record<string, unknown>) => [
41
- ...(options.layout
42
+ ...(options.layout && usesStarterKitHostLayout(props)
42
43
  ? [[markRaw(options.layout), { breadcrumbs: starterKitBreadcrumbsFromProps(props) }]]
43
44
  : []),
44
45
  [AlfakitStarterKitRoot, { options }],
@@ -0,0 +1,58 @@
1
+ <script setup lang="ts">
2
+ import {
3
+ registerStarterKitCopilotShortcut,
4
+ requestStarterKitCopilot,
5
+ type StarterKitWidgets,
6
+ } from '@alfakit/core'
7
+ import { computed, watch } from 'vue'
8
+
9
+ /**
10
+ * The AI copilot's button until its code has loaded: the same look, from the shared prop
11
+ * alone (its code loads once mounted). A click and its key bindings (`mod+j`) are
12
+ * remembered and open it once loaded.
13
+ */
14
+ const props = defineProps<{ source: StarterKitWidgets }>()
15
+
16
+ const copilot = computed(() => props.source.widgets.copilot)
17
+
18
+ if (typeof window !== 'undefined') {
19
+ watch(
20
+ copilot,
21
+ (value, _old, onCleanup) =>
22
+ onCleanup(registerStarterKitCopilotShortcut(value?.keyBindings ?? [], value?.label ?? '')),
23
+ { immediate: true },
24
+ )
25
+ }
26
+ </script>
27
+
28
+ <template>
29
+ <button
30
+ type="button"
31
+ data-slot="ai-copilot-trigger"
32
+ :aria-label="copilot?.label"
33
+ aria-haspopup="dialog"
34
+ :title="copilot?.label"
35
+ class="hover:bg-accent hover:text-accent-foreground inline-flex size-9 items-center justify-center rounded-md"
36
+ @click="requestStarterKitCopilot()"
37
+ >
38
+ <!-- Lucide's "sparkles", inline: the loaded copilot draws the same icon. -->
39
+ <svg
40
+ class="size-4"
41
+ aria-hidden="true"
42
+ xmlns="http://www.w3.org/2000/svg"
43
+ viewBox="0 0 24 24"
44
+ fill="none"
45
+ stroke="currentColor"
46
+ stroke-width="2"
47
+ stroke-linecap="round"
48
+ stroke-linejoin="round"
49
+ >
50
+ <path
51
+ d="M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z"
52
+ />
53
+ <path d="M20 2v4" />
54
+ <path d="M22 4h-4" />
55
+ <circle cx="4" cy="20" r="2" />
56
+ </svg>
57
+ </button>
58
+ </template>
@@ -0,0 +1,29 @@
1
+ <script setup lang="ts">
2
+ import {
3
+ starterKitCopilot,
4
+ takeRequestedStarterKitCopilot,
5
+ type StarterKitWidgets,
6
+ } from '@alfakit/core'
7
+ import { computed, toRef } from 'vue'
8
+ import AiCopilot from '../../components/ai/AiCopilot.vue'
9
+ import CopilotTrigger from './CopilotTrigger.vue'
10
+ import { useWidgetsPanel } from './use-widgets'
11
+ import WidgetShell from './WidgetShell.vue'
12
+
13
+ /** The AI copilot (the panel pages' `topbar.end` slot component), once its data has loaded. */
14
+ const props = defineProps<{ source: StarterKitWidgets }>()
15
+
16
+ const panel = useWidgetsPanel(toRef(props, 'source'))
17
+ const component = computed(() => (panel.value ? starterKitCopilot(panel.value) : null))
18
+ // A click or the key bindings before the copilot loaded open it at once.
19
+ const autoOpen = computed(() => component.value !== null && takeRequestedStarterKitCopilot())
20
+ </script>
21
+
22
+ <template>
23
+ <template v-if="panel">
24
+ <WidgetShell v-if="component" :panel="panel">
25
+ <AiCopilot :component="component" :auto-open="autoOpen" />
26
+ </WidgetShell>
27
+ </template>
28
+ <CopilotTrigger v-else :source="props.source" />
29
+ </template>
@@ -0,0 +1,57 @@
1
+ <script lang="ts">
2
+ // The header components appear in both header layouts and next to each other: the first
3
+ // one mounted shows the banner, the others render nothing.
4
+ let owner: symbol | null = null
5
+ </script>
6
+
7
+ <script setup lang="ts">
8
+ import { isAlfakitPage, type StarterKitWidgets } from '@alfakit/core'
9
+ import { usePage } from '@inertiajs/vue3'
10
+ import { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue'
11
+ import ImpersonationBanner from '../../components/panel/ImpersonationBanner.vue'
12
+
13
+ /**
14
+ * The impersonation banner (who you are signed in as, **Leave**) on the host's own pages,
15
+ * rendered by the header components. AlfaKit's pages render their own (`AlfakitRoot`).
16
+ */
17
+ const props = defineProps<{ source: StarterKitWidgets | null }>()
18
+ const page = usePage()
19
+ const id = Symbol('impersonation-banner')
20
+ const owns = ref(false)
21
+ const impersonation = computed(() => props.source?.widgets.impersonation)
22
+ const active = computed(() => impersonation.value !== undefined && !isAlfakitPage(page.props))
23
+
24
+ function release(): void {
25
+ if (owner === id) owner = null
26
+ owns.value = false
27
+ }
28
+
29
+ // Claimed once mounted, so the server render and hydration never include it.
30
+ let stop: (() => void) | null = null
31
+
32
+ onMounted(() => {
33
+ stop = watch(
34
+ active,
35
+ (value) => {
36
+ if (!value) {
37
+ release()
38
+
39
+ return
40
+ }
41
+
42
+ if (owner === null) owner = id
43
+ owns.value = owner === id
44
+ },
45
+ { immediate: true },
46
+ )
47
+ })
48
+
49
+ onBeforeUnmount(() => {
50
+ stop?.()
51
+ release()
52
+ })
53
+ </script>
54
+
55
+ <template>
56
+ <ImpersonationBanner v-if="active && owns" :impersonation="impersonation" />
57
+ </template>
@@ -4,8 +4,17 @@ import {
4
4
  type StarterKitWidgetsSchema,
5
5
  } from '@alfakit/core'
6
6
  import { usePage } from '@inertiajs/vue3'
7
- import { computed, defineComponent, h, type Component, type ComputedRef, type PropType } from 'vue'
7
+ import {
8
+ computed,
9
+ defineAsyncComponent,
10
+ defineComponent,
11
+ h,
12
+ type Component,
13
+ type ComputedRef,
14
+ type PropType,
15
+ } from 'vue'
8
16
  import { lazyComponent } from '../../lib/lazy'
17
+ import CopilotTrigger from './CopilotTrigger.vue'
9
18
  import NotificationsTrigger from './NotificationsTrigger.vue'
10
19
  import SearchTrigger from './SearchTrigger.vue'
11
20
  import TenantSwitcherTrigger from './TenantSwitcherTrigger.vue'
@@ -18,12 +27,13 @@ import TenantSwitcherTrigger from './TenantSwitcherTrigger.vue'
18
27
  *
19
28
  * ```vue
20
29
  * <script setup lang="ts">
21
- * import { AlfakitNotifications, AlfakitSearch } from '@alfakit/vue'
30
+ * import { AlfakitCopilot, AlfakitNotifications, AlfakitSearch } from '@alfakit/vue'
22
31
  * </script>
23
32
  *
24
33
  * <template>
25
34
  * <AlfakitSearch />
26
35
  * <AlfakitNotifications />
36
+ * <AlfakitCopilot />
27
37
  * </template>
28
38
  * ```
29
39
  */
@@ -31,51 +41,73 @@ import TenantSwitcherTrigger from './TenantSwitcherTrigger.vue'
31
41
  /** The header components' data of a `starterKit()` panel from the shared prop, or null. */
32
42
  function useStarterKitWidgets(
33
43
  panelId: () => string | undefined,
44
+ part: keyof StarterKitWidgetsSchema,
34
45
  ): ComputedRef<StarterKitWidgets | null> {
35
46
  const page = usePage()
36
47
 
37
- return computed(() => starterKitWidgets(page.props, panelId()))
48
+ return computed(() => starterKitWidgets(page.props, panelId(), part))
38
49
  }
39
50
 
40
51
  const LoadedSearch = lazyComponent(
41
52
  'AlfakitLoadedSearch',
42
- () => import('./LoadedSearch.vue').then((module) => module.default),
53
+ () => import('./loaded').then((module) => module.LoadedSearch),
43
54
  SearchTrigger,
44
55
  )
45
56
 
46
57
  const LoadedNotifications = lazyComponent(
47
58
  'AlfakitLoadedNotifications',
48
- () => import('./LoadedNotifications.vue').then((module) => module.default),
59
+ () => import('./loaded').then((module) => module.LoadedNotifications),
49
60
  NotificationsTrigger,
50
61
  )
51
62
 
52
63
  const LoadedTenantSwitcher = lazyComponent(
53
64
  'AlfakitLoadedTenantSwitcher',
54
- () => import('./LoadedTenantSwitcher.vue').then((module) => module.default),
65
+ () => import('./loaded').then((module) => module.LoadedTenantSwitcher),
55
66
  TenantSwitcherTrigger,
56
67
  )
57
68
 
69
+ const LoadedCopilot = lazyComponent(
70
+ 'AlfakitLoadedCopilot',
71
+ () => import('./loaded').then((module) => module.LoadedCopilot),
72
+ CopilotTrigger,
73
+ )
74
+
75
+ // Only needed while impersonating: its code loads then.
76
+ const StarterKitImpersonationBanner = defineAsyncComponent(
77
+ () => import('./StarterKitImpersonationBanner.vue'),
78
+ )
79
+
58
80
  function headerWidget(
59
81
  name: string,
60
82
  slot: string,
61
- part: keyof Omit<StarterKitWidgetsSchema, 'endpoint'>,
83
+ part: keyof Omit<StarterKitWidgetsSchema, 'endpoint' | 'impersonation'>,
62
84
  loaded: Component,
63
85
  ) {
64
86
  return defineComponent({
65
87
  name,
66
88
  props: {
67
- /** The `starterKit()` panel to use (the first one by default). */
89
+ /** The `starterKit()` panel to use (by default the open AlfaKit page's panel, else the first one that has this component). */
68
90
  panel: { type: String as PropType<string | undefined>, default: undefined },
69
91
  },
70
92
  setup(props) {
71
- const source = useStarterKitWidgets(() => props.panel)
93
+ const source = useStarterKitWidgets(() => props.panel, part)
72
94
 
73
95
  return () => {
74
96
  const value: StarterKitWidgets | null = source.value
75
97
 
76
- return value?.widgets[part]
77
- ? h('span', { 'data-slot': slot, class: 'inline-flex' }, [h(loaded, { source: value })])
98
+ // While impersonating, the first header component shows the banner on host pages.
99
+ const banner = value?.widgets.impersonation
100
+ ? h(StarterKitImpersonationBanner, { source: value })
78
101
  : null
102
+
103
+ if (!value?.widgets[part]) return banner
104
+
105
+ const widget = h('span', { 'data-slot': slot, class: 'inline-flex' }, [
106
+ h(loaded, { source: value }),
107
+ ])
108
+
109
+ // A single root unless the banner shows, so attributes from the app still fall through.
110
+ return banner ? [banner, widget] : widget
79
111
  }
80
112
  },
81
113
  })
@@ -114,3 +146,16 @@ export const AlfakitTenantSwitcher = headerWidget(
114
146
  'tenancy',
115
147
  LoadedTenantSwitcher,
116
148
  )
149
+
150
+ /**
151
+ * The AI copilot of alfasix/alfakit-ai (`AiPlugin::copilot()`): its button and chat
152
+ * slide-over, opened with its key bindings (`mod+j`) from any page. Renders nothing for
153
+ * guests, without the plugin's copilot, for users who may not use it and (tenancy panels)
154
+ * outside a tenant.
155
+ */
156
+ export const AlfakitCopilot = headerWidget(
157
+ 'AlfakitCopilot',
158
+ 'starter-kit-copilot',
159
+ 'copilot',
160
+ LoadedCopilot,
161
+ )
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The loaded header components, in one module: they mount together in the host's header,
3
+ * so one request brings them all, and a host bundle doesn't pay for a chunk per component.
4
+ * Only loaded in the browser (`import('./loaded')`).
5
+ */
6
+ export { default as LoadedCopilot } from './LoadedCopilot.vue'
7
+ export { default as LoadedNotifications } from './LoadedNotifications.vue'
8
+ export { default as LoadedSearch } from './LoadedSearch.vue'
9
+ export { default as LoadedTenantSwitcher } from './LoadedTenantSwitcher.vue'
package/src/styles.css CHANGED
@@ -19,6 +19,13 @@
19
19
 
20
20
  @custom-variant dark (&:is(.dark *));
21
21
 
22
+ /*
23
+ * Class lists that live in @alfakit/core (stacked-on-mobile tables, filter and column manager
24
+ * widths in `table.ts`, …): scan core's build too. Relative to this file in
25
+ * node_modules/@alfakit/<renderer>/dist, next to node_modules/@alfakit/core.
26
+ */
27
+ @source '../../core/dist';
28
+
22
29
  /*
23
30
  * Grid classes are composed at runtime from schema breakpoints (`columns`, `columnSpan`),
24
31
  * so force Tailwind to generate every variant the renderers can produce.
@@ -122,10 +129,10 @@
122
129
  --secondary: oklch(0.97 0 0);
123
130
  --secondary-foreground: oklch(0.205 0 0);
124
131
  --muted: oklch(0.97 0 0);
125
- --muted-foreground: oklch(0.556 0 0);
132
+ --muted-foreground: oklch(0.54 0 0);
126
133
  --accent: oklch(0.97 0 0);
127
134
  --accent-foreground: oklch(0.205 0 0);
128
- --destructive: var(--alfakit-danger, oklch(0.55 0.245 27.325));
135
+ --destructive: var(--alfakit-danger, oklch(0.5 0.245 27.325));
129
136
  --destructive-foreground: var(--alfakit-danger-foreground, oklch(0.985 0 0));
130
137
  --border: oklch(0.922 0 0);
131
138
  --input: oklch(0.64 0 0);