bref-ui 0.3.0 → 2.0.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 (359) hide show
  1. package/LICENSE +21 -0
  2. package/cli/commands/add/approve-overwrites.ts +17 -0
  3. package/cli/commands/add/display-changes.ts +11 -0
  4. package/cli/commands/add/index.ts +30 -0
  5. package/cli/commands/add/review-changes.ts +18 -0
  6. package/cli/commands/add/utils.ts +11 -0
  7. package/cli/commands/execute.ts +39 -0
  8. package/cli/commands/index.ts +19 -0
  9. package/cli/commands/init.ts +17 -0
  10. package/cli/commands/parse.ts +24 -0
  11. package/cli/commands/types.ts +2 -0
  12. package/cli/config/read/index.ts +15 -0
  13. package/cli/config/read/normalize-config.ts +21 -0
  14. package/cli/config/read/read-config-file.ts +13 -0
  15. package/cli/config/resolve/index.ts +20 -0
  16. package/cli/config/resolve/resolve-alias-target.ts +17 -0
  17. package/cli/config/resolve/resolve-alias.ts +17 -0
  18. package/cli/config/types.ts +5 -0
  19. package/cli/index.ts +4 -0
  20. package/cli/installation/copy/index.ts +25 -0
  21. package/cli/installation/copy/validate-overwrite-approvals.ts +18 -0
  22. package/cli/installation/copy/write-prepared-files.ts +26 -0
  23. package/cli/installation/exports/collect-exports.ts +19 -0
  24. package/cli/installation/exports/create-additions.ts +26 -0
  25. package/cli/installation/exports/index.ts +27 -0
  26. package/cli/installation/exports/merge-content.ts +12 -0
  27. package/cli/installation/exports/read-declared-export-names.ts +24 -0
  28. package/cli/installation/exports/read-exported-names.ts +21 -0
  29. package/cli/installation/exports/read-index.ts +14 -0
  30. package/cli/installation/exports/read-reexported-names.ts +24 -0
  31. package/cli/installation/exports/types.ts +10 -0
  32. package/cli/installation/exports/utils.ts +54 -0
  33. package/cli/installation/index.ts +35 -0
  34. package/cli/installation/parser/index.ts +29 -0
  35. package/cli/installation/parser/types.ts +12 -0
  36. package/cli/installation/parser/utils.ts +45 -0
  37. package/cli/installation/prepare/collect-source-files.ts +15 -0
  38. package/cli/installation/prepare/index.ts +15 -0
  39. package/cli/installation/prepare/read-source-files.ts +21 -0
  40. package/cli/installation/prepare/rewrite-imports.ts +50 -0
  41. package/cli/installation/prepare/rewrite-source.ts +36 -0
  42. package/cli/installation/prepare/types.ts +7 -0
  43. package/cli/installation/preview/compare-prepared-files.ts +18 -0
  44. package/cli/installation/preview/index.ts +18 -0
  45. package/cli/installation/preview/read-destination-files.ts +25 -0
  46. package/cli/installation/preview/types.ts +9 -0
  47. package/cli/installation/types.ts +15 -0
  48. package/cli/pack.ts +6 -0
  49. package/cli/registry/load/create-registry.ts +25 -0
  50. package/cli/registry/load/discover-manifests.ts +9 -0
  51. package/cli/registry/load/index.ts +21 -0
  52. package/cli/registry/load/load-entry.ts +22 -0
  53. package/cli/registry/load/utils.ts +70 -0
  54. package/cli/registry/load/validate-dependencies.ts +33 -0
  55. package/cli/registry/plan/collect-entries.ts +28 -0
  56. package/cli/registry/plan/index.ts +14 -0
  57. package/cli/registry/types.ts +17 -0
  58. package/dist/button/button.svelte +126 -0
  59. package/dist/button/button.svelte.d.ts +4 -0
  60. package/dist/button/registry.json +6 -0
  61. package/dist/button/types.d.ts +32 -0
  62. package/dist/checkbox/checkbox.svelte +143 -0
  63. package/dist/checkbox/checkbox.svelte.d.ts +4 -0
  64. package/dist/checkbox/registry.json +6 -0
  65. package/dist/checkbox/types.d.ts +6 -0
  66. package/dist/combobox/combobox.svelte +156 -0
  67. package/dist/combobox/combobox.svelte.d.ts +4 -0
  68. package/dist/combobox/form.svelte +61 -0
  69. package/dist/combobox/form.svelte.d.ts +4 -0
  70. package/dist/combobox/input.svelte +132 -0
  71. package/dist/combobox/input.svelte.d.ts +4 -0
  72. package/dist/combobox/list.svelte +78 -0
  73. package/dist/combobox/list.svelte.d.ts +4 -0
  74. package/dist/combobox/option.svelte +77 -0
  75. package/dist/combobox/option.svelte.d.ts +4 -0
  76. package/dist/combobox/registry.json +6 -0
  77. package/dist/combobox/types.d.ts +61 -0
  78. package/dist/dialog/dialog.svelte +182 -0
  79. package/dist/dialog/dialog.svelte.d.ts +4 -0
  80. package/dist/dialog/footer.svelte +26 -0
  81. package/dist/dialog/footer.svelte.d.ts +7 -0
  82. package/dist/dialog/header.svelte +56 -0
  83. package/dist/dialog/header.svelte.d.ts +4 -0
  84. package/dist/dialog/registry.json +6 -0
  85. package/dist/dialog/types.d.ts +31 -0
  86. package/dist/icon/icon.svelte +108 -0
  87. package/dist/icon/icon.svelte.d.ts +4 -0
  88. package/dist/icon/names.d.ts +7 -0
  89. package/dist/icon/registry.json +6 -0
  90. package/dist/icon/types.d.ts +16 -0
  91. package/dist/index.d.ts +20 -2
  92. package/dist/index.js +20 -2
  93. package/dist/pill/content.svelte +23 -0
  94. package/dist/pill/content.svelte.d.ts +4 -0
  95. package/dist/pill/on-delete.svelte +26 -0
  96. package/dist/pill/on-delete.svelte.d.ts +4 -0
  97. package/dist/pill/pill.svelte +200 -0
  98. package/dist/{base/pill → pill}/pill.svelte.d.ts +1 -1
  99. package/dist/pill/registry.json +6 -0
  100. package/dist/pill/types.d.ts +19 -0
  101. package/dist/pill-choice-group/pill-choice-group.svelte +131 -0
  102. package/dist/pill-choice-group/pill-choice-group.svelte.d.ts +4 -0
  103. package/dist/pill-choice-group/registry.json +6 -0
  104. package/dist/pill-choice-group/types.d.ts +13 -0
  105. package/dist/pill-group/container.svelte +40 -0
  106. package/dist/pill-group/container.svelte.d.ts +4 -0
  107. package/dist/pill-group/pill-group.svelte +27 -0
  108. package/dist/pill-group/pill-group.svelte.d.ts +4 -0
  109. package/dist/pill-group/registry.json +6 -0
  110. package/dist/pill-group/types.d.ts +13 -0
  111. package/dist/popover/popover.svelte +86 -0
  112. package/dist/popover/popover.svelte.d.ts +4 -0
  113. package/dist/popover/registry.json +6 -0
  114. package/dist/popover/types.d.ts +8 -0
  115. package/dist/progress/progress.svelte +256 -0
  116. package/dist/progress/progress.svelte.d.ts +4 -0
  117. package/dist/progress/registry.json +6 -0
  118. package/dist/progress/types.d.ts +11 -0
  119. package/dist/select/empty.svelte +25 -0
  120. package/dist/select/empty.svelte.d.ts +4 -0
  121. package/dist/select/list.svelte +27 -0
  122. package/dist/select/list.svelte.d.ts +4 -0
  123. package/dist/select/option.svelte +64 -0
  124. package/dist/select/option.svelte.d.ts +4 -0
  125. package/dist/select/registry.json +6 -0
  126. package/dist/select/select.svelte +70 -0
  127. package/dist/{base/select → select}/select.svelte.d.ts +2 -2
  128. package/dist/select/trigger.svelte +86 -0
  129. package/dist/select/trigger.svelte.d.ts +4 -0
  130. package/dist/select/types.d.ts +31 -0
  131. package/dist/select/types.js +1 -0
  132. package/dist/spinner/registry.json +6 -0
  133. package/dist/spinner/spinner.svelte +114 -0
  134. package/dist/spinner/spinner.svelte.d.ts +4 -0
  135. package/dist/spinner/types.d.ts +6 -0
  136. package/dist/spinner/types.js +1 -0
  137. package/dist/surface/registry.json +6 -0
  138. package/dist/surface/surface.svelte +96 -0
  139. package/dist/surface/surface.svelte.d.ts +4 -0
  140. package/dist/surface/types.d.ts +25 -0
  141. package/dist/surface/types.js +1 -0
  142. package/dist/switch/registry.json +6 -0
  143. package/dist/switch/switch.svelte +162 -0
  144. package/dist/switch/switch.svelte.d.ts +4 -0
  145. package/dist/switch/types.d.ts +8 -0
  146. package/dist/switch/types.js +1 -0
  147. package/dist/text-area/registry.json +8 -0
  148. package/dist/text-area/text-area.svelte +186 -0
  149. package/dist/text-area/text-area.svelte.d.ts +4 -0
  150. package/dist/text-area/types.d.ts +12 -0
  151. package/dist/text-area/types.js +1 -0
  152. package/dist/text-input/registry.json +8 -0
  153. package/dist/text-input/text-input.svelte +189 -0
  154. package/dist/text-input/text-input.svelte.d.ts +4 -0
  155. package/dist/text-input/types.d.ts +11 -0
  156. package/dist/text-input/types.js +1 -0
  157. package/dist/theme/cli-theme.svelte +16 -0
  158. package/dist/theme/cli-theme.svelte.d.ts +7 -0
  159. package/dist/theme/colors.svelte +102 -0
  160. package/dist/theme/colors.svelte.d.ts +4 -0
  161. package/dist/theme/fonts.svelte +10 -0
  162. package/dist/theme/fonts.svelte.d.ts +26 -0
  163. package/dist/theme/registry.json +13 -0
  164. package/dist/theme/styles.svelte +50 -0
  165. package/dist/theme/styles.svelte.d.ts +26 -0
  166. package/dist/theme/surface.d.ts +3 -0
  167. package/dist/theme/surface.js +10 -0
  168. package/dist/theme/surfaces.svelte +208 -0
  169. package/dist/theme/surfaces.svelte.d.ts +18 -0
  170. package/dist/theme/theme-mode-toggle.svelte +9 -0
  171. package/dist/theme/theme-mode-toggle.svelte.d.ts +4 -0
  172. package/dist/theme/theme.svelte +16 -0
  173. package/dist/theme/theme.svelte.d.ts +4 -0
  174. package/dist/theme/types.d.ts +17 -0
  175. package/dist/theme/types.js +1 -0
  176. package/dist/tree-view/registry.json +15 -0
  177. package/dist/tree-view/tree-node/chevron-button.svelte +56 -0
  178. package/dist/tree-view/tree-node/chevron-button.svelte.d.ts +4 -0
  179. package/dist/tree-view/tree-node/content.svelte +62 -0
  180. package/dist/tree-view/tree-node/content.svelte.d.ts +4 -0
  181. package/dist/tree-view/tree-node/delete-button.svelte +52 -0
  182. package/dist/tree-view/tree-node/delete-button.svelte.d.ts +4 -0
  183. package/dist/tree-view/tree-node/tree-node.svelte +111 -0
  184. package/dist/{base/tree-view → tree-view/tree-node}/tree-node.svelte.d.ts +2 -3
  185. package/dist/tree-view/tree-view-section.svelte +42 -0
  186. package/dist/tree-view/tree-view-section.svelte.d.ts +4 -0
  187. package/dist/tree-view/tree-view.svelte +65 -0
  188. package/dist/{base/tree-view → tree-view}/tree-view.svelte.d.ts +2 -2
  189. package/dist/tree-view/types.d.ts +31 -0
  190. package/dist/tree-view/types.js +1 -0
  191. package/dist/types.d.ts +25 -0
  192. package/dist/types.js +1 -0
  193. package/package.json +39 -45
  194. package/readme.md +157 -0
  195. package/src/lib/button/button.svelte +126 -0
  196. package/src/lib/button/registry.json +6 -0
  197. package/src/lib/button/types.ts +42 -0
  198. package/src/lib/checkbox/checkbox.svelte +143 -0
  199. package/src/lib/checkbox/registry.json +6 -0
  200. package/src/lib/checkbox/types.ts +7 -0
  201. package/src/lib/combobox/combobox.svelte +156 -0
  202. package/src/lib/combobox/form.svelte +61 -0
  203. package/src/lib/combobox/input.svelte +132 -0
  204. package/src/lib/combobox/list.svelte +78 -0
  205. package/src/lib/combobox/option.svelte +77 -0
  206. package/src/lib/combobox/registry.json +6 -0
  207. package/src/lib/combobox/types.ts +89 -0
  208. package/src/lib/dialog/dialog.svelte +182 -0
  209. package/src/lib/dialog/footer.svelte +26 -0
  210. package/src/lib/dialog/header.svelte +56 -0
  211. package/src/lib/dialog/registry.json +6 -0
  212. package/src/lib/dialog/types.ts +35 -0
  213. package/src/lib/icon/icon.svelte +108 -0
  214. package/src/lib/icon/names.ts +3794 -0
  215. package/src/lib/icon/registry.json +6 -0
  216. package/src/lib/icon/types.ts +18 -0
  217. package/src/lib/index.ts +20 -0
  218. package/src/lib/pill/content.svelte +23 -0
  219. package/src/lib/pill/on-delete.svelte +26 -0
  220. package/src/lib/pill/pill.svelte +200 -0
  221. package/src/lib/pill/registry.json +6 -0
  222. package/src/lib/pill/types.ts +22 -0
  223. package/src/lib/pill-choice-group/pill-choice-group.svelte +131 -0
  224. package/src/lib/pill-choice-group/registry.json +6 -0
  225. package/src/lib/pill-choice-group/types.ts +14 -0
  226. package/src/lib/pill-group/container.svelte +40 -0
  227. package/src/lib/pill-group/pill-group.svelte +27 -0
  228. package/src/lib/pill-group/registry.json +6 -0
  229. package/src/lib/pill-group/types.ts +15 -0
  230. package/src/lib/popover/popover.svelte +86 -0
  231. package/src/lib/popover/registry.json +6 -0
  232. package/src/lib/popover/types.ts +9 -0
  233. package/src/lib/progress/progress.svelte +256 -0
  234. package/src/lib/progress/registry.json +6 -0
  235. package/src/lib/progress/types.ts +15 -0
  236. package/src/lib/select/empty.svelte +25 -0
  237. package/src/lib/select/list.svelte +27 -0
  238. package/src/lib/select/option.svelte +64 -0
  239. package/src/lib/select/registry.json +6 -0
  240. package/src/lib/select/select.svelte +70 -0
  241. package/src/lib/select/trigger.svelte +86 -0
  242. package/src/lib/select/types.ts +41 -0
  243. package/src/lib/spinner/registry.json +6 -0
  244. package/src/lib/spinner/spinner.svelte +114 -0
  245. package/src/lib/spinner/types.ts +7 -0
  246. package/src/lib/surface/registry.json +6 -0
  247. package/src/lib/surface/surface.svelte +96 -0
  248. package/src/lib/surface/types.ts +28 -0
  249. package/src/lib/switch/registry.json +6 -0
  250. package/src/lib/switch/switch.svelte +162 -0
  251. package/src/lib/switch/types.ts +12 -0
  252. package/src/lib/text-area/registry.json +8 -0
  253. package/src/lib/text-area/text-area.svelte +186 -0
  254. package/src/lib/text-area/types.ts +13 -0
  255. package/src/lib/text-input/registry.json +8 -0
  256. package/src/lib/text-input/text-input.svelte +189 -0
  257. package/src/lib/text-input/types.ts +12 -0
  258. package/src/lib/theme/cli-theme.svelte +16 -0
  259. package/src/lib/theme/colors.svelte +102 -0
  260. package/src/lib/theme/fonts.svelte +10 -0
  261. package/src/lib/theme/registry.json +13 -0
  262. package/src/lib/theme/styles.svelte +50 -0
  263. package/src/lib/theme/surface.ts +18 -0
  264. package/src/lib/theme/surfaces.svelte +208 -0
  265. package/src/lib/theme/theme-mode-toggle.svelte +9 -0
  266. package/src/lib/theme/theme.svelte +16 -0
  267. package/src/lib/theme/types.ts +18 -0
  268. package/src/lib/tree-view/registry.json +15 -0
  269. package/src/lib/tree-view/tree-node/chevron-button.svelte +56 -0
  270. package/src/lib/tree-view/tree-node/content.svelte +62 -0
  271. package/src/lib/tree-view/tree-node/delete-button.svelte +52 -0
  272. package/src/lib/tree-view/tree-node/tree-node.svelte +111 -0
  273. package/src/lib/tree-view/tree-view-section.svelte +42 -0
  274. package/src/lib/tree-view/tree-view.svelte +65 -0
  275. package/src/lib/tree-view/types.ts +39 -0
  276. package/src/lib/types.ts +45 -0
  277. package/README.md +0 -110
  278. package/dist/base/button/button.svelte +0 -260
  279. package/dist/base/button/button.svelte.d.ts +0 -6
  280. package/dist/base/button/icon-button.svelte +0 -226
  281. package/dist/base/button/icon-button.svelte.d.ts +0 -6
  282. package/dist/base/button/index.d.ts +0 -2
  283. package/dist/base/button/index.js +0 -2
  284. package/dist/base/button/types.d.ts +0 -17
  285. package/dist/base/icon/icon.svelte +0 -118
  286. package/dist/base/icon/icon.svelte.d.ts +0 -7
  287. package/dist/base/icon/index.d.ts +0 -2
  288. package/dist/base/icon/index.js +0 -2
  289. package/dist/base/icon/types.d.ts +0 -10
  290. package/dist/base/index.d.ts +0 -12
  291. package/dist/base/index.js +0 -12
  292. package/dist/base/loading/circular-loading.svelte +0 -95
  293. package/dist/base/loading/circular-loading.svelte.d.ts +0 -4
  294. package/dist/base/loading/index.d.ts +0 -4
  295. package/dist/base/loading/index.js +0 -4
  296. package/dist/base/loading/morphing-shapes-loading.svelte +0 -241
  297. package/dist/base/loading/morphing-shapes-loading.svelte.d.ts +0 -4
  298. package/dist/base/loading/pulsing-dots-loading.svelte +0 -115
  299. package/dist/base/loading/pulsing-dots-loading.svelte.d.ts +0 -4
  300. package/dist/base/loading/textual-loading.svelte +0 -179
  301. package/dist/base/loading/textual-loading.svelte.d.ts +0 -4
  302. package/dist/base/loading/types.d.ts +0 -16
  303. package/dist/base/pill/index.d.ts +0 -1
  304. package/dist/base/pill/index.js +0 -1
  305. package/dist/base/pill/pill.svelte +0 -146
  306. package/dist/base/pill/types.d.ts +0 -9
  307. package/dist/base/progress-bar/index.d.ts +0 -1
  308. package/dist/base/progress-bar/index.js +0 -1
  309. package/dist/base/progress-bar/progress-bar.svelte +0 -174
  310. package/dist/base/progress-bar/progress-bar.svelte.d.ts +0 -4
  311. package/dist/base/progress-bar/types.d.ts +0 -9
  312. package/dist/base/select/index.d.ts +0 -2
  313. package/dist/base/select/index.js +0 -2
  314. package/dist/base/select/select.svelte +0 -145
  315. package/dist/base/select/types.d.ts +0 -16
  316. package/dist/base/slider/index.d.ts +0 -1
  317. package/dist/base/slider/index.js +0 -1
  318. package/dist/base/slider/slider.svelte +0 -192
  319. package/dist/base/slider/slider.svelte.d.ts +0 -6
  320. package/dist/base/slider/types.d.ts +0 -12
  321. package/dist/base/text-input/area-text-input.svelte +0 -105
  322. package/dist/base/text-input/area-text-input.svelte.d.ts +0 -6
  323. package/dist/base/text-input/index.d.ts +0 -2
  324. package/dist/base/text-input/index.js +0 -2
  325. package/dist/base/text-input/text-input.svelte +0 -213
  326. package/dist/base/text-input/text-input.svelte.d.ts +0 -6
  327. package/dist/base/text-input/types.d.ts +0 -27
  328. package/dist/base/theme/color-tokens.d.ts +0 -36
  329. package/dist/base/theme/color-tokens.js +0 -105
  330. package/dist/base/theme/index.d.ts +0 -3
  331. package/dist/base/theme/index.js +0 -3
  332. package/dist/base/theme/mode.d.ts +0 -3
  333. package/dist/base/theme/mode.js +0 -14
  334. package/dist/base/theme/theme.svelte +0 -87
  335. package/dist/base/theme/theme.svelte.d.ts +0 -3
  336. package/dist/base/theme/types.d.ts +0 -27
  337. package/dist/base/theme/types.js +0 -20
  338. package/dist/base/toggle/index.d.ts +0 -1
  339. package/dist/base/toggle/index.js +0 -1
  340. package/dist/base/toggle/toggle.svelte +0 -109
  341. package/dist/base/toggle/toggle.svelte.d.ts +0 -4
  342. package/dist/base/toggle/types.d.ts +0 -7
  343. package/dist/base/tree-view/index.d.ts +0 -3
  344. package/dist/base/tree-view/index.js +0 -3
  345. package/dist/base/tree-view/tree-node.svelte +0 -132
  346. package/dist/base/tree-view/tree-view.svelte +0 -56
  347. package/dist/base/tree-view/types.d.ts +0 -23
  348. package/dist/base/types.d.ts +0 -4
  349. /package/dist/{base/button → button}/types.js +0 -0
  350. /package/dist/{base/icon → checkbox}/types.js +0 -0
  351. /package/dist/{base/loading → combobox}/types.js +0 -0
  352. /package/dist/{base/pill → dialog}/types.js +0 -0
  353. /package/dist/{base/progress-bar/types.js → icon/names.js} +0 -0
  354. /package/dist/{base/select → icon}/types.js +0 -0
  355. /package/dist/{base/toggle → pill}/types.js +0 -0
  356. /package/dist/{base/slider → pill-choice-group}/types.js +0 -0
  357. /package/dist/{base/text-input → pill-group}/types.js +0 -0
  358. /package/dist/{base/tree-view → popover}/types.js +0 -0
  359. /package/dist/{base → progress}/types.js +0 -0
