@kosmeo-ui/react 0.1.1 → 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 (418) hide show
  1. package/README.md +3 -1
  2. package/dist/components/buttons/button/index.d.ts +2 -0
  3. package/dist/components/buttons/button/index.d.ts.map +1 -1
  4. package/dist/components/buttons/button/index.js +2 -2
  5. package/dist/components/buttons/button/index.js.map +1 -1
  6. package/dist/components/buttons/button/styles.css +45 -43
  7. package/dist/components/buttons/rowActions/index.d.ts.map +1 -1
  8. package/dist/components/buttons/rowActions/index.js +2 -1
  9. package/dist/components/buttons/rowActions/index.js.map +1 -1
  10. package/dist/components/buttons/rowActions/styles.css +7 -0
  11. package/dist/components/data-display/addressBlock/styles.css +2 -4
  12. package/dist/components/data-display/colorSwatch/index.d.ts +1 -1
  13. package/dist/components/data-display/colorSwatch/index.d.ts.map +1 -1
  14. package/dist/components/data-display/colorSwatch/index.js +1 -1
  15. package/dist/components/data-display/colorSwatch/index.js.map +1 -1
  16. package/dist/components/data-display/colorSwatch/styles.css +1 -1
  17. package/dist/components/data-display/dataTable/index.d.ts.map +1 -1
  18. package/dist/components/data-display/dataTable/index.js +7 -3
  19. package/dist/components/data-display/dataTable/index.js.map +1 -1
  20. package/dist/components/data-display/dataTable/styles.css +18 -2
  21. package/dist/components/data-display/dataTable/utils/parseDataKey.d.ts +8 -1
  22. package/dist/components/data-display/dataTable/utils/parseDataKey.d.ts.map +1 -1
  23. package/dist/components/data-display/dataTable/utils/parseDataKey.js +13 -41
  24. package/dist/components/data-display/dataTable/utils/parseDataKey.js.map +1 -1
  25. package/dist/components/data-display/imagePreview/styles.css +2 -2
  26. package/dist/components/data-display/infiniteScroll/filters/index.d.ts +4 -0
  27. package/dist/components/data-display/infiniteScroll/filters/index.d.ts.map +1 -1
  28. package/dist/components/data-display/infiniteScroll/filters/index.js +12 -2
  29. package/dist/components/data-display/infiniteScroll/filters/index.js.map +1 -1
  30. package/dist/components/data-display/infiniteScroll/filters/listFilter.d.ts.map +1 -1
  31. package/dist/components/data-display/infiniteScroll/filters/listFilter.js +1 -1
  32. package/dist/components/data-display/infiniteScroll/filters/listFilter.js.map +1 -1
  33. package/dist/components/data-display/infiniteScroll/filters/rangeFilter.d.ts +6 -0
  34. package/dist/components/data-display/infiniteScroll/filters/rangeFilter.d.ts.map +1 -1
  35. package/dist/components/data-display/infiniteScroll/filters/rangeFilter.js +55 -46
  36. package/dist/components/data-display/infiniteScroll/filters/rangeFilter.js.map +1 -1
  37. package/dist/components/data-display/infiniteScroll/filters/searchFilter.d.ts.map +1 -1
  38. package/dist/components/data-display/infiniteScroll/filters/searchFilter.js +4 -35
  39. package/dist/components/data-display/infiniteScroll/filters/searchFilter.js.map +1 -1
  40. package/dist/components/data-display/infiniteScroll/filters/selectFilter.d.ts.map +1 -1
  41. package/dist/components/data-display/infiniteScroll/filters/selectFilter.js +3 -5
  42. package/dist/components/data-display/infiniteScroll/filters/selectFilter.js.map +1 -1
  43. package/dist/components/data-display/infiniteScroll/filters/styles.css +34 -1
  44. package/dist/components/data-display/infiniteScroll/header/deleteButton.d.ts.map +1 -1
  45. package/dist/components/data-display/infiniteScroll/header/deleteButton.js +1 -1
  46. package/dist/components/data-display/infiniteScroll/header/deleteButton.js.map +1 -1
  47. package/dist/components/data-display/infiniteScroll/header/index.d.ts.map +1 -1
  48. package/dist/components/data-display/infiniteScroll/header/index.js +1 -1
  49. package/dist/components/data-display/infiniteScroll/header/index.js.map +1 -1
  50. package/dist/components/data-display/infiniteScroll/header/limit.d.ts.map +1 -1
  51. package/dist/components/data-display/infiniteScroll/header/limit.js +1 -1
  52. package/dist/components/data-display/infiniteScroll/header/limit.js.map +1 -1
  53. package/dist/components/data-display/infiniteScroll/header/sortBy.d.ts.map +1 -1
  54. package/dist/components/data-display/infiniteScroll/header/sortBy.js +1 -1
  55. package/dist/components/data-display/infiniteScroll/header/sortBy.js.map +1 -1
  56. package/dist/components/data-display/infiniteScroll/header/sortDirection.d.ts.map +1 -1
  57. package/dist/components/data-display/infiniteScroll/header/sortDirection.js +1 -1
  58. package/dist/components/data-display/infiniteScroll/header/sortDirection.js.map +1 -1
  59. package/dist/components/data-display/infiniteScroll/index.d.ts +8 -0
  60. package/dist/components/data-display/infiniteScroll/index.d.ts.map +1 -1
  61. package/dist/components/data-display/infiniteScroll/index.js +41 -23
  62. package/dist/components/data-display/infiniteScroll/index.js.map +1 -1
  63. package/dist/components/data-display/infiniteScroll/styles.css +2 -2
  64. package/dist/components/data-display/infiniteScroll/table/index.d.ts.map +1 -1
  65. package/dist/components/data-display/infiniteScroll/table/index.js +2 -2
  66. package/dist/components/data-display/infiniteScroll/table/index.js.map +1 -1
  67. package/dist/components/data-display/infiniteScroll/tags/index.d.ts.map +1 -1
  68. package/dist/components/data-display/infiniteScroll/tags/index.js +7 -11
  69. package/dist/components/data-display/infiniteScroll/tags/index.js.map +1 -1
  70. package/dist/components/data-display/infiniteScroll/tags/listFilterTag.d.ts.map +1 -1
  71. package/dist/components/data-display/infiniteScroll/tags/listFilterTag.js +8 -8
  72. package/dist/components/data-display/infiniteScroll/tags/listFilterTag.js.map +1 -1
  73. package/dist/components/data-display/infiniteScroll/tags/rangeFilterTag.d.ts.map +1 -1
  74. package/dist/components/data-display/infiniteScroll/tags/rangeFilterTag.js +6 -18
  75. package/dist/components/data-display/infiniteScroll/tags/rangeFilterTag.js.map +1 -1
  76. package/dist/components/data-display/infiniteScroll/tags/selectFilterTag.d.ts.map +1 -1
  77. package/dist/components/data-display/infiniteScroll/tags/selectFilterTag.js +3 -5
  78. package/dist/components/data-display/infiniteScroll/tags/selectFilterTag.js.map +1 -1
  79. package/dist/components/data-display/infiniteScroll/tags/styles.css +1 -29
  80. package/dist/components/data-display/infiniteScroll/utils/generateQueryString.d.ts +6 -0
  81. package/dist/components/data-display/infiniteScroll/utils/generateQueryString.d.ts.map +1 -1
  82. package/dist/components/data-display/infiniteScroll/utils/generateQueryString.js +24 -12
  83. package/dist/components/data-display/infiniteScroll/utils/generateQueryString.js.map +1 -1
  84. package/dist/components/data-display/infiniteScroll/utils/hasPendingChanges.d.ts +11 -1
  85. package/dist/components/data-display/infiniteScroll/utils/hasPendingChanges.d.ts.map +1 -1
  86. package/dist/components/data-display/infiniteScroll/utils/hasPendingChanges.js +37 -18
  87. package/dist/components/data-display/infiniteScroll/utils/hasPendingChanges.js.map +1 -1
  88. package/dist/components/data-display/listCard/styles.css +3 -3
  89. package/dist/components/data-display/listRow/styles.css +2 -2
  90. package/dist/components/data-display/recoveryCodeGrid/styles.css +3 -4
  91. package/dist/components/data-display/secretDisplay/styles.css +4 -4
  92. package/dist/components/data-display/statCard/styles.css +12 -12
  93. package/dist/components/data-display/summaryRow/styles.css +4 -4
  94. package/dist/components/data-display/table/index.d.ts.map +1 -1
  95. package/dist/components/data-display/table/index.js +2 -2
  96. package/dist/components/data-display/table/index.js.map +1 -1
  97. package/dist/components/data-display/table/styles.css +22 -11
  98. package/dist/components/data-display/tableFilters/index.d.ts +30 -0
  99. package/dist/components/data-display/tableFilters/index.d.ts.map +1 -0
  100. package/dist/components/data-display/tableFilters/index.js +67 -0
  101. package/dist/components/data-display/tableFilters/index.js.map +1 -0
  102. package/dist/components/data-display/tagCard/index.d.ts.map +1 -1
  103. package/dist/components/data-display/tagCard/index.js +1 -1
  104. package/dist/components/data-display/tagCard/index.js.map +1 -1
  105. package/dist/components/data-display/tagCard/styles.css +1 -1
  106. package/dist/components/feedback/alert/styles.css +15 -15
  107. package/dist/components/feedback/badge/index.d.ts.map +1 -1
  108. package/dist/components/feedback/badge/index.js +14 -8
  109. package/dist/components/feedback/badge/index.js.map +1 -1
  110. package/dist/components/feedback/badge/styles.css +45 -45
  111. package/dist/components/feedback/emptyState/styles.css +2 -4
  112. package/dist/components/feedback/loadingOverlay/styles.css +1 -1
  113. package/dist/components/feedback/progressBar/index.d.ts.map +1 -1
  114. package/dist/components/feedback/progressBar/index.js +7 -2
  115. package/dist/components/feedback/progressBar/index.js.map +1 -1
  116. package/dist/components/feedback/progressBar/styles.css +25 -16
  117. package/dist/components/feedback/spinner/styles.css +14 -24
  118. package/dist/components/feedback/tooltip/styles.css +9 -7
  119. package/dist/components/forms/detailField/styles.css +1 -1
  120. package/dist/components/forms/fieldShell/index.d.ts +3 -1
  121. package/dist/components/forms/fieldShell/index.d.ts.map +1 -1
  122. package/dist/components/forms/fieldShell/index.js +1 -1
  123. package/dist/components/forms/fieldShell/index.js.map +1 -1
  124. package/dist/components/forms/fieldShell/styles.css +5 -5
  125. package/dist/components/forms/form/styles.css +6 -6
  126. package/dist/components/forms/formActions/styles.css +4 -4
  127. package/dist/components/forms/formGrid/styles.css +32 -0
  128. package/dist/components/forms/infoRow/styles.css +2 -3
  129. package/dist/components/forms/optionsGroup/index.d.ts +3 -1
  130. package/dist/components/forms/optionsGroup/index.d.ts.map +1 -1
  131. package/dist/components/forms/optionsGroup/index.js +5 -1
  132. package/dist/components/forms/optionsGroup/index.js.map +1 -1
  133. package/dist/components/forms/optionsGroup/styles.css +1 -1
  134. package/dist/components/forms/requiredAsterisk/index.d.ts.map +1 -1
  135. package/dist/components/forms/requiredAsterisk/index.js +3 -2
  136. package/dist/components/forms/requiredAsterisk/index.js.map +1 -1
  137. package/dist/components/forms/requiredAsterisk/styles.css +1 -1
  138. package/dist/components/index.d.ts +4 -0
  139. package/dist/components/index.d.ts.map +1 -1
  140. package/dist/components/index.js +2 -0
  141. package/dist/components/index.js.map +1 -1
  142. package/dist/components/inputs/checkbox/index.d.ts +6 -1
  143. package/dist/components/inputs/checkbox/index.d.ts.map +1 -1
  144. package/dist/components/inputs/checkbox/index.js +12 -3
  145. package/dist/components/inputs/checkbox/index.js.map +1 -1
  146. package/dist/components/inputs/checkbox/styles.css +11 -3
  147. package/dist/components/inputs/colorPicker/index.d.ts.map +1 -1
  148. package/dist/components/inputs/colorPicker/index.js +3 -1
  149. package/dist/components/inputs/colorPicker/index.js.map +1 -1
  150. package/dist/components/inputs/colorPicker/styles.css +3 -3
  151. package/dist/components/inputs/dateInput/index.d.ts +6 -6
  152. package/dist/components/inputs/dateInput/index.d.ts.map +1 -1
  153. package/dist/components/inputs/dateInput/index.js +15 -5
  154. package/dist/components/inputs/dateInput/index.js.map +1 -1
  155. package/dist/components/inputs/dateInput/styles.css +5 -5
  156. package/dist/components/inputs/dateInput/utils.d.ts +0 -1
  157. package/dist/components/inputs/dateInput/utils.d.ts.map +1 -1
  158. package/dist/components/inputs/dateInput/utils.js +13 -8
  159. package/dist/components/inputs/dateInput/utils.js.map +1 -1
  160. package/dist/components/inputs/dropdown/index.d.ts +2 -0
  161. package/dist/components/inputs/dropdown/index.d.ts.map +1 -1
  162. package/dist/components/inputs/dropdown/index.js +2 -2
  163. package/dist/components/inputs/dropdown/index.js.map +1 -1
  164. package/dist/components/inputs/dropdown/styles.css +2 -2
  165. package/dist/components/inputs/dropdownArrowButton/index.d.ts.map +1 -1
  166. package/dist/components/inputs/dropdownArrowButton/index.js +1 -1
  167. package/dist/components/inputs/dropdownArrowButton/index.js.map +1 -1
  168. package/dist/components/inputs/dropdownArrowButton/styles.css +7 -5
  169. package/dist/components/inputs/fileDropZone/index.d.ts.map +1 -1
  170. package/dist/components/inputs/fileDropZone/index.js +3 -2
  171. package/dist/components/inputs/fileDropZone/index.js.map +1 -1
  172. package/dist/components/inputs/fileDropZone/styles.css +12 -12
  173. package/dist/components/inputs/fileUpload/index.d.ts.map +1 -1
  174. package/dist/components/inputs/fileUpload/index.js +11 -6
  175. package/dist/components/inputs/fileUpload/index.js.map +1 -1
  176. package/dist/components/inputs/fileUpload/styles.css +9 -9
  177. package/dist/components/inputs/input/index.d.ts +17 -1
  178. package/dist/components/inputs/input/index.d.ts.map +1 -1
  179. package/dist/components/inputs/input/index.js +27 -5
  180. package/dist/components/inputs/input/index.js.map +1 -1
  181. package/dist/components/inputs/input/styles.css +68 -24
  182. package/dist/components/inputs/languageSelect/index.d.ts.map +1 -1
  183. package/dist/components/inputs/languageSelect/index.js +15 -4
  184. package/dist/components/inputs/languageSelect/index.js.map +1 -1
  185. package/dist/components/inputs/multiSelect/dropDown.d.ts +7 -0
  186. package/dist/components/inputs/multiSelect/dropDown.d.ts.map +1 -1
  187. package/dist/components/inputs/multiSelect/dropDown.js +19 -12
  188. package/dist/components/inputs/multiSelect/dropDown.js.map +1 -1
  189. package/dist/components/inputs/multiSelect/index.d.ts.map +1 -1
  190. package/dist/components/inputs/multiSelect/index.js +49 -13
  191. package/dist/components/inputs/multiSelect/index.js.map +1 -1
  192. package/dist/components/inputs/multiSelect/styles.css +51 -43
  193. package/dist/components/inputs/multiSelect/utils.d.ts +7 -0
  194. package/dist/components/inputs/multiSelect/utils.d.ts.map +1 -0
  195. package/dist/components/inputs/multiSelect/utils.js +18 -0
  196. package/dist/components/inputs/multiSelect/utils.js.map +1 -0
  197. package/dist/components/inputs/phoneInput/index.d.ts.map +1 -1
  198. package/dist/components/inputs/phoneInput/index.js +11 -3
  199. package/dist/components/inputs/phoneInput/index.js.map +1 -1
  200. package/dist/components/inputs/phoneInput/styles.css +13 -13
  201. package/dist/components/inputs/radioGroup/index.d.ts.map +1 -1
  202. package/dist/components/inputs/radioGroup/index.js +1 -1
  203. package/dist/components/inputs/radioGroup/index.js.map +1 -1
  204. package/dist/components/inputs/richTextEditor/index.d.ts.map +1 -1
  205. package/dist/components/inputs/richTextEditor/index.js +30 -20
  206. package/dist/components/inputs/richTextEditor/index.js.map +1 -1
  207. package/dist/components/inputs/richTextEditor/styles.css +24 -24
  208. package/dist/components/inputs/searchList/index.d.ts +4 -1
  209. package/dist/components/inputs/searchList/index.d.ts.map +1 -1
  210. package/dist/components/inputs/searchList/index.js +46 -31
  211. package/dist/components/inputs/searchList/index.js.map +1 -1
  212. package/dist/components/inputs/searchList/styles.css +22 -22
  213. package/dist/components/inputs/searchSelect/index.d.ts.map +1 -1
  214. package/dist/components/inputs/searchSelect/index.js +8 -2
  215. package/dist/components/inputs/searchSelect/index.js.map +1 -1
  216. package/dist/components/inputs/select/index.js +3 -2
  217. package/dist/components/inputs/select/index.js.map +1 -1
  218. package/dist/components/inputs/select/styles.css +93 -15
  219. package/dist/components/inputs/switch/index.d.ts.map +1 -1
  220. package/dist/components/inputs/switch/index.js +3 -1
  221. package/dist/components/inputs/switch/index.js.map +1 -1
  222. package/dist/components/inputs/switch/styles.css +5 -5
  223. package/dist/components/inputs/textArea/index.d.ts.map +1 -1
  224. package/dist/components/inputs/textArea/index.js +3 -2
  225. package/dist/components/inputs/textArea/index.js.map +1 -1
  226. package/dist/components/inputs/textArea/styles.css +11 -11
  227. package/dist/components/inputs/typeahead/index.d.ts.map +1 -1
  228. package/dist/components/inputs/typeahead/index.js +21 -6
  229. package/dist/components/inputs/typeahead/index.js.map +1 -1
  230. package/dist/components/inputs/typeahead/styles.css +13 -13
  231. package/dist/components/layout/authPage/styles.css +6 -6
  232. package/dist/components/layout/borderedSection/index.d.ts +3 -1
  233. package/dist/components/layout/borderedSection/index.d.ts.map +1 -1
  234. package/dist/components/layout/borderedSection/index.js +2 -2
  235. package/dist/components/layout/borderedSection/index.js.map +1 -1
  236. package/dist/components/layout/borderedSection/styles.css +3 -3
  237. package/dist/components/layout/card/styles.css +53 -31
  238. package/dist/components/layout/col/styles.css +1 -1
  239. package/dist/components/layout/page/styles.css +25 -5
  240. package/dist/components/layout/sectionHeader/styles.css +3 -4
  241. package/dist/components/navigation/breadcrumbs/styles.css +7 -7
  242. package/dist/components/navigation/pagination/index.d.ts +23 -0
  243. package/dist/components/navigation/pagination/index.d.ts.map +1 -0
  244. package/dist/components/navigation/pagination/index.js +29 -0
  245. package/dist/components/navigation/pagination/index.js.map +1 -0
  246. package/dist/components/navigation/pagination/styles.css +113 -0
  247. package/dist/components/navigation/pagination/utils.d.ts +9 -0
  248. package/dist/components/navigation/pagination/utils.d.ts.map +1 -0
  249. package/dist/components/navigation/pagination/utils.js +25 -0
  250. package/dist/components/navigation/pagination/utils.js.map +1 -0
  251. package/dist/components/navigation/sidebar/styles.css +13 -5
  252. package/dist/components/navigation/stepper/styles.css +14 -14
  253. package/dist/components/navigation/tabButton/styles.css +59 -59
  254. package/dist/components/navigation/tabs/styles.css +5 -5
  255. package/dist/components/overlays/confirmationModal/index.d.ts +5 -0
  256. package/dist/components/overlays/confirmationModal/index.d.ts.map +1 -1
  257. package/dist/components/overlays/confirmationModal/index.js +23 -4
  258. package/dist/components/overlays/confirmationModal/index.js.map +1 -1
  259. package/dist/components/overlays/confirmationModal/styles.css +3 -0
  260. package/dist/components/overlays/modal/index.d.ts +2 -0
  261. package/dist/components/overlays/modal/index.d.ts.map +1 -1
  262. package/dist/components/overlays/modal/index.js +13 -4
  263. package/dist/components/overlays/modal/index.js.map +1 -1
  264. package/dist/components/overlays/modal/styles.css +19 -19
  265. package/dist/hooks/index.d.ts +1 -0
  266. package/dist/hooks/index.d.ts.map +1 -1
  267. package/dist/hooks/index.js +1 -0
  268. package/dist/hooks/index.js.map +1 -1
  269. package/dist/hooks/useInfinite.d.ts +3 -1
  270. package/dist/hooks/useInfinite.d.ts.map +1 -1
  271. package/dist/hooks/useInfinite.js +4 -2
  272. package/dist/hooks/useInfinite.js.map +1 -1
  273. package/dist/hooks/useInfiniteArchivableCursor.d.ts +1 -1
  274. package/dist/hooks/useInfiniteArchivableCursor.d.ts.map +1 -1
  275. package/dist/hooks/useInfiniteArchivableCursor.js +11 -4
  276. package/dist/hooks/useInfiniteArchivableCursor.js.map +1 -1
  277. package/dist/hooks/useInfiniteCursor.d.ts +1 -1
  278. package/dist/hooks/useInfiniteCursor.d.ts.map +1 -1
  279. package/dist/hooks/useInfiniteCursor.js +11 -4
  280. package/dist/hooks/useInfiniteCursor.js.map +1 -1
  281. package/dist/hooks/usePaginated.d.ts +43 -0
  282. package/dist/hooks/usePaginated.d.ts.map +1 -0
  283. package/dist/hooks/usePaginated.js +60 -0
  284. package/dist/hooks/usePaginated.js.map +1 -0
  285. package/dist/styles.css +161 -123
  286. package/package.json +15 -4
  287. package/src/components/buttons/button/index.tsx +14 -5
  288. package/src/components/buttons/button/styles.css +45 -43
  289. package/src/components/buttons/rowActions/index.tsx +6 -1
  290. package/src/components/buttons/rowActions/styles.css +7 -0
  291. package/src/components/data-display/addressBlock/styles.css +2 -4
  292. package/src/components/data-display/colorSwatch/index.tsx +2 -2
  293. package/src/components/data-display/colorSwatch/styles.css +1 -1
  294. package/src/components/data-display/dataTable/index.tsx +6 -3
  295. package/src/components/data-display/dataTable/styles.css +18 -2
  296. package/src/components/data-display/dataTable/utils/parseDataKey.ts +18 -36
  297. package/src/components/data-display/imagePreview/styles.css +2 -2
  298. package/src/components/data-display/infiniteScroll/filters/index.tsx +18 -1
  299. package/src/components/data-display/infiniteScroll/filters/listFilter.tsx +1 -0
  300. package/src/components/data-display/infiniteScroll/filters/rangeFilter.tsx +77 -33
  301. package/src/components/data-display/infiniteScroll/filters/searchFilter.tsx +16 -65
  302. package/src/components/data-display/infiniteScroll/filters/selectFilter.tsx +11 -17
  303. package/src/components/data-display/infiniteScroll/filters/styles.css +34 -1
  304. package/src/components/data-display/infiniteScroll/header/deleteButton.tsx +1 -0
  305. package/src/components/data-display/infiniteScroll/header/index.tsx +4 -0
  306. package/src/components/data-display/infiniteScroll/header/limit.tsx +1 -0
  307. package/src/components/data-display/infiniteScroll/header/sortBy.tsx +1 -0
  308. package/src/components/data-display/infiniteScroll/header/sortDirection.tsx +1 -0
  309. package/src/components/data-display/infiniteScroll/index.tsx +75 -29
  310. package/src/components/data-display/infiniteScroll/styles.css +2 -2
  311. package/src/components/data-display/infiniteScroll/table/index.tsx +2 -0
  312. package/src/components/data-display/infiniteScroll/tags/index.tsx +7 -16
  313. package/src/components/data-display/infiniteScroll/tags/listFilterTag.tsx +31 -28
  314. package/src/components/data-display/infiniteScroll/tags/rangeFilterTag.tsx +8 -25
  315. package/src/components/data-display/infiniteScroll/tags/selectFilterTag.tsx +4 -11
  316. package/src/components/data-display/infiniteScroll/tags/styles.css +1 -29
  317. package/src/components/data-display/infiniteScroll/utils/generateQueryString.ts +28 -13
  318. package/src/components/data-display/infiniteScroll/utils/hasPendingChanges.ts +48 -16
  319. package/src/components/data-display/listCard/styles.css +3 -3
  320. package/src/components/data-display/listRow/styles.css +2 -2
  321. package/src/components/data-display/recoveryCodeGrid/styles.css +3 -4
  322. package/src/components/data-display/secretDisplay/styles.css +4 -4
  323. package/src/components/data-display/statCard/styles.css +12 -12
  324. package/src/components/data-display/summaryRow/styles.css +4 -4
  325. package/src/components/data-display/table/index.tsx +2 -2
  326. package/src/components/data-display/table/styles.css +22 -11
  327. package/src/components/data-display/tableFilters/index.tsx +147 -0
  328. package/src/components/data-display/tagCard/index.tsx +7 -4
  329. package/src/components/data-display/tagCard/styles.css +1 -1
  330. package/src/components/feedback/alert/styles.css +15 -15
  331. package/src/components/feedback/badge/index.tsx +36 -16
  332. package/src/components/feedback/badge/styles.css +45 -45
  333. package/src/components/feedback/emptyState/styles.css +2 -4
  334. package/src/components/feedback/loadingOverlay/styles.css +1 -1
  335. package/src/components/feedback/progressBar/index.tsx +14 -8
  336. package/src/components/feedback/progressBar/styles.css +25 -16
  337. package/src/components/feedback/spinner/styles.css +14 -24
  338. package/src/components/feedback/tooltip/styles.css +9 -7
  339. package/src/components/forms/detailField/styles.css +1 -1
  340. package/src/components/forms/fieldShell/index.tsx +4 -1
  341. package/src/components/forms/fieldShell/styles.css +5 -5
  342. package/src/components/forms/form/styles.css +6 -6
  343. package/src/components/forms/formActions/styles.css +4 -4
  344. package/src/components/forms/formGrid/styles.css +32 -0
  345. package/src/components/forms/infoRow/styles.css +2 -3
  346. package/src/components/forms/optionsGroup/index.tsx +31 -12
  347. package/src/components/forms/optionsGroup/styles.css +1 -1
  348. package/src/components/forms/requiredAsterisk/index.tsx +5 -1
  349. package/src/components/forms/requiredAsterisk/styles.css +1 -1
  350. package/src/components/index.ts +4 -0
  351. package/src/components/inputs/checkbox/index.tsx +27 -6
  352. package/src/components/inputs/checkbox/styles.css +11 -3
  353. package/src/components/inputs/colorPicker/index.tsx +5 -2
  354. package/src/components/inputs/colorPicker/styles.css +3 -3
  355. package/src/components/inputs/dateInput/index.tsx +17 -9
  356. package/src/components/inputs/dateInput/styles.css +5 -5
  357. package/src/components/inputs/dateInput/utils.ts +12 -8
  358. package/src/components/inputs/dropdown/index.tsx +5 -1
  359. package/src/components/inputs/dropdown/styles.css +2 -2
  360. package/src/components/inputs/dropdownArrowButton/index.tsx +1 -0
  361. package/src/components/inputs/dropdownArrowButton/styles.css +7 -5
  362. package/src/components/inputs/fileDropZone/index.tsx +4 -3
  363. package/src/components/inputs/fileDropZone/styles.css +12 -12
  364. package/src/components/inputs/fileUpload/index.tsx +33 -23
  365. package/src/components/inputs/fileUpload/styles.css +9 -9
  366. package/src/components/inputs/input/index.tsx +67 -6
  367. package/src/components/inputs/input/styles.css +68 -24
  368. package/src/components/inputs/languageSelect/index.tsx +19 -4
  369. package/src/components/inputs/multiSelect/dropDown.tsx +83 -35
  370. package/src/components/inputs/multiSelect/index.tsx +87 -29
  371. package/src/components/inputs/multiSelect/styles.css +51 -43
  372. package/src/components/inputs/multiSelect/utils.ts +18 -0
  373. package/src/components/inputs/phoneInput/index.tsx +16 -4
  374. package/src/components/inputs/phoneInput/styles.css +13 -13
  375. package/src/components/inputs/radioGroup/index.tsx +2 -1
  376. package/src/components/inputs/richTextEditor/index.tsx +59 -37
  377. package/src/components/inputs/richTextEditor/styles.css +24 -24
  378. package/src/components/inputs/searchList/index.tsx +121 -109
  379. package/src/components/inputs/searchList/styles.css +22 -22
  380. package/src/components/inputs/searchSelect/index.tsx +8 -2
  381. package/src/components/inputs/select/index.tsx +3 -3
  382. package/src/components/inputs/select/styles.css +93 -15
  383. package/src/components/inputs/switch/index.tsx +3 -2
  384. package/src/components/inputs/switch/styles.css +5 -5
  385. package/src/components/inputs/textArea/index.tsx +3 -3
  386. package/src/components/inputs/textArea/styles.css +11 -11
  387. package/src/components/inputs/typeahead/index.tsx +84 -54
  388. package/src/components/inputs/typeahead/styles.css +13 -13
  389. package/src/components/layout/authPage/styles.css +6 -6
  390. package/src/components/layout/borderedSection/index.tsx +4 -1
  391. package/src/components/layout/borderedSection/styles.css +3 -3
  392. package/src/components/layout/card/styles.css +53 -31
  393. package/src/components/layout/col/styles.css +1 -1
  394. package/src/components/layout/page/styles.css +25 -5
  395. package/src/components/layout/sectionHeader/styles.css +3 -4
  396. package/src/components/navigation/breadcrumbs/styles.css +7 -7
  397. package/src/components/navigation/pagination/index.tsx +134 -0
  398. package/src/components/navigation/pagination/styles.css +113 -0
  399. package/src/components/navigation/pagination/utils.ts +32 -0
  400. package/src/components/navigation/sidebar/styles.css +13 -5
  401. package/src/components/navigation/stepper/styles.css +14 -14
  402. package/src/components/navigation/tabButton/styles.css +59 -59
  403. package/src/components/navigation/tabs/styles.css +5 -5
  404. package/src/components/overlays/confirmationModal/index.tsx +37 -1
  405. package/src/components/overlays/confirmationModal/styles.css +3 -0
  406. package/src/components/overlays/modal/index.tsx +23 -4
  407. package/src/components/overlays/modal/styles.css +19 -19
  408. package/src/hooks/index.ts +4 -0
  409. package/src/hooks/useInfinite.ts +7 -3
  410. package/src/hooks/useInfiniteArchivableCursor.ts +11 -4
  411. package/src/hooks/useInfiniteCursor.ts +11 -4
  412. package/src/hooks/usePaginated.ts +123 -0
  413. package/src/styles.css +161 -123
  414. package/dist/components/data-display/infiniteScroll/tags/searchFilterTag.d.ts +0 -10
  415. package/dist/components/data-display/infiniteScroll/tags/searchFilterTag.d.ts.map +0 -1
  416. package/dist/components/data-display/infiniteScroll/tags/searchFilterTag.js +0 -22
  417. package/dist/components/data-display/infiniteScroll/tags/searchFilterTag.js.map +0 -1
  418. package/src/components/data-display/infiniteScroll/tags/searchFilterTag.tsx +0 -41
