rune-lab 0.4.0 → 0.4.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 (433) hide show
  1. package/.gitignore +12 -0
  2. package/README.md +3 -3
  3. package/deno.json +50 -0
  4. package/justfile +5 -0
  5. package/package.json +2 -79
  6. package/scripts/build_pkg.ts +51 -0
  7. package/scripts/ci.just +26 -0
  8. package/scripts/deploy.just +21 -0
  9. package/scripts/dev.just +4 -0
  10. package/scripts/inject.just +72 -0
  11. package/src/RuneProvider.svelte +105 -0
  12. package/src/i18n/message-resolver.test.ts +103 -0
  13. package/src/i18n/message-resolver.ts +89 -0
  14. package/src/i18n/project.inlang/settings.json +26 -0
  15. package/src/i18n/translations/ar.json +89 -0
  16. package/src/i18n/translations/de.json +89 -0
  17. package/src/i18n/translations/en.json +89 -0
  18. package/src/i18n/translations/es.json +89 -0
  19. package/src/i18n/translations/fr.json +89 -0
  20. package/src/i18n/translations/hi.json +89 -0
  21. package/src/i18n/translations/it.json +89 -0
  22. package/src/i18n/translations/ja.json +89 -0
  23. package/src/i18n/translations/ko.json +89 -0
  24. package/src/i18n/translations/pt.json +89 -0
  25. package/src/i18n/translations/ru.json +89 -0
  26. package/src/i18n/translations/vi.json +89 -0
  27. package/src/i18n/translations/zh.json +89 -0
  28. package/src/kernel/deno.json +5 -0
  29. package/src/kernel/src/actions/portal.ts +41 -0
  30. package/src/kernel/src/actions/shortcut-listener.ts +50 -0
  31. package/src/kernel/src/context/app.svelte.ts +98 -0
  32. package/src/kernel/src/context/context.ts +31 -0
  33. package/src/kernel/src/context/stores.svelte.ts +96 -0
  34. package/src/kernel/src/context/types.ts +110 -0
  35. package/src/kernel/src/context/useRuneLab.ts +38 -0
  36. package/src/kernel/src/mod.ts +13 -0
  37. package/src/kernel/src/persistence/createConfigStore.svelte.ts +120 -0
  38. package/src/kernel/src/persistence/drivers.test.ts +95 -0
  39. package/src/kernel/src/persistence/drivers.ts +77 -0
  40. package/src/kernel/src/persistence/provider.test.ts +58 -0
  41. package/{dist/state/persistence/provider.js → src/kernel/src/persistence/provider.ts} +29 -14
  42. package/src/kernel/src/persistence/types.ts +19 -0
  43. package/src/kernel/src/persistence/usePersistence.ts +9 -0
  44. package/src/kernel/src/registry/mod.ts +221 -0
  45. package/src/kernel/src/registry/registry.test.ts +162 -0
  46. package/src/kernel/src/tokens/props.ts +94 -0
  47. package/src/mod.ts +10 -0
  48. package/src/runes/layout/deno.json +5 -0
  49. package/src/runes/layout/src/APP_CONFIGURATIONS.ts +56 -0
  50. package/{dist/ui/features/config → src/runes/layout/src}/AppSettingSelector.svelte +1 -1
  51. package/{dist/ui/layout → src/runes/layout/src}/ConnectedNavigationPanel.svelte +1 -1
  52. package/{dist/ui/layout → src/runes/layout/src}/ConnectedWorkspaceStrip.svelte +1 -1
  53. package/src/runes/layout/src/Icon.svelte +7 -0
  54. package/{dist/ui/features/config → src/runes/layout/src}/LanguageSelector.svelte +7 -5
  55. package/{dist/ui/layout → src/runes/layout/src}/NavigationPanel.svelte +1 -4
  56. package/{dist/ui/features/config → src/runes/layout/src}/ResourceSelector.svelte +3 -5
  57. package/{dist/ui/features/config → src/runes/layout/src}/ThemeSelector.svelte +2 -2
  58. package/{dist/ui/layout → src/runes/layout/src}/WorkspaceLayout.svelte +6 -4
  59. package/{dist/ui/layout → src/runes/layout/src}/WorkspaceStrip.svelte +1 -1
  60. package/src/runes/layout/src/connection-factory.ts +95 -0
  61. package/src/runes/layout/src/language.svelte.ts +44 -0
  62. package/src/runes/layout/src/mod.ts +71 -0
  63. package/src/runes/layout/src/store.svelte.ts +142 -0
  64. package/src/runes/layout/src/theme.svelte.ts +73 -0
  65. package/src/runes/layout/src/types.ts +11 -0
  66. package/src/runes/palettes/deno.json +8 -0
  67. package/{dist/ui/features/command-palette → src/runes/palettes/src/commands}/CommandPalette.svelte +4 -4
  68. package/src/runes/palettes/src/commands/mod.ts +2 -0
  69. package/src/runes/palettes/src/commands/store.svelte.ts +80 -0
  70. package/src/runes/palettes/src/mod.ts +51 -0
  71. package/{dist/ui/components → src/runes/palettes/src/notifications}/Toaster.svelte +1 -2
  72. package/src/runes/palettes/src/notifications/bridge.ts +56 -0
  73. package/src/runes/palettes/src/notifications/mod.ts +4 -0
  74. package/src/runes/palettes/src/notifications/store.svelte.ts +58 -0
  75. package/{dist/ui/features → src/runes/palettes/src}/shortcuts/ShortcutPalette.svelte +4 -4
  76. package/src/runes/palettes/src/shortcuts/mod.ts +4 -0
  77. package/src/runes/palettes/src/shortcuts/store.svelte.ts +85 -0
  78. package/src/runes/palettes/src/shortcuts/types.ts +4 -0
  79. package/src/runes/palettes/src/shortcuts/useShortcuts.ts +85 -0
  80. package/src/runes/plugins/money/deno.json +8 -0
  81. package/{dist/ui/features/config → src/runes/plugins/money/src}/CurrencySelector.svelte +2 -2
  82. package/{dist/ui/components/money → src/runes/plugins/money/src}/MoneyDisplay.svelte +2 -2
  83. package/{dist/ui/components/money → src/runes/plugins/money/src}/MoneyInput.svelte +4 -8
  84. package/src/runes/plugins/money/src/currency.svelte.ts +95 -0
  85. package/src/runes/plugins/money/src/currency.test.ts +40 -0
  86. package/src/runes/plugins/money/src/exchange-rate.svelte.ts +176 -0
  87. package/src/runes/plugins/money/src/exchange-rate.test.ts +95 -0
  88. package/src/runes/plugins/money/src/mod.ts +79 -0
  89. package/src/runes/plugins/money/src/money-primitive.test.ts +217 -0
  90. package/src/runes/plugins/money/src/money-primitive.ts +220 -0
  91. package/src/runes/plugins/money/src/money.test.ts +183 -0
  92. package/src/runes/plugins/money/src/money.ts +382 -0
  93. package/src/runes/plugins/money/src/strategies.test.ts +143 -0
  94. package/{dist/core/exchange-rate/strategies.js → src/runes/plugins/money/src/strategies.ts} +45 -22
  95. package/src/runes/plugins/money/src/types.ts +27 -0
  96. package/src/runes/plugins/money/src/useMoney.ts +261 -0
  97. package/src/runes/plugins/money/src/useMoneyFilter.ts +132 -0
  98. package/tsconfig.json +41 -0
  99. package/vite.config.ts +44 -0
  100. package/dist/core/design-tokens/props.d.ts +0 -52
  101. package/dist/core/design-tokens/props.d.ts.map +0 -1
  102. package/dist/core/design-tokens/props.js +0 -34
  103. package/dist/core/exchange-rate/strategies.d.ts +0 -52
  104. package/dist/core/exchange-rate/strategies.d.ts.map +0 -1
  105. package/dist/core/index.d.ts +0 -9
  106. package/dist/core/index.d.ts.map +0 -1
  107. package/dist/core/index.js +0 -8
  108. package/dist/core/internal/message-resolver.d.ts +0 -42
  109. package/dist/core/internal/message-resolver.d.ts.map +0 -1
  110. package/dist/core/internal/message-resolver.js +0 -47
  111. package/dist/core/layout/types.d.ts +0 -60
  112. package/dist/core/layout/types.d.ts.map +0 -1
  113. package/dist/core/layout/types.js +0 -4
  114. package/dist/core/money/index.d.ts +0 -2
  115. package/dist/core/money/index.d.ts.map +0 -1
  116. package/dist/core/money/index.js +0 -2
  117. package/dist/core/money/money-primitive.d.ts +0 -101
  118. package/dist/core/money/money-primitive.d.ts.map +0 -1
  119. package/dist/core/money/money-primitive.js +0 -161
  120. package/dist/core/money/money.d.ts +0 -129
  121. package/dist/core/money/money.d.ts.map +0 -1
  122. package/dist/core/money/money.js +0 -250
  123. package/dist/core/persistence/types.d.ts +0 -18
  124. package/dist/core/persistence/types.d.ts.map +0 -1
  125. package/dist/core/persistence/types.js +0 -2
  126. package/dist/core/shortcuts/types.d.ts +0 -60
  127. package/dist/core/shortcuts/types.d.ts.map +0 -1
  128. package/dist/core/shortcuts/types.js +0 -4
  129. package/dist/index.d.ts +0 -6
  130. package/dist/index.js +0 -7
  131. package/dist/state/api.svelte.d.ts +0 -26
  132. package/dist/state/api.svelte.js +0 -65
  133. package/dist/state/app.svelte.d.ts +0 -48
  134. package/dist/state/app.svelte.js +0 -82
  135. package/dist/state/auth/index.d.ts +0 -2
  136. package/dist/state/auth/index.js +0 -2
  137. package/dist/state/auth/session.svelte.d.ts +0 -40
  138. package/dist/state/auth/session.svelte.js +0 -59
  139. package/dist/state/auth/types.d.ts +0 -30
  140. package/dist/state/auth/types.js +0 -3
  141. package/dist/state/cart.svelte.d.ts +0 -64
  142. package/dist/state/cart.svelte.js +0 -122
  143. package/dist/state/commands.svelte.d.ts +0 -46
  144. package/dist/state/commands.svelte.js +0 -62
  145. package/dist/state/composables/useMoney.d.ts +0 -31
  146. package/dist/state/composables/useMoney.js +0 -126
  147. package/dist/state/composables/useMoneyFilter.d.ts +0 -20
  148. package/dist/state/composables/useMoneyFilter.js +0 -81
  149. package/dist/state/composables/usePersistence.d.ts +0 -2
  150. package/dist/state/composables/usePersistence.js +0 -5
  151. package/dist/state/composables/useRuneLab.d.ts +0 -19
  152. package/dist/state/composables/useRuneLab.js +0 -30
  153. package/dist/state/composables/useShortcuts.d.ts +0 -33
  154. package/dist/state/composables/useShortcuts.js +0 -75
  155. package/dist/state/context.d.ts +0 -15
  156. package/dist/state/context.js +0 -16
  157. package/dist/state/createConfigStore.svelte.d.ts +0 -28
  158. package/dist/state/createConfigStore.svelte.js +0 -72
  159. package/dist/state/currency.svelte.d.ts +0 -32
  160. package/dist/state/currency.svelte.js +0 -96
  161. package/dist/state/currency.test.d.ts +0 -1
  162. package/dist/state/currency.test.js +0 -35
  163. package/dist/state/exchange-rate.svelte.d.ts +0 -43
  164. package/dist/state/exchange-rate.svelte.js +0 -145
  165. package/dist/state/exchange-rate.test.d.ts +0 -1
  166. package/dist/state/exchange-rate.test.js +0 -75
  167. package/dist/state/index.d.ts +0 -26
  168. package/dist/state/index.js +0 -32
  169. package/dist/state/language.svelte.d.ts +0 -57
  170. package/dist/state/language.svelte.js +0 -43
  171. package/dist/state/layout.svelte.d.ts +0 -49
  172. package/dist/state/layout.svelte.js +0 -108
  173. package/dist/state/persistence/drivers.d.ts +0 -12
  174. package/dist/state/persistence/drivers.js +0 -75
  175. package/dist/state/persistence/drivers.test.d.ts +0 -1
  176. package/dist/state/persistence/drivers.test.js +0 -79
  177. package/dist/state/persistence/provider.d.ts +0 -23
  178. package/dist/state/persistence/provider.test.d.ts +0 -1
  179. package/dist/state/persistence/provider.test.js +0 -51
  180. package/dist/state/registry/index.d.ts +0 -44
  181. package/dist/state/registry/index.js +0 -58
  182. package/dist/state/registry/registry.test.d.ts +0 -1
  183. package/dist/state/registry/registry.test.js +0 -112
  184. package/dist/state/registry/types.d.ts +0 -20
  185. package/dist/state/registry/types.js +0 -3
  186. package/dist/state/shortcuts.svelte.d.ts +0 -121
  187. package/dist/state/shortcuts.svelte.js +0 -222
  188. package/dist/state/theme.svelte.d.ts +0 -15
  189. package/dist/state/theme.svelte.js +0 -92
  190. package/dist/state/toast-bridge.d.ts +0 -29
  191. package/dist/state/toast-bridge.js +0 -43
  192. package/dist/state/toast.svelte.d.ts +0 -27
  193. package/dist/state/toast.svelte.js +0 -43
  194. package/dist/ui/actions/portal.d.ts +0 -7
  195. package/dist/ui/actions/portal.js +0 -32
  196. package/dist/ui/components/ApiMonitor.svelte +0 -162
  197. package/dist/ui/components/ApiMonitor.svelte.d.ts +0 -3
  198. package/dist/ui/components/Icon.svelte +0 -108
  199. package/dist/ui/components/Icon.svelte.d.ts +0 -14
  200. package/dist/ui/components/Kyntharil.svelte +0 -48
  201. package/dist/ui/components/Kyntharil.svelte.d.ts +0 -6
  202. package/dist/ui/components/RuneProvider.svelte +0 -218
  203. package/dist/ui/components/RuneProvider.svelte.d.ts +0 -49
  204. package/dist/ui/components/Toaster.svelte.d.ts +0 -18
  205. package/dist/ui/components/money/MoneyDisplay.svelte.d.ts +0 -33
  206. package/dist/ui/components/money/MoneyDisplay.svelte.test.d.ts +0 -1
  207. package/dist/ui/components/money/MoneyDisplay.svelte.test.js +0 -117
  208. package/dist/ui/components/money/MoneyInput.svelte.d.ts +0 -34
  209. package/dist/ui/components/money/index.d.ts +0 -2
  210. package/dist/ui/components/money/index.js +0 -3
  211. package/dist/ui/components/user/UserAvatar.svelte +0 -66
  212. package/dist/ui/components/user/UserAvatar.svelte.d.ts +0 -13
  213. package/dist/ui/components/user/UserProfile.svelte +0 -79
  214. package/dist/ui/components/user/UserProfile.svelte.d.ts +0 -17
  215. package/dist/ui/components/user/index.d.ts +0 -2
  216. package/dist/ui/components/user/index.js +0 -3
  217. package/dist/ui/features/command-palette/CommandPalette.svelte.d.ts +0 -6
  218. package/dist/ui/features/config/APP_CONFIGURATIONS.d.ts +0 -29
  219. package/dist/ui/features/config/APP_CONFIGURATIONS.js +0 -38
  220. package/dist/ui/features/config/AppSettingSelector.svelte.d.ts +0 -13
  221. package/dist/ui/features/config/CurrencySelector.svelte.d.ts +0 -8
  222. package/dist/ui/features/config/LanguageSelector.svelte.d.ts +0 -8
  223. package/dist/ui/features/config/ResourceSelector.svelte.d.ts +0 -25
  224. package/dist/ui/features/config/ThemeSelector.svelte.d.ts +0 -8
  225. package/dist/ui/features/notifications/NotificationBell.svelte.d.ts +0 -11
  226. package/dist/ui/features/notifications/index.d.ts +0 -1
  227. package/dist/ui/features/notifications/index.js +0 -2
  228. package/dist/ui/features/shortcuts/ShortcutBinder.svelte +0 -17
  229. package/dist/ui/features/shortcuts/ShortcutBinder.svelte.d.ts +0 -7
  230. package/dist/ui/features/shortcuts/ShortcutPalette.svelte.d.ts +0 -6
  231. package/dist/ui/index.d.ts +0 -30
  232. package/dist/ui/index.js +0 -46
  233. package/dist/ui/layout/ConnectedNavigationPanel.svelte.d.ts +0 -10
  234. package/dist/ui/layout/ConnectedWorkspaceStrip.svelte.d.ts +0 -9
  235. package/dist/ui/layout/ContentArea.svelte.d.ts +0 -8
  236. package/dist/ui/layout/DetailPanel.svelte.d.ts +0 -7
  237. package/dist/ui/layout/NavigationPanel.svelte.d.ts +0 -14
  238. package/dist/ui/layout/WorkspaceLayout.svelte.d.ts +0 -32
  239. package/dist/ui/layout/WorkspaceStrip.svelte.d.ts +0 -11
  240. package/dist/ui/layout/connection-factory.d.ts +0 -50
  241. package/dist/ui/layout/connection-factory.js +0 -58
  242. package/dist/ui/layout/index.d.ts +0 -7
  243. package/dist/ui/layout/index.js +0 -7
  244. package/dist/ui/paraglide/README.md +0 -147
  245. package/dist/ui/paraglide/messages/_index.d.ts +0 -87
  246. package/dist/ui/paraglide/messages/_index.js +0 -88
  247. package/dist/ui/paraglide/messages/abyss.d.ts +0 -16
  248. package/dist/ui/paraglide/messages/abyss.js +0 -84
  249. package/dist/ui/paraglide/messages/acid.d.ts +0 -16
  250. package/dist/ui/paraglide/messages/acid.js +0 -84
  251. package/dist/ui/paraglide/messages/active_toasts.d.ts +0 -16
  252. package/dist/ui/paraglide/messages/active_toasts.js +0 -84
  253. package/dist/ui/paraglide/messages/aed3.d.ts +0 -17
  254. package/dist/ui/paraglide/messages/aed3.js +0 -85
  255. package/dist/ui/paraglide/messages/all_currencies.d.ts +0 -16
  256. package/dist/ui/paraglide/messages/all_currencies.js +0 -84
  257. package/dist/ui/paraglide/messages/all_languages.d.ts +0 -16
  258. package/dist/ui/paraglide/messages/all_languages.js +0 -84
  259. package/dist/ui/paraglide/messages/all_themes.d.ts +0 -16
  260. package/dist/ui/paraglide/messages/all_themes.js +0 -84
  261. package/dist/ui/paraglide/messages/api_status.d.ts +0 -16
  262. package/dist/ui/paraglide/messages/api_status.js +0 -84
  263. package/dist/ui/paraglide/messages/app_info.d.ts +0 -16
  264. package/dist/ui/paraglide/messages/app_info.js +0 -84
  265. package/dist/ui/paraglide/messages/appearance.d.ts +0 -16
  266. package/dist/ui/paraglide/messages/appearance.js +0 -84
  267. package/dist/ui/paraglide/messages/aqua.d.ts +0 -16
  268. package/dist/ui/paraglide/messages/aqua.js +0 -84
  269. package/dist/ui/paraglide/messages/ar.d.ts +0 -16
  270. package/dist/ui/paraglide/messages/ar.js +0 -84
  271. package/dist/ui/paraglide/messages/autumn.d.ts +0 -16
  272. package/dist/ui/paraglide/messages/autumn.js +0 -84
  273. package/dist/ui/paraglide/messages/black.d.ts +0 -16
  274. package/dist/ui/paraglide/messages/black.js +0 -84
  275. package/dist/ui/paraglide/messages/brl3.d.ts +0 -17
  276. package/dist/ui/paraglide/messages/brl3.js +0 -85
  277. package/dist/ui/paraglide/messages/bumblebee.d.ts +0 -16
  278. package/dist/ui/paraglide/messages/bumblebee.js +0 -84
  279. package/dist/ui/paraglide/messages/business.d.ts +0 -16
  280. package/dist/ui/paraglide/messages/business.js +0 -84
  281. package/dist/ui/paraglide/messages/cad3.d.ts +0 -17
  282. package/dist/ui/paraglide/messages/cad3.js +0 -85
  283. package/dist/ui/paraglide/messages/caramellatte.d.ts +0 -16
  284. package/dist/ui/paraglide/messages/caramellatte.js +0 -84
  285. package/dist/ui/paraglide/messages/cmyk.d.ts +0 -16
  286. package/dist/ui/paraglide/messages/cmyk.js +0 -84
  287. package/dist/ui/paraglide/messages/cny3.d.ts +0 -17
  288. package/dist/ui/paraglide/messages/cny3.js +0 -85
  289. package/dist/ui/paraglide/messages/coffee.d.ts +0 -16
  290. package/dist/ui/paraglide/messages/coffee.js +0 -84
  291. package/dist/ui/paraglide/messages/commands_label.d.ts +0 -16
  292. package/dist/ui/paraglide/messages/commands_label.js +0 -84
  293. package/dist/ui/paraglide/messages/corporate.d.ts +0 -16
  294. package/dist/ui/paraglide/messages/corporate.js +0 -84
  295. package/dist/ui/paraglide/messages/cupcake.d.ts +0 -16
  296. package/dist/ui/paraglide/messages/cupcake.js +0 -84
  297. package/dist/ui/paraglide/messages/currency.d.ts +0 -16
  298. package/dist/ui/paraglide/messages/currency.js +0 -84
  299. package/dist/ui/paraglide/messages/current_currency.d.ts +0 -16
  300. package/dist/ui/paraglide/messages/current_currency.js +0 -84
  301. package/dist/ui/paraglide/messages/current_language.d.ts +0 -16
  302. package/dist/ui/paraglide/messages/current_language.js +0 -84
  303. package/dist/ui/paraglide/messages/current_theme.d.ts +0 -16
  304. package/dist/ui/paraglide/messages/current_theme.js +0 -84
  305. package/dist/ui/paraglide/messages/currently_in_queue.d.ts +0 -16
  306. package/dist/ui/paraglide/messages/currently_in_queue.js +0 -84
  307. package/dist/ui/paraglide/messages/cyberpunk.d.ts +0 -16
  308. package/dist/ui/paraglide/messages/cyberpunk.js +0 -84
  309. package/dist/ui/paraglide/messages/dark.d.ts +0 -16
  310. package/dist/ui/paraglide/messages/dark.js +0 -84
  311. package/dist/ui/paraglide/messages/de.d.ts +0 -16
  312. package/dist/ui/paraglide/messages/de.js +0 -84
  313. package/dist/ui/paraglide/messages/dim.d.ts +0 -16
  314. package/dist/ui/paraglide/messages/dim.js +0 -84
  315. package/dist/ui/paraglide/messages/dracula.d.ts +0 -16
  316. package/dist/ui/paraglide/messages/dracula.js +0 -84
  317. package/dist/ui/paraglide/messages/emerald.d.ts +0 -16
  318. package/dist/ui/paraglide/messages/emerald.js +0 -84
  319. package/dist/ui/paraglide/messages/en.d.ts +0 -16
  320. package/dist/ui/paraglide/messages/en.js +0 -84
  321. package/dist/ui/paraglide/messages/es.d.ts +0 -16
  322. package/dist/ui/paraglide/messages/es.js +0 -84
  323. package/dist/ui/paraglide/messages/eur3.d.ts +0 -17
  324. package/dist/ui/paraglide/messages/eur3.js +0 -85
  325. package/dist/ui/paraglide/messages/extended_controls.d.ts +0 -16
  326. package/dist/ui/paraglide/messages/extended_controls.js +0 -84
  327. package/dist/ui/paraglide/messages/fantasy.d.ts +0 -16
  328. package/dist/ui/paraglide/messages/fantasy.js +0 -84
  329. package/dist/ui/paraglide/messages/forest.d.ts +0 -16
  330. package/dist/ui/paraglide/messages/forest.js +0 -84
  331. package/dist/ui/paraglide/messages/fr.d.ts +0 -16
  332. package/dist/ui/paraglide/messages/fr.js +0 -84
  333. package/dist/ui/paraglide/messages/garden.d.ts +0 -16
  334. package/dist/ui/paraglide/messages/garden.js +0 -84
  335. package/dist/ui/paraglide/messages/gbp3.d.ts +0 -17
  336. package/dist/ui/paraglide/messages/gbp3.js +0 -85
  337. package/dist/ui/paraglide/messages/halloween.d.ts +0 -16
  338. package/dist/ui/paraglide/messages/halloween.js +0 -84
  339. package/dist/ui/paraglide/messages/hello_world.d.ts +0 -18
  340. package/dist/ui/paraglide/messages/hello_world.js +0 -84
  341. package/dist/ui/paraglide/messages/hi.d.ts +0 -16
  342. package/dist/ui/paraglide/messages/hi.js +0 -84
  343. package/dist/ui/paraglide/messages/inr3.d.ts +0 -17
  344. package/dist/ui/paraglide/messages/inr3.js +0 -85
  345. package/dist/ui/paraglide/messages/it.d.ts +0 -16
  346. package/dist/ui/paraglide/messages/it.js +0 -84
  347. package/dist/ui/paraglide/messages/ja.d.ts +0 -16
  348. package/dist/ui/paraglide/messages/ja.js +0 -84
  349. package/dist/ui/paraglide/messages/jpy3.d.ts +0 -17
  350. package/dist/ui/paraglide/messages/jpy3.js +0 -85
  351. package/dist/ui/paraglide/messages/ko.d.ts +0 -16
  352. package/dist/ui/paraglide/messages/ko.js +0 -84
  353. package/dist/ui/paraglide/messages/krw3.d.ts +0 -17
  354. package/dist/ui/paraglide/messages/krw3.js +0 -85
  355. package/dist/ui/paraglide/messages/languages.d.ts +0 -16
  356. package/dist/ui/paraglide/messages/languages.js +0 -84
  357. package/dist/ui/paraglide/messages/lemonade.d.ts +0 -16
  358. package/dist/ui/paraglide/messages/lemonade.js +0 -84
  359. package/dist/ui/paraglide/messages/light.d.ts +0 -16
  360. package/dist/ui/paraglide/messages/light.js +0 -84
  361. package/dist/ui/paraglide/messages/live_store_dashboard.d.ts +0 -16
  362. package/dist/ui/paraglide/messages/live_store_dashboard.js +0 -84
  363. package/dist/ui/paraglide/messages/localization.d.ts +0 -16
  364. package/dist/ui/paraglide/messages/localization.js +0 -84
  365. package/dist/ui/paraglide/messages/lofi.d.ts +0 -16
  366. package/dist/ui/paraglide/messages/lofi.js +0 -84
  367. package/dist/ui/paraglide/messages/luxury.d.ts +0 -16
  368. package/dist/ui/paraglide/messages/luxury.js +0 -84
  369. package/dist/ui/paraglide/messages/mxn3.d.ts +0 -17
  370. package/dist/ui/paraglide/messages/mxn3.js +0 -85
  371. package/dist/ui/paraglide/messages/name_label.d.ts +0 -16
  372. package/dist/ui/paraglide/messages/name_label.js +0 -84
  373. package/dist/ui/paraglide/messages/night.d.ts +0 -16
  374. package/dist/ui/paraglide/messages/night.js +0 -84
  375. package/dist/ui/paraglide/messages/nord.d.ts +0 -16
  376. package/dist/ui/paraglide/messages/nord.js +0 -84
  377. package/dist/ui/paraglide/messages/pastel.d.ts +0 -16
  378. package/dist/ui/paraglide/messages/pastel.js +0 -84
  379. package/dist/ui/paraglide/messages/pt.d.ts +0 -16
  380. package/dist/ui/paraglide/messages/pt.js +0 -84
  381. package/dist/ui/paraglide/messages/real_time_monitor_desc.d.ts +0 -16
  382. package/dist/ui/paraglide/messages/real_time_monitor_desc.js +0 -84
  383. package/dist/ui/paraglide/messages/registered_in_registry.d.ts +0 -16
  384. package/dist/ui/paraglide/messages/registered_in_registry.js +0 -84
  385. package/dist/ui/paraglide/messages/retro.d.ts +0 -16
  386. package/dist/ui/paraglide/messages/retro.js +0 -84
  387. package/dist/ui/paraglide/messages/ru.d.ts +0 -16
  388. package/dist/ui/paraglide/messages/ru.js +0 -84
  389. package/dist/ui/paraglide/messages/silk.d.ts +0 -16
  390. package/dist/ui/paraglide/messages/silk.js +0 -84
  391. package/dist/ui/paraglide/messages/state_label.d.ts +0 -16
  392. package/dist/ui/paraglide/messages/state_label.js +0 -84
  393. package/dist/ui/paraglide/messages/sunset.d.ts +0 -16
  394. package/dist/ui/paraglide/messages/sunset.js +0 -84
  395. package/dist/ui/paraglide/messages/synthwave.d.ts +0 -16
  396. package/dist/ui/paraglide/messages/synthwave.js +0 -84
  397. package/dist/ui/paraglide/messages/system.d.ts +0 -16
  398. package/dist/ui/paraglide/messages/system.js +0 -84
  399. package/dist/ui/paraglide/messages/theme.d.ts +0 -16
  400. package/dist/ui/paraglide/messages/theme.js +0 -84
  401. package/dist/ui/paraglide/messages/themes.d.ts +0 -16
  402. package/dist/ui/paraglide/messages/themes.js +0 -84
  403. package/dist/ui/paraglide/messages/url_label.d.ts +0 -16
  404. package/dist/ui/paraglide/messages/url_label.js +0 -84
  405. package/dist/ui/paraglide/messages/usd3.d.ts +0 -17
  406. package/dist/ui/paraglide/messages/usd3.js +0 -85
  407. package/dist/ui/paraglide/messages/valentine.d.ts +0 -16
  408. package/dist/ui/paraglide/messages/valentine.js +0 -84
  409. package/dist/ui/paraglide/messages/version_label.d.ts +0 -16
  410. package/dist/ui/paraglide/messages/version_label.js +0 -84
  411. package/dist/ui/paraglide/messages/vi.d.ts +0 -16
  412. package/dist/ui/paraglide/messages/vi.js +0 -84
  413. package/dist/ui/paraglide/messages/winter.d.ts +0 -16
  414. package/dist/ui/paraglide/messages/winter.js +0 -84
  415. package/dist/ui/paraglide/messages/wireframe.d.ts +0 -16
  416. package/dist/ui/paraglide/messages/wireframe.js +0 -84
  417. package/dist/ui/paraglide/messages/zh.d.ts +0 -16
  418. package/dist/ui/paraglide/messages/zh.js +0 -84
  419. package/dist/ui/paraglide/messages.d.ts +0 -2
  420. package/dist/ui/paraglide/messages.js +0 -4
  421. package/dist/ui/paraglide/registry.d.ts +0 -21
  422. package/dist/ui/paraglide/registry.js +0 -31
  423. package/dist/ui/paraglide/runtime.d.ts +0 -730
  424. package/dist/ui/paraglide/runtime.js +0 -1812
  425. package/dist/ui/paraglide/server.d.ts +0 -92
  426. package/dist/ui/paraglide/server.js +0 -239
  427. package/dist/ui/primitives/DatePicker.svelte +0 -257
  428. package/dist/ui/primitives/DatePicker.svelte.d.ts +0 -17
  429. package/dist/ui/primitives/index.d.ts +0 -1
  430. package/dist/ui/primitives/index.js +0 -3
  431. /package/{dist/ui/layout → src/runes/layout/src}/ContentArea.svelte +0 -0
  432. /package/{dist/ui/layout → src/runes/layout/src}/DetailPanel.svelte +0 -0
  433. /package/{dist/ui/features → src/runes/palettes/src}/notifications/NotificationBell.svelte +0 -0
