thread-ui 0.3.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 (454) hide show
  1. package/README.md +63 -18
  2. package/dist/components/form-elements/dropdown/dropdown.d.ts +13 -0
  3. package/dist/components/form-elements/dropdown/dropdown.js +83 -0
  4. package/dist/components/form-elements/dropdown/dropdown.js.map +1 -0
  5. package/dist/components/form-elements/dropdown/dropdown.types.d.ts +23 -0
  6. package/dist/components/form-elements/dropdown/dropdown.types.js +2 -0
  7. package/dist/components/form-elements/dropdown/dropdown.types.js.map +1 -0
  8. package/dist/components/form-elements/dropdown/index.d.ts +2 -0
  9. package/dist/components/form-elements/dropdown/index.js +2 -0
  10. package/dist/components/form-elements/dropdown/index.js.map +1 -0
  11. package/dist/components/form-elements/file-upload/components/file-input.d.ts +1 -0
  12. package/dist/components/form-elements/file-upload/components/file-input.js +93 -0
  13. package/dist/components/form-elements/file-upload/components/file-input.js.map +1 -0
  14. package/dist/components/form-elements/file-upload/components/file-upload-content.d.ts +1 -0
  15. package/dist/components/form-elements/file-upload/components/file-upload-content.js +28 -0
  16. package/dist/components/form-elements/file-upload/components/file-upload-content.js.map +1 -0
  17. package/dist/components/form-elements/file-upload/components/file-upload-preview.d.ts +1 -0
  18. package/dist/components/form-elements/file-upload/components/file-upload-preview.js +51 -0
  19. package/dist/components/form-elements/file-upload/components/file-upload-preview.js.map +1 -0
  20. package/dist/components/form-elements/file-upload/components/item-previews.d.ts +11 -0
  21. package/dist/components/form-elements/file-upload/components/item-previews.js +58 -0
  22. package/dist/components/form-elements/file-upload/components/item-previews.js.map +1 -0
  23. package/dist/components/form-elements/file-upload/file-upload-context.d.ts +2 -0
  24. package/dist/components/form-elements/file-upload/file-upload-context.js +4 -0
  25. package/dist/components/form-elements/file-upload/file-upload-context.js.map +1 -0
  26. package/dist/components/form-elements/file-upload/file-upload.d.ts +19 -0
  27. package/dist/components/form-elements/file-upload/file-upload.js +148 -0
  28. package/dist/components/form-elements/file-upload/file-upload.js.map +1 -0
  29. package/dist/components/form-elements/file-upload/file-upload.types.d.ts +35 -0
  30. package/dist/components/form-elements/file-upload/file-upload.types.js +2 -0
  31. package/dist/components/form-elements/file-upload/file-upload.types.js.map +1 -0
  32. package/dist/components/form-elements/file-upload/index.d.ts +2 -0
  33. package/dist/components/form-elements/file-upload/index.js +2 -0
  34. package/dist/components/form-elements/file-upload/index.js.map +1 -0
  35. package/dist/components/form-elements/form-label/form-label.d.ts +6 -1
  36. package/dist/components/form-elements/form-label/form-label.js +6 -0
  37. package/dist/components/form-elements/form-label/form-label.js.map +1 -1
  38. package/dist/components/form-elements/form-label/form-label.types.d.ts +3 -1
  39. package/dist/components/form-elements/form-label/index.d.ts +0 -1
  40. package/dist/components/form-elements/index.d.ts +2 -1
  41. package/dist/components/form-elements/index.js +2 -0
  42. package/dist/components/form-elements/index.js.map +1 -1
  43. package/dist/components/form-elements/input-props.types.d.ts +10 -4
  44. package/dist/components/form-elements/input-wrapper.d.ts +0 -1
  45. package/dist/components/form-elements/number-input/index.d.ts +0 -1
  46. package/dist/components/form-elements/number-input/number-input.d.ts +14 -1
  47. package/dist/components/form-elements/number-input/number-input.js +15 -0
  48. package/dist/components/form-elements/number-input/number-input.js.map +1 -1
  49. package/dist/components/form-elements/number-input/number-input.types.d.ts +3 -1
  50. package/dist/components/form-elements/styles/index.d.ts +0 -1
  51. package/dist/components/form-elements/styles/index.js +1 -0
  52. package/dist/components/form-elements/styles/index.js.map +1 -1
  53. package/dist/components/form-elements/text-input/index.d.ts +0 -1
  54. package/dist/components/form-elements/text-input/text-input.d.ts +6 -1
  55. package/dist/components/form-elements/text-input/text-input.js +6 -0
  56. package/dist/components/form-elements/text-input/text-input.js.map +1 -1
  57. package/dist/components/form-elements/text-input/text-input.types.d.ts +1 -1
  58. package/dist/components/index.d.ts +0 -1
  59. package/dist/components/layouts/column-layout/column-layout.d.ts +11 -3
  60. package/dist/components/layouts/column-layout/column-layout.js +11 -2
  61. package/dist/components/layouts/column-layout/column-layout.js.map +1 -1
  62. package/dist/components/layouts/column-layout/column-layout.types.d.ts +8 -19
  63. package/dist/components/layouts/column-layout/column-skeleton/column-skeleton.d.ts +0 -1
  64. package/dist/components/layouts/column-layout/column-skeleton/column-skeleton.types.d.ts +0 -1
  65. package/dist/components/layouts/column-layout/column-skeleton/index.d.ts +0 -1
  66. package/dist/components/layouts/column-layout/index.d.ts +0 -1
  67. package/dist/components/layouts/footer/footer.d.ts +13 -2
  68. package/dist/components/layouts/footer/footer.js +14 -2
  69. package/dist/components/layouts/footer/footer.js.map +1 -1
  70. package/dist/components/layouts/footer/footer.types.d.ts +7 -1
  71. package/dist/components/layouts/footer/index.d.ts +0 -1
  72. package/dist/components/layouts/index.d.ts +0 -1
  73. package/dist/components/layouts/masonry-layout/index.d.ts +0 -1
  74. package/dist/components/layouts/masonry-layout/masonry-layout.d.ts +9 -1
  75. package/dist/components/layouts/masonry-layout/masonry-layout.js +9 -0
  76. package/dist/components/layouts/masonry-layout/masonry-layout.js.map +1 -1
  77. package/dist/components/layouts/masonry-layout/masonry-layout.types.d.ts +3 -1
  78. package/dist/components/media/image-panel/image-panel.d.ts +14 -1
  79. package/dist/components/media/image-panel/image-panel.js +14 -0
  80. package/dist/components/media/image-panel/image-panel.js.map +1 -1
  81. package/dist/components/media/image-panel/image-panel.types.d.ts +8 -1
  82. package/dist/components/media/image-panel/index.d.ts +0 -1
  83. package/dist/components/media/index.d.ts +0 -1
  84. package/dist/components/media/info-card/index.d.ts +0 -1
  85. package/dist/components/media/info-card/info-card.d.ts +11 -1
  86. package/dist/components/media/info-card/info-card.js +11 -0
  87. package/dist/components/media/info-card/info-card.js.map +1 -1
  88. package/dist/components/media/info-card/info-card.types.d.ts +10 -1
  89. package/dist/components/media/media-card/index.d.ts +0 -1
  90. package/dist/components/media/media-card/media-card.d.ts +13 -1
  91. package/dist/components/media/media-card/media-card.js +15 -0
  92. package/dist/components/media/media-card/media-card.js.map +1 -1
  93. package/dist/components/media/media-card/media-card.types.d.ts +13 -1
  94. package/dist/components/navigation/index.d.ts +0 -1
  95. package/dist/components/navigation/nav-menu/index.d.ts +0 -1
  96. package/dist/components/navigation/nav-menu/items/base-item/base-item.d.ts +0 -1
  97. package/dist/components/navigation/nav-menu/items/base-item/base-item.types.d.ts +0 -1
  98. package/dist/components/navigation/nav-menu/items/base-item/index.d.ts +0 -1
  99. package/dist/components/navigation/nav-menu/items/index.d.ts +0 -1
  100. package/dist/components/navigation/nav-menu/items/nav-drop-down-item/index.d.ts +0 -1
  101. package/dist/components/navigation/nav-menu/items/nav-drop-down-item/nav-drop-down-item.d.ts +0 -1
  102. package/dist/components/navigation/nav-menu/items/nav-drop-down-item/nav-drop-down-item.js +10 -7
  103. package/dist/components/navigation/nav-menu/items/nav-drop-down-item/nav-drop-down-item.js.map +1 -1
  104. package/dist/components/navigation/nav-menu/items/nav-drop-down-item/nav-drop-down-item.types.d.ts +0 -1
  105. package/dist/components/navigation/nav-menu/items/nav-icon-item/index.d.ts +0 -1
  106. package/dist/components/navigation/nav-menu/items/nav-icon-item/nav-icon-item.d.ts +0 -1
  107. package/dist/components/navigation/nav-menu/items/nav-icon-item/nav-icon-item.types.d.ts +0 -1
  108. package/dist/components/navigation/nav-menu/items/nav-item/index.d.ts +0 -1
  109. package/dist/components/navigation/nav-menu/items/nav-item/nav-item.d.ts +0 -1
  110. package/dist/components/navigation/nav-menu/items/nav-item/nav-item.types.d.ts +0 -1
  111. package/dist/components/navigation/nav-menu/nav-menu-styles.d.ts +0 -1
  112. package/dist/components/navigation/nav-menu/nav-menu.d.ts +13 -1
  113. package/dist/components/navigation/nav-menu/nav-menu.js +13 -0
  114. package/dist/components/navigation/nav-menu/nav-menu.js.map +1 -1
  115. package/dist/components/navigation/nav-menu/nav-menu.types.d.ts +2 -1
  116. package/dist/components/navigation/side-nav/index.d.ts +0 -1
  117. package/dist/components/navigation/side-nav/side-nav-item/index.d.ts +0 -1
  118. package/dist/components/navigation/side-nav/side-nav-item/side-nav-item.d.ts +0 -1
  119. package/dist/components/navigation/side-nav/side-nav-item/side-nav-item.js +1 -1
  120. package/dist/components/navigation/side-nav/side-nav-item/side-nav-item.js.map +1 -1
  121. package/dist/components/navigation/side-nav/side-nav-item/side-nav-item.types.d.ts +0 -1
  122. package/dist/components/navigation/side-nav/side-nav.d.ts +8 -3
  123. package/dist/components/navigation/side-nav/side-nav.js +8 -2
  124. package/dist/components/navigation/side-nav/side-nav.js.map +1 -1
  125. package/dist/components/navigation/side-nav/side-nav.types.d.ts +4 -1
  126. package/dist/components/typography/index.d.ts +0 -1
  127. package/dist/components/typography/page-header/index.d.ts +0 -1
  128. package/dist/components/typography/page-header/page-header.d.ts +6 -1
  129. package/dist/components/typography/page-header/page-header.js +6 -0
  130. package/dist/components/typography/page-header/page-header.js.map +1 -1
  131. package/dist/components/typography/page-header/page-header.types.d.ts +3 -1
  132. package/dist/components/typography/typography.d.ts +55 -1
  133. package/dist/components/typography/typography.js +48 -0
  134. package/dist/components/typography/typography.js.map +1 -1
  135. package/dist/components/ui/button/button-recipe.d.ts +1 -2
  136. package/dist/components/ui/button/button-recipe.js +1 -0
  137. package/dist/components/ui/button/button-recipe.js.map +1 -1
  138. package/dist/components/ui/button/button.d.ts +8 -1
  139. package/dist/components/ui/button/button.js +8 -0
  140. package/dist/components/ui/button/button.js.map +1 -1
  141. package/dist/components/ui/button/button.types.d.ts +7 -1
  142. package/dist/components/ui/button/index.d.ts +0 -1
  143. package/dist/components/ui/card/card.d.ts +8 -1
  144. package/dist/components/ui/card/card.js +8 -0
  145. package/dist/components/ui/card/card.js.map +1 -1
  146. package/dist/components/ui/card/card.types.d.ts +8 -2
  147. package/dist/components/ui/card/index.d.ts +0 -1
  148. package/dist/components/ui/divider/divider.d.ts +6 -1
  149. package/dist/components/ui/divider/divider.js +6 -0
  150. package/dist/components/ui/divider/divider.js.map +1 -1
  151. package/dist/components/ui/divider/divider.types.d.ts +3 -1
  152. package/dist/components/ui/divider/index.d.ts +0 -1
  153. package/dist/components/ui/icon/icon.d.ts +5 -8
  154. package/dist/components/ui/icon/icon.js +5 -7
  155. package/dist/components/ui/icon/icon.js.map +1 -1
  156. package/dist/components/ui/icon/icon.types.d.ts +5 -1
  157. package/dist/components/ui/icon/index.d.ts +0 -1
  158. package/dist/components/ui/icon-button/icon-button.d.ts +8 -1
  159. package/dist/components/ui/icon-button/icon-button.js +9 -1
  160. package/dist/components/ui/icon-button/icon-button.js.map +1 -1
  161. package/dist/components/ui/icon-button/icon-button.types.d.ts +3 -2
  162. package/dist/components/ui/icon-button/index.d.ts +0 -1
  163. package/dist/components/ui/index.d.ts +1 -1
  164. package/dist/components/ui/index.js +1 -0
  165. package/dist/components/ui/index.js.map +1 -1
  166. package/dist/components/ui/modal/components/modal-content.d.ts +1 -0
  167. package/dist/components/ui/modal/components/modal-content.js +98 -0
  168. package/dist/components/ui/modal/components/modal-content.js.map +1 -0
  169. package/dist/components/ui/modal/index.d.ts +2 -0
  170. package/dist/components/ui/modal/index.js +2 -0
  171. package/dist/components/ui/modal/index.js.map +1 -0
  172. package/dist/components/ui/modal/modal-context.d.ts +2 -0
  173. package/dist/components/ui/modal/modal-context.js +4 -0
  174. package/dist/components/ui/modal/modal-context.js.map +1 -0
  175. package/dist/components/ui/modal/modal.d.ts +11 -0
  176. package/dist/components/ui/modal/modal.js +44 -0
  177. package/dist/components/ui/modal/modal.js.map +1 -0
  178. package/dist/components/ui/modal/modal.types.d.ts +26 -0
  179. package/dist/components/ui/modal/modal.types.js +2 -0
  180. package/dist/components/ui/modal/modal.types.js.map +1 -0
  181. package/dist/components/ui/toggle/index.d.ts +0 -1
  182. package/dist/components/ui/toggle/toggle.d.ts +6 -2
  183. package/dist/components/ui/toggle/toggle.js +6 -1
  184. package/dist/components/ui/toggle/toggle.js.map +1 -1
  185. package/dist/components/ui/toggle/toggle.types.d.ts +3 -1
  186. package/dist/index.d.ts +0 -1
  187. package/dist/internal-components/image/index.d.ts +0 -1
  188. package/dist/internal-components/image/is-html-image-props.d.ts +0 -1
  189. package/dist/internal-components/image/render-image.d.ts +0 -1
  190. package/dist/internal-components/index.d.ts +0 -1
  191. package/dist/internal-components/link-wrapper/index.d.ts +0 -1
  192. package/dist/internal-components/link-wrapper/link-wrapper.d.ts +0 -1
  193. package/dist/internal-components/link-wrapper/link-wrapper.types.d.ts +0 -1
  194. package/dist/styled-system/styles.css +295 -215
  195. package/dist/styles/panda.css +1 -2054
  196. package/dist/styles/thread.css +3 -3
  197. package/dist/theme/css-name-configurations/theme-css-names.d.ts +0 -1
  198. package/dist/theme/css-name-configurations/theme-helper-utils.d.ts +0 -1
  199. package/dist/theme/default-theme.d.ts +0 -1
  200. package/dist/theme/default-theme.js +3 -3
  201. package/dist/theme/default-theme.js.map +1 -1
  202. package/dist/theme/generate-override-css.d.ts +0 -1
  203. package/dist/theme/index.d.ts +1 -2
  204. package/dist/theme/index.js +1 -1
  205. package/dist/theme/index.js.map +1 -1
  206. package/dist/theme/theme-mode.d.ts +0 -1
  207. package/dist/theme/theme-provider.d.ts +21 -2
  208. package/dist/theme/theme-provider.js +23 -4
  209. package/dist/theme/theme-provider.js.map +1 -1
  210. package/dist/theme/thread-script.d.ts +16 -15
  211. package/dist/theme/thread-script.js +16 -14
  212. package/dist/theme/thread-script.js.map +1 -1
  213. package/dist/theme/thread-theme.d.ts +0 -1
  214. package/dist/types/colors/index.d.ts +0 -1
  215. package/dist/types/colors/utility-color-options.types.d.ts +0 -1
  216. package/dist/types/image/image.types.d.ts +0 -1
  217. package/dist/types/image/index.d.ts +0 -1
  218. package/dist/types/index.d.ts +0 -1
  219. package/dist/types/theme/index.d.ts +0 -1
  220. package/dist/types/theme/theme.types.d.ts +0 -1
  221. package/dist/types/utility/deep-partial.types.d.ts +0 -1
  222. package/dist/types/utility/index.d.ts +0 -1
  223. package/dist/utils/context/create-component-context/create-component-context.d.ts +1 -0
  224. package/dist/utils/context/create-component-context/create-component-context.js +14 -0
  225. package/dist/utils/context/create-component-context/create-component-context.js.map +1 -0
  226. package/dist/utils/context/create-component-context/index.d.ts +1 -0
  227. package/dist/utils/context/create-component-context/index.js +2 -0
  228. package/dist/utils/context/create-component-context/index.js.map +1 -0
  229. package/dist/utils/context/index.d.ts +1 -0
  230. package/dist/utils/context/index.js +2 -0
  231. package/dist/utils/context/index.js.map +1 -0
  232. package/dist/utils/{deep-merge → data-manipulation/deep-merge}/deep-merge.d.ts +1 -2
  233. package/dist/utils/data-manipulation/deep-merge/deep-merge.js.map +1 -0
  234. package/dist/utils/{deep-merge → data-manipulation/deep-merge}/index.d.ts +0 -1
  235. package/dist/utils/data-manipulation/deep-merge/index.js.map +1 -0
  236. package/dist/utils/data-manipulation/index.d.ts +1 -0
  237. package/dist/utils/data-manipulation/index.js +2 -0
  238. package/dist/utils/data-manipulation/index.js.map +1 -0
  239. package/dist/utils/hooks/index.d.ts +2 -0
  240. package/dist/utils/hooks/index.js +3 -0
  241. package/dist/utils/hooks/index.js.map +1 -0
  242. package/dist/utils/hooks/use-outside-close-click/index.d.ts +1 -0
  243. package/dist/utils/hooks/use-outside-close-click/index.js +2 -0
  244. package/dist/utils/hooks/use-outside-close-click/index.js.map +1 -0
  245. package/dist/utils/hooks/use-outside-close-click/use-outside-close-click.d.ts +2 -0
  246. package/dist/utils/hooks/use-outside-close-click/use-outside-close-click.js +16 -0
  247. package/dist/utils/hooks/use-outside-close-click/use-outside-close-click.js.map +1 -0
  248. package/dist/utils/{use-pathname → hooks/use-pathname}/index.d.ts +0 -1
  249. package/dist/utils/hooks/use-pathname/index.js.map +1 -0
  250. package/dist/utils/{use-pathname → hooks/use-pathname}/use-pathname.d.ts +0 -1
  251. package/dist/utils/hooks/use-pathname/use-pathname.js.map +1 -0
  252. package/dist/utils/index.d.ts +5 -9
  253. package/dist/utils/index.js +5 -8
  254. package/dist/utils/index.js.map +1 -1
  255. package/dist/utils/misc/index.d.ts +1 -0
  256. package/dist/utils/misc/index.js +2 -0
  257. package/dist/utils/misc/index.js.map +1 -0
  258. package/dist/utils/misc/is-file-image-type/index.d.ts +1 -0
  259. package/dist/utils/misc/is-file-image-type/index.js +2 -0
  260. package/dist/utils/misc/is-file-image-type/index.js.map +1 -0
  261. package/dist/utils/misc/is-file-image-type/is-file-image-type.d.ts +1 -0
  262. package/dist/utils/misc/is-file-image-type/is-file-image-type.js +4 -0
  263. package/dist/utils/misc/is-file-image-type/is-file-image-type.js.map +1 -0
  264. package/dist/utils/{get-colored-text-color → theme-utilities/get-colored-text-color}/get-colored-text-color.d.ts +1 -2
  265. package/dist/utils/{get-colored-text-color → theme-utilities/get-colored-text-color}/get-colored-text-color.js +1 -1
  266. package/dist/utils/theme-utilities/get-colored-text-color/get-colored-text-color.js.map +1 -0
  267. package/dist/utils/{get-colored-text-color → theme-utilities/get-colored-text-color}/index.d.ts +0 -1
  268. package/dist/utils/theme-utilities/get-colored-text-color/index.js.map +1 -0
  269. package/dist/utils/{get-text-color → theme-utilities/get-text-color}/get-text-color.d.ts +1 -2
  270. package/dist/utils/{get-text-color → theme-utilities/get-text-color}/get-text-color.js +1 -1
  271. package/dist/utils/theme-utilities/get-text-color/get-text-color.js.map +1 -0
  272. package/dist/utils/{get-text-color → theme-utilities/get-text-color}/index.d.ts +0 -1
  273. package/dist/utils/theme-utilities/get-text-color/index.js.map +1 -0
  274. package/dist/utils/{get-utility-color → theme-utilities/get-utility-color}/get-utility-color-value.d.ts +1 -2
  275. package/dist/utils/{get-utility-color → theme-utilities/get-utility-color}/get-utility-color-value.js +1 -1
  276. package/dist/utils/theme-utilities/get-utility-color/get-utility-color-value.js.map +1 -0
  277. package/dist/utils/{get-utility-color → theme-utilities/get-utility-color}/index.d.ts +0 -1
  278. package/dist/utils/theme-utilities/get-utility-color/index.js.map +1 -0
  279. package/dist/utils/{get-utility-font-size → theme-utilities/get-utility-font-size}/getUtilityFontSize.d.ts +1 -2
  280. package/dist/utils/theme-utilities/get-utility-font-size/getUtilityFontSize.js.map +1 -0
  281. package/dist/utils/{get-utility-font-size → theme-utilities/get-utility-font-size}/index.d.ts +0 -1
  282. package/dist/utils/theme-utilities/get-utility-font-size/index.js.map +1 -0
  283. package/dist/utils/theme-utilities/get-utility-icon-size/get-utility-icon-size.d.ts +3 -0
  284. package/dist/utils/theme-utilities/get-utility-icon-size/get-utility-icon-size.js.map +1 -0
  285. package/dist/utils/{get-utility-icon-size → theme-utilities/get-utility-icon-size}/index.d.ts +0 -1
  286. package/dist/utils/theme-utilities/get-utility-icon-size/index.js.map +1 -0
  287. package/dist/utils/theme-utilities/get-utility-size-value/get-utility-size-value.d.ts +2 -0
  288. package/dist/utils/theme-utilities/get-utility-size-value/get-utility-size-value.js.map +1 -0
  289. package/dist/utils/{get-utility-size-value → theme-utilities/get-utility-size-value}/index.d.ts +0 -1
  290. package/dist/utils/theme-utilities/get-utility-size-value/index.js.map +1 -0
  291. package/dist/utils/theme-utilities/index.d.ts +6 -0
  292. package/dist/utils/theme-utilities/index.js +7 -0
  293. package/dist/utils/theme-utilities/index.js.map +1 -0
  294. package/package.json +25 -55
  295. package/dist/components/form-elements/form-label/form-label.d.ts.map +0 -1
  296. package/dist/components/form-elements/form-label/form-label.types.d.ts.map +0 -1
  297. package/dist/components/form-elements/form-label/index.d.ts.map +0 -1
  298. package/dist/components/form-elements/index.d.ts.map +0 -1
  299. package/dist/components/form-elements/input-props.types.d.ts.map +0 -1
  300. package/dist/components/form-elements/input-wrapper.d.ts.map +0 -1
  301. package/dist/components/form-elements/number-input/index.d.ts.map +0 -1
  302. package/dist/components/form-elements/number-input/number-input.d.ts.map +0 -1
  303. package/dist/components/form-elements/number-input/number-input.types.d.ts.map +0 -1
  304. package/dist/components/form-elements/styles/index.d.ts.map +0 -1
  305. package/dist/components/form-elements/text-input/index.d.ts.map +0 -1
  306. package/dist/components/form-elements/text-input/text-input.d.ts.map +0 -1
  307. package/dist/components/form-elements/text-input/text-input.types.d.ts.map +0 -1
  308. package/dist/components/index.d.ts.map +0 -1
  309. package/dist/components/layouts/column-layout/column-layout.d.ts.map +0 -1
  310. package/dist/components/layouts/column-layout/column-layout.types.d.ts.map +0 -1
  311. package/dist/components/layouts/column-layout/column-skeleton/column-skeleton.d.ts.map +0 -1
  312. package/dist/components/layouts/column-layout/column-skeleton/column-skeleton.types.d.ts.map +0 -1
  313. package/dist/components/layouts/column-layout/column-skeleton/index.d.ts.map +0 -1
  314. package/dist/components/layouts/column-layout/index.d.ts.map +0 -1
  315. package/dist/components/layouts/footer/footer.d.ts.map +0 -1
  316. package/dist/components/layouts/footer/footer.types.d.ts.map +0 -1
  317. package/dist/components/layouts/footer/index.d.ts.map +0 -1
  318. package/dist/components/layouts/index.d.ts.map +0 -1
  319. package/dist/components/layouts/masonry-layout/index.d.ts.map +0 -1
  320. package/dist/components/layouts/masonry-layout/masonry-layout.d.ts.map +0 -1
  321. package/dist/components/layouts/masonry-layout/masonry-layout.types.d.ts.map +0 -1
  322. package/dist/components/media/image-panel/image-panel.d.ts.map +0 -1
  323. package/dist/components/media/image-panel/image-panel.types.d.ts.map +0 -1
  324. package/dist/components/media/image-panel/index.d.ts.map +0 -1
  325. package/dist/components/media/index.d.ts.map +0 -1
  326. package/dist/components/media/info-card/index.d.ts.map +0 -1
  327. package/dist/components/media/info-card/info-card.d.ts.map +0 -1
  328. package/dist/components/media/info-card/info-card.types.d.ts.map +0 -1
  329. package/dist/components/media/media-card/index.d.ts.map +0 -1
  330. package/dist/components/media/media-card/media-card.d.ts.map +0 -1
  331. package/dist/components/media/media-card/media-card.types.d.ts.map +0 -1
  332. package/dist/components/navigation/index.d.ts.map +0 -1
  333. package/dist/components/navigation/nav-menu/index.d.ts.map +0 -1
  334. package/dist/components/navigation/nav-menu/items/base-item/base-item.d.ts.map +0 -1
  335. package/dist/components/navigation/nav-menu/items/base-item/base-item.types.d.ts.map +0 -1
  336. package/dist/components/navigation/nav-menu/items/base-item/index.d.ts.map +0 -1
  337. package/dist/components/navigation/nav-menu/items/index.d.ts.map +0 -1
  338. package/dist/components/navigation/nav-menu/items/nav-drop-down-item/index.d.ts.map +0 -1
  339. package/dist/components/navigation/nav-menu/items/nav-drop-down-item/nav-drop-down-item.d.ts.map +0 -1
  340. package/dist/components/navigation/nav-menu/items/nav-drop-down-item/nav-drop-down-item.types.d.ts.map +0 -1
  341. package/dist/components/navigation/nav-menu/items/nav-icon-item/index.d.ts.map +0 -1
  342. package/dist/components/navigation/nav-menu/items/nav-icon-item/nav-icon-item.d.ts.map +0 -1
  343. package/dist/components/navigation/nav-menu/items/nav-icon-item/nav-icon-item.types.d.ts.map +0 -1
  344. package/dist/components/navigation/nav-menu/items/nav-item/index.d.ts.map +0 -1
  345. package/dist/components/navigation/nav-menu/items/nav-item/nav-item.d.ts.map +0 -1
  346. package/dist/components/navigation/nav-menu/items/nav-item/nav-item.types.d.ts.map +0 -1
  347. package/dist/components/navigation/nav-menu/nav-menu-styles.d.ts.map +0 -1
  348. package/dist/components/navigation/nav-menu/nav-menu.d.ts.map +0 -1
  349. package/dist/components/navigation/nav-menu/nav-menu.types.d.ts.map +0 -1
  350. package/dist/components/navigation/side-nav/index.d.ts.map +0 -1
  351. package/dist/components/navigation/side-nav/side-nav-item/index.d.ts.map +0 -1
  352. package/dist/components/navigation/side-nav/side-nav-item/side-nav-item.d.ts.map +0 -1
  353. package/dist/components/navigation/side-nav/side-nav-item/side-nav-item.types.d.ts.map +0 -1
  354. package/dist/components/navigation/side-nav/side-nav.d.ts.map +0 -1
  355. package/dist/components/navigation/side-nav/side-nav.types.d.ts.map +0 -1
  356. package/dist/components/typography/index.d.ts.map +0 -1
  357. package/dist/components/typography/page-header/index.d.ts.map +0 -1
  358. package/dist/components/typography/page-header/page-header.d.ts.map +0 -1
  359. package/dist/components/typography/page-header/page-header.types.d.ts.map +0 -1
  360. package/dist/components/typography/typography.d.ts.map +0 -1
  361. package/dist/components/ui/button/button-recipe.d.ts.map +0 -1
  362. package/dist/components/ui/button/button.d.ts.map +0 -1
  363. package/dist/components/ui/button/button.types.d.ts.map +0 -1
  364. package/dist/components/ui/button/index.d.ts.map +0 -1
  365. package/dist/components/ui/card/card.d.ts.map +0 -1
  366. package/dist/components/ui/card/card.types.d.ts.map +0 -1
  367. package/dist/components/ui/card/index.d.ts.map +0 -1
  368. package/dist/components/ui/divider/divider.d.ts.map +0 -1
  369. package/dist/components/ui/divider/divider.types.d.ts.map +0 -1
  370. package/dist/components/ui/divider/index.d.ts.map +0 -1
  371. package/dist/components/ui/icon/icon.d.ts.map +0 -1
  372. package/dist/components/ui/icon/icon.types.d.ts.map +0 -1
  373. package/dist/components/ui/icon/index.d.ts.map +0 -1
  374. package/dist/components/ui/icon-button/icon-button.d.ts.map +0 -1
  375. package/dist/components/ui/icon-button/icon-button.types.d.ts.map +0 -1
  376. package/dist/components/ui/icon-button/index.d.ts.map +0 -1
  377. package/dist/components/ui/index.d.ts.map +0 -1
  378. package/dist/components/ui/toggle/index.d.ts.map +0 -1
  379. package/dist/components/ui/toggle/toggle.d.ts.map +0 -1
  380. package/dist/components/ui/toggle/toggle.types.d.ts.map +0 -1
  381. package/dist/index.d.ts.map +0 -1
  382. package/dist/internal-components/image/index.d.ts.map +0 -1
  383. package/dist/internal-components/image/is-html-image-props.d.ts.map +0 -1
  384. package/dist/internal-components/image/render-image.d.ts.map +0 -1
  385. package/dist/internal-components/index.d.ts.map +0 -1
  386. package/dist/internal-components/link-wrapper/index.d.ts.map +0 -1
  387. package/dist/internal-components/link-wrapper/link-wrapper.d.ts.map +0 -1
  388. package/dist/internal-components/link-wrapper/link-wrapper.types.d.ts.map +0 -1
  389. package/dist/theme/css-name-configurations/theme-css-names.d.ts.map +0 -1
  390. package/dist/theme/css-name-configurations/theme-helper-utils.d.ts.map +0 -1
  391. package/dist/theme/default-theme.d.ts.map +0 -1
  392. package/dist/theme/generate-override-css.d.ts.map +0 -1
  393. package/dist/theme/index.d.ts.map +0 -1
  394. package/dist/theme/theme-mode.d.ts.map +0 -1
  395. package/dist/theme/theme-provider.d.ts.map +0 -1
  396. package/dist/theme/thread-script.d.ts.map +0 -1
  397. package/dist/theme/thread-theme.d.ts.map +0 -1
  398. package/dist/types/colors/index.d.ts.map +0 -1
  399. package/dist/types/colors/utility-color-options.types.d.ts.map +0 -1
  400. package/dist/types/image/image.types.d.ts.map +0 -1
  401. package/dist/types/image/index.d.ts.map +0 -1
  402. package/dist/types/index.d.ts.map +0 -1
  403. package/dist/types/theme/index.d.ts.map +0 -1
  404. package/dist/types/theme/theme.types.d.ts.map +0 -1
  405. package/dist/types/utility/deep-partial.types.d.ts.map +0 -1
  406. package/dist/types/utility/index.d.ts.map +0 -1
  407. package/dist/utils/deep-merge/deep-merge.d.ts.map +0 -1
  408. package/dist/utils/deep-merge/deep-merge.js.map +0 -1
  409. package/dist/utils/deep-merge/index.d.ts.map +0 -1
  410. package/dist/utils/deep-merge/index.js.map +0 -1
  411. package/dist/utils/get-colored-text-color/get-colored-text-color.d.ts.map +0 -1
  412. package/dist/utils/get-colored-text-color/get-colored-text-color.js.map +0 -1
  413. package/dist/utils/get-colored-text-color/index.d.ts.map +0 -1
  414. package/dist/utils/get-colored-text-color/index.js.map +0 -1
  415. package/dist/utils/get-text-color/get-text-color.d.ts.map +0 -1
  416. package/dist/utils/get-text-color/get-text-color.js.map +0 -1
  417. package/dist/utils/get-text-color/index.d.ts.map +0 -1
  418. package/dist/utils/get-text-color/index.js.map +0 -1
  419. package/dist/utils/get-utility-color/get-utility-color-value.d.ts.map +0 -1
  420. package/dist/utils/get-utility-color/get-utility-color-value.js.map +0 -1
  421. package/dist/utils/get-utility-color/index.d.ts.map +0 -1
  422. package/dist/utils/get-utility-color/index.js.map +0 -1
  423. package/dist/utils/get-utility-font-size/getUtilityFontSize.d.ts.map +0 -1
  424. package/dist/utils/get-utility-font-size/getUtilityFontSize.js.map +0 -1
  425. package/dist/utils/get-utility-font-size/index.d.ts.map +0 -1
  426. package/dist/utils/get-utility-font-size/index.js.map +0 -1
  427. package/dist/utils/get-utility-icon-size/get-utility-icon-size.d.ts +0 -4
  428. package/dist/utils/get-utility-icon-size/get-utility-icon-size.d.ts.map +0 -1
  429. package/dist/utils/get-utility-icon-size/get-utility-icon-size.js.map +0 -1
  430. package/dist/utils/get-utility-icon-size/index.d.ts.map +0 -1
  431. package/dist/utils/get-utility-icon-size/index.js.map +0 -1
  432. package/dist/utils/get-utility-size-value/get-utility-size-value.d.ts +0 -3
  433. package/dist/utils/get-utility-size-value/get-utility-size-value.d.ts.map +0 -1
  434. package/dist/utils/get-utility-size-value/get-utility-size-value.js.map +0 -1
  435. package/dist/utils/get-utility-size-value/index.d.ts.map +0 -1
  436. package/dist/utils/get-utility-size-value/index.js.map +0 -1
  437. package/dist/utils/index.d.ts.map +0 -1
  438. package/dist/utils/use-pathname/index.d.ts.map +0 -1
  439. package/dist/utils/use-pathname/index.js.map +0 -1
  440. package/dist/utils/use-pathname/use-pathname.d.ts.map +0 -1
  441. package/dist/utils/use-pathname/use-pathname.js.map +0 -1
  442. /package/dist/utils/{deep-merge → data-manipulation/deep-merge}/deep-merge.js +0 -0
  443. /package/dist/utils/{deep-merge → data-manipulation/deep-merge}/index.js +0 -0
  444. /package/dist/utils/{use-pathname → hooks/use-pathname}/index.js +0 -0
  445. /package/dist/utils/{use-pathname → hooks/use-pathname}/use-pathname.js +0 -0
  446. /package/dist/utils/{get-colored-text-color → theme-utilities/get-colored-text-color}/index.js +0 -0
  447. /package/dist/utils/{get-text-color → theme-utilities/get-text-color}/index.js +0 -0
  448. /package/dist/utils/{get-utility-color → theme-utilities/get-utility-color}/index.js +0 -0
  449. /package/dist/utils/{get-utility-font-size → theme-utilities/get-utility-font-size}/getUtilityFontSize.js +0 -0
  450. /package/dist/utils/{get-utility-font-size → theme-utilities/get-utility-font-size}/index.js +0 -0
  451. /package/dist/utils/{get-utility-icon-size → theme-utilities/get-utility-icon-size}/get-utility-icon-size.js +0 -0
  452. /package/dist/utils/{get-utility-icon-size → theme-utilities/get-utility-icon-size}/index.js +0 -0
  453. /package/dist/utils/{get-utility-size-value → theme-utilities/get-utility-size-value}/get-utility-size-value.js +0 -0
  454. /package/dist/utils/{get-utility-size-value → theme-utilities/get-utility-size-value}/index.js +0 -0
