@alfakit/react 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1015) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/LICENSE.md +21 -0
  3. package/README.md +19 -2
  4. package/dist/app/components.d.ts +49 -0
  5. package/dist/app/components.d.ts.map +1 -0
  6. package/dist/app/components.js +99 -0
  7. package/dist/app/components.js.map +1 -0
  8. package/dist/app/hooks.d.ts +79 -0
  9. package/dist/app/hooks.d.ts.map +1 -0
  10. package/dist/app/hooks.js +239 -0
  11. package/dist/app/hooks.js.map +1 -0
  12. package/dist/components/actions/action-button.d.ts +17 -0
  13. package/dist/components/actions/action-button.d.ts.map +1 -0
  14. package/dist/components/actions/action-button.js +150 -0
  15. package/dist/components/actions/action-button.js.map +1 -0
  16. package/dist/components/actions/action-context.d.ts +11 -0
  17. package/dist/components/actions/action-context.d.ts.map +1 -0
  18. package/dist/components/actions/action-context.js +24 -0
  19. package/dist/components/actions/action-context.js.map +1 -0
  20. package/dist/components/actions/action-list.d.ts +20 -0
  21. package/dist/components/actions/action-list.d.ts.map +1 -0
  22. package/dist/components/actions/action-list.js +181 -0
  23. package/dist/components/actions/action-list.js.map +1 -0
  24. package/dist/components/actions/action-modals.d.ts +5 -0
  25. package/dist/components/actions/action-modals.d.ts.map +1 -0
  26. package/dist/components/actions/action-modals.js +362 -0
  27. package/dist/components/actions/action-modals.js.map +1 -0
  28. package/dist/components/actions/index.d.ts +5 -0
  29. package/dist/components/ai/copilot-panel.js +439 -0
  30. package/dist/components/ai/copilot-panel.js.map +1 -0
  31. package/dist/components/ai/copilot.d.ts +12 -0
  32. package/dist/components/ai/copilot.d.ts.map +1 -0
  33. package/dist/components/ai/copilot.js +66 -0
  34. package/dist/components/ai/copilot.js.map +1 -0
  35. package/dist/components/ai/index.d.ts +3 -0
  36. package/dist/components/ai/index.js +3 -0
  37. package/dist/components/ai/stream-lazy.d.ts +9 -0
  38. package/dist/components/ai/stream-lazy.d.ts.map +1 -0
  39. package/dist/components/ai/stream-lazy.js +13 -0
  40. package/dist/components/ai/stream-lazy.js.map +1 -0
  41. package/dist/components/ai/stream.js +85 -0
  42. package/dist/components/ai/stream.js.map +1 -0
  43. package/dist/components/analytics/alfakit-analytics.d.ts +14 -0
  44. package/dist/components/analytics/alfakit-analytics.d.ts.map +1 -0
  45. package/dist/components/analytics/alfakit-analytics.js +36 -0
  46. package/dist/components/analytics/alfakit-analytics.js.map +1 -0
  47. package/dist/components/analytics/breakdown.d.ts +11 -0
  48. package/dist/components/analytics/breakdown.d.ts.map +1 -0
  49. package/dist/components/analytics/breakdown.js +155 -0
  50. package/dist/components/analytics/breakdown.js.map +1 -0
  51. package/dist/components/analytics/index.d.ts +3 -0
  52. package/dist/components/cms/admin-bar.js +68 -0
  53. package/dist/components/cms/admin-bar.js.map +1 -0
  54. package/dist/components/cms/blocks.d.ts +41 -0
  55. package/dist/components/cms/blocks.d.ts.map +1 -0
  56. package/dist/components/cms/blocks.js +400 -0
  57. package/dist/components/cms/blocks.js.map +1 -0
  58. package/dist/components/cms/context.d.ts +24 -0
  59. package/dist/components/cms/context.d.ts.map +1 -0
  60. package/dist/components/cms/context.js +43 -0
  61. package/dist/components/cms/context.js.map +1 -0
  62. package/dist/components/cms/head.d.ts +11 -0
  63. package/dist/components/cms/head.d.ts.map +1 -0
  64. package/dist/components/cms/head.js +40 -0
  65. package/dist/components/cms/head.js.map +1 -0
  66. package/dist/components/cms/index.d.ts +8 -0
  67. package/dist/components/cms/index.js +8 -0
  68. package/dist/components/cms/live-preview-lazy.d.ts +9 -0
  69. package/dist/components/cms/live-preview-lazy.d.ts.map +1 -0
  70. package/dist/components/cms/live-preview-lazy.js +13 -0
  71. package/dist/components/cms/live-preview-lazy.js.map +1 -0
  72. package/dist/components/cms/live-preview.js +288 -0
  73. package/dist/components/cms/live-preview.js.map +1 -0
  74. package/dist/components/cms/menu.d.ts +24 -0
  75. package/dist/components/cms/menu.d.ts.map +1 -0
  76. package/dist/components/cms/menu.js +181 -0
  77. package/dist/components/cms/menu.js.map +1 -0
  78. package/dist/components/cms/page.d.ts +27 -0
  79. package/dist/components/cms/page.d.ts.map +1 -0
  80. package/dist/components/cms/page.js +180 -0
  81. package/dist/components/cms/page.js.map +1 -0
  82. package/dist/components/cms/parts.d.ts +24 -0
  83. package/dist/components/cms/parts.d.ts.map +1 -0
  84. package/dist/components/cms/parts.js +58 -0
  85. package/dist/components/cms/parts.js.map +1 -0
  86. package/dist/components/dev-tools/dev-tools-inspector.js +302 -0
  87. package/dist/components/dev-tools/dev-tools-inspector.js.map +1 -0
  88. package/dist/components/dev-tools/dev-tools-slot.js +24 -0
  89. package/dist/components/dev-tools/dev-tools-slot.js.map +1 -0
  90. package/dist/components/entries/code-entry.d.ts +8 -0
  91. package/dist/components/entries/code-entry.d.ts.map +1 -0
  92. package/dist/components/entries/code-entry.js +59 -0
  93. package/dist/components/entries/code-entry.js.map +1 -0
  94. package/dist/components/entries/entry-wrapper.d.ts +13 -0
  95. package/dist/components/entries/entry-wrapper.d.ts.map +1 -0
  96. package/dist/components/entries/entry-wrapper.js +175 -0
  97. package/dist/components/entries/entry-wrapper.js.map +1 -0
  98. package/dist/components/entries/index.d.ts +6 -0
  99. package/dist/components/entries/other-entries.d.ts +20 -0
  100. package/dist/components/entries/other-entries.d.ts.map +1 -0
  101. package/dist/components/entries/other-entries.js +169 -0
  102. package/dist/components/entries/other-entries.js.map +1 -0
  103. package/dist/components/entries/repeatable-entry-table.js +33 -0
  104. package/dist/components/entries/repeatable-entry-table.js.map +1 -0
  105. package/dist/components/entries/text-entry.d.ts +12 -0
  106. package/dist/components/entries/text-entry.d.ts.map +1 -0
  107. package/dist/components/entries/text-entry.js +181 -0
  108. package/dist/components/entries/text-entry.js.map +1 -0
  109. package/dist/components/entries/view-entry.d.ts +8 -0
  110. package/dist/components/entries/view-entry.d.ts.map +1 -0
  111. package/dist/components/entries/view-entry.js +26 -0
  112. package/dist/components/entries/view-entry.js.map +1 -0
  113. package/dist/components/fields/builder-picker.js +215 -0
  114. package/dist/components/fields/builder-picker.js.map +1 -0
  115. package/dist/components/fields/builder.d.ts +16 -0
  116. package/dist/components/fields/builder.d.ts.map +1 -0
  117. package/dist/components/fields/builder.js +351 -0
  118. package/dist/components/fields/builder.js.map +1 -0
  119. package/dist/components/fields/checkbox-list.d.ts +7 -0
  120. package/dist/components/fields/checkbox-list.d.ts.map +1 -0
  121. package/dist/components/fields/checkbox-list.js +133 -0
  122. package/dist/components/fields/checkbox-list.js.map +1 -0
  123. package/dist/components/fields/checkbox.d.ts +7 -0
  124. package/dist/components/fields/checkbox.d.ts.map +1 -0
  125. package/dist/components/fields/checkbox.js +29 -0
  126. package/dist/components/fields/checkbox.js.map +1 -0
  127. package/dist/components/fields/code-editor-lazy.d.ts +9 -0
  128. package/dist/components/fields/code-editor-lazy.d.ts.map +1 -0
  129. package/dist/components/fields/code-editor-lazy.js +31 -0
  130. package/dist/components/fields/code-editor-lazy.js.map +1 -0
  131. package/dist/components/fields/code-editor.js +107 -0
  132. package/dist/components/fields/code-editor.js.map +1 -0
  133. package/dist/components/fields/code-tokens.js +18 -0
  134. package/dist/components/fields/code-tokens.js.map +1 -0
  135. package/dist/components/fields/color-picker.d.ts +7 -0
  136. package/dist/components/fields/color-picker.d.ts.map +1 -0
  137. package/dist/components/fields/color-picker.js +70 -0
  138. package/dist/components/fields/color-picker.js.map +1 -0
  139. package/dist/components/fields/date-picker.d.ts +7 -0
  140. package/dist/components/fields/date-picker.d.ts.map +1 -0
  141. package/dist/components/fields/date-picker.js +230 -0
  142. package/dist/components/fields/date-picker.js.map +1 -0
  143. package/dist/components/fields/file-upload.d.ts +7 -0
  144. package/dist/components/fields/file-upload.d.ts.map +1 -0
  145. package/dist/components/fields/file-upload.js +397 -0
  146. package/dist/components/fields/file-upload.js.map +1 -0
  147. package/dist/components/fields/hidden.d.ts +7 -0
  148. package/dist/components/fields/hidden.d.ts.map +1 -0
  149. package/dist/components/fields/hidden.js +17 -0
  150. package/dist/components/fields/hidden.js.map +1 -0
  151. package/dist/components/fields/icon-picker-lazy.d.ts +9 -0
  152. package/dist/components/fields/icon-picker-lazy.d.ts.map +1 -0
  153. package/dist/components/fields/icon-picker-lazy.js +45 -0
  154. package/dist/components/fields/icon-picker-lazy.js.map +1 -0
  155. package/dist/components/fields/icon-picker-value.js +48 -0
  156. package/dist/components/fields/icon-picker-value.js.map +1 -0
  157. package/dist/components/fields/icon-picker.js +228 -0
  158. package/dist/components/fields/icon-picker.js.map +1 -0
  159. package/dist/components/fields/image-editor-dialog-lazy.js +18 -0
  160. package/dist/components/fields/image-editor-dialog-lazy.js.map +1 -0
  161. package/dist/components/fields/image-editor-dialog.js +328 -0
  162. package/dist/components/fields/image-editor-dialog.js.map +1 -0
  163. package/dist/components/fields/index.d.ts +24 -0
  164. package/dist/components/fields/item-actions.js +270 -0
  165. package/dist/components/fields/item-actions.js.map +1 -0
  166. package/dist/components/fields/key-value.d.ts +11 -0
  167. package/dist/components/fields/key-value.d.ts.map +1 -0
  168. package/dist/components/fields/key-value.js +194 -0
  169. package/dist/components/fields/key-value.js.map +1 -0
  170. package/dist/components/fields/lazy-fields.d.ts +13 -0
  171. package/dist/components/fields/lazy-fields.d.ts.map +1 -0
  172. package/dist/components/fields/lazy-fields.js +34 -0
  173. package/dist/components/fields/lazy-fields.js.map +1 -0
  174. package/dist/components/fields/modal-table-select.js +386 -0
  175. package/dist/components/fields/modal-table-select.js.map +1 -0
  176. package/dist/components/fields/money-input.d.ts +7 -0
  177. package/dist/components/fields/money-input.d.ts.map +1 -0
  178. package/dist/components/fields/money-input.js +91 -0
  179. package/dist/components/fields/money-input.js.map +1 -0
  180. package/dist/components/fields/one-time-code-input.d.ts +12 -0
  181. package/dist/components/fields/one-time-code-input.d.ts.map +1 -0
  182. package/dist/components/fields/one-time-code-input.js +53 -0
  183. package/dist/components/fields/one-time-code-input.js.map +1 -0
  184. package/dist/components/fields/query-builder-rules.js +295 -0
  185. package/dist/components/fields/query-builder-rules.js.map +1 -0
  186. package/dist/components/fields/radio.d.ts +7 -0
  187. package/dist/components/fields/radio.d.ts.map +1 -0
  188. package/dist/components/fields/radio.js +57 -0
  189. package/dist/components/fields/radio.js.map +1 -0
  190. package/dist/components/fields/repeater-table.js +111 -0
  191. package/dist/components/fields/repeater-table.js.map +1 -0
  192. package/dist/components/fields/repeater.d.ts +15 -0
  193. package/dist/components/fields/repeater.d.ts.map +1 -0
  194. package/dist/components/fields/repeater.js +209 -0
  195. package/dist/components/fields/repeater.js.map +1 -0
  196. package/dist/components/fields/rich-editor-extensions.js +295 -0
  197. package/dist/components/fields/rich-editor-extensions.js.map +1 -0
  198. package/dist/components/fields/rich-editor-lazy.d.ts +9 -0
  199. package/dist/components/fields/rich-editor-lazy.d.ts.map +1 -0
  200. package/dist/components/fields/rich-editor-lazy.js +24 -0
  201. package/dist/components/fields/rich-editor-lazy.js.map +1 -0
  202. package/dist/components/fields/rich-editor.js +517 -0
  203. package/dist/components/fields/rich-editor.js.map +1 -0
  204. package/dist/components/fields/select.d.ts +7 -0
  205. package/dist/components/fields/select.d.ts.map +1 -0
  206. package/dist/components/fields/select.js +455 -0
  207. package/dist/components/fields/select.js.map +1 -0
  208. package/dist/components/fields/slider.d.ts +12 -0
  209. package/dist/components/fields/slider.d.ts.map +1 -0
  210. package/dist/components/fields/slider.js +146 -0
  211. package/dist/components/fields/slider.js.map +1 -0
  212. package/dist/components/fields/tags-input.d.ts +7 -0
  213. package/dist/components/fields/tags-input.d.ts.map +1 -0
  214. package/dist/components/fields/tags-input.js +129 -0
  215. package/dist/components/fields/tags-input.js.map +1 -0
  216. package/dist/components/fields/text-input.d.ts +7 -0
  217. package/dist/components/fields/text-input.d.ts.map +1 -0
  218. package/dist/components/fields/text-input.js +135 -0
  219. package/dist/components/fields/text-input.js.map +1 -0
  220. package/dist/components/fields/textarea.d.ts +7 -0
  221. package/dist/components/fields/textarea.d.ts.map +1 -0
  222. package/dist/components/fields/textarea.js +37 -0
  223. package/dist/components/fields/textarea.js.map +1 -0
  224. package/dist/components/fields/toggle-buttons.d.ts +7 -0
  225. package/dist/components/fields/toggle-buttons.d.ts.map +1 -0
  226. package/dist/components/fields/toggle-buttons.js +84 -0
  227. package/dist/components/fields/toggle-buttons.js.map +1 -0
  228. package/dist/components/fields/toggle.d.ts +7 -0
  229. package/dist/components/fields/toggle.d.ts.map +1 -0
  230. package/dist/components/fields/toggle.js +39 -0
  231. package/dist/components/fields/toggle.js.map +1 -0
  232. package/dist/components/file-manager/file-manager-lazy.d.ts +10 -0
  233. package/dist/components/file-manager/file-manager-lazy.d.ts.map +1 -0
  234. package/dist/components/file-manager/file-manager-lazy.js +49 -0
  235. package/dist/components/file-manager/file-manager-lazy.js.map +1 -0
  236. package/dist/components/file-manager/file-manager.d.ts +1 -0
  237. package/dist/components/file-manager/file-manager.js +1387 -0
  238. package/dist/components/file-manager/file-manager.js.map +1 -0
  239. package/dist/components/file-manager/index.d.ts +3 -0
  240. package/dist/components/file-manager/picker-field.d.ts +12 -0
  241. package/dist/components/file-manager/picker-field.d.ts.map +1 -0
  242. package/dist/components/file-manager/picker-field.js +124 -0
  243. package/dist/components/file-manager/picker-field.js.map +1 -0
  244. package/dist/components/form/form-block.d.ts +12 -0
  245. package/dist/components/form/form-block.d.ts.map +1 -0
  246. package/dist/components/form/form-block.js +155 -0
  247. package/dist/components/form/form-block.js.map +1 -0
  248. package/dist/components/form/form-context.d.ts +27 -0
  249. package/dist/components/form/form-context.d.ts.map +1 -0
  250. package/dist/components/form/form-context.js +65 -0
  251. package/dist/components/form/form-context.js.map +1 -0
  252. package/dist/components/helpdesk/chat-panel.js +209 -0
  253. package/dist/components/helpdesk/chat-panel.js.map +1 -0
  254. package/dist/components/helpdesk/chat-widget.d.ts +23 -0
  255. package/dist/components/helpdesk/chat-widget.d.ts.map +1 -0
  256. package/dist/components/helpdesk/chat-widget.js +76 -0
  257. package/dist/components/helpdesk/chat-widget.js.map +1 -0
  258. package/dist/components/helpdesk/inbox-lazy.d.ts +9 -0
  259. package/dist/components/helpdesk/inbox-lazy.d.ts.map +1 -0
  260. package/dist/components/helpdesk/inbox-lazy.js +46 -0
  261. package/dist/components/helpdesk/inbox-lazy.js.map +1 -0
  262. package/dist/components/helpdesk/inbox.js +609 -0
  263. package/dist/components/helpdesk/inbox.js.map +1 -0
  264. package/dist/components/helpdesk/index.d.ts +3 -0
  265. package/dist/components/kanban/index.d.ts +2 -0
  266. package/dist/components/kanban/index.js +2 -0
  267. package/dist/components/kanban/kanban-lazy.d.ts +10 -0
  268. package/dist/components/kanban/kanban-lazy.d.ts.map +1 -0
  269. package/dist/components/kanban/kanban-lazy.js +31 -0
  270. package/dist/components/kanban/kanban-lazy.js.map +1 -0
  271. package/dist/components/kanban/kanban.js +591 -0
  272. package/dist/components/kanban/kanban.js.map +1 -0
  273. package/dist/components/layout/actions.js +40 -0
  274. package/dist/components/layout/actions.js.map +1 -0
  275. package/dist/components/layout/component-context.d.ts +13 -0
  276. package/dist/components/layout/component-context.d.ts.map +1 -0
  277. package/dist/components/layout/component-context.js +28 -0
  278. package/dist/components/layout/component-context.js.map +1 -0
  279. package/dist/components/layout/deferred.js +135 -0
  280. package/dist/components/layout/deferred.js.map +1 -0
  281. package/dist/components/layout/elements.d.ts +23 -0
  282. package/dist/components/layout/elements.d.ts.map +1 -0
  283. package/dist/components/layout/elements.js +183 -0
  284. package/dist/components/layout/elements.js.map +1 -0
  285. package/dist/components/layout/fieldset.d.ts +7 -0
  286. package/dist/components/layout/fieldset.d.ts.map +1 -0
  287. package/dist/components/layout/fieldset.js +29 -0
  288. package/dist/components/layout/fieldset.js.map +1 -0
  289. package/dist/components/layout/fused-group.d.ts +11 -0
  290. package/dist/components/layout/fused-group.d.ts.map +1 -0
  291. package/dist/components/layout/fused-group.js +64 -0
  292. package/dist/components/layout/fused-group.js.map +1 -0
  293. package/dist/components/layout/grid.d.ts +7 -0
  294. package/dist/components/layout/grid.d.ts.map +1 -0
  295. package/dist/components/layout/grid.js +20 -0
  296. package/dist/components/layout/grid.js.map +1 -0
  297. package/dist/components/layout/index.d.ts +12 -0
  298. package/dist/components/layout/mixed-content.d.ts +14 -0
  299. package/dist/components/layout/mixed-content.d.ts.map +1 -0
  300. package/dist/components/layout/mixed-content.js +44 -0
  301. package/dist/components/layout/mixed-content.js.map +1 -0
  302. package/dist/components/layout/prime.d.ts +17 -0
  303. package/dist/components/layout/prime.d.ts.map +1 -0
  304. package/dist/components/layout/prime.js +126 -0
  305. package/dist/components/layout/prime.js.map +1 -0
  306. package/dist/components/layout/schema-children.d.ts +18 -0
  307. package/dist/components/layout/schema-children.d.ts.map +1 -0
  308. package/dist/components/layout/schema-children.js +26 -0
  309. package/dist/components/layout/schema-children.js.map +1 -0
  310. package/dist/components/layout/section.d.ts +7 -0
  311. package/dist/components/layout/section.d.ts.map +1 -0
  312. package/dist/components/layout/section.js +133 -0
  313. package/dist/components/layout/section.js.map +1 -0
  314. package/dist/components/layout/tabs.d.ts +7 -0
  315. package/dist/components/layout/tabs.d.ts.map +1 -0
  316. package/dist/components/layout/tabs.js +83 -0
  317. package/dist/components/layout/tabs.js.map +1 -0
  318. package/dist/components/layout/wizard.d.ts +7 -0
  319. package/dist/components/layout/wizard.d.ts.map +1 -0
  320. package/dist/components/layout/wizard.js +172 -0
  321. package/dist/components/layout/wizard.js.map +1 -0
  322. package/dist/components/notifications/flash-toasts.d.ts +20 -0
  323. package/dist/components/notifications/flash-toasts.d.ts.map +1 -0
  324. package/dist/components/notifications/flash-toasts.js +121 -0
  325. package/dist/components/notifications/flash-toasts.js.map +1 -0
  326. package/dist/components/notifications/index.d.ts +5 -0
  327. package/dist/components/notifications/notifications-menu.d.ts +15 -0
  328. package/dist/components/notifications/notifications-menu.d.ts.map +1 -0
  329. package/dist/components/notifications/notifications-menu.js +201 -0
  330. package/dist/components/notifications/notifications-menu.js.map +1 -0
  331. package/dist/components/notifications/realtime-notifications.d.ts +9 -0
  332. package/dist/components/notifications/realtime-notifications.d.ts.map +1 -0
  333. package/dist/components/notifications/realtime-notifications.js +30 -0
  334. package/dist/components/notifications/realtime-notifications.js.map +1 -0
  335. package/dist/components/notifications/undo-button.d.ts +13 -0
  336. package/dist/components/notifications/undo-button.d.ts.map +1 -0
  337. package/dist/components/notifications/undo-button.js +54 -0
  338. package/dist/components/notifications/undo-button.js.map +1 -0
  339. package/dist/components/panel/app-sidebar.d.ts +7 -0
  340. package/dist/components/panel/app-sidebar.d.ts.map +1 -0
  341. package/dist/components/panel/app-sidebar.js +302 -0
  342. package/dist/components/panel/app-sidebar.js.map +1 -0
  343. package/dist/components/panel/bottom-nav.d.ts +9 -0
  344. package/dist/components/panel/bottom-nav.d.ts.map +1 -0
  345. package/dist/components/panel/bottom-nav.js +100 -0
  346. package/dist/components/panel/bottom-nav.js.map +1 -0
  347. package/dist/components/panel/debug-panel-slot.d.ts +8 -0
  348. package/dist/components/panel/debug-panel-slot.d.ts.map +1 -0
  349. package/dist/components/panel/debug-panel-slot.js +19 -0
  350. package/dist/components/panel/debug-panel-slot.js.map +1 -0
  351. package/dist/components/panel/debug-panel.d.ts +18 -0
  352. package/dist/components/panel/debug-panel.d.ts.map +1 -0
  353. package/dist/components/panel/debug-panel.js +423 -0
  354. package/dist/components/panel/debug-panel.js.map +1 -0
  355. package/dist/components/panel/global-search-palette.js +278 -0
  356. package/dist/components/panel/global-search-palette.js.map +1 -0
  357. package/dist/components/panel/global-search.d.ts +13 -0
  358. package/dist/components/panel/global-search.d.ts.map +1 -0
  359. package/dist/components/panel/global-search.js +114 -0
  360. package/dist/components/panel/global-search.js.map +1 -0
  361. package/dist/components/panel/impersonation-banner.d.ts +11 -0
  362. package/dist/components/panel/impersonation-banner.d.ts.map +1 -0
  363. package/dist/components/panel/impersonation-banner.js +52 -0
  364. package/dist/components/panel/impersonation-banner.js.map +1 -0
  365. package/dist/components/panel/index.d.ts +18 -0
  366. package/dist/components/panel/keyboard-shortcuts.d.ts +10 -0
  367. package/dist/components/panel/keyboard-shortcuts.d.ts.map +1 -0
  368. package/dist/components/panel/keyboard-shortcuts.js +107 -0
  369. package/dist/components/panel/keyboard-shortcuts.js.map +1 -0
  370. package/dist/components/panel/lazy-placeholder.d.ts +11 -0
  371. package/dist/components/panel/lazy-placeholder.d.ts.map +1 -0
  372. package/dist/components/panel/lazy-placeholder.js +35 -0
  373. package/dist/components/panel/lazy-placeholder.js.map +1 -0
  374. package/dist/components/panel/locale-switcher.d.ts +19 -0
  375. package/dist/components/panel/locale-switcher.d.ts.map +1 -0
  376. package/dist/components/panel/locale-switcher.js +113 -0
  377. package/dist/components/panel/locale-switcher.js.map +1 -0
  378. package/dist/components/panel/menu-item.js +65 -0
  379. package/dist/components/panel/menu-item.js.map +1 -0
  380. package/dist/components/panel/nav-label.js +29 -0
  381. package/dist/components/panel/nav-label.js.map +1 -0
  382. package/dist/components/panel/pwa.d.ts +13 -0
  383. package/dist/components/panel/pwa.d.ts.map +1 -0
  384. package/dist/components/panel/pwa.js +90 -0
  385. package/dist/components/panel/pwa.js.map +1 -0
  386. package/dist/components/panel/schema-contract-guard.js +44 -0
  387. package/dist/components/panel/schema-contract-guard.js.map +1 -0
  388. package/dist/components/panel/shortcut-keys.d.ts +11 -0
  389. package/dist/components/panel/shortcut-keys.d.ts.map +1 -0
  390. package/dist/components/panel/shortcut-keys.js +33 -0
  391. package/dist/components/panel/shortcut-keys.js.map +1 -0
  392. package/dist/components/panel/shortcuts-overlay.d.ts +13 -0
  393. package/dist/components/panel/shortcuts-overlay.d.ts.map +1 -0
  394. package/dist/components/panel/shortcuts-overlay.js +159 -0
  395. package/dist/components/panel/shortcuts-overlay.js.map +1 -0
  396. package/dist/components/panel/slot.d.ts +18 -0
  397. package/dist/components/panel/slot.d.ts.map +1 -0
  398. package/dist/components/panel/slot.js +31 -0
  399. package/dist/components/panel/slot.js.map +1 -0
  400. package/dist/components/panel/sub-navigation.js +125 -0
  401. package/dist/components/panel/sub-navigation.js.map +1 -0
  402. package/dist/components/panel/tenant-menu.d.ts +10 -0
  403. package/dist/components/panel/tenant-menu.d.ts.map +1 -0
  404. package/dist/components/panel/tenant-menu.js +196 -0
  405. package/dist/components/panel/tenant-menu.js.map +1 -0
  406. package/dist/components/panel/theme-toggle.d.ts +4 -0
  407. package/dist/components/panel/theme-toggle.d.ts.map +1 -0
  408. package/dist/components/panel/theme-toggle.js +84 -0
  409. package/dist/components/panel/theme-toggle.js.map +1 -0
  410. package/dist/components/panel/topbar.d.ts +10 -0
  411. package/dist/components/panel/topbar.d.ts.map +1 -0
  412. package/dist/components/panel/topbar.js +74 -0
  413. package/dist/components/panel/topbar.js.map +1 -0
  414. package/dist/components/panel/user-menu.d.ts +16 -0
  415. package/dist/components/panel/user-menu.d.ts.map +1 -0
  416. package/dist/components/panel/user-menu.js +151 -0
  417. package/dist/components/panel/user-menu.js.map +1 -0
  418. package/dist/components/realtime/conflict-banner.d.ts +13 -0
  419. package/dist/components/realtime/conflict-banner.d.ts.map +1 -0
  420. package/dist/components/realtime/conflict-banner.js +193 -0
  421. package/dist/components/realtime/conflict-banner.js.map +1 -0
  422. package/dist/components/realtime/index.d.ts +4 -0
  423. package/dist/components/realtime/index.js +4 -0
  424. package/dist/components/realtime/live-records-pill.d.ts +19 -0
  425. package/dist/components/realtime/live-records-pill.d.ts.map +1 -0
  426. package/dist/components/realtime/live-records-pill.js +57 -0
  427. package/dist/components/realtime/live-records-pill.js.map +1 -0
  428. package/dist/components/realtime/record-presence.d.ts +12 -0
  429. package/dist/components/realtime/record-presence.d.ts.map +1 -0
  430. package/dist/components/realtime/record-presence.js +79 -0
  431. package/dist/components/realtime/record-presence.js.map +1 -0
  432. package/dist/components/schema/content-slot.js +49 -0
  433. package/dist/components/schema/content-slot.js.map +1 -0
  434. package/dist/components/schema/field-actions.js +72 -0
  435. package/dist/components/schema/field-actions.js.map +1 -0
  436. package/dist/components/schema/field-wrapper.d.ts +20 -0
  437. package/dist/components/schema/field-wrapper.d.ts.map +1 -0
  438. package/dist/components/schema/field-wrapper.js +210 -0
  439. package/dist/components/schema/field-wrapper.js.map +1 -0
  440. package/dist/components/schema/fused-group-context.js +14 -0
  441. package/dist/components/schema/fused-group-context.js.map +1 -0
  442. package/dist/components/schema/schema-renderer.d.ts +23 -0
  443. package/dist/components/schema/schema-renderer.d.ts.map +1 -0
  444. package/dist/components/schema/schema-renderer.js +77 -0
  445. package/dist/components/schema/schema-renderer.js.map +1 -0
  446. package/dist/components/schema/translatable-field.js +76 -0
  447. package/dist/components/schema/translatable-field.js.map +1 -0
  448. package/dist/components/schema/virtual-spacer.js +23 -0
  449. package/dist/components/schema/virtual-spacer.js.map +1 -0
  450. package/dist/components/table/cells.d.ts +12 -0
  451. package/dist/components/table/cells.d.ts.map +1 -0
  452. package/dist/components/table/cells.js +472 -0
  453. package/dist/components/table/cells.js.map +1 -0
  454. package/dist/components/table/column-manager.d.ts +17 -0
  455. package/dist/components/table/column-manager.d.ts.map +1 -0
  456. package/dist/components/table/column-manager.js +338 -0
  457. package/dist/components/table/column-manager.js.map +1 -0
  458. package/dist/components/table/content-layout.d.ts +30 -0
  459. package/dist/components/table/content-layout.d.ts.map +1 -0
  460. package/dist/components/table/content-layout.js +224 -0
  461. package/dist/components/table/content-layout.js.map +1 -0
  462. package/dist/components/table/filters.d.ts +15 -0
  463. package/dist/components/table/filters.d.ts.map +1 -0
  464. package/dist/components/table/filters.js +300 -0
  465. package/dist/components/table/filters.js.map +1 -0
  466. package/dist/components/table/grouping.js +194 -0
  467. package/dist/components/table/grouping.js.map +1 -0
  468. package/dist/components/table/index.d.ts +10 -0
  469. package/dist/components/table/list-tabs.js +105 -0
  470. package/dist/components/table/list-tabs.js.map +1 -0
  471. package/dist/components/table/pagination.d.ts +7 -0
  472. package/dist/components/table/pagination.d.ts.map +1 -0
  473. package/dist/components/table/pagination.js +255 -0
  474. package/dist/components/table/pagination.js.map +1 -0
  475. package/dist/components/table/record-cell.d.ts +25 -0
  476. package/dist/components/table/record-cell.d.ts.map +1 -0
  477. package/dist/components/table/record-cell.js +86 -0
  478. package/dist/components/table/record-cell.js.map +1 -0
  479. package/dist/components/table/spreadsheet-lazy.d.ts +7 -0
  480. package/dist/components/table/spreadsheet-lazy.d.ts.map +1 -0
  481. package/dist/components/table/spreadsheet-lazy.js +15 -0
  482. package/dist/components/table/spreadsheet-lazy.js.map +1 -0
  483. package/dist/components/table/spreadsheet.d.ts +11 -0
  484. package/dist/components/table/spreadsheet.d.ts.map +1 -0
  485. package/dist/components/table/spreadsheet.js +420 -0
  486. package/dist/components/table/spreadsheet.js.map +1 -0
  487. package/dist/components/table/summary-rows.js +104 -0
  488. package/dist/components/table/summary-rows.js.map +1 -0
  489. package/dist/components/table/table-block.d.ts +12 -0
  490. package/dist/components/table/table-block.d.ts.map +1 -0
  491. package/dist/components/table/table-block.js +875 -0
  492. package/dist/components/table/table-block.js.map +1 -0
  493. package/dist/components/table/table-views.d.ts +15 -0
  494. package/dist/components/table/table-views.d.ts.map +1 -0
  495. package/dist/components/table/table-views.js +376 -0
  496. package/dist/components/table/table-views.js.map +1 -0
  497. package/dist/components/table/trigger-button.js +44 -0
  498. package/dist/components/table/trigger-button.js.map +1 -0
  499. package/dist/components/translation-manager/index.d.ts +2 -0
  500. package/dist/components/translation-manager/index.js +2 -0
  501. package/dist/components/translation-manager/translation-manager-lazy.d.ts +9 -0
  502. package/dist/components/translation-manager/translation-manager-lazy.d.ts.map +1 -0
  503. package/dist/components/translation-manager/translation-manager-lazy.js +24 -0
  504. package/dist/components/translation-manager/translation-manager-lazy.js.map +1 -0
  505. package/dist/components/translation-manager/translation-manager.js +719 -0
  506. package/dist/components/translation-manager/translation-manager.js.map +1 -0
  507. package/dist/components/tree/index.d.ts +2 -0
  508. package/dist/components/tree/index.js +2 -0
  509. package/dist/components/tree/tree-lazy.d.ts +10 -0
  510. package/dist/components/tree/tree-lazy.d.ts.map +1 -0
  511. package/dist/components/tree/tree-lazy.js +24 -0
  512. package/dist/components/tree/tree-lazy.js.map +1 -0
  513. package/dist/components/tree/tree.js +291 -0
  514. package/dist/components/tree/tree.js.map +1 -0
  515. package/dist/components/ui/alert.d.ts +12 -0
  516. package/dist/components/ui/alert.d.ts.map +1 -0
  517. package/dist/components/ui/alert.js +37 -0
  518. package/dist/components/ui/alert.js.map +1 -0
  519. package/dist/components/ui/avatar.d.ts +9 -0
  520. package/dist/components/ui/avatar.d.ts.map +1 -0
  521. package/dist/components/ui/avatar.js +29 -0
  522. package/dist/components/ui/avatar.js.map +1 -0
  523. package/dist/components/ui/badge.d.ts +12 -0
  524. package/dist/components/ui/badge.d.ts.map +1 -0
  525. package/dist/components/ui/badge.js +26 -0
  526. package/dist/components/ui/badge.js.map +1 -0
  527. package/dist/components/ui/breadcrumb.d.ts +14 -0
  528. package/dist/components/ui/breadcrumb.d.ts.map +1 -0
  529. package/dist/components/ui/breadcrumb.js +79 -0
  530. package/dist/components/ui/breadcrumb.js.map +1 -0
  531. package/dist/components/ui/button.d.ts +13 -0
  532. package/dist/components/ui/button.d.ts.map +1 -0
  533. package/dist/components/ui/button.js +47 -0
  534. package/dist/components/ui/button.js.map +1 -0
  535. package/dist/components/ui/calendar.d.ts +7 -0
  536. package/dist/components/ui/calendar.d.ts.map +1 -0
  537. package/dist/components/ui/calendar.js +48 -0
  538. package/dist/components/ui/calendar.js.map +1 -0
  539. package/dist/components/ui/card.d.ts +12 -0
  540. package/dist/components/ui/card.d.ts.map +1 -0
  541. package/dist/components/ui/card.js +56 -0
  542. package/dist/components/ui/card.js.map +1 -0
  543. package/dist/components/ui/checkbox.d.ts +7 -0
  544. package/dist/components/ui/checkbox.d.ts.map +1 -0
  545. package/dist/components/ui/checkbox.js +21 -0
  546. package/dist/components/ui/checkbox.js.map +1 -0
  547. package/dist/components/ui/collapsible.d.ts +9 -0
  548. package/dist/components/ui/collapsible.d.ts.map +1 -0
  549. package/dist/components/ui/collapsible.js +25 -0
  550. package/dist/components/ui/collapsible.js.map +1 -0
  551. package/dist/components/ui/command.d.ts +23 -0
  552. package/dist/components/ui/command.d.ts.map +1 -0
  553. package/dist/components/ui/command.js +89 -0
  554. package/dist/components/ui/command.js.map +1 -0
  555. package/dist/components/ui/dialog.d.ts +18 -0
  556. package/dist/components/ui/dialog.d.ts.map +1 -0
  557. package/dist/components/ui/dialog.js +92 -0
  558. package/dist/components/ui/dialog.js.map +1 -0
  559. package/dist/components/ui/dropdown-menu.d.ts +28 -0
  560. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  561. package/dist/components/ui/dropdown-menu.js +123 -0
  562. package/dist/components/ui/dropdown-menu.js.map +1 -0
  563. package/dist/components/ui/input.d.ts +6 -0
  564. package/dist/components/ui/input.d.ts.map +1 -0
  565. package/dist/components/ui/input.js +15 -0
  566. package/dist/components/ui/input.js.map +1 -0
  567. package/dist/components/ui/label.d.ts +7 -0
  568. package/dist/components/ui/label.d.ts.map +1 -0
  569. package/dist/components/ui/label.js +15 -0
  570. package/dist/components/ui/label.js.map +1 -0
  571. package/dist/components/ui/popover.d.ts +10 -0
  572. package/dist/components/ui/popover.d.ts.map +1 -0
  573. package/dist/components/ui/popover.js +35 -0
  574. package/dist/components/ui/popover.js.map +1 -0
  575. package/dist/components/ui/radio-group.d.ts +8 -0
  576. package/dist/components/ui/radio-group.d.ts.map +1 -0
  577. package/dist/components/ui/radio-group.js +28 -0
  578. package/dist/components/ui/radio-group.js.map +1 -0
  579. package/dist/components/ui/scroll-area.d.ts +8 -0
  580. package/dist/components/ui/scroll-area.d.ts.map +1 -0
  581. package/dist/components/ui/scroll-area.js +36 -0
  582. package/dist/components/ui/scroll-area.js.map +1 -0
  583. package/dist/components/ui/select.d.ts +18 -0
  584. package/dist/components/ui/select.d.ts.map +1 -0
  585. package/dist/components/ui/select.js +96 -0
  586. package/dist/components/ui/select.js.map +1 -0
  587. package/dist/components/ui/separator.d.ts +7 -0
  588. package/dist/components/ui/separator.d.ts.map +1 -0
  589. package/dist/components/ui/separator.js +17 -0
  590. package/dist/components/ui/separator.js.map +1 -0
  591. package/dist/components/ui/sheet.d.ts +17 -0
  592. package/dist/components/ui/sheet.d.ts.map +1 -0
  593. package/dist/components/ui/sheet.js +89 -0
  594. package/dist/components/ui/sheet.js.map +1 -0
  595. package/dist/components/ui/sidebar.d.ts +72 -0
  596. package/dist/components/ui/sidebar.d.ts.map +1 -0
  597. package/dist/components/ui/sidebar.js +376 -0
  598. package/dist/components/ui/sidebar.js.map +1 -0
  599. package/dist/components/ui/skeleton.d.ts +6 -0
  600. package/dist/components/ui/skeleton.d.ts.map +1 -0
  601. package/dist/components/ui/skeleton.js +14 -0
  602. package/dist/components/ui/skeleton.js.map +1 -0
  603. package/dist/components/ui/sonner.d.ts +6 -0
  604. package/dist/components/ui/sonner.d.ts.map +1 -0
  605. package/dist/components/ui/sonner.js +34 -0
  606. package/dist/components/ui/sonner.js.map +1 -0
  607. package/dist/components/ui/spinner.d.ts +10 -0
  608. package/dist/components/ui/spinner.d.ts.map +1 -0
  609. package/dist/components/ui/spinner.js +30 -0
  610. package/dist/components/ui/spinner.js.map +1 -0
  611. package/dist/components/ui/switch.d.ts +7 -0
  612. package/dist/components/ui/switch.d.ts.map +1 -0
  613. package/dist/components/ui/switch.js +19 -0
  614. package/dist/components/ui/switch.js.map +1 -0
  615. package/dist/components/ui/table.d.ts +13 -0
  616. package/dist/components/ui/table.d.ts.map +1 -0
  617. package/dist/components/ui/table.js +67 -0
  618. package/dist/components/ui/table.js.map +1 -0
  619. package/dist/components/ui/tabs.d.ts +10 -0
  620. package/dist/components/ui/tabs.d.ts.map +1 -0
  621. package/dist/components/ui/tabs.js +36 -0
  622. package/dist/components/ui/tabs.js.map +1 -0
  623. package/dist/components/ui/textarea.d.ts +6 -0
  624. package/dist/components/ui/textarea.d.ts.map +1 -0
  625. package/dist/components/ui/textarea.js +14 -0
  626. package/dist/components/ui/textarea.js.map +1 -0
  627. package/dist/components/ui/tooltip.d.ts +10 -0
  628. package/dist/components/ui/tooltip.d.ts.map +1 -0
  629. package/dist/components/ui/tooltip.js +36 -0
  630. package/dist/components/ui/tooltip.js.map +1 -0
  631. package/dist/components/versions/record-versions.d.ts +12 -0
  632. package/dist/components/versions/record-versions.d.ts.map +1 -0
  633. package/dist/components/versions/record-versions.js +138 -0
  634. package/dist/components/versions/record-versions.js.map +1 -0
  635. package/dist/components/widgets/calendar-lazy.d.ts +9 -0
  636. package/dist/components/widgets/calendar-lazy.d.ts.map +1 -0
  637. package/dist/components/widgets/calendar-lazy.js +47 -0
  638. package/dist/components/widgets/calendar-lazy.js.map +1 -0
  639. package/dist/components/widgets/calendar.js +122 -0
  640. package/dist/components/widgets/calendar.js.map +1 -0
  641. package/dist/components/widgets/chart-filters.js +101 -0
  642. package/dist/components/widgets/chart-filters.js.map +1 -0
  643. package/dist/components/widgets/chart-lazy.d.ts +9 -0
  644. package/dist/components/widgets/chart-lazy.d.ts.map +1 -0
  645. package/dist/components/widgets/chart-lazy.js +27 -0
  646. package/dist/components/widgets/chart-lazy.js.map +1 -0
  647. package/dist/components/widgets/chart.js +216 -0
  648. package/dist/components/widgets/chart.js.map +1 -0
  649. package/dist/components/widgets/dashboard-customizer.d.ts +15 -0
  650. package/dist/components/widgets/dashboard-customizer.d.ts.map +1 -0
  651. package/dist/components/widgets/dashboard-customizer.js +219 -0
  652. package/dist/components/widgets/dashboard-customizer.js.map +1 -0
  653. package/dist/components/widgets/index.d.ts +6 -0
  654. package/dist/components/widgets/stats-overview.d.ts +7 -0
  655. package/dist/components/widgets/stats-overview.d.ts.map +1 -0
  656. package/dist/components/widgets/stats-overview.js +133 -0
  657. package/dist/components/widgets/stats-overview.js.map +1 -0
  658. package/dist/components/widgets/widgets-block.d.ts +10 -0
  659. package/dist/components/widgets/widgets-block.d.ts.map +1 -0
  660. package/dist/components/widgets/widgets-block.js +72 -0
  661. package/dist/components/widgets/widgets-block.js.map +1 -0
  662. package/dist/context.d.ts +55 -0
  663. package/dist/context.d.ts.map +1 -0
  664. package/dist/context.js +115 -0
  665. package/dist/context.js.map +1 -0
  666. package/dist/create-alfakit.d.ts +25 -0
  667. package/dist/create-alfakit.d.ts.map +1 -0
  668. package/dist/create-alfakit.js +182 -0
  669. package/dist/create-alfakit.js.map +1 -0
  670. package/dist/eject-manifest.json +1128 -0
  671. package/dist/hooks/use-hydrated.d.ts +9 -0
  672. package/dist/hooks/use-hydrated.d.ts.map +1 -0
  673. package/dist/hooks/use-hydrated.js +15 -0
  674. package/dist/hooks/use-hydrated.js.map +1 -0
  675. package/dist/hooks/use-mobile.d.ts +8 -0
  676. package/dist/hooks/use-mobile.d.ts.map +1 -0
  677. package/dist/hooks/use-mobile.js +21 -0
  678. package/dist/hooks/use-mobile.js.map +1 -0
  679. package/dist/hooks/use-store.d.ts +7 -0
  680. package/dist/hooks/use-store.d.ts.map +1 -0
  681. package/dist/hooks/use-store.js +13 -0
  682. package/dist/hooks/use-store.js.map +1 -0
  683. package/dist/hooks/use-virtual-list.d.ts +29 -0
  684. package/dist/hooks/use-virtual-list.d.ts.map +1 -0
  685. package/dist/hooks/use-virtual-list.js +73 -0
  686. package/dist/hooks/use-virtual-list.js.map +1 -0
  687. package/dist/index.d.ts +180 -0
  688. package/dist/index.js +161 -0
  689. package/dist/layouts/app-layout.d.ts +11 -0
  690. package/dist/layouts/app-layout.d.ts.map +1 -0
  691. package/dist/layouts/app-layout.js +104 -0
  692. package/dist/layouts/app-layout.js.map +1 -0
  693. package/dist/layouts/auth-layout.d.ts +11 -0
  694. package/dist/layouts/auth-layout.d.ts.map +1 -0
  695. package/dist/layouts/auth-layout.js +65 -0
  696. package/dist/layouts/auth-layout.js.map +1 -0
  697. package/dist/layouts/blank-layout.d.ts +7 -0
  698. package/dist/layouts/blank-layout.d.ts.map +1 -0
  699. package/dist/layouts/blank-layout.js +12 -0
  700. package/dist/layouts/blank-layout.js.map +1 -0
  701. package/dist/layouts/fullscreen-layout.d.ts +16 -0
  702. package/dist/layouts/fullscreen-layout.d.ts.map +1 -0
  703. package/dist/layouts/fullscreen-layout.js +107 -0
  704. package/dist/layouts/fullscreen-layout.js.map +1 -0
  705. package/dist/layouts/top-nav-layout.d.ts +15 -0
  706. package/dist/layouts/top-nav-layout.d.ts.map +1 -0
  707. package/dist/layouts/top-nav-layout.js +223 -0
  708. package/dist/layouts/top-nav-layout.js.map +1 -0
  709. package/dist/lib/attributes.d.ts +12 -0
  710. package/dist/lib/attributes.d.ts.map +1 -0
  711. package/dist/lib/attributes.js +55 -0
  712. package/dist/lib/attributes.js.map +1 -0
  713. package/dist/lib/colors.d.ts +23 -0
  714. package/dist/lib/colors.d.ts.map +1 -0
  715. package/dist/lib/colors.js +126 -0
  716. package/dist/lib/colors.js.map +1 -0
  717. package/dist/lib/discovery.d.ts +22 -0
  718. package/dist/lib/discovery.d.ts.map +1 -0
  719. package/dist/lib/discovery.js +45 -0
  720. package/dist/lib/discovery.js.map +1 -0
  721. package/dist/lib/icons.d.ts +24 -0
  722. package/dist/lib/icons.d.ts.map +1 -0
  723. package/dist/lib/icons.js +93 -0
  724. package/dist/lib/icons.js.map +1 -0
  725. package/dist/lib/lazy.d.ts +8 -0
  726. package/dist/lib/lazy.d.ts.map +1 -0
  727. package/dist/lib/lazy.js +47 -0
  728. package/dist/lib/lazy.js.map +1 -0
  729. package/dist/lib/new-tab-hint.js +15 -0
  730. package/dist/lib/new-tab-hint.js.map +1 -0
  731. package/dist/lib/utils.d.ts +5 -0
  732. package/dist/lib/utils.d.ts.map +1 -0
  733. package/dist/lib/utils.js +10 -0
  734. package/dist/lib/utils.js.map +1 -0
  735. package/dist/pages/page.d.ts +23 -0
  736. package/dist/pages/page.d.ts.map +1 -0
  737. package/dist/pages/page.js +328 -0
  738. package/dist/pages/page.js.map +1 -0
  739. package/dist/registry.d.ts +7 -0
  740. package/dist/registry.d.ts.map +1 -0
  741. package/dist/registry.js +113 -0
  742. package/dist/registry.js.map +1 -0
  743. package/dist/server.d.ts +28 -0
  744. package/dist/server.d.ts.map +1 -0
  745. package/dist/server.js +38 -0
  746. package/dist/server.js.map +1 -0
  747. package/dist/standalone/alfakit-component.d.ts +30 -0
  748. package/dist/standalone/alfakit-component.d.ts.map +1 -0
  749. package/dist/standalone/alfakit-component.js +156 -0
  750. package/dist/standalone/alfakit-component.js.map +1 -0
  751. package/dist/standalone/alfakit-toaster.d.ts +26 -0
  752. package/dist/standalone/alfakit-toaster.d.ts.map +1 -0
  753. package/dist/standalone/alfakit-toaster.js +38 -0
  754. package/dist/standalone/alfakit-toaster.js.map +1 -0
  755. package/dist/standalone/configure.d.ts +14 -0
  756. package/dist/standalone/configure.d.ts.map +1 -0
  757. package/dist/standalone/configure.js +27 -0
  758. package/dist/standalone/configure.js.map +1 -0
  759. package/dist/standalone/index.d.ts +4 -0
  760. package/dist/standalone/runtime.js +94 -0
  761. package/dist/standalone/runtime.js.map +1 -0
  762. package/dist/standalone.css +150 -0
  763. package/dist/starter-kit/index.d.ts +4 -0
  764. package/dist/starter-kit/index.js +4 -0
  765. package/dist/starter-kit/navigation.d.ts +20 -0
  766. package/dist/starter-kit/navigation.d.ts.map +1 -0
  767. package/dist/starter-kit/navigation.js +25 -0
  768. package/dist/starter-kit/navigation.js.map +1 -0
  769. package/dist/starter-kit/starter-kit.d.ts +56 -0
  770. package/dist/starter-kit/starter-kit.d.ts.map +1 -0
  771. package/dist/starter-kit/starter-kit.js +120 -0
  772. package/dist/starter-kit/starter-kit.js.map +1 -0
  773. package/dist/starter-kit/widgets-loaded.js +172 -0
  774. package/dist/starter-kit/widgets-loaded.js.map +1 -0
  775. package/dist/starter-kit/widgets-triggers.js +90 -0
  776. package/dist/starter-kit/widgets-triggers.js.map +1 -0
  777. package/dist/starter-kit/widgets.d.ts +38 -0
  778. package/dist/starter-kit/widgets.d.ts.map +1 -0
  779. package/dist/starter-kit/widgets.js +64 -0
  780. package/dist/starter-kit/widgets.js.map +1 -0
  781. package/dist/styles.css +305 -0
  782. package/dist/themes.css +1340 -0
  783. package/package.json +128 -3
  784. package/src/app/components.tsx +104 -0
  785. package/src/app/hooks.ts +365 -0
  786. package/src/components/actions/action-button.tsx +254 -0
  787. package/src/components/actions/action-context.tsx +23 -0
  788. package/src/components/actions/action-list.tsx +356 -0
  789. package/src/components/actions/action-modals.tsx +479 -0
  790. package/src/components/actions/index.ts +4 -0
  791. package/src/components/ai/copilot-panel.tsx +517 -0
  792. package/src/components/ai/copilot.tsx +82 -0
  793. package/src/components/ai/index.ts +2 -0
  794. package/src/components/ai/stream-lazy.tsx +8 -0
  795. package/src/components/ai/stream.tsx +100 -0
  796. package/src/components/analytics/alfakit-analytics.tsx +27 -0
  797. package/src/components/analytics/breakdown.tsx +150 -0
  798. package/src/components/analytics/index.ts +2 -0
  799. package/src/components/cms/admin-bar.tsx +66 -0
  800. package/src/components/cms/blocks.tsx +474 -0
  801. package/src/components/cms/context.tsx +57 -0
  802. package/src/components/cms/head.tsx +47 -0
  803. package/src/components/cms/index.ts +23 -0
  804. package/src/components/cms/live-preview-lazy.tsx +8 -0
  805. package/src/components/cms/live-preview.tsx +339 -0
  806. package/src/components/cms/menu.tsx +246 -0
  807. package/src/components/cms/page.tsx +219 -0
  808. package/src/components/cms/parts.tsx +84 -0
  809. package/src/components/dev-tools/dev-tools-inspector.tsx +374 -0
  810. package/src/components/dev-tools/dev-tools-slot.tsx +28 -0
  811. package/src/components/entries/code-entry.tsx +73 -0
  812. package/src/components/entries/entry-wrapper.tsx +171 -0
  813. package/src/components/entries/index.ts +11 -0
  814. package/src/components/entries/other-entries.tsx +235 -0
  815. package/src/components/entries/repeatable-entry-table.tsx +50 -0
  816. package/src/components/entries/text-entry.tsx +264 -0
  817. package/src/components/entries/view-entry.tsx +27 -0
  818. package/src/components/fields/builder-picker.tsx +323 -0
  819. package/src/components/fields/builder.tsx +537 -0
  820. package/src/components/fields/checkbox-list.tsx +181 -0
  821. package/src/components/fields/checkbox.tsx +26 -0
  822. package/src/components/fields/code-editor-lazy.tsx +33 -0
  823. package/src/components/fields/code-editor.tsx +157 -0
  824. package/src/components/fields/code-tokens.ts +15 -0
  825. package/src/components/fields/color-picker.tsx +72 -0
  826. package/src/components/fields/date-picker.tsx +336 -0
  827. package/src/components/fields/file-upload.tsx +643 -0
  828. package/src/components/fields/hidden.tsx +8 -0
  829. package/src/components/fields/icon-picker-lazy.tsx +44 -0
  830. package/src/components/fields/icon-picker-value.tsx +46 -0
  831. package/src/components/fields/icon-picker.tsx +293 -0
  832. package/src/components/fields/image-editor-dialog-lazy.tsx +22 -0
  833. package/src/components/fields/image-editor-dialog.tsx +431 -0
  834. package/src/components/fields/index.ts +23 -0
  835. package/src/components/fields/item-actions.tsx +381 -0
  836. package/src/components/fields/key-value.tsx +218 -0
  837. package/src/components/fields/lazy-fields.tsx +30 -0
  838. package/src/components/fields/modal-table-select.tsx +519 -0
  839. package/src/components/fields/money-input.tsx +132 -0
  840. package/src/components/fields/one-time-code-input.tsx +56 -0
  841. package/src/components/fields/query-builder-rules.tsx +444 -0
  842. package/src/components/fields/radio.tsx +67 -0
  843. package/src/components/fields/repeater-table.tsx +185 -0
  844. package/src/components/fields/repeater.tsx +317 -0
  845. package/src/components/fields/rich-editor-extensions.tsx +470 -0
  846. package/src/components/fields/rich-editor-lazy.tsx +21 -0
  847. package/src/components/fields/rich-editor.tsx +815 -0
  848. package/src/components/fields/select.tsx +667 -0
  849. package/src/components/fields/slider.tsx +262 -0
  850. package/src/components/fields/tags-input.tsx +176 -0
  851. package/src/components/fields/text-input.tsx +179 -0
  852. package/src/components/fields/textarea.tsx +37 -0
  853. package/src/components/fields/toggle-buttons.tsx +125 -0
  854. package/src/components/fields/toggle.tsx +50 -0
  855. package/src/components/file-manager/file-manager-lazy.tsx +52 -0
  856. package/src/components/file-manager/file-manager.tsx +1857 -0
  857. package/src/components/file-manager/index.ts +2 -0
  858. package/src/components/file-manager/picker-field.tsx +169 -0
  859. package/src/components/form/form-block.tsx +237 -0
  860. package/src/components/form/form-context.tsx +95 -0
  861. package/src/components/helpdesk/chat-panel.tsx +247 -0
  862. package/src/components/helpdesk/chat-widget.tsx +107 -0
  863. package/src/components/helpdesk/inbox-lazy.tsx +42 -0
  864. package/src/components/helpdesk/inbox.tsx +745 -0
  865. package/src/components/helpdesk/index.ts +2 -0
  866. package/src/components/kanban/index.ts +1 -0
  867. package/src/components/kanban/kanban-lazy.tsx +34 -0
  868. package/src/components/kanban/kanban.tsx +788 -0
  869. package/src/components/layout/actions.tsx +48 -0
  870. package/src/components/layout/component-context.ts +31 -0
  871. package/src/components/layout/deferred.tsx +156 -0
  872. package/src/components/layout/elements.tsx +259 -0
  873. package/src/components/layout/fieldset.tsx +35 -0
  874. package/src/components/layout/fused-group.tsx +96 -0
  875. package/src/components/layout/grid.tsx +19 -0
  876. package/src/components/layout/index.ts +18 -0
  877. package/src/components/layout/mixed-content.tsx +59 -0
  878. package/src/components/layout/prime.tsx +168 -0
  879. package/src/components/layout/schema-children.tsx +30 -0
  880. package/src/components/layout/section.tsx +173 -0
  881. package/src/components/layout/tabs.tsx +129 -0
  882. package/src/components/layout/wizard.tsx +244 -0
  883. package/src/components/notifications/flash-toasts.tsx +200 -0
  884. package/src/components/notifications/index.ts +4 -0
  885. package/src/components/notifications/notifications-menu.tsx +262 -0
  886. package/src/components/notifications/realtime-notifications.tsx +40 -0
  887. package/src/components/notifications/undo-button.tsx +50 -0
  888. package/src/components/panel/app-sidebar.tsx +439 -0
  889. package/src/components/panel/bottom-nav.tsx +130 -0
  890. package/src/components/panel/debug-panel-slot.tsx +25 -0
  891. package/src/components/panel/debug-panel.tsx +412 -0
  892. package/src/components/panel/global-search-palette.tsx +387 -0
  893. package/src/components/panel/global-search.tsx +147 -0
  894. package/src/components/panel/impersonation-banner.tsx +47 -0
  895. package/src/components/panel/index.ts +16 -0
  896. package/src/components/panel/keyboard-shortcuts.tsx +134 -0
  897. package/src/components/panel/lazy-placeholder.tsx +39 -0
  898. package/src/components/panel/locale-switcher.tsx +144 -0
  899. package/src/components/panel/menu-item.tsx +89 -0
  900. package/src/components/panel/nav-label.tsx +34 -0
  901. package/src/components/panel/pwa.tsx +118 -0
  902. package/src/components/panel/schema-contract-guard.tsx +50 -0
  903. package/src/components/panel/shortcut-keys.tsx +34 -0
  904. package/src/components/panel/shortcuts-overlay.tsx +238 -0
  905. package/src/components/panel/slot.tsx +43 -0
  906. package/src/components/panel/sub-navigation.tsx +161 -0
  907. package/src/components/panel/tenant-menu.tsx +175 -0
  908. package/src/components/panel/theme-toggle.tsx +69 -0
  909. package/src/components/panel/topbar.tsx +81 -0
  910. package/src/components/panel/user-menu.tsx +166 -0
  911. package/src/components/realtime/conflict-banner.tsx +208 -0
  912. package/src/components/realtime/index.ts +3 -0
  913. package/src/components/realtime/live-records-pill.tsx +66 -0
  914. package/src/components/realtime/record-presence.tsx +98 -0
  915. package/src/components/schema/content-slot.tsx +81 -0
  916. package/src/components/schema/field-actions.tsx +67 -0
  917. package/src/components/schema/field-wrapper.tsx +246 -0
  918. package/src/components/schema/fused-group-context.ts +11 -0
  919. package/src/components/schema/schema-renderer.tsx +127 -0
  920. package/src/components/schema/translatable-field.tsx +113 -0
  921. package/src/components/schema/virtual-spacer.tsx +14 -0
  922. package/src/components/table/cells.tsx +712 -0
  923. package/src/components/table/column-manager.tsx +480 -0
  924. package/src/components/table/content-layout.tsx +368 -0
  925. package/src/components/table/filters.tsx +378 -0
  926. package/src/components/table/grouping.tsx +275 -0
  927. package/src/components/table/index.ts +9 -0
  928. package/src/components/table/list-tabs.tsx +144 -0
  929. package/src/components/table/pagination.tsx +335 -0
  930. package/src/components/table/record-cell.tsx +147 -0
  931. package/src/components/table/spreadsheet-lazy.tsx +14 -0
  932. package/src/components/table/spreadsheet.tsx +602 -0
  933. package/src/components/table/summary-rows.tsx +160 -0
  934. package/src/components/table/table-block.tsx +1112 -0
  935. package/src/components/table/table-views.tsx +460 -0
  936. package/src/components/table/trigger-button.tsx +92 -0
  937. package/src/components/translation-manager/index.ts +1 -0
  938. package/src/components/translation-manager/translation-manager-lazy.tsx +25 -0
  939. package/src/components/translation-manager/translation-manager.tsx +827 -0
  940. package/src/components/tree/index.ts +1 -0
  941. package/src/components/tree/tree-lazy.tsx +30 -0
  942. package/src/components/tree/tree.tsx +385 -0
  943. package/src/components/ui/alert.tsx +57 -0
  944. package/src/components/ui/avatar.tsx +38 -0
  945. package/src/components/ui/badge.tsx +33 -0
  946. package/src/components/ui/breadcrumb.tsx +110 -0
  947. package/src/components/ui/button.tsx +54 -0
  948. package/src/components/ui/calendar.tsx +65 -0
  949. package/src/components/ui/card.tsx +74 -0
  950. package/src/components/ui/checkbox.tsx +30 -0
  951. package/src/components/ui/collapsible.tsx +20 -0
  952. package/src/components/ui/command.tsx +158 -0
  953. package/src/components/ui/dialog.tsx +124 -0
  954. package/src/components/ui/dropdown-menu.tsx +217 -0
  955. package/src/components/ui/input.tsx +20 -0
  956. package/src/components/ui/label.tsx +18 -0
  957. package/src/components/ui/popover.tsx +39 -0
  958. package/src/components/ui/radio-group.tsx +36 -0
  959. package/src/components/ui/scroll-area.tsx +53 -0
  960. package/src/components/ui/select.tsx +165 -0
  961. package/src/components/ui/separator.tsx +25 -0
  962. package/src/components/ui/sheet.tsx +131 -0
  963. package/src/components/ui/sidebar.tsx +660 -0
  964. package/src/components/ui/skeleton.tsx +14 -0
  965. package/src/components/ui/sonner.tsx +43 -0
  966. package/src/components/ui/spinner.tsx +31 -0
  967. package/src/components/ui/switch.tsx +25 -0
  968. package/src/components/ui/table.tsx +89 -0
  969. package/src/components/ui/tabs.tsx +51 -0
  970. package/src/components/ui/textarea.tsx +17 -0
  971. package/src/components/ui/tooltip.tsx +50 -0
  972. package/src/components/versions/record-versions.tsx +162 -0
  973. package/src/components/widgets/calendar-lazy.tsx +31 -0
  974. package/src/components/widgets/calendar.tsx +124 -0
  975. package/src/components/widgets/chart-filters.tsx +114 -0
  976. package/src/components/widgets/chart-lazy.tsx +21 -0
  977. package/src/components/widgets/chart.tsx +252 -0
  978. package/src/components/widgets/dashboard-customizer.tsx +309 -0
  979. package/src/components/widgets/index.ts +5 -0
  980. package/src/components/widgets/stats-overview.tsx +185 -0
  981. package/src/components/widgets/widgets-block.tsx +102 -0
  982. package/src/context.tsx +187 -0
  983. package/src/create-alfakit.tsx +300 -0
  984. package/src/hooks/use-hydrated.ts +16 -0
  985. package/src/hooks/use-mobile.ts +29 -0
  986. package/src/hooks/use-store.ts +18 -0
  987. package/src/hooks/use-virtual-list.ts +88 -0
  988. package/src/index.ts +135 -0
  989. package/src/layouts/app-layout.tsx +128 -0
  990. package/src/layouts/auth-layout.tsx +66 -0
  991. package/src/layouts/blank-layout.tsx +5 -0
  992. package/src/layouts/fullscreen-layout.tsx +86 -0
  993. package/src/layouts/top-nav-layout.tsx +293 -0
  994. package/src/lib/attributes.ts +79 -0
  995. package/src/lib/colors.ts +151 -0
  996. package/src/lib/discovery.tsx +68 -0
  997. package/src/lib/icons.tsx +145 -0
  998. package/src/lib/lazy.tsx +89 -0
  999. package/src/lib/new-tab-hint.tsx +8 -0
  1000. package/src/lib/utils.ts +6 -0
  1001. package/src/pages/page.tsx +463 -0
  1002. package/src/registry.ts +132 -0
  1003. package/src/server.tsx +68 -0
  1004. package/src/standalone/alfakit-component.tsx +222 -0
  1005. package/src/standalone/alfakit-toaster.tsx +52 -0
  1006. package/src/standalone/configure.ts +24 -0
  1007. package/src/standalone/index.ts +3 -0
  1008. package/src/standalone/runtime.ts +153 -0
  1009. package/src/starter-kit/index.ts +14 -0
  1010. package/src/starter-kit/navigation.ts +34 -0
  1011. package/src/starter-kit/starter-kit.tsx +196 -0
  1012. package/src/starter-kit/widgets-loaded.tsx +217 -0
  1013. package/src/starter-kit/widgets-triggers.tsx +103 -0
  1014. package/src/starter-kit/widgets.tsx +103 -0
  1015. package/src/styles.css +305 -0