@@ -1,92 +0,0 @@
1
- /**
2
- * Server middleware that handles locale-based routing and request processing.
3
- *
4
- * Configure `disableAsyncLocalStorage` when generating Paraglide with
5
- * `paraglideVitePlugin()` or `compile()`, not when calling
6
- * `paraglideMiddleware()`. Keep AsyncLocalStorage enabled by default and
7
- * only disable it for runtimes that lack `AsyncLocalStorage` support and
8
- * guarantee request isolation.
9
- *
10
- * This middleware performs several key functions:
11
- *
12
- * 1. Determines the locale for the incoming request using configured strategies
13
- * 2. Handles URL localization and redirects (only for document requests)
14
- * 3. Maintains locale state using AsyncLocalStorage to prevent request interference
15
- *
16
- * When URL strategy is used:
17
- *
18
- * - The locale is extracted from the URL for all request types
19
- * - If URL doesn't match the determined locale, redirects to localized URL (only for document requests)
20
- * - De-localizes URLs before passing to server (e.g., `/fr/about` → `/about`)
21
- *
22
- * @see https://inlang.com/m/gerre34r/library-inlang-paraglideJs/middleware
23
- *
24
- * @template T - The return type of the resolve function
25
- *
26
- * @param {Request} request - The incoming request object
27
- * @param {(args: { request: Request, locale: import("./runtime.js").Locale }) => T | Promise<T>} resolve - Function to handle the request. The callback receives:
28
- * - `request`: A modified request with a delocalized URL when the URL strategy is used (e.g., `/fr/about` → `/about`).
29
- * If your framework handles URL localization itself (e.g., TanStack Router's `rewrite` option), use the original
30
- * request instead to avoid redirect loops.
31
- * - `locale`: The determined locale for this request.
32
- * @param {{ onRedirect:(response: Response) => void }} [callbacks] - Callbacks to handle events from middleware
33
- * @returns {Promise<Response>}
34
- *
35
- * @example
36
- * ```typescript
37
- * // Basic usage in metaframeworks like NextJS, SvelteKit, Astro, Nuxt, etc.
38
- * export const handle = async ({ event, resolve }) => {
39
- * return paraglideMiddleware(event.request, ({ request, locale }) => {
40
- * // let the framework further resolve the request
41
- * return resolve(request);
42
- * });
43
- * };
44
- * ```
45
- *
46
- * @example
47
- * ```typescript
48
- * // Usage in a framework like Express JS or Hono
49
- * app.use(async (req, res, next) => {
50
- * const result = await paraglideMiddleware(req, ({ request, locale }) => {
51
- * // If a redirect happens this won't be called
52
- * return next(request);
53
- * });
54
- * });
55
- * ```
56
- *
57
- * @example
58
- * ```typescript
59
- * // Usage with frameworks that handle URL localization/delocalization themselves
60
- * //
61
- * // Some frameworks like TanStack Router handle URL localization and delocalization
62
- * // themselves via their own rewrite APIs (e.g., `rewrite.input`/`rewrite.output`).
63
- * //
64
- * // When the framework handles this, the middleware's URL delocalization is not needed.
65
- * // Using the modified `request` from the callback would cause a redirect loop because
66
- * // both the middleware and the framework would attempt to delocalize the URL.
67
- * //
68
- * // Solution: Pass the original request to the handler instead of the modified one.
69
- * // The middleware still handles locale detection, cookies, and AsyncLocalStorage context.
70
- * //
71
- * // ❌ WRONG - causes redirect loop when framework handles URL rewriting:
72
- * // paraglideMiddleware(req, ({ request }) => handler.fetch(request))
73
- * //
74
- * // ✅ CORRECT - use original request when framework handles URL localization:
75
- * // paraglideMiddleware(req, () => handler.fetch(req))
76
- *
77
- * * *
78
- * export default {
79
- * fetch(req: Request): Promise<Response> {
80
- * // TanStack Router handles URL rewriting via deLocalizeUrl/localizeUrl
81
- * // so we pass the original `req` instead of the modified `request`
82
- * return paraglideMiddleware(req, () => handler.fetch(req))
83
- * },
84
- * }
85
- * ```
86
- */
87
- export function paraglideMiddleware<T>(request: Request, resolve: (args: {
88
- request: Request;
89
- locale: import("./runtime.js").Locale;
90
- }) => T | Promise<T>, callbacks?: {
91
- onRedirect: (response: Response) => void;
92
- }): Promise<Response>;
@@ -1,239 +0,0 @@
1
- /* eslint-disable */
2
-
3
- import * as runtime from "./runtime.js";
4
-
5
- /**
6
- * Server middleware that handles locale-based routing and request processing.
7
- *
8
- * Configure `disableAsyncLocalStorage` when generating Paraglide with
9
- * `paraglideVitePlugin()` or `compile()`, not when calling
10
- * `paraglideMiddleware()`. Keep AsyncLocalStorage enabled by default and
11
- * only disable it for runtimes that lack `AsyncLocalStorage` support and
12
- * guarantee request isolation.
13
- *
14
- * This middleware performs several key functions:
15
- *
16
- * 1. Determines the locale for the incoming request using configured strategies
17
- * 2. Handles URL localization and redirects (only for document requests)
18
- * 3. Maintains locale state using AsyncLocalStorage to prevent request interference
19
- *
20
- * When URL strategy is used:
21
- *
22
- * - The locale is extracted from the URL for all request types
23
- * - If URL doesn't match the determined locale, redirects to localized URL (only for document requests)
24
- * - De-localizes URLs before passing to server (e.g., `/fr/about` → `/about`)
25
- *
26
- * @see https://inlang.com/m/gerre34r/library-inlang-paraglideJs/middleware
27
- *
28
- * @template T - The return type of the resolve function
29
- *
30
- * @param {Request} request - The incoming request object
31
- * @param {(args: { request: Request, locale: import("./runtime.js").Locale }) => T | Promise<T>} resolve - Function to handle the request. The callback receives:
32
- * - `request`: A modified request with a delocalized URL when the URL strategy is used (e.g., `/fr/about` → `/about`).
33
- * If your framework handles URL localization itself (e.g., TanStack Router's `rewrite` option), use the original
34
- * request instead to avoid redirect loops.
35
- * - `locale`: The determined locale for this request.
36
- * @param {{ onRedirect:(response: Response) => void }} [callbacks] - Callbacks to handle events from middleware
37
- * @returns {Promise<Response>}
38
- *
39
- * @example
40
- * ```typescript
41
- * // Basic usage in metaframeworks like NextJS, SvelteKit, Astro, Nuxt, etc.
42
- * export const handle = async ({ event, resolve }) => {
43
- * return paraglideMiddleware(event.request, ({ request, locale }) => {
44
- * // let the framework further resolve the request
45
- * return resolve(request);
46
- * });
47
- * };
48
- * ```
49
- *
50
- * @example
51
- * ```typescript
52
- * // Usage in a framework like Express JS or Hono
53
- * app.use(async (req, res, next) => {
54
- * const result = await paraglideMiddleware(req, ({ request, locale }) => {
55
- * // If a redirect happens this won't be called
56
- * return next(request);
57
- * });
58
- * });
59
- * ```
60
- *
61
- * @example
62
- * ```typescript
63
- * // Usage with frameworks that handle URL localization/delocalization themselves
64
- * //
65
- * // Some frameworks like TanStack Router handle URL localization and delocalization
66
- * // themselves via their own rewrite APIs (e.g., `rewrite.input`/`rewrite.output`).
67
- * //
68
- * // When the framework handles this, the middleware's URL delocalization is not needed.
69
- * // Using the modified `request` from the callback would cause a redirect loop because
70
- * // both the middleware and the framework would attempt to delocalize the URL.
71
- * //
72
- * // Solution: Pass the original request to the handler instead of the modified one.
73
- * // The middleware still handles locale detection, cookies, and AsyncLocalStorage context.
74
- * //
75
- * // ❌ WRONG - causes redirect loop when framework handles URL rewriting:
76
- * // paraglideMiddleware(req, ({ request }) => handler.fetch(request))
77
- * //
78
- * // ✅ CORRECT - use original request when framework handles URL localization:
79
- * // paraglideMiddleware(req, () => handler.fetch(req))
80
- *
81
- * * *
82
- * export default {
83
- * fetch(req: Request): Promise<Response> {
84
- * // TanStack Router handles URL rewriting via deLocalizeUrl/localizeUrl
85
- * // so we pass the original `req` instead of the modified `request`
86
- * return paraglideMiddleware(req, () => handler.fetch(req))
87
- * },
88
- * }
89
- * ```
90
- */
91
- export async function paraglideMiddleware(request, resolve, callbacks) {
92
- if (!runtime.disableAsyncLocalStorage && !runtime.serverAsyncLocalStorage) {
93
- const { AsyncLocalStorage } = await import("async_hooks");
94
- runtime.overwriteServerAsyncLocalStorage(new AsyncLocalStorage());
95
- } else if (!runtime.serverAsyncLocalStorage) {
96
- runtime.overwriteServerAsyncLocalStorage(createMockAsyncLocalStorage());
97
- }
98
- if (runtime.isExcludedByRouteStrategy(request.url)) {
99
- const locale = runtime.baseLocale;
100
- const origin = new URL(request.url).origin;
101
- const newRequest = cloneRequestWithFallback(request);
102
- /** @type {Set<string>} */
103
- const messageCalls = new Set();
104
- return /** @type {Response} */ (await runtime.serverAsyncLocalStorage?.run({ locale, origin, messageCalls }, () => resolve({ locale, request: newRequest })));
105
- }
106
- const strategy = runtime.getStrategyForUrl(request.url);
107
- const decision = await runtime.shouldRedirect({ request });
108
- const locale = decision.locale;
109
- const origin = new URL(request.url).origin;
110
- // if the client makes a request to a URL that doesn't match
111
- // the localizedUrl, redirect the client to the localized URL
112
- if (request.headers.get("Sec-Fetch-Dest") === "document" &&
113
- decision.shouldRedirect &&
114
- decision.redirectUrl) {
115
- // Create headers object with Vary header if preferredLanguage strategy is used
116
- /** @type {Record<string, string>} */
117
- const headers = {};
118
- if (strategy.includes("preferredLanguage")) {
119
- headers["Vary"] = "Accept-Language";
120
- }
121
- const response = new Response(null, {
122
- status: 307,
123
- headers: {
124
- Location: decision.redirectUrl.href,
125
- ...headers,
126
- },
127
- });
128
- callbacks?.onRedirect(response);
129
- return response;
130
- }
131
- // If the strategy includes "url", we need to de-localize the URL
132
- // before passing it to the server middleware.
133
- //
134
- // The middleware is responsible for mapping a localized URL to the
135
- // de-localized URL e.g. `/en/about` to `/about`. Otherwise,
136
- // the server can't render the correct page.
137
- let newRequest;
138
- if (strategy.includes("url")) {
139
- newRequest = new Request(runtime.deLocalizeUrl(request.url), request);
140
- }
141
- else {
142
- newRequest = cloneRequestWithFallback(request);
143
- }
144
- // the message functions that have been called in this request
145
- /** @type {Set<string>} */
146
- const messageCalls = new Set();
147
- const response = await runtime.serverAsyncLocalStorage?.run({ locale, origin, messageCalls }, () => resolve({ locale, request: newRequest }));
148
- // Only modify HTML responses
149
- if (runtime.experimentalMiddlewareLocaleSplitting &&
150
- response.headers.get("Content-Type")?.includes("html")) {
151
- const body = await response.text();
152
- const messages = [];
153
- // using .values() to avoid polyfilling in older projects. else the following error is thrown
154
- // Type 'Set<string>' can only be iterated through when using the '--downlevelIteration' flag or with a '--target' of 'es2015' or higher.
155
- for (const messageCall of Array.from(messageCalls)) {
156
- const [id, locale] =
157
- /** @type {[string, import("./runtime.js").Locale]} */ (messageCall.split(":"));
158
- messages.push(`${id}: ${compiledBundles[id]?.[locale]}`);
159
- }
160
- // Prevent translated content from terminating the inline script tag.
161
- const escapedMessages = messages.join(",").replace(/<\/(script)/gi, "<\\/$1");
162
- const script = `<script>globalThis.__paraglide = globalThis.__paraglide ?? {}; globalThis.__paraglide.ssr = { ${escapedMessages} }</script>`;
163
- // Insert the script before the closing head tag
164
- const newBody = body.replace("</head>", `${script}</head>`);
165
- // Create a new response with the modified body
166
- // Clone all headers except Content-Length which will be set automatically
167
- const newHeaders = new Headers(response.headers);
168
- newHeaders.delete("Content-Length"); // Let the browser calculate the correct length
169
- return new Response(newBody, {
170
- status: response.status,
171
- statusText: response.statusText,
172
- headers: newHeaders,
173
- });
174
- }
175
- return response;
176
- }
177
- /**
178
- * Some metaframeworks (NextJS) require a new Request object.
179
- * https://github.com/opral/inlang-paraglide-js/issues/411
180
- *
181
- * However, some frameworks (TanStack Start 1.143+) use custom Request
182
- * implementations that cannot be cloned with `new Request(request)`.
183
- * https://github.com/opral/paraglide-js/issues/573
184
- *
185
- * @param {Request} request
186
- * @returns {Request}
187
- */
188
- function cloneRequestWithFallback(request) {
189
- try {
190
- // Clone first so building a new Request does not consume the original body stream.
191
- return new Request(request.clone());
192
- }
193
- catch {
194
- try {
195
- return new Request(request);
196
- }
197
- catch {
198
- return request;
199
- }
200
- }
201
- }
202
- /**
203
- * Creates a mock AsyncLocalStorage implementation for environments where
204
- * native AsyncLocalStorage is not available or disabled.
205
- *
206
- * This mock implementation mimics the behavior of the native AsyncLocalStorage
207
- * but doesn't require the async_hooks module. It's used as a fallback when
208
- * the runtime does not expose AsyncLocalStorage or when it has been disabled.
209
- *
210
- * @returns {import("./runtime.js").ParaglideAsyncLocalStorage}
211
- */
212
- function createMockAsyncLocalStorage() {
213
- /** @type {any} */
214
- let currentStore = undefined;
215
- return {
216
- getStore() {
217
- return currentStore;
218
- },
219
- async run(store, callback) {
220
- currentStore = store;
221
- try {
222
- return await callback();
223
- }
224
- finally {
225
- currentStore = undefined;
226
- }
227
- },
228
- };
229
- }
230
- // Used in generated server.js when async local storage is disabled.
231
- void createMockAsyncLocalStorage;
232
- /**
233
- * The compiled messages for the server middleware.
234
- *
235
- * Only populated if `enableMiddlewareOptimizations` is set to `true`.
236
- *
237
- * @type {Record<string, Record<import("./runtime.js").Locale, string>>}
238
- */
239
- const compiledBundles = {};
@@ -1,257 +0,0 @@
1
- <!--
2
- DatePicker — Locale-aware calendar grid primitive.
3
- Reads LanguageStore from context for weekday/month names.
4
- Zero domain knowledge.
5
- -->
6
- <script module lang="ts">
7
- export interface DatePickerProps {
8
- /** Currently selected date */
9
- value?: Date | string;
10
- /** Disabled dates (cannot be selected) */
11
- disabledDates?: Date[];
12
- /** Highlighted dates (visual emphasis) */
13
- highlightedDates?: Date[];
14
- /** Minimum selectable date */
15
- minDate?: Date;
16
- /** Maximum selectable date */
17
- maxDate?: Date;
18
- /** Fired when a date is selected */
19
- onchange?: (date: Date) => void;
20
- }
21
- </script>
22
-
23
- <script lang="ts">
24
- import { getLanguageStore } from "@internal/state";
25
- import { untrack } from "svelte";
26
-
27
- let {
28
- value,
29
- disabledDates = [],
30
- highlightedDates = [],
31
- minDate,
32
- maxDate,
33
- onchange,
34
- }: DatePickerProps = $props();
35
-
36
- const languageStore = getLanguageStore();
37
-
38
- // Parse initial value
39
- function parseDate(d?: Date | string): Date {
40
- if (!d) return new Date();
41
- return typeof d === "string" ? new Date(d) : d;
42
- }
43
-
44
- // Capture the initial value once to avoid state_referenced_locally warnings
45
- const initialDate = untrack(() => parseDate(value));
46
-
47
- let selectedDate = $state(initialDate);
48
- let viewYear = $state(initialDate.getFullYear());
49
- let viewMonth = $state(initialDate.getMonth());
50
-
51
- // Locale-aware formatting
52
- const locale = $derived(String(languageStore.current) || "en");
53
-
54
- const weekdayNames = $derived(
55
- Array.from({ length: 7 }, (_, i) => {
56
- const d = new Date(2024, 0, i + 1); // Mon=1 Jan 2024
57
- return new Intl.DateTimeFormat(locale, { weekday: "short" }).format(
58
- d,
59
- );
60
- }),
61
- );
62
-
63
- const monthName = $derived(
64
- new Intl.DateTimeFormat(locale, { month: "long" }).format(
65
- new Date(viewYear, viewMonth),
66
- ),
67
- );
68
-
69
- // Calendar grid
70
- const calendarDays = $derived.by(() => {
71
- const firstDay = new Date(viewYear, viewMonth, 1);
72
- const lastDay = new Date(viewYear, viewMonth + 1, 0);
73
- const startOffset = (firstDay.getDay() + 6) % 7; // Monday-based
74
- const totalDays = lastDay.getDate();
75
-
76
- const days: (number | null)[] = [];
77
-
78
- // Leading empty slots
79
- for (let i = 0; i < startOffset; i++) days.push(null);
80
- // Actual days
81
- for (let d = 1; d <= totalDays; d++) days.push(d);
82
-
83
- return days;
84
- });
85
-
86
- const today = new Date();
87
- const todayStr = `${today.getFullYear()}-${today.getMonth()}-${today.getDate()}`;
88
-
89
- function dateKey(year: number, month: number, day: number): string {
90
- return `${year}-${month}-${day}`;
91
- }
92
-
93
- const disabledSet = $derived(
94
- new Set(
95
- disabledDates.map((d) =>
96
- dateKey(d.getFullYear(), d.getMonth(), d.getDate()),
97
- ),
98
- ),
99
- );
100
-
101
- const highlightedSet = $derived(
102
- new Set(
103
- highlightedDates.map((d) =>
104
- dateKey(d.getFullYear(), d.getMonth(), d.getDate()),
105
- ),
106
- ),
107
- );
108
-
109
- function isDisabled(day: number): boolean {
110
- const k = dateKey(viewYear, viewMonth, day);
111
- if (disabledSet.has(k)) return true;
112
- const d = new Date(viewYear, viewMonth, day);
113
- if (minDate && d < minDate) return true;
114
- if (maxDate && d > maxDate) return true;
115
- return false;
116
- }
117
-
118
- function isSelected(day: number): boolean {
119
- return (
120
- selectedDate.getFullYear() === viewYear &&
121
- selectedDate.getMonth() === viewMonth &&
122
- selectedDate.getDate() === day
123
- );
124
- }
125
-
126
- function isToday(day: number): boolean {
127
- return dateKey(viewYear, viewMonth, day) === todayStr;
128
- }
129
-
130
- function isHighlighted(day: number): boolean {
131
- return highlightedSet.has(dateKey(viewYear, viewMonth, day));
132
- }
133
-
134
- function selectDay(day: number) {
135
- if (isDisabled(day)) return;
136
- selectedDate = new Date(viewYear, viewMonth, day);
137
- onchange?.(selectedDate);
138
- }
139
-
140
- function prevMonth() {
141
- if (viewMonth === 0) {
142
- viewMonth = 11;
143
- viewYear--;
144
- } else {
145
- viewMonth--;
146
- }
147
- }
148
-
149
- function nextMonth() {
150
- if (viewMonth === 11) {
151
- viewMonth = 0;
152
- viewYear++;
153
- } else {
154
- viewMonth++;
155
- }
156
- }
157
-
158
- function handleKeydown(e: KeyboardEvent) {
159
- const day = selectedDate.getDate();
160
- let newDate: Date | null = null;
161
-
162
- switch (e.key) {
163
- case "ArrowLeft":
164
- newDate = new Date(viewYear, viewMonth, day - 1);
165
- break;
166
- case "ArrowRight":
167
- newDate = new Date(viewYear, viewMonth, day + 1);
168
- break;
169
- case "ArrowUp":
170
- newDate = new Date(viewYear, viewMonth, day - 7);
171
- break;
172
- case "ArrowDown":
173
- newDate = new Date(viewYear, viewMonth, day + 7);
174
- break;
175
- case "Enter":
176
- selectDay(day);
177
- return;
178
- case "Escape":
179
- (e.currentTarget as HTMLElement)?.blur();
180
- return;
181
- default:
182
- return;
183
- }
184
-
185
- if (newDate) {
186
- e.preventDefault();
187
- selectedDate = newDate;
188
- viewYear = newDate.getFullYear();
189
- viewMonth = newDate.getMonth();
190
- }
191
- }
192
- </script>
193
-
194
- <!-- svelte-ignore a11y_no_noninteractive_tabindex -->
195
- <div
196
- class="rl-datepicker inline-flex flex-col gap-2 p-4 rounded-box bg-base-200 border border-base-content/10 select-none"
197
- tabindex="0"
198
- role="grid"
199
- aria-label="Date picker"
200
- onkeydown={handleKeydown}
201
- >
202
- <!-- Header: Month/Year + Navigation -->
203
- <div class="flex items-center justify-between">
204
- <button
205
- class="btn btn-ghost btn-sm btn-square"
206
- onclick={prevMonth}
207
- aria-label="Previous month"
208
- >
209
-
210
- </button>
211
- <span class="font-semibold text-sm capitalize">
212
- {monthName}
213
- {viewYear}
214
- </span>
215
- <button
216
- class="btn btn-ghost btn-sm btn-square"
217
- onclick={nextMonth}
218
- aria-label="Next month"
219
- >
220
-
221
- </button>
222
- </div>
223
-
224
- <!-- Weekday Headers -->
225
- <div class="grid grid-cols-7 gap-1 text-center">
226
- {#each weekdayNames as wd}
227
- <span class="text-xs text-base-content/50 font-medium">{wd}</span>
228
- {/each}
229
- </div>
230
-
231
- <!-- Day Grid -->
232
- <div class="grid grid-cols-7 gap-1">
233
- {#each calendarDays as day}
234
- {#if day === null}
235
- <div></div>
236
- {:else}
237
- <button
238
- class="btn btn-sm btn-square text-xs transition-all duration-150"
239
- class:btn-primary={isSelected(day)}
240
- class:btn-ghost={!isSelected(day)}
241
- class:ring-2={isToday(day) && !isSelected(day)}
242
- class:ring-primary={isToday(day) && !isSelected(day)}
243
- class:btn-disabled={isDisabled(day)}
244
- class:opacity-30={isDisabled(day)}
245
- class:bg-accent={isHighlighted(day) && !isSelected(day)}
246
- class:bg-opacity-20={isHighlighted(day) && !isSelected(day)}
247
- onclick={() => selectDay(day)}
248
- disabled={isDisabled(day)}
249
- aria-label={`${day} ${monthName} ${viewYear}`}
250
- aria-pressed={isSelected(day)}
251
- >
252
- {day}
253
- </button>
254
- {/if}
255
- {/each}
256
- </div>
257
- </div>
@@ -1,17 +0,0 @@
1
- export interface DatePickerProps {
2
- /** Currently selected date */
3
- value?: Date | string;
4
- /** Disabled dates (cannot be selected) */
5
- disabledDates?: Date[];
6
- /** Highlighted dates (visual emphasis) */
7
- highlightedDates?: Date[];
8
- /** Minimum selectable date */
9
- minDate?: Date;
10
- /** Maximum selectable date */
11
- maxDate?: Date;
12
- /** Fired when a date is selected */
13
- onchange?: (date: Date) => void;
14
- }
15
- declare const DatePicker: import("svelte").Component<DatePickerProps, {}, "">;
16
- type DatePicker = ReturnType<typeof DatePicker>;
17
- export default DatePicker;
@@ -1 +0,0 @@
1
- export { default as DatePicker } from "./DatePicker.svelte";
@@ -1,3 +0,0 @@
1
- // sdk/ui/src/lib/primitives/index.ts
2
- // Barrel export for primitive UI components
3
- export { default as DatePicker } from "./DatePicker.svelte";