@tomny-dev/uzi 0.5.0 → 0.6.0-pr.60.173.1.802e4f7

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 (279) hide show
  1. package/README.md +5 -2
  2. package/dist/components/card/Card.d.ts +7 -5
  3. package/dist/components/card/Card.d.ts.map +1 -1
  4. package/dist/components/page-container/PageContainer.d.ts +2 -1
  5. package/dist/components/page-container/PageContainer.d.ts.map +1 -1
  6. package/dist/components/surface/Surface.d.ts +16 -0
  7. package/dist/components/surface/Surface.d.ts.map +1 -0
  8. package/dist/components/toolbar/Toolbar.d.ts +13 -0
  9. package/dist/components/toolbar/Toolbar.d.ts.map +1 -0
  10. package/dist/index.cjs +36 -31
  11. package/dist/index.d.ts +4 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +34 -32
  14. package/dist/index10.cjs.map +1 -1
  15. package/dist/index10.js +19 -15
  16. package/dist/index10.js.map +1 -1
  17. package/dist/index11.cjs +21 -18
  18. package/dist/index11.cjs.map +1 -1
  19. package/dist/index11.js +8 -15
  20. package/dist/index11.js.map +1 -1
  21. package/dist/index12.cjs +7 -14
  22. package/dist/index12.cjs.map +1 -1
  23. package/dist/index12.js +15 -37
  24. package/dist/index12.js.map +1 -1
  25. package/dist/index13.cjs +18 -52
  26. package/dist/index13.cjs.map +1 -1
  27. package/dist/index13.js +15 -77
  28. package/dist/index13.js.map +1 -1
  29. package/dist/index14.cjs +15 -80
  30. package/dist/index14.cjs.map +1 -1
  31. package/dist/index14.js +37 -13
  32. package/dist/index14.js.map +1 -1
  33. package/dist/index15.cjs +52 -18
  34. package/dist/index15.cjs.map +1 -1
  35. package/dist/index15.js +77 -9
  36. package/dist/index15.js.map +1 -1
  37. package/dist/index16.cjs +79 -8
  38. package/dist/index16.cjs.map +1 -1
  39. package/dist/index16.js +13 -41
  40. package/dist/index16.js.map +1 -1
  41. package/dist/index17.cjs +18 -60
  42. package/dist/index17.cjs.map +1 -1
  43. package/dist/index17.js +9 -428
  44. package/dist/index17.js.map +1 -1
  45. package/dist/index18.cjs +8 -430
  46. package/dist/index18.cjs.map +1 -1
  47. package/dist/index18.js +42 -4
  48. package/dist/index18.js.map +1 -1
  49. package/dist/index19.cjs +61 -5
  50. package/dist/index19.cjs.map +1 -1
  51. package/dist/index19.js +430 -13
  52. package/dist/index19.js.map +1 -1
  53. package/dist/index20.cjs +430 -12
  54. package/dist/index20.cjs.map +1 -1
  55. package/dist/index20.js +4 -4
  56. package/dist/index20.js.map +1 -1
  57. package/dist/index21.cjs +5 -5
  58. package/dist/index21.cjs.map +1 -1
  59. package/dist/index21.js +12 -9
  60. package/dist/index21.js.map +1 -1
  61. package/dist/index22.cjs +12 -9
  62. package/dist/index22.cjs.map +1 -1
  63. package/dist/index22.js +4 -4
  64. package/dist/index22.js.map +1 -1
  65. package/dist/index23.cjs +5 -5
  66. package/dist/index23.cjs.map +1 -1
  67. package/dist/index23.js +9 -12
  68. package/dist/index23.js.map +1 -1
  69. package/dist/index24.cjs +9 -12
  70. package/dist/index24.cjs.map +1 -1
  71. package/dist/index24.js +4 -38
  72. package/dist/index24.js.map +1 -1
  73. package/dist/index25.cjs +5 -55
  74. package/dist/index25.cjs.map +1 -1
  75. package/dist/index25.js +11 -116
  76. package/dist/index25.js.map +1 -1
  77. package/dist/index26.cjs +10 -116
  78. package/dist/index26.cjs.map +1 -1
  79. package/dist/index26.js +31 -19
  80. package/dist/index26.js.map +1 -1
  81. package/dist/index27.cjs +42 -24
  82. package/dist/index27.cjs.map +1 -1
  83. package/dist/index27.js +106 -93
  84. package/dist/index27.js.map +1 -1
  85. package/dist/index28.cjs +106 -93
  86. package/dist/index28.cjs.map +1 -1
  87. package/dist/index28.js +26 -23
  88. package/dist/index28.js.map +1 -1
  89. package/dist/index29.cjs +37 -25
  90. package/dist/index29.cjs.map +1 -1
  91. package/dist/index29.js +107 -26
  92. package/dist/index29.js.map +1 -1
  93. package/dist/index30.cjs +110 -37
  94. package/dist/index30.cjs.map +1 -1
  95. package/dist/index30.js +21 -113
  96. package/dist/index30.js.map +1 -1
  97. package/dist/index31.cjs +19 -125
  98. package/dist/index31.cjs.map +1 -1
  99. package/dist/index31.js +26 -17
  100. package/dist/index31.js.map +1 -1
  101. package/dist/index32.cjs +37 -20
  102. package/dist/index32.cjs.map +1 -1
  103. package/dist/index32.js +108 -104
  104. package/dist/index32.js.map +1 -1
  105. package/dist/index33.cjs +122 -103
  106. package/dist/index33.cjs.map +1 -1
  107. package/dist/index33.js +17 -4
  108. package/dist/index33.js.map +1 -1
  109. package/dist/index34.cjs +20 -5
  110. package/dist/index34.cjs.map +1 -1
  111. package/dist/index34.js +106 -58
  112. package/dist/index34.js.map +1 -1
  113. package/dist/index35.cjs +106 -57
  114. package/dist/index35.cjs.map +1 -1
  115. package/dist/index35.js +4 -22
  116. package/dist/index35.js.map +1 -1
  117. package/dist/index36.cjs +5 -31
  118. package/dist/index36.cjs.map +1 -1
  119. package/dist/index36.js +55 -44
  120. package/dist/index36.js.map +1 -1
  121. package/dist/index37.cjs +55 -44
  122. package/dist/index37.cjs.map +1 -1
  123. package/dist/index37.js +21 -31
  124. package/dist/index37.js.map +1 -1
  125. package/dist/index38.cjs +30 -45
  126. package/dist/index38.cjs.map +1 -1
  127. package/dist/index38.js +46 -141
  128. package/dist/index38.js.map +1 -1
  129. package/dist/index39.cjs +46 -141
  130. package/dist/index39.cjs.map +1 -1
  131. package/dist/index39.js +31 -41
  132. package/dist/index39.js.map +1 -1
  133. package/dist/index40.cjs +45 -60
  134. package/dist/index40.cjs.map +1 -1
  135. package/dist/index40.js +139 -163
  136. package/dist/index40.js.map +1 -1
  137. package/dist/index41.cjs +137 -161
  138. package/dist/index41.cjs.map +1 -1
  139. package/dist/index41.js +41 -12
  140. package/dist/index41.js.map +1 -1
  141. package/dist/index42.cjs +60 -14
  142. package/dist/index42.cjs.map +1 -1
  143. package/dist/index42.js +167 -15
  144. package/dist/index42.js.map +1 -1
  145. package/dist/index43.cjs +166 -14
  146. package/dist/index43.cjs.map +1 -1
  147. package/dist/index43.js +12 -15
  148. package/dist/index43.js.map +1 -1
  149. package/dist/index44.cjs +14 -21
  150. package/dist/index44.cjs.map +1 -1
  151. package/dist/index44.js +15 -28
  152. package/dist/index44.js.map +1 -1
  153. package/dist/index45.cjs +14 -27
  154. package/dist/index45.cjs.map +1 -1
  155. package/dist/index45.js +10 -8
  156. package/dist/index45.js.map +1 -1
  157. package/dist/index46.cjs +11 -8
  158. package/dist/index46.cjs.map +1 -1
  159. package/dist/index46.js +22 -15
  160. package/dist/index46.js.map +1 -1
  161. package/dist/index47.cjs +22 -15
  162. package/dist/index47.cjs.map +1 -1
  163. package/dist/index47.js +9 -13
  164. package/dist/index47.js.map +1 -1
  165. package/dist/index48.cjs +10 -16
  166. package/dist/index48.cjs.map +1 -1
  167. package/dist/index48.js +18 -25
  168. package/dist/index48.js.map +1 -1
  169. package/dist/index49.cjs +18 -25
  170. package/dist/index49.cjs.map +1 -1
  171. package/dist/index49.js +17 -14
  172. package/dist/index49.js.map +1 -1
  173. package/dist/index50.cjs +24 -17
  174. package/dist/index50.cjs.map +1 -1
  175. package/dist/index50.js +28 -28
  176. package/dist/index50.js.map +1 -1
  177. package/dist/index51.cjs +27 -28
  178. package/dist/index51.cjs.map +1 -1
  179. package/dist/index51.js +14 -17
  180. package/dist/index51.js.map +1 -1
  181. package/dist/index52.cjs +17 -22
  182. package/dist/index52.cjs.map +1 -1
  183. package/dist/index52.js +23 -23
  184. package/dist/index52.js.map +1 -1
  185. package/dist/index53.cjs +23 -23
  186. package/dist/index53.cjs.map +1 -1
  187. package/dist/index53.js +17 -10
  188. package/dist/index53.js.map +1 -1
  189. package/dist/index54.cjs +22 -11
  190. package/dist/index54.cjs.map +1 -1
  191. package/dist/index54.js +28 -14
  192. package/dist/index54.js.map +1 -1
  193. package/dist/index55.cjs +28 -13
  194. package/dist/index55.cjs.map +1 -1
  195. package/dist/index55.js +17 -11
  196. package/dist/index55.js.map +1 -1
  197. package/dist/index56.cjs +23 -13
  198. package/dist/index56.cjs.map +1 -1
  199. package/dist/index56.js +24 -16
  200. package/dist/index56.js.map +1 -1
  201. package/dist/index57.cjs +24 -15
  202. package/dist/index57.cjs.map +1 -1
  203. package/dist/index57.js +10 -9
  204. package/dist/index57.js.map +1 -1
  205. package/dist/index58.cjs +11 -12
  206. package/dist/index58.cjs.map +1 -1
  207. package/dist/index58.js +12 -87
  208. package/dist/index58.js.map +1 -1
  209. package/dist/index59.cjs +12 -89
  210. package/dist/index59.cjs.map +1 -1
  211. package/dist/index59.js +11 -21
  212. package/dist/index59.js.map +1 -1
  213. package/dist/index60.cjs +13 -30
  214. package/dist/index60.cjs.map +1 -1
  215. package/dist/index60.js +17 -43
  216. package/dist/index60.js.map +1 -1
  217. package/dist/index61.cjs +16 -44
  218. package/dist/index61.cjs.map +1 -1
  219. package/dist/index61.js +9 -57
  220. package/dist/index61.js.map +1 -1
  221. package/dist/index62.cjs +11 -83
  222. package/dist/index62.cjs.map +1 -1
  223. package/dist/index62.js +83 -426
  224. package/dist/index62.js.map +1 -1
  225. package/dist/index63.cjs +82 -427
  226. package/dist/index63.cjs.map +1 -1
  227. package/dist/index63.js +21 -59
  228. package/dist/index63.js.map +1 -1
  229. package/dist/index64.cjs +30 -87
  230. package/dist/index64.cjs.map +1 -1
  231. package/dist/index64.js +44 -240
  232. package/dist/index64.js.map +1 -1
  233. package/dist/index65.cjs +43 -239
  234. package/dist/index65.cjs.map +1 -1
  235. package/dist/index65.js +57 -43
  236. package/dist/index65.js.map +1 -1
  237. package/dist/index66.cjs +84 -63
  238. package/dist/index66.cjs.map +1 -1
  239. package/dist/index66.js +426 -73
  240. package/dist/index66.js.map +1 -1
  241. package/dist/index67.cjs +426 -71
  242. package/dist/index67.cjs.map +1 -1
  243. package/dist/index67.js +59 -21
  244. package/dist/index67.js.map +1 -1
  245. package/dist/index68.cjs +87 -30
  246. package/dist/index68.cjs.map +1 -1
  247. package/dist/index68.js +233 -88
  248. package/dist/index68.js.map +1 -1
  249. package/dist/index69.cjs +232 -89
  250. package/dist/index69.cjs.map +1 -1
  251. package/dist/index69.js +40 -16
  252. package/dist/index69.js.map +1 -1
  253. package/dist/index70.cjs +56 -20
  254. package/dist/index70.cjs.map +1 -1
  255. package/dist/index70.js +72 -145
  256. package/dist/index70.js.map +1 -1
  257. package/dist/index71.cjs +72 -145
  258. package/dist/index71.cjs.map +1 -1
  259. package/dist/index71.js +25 -0
  260. package/dist/index71.js.map +1 -0
  261. package/dist/index72.cjs +34 -0
  262. package/dist/index72.cjs.map +1 -0
  263. package/dist/index72.js +101 -0
  264. package/dist/index72.js.map +1 -0
  265. package/dist/index73.cjs +105 -0
  266. package/dist/index73.cjs.map +1 -0
  267. package/dist/index73.js +23 -0
  268. package/dist/index73.js.map +1 -0
  269. package/dist/index74.cjs +31 -0
  270. package/dist/index74.cjs.map +1 -0
  271. package/dist/index74.js +159 -0
  272. package/dist/index74.js.map +1 -0
  273. package/dist/index75.cjs +161 -0
  274. package/dist/index75.cjs.map +1 -0
  275. package/dist/index8.js.map +1 -1
  276. package/dist/index9.cjs.map +1 -1
  277. package/dist/index9.js.map +1 -1
  278. package/dist/style.css +216 -45
  279. package/package.json +2 -2
