@cosmicdrift/kumiko-renderer 0.374.0 → 0.378.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (477) hide show
  1. package/README.md +2 -2
  2. package/dist/app/action-form-support.d.ts +9 -2
  3. package/dist/app/action-form-support.js +24 -2
  4. package/dist/app/client-actions.d.ts +2 -2
  5. package/dist/app/column-renderers.js +1 -1
  6. package/dist/app/config-edit-shim.js +1 -1
  7. package/dist/app/content-preview.js +1 -6
  8. package/dist/app/custom-screens.js +1 -1
  9. package/dist/app/dashboard-body.d.ts +1 -1
  10. package/dist/app/entity-list-expanded-row.d.ts +1 -1
  11. package/dist/app/form-schema.d.ts +1 -1
  12. package/dist/app/form-schema.js +2 -2
  13. package/dist/app/kumiko-screen.d.ts +1 -1
  14. package/dist/app/kumiko-screen.js +10 -7
  15. package/dist/app/list-empty-content.d.ts +1 -1
  16. package/dist/app/list-facets.d.ts +1 -1
  17. package/dist/app/nav.js +2 -2
  18. package/dist/app/query-state-banners.d.ts +1 -1
  19. package/dist/app/reference-link.d.ts +1 -1
  20. package/dist/app/row-actions.d.ts +1 -1
  21. package/dist/app/secret-mint-body.d.ts +1 -1
  22. package/dist/app/secrets-edit-body.d.ts +1 -1
  23. package/dist/app/use-record-actions.d.ts +1 -1
  24. package/dist/app/write-failed-error.d.ts +1 -1
  25. package/dist/components/availability-options-select.d.ts +1 -1
  26. package/dist/components/embedded-list-field.d.ts +1 -1
  27. package/dist/components/embedded-list-field.js +1 -1
  28. package/dist/components/file-list-field.d.ts +1 -1
  29. package/dist/components/form-derivation-patch.d.ts +8 -0
  30. package/dist/components/form-derivation-patch.js +24 -0
  31. package/dist/components/form-screen-layout.d.ts +13 -0
  32. package/dist/components/form-screen-layout.js +13 -0
  33. package/dist/components/grid-cell-for-field.d.ts +1 -1
  34. package/dist/components/multi-select-checkboxes.d.ts +1 -1
  35. package/dist/components/multi-select-checkboxes.js +1 -1
  36. package/dist/components/query-options-select.d.ts +1 -1
  37. package/dist/components/related-list-section.d.ts +1 -1
  38. package/dist/components/render-edit-logic.d.ts +1 -1
  39. package/dist/components/render-edit-types.d.ts +6 -3
  40. package/dist/components/render-edit.d.ts +1 -1
  41. package/dist/components/render-edit.js +18 -3
  42. package/dist/components/render-field.d.ts +1 -1
  43. package/dist/components/render-field.js +12 -2
  44. package/dist/components/render-list.d.ts +1 -1
  45. package/dist/components/render-list.js +20 -4
  46. package/dist/components/write-form-section.d.ts +1 -1
  47. package/dist/components/write-form-section.js +1 -1
  48. package/dist/context/dispatcher-context.d.ts +1 -1
  49. package/dist/file-ids-of.d.ts +1 -0
  50. package/dist/file-ids-of.js +7 -0
  51. package/dist/flow-diagram/icons.d.ts +3 -0
  52. package/dist/flow-diagram/icons.js +14 -0
  53. package/dist/flow-diagram/index.d.ts +2 -0
  54. package/dist/flow-diagram/index.js +1 -0
  55. package/dist/flow-diagram/render.d.ts +3 -0
  56. package/dist/flow-diagram/render.js +234 -0
  57. package/dist/flow-diagram/types.d.ts +18 -0
  58. package/dist/flow-diagram/types.js +1 -0
  59. package/dist/format-when.js +1 -1
  60. package/dist/headless/apex/css.d.ts +3 -0
  61. package/dist/headless/apex/css.js +298 -0
  62. package/dist/headless/apex/index.d.ts +236 -0
  63. package/dist/headless/apex/index.js +377 -0
  64. package/dist/headless/apex/lightbox.d.ts +4 -0
  65. package/dist/headless/apex/lightbox.js +81 -0
  66. package/dist/headless/contracts/asset.d.ts +15 -0
  67. package/dist/headless/contracts/asset.js +17 -0
  68. package/dist/headless/contracts/index.d.ts +3 -0
  69. package/dist/headless/contracts/index.js +1 -0
  70. package/dist/headless/contracts/locale.d.ts +7 -0
  71. package/dist/headless/contracts/locale.js +11 -0
  72. package/dist/headless/contracts/primitives.d.ts +93 -0
  73. package/dist/headless/contracts/primitives.js +21 -0
  74. package/dist/headless/dispatcher/index.d.ts +2 -0
  75. package/dist/headless/dispatcher/index.js +1 -0
  76. package/dist/headless/dispatcher/types.d.ts +86 -0
  77. package/dist/headless/dispatcher/types.js +34 -0
  78. package/dist/headless/form/form-controller.d.ts +2 -0
  79. package/dist/headless/form/form-controller.js +409 -0
  80. package/dist/headless/form/index.d.ts +3 -0
  81. package/dist/headless/form/index.js +2 -0
  82. package/dist/headless/form/types.d.ts +76 -0
  83. package/dist/headless/form/types.js +1 -0
  84. package/dist/headless/form/zod-bridge.d.ts +10 -0
  85. package/dist/headless/form/zod-bridge.js +103 -0
  86. package/dist/headless/format/document-values.d.ts +12 -0
  87. package/dist/headless/format/document-values.js +70 -0
  88. package/dist/headless/format/escape.d.ts +5 -0
  89. package/dist/headless/format/escape.js +75 -0
  90. package/dist/headless/format/html-template.d.ts +9 -0
  91. package/dist/headless/format/html-template.js +39 -0
  92. package/dist/headless/format/index.d.ts +12 -0
  93. package/dist/headless/format/index.js +237 -0
  94. package/dist/headless/format/money.d.ts +3 -0
  95. package/dist/headless/format/money.js +39 -0
  96. package/dist/headless/index.d.ts +14 -0
  97. package/dist/headless/index.js +9 -0
  98. package/dist/headless/locale-routing/index.d.ts +41 -0
  99. package/dist/headless/locale-routing/index.js +145 -0
  100. package/dist/headless/nav/index.d.ts +2 -0
  101. package/dist/headless/nav/index.js +1 -0
  102. package/dist/headless/nav/resolve.d.ts +2 -0
  103. package/dist/headless/nav/resolve.js +71 -0
  104. package/dist/headless/nav/types.d.ts +26 -0
  105. package/dist/headless/nav/types.js +1 -0
  106. package/dist/headless/store/create-store.d.ts +2 -0
  107. package/dist/headless/store/create-store.js +43 -0
  108. package/dist/headless/store/equality.d.ts +1 -0
  109. package/dist/headless/store/equality.js +34 -0
  110. package/dist/headless/store/index.d.ts +3 -0
  111. package/dist/headless/store/index.js +2 -0
  112. package/dist/headless/store/types.d.ts +7 -0
  113. package/dist/headless/store/types.js +10 -0
  114. package/dist/headless/view-model/edit.d.ts +21 -0
  115. package/dist/headless/view-model/edit.js +512 -0
  116. package/dist/headless/view-model/embedded-list.d.ts +27 -0
  117. package/dist/headless/view-model/embedded-list.js +63 -0
  118. package/dist/headless/view-model/index.d.ts +7 -0
  119. package/dist/headless/view-model/index.js +3 -0
  120. package/dist/headless/view-model/list-file-display.d.ts +3 -0
  121. package/dist/headless/view-model/list-file-display.js +27 -0
  122. package/dist/headless/view-model/list.d.ts +16 -0
  123. package/dist/headless/view-model/list.js +229 -0
  124. package/dist/headless/view-model/types.d.ts +382 -0
  125. package/dist/headless/view-model/types.js +1 -0
  126. package/dist/hooks/use-ai-text.d.ts +1 -1
  127. package/dist/hooks/use-form.d.ts +1 -1
  128. package/dist/hooks/use-form.js +1 -1
  129. package/dist/hooks/use-mutation.d.ts +1 -1
  130. package/dist/hooks/use-query.d.ts +1 -1
  131. package/dist/hooks/use-store.d.ts +1 -1
  132. package/dist/hooks/use-store.js +7 -7
  133. package/dist/hooks/use-stream-handler.d.ts +1 -1
  134. package/dist/i18n-defaults.js +6 -0
  135. package/dist/i18n.d.ts +1 -1
  136. package/dist/i18n.js +1 -1
  137. package/dist/index.d.ts +3 -1
  138. package/dist/index.js +5 -4
  139. package/dist/live/csrf.d.ts +2 -0
  140. package/dist/live/csrf.js +60 -0
  141. package/dist/live/dispatcher-live.d.ts +7 -0
  142. package/dist/live/dispatcher-live.js +286 -0
  143. package/dist/live/envelopes.d.ts +101 -0
  144. package/dist/live/envelopes.js +35 -0
  145. package/dist/live/error-mapping.d.ts +16 -0
  146. package/dist/live/error-mapping.js +82 -0
  147. package/dist/live/index.d.ts +7 -0
  148. package/dist/live/index.js +5 -0
  149. package/dist/live/locale.d.ts +2 -0
  150. package/dist/live/locale.js +25 -0
  151. package/dist/live/sse-stream.d.ts +14 -0
  152. package/dist/live/sse-stream.js +128 -0
  153. package/dist/primitives.d.ts +45 -36
  154. package/dist/primitives.js +1 -1
  155. package/dist/session/session-ended.d.ts +1 -1
  156. package/dist/tokens.d.ts +3 -4
  157. package/dist/tokens.js +4 -5
  158. package/dist/web/app/app-schema-boot.d.ts +19 -0
  159. package/dist/web/app/app-schema-boot.js +124 -0
  160. package/dist/web/app/browser-locale.d.ts +22 -0
  161. package/dist/web/app/browser-locale.js +78 -0
  162. package/dist/web/app/client-plugin.d.ts +106 -0
  163. package/dist/web/app/client-plugin.js +12 -0
  164. package/dist/web/app/create-app.d.ts +104 -0
  165. package/dist/web/app/create-app.js +498 -0
  166. package/dist/web/app/create-public-surface.d.ts +36 -0
  167. package/dist/web/app/create-public-surface.js +40 -0
  168. package/dist/web/app/dashboard-body.d.ts +3 -0
  169. package/dist/web/app/dashboard-body.js +865 -0
  170. package/dist/web/app/dashboard-refresh.d.ts +6 -0
  171. package/dist/web/app/dashboard-refresh.js +15 -0
  172. package/dist/web/app/document-lang-sync.d.ts +4 -0
  173. package/dist/web/app/document-lang-sync.js +27 -0
  174. package/dist/web/app/draft-storage.d.ts +11 -0
  175. package/dist/web/app/draft-storage.js +53 -0
  176. package/dist/web/app/nav-providers-context.d.ts +13 -0
  177. package/dist/web/app/nav-providers-context.js +18 -0
  178. package/dist/web/app/nav.d.ts +40 -0
  179. package/dist/web/app/nav.js +231 -0
  180. package/dist/web/app/plain-content-editor.d.ts +3 -0
  181. package/dist/web/app/plain-content-editor.js +30 -0
  182. package/dist/web/app/relative-time.d.ts +10 -0
  183. package/dist/web/app/relative-time.js +56 -0
  184. package/dist/web/app/resolvers-context.d.ts +12 -0
  185. package/dist/web/app/resolvers-context.js +10 -0
  186. package/dist/web/app/rich-content-editor.d.ts +3 -0
  187. package/dist/web/app/rich-content-editor.js +15 -0
  188. package/dist/web/app/root-error-fallback.d.ts +2 -0
  189. package/dist/web/app/root-error-fallback.js +21 -0
  190. package/dist/web/app/screen-error-fallback.d.ts +6 -0
  191. package/dist/web/app/screen-error-fallback.js +17 -0
  192. package/dist/web/app/tiptap-editor.d.ts +3 -0
  193. package/dist/web/app/tiptap-editor.js +120 -0
  194. package/dist/web/app/toast-action-notifier.d.ts +5 -0
  195. package/dist/web/app/toast-action-notifier.js +17 -0
  196. package/dist/web/components/config-cascade.d.ts +13 -0
  197. package/dist/web/components/config-cascade.js +155 -0
  198. package/dist/web/components/config-source-badge.d.ts +6 -0
  199. package/dist/web/components/config-source-badge.js +55 -0
  200. package/dist/web/default-color-scheme.d.ts +2 -0
  201. package/dist/web/default-color-scheme.js +3 -0
  202. package/dist/web/icons.d.ts +94 -0
  203. package/dist/web/icons.js +100 -0
  204. package/dist/web/index.d.ts +78 -0
  205. package/dist/web/index.js +53 -0
  206. package/dist/web/layout/app-layout.d.ts +21 -0
  207. package/dist/web/layout/app-layout.js +8 -0
  208. package/dist/web/layout/avatar.d.ts +12 -0
  209. package/dist/web/layout/avatar.js +63 -0
  210. package/dist/web/layout/default-app-shell.d.ts +41 -0
  211. package/dist/web/layout/default-app-shell.js +16 -0
  212. package/dist/web/layout/editor-panel.d.ts +10 -0
  213. package/dist/web/layout/editor-panel.js +29 -0
  214. package/dist/web/layout/fill-classes.d.ts +9 -0
  215. package/dist/web/layout/fill-classes.js +15 -0
  216. package/dist/web/layout/filter-app-schema-navs.d.ts +7 -0
  217. package/dist/web/layout/filter-app-schema-navs.js +68 -0
  218. package/dist/web/layout/header-action-group.d.ts +6 -0
  219. package/dist/web/layout/header-action-group.js +8 -0
  220. package/dist/web/layout/header-overflow-menu.d.ts +4 -0
  221. package/dist/web/layout/header-overflow-menu.js +8 -0
  222. package/dist/web/layout/language-menu-items.d.ts +8 -0
  223. package/dist/web/layout/language-menu-items.js +16 -0
  224. package/dist/web/layout/language-switcher.d.ts +25 -0
  225. package/dist/web/layout/language-switcher.js +46 -0
  226. package/dist/web/layout/nav-tree.d.ts +19 -0
  227. package/dist/web/layout/nav-tree.js +536 -0
  228. package/dist/web/layout/page-header-slot.d.ts +25 -0
  229. package/dist/web/layout/page-header-slot.js +50 -0
  230. package/dist/web/layout/profile-menu.d.ts +13 -0
  231. package/dist/web/layout/profile-menu.js +6 -0
  232. package/dist/web/layout/shell-breadcrumb.d.ts +11 -0
  233. package/dist/web/layout/shell-breadcrumb.js +34 -0
  234. package/dist/web/layout/shell-header.d.ts +12 -0
  235. package/dist/web/layout/shell-header.js +159 -0
  236. package/dist/web/layout/sidebar-brand.d.ts +15 -0
  237. package/dist/web/layout/sidebar-brand.js +9 -0
  238. package/dist/web/layout/sidebar-panel.d.ts +41 -0
  239. package/dist/web/layout/sidebar-panel.js +107 -0
  240. package/dist/web/layout/sidebar-user.d.ts +8 -0
  241. package/dist/web/layout/sidebar-user.js +17 -0
  242. package/dist/web/layout/sidebar.d.ts +17 -0
  243. package/dist/web/layout/sidebar.js +11 -0
  244. package/dist/web/layout/target-resolver-stub.d.ts +13 -0
  245. package/dist/web/layout/target-resolver-stub.js +61 -0
  246. package/dist/web/layout/target-url.d.ts +12 -0
  247. package/dist/web/layout/target-url.js +77 -0
  248. package/dist/web/layout/theme-label.d.ts +15 -0
  249. package/dist/web/layout/theme-label.js +35 -0
  250. package/dist/web/layout/theme-menu-item.d.ts +12 -0
  251. package/dist/web/layout/theme-menu-item.js +16 -0
  252. package/dist/web/layout/theme-toggle.d.ts +17 -0
  253. package/dist/web/layout/theme-toggle.js +22 -0
  254. package/dist/web/layout/topbar.d.ts +8 -0
  255. package/dist/web/layout/topbar.js +4 -0
  256. package/dist/web/layout/workspace-shell.d.ts +63 -0
  257. package/dist/web/layout/workspace-shell.js +220 -0
  258. package/dist/web/layout/workspace-switcher.d.ts +15 -0
  259. package/dist/web/layout/workspace-switcher.js +36 -0
  260. package/dist/web/lib/accept-attr.d.ts +1 -0
  261. package/dist/web/lib/accept-attr.js +6 -0
  262. package/dist/web/lib/clamp.d.ts +1 -0
  263. package/dist/web/lib/clamp.js +3 -0
  264. package/dist/web/lib/cn.d.ts +6 -0
  265. package/dist/web/lib/cn.js +9 -0
  266. package/dist/web/lib/download.d.ts +2 -0
  267. package/dist/web/lib/download.js +24 -0
  268. package/dist/web/lib/file-ref-download.d.ts +15 -0
  269. package/dist/web/lib/file-ref-download.js +62 -0
  270. package/dist/web/lib/file-upload-form-data.d.ts +7 -0
  271. package/dist/web/lib/file-upload-form-data.js +11 -0
  272. package/dist/web/lib/resize-image.d.ts +1 -0
  273. package/dist/web/lib/resize-image.js +66 -0
  274. package/dist/web/lib/upload-file-ref.d.ts +9 -0
  275. package/dist/web/lib/upload-file-ref.js +29 -0
  276. package/dist/web/primitives/action-menu.d.ts +34 -0
  277. package/dist/web/primitives/action-menu.js +30 -0
  278. package/dist/web/primitives/calendar-popover.d.ts +13 -0
  279. package/dist/web/primitives/calendar-popover.js +76 -0
  280. package/dist/web/primitives/combobox.d.ts +56 -0
  281. package/dist/web/primitives/combobox.js +127 -0
  282. package/dist/web/primitives/date-field.d.ts +18 -0
  283. package/dist/web/primitives/date-field.js +74 -0
  284. package/dist/web/primitives/date-input.d.ts +1 -0
  285. package/dist/web/primitives/date-input.js +5 -0
  286. package/dist/web/primitives/date-parse.d.ts +11 -0
  287. package/dist/web/primitives/date-parse.js +159 -0
  288. package/dist/web/primitives/dialog.d.ts +3 -0
  289. package/dist/web/primitives/dialog.js +42 -0
  290. package/dist/web/primitives/drawer.d.ts +3 -0
  291. package/dist/web/primitives/drawer.js +17 -0
  292. package/dist/web/primitives/dropdown-menu.d.ts +15 -0
  293. package/dist/web/primitives/dropdown-menu.js +56 -0
  294. package/dist/web/primitives/embedded-list-input.d.ts +9 -0
  295. package/dist/web/primitives/embedded-list-input.js +382 -0
  296. package/dist/web/primitives/file-thumbnail.d.ts +31 -0
  297. package/dist/web/primitives/file-thumbnail.js +90 -0
  298. package/dist/web/primitives/file-upload.d.ts +21 -0
  299. package/dist/web/primitives/file-upload.js +56 -0
  300. package/dist/web/primitives/file-value-list.d.ts +3 -0
  301. package/dist/web/primitives/file-value-list.js +22 -0
  302. package/dist/web/primitives/index.d.ts +34 -0
  303. package/dist/web/primitives/index.js +2023 -0
  304. package/dist/web/primitives/json-view.d.ts +7 -0
  305. package/dist/web/primitives/json-view.js +84 -0
  306. package/dist/web/primitives/layout.d.ts +27 -0
  307. package/dist/web/primitives/layout.js +30 -0
  308. package/dist/web/primitives/lightbox.d.ts +3 -0
  309. package/dist/web/primitives/lightbox.js +36 -0
  310. package/dist/web/primitives/locale-number.d.ts +2 -0
  311. package/dist/web/primitives/locale-number.js +54 -0
  312. package/dist/web/primitives/located-timestamp-input.d.ts +22 -0
  313. package/dist/web/primitives/located-timestamp-input.js +22 -0
  314. package/dist/web/primitives/metric.d.ts +5 -0
  315. package/dist/web/primitives/metric.js +18 -0
  316. package/dist/web/primitives/modal-shell.d.ts +17 -0
  317. package/dist/web/primitives/modal-shell.js +9 -0
  318. package/dist/web/primitives/modal.d.ts +3 -0
  319. package/dist/web/primitives/modal.js +13 -0
  320. package/dist/web/primitives/money-input.d.ts +18 -0
  321. package/dist/web/primitives/money-input.js +122 -0
  322. package/dist/web/primitives/narrow-pinned-footer.d.ts +12 -0
  323. package/dist/web/primitives/narrow-pinned-footer.js +153 -0
  324. package/dist/web/primitives/number-input.d.ts +18 -0
  325. package/dist/web/primitives/number-input.js +53 -0
  326. package/dist/web/primitives/option-groups.d.ts +11 -0
  327. package/dist/web/primitives/option-groups.js +27 -0
  328. package/dist/web/primitives/page-header.d.ts +3 -0
  329. package/dist/web/primitives/page-header.js +52 -0
  330. package/dist/web/primitives/promo-panel.d.ts +3 -0
  331. package/dist/web/primitives/promo-panel.js +11 -0
  332. package/dist/web/primitives/segmented-select.d.ts +21 -0
  333. package/dist/web/primitives/segmented-select.js +62 -0
  334. package/dist/web/primitives/share-actions.d.ts +4 -0
  335. package/dist/web/primitives/share-actions.js +56 -0
  336. package/dist/web/primitives/status-badge.d.ts +3 -0
  337. package/dist/web/primitives/status-badge.js +5 -0
  338. package/dist/web/primitives/sticky-action-bar.d.ts +5 -0
  339. package/dist/web/primitives/sticky-action-bar.js +15 -0
  340. package/dist/web/primitives/tabs.d.ts +3 -0
  341. package/dist/web/primitives/tabs.js +107 -0
  342. package/dist/web/primitives/timestamp-input.d.ts +27 -0
  343. package/dist/web/primitives/timestamp-input.js +87 -0
  344. package/dist/web/primitives/toast.d.ts +19 -0
  345. package/dist/web/primitives/toast.js +63 -0
  346. package/dist/web/primitives/tz-input.d.ts +11 -0
  347. package/dist/web/primitives/tz-input.js +8 -0
  348. package/dist/web/primitives/tz-options.d.ts +4 -0
  349. package/dist/web/primitives/tz-options.js +17 -0
  350. package/dist/web/primitives/use-keyboard-inset.d.ts +1 -0
  351. package/dist/web/primitives/use-keyboard-inset.js +28 -0
  352. package/dist/web/primitives/use-narrow-viewport.d.ts +4 -0
  353. package/dist/web/primitives/use-narrow-viewport.js +46 -0
  354. package/dist/web/react-css-custom-properties.d.ts +6 -0
  355. package/dist/web/react-css-custom-properties.js +1 -0
  356. package/dist/web/sse/live-events.d.ts +15 -0
  357. package/dist/web/sse/live-events.js +148 -0
  358. package/dist/web/theme-plugin.d.ts +41 -0
  359. package/dist/web/theme-plugin.js +123 -0
  360. package/dist/web/tokens.d.ts +24 -0
  361. package/dist/web/tokens.js +203 -0
  362. package/dist/web/ui/avatar.d.ts +11 -0
  363. package/dist/web/ui/avatar.js +25 -0
  364. package/dist/web/ui/badge.d.ts +9 -0
  365. package/dist/web/ui/badge.js +26 -0
  366. package/dist/web/ui/breadcrumb.d.ts +11 -0
  367. package/dist/web/ui/breadcrumb.js +29 -0
  368. package/dist/web/ui/button.d.ts +10 -0
  369. package/dist/web/ui/button.js +37 -0
  370. package/dist/web/ui/checkbox.d.ts +4 -0
  371. package/dist/web/ui/checkbox.js +11 -0
  372. package/dist/web/ui/input.d.ts +3 -0
  373. package/dist/web/ui/input.js +8 -0
  374. package/dist/web/ui/label.d.ts +4 -0
  375. package/dist/web/ui/label.js +10 -0
  376. package/dist/web/ui/resizable.d.ts +7 -0
  377. package/dist/web/ui/resizable.js +16 -0
  378. package/dist/web/ui/separator.d.ts +4 -0
  379. package/dist/web/ui/separator.js +10 -0
  380. package/dist/web/ui/sheet.d.ts +14 -0
  381. package/dist/web/ui/sheet.js +42 -0
  382. package/dist/web/ui/sidebar.d.ts +73 -0
  383. package/dist/web/ui/sidebar.js +211 -0
  384. package/dist/web/ui/skeleton.d.ts +2 -0
  385. package/dist/web/ui/skeleton.js +7 -0
  386. package/dist/web/ui/switch.d.ts +6 -0
  387. package/dist/web/ui/switch.js +10 -0
  388. package/dist/web/ui/table.d.ts +10 -0
  389. package/dist/web/ui/table.js +30 -0
  390. package/dist/web/ui/tabs.d.ts +11 -0
  391. package/dist/web/ui/tabs.js +31 -0
  392. package/dist/web/ui/textarea.d.ts +3 -0
  393. package/dist/web/ui/textarea.js +8 -0
  394. package/dist/web/ui/tooltip.d.ts +7 -0
  395. package/dist/web/ui/tooltip.js +19 -0
  396. package/dist/web/ui/use-mobile.d.ts +1 -0
  397. package/dist/web/ui/use-mobile.js +16 -0
  398. package/dist/web/version/update-checker.d.ts +9 -0
  399. package/dist/web/version/update-checker.js +88 -0
  400. package/dist/web/widgets/ai-text-field.d.ts +36 -0
  401. package/dist/web/widgets/ai-text-field.js +137 -0
  402. package/dist/web/widgets/bounded-load-cache.d.ts +1 -0
  403. package/dist/web/widgets/bounded-load-cache.js +25 -0
  404. package/dist/web/widgets/chart-window.d.ts +58 -0
  405. package/dist/web/widgets/chart-window.js +190 -0
  406. package/dist/web/widgets/charts.d.ts +208 -0
  407. package/dist/web/widgets/charts.js +685 -0
  408. package/dist/web/widgets/collapsible-section.d.ts +10 -0
  409. package/dist/web/widgets/collapsible-section.js +17 -0
  410. package/dist/web/widgets/dashboard-list.d.ts +21 -0
  411. package/dist/web/widgets/dashboard-list.js +45 -0
  412. package/dist/web/widgets/detail-list.d.ts +15 -0
  413. package/dist/web/widgets/detail-list.js +8 -0
  414. package/dist/web/widgets/drawer.d.ts +65 -0
  415. package/dist/web/widgets/drawer.js +177 -0
  416. package/dist/web/widgets/feed-list.d.ts +13 -0
  417. package/dist/web/widgets/feed-list.js +9 -0
  418. package/dist/web/widgets/floating-panel.d.ts +30 -0
  419. package/dist/web/widgets/floating-panel.js +242 -0
  420. package/dist/web/widgets/form-fields.d.ts +93 -0
  421. package/dist/web/widgets/form-fields.js +50 -0
  422. package/dist/web/widgets/index.d.ts +28 -0
  423. package/dist/web/widgets/index.js +31 -0
  424. package/dist/web/widgets/infinity-list.d.ts +46 -0
  425. package/dist/web/widgets/infinity-list.js +211 -0
  426. package/dist/web/widgets/mode-switch.d.ts +21 -0
  427. package/dist/web/widgets/mode-switch.js +25 -0
  428. package/dist/web/widgets/pdf-preview.d.ts +10 -0
  429. package/dist/web/widgets/pdf-preview.js +140 -0
  430. package/dist/web/widgets/photo-slots.d.ts +29 -0
  431. package/dist/web/widgets/photo-slots.js +52 -0
  432. package/dist/web/widgets/plan-card.d.ts +36 -0
  433. package/dist/web/widgets/plan-card.js +13 -0
  434. package/dist/web/widgets/progress-bar.d.ts +19 -0
  435. package/dist/web/widgets/progress-bar.js +24 -0
  436. package/dist/web/widgets/progress-list.d.ts +19 -0
  437. package/dist/web/widgets/progress-list.js +11 -0
  438. package/dist/web/widgets/public-shell.d.ts +22 -0
  439. package/dist/web/widgets/public-shell.js +15 -0
  440. package/dist/web/widgets/query-table.d.ts +29 -0
  441. package/dist/web/widgets/query-table.js +30 -0
  442. package/dist/web/widgets/result-panel.d.ts +69 -0
  443. package/dist/web/widgets/result-panel.js +30 -0
  444. package/dist/web/widgets/section-card.d.ts +12 -0
  445. package/dist/web/widgets/section-card.js +9 -0
  446. package/dist/web/widgets/sheet-parts.d.ts +9 -0
  447. package/dist/web/widgets/sheet-parts.js +11 -0
  448. package/dist/web/widgets/side-by-side-table.d.ts +31 -0
  449. package/dist/web/widgets/side-by-side-table.js +11 -0
  450. package/dist/web/widgets/stat.d.ts +54 -0
  451. package/dist/web/widgets/stat.js +65 -0
  452. package/dist/web/widgets/states.d.ts +23 -0
  453. package/dist/web/widgets/states.js +20 -0
  454. package/dist/web/widgets/status-badge.d.ts +15 -0
  455. package/dist/web/widgets/status-badge.js +24 -0
  456. package/dist/web/widgets/step-bar.d.ts +35 -0
  457. package/dist/web/widgets/step-bar.js +60 -0
  458. package/dist/web/widgets/upload-zone.d.ts +24 -0
  459. package/dist/web/widgets/upload-zone.js +108 -0
  460. package/dist/web/widgets/use-draft.d.ts +20 -0
  461. package/dist/web/widgets/use-draft.js +21 -0
  462. package/dist/web/widgets/use-pointer-drag.d.ts +21 -0
  463. package/dist/web/widgets/use-pointer-drag.js +53 -0
  464. package/package.json +114 -7
  465. package/src/changes.json +92 -0
  466. package/src/web/fonts/OFL.txt +93 -0
  467. package/src/web/fonts/ibm-plex-mono-latin-400.woff2 +0 -0
  468. package/src/web/fonts/ibm-plex-mono-latin-500.woff2 +0 -0
  469. package/src/web/fonts/ibm-plex-mono-latin-ext-400.woff2 +0 -0
  470. package/src/web/fonts/ibm-plex-mono-latin-ext-500.woff2 +0 -0
  471. package/src/web/fonts/ibm-plex-sans-latin-400.woff2 +0 -0
  472. package/src/web/fonts/ibm-plex-sans-latin-500.woff2 +0 -0
  473. package/src/web/fonts/ibm-plex-sans-latin-600.woff2 +0 -0
  474. package/src/web/fonts/ibm-plex-sans-latin-ext-400.woff2 +0 -0
  475. package/src/web/fonts/ibm-plex-sans-latin-ext-500.woff2 +0 -0
  476. package/src/web/fonts/ibm-plex-sans-latin-ext-600.woff2 +0 -0
  477. package/src/web/styles.css +405 -0
