@tsiky/components-r19 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 (287) hide show
  1. package/.prettierignore +4 -0
  2. package/.prettierrc +9 -0
  3. package/.storybook/main.ts +17 -0
  4. package/.storybook/preview.ts +21 -0
  5. package/.storybook/vitest.setup.ts +7 -0
  6. package/README.md +69 -0
  7. package/chart.ts +1 -0
  8. package/eslint.config.js +40 -0
  9. package/index.html +13 -0
  10. package/index.ts +33 -0
  11. package/package.json +63 -0
  12. package/public/vite.svg +1 -0
  13. package/src/App.css +42 -0
  14. package/src/App.tsx +12 -0
  15. package/src/assets/accessibility.png +0 -0
  16. package/src/assets/accessibility.svg +1 -0
  17. package/src/assets/addon-library.png +0 -0
  18. package/src/assets/assets.png +0 -0
  19. package/src/assets/avif-test-image.avif +0 -0
  20. package/src/assets/context.png +0 -0
  21. package/src/assets/discord.svg +1 -0
  22. package/src/assets/docs.png +0 -0
  23. package/src/assets/figma-plugin.png +0 -0
  24. package/src/assets/github.svg +1 -0
  25. package/src/assets/react.svg +1 -0
  26. package/src/assets/share.png +0 -0
  27. package/src/assets/styling.png +0 -0
  28. package/src/assets/testing.png +0 -0
  29. package/src/assets/theming.png +0 -0
  30. package/src/assets/tutorials.svg +1 -0
  31. package/src/assets/youtube.svg +1 -0
  32. package/src/components/AddItemModal/AddItemModal.module.css +72 -0
  33. package/src/components/AddItemModal/AddItemModal.tsx +82 -0
  34. package/src/components/AddItemModal/index.ts +1 -0
  35. package/src/components/Alert/Alert.css +54 -0
  36. package/src/components/Alert/Alert.stories.tsx +82 -0
  37. package/src/components/Alert/Alert.tsx +85 -0
  38. package/src/components/Alert/AlertContext.tsx +200 -0
  39. package/src/components/Alert/AlertModels.ts +34 -0
  40. package/src/components/Alert/index.ts +3 -0
  41. package/src/components/AnnouncementPanel/FlexRowContainer.css +17 -0
  42. package/src/components/AnnouncementPanel/FlexRowContainer.stories.tsx +329 -0
  43. package/src/components/AnnouncementPanel/FlexRowContainer.tsx +24 -0
  44. package/src/components/AnnouncementPanel/ListBox/CounterListBox.css +56 -0
  45. package/src/components/AnnouncementPanel/ListBox/CounterListBox.stories.tsx +292 -0
  46. package/src/components/AnnouncementPanel/ListBox/CounterListBox.tsx +106 -0
  47. package/src/components/AnnouncementPanel/ListBox/SimpleListBox.css +57 -0
  48. package/src/components/AnnouncementPanel/ListBox/SimpleListBox.stories.tsx +189 -0
  49. package/src/components/AnnouncementPanel/ListBox/SimpleListBox.tsx +138 -0
  50. package/src/components/AnnouncementPanel/ListBox/TrendListBox.css +61 -0
  51. package/src/components/AnnouncementPanel/ListBox/TrendListBox.stories.tsx +257 -0
  52. package/src/components/AnnouncementPanel/ListBox/TrendListBox.tsx +90 -0
  53. package/src/components/AnnouncementPanel/ListBox/index.ts +3 -0
  54. package/src/components/AnnouncementPanel/ListContentContainer.css +23 -0
  55. package/src/components/AnnouncementPanel/ListContentContainer.stories.tsx +212 -0
  56. package/src/components/AnnouncementPanel/ListContentContainer.tsx +33 -0
  57. package/src/components/AnnouncementPanel/index.ts +3 -0
  58. package/src/components/BandChart/index.tsx +282 -0
  59. package/src/components/Button/Button.module.css +165 -0
  60. package/src/components/Button/Button.stories.ts +132 -0
  61. package/src/components/Button/Button.tsx +55 -0
  62. package/src/components/Button/button.css +29 -0
  63. package/src/components/Button/index.ts +2 -0
  64. package/src/components/ChartContainer/ChartContainer.css +116 -0
  65. package/src/components/ChartContainer/ChartContainer.stories.tsx +159 -0
  66. package/src/components/ChartContainer/ChartContainer.tsx +155 -0
  67. package/src/components/ChartContainer/index.ts +1 -0
  68. package/src/components/Charts/area-chart-admission/AreaChartAdmission.stories.tsx +65 -0
  69. package/src/components/Charts/area-chart-admission/AreaChartAdmission.tsx +89 -0
  70. package/src/components/Charts/area-chart-admission/content.json +48 -0
  71. package/src/components/Charts/area-chart-hospitalisation/AreaChartHospitalisation.stories.tsx +141 -0
  72. package/src/components/Charts/area-chart-hospitalisation/AreaChartHospitalisation.tsx +262 -0
  73. package/src/components/Charts/area-chart-hospitalisation/content.json +55 -0
  74. package/src/components/Charts/bar-chart/BarChart.stories.tsx +50 -0
  75. package/src/components/Charts/bar-chart/BarChart.tsx +132 -0
  76. package/src/components/Charts/bar-chart/content.json +15 -0
  77. package/src/components/Charts/boxplot-chart/BoxPlotChart.stories.tsx +63 -0
  78. package/src/components/Charts/boxplot-chart/BoxPlotChart.tsx +114 -0
  79. package/src/components/Charts/boxplot-chart/boxUtils.ts +22 -0
  80. package/src/components/Charts/boxplot-chart/content.json +11 -0
  81. package/src/components/Charts/mixed-chart/MixedChart.stories.tsx +83 -0
  82. package/src/components/Charts/mixed-chart/MixedChart.tsx +625 -0
  83. package/src/components/Charts/mixed-chart/content.json +34 -0
  84. package/src/components/Charts/sankey-adaptation/sankey.tsx +70 -0
  85. package/src/components/Charts/sankey-chart/SankeyChart.stories.tsx +69 -0
  86. package/src/components/Charts/sankey-chart/SankeyChart.tsx +155 -0
  87. package/src/components/Charts/sankey-chart/content.json +15 -0
  88. package/src/components/Charts/stacked-column/StackedColumn.stories.tsx +72 -0
  89. package/src/components/Charts/stacked-column/StackedColumn.tsx +406 -0
  90. package/src/components/Charts/stacked-column/content.json +37 -0
  91. package/src/components/Charts/stacked-column-one-hundred-percent/StackedColumnOneHundredPercent.stories.tsx +43 -0
  92. package/src/components/Charts/stacked-column-one-hundred-percent/StackedColumnOneHundredPercent.tsx +75 -0
  93. package/src/components/Charts/stacked-column-one-hundred-percent/content.json +6 -0
  94. package/src/components/CircularProgress/CircularProgress.css +79 -0
  95. package/src/components/CircularProgress/CircularProgress.stories.tsx +251 -0
  96. package/src/components/CircularProgress/CircularProgress.tsx +101 -0
  97. package/src/components/CircularProgress/index.ts +2 -0
  98. package/src/components/Configure.mdx +369 -0
  99. package/src/components/DayStatCard/DayStatCard.css +50 -0
  100. package/src/components/DayStatCard/DayStatCard.stories.tsx +273 -0
  101. package/src/components/DayStatCard/DayStatCard.tsx +69 -0
  102. package/src/components/DayStatCard/index.ts +2 -0
  103. package/src/components/DraggableSwitcher/DraggableSwitcherButton.tsx +58 -0
  104. package/src/components/DraggableSwitcher/context/useDraggableSwitcher.tsx +45 -0
  105. package/src/components/DraggableSwitcher/index.ts +2 -0
  106. package/src/components/DropdownMenu/DropdownMenu.css +100 -0
  107. package/src/components/DropdownMenu/DropdownMenu.stories.tsx +174 -0
  108. package/src/components/DropdownMenu/DropdownMenu.tsx +106 -0
  109. package/src/components/DropdownMenu/index.ts +1 -0
  110. package/src/components/DynamicForm/DynamicFom.stories.ts +773 -0
  111. package/src/components/DynamicForm/DynamicForm.module.css +468 -0
  112. package/src/components/DynamicForm/DynamicForm.tsx +224 -0
  113. package/src/components/DynamicForm/index.ts +3 -0
  114. package/src/components/DynamicForm/tools/form-metadata.ts +82 -0
  115. package/src/components/DynamicForm/tools/validation.ts +168 -0
  116. package/src/components/DynamicInput/DynamicInput.module.css +126 -0
  117. package/src/components/DynamicInput/DynamicInput.stories.ts +350 -0
  118. package/src/components/DynamicInput/DynamicInput.tsx +144 -0
  119. package/src/components/DynamicInput/index.ts +2 -0
  120. package/src/components/DynamicInput/input/CheckboxInput.tsx +41 -0
  121. package/src/components/DynamicInput/input/ColorInput.tsx +46 -0
  122. package/src/components/DynamicInput/input/DateInput.tsx +57 -0
  123. package/src/components/DynamicInput/input/FileInput.tsx +174 -0
  124. package/src/components/DynamicInput/input/InputWrapper.tsx +26 -0
  125. package/src/components/DynamicInput/input/RadioInput.tsx +46 -0
  126. package/src/components/DynamicInput/input/RangeInput.tsx +46 -0
  127. package/src/components/DynamicInput/input/SelectInput.tsx +75 -0
  128. package/src/components/DynamicInput/input/TextInput.tsx +101 -0
  129. package/src/components/DynamicInput/input/TextareaInput.tsx +47 -0
  130. package/src/components/DynamicInput/input/assets/ColorInput.module.css +48 -0
  131. package/src/components/DynamicInput/input/assets/DateInput.module.css +83 -0
  132. package/src/components/DynamicInput/input/assets/FileInput.module.css +133 -0
  133. package/src/components/DynamicInput/input/assets/RangeInput.module.css +169 -0
  134. package/src/components/DynamicInput/input/assets/SelectInput.module.css +95 -0
  135. package/src/components/DynamicInput/input/index.ts +10 -0
  136. package/src/components/DynamicTable/AdvancedFilters.tsx +196 -0
  137. package/src/components/DynamicTable/ColumnSorter.tsx +185 -0
  138. package/src/components/DynamicTable/Pagination.tsx +115 -0
  139. package/src/components/DynamicTable/TableBody.tsx +42 -0
  140. package/src/components/DynamicTable/TableCell.tsx +30 -0
  141. package/src/components/DynamicTable/TableHeader.tsx +34 -0
  142. package/src/components/DynamicTable/TableRow.tsx +56 -0
  143. package/src/components/DynamicTable/TableauDynamic.stories.ts +1014 -0
  144. package/src/components/DynamicTable/TableauDynamique.module.css +1287 -0
  145. package/src/components/DynamicTable/TableauDynamique.tsx +154 -0
  146. package/src/components/DynamicTable/filters/BooleanFilter.tsx +30 -0
  147. package/src/components/DynamicTable/filters/DateFilter.tsx +28 -0
  148. package/src/components/DynamicTable/filters/DateRangeFilter.tsx +51 -0
  149. package/src/components/DynamicTable/filters/FilterRenderer.tsx +117 -0
  150. package/src/components/DynamicTable/filters/MultiSelectFilter.tsx +59 -0
  151. package/src/components/DynamicTable/filters/NumberFilter.tsx +37 -0
  152. package/src/components/DynamicTable/filters/OperatorFilter.tsx +64 -0
  153. package/src/components/DynamicTable/filters/SelectFilter.tsx +69 -0
  154. package/src/components/DynamicTable/filters/TextFilter.tsx +39 -0
  155. package/src/components/DynamicTable/filters/index.ts +9 -0
  156. package/src/components/DynamicTable/hooks/index.ts +2 -0
  157. package/src/components/DynamicTable/hooks/useAsyncActions.ts +36 -0
  158. package/src/components/DynamicTable/hooks/useFilters.ts +142 -0
  159. package/src/components/DynamicTable/hooks/useTableData.ts +216 -0
  160. package/src/components/DynamicTable/index.ts +11 -0
  161. package/src/components/DynamicTable/tools/filterTypes.ts +118 -0
  162. package/src/components/DynamicTable/tools/index.ts +3 -0
  163. package/src/components/DynamicTable/tools/tableConfig.ts +96 -0
  164. package/src/components/DynamicTable/tools/tableTypes.ts +63 -0
  165. package/src/components/EntryControl/EntryControl.module.css +218 -0
  166. package/src/components/EntryControl/EntryControl.stories.tsx +71 -0
  167. package/src/components/EntryControl/EntryControl.tsx +117 -0
  168. package/src/components/EntryControl/index.ts +2 -0
  169. package/src/components/Grid/Grid.stories.tsx +94 -0
  170. package/src/components/Grid/Grid.tsx +214 -0
  171. package/src/components/Grid/grid.css +285 -0
  172. package/src/components/Grid/index.ts +2 -0
  173. package/src/components/Header/Header.stories.tsx +164 -0
  174. package/src/components/Header/Header.tsx +59 -0
  175. package/src/components/Header/header.css +31 -0
  176. package/src/components/Header/index.ts +1 -0
  177. package/src/components/IconText/IconText..stories.tsx +135 -0
  178. package/src/components/IconText/IconText.css +43 -0
  179. package/src/components/IconText/IconText.tsx +43 -0
  180. package/src/components/IconText/index.ts +1 -0
  181. package/src/components/LanguageSelector/LanguageSelector.css +31 -0
  182. package/src/components/LanguageSelector/LanguageSelector.stories.tsx +38 -0
  183. package/src/components/LanguageSelector/LanguageSelector.tsx +37 -0
  184. package/src/components/LanguageSelector/index.ts +1 -0
  185. package/src/components/Logo/Logo.css +89 -0
  186. package/src/components/Logo/Logo.stories.tsx +79 -0
  187. package/src/components/Logo/Logo.tsx +22 -0
  188. package/src/components/Logo/index.ts +2 -0
  189. package/src/components/MetricsPanel/MetricsItem.tsx +128 -0
  190. package/src/components/MetricsPanel/MetricsPanel.module.css +636 -0
  191. package/src/components/MetricsPanel/MetricsPanel.stories.tsx +692 -0
  192. package/src/components/MetricsPanel/MetricsPanel.tsx +282 -0
  193. package/src/components/MetricsPanel/PanelHeader.tsx +19 -0
  194. package/src/components/MetricsPanel/SummaryCard.tsx +61 -0
  195. package/src/components/MetricsPanel/index.ts +4 -0
  196. package/src/components/MetricsPanel/renderers/CompactRenderer.tsx +125 -0
  197. package/src/components/MetricsPanel/renderers/ImageCard.tsx +62 -0
  198. package/src/components/MetricsPanel/renderers/PertinenceCard.tsx +55 -0
  199. package/src/components/MetricsPanel/tools/MetricsPanelTypes.ts +62 -0
  200. package/src/components/MetricsPanel/tools/chooseDefaultRender.ts +50 -0
  201. package/src/components/MetricsPanel/tools/colorUtils.ts +39 -0
  202. package/src/components/MetricsPanel/tools/index.ts +2 -0
  203. package/src/components/ModuleHeader/ModuleHeader.css +37 -0
  204. package/src/components/ModuleHeader/ModuleHeader.stories.tsx +37 -0
  205. package/src/components/ModuleHeader/ModuleHeader.tsx +42 -0
  206. package/src/components/ModuleHeader/index.ts +1 -0
  207. package/src/components/ModuleSideBar/ModuleSideBar.css +227 -0
  208. package/src/components/ModuleSideBar/ModuleSideBar.stories.tsx +40 -0
  209. package/src/components/ModuleSideBar/ModuleSideBar.tsx +155 -0
  210. package/src/components/ModuleSideBar/index.ts +1 -0
  211. package/src/components/NavBar/NavBar.css +58 -0
  212. package/src/components/NavBar/NavBar.stories.tsx +169 -0
  213. package/src/components/NavBar/NavBar.tsx +100 -0
  214. package/src/components/NavBar/NavContext.tsx +30 -0
  215. package/src/components/NavBar/index.ts +2 -0
  216. package/src/components/NavItem/NavItem.css +29 -0
  217. package/src/components/NavItem/NavItem.tsx +58 -0
  218. package/src/components/NavItem/index.ts +1 -0
  219. package/src/components/Page/Dashboard.tsx +93 -0
  220. package/src/components/Page/Page.stories.ts +33 -0
  221. package/src/components/Page/Page.tsx +73 -0
  222. package/src/components/Page/page.css +81 -0
  223. package/src/components/PerformanceCard/PerformanceCard.module.css +232 -0
  224. package/src/components/PerformanceCard/PerformanceCard.stories.tsx +441 -0
  225. package/src/components/PerformanceCard/PerformanceCard.tsx +198 -0
  226. package/src/components/PerformanceCard/defaultHistogramRenderer.tsx +32 -0
  227. package/src/components/PerformanceCard/tools/types.ts +50 -0
  228. package/src/components/PerformanceCard/tools/usePerformanceCard.ts +93 -0
  229. package/src/components/PeriodRange/PeriodRange.module.css +158 -0
  230. package/src/components/PeriodRange/PeriodRange.stories.tsx +66 -0
  231. package/src/components/PeriodRange/PeriodRange.tsx +130 -0
  232. package/src/components/PeriodSelect/PeriodSelect.module.css +65 -0
  233. package/src/components/PeriodSelect/PeriodSelect.stories.tsx +40 -0
  234. package/src/components/PeriodSelect/PeriodSelect.tsx +42 -0
  235. package/src/components/PeriodSelect/index.ts +1 -0
  236. package/src/components/ScrollableHorizontale/ScrollableHorizontale.css +40 -0
  237. package/src/components/ScrollableHorizontale/ScrollableHorizontale.stories.tsx +133 -0
  238. package/src/components/ScrollableHorizontale/ScrollableHorizontale.tsx +29 -0
  239. package/src/components/ScrollableHorizontale/index.ts +1 -0
  240. package/src/components/SearchBar/SearchBar.css +40 -0
  241. package/src/components/SearchBar/SearchBar.stories.tsx +36 -0
  242. package/src/components/SearchBar/SearchBar.tsx +30 -0
  243. package/src/components/SearchBar/index.ts +1 -0
  244. package/src/components/SectionTitle/SectionTitle.css +21 -0
  245. package/src/components/SectionTitle/SectionTitle.stories.tsx +39 -0
  246. package/src/components/SectionTitle/SectionTitle.tsx +18 -0
  247. package/src/components/SideComponent/PatientEditor.tsx +64 -0
  248. package/src/components/SideComponent/SideComponent.css +179 -0
  249. package/src/components/SideComponent/SideComponent.stories.tsx +547 -0
  250. package/src/components/SideComponent/SideComponent.tsx +243 -0
  251. package/src/components/SideComponent/hooks/useBodyScrollLock.ts +15 -0
  252. package/src/components/SideComponent/index.ts +2 -0
  253. package/src/components/SideComponent/portal.ts +11 -0
  254. package/src/components/SubNavBar/SubNavBar.tsx +41 -0
  255. package/src/components/SubNavBar/index.ts +1 -0
  256. package/src/components/Switcher/Switcher.css +65 -0
  257. package/src/components/Switcher/Switcher.stories.tsx +153 -0
  258. package/src/components/Switcher/Switcher.tsx +83 -0
  259. package/src/components/Switcher/index.ts +1 -0
  260. package/src/components/Title/Title.stories.tsx +18 -0
  261. package/src/components/Title/Title.tsx +26 -0
  262. package/src/components/Title/index.ts +1 -0
  263. package/src/components/TranslationKey/TranslationKey.css +272 -0
  264. package/src/components/TranslationKey/TranslationKey.stories.tsx +50 -0
  265. package/src/components/TranslationKey/TranslationKey.tsx +245 -0
  266. package/src/components/TranslationKey/index.ts +1 -0
  267. package/src/components/TrendItem/TrendItem.css +36 -0
  268. package/src/components/TrendItem/TrendItem.stories.tsx +276 -0
  269. package/src/components/TrendItem/TrendItem.tsx +46 -0
  270. package/src/components/TrendItem/index.ts +1 -0
  271. package/src/components/TrendList/TrendList.css +16 -0
  272. package/src/components/TrendList/TrendList.stories.tsx +337 -0
  273. package/src/components/TrendList/TrendList.tsx +45 -0
  274. package/src/components/TrendList/index.ts +1 -0
  275. package/src/components/theme/ThemeSwitcherButton.tsx +64 -0
  276. package/src/components/theme/context/ThemeContext.tsx +61 -0
  277. package/src/components/theme/context/index.ts +2 -0
  278. package/src/components/theme/context/useThemeSwitcher.ts +18 -0
  279. package/src/components/theme/index.ts +1 -0
  280. package/src/index.css +68 -0
  281. package/src/main.tsx +10 -0
  282. package/src/vite-env.d.ts +1 -0
  283. package/tsconfig.app.json +27 -0
  284. package/tsconfig.json +4 -0
  285. package/tsconfig.node.json +25 -0
  286. package/vite.config.ts +43 -0
  287. package/vitest.shims.d.ts +1 -0
