@jakubmazanec/ui 0.1.0-unstable.0c19abe

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 (357) hide show
  1. package/README.md +40 -0
  2. package/build/components/Button.d.ts +24 -0
  3. package/build/components/Button.js +51 -0
  4. package/build/components/Button.js.map +7 -0
  5. package/build/components/Card.d.ts +5 -0
  6. package/build/components/Card.js +7 -0
  7. package/build/components/Card.js.map +7 -0
  8. package/build/components/Checkbox.d.ts +24 -0
  9. package/build/components/Checkbox.js +63 -0
  10. package/build/components/Checkbox.js.map +7 -0
  11. package/build/components/CheckboxField.d.ts +11 -0
  12. package/build/components/CheckboxField.js +14 -0
  13. package/build/components/CheckboxField.js.map +7 -0
  14. package/build/components/Combobox.d.ts +33 -0
  15. package/build/components/Combobox.js +121 -0
  16. package/build/components/Combobox.js.map +7 -0
  17. package/build/components/ConfirmDialog.d.ts +23 -0
  18. package/build/components/ConfirmDialog.js +40 -0
  19. package/build/components/ConfirmDialog.js.map +7 -0
  20. package/build/components/Dialog.d.ts +18 -0
  21. package/build/components/Dialog.js +21 -0
  22. package/build/components/Dialog.js.map +7 -0
  23. package/build/components/DialogPanel.d.ts +10 -0
  24. package/build/components/DialogPanel.js +10 -0
  25. package/build/components/DialogPanel.js.map +7 -0
  26. package/build/components/DialogTitle.d.ts +10 -0
  27. package/build/components/DialogTitle.js +10 -0
  28. package/build/components/DialogTitle.js.map +7 -0
  29. package/build/components/Error.d.ts +10 -0
  30. package/build/components/Error.js +14 -0
  31. package/build/components/Error.js.map +7 -0
  32. package/build/components/Field.d.ts +11 -0
  33. package/build/components/Field.js +14 -0
  34. package/build/components/Field.js.map +7 -0
  35. package/build/components/Form.d.ts +13 -0
  36. package/build/components/Form.js +11 -0
  37. package/build/components/Form.js.map +7 -0
  38. package/build/components/Input.d.ts +42 -0
  39. package/build/components/Input.js +129 -0
  40. package/build/components/Input.js.map +7 -0
  41. package/build/components/Label.d.ts +10 -0
  42. package/build/components/Label.js +10 -0
  43. package/build/components/Label.js.map +7 -0
  44. package/build/components/Listbox.d.ts +32 -0
  45. package/build/components/Listbox.js +75 -0
  46. package/build/components/Listbox.js.map +7 -0
  47. package/build/components/Menu.d.ts +10 -0
  48. package/build/components/Menu.js +10 -0
  49. package/build/components/Menu.js.map +7 -0
  50. package/build/components/MenuButton.d.ts +10 -0
  51. package/build/components/MenuButton.js +10 -0
  52. package/build/components/MenuButton.js.map +7 -0
  53. package/build/components/MenuItem.d.ts +10 -0
  54. package/build/components/MenuItem.js +10 -0
  55. package/build/components/MenuItem.js.map +7 -0
  56. package/build/components/MenuItems.d.ts +10 -0
  57. package/build/components/MenuItems.js +10 -0
  58. package/build/components/MenuItems.js.map +7 -0
  59. package/build/components/Popover.d.ts +10 -0
  60. package/build/components/Popover.js +10 -0
  61. package/build/components/Popover.js.map +7 -0
  62. package/build/components/PopoverButton.d.ts +13 -0
  63. package/build/components/PopoverButton.js +28 -0
  64. package/build/components/PopoverButton.js.map +7 -0
  65. package/build/components/PopoverPanel.d.ts +16 -0
  66. package/build/components/PopoverPanel.js +24 -0
  67. package/build/components/PopoverPanel.js.map +7 -0
  68. package/build/components/Radio.d.ts +24 -0
  69. package/build/components/Radio.js +39 -0
  70. package/build/components/Radio.js.map +7 -0
  71. package/build/components/RadioField.d.ts +10 -0
  72. package/build/components/RadioField.js +14 -0
  73. package/build/components/RadioField.js.map +7 -0
  74. package/build/components/RadioGroupField.d.ts +20 -0
  75. package/build/components/RadioGroupField.js +82 -0
  76. package/build/components/RadioGroupField.js.map +7 -0
  77. package/build/components/Spinner.d.ts +7 -0
  78. package/build/components/Spinner.js +52 -0
  79. package/build/components/Spinner.js.map +7 -0
  80. package/build/components/Table.d.ts +16 -0
  81. package/build/components/Table.js +20 -0
  82. package/build/components/Table.js.map +7 -0
  83. package/build/components/TableCell.d.ts +10 -0
  84. package/build/components/TableCell.js +9 -0
  85. package/build/components/TableCell.js.map +7 -0
  86. package/build/components/TableHeader.d.ts +10 -0
  87. package/build/components/TableHeader.js +8 -0
  88. package/build/components/TableHeader.js.map +7 -0
  89. package/build/components/TableHeaderCell.d.ts +10 -0
  90. package/build/components/TableHeaderCell.js +9 -0
  91. package/build/components/TableHeaderCell.js.map +7 -0
  92. package/build/components/TableRow.d.ts +10 -0
  93. package/build/components/TableRow.js +9 -0
  94. package/build/components/TableRow.js.map +7 -0
  95. package/build/components/Textarea.d.ts +39 -0
  96. package/build/components/Textarea.js +104 -0
  97. package/build/components/Textarea.js.map +7 -0
  98. package/build/components/internals/fieldNameContext.d.ts +2 -0
  99. package/build/components/internals/fieldNameContext.js +4 -0
  100. package/build/components/internals/fieldNameContext.js.map +7 -0
  101. package/build/components/internals/formContext.d.ts +3 -0
  102. package/build/components/internals/formContext.js +4 -0
  103. package/build/components/internals/formContext.js.map +7 -0
  104. package/build/components/internals/useField.d.ts +6 -0
  105. package/build/components/internals/useField.js +18 -0
  106. package/build/components/internals/useField.js.map +7 -0
  107. package/build/components/internals/useFieldName.d.ts +1 -0
  108. package/build/components/internals/useFieldName.js +7 -0
  109. package/build/components/internals/useFieldName.js.map +7 -0
  110. package/build/components/internals/useForm.d.ts +1 -0
  111. package/build/components/internals/useForm.js +7 -0
  112. package/build/components/internals/useForm.js.map +7 -0
  113. package/build/components/internals.d.ts +5 -0
  114. package/build/components/internals.js +7 -0
  115. package/build/components/internals.js.map +7 -0
  116. package/build/components.d.ts +32 -0
  117. package/build/components.js +34 -0
  118. package/build/components.js.map +7 -0
  119. package/build/development/createTailwindConfig.d.ts +18 -0
  120. package/build/development/createTailwindConfig.js +125 -0
  121. package/build/development/createTailwindConfig.js.map +7 -0
  122. package/build/development/createTailwindMerge.d.ts +2 -0
  123. package/build/development/createTailwindMerge.js +74 -0
  124. package/build/development/createTailwindMerge.js.map +7 -0
  125. package/build/development/defaultTailwindConfig.d.ts +72 -0
  126. package/build/development/defaultTailwindConfig.js +45 -0
  127. package/build/development/defaultTailwindConfig.js.map +7 -0
  128. package/build/development/internals/PaletteConfig.d.ts +6 -0
  129. package/build/development/internals/PaletteConfig.js +2 -0
  130. package/build/development/internals/PaletteConfig.js.map +7 -0
  131. package/build/development/internals/SwatchValue.d.ts +9 -0
  132. package/build/development/internals/SwatchValue.js +2 -0
  133. package/build/development/internals/SwatchValue.js.map +7 -0
  134. package/build/development/internals/clamp.d.ts +1 -0
  135. package/build/development/internals/clamp.js +5 -0
  136. package/build/development/internals/clamp.js.map +7 -0
  137. package/build/development/internals/constants.d.ts +2 -0
  138. package/build/development/internals/constants.js +22 -0
  139. package/build/development/internals/constants.js.map +7 -0
  140. package/build/development/internals/createDisplayColor.d.ts +1 -0
  141. package/build/development/internals/createDisplayColor.js +24 -0
  142. package/build/development/internals/createDisplayColor.js.map +7 -0
  143. package/build/development/internals/createDistributionValues.d.ts +4 -0
  144. package/build/development/internals/createDistributionValues.js +32 -0
  145. package/build/development/internals/createDistributionValues.js.map +7 -0
  146. package/build/development/internals/createHueScale.d.ts +4 -0
  147. package/build/development/internals/createHueScale.js +15 -0
  148. package/build/development/internals/createHueScale.js.map +7 -0
  149. package/build/development/internals/createPalette.d.ts +16 -0
  150. package/build/development/internals/createPalette.js +36 -0
  151. package/build/development/internals/createPalette.js.map +7 -0
  152. package/build/development/internals/createSaturationScale.d.ts +4 -0
  153. package/build/development/internals/createSaturationScale.js +18 -0
  154. package/build/development/internals/createSaturationScale.js.map +7 -0
  155. package/build/development/internals/createSwatches.d.ts +10 -0
  156. package/build/development/internals/createSwatches.js +31 -0
  157. package/build/development/internals/createSwatches.js.map +7 -0
  158. package/build/development/internals/hexToHsl.d.ts +5 -0
  159. package/build/development/internals/hexToHsl.js +37 -0
  160. package/build/development/internals/hexToHsl.js.map +7 -0
  161. package/build/development/internals/hexToRgb.d.ts +5 -0
  162. package/build/development/internals/hexToRgb.js +21 -0
  163. package/build/development/internals/hexToRgb.js.map +7 -0
  164. package/build/development/internals/hslToHex.d.ts +1 -0
  165. package/build/development/internals/hslToHex.js +19 -0
  166. package/build/development/internals/hslToHex.js.map +7 -0
  167. package/build/development/internals/hslToRgb.d.ts +5 -0
  168. package/build/development/internals/hslToRgb.js +42 -0
  169. package/build/development/internals/hslToRgb.js.map +7 -0
  170. package/build/development/internals/isHex.d.ts +1 -0
  171. package/build/development/internals/isHex.js +7 -0
  172. package/build/development/internals/isHex.js.map +7 -0
  173. package/build/development/internals/resolveModule.d.ts +1 -0
  174. package/build/development/internals/resolveModule.js +9 -0
  175. package/build/development/internals/resolveModule.js.map +7 -0
  176. package/build/development/internals/round.d.ts +1 -0
  177. package/build/development/internals/round.js +6 -0
  178. package/build/development/internals/round.js.map +7 -0
  179. package/build/development/internals/unsignedModulo.d.ts +1 -0
  180. package/build/development/internals/unsignedModulo.js +5 -0
  181. package/build/development/internals/unsignedModulo.js.map +7 -0
  182. package/build/development/internals.d.ts +1 -0
  183. package/build/development/internals.js +3 -0
  184. package/build/development/internals.js.map +7 -0
  185. package/build/development.d.ts +3 -0
  186. package/build/development.js +5 -0
  187. package/build/development.js.map +7 -0
  188. package/build/fonts.css +15 -0
  189. package/build/fonts.css.map +7 -0
  190. package/build/inter-variable-75YQYCJN.woff2 +0 -0
  191. package/build/inter-variable-italic-54HMV74W.woff2 +0 -0
  192. package/build/inter-variable-italic.js +2 -0
  193. package/build/inter-variable-italic.js.map +7 -0
  194. package/build/inter-variable.js +2 -0
  195. package/build/inter-variable.js.map +7 -0
  196. package/build/main.d.ts +5 -0
  197. package/build/main.js +7 -0
  198. package/build/main.js.map +7 -0
  199. package/build/theme/Theme.d.ts +40 -0
  200. package/build/theme/Theme.js +2 -0
  201. package/build/theme/Theme.js.map +7 -0
  202. package/build/theme/ThemeProvider.d.ts +6 -0
  203. package/build/theme/ThemeProvider.js +7 -0
  204. package/build/theme/ThemeProvider.js.map +7 -0
  205. package/build/theme/defaultTheme.d.ts +2 -0
  206. package/build/theme/defaultTheme.js +331 -0
  207. package/build/theme/defaultTheme.js.map +7 -0
  208. package/build/theme/internals/ClassName.d.ts +1 -0
  209. package/build/theme/internals/ClassName.js +2 -0
  210. package/build/theme/internals/ClassName.js.map +7 -0
  211. package/build/theme/internals/ComponentProps.d.ts +7 -0
  212. package/build/theme/internals/ComponentProps.js +2 -0
  213. package/build/theme/internals/ComponentProps.js.map +7 -0
  214. package/build/theme/internals/ComponentTheme.d.ts +25 -0
  215. package/build/theme/internals/ComponentTheme.js +2 -0
  216. package/build/theme/internals/ComponentTheme.js.map +7 -0
  217. package/build/theme/internals/ComponentThemeCompoundVariants.d.ts +12 -0
  218. package/build/theme/internals/ComponentThemeCompoundVariants.js +2 -0
  219. package/build/theme/internals/ComponentThemeCompoundVariants.js.map +7 -0
  220. package/build/theme/internals/ComponentThemeDefinition.d.ts +6 -0
  221. package/build/theme/internals/ComponentThemeDefinition.js +2 -0
  222. package/build/theme/internals/ComponentThemeDefinition.js.map +7 -0
  223. package/build/theme/internals/ComponentThemeDefinitionElements.d.ts +1 -0
  224. package/build/theme/internals/ComponentThemeDefinitionElements.js +2 -0
  225. package/build/theme/internals/ComponentThemeDefinitionElements.js.map +7 -0
  226. package/build/theme/internals/ComponentThemeDefinitionVariants.d.ts +3 -0
  227. package/build/theme/internals/ComponentThemeDefinitionVariants.js +2 -0
  228. package/build/theme/internals/ComponentThemeDefinitionVariants.js.map +7 -0
  229. package/build/theme/internals/ComponentThemeProps.d.ts +5 -0
  230. package/build/theme/internals/ComponentThemeProps.js +2 -0
  231. package/build/theme/internals/ComponentThemeProps.js.map +7 -0
  232. package/build/theme/internals/ComponentThemeVariants.d.ts +14 -0
  233. package/build/theme/internals/ComponentThemeVariants.js +2 -0
  234. package/build/theme/internals/ComponentThemeVariants.js.map +7 -0
  235. package/build/theme/internals/UseComponentTheme.d.ts +21 -0
  236. package/build/theme/internals/UseComponentTheme.js +2 -0
  237. package/build/theme/internals/UseComponentTheme.js.map +7 -0
  238. package/build/theme/internals/UseComponentThemeReturn.d.ts +6 -0
  239. package/build/theme/internals/UseComponentThemeReturn.js +2 -0
  240. package/build/theme/internals/UseComponentThemeReturn.js.map +7 -0
  241. package/build/theme/internals/booleanToString.d.ts +1 -0
  242. package/build/theme/internals/booleanToString.js +5 -0
  243. package/build/theme/internals/booleanToString.js.map +7 -0
  244. package/build/theme/internals/createComponentTheme.d.ts +3 -0
  245. package/build/theme/internals/createComponentTheme.js +36 -0
  246. package/build/theme/internals/createComponentTheme.js.map +7 -0
  247. package/build/theme/internals/createUseComponentThemeReturn.d.ts +15 -0
  248. package/build/theme/internals/createUseComponentThemeReturn.js +51 -0
  249. package/build/theme/internals/createUseComponentThemeReturn.js.map +7 -0
  250. package/build/theme/internals/cx.d.ts +2 -0
  251. package/build/theme/internals/cx.js +6 -0
  252. package/build/theme/internals/cx.js.map +7 -0
  253. package/build/theme/internals/pickPropertyIfExists.d.ts +4 -0
  254. package/build/theme/internals/pickPropertyIfExists.js +11 -0
  255. package/build/theme/internals/pickPropertyIfExists.js.map +7 -0
  256. package/build/theme/internals/themeContext.d.ts +217 -0
  257. package/build/theme/internals/themeContext.js +4 -0
  258. package/build/theme/internals/themeContext.js.map +7 -0
  259. package/build/theme/internals/useTheme.d.ts +216 -0
  260. package/build/theme/internals/useTheme.js +7 -0
  261. package/build/theme/internals/useTheme.js.map +7 -0
  262. package/build/theme/internals.d.ts +18 -0
  263. package/build/theme/internals.js +20 -0
  264. package/build/theme/internals.js.map +7 -0
  265. package/build/theme.d.ts +3 -0
  266. package/build/theme.js +5 -0
  267. package/build/theme.js.map +7 -0
  268. package/package.json +93 -0
  269. package/source/components/Button.ts +74 -0
  270. package/source/components/Card.tsx +10 -0
  271. package/source/components/Checkbox.tsx +75 -0
  272. package/source/components/CheckboxField.tsx +28 -0
  273. package/source/components/Combobox.tsx +160 -0
  274. package/source/components/ConfirmDialog.tsx +67 -0
  275. package/source/components/Dialog.tsx +34 -0
  276. package/source/components/DialogPanel.tsx +18 -0
  277. package/source/components/DialogTitle.tsx +18 -0
  278. package/source/components/Error.tsx +27 -0
  279. package/source/components/Field.tsx +28 -0
  280. package/source/components/Form.tsx +30 -0
  281. package/source/components/Input.tsx +176 -0
  282. package/source/components/Label.tsx +18 -0
  283. package/source/components/Listbox.tsx +113 -0
  284. package/source/components/Menu.tsx +19 -0
  285. package/source/components/MenuButton.tsx +18 -0
  286. package/source/components/MenuItem.tsx +19 -0
  287. package/source/components/MenuItems.tsx +18 -0
  288. package/source/components/Popover.tsx +18 -0
  289. package/source/components/PopoverButton.tsx +45 -0
  290. package/source/components/PopoverPanel.tsx +37 -0
  291. package/source/components/Radio.tsx +46 -0
  292. package/source/components/RadioField.tsx +34 -0
  293. package/source/components/RadioGroupField.tsx +101 -0
  294. package/source/components/Spinner.tsx +46 -0
  295. package/source/components/Table.tsx +31 -0
  296. package/source/components/TableCell.tsx +17 -0
  297. package/source/components/TableHeader.tsx +19 -0
  298. package/source/components/TableHeaderCell.tsx +17 -0
  299. package/source/components/TableRow.tsx +17 -0
  300. package/source/components/Textarea.tsx +142 -0
  301. package/source/components/internals/fieldNameContext.ts +3 -0
  302. package/source/components/internals/formContext.ts +4 -0
  303. package/source/components/internals/useField.ts +19 -0
  304. package/source/components/internals/useFieldName.ts +7 -0
  305. package/source/components/internals/useForm.ts +7 -0
  306. package/source/components/internals.ts +5 -0
  307. package/source/components.ts +32 -0
  308. package/source/development/createTailwindConfig.ts +153 -0
  309. package/source/development/createTailwindMerge.ts +101 -0
  310. package/source/development/defaultTailwindConfig.ts +45 -0
  311. package/source/development/internals/PaletteConfig.ts +6 -0
  312. package/source/development/internals/SwatchValue.ts +9 -0
  313. package/source/development/internals/clamp.ts +3 -0
  314. package/source/development/internals/constants.ts +4 -0
  315. package/source/development/internals/createDisplayColor.ts +29 -0
  316. package/source/development/internals/createDistributionValues.ts +38 -0
  317. package/source/development/internals/createHueScale.ts +17 -0
  318. package/source/development/internals/createPalette.ts +54 -0
  319. package/source/development/internals/createSaturationScale.ts +21 -0
  320. package/source/development/internals/createSwatches.ts +34 -0
  321. package/source/development/internals/hexToHsl.ts +45 -0
  322. package/source/development/internals/hexToRgb.ts +23 -0
  323. package/source/development/internals/hslToHex.ts +23 -0
  324. package/source/development/internals/hslToRgb.ts +43 -0
  325. package/source/development/internals/isHex.ts +7 -0
  326. package/source/development/internals/resolveModule.ts +9 -0
  327. package/source/development/internals/round.ts +5 -0
  328. package/source/development/internals/unsignedModulo.ts +3 -0
  329. package/source/development/internals.ts +1 -0
  330. package/source/development.ts +3 -0
  331. package/source/fonts.css +15 -0
  332. package/source/inter-variable-italic.woff2 +0 -0
  333. package/source/inter-variable.woff2 +0 -0
  334. package/source/main.ts +8 -0
  335. package/source/theme/Theme.ts +72 -0
  336. package/source/theme/ThemeProvider.tsx +12 -0
  337. package/source/theme/defaultTheme.ts +370 -0
  338. package/source/theme/internals/ClassName.ts +1 -0
  339. package/source/theme/internals/ComponentProps.ts +13 -0
  340. package/source/theme/internals/ComponentTheme.ts +33 -0
  341. package/source/theme/internals/ComponentThemeCompoundVariants.ts +20 -0
  342. package/source/theme/internals/ComponentThemeDefinition.ts +7 -0
  343. package/source/theme/internals/ComponentThemeDefinitionElements.ts +1 -0
  344. package/source/theme/internals/ComponentThemeDefinitionVariants.ts +3 -0
  345. package/source/theme/internals/ComponentThemeProps.ts +11 -0
  346. package/source/theme/internals/ComponentThemeVariants.ts +24 -0
  347. package/source/theme/internals/UseComponentTheme.ts +22 -0
  348. package/source/theme/internals/UseComponentThemeReturn.ts +15 -0
  349. package/source/theme/internals/booleanToString.ts +6 -0
  350. package/source/theme/internals/createComponentTheme.ts +67 -0
  351. package/source/theme/internals/createUseComponentThemeReturn.ts +87 -0
  352. package/source/theme/internals/cx.ts +10 -0
  353. package/source/theme/internals/pickPropertyIfExists.ts +24 -0
  354. package/source/theme/internals/themeContext.ts +5 -0
  355. package/source/theme/internals/useTheme.ts +7 -0
  356. package/source/theme/internals.ts +18 -0
  357. package/source/theme.ts +3 -0
