@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
@@ -83,8 +83,18 @@ interface InfiniteScrollProps<TData> {
83
83
  hideSelectColumn?: boolean;
84
84
  /** When true, hides the "Fetch Next Page" button */
85
85
  hideNextPageButton?: boolean;
86
+ /**
87
+ * When filter, sort and page-size changes take effect. `"immediate"`
88
+ * (default) applies each change as it's made: searches wait for a pause in
89
+ * typing, and a range (two bounds in one menu) applies from the menu's own
90
+ * Apply button. `"manual"` collects changes until Apply is clicked. In
91
+ * both, Enter in a filter's text box applies at once.
92
+ */
93
+ applyMode?: "immediate" | "manual";
86
94
  }
87
95
 
96
+ const TYPING_DEBOUNCE_MS = 400;
97
+
88
98
  const InfiniteScroll = <TData extends object>(
89
99
  props: InfiniteScrollProps<TData>
90
100
  ) => {
@@ -189,9 +199,19 @@ const InfiniteScroll = <TData extends object>(
189
199
  props.onRowSelect(selectedData);
190
200
  }, [selectedRows, rows, props.onRowSelect]);
191
201
 
202
+ // The menu is plain data: re-apply it when its contents change, not each
203
+ // time it is a new object, or an inline menu or onReload re-renders forever.
204
+ const menuKey = JSON.stringify([
205
+ props.menu.filters,
206
+ props.menu.sort,
207
+ props.menu.limitOptions,
208
+ ]);
209
+ const onReloadRef = useRef(props.onReload);
210
+ onReloadRef.current = props.onReload;
211
+ const menuApplied = useRef(false);
212
+
192
213
  useEffect(() => {
193
- if (!props.menu.filters) return;
194
- const generatedFilters = props.menu.filters.map((f, i) => {
214
+ const generatedFilters = (props.menu.filters ?? []).map((f, i) => {
195
215
  return { ...f, filterId: `${f.dataKey}-${i}` };
196
216
  });
197
217
  setFilters(generatedFilters);
@@ -205,8 +225,10 @@ const InfiniteScroll = <TData extends object>(
205
225
  const limits = props.menu.limitOptions || DEFAULT_LIMIT_OPTIONS;
206
226
  setLimitOptions(limits);
207
227
  setPendingLimitOptions(limits);
208
- props.onReload();
209
- }, [props.menu, props.onReload]);
228
+ // On mount the first query already loads the data.
229
+ if (menuApplied.current) onReloadRef.current();
230
+ menuApplied.current = true;
231
+ }, [menuKey]);
210
232
 
211
233
  useEffect(() => {
212
234
  const queryString = generateQueryString({
@@ -251,9 +273,13 @@ const InfiniteScroll = <TData extends object>(
251
273
  ]
252
274
  );
253
275
 
276
+ // Reset clears what's applied as well as what's pending, so it stays
277
+ // available while the table is filtered even if the pending edits are empty.
254
278
  const hasActiveFilters = useMemo(
255
- () => pendingChangesUtil.hasActiveFilters(pendingFilters),
256
- [pendingFilters]
279
+ () =>
280
+ pendingChangesUtil.hasActiveFilters(pendingFilters) ||
281
+ pendingChangesUtil.hasActiveFilters(filters),
282
+ [pendingFilters, filters]
257
283
  );
258
284
 
259
285
  const handleApply = useCallback(() => {
@@ -268,19 +294,36 @@ const InfiniteScroll = <TData extends object>(
268
294
  pendingLimitOptions,
269
295
  ]);
270
296
 
297
+ const applyMode = props.applyMode ?? "immediate";
298
+
299
+ // Immediate mode applies pending changes on the next tick, or once typing
300
+ // pauses. Each keystroke changes handleApply, which restarts the timer.
301
+ useEffect(() => {
302
+ if (applyMode !== "immediate" || !hasPendingChanges) return;
303
+ const delay = pendingChangesUtil.hasTypedFilterChanges(
304
+ filters,
305
+ pendingFilters
306
+ )
307
+ ? TYPING_DEBOUNCE_MS
308
+ : 0;
309
+ const timer = setTimeout(handleApply, delay);
310
+ return () => clearTimeout(timer);
311
+ }, [applyMode, hasPendingChanges, handleApply, filters, pendingFilters]);
312
+
313
+ // Tags show the applied filters, and removing one applies at once. The
314
+ // pending copy of that filter follows; other pending edits are kept.
315
+ const handleTagChange = useCallback(
316
+ (next: InfiniteScrollMenuGeneratedFilter[]) => {
317
+ setPendingFilters((pending) =>
318
+ pending.map((p, i) => (next[i] !== filters[i] ? next[i] : p))
319
+ );
320
+ setFilters(next);
321
+ },
322
+ [filters]
323
+ );
324
+
271
325
  const handleReset = useCallback(() => {
272
- const clearedFilters = pendingFilters.map((filter) => {
273
- if (filter.type === "SELECT") {
274
- return {
275
- ...filter,
276
- options: filter.options?.map((o) => ({ ...o, selected: false })),
277
- };
278
- } else if (filter.type === "RANGE") {
279
- return { ...filter, startValue: undefined, endValue: undefined };
280
- } else if (filter.type === "SEARCH") {
281
- return { ...filter, value: undefined };
282
- } else return { ...filter, list: "" };
283
- });
326
+ const clearedFilters = pendingChangesUtil.clearFilters(pendingFilters);
284
327
  setPendingFilters(clearedFilters);
285
328
  setFilters(clearedFilters);
286
329
  }, [pendingFilters]);
@@ -310,6 +353,8 @@ const InfiniteScroll = <TData extends object>(
310
353
  <Filters
311
354
  pendingFilters={pendingFilters}
312
355
  handleNewPendingFilters={setPendingFilters}
356
+ onApply={hasPendingChanges ? handleApply : undefined}
357
+ rangeApplyInMenu={applyMode === "immediate"}
313
358
  >
314
359
  <Button
315
360
  size="sm"
@@ -319,18 +364,17 @@ const InfiniteScroll = <TData extends object>(
319
364
  >
320
365
  Reset
321
366
  </Button>
322
- <Button
323
- size="sm"
324
- disabled={!hasPendingChanges}
325
- onClick={handleApply}
326
- >
327
- Apply
328
- </Button>
367
+ {applyMode === "manual" && (
368
+ <Button
369
+ size="sm"
370
+ disabled={!hasPendingChanges}
371
+ onClick={handleApply}
372
+ >
373
+ Apply
374
+ </Button>
375
+ )}
329
376
  </Filters>
330
- <Tags
331
- filters={pendingFilters}
332
- handleNewFilters={setPendingFilters}
333
- />
377
+ <Tags filters={filters} handleNewFilters={handleTagChange} />
334
378
  </Col>
335
379
  <div className="k-infinite-scroll-menu-table-divider" />
336
380
  </>
@@ -338,6 +382,8 @@ const InfiniteScroll = <TData extends object>(
338
382
  <div
339
383
  ref={infiniteScrollTableRef}
340
384
  className="k-infinite-scroll-table-container"
385
+ role="region"
386
+ aria-label={props.menu.title}
341
387
  onScroll={handleScroll}
342
388
  >
343
389
  {props.columns && (
@@ -17,7 +17,7 @@
17
17
 
18
18
  .k-infinite-scroll-menu-table-divider {
19
19
  margin: 1rem;
20
- border-top: 2px solid var(--border-color);
20
+ border-top: 2px solid var(--k-border-color);
21
21
  }
22
22
 
23
23
  .k-infinite-scroll-next-page-container {
@@ -32,6 +32,6 @@
32
32
  justify-content: center;
33
33
  align-items: center;
34
34
  padding: 3rem 1rem;
35
- color: var(--text-muted);
35
+ color: var(--k-text-color-secondary);
36
36
  font-size: 1rem;
37
37
  }
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
 
3
3
  import { InfiniteScrollMenuGeneratedFilter } from "../types.js";
4
+ import { hasRangeValue } from "../utils/hasPendingChanges.js";
4
5
  import SelectFilterTag from "./selectFilterTag.js";
5
6
  import RangeFilterTag from "./rangeFilterTag.js";
6
7
  import ListFilterTag from "./listFilterTag.js";
@@ -20,7 +21,7 @@ const Tags = (props: InfiniteScrollMenuTagsProps) => {
20
21
  for (const selectedFilter of selectedFilters) {
21
22
  tags.push(
22
23
  <SelectFilterTag
23
- key={f.filterId}
24
+ key={`${f.filterId}-${selectedFilter.id}`}
24
25
  filter={f}
25
26
  filterOption={selectedFilter}
26
27
  filters={props.filters}
@@ -29,10 +30,10 @@ const Tags = (props: InfiniteScrollMenuTagsProps) => {
29
30
  );
30
31
  }
31
32
  } else if (f.type === "RANGE") {
32
- if (f.startValue) {
33
+ if (hasRangeValue(f.startValue)) {
33
34
  tags.push(
34
35
  <RangeFilterTag
35
- key={f.filterId}
36
+ key={`${f.filterId}-start`}
36
37
  filter={f}
37
38
  filters={props.filters}
38
39
  filterValue="startValue"
@@ -40,10 +41,10 @@ const Tags = (props: InfiniteScrollMenuTagsProps) => {
40
41
  />
41
42
  );
42
43
  }
43
- if (f.endValue) {
44
+ if (hasRangeValue(f.endValue)) {
44
45
  tags.push(
45
46
  <RangeFilterTag
46
- key={f.filterId}
47
+ key={`${f.filterId}-end`}
47
48
  filter={f}
48
49
  filters={props.filters}
49
50
  filterValue="endValue"
@@ -30,16 +30,19 @@ const ListFilterTag = (props: InfiniteScrollListFilterTagProps) => {
30
30
  const [modalFilter, setModalFilter] = useState<string>("");
31
31
  const [modalAddValues, setModalAddValues] = useState<string>("");
32
32
 
33
- const handleRemove = useCallback(() => {
34
- const newFilters = props.filters?.map((f) => {
35
- if (f.type !== "LIST") return f;
36
- if (f.filterId !== props.filter.filterId) return f;
37
- if (!modalAddValues) return { ...f, list: "" };
38
- const newValues = f.list.split(",").filter((v) => v !== modalAddValues);
39
- return { ...f, list: newValues.join(",") };
40
- });
41
- props.handleNewFilters(newFilters);
42
- }, [props.filters, props.filter.filterId, modalAddValues]);
33
+ const handleRemove = useCallback(
34
+ (value?: string) => {
35
+ const newFilters = props.filters?.map((f) => {
36
+ if (f.type !== "LIST") return f;
37
+ if (f.filterId !== props.filter.filterId) return f;
38
+ if (value === undefined) return { ...f, list: "" };
39
+ const newValues = f.list.split(",").filter((v) => v !== value);
40
+ return { ...f, list: newValues.join(",") };
41
+ });
42
+ props.handleNewFilters(newFilters);
43
+ },
44
+ [props.filters, props.filter.filterId]
45
+ );
43
46
 
44
47
  const handleAddValues = () => {
45
48
  const newFilters = props.filters?.map((f) => {
@@ -94,13 +97,14 @@ const ListFilterTag = (props: InfiniteScrollListFilterTagProps) => {
94
97
  headerElement: (t) => (
95
98
  <span className="k-lft-modal-table-header">{t}</span>
96
99
  ),
97
- cellElement: () => (
100
+ cellElement: (value) => (
98
101
  <div className="k-lft-modal-table-remove-button">
99
102
  <IconButton
100
103
  icon={faXmark}
101
104
  size="sm"
102
105
  variant="danger"
103
- onClick={handleRemove}
106
+ onClick={() => handleRemove(value)}
107
+ aria-label={`Remove ${value}`}
104
108
  />
105
109
  </div>
106
110
  ),
@@ -111,7 +115,7 @@ const ListFilterTag = (props: InfiniteScrollListFilterTagProps) => {
111
115
 
112
116
  return (
113
117
  <div className="k-lft-buttons">
114
- <Badge onRemove={handleRemove}>
118
+ <Badge onRemove={() => handleRemove()}>
115
119
  {props.filter.title}: {tagValue}
116
120
  </Badge>
117
121
  <IconButton
@@ -126,6 +130,7 @@ const ListFilterTag = (props: InfiniteScrollListFilterTagProps) => {
126
130
  <Input
127
131
  size="sm"
128
132
  placeholder="Search"
133
+ aria-label="Search values"
129
134
  value={modalFilter}
130
135
  onChange={(e) => setModalFilter(e.target.value)}
131
136
  />
@@ -133,6 +138,7 @@ const ListFilterTag = (props: InfiniteScrollListFilterTagProps) => {
133
138
  <Input
134
139
  size="sm"
135
140
  placeholder="Add new values"
141
+ aria-label="Add new values"
136
142
  value={modalAddValues}
137
143
  onChange={(e) => setModalAddValues(e.target.value)}
138
144
  />
@@ -141,6 +147,7 @@ const ListFilterTag = (props: InfiniteScrollListFilterTagProps) => {
141
147
  icon={faPlus}
142
148
  disabled={!allowAdd}
143
149
  onClick={handleAddValues}
150
+ aria-label="Add values"
144
151
  />
145
152
  </Row>
146
153
  <div className="k-lft-modal-table-container">
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
 
3
+ import { hasRangeValue } from "../utils/hasPendingChanges.js";
3
4
  import Badge from "../../../feedback/badge/index.js";
4
5
  import { useCallback, useMemo } from "react";
5
6
  import { DateTime } from "luxon";
@@ -32,13 +33,13 @@ const RangeFilterTag = (props: InfiniteScrollRangeFilterTagProps) => {
32
33
 
33
34
  const tagValue = useMemo(() => {
34
35
  const value = filter[filterValue];
35
- if (!value) return "";
36
+ if (!hasRangeValue(value)) return "";
36
37
  if (filter.rangeType === "DATE") {
37
38
  return DateTime.fromISO(String(value)).toFormat("D");
38
39
  } else if (filter.rangeType === "DATETIME") {
39
40
  return DateTime.fromISO(String(value)).toFormat("D ttt");
40
- } else if (filter.rangeType === "NUMBER") return value;
41
- else if (filter.rangeType === "STRING") return value;
41
+ }
42
+ return value;
42
43
  }, [filter, filterValue, filter.rangeType]);
43
44
 
44
45
  const handleRemove = useCallback(() => {
@@ -1,3 +1,4 @@
1
+ import { hasRangeValue } from "./hasPendingChanges.js";
1
2
  import {
2
3
  InfiniteScrollMenuGeneratedFilter,
3
4
  InfiniteScrollMenuLimitOption,
@@ -39,37 +40,51 @@ const generateQueryString = (params: GenerateQueryStringParams): string => {
39
40
  queryParams.set("sortDir", sortDirection);
40
41
  }
41
42
 
42
- // Filter params - simple key-value format for server-side validation
43
+ for (const [name, value] of Object.entries(filterParams(filters))) {
44
+ queryParams.set(name, value);
45
+ }
46
+
47
+ return queryParams.toString();
48
+ };
49
+
50
+ /**
51
+ * The `filter[...]` query params for the filters' current values: simple
52
+ * key-value pairs for server-side validation. Shared by InfiniteScroll and
53
+ * TableFilters, so both send the same format.
54
+ */
55
+ export const filterParams = (
56
+ filters: InfiniteScrollMenuGeneratedFilter[]
57
+ ): Record<string, string> => {
58
+ const params: Record<string, string> = {};
43
59
  for (const filter of filters) {
44
60
  const key = filter.dataKey;
45
61
 
46
62
  if (filter.type === "SEARCH" && filter.value) {
47
- queryParams.set(`filter[${key}]`, filter.value);
48
- queryParams.set(`filter[${key}_op]`, "contains");
63
+ params[`filter[${key}]`] = filter.value;
64
+ params[`filter[${key}_op]`] = "contains";
49
65
  } else if (filter.type === "RANGE") {
50
- if (filter.startValue !== undefined) {
51
- queryParams.set(`filter[${key}_gte]`, String(filter.startValue));
66
+ if (hasRangeValue(filter.startValue)) {
67
+ params[`filter[${key}_gte]`] = String(filter.startValue);
52
68
  }
53
- if (filter.endValue !== undefined) {
54
- queryParams.set(`filter[${key}_lte]`, String(filter.endValue));
69
+ if (hasRangeValue(filter.endValue)) {
70
+ params[`filter[${key}_lte]`] = String(filter.endValue);
55
71
  }
56
72
  } else if (filter.type === "SELECT") {
57
73
  const selectedOptions = filter.options
58
74
  .filter((opt) => opt.selected)
59
75
  .map((opt) => opt.id);
60
76
  if (selectedOptions.length > 0) {
61
- queryParams.set(`filter[${key}]`, selectedOptions.join(","));
77
+ params[`filter[${key}]`] = selectedOptions.join(",");
62
78
  if (filter.multiSelect) {
63
- queryParams.set(`filter[${key}_op]`, "in");
79
+ params[`filter[${key}_op]`] = "in";
64
80
  }
65
81
  }
66
82
  } else if (filter.type === "LIST" && filter.list) {
67
- queryParams.set(`filter[${key}]`, filter.list);
68
- queryParams.set(`filter[${key}_op]`, "in");
83
+ params[`filter[${key}]`] = filter.list;
84
+ params[`filter[${key}_op]`] = "in";
69
85
  }
70
86
  }
71
-
72
- return queryParams.toString();
87
+ return params;
73
88
  };
74
89
 
75
90
  export default generateQueryString;
@@ -2,6 +2,7 @@ import {
2
2
  InfiniteScrollMenuGeneratedFilter,
3
3
  InfiniteScrollMenuLimitOption,
4
4
  InfiniteScrollMenuSortDataKey,
5
+ RangeValue,
5
6
  SortDirection,
6
7
  } from "../types.js";
7
8
 
@@ -29,12 +30,18 @@ export const hasPendingChanges = (params: PendingChangesParams): boolean => {
29
30
  );
30
31
  };
31
32
 
33
+ /** A range bound is set unless it's missing or empty; `0` is a real bound. */
34
+ export const hasRangeValue = (
35
+ value: RangeValue | undefined
36
+ ): value is RangeValue => value !== undefined && value !== "";
37
+
32
38
  export const hasActiveFilters = (
33
39
  pendingFilters: InfiniteScrollMenuGeneratedFilter[]
34
40
  ): boolean => {
35
41
  for (const filter of pendingFilters) {
36
42
  if (filter.type === "RANGE") {
37
- if (filter.startValue || filter.endValue) return true;
43
+ if (hasRangeValue(filter.startValue) || hasRangeValue(filter.endValue))
44
+ return true;
38
45
  } else if (filter.type === "SEARCH") {
39
46
  if (filter.value) return true;
40
47
  } else if (filter.type === "LIST") {
@@ -46,7 +53,42 @@ export const hasActiveFilters = (
46
53
  return false;
47
54
  };
48
55
 
49
- const hasFilterChanges = (
56
+ /** The filters with every value cleared, for Reset. */
57
+ export const clearFilters = (
58
+ filters: InfiniteScrollMenuGeneratedFilter[]
59
+ ): InfiniteScrollMenuGeneratedFilter[] =>
60
+ filters.map((filter) => {
61
+ if (filter.type === "SELECT") {
62
+ return {
63
+ ...filter,
64
+ options: filter.options?.map((o) => ({ ...o, selected: false })),
65
+ };
66
+ } else if (filter.type === "RANGE") {
67
+ return { ...filter, startValue: undefined, endValue: undefined };
68
+ } else if (filter.type === "SEARCH") {
69
+ return { ...filter, value: undefined };
70
+ } else return { ...filter, list: "" };
71
+ });
72
+
73
+ /**
74
+ * Whether a pending change is in a search box: applied immediately, searches
75
+ * wait for a pause in typing. (Ranges apply from their menu's Apply button.)
76
+ */
77
+ export const hasTypedFilterChanges = (
78
+ filters: InfiniteScrollMenuGeneratedFilter[],
79
+ pendingFilters: InfiniteScrollMenuGeneratedFilter[]
80
+ ): boolean =>
81
+ filters.some(
82
+ (filter, i) =>
83
+ filter.type === "SEARCH" &&
84
+ hasFilterChanges([filter], [pendingFilters[i]])
85
+ );
86
+
87
+ // An emptied field is "" and an untouched one undefined; both mean unset.
88
+ const isSameValue = (a: unknown, b: unknown) =>
89
+ a === b || ((a === "" || a === undefined) && (b === "" || b === undefined));
90
+
91
+ export const hasFilterChanges = (
50
92
  filters: InfiniteScrollMenuGeneratedFilter[],
51
93
  pendingFilters: InfiniteScrollMenuGeneratedFilter[]
52
94
  ): boolean => {
@@ -63,22 +105,12 @@ const hasFilterChanges = (
63
105
  if (!selected.every((o) => pendingSelected.some((p) => p.id === o.id)))
64
106
  return true;
65
107
  } else if (filter.type === "SEARCH" && pending.type === "SEARCH") {
66
- if (filter.value !== pending.value) {
67
- if (!(filter.value === "" && pending.value === undefined)) return true;
68
- }
108
+ if (!isSameValue(filter.value, pending.value)) return true;
69
109
  } else if (filter.type === "RANGE" && pending.type === "RANGE") {
70
- if (filter.startValue !== pending.startValue) {
71
- if (!(filter.startValue === "" && pending.startValue === undefined))
72
- return true;
73
- }
74
- if (filter.endValue !== pending.endValue) {
75
- if (!(filter.endValue === "" && pending.endValue === undefined))
76
- return true;
77
- }
110
+ if (!isSameValue(filter.startValue, pending.startValue)) return true;
111
+ if (!isSameValue(filter.endValue, pending.endValue)) return true;
78
112
  } else if (filter.type === "LIST" && pending.type === "LIST") {
79
- if (filter.list !== pending.list) {
80
- if (!(filter.list === "" && pending.list === undefined)) return true;
81
- }
113
+ if (!isSameValue(filter.list, pending.list)) return true;
82
114
  }
83
115
  }
84
116
  return false;
@@ -24,7 +24,7 @@
24
24
  justify-content: space-between;
25
25
  gap: 1.5rem;
26
26
  padding: 0.5rem 0;
27
- border-bottom: 1px solid var(--border-color);
27
+ border-bottom: 1px solid var(--k-border-color);
28
28
  }
29
29
 
30
30
  .k-list-card > div:last-child {
@@ -35,7 +35,7 @@
35
35
  font-weight: 600;
36
36
  text-align: left;
37
37
  flex-shrink: 0;
38
- color: var(--text-color-secondary);
38
+ color: var(--k-text-color-secondary);
39
39
  }
40
40
 
41
41
  .k-list-card dd {
@@ -44,5 +44,5 @@
44
44
 
45
45
  .k-list-card-actions {
46
46
  padding-top: 1rem;
47
- border-top: 1px solid var(--border-color);
47
+ border-top: 1px solid var(--k-border-color);
48
48
  }
@@ -4,9 +4,9 @@
4
4
  justify-content: space-between;
5
5
  gap: 0.75rem;
6
6
  padding: 0.6rem 0.75rem;
7
- border: 1px solid var(--border-color);
7
+ border: 1px solid var(--k-border-color);
8
8
  border-radius: 0.25rem;
9
- background: var(--background-color);
9
+ background: var(--k-background-color);
10
10
  }
11
11
 
12
12
  .k-list-row-body {
@@ -4,9 +4,9 @@
4
4
  padding: 0.75rem;
5
5
  display: grid;
6
6
  gap: 0.5rem;
7
- border: 0.0625rem solid var(--border-color);
7
+ border: 0.0625rem solid var(--k-border-color);
8
8
  border-radius: 0.375rem;
9
- background: var(--background-color-light, var(--background-color));
9
+ background: var(--k-background-color-light, var(--k-background-color));
10
10
  }
11
11
 
12
12
  .k-recovery-code-grid-1col {
@@ -34,7 +34,7 @@
34
34
 
35
35
  .k-recovery-code-grid-index {
36
36
  font-size: 0.75rem;
37
- color: var(--text-color-secondary);
37
+ color: var(--k-text-color-secondary);
38
38
  min-width: 1.5rem;
39
39
  text-align: right;
40
40
  }
@@ -3,21 +3,21 @@
3
3
  align-items: center;
4
4
  gap: 0.5rem;
5
5
  padding: 0.5rem 0.75rem;
6
- border: 1px solid var(--border-color);
6
+ border: 1px solid var(--k-border-color);
7
7
  border-radius: 0.375rem;
8
- background: var(--background-color-light);
8
+ background: var(--k-background-color-light);
9
9
  }
10
10
 
11
11
  .k-secret-display-leading {
12
12
  flex-shrink: 0;
13
- color: var(--text-color-secondary);
13
+ color: var(--k-text-color-secondary);
14
14
  }
15
15
 
16
16
  .k-secret-display-value {
17
17
  flex: 1;
18
18
  min-width: 0;
19
19
  padding: 0.125rem 0.25rem;
20
- background-color: var(--background-color);
20
+ background-color: var(--k-background-color);
21
21
  border-radius: 0.25rem;
22
22
  word-break: break-all;
23
23
  user-select: all;
@@ -24,7 +24,7 @@
24
24
  }
25
25
 
26
26
  .k-stat-card-compact .k-card {
27
- background: var(--background-color-dark);
27
+ background: var(--k-background-color-dark);
28
28
  }
29
29
 
30
30
  .k-stat-card-icon {
@@ -34,25 +34,25 @@
34
34
  display: flex;
35
35
  align-items: center;
36
36
  justify-content: center;
37
- color: var(--text-color-light);
37
+ color: var(--k-text-color-light);
38
38
  font-size: 1.5rem;
39
39
  flex-shrink: 0;
40
40
  }
41
41
 
42
42
  .k-stat-card-icon-primary {
43
- background-color: var(--primary-color);
43
+ background-color: var(--k-primary-color);
44
44
  }
45
45
  .k-stat-card-icon-secondary {
46
- background-color: var(--secondary-color);
46
+ background-color: var(--k-secondary-color);
47
47
  }
48
48
  .k-stat-card-icon-success {
49
- background-color: var(--success-color);
49
+ background-color: var(--k-success-color);
50
50
  }
51
51
  .k-stat-card-icon-warning {
52
- background-color: var(--warning-color);
52
+ background-color: var(--k-warning-color);
53
53
  }
54
54
  .k-stat-card-icon-danger {
55
- background-color: var(--danger-color);
55
+ background-color: var(--k-danger-color);
56
56
  }
57
57
 
58
58
  .k-stat-card-content {
@@ -63,19 +63,19 @@
63
63
  .k-stat-card-default .k-stat-card-value {
64
64
  font-size: 2rem;
65
65
  font-weight: 700;
66
- color: var(--text-color);
66
+ color: var(--k-text-color);
67
67
  line-height: 1;
68
68
  }
69
69
 
70
70
  .k-stat-card-default .k-stat-card-label {
71
71
  font-size: 0.875rem;
72
- color: var(--text-color-secondary);
72
+ color: var(--k-text-color-secondary);
73
73
  margin-top: 0.25rem;
74
74
  }
75
75
 
76
76
  .k-stat-card-compact .k-stat-card-label {
77
77
  font-size: 0.75rem;
78
- color: var(--text-color-secondary);
78
+ color: var(--k-text-color-secondary);
79
79
  text-transform: uppercase;
80
80
  letter-spacing: 0.04em;
81
81
  }
@@ -87,10 +87,10 @@
87
87
  }
88
88
 
89
89
  .k-stat-card-trailing {
90
- color: var(--border-color);
90
+ color: var(--k-border-color);
91
91
  flex-shrink: 0;
92
92
  }
93
93
 
94
94
  .k-stat-card-interactive:hover .k-stat-card-trailing {
95
- color: var(--primary-color-text);
95
+ color: var(--k-primary-color-text);
96
96
  }