@appcorp/shadcn 1.2.0 → 2.0.1

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 (231) hide show
  1. package/components/app-sidebar.js +1 -41
  2. package/components/audio.js +1 -21
  3. package/components/dashboard.js +1 -67
  4. package/components/drawer-generic.js +1 -47
  5. package/components/enhanced-checkbox.js +1 -86
  6. package/components/enhanced-combobox.js +1 -315
  7. package/components/enhanced-drawer-footer.js +1 -39
  8. package/components/enhanced-drawer-header.js +1 -15
  9. package/components/enhanced-dropzone-impl.d.ts +32 -0
  10. package/components/enhanced-dropzone-impl.js +1 -0
  11. package/components/enhanced-dropzone.d.ts +2 -63
  12. package/components/enhanced-dropzone.js +1 -296
  13. package/components/enhanced-input.js +1 -87
  14. package/components/enhanced-label.js +1 -68
  15. package/components/enhanced-radio.js +1 -23
  16. package/components/enhanced-select.js +1 -81
  17. package/components/enhanced-slider.js +1 -80
  18. package/components/enhanced-switch.js +1 -89
  19. package/components/enhanced-table-footer-action.js +1 -110
  20. package/components/enhanced-table-footer-page.js +1 -132
  21. package/components/enhanced-table-footer-pagination.js +1 -118
  22. package/components/enhanced-table-header-action.js +1 -40
  23. package/components/enhanced-table-header-search.js +1 -18
  24. package/components/enhanced-table.js +1 -329
  25. package/components/enhanced-textarea.js +1 -87
  26. package/components/field.d.ts +1 -1
  27. package/components/field.js +1 -153
  28. package/components/image-resize-dialog.js +1 -180
  29. package/components/nav-main.js +1 -86
  30. package/components/nav-projects.js +1 -50
  31. package/components/nav-user.js +1 -62
  32. package/components/show-toast.js +1 -11
  33. package/components/sidebar.d.ts +1 -1
  34. package/components/sidebar.js +1 -326
  35. package/components/team-switcher.js +1 -53
  36. package/components/theme-provider.js +1 -160
  37. package/components/timeline.js +1 -21
  38. package/components/tooltip.js +1 -85
  39. package/components/ui/accordion.js +1 -87
  40. package/components/ui/alert-dialog.js +1 -120
  41. package/components/ui/alert.d.ts +1 -1
  42. package/components/ui/alert.js +1 -90
  43. package/components/ui/area-chart-v1-impl.d.ts +19 -0
  44. package/components/ui/area-chart-v1-impl.js +1 -0
  45. package/components/ui/area-chart-v1.d.ts +2 -19
  46. package/components/ui/area-chart-v1.js +1 -114
  47. package/components/ui/aspect-ratio.js +1 -40
  48. package/components/ui/avatar.js +1 -80
  49. package/components/ui/badge.d.ts +2 -2
  50. package/components/ui/badge.js +1 -80
  51. package/components/ui/breadcrumb.js +1 -107
  52. package/components/ui/button.d.ts +2 -2
  53. package/components/ui/button.js +1 -92
  54. package/components/ui/calendar-impl.d.ts +8 -0
  55. package/components/ui/calendar-impl.js +1 -0
  56. package/components/ui/calendar.d.ts +2 -8
  57. package/components/ui/calendar.js +1 -109
  58. package/components/ui/card.js +1 -96
  59. package/components/ui/carousel-impl.d.ts +18 -0
  60. package/components/ui/carousel-impl.js +1 -0
  61. package/components/ui/carousel.d.ts +6 -18
  62. package/components/ui/carousel.js +1 -171
  63. package/components/ui/chart-impl.d.ts +62 -0
  64. package/components/ui/chart-impl.js +7 -0
  65. package/components/ui/chart.d.ts +7 -62
  66. package/components/ui/chart.js +1 -220
  67. package/components/ui/checkbox.js +1 -71
  68. package/components/ui/collapsible.js +1 -44
  69. package/components/ui/combobox.js +1 -88
  70. package/components/ui/command-impl.d.ts +80 -0
  71. package/components/ui/command-impl.js +1 -0
  72. package/components/ui/command.d.ts +9 -80
  73. package/components/ui/command.js +1 -118
  74. package/components/ui/context-menu.js +1 -141
  75. package/components/ui/dialog.js +1 -113
  76. package/components/ui/drawer-impl.d.ts +22 -0
  77. package/components/ui/drawer-impl.js +1 -0
  78. package/components/ui/drawer.d.ts +10 -22
  79. package/components/ui/drawer.js +1 -112
  80. package/components/ui/dropdown-menu.js +1 -143
  81. package/components/ui/form.d.ts +4 -2
  82. package/components/ui/form.js +1 -132
  83. package/components/ui/hover-card.js +1 -72
  84. package/components/ui/input-otp-impl.d.ts +34 -0
  85. package/components/ui/input-otp-impl.js +1 -0
  86. package/components/ui/input-otp.d.ts +4 -34
  87. package/components/ui/input-otp.js +1 -93
  88. package/components/ui/input.js +1 -66
  89. package/components/ui/label.d.ts +1 -1
  90. package/components/ui/label.js +1 -70
  91. package/components/ui/language-selector.js +1 -63
  92. package/components/ui/menubar.js +1 -165
  93. package/components/ui/navigation-menu.d.ts +1 -1
  94. package/components/ui/navigation-menu.js +1 -114
  95. package/components/ui/pagination.js +1 -113
  96. package/components/ui/popover.js +1 -75
  97. package/components/ui/progress.js +1 -69
  98. package/components/ui/radio-group.js +1 -77
  99. package/components/ui/resizable-impl.d.ts +24 -0
  100. package/components/ui/resizable-impl.js +1 -0
  101. package/components/ui/resizable.d.ts +3 -24
  102. package/components/ui/resizable.js +1 -79
  103. package/components/ui/scroll-area.js +1 -80
  104. package/components/ui/select.js +1 -127
  105. package/components/ui/separator.js +1 -68
  106. package/components/ui/sheet.d.ts +1 -1
  107. package/components/ui/sheet.js +1 -127
  108. package/components/ui/skeleton.js +1 -34
  109. package/components/ui/slider.js +1 -79
  110. package/components/ui/sonner.js +1 -45
  111. package/components/ui/switch.js +1 -69
  112. package/components/ui/table.js +1 -109
  113. package/components/ui/tabs.js +1 -82
  114. package/components/ui/textarea.js +1 -66
  115. package/components/ui/theme-switcher.js +1 -152
  116. package/components/ui/toggle.d.ts +2 -2
  117. package/components/ui/toggle.js +1 -87
  118. package/data/admin-dashboard.js +1 -304
  119. package/hooks/use-enhanced-combobox.js +1 -150
  120. package/hooks/use-mobile.js +1 -51
  121. package/hooks/use-outside-click.js +1 -23
  122. package/lib/themes.js +1 -150
  123. package/lib/toast-utils.js +1 -212
  124. package/lib/utils.js +1 -12
  125. package/package.json +9 -90
  126. package/utils/transform-breadcrumbs.js +1 -11
  127. package/utils/transform-navitems.js +1 -33
  128. package/components/aceternity-ui/apple-cards-carousel.d.ts +0 -35
  129. package/components/aceternity-ui/apple-cards-carousel.js +0 -263
  130. package/components/shadcn-example/ai-chat/chat-interface.d.ts +0 -11
  131. package/components/shadcn-example/ai-chat/chat-interface.js +0 -70
  132. package/components/shadcn-example/ai-chat/index.d.ts +0 -38
  133. package/components/shadcn-example/ai-chat/index.js +0 -66
  134. package/components/shadcn-example/ai-chat/sidebar.d.ts +0 -15
  135. package/components/shadcn-example/ai-chat/sidebar.js +0 -68
  136. package/components/shadcn-example/ai-chat/welcome-section.d.ts +0 -12
  137. package/components/shadcn-example/ai-chat/welcome-section.js +0 -26
  138. package/components/shadcn-example/authentication/index.d.ts +0 -24
  139. package/components/shadcn-example/authentication/index.js +0 -59
  140. package/components/shadcn-example/authentication/user-auth-form.d.ts +0 -11
  141. package/components/shadcn-example/authentication/user-auth-form.js +0 -54
  142. package/components/shadcn-example/blog-detail-page/comment-section.d.ts +0 -15
  143. package/components/shadcn-example/blog-detail-page/comment-section.js +0 -83
  144. package/components/shadcn-example/blog-detail-page/content.d.ts +0 -7
  145. package/components/shadcn-example/blog-detail-page/content.js +0 -15
  146. package/components/shadcn-example/blog-detail-page/header.d.ts +0 -11
  147. package/components/shadcn-example/blog-detail-page/header.js +0 -36
  148. package/components/shadcn-example/blog-detail-page/index.d.ts +0 -25
  149. package/components/shadcn-example/blog-detail-page/index.js +0 -74
  150. package/components/shadcn-example/blog-page/blog-post-card.d.ts +0 -13
  151. package/components/shadcn-example/blog-page/blog-post-card.js +0 -30
  152. package/components/shadcn-example/blog-page/featured-post-sidebar-item.d.ts +0 -10
  153. package/components/shadcn-example/blog-page/featured-post-sidebar-item.js +0 -19
  154. package/components/shadcn-example/blog-page/index.d.ts +0 -20
  155. package/components/shadcn-example/blog-page/index.js +0 -36
  156. package/components/shadcn-example/coming-soon/countdown.d.ts +0 -2
  157. package/components/shadcn-example/coming-soon/countdown.js +0 -82
  158. package/components/shadcn-example/coming-soon/index.d.ts +0 -10
  159. package/components/shadcn-example/coming-soon/index.js +0 -41
  160. package/components/shadcn-io/color-picker/index.d.ts +0 -43
  161. package/components/shadcn-io/color-picker/index.js +0 -304
  162. package/components/shadcn-io/copy-button/index.d.ts +0 -16
  163. package/components/shadcn-io/copy-button/index.js +0 -121
  164. package/components/shadcn-io/dropzone/index.d.ts +0 -19
  165. package/components/shadcn-io/dropzone/index.js +0 -131
  166. package/components/shadcn-io/gantt/index.d.ts +0 -145
  167. package/components/shadcn-io/gantt/index.js +0 -766
  168. package/components/shadcn-io/table/index.d.ts +0 -60
  169. package/components/shadcn-io/table/index.js +0 -138
  170. package/templates/appcorp-v1/footer/bottom-bar.d.ts +0 -6
  171. package/templates/appcorp-v1/footer/bottom-bar.js +0 -25
  172. package/templates/appcorp-v1/footer/cta.d.ts +0 -6
  173. package/templates/appcorp-v1/footer/cta.js +0 -21
  174. package/templates/appcorp-v1/footer/footer-grid.d.ts +0 -14
  175. package/templates/appcorp-v1/footer/footer-grid.js +0 -52
  176. package/templates/appcorp-v1/footer/index.d.ts +0 -3
  177. package/templates/appcorp-v1/footer/index.js +0 -28
  178. package/templates/appcorp-v1/footer/newsletter.d.ts +0 -11
  179. package/templates/appcorp-v1/footer/newsletter.js +0 -28
  180. package/templates/appcorp-v1/footer/stats.d.ts +0 -6
  181. package/templates/appcorp-v1/footer/stats.js +0 -15
  182. package/templates/appcorp-v1/header/announcement-bar.d.ts +0 -3
  183. package/templates/appcorp-v1/header/announcement-bar.js +0 -15
  184. package/templates/appcorp-v1/header/dropdown-panel.d.ts +0 -8
  185. package/templates/appcorp-v1/header/dropdown-panel.js +0 -72
  186. package/templates/appcorp-v1/header/index.d.ts +0 -12
  187. package/templates/appcorp-v1/header/index.js +0 -16
  188. package/templates/appcorp-v1/header/mobile-menu.d.ts +0 -14
  189. package/templates/appcorp-v1/header/mobile-menu.js +0 -101
  190. package/templates/appcorp-v1/header/navigation-bar.d.ts +0 -3
  191. package/templates/appcorp-v1/header/navigation-bar.js +0 -117
  192. package/templates/appcorp-v1/header/social-button.d.ts +0 -7
  193. package/templates/appcorp-v1/header/social-button.js +0 -48
  194. package/templates/appcorp-v1/home.d.ts +0 -3
  195. package/templates/appcorp-v1/home.js +0 -27
  196. package/templates/data/appcorp-v1.d.ts +0 -93
  197. package/templates/data/appcorp-v1.js +0 -348
  198. package/templates/data/edupilotpro-v1.d.ts +0 -33
  199. package/templates/data/edupilotpro-v1.js +0 -116
  200. package/templates/data/school-v1.d.ts +0 -328
  201. package/templates/data/school-v1.js +0 -1563
  202. package/templates/edupilotpro-v1/feature-card.d.ts +0 -13
  203. package/templates/edupilotpro-v1/feature-card.js +0 -28
  204. package/templates/edupilotpro-v1/mockups/dashboard-mockup.d.ts +0 -3
  205. package/templates/edupilotpro-v1/mockups/dashboard-mockup.js +0 -55
  206. package/templates/school-v1/footer.d.ts +0 -3
  207. package/templates/school-v1/footer.js +0 -75
  208. package/templates/school-v1/index.d.ts +0 -18
  209. package/templates/school-v1/index.js +0 -60
  210. package/templates/school-v1/navigation.d.ts +0 -3
  211. package/templates/school-v1/navigation.js +0 -123
  212. package/templates/school-v1/sections/about.d.ts +0 -3
  213. package/templates/school-v1/sections/about.js +0 -49
  214. package/templates/school-v1/sections/admissions.d.ts +0 -3
  215. package/templates/school-v1/sections/admissions.js +0 -77
  216. package/templates/school-v1/sections/contact.d.ts +0 -3
  217. package/templates/school-v1/sections/contact.js +0 -67
  218. package/templates/school-v1/sections/faqs.d.ts +0 -3
  219. package/templates/school-v1/sections/faqs.js +0 -50
  220. package/templates/school-v1/sections/hero.d.ts +0 -3
  221. package/templates/school-v1/sections/hero.js +0 -132
  222. package/templates/school-v1/sections/management.d.ts +0 -3
  223. package/templates/school-v1/sections/management.js +0 -34
  224. package/templates/school-v1/sections/policies.d.ts +0 -3
  225. package/templates/school-v1/sections/policies.js +0 -127
  226. package/templates/school-v1/sections/programs.d.ts +0 -3
  227. package/templates/school-v1/sections/programs.js +0 -107
  228. package/templates/school-v1/sections/testimonials.d.ts +0 -3
  229. package/templates/school-v1/sections/testimonials.js +0 -46
  230. package/templates/school-v1/sections/why-choose-us.d.ts +0 -3
  231. package/templates/school-v1/sections/why-choose-us.js +0 -57