package/dist/index67.js CHANGED
@@ -1,25 +1,63 @@
1
- //#region src/components/error-page/error-page.module.css
2
- var layout = "uzi-error-page-module__layout__OVDE8";
3
- var card = "uzi-error-page-module__card__2veSo";
4
- var icon = "uzi-error-page-module__icon__vJy8E";
5
- var iconSvg = "uzi-error-page-module__iconSvg__h4u4V";
6
- var statusCode = "uzi-error-page-module__statusCode__Ub40l";
7
- var content = "uzi-error-page-module__content__b2dAY";
8
- var title = "uzi-error-page-module__title__8iioy";
9
- var subtitle = "uzi-error-page-module__subtitle__NVk-v";
10
- var action = "uzi-error-page-module__action__iX5fQ";
11
- var error_page_module_default = {
12
- layout,
13
- card,
14
- icon,
15
- iconSvg,
16
- statusCode,
17
- content,
18
- title,
19
- subtitle,
20
- action
1
+ //#region src/components/data-table/data-table.module.css
2
+ var wrapper = "uzi-data-table-module__wrapper__7521u";
3
+ var tableContainer = "uzi-data-table-module__tableContainer__BJcbK";
4
+ var table = "uzi-data-table-module__table__Mv5vN";
5
+ var thead = "uzi-data-table-module__thead__dWIBv";
6
+ var headerCell = "uzi-data-table-module__headerCell__kwwWs";
7
+ var headerCellFixed = "uzi-data-table-module__headerCellFixed__8WRi5";
8
+ var alignLeft = "uzi-data-table-module__alignLeft__Kwz-k";
9
+ var alignCenter = "uzi-data-table-module__alignCenter__BxT33";
10
+ var alignRight = "uzi-data-table-module__alignRight__B3fd1";
11
+ var sortableHeader = "uzi-data-table-module__sortableHeader__aAEjv";
12
+ var clickableHeader = "uzi-data-table-module__clickableHeader__8F9R3";
13
+ var headerLabel = "uzi-data-table-module__headerLabel__bsfii";
14
+ var sortIcon = "uzi-data-table-module__sortIcon__nAsRD";
15
+ var tbody = "uzi-data-table-module__tbody__yWSPd";
16
+ var row = "uzi-data-table-module__row__im568";
17
+ var rowSelected = "uzi-data-table-module__rowSelected__U91El";
18
+ var cell = "uzi-data-table-module__cell__I2qYk";
19
+ var checkbox = "uzi-data-table-module__checkbox__XHo0c";
20
+ var loadingCell = "uzi-data-table-module__loadingCell__YOsVj";
21
+ var loadingRow = "uzi-data-table-module__loadingRow__TONNo";
22
+ var skeletonBar = "uzi-data-table-module__skeletonBar__JTU6c";
23
+ var shimmer = "uzi-data-table-module__shimmer__30BeV";
24
+ var emptyCell = "uzi-data-table-module__emptyCell__CNH4t";
25
+ var rowActions = "uzi-data-table-module__rowActions__NV6Ag";
26
+ var actionBtn = "uzi-data-table-module__actionBtn__78gdR";
27
+ var pagination = "uzi-data-table-module__pagination__qOgpw";
28
+ var paginationButtons = "uzi-data-table-module__paginationButtons__v64jr";
29
+ var pageBtn = "uzi-data-table-module__pageBtn__gdLj2";
30
+ var data_table_module_default = {
31
+ wrapper,
32
+ tableContainer,
33
+ table,
34
+ thead,
35
+ headerCell,
36
+ headerCellFixed,
37
+ alignLeft,
38
+ alignCenter,
39
+ alignRight,
40
+ sortableHeader,
41
+ clickableHeader,
42
+ headerLabel,
43
+ sortIcon,
44
+ tbody,
45
+ row,
46
+ rowSelected,
47
+ cell,
48
+ checkbox,
49
+ loadingCell,
50
+ loadingRow,
51
+ skeletonBar,
52
+ shimmer,
53
+ emptyCell,
54
+ rowActions,
55
+ actionBtn,
56
+ pagination,
57
+ paginationButtons,
58
+ pageBtn
21
59
  };
22
60
  //#endregion
23
- export { action, card, content, error_page_module_default as default, icon, iconSvg, layout, statusCode, subtitle, title };
61
+ export { actionBtn, alignCenter, alignLeft, alignRight, cell, checkbox, clickableHeader, data_table_module_default as default, emptyCell, headerCell, headerCellFixed, headerLabel, loadingCell, loadingRow, pageBtn, pagination, paginationButtons, row, rowActions, rowSelected, shimmer, skeletonBar, sortIcon, sortableHeader, table, tableContainer, tbody, thead, wrapper };
24
62
 
25
63
  //# sourceMappingURL=index67.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index67.js","names":[],"sources":["../src/components/error-page/error-page.module.css"],"sourcesContent":[".layout {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n min-height: 100dvh;\n padding: 24px;\n background: var(--background);\n}\n\n.card {\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1.5rem;\n max-width: 40rem;\n padding: 3rem 2rem;\n}\n\n.icon {\n color: var(--muted-foreground);\n}\n\n.iconSvg {\n width: 4rem;\n height: 4rem;\n stroke-width: 1.5;\n}\n\n.statusCode {\n font-size: 6rem;\n font-weight: 700;\n line-height: 1;\n color: var(--muted-foreground);\n letter-spacing: -0.04em;\n}\n\n.content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1rem;\n}\n\n.title {\n margin: 0;\n font-size: 1.5rem;\n font-weight: 600;\n color: var(--foreground);\n line-height: 1.3;\n}\n\n.subtitle {\n margin: 0;\n font-size: 1rem;\n color: var(--muted-foreground);\n line-height: 1.6;\n max-width: 32rem;\n}\n\n.action {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: 0.75rem;\n margin-top: 0.5rem;\n}\n\n@media (max-width: 48rem) {\n .statusCode {\n font-size: 4rem;\n }\n\n .title {\n font-size: 1.25rem;\n }\n\n .card {\n padding: 2rem 1.5rem;\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"index67.js","names":[],"sources":["../src/components/data-table/data-table.module.css"],"sourcesContent":[".wrapper {\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.tableContainer {\n width: 100%;\n overflow-x: auto;\n}\n\n.table {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.875rem;\n text-align: left;\n color: var(--foreground);\n}\n\n.thead {\n border-bottom: 2px solid var(--border);\n}\n\n.headerCell {\n padding: 0.75rem 1rem;\n font-weight: 600;\n font-size: 0.8rem;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--muted-foreground);\n white-space: nowrap;\n vertical-align: bottom;\n border-bottom: 2px solid var(--border);\n}\n\n.headerCellFixed {\n white-space: nowrap;\n}\n\n.alignLeft {\n text-align: left;\n}\n\n.alignCenter {\n text-align: center;\n}\n\n.alignRight {\n text-align: right;\n}\n\n.sortableHeader {\n display: inline-flex;\n align-items: center;\n gap: 0.375rem;\n background: none;\n border: none;\n padding: 0;\n font: inherit;\n color: inherit;\n cursor: pointer;\n}\n\n.clickableHeader {\n cursor: pointer;\n}\n\n.clickableHeader:hover {\n color: var(--foreground);\n}\n\n.clickableHeader:focus-visible {\n outline: var(--focus-ring);\n outline-offset: var(--focus-ring-offset);\n}\n\n.headerLabel {\n font: inherit;\n}\n\n.sortIcon {\n font-size: 0.7rem;\n opacity: 0.4;\n user-select: none;\n}\n\n.tbody {\n border-top: 1px solid var(--border);\n}\n\n.row {\n border-bottom: 1px solid var(--border);\n transition: background-color 0.12s ease;\n}\n\n.row:hover {\n background-color: var(--muted);\n}\n\n.rowSelected {\n background-color: color-mix(in srgb, var(--primary) 10%, transparent);\n}\n\n.cell {\n padding: 0.75rem 1rem;\n vertical-align: middle;\n white-space: nowrap;\n}\n\n.checkbox {\n width: 1rem;\n height: 1rem;\n accent-color: var(--primary);\n cursor: pointer;\n border-radius: 4px;\n}\n\n.loadingCell {\n padding: 2rem 1rem;\n text-align: center;\n}\n\n.loadingRow {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n margin-bottom: 0.75rem;\n opacity: 0.6;\n}\n\n.skeletonBar {\n height: 0.75rem;\n border-radius: 4px;\n background: linear-gradient(90deg, var(--muted) 25%, var(--secondary) 50%, var(--muted) 75%);\n background-size: 200% 100%;\n animation: shimmer 1.5s infinite;\n}\n\n@keyframes shimmer {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n}\n\n.emptyCell {\n padding: 2rem 1rem;\n text-align: center;\n color: var(--muted-foreground);\n font-style: italic;\n}\n\n.rowActions {\n display: inline-flex;\n gap: 0.5rem;\n}\n\n.actionBtn {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n background: none;\n border: none;\n color: var(--muted-foreground);\n cursor: pointer;\n font-size: 0.8rem;\n padding: 0.25rem 0.5rem;\n border-radius: 4px;\n transition: color 0.12s, background-color 0.12s;\n}\n\n.actionBtn:hover {\n color: var(--foreground);\n background-color: var(--muted);\n}\n\n.actionBtn:focus-visible {\n outline: var(--focus-ring);\n outline-offset: var(--focus-ring-offset);\n}\n\n.pagination {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n border-top: 1px solid var(--border);\n font-size: 0.8rem;\n color: var(--muted-foreground);\n}\n\n.paginationButtons {\n display: inline-flex;\n gap: 0.25rem;\n}\n\n.pageBtn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n border: 1px solid var(--border);\n border-radius: 6px;\n background: var(--background);\n color: var(--foreground);\n cursor: pointer;\n font-size: 0.85rem;\n transition: background-color 0.12s, border-color 0.12s;\n}\n\n.pageBtn:hover:not(:disabled) {\n background-color: var(--muted);\n border-color: var(--accent);\n}\n\n.pageBtn:focus-visible {\n outline: var(--focus-ring);\n outline-offset: var(--focus-ring-offset);\n}\n\n.pageBtn:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n"],"mappings":""}
package/dist/index68.cjs CHANGED
@@ -1,34 +1,91 @@
1
- //#region src/components/error-page/error-page.module.css
2
- var layout = "uzi-error-page-module__layout__OVDE8";
3
- var card = "uzi-error-page-module__card__2veSo";
4
- var icon = "uzi-error-page-module__icon__vJy8E";
5
- var iconSvg = "uzi-error-page-module__iconSvg__h4u4V";
6
- var statusCode = "uzi-error-page-module__statusCode__Ub40l";
7
- var content = "uzi-error-page-module__content__b2dAY";
8
- var title = "uzi-error-page-module__title__8iioy";
9
- var subtitle = "uzi-error-page-module__subtitle__NVk-v";
10
- var action = "uzi-error-page-module__action__iX5fQ";
11
- var error_page_module_default = {
12
- layout,
13
- card,
14
- icon,
15
- iconSvg,
16
- statusCode,
17
- content,
18
- title,
19
- subtitle,
20
- action
1
+ //#region src/components/data-table/data-table.module.css
2
+ var wrapper = "uzi-data-table-module__wrapper__7521u";
3
+ var tableContainer = "uzi-data-table-module__tableContainer__BJcbK";
4
+ var table = "uzi-data-table-module__table__Mv5vN";
5
+ var thead = "uzi-data-table-module__thead__dWIBv";
6
+ var headerCell = "uzi-data-table-module__headerCell__kwwWs";
7
+ var headerCellFixed = "uzi-data-table-module__headerCellFixed__8WRi5";
8
+ var alignLeft = "uzi-data-table-module__alignLeft__Kwz-k";
9
+ var alignCenter = "uzi-data-table-module__alignCenter__BxT33";
10
+ var alignRight = "uzi-data-table-module__alignRight__B3fd1";
11
+ var sortableHeader = "uzi-data-table-module__sortableHeader__aAEjv";
12
+ var clickableHeader = "uzi-data-table-module__clickableHeader__8F9R3";
13
+ var headerLabel = "uzi-data-table-module__headerLabel__bsfii";
14
+ var sortIcon = "uzi-data-table-module__sortIcon__nAsRD";
15
+ var tbody = "uzi-data-table-module__tbody__yWSPd";
16
+ var row = "uzi-data-table-module__row__im568";
17
+ var rowSelected = "uzi-data-table-module__rowSelected__U91El";
18
+ var cell = "uzi-data-table-module__cell__I2qYk";
19
+ var checkbox = "uzi-data-table-module__checkbox__XHo0c";
20
+ var loadingCell = "uzi-data-table-module__loadingCell__YOsVj";
21
+ var loadingRow = "uzi-data-table-module__loadingRow__TONNo";
22
+ var skeletonBar = "uzi-data-table-module__skeletonBar__JTU6c";
23
+ var shimmer = "uzi-data-table-module__shimmer__30BeV";
24
+ var emptyCell = "uzi-data-table-module__emptyCell__CNH4t";
25
+ var rowActions = "uzi-data-table-module__rowActions__NV6Ag";
26
+ var actionBtn = "uzi-data-table-module__actionBtn__78gdR";
27
+ var pagination = "uzi-data-table-module__pagination__qOgpw";
28
+ var paginationButtons = "uzi-data-table-module__paginationButtons__v64jr";
29
+ var pageBtn = "uzi-data-table-module__pageBtn__gdLj2";
30
+ var data_table_module_default = {
31
+ wrapper,
32
+ tableContainer,
33
+ table,
34
+ thead,
35
+ headerCell,
36
+ headerCellFixed,
37
+ alignLeft,
38
+ alignCenter,
39
+ alignRight,
40
+ sortableHeader,
41
+ clickableHeader,
42
+ headerLabel,
43
+ sortIcon,
44
+ tbody,
45
+ row,
46
+ rowSelected,
47
+ cell,
48
+ checkbox,
49
+ loadingCell,
50
+ loadingRow,
51
+ skeletonBar,
52
+ shimmer,
53
+ emptyCell,
54
+ rowActions,
55
+ actionBtn,
56
+ pagination,
57
+ paginationButtons,
58
+ pageBtn
21
59
  };
22
60
  //#endregion
23
- exports.action = action;
24
- exports.card = card;
25
- exports.content = content;
26
- exports.default = error_page_module_default;
27
- exports.icon = icon;
28
- exports.iconSvg = iconSvg;
29
- exports.layout = layout;
30
- exports.statusCode = statusCode;
31
- exports.subtitle = subtitle;
32
- exports.title = title;
61
+ exports.actionBtn = actionBtn;
62
+ exports.alignCenter = alignCenter;
63
+ exports.alignLeft = alignLeft;
64
+ exports.alignRight = alignRight;
65
+ exports.cell = cell;
66
+ exports.checkbox = checkbox;
67
+ exports.clickableHeader = clickableHeader;
68
+ exports.default = data_table_module_default;
69
+ exports.emptyCell = emptyCell;
70
+ exports.headerCell = headerCell;
71
+ exports.headerCellFixed = headerCellFixed;
72
+ exports.headerLabel = headerLabel;
73
+ exports.loadingCell = loadingCell;
74
+ exports.loadingRow = loadingRow;
75
+ exports.pageBtn = pageBtn;
76
+ exports.pagination = pagination;
77
+ exports.paginationButtons = paginationButtons;
78
+ exports.row = row;
79
+ exports.rowActions = rowActions;
80
+ exports.rowSelected = rowSelected;
81
+ exports.shimmer = shimmer;
82
+ exports.skeletonBar = skeletonBar;
83
+ exports.sortIcon = sortIcon;
84
+ exports.sortableHeader = sortableHeader;
85
+ exports.table = table;
86
+ exports.tableContainer = tableContainer;
87
+ exports.tbody = tbody;
88
+ exports.thead = thead;
89
+ exports.wrapper = wrapper;
33
90
 
34
91
  //# sourceMappingURL=index68.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index68.cjs","names":[],"sources":["../src/components/error-page/error-page.module.css"],"sourcesContent":[".layout {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n min-height: 100dvh;\n padding: 24px;\n background: var(--background);\n}\n\n.card {\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1.5rem;\n max-width: 40rem;\n padding: 3rem 2rem;\n}\n\n.icon {\n color: var(--muted-foreground);\n}\n\n.iconSvg {\n width: 4rem;\n height: 4rem;\n stroke-width: 1.5;\n}\n\n.statusCode {\n font-size: 6rem;\n font-weight: 700;\n line-height: 1;\n color: var(--muted-foreground);\n letter-spacing: -0.04em;\n}\n\n.content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1rem;\n}\n\n.title {\n margin: 0;\n font-size: 1.5rem;\n font-weight: 600;\n color: var(--foreground);\n line-height: 1.3;\n}\n\n.subtitle {\n margin: 0;\n font-size: 1rem;\n color: var(--muted-foreground);\n line-height: 1.6;\n max-width: 32rem;\n}\n\n.action {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: 0.75rem;\n margin-top: 0.5rem;\n}\n\n@media (max-width: 48rem) {\n .statusCode {\n font-size: 4rem;\n }\n\n .title {\n font-size: 1.25rem;\n }\n\n .card {\n padding: 2rem 1.5rem;\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"index68.cjs","names":[],"sources":["../src/components/data-table/data-table.module.css"],"sourcesContent":[".wrapper {\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.tableContainer {\n width: 100%;\n overflow-x: auto;\n}\n\n.table {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.875rem;\n text-align: left;\n color: var(--foreground);\n}\n\n.thead {\n border-bottom: 2px solid var(--border);\n}\n\n.headerCell {\n padding: 0.75rem 1rem;\n font-weight: 600;\n font-size: 0.8rem;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--muted-foreground);\n white-space: nowrap;\n vertical-align: bottom;\n border-bottom: 2px solid var(--border);\n}\n\n.headerCellFixed {\n white-space: nowrap;\n}\n\n.alignLeft {\n text-align: left;\n}\n\n.alignCenter {\n text-align: center;\n}\n\n.alignRight {\n text-align: right;\n}\n\n.sortableHeader {\n display: inline-flex;\n align-items: center;\n gap: 0.375rem;\n background: none;\n border: none;\n padding: 0;\n font: inherit;\n color: inherit;\n cursor: pointer;\n}\n\n.clickableHeader {\n cursor: pointer;\n}\n\n.clickableHeader:hover {\n color: var(--foreground);\n}\n\n.clickableHeader:focus-visible {\n outline: var(--focus-ring);\n outline-offset: var(--focus-ring-offset);\n}\n\n.headerLabel {\n font: inherit;\n}\n\n.sortIcon {\n font-size: 0.7rem;\n opacity: 0.4;\n user-select: none;\n}\n\n.tbody {\n border-top: 1px solid var(--border);\n}\n\n.row {\n border-bottom: 1px solid var(--border);\n transition: background-color 0.12s ease;\n}\n\n.row:hover {\n background-color: var(--muted);\n}\n\n.rowSelected {\n background-color: color-mix(in srgb, var(--primary) 10%, transparent);\n}\n\n.cell {\n padding: 0.75rem 1rem;\n vertical-align: middle;\n white-space: nowrap;\n}\n\n.checkbox {\n width: 1rem;\n height: 1rem;\n accent-color: var(--primary);\n cursor: pointer;\n border-radius: 4px;\n}\n\n.loadingCell {\n padding: 2rem 1rem;\n text-align: center;\n}\n\n.loadingRow {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n margin-bottom: 0.75rem;\n opacity: 0.6;\n}\n\n.skeletonBar {\n height: 0.75rem;\n border-radius: 4px;\n background: linear-gradient(90deg, var(--muted) 25%, var(--secondary) 50%, var(--muted) 75%);\n background-size: 200% 100%;\n animation: shimmer 1.5s infinite;\n}\n\n@keyframes shimmer {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n}\n\n.emptyCell {\n padding: 2rem 1rem;\n text-align: center;\n color: var(--muted-foreground);\n font-style: italic;\n}\n\n.rowActions {\n display: inline-flex;\n gap: 0.5rem;\n}\n\n.actionBtn {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n background: none;\n border: none;\n color: var(--muted-foreground);\n cursor: pointer;\n font-size: 0.8rem;\n padding: 0.25rem 0.5rem;\n border-radius: 4px;\n transition: color 0.12s, background-color 0.12s;\n}\n\n.actionBtn:hover {\n color: var(--foreground);\n background-color: var(--muted);\n}\n\n.actionBtn:focus-visible {\n outline: var(--focus-ring);\n outline-offset: var(--focus-ring-offset);\n}\n\n.pagination {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n border-top: 1px solid var(--border);\n font-size: 0.8rem;\n color: var(--muted-foreground);\n}\n\n.paginationButtons {\n display: inline-flex;\n gap: 0.25rem;\n}\n\n.pageBtn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n border: 1px solid var(--border);\n border-radius: 6px;\n background: var(--background);\n color: var(--foreground);\n cursor: pointer;\n font-size: 0.85rem;\n transition: background-color 0.12s, border-color 0.12s;\n}\n\n.pageBtn:hover:not(:disabled) {\n background-color: var(--muted);\n border-color: var(--accent);\n}\n\n.pageBtn:focus-visible {\n outline: var(--focus-ring);\n outline-offset: var(--focus-ring-offset);\n}\n\n.pageBtn:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n"],"mappings":""}
package/dist/index68.js CHANGED
@@ -1,101 +1,246 @@
1
+ "use client";
1
2
  import { cx } from "./index3.js";
2
- import error_page_module_default from "./index67.js";
3
- import "react";
3
+ import data_table_module_default from "./index67.js";
4
+ import * as React from "react";
4
5
  import { jsx, jsxs } from "react/jsx-runtime";
5
- //#region src/components/error-page/ErrorPage.tsx
6
- /**
7
- * ErrorPage — a generic error page with configurable status code, message, and action.
8
- *
9
- * Layout:
10
- * Full-viewport centered card with
11
- * Icon (optional) -> status code -> message -> subtitle -> action
12
- */
13
- function ErrorPage({ statusCode = 500, message = "Something went wrong", subtitle, action, showIcon = true, className }) {
14
- return /* @__PURE__ */ jsx("div", {
15
- className: cx(error_page_module_default.layout, className),
16
- children: /* @__PURE__ */ jsxs("div", {
17
- className: error_page_module_default.card,
18
- children: [showIcon && /* @__PURE__ */ jsx("div", {
19
- className: error_page_module_default.icon,
20
- "aria-hidden": "true",
21
- children: /* @__PURE__ */ jsxs("svg", {
22
- viewBox: "0 0 24 24",
23
- fill: "none",
24
- className: error_page_module_default.iconSvg,
25
- children: [
26
- /* @__PURE__ */ jsx("circle", {
27
- cx: "12",
28
- cy: "12",
29
- r: "10",
30
- stroke: "currentColor",
31
- strokeWidth: "2"
6
+ //#region src/components/data-table/DataTable.tsx
7
+ function DataTable({ data, columns, onRowAction, onSelectionChange, loading = false, emptyMessage = "No data found", pageSize = 10, selectable = false, rowKey = (row) => String(row.id ?? ""), className }) {
8
+ const [sortKey, setSortKey] = React.useState(null);
9
+ const [sortDir, setSortDir] = React.useState("asc");
10
+ const [page, setPage] = React.useState(1);
11
+ const [selected, setSelected] = React.useState(/* @__PURE__ */ new Set());
12
+ const handleSort = (key) => {
13
+ if (key === sortKey) setSortDir((d) => d === "asc" ? "desc" : "asc");
14
+ else {
15
+ setSortKey(key);
16
+ setSortDir("asc");
17
+ }
18
+ };
19
+ const toggleRow = (id) => {
20
+ const next = new Set(selected);
21
+ if (next.has(id)) next.delete(id);
22
+ else next.add(id);
23
+ setSelected(next);
24
+ onSelectionChange?.(Array.from(next));
25
+ };
26
+ const toggleAll = () => {
27
+ const allKeys = displayedData.map((r) => rowKey(r));
28
+ const allSelected = allKeys.every((k) => selected.has(k));
29
+ const next = new Set(selected);
30
+ if (allSelected) allKeys.forEach((k) => next.delete(k));
31
+ else allKeys.forEach((k) => next.add(k));
32
+ setSelected(next);
33
+ onSelectionChange?.(Array.from(next));
34
+ };
35
+ const totalPages = Math.max(1, Math.ceil(data.length / pageSize));
36
+ const safePage = Math.min(page, totalPages);
37
+ const columnSpan = columns.length + (selectable ? 1 : 0) + (onRowAction && onRowAction.length > 0 ? 1 : 0);
38
+ React.useEffect(() => {
39
+ if (page > totalPages) setPage(totalPages);
40
+ }, [
41
+ data.length,
42
+ page,
43
+ totalPages
44
+ ]);
45
+ const sortedData = React.useMemo(() => {
46
+ if (!sortKey) return data;
47
+ const sortColumn = columns.find((column) => column.key === sortKey);
48
+ const getSortValue = (row) => {
49
+ if (sortColumn?.accessor) {
50
+ const accessed = sortColumn.accessor(row);
51
+ if (typeof accessed === "string" || typeof accessed === "number") return accessed;
52
+ }
53
+ return row[sortKey];
54
+ };
55
+ return [...data].sort((a, b) => {
56
+ const aVal = getSortValue(a);
57
+ const bVal = getSortValue(b);
58
+ if (aVal == null) return 1;
59
+ if (bVal == null) return -1;
60
+ let cmp = 0;
61
+ if (typeof aVal === "number" && typeof bVal === "number") cmp = aVal - bVal;
62
+ else cmp = String(aVal).localeCompare(String(bVal));
63
+ return sortDir === "asc" ? cmp : -cmp;
64
+ });
65
+ }, [
66
+ columns,
67
+ data,
68
+ sortKey,
69
+ sortDir
70
+ ]);
71
+ const displayedData = React.useMemo(() => {
72
+ const start = (safePage - 1) * pageSize;
73
+ return sortedData.slice(start, start + pageSize);
74
+ }, [
75
+ sortedData,
76
+ safePage,
77
+ pageSize
78
+ ]);
79
+ const displayedKeys = React.useMemo(() => displayedData.map(rowKey), [displayedData, rowKey]);
80
+ const allPageSelected = displayedKeys.length > 0 && displayedKeys.every((k) => selected.has(k));
81
+ const somePageSelected = displayedKeys.length > 0 && displayedKeys.some((k) => selected.has(k));
82
+ return /* @__PURE__ */ jsxs("div", {
83
+ className: cx(data_table_module_default.wrapper, className),
84
+ children: [/* @__PURE__ */ jsx("div", {
85
+ className: data_table_module_default.tableContainer,
86
+ children: /* @__PURE__ */ jsxs("table", {
87
+ className: data_table_module_default.table,
88
+ children: [/* @__PURE__ */ jsx("thead", {
89
+ className: data_table_module_default.thead,
90
+ children: /* @__PURE__ */ jsxs("tr", { children: [
91
+ selectable && /* @__PURE__ */ jsx("th", {
92
+ className: data_table_module_default.headerCell,
93
+ "aria-label": "Select all",
94
+ children: /* @__PURE__ */ jsx("input", {
95
+ type: "checkbox",
96
+ checked: allPageSelected,
97
+ ref: (el) => {
98
+ if (el) el.indeterminate = somePageSelected && !allPageSelected;
99
+ },
100
+ onChange: toggleAll,
101
+ className: data_table_module_default.checkbox,
102
+ "aria-label": "Select all rows on this page"
103
+ })
32
104
  }),
33
- /* @__PURE__ */ jsx("line", {
34
- x1: "12",
35
- y1: "8",
36
- x2: "12",
37
- y2: "12",
38
- stroke: "currentColor",
39
- strokeWidth: "2",
40
- strokeLinecap: "round"
105
+ columns.map((col) => {
106
+ const ariaSort = col.sortable ? sortKey === col.key ? sortDir === "asc" ? "ascending" : "descending" : "none" : void 0;
107
+ return /* @__PURE__ */ jsx("th", {
108
+ className: cx(data_table_module_default.headerCell, col.width && data_table_module_default.headerCellFixed, col.align && data_table_module_default[`align${col.align.charAt(0).toUpperCase() + col.align.slice(1)}`]),
109
+ style: col.width ? { width: col.width } : void 0,
110
+ "aria-sort": ariaSort,
111
+ children: col.sortable ? /* @__PURE__ */ jsxs("button", {
112
+ type: "button",
113
+ className: cx(data_table_module_default.sortableHeader, data_table_module_default.clickableHeader),
114
+ onClick: () => handleSort(col.key),
115
+ children: [/* @__PURE__ */ jsx("span", {
116
+ className: data_table_module_default.headerLabel,
117
+ children: col.label
118
+ }), /* @__PURE__ */ jsx("span", {
119
+ className: data_table_module_default.sortIcon,
120
+ "aria-hidden": "true",
121
+ children: sortKey === col.key ? sortDir === "asc" ? "▲" : "▼" : "▲▼"
122
+ })]
123
+ }) : /* @__PURE__ */ jsx("span", {
124
+ className: data_table_module_default.headerLabel,
125
+ children: col.label
126
+ })
127
+ }, col.key);
41
128
  }),
42
- /* @__PURE__ */ jsx("circle", {
43
- cx: "12",
44
- cy: "16",
45
- r: "0.5",
46
- fill: "currentColor"
129
+ onRowAction && onRowAction.length > 0 && /* @__PURE__ */ jsx("th", {
130
+ className: data_table_module_default.headerCell,
131
+ style: { width: "5rem" },
132
+ children: /* @__PURE__ */ jsx("span", {
133
+ className: data_table_module_default.headerLabel,
134
+ children: "Actions"
135
+ })
47
136
  })
48
- ]
49
- })
50
- }), /* @__PURE__ */ jsxs("div", {
51
- className: error_page_module_default.content,
52
- children: [
53
- /* @__PURE__ */ jsx("span", {
54
- className: error_page_module_default.statusCode,
55
- children: statusCode
56
- }),
57
- /* @__PURE__ */ jsx("h1", {
58
- className: error_page_module_default.title,
59
- children: message
60
- }),
61
- subtitle && /* @__PURE__ */ jsx("p", {
62
- className: error_page_module_default.subtitle,
63
- children: subtitle
64
- }),
65
- action && /* @__PURE__ */ jsx("div", {
66
- className: error_page_module_default.action,
67
- children: action
137
+ ] })
138
+ }), /* @__PURE__ */ jsx("tbody", {
139
+ className: data_table_module_default.tbody,
140
+ children: loading ? /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsxs("td", {
141
+ colSpan: columnSpan,
142
+ className: data_table_module_default.loadingCell,
143
+ children: [
144
+ /* @__PURE__ */ jsxs("div", {
145
+ className: data_table_module_default.loadingRow,
146
+ "aria-busy": "true",
147
+ children: [
148
+ /* @__PURE__ */ jsx("div", { className: data_table_module_default.skeletonBar }),
149
+ /* @__PURE__ */ jsx("div", { className: data_table_module_default.skeletonBar }),
150
+ /* @__PURE__ */ jsx("div", { className: data_table_module_default.skeletonBar })
151
+ ]
152
+ }),
153
+ /* @__PURE__ */ jsxs("div", {
154
+ className: data_table_module_default.loadingRow,
155
+ "aria-busy": "true",
156
+ children: [
157
+ /* @__PURE__ */ jsx("div", { className: data_table_module_default.skeletonBar }),
158
+ /* @__PURE__ */ jsx("div", { className: data_table_module_default.skeletonBar }),
159
+ /* @__PURE__ */ jsx("div", { className: data_table_module_default.skeletonBar })
160
+ ]
161
+ }),
162
+ /* @__PURE__ */ jsxs("div", {
163
+ className: data_table_module_default.loadingRow,
164
+ "aria-busy": "true",
165
+ children: [
166
+ /* @__PURE__ */ jsx("div", { className: data_table_module_default.skeletonBar }),
167
+ /* @__PURE__ */ jsx("div", { className: data_table_module_default.skeletonBar }),
168
+ /* @__PURE__ */ jsx("div", { className: data_table_module_default.skeletonBar })
169
+ ]
170
+ })
171
+ ]
172
+ }) }) : data.length === 0 ? /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", {
173
+ colSpan: columnSpan,
174
+ className: data_table_module_default.emptyCell,
175
+ children: emptyMessage
176
+ }) }) : displayedData.map((row) => {
177
+ const id = rowKey(row);
178
+ return /* @__PURE__ */ jsxs("tr", {
179
+ className: cx(data_table_module_default.row, selected.has(id) && data_table_module_default.rowSelected),
180
+ children: [
181
+ selectable && /* @__PURE__ */ jsx("td", {
182
+ className: data_table_module_default.cell,
183
+ children: /* @__PURE__ */ jsx("input", {
184
+ type: "checkbox",
185
+ checked: selected.has(id),
186
+ onChange: () => toggleRow(id),
187
+ className: data_table_module_default.checkbox,
188
+ "aria-label": `Select row ${id}`
189
+ })
190
+ }),
191
+ columns.map((col) => /* @__PURE__ */ jsx("td", {
192
+ className: cx(data_table_module_default.cell, col.align && data_table_module_default[`align${col.align.charAt(0).toUpperCase() + col.align.slice(1)}`]),
193
+ children: col.accessor ? col.accessor(row) : String(row[col.key] ?? "")
194
+ }, `${id}-${col.key}`)),
195
+ onRowAction && onRowAction.length > 0 && /* @__PURE__ */ jsx("td", {
196
+ className: data_table_module_default.cell,
197
+ children: /* @__PURE__ */ jsx("div", {
198
+ className: data_table_module_default.rowActions,
199
+ children: onRowAction.map((action) => /* @__PURE__ */ jsx("button", {
200
+ type: "button",
201
+ className: data_table_module_default.actionBtn,
202
+ onClick: () => action.onClick(row),
203
+ children: action.label
204
+ }, action.label))
205
+ })
206
+ })
207
+ ]
208
+ }, id);
68
209
  })
210
+ })]
211
+ })
212
+ }), data.length > pageSize && /* @__PURE__ */ jsxs("div", {
213
+ className: data_table_module_default.pagination,
214
+ children: [/* @__PURE__ */ jsxs("span", {
215
+ className: data_table_module_default.paginationInfo,
216
+ children: [
217
+ "Page ",
218
+ safePage,
219
+ " of ",
220
+ totalPages
69
221
  ]
222
+ }), /* @__PURE__ */ jsxs("div", {
223
+ className: data_table_module_default.paginationButtons,
224
+ children: [/* @__PURE__ */ jsx("button", {
225
+ type: "button",
226
+ className: data_table_module_default.pageBtn,
227
+ disabled: safePage <= 1,
228
+ onClick: () => setPage((p) => Math.max(1, p - 1)),
229
+ "aria-label": "Previous page",
230
+ children: "←"
231
+ }), /* @__PURE__ */ jsx("button", {
232
+ type: "button",
233
+ className: data_table_module_default.pageBtn,
234
+ disabled: safePage >= totalPages,
235
+ onClick: () => setPage((p) => Math.min(totalPages, p + 1)),
236
+ "aria-label": "Next page",
237
+ children: "→"
238
+ })]
70
239
  })]
71
- })
72
- });
73
- }
74
- /**
75
- * NotFoundPage — a 404 variant of ErrorPage.
76
- */
77
- function NotFoundPage({ action, className }) {
78
- return /* @__PURE__ */ jsx(ErrorPage, {
79
- statusCode: 404,
80
- message: "Page not found",
81
- subtitle: "The page you're looking for doesn't exist or has been moved.",
82
- action,
83
- className
84
- });
85
- }
86
- /**
87
- * MaintenancePage — a 503 variant of ErrorPage for under-maintenance sites.
88
- */
89
- function MaintenancePage({ action, className }) {
90
- return /* @__PURE__ */ jsx(ErrorPage, {
91
- statusCode: 503,
92
- message: "Site under maintenance",
93
- subtitle: "We're currently performing scheduled maintenance. We'll be back shortly.",
94
- action,
95
- className
240
+ })]
96
241
  });
97
242
  }
98
243
  //#endregion
99
- export { ErrorPage, MaintenancePage, NotFoundPage };
244
+ export { DataTable };
100
245
 
101
246
  //# sourceMappingURL=index68.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index68.js","names":[],"sources":["../src/components/error-page/ErrorPage.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cx } from \"../../utils/cx\";\nimport styles from \"./error-page.module.css\";\n\nexport interface ErrorPageProps {\n /** HTTP status code (e.g., 404, 500, 503) */\n statusCode?: number;\n /** Descriptive message for the error */\n message?: React.ReactNode;\n /** Subtitle providing additional context */\n subtitle?: React.ReactNode;\n /** Action button rendered below the message */\n action?: React.ReactNode;\n /** Whether to render a large decorative icon */\n showIcon?: boolean;\n /** Additional class name for the outer wrapper */\n className?: string;\n}\n\n/**\n * ErrorPage — a generic error page with configurable status code, message, and action.\n *\n * Layout:\n * Full-viewport centered card with\n * Icon (optional) -> status code -> message -> subtitle -> action\n */\nexport function ErrorPage({\n statusCode = 500,\n message = \"Something went wrong\",\n subtitle,\n action,\n showIcon = true,\n className,\n}: ErrorPageProps) {\n return (\n <div className={cx(styles.layout, className)}>\n <div className={styles.card}>\n {showIcon && (\n <div className={styles.icon} aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" className={styles.iconSvg}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"2\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n <circle cx=\"12\" cy=\"16\" r=\"0.5\" fill=\"currentColor\" />\n </svg>\n </div>\n )}\n <div className={styles.content}>\n <span className={styles.statusCode}>{statusCode}</span>\n <h1 className={styles.title}>{message}</h1>\n {subtitle && <p className={styles.subtitle}>{subtitle}</p>}\n {action && <div className={styles.action}>{action}</div>}\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * NotFoundPage — a 404 variant of ErrorPage.\n */\nexport function NotFoundPage({\n action,\n className,\n}: Omit<ErrorPageProps, \"statusCode\" | \"message\" | \"subtitle\" | \"showIcon\">) {\n return (\n <ErrorPage\n statusCode={404}\n message=\"Page not found\"\n subtitle=\"The page you're looking for doesn't exist or has been moved.\"\n action={action}\n className={className}\n />\n );\n}\n\n/**\n * MaintenancePage — a 503 variant of ErrorPage for under-maintenance sites.\n */\nexport function MaintenancePage({\n action,\n className,\n}: Omit<ErrorPageProps, \"statusCode\" | \"message\" | \"subtitle\" | \"showIcon\">) {\n return (\n <ErrorPage\n statusCode={503}\n message=\"Site under maintenance\"\n subtitle=\"We're currently performing scheduled maintenance. We'll be back shortly.\"\n action={action}\n className={className}\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;AA0BA,SAAgB,UAAU,EACxB,aAAa,KACb,UAAU,wBACV,UACA,QACA,WAAW,MACX,aACiB;CACjB,OACE,oBAAC,OAAD;EAAK,WAAW,GAAG,0BAAO,QAAQ,SAAS;YACzC,qBAAC,OAAD;GAAK,WAAW,0BAAO;aAAvB,CACG,YACC,oBAAC,OAAD;IAAK,WAAW,0BAAO;IAAM,eAAY;cACvC,qBAAC,OAAD;KAAK,SAAQ;KAAY,MAAK;KAAO,WAAW,0BAAO;eAAvD;MACE,oBAAC,UAAD;OAAQ,IAAG;OAAK,IAAG;OAAK,GAAE;OAAK,QAAO;OAAe,aAAY;MAAK,CAAA;MACtE,oBAAC,QAAD;OAAM,IAAG;OAAK,IAAG;OAAI,IAAG;OAAK,IAAG;OAAK,QAAO;OAAe,aAAY;OAAI,eAAc;MAAS,CAAA;MAClG,oBAAC,UAAD;OAAQ,IAAG;OAAK,IAAG;OAAK,GAAE;OAAM,MAAK;MAAgB,CAAA;KAClD;;GACF,CAAA,GAEP,qBAAC,OAAD;IAAK,WAAW,0BAAO;cAAvB;KACE,oBAAC,QAAD;MAAM,WAAW,0BAAO;gBAAa;KAAiB,CAAA;KACtD,oBAAC,MAAD;MAAI,WAAW,0BAAO;gBAAQ;KAAY,CAAA;KACzC,YAAY,oBAAC,KAAD;MAAG,WAAW,0BAAO;gBAAW;KAAY,CAAA;KACxD,UAAU,oBAAC,OAAD;MAAK,WAAW,0BAAO;gBAAS;KAAY,CAAA;IACpD;KACF;;CACF,CAAA;AAET;;;;AAKA,SAAgB,aAAa,EAC3B,QACA,aAC2E;CAC3E,OACE,oBAAC,WAAD;EACE,YAAY;EACZ,SAAQ;EACR,UAAS;EACD;EACG;CACZ,CAAA;AAEL;;;;AAKA,SAAgB,gBAAgB,EAC9B,QACA,aAC2E;CAC3E,OACE,oBAAC,WAAD;EACE,YAAY;EACZ,SAAQ;EACR,UAAS;EACD;EACG;CACZ,CAAA;AAEL"}
1
+ {"version":3,"file":"index68.js","names":[],"sources":["../src/components/data-table/DataTable.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { cx } from \"../../utils/cx\";\nimport styles from \"./data-table.module.css\";\n\nexport type SortDirection = \"asc\" | \"desc\";\n\nexport interface Column<T = Record<string, unknown>> {\n key: string;\n label: React.ReactNode;\n accessor?: (row: T) => React.ReactNode;\n sortable?: boolean;\n width?: string;\n align?: \"left\" | \"center\" | \"right\";\n}\n\nexport type DataTableRowAction = {\n label: string;\n onClick: (row: Record<string, unknown>) => void;\n};\n\nexport interface DataTableProps<T = Record<string, unknown>> {\n data: T[];\n columns: readonly Column<T>[];\n /** Array of action buttons to render per row */\n onRowAction?: DataTableRowAction[];\n /** Called when rows are selected; receives selected row IDs */\n onSelectionChange?: (selectedIds: string[]) => void;\n /** Whether the table is in a loading state */\n loading?: boolean;\n /** Message displayed when data is empty */\n emptyMessage?: string;\n /** Number of rows per page */\n pageSize?: number;\n /** Whether rows are selectable via checkbox */\n selectable?: boolean;\n /** Custom row key extractor (defaults to row.id) */\n rowKey?: (row: T) => string;\n /** Additional class name for the table wrapper */\n className?: string;\n}\n\nexport function DataTable<T extends Record<string, unknown> = Record<string, unknown>>({\n data,\n columns,\n onRowAction,\n onSelectionChange,\n loading = false,\n emptyMessage = \"No data found\",\n pageSize = 10,\n selectable = false,\n rowKey = (row: T) => String(row.id ?? \"\"),\n className,\n}: DataTableProps<T>) {\n const [sortKey, setSortKey] = React.useState<string | null>(null);\n const [sortDir, setSortDir] = React.useState<SortDirection>(\"asc\");\n const [page, setPage] = React.useState(1);\n const [selected, setSelected] = React.useState<Set<string>>(new Set());\n\n const handleSort = (key: string) => {\n if (key === sortKey) {\n setSortDir((d) => (d === \"asc\" ? \"desc\" : \"asc\"));\n } else {\n setSortKey(key);\n setSortDir(\"asc\");\n }\n };\n\n const toggleRow = (id: string) => {\n const next = new Set(selected);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n setSelected(next);\n onSelectionChange?.(Array.from(next));\n };\n\n const toggleAll = () => {\n const allKeys = displayedData.map((r) => rowKey(r));\n const allSelected = allKeys.every((k) => selected.has(k));\n const next = new Set(selected);\n if (allSelected) {\n allKeys.forEach((k) => next.delete(k));\n } else {\n allKeys.forEach((k) => next.add(k));\n }\n setSelected(next);\n onSelectionChange?.(Array.from(next));\n };\n\n const totalPages = Math.max(1, Math.ceil(data.length / pageSize));\n const safePage = Math.min(page, totalPages);\n const columnSpan =\n columns.length + (selectable ? 1 : 0) + (onRowAction && onRowAction.length > 0 ? 1 : 0);\n\n React.useEffect(() => {\n if (page > totalPages) {\n setPage(totalPages);\n }\n }, [data.length, page, totalPages]);\n\n const sortedData = React.useMemo(() => {\n if (!sortKey) return data;\n\n const sortColumn = columns.find((column) => column.key === sortKey);\n const getSortValue = (row: T): unknown => {\n if (sortColumn?.accessor) {\n const accessed = sortColumn.accessor(row);\n if (typeof accessed === \"string\" || typeof accessed === \"number\") {\n return accessed;\n }\n }\n return row[sortKey as keyof T];\n };\n\n return [...data].sort((a, b) => {\n const aVal = getSortValue(a);\n const bVal = getSortValue(b);\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n let cmp = 0;\n if (typeof aVal === \"number\" && typeof bVal === \"number\") {\n cmp = aVal - bVal;\n } else {\n cmp = String(aVal).localeCompare(String(bVal));\n }\n return sortDir === \"asc\" ? cmp : -cmp;\n });\n }, [columns, data, sortKey, sortDir]);\n\n const displayedData = React.useMemo(() => {\n const start = (safePage - 1) * pageSize;\n return sortedData.slice(start, start + pageSize);\n }, [sortedData, safePage, pageSize]);\n\n const displayedKeys = React.useMemo(() => displayedData.map(rowKey), [displayedData, rowKey]);\n const allPageSelected =\n displayedKeys.length > 0 && displayedKeys.every((k) => selected.has(k));\n const somePageSelected =\n displayedKeys.length > 0 && displayedKeys.some((k) => selected.has(k));\n\n return (\n <div className={cx(styles.wrapper, className)}>\n <div className={styles.tableContainer}>\n <table className={styles.table}>\n <thead className={styles.thead}>\n <tr>\n {selectable && (\n <th className={styles.headerCell} aria-label=\"Select all\">\n <input\n type=\"checkbox\"\n checked={allPageSelected}\n ref={(el) => {\n if (el) el.indeterminate = somePageSelected && !allPageSelected;\n }}\n onChange={toggleAll}\n className={styles.checkbox}\n aria-label=\"Select all rows on this page\"\n />\n </th>\n )}\n {columns.map((col) => {\n const ariaSort = col.sortable\n ? sortKey === col.key\n ? sortDir === \"asc\"\n ? \"ascending\"\n : \"descending\"\n : \"none\"\n : undefined;\n\n return (\n <th\n key={col.key}\n className={cx(\n styles.headerCell,\n col.width && styles.headerCellFixed,\n col.align && styles[`align${col.align.charAt(0).toUpperCase() + col.align.slice(1)}`],\n )}\n style={col.width ? { width: col.width } : undefined}\n aria-sort={ariaSort}\n >\n {col.sortable ? (\n <button\n type=\"button\"\n className={cx(styles.sortableHeader, styles.clickableHeader)}\n onClick={() => handleSort(col.key)}\n >\n <span className={styles.headerLabel}>{col.label}</span>\n <span className={styles.sortIcon} aria-hidden=\"true\">\n {sortKey === col.key ? (\n sortDir === \"asc\" ? (\n \"\\u25B2\"\n ) : (\n \"\\u25BC\"\n )\n ) : (\n \"\\u25B2\\u25BC\"\n )}\n </span>\n </button>\n ) : (\n <span className={styles.headerLabel}>{col.label}</span>\n )}\n </th>\n );\n })}\n {onRowAction && onRowAction.length > 0 && (\n <th className={styles.headerCell} style={{ width: \"5rem\" }}>\n <span className={styles.headerLabel}>Actions</span>\n </th>\n )}\n </tr>\n </thead>\n <tbody className={styles.tbody}>\n {loading ? (\n <tr>\n <td colSpan={columnSpan} className={styles.loadingCell}>\n <div className={styles.loadingRow} aria-busy=\"true\">\n <div className={styles.skeletonBar} />\n <div className={styles.skeletonBar} />\n <div className={styles.skeletonBar} />\n </div>\n <div className={styles.loadingRow} aria-busy=\"true\">\n <div className={styles.skeletonBar} />\n <div className={styles.skeletonBar} />\n <div className={styles.skeletonBar} />\n </div>\n <div className={styles.loadingRow} aria-busy=\"true\">\n <div className={styles.skeletonBar} />\n <div className={styles.skeletonBar} />\n <div className={styles.skeletonBar} />\n </div>\n </td>\n </tr>\n ) : data.length === 0 ? (\n <tr>\n <td colSpan={columnSpan} className={styles.emptyCell}>\n {emptyMessage}\n </td>\n </tr>\n ) : (\n displayedData.map((row) => {\n const id = rowKey(row);\n return (\n <tr key={id} className={cx(styles.row, selected.has(id) && styles.rowSelected)}>\n {selectable && (\n <td className={styles.cell}>\n <input\n type=\"checkbox\"\n checked={selected.has(id)}\n onChange={() => toggleRow(id)}\n className={styles.checkbox}\n aria-label={`Select row ${id}`}\n />\n </td>\n )}\n {columns.map((col) => (\n <td\n key={`${id}-${col.key}`}\n className={cx(\n styles.cell,\n col.align && styles[`align${col.align.charAt(0).toUpperCase() + col.align.slice(1)}`],\n )}\n >\n {col.accessor ? col.accessor(row) : String(row[col.key as keyof T] ?? \"\")}\n </td>\n ))}\n {onRowAction && onRowAction.length > 0 && (\n <td className={styles.cell}>\n <div className={styles.rowActions}>\n {onRowAction.map((action) => (\n <button\n key={action.label}\n type=\"button\"\n className={styles.actionBtn}\n onClick={() => action.onClick(row)}\n >\n {action.label}\n </button>\n ))}\n </div>\n </td>\n )}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n\n {data.length > pageSize && (\n <div className={styles.pagination}>\n <span className={styles.paginationInfo}>\n Page {safePage} of {totalPages}\n </span>\n <div className={styles.paginationButtons}>\n <button\n type=\"button\"\n className={styles.pageBtn}\n disabled={safePage <= 1}\n onClick={() => setPage((p) => Math.max(1, p - 1))}\n aria-label=\"Previous page\"\n >\n &larr;\n </button>\n <button\n type=\"button\"\n className={styles.pageBtn}\n disabled={safePage >= totalPages}\n onClick={() => setPage((p) => Math.min(totalPages, p + 1))}\n aria-label=\"Next page\"\n >\n &rarr;\n </button>\n </div>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}