@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,41 +1 @@
1
- "use client";
2
- "use strict";
3
- var __rest = (this && this.__rest) || function (s, e) {
4
- var t = {};
5
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
6
- t[p] = s[p];
7
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
8
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
9
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
10
- t[p[i]] = s[p[i]];
11
- }
12
- return t;
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.AppSidebar = void 0;
19
- var react_1 = __importDefault(require("react"));
20
- var nav_main_1 = require("./nav-main");
21
- var nav_projects_1 = require("./nav-projects");
22
- var nav_user_1 = require("./nav-user");
23
- var team_switcher_1 = require("./team-switcher");
24
- var sidebar_1 = require("./sidebar");
25
- var AppSidebar = function (_a) {
26
- var props = __rest(_a, []);
27
- return (react_1.default.createElement(sidebar_1.Sidebar, { collapsible: "icon" },
28
- react_1.default.createElement(sidebar_1.SidebarHeader, null,
29
- react_1.default.createElement(team_switcher_1.TeamSwitcher, { profiles: props.profiles })),
30
- react_1.default.createElement(sidebar_1.SidebarContent, null,
31
- react_1.default.createElement(nav_main_1.NavMain, { items: props.navItems }),
32
- react_1.default.createElement(nav_projects_1.NavProjects, { apps: props.apps, offerUrl: props.offerUrl })),
33
- react_1.default.createElement(sidebar_1.SidebarFooter, null,
34
- react_1.default.createElement(nav_user_1.NavUser, { footerNavItems: props.footerNavItems, handleSignOut: props.handleSignOut, user: {
35
- email: props.email,
36
- name: props.username,
37
- avatar: props.avatar,
38
- } })),
39
- react_1.default.createElement(sidebar_1.SidebarRail, null)));
40
- };
41
- exports.AppSidebar = AppSidebar;
1
+ "use strict";"use client";var l=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,r=Object.getOwnPropertySymbols(t);o<r.length;o++)e.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(t,r[o])&&(n[r[o]]=t[r[o]]);return n};import a from"react";import{NavMain as m}from"./nav-main";import{NavProjects as i}from"./nav-projects";import{NavUser as p}from"./nav-user";import{TeamSwitcher as c}from"./team-switcher";import{Sidebar as f,SidebarContent as s,SidebarFooter as u,SidebarHeader as b,SidebarRail as v}from"./sidebar";export const AppSidebar=t=>{var e=l(t,[]);return a.createElement(f,{collapsible:"icon"},a.createElement(b,null,a.createElement(c,{profiles:e.profiles})),a.createElement(s,null,a.createElement(m,{items:e.navItems}),a.createElement(i,{apps:e.apps,offerUrl:e.offerUrl})),a.createElement(u,null,a.createElement(p,{footerNavItems:e.footerNavItems,handleSignOut:e.handleSignOut,user:{email:e.email,name:e.username,avatar:e.avatar}})),a.createElement(v,null))};
@@ -1,21 +1 @@
1
- "use client";
2
- "use strict";
3
- var __importDefault = (this && this.__importDefault) || function (mod) {
4
- return (mod && mod.__esModule) ? mod : { "default": mod };
5
- };
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.AudioControl = void 0;
8
- var react_1 = __importDefault(require("react"));
9
- var button_1 = require("./ui/button");
10
- var enhanced_label_1 = require("./enhanced-label");
11
- var AudioControl = function (_a) {
12
- var audioUrl = _a.audioUrl, id = _a.id, label = _a.label, onDelete = _a.onDelete, onGenerate = _a.onGenerate, _b = _a.required, required = _b === void 0 ? false : _b;
13
- return (react_1.default.createElement("div", { className: "space-y-2" },
14
- label && (react_1.default.createElement(enhanced_label_1.EnhancedLabel, { htmlFor: id, required: required }, label)),
15
- !audioUrl && (react_1.default.createElement("div", { className: "flex gap-2" },
16
- react_1.default.createElement(button_1.Button, { type: "button", onClick: onGenerate, variant: "outline", className: "flex-1" }, "Generate Audio"),
17
- react_1.default.createElement(button_1.Button, { type: "button", onClick: onDelete, variant: "destructive", className: "flex-1" }, "Delete Audio"))),
18
- audioUrl && (react_1.default.createElement("div", { className: "mt-2 rounded-md border border-gray-200 bg-gray-50 p-3" },
19
- react_1.default.createElement("audio", { controls: true, className: "w-full", src: audioUrl }, "Your browser does not support the audio element.")))));
20
- };
21
- exports.AudioControl = AudioControl;
1
+ "use strict";"use client";import e from"react";import{Button as a}from"./ui/button";import{EnhancedLabel as m}from"./enhanced-label";export const AudioControl=({audioUrl:t,id:o,label:r,onDelete:n,onGenerate:l,required:c=!1})=>e.createElement("div",{className:"space-y-2"},r&&e.createElement(m,{htmlFor:o,required:c},r),!t&&e.createElement("div",{className:"flex gap-2"},e.createElement(a,{type:"button",onClick:l,variant:"outline",className:"flex-1"},"Generate Audio"),e.createElement(a,{type:"button",onClick:n,variant:"destructive",className:"flex-1"},"Delete Audio")),t&&e.createElement("div",{className:"mt-2 rounded-md border border-gray-200 bg-gray-50 p-3"},e.createElement("audio",{controls:!0,className:"w-full",src:t},"Your browser does not support the audio element.")));
@@ -1,67 +1 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.Dashboard = void 0;
37
- var react_1 = __importStar(require("react"));
38
- var lucide_react_1 = require("lucide-react");
39
- var app_sidebar_1 = require("./app-sidebar");
40
- var breadcrumb_1 = require("./ui/breadcrumb");
41
- var separator_1 = require("./ui/separator");
42
- var sidebar_1 = require("./sidebar");
43
- var theme_switcher_1 = require("./ui/theme-switcher");
44
- var button_1 = require("./ui/button");
45
- var language_selector_1 = require("./ui/language-selector");
46
- var Dashboard = function (_a) {
47
- var apps = _a.apps, avatar = _a.avatar, breadcrumbs = _a.breadcrumbs, children = _a.children, clearBrowserCache = _a.clearBrowserCache, email = _a.email, footerNavItems = _a.footerNavItems, handleSignOut = _a.handleSignOut, locale = _a.locale, navItems = _a.navItems, offerUrl = _a.offerUrl, onLocaleChange = _a.onLocaleChange, profiles = _a.profiles, showLanguageSelector = _a.showLanguageSelector, username = _a.username;
48
- return (react_1.default.createElement(sidebar_1.SidebarProvider, null,
49
- react_1.default.createElement(app_sidebar_1.AppSidebar, { apps: apps, avatar: avatar, email: email, footerNavItems: footerNavItems, handleSignOut: handleSignOut, navItems: navItems, offerUrl: offerUrl, profiles: profiles, username: username }),
50
- react_1.default.createElement(sidebar_1.SidebarInset, null,
51
- react_1.default.createElement("header", { className: "flex h-16 shrink-0 items-center justify-between gap-2 border transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12" },
52
- react_1.default.createElement("div", { className: "flex items-center gap-2 px-4" },
53
- react_1.default.createElement(sidebar_1.SidebarTrigger, { className: "-ml-1" }),
54
- react_1.default.createElement(separator_1.Separator, { orientation: "vertical", className: "mr-2 data-[orientation=vertical]:h-4" }),
55
- react_1.default.createElement(breadcrumb_1.Breadcrumb, null,
56
- react_1.default.createElement(breadcrumb_1.BreadcrumbList, { className: "[&>*:last-child]:hidden" }, breadcrumbs === null || breadcrumbs === void 0 ? void 0 : breadcrumbs.map(function (breadcrumb) { return (react_1.default.createElement(react_1.Fragment, { key: breadcrumb.label },
57
- react_1.default.createElement(breadcrumb_1.BreadcrumbItem, { className: "hidden md:block" },
58
- react_1.default.createElement(breadcrumb_1.BreadcrumbLink, { href: breadcrumb.href }, breadcrumb.label)),
59
- react_1.default.createElement(breadcrumb_1.BreadcrumbSeparator, { className: "hidden md:block" }))); })))),
60
- react_1.default.createElement("div", { className: "flex items-center gap-2 px-4" },
61
- showLanguageSelector && (react_1.default.createElement(language_selector_1.LanguageSelector, { value: locale, onChange: onLocaleChange })),
62
- clearBrowserCache && (react_1.default.createElement(button_1.Button, { variant: "ghost", size: "icon", "aria-label": "Clear browser cache", title: "Clear browser cache", onClick: clearBrowserCache, "data-slot": "clear-cache-button" },
63
- react_1.default.createElement(lucide_react_1.RefreshCw, { className: "h-4 w-4", "aria-hidden": "true" }))),
64
- react_1.default.createElement(theme_switcher_1.ThemeSwitcher, null))),
65
- children)));
66
- };
67
- exports.Dashboard = Dashboard;
1
+ "use strict";import e,{Fragment as b}from"react";import{RefreshCw as g}from"lucide-react";import{AppSidebar as v}from"./app-sidebar";import{Breadcrumb as N,BreadcrumbItem as S,BreadcrumbLink as w,BreadcrumbList as k,BreadcrumbSeparator as x}from"./ui/breadcrumb";import{Separator as B}from"./ui/separator";import{SidebarInset as C,SidebarProvider as I,SidebarTrigger as L}from"./sidebar";import{ThemeSwitcher as y}from"./ui/theme-switcher";import{Button as R}from"./ui/button";import{LanguageSelector as T}from"./ui/language-selector";export const Dashboard=({apps:l,avatar:m,breadcrumbs:a,children:n,clearBrowserCache:r,email:i,footerNavItems:o,handleSignOut:c,locale:s,navItems:d,offerUrl:p,onLocaleChange:h,profiles:f,showLanguageSelector:E,username:u})=>e.createElement(I,null,e.createElement(v,{apps:l,avatar:m,email:i,footerNavItems:o,handleSignOut:c,navItems:d,offerUrl:p,profiles:f,username:u}),e.createElement(C,null,e.createElement("header",{className:"flex h-16 shrink-0 items-center justify-between gap-2 border transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12"},e.createElement("div",{className:"flex items-center gap-2 px-4"},e.createElement(L,{className:"-ml-1"}),e.createElement(B,{orientation:"vertical",className:"mr-2 data-[orientation=vertical]:h-4"}),e.createElement(N,null,e.createElement(k,{className:"[&>*:last-child]:hidden"},a?.map(t=>e.createElement(b,{key:t.label},e.createElement(S,{className:"hidden md:block"},e.createElement(w,{href:t.href},t.label)),e.createElement(x,{className:"hidden md:block"})))))),e.createElement("div",{className:"flex items-center gap-2 px-4"},E&&e.createElement(T,{value:s,onChange:h}),r&&e.createElement(R,{variant:"ghost",size:"icon","aria-label":"Clear browser cache",title:"Clear browser cache",onClick:r,"data-slot":"clear-cache-button"},e.createElement(g,{className:"h-4 w-4","aria-hidden":"true"})),e.createElement(y,null))),n));
@@ -1,47 +1 @@
1
- "use client";
2
- "use strict";
3
- var __importDefault = (this && this.__importDefault) || function (mod) {
4
- return (mod && mod.__esModule) ? mod : { "default": mod };
5
- };
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.DrawerGeneric = void 0;
8
- var drawer_1 = require("../components/ui/drawer");
9
- var lucide_react_1 = require("lucide-react");
10
- var button_1 = require("../components/ui/button");
11
- var react_1 = __importDefault(require("react"));
12
- var separator_1 = require("../components/ui/separator");
13
- var utils_1 = require("../lib/utils");
14
- var DrawerGeneric = function (_a) {
15
- var _b = _a.direction, direction = _b === void 0 ? "right" : _b, filterDrawer = _a.filterDrawer, filterDrawerFooter = _a.filterDrawerFooter, filterDrawerHeader = _a.filterDrawerHeader, formDrawer = _a.formDrawer, formDrawerFooter = _a.formDrawerFooter, formDrawerHeader = _a.formDrawerHeader, moreActionsDrawer = _a.moreActionsDrawer, moreActionsDrawerFooter = _a.moreActionsDrawerFooter, moreActionsDrawerHeader = _a.moreActionsDrawerHeader, onOpenChange = _a.onOpenChange, open = _a.open, viewDrawer = _a.viewDrawer, viewDrawerFooter = _a.viewDrawerFooter, viewDrawerHeader = _a.viewDrawerHeader, _c = _a.width, width = _c === void 0 ? "small" : _c;
16
- var widthClass = {
17
- small: "w-[400px]",
18
- medium: "w-[700px]",
19
- large: "w-[1000px]",
20
- full: "w-screen",
21
- };
22
- return (react_1.default.createElement(react_1.default.Fragment, null,
23
- react_1.default.createElement(drawer_1.Drawer, { direction: direction, onOpenChange: onOpenChange, open: open },
24
- react_1.default.createElement(drawer_1.DrawerContent, { className: (0, utils_1.cn)("", widthClass[width]) },
25
- react_1.default.createElement(drawer_1.DrawerHeader, { className: "flex flex-row justify-center items-start" },
26
- react_1.default.createElement("div", { className: "w-full" },
27
- moreActionsDrawerHeader,
28
- filterDrawerHeader,
29
- formDrawerHeader,
30
- viewDrawerHeader),
31
- react_1.default.createElement(drawer_1.DrawerClose, { asChild: true },
32
- react_1.default.createElement(button_1.Button, { size: "icon", variant: "ghost", className: "h-8 w-8" },
33
- react_1.default.createElement(lucide_react_1.X, { className: "h-4 w-4" })))),
34
- react_1.default.createElement(separator_1.Separator, null),
35
- react_1.default.createElement("div", { className: "overflow-y-auto p-4 flex-1" },
36
- moreActionsDrawer,
37
- filterDrawer,
38
- formDrawer,
39
- viewDrawer),
40
- react_1.default.createElement(separator_1.Separator, null),
41
- react_1.default.createElement(drawer_1.DrawerFooter, null,
42
- moreActionsDrawerFooter,
43
- filterDrawerFooter,
44
- formDrawerFooter,
45
- viewDrawerFooter)))));
46
- };
47
- exports.DrawerGeneric = DrawerGeneric;
1
+ "use strict";"use client";import{Drawer as D,DrawerClose as N,DrawerContent as g,DrawerHeader as C,DrawerFooter as v}from"../components/ui/drawer";import{X as y}from"lucide-react";import{Button as F}from"../components/ui/button";import e from"react";import{Separator as r}from"../components/ui/separator";import{cn as S}from"../lib/utils";export const DrawerGeneric=({direction:t="right",filterDrawer:a,filterDrawerFooter:l,filterDrawerHeader:m,formDrawer:n,formDrawerFooter:o,formDrawerHeader:c,moreActionsDrawer:s,moreActionsDrawerFooter:i,moreActionsDrawerHeader:w,onOpenChange:p,open:f,viewDrawer:u,viewDrawerFooter:E,viewDrawerHeader:d,width:h="small"})=>{const x={small:"w-[400px]",medium:"w-[700px]",large:"w-[1000px]",full:"w-screen"};return e.createElement(e.Fragment,null,e.createElement(D,{direction:t,onOpenChange:p,open:f},e.createElement(g,{className:S("",x[h])},e.createElement(C,{className:"flex flex-row justify-center items-start"},e.createElement("div",{className:"w-full"},w,m,c,d),e.createElement(N,{asChild:!0},e.createElement(F,{size:"icon",variant:"ghost",className:"h-8 w-8"},e.createElement(y,{className:"h-4 w-4"})))),e.createElement(r,null),e.createElement("div",{className:"overflow-y-auto p-4 flex-1"},s,a,n,u),e.createElement(r,null),e.createElement(v,null,i,l,o,E))))};
@@ -1,86 +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 __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
- if (k2 === undefined) k2 = k;
16
- var desc = Object.getOwnPropertyDescriptor(m, k);
17
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
- desc = { enumerable: true, get: function() { return m[k]; } };
19
- }
20
- Object.defineProperty(o, k2, desc);
21
- }) : (function(o, m, k, k2) {
22
- if (k2 === undefined) k2 = k;
23
- o[k2] = m[k];
24
- }));
25
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
- Object.defineProperty(o, "default", { enumerable: true, value: v });
27
- }) : function(o, v) {
28
- o["default"] = v;
29
- });
30
- var __importStar = (this && this.__importStar) || (function () {
31
- var ownKeys = function(o) {
32
- ownKeys = Object.getOwnPropertyNames || function (o) {
33
- var ar = [];
34
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
- return ar;
36
- };
37
- return ownKeys(o);
38
- };
39
- return function (mod) {
40
- if (mod && mod.__esModule) return mod;
41
- var result = {};
42
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
- __setModuleDefault(result, mod);
44
- return result;
45
- };
46
- })();
47
- var __rest = (this && this.__rest) || function (s, e) {
48
- var t = {};
49
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
50
- t[p] = s[p];
51
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
52
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
53
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
54
- t[p[i]] = s[p[i]];
55
- }
56
- return t;
57
- };
58
- Object.defineProperty(exports, "__esModule", { value: true });
59
- exports.EnhancedCheckbox = void 0;
60
- var React = __importStar(require("react"));
61
- var utils_1 = require("../lib/utils");
62
- var checkbox_1 = require("./ui/checkbox");
63
- var enhanced_label_1 = require("./enhanced-label");
64
- var EnhancedCheckbox = React.forwardRef(function (_a, ref) {
65
- var className = _a.className, error = _a.error, info = _a.info, label = _a.label, id = _a.id, testId = _a.testId, props = __rest(_a, ["className", "error", "info", "label", "id", "testId"]);
66
- // Determine if there's an error (for aria-invalid and styling)
67
- var hasError = Boolean(error);
68
- var checkboxElement = (React.createElement(checkbox_1.Checkbox, __assign({ ref: ref, id: id, "data-slot": "checkbox", "data-testid": testId, "aria-invalid": hasError, className: (0, utils_1.cn)(
69
- // Error state styling
70
- hasError &&
71
- "data-[state=checked]:bg-destructive data-[state=unchecked]:bg-destructive/20 border-destructive focus-visible:border-destructive focus-visible:ring-destructive/20", className) }, props)));
72
- // If label is provided, render the complete checkbox with label structure
73
- if (label) {
74
- return (React.createElement("div", { className: "w-full space-y-2" },
75
- React.createElement("div", { className: "flex items-center space-x-2" },
76
- checkboxElement,
77
- React.createElement(enhanced_label_1.EnhancedLabel, { htmlFor: id, className: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70" }, label)),
78
- (error || info) && (React.createElement("div", null, error ? (React.createElement("p", { className: "text-xs text-destructive" }, error)) : info ? (React.createElement("p", { className: "text-xs text-blue-600 dark:text-blue-400" }, info)) : null))));
79
- }
80
- // If no label, render just the checkbox with messages (backward compatibility)
81
- return (React.createElement("div", { className: "w-full" },
82
- checkboxElement,
83
- (error || info) && (React.createElement("div", null, error ? (React.createElement("p", { className: "text-xs text-destructive" }, error)) : info ? (React.createElement("p", { className: "text-xs text-blue-600 dark:text-blue-400" }, info)) : null))));
84
- });
85
- exports.EnhancedCheckbox = EnhancedCheckbox;
86
- EnhancedCheckbox.displayName = "EnhancedCheckbox";
1
+ "use strict";"use client";var b=function(a,c){var l={};for(var e in a)Object.prototype.hasOwnProperty.call(a,e)&&c.indexOf(e)<0&&(l[e]=a[e]);if(a!=null&&typeof Object.getOwnPropertySymbols=="function")for(var t=0,e=Object.getOwnPropertySymbols(a);t<e.length;t++)c.indexOf(e[t])<0&&Object.prototype.propertyIsEnumerable.call(a,e[t])&&(l[e[t]]=a[e[t]]);return l};import*as r from"react";import{cn as f}from"../lib/utils";import{Checkbox as p}from"./ui/checkbox";import{EnhancedLabel as x}from"./enhanced-label";const d=r.forwardRef((a,c)=>{var{className:l,error:e,info:t,label:s,id:n,testId:m}=a,u=b(a,["className","error","info","label","id","testId"]);const o=!!e,i=r.createElement(p,Object.assign({ref:c,id:n,"data-slot":"checkbox","data-testid":m,"aria-invalid":o,className:f(o&&"data-[state=checked]:bg-destructive data-[state=unchecked]:bg-destructive/20 border-destructive focus-visible:border-destructive focus-visible:ring-destructive/20",l)},u));return s?r.createElement("div",{className:"w-full space-y-2"},r.createElement("div",{className:"flex items-center space-x-2"},i,r.createElement(x,{htmlFor:n,className:"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"},s)),(e||t)&&r.createElement("div",null,e?r.createElement("p",{className:"text-xs text-destructive"},e):t?r.createElement("p",{className:"text-xs text-blue-600 dark:text-blue-400"},t):null)):r.createElement("div",{className:"w-full"},i,(e||t)&&r.createElement("div",null,e?r.createElement("p",{className:"text-xs text-destructive"},e):t?r.createElement("p",{className:"text-xs text-blue-600 dark:text-blue-400"},t):null))});d.displayName="EnhancedCheckbox";export{d as EnhancedCheckbox};
@@ -1,315 +1 @@
1
- "use client";
2
- "use strict";
3
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = { enumerable: true, get: function() { return m[k]; } };
8
- }
9
- Object.defineProperty(o, k2, desc);
10
- }) : (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- o[k2] = m[k];
13
- }));
14
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
- Object.defineProperty(o, "default", { enumerable: true, value: v });
16
- }) : function(o, v) {
17
- o["default"] = v;
18
- });
19
- var __importStar = (this && this.__importStar) || (function () {
20
- var ownKeys = function(o) {
21
- ownKeys = Object.getOwnPropertyNames || function (o) {
22
- var ar = [];
23
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
- return ar;
25
- };
26
- return ownKeys(o);
27
- };
28
- return function (mod) {
29
- if (mod && mod.__esModule) return mod;
30
- var result = {};
31
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
- __setModuleDefault(result, mod);
33
- return result;
34
- };
35
- })();
36
- Object.defineProperty(exports, "__esModule", { value: true });
37
- exports.EnhancedCombobox = EnhancedCombobox;
38
- exports.CompanyCombobox = CompanyCombobox;
39
- exports.CountryCombobox = CountryCombobox;
40
- var react_1 = __importStar(require("react"));
41
- var lucide_react_1 = require("lucide-react");
42
- var utils_1 = require("../lib/utils");
43
- var button_1 = require("./ui/button");
44
- var enhanced_label_1 = require("./enhanced-label");
45
- var command_1 = require("./ui/command");
46
- var popover_1 = require("./ui/popover");
47
- function VirtualizedList(_a) {
48
- var options = _a.options, selectedValue = _a.selectedValue, onSelect = _a.onSelect, scrollContainer = _a.scrollContainer, testIdOptionPrefix = _a.testIdOptionPrefix;
49
- var _b = (0, react_1.useState)({
50
- start: 0,
51
- end: Math.min(options.length, 25), // Increased initial visible items
52
- }), visibleRange = _b[0], setVisibleRange = _b[1];
53
- var handleScroll = (0, react_1.useCallback)(function () {
54
- if (!scrollContainer.current)
55
- return;
56
- var _a = scrollContainer.current, scrollTop = _a.scrollTop, clientHeight = _a.clientHeight;
57
- var itemHeight = 32; // Approximate item height
58
- var containerHeight = clientHeight;
59
- // Calculate visible range with proper bounds checking
60
- var start = Math.max(0, Math.floor(scrollTop / itemHeight));
61
- var visibleCount = Math.ceil(containerHeight / itemHeight);
62
- var bufferSize = Math.min(10, Math.ceil(visibleCount * 0.5)); // Dynamic buffer
63
- var end = Math.min(options.length, start + visibleCount + bufferSize);
64
- var newRange = {
65
- start: Math.max(0, start - bufferSize),
66
- end: end,
67
- };
68
- // Only update if the range actually changed to prevent unnecessary re-renders
69
- setVisibleRange(function (prevRange) {
70
- if (prevRange.start !== newRange.start ||
71
- prevRange.end !== newRange.end) {
72
- return newRange;
73
- }
74
- return prevRange;
75
- });
76
- }, [options.length, scrollContainer]);
77
- (0, react_1.useEffect)(function () {
78
- var container = scrollContainer.current;
79
- if (container) {
80
- // Add scroll listener with passive option for better performance
81
- container.addEventListener("scroll", handleScroll, { passive: true });
82
- // Also listen to parent containers that might interfere (like drawer)
83
- var parentContainer_1 = container.parentElement;
84
- var parentScrollHandler_1 = function () { return handleScroll(); };
85
- while (parentContainer_1) {
86
- var hasOverflow = getComputedStyle(parentContainer_1).overflowY;
87
- if (hasOverflow === "auto" || hasOverflow === "scroll") {
88
- parentContainer_1.addEventListener("scroll", parentScrollHandler_1, {
89
- passive: true,
90
- });
91
- break;
92
- }
93
- parentContainer_1 = parentContainer_1.parentElement;
94
- }
95
- return function () {
96
- container.removeEventListener("scroll", handleScroll);
97
- if (parentContainer_1) {
98
- parentContainer_1.removeEventListener("scroll", parentScrollHandler_1);
99
- }
100
- };
101
- }
102
- }, [handleScroll, scrollContainer]);
103
- // Reset visible range when options change (e.g., due to search filtering)
104
- (0, react_1.useEffect)(function () {
105
- var newEnd = Math.min(options.length, 25);
106
- setVisibleRange(function () {
107
- // Force update if options changed
108
- return {
109
- start: 0,
110
- end: newEnd,
111
- };
112
- });
113
- // Reset scroll position when options change
114
- if (scrollContainer.current) {
115
- scrollContainer.current.scrollTop = 0;
116
- }
117
- }, [options.length, options, scrollContainer]); // Watch both length and options array
118
- // Ensure we always have valid visible range
119
- var safeStart = Math.max(0, Math.min(visibleRange.start, options.length - 1));
120
- var safeEnd = Math.max(safeStart + 1, Math.min(visibleRange.end, options.length));
121
- var visibleOptions = options.slice(safeStart, safeEnd);
122
- var topSpacer = safeStart * 32; // Approximate item height
123
- var bottomSpacer = Math.max(0, (options.length - safeEnd) * 32);
124
- return (react_1.default.createElement(react_1.default.Fragment, null,
125
- topSpacer > 0 && react_1.default.createElement("div", { style: { height: topSpacer } }),
126
- visibleOptions.map(function (option, index) { return (react_1.default.createElement(command_1.CommandItem, { key: "".concat(option.value, "-").concat(safeStart + index), value: option.label, onSelect: function () { return onSelect(option.value); }, "data-testid": "".concat(testIdOptionPrefix !== null && testIdOptionPrefix !== void 0 ? testIdOptionPrefix : "combobox-option", "-").concat(option.value), className: "cursor-pointer hover:bg-accent hover:text-accent-foreground transition-colors h-8 flex items-center" },
127
- react_1.default.createElement(lucide_react_1.Check, { className: (0, utils_1.cn)("mr-2 h-4 w-4", selectedValue === option.value ? "opacity-100" : "opacity-0") }),
128
- react_1.default.createElement("span", { className: "truncate" }, option.label))); }),
129
- bottomSpacer > 0 && react_1.default.createElement("div", { style: { height: bottomSpacer } })));
130
- }
131
- function EnhancedCombobox(_a) {
132
- var className = _a.className, _b = _a.disabled, disabled = _b === void 0 ? false : _b, _c = _a.emptyText, emptyText = _c === void 0 ? "No options found." : _c, error = _a.error, id = _a.id, info = _a.info, label = _a.label, _d = _a.loading, loading = _d === void 0 ? false : _d, _e = _a.maxHeight, maxHeight = _e === void 0 ? 256 : _e, onSearchChange = _a.onSearchChange, onValueChange = _a.onValueChange, _f = _a.options, options = _f === void 0 ? [] : _f, _g = _a.placeholder, placeholder = _g === void 0 ? "Select option..." : _g, _h = _a.required, required = _h === void 0 ? false : _h, _j = _a.searchPlaceholder, searchPlaceholder = _j === void 0 ? "Search..." : _j, _k = _a.showScrollIndicators, showScrollIndicators = _k === void 0 ? true : _k, value = _a.value, _l = _a.virtualizeThreshold, virtualizeThreshold = _l === void 0 ? 50 : _l, testIdTrigger = _a.testIdTrigger, testIdSearchInput = _a.testIdSearchInput, testIdPopoverContent = _a.testIdPopoverContent, testIdEmpty = _a.testIdEmpty, testIdList = _a.testIdList, testIdOptionPrefix = _a.testIdOptionPrefix, testIdScrollUp = _a.testIdScrollUp, testIdScrollDown = _a.testIdScrollDown;
133
- var _m = (0, react_1.useState)(false), open = _m[0], setOpen = _m[1];
134
- var _o = (0, react_1.useState)(""), searchValue = _o[0], setSearchValue = _o[1];
135
- var _p = (0, react_1.useState)(false), canScrollUp = _p[0], setCanScrollUp = _p[1];
136
- var _q = (0, react_1.useState)(false), canScrollDown = _q[0], setCanScrollDown = _q[1];
137
- var scrollContainerRef = (0, react_1.useRef)(null);
138
- var selectedOption = options.find(function (option) { return option.value === value; });
139
- var shouldVirtualize = options.length > virtualizeThreshold;
140
- // Filter options based on search - always handle filtering at this level for virtualization
141
- var filteredOptions = react_1.default.useMemo(function () {
142
- if (!searchValue) {
143
- // No search query, return all options
144
- return options;
145
- }
146
- if (onSearchChange && shouldVirtualize) {
147
- // For virtualized lists with external search, let external handler manage it
148
- // but still return all current options as they're already filtered externally
149
- return options;
150
- }
151
- if (onSearchChange && !shouldVirtualize) {
152
- // Non-virtualized with external search - let external handler manage
153
- return options;
154
- }
155
- // Local filtering for non-external search or as fallback
156
- return options.filter(function (option) {
157
- return option.label.toLowerCase().includes(searchValue.toLowerCase());
158
- });
159
- }, [options, searchValue, onSearchChange, shouldVirtualize]);
160
- var handleSearchChange = function (search) {
161
- setSearchValue(search);
162
- onSearchChange === null || onSearchChange === void 0 ? void 0 : onSearchChange(search);
163
- };
164
- var handleSelect = function (selectedValue) {
165
- if (selectedValue === value) {
166
- onValueChange("");
167
- }
168
- else {
169
- onValueChange(selectedValue);
170
- }
171
- setOpen(false);
172
- setSearchValue("");
173
- };
174
- // Handle scroll indicators
175
- var updateScrollIndicators = function () {
176
- if (!scrollContainerRef.current)
177
- return;
178
- var _a = scrollContainerRef.current, scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;
179
- setCanScrollUp(scrollTop > 0);
180
- setCanScrollDown(scrollTop < scrollHeight - clientHeight - 1);
181
- };
182
- // Update scroll indicators when options change or component opens
183
- (0, react_1.useEffect)(function () {
184
- if (open) {
185
- // Small delay to ensure DOM is updated
186
- setTimeout(updateScrollIndicators, 10);
187
- }
188
- }, [open, options]);
189
- var scrollToTop = function () {
190
- var _a;
191
- (_a = scrollContainerRef.current) === null || _a === void 0 ? void 0 : _a.scrollTo({ top: 0, behavior: "smooth" });
192
- };
193
- var scrollToBottom = function () {
194
- if (!scrollContainerRef.current)
195
- return;
196
- var scrollHeight = scrollContainerRef.current.scrollHeight;
197
- scrollContainerRef.current.scrollTo({
198
- top: scrollHeight,
199
- behavior: "smooth",
200
- });
201
- };
202
- var comboboxElement = (react_1.default.createElement(popover_1.Popover, { open: open, onOpenChange: setOpen, modal: true },
203
- react_1.default.createElement(popover_1.PopoverTrigger, { asChild: true },
204
- react_1.default.createElement(button_1.Button, { id: id, "data-testid": testIdTrigger, variant: "outline", role: "combobox", "aria-expanded": open, disabled: disabled, className: (0, utils_1.cn)("w-full justify-between", !selectedOption && "text-muted-foreground", className) },
205
- (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.label) || placeholder,
206
- react_1.default.createElement(lucide_react_1.ChevronsUpDown, { className: "ml-2 h-4 w-4 shrink-0 opacity-50" }))),
207
- react_1.default.createElement(popover_1.PopoverContent, { "data-testid": testIdPopoverContent, className: "w-[var(--radix-popover-trigger-width)] p-0", side: "bottom", align: "start", avoidCollisions: true, collisionPadding: 8, style: { zIndex: 1000 }, onOpenAutoFocus: function (e) { return e.preventDefault(); } },
208
- react_1.default.createElement(command_1.Command, { shouldFilter: false },
209
- react_1.default.createElement(command_1.CommandInput, { "data-slot": "command-input", "data-testid": testIdSearchInput, placeholder: searchPlaceholder, value: searchValue, onValueChange: handleSearchChange }),
210
- react_1.default.createElement(command_1.CommandEmpty, { "data-slot": "command-empty", "data-testid": testIdEmpty }, loading ? (react_1.default.createElement("div", { className: "flex items-center justify-center py-6" },
211
- react_1.default.createElement("div", { className: "animate-spin rounded-full h-4 w-4 border-b-2 border-primary" }),
212
- react_1.default.createElement("span", { className: "ml-2 text-sm" }, "Searching..."))) : (emptyText)),
213
- react_1.default.createElement("div", { className: "relative" },
214
- showScrollIndicators && canScrollUp && (react_1.default.createElement("div", { className: "absolute top-0 left-0 right-0 z-10 h-8 bg-gradient-to-b from-background to-transparent pointer-events-none" },
215
- react_1.default.createElement("button", { "data-testid": testIdScrollUp, onClick: scrollToTop, className: "absolute top-1 left-1/2 transform -translate-x-1/2 p-1 rounded-full bg-background shadow-sm border pointer-events-auto hover:bg-muted transition-colors", "aria-label": "Scroll to top" },
216
- react_1.default.createElement(lucide_react_1.ChevronUp, { className: "h-3 w-3" })))),
217
- react_1.default.createElement(command_1.CommandGroup, { "data-testid": testIdList, ref: scrollContainerRef, className: (0, utils_1.cn)("overflow-y-auto smooth-scroll", "scrollbar-thin scrollbar-thumb-muted-foreground/20 scrollbar-track-transparent hover:scrollbar-thumb-muted-foreground/40", "scroll-smooth", filteredOptions.length > 10 && "pb-2" // Extra padding for many options
218
- ), style: { maxHeight: "".concat(maxHeight, "px") }, onScroll: updateScrollIndicators }, shouldVirtualize &&
219
- filteredOptions.length > virtualizeThreshold ? (
220
- // Virtualized rendering for large lists
221
- react_1.default.createElement(VirtualizedList, { options: filteredOptions, selectedValue: value, onSelect: handleSelect, scrollContainer: scrollContainerRef, testIdOptionPrefix: testIdOptionPrefix })) : (
222
- // Regular rendering for smaller lists or filtered results
223
- filteredOptions.map(function (option) { return (react_1.default.createElement(command_1.CommandItem, { key: option.value, value: option.label, onSelect: function () { return handleSelect(option.value); }, "data-testid": "".concat(testIdOptionPrefix !== null && testIdOptionPrefix !== void 0 ? testIdOptionPrefix : "combobox-option", "-").concat(option.value), className: "cursor-pointer hover:bg-accent hover:text-accent-foreground transition-colors" },
224
- react_1.default.createElement(lucide_react_1.Check, { className: (0, utils_1.cn)("mr-2 h-4 w-4", value === option.value ? "opacity-100" : "opacity-0") }),
225
- react_1.default.createElement("span", { className: "truncate" }, option.label))); }))),
226
- showScrollIndicators && canScrollDown && (react_1.default.createElement("div", { className: "absolute bottom-0 left-0 right-0 z-10 h-8 bg-gradient-to-t from-background to-transparent pointer-events-none" },
227
- react_1.default.createElement("button", { "data-testid": testIdScrollDown, onClick: scrollToBottom, className: "absolute bottom-1 left-1/2 transform -translate-x-1/2 p-1 rounded-full bg-background shadow-sm border pointer-events-auto hover:bg-muted transition-colors", "aria-label": "Scroll to bottom" },
228
- react_1.default.createElement(lucide_react_1.ChevronDown, { className: "h-3 w-3" })))))))));
229
- // If label is provided, render the complete combobox with label structure
230
- if (label) {
231
- return (react_1.default.createElement("div", { className: "w-full space-y-2" },
232
- react_1.default.createElement(enhanced_label_1.EnhancedLabel, { htmlFor: id, required: required }, label),
233
- comboboxElement,
234
- error && (react_1.default.createElement("p", { className: "text-xs text-destructive dark:text-red-400" }, error)),
235
- info && !error && (react_1.default.createElement("p", { className: "text-xs text-blue-600 dark:text-blue-400" }, info))));
236
- }
237
- // If no label, render just the combobox (backward compatibility)
238
- return comboboxElement;
239
- }
240
- function CompanyCombobox(_a) {
241
- var _b = _a.companies, companies = _b === void 0 ? [] : _b, value = _a.value, onValueChange = _a.onValueChange, onSearchChange = _a.onSearchChange, _c = _a.loading, loading = _c === void 0 ? false : _c, _d = _a.placeholder, placeholder = _d === void 0 ? "Select company..." : _d, className = _a.className, _e = _a.maxHeight, maxHeight = _e === void 0 ? 320 : _e, _f = _a.showScrollIndicators, showScrollIndicators = _f === void 0 ? true : _f, label = _a.label, _g = _a.required, required = _g === void 0 ? false : _g, id = _a.id, info = _a.info, error = _a.error;
242
- var options = companies.map(function (company) {
243
- var _a, _b;
244
- return ({
245
- value: ((_a = company.id) === null || _a === void 0 ? void 0 : _a.toString()) || "",
246
- label: company.name,
247
- id: (_b = company.id) === null || _b === void 0 ? void 0 : _b.toString(),
248
- });
249
- });
250
- return (react_1.default.createElement(EnhancedCombobox, { options: options, value: value, onValueChange: onValueChange, onSearchChange: onSearchChange, placeholder: placeholder, searchPlaceholder: "Search companies...", emptyText: "No companies found.", loading: loading, className: className, maxHeight: maxHeight, showScrollIndicators: showScrollIndicators, virtualizeThreshold: 100, label: label, required: required, id: id, info: info, error: error }));
251
- }
252
- function CountryCombobox(_a) {
253
- var _b = _a.countries, countries = _b === void 0 ? [] : _b, value = _a.value, onValueChange = _a.onValueChange, onSearchChange = _a.onSearchChange, _c = _a.loading, loading = _c === void 0 ? false : _c, _d = _a.placeholder, placeholder = _d === void 0 ? "Select country..." : _d, className = _a.className, _e = _a.maxHeight, maxHeight = _e === void 0 ? 280 : _e, _f = _a.showScrollIndicators, showScrollIndicators = _f === void 0 ? true : _f, label = _a.label, _g = _a.required, required = _g === void 0 ? false : _g, id = _a.id, info = _a.info, error = _a.error;
254
- // Default countries if none provided or if provided list is empty
255
- var defaultCountries = [
256
- { name: "Afghanistan", code: "AF" },
257
- { name: "Albania", code: "AL" },
258
- { name: "Algeria", code: "DZ" },
259
- { name: "Argentina", code: "AR" },
260
- { name: "Australia", code: "AU" },
261
- { name: "Austria", code: "AT" },
262
- { name: "Bangladesh", code: "BD" },
263
- { name: "Belgium", code: "BE" },
264
- { name: "Brazil", code: "BR" },
265
- { name: "Canada", code: "CA" },
266
- { name: "China", code: "CN" },
267
- { name: "Denmark", code: "DK" },
268
- { name: "Egypt", code: "EG" },
269
- { name: "Finland", code: "FI" },
270
- { name: "France", code: "FR" },
271
- { name: "Germany", code: "DE" },
272
- { name: "Greece", code: "GR" },
273
- { name: "India", code: "IN" },
274
- { name: "Indonesia", code: "ID" },
275
- { name: "Iran", code: "IR" },
276
- { name: "Iraq", code: "IQ" },
277
- { name: "Ireland", code: "IE" },
278
- { name: "Israel", code: "IL" },
279
- { name: "Italy", code: "IT" },
280
- { name: "Japan", code: "JP" },
281
- { name: "Jordan", code: "JO" },
282
- { name: "Kenya", code: "KE" },
283
- { name: "Malaysia", code: "MY" },
284
- { name: "Mexico", code: "MX" },
285
- { name: "Netherlands", code: "NL" },
286
- { name: "New Zealand", code: "NZ" },
287
- { name: "Nigeria", code: "NG" },
288
- { name: "Norway", code: "NO" },
289
- { name: "Pakistan", code: "PK" },
290
- { name: "Philippines", code: "PH" },
291
- { name: "Poland", code: "PL" },
292
- { name: "Portugal", code: "PT" },
293
- { name: "Russia", code: "RU" },
294
- { name: "Saudi Arabia", code: "SA" },
295
- { name: "Singapore", code: "SG" },
296
- { name: "South Africa", code: "ZA" },
297
- { name: "South Korea", code: "KR" },
298
- { name: "Spain", code: "ES" },
299
- { name: "Sweden", code: "SE" },
300
- { name: "Switzerland", code: "CH" },
301
- { name: "Thailand", code: "TH" },
302
- { name: "Turkey", code: "TR" },
303
- { name: "Ukraine", code: "UA" },
304
- { name: "United Arab Emirates", code: "AE" },
305
- { name: "United Kingdom", code: "GB" },
306
- { name: "United States", code: "US" },
307
- { name: "Vietnam", code: "VN" },
308
- ];
309
- var countryList = countries.length > 0 ? countries : defaultCountries;
310
- var options = countryList.map(function (country) { return ({
311
- value: country.name,
312
- label: country.name,
313
- }); });
314
- return (react_1.default.createElement(EnhancedCombobox, { options: options, value: value, onValueChange: onValueChange, onSearchChange: onSearchChange, placeholder: placeholder, searchPlaceholder: "Search countries...", emptyText: "No countries found.", loading: loading, className: className, maxHeight: maxHeight, showScrollIndicators: showScrollIndicators, virtualizeThreshold: 30, label: label, required: required, id: id, info: info, error: error }));
315
- }
1
+ "use strict";"use client";import e,{useState as y,useRef as W,useEffect as U,useCallback as ee}from"react";import{Check as V,ChevronsUpDown as te,ChevronUp as ae,ChevronDown as ne}from"lucide-react";import{cn as H}from"../lib/utils";import{Button as oe}from"./ui/button";import{EnhancedLabel as re}from"./enhanced-label";import{Command as le,CommandEmpty as ce,CommandGroup as se,CommandInput as me,CommandItem as G}from"./ui/command";import{Popover as de,PopoverContent as ie,PopoverTrigger as ue}from"./ui/popover";function he({options:n,selectedValue:E,onSelect:S,scrollContainer:r,testIdOptionPrefix:i}){const[b,f]=y({start:0,end:Math.min(n.length,25)}),u=ee(()=>{if(!r.current)return;const{scrollTop:a,clientHeight:o}=r.current,m=32,c=o,d=Math.max(0,Math.floor(a/m)),w=Math.ceil(c/m),C=Math.min(10,Math.ceil(w*.5)),R=Math.min(n.length,d+w+C),N={start:Math.max(0,d-C),end:R};f(x=>x.start!==N.start||x.end!==N.end?N:x)},[n.length,r]);U(()=>{const a=r.current;if(a){a.addEventListener("scroll",u,{passive:!0});let o=a.parentElement;const m=()=>u();for(;o;){const c=getComputedStyle(o).overflowY;if(c==="auto"||c==="scroll"){o.addEventListener("scroll",m,{passive:!0});break}o=o.parentElement}return()=>{a.removeEventListener("scroll",u),o&&o.removeEventListener("scroll",m)}}},[u,r]),U(()=>{const a=Math.min(n.length,25);f(()=>({start:0,end:a})),r.current&&(r.current.scrollTop=0)},[n.length,n,r]);const h=Math.max(0,Math.min(b.start,n.length-1)),s=Math.max(h+1,Math.min(b.end,n.length)),p=n.slice(h,s),l=h*32,v=Math.max(0,(n.length-s)*32);return e.createElement(e.Fragment,null,l>0&&e.createElement("div",{style:{height:l}}),p.map((a,o)=>e.createElement(G,{key:`${a.value}-${h+o}`,value:a.label,onSelect:()=>S(a.value),"data-testid":`${i??"combobox-option"}-${a.value}`,className:"cursor-pointer hover:bg-accent hover:text-accent-foreground transition-colors h-8 flex items-center"},e.createElement(V,{className:H("mr-2 h-4 w-4",E===a.value?"opacity-100":"opacity-0")}),e.createElement("span",{className:"truncate"},a.label))),v>0&&e.createElement("div",{style:{height:v}}))}export function EnhancedCombobox({className:n,disabled:E=!1,emptyText:S="No options found.",error:r,id:i,info:b,label:f,loading:u=!1,maxHeight:h=256,onSearchChange:s,onValueChange:p,options:l=[],placeholder:v="Select option...",required:a=!1,searchPlaceholder:o="Search...",showScrollIndicators:m=!0,value:c,virtualizeThreshold:d=50,testIdTrigger:w,testIdSearchInput:C,testIdPopoverContent:R,testIdEmpty:N,testIdList:x,testIdOptionPrefix:A,testIdScrollUp:K,testIdScrollDown:$}){const[T,D]=y(!1),[k,P]=y(""),[O,q]=y(!1),[J,Z]=y(!1),g=W(null),M=l.find(t=>t.value===c),I=l.length>d,L=e.useMemo(()=>!k||s&&I||s&&!I?l:l.filter(t=>t.label.toLowerCase().includes(k.toLowerCase())),[l,k,s,I]),_=t=>{P(t),s?.(t)},z=t=>{p(t===c?"":t),D(!1),P("")},B=()=>{if(!g.current)return;const{scrollTop:t,scrollHeight:Q,clientHeight:X}=g.current;q(t>0),Z(t<Q-X-1)};U(()=>{T&&setTimeout(B,10)},[T,l]);const j=()=>{var t;(t=g.current)===null||t===void 0||t.scrollTo({top:0,behavior:"smooth"})},Y=()=>{if(!g.current)return;const{scrollHeight:t}=g.current;g.current.scrollTo({top:t,behavior:"smooth"})},F=e.createElement(de,{open:T,onOpenChange:D,modal:!0},e.createElement(ue,{asChild:!0},e.createElement(oe,{id:i,"data-testid":w,variant:"outline",role:"combobox","aria-expanded":T,disabled:E,className:H("w-full justify-between",!M&&"text-muted-foreground",n)},M?.label||v,e.createElement(te,{className:"ml-2 h-4 w-4 shrink-0 opacity-50"}))),e.createElement(ie,{"data-testid":R,className:"w-[var(--radix-popover-trigger-width)] p-0",side:"bottom",align:"start",avoidCollisions:!0,collisionPadding:8,style:{zIndex:1e3},onOpenAutoFocus:t=>t.preventDefault()},e.createElement(le,{shouldFilter:!1},e.createElement(me,{"data-slot":"command-input","data-testid":C,placeholder:o,value:k,onValueChange:_}),e.createElement(ce,{"data-slot":"command-empty","data-testid":N},u?e.createElement("div",{className:"flex items-center justify-center py-6"},e.createElement("div",{className:"animate-spin rounded-full h-4 w-4 border-b-2 border-primary"}),e.createElement("span",{className:"ml-2 text-sm"},"Searching...")):S),e.createElement("div",{className:"relative"},m&&O&&e.createElement("div",{className:"absolute top-0 left-0 right-0 z-10 h-8 bg-gradient-to-b from-background to-transparent pointer-events-none"},e.createElement("button",{"data-testid":K,onClick:j,className:"absolute top-1 left-1/2 transform -translate-x-1/2 p-1 rounded-full bg-background shadow-sm border pointer-events-auto hover:bg-muted transition-colors","aria-label":"Scroll to top"},e.createElement(ae,{className:"h-3 w-3"}))),e.createElement(se,{"data-testid":x,ref:g,className:H("overflow-y-auto smooth-scroll","scrollbar-thin scrollbar-thumb-muted-foreground/20 scrollbar-track-transparent hover:scrollbar-thumb-muted-foreground/40","scroll-smooth",L.length>10&&"pb-2"),style:{maxHeight:`${h}px`},onScroll:B},I&&L.length>d?e.createElement(he,{options:L,selectedValue:c,onSelect:z,scrollContainer:g,testIdOptionPrefix:A}):L.map(t=>e.createElement(G,{key:t.value,value:t.label,onSelect:()=>z(t.value),"data-testid":`${A??"combobox-option"}-${t.value}`,className:"cursor-pointer hover:bg-accent hover:text-accent-foreground transition-colors"},e.createElement(V,{className:H("mr-2 h-4 w-4",c===t.value?"opacity-100":"opacity-0")}),e.createElement("span",{className:"truncate"},t.label)))),m&&J&&e.createElement("div",{className:"absolute bottom-0 left-0 right-0 z-10 h-8 bg-gradient-to-t from-background to-transparent pointer-events-none"},e.createElement("button",{"data-testid":$,onClick:Y,className:"absolute bottom-1 left-1/2 transform -translate-x-1/2 p-1 rounded-full bg-background shadow-sm border pointer-events-auto hover:bg-muted transition-colors","aria-label":"Scroll to bottom"},e.createElement(ne,{className:"h-3 w-3"})))))));return f?e.createElement("div",{className:"w-full space-y-2"},e.createElement(re,{htmlFor:i,required:a},f),F,r&&e.createElement("p",{className:"text-xs text-destructive dark:text-red-400"},r),b&&!r&&e.createElement("p",{className:"text-xs text-blue-600 dark:text-blue-400"},b)):F}export function CompanyCombobox({companies:n=[],value:E,onValueChange:S,onSearchChange:r,loading:i=!1,placeholder:b="Select company...",className:f,maxHeight:u=320,showScrollIndicators:h=!0,label:s,required:p=!1,id:l,info:v,error:a}){const o=n.map(m=>{var c,d;return{value:((c=m.id)===null||c===void 0?void 0:c.toString())||"",label:m.name,id:(d=m.id)===null||d===void 0?void 0:d.toString()}});return e.createElement(EnhancedCombobox,{options:o,value:E,onValueChange:S,onSearchChange:r,placeholder:b,searchPlaceholder:"Search companies...",emptyText:"No companies found.",loading:i,className:f,maxHeight:u,showScrollIndicators:h,virtualizeThreshold:100,label:s,required:p,id:l,info:v,error:a})}export function CountryCombobox({countries:n=[],value:E,onValueChange:S,onSearchChange:r,loading:i=!1,placeholder:b="Select country...",className:f,maxHeight:u=280,showScrollIndicators:h=!0,label:s,required:p=!1,id:l,info:v,error:a}){const o=[{name:"Afghanistan",code:"AF"},{name:"Albania",code:"AL"},{name:"Algeria",code:"DZ"},{name:"Argentina",code:"AR"},{name:"Australia",code:"AU"},{name:"Austria",code:"AT"},{name:"Bangladesh",code:"BD"},{name:"Belgium",code:"BE"},{name:"Brazil",code:"BR"},{name:"Canada",code:"CA"},{name:"China",code:"CN"},{name:"Denmark",code:"DK"},{name:"Egypt",code:"EG"},{name:"Finland",code:"FI"},{name:"France",code:"FR"},{name:"Germany",code:"DE"},{name:"Greece",code:"GR"},{name:"India",code:"IN"},{name:"Indonesia",code:"ID"},{name:"Iran",code:"IR"},{name:"Iraq",code:"IQ"},{name:"Ireland",code:"IE"},{name:"Israel",code:"IL"},{name:"Italy",code:"IT"},{name:"Japan",code:"JP"},{name:"Jordan",code:"JO"},{name:"Kenya",code:"KE"},{name:"Malaysia",code:"MY"},{name:"Mexico",code:"MX"},{name:"Netherlands",code:"NL"},{name:"New Zealand",code:"NZ"},{name:"Nigeria",code:"NG"},{name:"Norway",code:"NO"},{name:"Pakistan",code:"PK"},{name:"Philippines",code:"PH"},{name:"Poland",code:"PL"},{name:"Portugal",code:"PT"},{name:"Russia",code:"RU"},{name:"Saudi Arabia",code:"SA"},{name:"Singapore",code:"SG"},{name:"South Africa",code:"ZA"},{name:"South Korea",code:"KR"},{name:"Spain",code:"ES"},{name:"Sweden",code:"SE"},{name:"Switzerland",code:"CH"},{name:"Thailand",code:"TH"},{name:"Turkey",code:"TR"},{name:"Ukraine",code:"UA"},{name:"United Arab Emirates",code:"AE"},{name:"United Kingdom",code:"GB"},{name:"United States",code:"US"},{name:"Vietnam",code:"VN"}],c=(n.length>0?n:o).map(d=>({value:d.name,label:d.name}));return e.createElement(EnhancedCombobox,{options:c,value:E,onValueChange:S,onSearchChange:r,placeholder:b,searchPlaceholder:"Search countries...",emptyText:"No countries found.",loading:i,className:f,maxHeight:u,showScrollIndicators:h,virtualizeThreshold:30,label:s,required:p,id:l,info:v,error:a})}