@@ -0,0 +1,1340 @@
1
+ /*
2
+ * Alfakit themes. Shared by every renderer and imported by their `styles.css`.
3
+ *
4
+ * The panel puts `data-alfakit-theme="<base> <custom>"`, `data-sidebar-variant` and
5
+ * `data-density` on <html>. The neutral theme is the base token set in `styles.css`; each
6
+ * theme below only overrides what it changes. Colours keep the `var(--alfakit-*, …)`
7
+ * fallbacks so `->colors([...])` on a panel still wins.
8
+ *
9
+ * Write your own theme the same way:
10
+ * :root[data-alfakit-theme~='acme'] { --primary: var(--alfakit-primary, oklch(0.6 0.2 30)); }
11
+ * :root.dark[data-alfakit-theme~='acme'] { … }
12
+ */
13
+
14
+ /* ------------------------------------------------------------------ AlfaKit */
15
+
16
+ /*
17
+ * The AlfaKit brand (brand kit v1.0): Alfa Navy anchors the light theme on a warm cream
18
+ * canvas, Fox Orange is an accent (never small text on light surfaces, 2.74:1 on white),
19
+ * and in dark mode orange becomes the primary on deep navy with ink text on it.
20
+ */
21
+ :root[data-alfakit-theme~='alfakit'] {
22
+ --background: oklch(0.987 0.011 76.6);
23
+ --foreground: oklch(0.266 0.05 255.2);
24
+ --card: oklch(1 0 0);
25
+ --card-foreground: oklch(0.266 0.05 255.2);
26
+ --popover: oklch(1 0 0);
27
+ --popover-foreground: oklch(0.266 0.05 255.2);
28
+ --primary: var(--alfakit-primary, oklch(0.359 0.116 256.3));
29
+ --primary-foreground: var(--alfakit-primary-foreground, oklch(1 0 0));
30
+ --secondary: oklch(0.971 0.024 77.5);
31
+ --secondary-foreground: oklch(0.359 0.116 256.3);
32
+ --muted: oklch(0.96 0.014 78.3);
33
+ --muted-foreground: oklch(0.5 0.039 251.3);
34
+ --accent: oklch(0.971 0.024 77.5);
35
+ --accent-foreground: oklch(0.359 0.116 256.3);
36
+ --border: oklch(0.907 0.021 79.1);
37
+ --input: oklch(0.603 0.03 74.6);
38
+ --ring: oklch(0.359 0.116 256.3);
39
+ --chart-1: oklch(0.359 0.116 256.3);
40
+ --chart-2: oklch(0.709 0.175 50.2);
41
+ --chart-3: oklch(0.6 0.1 220);
42
+ --chart-4: oklch(0.8 0.12 75);
43
+ --chart-5: oklch(0.55 0.12 160);
44
+ --sidebar: oklch(1 0 0);
45
+ --sidebar-foreground: oklch(0.266 0.05 255.2);
46
+ --sidebar-accent: oklch(0.971 0.024 77.5);
47
+ --sidebar-accent-foreground: oklch(0.359 0.116 256.3);
48
+ --sidebar-border: oklch(0.907 0.021 79.1);
49
+ --sidebar-ring: oklch(0.359 0.116 256.3);
50
+ --sidebar-primary: oklch(0.359 0.116 256.3);
51
+ --sidebar-primary-foreground: oklch(1 0 0);
52
+ }
53
+
54
+ :root.dark[data-alfakit-theme~='alfakit'] {
55
+ --background: oklch(0.216 0.045 256.2);
56
+ --foreground: oklch(0.975 0.005 258.3);
57
+ --card: oklch(0.254 0.052 255.1);
58
+ --card-foreground: oklch(0.975 0.005 258.3);
59
+ --popover: oklch(0.254 0.052 255.1);
60
+ --popover-foreground: oklch(0.975 0.005 258.3);
61
+ --primary: var(--alfakit-primary, oklch(0.709 0.175 50.2));
62
+ --primary-foreground: var(--alfakit-primary-foreground, oklch(0.266 0.05 255.2));
63
+ --secondary: oklch(0.306 0.064 254.8);
64
+ --secondary-foreground: oklch(0.975 0.005 258.3);
65
+ --muted: oklch(0.282 0.057 254.6);
66
+ --muted-foreground: oklch(0.778 0.061 255.5);
67
+ --accent: oklch(0.306 0.064 254.8);
68
+ --accent-foreground: oklch(0.975 0.005 258.3);
69
+ --border: oklch(1 0 0 / 10%);
70
+ --input: oklch(1 0 0 / 38%);
71
+ --ring: oklch(0.709 0.175 50.2);
72
+ --chart-1: oklch(0.709 0.175 50.2);
73
+ --chart-2: oklch(0.778 0.061 255.5);
74
+ --sidebar: oklch(0.241 0.049 254.5);
75
+ --sidebar-foreground: oklch(0.975 0.005 258.3);
76
+ --sidebar-accent: oklch(0.306 0.064 254.8);
77
+ --sidebar-accent-foreground: oklch(0.975 0.005 258.3);
78
+ --sidebar-border: oklch(1 0 0 / 8%);
79
+ --sidebar-ring: oklch(0.709 0.175 50.2);
80
+ --sidebar-primary: oklch(0.709 0.175 50.2);
81
+ --sidebar-primary-foreground: oklch(0.266 0.05 255.2);
82
+ }
83
+
84
+ /* Montserrat titles, as in the brand guide (the theme sets it as the heading font). */
85
+ :root[data-alfakit-theme~='alfakit'] :is([data-slot='page-header'] h1, [data-slot='card-title']) {
86
+ letter-spacing: -0.01em;
87
+ }
88
+
89
+ :root[data-alfakit-theme~='alfakit'] [data-slot='topbar'] {
90
+ border-color: transparent;
91
+ }
92
+
93
+ /* ------------------------------------------------------------------ Minimal */
94
+
95
+ :root[data-alfakit-theme~='minimal'] {
96
+ --background: oklch(1 0 0);
97
+ --foreground: oklch(0.15 0 0);
98
+ --card: oklch(1 0 0);
99
+ --popover: oklch(1 0 0);
100
+ --primary: var(--alfakit-primary, oklch(0.15 0 0));
101
+ --primary-foreground: var(--alfakit-primary-foreground, oklch(0.99 0 0));
102
+ --secondary: oklch(0.965 0 0);
103
+ --secondary-foreground: oklch(0.15 0 0);
104
+ --muted: oklch(0.97 0 0);
105
+ --muted-foreground: oklch(0.5 0 0);
106
+ --accent: oklch(0.96 0 0);
107
+ --accent-foreground: oklch(0.15 0 0);
108
+ --border: oklch(0.9 0 0);
109
+ --input: oklch(0.64 0 0);
110
+ --ring: oklch(0.4 0 0);
111
+ --chart-1: oklch(0.25 0 0);
112
+ --chart-2: oklch(0.45 0 0);
113
+ --chart-3: oklch(0.6 0 0);
114
+ --chart-4: oklch(0.75 0 0);
115
+ --chart-5: oklch(0.85 0 0);
116
+ --sidebar: oklch(1 0 0);
117
+ --sidebar-foreground: oklch(0.2 0 0);
118
+ --sidebar-accent: oklch(0.955 0 0);
119
+ --sidebar-accent-foreground: oklch(0.15 0 0);
120
+ --sidebar-border: oklch(0.9 0 0);
121
+ }
122
+
123
+ :root.dark[data-alfakit-theme~='minimal'] {
124
+ --background: oklch(0.13 0 0);
125
+ --foreground: oklch(0.96 0 0);
126
+ --card: oklch(0.13 0 0);
127
+ --card-foreground: oklch(0.96 0 0);
128
+ --popover: oklch(0.17 0 0);
129
+ --popover-foreground: oklch(0.96 0 0);
130
+ --primary: var(--alfakit-primary, oklch(0.96 0 0));
131
+ --primary-foreground: var(--alfakit-primary-foreground, oklch(0.13 0 0));
132
+ --secondary: oklch(0.22 0 0);
133
+ --secondary-foreground: oklch(0.96 0 0);
134
+ --muted: oklch(0.2 0 0);
135
+ --muted-foreground: oklch(0.68 0 0);
136
+ --accent: oklch(0.22 0 0);
137
+ --accent-foreground: oklch(0.96 0 0);
138
+ --border: oklch(1 0 0 / 12%);
139
+ --input: oklch(1 0 0 / 38%);
140
+ --ring: oklch(0.7 0 0);
141
+ --sidebar: oklch(0.13 0 0);
142
+ --sidebar-foreground: oklch(0.92 0 0);
143
+ --sidebar-accent: oklch(0.22 0 0);
144
+ --sidebar-accent-foreground: oklch(0.98 0 0);
145
+ --sidebar-border: oklch(1 0 0 / 12%);
146
+ }
147
+
148
+ /* --------------------------------------------------------------------- Soft */
149
+
150
+ :root[data-alfakit-theme~='soft'] {
151
+ --background: oklch(0.99 0.004 85);
152
+ --foreground: oklch(0.25 0.02 60);
153
+ --card: oklch(1 0 0);
154
+ --card-foreground: oklch(0.25 0.02 60);
155
+ --popover: oklch(1 0 0);
156
+ --popover-foreground: oklch(0.25 0.02 60);
157
+ --primary: var(--alfakit-primary, oklch(0.52 0.13 165));
158
+ --primary-foreground: var(--alfakit-primary-foreground, oklch(0.99 0 0));
159
+ --secondary: oklch(0.95 0.02 165);
160
+ --secondary-foreground: oklch(0.32 0.07 165);
161
+ --muted: oklch(0.96 0.01 85);
162
+ --muted-foreground: oklch(0.53 0.02 60);
163
+ --accent: oklch(0.94 0.03 165);
164
+ --accent-foreground: oklch(0.35 0.08 165);
165
+ --border: oklch(0.92 0.012 85);
166
+ --input: oklch(0.64 0.014 85);
167
+ --ring: oklch(0.65 0.11 165);
168
+ --chart-1: oklch(0.6 0.13 165);
169
+ --chart-2: oklch(0.72 0.13 60);
170
+ --chart-3: oklch(0.65 0.12 25);
171
+ --chart-4: oklch(0.6 0.1 250);
172
+ --chart-5: oklch(0.75 0.12 120);
173
+ --sidebar: oklch(0.95 0.018 80);
174
+ --sidebar-foreground: oklch(0.3 0.02 60);
175
+ --sidebar-accent: oklch(0.93 0.025 165);
176
+ --sidebar-accent-foreground: oklch(0.38 0.09 165);
177
+ --sidebar-border: oklch(0.91 0.014 85);
178
+ --sidebar-ring: oklch(0.65 0.11 165);
179
+ }
180
+
181
+ :root.dark[data-alfakit-theme~='soft'] {
182
+ --background: oklch(0.19 0.012 60);
183
+ --foreground: oklch(0.95 0.01 85);
184
+ --card: oklch(0.23 0.012 60);
185
+ --card-foreground: oklch(0.95 0.01 85);
186
+ --popover: oklch(0.23 0.012 60);
187
+ --popover-foreground: oklch(0.95 0.01 85);
188
+ --primary: var(--alfakit-primary, oklch(0.72 0.12 165));
189
+ --primary-foreground: var(--alfakit-primary-foreground, oklch(0.18 0.03 165));
190
+ --secondary: oklch(0.28 0.03 165);
191
+ --secondary-foreground: oklch(0.92 0.03 165);
192
+ --muted: oklch(0.27 0.012 60);
193
+ --muted-foreground: oklch(0.72 0.015 70);
194
+ --accent: oklch(0.3 0.04 165);
195
+ --accent-foreground: oklch(0.92 0.04 165);
196
+ --border: oklch(1 0 0 / 9%);
197
+ --input: oklch(1 0 0 / 38%);
198
+ --ring: oklch(0.62 0.1 165);
199
+ --sidebar: oklch(0.16 0.012 60);
200
+ --sidebar-foreground: oklch(0.92 0.01 85);
201
+ --sidebar-accent: oklch(0.27 0.035 165);
202
+ --sidebar-accent-foreground: oklch(0.9 0.06 165);
203
+ --sidebar-border: oklch(1 0 0 / 8%);
204
+ }
205
+
206
+ /* ---------------------------------------------------------------- Corporate */
207
+
208
+ :root[data-alfakit-theme~='corporate'] {
209
+ --background: oklch(0.975 0.004 250);
210
+ --foreground: oklch(0.2 0.03 255);
211
+ --card: oklch(1 0 0);
212
+ --card-foreground: oklch(0.2 0.03 255);
213
+ --popover: oklch(1 0 0);
214
+ --popover-foreground: oklch(0.2 0.03 255);
215
+ --primary: var(--alfakit-primary, oklch(0.49 0.2 262));
216
+ --primary-foreground: var(--alfakit-primary-foreground, oklch(0.99 0 0));
217
+ --secondary: oklch(0.95 0.01 255);
218
+ --secondary-foreground: oklch(0.25 0.04 255);
219
+ --muted: oklch(0.955 0.008 255);
220
+ --muted-foreground: oklch(0.5 0.03 255);
221
+ --accent: oklch(0.94 0.02 255);
222
+ --accent-foreground: oklch(0.3 0.08 262);
223
+ --border: oklch(0.9 0.01 255);
224
+ --input: oklch(0.64 0.012 255);
225
+ --ring: oklch(0.55 0.16 262);
226
+ --chart-1: oklch(0.49 0.2 262);
227
+ --chart-2: oklch(0.62 0.13 220);
228
+ --chart-3: oklch(0.7 0.1 180);
229
+ --chart-4: oklch(0.75 0.12 85);
230
+ --chart-5: oklch(0.6 0.03 255);
231
+ --sidebar: oklch(0.24 0.05 262);
232
+ --sidebar-foreground: oklch(0.93 0.015 255);
233
+ --sidebar-primary: oklch(0.72 0.13 250);
234
+ --sidebar-primary-foreground: oklch(0.18 0.04 262);
235
+ --sidebar-accent: oklch(0.32 0.06 262);
236
+ --sidebar-accent-foreground: oklch(0.99 0 0);
237
+ --sidebar-border: oklch(1 0 0 / 8%);
238
+ --sidebar-ring: oklch(0.72 0.13 250);
239
+ }
240
+
241
+ :root.dark[data-alfakit-theme~='corporate'] {
242
+ --background: oklch(0.17 0.025 260);
243
+ --foreground: oklch(0.96 0.008 255);
244
+ --card: oklch(0.21 0.03 260);
245
+ --card-foreground: oklch(0.96 0.008 255);
246
+ --popover: oklch(0.21 0.03 260);
247
+ --popover-foreground: oklch(0.96 0.008 255);
248
+ --primary: var(--alfakit-primary, oklch(0.66 0.16 258));
249
+ --primary-foreground: var(--alfakit-primary-foreground, oklch(0.16 0.03 262));
250
+ --secondary: oklch(0.27 0.03 260);
251
+ --secondary-foreground: oklch(0.95 0.01 255);
252
+ --muted: oklch(0.26 0.03 260);
253
+ --muted-foreground: oklch(0.72 0.03 255);
254
+ --accent: oklch(0.3 0.05 262);
255
+ --accent-foreground: oklch(0.95 0.02 255);
256
+ --border: oklch(1 0 0 / 9%);
257
+ --input: oklch(1 0 0 / 38%);
258
+ --ring: oklch(0.6 0.13 258);
259
+ --sidebar: oklch(0.14 0.03 262);
260
+ --sidebar-accent: oklch(0.24 0.05 262);
261
+ --sidebar-border: oklch(1 0 0 / 7%);
262
+ }
263
+
264
+ /* The navy sidebar needs light text for everything rendered inside it. */
265
+ :root[data-alfakit-theme~='corporate'] [data-sidebar='sidebar'] {
266
+ --foreground: var(--sidebar-foreground);
267
+ --muted: var(--sidebar-accent);
268
+ --muted-foreground: oklch(0.75 0.03 255);
269
+ --accent: var(--sidebar-accent);
270
+ --accent-foreground: var(--sidebar-accent-foreground);
271
+ --border: var(--sidebar-border);
272
+ }
273
+
274
+ /* ----------------------------------------------------------------- Filament */
275
+
276
+ :root[data-alfakit-theme~='filament'] {
277
+ --background: oklch(0.985 0.002 247.839);
278
+ --foreground: oklch(0.21 0.034 264.665);
279
+ --card: oklch(1 0 0);
280
+ --card-foreground: oklch(0.21 0.034 264.665);
281
+ --popover: oklch(1 0 0);
282
+ --popover-foreground: oklch(0.21 0.034 264.665);
283
+ --primary: var(--alfakit-primary, oklch(0.56 0.179 58.318));
284
+ --primary-foreground: var(--alfakit-primary-foreground, oklch(1 0 0));
285
+ --secondary: oklch(0.967 0.003 264.542);
286
+ --secondary-foreground: oklch(0.21 0.034 264.665);
287
+ --muted: oklch(0.967 0.003 264.542);
288
+ --muted-foreground: oklch(0.551 0.027 264.364);
289
+ --accent: oklch(0.967 0.003 264.542);
290
+ --accent-foreground: oklch(0.21 0.034 264.665);
291
+ --border: oklch(0.928 0.006 264.531);
292
+ --input: oklch(0.64 0.01 258.338);
293
+ --ring: oklch(0.769 0.188 70.08);
294
+ --chart-1: oklch(0.769 0.188 70.08);
295
+ --chart-2: oklch(0.623 0.214 259.815);
296
+ --chart-3: oklch(0.696 0.17 162.48);
297
+ --chart-4: oklch(0.637 0.237 25.331);
298
+ --chart-5: oklch(0.551 0.027 264.364);
299
+ --sidebar: oklch(0.985 0.002 247.839);
300
+ --sidebar-foreground: oklch(0.373 0.034 259.733);
301
+ --sidebar-primary: var(--primary);
302
+ --sidebar-accent: oklch(0.967 0.003 264.542);
303
+ --sidebar-accent-foreground: oklch(0.52 0.16 58.318);
304
+ --sidebar-border: oklch(0.13 0.028 261.692 / 0.05);
305
+ --sidebar-ring: oklch(0.769 0.188 70.08);
306
+ }
307
+
308
+ :root.dark[data-alfakit-theme~='filament'] {
309
+ --background: oklch(0.13 0.028 261.692);
310
+ --foreground: oklch(1 0 0);
311
+ --card: oklch(0.21 0.034 264.665);
312
+ --card-foreground: oklch(1 0 0);
313
+ --popover: oklch(0.21 0.034 264.665);
314
+ --popover-foreground: oklch(1 0 0);
315
+ --primary: var(--alfakit-primary, oklch(0.769 0.188 70.08));
316
+ --primary-foreground: var(--alfakit-primary-foreground, oklch(0.13 0.028 261.692));
317
+ --secondary: oklch(0.278 0.033 256.848);
318
+ --secondary-foreground: oklch(1 0 0);
319
+ --muted: oklch(0.278 0.033 256.848);
320
+ --muted-foreground: oklch(0.707 0.022 261.325);
321
+ --accent: oklch(1 0 0 / 5%);
322
+ --accent-foreground: oklch(1 0 0);
323
+ --border: oklch(1 0 0 / 10%);
324
+ --input: oklch(1 0 0 / 38%);
325
+ --sidebar: oklch(0.13 0.028 261.692);
326
+ --sidebar-foreground: oklch(0.872 0.01 258.338);
327
+ --sidebar-accent: oklch(1 0 0 / 5%);
328
+ --sidebar-accent-foreground: oklch(0.828 0.189 84.429);
329
+ --sidebar-border: oklch(1 0 0 / 5%);
330
+ }
331
+
332
+ :root[data-alfakit-theme~='filament'] [data-slot='topbar'] {
333
+ background: var(--card);
334
+ backdrop-filter: none;
335
+ }
336
+
337
+ :root[data-alfakit-theme~='filament'] [data-sidebar='menu-button'][data-active='true'] {
338
+ font-weight: 600;
339
+ }
340
+
341
+ /* ------------------------------------------------------------------ Density */
342
+
343
+ :root[data-density='compact'] [data-slot='content'] {
344
+ gap: 1rem;
345
+ }
346
+
347
+ :root[data-density='compact'] :is([data-slot='table-cell'], [data-slot='table-head']) {
348
+ padding-block: 0.375rem;
349
+ }
350
+
351
+ :root[data-density='compact'] [data-slot='table-head'] {
352
+ height: 2.25rem;
353
+ }
354
+
355
+ :root[data-density='compact'] [data-slot='card'] {
356
+ gap: 1rem;
357
+ padding-block: 1rem;
358
+ }
359
+
360
+ :root[data-density='compact'] [data-slot='topbar'] {
361
+ height: 3rem;
362
+ }
363
+
364
+ /* =====================================================================================
365
+ * Design dimensions. Each is a `data-*` attribute on <html> chosen by the theme and
366
+ * overridable with `$panel->design(...)`. They restyle the same components into
367
+ * different designs, independent of colour.
368
+ * ===================================================================================== */
369
+
370
+ :root {
371
+ --alfakit-content-pad: 1rem;
372
+ }
373
+
374
+ @media (min-width: 768px) {
375
+ :root {
376
+ --alfakit-content-pad: 1.5rem;
377
+ }
378
+ }
379
+
380
+ /* ------------------------------------------------------------- Navigation items */
381
+
382
+ /* Pill: fully rounded items with a tinted active state in the primary colour. */
383
+ :root[data-nav='pill']
384
+ :is([data-sidebar='menu-button'], [data-sidebar='menu-sub-button'], [data-slot='topnav-link']) {
385
+ border-radius: 9999px;
386
+ }
387
+
388
+ :root[data-nav='pill']
389
+ :is(
390
+ [data-sidebar='menu-button'],
391
+ [data-sidebar='menu-sub-button'],
392
+ [data-slot='topnav-link']
393
+ )[data-active='true'] {
394
+ background: color-mix(in oklch, var(--primary) 12%, transparent);
395
+ color: var(--primary);
396
+ font-weight: 600;
397
+ }
398
+
399
+ :root.dark[data-nav='pill']
400
+ :is(
401
+ [data-sidebar='menu-button'],
402
+ [data-sidebar='menu-sub-button'],
403
+ [data-slot='topnav-link']
404
+ )[data-active='true'] {
405
+ background: color-mix(in oklch, var(--primary) 22%, transparent);
406
+ color: color-mix(in oklch, var(--primary) 70%, white);
407
+ }
408
+
409
+ /* Bar: an accent bar on the reading-start edge marks the active item. */
410
+ :root[data-nav='bar'] [data-sidebar='menu-button'] {
411
+ position: relative;
412
+ border-radius: calc(var(--radius) - 4px);
413
+ }
414
+
415
+ :root[data-nav='bar'] [data-sidebar='menu-button'][data-active='true'] {
416
+ background: color-mix(in oklch, var(--sidebar-accent) 70%, transparent);
417
+ font-weight: 600;
418
+ }
419
+
420
+ :root[data-nav='bar'] [data-sidebar='menu-button'][data-active='true']::before {
421
+ content: '';
422
+ position: absolute;
423
+ inset-block: 0.375rem;
424
+ inset-inline-start: -0.5rem;
425
+ width: 3px;
426
+ border-radius: 9999px;
427
+ background: var(--sidebar-primary);
428
+ }
429
+
430
+ /* Underline (and bar in the top navigation): tabs with an underline. */
431
+ :root:is([data-nav='underline'], [data-nav='bar']) [data-slot='topnav-link'] {
432
+ height: 3.5rem;
433
+ border-radius: 0;
434
+ background: transparent;
435
+ border-bottom: 2px solid transparent;
436
+ padding-inline: 0.75rem;
437
+ }
438
+
439
+ :root:is([data-nav='underline'], [data-nav='bar']) [data-slot='topnav-link']:hover {
440
+ background: transparent;
441
+ border-bottom-color: var(--border);
442
+ }
443
+
444
+ :root:is([data-nav='underline'], [data-nav='bar']) [data-slot='topnav-link'][data-active='true'] {
445
+ background: transparent;
446
+ border-bottom-color: var(--primary);
447
+ color: var(--foreground);
448
+ }
449
+
450
+ :root[data-nav='underline'] [data-sidebar='menu-button'][data-active='true'] {
451
+ background: transparent;
452
+ text-decoration: underline;
453
+ text-decoration-color: var(--sidebar-primary);
454
+ text-decoration-thickness: 2px;
455
+ text-underline-offset: 6px;
456
+ font-weight: 600;
457
+ }
458
+
459
+ /* --------------------------------------------------------------- Page header */
460
+
461
+ :root
462
+ :is([data-slot='page-header'] h1, [data-slot='section'] :is(h2, h3), [data-slot='card-title']) {
463
+ font-family: var(--alfakit-heading-font, inherit);
464
+ }
465
+
466
+ /* Banner: a tinted hero card behind the page title. */
467
+ :root[data-header='banner'] [data-slot='page-header'] {
468
+ position: relative;
469
+ overflow: hidden;
470
+ padding: 1.5rem 1.75rem;
471
+ border-radius: calc(var(--radius) + 6px);
472
+ border: 1px solid color-mix(in oklch, var(--primary) 14%, var(--border));
473
+ background:
474
+ radial-gradient(
475
+ 120% 140% at 100% 0%,
476
+ color-mix(in oklch, var(--primary) 16%, transparent) 0%,
477
+ transparent 55%
478
+ ),
479
+ linear-gradient(135deg, color-mix(in oklch, var(--primary) 7%, var(--card)) 0%, var(--card) 70%);
480
+ box-shadow: 0 1px 2px oklch(0 0 0 / 0.04);
481
+ }
482
+
483
+ :root[data-header='banner'] [data-slot='page-header'] h1 {
484
+ font-size: 1.75rem;
485
+ font-weight: 700;
486
+ letter-spacing: -0.02em;
487
+ }
488
+
489
+ /* Band: a full-width strip across the top of the content area. */
490
+ :root[data-header='band'] [data-slot='page-header'] {
491
+ margin: calc(-1 * var(--alfakit-content-pad)) calc(-1 * var(--alfakit-content-pad)) 0;
492
+ padding: 1.25rem var(--alfakit-content-pad);
493
+ background: var(--card);
494
+ border-bottom: 1px solid var(--border);
495
+ }
496
+
497
+ :root[data-header='band'] [data-slot='page-header'] h1 {
498
+ font-size: 1.375rem;
499
+ }
500
+
501
+ /* Compact: a small title for dense screens. */
502
+ :root[data-header='compact'] [data-slot='page-header'] h1 {
503
+ font-size: 1.125rem;
504
+ font-weight: 600;
505
+ letter-spacing: 0;
506
+ }
507
+
508
+ :root[data-header='compact'] [data-slot='page-header'] {
509
+ align-items: center;
510
+ }
511
+
512
+ /* -------------------------------------------------------------------- Surfaces */
513
+
514
+ /* Elevated: no border, a soft shadow. */
515
+ :root[data-surfaces='elevated'] :is([data-surface], [data-slot='card']) {
516
+ border-color: transparent;
517
+ box-shadow:
518
+ 0 1px 2px oklch(0 0 0 / 0.04),
519
+ 0 8px 24px -12px oklch(0 0 0 / 0.14);
520
+ }
521
+
522
+ :root.dark[data-surfaces='elevated'] :is([data-surface], [data-slot='card']) {
523
+ border-color: oklch(1 0 0 / 7%);
524
+ box-shadow: 0 1px 2px oklch(0 0 0 / 0.4);
525
+ }
526
+
527
+ /* Flat: no border or shadow; a tint separates surfaces from the page. */
528
+ :root[data-surfaces='flat'] :is([data-surface], [data-slot='card']) {
529
+ border-color: transparent;
530
+ box-shadow: none;
531
+ background: color-mix(in oklch, var(--muted) 65%, var(--card));
532
+ }
533
+
534
+ /* Ring: a hairline ring with a small shadow (Filament-like). */
535
+ :root[data-surfaces='ring'] :is([data-surface], [data-slot='card'], [data-slot='topbar']) {
536
+ border-color: oklch(0.13 0.028 261.692 / 0.06);
537
+ box-shadow: 0 1px 2px 0 oklch(0 0 0 / 0.05);
538
+ }
539
+
540
+ :root.dark[data-surfaces='ring'] :is([data-surface], [data-slot='card'], [data-slot='topbar']) {
541
+ border-color: oklch(1 0 0 / 10%);
542
+ }
543
+
544
+ /* ---------------------------------------------------------------------- Inputs */
545
+
546
+ :root[data-inputs='filled']
547
+ :is(
548
+ [data-slot='input']:not([data-slot='input-group'] *),
549
+ [data-slot='textarea'],
550
+ [data-slot='select-trigger']:not([data-slot='input-group'] *),
551
+ [data-input]:not([data-slot='input-group'] *),
552
+ [data-slot='input-group']
553
+ ) {
554
+ background: var(--muted);
555
+ border-color: transparent;
556
+ box-shadow: none;
557
+ }
558
+
559
+ :root[data-inputs='filled']
560
+ :is(
561
+ [data-slot='input']:not([data-slot='input-group'] *),
562
+ [data-slot='textarea'],
563
+ [data-slot='select-trigger']:not([data-slot='input-group'] *),
564
+ [data-input]:not([data-slot='input-group'] *)
565
+ ):focus-visible,
566
+ :root[data-inputs='filled'] [data-slot='input-group']:focus-within {
567
+ background: var(--card);
568
+ border-color: var(--ring);
569
+ }
570
+
571
+ :root[data-inputs='underline']
572
+ :is(
573
+ [data-slot='input']:not([data-slot='input-group'] *),
574
+ [data-slot='textarea'],
575
+ [data-slot='select-trigger']:not([data-slot='input-group'] *),
576
+ [data-input]:not([data-slot='input-group'] *),
577
+ [data-slot='input-group']
578
+ ) {
579
+ border-width: 0 0 1px;
580
+ border-radius: 0;
581
+ background: transparent;
582
+ box-shadow: none;
583
+ }
584
+
585
+ :root[data-inputs='underline']
586
+ :is(
587
+ [data-slot='input']:not([data-slot='input-group'] *),
588
+ [data-slot='textarea'],
589
+ [data-slot='select-trigger']:not([data-slot='input-group'] *),
590
+ [data-input]:not([data-slot='input-group'] *)
591
+ ):focus-visible,
592
+ :root[data-inputs='underline'] [data-slot='input-group']:focus-within {
593
+ border-bottom-color: var(--primary);
594
+ box-shadow: 0 1px 0 0 var(--primary);
595
+ }
596
+
597
+ /* --------------------------------------------------------------------- Buttons */
598
+
599
+ :root[data-buttons='pill'] [data-slot='button']:not([data-input]) {
600
+ border-radius: 9999px;
601
+ }
602
+
603
+ :root[data-buttons='square'] [data-slot='button']:not([data-input]) {
604
+ border-radius: calc(var(--radius) * 0.5);
605
+ }
606
+
607
+ /* ---------------------------------------------------------------------- Tables */
608
+
609
+ :root[data-tables='striped'] [data-slot='table-body'] [data-slot='table-row']:nth-child(even) {
610
+ background: color-mix(in oklch, var(--muted) 60%, transparent);
611
+ }
612
+
613
+ :root[data-tables='striped'] [data-slot='table-header'] {
614
+ background: color-mix(in oklch, var(--muted) 80%, transparent);
615
+ }
616
+
617
+ :root[data-tables='minimal'] [data-slot='table-body'] [data-slot='table-row'] {
618
+ border-bottom-color: transparent;
619
+ }
620
+
621
+ :root[data-tables='minimal'] [data-slot='table-body'] [data-slot='table-cell'] {
622
+ padding-block: 0.75rem;
623
+ }
624
+
625
+ /* -------------------------------------------------------------- Mobile preset */
626
+
627
+ /*
628
+ * `$panel->mobile()` (design `mobile: 'bottom'`). Everything below the md breakpoint:
629
+ * a bottom navigation bar ([data-slot='bottom-nav'], rendered by the renderers), tables as
630
+ * stacked cards (the renderers switch the layout), slide-over modals, 44px touch targets
631
+ * on primary controls and sticky form actions. Logical properties keep it RTL-safe.
632
+ */
633
+
634
+ :root {
635
+ --alfakit-bottom-nav-height: 3.75rem;
636
+ }
637
+
638
+ @media (max-width: 767px) {
639
+ :root[data-mobile='bottom'] [data-slot='bottom-nav'] {
640
+ position: fixed;
641
+ inset-inline: 0;
642
+ bottom: 0;
643
+ z-index: 40;
644
+ display: grid;
645
+ grid-auto-flow: column;
646
+ grid-auto-columns: 1fr;
647
+ height: calc(var(--alfakit-bottom-nav-height) + env(safe-area-inset-bottom, 0px));
648
+ padding-bottom: env(safe-area-inset-bottom, 0px);
649
+ background: color-mix(in oklch, var(--background) 92%, transparent);
650
+ backdrop-filter: blur(12px);
651
+ border-top: 1px solid var(--border);
652
+ }
653
+
654
+ :root[data-mobile='bottom'] [data-slot='bottom-nav-item'] {
655
+ display: flex;
656
+ flex-direction: column;
657
+ align-items: center;
658
+ justify-content: center;
659
+ gap: 0.125rem;
660
+ min-height: 2.75rem;
661
+ padding-block: 0.375rem;
662
+ font-size: 0.6875rem;
663
+ font-weight: 500;
664
+ line-height: 1;
665
+ color: var(--muted-foreground);
666
+ text-decoration: none;
667
+ -webkit-tap-highlight-color: transparent;
668
+ }
669
+
670
+ :root[data-mobile='bottom'] [data-slot='bottom-nav-item'] svg {
671
+ width: 1.375rem;
672
+ height: 1.375rem;
673
+ }
674
+
675
+ :root[data-mobile='bottom'] [data-slot='bottom-nav-item'][data-active='true'] {
676
+ color: var(--primary);
677
+ }
678
+
679
+ /* Room for the bar, sticky actions sit right above it. */
680
+ :root[data-mobile='bottom'] [data-slot='content'] {
681
+ padding-bottom: calc(
682
+ var(--alfakit-bottom-nav-height) + env(safe-area-inset-bottom, 0px) + 1rem
683
+ );
684
+ }
685
+
686
+ :root[data-mobile='bottom'] [data-slot='form-actions'] {
687
+ position: sticky;
688
+ bottom: calc(var(--alfakit-bottom-nav-height) + env(safe-area-inset-bottom, 0px));
689
+ z-index: 30;
690
+ margin-inline: calc(var(--alfakit-content-pad) * -1);
691
+ padding-inline: var(--alfakit-content-pad);
692
+ padding-block: 0.75rem;
693
+ background: color-mix(in oklch, var(--background) 92%, transparent);
694
+ backdrop-filter: blur(12px);
695
+ border-top: 1px solid var(--border);
696
+ }
697
+
698
+ :root[data-mobile='bottom'] [data-slot='form-actions'] [data-slot='button'] {
699
+ flex: 1 1 auto;
700
+ }
701
+
702
+ /* 44px touch targets on primary controls (WCAG 2.5.5); icon buttons grow to a 44px square. */
703
+ :root[data-mobile='bottom']
704
+ :is(
705
+ [data-slot='form-actions'],
706
+ [data-slot='page-header'],
707
+ [data-slot='table-block'] > :first-child,
708
+ [data-slot='dialog-footer'],
709
+ [data-slot='sheet-footer']
710
+ )
711
+ [data-slot='button'] {
712
+ min-height: 2.75rem;
713
+ min-width: 2.75rem;
714
+ }
715
+
716
+ :root[data-mobile='bottom']
717
+ :is([data-slot='input'], [data-slot='select-trigger'], [data-input]):not(
718
+ [data-slot='input-group'] *
719
+ ) {
720
+ min-height: 2.75rem;
721
+ }
722
+
723
+ :root[data-mobile='bottom'] [data-slot='input-group'] {
724
+ min-height: 2.75rem;
725
+ }
726
+
727
+ /* Centred dialogs become slide-overs from the reading-end edge. */
728
+ :root[data-mobile='bottom'] [data-slot='dialog-content'] {
729
+ top: 0;
730
+ bottom: 0;
731
+ inset-inline-start: auto;
732
+ inset-inline-end: 0;
733
+ left: auto;
734
+ height: 100dvh;
735
+ max-height: none;
736
+ width: 100%;
737
+ max-width: 100%;
738
+ translate: none;
739
+ transform: none;
740
+ border-radius: 0;
741
+ border-block: 0;
742
+ border-inline-end: 0;
743
+ overflow-y: auto;
744
+ padding-bottom: calc(1.5rem + env(safe-area-inset-bottom, 0px));
745
+ animation-name: alfakit-slide-over-in;
746
+ animation-duration: 0.25s;
747
+ animation-timing-function: cubic-bezier(0.32, 0.72, 0, 1);
748
+ }
749
+
750
+ :root[data-mobile='bottom'] [data-slot='dialog-content'][data-state='closed'] {
751
+ animation-name: alfakit-slide-over-out;
752
+ }
753
+
754
+ :root[data-mobile='bottom'] [data-slot='sheet-content'] {
755
+ padding-bottom: env(safe-area-inset-bottom, 0px);
756
+ }
757
+
758
+ :root[data-mobile='bottom'] [data-slot='table-content'] [data-slot='table-record'] {
759
+ padding-block: 0.875rem;
760
+ }
761
+ }
762
+
763
+ /* The slide-over enters from the reading-end edge: the right in LTR, the left in RTL. */
764
+ :root[data-mobile='bottom'] [data-slot='dialog-content'] {
765
+ --alfakit-slide-from: 100%;
766
+ }
767
+
768
+ :root[dir='rtl'][data-mobile='bottom'] [data-slot='dialog-content'] {
769
+ --alfakit-slide-from: -100%;
770
+ }
771
+
772
+ @keyframes alfakit-slide-over-in {
773
+ from {
774
+ transform: translateX(var(--alfakit-slide-from, 100%));
775
+ opacity: 0.6;
776
+ }
777
+ to {
778
+ transform: none;
779
+ opacity: 1;
780
+ }
781
+ }
782
+
783
+ @keyframes alfakit-slide-over-out {
784
+ from {
785
+ transform: none;
786
+ opacity: 1;
787
+ }
788
+ to {
789
+ transform: translateX(var(--alfakit-slide-from, 100%));
790
+ opacity: 0.6;
791
+ }
792
+ }
793
+
794
+ /* ---------------------------------------------------------- Theme personalities */
795
+
796
+ /* Sortable headers are buttons, which browsers reset to normal case. */
797
+ [data-slot='table-head'] :is(button, a) {
798
+ text-transform: inherit;
799
+ letter-spacing: inherit;
800
+ font-size: inherit;
801
+ }
802
+
803
+ /* AlfaKit: small-caps table headers, bold titles, airy page. */
804
+ :root[data-alfakit-theme~='alfakit'] [data-slot='table-head'] {
805
+ text-transform: uppercase;
806
+ font-size: 0.6875rem;
807
+ letter-spacing: 0.06em;
808
+ color: var(--muted-foreground);
809
+ }
810
+
811
+ :root[data-alfakit-theme~='alfakit'] [data-slot='content'] {
812
+ gap: 1.75rem;
813
+ }
814
+
815
+ /* Minimal: hairline surfaces on a white page, no tint. */
816
+ :root[data-alfakit-theme~='minimal'] :is([data-surface], [data-slot='card']) {
817
+ background: var(--card);
818
+ border-color: var(--border);
819
+ }
820
+
821
+ :root[data-alfakit-theme~='minimal'] [data-slot='topbar'] {
822
+ background: var(--background);
823
+ backdrop-filter: none;
824
+ }
825
+
826
+ /* Soft: large serif titles. */
827
+ :root[data-alfakit-theme~='soft'] [data-slot='page-header'] h1 {
828
+ font-size: 2.125rem;
829
+ font-weight: 600;
830
+ letter-spacing: -0.015em;
831
+ }
832
+
833
+ /* Corporate: uppercase table headers and a crisp white top bar. */
834
+ :root[data-alfakit-theme~='corporate'] [data-slot='table-head'] {
835
+ text-transform: uppercase;
836
+ font-size: 0.6875rem;
837
+ letter-spacing: 0.05em;
838
+ }
839
+
840
+ :root[data-alfakit-theme~='corporate'] [data-slot='topbar'] {
841
+ background: var(--card);
842
+ backdrop-filter: none;
843
+ }
844
+
845
+ /* ------------------------------------------------------------------ Credit */
846
+
847
+ /* "Developed by Alfa Six" in the footer slot of every panel; removed with
848
+ `$panel->credit(false)`. */
849
+ [data-slot='credit'] {
850
+ display: flex;
851
+ justify-content: center;
852
+ padding: 0.75rem 1rem 1rem;
853
+ font-size: 0.75rem;
854
+ line-height: 1rem;
855
+ color: var(--muted-foreground);
856
+ }
857
+
858
+ [data-slot='credit'] a {
859
+ display: inline-flex;
860
+ align-items: center;
861
+ gap: 0.375rem;
862
+ color: inherit;
863
+ text-decoration: none;
864
+ transition: color 150ms;
865
+ }
866
+
867
+ /* The Alfa Six emblem: Alfa Navy on light backgrounds, white on dark (brand kit v3). */
868
+ [data-slot='credit'] svg {
869
+ width: auto;
870
+ height: 1.125rem;
871
+ flex-shrink: 0;
872
+ color: #073b78;
873
+ }
874
+
875
+ .dark [data-slot='credit'] svg {
876
+ color: #ffffff;
877
+ }
878
+
879
+ [data-slot='credit'] a:hover,
880
+ [data-slot='credit'] a:focus-visible {
881
+ color: var(--foreground);
882
+ text-decoration: underline;
883
+ text-underline-offset: 4px;
884
+ }
885
+
886
+ [data-slot='credit'] strong {
887
+ font-weight: 600;
888
+ }
889
+
890
+ /* "Powered by AlfaKit · Alfa Six" on customer-facing pages (opt-in, `Credit::poweredBy()`).
891
+ The markup carries its own layout styles; the theme adds colours and focus states. */
892
+ [data-slot='powered-by'] {
893
+ color: var(--muted-foreground);
894
+ }
895
+
896
+ .dark [data-slot='powered-by'],
897
+ .dark[data-slot='powered-by'] {
898
+ --alfakit-credit-emblem: #ffffff;
899
+ }
900
+
901
+ [data-slot='powered-by'] a:hover,
902
+ [data-slot='powered-by'] a:focus-visible {
903
+ color: var(--foreground);
904
+ text-decoration: underline !important;
905
+ text-underline-offset: 4px;
906
+ }
907
+
908
+ /* --------------------------------------------------------------------- Colours */
909
+
910
+ /*
911
+ * `colors(['gray' => '#71717a'])` tints the neutral tokens of every theme. The panel sets
912
+ * `data-alfakit-gray` when gray is configured; the repeated attribute outranks the
913
+ * themes' own `:root.dark[data-alfakit-theme~='…']` rules in light and dark mode.
914
+ */
915
+ :root[data-alfakit-gray][data-alfakit-gray][data-alfakit-gray] {
916
+ --muted: color-mix(in oklab, var(--alfakit-gray) 8%, var(--background));
917
+ --accent: color-mix(in oklab, var(--alfakit-gray) 8%, var(--background));
918
+ --secondary: color-mix(in oklab, var(--alfakit-gray) 8%, var(--background));
919
+ --muted-foreground: var(--alfakit-gray);
920
+ --border: color-mix(in oklab, var(--alfakit-gray) 18%, var(--background));
921
+ --sidebar-accent: color-mix(in oklab, var(--alfakit-gray) 8%, var(--sidebar));
922
+ --sidebar-border: color-mix(in oklab, var(--alfakit-gray) 18%, var(--sidebar));
923
+ }
924
+
925
+ /*
926
+ * Custom colour names (`colors(['brand' => '#4f46e5'])` and `->color('brand')`). The server
927
+ * emits `.alfakit-color-brand { --alfakit-c: var(--alfakit-brand); --alfakit-c-foreground: … }`;
928
+ * renderers add it with one of these utilities when a colour name has no built-in classes.
929
+ * Names without a rule fall back to the gray tokens.
930
+ */
931
+ .alfakit-solid {
932
+ background-color: var(--alfakit-c, var(--muted));
933
+ color: var(--alfakit-c-foreground, var(--foreground));
934
+ }
935
+
936
+ .alfakit-solid:hover {
937
+ background-color: color-mix(in oklab, var(--alfakit-c, var(--muted)) 90%, transparent);
938
+ }
939
+
940
+ .alfakit-soft {
941
+ border-color: transparent;
942
+ background-color: color-mix(in oklab, var(--alfakit-c, var(--muted-foreground)) 12%, transparent);
943
+ color: var(--alfakit-c, var(--muted-foreground));
944
+ }
945
+
946
+ .alfakit-outline {
947
+ border-color: color-mix(in oklab, var(--alfakit-c, var(--border)) 40%, transparent);
948
+ color: var(--alfakit-c, var(--foreground));
949
+ }
950
+
951
+ .alfakit-ghost,
952
+ .alfakit-text {
953
+ color: var(--alfakit-c, var(--muted-foreground));
954
+ }
955
+
956
+ .alfakit-outline:hover,
957
+ .alfakit-ghost:hover {
958
+ background-color: color-mix(in oklab, var(--alfakit-c, var(--muted-foreground)) 10%, transparent);
959
+ }
960
+
961
+ .alfakit-switch-on[data-state='checked'],
962
+ .alfakit-switch-off[data-state='unchecked'] {
963
+ background-color: var(--alfakit-c, var(--muted-foreground));
964
+ }
965
+
966
+ /*
967
+ * `FusedGroup`: the group draws one border (and the focus ring); the fields inside lose
968
+ * their own border, radius, shadow and ring, separated by 1px gaps showing the border colour.
969
+ */
970
+ [data-slot='fused-group-controls'] {
971
+ gap: 1px;
972
+ overflow: hidden;
973
+ border: 1px solid var(--input);
974
+ border-radius: var(--radius-md, 0.375rem);
975
+ background-color: var(--input);
976
+ box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
977
+ }
978
+
979
+ [data-slot='fused-group-controls']:has(:focus-visible) {
980
+ border-color: var(--ring);
981
+ box-shadow: 0 0 0 3px color-mix(in oklab, var(--ring) 50%, transparent);
982
+ }
983
+
984
+ [data-slot='fused-group-controls'][data-invalid] {
985
+ border-color: var(--destructive);
986
+ }
987
+
988
+ [data-slot='fused-group-controls'] > [data-slot='schema-item'] {
989
+ background-color: var(--background);
990
+ }
991
+
992
+ [data-slot='fused-group-controls']
993
+ :is(
994
+ input:not([type='checkbox'], [type='radio']),
995
+ textarea,
996
+ select,
997
+ button[data-input],
998
+ [role='combobox'],
999
+ [data-slot='select-trigger'],
1000
+ [data-slot='input-group']
1001
+ ) {
1002
+ border-color: transparent;
1003
+ border-radius: 0;
1004
+ box-shadow: none;
1005
+ outline: none;
1006
+ }
1007
+
1008
+ /* ------------------------------------------------------------------ Charts */
1009
+
1010
+ /*
1011
+ * Chart.js paints axes, legends and tooltips on the canvas, so chart widgets read these
1012
+ * properties from <html> (re-read when the theme or dark mode changes). Colours take any
1013
+ * CSS colour; the widths and radius are unitless numbers. Override them in a theme:
1014
+ * :root[data-alfakit-theme~='acme'] { --chart-tooltip-bg: oklch(0.2 0 0); }
1015
+ * Stat sparklines (`[data-slot='stat-chart']`) use the `--stat-chart-*` properties.
1016
+ */
1017
+ :root {
1018
+ --chart-text: var(--muted-foreground);
1019
+ --chart-grid: var(--border);
1020
+ --chart-legend-foreground: var(--muted-foreground);
1021
+ --chart-tooltip-bg: var(--popover);
1022
+ --chart-tooltip-foreground: var(--popover-foreground);
1023
+ --chart-tooltip-border: var(--border);
1024
+ --chart-tooltip-border-width: 1;
1025
+ --chart-tooltip-radius: 6;
1026
+ --stat-chart-stroke-width: 2;
1027
+ --stat-chart-fill-opacity: 0.12;
1028
+ }
1029
+
1030
+ /*
1031
+ * RichEditor `grid` column blocks and `lead` / `small` text, in the editor and in rendered
1032
+ * content (`RichContentRenderer`). Columns stack on small screens. Stored as
1033
+ * `<div data-type="grid" class="alfakit-grid alfakit-grid-cols-2"><div data-type="gridColumn">`
1034
+ * and `<p class="alfakit-lead">`; copy these rules when showing content outside a panel.
1035
+ */
1036
+ :where(.alfakit-grid) {
1037
+ display: grid;
1038
+ gap: 1rem;
1039
+ grid-template-columns: minmax(0, 1fr);
1040
+ margin-block: 0.5rem;
1041
+ }
1042
+ :where(.alfakit-grid-column) {
1043
+ min-width: 0;
1044
+ }
1045
+ :where(.alfakit-grid-column) > :first-child {
1046
+ margin-block-start: 0;
1047
+ }
1048
+ @media (min-width: 768px) {
1049
+ :where(.alfakit-grid-cols-2) {
1050
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1051
+ }
1052
+ :where(.alfakit-grid-cols-3) {
1053
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1054
+ }
1055
+ :where(.alfakit-grid-cols-4) {
1056
+ grid-template-columns: repeat(4, minmax(0, 1fr));
1057
+ }
1058
+ :where(.alfakit-grid-cols-5) {
1059
+ grid-template-columns: repeat(5, minmax(0, 1fr));
1060
+ }
1061
+ :where(.alfakit-grid-cols-6) {
1062
+ grid-template-columns: repeat(6, minmax(0, 1fr));
1063
+ }
1064
+ }
1065
+ :where([contenteditable] .alfakit-grid-column) {
1066
+ border: 1px dashed var(--border);
1067
+ border-radius: 0.375rem;
1068
+ padding: 0.25rem 0.5rem;
1069
+ }
1070
+ :where(.alfakit-lead) {
1071
+ font-size: 1.125em;
1072
+ line-height: 1.6;
1073
+ }
1074
+ :where(.alfakit-prose small) {
1075
+ font-size: 0.8125em;
1076
+ }
1077
+
1078
+ /* ---------------------------------------------------------- Calendar and tree */
1079
+
1080
+ /*
1081
+ * The calendar widget (alfasix/alfakit-calendar) draws FullCalendar inside
1082
+ * `[data-slot="calendar"]`; FullCalendar reads these `--fc-*` variables, so every theme's
1083
+ * tokens (and dark mode) apply. Override them on the slot to restyle one calendar.
1084
+ */
1085
+ :where(.fc[data-slot='calendar']) {
1086
+ --fc-small-font-size: 0.75rem;
1087
+ --fc-page-bg-color: var(--card);
1088
+ --fc-neutral-bg-color: var(--muted);
1089
+ --fc-neutral-text-color: var(--muted-foreground);
1090
+ --fc-border-color: var(--border);
1091
+ --fc-button-text-color: var(--foreground);
1092
+ --fc-button-bg-color: var(--background);
1093
+ --fc-button-border-color: var(--border);
1094
+ --fc-button-hover-bg-color: var(--accent);
1095
+ --fc-button-hover-border-color: var(--border);
1096
+ --fc-button-active-bg-color: var(--secondary);
1097
+ --fc-button-active-border-color: var(--border);
1098
+ --fc-event-bg-color: var(--primary);
1099
+ --fc-event-border-color: var(--primary);
1100
+ --fc-event-text-color: var(--primary-foreground);
1101
+ --fc-event-selected-overlay-color: color-mix(in oklab, var(--foreground) 25%, transparent);
1102
+ --fc-more-link-bg-color: var(--muted);
1103
+ --fc-more-link-text-color: var(--foreground);
1104
+ --fc-non-business-color: color-mix(in oklab, var(--muted) 60%, transparent);
1105
+ --fc-bg-event-color: var(--primary);
1106
+ --fc-bg-event-opacity: 0.2;
1107
+ --fc-highlight-color: color-mix(in oklab, var(--primary) 15%, transparent);
1108
+ --fc-today-bg-color: color-mix(in oklab, var(--primary) 6%, transparent);
1109
+ --fc-now-indicator-color: var(--destructive);
1110
+ --fc-list-event-hover-bg-color: var(--accent);
1111
+ color: var(--card-foreground);
1112
+ }
1113
+ /*
1114
+ * FullCalendar puts its `fc` class on the slot element itself and injects its own CSS
1115
+ * (`.fc .fc-button`, two classes), so these rules are plain selectors anchored on
1116
+ * `.fc[data-slot='calendar']` (three) rather than `:where()`, which would always lose.
1117
+ * Restyle one calendar with a more specific selector or with the `--fc-*` variables.
1118
+ */
1119
+ .fc[data-slot='calendar'] .fc-toolbar-title {
1120
+ font-size: 1.125rem;
1121
+ font-weight: 600;
1122
+ line-height: 1.75rem;
1123
+ color: var(--foreground);
1124
+ }
1125
+ .fc[data-slot='calendar'] .fc-button {
1126
+ display: inline-flex;
1127
+ align-items: center;
1128
+ justify-content: center;
1129
+ min-height: 2.25rem;
1130
+ padding: 0.375rem 0.75rem;
1131
+ border-radius: var(--radius);
1132
+ font-size: 0.875rem;
1133
+ font-weight: 500;
1134
+ line-height: 1.25rem;
1135
+ box-shadow: none;
1136
+ text-transform: capitalize;
1137
+ }
1138
+ .fc[data-slot='calendar'] .fc-button .fc-icon {
1139
+ font-size: 1.125rem;
1140
+ }
1141
+ .fc[data-slot='calendar'] .fc-button-group > .fc-button:not(:first-child) {
1142
+ border-start-start-radius: 0;
1143
+ border-end-start-radius: 0;
1144
+ }
1145
+ .fc[data-slot='calendar'] .fc-button-group > .fc-button:not(:last-child) {
1146
+ border-start-end-radius: 0;
1147
+ border-end-end-radius: 0;
1148
+ }
1149
+ .fc[data-slot='calendar'] .fc-button-primary:disabled {
1150
+ opacity: 0.5;
1151
+ }
1152
+ .fc[data-slot='calendar'] .fc-button-primary:not(:disabled).fc-button-active,
1153
+ .fc[data-slot='calendar'] .fc-button-primary:not(:disabled):active {
1154
+ color: var(--secondary-foreground);
1155
+ }
1156
+ .fc[data-slot='calendar'] .fc-button-primary:focus,
1157
+ .fc[data-slot='calendar'] .fc-button-primary:not(:disabled).fc-button-active:focus,
1158
+ .fc[data-slot='calendar'] .fc-button-primary:not(:disabled):active:focus {
1159
+ box-shadow: none;
1160
+ }
1161
+ .fc[data-slot='calendar'] .fc-button:focus-visible {
1162
+ outline: 2px solid var(--ring);
1163
+ outline-offset: 2px;
1164
+ z-index: 2;
1165
+ }
1166
+ .fc[data-slot='calendar'] a {
1167
+ color: inherit;
1168
+ }
1169
+ .fc[data-slot='calendar'] .fc-daygrid-day-number,
1170
+ .fc[data-slot='calendar'] .fc-col-header-cell-cushion {
1171
+ text-decoration: none;
1172
+ }
1173
+ .fc[data-slot='calendar'] .fc-col-header-cell-cushion {
1174
+ padding-block: 0.375rem;
1175
+ font-size: 0.75rem;
1176
+ font-weight: 500;
1177
+ color: var(--muted-foreground);
1178
+ }
1179
+ .fc[data-slot='calendar'] .fc-daygrid-day-number {
1180
+ font-size: 0.875rem;
1181
+ }
1182
+ .fc[data-slot='calendar'] .fc-day-other .fc-daygrid-day-number {
1183
+ color: var(--muted-foreground);
1184
+ }
1185
+ /* Today: a tinted cell (`--fc-today-bg-color`) and the date in a primary pill. */
1186
+ .fc[data-slot='calendar'] .fc-daygrid-day.fc-day-today .fc-daygrid-day-number {
1187
+ display: inline-flex;
1188
+ align-items: center;
1189
+ justify-content: center;
1190
+ min-width: 1.75rem;
1191
+ height: 1.75rem;
1192
+ margin: 0.25rem;
1193
+ padding: 0 0.375rem;
1194
+ border-radius: 9999px;
1195
+ background: var(--primary);
1196
+ color: var(--primary-foreground);
1197
+ font-weight: 600;
1198
+ }
1199
+ .fc[data-slot='calendar'] .fc-col-header-cell.fc-day-today .fc-col-header-cell-cushion {
1200
+ color: var(--primary);
1201
+ font-weight: 600;
1202
+ }
1203
+ .fc[data-slot='calendar'] .fc-event {
1204
+ border-radius: min(var(--radius), 0.375rem);
1205
+ }
1206
+ .fc[data-slot='calendar'] .fc-daygrid-event,
1207
+ .fc[data-slot='calendar'] .fc-timegrid-event .fc-event-main,
1208
+ .fc[data-slot='calendar'] .fc-list-event td {
1209
+ font-size: 0.75rem;
1210
+ }
1211
+ .fc[data-slot='calendar'] .fc-daygrid-dot-event:hover,
1212
+ .fc[data-slot='calendar'] .fc-daygrid-dot-event.fc-event-mirror {
1213
+ background: var(--accent);
1214
+ }
1215
+ .fc[data-slot='calendar'] .fc-list-day-cushion,
1216
+ .fc[data-slot='calendar'] .fc-popover-header {
1217
+ color: var(--foreground);
1218
+ }
1219
+ .fc[data-slot='calendar'] .fc-popover {
1220
+ border-radius: var(--radius);
1221
+ box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1);
1222
+ overflow: hidden;
1223
+ }
1224
+ .fc[data-slot='calendar'] .fc-timegrid-slot-label,
1225
+ .fc[data-slot='calendar'] .fc-timegrid-axis,
1226
+ .fc[data-slot='calendar'] .fc-list-event-time {
1227
+ color: var(--muted-foreground);
1228
+ font-size: 0.75rem;
1229
+ }
1230
+ /*
1231
+ * The list view hides its column headers for screen readers with `left: -10000px`. Right to
1232
+ * left that is scrollable overflow: the whole page gains a 10 000 px horizontal scroll and the
1233
+ * top bar slides under the sidebar. Clip it in place instead (still read by screen readers).
1234
+ */
1235
+ .fc[data-slot='calendar'] .fc-list-table thead {
1236
+ left: auto;
1237
+ inset-inline-start: 0;
1238
+ width: 1px;
1239
+ height: 1px;
1240
+ overflow: hidden;
1241
+ clip-path: inset(50%);
1242
+ white-space: nowrap;
1243
+ }
1244
+
1245
+ /*
1246
+ * Fields contain what they position. Headless switches, checkboxes and radios render a
1247
+ * visually hidden native input beside the control, absolutely positioned (and shifted by
1248
+ * -100%); without a positioned field it lands at the page edge and, right to left, widens
1249
+ * the page on phones.
1250
+ */
1251
+ :where([data-slot='field']) {
1252
+ position: relative;
1253
+ }
1254
+
1255
+ /*
1256
+ * Narrow screens: FullCalendar keeps its header toolbar on one row, wider than a phone.
1257
+ * Its chunks (navigation, title, views) wrap instead, and the title shrinks. Flex gaps and
1258
+ * `justify-content` follow the writing direction, so this works right to left too. (Plain
1259
+ * selectors: FullCalendar injects its own CSS, which would beat `:where()`; the slot is
1260
+ * the `.fc` element itself.)
1261
+ */
1262
+ @media (max-width: 39.99rem) {
1263
+ [data-slot='calendar'] .fc-toolbar.fc-header-toolbar {
1264
+ flex-wrap: wrap;
1265
+ gap: 0.5rem;
1266
+ }
1267
+ [data-slot='calendar'] .fc-toolbar .fc-toolbar-chunk {
1268
+ display: flex;
1269
+ flex-wrap: wrap;
1270
+ align-items: center;
1271
+ gap: 0.25rem;
1272
+ min-width: 0;
1273
+ }
1274
+ [data-slot='calendar'] .fc-toolbar .fc-toolbar-title {
1275
+ font-size: 1rem;
1276
+ overflow-wrap: anywhere;
1277
+ }
1278
+ [data-slot='calendar'] .fc-toolbar .fc-button {
1279
+ font-size: 0.8125rem;
1280
+ }
1281
+ }
1282
+
1283
+ /*
1284
+ * The tree (alfasix/alfakit-tree): the drop indicator while dragging. Rows carry
1285
+ * `data-drop="before|after|inside"`; lines are drawn above or below the row, so they
1286
+ * need no direction.
1287
+ */
1288
+ :where([data-slot='tree-item'][data-drop='before']) {
1289
+ box-shadow: inset 0 2px 0 0 var(--primary);
1290
+ }
1291
+ :where([data-slot='tree-item'][data-drop='after']) {
1292
+ box-shadow: inset 0 -2px 0 0 var(--primary);
1293
+ }
1294
+ :where([data-slot='tree-item'][data-drop='inside']) {
1295
+ background-color: color-mix(in oklab, var(--primary) 10%, transparent);
1296
+ outline: 1px dashed var(--primary);
1297
+ outline-offset: -1px;
1298
+ }
1299
+
1300
+ /*
1301
+ * The Kanban board (alfasix/alfakit-kanban). A card being dragged leaves a dashed
1302
+ * placeholder (`data-picked="pointer"`) while a copy follows the pointer
1303
+ * (`data-slot="kanban-ghost"`); a card picked up with the keyboard is lifted
1304
+ * (`data-picked="keyboard"`). A list the picked card may not enter has `data-refused`.
1305
+ */
1306
+ :where([data-slot='kanban-card'][data-picked='pointer']) {
1307
+ opacity: 0.45;
1308
+ }
1309
+ :where([data-slot='kanban-card'][data-picked='pointer'] > [data-slot='kanban-card-body']) {
1310
+ border-style: dashed;
1311
+ box-shadow: none;
1312
+ }
1313
+ :where([data-slot='kanban-card'][data-picked='keyboard'] > [data-slot='kanban-card-body']) {
1314
+ outline: 2px solid var(--primary);
1315
+ outline-offset: 2px;
1316
+ box-shadow: 0 10px 24px -12px color-mix(in oklab, var(--foreground) 45%, transparent);
1317
+ }
1318
+ :where([data-slot='kanban-card'][data-saving]) {
1319
+ opacity: 0.7;
1320
+ }
1321
+ :where([data-slot='kanban-ghost']) {
1322
+ cursor: grabbing;
1323
+ list-style: none;
1324
+ box-shadow: 0 18px 40px -16px color-mix(in oklab, var(--foreground) 55%, transparent);
1325
+ }
1326
+ :where([data-slot='kanban-dropzone'][data-refused]) {
1327
+ background-color: color-mix(in oklab, var(--destructive) 8%, transparent);
1328
+ outline: 1px dashed var(--destructive);
1329
+ outline-offset: -1px;
1330
+ }
1331
+ :where(body[data-kanban-dragging]) {
1332
+ cursor: grabbing;
1333
+ user-select: none;
1334
+ -webkit-user-select: none;
1335
+ }
1336
+ @media (prefers-reduced-motion: reduce) {
1337
+ :where([data-slot='kanban-card'] > [data-slot='kanban-card-body']) {
1338
+ transition: none;
1339
+ }
1340
+ }