@@ -1,118 +1 @@
1
- "use strict";
2
- /**
3
- * Enhanced Table Footer Pagination Component
4
- *
5
- * Displays rows per page selector with internationalization and RTL/LTR support.
6
- * Automatically adapts text direction and layout based on locale.
7
- *
8
- * Features:
9
- * - Full i18n support with fallback text
10
- * - RTL/LTR layout adaptation
11
- * - Loading state handling
12
- * - Accessibility attributes
13
- * - Custom translation overrides
14
- * - Responsive design
15
- */
16
- var __importDefault = (this && this.__importDefault) || function (mod) {
17
- return (mod && mod.__esModule) ? mod : { "default": mod };
18
- };
19
- Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.EnhancedTableFooterPagination = void 0;
21
- var select_1 = require("./ui/select");
22
- var react_1 = __importDefault(require("react"));
23
- var EnhancedTableFooterPagination = function (_a) {
24
- var handleOnSelect = _a.handleOnSelect, _b = _a.isRTL, isRTL = _b === void 0 ? false : _b, listOptions = _a.listOptions, loading = _a.loading, nodeSelectKey = _a.nodeSelectKey, pageLimit = _a.pageLimit, _c = _a.rowsPerPageLabel, rowsPerPageLabel = _c === void 0 ? "Rows per page:" : _c, _d = _a.className, className = _d === void 0 ? "" : _d, testIdWrapper = _a.testIdWrapper, testIdLabel = _a.testIdLabel, testIdSelectTrigger = _a.testIdSelectTrigger, testIdSelectValue = _a.testIdSelectValue, testIdSelectContent = _a.testIdSelectContent, testIdOptionPrefix = _a.testIdOptionPrefix;
25
- return (react_1.default.createElement("div", { className: "flex items-center gap-2 ".concat(className), dir: isRTL ? "rtl" : "ltr", "data-testid": testIdWrapper },
26
- react_1.default.createElement("label", { htmlFor: "page-limit-select-".concat(nodeSelectKey), className: "text-sm text-muted-foreground whitespace-nowrap", "data-testid": testIdLabel }, rowsPerPageLabel),
27
- react_1.default.createElement(select_1.Select, { value: String(pageLimit), onValueChange: function (value) {
28
- return handleOnSelect(nodeSelectKey, { option: value });
29
- }, disabled: loading },
30
- react_1.default.createElement(select_1.SelectTrigger, { id: "page-limit-select-".concat(nodeSelectKey), className: "w-20", "aria-label": "".concat(rowsPerPageLabel, " ").concat(pageLimit), "data-testid": testIdSelectTrigger },
31
- react_1.default.createElement(select_1.SelectValue, { "data-testid": testIdSelectValue })),
32
- react_1.default.createElement(select_1.SelectContent, { "data-testid": testIdSelectContent }, listOptions.map(function (option) { return (react_1.default.createElement(select_1.SelectItem, { key: option.option, value: option.option, "aria-label": "".concat(option.option, " rows per page"), "data-testid": testIdOptionPrefix
33
- ? "".concat(testIdOptionPrefix, "-").concat(option.option)
34
- : undefined }, option.option)); })))));
35
- };
36
- exports.EnhancedTableFooterPagination = EnhancedTableFooterPagination;
37
- // ============================================================================
38
- // USAGE EXAMPLES
39
- // ============================================================================
40
- /*
41
- Example 1: Basic usage with automatic i18n
42
- <EnhancedTableFooterPagination
43
- handleOnSelect={(key, value) => console.log(key, value)}
44
- listOptions={[{ option: "10" }, { option: "25" }, { option: "50" }]}
45
- loading={false}
46
- nodeSelectKey="pageLimit"
47
- pageLimit={10}
48
- totalPages={5}
49
- />
50
-
51
- Example 2: With custom label text
52
- <EnhancedTableFooterPagination
53
- handleOnSelect={handlePageLimitChange}
54
- listOptions={pageLimitOptions}
55
- loading={isLoading}
56
- nodeSelectKey="pageLimit"
57
- pageLimit={currentPageLimit}
58
- totalPages={totalPages}
59
- labelText="Items per page:"
60
- />
61
-
62
- Example 3: With custom styling and RTL support
63
- <EnhancedTableFooterPagination
64
- handleOnSelect={handlePageLimitChange}
65
- listOptions={pageLimitOptions}
66
- loading={false}
67
- nodeSelectKey="pageLimit"
68
- pageLimit={25}
69
- totalPages={10}
70
- className="bg-gray-50 p-2 rounded-md"
71
- />
72
-
73
- RTL Layout Features:
74
- - Automatic text direction detection and application
75
- - Element order reversal for RTL languages
76
- - Proper label-select association
77
- - Accessibility attributes for screen readers
78
- - Direction-specific CSS classes and DOM attributes
79
- */
80
- // ============================================================================
81
- // COMPONENT ENHANCEMENTS SUMMARY
82
- // ============================================================================
83
- /*
84
- Enhancements Applied:
85
-
86
- 1. **Internationalization (i18n)**
87
- - Translation support using next-intl
88
- - Fallback text for missing translations
89
- - Custom label text override capability
90
- - Translatable "Rows per page:" label
91
-
92
- 2. **RTL/LTR Layout Support**
93
- - Automatic layout detection using useRTL hook
94
- - Element order reversal for RTL languages (flex-row-reverse)
95
- - Direction-aware CSS classes and attributes
96
- - Proper text direction handling
97
-
98
- 3. **Accessibility Improvements**
99
- - Proper label-select association with htmlFor/id
100
- - ARIA labels for screen readers
101
- - Descriptive aria-label for select options
102
- - Semantic HTML structure with label element
103
-
104
- 4. **Developer Experience**
105
- - Comprehensive JSDoc documentation
106
- - Usage examples and patterns
107
- - TypeScript interface improvements
108
- - Flexible customization options
109
-
110
- 5. **Code Quality**
111
- - Clean, readable component structure
112
- - Consistent naming conventions
113
- - Performance-optimized rendering
114
- - Maintainable and extensible design
115
-
116
- Translation Key Required:
117
- - common.rowsPerPage: "Rows per page:" / "ہر صفحے میں قطاریں:"
118
- */
1
+ "use strict";import{Select as $,SelectContent as f,SelectItem as b,SelectTrigger as h,SelectValue as w}from"./ui/select";import t from"react";export const EnhancedTableFooterPagination=({handleOnSelect:n,isRTL:m=!1,listOptions:c,loading:s,nodeSelectKey:a,pageLimit:l,rowsPerPageLabel:r="Rows per page:",className:d="",testIdWrapper:o,testIdLabel:p,testIdSelectTrigger:g,testIdSelectValue:u,testIdSelectContent:E,testIdOptionPrefix:i})=>t.createElement("div",{className:`flex items-center gap-2 ${d}`,dir:m?"rtl":"ltr","data-testid":o},t.createElement("label",{htmlFor:`page-limit-select-${a}`,className:"text-sm text-muted-foreground whitespace-nowrap","data-testid":p},r),t.createElement($,{value:String(l),onValueChange:e=>n(a,{option:e}),disabled:s},t.createElement(h,{id:`page-limit-select-${a}`,className:"w-20","aria-label":`${r} ${l}`,"data-testid":g},t.createElement(w,{"data-testid":u})),t.createElement(f,{"data-testid":E},c.map(e=>t.createElement(b,{key:e.option,value:e.option,"aria-label":`${e.option} rows per page`,"data-testid":i?`${i}-${e.option}`:void 0},e.option)))));
@@ -1,40 +1 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.EnhancedTableHeaderAction = void 0;
7
- var react_1 = __importDefault(require("react"));
8
- var lucide_react_1 = require("lucide-react");
9
- var badge_1 = require("./ui/badge");
10
- var button_1 = require("./ui/button");
11
- var utils_1 = require("../lib/utils");
12
- var EnhancedTableHeaderAction = function (_a) {
13
- var headerActions = _a.headerActions, numberOfFilters = _a.numberOfFilters, onClearFilters = _a.onClearFilters, testIdWrapper = _a.testIdWrapper, testIdActionPrefix = _a.testIdActionPrefix, testIdFilterBadge = _a.testIdFilterBadge, testIdClearFilters = _a.testIdClearFilters;
14
- return (react_1.default.createElement(react_1.default.Fragment, null, headerActions.length > 0 && (react_1.default.createElement("div", { className: "flex gap-2", "data-testid": testIdWrapper }, headerActions
15
- .filter(function (action) { return action.enabled !== false; })
16
- .sort(function (a, b) { return (a.order || 0) - (b.order || 0); })
17
- .map(function (action, index) {
18
- var isFilterButton = action.label
19
- .toLowerCase()
20
- .includes("filter");
21
- var showFilterIndicators = isFilterButton &&
22
- typeof numberOfFilters === "number" &&
23
- numberOfFilters > 0;
24
- return (react_1.default.createElement("div", { key: action.id || action.key || index, className: "relative" },
25
- react_1.default.createElement(button_1.Button, { variant: action.variant || "default", "data-testid": testIdActionPrefix
26
- ? "".concat(testIdActionPrefix, "-").concat(index)
27
- : undefined, onClick: function () { var _a; return (_a = action.handleOnClick) === null || _a === void 0 ? void 0 : _a.call(action, undefined); } }, action.label),
28
- showFilterIndicators && (react_1.default.createElement(react_1.default.Fragment, null,
29
- react_1.default.createElement("div", { className: "absolute -top-2 -left-2 group" },
30
- react_1.default.createElement(badge_1.Badge, { variant: "secondary", className: (0, utils_1.cn)("h-5 w-5 flex items-center justify-center p-0 text-xs rounded-full transition-all relative", onClearFilters && "cursor-pointer"), "data-testid": testIdFilterBadge, onClick: onClearFilters
31
- ? function (e) {
32
- e.stopPropagation();
33
- onClearFilters();
34
- }
35
- : undefined },
36
- react_1.default.createElement("span", { className: (0, utils_1.cn)("transition-opacity absolute", onClearFilters && "group-hover:opacity-0") }, numberOfFilters),
37
- onClearFilters && (react_1.default.createElement(lucide_react_1.X, { className: "h-3 w-3 absolute opacity-0 group-hover:opacity-100 transition-opacity", "data-testid": testIdClearFilters }))))))));
38
- })))));
39
- };
40
- exports.EnhancedTableHeaderAction = EnhancedTableHeaderAction;
1
+ "use strict";import t from"react";import{X as u}from"lucide-react";import{Badge as f}from"./ui/badge";import{Button as v}from"./ui/button";import{cn as s}from"../lib/utils";export const EnhancedTableHeaderAction=({headerActions:o,numberOfFilters:n,onClearFilters:a,testIdWrapper:d,testIdActionPrefix:i,testIdFilterBadge:c,testIdClearFilters:m})=>t.createElement(t.Fragment,null,o.length>0&&t.createElement("div",{className:"flex gap-2","data-testid":d},o.filter(e=>e.enabled!==!1).sort((e,l)=>(e.order||0)-(l.order||0)).map((e,l)=>{const p=e.label.toLowerCase().includes("filter")&&typeof n=="number"&&n>0;return t.createElement("div",{key:e.id||e.key||l,className:"relative"},t.createElement(v,{variant:e.variant||"default","data-testid":i?`${i}-${l}`:void 0,onClick:()=>{var r;return(r=e.handleOnClick)===null||r===void 0?void 0:r.call(e,void 0)}},e.label),p&&t.createElement(t.Fragment,null,t.createElement("div",{className:"absolute -top-2 -left-2 group"},t.createElement(f,{variant:"secondary",className:s("h-5 w-5 flex items-center justify-center p-0 text-xs rounded-full transition-all relative",a&&"cursor-pointer"),"data-testid":c,onClick:a?r=>{r.stopPropagation(),a()}:void 0},t.createElement("span",{className:s("transition-opacity absolute",a&&"group-hover:opacity-0")},n),a&&t.createElement(u,{className:"h-3 w-3 absolute opacity-0 group-hover:opacity-100 transition-opacity","data-testid":m})))))})));
@@ -1,18 +1 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.EnhancedTableHeaderSearch = void 0;
7
- var react_1 = __importDefault(require("react"));
8
- var lucide_react_1 = require("lucide-react");
9
- var input_1 = require("./ui/input");
10
- var EnhancedTableHeaderSearch = function (_a) {
11
- var handleSearchInput = _a.handleSearchInput, loading = _a.loading, _b = _a.searchDisabled, searchDisabled = _b === void 0 ? false : _b, _c = _a.searchEnabled, searchEnabled = _c === void 0 ? true : _c, _d = _a.searchId, searchId = _d === void 0 ? "table-search" : _d, _e = _a.searchPlaceholder, searchPlaceholder = _e === void 0 ? "Search..." : _e, searchValue = _a.searchValue, testIdWrapper = _a.testIdWrapper, testIdInput = _a.testIdInput, testIdIcon = _a.testIdIcon, testIdLoading = _a.testIdLoading;
12
- return (react_1.default.createElement(react_1.default.Fragment, null, searchEnabled && (react_1.default.createElement("div", { className: "flex items-center gap-2 max-w-xl", "data-testid": testIdWrapper },
13
- react_1.default.createElement("div", { className: "relative flex-1" },
14
- react_1.default.createElement(lucide_react_1.Search, { className: "absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-muted-foreground", "data-testid": testIdIcon }),
15
- react_1.default.createElement(input_1.Input, { id: searchId, placeholder: searchPlaceholder, value: searchValue, onChange: function (e) { return handleSearchInput("search", e.target.value); }, disabled: searchDisabled || loading, className: "pl-9", "data-testid": testIdInput }),
16
- loading && testIdLoading && (react_1.default.createElement("span", { className: "sr-only", "data-testid": testIdLoading })))))));
17
- };
18
- exports.EnhancedTableHeaderSearch = EnhancedTableHeaderSearch;
1
+ "use strict";import e from"react";import{Search as f}from"lucide-react";import{Input as h}from"./ui/input";export const EnhancedTableHeaderSearch=({handleSearchInput:r,loading:a,searchDisabled:l=!1,searchEnabled:s=!0,searchId:m="table-search",searchPlaceholder:c="Search...",searchValue:n,testIdWrapper:d,testIdInput:o,testIdIcon:i,testIdLoading:t})=>e.createElement(e.Fragment,null,s&&e.createElement("div",{className:"flex items-center gap-2 max-w-xl","data-testid":d},e.createElement("div",{className:"relative flex-1"},e.createElement(f,{className:"absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-muted-foreground","data-testid":i}),e.createElement(h,{id:m,placeholder:c,value:n,onChange:p=>r("search",p.target.value),disabled:l||a,className:"pl-9","data-testid":o}),a&&t&&e.createElement("span",{className:"sr-only","data-testid":t}))));
@@ -1,329 +1 @@
1
- "use client";
2
- "use strict";
3
- var __assign = (this && this.__assign) || function () {
4
- __assign = Object.assign || function(t) {
5
- for (var s, i = 1, n = arguments.length; i < n; i++) {
6
- s = arguments[i];
7
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
8
- t[p] = s[p];
9
- }
10
- return t;
11
- };
12
- return __assign.apply(this, arguments);
13
- };
14
- var __importDefault = (this && this.__importDefault) || function (mod) {
15
- return (mod && mod.__esModule) ? mod : { "default": mod };
16
- };
17
- Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.EnhancedTable = exports.COMPONENT_TYPE = void 0;
19
- var react_1 = __importDefault(require("react"));
20
- var lucide_react_1 = require("lucide-react");
21
- var table_1 = require("./ui/table");
22
- var dropdown_menu_1 = require("./ui/dropdown-menu");
23
- var utils_1 = require("../lib/utils");
24
- var enhanced_table_footer_action_1 = require("./enhanced-table-footer-action");
25
- var enhanced_table_footer_page_1 = require("./enhanced-table-footer-page");
26
- var enhanced_table_footer_pagination_1 = require("./enhanced-table-footer-pagination");
27
- var popover_1 = require("./ui/popover");
28
- var enhanced_table_header_action_1 = require("./enhanced-table-header-action");
29
- var enhanced_table_header_search_1 = require("./enhanced-table-header-search");
30
- var badge_1 = require("./ui/badge");
31
- // Centralized component type values for table cell rendering
32
- var COMPONENT_TYPE;
33
- (function (COMPONENT_TYPE) {
34
- COMPONENT_TYPE["ID"] = "ID";
35
- COMPONENT_TYPE["BOLD_TEXT"] = "BOLD_TEXT";
36
- COMPONENT_TYPE["TEXT"] = "TEXT";
37
- COMPONENT_TYPE["OBJECT"] = "OBJECT";
38
- COMPONENT_TYPE["MULTIPLE_TEXT_LINES"] = "MULTIPLE_TEXT_LINES";
39
- COMPONENT_TYPE["CREATED_UPDATED_AT"] = "CREATED_UPDATED_AT";
40
- COMPONENT_TYPE["ACTIONS"] = "ACTIONS";
41
- COMPONENT_TYPE["BOOLEAN"] = "BOOLEAN";
42
- })(COMPONENT_TYPE || (exports.COMPONENT_TYPE = COMPONENT_TYPE = {}));
43
- var EnhancedTable = function (_a) {
44
- var currentPage = _a.currentPage, handleNextOnClick = _a.handleNextOnClick, handleOnSelect = _a.handleOnSelect, handlePreviousOnClick = _a.handlePreviousOnClick, handleSearchInput = _a.handleSearchInput, headerActions = _a.headerActions, isNextDisabled = _a.isNextDisabled, isPreviousDisabled = _a.isPreviousDisabled, _b = _a.isRTL, isRTL = _b === void 0 ? false : _b, listOptions = _a.listOptions, loading = _a.loading, _c = _a.nodeSelectKey, nodeSelectKey = _c === void 0 ? "pageLimit" : _c, numberOfFilters = _a.numberOfFilters, onClearFilters = _a.onClearFilters, pageLimit = _a.pageLimit, rowActions = _a.rowActions, _d = _a.searchDisabled, searchDisabled = _d === void 0 ? false : _d, _e = _a.searchEnabled, searchEnabled = _e === void 0 ? true : _e, _f = _a.searchId, searchId = _f === void 0 ? "table-search" : _f, _g = _a.searchPlaceholder, searchPlaceholder = _g === void 0 ? "Search..." : _g, searchValue = _a.searchValue, tableBodyCols = _a.tableBodyCols, tableBodyRows = _a.tableBodyRows, tableDescription = _a.tableDescription, tableHeading = _a.tableHeading, tableHeadItems = _a.tableHeadItems, totalPages = _a.totalPages, _h = _a.translationLabels, translationLabels = _h === void 0 ? {} : _h, testIdWrapper = _a.testIdWrapper, testIdHeading = _a.testIdHeading, testIdTableDescription = _a.testIdTableDescription, testIdSearch = _a.testIdSearch, testIdHeaderActions = _a.testIdHeaderActions, testIdHeaderActionPrefix = _a.testIdHeaderActionPrefix, testIdHeaderActionFilterBadge = _a.testIdHeaderActionFilterBadge, testIdHeaderActionClearFilters = _a.testIdHeaderActionClearFilters, testIdTableWrapper = _a.testIdTableWrapper, testIdRowPrefix = _a.testIdRowPrefix, testIdCellPrefix = _a.testIdCellPrefix, testIdRowActionPrefix = _a.testIdRowActionPrefix, testIdNoResults = _a.testIdNoResults, testIdLoadingRowPrefix = _a.testIdLoadingRowPrefix, testIdPaginationWrapper = _a.testIdPaginationWrapper, testIdFooterPagination = _a.testIdFooterPagination, testIdFooterPage = _a.testIdFooterPage, testIdFooterAction = _a.testIdFooterAction, testIdWrapperRtl = _a.testIdWrapperRtl, testIdHeadingRtl = _a.testIdHeadingRtl, testIdTableDescriptionRtl = _a.testIdTableDescriptionRtl, testIdSearchRtl = _a.testIdSearchRtl, testIdHeaderActionsRtl = _a.testIdHeaderActionsRtl, testIdHeaderActionPrefixRtl = _a.testIdHeaderActionPrefixRtl, testIdHeaderActionFilterBadgeRtl = _a.testIdHeaderActionFilterBadgeRtl, testIdHeaderActionClearFiltersRtl = _a.testIdHeaderActionClearFiltersRtl, testIdTableWrapperRtl = _a.testIdTableWrapperRtl, testIdRowPrefixRtl = _a.testIdRowPrefixRtl, testIdCellPrefixRtl = _a.testIdCellPrefixRtl, testIdRowActionPrefixRtl = _a.testIdRowActionPrefixRtl, testIdNoResultsRtl = _a.testIdNoResultsRtl, testIdLoadingRowPrefixRtl = _a.testIdLoadingRowPrefixRtl, testIdPaginationWrapperRtl = _a.testIdPaginationWrapperRtl, testIdFooterPaginationRtl = _a.testIdFooterPaginationRtl, testIdFooterPageRtl = _a.testIdFooterPageRtl, testIdFooterActionRtl = _a.testIdFooterActionRtl;
45
- // Default translation values
46
- var defaultLabels = {
47
- booleanYes: "Yes",
48
- booleanNo: "No",
49
- noResultsFound: "No results found.",
50
- previousPage: "Previous page",
51
- nextPage: "Next page",
52
- page: "Page",
53
- of: "of",
54
- loading: "Loading",
55
- rowsPerPage: "Rows per page:",
56
- };
57
- // Merge provided labels with defaults
58
- var labels = __assign(__assign({}, defaultLabels), translationLabels);
59
- // Resolve which test ids to use depending on `isRTL` mode.
60
- var _testIdWrapper = isRTL
61
- ? (testIdWrapperRtl !== null && testIdWrapperRtl !== void 0 ? testIdWrapperRtl : testIdWrapper)
62
- : testIdWrapper;
63
- var _testIdHeading = isRTL
64
- ? (testIdHeadingRtl !== null && testIdHeadingRtl !== void 0 ? testIdHeadingRtl : testIdHeading)
65
- : testIdHeading;
66
- var _testIdTableDescription = isRTL
67
- ? (testIdTableDescriptionRtl !== null && testIdTableDescriptionRtl !== void 0 ? testIdTableDescriptionRtl : testIdTableDescription)
68
- : testIdTableDescription;
69
- var _testIdSearch = isRTL
70
- ? (testIdSearchRtl !== null && testIdSearchRtl !== void 0 ? testIdSearchRtl : testIdSearch)
71
- : testIdSearch;
72
- var _testIdHeaderActions = isRTL
73
- ? (testIdHeaderActionsRtl !== null && testIdHeaderActionsRtl !== void 0 ? testIdHeaderActionsRtl : testIdHeaderActions)
74
- : testIdHeaderActions;
75
- var _testIdHeaderActionPrefix = isRTL
76
- ? (testIdHeaderActionPrefixRtl !== null && testIdHeaderActionPrefixRtl !== void 0 ? testIdHeaderActionPrefixRtl : testIdHeaderActionPrefix)
77
- : testIdHeaderActionPrefix;
78
- var _testIdHeaderActionFilterBadge = isRTL
79
- ? (testIdHeaderActionFilterBadgeRtl !== null && testIdHeaderActionFilterBadgeRtl !== void 0 ? testIdHeaderActionFilterBadgeRtl : testIdHeaderActionFilterBadge)
80
- : testIdHeaderActionFilterBadge;
81
- var _testIdHeaderActionClearFilters = isRTL
82
- ? (testIdHeaderActionClearFiltersRtl !== null && testIdHeaderActionClearFiltersRtl !== void 0 ? testIdHeaderActionClearFiltersRtl : testIdHeaderActionClearFilters)
83
- : testIdHeaderActionClearFilters;
84
- var _testIdTableWrapper = isRTL
85
- ? (testIdTableWrapperRtl !== null && testIdTableWrapperRtl !== void 0 ? testIdTableWrapperRtl : testIdTableWrapper)
86
- : testIdTableWrapper;
87
- var _testIdRowPrefix = isRTL
88
- ? (testIdRowPrefixRtl !== null && testIdRowPrefixRtl !== void 0 ? testIdRowPrefixRtl : testIdRowPrefix)
89
- : testIdRowPrefix;
90
- var _testIdCellPrefix = isRTL
91
- ? (testIdCellPrefixRtl !== null && testIdCellPrefixRtl !== void 0 ? testIdCellPrefixRtl : testIdCellPrefix)
92
- : testIdCellPrefix;
93
- var _testIdRowActionPrefix = isRTL
94
- ? (testIdRowActionPrefixRtl !== null && testIdRowActionPrefixRtl !== void 0 ? testIdRowActionPrefixRtl : testIdRowActionPrefix)
95
- : testIdRowActionPrefix;
96
- var _testIdNoResults = isRTL
97
- ? (testIdNoResultsRtl !== null && testIdNoResultsRtl !== void 0 ? testIdNoResultsRtl : testIdNoResults)
98
- : testIdNoResults;
99
- var _testIdLoadingRowPrefix = isRTL
100
- ? (testIdLoadingRowPrefixRtl !== null && testIdLoadingRowPrefixRtl !== void 0 ? testIdLoadingRowPrefixRtl : testIdLoadingRowPrefix)
101
- : testIdLoadingRowPrefix;
102
- var _testIdPaginationWrapper = isRTL
103
- ? (testIdPaginationWrapperRtl !== null && testIdPaginationWrapperRtl !== void 0 ? testIdPaginationWrapperRtl : testIdPaginationWrapper)
104
- : testIdPaginationWrapper;
105
- var _testIdFooterPagination = isRTL
106
- ? (testIdFooterPaginationRtl !== null && testIdFooterPaginationRtl !== void 0 ? testIdFooterPaginationRtl : testIdFooterPagination)
107
- : testIdFooterPagination;
108
- var _testIdFooterPage = isRTL
109
- ? (testIdFooterPageRtl !== null && testIdFooterPageRtl !== void 0 ? testIdFooterPageRtl : testIdFooterPage)
110
- : testIdFooterPage;
111
- var _testIdFooterAction = isRTL
112
- ? (testIdFooterActionRtl !== null && testIdFooterActionRtl !== void 0 ? testIdFooterActionRtl : testIdFooterAction)
113
- : testIdFooterAction;
114
- var renderCellContent = function (row, col, rowIndex) {
115
- var _a, _b;
116
- // Helper to safely resolve nested keys (max depth 3)
117
- var resolveValue = function (source, key) {
118
- if (!key)
119
- return source;
120
- if (typeof key === "string") {
121
- // Handle colon-separated nested keys
122
- if (key.includes(":")) {
123
- var keys = key.split(":");
124
- var cur = source;
125
- for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {
126
- var k = keys_2[_i];
127
- if (cur == null || typeof cur !== "object")
128
- return undefined;
129
- cur = cur[k];
130
- }
131
- return cur;
132
- }
133
- // Simple key access
134
- if (source && typeof source === "object")
135
- return source[key];
136
- return undefined;
137
- }
138
- // array of keys - try each until we find a defined value
139
- for (var _a = 0, key_1 = key; _a < key_1.length; _a++) {
140
- var k = key_1[_a];
141
- var val = resolveValue(source, k);
142
- if (val != null)
143
- return val;
144
- }
145
- return undefined;
146
- };
147
- var getProp = function (obj, prop) {
148
- if (obj &&
149
- typeof obj === "object" &&
150
- prop in obj)
151
- return obj[prop];
152
- return undefined;
153
- };
154
- // Resolve value (supports nested key arrays)
155
- var value = resolveValue(row, col.key);
156
- // Normalize componentType so external string enums (like VISTA_TABLE_CELL_TYPE)
157
- // remain compatible with this table. Unknown/unsupported types fall back to TEXT.
158
- var normalizeComponentType = function (c) {
159
- var _a;
160
- if (!c)
161
- return undefined;
162
- if (Object.values(COMPONENT_TYPE).includes(c))
163
- return c;
164
- // Map common external values to our ComponentType using object notation
165
- var MAP = {
166
- ID: COMPONENT_TYPE.ID,
167
- BOLD_TEXT: COMPONENT_TYPE.BOLD_TEXT,
168
- BOOLEAN: COMPONENT_TYPE.BOOLEAN,
169
- ACTIONS: COMPONENT_TYPE.ACTIONS,
170
- TEXT: COMPONENT_TYPE.TEXT,
171
- OBJECT: COMPONENT_TYPE.OBJECT,
172
- MULTIPLE_TEXT_LINES: COMPONENT_TYPE.MULTIPLE_TEXT_LINES,
173
- CREATED_UPDATED_AT: COMPONENT_TYPE.CREATED_UPDATED_AT,
174
- };
175
- return (_a = MAP[String(c)]) !== null && _a !== void 0 ? _a : COMPONENT_TYPE.TEXT;
176
- };
177
- var normalizedType = normalizeComponentType(col.componentType);
178
- if (normalizedType === COMPONENT_TYPE.ACTIONS) {
179
- return (react_1.default.createElement(dropdown_menu_1.DropdownMenu, null,
180
- react_1.default.createElement(dropdown_menu_1.DropdownMenuTrigger, { asChild: true },
181
- react_1.default.createElement(lucide_react_1.MoreHorizontal, { className: "h-4 w-4" })),
182
- react_1.default.createElement(dropdown_menu_1.DropdownMenuContent, { align: "end" }, rowActions
183
- .filter(function (_a) {
184
- var enabled = _a.enabled;
185
- return typeof enabled === "function" ? enabled(row) : enabled;
186
- })
187
- .sort(function (a, b) { return (a.order || 0) - (b.order || 0); })
188
- .map(function (action, index) { return (react_1.default.createElement(dropdown_menu_1.DropdownMenuItem, { key: action.id || action.key || index, "data-testid": _testIdRowActionPrefix
189
- ? "".concat(_testIdRowActionPrefix, "-").concat(rowIndex, "-").concat(index)
190
- : undefined, className: (0, utils_1.cn)(action.variant === "destructive" &&
191
- "text-destructive focus:text-destructive"), onClick: function () { var _a; return (_a = action.handleOnClick) === null || _a === void 0 ? void 0 : _a.call(action, row); } }, action.label)); }))));
192
- }
193
- if (normalizedType === COMPONENT_TYPE.ID) {
194
- return (react_1.default.createElement(popover_1.Popover, null,
195
- react_1.default.createElement(popover_1.PopoverTrigger, { asChild: true },
196
- react_1.default.createElement("span", { className: "text-xs text-muted-foreground font-mono" }, typeof value === "string"
197
- ? "".concat(value.substring(0, 8), "...")
198
- : String(value || ""))),
199
- react_1.default.createElement(popover_1.PopoverContent, null,
200
- react_1.default.createElement("span", { className: "text-xs text-muted-foreground font-mono" }, col.textFormatter
201
- ? col.textFormatter(value, row)
202
- : String(value)))));
203
- }
204
- if (normalizedType === COMPONENT_TYPE.BOLD_TEXT) {
205
- var formatted = col.textFormatter
206
- ? col.textFormatter(value, row)
207
- : String(value || "");
208
- return react_1.default.createElement("span", { className: "font-semibold" }, formatted);
209
- }
210
- if (normalizedType === COMPONENT_TYPE.BOOLEAN) {
211
- var isTrue = Boolean(value);
212
- return (react_1.default.createElement(badge_1.Badge, { variant: "secondary", className: (0, utils_1.cn)("text-white font-medium", isTrue
213
- ? "bg-green-500 hover:bg-green-600"
214
- : "bg-red-500 hover:bg-red-600") }, isTrue ? labels.booleanYes : labels.booleanNo));
215
- }
216
- // OBJECT => nested property path supplied as array of colon-separated strings
217
- // e.g., ["user:company", "profile:department"] with fallback support
218
- // If first path is undefined, try the next one. If all undefined, render '-'
219
- if (normalizedType === COMPONENT_TYPE.OBJECT) {
220
- var nested = void 0;
221
- // Key must be an array of colon-separated strings
222
- if (Array.isArray(col.key)) {
223
- // Try each key path until we find a defined value
224
- for (var _i = 0, _c = col.key; _i < _c.length; _i++) {
225
- var keyPath = _c[_i];
226
- if (typeof keyPath === "string" && keyPath.includes(":")) {
227
- var keys = keyPath.split(":");
228
- var cur = row;
229
- var found = true;
230
- for (var _d = 0, keys_1 = keys; _d < keys_1.length; _d++) {
231
- var k = keys_1[_d];
232
- if (cur == null || typeof cur !== "object") {
233
- found = false;
234
- break;
235
- }
236
- cur = cur[k];
237
- }
238
- if (found && cur != null) {
239
- nested = cur;
240
- break;
241
- }
242
- }
243
- }
244
- }
245
- // If all paths are undefined, render '-'
246
- if (nested == null)
247
- return react_1.default.createElement("span", null, "-");
248
- // If nested is an object, try to find a primitive value
249
- if (typeof nested === "object") {
250
- var primitive = Object.values(nested).find(function (v) {
251
- return ["string", "number", "boolean"].includes(typeof v);
252
- });
253
- var toRender = primitive !== null && primitive !== void 0 ? primitive : JSON.stringify(nested);
254
- return (react_1.default.createElement("span", null, col.textFormatter
255
- ? col.textFormatter(toRender, row)
256
- : String(toRender)));
257
- }
258
- // Nested is a primitive value
259
- return (react_1.default.createElement("span", null, col.textFormatter ? col.textFormatter(nested, row) : String(nested)));
260
- } // MULTIPLE_TEXT_LINES => col.key is an array of keys, render up to 3 lines
261
- if (normalizedType === COMPONENT_TYPE.MULTIPLE_TEXT_LINES) {
262
- var keys = Array.isArray(col.key) ? col.key : [];
263
- var lines = keys.slice(0, 3).map(function (k) {
264
- var v = resolveValue(row, k);
265
- return v == null ? "" : String(v);
266
- });
267
- return (react_1.default.createElement("div", { className: "flex flex-col" }, lines.map(function (line, idx) { return (react_1.default.createElement("span", { key: idx, className: "text-sm" }, col.textFormatter ? col.textFormatter(line, row) : line)); })));
268
- }
269
- // CREATED_UPDATED_AT => show createdAt and updatedAt from the object (or nested object)
270
- if (normalizedType === COMPONENT_TYPE.CREATED_UPDATED_AT) {
271
- var target = resolveValue(row, col.key);
272
- var created = (_a = getProp(target, "createdAt")) !== null && _a !== void 0 ? _a : getProp(row, "createdAt");
273
- var updated = (_b = getProp(target, "updatedAt")) !== null && _b !== void 0 ? _b : getProp(row, "updatedAt");
274
- var fmt = function (d) {
275
- if (d == null)
276
- return "";
277
- var date = d instanceof Date ? d : new Date(String(d));
278
- if (isNaN(date.getTime()))
279
- return String(d);
280
- return date.toLocaleString();
281
- };
282
- return (react_1.default.createElement("div", { className: "flex flex-col text-sm text-muted-foreground" },
283
- react_1.default.createElement("span", null, fmt(created)),
284
- react_1.default.createElement("span", null, fmt(updated))));
285
- }
286
- return (react_1.default.createElement("span", null, col.textFormatter
287
- ? col.textFormatter(value, row)
288
- : String(value || "")));
289
- };
290
- // Create loading skeleton rows
291
- var renderLoadingRows = function () {
292
- return Array.from({ length: pageLimit || 5 }).map(function (_, index) { return (react_1.default.createElement(table_1.TableRow, { key: "loading-".concat(index), className: "hover:bg-muted/50", "data-testid": _testIdLoadingRowPrefix
293
- ? "".concat(_testIdLoadingRowPrefix, "-").concat(index)
294
- : undefined }, tableHeadItems.map(function (_, colIndex) { return (react_1.default.createElement(table_1.TableCell, { key: colIndex, className: "py-4" },
295
- react_1.default.createElement("div", { className: "h-4 bg-muted animate-pulse rounded w-full" }))); }))); });
296
- };
297
- return (react_1.default.createElement("div", { className: "space-y-4", "data-testid": _testIdWrapper },
298
- react_1.default.createElement("div", { className: "flex items-center justify-between" },
299
- react_1.default.createElement("div", { className: "space-y-1" },
300
- react_1.default.createElement("h2", { className: "text-2xl font-bold tracking-tight", "data-testid": _testIdHeading }, tableHeading),
301
- tableDescription && (react_1.default.createElement("p", { className: "text-muted-foreground", "data-testid": _testIdTableDescription }, tableDescription))),
302
- react_1.default.createElement("div", { className: "flex flex-row items-center justify-end gap-2" },
303
- react_1.default.createElement("div", { "data-testid": _testIdSearch },
304
- react_1.default.createElement(enhanced_table_header_search_1.EnhancedTableHeaderSearch, { handleSearchInput: handleSearchInput, loading: loading, searchDisabled: searchDisabled, searchEnabled: searchEnabled, searchId: searchId, searchPlaceholder: searchPlaceholder, searchValue: searchValue })),
305
- react_1.default.createElement("div", { "data-testid": _testIdHeaderActions },
306
- react_1.default.createElement(enhanced_table_header_action_1.EnhancedTableHeaderAction, { headerActions: headerActions, numberOfFilters: numberOfFilters, onClearFilters: onClearFilters, testIdActionPrefix: _testIdHeaderActionPrefix, testIdClearFilters: _testIdHeaderActionClearFilters, testIdFilterBadge: _testIdHeaderActionFilterBadge })))),
307
- react_1.default.createElement("div", { className: "border rounded-md", "data-testid": _testIdTableWrapper },
308
- react_1.default.createElement(table_1.Table, null,
309
- react_1.default.createElement(table_1.TableHeader, null,
310
- react_1.default.createElement(table_1.TableRow, null, tableHeadItems.map(function (header, index) { return (react_1.default.createElement(table_1.TableHead, { key: index, style: { width: header.width }, className: (0, utils_1.cn)("font-medium", index === 0 && "rounded-tl-md", index === tableHeadItems.length - 1 && "rounded-tr-md") }, header.label)); }))),
311
- react_1.default.createElement(table_1.TableBody, null, loading ? (renderLoadingRows()) : tableBodyRows.length === 0 ? (react_1.default.createElement(table_1.TableRow, null,
312
- react_1.default.createElement(table_1.TableCell, { colSpan: tableHeadItems.length, className: "h-24 text-center text-muted-foreground", "data-testid": _testIdNoResults }, labels.noResultsFound))) : (tableBodyRows.map(function (row, rowIndex) { return (react_1.default.createElement(table_1.TableRow, { key: rowIndex, className: "hover:bg-muted/50", "data-testid": _testIdRowPrefix
313
- ? "".concat(_testIdRowPrefix, "-").concat(rowIndex)
314
- : undefined }, tableBodyCols.map(function (col, colIndex) { return (react_1.default.createElement(table_1.TableCell, { key: colIndex, className: (0, utils_1.cn)("py-4 cursor-pointer"), "data-testid": _testIdCellPrefix
315
- ? "".concat(_testIdCellPrefix, "-").concat(rowIndex, "-").concat(colIndex)
316
- : undefined, onClick: function (e) {
317
- var _a;
318
- return (_a = navigator.clipboard) === null || _a === void 0 ? void 0 : _a.writeText(e.currentTarget.textContent || "");
319
- } }, renderCellContent(row, col, rowIndex))); }))); }))))),
320
- react_1.default.createElement("div", { className: "flex items-center justify-between", "data-testid": _testIdPaginationWrapper },
321
- react_1.default.createElement("div", { "data-testid": _testIdFooterPagination },
322
- react_1.default.createElement(enhanced_table_footer_pagination_1.EnhancedTableFooterPagination, { handleOnSelect: handleOnSelect, isRTL: isRTL, listOptions: listOptions, loading: loading, nodeSelectKey: nodeSelectKey, pageLimit: pageLimit, rowsPerPageLabel: labels.rowsPerPage, totalPages: totalPages })),
323
- react_1.default.createElement("div", { className: "flex items-center gap-4" },
324
- react_1.default.createElement("div", { "data-testid": _testIdFooterPage },
325
- react_1.default.createElement(enhanced_table_footer_page_1.EnhancedTableFooterPage, { currentPage: currentPage, isRTL: isRTL, loading: loading, loadingLabel: labels.loading, ofLabel: labels.of, pageLabel: labels.page, totalPages: totalPages })),
326
- react_1.default.createElement("div", { "data-testid": _testIdFooterAction },
327
- react_1.default.createElement(enhanced_table_footer_action_1.EnhancedTableFooterAction, { handleNextOnClick: handleNextOnClick, handlePreviousOnClick: handlePreviousOnClick, isNextDisabled: isNextDisabled, isPreviousDisabled: isPreviousDisabled, isRTL: isRTL, loading: loading, nextPageLabel: labels.nextPage, previousPageLabel: labels.previousPage }))))));
328
- };
329
- exports.EnhancedTable = EnhancedTable;
1
+ "use strict";"use client";import e from"react";import{MoreHorizontal as We}from"lucide-react";import{Table as He,TableBody as Ie,TableCell as z,TableHead as Re,TableHeader as et,TableRow as _}from"./ui/table";import{DropdownMenu as tt,DropdownMenuContent as nt,DropdownMenuItem as at,DropdownMenuTrigger as rt}from"./ui/dropdown-menu";import{cn as h}from"../lib/utils";import{EnhancedTableFooterAction as lt}from"./enhanced-table-footer-action";import{EnhancedTableFooterPage as ot}from"./enhanced-table-footer-page";import{EnhancedTableFooterPagination as mt}from"./enhanced-table-footer-pagination";import{Popover as st,PopoverContent as ut,PopoverTrigger as ct}from"./ui/popover";import{EnhancedTableHeaderAction as it}from"./enhanced-table-header-action";import{EnhancedTableHeaderSearch as dt}from"./enhanced-table-header-search";import{Badge as ft}from"./ui/badge";export var COMPONENT_TYPE;(function(s){s.ID="ID",s.BOLD_TEXT="BOLD_TEXT",s.TEXT="TEXT",s.OBJECT="OBJECT",s.MULTIPLE_TEXT_LINES="MULTIPLE_TEXT_LINES",s.CREATED_UPDATED_AT="CREATED_UPDATED_AT",s.ACTIONS="ACTIONS",s.BOOLEAN="BOOLEAN"})(COMPONENT_TYPE||(COMPONENT_TYPE={}));export const EnhancedTable=({currentPage:s,handleNextOnClick:Ee,handleOnSelect:ve,handlePreviousOnClick:pe,handleSearchInput:ge,headerActions:Te,isNextDisabled:be,isPreviousDisabled:ye,isRTL:l=!1,listOptions:_e,loading:v,nodeSelectKey:he="pageLimit",numberOfFilters:Ne,onClearFilters:xe,pageLimit:V,rowActions:De,searchDisabled:Ae=!1,searchEnabled:Se=!0,searchId:ke="table-search",searchPlaceholder:Oe="Search...",searchValue:Ce,tableBodyCols:Le,tableBodyRows:K,tableDescription:q,tableHeading:Be,tableHeadItems:g,totalPages:G,translationLabels:Xe={},testIdWrapper:Q,testIdHeading:Z,testIdTableDescription:w,testIdSearch:Y,testIdHeaderActions:W,testIdHeaderActionPrefix:H,testIdHeaderActionFilterBadge:I,testIdHeaderActionClearFilters:R,testIdTableWrapper:ee,testIdRowPrefix:te,testIdCellPrefix:ne,testIdRowActionPrefix:ae,testIdNoResults:re,testIdLoadingRowPrefix:le,testIdPaginationWrapper:oe,testIdFooterPagination:me,testIdFooterPage:se,testIdFooterAction:ue,testIdWrapperRtl:N,testIdHeadingRtl:x,testIdTableDescriptionRtl:D,testIdSearchRtl:A,testIdHeaderActionsRtl:S,testIdHeaderActionPrefixRtl:k,testIdHeaderActionFilterBadgeRtl:O,testIdHeaderActionClearFiltersRtl:C,testIdTableWrapperRtl:L,testIdRowPrefixRtl:B,testIdCellPrefixRtl:X,testIdRowActionPrefixRtl:$,testIdNoResultsRtl:F,testIdLoadingRowPrefixRtl:P,testIdPaginationWrapperRtl:U,testIdFooterPaginationRtl:j,testIdFooterPageRtl:J,testIdFooterActionRtl:M})=>{const i=Object.assign(Object.assign({},{booleanYes:"Yes",booleanNo:"No",noResultsFound:"No results found.",previousPage:"Previous page",nextPage:"Next page",page:"Page",of:"of",loading:"Loading",rowsPerPage:"Rows per page:"}),Xe),$e=l?N??Q:Q,Fe=l?x??Z:Z,Pe=l?D??w:w,Ue=l?A??Y:Y,je=l?S??W:W,Je=l?k??H:H,Me=l?O??I:I,ze=l?C??R:R,Ve=l?L??ee:ee,ce=l?B??te:te,ie=l?X??ne:ne,de=l?$??ae:ae,Ke=l?F??re:re,fe=l?P??le:le,qe=l?U??oe:oe,Ge=l?j??me:me,Qe=l?J??se:se,Ze=l?M??ue:ue,we=(o,n,T)=>{var d,p;const f=(t,a)=>{if(!a)return t;if(typeof a=="string"){if(a.includes(":")){const m=a.split(":");let r=t;for(const c of m){if(r==null||typeof r!="object")return;r=r[c]}return r}return t&&typeof t=="object"?t[a]:void 0}for(const m of a){const r=f(t,m);if(r!=null)return r}},b=(t,a)=>{if(t&&typeof t=="object"&&a in t)return t[a]},u=f(o,n.key),E=(t=>{var a;return t?Object.values(COMPONENT_TYPE).includes(t)?t:(a={ID:COMPONENT_TYPE.ID,BOLD_TEXT:COMPONENT_TYPE.BOLD_TEXT,BOOLEAN:COMPONENT_TYPE.BOOLEAN,ACTIONS:COMPONENT_TYPE.ACTIONS,TEXT:COMPONENT_TYPE.TEXT,OBJECT:COMPONENT_TYPE.OBJECT,MULTIPLE_TEXT_LINES:COMPONENT_TYPE.MULTIPLE_TEXT_LINES,CREATED_UPDATED_AT:COMPONENT_TYPE.CREATED_UPDATED_AT}[String(t)])!==null&&a!==void 0?a:COMPONENT_TYPE.TEXT:void 0})(n.componentType);if(E===COMPONENT_TYPE.ACTIONS)return e.createElement(tt,null,e.createElement(rt,{asChild:!0},e.createElement(We,{className:"h-4 w-4"})),e.createElement(nt,{align:"end"},De.filter(({enabled:t})=>typeof t=="function"?t(o):t).sort((t,a)=>(t.order||0)-(a.order||0)).map((t,a)=>e.createElement(at,{key:t.id||t.key||a,"data-testid":de?`${de}-${T}-${a}`:void 0,className:h(t.variant==="destructive"&&"text-destructive focus:text-destructive"),onClick:()=>{var m;return(m=t.handleOnClick)===null||m===void 0?void 0:m.call(t,o)}},t.label))));if(E===COMPONENT_TYPE.ID)return e.createElement(st,null,e.createElement(ct,{asChild:!0},e.createElement("span",{className:"text-xs text-muted-foreground font-mono"},typeof u=="string"?`${u.substring(0,8)}...`:String(u||""))),e.createElement(ut,null,e.createElement("span",{className:"text-xs text-muted-foreground font-mono"},n.textFormatter?n.textFormatter(u,o):String(u))));if(E===COMPONENT_TYPE.BOLD_TEXT){const t=n.textFormatter?n.textFormatter(u,o):String(u||"");return e.createElement("span",{className:"font-semibold"},t)}if(E===COMPONENT_TYPE.BOOLEAN){const t=!!u;return e.createElement(ft,{variant:"secondary",className:h("text-white font-medium",t?"bg-green-500 hover:bg-green-600":"bg-red-500 hover:bg-red-600")},t?i.booleanYes:i.booleanNo)}if(E===COMPONENT_TYPE.OBJECT){let t;if(Array.isArray(n.key)){for(const a of n.key)if(typeof a=="string"&&a.includes(":")){const m=a.split(":");let r=o,c=!0;for(const y of m){if(r==null||typeof r!="object"){c=!1;break}r=r[y]}if(c&&r!=null){t=r;break}}}if(t==null)return e.createElement("span",null,"-");if(typeof t=="object"){const a=Object.values(t).find(r=>["string","number","boolean"].includes(typeof r)),m=a??JSON.stringify(t);return e.createElement("span",null,n.textFormatter?n.textFormatter(m,o):String(m))}return e.createElement("span",null,n.textFormatter?n.textFormatter(t,o):String(t))}if(E===COMPONENT_TYPE.MULTIPLE_TEXT_LINES){const a=(Array.isArray(n.key)?n.key:[]).slice(0,3).map(m=>{const r=f(o,m);return r==null?"":String(r)});return e.createElement("div",{className:"flex flex-col"},a.map((m,r)=>e.createElement("span",{key:r,className:"text-sm"},n.textFormatter?n.textFormatter(m,o):m)))}if(E===COMPONENT_TYPE.CREATED_UPDATED_AT){const t=f(o,n.key),a=(d=b(t,"createdAt"))!==null&&d!==void 0?d:b(o,"createdAt"),m=(p=b(t,"updatedAt"))!==null&&p!==void 0?p:b(o,"updatedAt"),r=c=>{if(c==null)return"";const y=c instanceof Date?c:new Date(String(c));return isNaN(y.getTime())?String(c):y.toLocaleString()};return e.createElement("div",{className:"flex flex-col text-sm text-muted-foreground"},e.createElement("span",null,r(a)),e.createElement("span",null,r(m)))}return e.createElement("span",null,n.textFormatter?n.textFormatter(u,o):String(u||""))},Ye=()=>Array.from({length:V||5}).map((o,n)=>e.createElement(_,{key:`loading-${n}`,className:"hover:bg-muted/50","data-testid":fe?`${fe}-${n}`:void 0},g.map((T,d)=>e.createElement(z,{key:d,className:"py-4"},e.createElement("div",{className:"h-4 bg-muted animate-pulse rounded w-full"})))));return e.createElement("div",{className:"space-y-4","data-testid":$e},e.createElement("div",{className:"flex items-center justify-between"},e.createElement("div",{className:"space-y-1"},e.createElement("h2",{className:"text-2xl font-bold tracking-tight","data-testid":Fe},Be),q&&e.createElement("p",{className:"text-muted-foreground","data-testid":Pe},q)),e.createElement("div",{className:"flex flex-row items-center justify-end gap-2"},e.createElement("div",{"data-testid":Ue},e.createElement(dt,{handleSearchInput:ge,loading:v,searchDisabled:Ae,searchEnabled:Se,searchId:ke,searchPlaceholder:Oe,searchValue:Ce})),e.createElement("div",{"data-testid":je},e.createElement(it,{headerActions:Te,numberOfFilters:Ne,onClearFilters:xe,testIdActionPrefix:Je,testIdClearFilters:ze,testIdFilterBadge:Me})))),e.createElement("div",{className:"border rounded-md","data-testid":Ve},e.createElement(He,null,e.createElement(et,null,e.createElement(_,null,g.map((o,n)=>e.createElement(Re,{key:n,style:{width:o.width},className:h("font-medium",n===0&&"rounded-tl-md",n===g.length-1&&"rounded-tr-md")},o.label)))),e.createElement(Ie,null,v?Ye():K.length===0?e.createElement(_,null,e.createElement(z,{colSpan:g.length,className:"h-24 text-center text-muted-foreground","data-testid":Ke},i.noResultsFound)):K.map((o,n)=>e.createElement(_,{key:n,className:"hover:bg-muted/50","data-testid":ce?`${ce}-${n}`:void 0},Le.map((T,d)=>e.createElement(z,{key:d,className:h("py-4 cursor-pointer"),"data-testid":ie?`${ie}-${n}-${d}`:void 0,onClick:p=>{var f;return(f=navigator.clipboard)===null||f===void 0?void 0:f.writeText(p.currentTarget.textContent||"")}},we(o,T,n)))))))),e.createElement("div",{className:"flex items-center justify-between","data-testid":qe},e.createElement("div",{"data-testid":Ge},e.createElement(mt,{handleOnSelect:ve,isRTL:l,listOptions:_e,loading:v,nodeSelectKey:he,pageLimit:V,rowsPerPageLabel:i.rowsPerPage,totalPages:G})),e.createElement("div",{className:"flex items-center gap-4"},e.createElement("div",{"data-testid":Qe},e.createElement(ot,{currentPage:s,isRTL:l,loading:v,loadingLabel:i.loading,ofLabel:i.of,pageLabel:i.page,totalPages:G})),e.createElement("div",{"data-testid":Ze},e.createElement(lt,{handleNextOnClick:Ee,handlePreviousOnClick:pe,isNextDisabled:be,isPreviousDisabled:ye,isRTL:l,loading:v,nextPageLabel:i.nextPage,previousPageLabel:i.previousPage})))))};