package/README.md CHANGED
@@ -1,30 +1,75 @@
1
1
  # Thread UI
2
2
 
3
- Thread is a UI Library I created for use in my [personal website](http://fisherandrew.org).
3
+ Thread is a React component library I built to create my [personal website](https://fisherandrew.org). It's designed around a clean, token-based theme system with full SSR support, dark mode, and easy customization.
4
4
 
5
- # Get Started
5
+ ## Get Started
6
6
 
7
- All components work out of the box. Documentation coming soon to thread.fisherandrew.org
7
+ All components work out of the box. Full documentation coming soon at thread.fisherandrew.org.
8
8
 
9
- # Features
10
-
11
- ## SSR
9
+ ```bash
10
+ npm install thread-ui
11
+ ```
12
12
 
13
- All CSS is pre-generated using `panda-css`, so most components can easily be rendered server-side.
13
+ ## Features
14
14
 
15
- ## Custom Themes
15
+ ### Custom Themes
16
16
 
17
- Thread-UI supports custom themes created by the user that override the default theme, even when using SSR in Next.js. To implement a custom theme, simply wrap the application contents in the `ThemeProvider` Component. The provider can be configured with a partial of the `Theme` type, to allow you to customize as much or as little as you want!
17
+ Thread supports custom themes that override the default design tokens, including when using SSR. Wrap your app in `ThemeProvider` and pass a partial `ThemeConfig` customize as much or as little as you want.
18
18
 
19
- For Example:
19
+ ```tsx
20
+ const customTheme: ThemeConfig = {
21
+ primary: {
22
+ light: '#4f46e5',
23
+ main: '#4338ca',
24
+ dark: '#3730a3',
25
+ },
26
+ };
20
27
 
28
+ return <ThemeProvider theme={customTheme}>{children}</ThemeProvider>;
21
29
  ```
22
- const ThreadTheme: ThemeConfig = {
23
- primary: {
24
- light: '#4f46e5',
25
- main: '#4338ca',
26
- dark: '#3730a3',
27
- },
28
- };
29
- return <ThemeProvider theme={ThreadTheme}>{children}</ThemeProvider>;
30
+
31
+ ### Dark Mode
32
+
33
+ Thread includes a built-in light/dark/system mode system. The `ThreadScript` component injects an inline script into your `<head>` that reads the user's saved preference from `localStorage` and sets `data-theme` on `:root` before the first paint — eliminating any flash of wrong-mode content.
34
+
35
+ ```tsx
36
+ // Next.js App Router
37
+ <html suppressHydrationWarning>
38
+ <head>
39
+ <ThreadScript defaultMode="system" />
40
+ </head>
41
+ <body>
42
+ <ThemeProvider>{children}</ThemeProvider>
43
+ </body>
44
+ </html>
30
45
  ```
46
+
47
+ ### SSR Compatible
48
+
49
+ Component CSS is pre-generated using Panda CSS, so components render correctly server-side without any runtime style injection. Most components are SSR compatible, and all work out of the box with `Next.js`.
50
+
51
+ ## Components
52
+
53
+ ### UI Elements
54
+
55
+ `Button` `Card` `Divider` `Icon` `IconButton` `Modal` `Toggle`
56
+
57
+ ### Media Display
58
+
59
+ `ImagePanel` `InfoCard` `MediaCard`
60
+
61
+ ### Typography Elements
62
+
63
+ `Title` `H1` `H2` `H3` `Text` `Subtitle` `List` `OrderedList` `PageHeader`
64
+
65
+ ### Navigation Components
66
+
67
+ `NavMenu` `SideNav`
68
+
69
+ ### Form Elements
70
+
71
+ `Dropdown` `FileUpload` `FormLabel` `NumberInput` `TextInput`
72
+
73
+ ### Layout Components
74
+
75
+ `ColumnLayout` `Footer` `MasonryLayout`
@@ -0,0 +1,13 @@
1
+ import { DropdownProps } from './dropdown.types';
2
+ /**
3
+ * Single-select dropdown with an option list and outside-click dismissal.
4
+ *
5
+ * @example
6
+ * <Dropdown
7
+ * title="Status"
8
+ * value={status}
9
+ * options={[{ label: 'Active', value: 'active' }, { label: 'Inactive', value: 'inactive' }]}
10
+ * onSelect={(val) => setStatus(val)}
11
+ * />
12
+ */
13
+ export declare const Dropdown: ({ id, title, value, options, onSelect, placeholder, }: DropdownProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,83 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useRef, useState } from 'react';
4
+ import { InputWrapper } from '../input-wrapper';
5
+ import { FormLabel } from '../form-label';
6
+ import { Icon } from '../../../components/ui';
7
+ import { css, cva, cx } from '../../../styled-system/css';
8
+ import { baseInputStyles } from '../styles';
9
+ import { useOutsideCloseClick } from '../../../utils';
10
+ /**
11
+ * Single-select dropdown with an option list and outside-click dismissal.
12
+ *
13
+ * @example
14
+ * <Dropdown
15
+ * title="Status"
16
+ * value={status}
17
+ * options={[{ label: 'Active', value: 'active' }, { label: 'Inactive', value: 'inactive' }]}
18
+ * onSelect={(val) => setStatus(val)}
19
+ * />
20
+ */
21
+ export const Dropdown = ({ id, title, value, options, onSelect, placeholder = 'Select an option...', }) => {
22
+ // UI State Controls
23
+ const [isOpen, setIsOpen] = useState(false);
24
+ const dropdownRef = useRef(null);
25
+ // Map Value to Dropdown Option
26
+ const selected = options.find((opt) => opt.value === value);
27
+ // User Actions
28
+ const handleSelect = (option) => {
29
+ onSelect(option.value);
30
+ setIsOpen(false);
31
+ };
32
+ const toggleDropdown = () => setIsOpen(!isOpen);
33
+ useOutsideCloseClick(true, dropdownRef, isOpen, () => setIsOpen(false));
34
+ // Styles
35
+ const styles = {
36
+ container: css({
37
+ width: '100%',
38
+ color: 'text.standard',
39
+ }),
40
+ interior: css({
41
+ width: '100%',
42
+ position: 'relative',
43
+ }),
44
+ surfaceButton: css({
45
+ width: '100%',
46
+ display: 'flex',
47
+ justifyContent: 'space-between',
48
+ alignItems: 'center',
49
+ }),
50
+ list: css({
51
+ backgroundColor: 'background',
52
+ position: 'absolute',
53
+ width: '100%',
54
+ borderWidth: 'md',
55
+ borderColor: 'structure',
56
+ borderRadius: 'md',
57
+ marginTop: '1',
58
+ boxShadow: 'lg',
59
+ zIndex: '10',
60
+ maxHeight: '60',
61
+ overflow: 'auto',
62
+ }),
63
+ item: cva({
64
+ base: {
65
+ cursor: 'pointer',
66
+ paddingX: '4',
67
+ paddingY: '2',
68
+ _hover: { backgroundColor: 'surface' },
69
+ },
70
+ variants: {
71
+ isSelected: {
72
+ true: {
73
+ backgroundColor: 'elevated',
74
+ },
75
+ },
76
+ },
77
+ }),
78
+ };
79
+ return (_jsx("div", { id: id, className: styles.container, children: _jsxs(InputWrapper, { children: [title && _jsx(FormLabel, { name: title, title: title }), _jsxs("div", { className: styles.interior, children: [_jsxs("button", { className: cx(styles.surfaceButton, baseInputStyles({ alt: true })), onClick: toggleDropdown, type: "button", children: [_jsx("span", { children: selected ? selected.label : placeholder }), _jsx(Icon, { name: isOpen ? 'CaretUp' : 'CaretDown', size: 16, color: "black" })] }), isOpen && (_jsx("ul", { className: styles.list, ref: dropdownRef, children: options.map((option, index) => (_jsx("li", { className: styles.item({
80
+ isSelected: option.value === selected?.value,
81
+ }), onClick: () => handleSelect(option), children: option.label }, index))) }))] })] }) }));
82
+ };
83
+ //# sourceMappingURL=dropdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown.js","sourceRoot":"","sources":["../../../../src/components/form-elements/dropdown/dropdown.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export type DropdownProps = {
2
+ /** Dropdown ID */
3
+ id?: string;
4
+ /** Optional title rendered above the dropdown */
5
+ title?: string;
6
+ /** Currently selected value — matched against `options` to display the selected label */
7
+ value?: string | number | null;
8
+ /** List of options to display */
9
+ options: DropdownOption[];
10
+ /** Called with the selected option's value when the user makes a selection */
11
+ onSelect: (value: string | number) => void;
12
+ /** Placeholder text shown when no value is selected @default 'Select an option...' */
13
+ placeholder?: string;
14
+ };
15
+ /**
16
+ * A single option in the Dropdown list.
17
+ */
18
+ export type DropdownOption = {
19
+ /** Display text shown in the list */
20
+ label: string;
21
+ /** Value passed to `onSelect` when this option is chosen */
22
+ value: string | number;
23
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dropdown.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown.types.js","sourceRoot":"","sources":["../../../../src/components/form-elements/dropdown/dropdown.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export type { DropdownProps } from './dropdown.types';
2
+ export { Dropdown } from './dropdown';
@@ -0,0 +1,2 @@
1
+ export { Dropdown } from './dropdown';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/form-elements/dropdown/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const FileInput: () => import("react/jsx-runtime").JSX.Element | undefined;
@@ -0,0 +1,93 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useCallback, useRef } from 'react';
4
+ import { Icon } from '../../../../components/ui';
5
+ import { useFileUploadContext } from '../file-upload-context';
6
+ import { css, cva, cx } from '../../../../styled-system/css';
7
+ import { Text } from '../../../../components/typography';
8
+ // Styles
9
+ const styles = {
10
+ dropzone: cva({
11
+ base: {
12
+ border: '2px dashed',
13
+ mx: 'auto',
14
+ rounded: 'lg',
15
+ textAlign: 'center',
16
+ display: 'flex',
17
+ alignItems: 'center',
18
+ borderColor: 'gray.300',
19
+ },
20
+ variants: {
21
+ size: {
22
+ sm: { flexDirection: 'row', justifyContent: 'center', gap: '7', p: '3' },
23
+ md: { flexDirection: 'row', justifyContent: 'center', gap: '7', p: '8' },
24
+ lg: { flexDirection: 'column', p: '8' },
25
+ },
26
+ },
27
+ }),
28
+ isDragging: css({ borderColor: 'blue.500', bg: 'surface' }),
29
+ contents: cva({
30
+ base: {
31
+ display: 'flex',
32
+ gap: '2',
33
+ flexDirection: 'column',
34
+ alignItems: 'center',
35
+ },
36
+ variants: {
37
+ size: {
38
+ sm: { flexDirection: 'row' },
39
+ md: {},
40
+ lg: {},
41
+ },
42
+ },
43
+ }),
44
+ button: cva({
45
+ base: {
46
+ color: 'info.main',
47
+ cursor: 'pointer',
48
+ _hover: { textDecoration: 'underline' },
49
+ },
50
+ variants: {
51
+ size: {
52
+ sm: { fontSize: 'xs' },
53
+ md: {},
54
+ lg: {},
55
+ },
56
+ },
57
+ }),
58
+ input: css({
59
+ display: 'none',
60
+ }),
61
+ };
62
+ export const FileInput = () => {
63
+ // Extract Context
64
+ const { id, name, allowedFileTypes, value, maxNumberFiles, isDragging, required, setIsDragging, size, status, supportedFormatsText, processFile, } = useFileUploadContext();
65
+ const fileInputRef = useRef(null);
66
+ // Drag UI Reactions
67
+ const handleDragOver = useCallback((e) => {
68
+ e.preventDefault();
69
+ setIsDragging(true);
70
+ }, []);
71
+ const handleDragLeave = useCallback((e) => {
72
+ e.preventDefault();
73
+ setIsDragging(false);
74
+ }, []);
75
+ const handleDrop = useCallback((e) => {
76
+ e.preventDefault();
77
+ setIsDragging(false);
78
+ const file = e.dataTransfer.files[0];
79
+ processFile(file);
80
+ }, []);
81
+ const handleFileUpload = (e) => {
82
+ const file = e.target.files?.[0];
83
+ if (file) {
84
+ processFile(file);
85
+ }
86
+ };
87
+ // If Maximum FIles Reached, return empty
88
+ if (maxNumberFiles !== undefined && value.length >= maxNumberFiles) {
89
+ return;
90
+ }
91
+ return (_jsxs("div", { className: cx(styles.dropzone({ size }), isDragging && styles.isDragging), onDragOver: handleDragOver, onDragLeave: handleDragLeave, onDrop: handleDrop, children: [_jsx(Icon, { name: "UploadSimple", size: size === 'sm' ? 24 : 48, color: "gray" }), _jsxs("div", { className: styles.contents({ size }), children: [_jsxs("span", { children: [!(size === 'sm') && _jsx(Text, { align: "center", children: "Drag and drop your file here" }), supportedFormatsText && (_jsx(Text, { align: "center", color: "text-secondary", size: "xxs", children: supportedFormatsText })), status && (_jsx(Text, { align: "center", color: "error", size: "xxs", children: status }))] }), _jsx("input", { type: "file", id: id, name: name, className: styles.input, accept: allowedFileTypes?.join(','), onChange: handleFileUpload, required: required, ref: fileInputRef }), _jsx("button", { className: styles.button({ size }), type: "button", onClick: () => fileInputRef.current?.click(), children: "Select a File" })] })] }));
92
+ };
93
+ //# sourceMappingURL=file-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-input.js","sourceRoot":"","sources":["../../../../../src/components/form-elements/file-upload/components/file-input.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const FileUploadContent: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,28 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { css } from '../../../../styled-system/css';
4
+ import { FormLabel } from '../../form-label';
5
+ import { useFileUploadContext } from '../file-upload-context';
6
+ import { Divider, IconButton } from '../../../../components/ui';
7
+ import { FileInput } from './file-input';
8
+ import { FilePreview } from './item-previews';
9
+ import { FileUploadPreview } from './file-upload-preview';
10
+ export const FileUploadContent = () => {
11
+ const { value, name, title, removeFile, selectedFile } = useFileUploadContext();
12
+ const styles = {
13
+ container: css({
14
+ width: '100%',
15
+ padding: '1',
16
+ }),
17
+ fileWrapper: css({
18
+ marginBottom: '2',
19
+ display: 'flex',
20
+ gap: '1',
21
+ flexDirection: 'column',
22
+ }),
23
+ };
24
+ return (_jsxs("div", { className: styles.container, children: [_jsx(FormLabel, { name: name, title: title }), _jsx(Divider, { width: "100%", marginY: "2px" }), _jsxs("div", { children: [value && (_jsx("div", { className: styles.fileWrapper, children: value.map((file, index) => (_jsx(FilePreview, { file: file, actions: _jsx(IconButton, { onClick: () => removeFile(index), name: "XSquare", size: "sm", color: "error" }) }, index))) })), !selectedFile ? (_jsx(FileInput, {})) : (
25
+ // Preview Selected File
26
+ _jsx(FileUploadPreview, {}))] })] }));
27
+ };
28
+ //# sourceMappingURL=file-upload-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-upload-content.js","sourceRoot":"","sources":["../../../../../src/components/form-elements/file-upload/components/file-upload-content.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,EAAE;IACrC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,oBAAoB,EAAE,CAAC;IAEhF,MAAM,MAAM,GAAG;QACd,SAAS,EAAE,GAAG,CAAC;YACd,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,GAAG;SACZ,CAAC;QACF,WAAW,EAAE,GAAG,CAAC;YAChB,YAAY,EAAE,GAAG;YACjB,OAAO,EAAE,MAAM;YACf,GAAG,EAAE,GAAG;YACR,aAAa,EAAE,QAAQ;SACvB,CAAC;KACF,CAAC;IAEF,OAAO,CACN,eAAK,SAAS,EAAE,MAAM,CAAC,SAAS,aAC/B,KAAC,SAAS,IAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAI,EACvC,KAAC,OAAO,IAAC,KAAK,EAAC,MAAM,EAAC,OAAO,EAAC,KAAK,GAAG,EACtC,0BAEE,KAAK,IAAI,CACT,cAAK,SAAS,EAAE,MAAM,CAAC,WAAW,YAChC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAC3B,KAAC,WAAW,IAEX,IAAI,EAAE,IAAI,EACV,OAAO,EACN,KAAC,UAAU,IACV,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAChC,IAAI,EAAC,SAAS,EACd,IAAI,EAAC,IAAI,EACT,KAAK,EAAC,OAAO,GACZ,IARE,KAAK,CAUT,CACF,CAAC,GACG,CACN,EACA,CAAC,YAAY,CAAC,CAAC,CAAC,CAChB,KAAC,SAAS,KAAG,CACb,CAAC,CAAC,CAAC;oBACH,wBAAwB;oBACxB,KAAC,iBAAiB,KAAG,CACrB,IACI,IACD,CACN,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const FileUploadPreview: () => import("react/jsx-runtime").JSX.Element | undefined;
@@ -0,0 +1,51 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { isFileImageType } from '../../../../utils';
4
+ import { TextInput } from '../../text-input';
5
+ import { useFileUploadContext } from '../file-upload-context';
6
+ import { FilePreview, ImageDisplay } from './item-previews';
7
+ import { Button } from '../../../../components/ui';
8
+ import { css } from '../../../../styled-system/css';
9
+ import { Text } from '../../../../components/typography';
10
+ export const FileUploadPreview = () => {
11
+ const { selectedFile, preview, customFilename, setCustomFilename, alt, setAlt, handleClearFile, saveFile, } = useFileUploadContext();
12
+ if (!selectedFile) {
13
+ return;
14
+ }
15
+ const styles = {
16
+ container: css({
17
+ display: 'flex',
18
+ gap: '4',
19
+ flexDirection: 'column',
20
+ width: '100%',
21
+ marginX: 'auto',
22
+ justifyContent: {
23
+ base: 'normal',
24
+ md: 'space-between',
25
+ },
26
+ alignItems: 'center',
27
+ }),
28
+ contents: css({
29
+ width: '100%',
30
+ display: 'flex',
31
+ flexDirection: 'row',
32
+ justifyContent: 'start',
33
+ gap: '2',
34
+ }),
35
+ item: css({
36
+ width: '100%',
37
+ }),
38
+ actionBlock: css({
39
+ alignSelf: 'flex-end',
40
+ display: 'flex',
41
+ gap: '3',
42
+ flexDirection: 'column',
43
+ }),
44
+ actionContent: css({
45
+ display: 'flex',
46
+ gap: '2',
47
+ }),
48
+ };
49
+ return (_jsxs("div", { className: styles.container, children: [preview ? _jsx(ImageDisplay, { src: preview }) : _jsx(FilePreview, { file: selectedFile }), _jsxs("div", { className: styles.contents, children: [_jsxs("div", { className: styles.item, children: [_jsx(TextInput, { name: "filename", title: "Filename:", value: customFilename, onChange: (e) => setCustomFilename(e.target.value), required: true }), _jsxs(Text, { color: "text-secondary", size: "xs", children: ["Extension: .", selectedFile.name.split('.').pop()] })] }), isFileImageType(selectedFile) && (_jsx("div", { className: styles.item, children: _jsx(TextInput, { name: "alt", title: "Alt Text:", value: alt, onChange: (e) => setAlt(e.target.value) }) }))] }), _jsx("div", { className: styles.actionBlock, children: _jsx("div", { className: styles.actionContent, children: _jsxs(_Fragment, { children: [_jsx(Button, { type: "button", color: "error", onClick: handleClearFile, children: "Remove" }), _jsx(Button, { type: "button", onClick: saveFile, fullWidth: true, children: "Add File" })] }) }) })] }));
50
+ };
51
+ //# sourceMappingURL=file-upload-preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-upload-preview.js","sourceRoot":"","sources":["../../../../../src/components/form-elements/file-upload/components/file-upload-preview.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { ReactNode } from 'react';
2
+ export type ImageDisplayProps = {
3
+ src: string;
4
+ action?: () => void;
5
+ };
6
+ export declare const ImageDisplay: ({ src, action }: ImageDisplayProps) => import("react/jsx-runtime").JSX.Element;
7
+ export type FilePreviewProps = {
8
+ file: File;
9
+ actions?: ReactNode;
10
+ };
11
+ export declare const FilePreview: ({ file, actions }: FilePreviewProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,58 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Text } from '../../../../components/typography';
3
+ import { Icon, IconButton } from '../../../../components/ui';
4
+ import { css } from '../../../../styled-system/css';
5
+ import { isFileImageType } from '../../../../utils';
6
+ export const ImageDisplay = ({ src, action }) => {
7
+ const styles = {
8
+ image: css({
9
+ width: '100%',
10
+ height: '100%',
11
+ objectFit: 'cover',
12
+ borderRadius: 'md',
13
+ maxHeight: '6rem',
14
+ maxWidth: '6rem',
15
+ }),
16
+ wrapper: css({
17
+ display: 'flex',
18
+ flexDirection: 'row',
19
+ justifyContent: 'center',
20
+ gap: '3',
21
+ }),
22
+ };
23
+ const fixedImageStyles = {
24
+ height: 'auto',
25
+ width: 'auto',
26
+ maxWidth: '256px',
27
+ maxHeight: '400px',
28
+ };
29
+ if (action) {
30
+ return (_jsxs("div", { className: styles.wrapper, children: [_jsx("img", { src: src, alt: "Preview", className: styles.image }), _jsx(IconButton, { onClick: action, name: "XSquare", size: "md", color: "error" })] }));
31
+ }
32
+ return _jsx("img", { src: src, alt: "Preview", className: styles.image, style: fixedImageStyles });
33
+ };
34
+ export const FilePreview = ({ file, actions }) => {
35
+ const styles = {
36
+ container: css({
37
+ width: '100%',
38
+ display: 'flex',
39
+ alignItems: 'center',
40
+ justifyContent: 'space-between',
41
+ borderRadius: 'md',
42
+ backgroundColor: 'gray.light',
43
+ paddingY: '2',
44
+ paddingX: '5',
45
+ }),
46
+ innerWrapper: css({
47
+ display: 'flex',
48
+ gap: '2',
49
+ }),
50
+ content: css({
51
+ overflow: 'hidden',
52
+ textOverflow: 'ellipsis',
53
+ whiteSpace: 'nowrap',
54
+ }),
55
+ };
56
+ return (_jsxs("div", { className: styles.container, children: [_jsxs("div", { className: styles.innerWrapper, children: [_jsx(Icon, { name: isFileImageType(file) ? 'Image' : 'FileText', size: 48, color: "gray" }), _jsxs("div", { className: styles.content, children: [_jsx(Text, { size: "sm", children: file.name }), _jsxs(Text, { size: "xs", color: "text-secondary", children: [(file.size / 1024).toFixed(1), " KB"] })] })] }), actions && actions] }));
57
+ };
58
+ //# sourceMappingURL=item-previews.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item-previews.js","sourceRoot":"","sources":["../../../../../src/components/form-elements/file-upload/components/item-previews.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { FileUploadContext } from './file-upload.types';
2
+ export declare const FileUploadProvider: import("react").Provider<FileUploadContext | undefined>, useFileUploadContext: () => NonNullable<FileUploadContext>;
@@ -0,0 +1,4 @@
1
+ 'use client';
2
+ import { createComponentContext } from '../../../utils';
3
+ export const [FileUploadProvider, useFileUploadContext] = createComponentContext('FileUpload');
4
+ //# sourceMappingURL=file-upload-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-upload-context.js","sourceRoot":"","sources":["../../../../src/components/form-elements/file-upload/file-upload-context.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAGjD,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,GACtD,sBAAsB,CAAoB,YAAY,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { FileUploadProps } from './file-upload.types';
2
+ /**
3
+ * File upload component with drag-and-drop, file validation, image preview,
4
+ * and optional filename/alt text editing before saving.
5
+ *
6
+ * Validates against allowed MIME types, max file size, and max file count.
7
+ * Image files generate a preview; non-image files show a generic indicator.
8
+ *
9
+ * @example
10
+ * <FileUpload
11
+ * name="attachments"
12
+ * value={value}
13
+ * onChange={onChange}
14
+ * allowedFileTypes={['image/*', 'application/pdf']}
15
+ * maxFileSize={5 * 1024 * 1024}
16
+ * maxNumberFiles={3}
17
+ * />
18
+ */
19
+ export declare const FileUpload: ({ title, name, id, value, onChange, allowedFileTypes, maxFileSize, maxNumberFiles, supportedFormatsText, required, size, }: FileUploadProps) => import("react/jsx-runtime").JSX.Element;