@kosmeo-ui/react 0.2.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (336) hide show
  1. package/README.md +3 -1
  2. package/dist/components/buttons/button/styles.css +43 -43
  3. package/dist/components/buttons/rowActions/index.d.ts.map +1 -1
  4. package/dist/components/buttons/rowActions/index.js +2 -1
  5. package/dist/components/buttons/rowActions/index.js.map +1 -1
  6. package/dist/components/data-display/addressBlock/styles.css +2 -2
  7. package/dist/components/data-display/colorSwatch/index.d.ts +1 -1
  8. package/dist/components/data-display/colorSwatch/index.d.ts.map +1 -1
  9. package/dist/components/data-display/colorSwatch/index.js +1 -1
  10. package/dist/components/data-display/colorSwatch/index.js.map +1 -1
  11. package/dist/components/data-display/colorSwatch/styles.css +1 -1
  12. package/dist/components/data-display/dataTable/index.d.ts.map +1 -1
  13. package/dist/components/data-display/dataTable/index.js +7 -3
  14. package/dist/components/data-display/dataTable/index.js.map +1 -1
  15. package/dist/components/data-display/dataTable/styles.css +3 -2
  16. package/dist/components/data-display/dataTable/utils/parseDataKey.d.ts +8 -1
  17. package/dist/components/data-display/dataTable/utils/parseDataKey.d.ts.map +1 -1
  18. package/dist/components/data-display/dataTable/utils/parseDataKey.js +13 -41
  19. package/dist/components/data-display/dataTable/utils/parseDataKey.js.map +1 -1
  20. package/dist/components/data-display/imagePreview/styles.css +2 -2
  21. package/dist/components/data-display/infiniteScroll/filters/index.d.ts +4 -0
  22. package/dist/components/data-display/infiniteScroll/filters/index.d.ts.map +1 -1
  23. package/dist/components/data-display/infiniteScroll/filters/index.js +12 -2
  24. package/dist/components/data-display/infiniteScroll/filters/index.js.map +1 -1
  25. package/dist/components/data-display/infiniteScroll/filters/listFilter.d.ts.map +1 -1
  26. package/dist/components/data-display/infiniteScroll/filters/listFilter.js +1 -1
  27. package/dist/components/data-display/infiniteScroll/filters/listFilter.js.map +1 -1
  28. package/dist/components/data-display/infiniteScroll/filters/rangeFilter.d.ts +6 -0
  29. package/dist/components/data-display/infiniteScroll/filters/rangeFilter.d.ts.map +1 -1
  30. package/dist/components/data-display/infiniteScroll/filters/rangeFilter.js +55 -46
  31. package/dist/components/data-display/infiniteScroll/filters/rangeFilter.js.map +1 -1
  32. package/dist/components/data-display/infiniteScroll/filters/selectFilter.d.ts.map +1 -1
  33. package/dist/components/data-display/infiniteScroll/filters/selectFilter.js +3 -5
  34. package/dist/components/data-display/infiniteScroll/filters/selectFilter.js.map +1 -1
  35. package/dist/components/data-display/infiniteScroll/filters/styles.css +30 -1
  36. package/dist/components/data-display/infiniteScroll/header/limit.d.ts.map +1 -1
  37. package/dist/components/data-display/infiniteScroll/header/limit.js +1 -1
  38. package/dist/components/data-display/infiniteScroll/header/limit.js.map +1 -1
  39. package/dist/components/data-display/infiniteScroll/header/sortBy.d.ts.map +1 -1
  40. package/dist/components/data-display/infiniteScroll/header/sortBy.js +1 -1
  41. package/dist/components/data-display/infiniteScroll/header/sortBy.js.map +1 -1
  42. package/dist/components/data-display/infiniteScroll/header/sortDirection.d.ts.map +1 -1
  43. package/dist/components/data-display/infiniteScroll/header/sortDirection.js +1 -1
  44. package/dist/components/data-display/infiniteScroll/header/sortDirection.js.map +1 -1
  45. package/dist/components/data-display/infiniteScroll/index.d.ts +8 -0
  46. package/dist/components/data-display/infiniteScroll/index.d.ts.map +1 -1
  47. package/dist/components/data-display/infiniteScroll/index.js +41 -23
  48. package/dist/components/data-display/infiniteScroll/index.js.map +1 -1
  49. package/dist/components/data-display/infiniteScroll/styles.css +2 -2
  50. package/dist/components/data-display/infiniteScroll/tags/index.d.ts.map +1 -1
  51. package/dist/components/data-display/infiniteScroll/tags/index.js +6 -5
  52. package/dist/components/data-display/infiniteScroll/tags/index.js.map +1 -1
  53. package/dist/components/data-display/infiniteScroll/tags/listFilterTag.d.ts.map +1 -1
  54. package/dist/components/data-display/infiniteScroll/tags/listFilterTag.js +6 -6
  55. package/dist/components/data-display/infiniteScroll/tags/listFilterTag.js.map +1 -1
  56. package/dist/components/data-display/infiniteScroll/tags/rangeFilterTag.d.ts.map +1 -1
  57. package/dist/components/data-display/infiniteScroll/tags/rangeFilterTag.js +3 -5
  58. package/dist/components/data-display/infiniteScroll/tags/rangeFilterTag.js.map +1 -1
  59. package/dist/components/data-display/infiniteScroll/utils/generateQueryString.d.ts +6 -0
  60. package/dist/components/data-display/infiniteScroll/utils/generateQueryString.d.ts.map +1 -1
  61. package/dist/components/data-display/infiniteScroll/utils/generateQueryString.js +24 -12
  62. package/dist/components/data-display/infiniteScroll/utils/generateQueryString.js.map +1 -1
  63. package/dist/components/data-display/infiniteScroll/utils/hasPendingChanges.d.ts +11 -1
  64. package/dist/components/data-display/infiniteScroll/utils/hasPendingChanges.d.ts.map +1 -1
  65. package/dist/components/data-display/infiniteScroll/utils/hasPendingChanges.js +37 -18
  66. package/dist/components/data-display/infiniteScroll/utils/hasPendingChanges.js.map +1 -1
  67. package/dist/components/data-display/listCard/styles.css +3 -3
  68. package/dist/components/data-display/listRow/styles.css +2 -2
  69. package/dist/components/data-display/recoveryCodeGrid/styles.css +3 -3
  70. package/dist/components/data-display/secretDisplay/styles.css +4 -4
  71. package/dist/components/data-display/statCard/styles.css +12 -12
  72. package/dist/components/data-display/summaryRow/styles.css +4 -4
  73. package/dist/components/data-display/table/index.d.ts.map +1 -1
  74. package/dist/components/data-display/table/index.js +2 -2
  75. package/dist/components/data-display/table/index.js.map +1 -1
  76. package/dist/components/data-display/table/styles.css +10 -10
  77. package/dist/components/data-display/tableFilters/index.d.ts +30 -0
  78. package/dist/components/data-display/tableFilters/index.d.ts.map +1 -0
  79. package/dist/components/data-display/tableFilters/index.js +67 -0
  80. package/dist/components/data-display/tableFilters/index.js.map +1 -0
  81. package/dist/components/data-display/tagCard/index.d.ts.map +1 -1
  82. package/dist/components/data-display/tagCard/index.js +1 -1
  83. package/dist/components/data-display/tagCard/index.js.map +1 -1
  84. package/dist/components/data-display/tagCard/styles.css +1 -1
  85. package/dist/components/feedback/alert/styles.css +15 -15
  86. package/dist/components/feedback/badge/index.d.ts.map +1 -1
  87. package/dist/components/feedback/badge/index.js +14 -8
  88. package/dist/components/feedback/badge/index.js.map +1 -1
  89. package/dist/components/feedback/badge/styles.css +44 -46
  90. package/dist/components/feedback/emptyState/styles.css +2 -2
  91. package/dist/components/feedback/loadingOverlay/styles.css +1 -1
  92. package/dist/components/feedback/progressBar/styles.css +11 -11
  93. package/dist/components/feedback/spinner/styles.css +14 -11
  94. package/dist/components/feedback/tooltip/styles.css +9 -7
  95. package/dist/components/forms/detailField/styles.css +1 -1
  96. package/dist/components/forms/fieldShell/index.d.ts +3 -1
  97. package/dist/components/forms/fieldShell/index.d.ts.map +1 -1
  98. package/dist/components/forms/fieldShell/index.js +1 -1
  99. package/dist/components/forms/fieldShell/index.js.map +1 -1
  100. package/dist/components/forms/fieldShell/styles.css +5 -5
  101. package/dist/components/forms/form/styles.css +6 -6
  102. package/dist/components/forms/formActions/styles.css +4 -4
  103. package/dist/components/forms/formGrid/styles.css +32 -0
  104. package/dist/components/forms/infoRow/styles.css +2 -2
  105. package/dist/components/forms/optionsGroup/index.d.ts +3 -1
  106. package/dist/components/forms/optionsGroup/index.d.ts.map +1 -1
  107. package/dist/components/forms/optionsGroup/index.js +5 -1
  108. package/dist/components/forms/optionsGroup/index.js.map +1 -1
  109. package/dist/components/forms/optionsGroup/styles.css +1 -1
  110. package/dist/components/forms/requiredAsterisk/index.d.ts.map +1 -1
  111. package/dist/components/forms/requiredAsterisk/index.js +3 -2
  112. package/dist/components/forms/requiredAsterisk/index.js.map +1 -1
  113. package/dist/components/forms/requiredAsterisk/styles.css +1 -1
  114. package/dist/components/index.d.ts +2 -0
  115. package/dist/components/index.d.ts.map +1 -1
  116. package/dist/components/index.js +1 -0
  117. package/dist/components/index.js.map +1 -1
  118. package/dist/components/inputs/checkbox/index.d.ts.map +1 -1
  119. package/dist/components/inputs/checkbox/index.js +3 -1
  120. package/dist/components/inputs/checkbox/index.js.map +1 -1
  121. package/dist/components/inputs/checkbox/styles.css +4 -4
  122. package/dist/components/inputs/colorPicker/index.d.ts.map +1 -1
  123. package/dist/components/inputs/colorPicker/index.js +3 -1
  124. package/dist/components/inputs/colorPicker/index.js.map +1 -1
  125. package/dist/components/inputs/colorPicker/styles.css +3 -3
  126. package/dist/components/inputs/dateInput/index.d.ts +3 -3
  127. package/dist/components/inputs/dateInput/index.d.ts.map +1 -1
  128. package/dist/components/inputs/dateInput/index.js +2 -2
  129. package/dist/components/inputs/dateInput/index.js.map +1 -1
  130. package/dist/components/inputs/dateInput/styles.css +5 -5
  131. package/dist/components/inputs/dateInput/utils.d.ts +0 -1
  132. package/dist/components/inputs/dateInput/utils.d.ts.map +1 -1
  133. package/dist/components/inputs/dateInput/utils.js +13 -8
  134. package/dist/components/inputs/dateInput/utils.js.map +1 -1
  135. package/dist/components/inputs/dropdown/index.js +1 -1
  136. package/dist/components/inputs/dropdown/index.js.map +1 -1
  137. package/dist/components/inputs/dropdown/styles.css +2 -2
  138. package/dist/components/inputs/dropdownArrowButton/styles.css +7 -5
  139. package/dist/components/inputs/fileDropZone/index.d.ts.map +1 -1
  140. package/dist/components/inputs/fileDropZone/index.js +3 -2
  141. package/dist/components/inputs/fileDropZone/index.js.map +1 -1
  142. package/dist/components/inputs/fileDropZone/styles.css +12 -12
  143. package/dist/components/inputs/fileUpload/index.d.ts.map +1 -1
  144. package/dist/components/inputs/fileUpload/index.js +11 -6
  145. package/dist/components/inputs/fileUpload/index.js.map +1 -1
  146. package/dist/components/inputs/fileUpload/styles.css +9 -9
  147. package/dist/components/inputs/input/index.d.ts +12 -0
  148. package/dist/components/inputs/input/index.d.ts.map +1 -1
  149. package/dist/components/inputs/input/index.js +4 -3
  150. package/dist/components/inputs/input/index.js.map +1 -1
  151. package/dist/components/inputs/input/styles.css +28 -28
  152. package/dist/components/inputs/languageSelect/index.d.ts.map +1 -1
  153. package/dist/components/inputs/languageSelect/index.js +15 -4
  154. package/dist/components/inputs/languageSelect/index.js.map +1 -1
  155. package/dist/components/inputs/multiSelect/dropDown.d.ts +7 -0
  156. package/dist/components/inputs/multiSelect/dropDown.d.ts.map +1 -1
  157. package/dist/components/inputs/multiSelect/dropDown.js +19 -12
  158. package/dist/components/inputs/multiSelect/dropDown.js.map +1 -1
  159. package/dist/components/inputs/multiSelect/index.d.ts.map +1 -1
  160. package/dist/components/inputs/multiSelect/index.js +49 -13
  161. package/dist/components/inputs/multiSelect/index.js.map +1 -1
  162. package/dist/components/inputs/multiSelect/styles.css +51 -43
  163. package/dist/components/inputs/multiSelect/utils.d.ts +7 -0
  164. package/dist/components/inputs/multiSelect/utils.d.ts.map +1 -0
  165. package/dist/components/inputs/multiSelect/utils.js +18 -0
  166. package/dist/components/inputs/multiSelect/utils.js.map +1 -0
  167. package/dist/components/inputs/phoneInput/index.d.ts.map +1 -1
  168. package/dist/components/inputs/phoneInput/index.js +11 -3
  169. package/dist/components/inputs/phoneInput/index.js.map +1 -1
  170. package/dist/components/inputs/phoneInput/styles.css +13 -13
  171. package/dist/components/inputs/radioGroup/index.d.ts.map +1 -1
  172. package/dist/components/inputs/radioGroup/index.js +1 -1
  173. package/dist/components/inputs/radioGroup/index.js.map +1 -1
  174. package/dist/components/inputs/richTextEditor/index.d.ts.map +1 -1
  175. package/dist/components/inputs/richTextEditor/index.js +21 -22
  176. package/dist/components/inputs/richTextEditor/index.js.map +1 -1
  177. package/dist/components/inputs/richTextEditor/styles.css +24 -24
  178. package/dist/components/inputs/searchList/index.d.ts +4 -1
  179. package/dist/components/inputs/searchList/index.d.ts.map +1 -1
  180. package/dist/components/inputs/searchList/index.js +46 -31
  181. package/dist/components/inputs/searchList/index.js.map +1 -1
  182. package/dist/components/inputs/searchList/styles.css +22 -22
  183. package/dist/components/inputs/searchSelect/index.d.ts.map +1 -1
  184. package/dist/components/inputs/searchSelect/index.js +8 -2
  185. package/dist/components/inputs/searchSelect/index.js.map +1 -1
  186. package/dist/components/inputs/select/index.js +3 -2
  187. package/dist/components/inputs/select/index.js.map +1 -1
  188. package/dist/components/inputs/select/styles.css +93 -15
  189. package/dist/components/inputs/switch/index.d.ts.map +1 -1
  190. package/dist/components/inputs/switch/index.js +3 -1
  191. package/dist/components/inputs/switch/index.js.map +1 -1
  192. package/dist/components/inputs/switch/styles.css +5 -5
  193. package/dist/components/inputs/textArea/index.d.ts.map +1 -1
  194. package/dist/components/inputs/textArea/index.js +3 -2
  195. package/dist/components/inputs/textArea/index.js.map +1 -1
  196. package/dist/components/inputs/textArea/styles.css +11 -11
  197. package/dist/components/inputs/typeahead/index.d.ts.map +1 -1
  198. package/dist/components/inputs/typeahead/index.js +21 -6
  199. package/dist/components/inputs/typeahead/index.js.map +1 -1
  200. package/dist/components/inputs/typeahead/styles.css +13 -13
  201. package/dist/components/layout/authPage/styles.css +6 -6
  202. package/dist/components/layout/borderedSection/styles.css +3 -3
  203. package/dist/components/layout/card/styles.css +31 -31
  204. package/dist/components/layout/col/styles.css +1 -1
  205. package/dist/components/layout/page/styles.css +25 -5
  206. package/dist/components/layout/sectionHeader/styles.css +3 -3
  207. package/dist/components/navigation/breadcrumbs/styles.css +7 -7
  208. package/dist/components/navigation/pagination/styles.css +15 -15
  209. package/dist/components/navigation/sidebar/styles.css +6 -6
  210. package/dist/components/navigation/stepper/styles.css +14 -14
  211. package/dist/components/navigation/tabButton/styles.css +59 -59
  212. package/dist/components/navigation/tabs/styles.css +5 -5
  213. package/dist/components/overlays/modal/styles.css +19 -19
  214. package/dist/hooks/useInfinite.d.ts +3 -1
  215. package/dist/hooks/useInfinite.d.ts.map +1 -1
  216. package/dist/hooks/useInfinite.js +4 -2
  217. package/dist/hooks/useInfinite.js.map +1 -1
  218. package/dist/hooks/useInfiniteArchivableCursor.d.ts +1 -1
  219. package/dist/hooks/useInfiniteArchivableCursor.d.ts.map +1 -1
  220. package/dist/hooks/useInfiniteArchivableCursor.js +11 -4
  221. package/dist/hooks/useInfiniteArchivableCursor.js.map +1 -1
  222. package/dist/hooks/useInfiniteCursor.d.ts +1 -1
  223. package/dist/hooks/useInfiniteCursor.d.ts.map +1 -1
  224. package/dist/hooks/useInfiniteCursor.js +11 -4
  225. package/dist/hooks/useInfiniteCursor.js.map +1 -1
  226. package/dist/styles.css +142 -127
  227. package/package.json +15 -4
  228. package/src/components/buttons/button/styles.css +43 -43
  229. package/src/components/buttons/rowActions/index.tsx +6 -1
  230. package/src/components/data-display/addressBlock/styles.css +2 -2
  231. package/src/components/data-display/colorSwatch/index.tsx +2 -2
  232. package/src/components/data-display/colorSwatch/styles.css +1 -1
  233. package/src/components/data-display/dataTable/index.tsx +6 -3
  234. package/src/components/data-display/dataTable/styles.css +3 -2
  235. package/src/components/data-display/dataTable/utils/parseDataKey.ts +18 -36
  236. package/src/components/data-display/imagePreview/styles.css +2 -2
  237. package/src/components/data-display/infiniteScroll/filters/index.tsx +18 -1
  238. package/src/components/data-display/infiniteScroll/filters/listFilter.tsx +1 -0
  239. package/src/components/data-display/infiniteScroll/filters/rangeFilter.tsx +77 -33
  240. package/src/components/data-display/infiniteScroll/filters/selectFilter.tsx +11 -17
  241. package/src/components/data-display/infiniteScroll/filters/styles.css +30 -1
  242. package/src/components/data-display/infiniteScroll/header/limit.tsx +1 -0
  243. package/src/components/data-display/infiniteScroll/header/sortBy.tsx +1 -0
  244. package/src/components/data-display/infiniteScroll/header/sortDirection.tsx +1 -0
  245. package/src/components/data-display/infiniteScroll/index.tsx +75 -29
  246. package/src/components/data-display/infiniteScroll/styles.css +2 -2
  247. package/src/components/data-display/infiniteScroll/tags/index.tsx +6 -5
  248. package/src/components/data-display/infiniteScroll/tags/listFilterTag.tsx +20 -13
  249. package/src/components/data-display/infiniteScroll/tags/rangeFilterTag.tsx +4 -3
  250. package/src/components/data-display/infiniteScroll/utils/generateQueryString.ts +28 -13
  251. package/src/components/data-display/infiniteScroll/utils/hasPendingChanges.ts +48 -16
  252. package/src/components/data-display/listCard/styles.css +3 -3
  253. package/src/components/data-display/listRow/styles.css +2 -2
  254. package/src/components/data-display/recoveryCodeGrid/styles.css +3 -3
  255. package/src/components/data-display/secretDisplay/styles.css +4 -4
  256. package/src/components/data-display/statCard/styles.css +12 -12
  257. package/src/components/data-display/summaryRow/styles.css +4 -4
  258. package/src/components/data-display/table/index.tsx +2 -2
  259. package/src/components/data-display/table/styles.css +10 -10
  260. package/src/components/data-display/tableFilters/index.tsx +147 -0
  261. package/src/components/data-display/tagCard/index.tsx +3 -2
  262. package/src/components/data-display/tagCard/styles.css +1 -1
  263. package/src/components/feedback/alert/styles.css +15 -15
  264. package/src/components/feedback/badge/index.tsx +36 -16
  265. package/src/components/feedback/badge/styles.css +44 -46
  266. package/src/components/feedback/emptyState/styles.css +2 -2
  267. package/src/components/feedback/loadingOverlay/styles.css +1 -1
  268. package/src/components/feedback/progressBar/styles.css +11 -11
  269. package/src/components/feedback/spinner/styles.css +14 -11
  270. package/src/components/feedback/tooltip/styles.css +9 -7
  271. package/src/components/forms/detailField/styles.css +1 -1
  272. package/src/components/forms/fieldShell/index.tsx +4 -1
  273. package/src/components/forms/fieldShell/styles.css +5 -5
  274. package/src/components/forms/form/styles.css +6 -6
  275. package/src/components/forms/formActions/styles.css +4 -4
  276. package/src/components/forms/formGrid/styles.css +32 -0
  277. package/src/components/forms/infoRow/styles.css +2 -2
  278. package/src/components/forms/optionsGroup/index.tsx +31 -12
  279. package/src/components/forms/optionsGroup/styles.css +1 -1
  280. package/src/components/forms/requiredAsterisk/index.tsx +5 -1
  281. package/src/components/forms/requiredAsterisk/styles.css +1 -1
  282. package/src/components/index.ts +2 -0
  283. package/src/components/inputs/checkbox/index.tsx +3 -2
  284. package/src/components/inputs/checkbox/styles.css +4 -4
  285. package/src/components/inputs/colorPicker/index.tsx +5 -2
  286. package/src/components/inputs/colorPicker/styles.css +3 -3
  287. package/src/components/inputs/dateInput/index.tsx +4 -5
  288. package/src/components/inputs/dateInput/styles.css +5 -5
  289. package/src/components/inputs/dateInput/utils.ts +12 -8
  290. package/src/components/inputs/dropdown/index.tsx +1 -1
  291. package/src/components/inputs/dropdown/styles.css +2 -2
  292. package/src/components/inputs/dropdownArrowButton/styles.css +7 -5
  293. package/src/components/inputs/fileDropZone/index.tsx +4 -3
  294. package/src/components/inputs/fileDropZone/styles.css +12 -12
  295. package/src/components/inputs/fileUpload/index.tsx +33 -23
  296. package/src/components/inputs/fileUpload/styles.css +9 -9
  297. package/src/components/inputs/input/index.tsx +21 -3
  298. package/src/components/inputs/input/styles.css +28 -28
  299. package/src/components/inputs/languageSelect/index.tsx +19 -4
  300. package/src/components/inputs/multiSelect/dropDown.tsx +83 -35
  301. package/src/components/inputs/multiSelect/index.tsx +87 -30
  302. package/src/components/inputs/multiSelect/styles.css +51 -43
  303. package/src/components/inputs/multiSelect/utils.ts +18 -0
  304. package/src/components/inputs/phoneInput/index.tsx +10 -2
  305. package/src/components/inputs/phoneInput/styles.css +13 -13
  306. package/src/components/inputs/radioGroup/index.tsx +2 -1
  307. package/src/components/inputs/richTextEditor/index.tsx +42 -44
  308. package/src/components/inputs/richTextEditor/styles.css +24 -24
  309. package/src/components/inputs/searchList/index.tsx +121 -109
  310. package/src/components/inputs/searchList/styles.css +22 -22
  311. package/src/components/inputs/searchSelect/index.tsx +8 -2
  312. package/src/components/inputs/select/index.tsx +3 -3
  313. package/src/components/inputs/select/styles.css +93 -15
  314. package/src/components/inputs/switch/index.tsx +3 -2
  315. package/src/components/inputs/switch/styles.css +5 -5
  316. package/src/components/inputs/textArea/index.tsx +3 -3
  317. package/src/components/inputs/textArea/styles.css +11 -11
  318. package/src/components/inputs/typeahead/index.tsx +84 -54
  319. package/src/components/inputs/typeahead/styles.css +13 -13
  320. package/src/components/layout/authPage/styles.css +6 -6
  321. package/src/components/layout/borderedSection/styles.css +3 -3
  322. package/src/components/layout/card/styles.css +31 -31
  323. package/src/components/layout/col/styles.css +1 -1
  324. package/src/components/layout/page/styles.css +25 -5
  325. package/src/components/layout/sectionHeader/styles.css +3 -3
  326. package/src/components/navigation/breadcrumbs/styles.css +7 -7
  327. package/src/components/navigation/pagination/styles.css +15 -15
  328. package/src/components/navigation/sidebar/styles.css +6 -6
  329. package/src/components/navigation/stepper/styles.css +14 -14
  330. package/src/components/navigation/tabButton/styles.css +59 -59
  331. package/src/components/navigation/tabs/styles.css +5 -5
  332. package/src/components/overlays/modal/styles.css +19 -19
  333. package/src/hooks/useInfinite.ts +7 -3
  334. package/src/hooks/useInfiniteArchivableCursor.ts +11 -4
  335. package/src/hooks/useInfiniteCursor.ts +11 -4
  336. package/src/styles.css +142 -127
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { useState } from "react";
3
+ import { useId, useState } from "react";
4
4
  import "./styles.css";