@@ -0,0 +1,147 @@
1
+ "use client";
2
+
3
+ import * as pendingChangesUtil from "../infiniteScroll/utils/hasPendingChanges.js";
4
+ import { filterParams } from "../infiniteScroll/utils/generateQueryString.js";
5
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
6
+ import Filters from "../infiniteScroll/filters/index.js";
7
+ import Button from "../../buttons/button/index.js";
8
+ import Tags from "../infiniteScroll/tags/index.js";
9
+ import Col from "../../layout/col/index.js";
10
+ import {
11
+ InfiniteScrollMenuFilter,
12
+ InfiniteScrollMenuGeneratedFilter,
13
+ } from "../infiniteScroll/types.js";
14
+
15
+ const TYPING_DEBOUNCE_MS = 400;
16
+
17
+ export interface TableFiltersProps {
18
+ /**
19
+ * The filters to offer, as in InfiniteScroll's `menu.filters`. They're
20
+ * compared by contents, so an inline array is fine; changing them resets
21
+ * every filter to the new definitions.
22
+ */
23
+ filters: InfiniteScrollMenuFilter[];
24
+ /**
25
+ * Called with the applied filters as query params (`filter[status]`,
26
+ * `filter[mrr_gte]`, …), ready to spread into `usePaginated`'s `params`.
27
+ * It fires once on mount, with `{}` unless a filter starts with a value.
28
+ */
29
+ onChange: (params: Record<string, string>) => void;
30
+ /**
31
+ * `"immediate"` (default) applies each change as it's made: searches wait
32
+ * for a pause in typing, and a range (two bounds in one menu) applies from
33
+ * the menu's own Apply button. `"manual"` collects changes until Apply is
34
+ * clicked. Enter in a filter's text box applies in both.
35
+ */
36
+ applyMode?: "immediate" | "manual";
37
+ }
38
+
39
+ const generate = (filters: InfiniteScrollMenuFilter[]) =>
40
+ filters.map((f, i): InfiniteScrollMenuGeneratedFilter => ({
41
+ ...f,
42
+ filterId: `${f.dataKey}-${i}`,
43
+ }));
44
+
45
+ /**
46
+ * InfiniteScroll's filter bar on its own, for tables that page or load some
47
+ * other way: search, select, range and list filters with tags and Reset. It
48
+ * reports the applied filters as query params.
49
+ */
50
+ const TableFilters = ({
51
+ filters: definitions,
52
+ onChange,
53
+ applyMode = "immediate",
54
+ }: TableFiltersProps) => {
55
+ const [filters, setFilters] = useState(() => generate(definitions));
56
+ const [pendingFilters, setPendingFilters] = useState(filters);
57
+
58
+ // The definitions are plain data, as InfiniteScroll's menu: start over when
59
+ // their contents change, not each time they're a new array.
60
+ const definitionsKey = JSON.stringify(definitions);
61
+ const [prevDefinitionsKey, setPrevDefinitionsKey] = useState(definitionsKey);
62
+ if (definitionsKey !== prevDefinitionsKey) {
63
+ const next = generate(definitions);
64
+ setPrevDefinitionsKey(definitionsKey);
65
+ setFilters(next);
66
+ setPendingFilters(next);
67
+ }
68
+
69
+ // Report only when the params actually change, not on every new array.
70
+ const params = useMemo(() => filterParams(filters), [filters]);
71
+ const paramsKey = JSON.stringify(params);
72
+ const onChangeRef = useRef(onChange);
73
+ onChangeRef.current = onChange;
74
+ useEffect(() => {
75
+ onChangeRef.current(params);
76
+ }, [paramsKey]);
77
+
78
+ const hasPendingChanges = useMemo(
79
+ () => pendingChangesUtil.hasFilterChanges(filters, pendingFilters),
80
+ [filters, pendingFilters]
81
+ );
82
+ const hasActiveFilters =
83
+ pendingChangesUtil.hasActiveFilters(pendingFilters) ||
84
+ pendingChangesUtil.hasActiveFilters(filters);
85
+
86
+ const handleApply = useCallback(
87
+ () => setFilters(pendingFilters),
88
+ [pendingFilters]
89
+ );
90
+
91
+ useEffect(() => {
92
+ if (applyMode !== "immediate" || !hasPendingChanges) return;
93
+ const delay = pendingChangesUtil.hasTypedFilterChanges(
94
+ filters,
95
+ pendingFilters
96
+ )
97
+ ? TYPING_DEBOUNCE_MS
98
+ : 0;
99
+ const timer = setTimeout(handleApply, delay);
100
+ return () => clearTimeout(timer);
101
+ }, [applyMode, hasPendingChanges, handleApply, filters, pendingFilters]);
102
+
103
+ // Removing a tag applies at once; the pending copy of that filter follows.
104
+ const handleTagChange = useCallback(
105
+ (next: InfiniteScrollMenuGeneratedFilter[]) => {
106
+ setPendingFilters((pending) =>
107
+ pending.map((p, i) => (next[i] !== filters[i] ? next[i] : p))
108
+ );
109
+ setFilters(next);
110
+ },
111
+ [filters]
112
+ );
113
+
114
+ const handleReset = useCallback(() => {
115
+ const cleared = pendingChangesUtil.clearFilters(pendingFilters);
116
+ setPendingFilters(cleared);
117
+ setFilters(cleared);
118
+ }, [pendingFilters]);
119
+
120
+ return (
121
+ <Col size="sm">
122
+ <Filters
123
+ pendingFilters={pendingFilters}
124
+ handleNewPendingFilters={setPendingFilters}
125
+ onApply={hasPendingChanges ? handleApply : undefined}
126
+ rangeApplyInMenu={applyMode === "immediate"}
127
+ >
128
+ <Button
129
+ size="sm"
130
+ variant="danger"
131
+ disabled={!hasActiveFilters}
132
+ onClick={handleReset}
133
+ >
134
+ Reset
135
+ </Button>
136
+ {applyMode === "manual" && (
137
+ <Button size="sm" disabled={!hasPendingChanges} onClick={handleApply}>
138
+ Apply
139
+ </Button>
140
+ )}
141
+ </Filters>
142
+ <Tags filters={filters} handleNewFilters={handleTagChange} />
143
+ </Col>
144
+ );
145
+ };
146
+
147
+ export default TableFilters;
@@ -20,10 +20,13 @@ const TagCard = (props: TagCardProps) => {
20
20
  <h3>{props.title}</h3>
21
21
  {props.tags.length ? (
22
22
  <ul className="k-tag-card-list">
23
- {props.tags.map((t) => (
24
- <Badge key={t} variant={color} size="md" pill>
25
- {t}
26
- </Badge>
23
+ {/* Tags can repeat and hold no state, so position is part of the key. */}
24
+ {props.tags.map((t, i) => (
25
+ <li key={`${i}-${t}`}>
26
+ <Badge variant={color} size="md" pill>
27
+ {t}
28
+ </Badge>
29
+ </li>
27
30
  ))}
28
31
  </ul>
29
32
  ) : (
@@ -8,7 +8,7 @@
8
8
  }
9
9
 
10
10
  .k-tag-card-empty-text {
11
- color: var(--text-color-secondary);
11
+ color: var(--k-text-color-secondary);
12
12
  font-style: italic;
13
13
  margin: 0;
14
14
  }
@@ -43,46 +43,46 @@
43
43
  }
44
44
 
45
45
  .k-alert-primary {
46
- background-color: var(--primary-color-background);
47
- color: var(--text-color-light);
46
+ background-color: var(--k-primary-color-background);
47
+ color: var(--k-text-color-light);
48
48
  }
49
49
 
50
50
  .k-alert-secondary {
51
- background-color: var(--secondary-color-background);
52
- color: var(--text-color-light);
51
+ background-color: var(--k-secondary-color-background);
52
+ color: var(--k-text-color-light);
53
53
  }
54
54
 
55
55
  .k-alert-light {
56
- background-color: var(--light-color-background);
57
- color: var(--text-color);
56
+ background-color: var(--k-light-color-background);
57
+ color: var(--k-text-color);
58
58
  }
59
59
 
60
60
  .k-alert-danger {
61
- background-color: var(--danger-color-background);
62
- color: var(--text-color-light);
61
+ background-color: var(--k-danger-color-background);
62
+ color: var(--k-text-color-light);
63
63
  }
64
64
 
65
65
  .k-alert-warning {
66
- background-color: var(--warning-color-background);
67
- color: var(--text-color);
66
+ background-color: var(--k-warning-color-background);
67
+ color: var(--k-text-color);
68
68
  }
69
69
 
70
70
  .k-alert-success {
71
- background-color: var(--success-color-background);
72
- color: var(--text-color-light);
71
+ background-color: var(--k-success-color-background);
72
+ color: var(--k-text-color-light);
73
73
  }
74
74
 
75
75
  .k-alert-sm {
76
- font-size: var(--text-size-sm);
76
+ font-size: var(--k-text-size-sm);
77
77
  padding: 0.5rem 0.75rem;
78
78
  }
79
79
 
80
80
  .k-alert-md {
81
- font-size: var(--text-size-md);
81
+ font-size: var(--k-text-size-md);
82
82
  padding: 0.75rem 1rem;
83
83
  }
84
84
 
85
85
  .k-alert-lg {
86
- font-size: var(--text-size-lg);
86
+ font-size: var(--k-text-size-lg);
87
87
  padding: 1rem 1.25rem;
88
88
  }
@@ -55,30 +55,49 @@ const Badge = ({
55
55
  backgroundColor: color,
56
56
  color:
57
57
  getContrastTextColor(color) === "light"
58
- ? "var(--text-color-light)"
59
- : "var(--text-color)",
58
+ ? "var(--k-text-color-light)"
59
+ : "var(--k-text-color)",
60
60
  }
61
61
  : undefined;
62
62
 
63
- const content = (
63
+ const label = (
64
64
  <>
65
65
  {startIcon && <span className="k-badge-start-icon">{startIcon}</span>}
66
66
  <span className="k-badge-content">{children}</span>
67
- {onRemove && (
67
+ </>
68
+ );
69
+
70
+ const removeButton = onRemove && (
71
+ <button
72
+ type="button"
73
+ aria-label="Remove"
74
+ className="k-badge-remove"
75
+ onClick={(e) => {
76
+ e.stopPropagation();
77
+ onRemove();
78
+ }}
79
+ >
80
+ <FontAwesomeIcon icon={faXmark} />
81
+ </button>
82
+ );
83
+
84
+ // Clickable and removable: two sibling buttons in a span, since a button
85
+ // can't contain another.
86
+ if (onClick && onRemove) {
87
+ return (
88
+ <span className={classes} style={inlineStyle}>
68
89
  <button
69
90
  type="button"
70
- aria-label="Remove"
71
- className="k-badge-remove"
72
- onClick={(e) => {
73
- e.stopPropagation();
74
- onRemove();
75
- }}
91
+ aria-label={ariaLabel}
92
+ className="k-badge-action"
93
+ onClick={onClick}
76
94
  >
77
- <FontAwesomeIcon icon={faXmark} />
95
+ {label}
78
96
  </button>
79
- )}
80
- </>
81
- );
97
+ {removeButton}
98
+ </span>
99
+ );
100
+ }
82
101
 
83
102
  if (onClick) {
84
103
  return (
@@ -89,14 +108,15 @@ const Badge = ({
89
108
  style={inlineStyle}
90
109
  onClick={onClick}
91
110
  >
92
- {content}
111
+ {label}
93
112
  </button>
94
113
  );
95
114
  }
96
115
 
97
116
  return (
98
117
  <span className={classes} style={inlineStyle}>
99
- {content}
118
+ {label}
119
+ {removeButton}
100
120
  </span>
101
121
  );
102
122
  };
@@ -21,6 +21,18 @@ button.k-badge {
21
21
  opacity: 0.85;
22
22
  }
23
23
 
24
+ .k-badge-action {
25
+ display: inline-flex;
26
+ align-items: center;
27
+ gap: inherit;
28
+ padding: 0;
29
+ border: none;
30
+ background: none;
31
+ color: inherit;
32
+ font: inherit;
33
+ cursor: pointer;
34
+ }
35
+
24
36
  .k-badge-start-icon {
25
37
  display: inline-flex;
26
38
  align-items: center;
@@ -67,33 +79,33 @@ button.k-badge {
67
79
 
68
80
  /* Variants */
69
81
  .k-badge-primary {
70
- background-color: var(--primary-color);
71
- color: var(--text-color-light);
82
+ background-color: var(--k-primary-color);
83
+ color: var(--k-text-color-light);
72
84
  }
73
85
 
74
86
  .k-badge-secondary {
75
- background-color: var(--secondary-color);
76
- color: var(--text-color-light);
87
+ background-color: var(--k-secondary-color);
88
+ color: var(--k-text-color-light);
77
89
  }
78
90
 
79
91
  .k-badge-light {
80
- background-color: var(--light-color-background);
81
- color: var(--text-color);
92
+ background-color: var(--k-light-color-background);
93
+ color: var(--k-text-color);
82
94
  }
83
95
 
84
96
  .k-badge-danger {
85
- background-color: var(--danger-color);
86
- color: var(--text-color-light);
97
+ background-color: var(--k-danger-color);
98
+ color: var(--k-text-color-light);
87
99
  }
88
100
 
89
101
  .k-badge-warning {
90
- background-color: var(--warning-color);
91
- color: var(--text-color);
102
+ background-color: var(--k-warning-color);
103
+ color: var(--k-warning-color-contrast);
92
104
  }
93
105
 
94
106
  .k-badge-success {
95
- background-color: var(--success-color);
96
- color: var(--text-color-light);
107
+ background-color: var(--k-success-color);
108
+ color: var(--k-text-color-light);
97
109
  }
98
110
 
99
111
  /* Pill shape */
@@ -107,56 +119,44 @@ button.k-badge {
107
119
  }
108
120
 
109
121
  /* Subtle variants - transparent background with colored text */
122
+ /* Subtle text blends the variant color 60/40 with --k-text-color: the full
123
+ variant color on its own 15% tint falls under 4.5:1 for most variants. */
110
124
  .k-badge-subtle.k-badge-primary {
111
- background-color: color-mix(
112
- in srgb,
113
- var(--primary-color) 15%,
114
- var(--background-color)
115
- );
116
- color: var(--primary-color);
125
+ background-color: color-mix(in srgb, var(--k-primary-color) 15%, transparent);
126
+ color: color-mix(in srgb, var(--k-primary-color) 60%, var(--k-text-color));
117
127
  }
118
128
 
119
129
  .k-badge-subtle.k-badge-secondary {
120
130
  background-color: color-mix(
121
131
  in srgb,
122
- var(--secondary-color) 15%,
123
- var(--background-color)
132
+ var(--k-secondary-color) 15%,
133
+ transparent
124
134
  );
125
- color: var(--secondary-color);
135
+ color: color-mix(in srgb, var(--k-secondary-color) 60%, var(--k-text-color));
126
136
  }
127
137
 
128
138
  .k-badge-subtle.k-badge-light {
129
- background-color: color-mix(
130
- in srgb,
131
- var(--light-color) 30%,
132
- var(--background-color)
133
- );
134
- color: var(--text-color);
139
+ background-color: color-mix(in srgb, var(--k-light-color) 30%, transparent);
140
+ color: var(--k-text-color);
135
141
  }
136
142
 
137
143
  .k-badge-subtle.k-badge-danger {
138
- background-color: color-mix(
139
- in srgb,
140
- var(--danger-color) 15%,
141
- var(--background-color)
142
- );
143
- color: var(--danger-color);
144
+ background-color: color-mix(in srgb, var(--k-danger-color) 15%, transparent);
145
+ color: color-mix(in srgb, var(--k-danger-color) 60%, var(--k-text-color));
144
146
  }
145
147
 
146
148
  .k-badge-subtle.k-badge-warning {
147
- background-color: color-mix(
148
- in srgb,
149
- var(--warning-color) 20%,
150
- var(--background-color)
151
- );
152
- color: var(--warning-color);
149
+ background-color: color-mix(in srgb, var(--k-warning-color) 20%, transparent);
150
+ color: var(--k-warning-color-text);
153
151
  }
154
152
 
155
153
  .k-badge-subtle.k-badge-success {
156
- background-color: color-mix(
157
- in srgb,
158
- var(--success-color) 15%,
159
- var(--background-color)
160
- );
161
- color: var(--success-color);
154
+ background-color: color-mix(in srgb, var(--k-success-color) 15%, transparent);
155
+ color: color-mix(in srgb, var(--k-success-color) 60%, var(--k-text-color));
156
+ }
157
+
158
+ /* The tint is translucent so it reads on any surface (striped rows, cards);
159
+ the inset outline keeps the edge visible where the tint alone is too faint. */
160
+ .k-badge-subtle {
161
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, currentColor 30%, transparent);
162
162
  }
@@ -1,7 +1,6 @@
1
1
  .k-empty-state-inline {
2
2
  font-size: 0.875rem;
3
- color: var(--text-color);
4
- opacity: 0.65;
3
+ color: var(--k-text-color-secondary);
5
4
  font-style: italic;
6
5
  padding: 0.5rem 0;
7
6
  }
@@ -14,8 +13,7 @@
14
13
  gap: 0.75rem;
15
14
  padding: 2rem 1rem;
16
15
  text-align: center;
17
- color: var(--text-color);
18
- opacity: 0.75;
16
+ color: var(--k-text-color-secondary);
19
17
  }
20
18
 
21
19
  .k-empty-state-icon {
@@ -4,7 +4,7 @@
4
4
  width: 100%;
5
5
  height: 100%;
6
6
  z-index: 300;
7
- background-color: var(--background-color);
7
+ background-color: var(--k-background-color);
8
8
  }
9
9
 
10
10
  .k-loading-container-fixed {
@@ -17,16 +17,22 @@ const ProgressBar = (props: ProgressBarProps) => {
17
17
  const fillBorderRadius =
18
18
  clampedProgress === 100 ? "0.25rem" : "0.25rem 0 0 0.25rem";
19
19
 
20
+ // The percentage sits beside the bar, not on the fill: no single text color
21
+ // reaches 4.5:1 on every variant's fill in both themes.
20
22
  return (
21
- <div className={`k-progress-bar-container`}>
22
- <div
23
- className={`k-progress-bar-fill k-progress-bar-fill-${variant}`}
24
- style={{ width: `${clampedProgress}%`, borderRadius: fillBorderRadius }}
25
- >
26
- {showPercentage && clampedProgress > 0 && (
27
- <span className="k-progress-bar-text">{clampedProgress}%</span>
28
- )}
23
+ <div className="k-progress-bar">
24
+ <div className="k-progress-bar-container">
25
+ <div
26
+ className={`k-progress-bar-fill k-progress-bar-fill-${variant}`}
27
+ style={{
28
+ width: `${clampedProgress}%`,
29
+ borderRadius: fillBorderRadius,
30
+ }}
31
+ />
29
32
  </div>
33
+ {showPercentage && (
34
+ <span className="k-progress-bar-text">{clampedProgress}%</span>
35
+ )}
30
36
  </div>
31
37
  );
32
38
  };
@@ -1,42 +1,51 @@
1
- .k-progress-bar-container {
1
+ .k-progress-bar {
2
+ display: flex;
3
+ align-items: center;
4
+ gap: 0.5rem;
2
5
  width: 100%;
6
+ }
7
+
8
+ .k-progress-bar-container {
9
+ flex: 1;
10
+ min-width: 0;
3
11
  height: 1.5625rem;
4
- background-color: var(--background-color-dark);
12
+ background-color: var(--k-background-color-dark);
5
13
  border-radius: 0.25rem;
6
14
  overflow: hidden;
7
- box-shadow: inset 0 0.0625rem 0.1875rem var(--shadow-color);
15
+ box-shadow: inset 0 0.0625rem 0.1875rem var(--k-shadow-color);
8
16
  }
9
17
 
10
18
  .k-progress-bar-fill {
11
19
  height: 100%;
12
- background-color: var(--success-color);
13
- display: flex;
14
- align-items: center;
15
- justify-content: center;
16
- color: var(--text-color-light);
17
- font-weight: 600;
20
+ background-color: var(--k-success-color);
18
21
  transition: width 0.5s ease-in-out;
19
22
  }
20
23
 
21
24
  .k-progress-bar-text {
22
- font-size: var(--text-size-sm);
25
+ flex-shrink: 0;
26
+ min-width: 2.75rem;
27
+ text-align: right;
28
+ font-size: var(--k-text-size-sm);
29
+ font-weight: 600;
30
+ font-variant-numeric: tabular-nums;
31
+ color: var(--k-text-color);
23
32
  }
24
33
 
25
34
  .k-progress-bar-fill-primary {
26
- background-color: var(--primary-color);
35
+ background-color: var(--k-primary-color);
27
36
  }
28
37
  .k-progress-bar-fill-secondary {
29
- background-color: var(--secondary-color);
38
+ background-color: var(--k-secondary-color);
30
39
  }
31
40
  .k-progress-bar-fill-light {
32
- background-color: var(--light-color);
41
+ background-color: var(--k-light-color);
33
42
  }
34
43
  .k-progress-bar-fill-warning {
35
- background-color: var(--warning-color);
44
+ background-color: var(--k-warning-color);
36
45
  }
37
46
  .k-progress-bar-fill-danger {
38
- background-color: var(--danger-color);
47
+ background-color: var(--k-danger-color);
39
48
  }
40
49
  .k-progress-bar-fill-success {
41
- background-color: var(--success-color);
50
+ background-color: var(--k-success-color);
42
51
  }
@@ -1,10 +1,13 @@
1
+ /* An empty box, so as a flex item it would shrink to fit a short or narrow
2
+ container (an oval while a page is still laying out). */
1
3
  .k-spinner {
2
4
  border-radius: 50%;
3
5
  display: inline-block;
4
- animation: spin 0.8s linear infinite;
6
+ flex-shrink: 0;
7
+ animation: k-spin 0.8s linear infinite;
5
8
  }
6
9
 
7
- @keyframes spin {
10
+ @keyframes k-spin {
8
11
  0% {
9
12
  transform: rotate(0deg);
10
13
  }
@@ -16,49 +19,36 @@
16
19
  .k-spinner-lg {
17
20
  height: 3.75rem;
18
21
  width: 3.75rem;
19
- border: 0.375rem solid var(--shadow-color);
22
+ border: 0.375rem solid var(--k-shadow-color);
20
23
  }
21
24
 
22
25
  .k-spinner-md {
23
26
  height: 2.5rem;
24
27
  width: 2.5rem;
25
- border: 0.25rem solid var(--shadow-color);
28
+ border: 0.25rem solid var(--k-shadow-color);
26
29
  }
27
30
 
28
31
  .k-spinner-sm {
29
32
  height: 1.25rem;
30
33
  width: 1.25rem;
31
- border: 0.125rem solid var(--shadow-color);
34
+ border: 0.125rem solid var(--k-shadow-color);
32
35
  }
33
36
 
34
37
  .k-spinner-primary {
35
- border-left-color: var(--primary-color);
38
+ border-left-color: var(--k-primary-color);
36
39
  }
37
40
  .k-spinner-secondary {
38
- border-left-color: var(--secondary-color);
41
+ border-left-color: var(--k-secondary-color);
39
42
  }
40
43
  .k-spinner-light {
41
- border-left-color: var(--light-color);
44
+ border-left-color: var(--k-light-color);
42
45
  }
43
46
  .k-spinner-success {
44
- border-left-color: var(--success-color);
47
+ border-left-color: var(--k-success-color);
45
48
  }
46
49
  .k-spinner-danger {
47
- border-left-color: var(--danger-color);
50
+ border-left-color: var(--k-danger-color);
48
51
  }
49
52
  .k-spinner-warning {
50
- border-left-color: var(--warning-color);
51
- }
52
-
53
- /* Visually hidden class for accessibility text */
54
- .k-sr-only {
55
- position: absolute;
56
- width: 0.0625rem;
57
- height: 0.0625rem;
58
- padding: 0;
59
- margin: -0.0625rem;
60
- overflow: hidden;
61
- clip: rect(0, 0, 0, 0);
62
- white-space: nowrap;
63
- border: 0;
53
+ border-left-color: var(--k-warning-color);
64
54
  }