@@ -0,0 +1,370 @@
1
+ import {type Theme} from './Theme.js';
2
+
3
+ export const defaultTheme: Theme = {
4
+ Button: {
5
+ className: 'rounded flex items-center justify-center text-nowrap font-sans',
6
+ variants: {
7
+ type: {
8
+ solid: 'bg-blue-500 text-white hover:bg-blue-600',
9
+ outline: 'border border-blue-500 text-blue-500 hover:bg-blue-50',
10
+ text: 'border border-transparent hover:border hover:border-blue-500 text-blue-500',
11
+ icon: 'border border-transparent hover:border hover:border-blue-500',
12
+ },
13
+ size: {
14
+ small: 'text-xs leading-6 px-2 py-0.5 h-7 gap-x-1.5',
15
+ medium: 'text-sm leading-6 px-3 py-1 h-8 gap-x-1.5',
16
+ large: 'text-base leading-6 px-4 py-2 h-10 gap-x-1.5',
17
+ },
18
+ disabled: {
19
+ true: '',
20
+ false: '',
21
+ },
22
+ },
23
+ compoundVariants: [
24
+ {
25
+ type: 'outline',
26
+ size: 'small',
27
+ className: 'px-[0.4375rem] py-[0.0625rem]',
28
+ },
29
+ {
30
+ type: 'outline',
31
+ size: 'medium',
32
+ className: 'px-[0.6875rem] py-[0.1875rem]',
33
+ },
34
+ {
35
+ type: 'outline',
36
+ size: 'large',
37
+ className: 'px-[0.9375rem] py-[0.4375rem]',
38
+ },
39
+ {
40
+ type: 'text',
41
+ size: 'small',
42
+ className: 'px-[0.0625rem] py-[0.0625rem]',
43
+ },
44
+ {
45
+ type: 'text',
46
+ size: 'medium',
47
+ className: 'px-[0.1875rem] py-[0.1875rem]',
48
+ },
49
+ {
50
+ type: 'text',
51
+ size: 'large',
52
+ className: 'px-[0.4375rem] py-[0.4375rem]',
53
+ },
54
+ {
55
+ type: 'icon',
56
+ size: 'small',
57
+ className: 'px-[0.0625rem] py-[0.0625rem]',
58
+ },
59
+ {
60
+ type: 'icon',
61
+ size: 'medium',
62
+ className: 'px-[0.1875rem] py-[0.1875rem]',
63
+ },
64
+ {
65
+ type: 'icon',
66
+ size: 'large',
67
+ className: 'px-[0.4375rem] py-[0.4375rem]',
68
+ },
69
+ {
70
+ type: 'solid',
71
+ disabled: true,
72
+ className: 'bg-gray-200 text-white',
73
+ },
74
+ {
75
+ type: 'outline',
76
+ disabled: true,
77
+ className: 'border-gray-200 text-gray-200',
78
+ },
79
+ {
80
+ type: 'text',
81
+ disabled: true,
82
+ className: 'hover:border-transparent text-gray-200',
83
+ },
84
+ {
85
+ type: 'icon',
86
+ disabled: true,
87
+ className: 'hover:border-transparent text-gray-200',
88
+ },
89
+ ],
90
+ },
91
+
92
+ Checkbox: {
93
+ classNames: {
94
+ root: 'flex items-center text-gray-95',
95
+ checked:
96
+ 'mr-2 flex hidden h-5 w-5 items-center justify-center rounded bg-blue-500 text-white group-data-[checked]:flex',
97
+ unchecked:
98
+ 'mr-2 flex h-5 w-5 items-center justify-center rounded border border-gray-200 bg-white group-data-[checked]:hidden',
99
+ icon: 'h-4 w-4',
100
+ },
101
+ variants: {
102
+ disabled: {
103
+ true: {
104
+ root: 'text-gray-200',
105
+ checked: 'bg-gray-500 opacity-50',
106
+ unchecked: 'border-gray-100',
107
+ icon: '',
108
+ },
109
+ false: {
110
+ root: '',
111
+ checked: '',
112
+ unchecked: '',
113
+ icon: '',
114
+ },
115
+ },
116
+ },
117
+ },
118
+
119
+ Radio: {
120
+ classNames: {
121
+ root: 'flex items-center text-gray-95',
122
+ checked:
123
+ 'mr-2 flex hidden h-5 w-5 items-center justify-center rounded-full bg-blue-500 text-white group-data-[checked]:flex',
124
+ unchecked:
125
+ 'mr-2 flex h-5 w-5 items-center justify-center rounded-full border border-gray-200 bg-white group-data-[checked]:hidden',
126
+ icon: 'h-[9px] w-[9px]',
127
+ },
128
+ variants: {
129
+ disabled: {
130
+ true: {
131
+ root: 'text-gray-200',
132
+ checked: 'bg-gray-500',
133
+ unchecked: 'border-gray-100',
134
+ icon: '',
135
+ },
136
+ false: {
137
+ root: '',
138
+ checked: '',
139
+ unchecked: '',
140
+ icon: '',
141
+ },
142
+ },
143
+ },
144
+ },
145
+
146
+ Listbox: {
147
+ classNames: {
148
+ root: 'flex w-full items-center justify-between rounded border border-solid border-gray-200 bg-white text-sm leading-6 px-[0.4375rem] py-[0.1875rem] h-7 text-gray-950',
149
+ label: '',
150
+ icon: 'h-6 w-6 text-gray-400',
151
+ panel:
152
+ 'shadow absolute left-0 right-0 top-full z-10 m-0 mt-1 list-none rounded-lg border border-solid border-gray-200 bg-white p-0 text-left',
153
+ items: 'max-h-40 overflow-hidden overflow-y-scroll',
154
+ item: 'px-[0.4375rem] py-[0.1875rem] text-sm hover:bg-gray-50 ui-selected:bg-gray-100 ui-active:bg-gray-50',
155
+ },
156
+ variants: {
157
+ disabled: {
158
+ true: {
159
+ root: 'border-gray-100 text-gray-200 cursor-not-allowed',
160
+ label: '',
161
+ icon: 'text-gray-200',
162
+ panel: 'border-gray-100',
163
+ items: '',
164
+ item: 'text-gray-200 cursor-not-allowed',
165
+ },
166
+ false: {
167
+ root: '',
168
+ label: '',
169
+ icon: '',
170
+ panel: '',
171
+ items: '',
172
+ item: '',
173
+ },
174
+ },
175
+ },
176
+ },
177
+
178
+ Combobox: {
179
+ classNames: {
180
+ root: 'flex w-full items-center justify-between rounded border border-solid border-gray-200 bg-white text-sm leading-6 px-[0.4375rem] py-[0.1875rem] h-7 text-gray-950',
181
+ label: '',
182
+ icon: 'h-6 w-6 text-gray-400',
183
+ panel:
184
+ 'shadow absolute left-0 right-0 top-full z-10 m-0 mt-1 list-none rounded-lg border border-solid border-gray-200 bg-white p-0 text-left',
185
+ items: 'max-h-32 overflow-hidden overflow-y-scroll',
186
+ item: 'px-[0.4375rem] py-[0.1875rem] text-sm hover:bg-gray-50 ui-selected:bg-gray-100 ui-active:bg-gray-50',
187
+ input:
188
+ 'flex w-[calc(100%-1rem)] items-center justify-between rounded border border-solid border-gray-200 bg-white text-sm leading-6 px-[0.4375rem] py-[0.1875rem] h-7 text-gray-950 focus-visible:outline-none m-2',
189
+ },
190
+ variants: {
191
+ disabled: {
192
+ true: {
193
+ root: 'border-gray-100 text-gray-200 cursor-not-allowed',
194
+ label: '',
195
+ icon: 'text-gray-200',
196
+ panel: '',
197
+ items: 'border-gray-100',
198
+ item: 'text-gray-200 cursor-not-allowed',
199
+ input: '',
200
+ },
201
+ false: {
202
+ root: '',
203
+ label: '',
204
+ icon: '',
205
+ panel: '',
206
+ items: '',
207
+ item: '',
208
+ input: '',
209
+ },
210
+ },
211
+ },
212
+ },
213
+
214
+ Input: {
215
+ classNames: {
216
+ root: 'flex w-full items-center rounded border border-gray-200 text-sm leading-6 px-[0.4375rem] py-[0.1875rem] h-7 text-gray-950 bg-white',
217
+ input:
218
+ 'p-0 focus-visible:outline-none w-full data-[headlessui-icon]:pl-6 data-[headlessui-clear-button]:pr-4',
219
+ icon: 'w-6 h-6 left-0.5 top-0.5 text-gray-200',
220
+ clearButton: 'text-gray-500 w-4 h-4 right-1 cursor-pointer',
221
+ },
222
+ variants: {
223
+ disabled: {
224
+ true: {
225
+ root: 'border-gray-100 text-gray-200 cursor-not-allowed',
226
+ input: '',
227
+ icon: '',
228
+ clearButton: '',
229
+ },
230
+ false: {
231
+ root: '',
232
+ input: '',
233
+ icon: '',
234
+ clearButton: '',
235
+ },
236
+ },
237
+ },
238
+ },
239
+
240
+ Textarea: {
241
+ classNames: {
242
+ root: 'flex w-full items-center rounded border border-gray-200 text-sm leading-6 px-[0.4375rem] py-[0.1875rem] text-gray-950 bg-white',
243
+ input: 'p-0 focus-visible:outline-none w-full data-[headlessui-icon]:pl-6',
244
+ icon: 'w-6 h-6 left-0.5 top-0.5 text-gray-200',
245
+ },
246
+ variants: {
247
+ disabled: {
248
+ true: {
249
+ root: 'border-gray-100 text-gray-200 cursor-not-allowed',
250
+ input: '',
251
+ icon: '',
252
+ },
253
+ false: {
254
+ root: '',
255
+ input: '',
256
+ icon: '',
257
+ },
258
+ },
259
+ },
260
+ },
261
+
262
+ Form: {
263
+ className: 'flex flex-col gap-y-4',
264
+ },
265
+
266
+ Field: {
267
+ className: '',
268
+ },
269
+
270
+ Label: {
271
+ className: 'cursor-pointer',
272
+ },
273
+
274
+ CheckboxField: {
275
+ className: 'flex',
276
+ },
277
+
278
+ RadioField: {
279
+ className: 'flex',
280
+ },
281
+
282
+ RadioGroupField: {
283
+ className: '',
284
+ variants: {
285
+ disabled: {
286
+ true: '',
287
+ false: '',
288
+ },
289
+ },
290
+ },
291
+
292
+ Error: {
293
+ className: 'flex text-danger-500',
294
+ },
295
+
296
+ Dialog: {
297
+ classNames: {
298
+ root: 'flex w-screen items-center justify-center p-4 z-30',
299
+ backdrop: 'bg-black/30 z-30',
300
+ },
301
+ },
302
+
303
+ DialogPanel: {
304
+ className:
305
+ 'shadow-1 relative flex w-full min-w-[300px] max-w-[900px] flex-col gap-y-4 rounded-xl bg-white p-6 max-h-[calc(100vh-3rem)] overflow-hidden overflow-y-auto',
306
+ },
307
+
308
+ DialogTitle: {
309
+ className: 'text-xl font-bold',
310
+ },
311
+
312
+ ConfirmDialog: {
313
+ classNames: {
314
+ root: 'flex w-screen items-center justify-center p-4 z-30',
315
+ backdrop: 'bg-black/30 z-30',
316
+ },
317
+ },
318
+
319
+ Popover: {
320
+ className: '',
321
+ },
322
+
323
+ PopoverButton: {
324
+ className: 'focus-visible:outline-none',
325
+ },
326
+
327
+ PopoverPanel: {
328
+ className:
329
+ 'rounded bg-white border p-2 border-gray-200 absolute z-10 left-0 top-[calc(100%+0.25rem)]',
330
+ },
331
+
332
+ Menu: {
333
+ className: '',
334
+ },
335
+
336
+ MenuButton: {
337
+ className: '',
338
+ },
339
+
340
+ MenuItems: {
341
+ className: '',
342
+ },
343
+
344
+ MenuItem: {
345
+ className: '',
346
+ },
347
+
348
+ Table: {
349
+ classNames: {
350
+ root: '',
351
+ table: 'grid',
352
+ },
353
+ },
354
+
355
+ TableHeader: {
356
+ className: '',
357
+ },
358
+
359
+ TableHeaderCell: {
360
+ className: 'flex items-center p-1 text-xs font-bold bg-white z-20',
361
+ },
362
+
363
+ TableRow: {
364
+ className: '',
365
+ },
366
+
367
+ TableCell: {
368
+ className: 'flex items-center p-[2px] text-xs',
369
+ },
370
+ };
@@ -0,0 +1 @@
1
+ export type ClassName = ClassName[] | string | 0 | false | null | undefined;
@@ -0,0 +1,13 @@
1
+ import {type Writable} from '@jakubmazanec/ts-utils';
2
+
3
+ import {type ComponentThemeDefinition} from './ComponentThemeDefinition.js';
4
+ import {type ComponentThemeDefinitionVariants} from './ComponentThemeDefinitionVariants.js';
5
+ import {type ComponentThemeProps} from './ComponentThemeProps.js';
6
+
7
+ // extracts props for component that uses created useTheme hook
8
+ export type ComponentProps<U extends {themeDefinition: ComponentThemeDefinition | undefined}> =
9
+ U['themeDefinition'] extends ComponentThemeDefinition ?
10
+ U['themeDefinition']['variants'] extends ComponentThemeDefinitionVariants ?
11
+ Partial<Writable<ComponentThemeProps<U['themeDefinition']>>>
12
+ : NonNullable<unknown>
13
+ : NonNullable<unknown>;
@@ -0,0 +1,33 @@
1
+ import {type ClassName} from './ClassName.js';
2
+ import {type ComponentThemeCompoundVariants} from './ComponentThemeCompoundVariants.js';
3
+ import {type ComponentThemeDefinition} from './ComponentThemeDefinition.js';
4
+ import {type ComponentThemeDefinitionElements} from './ComponentThemeDefinitionElements.js';
5
+ import {type ComponentThemeDefinitionVariants} from './ComponentThemeDefinitionVariants.js';
6
+ import {type ComponentThemeVariants} from './ComponentThemeVariants.js';
7
+
8
+ export type ComponentTheme<D extends ComponentThemeDefinition | undefined> =
9
+ D extends ComponentThemeDefinition ?
10
+ D['elements'] extends ComponentThemeDefinitionElements ?
11
+ D['variants'] extends ComponentThemeDefinitionVariants ?
12
+ {
13
+ classNames?: {
14
+ [K in D['elements'][number]]: ClassName;
15
+ };
16
+ variants: ComponentThemeVariants<D['variants'], D['elements']>;
17
+ compoundVariants?: ComponentThemeCompoundVariants<D['variants'], D['elements']>;
18
+ }
19
+ : {
20
+ classNames: {
21
+ [K in D['elements'][number]]: ClassName;
22
+ };
23
+ }
24
+ : D['variants'] extends ComponentThemeDefinitionVariants ?
25
+ {
26
+ className?: ClassName;
27
+ variants: ComponentThemeVariants<D['variants'], undefined>;
28
+ compoundVariants?: ComponentThemeCompoundVariants<D['variants'], undefined>;
29
+ }
30
+ : {className: ClassName}
31
+ : {
32
+ className: ClassName;
33
+ };
@@ -0,0 +1,20 @@
1
+ import {type ClassName} from './ClassName.js';
2
+ import {type ComponentThemeDefinitionElements} from './ComponentThemeDefinitionElements.js';
3
+ import {type ComponentThemeDefinitionVariants} from './ComponentThemeDefinitionVariants.js';
4
+
5
+ export type ComponentThemeCompoundVariants<
6
+ V extends ComponentThemeDefinitionVariants,
7
+ E extends ComponentThemeDefinitionElements | undefined,
8
+ > = Array<
9
+ (E extends ComponentThemeDefinitionElements ?
10
+ {
11
+ classNames: {
12
+ [K in E[number]]: ClassName;
13
+ };
14
+ }
15
+ : {
16
+ className: ClassName;
17
+ }) & {
18
+ [K in keyof V]?: Array<V[K][number]> | V[K][number];
19
+ }
20
+ >;
@@ -0,0 +1,7 @@
1
+ import {type ComponentThemeDefinitionElements} from './ComponentThemeDefinitionElements.js';
2
+ import {type ComponentThemeDefinitionVariants} from './ComponentThemeDefinitionVariants.js';
3
+
4
+ export type ComponentThemeDefinition = {
5
+ variants?: ComponentThemeDefinitionVariants;
6
+ elements?: ComponentThemeDefinitionElements;
7
+ };
@@ -0,0 +1 @@
1
+ export type ComponentThemeDefinitionElements = string[];
@@ -0,0 +1,3 @@
1
+ export type ComponentThemeDefinitionVariants = {
2
+ [key: string]: string[] | [true, false];
3
+ };
@@ -0,0 +1,11 @@
1
+ import {type ComponentThemeDefinition} from './ComponentThemeDefinition.js';
2
+ import {type ComponentThemeDefinitionVariants} from './ComponentThemeDefinitionVariants.js';
3
+
4
+ export type ComponentThemeProps<D extends ComponentThemeDefinition | undefined> =
5
+ D extends ComponentThemeDefinition ?
6
+ D['variants'] extends ComponentThemeDefinitionVariants ?
7
+ {
8
+ [J in keyof D['variants']]: D['variants'][J][number];
9
+ }
10
+ : NonNullable<unknown>
11
+ : NonNullable<unknown>;
@@ -0,0 +1,24 @@
1
+ import {type ClassName} from './ClassName.js';
2
+ import {type ComponentThemeDefinitionElements} from './ComponentThemeDefinitionElements.js';
3
+ import {type ComponentThemeDefinitionVariants} from './ComponentThemeDefinitionVariants.js';
4
+
5
+ export type ComponentThemeVariants<
6
+ V extends ComponentThemeDefinitionVariants,
7
+ E extends ComponentThemeDefinitionElements | undefined,
8
+ > = {
9
+ [J in keyof V]: V[J] extends string[] ?
10
+ {
11
+ [K in V[J][number]]: E extends ComponentThemeDefinitionElements ?
12
+ {
13
+ [L in E[number]]: ClassName;
14
+ }
15
+ : ClassName;
16
+ }
17
+ : {
18
+ [K in 'false' | 'true']: E extends ComponentThemeDefinitionElements ?
19
+ {
20
+ [L in E[number]]: ClassName;
21
+ }
22
+ : ClassName;
23
+ };
24
+ };
@@ -0,0 +1,22 @@
1
+ import {type ComponentThemeDefinition} from './ComponentThemeDefinition.js';
2
+ import {type ComponentThemeDefinitionElements} from './ComponentThemeDefinitionElements.js';
3
+ import {type ComponentThemeDefinitionVariants} from './ComponentThemeDefinitionVariants.js';
4
+ import {type ComponentThemeProps} from './ComponentThemeProps.js';
5
+ import {type UseComponentThemeReturn} from './UseComponentThemeReturn.js';
6
+
7
+ export type UseComponentTheme<N extends string, D extends ComponentThemeDefinition | undefined> =
8
+ D extends ComponentThemeDefinition ?
9
+ D['variants'] extends ComponentThemeDefinitionVariants ?
10
+ D['elements'] extends ComponentThemeDefinitionElements ?
11
+ ((themeProps: ComponentThemeProps<D>) => UseComponentThemeReturn<D>) & {
12
+ componentThemeName: N;
13
+ themeDefinition: D;
14
+ }
15
+ : ((themeProps: ComponentThemeProps<D>) => UseComponentThemeReturn<D>) & {
16
+ componentThemeName: N;
17
+ themeDefinition: D;
18
+ }
19
+ : D['elements'] extends ComponentThemeDefinitionElements ?
20
+ (() => UseComponentThemeReturn<D>) & {componentThemeName: N; themeDefinition: D}
21
+ : (() => UseComponentThemeReturn<D>) & {componentThemeName: N; themeDefinition: D}
22
+ : (() => UseComponentThemeReturn<D>) & {componentThemeName: N; themeDefinition: D};
@@ -0,0 +1,15 @@
1
+ import {type ClassName} from './ClassName.js';
2
+ import {type ComponentThemeDefinition} from './ComponentThemeDefinition.js';
3
+ import {type ComponentThemeDefinitionElements} from './ComponentThemeDefinitionElements.js';
4
+
5
+ export type UseComponentThemeReturn<D extends ComponentThemeDefinition | undefined> =
6
+ D extends ComponentThemeDefinition ?
7
+ D['elements'] extends ComponentThemeDefinitionElements ?
8
+ {
9
+ [K in D['elements'][number]]: (
10
+ baseClassName?: ClassName,
11
+ overrideClassName?: ClassName,
12
+ ) => string;
13
+ }
14
+ : (baseClassName?: ClassName, overrideClassName?: ClassName) => string
15
+ : (baseClassName?: ClassName, overrideClassName?: ClassName) => string;
@@ -0,0 +1,6 @@
1
+ export function booleanToString<T>(value: T): T extends boolean ? string : T {
2
+ return (
3
+ typeof value === 'boolean' ? `${value}`
4
+ : value === 0 ? '0'
5
+ : value) as T extends boolean ? string : T;
6
+ }
@@ -0,0 +1,67 @@
1
+ import {useContext} from 'react';
2
+
3
+ import {type Theme} from '../Theme.js';
4
+ import {type ClassName} from './ClassName.js';
5
+ import {type ComponentTheme} from './ComponentTheme.js';
6
+ import {type ComponentThemeDefinition} from './ComponentThemeDefinition.js';
7
+ import {type ComponentThemeDefinitionElements} from './ComponentThemeDefinitionElements.js';
8
+ import {type ComponentThemeDefinitionVariants} from './ComponentThemeDefinitionVariants.js';
9
+ import {type ComponentThemeProps} from './ComponentThemeProps.js';
10
+ import {createUseComponentThemeReturn} from './createUseComponentThemeReturn.js';
11
+ import {themeContext} from './themeContext.js';
12
+ import {type UseComponentTheme} from './UseComponentTheme.js';
13
+
14
+ export function createComponentTheme<
15
+ const N extends string,
16
+ const D extends ComponentThemeDefinition | undefined = undefined,
17
+ >(themeName: N, themeDefinition?: NonNullable<D>): UseComponentTheme<N, D> {
18
+ let useComponentTheme = (themeProps?: ComponentThemeProps<D>) => {
19
+ let theme = useContext(themeContext);
20
+
21
+ if (!theme) {
22
+ throw new Error('No theme was found!');
23
+ }
24
+
25
+ let componentTheme = theme[themeName as keyof Theme] as unknown as
26
+ | ComponentTheme<{
27
+ variants: ComponentThemeDefinitionVariants;
28
+ elements: ComponentThemeDefinitionElements;
29
+ }>
30
+ | ComponentTheme<{variants: ComponentThemeDefinitionVariants}>
31
+ | undefined;
32
+
33
+ if (!componentTheme) {
34
+ throw new Error(`Theme for component "${themeName}" wasn't found!`);
35
+ }
36
+
37
+ let hasElements = Boolean(themeDefinition?.elements);
38
+
39
+ if (!hasElements) {
40
+ return createUseComponentThemeReturn(
41
+ componentTheme as
42
+ | ComponentTheme<{variants: ComponentThemeDefinitionVariants}>
43
+ | ComponentTheme<undefined>,
44
+ themeProps,
45
+ );
46
+ }
47
+
48
+ let getClassNames: Record<string, (...args: ClassName[]) => string> = {};
49
+
50
+ for (let element of themeDefinition?.elements ?? []) {
51
+ getClassNames[element] = createUseComponentThemeReturn(
52
+ componentTheme as
53
+ | ComponentTheme<{variants: ComponentThemeDefinitionVariants}>
54
+ | ComponentTheme<undefined>,
55
+ themeProps,
56
+ element,
57
+ );
58
+ }
59
+
60
+ return getClassNames;
61
+ };
62
+
63
+ (useComponentTheme as UseComponentTheme<N, D>).themeDefinition = themeDefinition;
64
+ (useComponentTheme as UseComponentTheme<N, D>).componentThemeName = themeName;
65
+
66
+ return useComponentTheme as UseComponentTheme<N, D>;
67
+ }