5
5
 
6
6
  export interface FileDropZoneProps {
@@ -24,6 +24,7 @@ const FileDropZone = ({
24
24
  label = "Drag and drop files here",
25
25
  }: FileDropZoneProps) => {
26
26
  const [isDragging, setIsDragging] = useState(false);
27
+ const inputId = useId();
27
28
 
28
29
  const validateFileType = (file: File): boolean => {
29
30
  if (!accept) return true;
@@ -104,14 +105,14 @@ const FileDropZone = ({
104
105
  >
105
106
  <p>{label}</p>
106
107
  <p>or</p>
107
- <label htmlFor="file-drop-zone-input" className="k-file-drop-zone-button">
108
+ <label htmlFor={inputId} className="k-file-drop-zone-button">
108
109
  Browse Files
109
110
  </label>
110
111
  <input
111
112
  type="file"
112
113
  accept={accept}
113
114
  multiple
114
- id="file-drop-zone-input"
115
+ id={inputId}
115
116
  onChange={handleFileChange}
116
117
  style={{ display: "none" }}
117
118
  />
@@ -1,43 +1,43 @@
1
1
  .k-file-drop-zone {
2
- border: 0.125rem dashed var(--border-color);
2
+ border: 0.125rem dashed var(--k-border-color);
3
3
  border-radius: 0.5rem;
4
4
  padding: 2rem;
5
5
  text-align: center;
6
- background-color: var(--background-color-dark);
6
+ background-color: var(--k-background-color-dark);
7
7
  transition: all 0.2s ease;
8
8
  margin-bottom: 1rem;
9
9
  cursor: pointer;
10
10
  }
11
11
 
12
12
  .k-file-drop-zone:hover {
13
- border-color: var(--primary-color);
14
- background-color: var(--background-color-hover);
13
+ border-color: var(--k-primary-color);
14
+ background-color: var(--k-background-color-hover);
15
15
  }
16
16
 
17
17
  .k-file-drop-zone-dragging {
18
- border-color: var(--primary-color);
19
- background-color: var(--primary-color-light);
18
+ border-color: var(--k-primary-color);
19
+ background-color: var(--k-primary-color-background-light);
20
20
  border-style: solid;
21
21
  }
22
22
 
23
23
  .k-file-drop-zone p {
24
24
  margin: 0.5rem 0;
25
- color: var(--text-color);
26
- font-size: var(--text-size-sm);
25
+ color: var(--k-text-color);
26
+ font-size: var(--k-text-size-sm);
27
27
  }
28
28
 
29
29
  .k-file-drop-zone-button {
30
30
  display: inline-block;
31
31
  padding: 0.5rem 1rem;
32
- background-color: var(--primary-color);
33
- color: var(--text-color-light);
32
+ background-color: var(--k-primary-color);
33
+ color: var(--k-text-color-light);
34
34
  border-radius: 0.5rem;
35
35
  cursor: pointer;
36
- font-size: var(--text-size-sm);
36
+ font-size: var(--k-text-size-sm);
37
37
  font-weight: 600;
38
38
  transition: background-color 0.2s ease;
39
39
  }
40
40
 
41
41
  .k-file-drop-zone-button:hover {
42
- background-color: var(--primary-color-hover);
42
+ background-color: var(--k-primary-color-hover);
43
43
  }
@@ -4,7 +4,7 @@ import MandatoryAsterisk from "../../forms/requiredAsterisk/index.js";
4
4
  import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
5
5
  import { PropsWithSize, PropsWithVariant } from "../../types.js";
6
6
  import IconButton from "../../buttons/iconButton/index.js";
7
- import { useEffect, useRef, useState } from "react";
7
+ import { useEffect, useId, useRef, useState } from "react";
8
8
  import Button from "../../buttons/button/index.js";
9
9
  import Modal from "../../overlays/modal/index.js";
10
10
  import "./styles.css";
@@ -101,8 +101,8 @@ const FileUpload = (props: FileUploadProps) => {
101
101
  maxSize: string;
102
102
  }>({ files: [], maxSize: "" });
103
103
 
104
- const componentId =
105
- props.id || `fileupload-${Math.random().toString(36).substring(2, 9)}`;
104
+ const generatedId = useId();
105
+ const componentId = props.id || `fileupload-${generatedId}`;
106
106
  const directoryId = `${componentId}-dir`;
107
107
 
108
108
  // `webkitdirectory` isn't in React's DOM type map; set it imperatively.
@@ -116,8 +116,11 @@ const FileUpload = (props: FileUploadProps) => {
116
116
  const formatFileSize = (bytes: number): string => {
117
117
  if (bytes === 0) return "0 Bytes";
118
118
  const k = 1024;
119
- const sizes = ["Bytes", "KB", "MB", "GB"];
120
- const i = Math.floor(Math.log(bytes) / Math.log(k));
119
+ const sizes = ["Bytes", "KB", "MB", "GB", "TB"];
120
+ const i = Math.min(
121
+ Math.floor(Math.log(bytes) / Math.log(k)),
122
+ sizes.length - 1
123
+ );
121
124
  return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + " " + sizes[i];
122
125
  };
123
126
 
@@ -134,6 +137,8 @@ const FileUpload = (props: FileUploadProps) => {
134
137
  const fileNames = oversizedFiles.map((f) => f.name);
135
138
  setOversizedFileInfo({ files: fileNames, maxSize: maxSizeFormatted });
136
139
  setShowSizeModal(true);
140
+ // Rejected files must not stay in the input, or a form would submit them.
141
+ event.target.value = "";
137
142
  return;
138
143
  }
139
144
  }
@@ -178,13 +183,6 @@ const FileUpload = (props: FileUploadProps) => {
178
183
  <div className="k-file-list-header">
179
184
  <span>Selected Files ({selectedFiles.length})</span>
180
185
  <div className="k-file-list-actions">
181
- <Button
182
- onClick={() => fileInputRef.current?.click()}
183
- variant={variant}
184
- size={size}
185
- >
186
- Change File{selectedFiles.length > 1 ? "s" : ""}
187
- </Button>
188
186
  <Button onClick={handleClearFiles} variant="danger" size={size}>
189
187
  Clear All
190
188
  </Button>
@@ -203,6 +201,7 @@ const FileUpload = (props: FileUploadProps) => {
203
201
  <IconButton
204
202
  icon={faTrash}
205
203
  onClick={() => handleRemoveFile(index)}
204
+ aria-label={`Remove ${file.name}`}
206
205
  variant="danger"
207
206
  size={size}
208
207
  />
@@ -215,11 +214,12 @@ const FileUpload = (props: FileUploadProps) => {
215
214
  return (
216
215
  <div className={"k-file-upload-container"}>
217
216
  {props.label && (
218
- <label className="k-file-upload-label-text">
217
+ <label htmlFor={componentId} className="k-file-upload-label-text">
219
218
  {props.label}
220
219
  {required && <MandatoryAsterisk />}
221
220
  </label>
222
221
  )}
222
+ {/* Hidden: the buttons below open these, and are the keyboard path. */}
223
223
  <input
224
224
  type="file"
225
225
  accept={props.accept}
@@ -229,6 +229,8 @@ const FileUpload = (props: FileUploadProps) => {
229
229
  className="k-file-upload-input"
230
230
  id={componentId}
231
231
  required={required}
232
+ aria-label={multiple ? "Upload Files" : "Upload File"}
233
+ tabIndex={-1}
232
234
  />
233
235
  {props.allowDirectory && (
234
236
  <input
@@ -238,27 +240,35 @@ const FileUpload = (props: FileUploadProps) => {
238
240
  ref={directoryInputRef}
239
241
  className="k-file-upload-input"
240
242
  id={directoryId}
243
+ aria-label="Upload Folder"
244
+ tabIndex={-1}
241
245
  />
242
246
  )}
243
247
 
244
248
  {fileListPosition === "above" && fileList}
245
249
 
246
- {selectedFiles.length === 0 && (
250
+ {/* A custom renderFiles brings its own controls once files are chosen. */}
251
+ {(selectedFiles.length === 0 || !props.renderFiles) && (
247
252
  <div className="k-file-upload-empty-actions">
248
- <label
249
- htmlFor={componentId}
253
+ <button
254
+ type="button"
255
+ onClick={() => fileInputRef.current?.click()}
250
256
  className={`k-button k-button-${variant} k-button-${size} k-button-center k-file-upload-button`}
251
257
  >
252
- <FontAwesomeIcon icon={faUpload} /> Upload{" "}
253
- {multiple ? "Files" : "File"}
254
- </label>
258
+ <FontAwesomeIcon icon={faUpload} aria-hidden="true" />{" "}
259
+ {selectedFiles.length === 0
260
+ ? `Upload ${multiple ? "Files" : "File"}`
261
+ : `Change File${selectedFiles.length > 1 ? "s" : ""}`}
262
+ </button>
255
263
  {props.allowDirectory && (
256
- <label
257
- htmlFor={directoryId}
264
+ <button
265
+ type="button"
266
+ onClick={() => directoryInputRef.current?.click()}
258
267
  className={`k-button k-button-${variant} k-button-${size} k-button-center k-file-upload-button`}
259
268
  >
260
- <FontAwesomeIcon icon={faFolderOpen} /> Upload Folder
261
- </label>
269
+ <FontAwesomeIcon icon={faFolderOpen} aria-hidden="true" /> Upload
270
+ Folder
271
+ </button>
262
272
  )}
263
273
  </div>
264
274
  )}
@@ -26,16 +26,16 @@
26
26
  margin-bottom: 0.5rem;
27
27
  font-size: 0.875rem;
28
28
  font-weight: 500;
29
- color: var(--text-color);
29
+ color: var(--k-text-color);
30
30
  width: 100%;
31
31
  text-align: left;
32
32
  }
33
33
 
34
34
  .k-file-list {
35
35
  width: 100%;
36
- border: 1px solid var(--border-color);
36
+ border: 1px solid var(--k-border-color);
37
37
  border-radius: 0.375rem;
38
- background-color: var(--light-bg);
38
+ background-color: var(--k-background-color-light);
39
39
  }
40
40
 
41
41
  .k-file-list-header {
@@ -43,8 +43,8 @@
43
43
  justify-content: space-between;
44
44
  align-items: center;
45
45
  padding: 0.75rem 1rem;
46
- border-bottom: 1px solid var(--border-color);
47
- background-color: var(--lighter-bg);
46
+ border-bottom: 1px solid var(--k-border-color);
47
+ background-color: var(--k-background-color-dark);
48
48
  font-weight: 500;
49
49
  }
50
50
 
@@ -66,7 +66,7 @@
66
66
  align-items: center;
67
67
  gap: 0.75rem;
68
68
  padding: 0.75rem 1rem;
69
- border-bottom: 1px solid var(--border-color);
69
+ border-bottom: 1px solid var(--k-border-color);
70
70
  transition: background-color 0.2s;
71
71
  }
72
72
 
@@ -75,7 +75,7 @@
75
75
  }
76
76
 
77
77
  .k-file-list-item:hover {
78
- background-color: var(--lighter-bg);
78
+ background-color: var(--k-background-color-hover);
79
79
  }
80
80
 
81
81
  .k-file-info {
@@ -86,7 +86,7 @@
86
86
  }
87
87
 
88
88
  .k-file-icon {
89
- color: var(--secondary-color);
89
+ color: var(--k-secondary-color);
90
90
  flex-shrink: 0;
91
91
  }
92
92
 
@@ -98,7 +98,7 @@
98
98
  }
99
99
 
100
100
  .k-file-size {
101
- color: var(--text-muted);
101
+ color: var(--k-text-color-secondary);
102
102
  font-size: 0.875rem;
103
103
  flex-shrink: 0;
104
104
  }
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
 
3
3
  import { faEye, faEyeSlash, faXmark } from "@fortawesome/free-solid-svg-icons";
4
+ import { ReactNode, useCallback, useId, useRef, useState } from "react";
4
5
  import DropdownArrowButton from "../dropdownArrowButton/index.js";
5
- import { ReactNode, useCallback, useRef, useState } from "react";
6
6
  import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
7
7
  import FieldShell from "../../forms/fieldShell/index.js";
8
8
  import { PropsWithSize } from "../../types.js";
@@ -75,6 +75,18 @@ interface InputProps extends PropsWithSize {
75
75
  onKeyDown?: React.KeyboardEventHandler<HTMLInputElement>;
76
76
  /** **_Optional_** function that is called when the input is clicked */
77
77
  onClick?: React.MouseEventHandler<HTMLInputElement>;
78
+ /** **_Optional_** `combobox` when the input drives a popup list of suggestions */
79
+ role?: "combobox";
80
+ /** **_Optional_** with `role="combobox"`, whether its popup is showing */
81
+ "aria-expanded"?: boolean;
82
+ /** **_Optional_** with `role="combobox"`, how suggestions relate to what's typed */
83
+ "aria-autocomplete"?: "list" | "inline" | "both" | "none";
84
+ /** **_Optional_** accessible name when there's no visible `label` */
85
+ "aria-label"?: string;
86
+ /** **_Optional_** id of the element (e.g. a listbox) this input controls */
87
+ "aria-controls"?: string;
88
+ /** **_Optional_** id of the option highlighted in the controlled element, while focus stays in the input */
89
+ "aria-activedescendant"?: string;
78
90
  /** **_Optional_** shows an × button at the end of a non-empty field; clear the value here. Sits at the right edge, so don't combine with `suffix` or `type="password"` */
79
91
  onClear?: () => void;
80
92
  }
@@ -116,8 +128,8 @@ const Input = (props: InputProps) => {
116
128
  inputRef.current?.focus();
117
129
  };
118
130
 
119
- const inputId =
120
- props.id || `input-${Math.random().toString(36).substring(2, 9)}`;
131
+ const generatedId = useId();
132
+ const inputId = props.id || `input-${generatedId}`;
121
133
 
122
134
  const togglePasswordVisibility = () => {
123
135
  setShowPassword(!showPassword);
@@ -190,6 +202,12 @@ const Input = (props: InputProps) => {
190
202
  onBlur={props.onBlur}
191
203
  onClick={props.onClick}
192
204
  onKeyDown={props.onKeyDown}
205
+ role={props.role}
206
+ aria-expanded={props["aria-expanded"]}
207
+ aria-autocomplete={props["aria-autocomplete"]}
208
+ aria-label={props["aria-label"]}
209
+ aria-controls={props["aria-controls"]}
210
+ aria-activedescendant={props["aria-activedescendant"]}
193
211
  className={inputClasses}
194
212
  />
195
213
  {showClear && (
@@ -6,10 +6,10 @@
6
6
  }
7
7
 
8
8
  .k-input {
9
- background-color: var(--background-color-light);
10
- border: 0.0625rem solid var(--border-color);
9
+ background-color: var(--k-background-color-light);
10
+ border: 0.0625rem solid var(--k-border-color);
11
11
  border-radius: 0.375rem;
12
- color: var(--text-color);
12
+ color: var(--k-text-color);
13
13
  width: 100%;
14
14
  box-sizing: border-box;
15
15
  transition:
@@ -18,17 +18,17 @@
18
18
  }
19
19
 
20
20
  .k-input-sm {
21
- font-size: var(--text-size-sm);
21
+ font-size: var(--k-text-size-sm);
22
22
  padding: 0.5rem 0.75rem;
23
23
  }
24
24
 
25
25
  .k-input-md {
26
- font-size: var(--text-size-md);
26
+ font-size: var(--k-text-size-md);
27
27
  padding: 0.625rem 1rem;
28
28
  }
29
29
 
30
30
  .k-input-lg {
31
- font-size: var(--text-size-lg);
31
+ font-size: var(--k-text-size-lg);
32
32
  padding: 0.75rem 1.25rem;
33
33
  }
34
34
 
@@ -37,30 +37,30 @@
37
37
  }
38
38
 
39
39
  .k-input::placeholder {
40
- color: var(--text-color-secondary);
40
+ color: var(--k-text-color-secondary);
41
41
  opacity: 0.7;
42
42
  }
43
43
 
44
44
  .k-input[type="date"]:empty {
45
- color: var(--text-color-secondary);
45
+ color: var(--k-text-color-secondary);
46
46
  }
47
47
 
48
48
  .k-input:focus {
49
49
  outline: none;
50
- border-color: var(--border-color-active);
51
- box-shadow: 0 0 0 0.1875rem var(--border-shadow-color-active);
50
+ border-color: var(--k-border-color-active);
51
+ box-shadow: 0 0 0 0.1875rem var(--k-border-shadow-color-active);
52
52
  }
53
53
 
54
54
  /* No opacity, unlike disabled: a read-only value keeps full text contrast. */
55
55
  .k-input[readonly]:not(:disabled) {
56
- background-color: var(--background-color-dark);
57
- color: var(--text-color-secondary);
56
+ background-color: var(--k-background-color-dark);
57
+ color: var(--k-text-color-secondary);
58
58
  cursor: default;
59
59
  }
60
60
 
61
61
  .k-input:disabled {
62
- background-color: var(--bg-color-disabled);
63
- color: var(--text-color-disabled);
62
+ background-color: var(--k-background-color-disabled);
63
+ color: var(--k-text-color-disabled);
64
64
  cursor: not-allowed;
65
65
  opacity: 0.6;
66
66
  }
@@ -83,18 +83,18 @@
83
83
  border: none;
84
84
  border-radius: 50%;
85
85
  background: none;
86
- color: var(--text-color-secondary);
86
+ color: var(--k-text-color-secondary);
87
87
  cursor: pointer;
88
88
  transition: color 0.2s ease-in-out;
89
89
  }
90
90
 
91
91
  .k-input-clear-button:hover {
92
- color: var(--primary-color-text);
92
+ color: var(--k-primary-color-text);
93
93
  }
94
94
 
95
95
  .k-input-clear-button:focus-visible {
96
96
  outline: none;
97
- box-shadow: 0 0 0 0.125rem var(--border-shadow-color-active);
97
+ box-shadow: 0 0 0 0.125rem var(--k-border-shadow-color-active);
98
98
  }
99
99
 
100
100
  .k-password-toggle-button {
@@ -112,17 +112,17 @@
112
112
  display: flex;
113
113
  align-items: center;
114
114
  justify-content: center;
115
- color: var(--text-color-secondary);
115
+ color: var(--k-text-color-secondary);
116
116
  transition: color 0.2s ease-in-out;
117
117
  }
118
118
 
119
119
  .k-password-toggle-button:hover {
120
- color: var(--primary-color-text);
120
+ color: var(--k-primary-color-text);
121
121
  }
122
122
 
123
123
  .k-password-toggle-button:focus {
124
124
  outline: none;
125
- box-shadow: 0 0 0 0.125rem var(--border-shadow-color-active);
125
+ box-shadow: 0 0 0 0.125rem var(--k-border-shadow-color-active);
126
126
  border-radius: 50%;
127
127
  }
128
128
 
@@ -132,7 +132,7 @@
132
132
  }
133
133
 
134
134
  .k-password-toggle-button:disabled:hover {
135
- color: var(--text-color-secondary);
135
+ color: var(--k-text-color-secondary);
136
136
  }
137
137
 
138
138
  .k-input-wrapper-addon {
@@ -156,9 +156,9 @@
156
156
  display: inline-flex;
157
157
  align-items: center;
158
158
  justify-content: center;
159
- background-color: var(--background-color-dark);
160
- border: 0.0625rem solid var(--border-color);
161
- color: var(--text-color-secondary);
159
+ background-color: var(--k-background-color-dark);
160
+ border: 0.0625rem solid var(--k-border-color);
161
+ color: var(--k-text-color-secondary);
162
162
  font-weight: 500;
163
163
  white-space: nowrap;
164
164
  user-select: none;
@@ -177,20 +177,20 @@
177
177
  }
178
178
 
179
179
  .k-input-addon-sm {
180
- font-size: var(--text-size-sm);
180
+ font-size: var(--k-text-size-sm);
181
181
  padding: 0.5rem 0.625rem;
182
182
  }
183
183
 
184
184
  .k-input-addon-md {
185
- font-size: var(--text-size-md);
185
+ font-size: var(--k-text-size-md);
186
186
  padding: 0.625rem 0.75rem;
187
187
  }
188
188
 
189
189
  .k-input-addon-lg {
190
- font-size: var(--text-size-lg);
190
+ font-size: var(--k-text-size-lg);
191
191
  padding: 0.75rem 0.875rem;
192
192
  }
193
193
 
194
194
  .k-input-wrapper-addon:focus-within .k-input-addon {
195
- border-color: var(--border-color-active);
195
+ border-color: var(--k-border-color-active);
196
196
  }
@@ -57,15 +57,30 @@ const LanguageSelect = ({
57
57
  required,
58
58
  includeNone = true,
59
59
  }: LanguageSelectProps) => {
60
- const options: LanguageOption[] = includeNone
61
- ? [{ value: "", label: "— None —" }, ...SUPPORTED_LANGUAGES]
62
- : SUPPORTED_LANGUAGES;
60
+ // A stored value is shown, never replaced on load (Select would report its
61
+ // first option for a value it lacks): a bare language ("en") as its first
62
+ // locale, any other unknown code as itself.
63
+ const stored = value ?? "";
64
+ const isSupported = SUPPORTED_LANGUAGES.some((l) => l.value === stored);
65
+ const locale =
66
+ stored && !isSupported
67
+ ? SUPPORTED_LANGUAGES.find((l) =>
68
+ l.value.toLowerCase().startsWith(`${stored.toLowerCase()}-`)
69
+ )?.value
70
+ : undefined;
71
+ const unknown: LanguageOption[] =
72
+ stored && !isSupported && !locale ? [{ value: stored, label: stored }] : [];
73
+ const options: LanguageOption[] = [
74
+ ...(includeNone ? [{ value: "", label: "— None —" }] : []),
75
+ ...unknown,
76
+ ...SUPPORTED_LANGUAGES,
77
+ ];
63
78
 
64
79
  return (
65
80
  <Select
66
81
  label={label}
67
82
  id={id}
68
- value={value ?? ""}
83
+ value={locale ?? stored}
69
84
  disabled={disabled}
70
85
  required={required}
71
86
  options={options}