@@ -0,0 +1,1287 @@
1
+ /* ================ GENERAL CONTAINER ================ */
2
+ .container {
3
+ --card-shadow: 0 8px 30px rgba(15, 23, 42, 0.06);
4
+ --filters-panel-height: 0px;
5
+ --control-gap: 8px;
6
+ --small-font: 12px;
7
+ --xsmall-font: 11px;
8
+ --muted: #6b7280;
9
+ --border: #e6e9ef;
10
+ --accent: #2563eb;
11
+ --primary: #2563eb;
12
+ --bg-card: #ffffff;
13
+ --row-accent-width: 2px;
14
+ --row-accent-gap: 12px;
15
+ --row-accent-radius: 2px;
16
+ --controls-text-size: 13px;
17
+ border-radius: 12px;
18
+ padding: 12px;
19
+ position: relative;
20
+ color: #0f172a;
21
+ background: transparent;
22
+ box-sizing: border-box;
23
+ overflow: visible;
24
+ }
25
+ .container.filters-open .tableWrapper {
26
+ margin-top: calc(var(--filters-panel-height) + 12px);
27
+ transition: margin-top 240ms cubic-bezier(0.2, 0.9, 0.3, 1);
28
+ }
29
+
30
+ /* ================ CONTROLS (RIGHT-ALIGNED) ================ */
31
+ .tableControls {
32
+ display: flex;
33
+ gap: var(--control-gap);
34
+ align-items: center;
35
+ justify-content: flex-end;
36
+ flex-wrap: wrap;
37
+ margin-bottom: 12px;
38
+ position: relative;
39
+ z-index: 30;
40
+ }
41
+ .controlsRight {
42
+ display: inline-flex;
43
+ align-items: center;
44
+ gap: 6px;
45
+ }
46
+ .tableControls > * {
47
+ flex: 0 1 auto;
48
+ min-width: 0;
49
+ }
50
+
51
+ /* ================ TABLE WRAPPER & BASE ================ */
52
+ .tableWrapper {
53
+ overflow-x: auto;
54
+ border-radius: 10px;
55
+ transition: margin-top 220ms cubic-bezier(0.2, 0.9, 0.3, 1);
56
+ padding: 6px;
57
+ box-sizing: border-box;
58
+ background: transparent;
59
+ }
60
+ .table {
61
+ width: 100%;
62
+ border-collapse: separate;
63
+ border-spacing: 0;
64
+ min-width: 640px;
65
+ table-layout: auto;
66
+ font-feature-settings:
67
+ 'tnum' on,
68
+ 'ss01' on;
69
+ background: transparent;
70
+ }
71
+
72
+ .table thead {
73
+ position: sticky;
74
+ top: 0;
75
+ z-index: 20;
76
+ backdrop-filter: blur(4px);
77
+ box-shadow: 0 2px 8px rgba(2, 6, 23, 0.04);
78
+ }
79
+ .headerCell {
80
+ padding: 12px 14px;
81
+ cursor: pointer;
82
+ text-align: left;
83
+ letter-spacing: 0.2px;
84
+ white-space: nowrap;
85
+ font-size: 13px;
86
+ font-weight: 600;
87
+ vertical-align: middle;
88
+ }
89
+ .headerContent {
90
+ font-size: 13px;
91
+ font-weight: 900;
92
+ }
93
+ .table tbody td {
94
+ padding: 10px 14px;
95
+ background: transparent;
96
+ vertical-align: middle;
97
+ font-size: 13px;
98
+ min-width: 0;
99
+ overflow: hidden;
100
+ text-overflow: ellipsis;
101
+ white-space: nowrap;
102
+ }
103
+ .tableRow {
104
+ transition:
105
+ transform 0.12s ease,
106
+ box-shadow 0.12s ease;
107
+ }
108
+ .tableRow:hover {
109
+ transform: translateY(-2px);
110
+ box-shadow: 0 10px 20px rgba(2, 6, 23, 0.04);
111
+ }
112
+
113
+ /* ================ COMPACT VARIANT ================ */
114
+ .container.compactTable .headerCell {
115
+ padding: 8px 10px;
116
+ font-size: 12px;
117
+ }
118
+ .container.compactTable .table tbody td {
119
+ padding: 8px 10px;
120
+ font-size: 12px;
121
+ }
122
+
123
+ /* ================ CARD ROWS ALTERNATIVE FOR XS ================ */
124
+ .container.cardRows .table {
125
+ display: block;
126
+ min-width: 100%;
127
+ }
128
+ .container.cardRows .table thead {
129
+ display: none;
130
+ }
131
+ .container.cardRows .table tbody {
132
+ display: block;
133
+ }
134
+ .container.cardRows .table tbody tr {
135
+ display: block;
136
+ margin: 10px 0;
137
+ border-radius: 10px;
138
+ background: var(--bg-card);
139
+ box-shadow: var(--card-shadow);
140
+ padding: 10px;
141
+ }
142
+ .container.cardRows .table tbody td {
143
+ display: flex;
144
+ justify-content: space-between;
145
+ padding: 8px 10px;
146
+ white-space: normal;
147
+ overflow: visible;
148
+ }
149
+
150
+ /* ================ SORT & FILTER BUTTONS ================ */
151
+ .toggleFiltersButton,
152
+ .toggleSortButton {
153
+ display: inline-flex;
154
+ align-items: center;
155
+ gap: 8px;
156
+ padding: 8px 12px;
157
+ border: 1px solid #e5e7eb;
158
+ border-radius: 999px;
159
+ font-size: var(--small-font);
160
+ font-weight: 600;
161
+ cursor: pointer;
162
+ transition: all 0.12s ease-in-out;
163
+ box-shadow: 0 1px 3px rgba(15, 23, 42, 0.03);
164
+ background: #fff;
165
+ touch-action: manipulation;
166
+ }
167
+ .toggleFiltersButton:hover,
168
+ .toggleSortButton:hover {
169
+ transform: translateY(-1px);
170
+ background: #f3f7ff;
171
+ }
172
+ .buttonTextCompact {
173
+ font-size: var(--small-font);
174
+ line-height: 1;
175
+ }
176
+ .countCompact,
177
+ .resultCountCompact {
178
+ font-size: var(--xsmall-font);
179
+ color: var(--muted);
180
+ }
181
+ .clearFiltersButton {
182
+ display: inline-flex;
183
+ align-items: center;
184
+ gap: 6px;
185
+ background: #fff;
186
+ border: 1px solid var(--border);
187
+ border-radius: 999px;
188
+ padding: 6px 10px;
189
+ cursor: pointer;
190
+ font-size: var(--xsmall-font);
191
+ }
192
+
193
+ /* ---------- NOUVELLES RÈGLES POUR LES LABELS DE TRI ---------- */
194
+ .sortItemLabel {
195
+ font-size: 13px;
196
+ font-weight: 600;
197
+ color: #111827;
198
+ white-space: nowrap;
199
+ overflow: hidden;
200
+ text-overflow: ellipsis;
201
+ max-width: 220px;
202
+ display: inline-block;
203
+ text-transform: none;
204
+ line-height: 1;
205
+ }
206
+
207
+ .uppercaseSmall {
208
+ font-size: 11px;
209
+ letter-spacing: 0.4px;
210
+ font-weight: 700;
211
+ line-height: 1;
212
+ }
213
+
214
+ @media (max-width: 420px) {
215
+ .uppercaseSmall {
216
+ font-size: 10px;
217
+ }
218
+ }
219
+
220
+ /* ================ FILTERS PANEL ================ */
221
+ .filtersPanel {
222
+ position: absolute;
223
+ top: calc(100% + 8px);
224
+ right: 0;
225
+ z-index: 1000;
226
+ width: min(680px, 94vw);
227
+ background: var(--bg-card);
228
+ border-radius: 12px;
229
+ padding: 14px;
230
+ box-shadow: 0 18px 40px rgba(15, 23, 42, 0.12);
231
+ border: 1px solid rgba(15, 23, 42, 0.06);
232
+ transition:
233
+ transform 220ms ease,
234
+ opacity 220ms ease;
235
+ max-height: 72vh;
236
+ overflow: auto;
237
+ }
238
+ .filtersPanelInline {
239
+ position: absolute;
240
+ top: 100%;
241
+ left: 0;
242
+ right: 0;
243
+ width: 100%;
244
+ margin-top: 10px;
245
+ border-radius: 8px;
246
+ padding: 12px;
247
+ }
248
+ .filtersPanelHorizontal .filtersRow {
249
+ display: flex;
250
+ gap: 12px;
251
+ flex-wrap: wrap;
252
+ align-items: flex-start;
253
+ }
254
+
255
+ @media (max-width: 680px) {
256
+ .filtersPanel {
257
+ position: fixed;
258
+ left: 0;
259
+ right: 0;
260
+ bottom: 0;
261
+ top: auto;
262
+ width: 100%;
263
+ max-height: 78vh;
264
+ border-radius: 12px 12px 0 0;
265
+ padding: 12px;
266
+ box-shadow: 0 -12px 40px rgba(2, 6, 23, 0.18);
267
+ border: none;
268
+ overflow: auto;
269
+ }
270
+ .filtersPanel::before {
271
+ content: '';
272
+ display: block;
273
+ width: 48px;
274
+ height: 4px;
275
+ border-radius: 999px;
276
+ margin: 6px auto 8px;
277
+ background: rgba(2, 6, 23, 0.06);
278
+ }
279
+ .filtersActionsHorizontal {
280
+ position: sticky;
281
+ bottom: 0;
282
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1));
283
+ padding-top: 10px;
284
+ margin-top: 8px;
285
+ }
286
+ }
287
+
288
+ /* ================ FILTER ITEMS LAYOUT ================ */
289
+ .filtersRow {
290
+ display: flex;
291
+ flex-wrap: wrap;
292
+ gap: 10px;
293
+ align-items: flex-start;
294
+ padding-bottom: 8px;
295
+ }
296
+ .filterItemInline {
297
+ display: flex;
298
+ flex-direction: column;
299
+ gap: 6px;
300
+ min-width: 180px;
301
+ max-width: 320px;
302
+ padding: 10px;
303
+ border-radius: 10px;
304
+ border: 1px solid rgba(15, 23, 42, 0.04);
305
+ box-sizing: border-box;
306
+ background: #fff;
307
+ }
308
+ @media (max-width: 980px) {
309
+ .filterItemInline {
310
+ min-width: 140px;
311
+ max-width: 48%;
312
+ }
313
+ }
314
+ @media (max-width: 540px) {
315
+ .filterItemInline {
316
+ min-width: 100%;
317
+ max-width: 100%;
318
+ padding: 10px;
319
+ border-radius: 8px;
320
+ }
321
+ }
322
+ .filterLabel {
323
+ font-size: var(--xsmall-font);
324
+ font-weight: 600;
325
+ color: #111827;
326
+ }
327
+ .filterInput,
328
+ .filterSelect,
329
+ .operatorSelect,
330
+ .operatorInput {
331
+ font-size: 13px;
332
+ padding: 8px 10px;
333
+ border: 1px solid var(--border);
334
+ border-radius: 8px;
335
+ width: 100%;
336
+ box-sizing: border-box;
337
+ }
338
+
339
+ .activeFilters {
340
+ display: flex;
341
+ gap: 8px;
342
+ flex-wrap: wrap;
343
+ align-items: center;
344
+ }
345
+ .activeFilterTag {
346
+ display: flex;
347
+ align-items: center;
348
+ gap: 8px;
349
+ font-size: 12px;
350
+ font-weight: 600;
351
+ color: #374151;
352
+ background: #f1f5f9;
353
+ border-radius: 18px;
354
+ padding: 6px 10px;
355
+ border: 1px solid #e6eef6;
356
+ }
357
+
358
+ .actionsGroup {
359
+ display: flex;
360
+ gap: 8px;
361
+ align-items: center;
362
+ }
363
+ .applyButton {
364
+ background: #008fbb;
365
+ color: #fff;
366
+ border: none;
367
+ padding: 10px 14px;
368
+ border-radius: 10px;
369
+ font-weight: 700;
370
+ cursor: pointer;
371
+ font-size: 13px;
372
+ }
373
+ .cancelButton {
374
+ background: #fff;
375
+ color: #374151;
376
+ border: 1px solid var(--border);
377
+ padding: 10px 14px;
378
+ border-radius: 10px;
379
+ cursor: pointer;
380
+ font-size: var(--xsmall-font);
381
+ font-weight: 600;
382
+ }
383
+
384
+ @media (max-width: 680px) {
385
+ .filtersActionsHorizontal {
386
+ display: flex;
387
+ gap: 12px;
388
+ flex-direction: column-reverse;
389
+ }
390
+ .applyButton,
391
+ .cancelButton {
392
+ width: 100%;
393
+ }
394
+ }
395
+
396
+ /* ================ COLUMN SORTER DROPDOWN ================ */
397
+ .columnSorterContainer {
398
+ position: relative;
399
+ display: inline-block;
400
+ }
401
+ .sorterControls {
402
+ display: flex;
403
+ align-items: center;
404
+ }
405
+ .sortDropdownWrapper {
406
+ position: relative;
407
+ }
408
+ .sortDropdown {
409
+ position: absolute;
410
+ top: calc(100% + 8px);
411
+ right: 0;
412
+ left: auto;
413
+ background: #fff;
414
+ border: 1px solid rgba(15, 23, 42, 0.08);
415
+ border-radius: 10px;
416
+ padding: 0;
417
+ min-width: 220px;
418
+ box-shadow: 0 8px 26px rgba(15, 23, 42, 0.08);
419
+ z-index: 300;
420
+ display: flex;
421
+ flex-direction: column;
422
+ }
423
+
424
+ .sortDropdownHeader {
425
+ display: flex;
426
+ justify-content: space-between;
427
+ align-items: center;
428
+ padding: 12px 16px;
429
+ font-weight: 700;
430
+ font-size: var(--xsmall-font);
431
+ color: #374151;
432
+ }
433
+
434
+ .closeButton {
435
+ background: none;
436
+ border: none;
437
+ cursor: pointer;
438
+ padding: 4px;
439
+ border-radius: 4px;
440
+ display: flex;
441
+ align-items: center;
442
+ justify-content: center;
443
+ }
444
+
445
+ .closeButton:hover {
446
+ background: #f3f4f6;
447
+ }
448
+
449
+ .sortDropdownContent {
450
+ max-height: 300px;
451
+ overflow-y: auto;
452
+ padding: 8px;
453
+ }
454
+
455
+ .sortDropdownItem {
456
+ display: flex;
457
+ align-items: center;
458
+ gap: 12px;
459
+ justify-content: space-between;
460
+ padding: 10px;
461
+ border-radius: 8px;
462
+ transition: background 0.12s;
463
+ margin-bottom: 4px;
464
+ box-sizing: border-box;
465
+ }
466
+
467
+ .sortDropdownItem .sortItemLabel {
468
+ flex: 1 1 auto;
469
+ min-width: 0;
470
+ white-space: nowrap;
471
+ overflow: hidden;
472
+ text-overflow: ellipsis;
473
+ display: block;
474
+ line-height: 1;
475
+ font-size: 13px;
476
+ font-weight: 400;
477
+ color: #111827;
478
+ max-width: 100%;
479
+ }
480
+
481
+ .sortDropdownItem .sortDirectionButtons {
482
+ flex: 0 0 auto;
483
+ display: flex;
484
+ gap: 8px;
485
+ margin-left: 12px;
486
+ }
487
+
488
+ @media (max-width: 480px) {
489
+ .sortDropdownItem {
490
+ padding: 8px;
491
+ }
492
+ .sortDropdownItem .sortItemLabel {
493
+ font-size: 12px;
494
+ }
495
+ .sortDropdownItem .sortDirectionButtons {
496
+ gap: 6px;
497
+ }
498
+ }
499
+
500
+ .sortDropdownItem:hover {
501
+ background: #f8fafc;
502
+ }
503
+
504
+ .sortItemLabel {
505
+ font-size: 13px;
506
+ font-weight: 600;
507
+ color: #111827;
508
+ white-space: nowrap;
509
+ overflow: hidden;
510
+ text-overflow: ellipsis;
511
+ max-width: 160px;
512
+ }
513
+
514
+ .sortDirectionButtons {
515
+ display: flex;
516
+ gap: 6px;
517
+ }
518
+
519
+ .sortDirectionButton {
520
+ display: inline-flex;
521
+ align-items: center;
522
+ justify-content: center;
523
+ width: 32px;
524
+ height: 32px;
525
+ border-radius: 8px;
526
+ border: 1px solid #e5e7eb;
527
+ background: #fff;
528
+ cursor: pointer;
529
+ transition: all 0.12s;
530
+ }
531
+
532
+ .sortDirectionButton:hover {
533
+ transform: translateY(-1px);
534
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05);
535
+ }
536
+
537
+ .activeSort {
538
+ background: var(--primary);
539
+ color: #fff;
540
+ border-color: var(--primary);
541
+ box-shadow: 0 4px 6px rgba(37, 99, 235, 0.2);
542
+ }
543
+
544
+ .sortActions {
545
+ padding: 12px 16px;
546
+ border-top: 1px solid #e5e7eb;
547
+ display: flex;
548
+ justify-content: flex-end;
549
+ }
550
+
551
+ @media (max-width: 680px) {
552
+ .sortDropdown {
553
+ position: fixed;
554
+ left: 0;
555
+ right: 0;
556
+ top: auto;
557
+ bottom: 0;
558
+ min-width: auto;
559
+ width: 100%;
560
+ border-radius: 16px 16px 0 0;
561
+ padding: 0;
562
+ box-shadow: 0 -10px 30px rgba(2, 6, 23, 0.2);
563
+ max-height: 70vh;
564
+ animation: slideUp 0.3s ease-out;
565
+ }
566
+
567
+ .sortDropdown::before {
568
+ content: '';
569
+ display: block;
570
+ width: 40px;
571
+ height: 4px;
572
+ border-radius: 999px;
573
+ margin: 12px auto;
574
+ background: rgba(2, 6, 23, 0.1);
575
+ position: absolute;
576
+ top: 0;
577
+ left: 50%;
578
+ transform: translateX(-50%);
579
+ }
580
+
581
+ .sortDropdownHeader {
582
+ padding-top: 24px;
583
+ }
584
+
585
+ .sortDropdownContent {
586
+ max-height: calc(70vh - 130px);
587
+ }
588
+
589
+ @keyframes slideUp {
590
+ from {
591
+ transform: translateY(100%);
592
+ }
593
+ to {
594
+ transform: translateY(0);
595
+ }
596
+ }
597
+ }
598
+
599
+ @media (max-width: 480px) {
600
+ .sortItemLabel {
601
+ max-width: 120px;
602
+ font-size: 12px;
603
+ }
604
+
605
+ .sortDirectionButton {
606
+ width: 28px;
607
+ height: 28px;
608
+ }
609
+
610
+ .sortDirectionButton svg {
611
+ width: 12px;
612
+ height: 12px;
613
+ }
614
+ }
615
+ .sortDropdownHeader {
616
+ font-weight: 700;
617
+ font-size: var(--xsmall-font);
618
+ color: #374151;
619
+ margin-bottom: 8px;
620
+ }
621
+ .sortDropdownItem {
622
+ display: flex;
623
+ align-items: center;
624
+ justify-content: space-between;
625
+ padding: 8px;
626
+ border-radius: 8px;
627
+ transition: background 0.12s;
628
+ }
629
+ .sortDropdownItem:hover {
630
+ background: #f8fafc;
631
+ }
632
+ .sortDirectionButtons {
633
+ display: flex;
634
+ gap: 8px;
635
+ }
636
+ .sortDirectionButton {
637
+ display: inline-flex;
638
+ align-items: center;
639
+ justify-content: center;
640
+ width: 34px;
641
+ height: 34px;
642
+ border-radius: 8px;
643
+ border: 1px solid #e5e7eb;
644
+ background: #fff;
645
+ cursor: pointer;
646
+ transition: all 0.12s;
647
+ }
648
+ .sortDirectionButton:hover {
649
+ transform: translateY(-2px);
650
+ }
651
+ .activeSort {
652
+ background: var(--primary);
653
+ color: #fff;
654
+ border-color: var(--primary);
655
+ box-shadow: 0 6px 18px rgba(37, 99, 235, 0.12);
656
+ }
657
+
658
+ /* ================ FOCUS & ACCESSIBILITY ================ */
659
+ .toggleFiltersButton:focus,
660
+ .toggleSortButton:focus,
661
+ .applyButton:focus,
662
+ .cancelButton:focus,
663
+ .paginationButton:focus,
664
+ .sortDirectionButton:focus,
665
+ .pageSizeSelect:focus,
666
+ .filterInput:focus,
667
+ .operatorInput:focus {
668
+ outline: none;
669
+ box-shadow: 0 0 0 4px rgba(37, 99, 235, 0.12);
670
+ border-color: var(--accent);
671
+ }
672
+
673
+ /* ================ PAGINATION ================ */
674
+ .topPagination {
675
+ margin: 12px 0;
676
+ display: flex;
677
+ justify-content: center;
678
+ width: 100%;
679
+ box-sizing: border-box;
680
+ }
681
+ .paginationContainer {
682
+ display: flex;
683
+ align-items: center;
684
+ justify-content: space-between;
685
+ gap: 12px;
686
+ width: 100%;
687
+ box-sizing: border-box;
688
+ padding: 8px;
689
+ border-radius: 10px;
690
+ border: 1px solid rgba(15, 23, 42, 0.04);
691
+ }
692
+ .leftGroup {
693
+ display: flex;
694
+ align-items: center;
695
+ gap: 10px;
696
+ min-width: 150px;
697
+ flex: 0 0 auto;
698
+ }
699
+ .pageSizeControls {
700
+ display: flex;
701
+ gap: 8px;
702
+ align-items: center;
703
+ }
704
+ .pageSizeLabel {
705
+ font-weight: 600;
706
+ color: var(--muted);
707
+ font-size: 13px;
708
+ }
709
+ .pageSizeSelect {
710
+ border: 1px solid var(--border);
711
+ border-radius: 8px;
712
+ padding: 8px 10px;
713
+ min-width: 64px;
714
+ font-size: 13px;
715
+ }
716
+ .pageSizeSuffix {
717
+ color: var(--muted);
718
+ font-size: 13px;
719
+ }
720
+ .paginationInfo {
721
+ text-align: center;
722
+ color: var(--muted);
723
+ flex: 1 1 auto;
724
+ font-size: 13px;
725
+ min-width: 120px;
726
+ }
727
+ .paginationControls {
728
+ display: flex;
729
+ align-items: center;
730
+ gap: 8px;
731
+ justify-content: flex-end;
732
+ min-width: 140px;
733
+ overflow-x: auto;
734
+ -webkit-overflow-scrolling: touch;
735
+ padding-bottom: 2px;
736
+ }
737
+ .paginationButton {
738
+ min-width: 40px;
739
+ height: 40px;
740
+ display: inline-flex;
741
+ align-items: center;
742
+ justify-content: center;
743
+ border-radius: 10px;
744
+ border: 1px solid var(--border);
745
+ font-size: 14px;
746
+ cursor: pointer;
747
+ transition: all 0.12s;
748
+ padding: 0 12px;
749
+ box-shadow: 0 1px 4px rgba(16, 24, 40, 0.03);
750
+ background: transparent;
751
+ color: var(--muted);
752
+ }
753
+ .paginationButton:hover:not(.disabledButton) {
754
+ transform: translateY(-3px);
755
+ box-shadow: 0 8px 20px rgba(2, 6, 23, 0.06);
756
+ }
757
+ .activeButton {
758
+ background: var(--color-primary);
759
+ color: #fff;
760
+ font-weight: 700;
761
+ }
762
+ .disabledButton {
763
+ opacity: 0.45;
764
+ cursor: not-allowed;
765
+ }
766
+ .navigationButton:hover:not(.disabledButton) {
767
+ background: #fff;
768
+ }
769
+
770
+ .navigationButton {
771
+ background: var(--color-content-background);
772
+ }
773
+
774
+ .disabledButton {
775
+ opacity: 0.5;
776
+ cursor: not-allowed;
777
+ }
778
+ @media (max-width: 540px) {
779
+ .paginationContainer {
780
+ flex-direction: column;
781
+ align-items: stretch;
782
+ gap: 10px;
783
+ padding: 10px;
784
+ }
785
+ .leftGroup,
786
+ .paginationControls {
787
+ justify-content: center;
788
+ width: 100%;
789
+ }
790
+ .pageSizeSelect {
791
+ min-width: 56px;
792
+ padding: 6px 8px;
793
+ }
794
+ .paginationButton {
795
+ min-width: 36px;
796
+ height: 36px;
797
+ border-radius: 8px;
798
+ font-size: 13px;
799
+ padding: 0 8px;
800
+ }
801
+ .pageSizeLabel,
802
+ .paginationInfo {
803
+ font-size: 12px;
804
+ }
805
+ }
806
+ @media (max-width: 380px) {
807
+ .table {
808
+ min-width: 520px;
809
+ font-size: 12px;
810
+ }
811
+ }
812
+
813
+ /* ================ HELPERS ================ */
814
+ .operatorFilterContainer {
815
+ display: flex;
816
+ align-items: center;
817
+ gap: 6px;
818
+ font-weight: 700;
819
+ }
820
+ .rangeSeparator {
821
+ font-weight: 600;
822
+ color: var(--muted);
823
+ }
824
+
825
+ /* ================ NOUVELLES AMÉLIORATIONS RESPONSIVE ================ */
826
+ @media (max-width: 480px) {
827
+ .container {
828
+ padding: 8px;
829
+ }
830
+
831
+ .tableControls {
832
+ justify-content: space-between;
833
+ margin-bottom: 8px;
834
+ }
835
+
836
+ .controlsRight {
837
+ flex-wrap: wrap;
838
+ justify-content: flex-end;
839
+ gap: 4px;
840
+ }
841
+
842
+ .toggleFiltersButton,
843
+ .toggleSortButton {
844
+ padding: 6px 10px;
845
+ font-size: 11px;
846
+ }
847
+
848
+ .toggleFiltersButton svg,
849
+ .toggleSortButton svg {
850
+ width: 12px;
851
+ height: 12px;
852
+ }
853
+
854
+ .buttonTextCompact {
855
+ font-size: 11px;
856
+ }
857
+
858
+ .clearFiltersButton {
859
+ padding: 4px 8px;
860
+ font-size: 10px;
861
+ }
862
+
863
+ .clearFiltersButton svg {
864
+ width: 12px;
865
+ height: 12px;
866
+ }
867
+
868
+ .filtersPanel {
869
+ padding: 10px;
870
+ }
871
+
872
+ .filterItemInline {
873
+ padding: 8px;
874
+ }
875
+
876
+ .filterLabel {
877
+ font-size: 10px;
878
+ }
879
+
880
+ .filterInput,
881
+ .filterSelect,
882
+ .operatorSelect,
883
+ .operatorInput {
884
+ font-size: 12px;
885
+ padding: 6px 8px;
886
+ }
887
+
888
+ .activeFilterTag {
889
+ font-size: 11px;
890
+ padding: 4px 8px;
891
+ }
892
+
893
+ .applyButton,
894
+ .cancelButton {
895
+ padding: 8px 12px;
896
+ font-size: 12px;
897
+ }
898
+
899
+ .sortDropdown {
900
+ padding: 8px;
901
+ }
902
+
903
+ .sortDropdownHeader {
904
+ font-size: 10px;
905
+ }
906
+
907
+ .sortItemLabel {
908
+ font-size: 12px;
909
+ max-width: 160px;
910
+ }
911
+
912
+ .sortDirectionButton {
913
+ width: 28px;
914
+ height: 28px;
915
+ }
916
+
917
+ .sortDirectionButton svg {
918
+ width: 10px;
919
+ height: 10px;
920
+ }
921
+
922
+ .paginationContainer {
923
+ padding: 6px;
924
+ }
925
+
926
+ .pageSizeLabel,
927
+ .pageSizeSuffix,
928
+ .paginationInfo {
929
+ font-size: 11px;
930
+ }
931
+
932
+ .pageSizeSelect {
933
+ padding: 6px 8px;
934
+ font-size: 11px;
935
+ }
936
+
937
+ .paginationButton {
938
+ min-width: 32px;
939
+ height: 32px;
940
+ font-size: 12px;
941
+ padding: 0 8px;
942
+ }
943
+ }
944
+
945
+ @media (max-width: 360px) {
946
+ .controlsRight {
947
+ width: 100%;
948
+ justify-content: space-between;
949
+ margin-top: 8px;
950
+ }
951
+
952
+ .toggleFiltersButton,
953
+ .toggleSortButton {
954
+ flex: 1;
955
+ min-width: 0;
956
+ justify-content: center;
957
+ }
958
+
959
+ .clearFiltersButton {
960
+ position: absolute;
961
+ top: -30px;
962
+ right: 0;
963
+ }
964
+ }
965
+
966
+ @media (max-width: 680px) {
967
+ .filtersPanel::after {
968
+ content: '';
969
+ position: fixed;
970
+ top: 0;
971
+ left: 0;
972
+ right: 0;
973
+ height: 12px;
974
+ background: linear-gradient(to bottom, rgba(0, 0, 0, 0.1), transparent);
975
+ opacity: 0.1;
976
+ pointer-events: none;
977
+ }
978
+
979
+ .filtersRow {
980
+ max-height: 60vh;
981
+ overflow-y: auto;
982
+ padding-right: 4px;
983
+ }
984
+
985
+ .filtersRow::-webkit-scrollbar {
986
+ width: 4px;
987
+ }
988
+
989
+ .filtersRow::-webkit-scrollbar-track {
990
+ background: #f1f1f1;
991
+ border-radius: 10px;
992
+ }
993
+
994
+ .filtersRow::-webkit-scrollbar-thumb {
995
+ background: #c1c1c1;
996
+ border-radius: 10px;
997
+ }
998
+ }
999
+
1000
+ @media (max-height: 480px) and (orientation: landscape) {
1001
+ .filtersPanel {
1002
+ max-height: 60vh;
1003
+ }
1004
+
1005
+ .filtersRow {
1006
+ max-height: 45vh;
1007
+ }
1008
+ }
1009
+
1010
+ .tableRow td:first-child {
1011
+ position: relative;
1012
+ padding-left: calc(var(--row-accent-gap) + 1px);
1013
+ }
1014
+
1015
+ .tableRow td:first-child::before {
1016
+ content: '';
1017
+ position: absolute;
1018
+ left: 0px;
1019
+ top: 0px;
1020
+ bottom: 0px;
1021
+ width: var(--row-accent-width);
1022
+ border-radius: var(--row-accent-radius);
1023
+ background: var(--row-accent, transparent);
1024
+ transform-origin: center;
1025
+ transform: scaleY(0.75);
1026
+ opacity: 0;
1027
+ transition:
1028
+ opacity 140ms ease,
1029
+ transform 140ms ease,
1030
+ box-shadow 140ms ease;
1031
+ box-shadow: 0 2px 6px rgba(2, 6, 23, 0.06);
1032
+ pointer-events: none;
1033
+ }
1034
+
1035
+ .tableRow:hover td:first-child::before {
1036
+ opacity: 1;
1037
+ transform: scaleY(1);
1038
+ }
1039
+
1040
+ .tableRow.activeRow td:first-child::before,
1041
+ .tableRow:focus-within td:first-child::before {
1042
+ opacity: 1;
1043
+ transform: scaleY(1);
1044
+ }
1045
+
1046
+ .tableRow td:first-child::before[style*='transparent'] {
1047
+ opacity: 0;
1048
+ }
1049
+
1050
+ .container.cardRows .table tbody tr td:first-child::before {
1051
+ display: none;
1052
+ }
1053
+
1054
+ @media (max-width: 480px) {
1055
+ .tableControls {
1056
+ justify-content: center !important;
1057
+ }
1058
+
1059
+ .controlsRight {
1060
+ justify-content: center !important;
1061
+ width: auto;
1062
+ gap: 8px;
1063
+ }
1064
+
1065
+ .toggleFiltersButton,
1066
+ .toggleSortButton {
1067
+ flex: 0 0 auto !important;
1068
+ min-width: 0;
1069
+ margin: 0 6px;
1070
+ }
1071
+
1072
+ .clearFiltersButton {
1073
+ position: static;
1074
+ top: auto;
1075
+ right: auto;
1076
+ margin-left: 6px;
1077
+ }
1078
+ }
1079
+
1080
+ @media (max-width: 360px) {
1081
+ .tableControls {
1082
+ justify-content: center !important;
1083
+ padding-left: 6px;
1084
+ padding-right: 6px;
1085
+ }
1086
+
1087
+ .controlsRight {
1088
+ width: 100%;
1089
+ justify-content: center !important;
1090
+ gap: 6px;
1091
+ }
1092
+
1093
+ .toggleFiltersButton,
1094
+ .toggleSortButton {
1095
+ flex: 0 0 auto !important;
1096
+ padding: 6px 10px;
1097
+ font-size: 11px;
1098
+ }
1099
+
1100
+ .clearFiltersButton {
1101
+ position: static;
1102
+ margin-top: 6px;
1103
+ }
1104
+ }
1105
+
1106
+ .pageSizeSelect {
1107
+ background-color: var(--color-content-background);
1108
+ color: var(--color-text);
1109
+ border: 1px solid var(--color-border);
1110
+ padding: 6px 10px;
1111
+ border-radius: 6px;
1112
+ appearance: none;
1113
+ -webkit-appearance: none;
1114
+ -moz-appearance: none;
1115
+ background-repeat: no-repeat;
1116
+ background-position: right 8px center;
1117
+ background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6'><path d='M0 0l5 6 5-6' fill='none' stroke='%23000' stroke-width='1.2'/></svg>");
1118
+ }
1119
+
1120
+ .pageSizeSelect option {
1121
+ background-color: var(--color-content-background);
1122
+ color: var(--color-text);
1123
+ }
1124
+
1125
+ .container {
1126
+ --controls-text-size: 13px;
1127
+ }
1128
+ .paginationButton {
1129
+ transition:
1130
+ background 0.14s,
1131
+ transform 0.12s,
1132
+ box-shadow 0.12s;
1133
+ }
1134
+
1135
+ .paginationButton:hover:not(.disabledButton) {
1136
+ transform: translateY(-1px);
1137
+ box-shadow: 0 10px 22px rgba(2, 6, 23, 0.12);
1138
+ }
1139
+
1140
+ .table thead,
1141
+ .headerCell {
1142
+ font-weight: 400 !important;
1143
+ }
1144
+
1145
+ .table tbody td {
1146
+ font-weight: 400 !important;
1147
+ }
1148
+
1149
+ .tableRow,
1150
+ .tableRow td,
1151
+ .headerCell,
1152
+ .pageSizeLabel,
1153
+ .pageSizeSuffix,
1154
+ .paginationInfo {
1155
+ font-weight: 400 !important;
1156
+ }
1157
+
1158
+ .toggleSortButton,
1159
+ .toggleFiltersButton,
1160
+ .buttonTextCompact {
1161
+ font-size: var(--controls-text-size);
1162
+ font-weight: 400;
1163
+ }
1164
+
1165
+ .sortDropdownHeader,
1166
+ .sortItemLabel,
1167
+ .sortDropdownHeader span {
1168
+ font-size: var(--controls-text-size);
1169
+ font-weight: 400;
1170
+ color: #374151;
1171
+ }
1172
+
1173
+ .sortItemLabel {
1174
+ white-space: nowrap;
1175
+ overflow: hidden;
1176
+ text-overflow: ellipsis;
1177
+ max-width: 220px;
1178
+ display: inline-block;
1179
+ vertical-align: middle;
1180
+ }
1181
+
1182
+ .closeButton {
1183
+ font-weight: 400;
1184
+ }
1185
+
1186
+ .filterLabel,
1187
+ .buttonTextCompact,
1188
+ .countCompact,
1189
+ .resultCountCompact,
1190
+ .activeLabelCompact {
1191
+ font-size: var(--controls-text-size);
1192
+ font-weight: 400;
1193
+ }
1194
+
1195
+ .filtersPanel,
1196
+ .filtersRow,
1197
+ .filterItemInline,
1198
+ .filterInput,
1199
+ .filterSelect,
1200
+ .operatorSelect,
1201
+ .operatorInput,
1202
+ .activeFilterTag {
1203
+ font-size: var(--controls-text-size);
1204
+ }
1205
+
1206
+ .activeFilterTag {
1207
+ font-weight: 400;
1208
+ }
1209
+
1210
+ .applyButton,
1211
+ .cancelButton {
1212
+ font-size: var(--controls-text-size);
1213
+ font-weight: 400;
1214
+ }
1215
+
1216
+ .uppercaseSmall,
1217
+ .sortDropdownHeader,
1218
+ .operatorFilterContainer,
1219
+ .rangeSeparator,
1220
+ .pageSizeLabel {
1221
+ font-weight: 400 !important;
1222
+ }
1223
+
1224
+ @media (max-width: 480px) {
1225
+ .toggleFiltersButton,
1226
+ .toggleSortButton,
1227
+ .buttonTextCompact,
1228
+ .filterLabel,
1229
+ .sortItemLabel {
1230
+ font-size: 12px;
1231
+ }
1232
+
1233
+ .headerCell {
1234
+ max-width: 140px;
1235
+ }
1236
+
1237
+ .sortItemLabel {
1238
+ max-width: 120px;
1239
+ }
1240
+ }
1241
+
1242
+ .sortDropdownItem {
1243
+ min-width: 0;
1244
+ font-size: var(--small-font);
1245
+ font-weight: 400;
1246
+ }
1247
+
1248
+ .sortDropdownHeader,
1249
+ .sortItemLabel,
1250
+ .sortDropdownItem .sortItemLabel {
1251
+ font-size: var(--small-font);
1252
+ font-weight: 400;
1253
+ }
1254
+
1255
+ .columnSorterLabel {
1256
+ display: block;
1257
+ flex: 1 1 0;
1258
+ min-width: 0;
1259
+ white-space: nowrap;
1260
+ overflow: hidden;
1261
+ text-overflow: ellipsis;
1262
+ max-width: 180px;
1263
+ line-height: 1;
1264
+ font-size: var(--xsmall-font);
1265
+ font-weight: 600;
1266
+ text-transform: none;
1267
+ }
1268
+
1269
+ .uppercaseSmall {
1270
+ font-size: var(--xsmall-font);
1271
+ font-weight: 400;
1272
+ letter-spacing: 0.4px;
1273
+ text-transform: uppercase;
1274
+ line-height: 1;
1275
+ }
1276
+
1277
+ @media (max-width: 480px) {
1278
+ .columnSorterLabel {
1279
+ max-width: 120px;
1280
+ }
1281
+ .sortDropdownHeader,
1282
+ .sortItemLabel,
1283
+ .uppercaseSmall {
1284
+ font-size: var(--xsmall-font);
1285
+ font-weight: 400;
1286
+ }
1287
+ }