@@ -0,0 +1,189 @@
1
+ <script lang="ts">
2
+ /* eslint-disable max-lines -- Keep the native control and its scoped style recipe together. */
3
+ import Icon from '../icon/icon.svelte';
4
+ import type { TextInputProps } from './types.js';
5
+
6
+ let {
7
+ value = $bindable(),
8
+ onChange,
9
+ icon,
10
+ size = 'medium',
11
+ wide = false,
12
+ variant = 'neutral',
13
+ oninput,
14
+ defaultValue,
15
+ ...attributes
16
+ }: TextInputProps = $props();
17
+ const initialValue = value;
18
+
19
+ const handleInput = (event: Event & { currentTarget: EventTarget & HTMLInputElement }) => {
20
+ onChange?.(event.currentTarget.value);
21
+ oninput?.(event);
22
+ };
23
+ </script>
24
+
25
+ <div data-size={size} data-variant={variant} data-wide={wide || undefined}>
26
+ {#if icon}
27
+ <span><Icon {...icon} label={undefined} /></span>
28
+ {/if}
29
+ <input
30
+ {...attributes}
31
+ defaultValue={defaultValue ?? initialValue}
32
+ bind:value={() => value, (next) => (value = next == null ? '' : String(next))}
33
+ oninput={handleInput}
34
+ />
35
+ </div>
36
+
37
+ <style>
38
+ div {
39
+ --internal-height: 2.5rem;
40
+ --internal-padding: 0.85rem;
41
+ --internal-icon-size: 1.25rem;
42
+ --internal-tint: var(--color-foreground, black);
43
+ --internal-strength-light: 3%;
44
+ --internal-strength-dark: 3%;
45
+ --internal-opacity: 15%;
46
+ --internal-border: transparent;
47
+ --internal-highlight: color-mix(in srgb, var(--color-foreground, black) 12%, transparent);
48
+ box-sizing: border-box;
49
+ display: inline-flex;
50
+ align-items: center;
51
+ align-self: start;
52
+ gap: 0.6rem;
53
+ width: min(100%, 18rem);
54
+ min-width: 0;
55
+ max-width: 100%;
56
+ min-height: var(--internal-height);
57
+ padding-inline: var(--internal-padding);
58
+ border: 1px solid var(--internal-border);
59
+ border-radius: 0.5rem;
60
+ background: color-mix(
61
+ in srgb,
62
+ light-dark(
63
+ color-mix(
64
+ in srgb,
65
+ var(--internal-tint) var(--internal-strength-light),
66
+ var(--color-background, white)
67
+ ),
68
+ color-mix(
69
+ in srgb,
70
+ var(--internal-tint) var(--internal-strength-dark),
71
+ var(--color-background, white)
72
+ )
73
+ )
74
+ var(--internal-opacity),
75
+ transparent
76
+ );
77
+ color: var(--color-foreground, black);
78
+ transition: all 150ms ease;
79
+ -webkit-backdrop-filter: blur(0.5rem) saturate(120%);
80
+ backdrop-filter: blur(0.5rem) saturate(120%);
81
+ }
82
+ div[data-wide] {
83
+ width: 100%;
84
+ }
85
+ div[data-size='small'] {
86
+ --internal-height: 2rem;
87
+ --internal-padding: 0.65rem;
88
+ --internal-icon-size: 1rem;
89
+ }
90
+ div[data-size='large'] {
91
+ --internal-height: 3rem;
92
+ --internal-padding: 1rem;
93
+ --internal-icon-size: 1.5rem;
94
+ }
95
+ div[data-variant='soft'] {
96
+ --internal-strength-light: 4%;
97
+ --internal-strength-dark: 16%;
98
+ --internal-opacity: 85%;
99
+ --internal-border: light-dark(
100
+ color-mix(in srgb, var(--color-foreground, black) 12%, transparent),
101
+ color-mix(in srgb, var(--color-foreground, black) 30%, transparent)
102
+ );
103
+ box-shadow: inset 0 1px 0 var(--internal-highlight);
104
+ }
105
+ span {
106
+ display: inline-flex;
107
+ flex: 0 0 auto;
108
+ color: var(--color-muted, #666);
109
+ font-size: var(--internal-icon-size);
110
+ pointer-events: none;
111
+ }
112
+ input {
113
+ box-sizing: border-box;
114
+ width: 100%;
115
+ min-width: 0;
116
+ padding: 0;
117
+ border: 0;
118
+ outline: 0;
119
+ background: transparent;
120
+ color: inherit;
121
+ font: inherit;
122
+ font-size: 1rem;
123
+ font-weight: 200;
124
+ line-height: 1.4;
125
+ }
126
+ input {
127
+ height: calc(var(--internal-height) - 2px);
128
+ }
129
+ input[type='number'] {
130
+ appearance: textfield;
131
+ -moz-appearance: textfield;
132
+ }
133
+ input[type='number']::-webkit-inner-spin-button,
134
+ input[type='number']::-webkit-outer-spin-button {
135
+ -webkit-appearance: none;
136
+ margin: 0;
137
+ }
138
+ input::placeholder {
139
+ color: var(--color-muted, #666);
140
+ }
141
+ div[data-variant='soft']:hover:not(:has(:disabled)) {
142
+ --internal-border: light-dark(
143
+ color-mix(in srgb, var(--color-foreground, black) 18%, transparent),
144
+ color-mix(in srgb, var(--color-foreground, black) 38%, transparent)
145
+ );
146
+ --internal-strength-light: 6%;
147
+ --internal-strength-dark: 20%;
148
+ }
149
+ div:has(input:focus) {
150
+ --internal-tint: var(--color-primary, blue);
151
+ --internal-strength-light: 6%;
152
+ --internal-strength-dark: 12%;
153
+ --internal-border: color-mix(in srgb, var(--internal-tint) 55%, transparent);
154
+ box-shadow:
155
+ inset 0 1px 0 var(--internal-highlight),
156
+ 0 0 0 3px color-mix(in srgb, var(--internal-tint) 16%, transparent);
157
+ }
158
+ div:has(input:invalid, [aria-invalid='true']) {
159
+ --internal-tint: var(--color-error, #bc2436);
160
+ --internal-border: color-mix(in srgb, var(--internal-tint) 65%, transparent);
161
+ }
162
+ div:has(:disabled) {
163
+ opacity: 0.5;
164
+ cursor: not-allowed;
165
+ }
166
+ input:disabled {
167
+ cursor: inherit;
168
+ }
169
+ @media (prefers-reduced-motion: reduce) {
170
+ div {
171
+ transition: none;
172
+ }
173
+ }
174
+ @media (forced-colors: active) {
175
+ div {
176
+ border-color: ButtonText;
177
+ background: Canvas;
178
+ color: CanvasText;
179
+ box-shadow: none;
180
+ -webkit-backdrop-filter: none;
181
+ backdrop-filter: none;
182
+ }
183
+ div:has(input:focus) {
184
+ outline: 2px solid Highlight;
185
+ outline-offset: 2px;
186
+ box-shadow: none;
187
+ }
188
+ }
189
+ </style>
@@ -0,0 +1,4 @@
1
+ import type { TextInputProps } from './types.js';
2
+ declare const TextInput: import("svelte").Component<TextInputProps, {}, "value">;
3
+ type TextInput = ReturnType<typeof TextInput>;
4
+ export default TextInput;
@@ -0,0 +1,11 @@
1
+ import type { HTMLInputAttributes } from 'svelte/elements';
2
+ import type { BaseSize, Variant } from '../types.js';
3
+ import type { IconProps } from '../icon/types.js';
4
+ export type TextInputProps = Omit<HTMLInputAttributes, 'value' | 'size'> & {
5
+ value?: string;
6
+ onChange?: (value: string) => void;
7
+ icon?: IconProps;
8
+ size?: BaseSize;
9
+ wide?: boolean;
10
+ variant?: Exclude<Variant, 'filled'>;
11
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,16 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import Colors from './colors.svelte';
4
+ import Surfaces from './surfaces.svelte';
5
+ import Fonts from './fonts.svelte';
6
+ import Styles from './styles.svelte';
7
+
8
+ let { children }: { children?: Snippet } = $props();
9
+ </script>
10
+
11
+ <Colors />
12
+ <Surfaces />
13
+ <Fonts />
14
+ <Styles />
15
+
16
+ {@render children?.()}
@@ -0,0 +1,7 @@
1
+ import type { Snippet } from 'svelte';
2
+ type $$ComponentProps = {
3
+ children?: Snippet;
4
+ };
5
+ declare const CliTheme: import("svelte").Component<$$ComponentProps, {}, "">;
6
+ type CliTheme = ReturnType<typeof CliTheme>;
7
+ export default CliTheme;
@@ -0,0 +1,102 @@
1
+ <script lang="ts">
2
+ import type { ThemeProps } from './types.js';
3
+
4
+ let { palette = {} }: Pick<ThemeProps, 'palette'> = $props();
5
+ const roles = [
6
+ 'primary',
7
+ 'secondary',
8
+ 'background',
9
+ 'foreground',
10
+ 'muted',
11
+ 'info',
12
+ 'success',
13
+ 'warning',
14
+ 'error'
15
+ ] as const;
16
+ let paletteCss = $derived.by(() => {
17
+ const modes = 'light' in palette ? palette : { light: palette, dark: palette };
18
+ const declarations = (['light', 'dark'] as const).flatMap((mode) =>
19
+ roles.flatMap((role) => {
20
+ const value = modes[mode][role];
21
+ if (value === undefined) return [];
22
+ if (!/^#(?:[\da-f]{3}|[\da-f]{4}|[\da-f]{6}|[\da-f]{8})$/i.test(value))
23
+ throw new Error(`Theme palette ${mode}.${role} must be a hex color.`);
24
+ return `--user-input-${role}-${mode}: ${value};`;
25
+ })
26
+ );
27
+ return `:root { ${declarations.join(' ')} }`;
28
+ });
29
+ </script>
30
+
31
+ <svelte:head>
32
+ <svelte:element this={"style"}>{paletteCss}</svelte:element>
33
+ </svelte:head>
34
+
35
+ <style>
36
+ :global(:root) {
37
+ --color-primary-light: var(--user-input-primary-light, #1d4ed8);
38
+ --color-primary-dark: var(--user-input-primary-dark, #92b4df);
39
+ --color-secondary-light: var(--user-input-secondary-light, #c51630);
40
+ --color-secondary-dark: var(--user-input-secondary-dark, #df97a5);
41
+ --color-background-light: var(--user-input-background-light, #f1eee7);
42
+ --color-background-dark: var(--user-input-background-dark, #18191c);
43
+ --color-foreground-light: var(--user-input-foreground-light, #151515);
44
+ --color-foreground-dark: var(--user-input-foreground-dark, #eceef2);
45
+ --color-muted-light: var(--user-input-muted-light, #696661);
46
+ --color-muted-dark: var(--user-input-muted-dark, #acb0b8);
47
+ --color-info-light: var(--user-input-info-light, #2563b8);
48
+ --color-info-dark: var(--user-input-info-dark, #a3c1d1);
49
+ --color-success-light: var(--user-input-success-light, #34745a);
50
+ --color-success-dark: var(--user-input-success-dark, #abc3a3);
51
+ --color-warning-light: var(--user-input-warning-light, #945c08);
52
+ --color-warning-dark: var(--user-input-warning-dark, #d9bc82);
53
+ --color-error-light: var(--user-input-error-light, #bc2436);
54
+ --color-error-dark: var(--user-input-error-dark, #dfa4a7);
55
+ }
56
+
57
+ :global(:root),
58
+ :global(:root:has(meta[name='color-scheme'][content='light'])),
59
+ :global([data-theme='light']),
60
+ :global([data-theme='auto']) {
61
+ color-scheme: light;
62
+ --color-primary: var(--color-primary-light);
63
+ --color-secondary: var(--color-secondary-light);
64
+ --color-background: var(--color-background-light);
65
+ --color-foreground: var(--color-foreground-light);
66
+ --color-muted: var(--color-muted-light);
67
+ --color-info: var(--color-info-light);
68
+ --color-success: var(--color-success-light);
69
+ --color-warning: var(--color-warning-light);
70
+ --color-error: var(--color-error-light);
71
+ }
72
+
73
+ :global([data-theme='dark']),
74
+ :global(:root:has(meta[name='color-scheme'][content='dark'])) {
75
+ color-scheme: dark;
76
+ --color-primary: var(--color-primary-dark);
77
+ --color-secondary: var(--color-secondary-dark);
78
+ --color-background: var(--color-background-dark);
79
+ --color-foreground: var(--color-foreground-dark);
80
+ --color-muted: var(--color-muted-dark);
81
+ --color-info: var(--color-info-dark);
82
+ --color-success: var(--color-success-dark);
83
+ --color-warning: var(--color-warning-dark);
84
+ --color-error: var(--color-error-dark);
85
+ }
86
+
87
+ @media (prefers-color-scheme: dark) {
88
+ :global(:root:not([data-theme]):not(:has(meta[name='color-scheme'][content='light']))),
89
+ :global([data-theme='auto']) {
90
+ color-scheme: dark;
91
+ --color-primary: var(--color-primary-dark);
92
+ --color-secondary: var(--color-secondary-dark);
93
+ --color-background: var(--color-background-dark);
94
+ --color-foreground: var(--color-foreground-dark);
95
+ --color-muted: var(--color-muted-dark);
96
+ --color-info: var(--color-info-dark);
97
+ --color-success: var(--color-success-dark);
98
+ --color-warning: var(--color-warning-dark);
99
+ --color-error: var(--color-error-dark);
100
+ }
101
+ }
102
+ </style>
@@ -0,0 +1,4 @@
1
+ import type { ThemeProps } from './types.js';
2
+ declare const Colors: import("svelte").Component<Pick<ThemeProps, "palette">, {}, "">;
3
+ type Colors = ReturnType<typeof Colors>;
4
+ export default Colors;
@@ -0,0 +1,10 @@
1
+ <style>
2
+ @font-face {
3
+ font-family: 'Material Symbols Outlined';
4
+ font-style: normal;
5
+ font-display: block;
6
+ font-weight: 100 700;
7
+ src: url('@fontsource-variable/material-symbols-outlined/files/material-symbols-outlined-latin-fill-normal.woff2')
8
+ format('woff2-variations');
9
+ }
10
+ </style>
@@ -0,0 +1,26 @@
1
+ export default Fonts;
2
+ type Fonts = SvelteComponent<{
3
+ [x: string]: never;
4
+ }, {
5
+ [evt: string]: CustomEvent<any>;
6
+ }, {}> & {
7
+ $$bindings?: string | undefined;
8
+ };
9
+ declare const Fonts: $$__sveltets_2_IsomorphicComponent<{
10
+ [x: string]: never;
11
+ }, {
12
+ [evt: string]: CustomEvent<any>;
13
+ }, {}, {}, string>;
14
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
15
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
16
+ $$bindings?: Bindings;
17
+ } & Exports;
18
+ (internal: unknown, props: {
19
+ $$events?: Events;
20
+ $$slots?: Slots;
21
+ }): Exports & {
22
+ $set?: any;
23
+ $on?: any;
24
+ };
25
+ z_$$bindings?: Bindings;
26
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "id": "theme",
3
+ "files": [
4
+ "cli-theme.svelte",
5
+ "colors.svelte",
6
+ "surfaces.svelte",
7
+ "fonts.svelte",
8
+ "styles.svelte",
9
+ "surface.ts"
10
+ ],
11
+ "exports": { "Theme": "cli-theme.svelte" },
12
+ "dependencies": []
13
+ }
@@ -0,0 +1,50 @@
1
+ <style>
2
+ :global(body) {
3
+ background: var(--color-background);
4
+ color: var(--color-foreground);
5
+ }
6
+
7
+ :global(*) {
8
+ margin: 0;
9
+ padding: 0;
10
+ box-sizing: border-box;
11
+ }
12
+
13
+ :global(*) {
14
+ scrollbar-width: thin;
15
+ scrollbar-color: color-mix(in srgb, var(--color-muted) 60%, transparent) transparent;
16
+ }
17
+
18
+ @supports selector(::-webkit-scrollbar) {
19
+ :global(*) {
20
+ scrollbar-width: auto;
21
+ scrollbar-color: auto;
22
+ }
23
+ :global(::-webkit-scrollbar) {
24
+ width: 8px;
25
+ height: 8px;
26
+ }
27
+ :global(::-webkit-scrollbar-track),
28
+ :global(::-webkit-scrollbar-corner) {
29
+ background: transparent;
30
+ }
31
+ :global(::-webkit-scrollbar-thumb) {
32
+ border: 2px solid transparent;
33
+ border-radius: 999px;
34
+ background: color-mix(in srgb, var(--color-muted) 60%, transparent);
35
+ background-clip: padding-box;
36
+ }
37
+ :global(::-webkit-scrollbar-thumb:hover) {
38
+ background-color: var(--color-primary);
39
+ }
40
+ }
41
+
42
+ @media (forced-colors: active) {
43
+ :global(*) {
44
+ scrollbar-color: auto;
45
+ }
46
+ :global(::-webkit-scrollbar-thumb) {
47
+ background-color: CanvasText;
48
+ }
49
+ }
50
+ </style>
@@ -0,0 +1,26 @@
1
+ export default Styles;
2
+ type Styles = SvelteComponent<{
3
+ [x: string]: never;
4
+ }, {
5
+ [evt: string]: CustomEvent<any>;
6
+ }, {}> & {
7
+ $$bindings?: string | undefined;
8
+ };
9
+ declare const Styles: $$__sveltets_2_IsomorphicComponent<{
10
+ [x: string]: never;
11
+ }, {
12
+ [evt: string]: CustomEvent<any>;
13
+ }, {}, {}, string>;
14
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
15
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
16
+ $$bindings?: Bindings;
17
+ } & Exports;
18
+ (internal: unknown, props: {
19
+ $$events?: Events;
20
+ $$slots?: Slots;
21
+ }): Exports & {
22
+ $set?: any;
23
+ $on?: any;
24
+ };
25
+ z_$$bindings?: Bindings;
26
+ }
@@ -0,0 +1,3 @@
1
+ import type { SurfaceBaseProps } from '../types.js';
2
+ /** Compose typed surface classes; render Theme once to load their paint recipes. */
3
+ export declare const surface: ({ variant, color, shadow, hover }?: SurfaceBaseProps) => string;
@@ -0,0 +1,10 @@
1
+ /** Compose typed surface classes; render Theme once to load their paint recipes. */
2
+ export const surface = ({ variant = 'neutral', color = 'foreground', shadow, hover } = {}) => [
3
+ 'surface',
4
+ `surface-${variant}`,
5
+ `surface-${color}`,
6
+ shadow && `surface-shadow-${shadow === true ? 'medium' : shadow}`,
7
+ hover && `surface-hover-${hover}`
8
+ ]
9
+ .filter(Boolean)
10
+ .join(' ');