@@ -0,0 +1,41 @@
1
+ import plugin from "tailwindcss/plugin";
2
+ import { type DefaultColorScheme } from "./default-color-scheme.ts";
3
+ export declare const FRAMEWORK_COLOR_NAMES: readonly ["background", "foreground", "foreground-secondary", "foreground-disabled", "card", "card-foreground", "popover", "popover-foreground", "primary", "primary-foreground", "secondary", "secondary-foreground", "muted", "muted-foreground", "accent", "accent-foreground", "destructive", "destructive-foreground", "border", "border-strong", "border-row", "input", "ring", "sidebar", "sidebar-foreground", "sidebar-primary", "sidebar-primary-foreground", "sidebar-accent", "sidebar-accent-foreground", "sidebar-muted", "sidebar-input", "sidebar-border", "sidebar-ring", "status-ok", "status-ok-surface", "status-warn", "status-warn-surface", "status-bad", "status-bad-surface", "status-critical", "status-critical-surface", "status-neutral", "status-neutral-surface", "status-active", "status-active-surface", "syntax-key", "syntax-string", "syntax-number", "syntax-literal", "promo", "promo-foreground", "promo-accent", "promo-accent-foreground"];
4
+ export type FrameworkColorName = (typeof FRAMEWORK_COLOR_NAMES)[number];
5
+ /** A plain string applies to both modes; `dark` falls back to `light`. */
6
+ export type ThemeColorValue = string | {
7
+ readonly light: string;
8
+ readonly dark?: string;
9
+ };
10
+ export type AppTheme = {
11
+ /** Scheme for visitors without a stored choice. "auto" follows the OS setting.
12
+ * The FOUC inline script cannot read this value; copy it into the script as a
13
+ * literal fallback (see the header comment in tokens.ts). */
14
+ readonly defaultColorScheme?: DefaultColorScheme;
15
+ readonly colors?: Readonly<Partial<Record<FrameworkColorName | (string & {}), ThemeColorValue>>>;
16
+ /** Base radius; the sm/md/lg/xl scale derives from it. */
17
+ readonly radius?: string;
18
+ readonly fonts?: {
19
+ readonly sans?: string;
20
+ readonly heading?: string;
21
+ readonly mono?: string;
22
+ };
23
+ readonly shadows?: {
24
+ readonly card?: string;
25
+ };
26
+ readonly spacing?: {
27
+ readonly card?: string;
28
+ };
29
+ };
30
+ type CssDeclarations = Record<string, string>;
31
+ type ThemeCss = {
32
+ readonly light: CssDeclarations;
33
+ readonly dark: CssDeclarations;
34
+ readonly modeInvariant: CssDeclarations;
35
+ readonly extraColorUtilities: CssDeclarations;
36
+ readonly bodyFontFamily: string | undefined;
37
+ };
38
+ export declare function defineAppTheme<Theme extends AppTheme>(theme: Theme): Theme;
39
+ export declare function buildThemeCss(theme: AppTheme): ThemeCss;
40
+ export declare function createThemePlugin(theme: AppTheme): ReturnType<typeof plugin>;
41
+ export {};
@@ -0,0 +1,123 @@
1
+ import plugin from "tailwindcss/plugin";
2
+ import { DEFAULT_COLOR_SCHEME_VARIABLE } from "./default-color-scheme.js";
3
+ export const FRAMEWORK_COLOR_NAMES = [
4
+ "background",
5
+ "foreground",
6
+ "foreground-secondary",
7
+ "foreground-disabled",
8
+ "card",
9
+ "card-foreground",
10
+ "popover",
11
+ "popover-foreground",
12
+ "primary",
13
+ "primary-foreground",
14
+ "secondary",
15
+ "secondary-foreground",
16
+ "muted",
17
+ "muted-foreground",
18
+ "accent",
19
+ "accent-foreground",
20
+ "destructive",
21
+ "destructive-foreground",
22
+ "border",
23
+ "border-strong",
24
+ "border-row",
25
+ "input",
26
+ "ring",
27
+ "sidebar",
28
+ "sidebar-foreground",
29
+ "sidebar-primary",
30
+ "sidebar-primary-foreground",
31
+ "sidebar-accent",
32
+ "sidebar-accent-foreground",
33
+ "sidebar-muted",
34
+ "sidebar-input",
35
+ "sidebar-border",
36
+ "sidebar-ring",
37
+ "status-ok",
38
+ "status-ok-surface",
39
+ "status-warn",
40
+ "status-warn-surface",
41
+ "status-bad",
42
+ "status-bad-surface",
43
+ "status-critical",
44
+ "status-critical-surface",
45
+ "status-neutral",
46
+ "status-neutral-surface",
47
+ "status-active",
48
+ "status-active-surface",
49
+ "syntax-key",
50
+ "syntax-string",
51
+ "syntax-number",
52
+ "syntax-literal",
53
+ "promo",
54
+ "promo-foreground",
55
+ "promo-accent",
56
+ "promo-accent-foreground",
57
+ ];
58
+ const COLOR_NAME_PATTERN = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/;
59
+ const frameworkColorNames = new Set(FRAMEWORK_COLOR_NAMES);
60
+ export function defineAppTheme(theme) {
61
+ return theme;
62
+ }
63
+ export function buildThemeCss(theme) {
64
+ return {
65
+ ...buildColorDeclarations(theme.colors ?? {}),
66
+ modeInvariant: buildModeInvariantDeclarations(theme),
67
+ bodyFontFamily: theme.fonts?.sans === undefined ? undefined : "var(--font-sans)",
68
+ };
69
+ }
70
+ function buildColorDeclarations(colors) {
71
+ const light = {};
72
+ const dark = {};
73
+ const extraColorUtilities = {};
74
+ for (const [name, value] of Object.entries(colors)) {
75
+ if (value === undefined)
76
+ continue;
77
+ if (!COLOR_NAME_PATTERN.test(name)) {
78
+ throw new Error(`[kumiko theme] color name "${name}" must be kebab-case (e.g. "brand-soft")`);
79
+ }
80
+ const variable = `--color-${name}`;
81
+ const lightValue = typeof value === "string" ? value : value.light;
82
+ light[variable] = lightValue;
83
+ dark[variable] = typeof value === "string" ? value : (value.dark ?? lightValue);
84
+ if (!frameworkColorNames.has(name))
85
+ extraColorUtilities[name] = `var(${variable})`;
86
+ }
87
+ return { light, dark, extraColorUtilities };
88
+ }
89
+ function buildModeInvariantDeclarations(theme) {
90
+ const modeInvariant = {};
91
+ if (theme.defaultColorScheme !== undefined) {
92
+ modeInvariant[DEFAULT_COLOR_SCHEME_VARIABLE] = theme.defaultColorScheme;
93
+ }
94
+ if (theme.radius !== undefined)
95
+ modeInvariant["--radius"] = theme.radius;
96
+ if (theme.fonts?.sans !== undefined)
97
+ modeInvariant["--font-sans"] = theme.fonts.sans;
98
+ if (theme.fonts?.heading !== undefined)
99
+ modeInvariant["--font-heading"] = theme.fonts.heading;
100
+ if (theme.fonts?.mono !== undefined)
101
+ modeInvariant["--font-mono"] = theme.fonts.mono;
102
+ if (theme.shadows?.card !== undefined)
103
+ modeInvariant["--card-shadow"] = theme.shadows.card;
104
+ if (theme.spacing?.card !== undefined)
105
+ modeInvariant["--card-padding"] = theme.spacing.card;
106
+ return modeInvariant;
107
+ }
108
+ // The framework's light palette sits in `@layer base :root:not(.dark)`, which beats any app
109
+ // `@theme` value. addBase emits into the same base layer after the framework's import, so the
110
+ // same selectors here win by source order without the app repeating its palette in `:root`.
111
+ export function createThemePlugin(theme) {
112
+ const css = buildThemeCss(theme);
113
+ return plugin(({ addBase }) => {
114
+ addBase({
115
+ ":root": { ...css.modeInvariant },
116
+ ":root:not(.dark)": { ...css.light },
117
+ ".dark": { ...css.dark },
118
+ ...(css.bodyFontFamily === undefined
119
+ ? {}
120
+ : { body: { "font-family": css.bodyFontFamily } }),
121
+ });
122
+ }, { theme: { extend: { colors: { ...css.extraColorUtilities } } } });
123
+ }
@@ -0,0 +1,24 @@
1
+ import { type Tokens, type TokensApi } from "../index.ts";
2
+ export declare const THEME_STORAGE_KEY = "kumiko:theme";
3
+ /** Reads the persisted theme choice (or the app default) and sets the `.dark`
4
+ * class. Called on the first useBrowserTokensApi mount; the inline script in
5
+ * the host HTML (see header comment) does the same synchronously before the
6
+ * first paint. */
7
+ export declare function applyStoredThemeMode(): void;
8
+ /** Nur für Tests: der once-per-page-load-Guard ist ein Module-Singleton —
9
+ * ohne Reset wäre der Mount-Restore-Pfad nach der ersten Render im
10
+ * Testfile strukturell unerreichbar. */
11
+ export declare function __resetStoredModeAppliedForTests(): void;
12
+ /** Hook der eine TokensApi für den Browser baut. Wird von
13
+ * createKumikoApp genutzt; App-Code der einen eigenen Token-State
14
+ * braucht (z.B. User-Präferenz aus localStorage) kann selber
15
+ * `<TokensProvider value={...}>` mounten. */
16
+ export declare function useBrowserTokensApi(): TokensApi;
17
+ /** Default-Tokens — identisch zu `cssVarTokens` (var-string-refs).
18
+ * Light- und Dark-Werte switchen via `.dark`-class auf <html>. */
19
+ export declare const defaultTokens: Tokens;
20
+ export declare const lightTokens: Tokens;
21
+ /** Historisch: schrieb Tokens auf :root als CSS-vars. Jetzt no-op —
22
+ * die CSS-vars leben in styles.css, nicht in JS. Bleibt als Export
23
+ * damit alter App-Code nicht bricht. */
24
+ export declare function applyTokensToCssVars(_tokens: Tokens): void;
@@ -0,0 +1,203 @@
1
+ import { useEffect, useState, useSyncExternalStore } from "react";
2
+ import { createStore } from "../headless/index.js";
3
+ import { cssVarTokens, } from "../index.js";
4
+ import { DEFAULT_COLOR_SCHEME_VARIABLE } from "./default-color-scheme.js";
5
+ // Web-spezifische TokensApi-Impl. Theme-Toggle via `.dark`-Class auf
6
+ // <html>. Die echten Farben leben in styles.css; hier ist nur die
7
+ // JS-Seite die den class-switch triggert und React-Consumer mit
8
+ // useSyncExternalStore darüber informiert.
9
+ //
10
+ // Source-of-truth ist der DOM (`<html class="dark">`); der Store ist
11
+ // reiner Notification-Bus (Tick-Counter), den setMode/toggleMode bei
12
+ // jedem Class-Wechsel hochzählen. So bleibt die DOM-Klasse die einzige
13
+ // Wahrheit — readCurrentMode liest sie frisch bei jedem getSnapshot.
14
+ //
15
+ // Persistence: the choice is stored in localStorage (THEME_STORAGE_KEY) and
16
+ // restored on the first hook mount; without it the toggle was lost on every
17
+ // reload (prod bug 2026-06-07).
18
+ // Preference: "auto" follows prefers-color-scheme live (matchMedia listener),
19
+ // "light"/"dark" are explicit choices and win. Without a stored choice,
20
+ // AppTheme.defaultColorScheme (CSS variable) applies, otherwise the HTML state.
21
+ //
22
+ // Against FOUC the host HTML also needs a synchronous inline script BEFORE
23
+ // the stylesheet link (nonce/hash under a strict CSP):
24
+ //
25
+ // <script>try{var s=localStorage.getItem("kumiko:theme");
26
+ // if(s==="dark"||(s==="auto"&&matchMedia("(prefers-color-scheme: dark)").matches))
27
+ // document.documentElement.classList.add("dark")}catch(e){}</script>
28
+ //
29
+ // The script runs before the stylesheet, so it cannot read the
30
+ // --kumiko-default-color-scheme variable. An app with AppTheme.defaultColorScheme
31
+ // copies that value in as a literal fallback ("dark" or "auto" here):
32
+ //
33
+ // <script>try{var s=localStorage.getItem("kumiko:theme")||"dark";
34
+ // if(s==="dark"||(s==="auto"&&matchMedia("(prefers-color-scheme: dark)").matches))
35
+ // document.documentElement.classList.add("dark")}catch(e){}</script>
36
+ const themeTick = createStore(0);
37
+ export const THEME_STORAGE_KEY = "kumiko:theme";
38
+ const DARK_SCHEME_QUERY = "(prefers-color-scheme: dark)";
39
+ function isThemePreference(value) {
40
+ return value === "auto" || value === "light" || value === "dark";
41
+ }
42
+ function readCurrentMode() {
43
+ if (typeof document === "undefined")
44
+ return "dark";
45
+ return document.documentElement.classList.contains("dark") ? "dark" : "light";
46
+ }
47
+ function systemPrefersDark() {
48
+ return typeof window.matchMedia === "function" && window.matchMedia(DARK_SCHEME_QUERY).matches;
49
+ }
50
+ function resolveMode(preference) {
51
+ if (preference === "auto")
52
+ return systemPrefersDark() ? "dark" : "light";
53
+ return preference;
54
+ }
55
+ function readDeclaredDefaultPreference() {
56
+ const declared = getComputedStyle(document.documentElement)
57
+ .getPropertyValue(DEFAULT_COLOR_SCHEME_VARIABLE)
58
+ .trim();
59
+ return isThemePreference(declared) ? declared : undefined;
60
+ }
61
+ function readDefaultPreference() {
62
+ return readDeclaredDefaultPreference() ?? readCurrentMode();
63
+ }
64
+ function readStoredPreference() {
65
+ try {
66
+ const stored = window.localStorage.getItem(THEME_STORAGE_KEY);
67
+ return isThemePreference(stored) ? stored : undefined;
68
+ }
69
+ catch {
70
+ // skip: localStorage can throw (private mode); without a stored choice
71
+ // the default stays.
72
+ return undefined;
73
+ }
74
+ }
75
+ // Module singleton like storedModeApplied: null until the first read, so the
76
+ // import stays safe without a DOM (SSR/tests).
77
+ let currentPreference = null;
78
+ function readCurrentPreference() {
79
+ if (currentPreference === null) {
80
+ if (typeof document === "undefined")
81
+ return "dark";
82
+ currentPreference = readStoredPreference() ?? readDefaultPreference();
83
+ }
84
+ return currentPreference;
85
+ }
86
+ // @wrapper-known semantic-alias
87
+ function notifyThemeChange() {
88
+ themeTick.setState((t) => t + 1);
89
+ }
90
+ // @wrapper-known semantic-alias
91
+ function persistPreference(preference) {
92
+ try {
93
+ window.localStorage.setItem(THEME_STORAGE_KEY, preference);
94
+ }
95
+ catch {
96
+ // skip: localStorage kann werfen (Private-Mode/Quota) — Theme bleibt
97
+ // dann sessionbasiert, der Class-Toggle hat trotzdem funktioniert.
98
+ }
99
+ }
100
+ function applyPreference(preference) {
101
+ currentPreference = preference;
102
+ document.documentElement.classList.toggle("dark", resolveMode(preference) === "dark");
103
+ notifyThemeChange();
104
+ }
105
+ /** Reads the persisted theme choice (or the app default) and sets the `.dark`
106
+ * class. Called on the first useBrowserTokensApi mount; the inline script in
107
+ * the host HTML (see header comment) does the same synchronously before the
108
+ * first paint. */
109
+ export function applyStoredThemeMode() {
110
+ // skip: no document (SSR/non-DOM context), nothing to apply
111
+ if (typeof document === "undefined")
112
+ return;
113
+ const stored = readStoredPreference();
114
+ if (stored !== undefined) {
115
+ applyPreference(stored);
116
+ // skip: a stored choice wins over the app default
117
+ return;
118
+ }
119
+ // Without a stored choice only an app-declared default changes the HTML state.
120
+ const declared = readDeclaredDefaultPreference();
121
+ if (declared !== undefined)
122
+ applyPreference(declared);
123
+ }
124
+ let storedModeApplied = false;
125
+ /** Nur für Tests: der once-per-page-load-Guard ist ein Module-Singleton —
126
+ * ohne Reset wäre der Mount-Restore-Pfad nach der ersten Render im
127
+ * Testfile strukturell unerreichbar. */
128
+ export function __resetStoredModeAppliedForTests() {
129
+ storedModeApplied = false;
130
+ currentPreference = null;
131
+ }
132
+ /** Hook der eine TokensApi für den Browser baut. Wird von
133
+ * createKumikoApp genutzt; App-Code der einen eigenen Token-State
134
+ * braucht (z.B. User-Präferenz aus localStorage) kann selber
135
+ * `<TokensProvider value={...}>` mounten. */
136
+ export function useBrowserTokensApi() {
137
+ // Einmal pro Page-Load: gespeicherte Wahl anwenden. Lazy statt
138
+ // Modul-Side-Effect, damit Import ohne DOM (SSR/Tests) safe bleibt.
139
+ // Als useState-Lazy-Initializer statt nackt im Render-Body: der
140
+ // DOM-Side-Effect lief sonst potenziell in einem verworfenen
141
+ // Concurrent-Render (React darf Render-Bodies wiederholen/abbrechen).
142
+ useState(() => {
143
+ if (!storedModeApplied && typeof document !== "undefined") {
144
+ storedModeApplied = true;
145
+ applyStoredThemeMode();
146
+ }
147
+ return null;
148
+ });
149
+ const mode = useSyncExternalStore(themeTick.subscribe, readCurrentMode, () => "dark");
150
+ const preference = useSyncExternalStore(themeTick.subscribe, readCurrentPreference, () => "dark");
151
+ // kumiko-lint-ignore no-raw-hooks listener lifecycle, no data fetching
152
+ useEffect(() => {
153
+ // skip: without matchMedia, auto keeps the mode resolved at apply time
154
+ if (typeof window.matchMedia !== "function")
155
+ return;
156
+ const query = window.matchMedia(DARK_SCHEME_QUERY);
157
+ const followSystem = () => {
158
+ if (readCurrentPreference() === "auto")
159
+ applyPreference("auto");
160
+ };
161
+ // The OS scheme may have changed between the first apply and this mount.
162
+ followSystem();
163
+ query.addEventListener("change", followSystem);
164
+ return () => query.removeEventListener("change", followSystem);
165
+ }, []);
166
+ return {
167
+ tokens: cssVarTokens,
168
+ mode,
169
+ preference,
170
+ setPreference: (next) => {
171
+ // skip: no document (SSR/non-DOM context), nothing to apply
172
+ if (typeof document === "undefined")
173
+ return;
174
+ persistPreference(next);
175
+ applyPreference(next);
176
+ },
177
+ setMode: (next) => {
178
+ // skip: no document (SSR/non-DOM context), nothing to toggle
179
+ if (typeof document === "undefined")
180
+ return;
181
+ persistPreference(next);
182
+ applyPreference(next);
183
+ },
184
+ toggleMode: () => {
185
+ // skip: no document (SSR/non-DOM context), nothing to toggle
186
+ if (typeof document === "undefined")
187
+ return;
188
+ const next = readCurrentMode() === "dark" ? "light" : "dark";
189
+ persistPreference(next);
190
+ applyPreference(next);
191
+ },
192
+ };
193
+ }
194
+ /** Default-Tokens — identisch zu `cssVarTokens` (var-string-refs).
195
+ * Light- und Dark-Werte switchen via `.dark`-class auf <html>. */
196
+ export const defaultTokens = cssVarTokens;
197
+ export const lightTokens = cssVarTokens;
198
+ /** Historisch: schrieb Tokens auf :root als CSS-vars. Jetzt no-op —
199
+ * die CSS-vars leben in styles.css, nicht in JS. Bleibt als Export
200
+ * damit alter App-Code nicht bricht. */
201
+ export function applyTokensToCssVars(_tokens) {
202
+ // Absichtlich leer — siehe Kommentar oben.
203
+ }
@@ -0,0 +1,11 @@
1
+ import * as React from "react";
2
+ import { Avatar as AvatarPrimitive } from "radix-ui";
3
+ declare function Avatar({ className, size, ...props }: React.ComponentProps<typeof AvatarPrimitive.Root> & {
4
+ size?: "default" | "sm" | "lg";
5
+ }): React.JSX.Element;
6
+ declare function AvatarImage({ className, ...props }: React.ComponentProps<typeof AvatarPrimitive.Image>): React.JSX.Element;
7
+ declare function AvatarFallback({ className, ...props }: React.ComponentProps<typeof AvatarPrimitive.Fallback>): React.JSX.Element;
8
+ declare function AvatarBadge({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
9
+ declare function AvatarGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
10
+ declare function AvatarGroupCount({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
11
+ export { Avatar, AvatarImage, AvatarFallback, AvatarBadge, AvatarGroup, AvatarGroupCount, };
@@ -0,0 +1,25 @@
1
+ // @ts-nocheck — vendored shadcn, regenerate via scripts/sync-shadcn.ts
2
+ "use client";
3
+ import { jsx as _jsx } from "react/jsx-runtime";
4
+ import * as React from "react";
5
+ import { Avatar as AvatarPrimitive } from "radix-ui";
6
+ import { cn } from "../lib/cn.js";
7
+ function Avatar({ className, size = "default", ...props }) {
8
+ return (_jsx(AvatarPrimitive.Root, { "data-slot": "avatar", "data-size": size, className: cn("group/avatar relative flex size-8 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6", className), ...props }));
9
+ }
10
+ function AvatarImage({ className, ...props }) {
11
+ return (_jsx(AvatarPrimitive.Image, { "data-slot": "avatar-image", className: cn("aspect-square size-full", className), ...props }));
12
+ }
13
+ function AvatarFallback({ className, ...props }) {
14
+ return (_jsx(AvatarPrimitive.Fallback, { "data-slot": "avatar-fallback", className: cn("flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs", className), ...props }));
15
+ }
16
+ function AvatarBadge({ className, ...props }) {
17
+ return (_jsx("span", { "data-slot": "avatar-badge", className: cn("absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground ring-2 ring-background select-none", "group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden", "group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2", "group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2", className), ...props }));
18
+ }
19
+ function AvatarGroup({ className, ...props }) {
20
+ return (_jsx("div", { "data-slot": "avatar-group", className: cn("group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background", className), ...props }));
21
+ }
22
+ function AvatarGroupCount({ className, ...props }) {
23
+ return (_jsx("div", { "data-slot": "avatar-group-count", className: cn("relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3", className), ...props }));
24
+ }
25
+ export { Avatar, AvatarImage, AvatarFallback, AvatarBadge, AvatarGroup, AvatarGroupCount, };
@@ -0,0 +1,9 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ declare const badgeVariants: (props?: ({
4
+ variant?: "default" | "destructive" | "ghost" | "link" | "outline" | "secondary" | null | undefined;
5
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
+ declare function Badge({ className, variant, asChild, ...props }: React.ComponentProps<"span"> & VariantProps<typeof badgeVariants> & {
7
+ asChild?: boolean;
8
+ }): React.JSX.Element;
9
+ export { Badge, badgeVariants };
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // @ts-nocheck — vendored shadcn, regenerate via scripts/sync-shadcn.ts
3
+ import * as React from "react";
4
+ import { cva } from "class-variance-authority";
5
+ import { Slot } from "radix-ui";
6
+ import { cn } from "../lib/cn.js";
7
+ const badgeVariants = cva("inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3", {
8
+ variants: {
9
+ variant: {
10
+ default: "bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
11
+ secondary: "bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
12
+ destructive: "bg-destructive text-white focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90",
13
+ outline: "border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
14
+ ghost: "[a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
15
+ link: "text-primary underline-offset-4 [a&]:hover:underline",
16
+ },
17
+ },
18
+ defaultVariants: {
19
+ variant: "default",
20
+ },
21
+ });
22
+ function Badge({ className, variant = "default", asChild = false, ...props }) {
23
+ const Comp = asChild ? Slot.Root : "span";
24
+ return (_jsx(Comp, { "data-slot": "badge", "data-variant": variant, className: cn(badgeVariants({ variant }), className), ...props }));
25
+ }
26
+ export { Badge, badgeVariants };
@@ -0,0 +1,11 @@
1
+ import * as React from "react";
2
+ declare function Breadcrumb({ ...props }: React.ComponentProps<"nav">): React.JSX.Element;
3
+ declare function BreadcrumbList({ className, ...props }: React.ComponentProps<"ol">): React.JSX.Element;
4
+ declare function BreadcrumbItem({ className, ...props }: React.ComponentProps<"li">): React.JSX.Element;
5
+ declare function BreadcrumbLink({ asChild, className, ...props }: React.ComponentProps<"a"> & {
6
+ asChild?: boolean;
7
+ }): React.JSX.Element;
8
+ declare function BreadcrumbPage({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
9
+ declare function BreadcrumbSeparator({ children, className, ...props }: React.ComponentProps<"li">): React.JSX.Element;
10
+ declare function BreadcrumbEllipsis({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
11
+ export { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator, BreadcrumbEllipsis, };
@@ -0,0 +1,29 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // @ts-nocheck — vendored shadcn, regenerate via scripts/sync-shadcn.ts
3
+ import * as React from "react";
4
+ import { ChevronRight, MoreHorizontal } from "lucide-react";
5
+ import { Slot } from "radix-ui";
6
+ import { cn } from "../lib/cn.js";
7
+ function Breadcrumb({ ...props }) {
8
+ return _jsx("nav", { "aria-label": "breadcrumb", "data-slot": "breadcrumb", ...props });
9
+ }
10
+ function BreadcrumbList({ className, ...props }) {
11
+ return (_jsx("ol", { "data-slot": "breadcrumb-list", className: cn("flex flex-wrap items-center gap-1.5 text-sm break-words text-muted-foreground sm:gap-2.5", className), ...props }));
12
+ }
13
+ function BreadcrumbItem({ className, ...props }) {
14
+ return (_jsx("li", { "data-slot": "breadcrumb-item", className: cn("inline-flex items-center gap-1.5", className), ...props }));
15
+ }
16
+ function BreadcrumbLink({ asChild, className, ...props }) {
17
+ const Comp = asChild ? Slot.Root : "a";
18
+ return (_jsx(Comp, { "data-slot": "breadcrumb-link", className: cn("transition-colors hover:text-foreground", className), ...props }));
19
+ }
20
+ function BreadcrumbPage({ className, ...props }) {
21
+ return (_jsx("span", { "data-slot": "breadcrumb-page", role: "link", "aria-disabled": "true", "aria-current": "page", className: cn("font-normal text-foreground", className), ...props }));
22
+ }
23
+ function BreadcrumbSeparator({ children, className, ...props }) {
24
+ return (_jsx("li", { "data-slot": "breadcrumb-separator", role: "presentation", "aria-hidden": "true", className: cn("[&>svg]:size-3.5", className), ...props, children: children ?? _jsx(ChevronRight, {}) }));
25
+ }
26
+ function BreadcrumbEllipsis({ className, ...props }) {
27
+ return (_jsxs("span", { "data-slot": "breadcrumb-ellipsis", role: "presentation", "aria-hidden": "true", className: cn("flex size-9 items-center justify-center", className), ...props, children: [_jsx(MoreHorizontal, { className: "size-4" }), _jsx("span", { className: "sr-only", children: "More" })] }));
28
+ }
29
+ export { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator, BreadcrumbEllipsis, };
@@ -0,0 +1,10 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ declare const buttonVariants: (props?: ({
4
+ variant?: "default" | "destructive" | "ghost" | "link" | "outline" | "secondary" | null | undefined;
5
+ size?: "default" | "icon" | "icon-lg" | "icon-sm" | "icon-xs" | "lg" | "sm" | "xs" | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ declare function Button({ className, variant, size, asChild, ...props }: React.ComponentProps<"button"> & VariantProps<typeof buttonVariants> & {
8
+ asChild?: boolean;
9
+ }): React.JSX.Element;
10
+ export { Button, buttonVariants };
@@ -0,0 +1,37 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // @ts-nocheck — vendored shadcn, regenerate via scripts/sync-shadcn.ts
3
+ import * as React from "react";
4
+ import { cva } from "class-variance-authority";
5
+ import { Slot } from "radix-ui";
6
+ import { cn } from "../lib/cn.js";
7
+ const buttonVariants = cva("inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
8
+ variants: {
9
+ variant: {
10
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
11
+ destructive: "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",
12
+ outline: "border border-border-strong bg-card shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
13
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
14
+ ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
15
+ link: "text-primary underline-offset-4 hover:underline",
16
+ },
17
+ size: {
18
+ default: "h-9 px-4 py-2 has-[>svg]:px-3 max-md:min-h-11",
19
+ xs: "h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
20
+ sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5 max-md:min-h-11",
21
+ lg: "h-10 rounded-md px-6 has-[>svg]:px-4 max-md:min-h-11",
22
+ icon: "size-9 max-md:size-11",
23
+ "icon-xs": "size-6 rounded-md [&_svg:not([class*='size-'])]:size-3",
24
+ "icon-sm": "size-8 max-md:size-11",
25
+ "icon-lg": "size-10 max-md:size-11",
26
+ },
27
+ },
28
+ defaultVariants: {
29
+ variant: "default",
30
+ size: "default",
31
+ },
32
+ });
33
+ function Button({ className, variant = "default", size = "default", asChild = false, ...props }) {
34
+ const Comp = asChild ? Slot.Root : "button";
35
+ return (_jsx(Comp, { "data-slot": "button", "data-variant": variant, "data-size": size, className: cn(buttonVariants({ variant, size, className })), ...props }));
36
+ }
37
+ export { Button, buttonVariants };
@@ -0,0 +1,4 @@
1
+ import * as React from "react";
2
+ import { Checkbox as CheckboxPrimitive } from "radix-ui";
3
+ declare function Checkbox({ className, ...props }: React.ComponentProps<typeof CheckboxPrimitive.Root>): React.JSX.Element;
4
+ export { Checkbox };
@@ -0,0 +1,11 @@
1
+ // @ts-nocheck — vendored shadcn, regenerate via scripts/sync-shadcn.ts
2
+ "use client";
3
+ import { jsx as _jsx } from "react/jsx-runtime";
4
+ import * as React from "react";
5
+ import { CheckIcon } from "lucide-react";
6
+ import { Checkbox as CheckboxPrimitive } from "radix-ui";
7
+ import { cn } from "../lib/cn.js";
8
+ function Checkbox({ className, ...props }) {
9
+ return (_jsx(CheckboxPrimitive.Root, { "data-slot": "checkbox", className: cn("peer size-4 shrink-0 rounded-[4px] border border-input shadow-xs transition-shadow outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:bg-input/30 dark:aria-invalid:ring-destructive/40 dark:data-[state=checked]:bg-primary", className), ...props, children: _jsx(CheckboxPrimitive.Indicator, { "data-slot": "checkbox-indicator", className: "grid place-content-center text-current transition-none", children: _jsx(CheckIcon, { className: "size-3.5" }) }) }));
10
+ }
11
+ export { Checkbox };
@@ -0,0 +1,3 @@
1
+ import * as React from "react";
2
+ declare function Input({ className, type, ...props }: React.ComponentProps<"input">): React.JSX.Element;
3
+ export { Input };
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // @ts-nocheck — vendored shadcn, regenerate via scripts/sync-shadcn.ts
3
+ import * as React from "react";
4
+ import { cn } from "../lib/cn.js";
5
+ function Input({ className, type, ...props }) {
6
+ return (_jsx("input", { type: type, "data-slot": "input", className: cn("h-9 w-full min-w-0 max-md:min-h-11 rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30", "focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50", "aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40", className), ...props }));
7
+ }
8
+ export { Input };
@@ -0,0 +1,4 @@
1
+ import * as React from "react";
2
+ import { Label as LabelPrimitive } from "radix-ui";
3
+ declare function Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>): React.JSX.Element;
4
+ export { Label };
@@ -0,0 +1,10 @@
1
+ // @ts-nocheck — vendored shadcn, regenerate via scripts/sync-shadcn.ts
2
+ "use client";
3
+ import { jsx as _jsx } from "react/jsx-runtime";
4
+ import * as React from "react";
5
+ import { Label as LabelPrimitive } from "radix-ui";
6
+ import { cn } from "../lib/cn.js";
7
+ function Label({ className, ...props }) {
8
+ return (_jsx(LabelPrimitive.Root, { "data-slot": "label", className: cn("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50", className), ...props }));
9
+ }
10
+ export { Label };
@@ -0,0 +1,7 @@
1
+ import * as ResizablePrimitive from "react-resizable-panels";
2
+ declare function ResizablePanelGroup({ className, ...props }: ResizablePrimitive.GroupProps): import("react").JSX.Element;
3
+ declare function ResizablePanel({ ...props }: ResizablePrimitive.PanelProps): import("react").JSX.Element;
4
+ declare function ResizableHandle({ withHandle, className, ...props }: ResizablePrimitive.SeparatorProps & {
5
+ withHandle?: boolean;
6
+ }): import("react").JSX.Element;
7
+ export { ResizableHandle, ResizablePanel, ResizablePanelGroup };