@zentauri-ui/zentauri-components 2.1.7 → 2.1.8

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 (75) hide show
  1. package/README.md +7 -5
  2. package/cli/props.json +189 -3
  3. package/cli/registry.json +9 -0
  4. package/dist/{chunk-KVSRUAXP.mjs → chunk-4PAHLHYF.mjs} +3 -3
  5. package/dist/{chunk-KVSRUAXP.mjs.map → chunk-4PAHLHYF.mjs.map} +1 -1
  6. package/dist/chunk-4SLVTSHM.js +241 -0
  7. package/dist/chunk-4SLVTSHM.js.map +1 -0
  8. package/dist/chunk-6OVDBAMI.js +19 -0
  9. package/dist/{chunk-5FU57ZVQ.js.map → chunk-6OVDBAMI.js.map} +1 -1
  10. package/dist/{chunk-5ELR6MIN.js → chunk-BAAXQPZ7.js} +6 -6
  11. package/dist/{chunk-5ELR6MIN.js.map → chunk-BAAXQPZ7.js.map} +1 -1
  12. package/dist/{chunk-DBNGLT5U.mjs → chunk-D7ZTSAA6.mjs} +4 -4
  13. package/dist/{chunk-DBNGLT5U.mjs.map → chunk-D7ZTSAA6.mjs.map} +1 -1
  14. package/dist/{chunk-TJ2EWPER.js → chunk-DPNTQ4AK.js} +47 -3
  15. package/dist/chunk-DPNTQ4AK.js.map +1 -0
  16. package/dist/chunk-IHDM7AHY.mjs +233 -0
  17. package/dist/chunk-IHDM7AHY.mjs.map +1 -0
  18. package/dist/{chunk-G7FVHZRB.js → chunk-L5QORCUO.js} +12 -12
  19. package/dist/{chunk-G7FVHZRB.js.map → chunk-L5QORCUO.js.map} +1 -1
  20. package/dist/{chunk-7UXPXCKV.mjs → chunk-OWVQVAOY.mjs} +3 -3
  21. package/dist/{chunk-7UXPXCKV.mjs.map → chunk-OWVQVAOY.mjs.map} +1 -1
  22. package/dist/{chunk-FUCW5GPE.mjs → chunk-UVP3MUBU.mjs} +39 -4
  23. package/dist/chunk-UVP3MUBU.mjs.map +1 -0
  24. package/dist/design-system/facade.js +3 -3
  25. package/dist/design-system/facade.mjs +2 -2
  26. package/dist/design-system/index.d.ts +1 -0
  27. package/dist/design-system/index.d.ts.map +1 -1
  28. package/dist/design-system/split-button.d.ts +25 -0
  29. package/dist/design-system/split-button.d.ts.map +1 -0
  30. package/dist/ui/buttons/animated.js +5 -5
  31. package/dist/ui/buttons/animated.mjs +3 -3
  32. package/dist/ui/buttons.js +6 -6
  33. package/dist/ui/buttons.mjs +4 -4
  34. package/dist/ui/data-table.js +16 -16
  35. package/dist/ui/data-table.mjs +6 -6
  36. package/dist/ui/dropdown/dropdown.d.ts +1 -1
  37. package/dist/ui/dropdown/dropdown.d.ts.map +1 -1
  38. package/dist/ui/dropdown/types.d.ts +2 -2
  39. package/dist/ui/dropdown/types.d.ts.map +1 -1
  40. package/dist/ui/dropdown.js +31 -231
  41. package/dist/ui/dropdown.js.map +1 -1
  42. package/dist/ui/dropdown.mjs +4 -229
  43. package/dist/ui/dropdown.mjs.map +1 -1
  44. package/dist/ui/dynamic-stepper.js +15 -15
  45. package/dist/ui/dynamic-stepper.mjs +4 -4
  46. package/dist/ui/pagination.js +7 -7
  47. package/dist/ui/pagination.mjs +4 -4
  48. package/dist/ui/split-button/index.d.ts +4 -0
  49. package/dist/ui/split-button/index.d.ts.map +1 -0
  50. package/dist/ui/split-button/split-button-base.d.ts +6 -0
  51. package/dist/ui/split-button/split-button-base.d.ts.map +1 -0
  52. package/dist/ui/split-button/split-button.d.ts +6 -0
  53. package/dist/ui/split-button/split-button.d.ts.map +1 -0
  54. package/dist/ui/split-button/types.d.ts +30 -0
  55. package/dist/ui/split-button/types.d.ts.map +1 -0
  56. package/dist/ui/split-button/variants.d.ts +16 -0
  57. package/dist/ui/split-button/variants.d.ts.map +1 -0
  58. package/dist/ui/split-button.js +287 -0
  59. package/dist/ui/split-button.js.map +1 -0
  60. package/dist/ui/split-button.mjs +278 -0
  61. package/dist/ui/split-button.mjs.map +1 -0
  62. package/package.json +1 -1
  63. package/src/design-system/index.ts +1 -0
  64. package/src/design-system/split-button.ts +38 -0
  65. package/src/ui/dropdown/dropdown.tsx +7 -3
  66. package/src/ui/dropdown/types.ts +2 -2
  67. package/src/ui/split-button/index.ts +19 -0
  68. package/src/ui/split-button/split-button-base.tsx +232 -0
  69. package/src/ui/split-button/split-button.test.tsx +208 -0
  70. package/src/ui/split-button/split-button.tsx +9 -0
  71. package/src/ui/split-button/types.ts +46 -0
  72. package/src/ui/split-button/variants.ts +46 -0
  73. package/dist/chunk-5FU57ZVQ.js +0 -19
  74. package/dist/chunk-FUCW5GPE.mjs.map +0 -1
  75. package/dist/chunk-TJ2EWPER.js.map +0 -1
@@ -1,22 +1,23 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
+ var chunkI7EBE7BD_js = require('../chunk-I7EBE7BD.js');
4
5
  var chunkOYAJG2BO_js = require('../chunk-OYAJG2BO.js');
5
6
  var chunkHMDH4BQJ_js = require('../chunk-HMDH4BQJ.js');
6
- var chunkI7EBE7BD_js = require('../chunk-I7EBE7BD.js');
7
7
  require('../chunk-74SKXGTM.js');
8
8
  var chunkKQZWTTY2_js = require('../chunk-KQZWTTY2.js');
9
- var chunkG7FVHZRB_js = require('../chunk-G7FVHZRB.js');
9
+ var chunkL5QORCUO_js = require('../chunk-L5QORCUO.js');
10
10
  var chunk2VUMVDR3_js = require('../chunk-2VUMVDR3.js');
11
11
  var chunkPTU5ZAYX_js = require('../chunk-PTU5ZAYX.js');
12
12
  require('../chunk-SCOIRBML.js');
13
13
  require('../chunk-XR3J46TZ.js');
14
- var chunk5ELR6MIN_js = require('../chunk-5ELR6MIN.js');
15
- require('../chunk-5FU57ZVQ.js');
14
+ var chunkBAAXQPZ7_js = require('../chunk-BAAXQPZ7.js');
15
+ require('../chunk-6OVDBAMI.js');
16
16
  var chunkT7PIKDUZ_js = require('../chunk-T7PIKDUZ.js');
17
17
  require('../chunk-KOIXQXZB.js');
18
- var chunkTJ2EWPER_js = require('../chunk-TJ2EWPER.js');
18
+ var chunkDPNTQ4AK_js = require('../chunk-DPNTQ4AK.js');
19
19
  require('../chunk-FBUY6K6S.js');
20
+ require('../chunk-OH5VOGNW.js');
20
21
  require('../chunk-Y7BU5RC4.js');
21
22
  require('../chunk-NDF3HORF.js');
22
23
  require('../chunk-USLNTKVQ.js');
@@ -29,7 +30,6 @@ require('../chunk-3EJCQXGV.js');
29
30
  require('../chunk-6KVTKYTB.js');
30
31
  require('../chunk-L7W4NRK6.js');
31
32
  require('../chunk-KWBGLH7G.js');
32
- require('../chunk-OH5VOGNW.js');
33
33
  require('../chunk-WGN2CBG6.js');
34
34
  require('../chunk-SRSRY5K2.js');
35
35
  require('../chunk-UG3GF2BD.js');
@@ -63,14 +63,14 @@ var react = require('react');
63
63
  var classVarianceAuthority = require('class-variance-authority');
64
64
  var jsxRuntime = require('react/jsx-runtime');
65
65
 
66
- var dataTableRootVariants = classVarianceAuthority.cva(chunkTJ2EWPER_js.zuiDataTableRootBase);
67
- var dataTableToolbarVariants = classVarianceAuthority.cva(chunkTJ2EWPER_js.zuiDataTableToolbarBase);
68
- var dataTableToolbarGroupVariants = classVarianceAuthority.cva(chunkTJ2EWPER_js.zuiDataTableToolbarGroupBase);
69
- var dataTableColumnPanelVariants = classVarianceAuthority.cva(chunkTJ2EWPER_js.zuiDataTableColumnPanelBase);
70
- var dataTableStatusVariants = classVarianceAuthority.cva(chunkTJ2EWPER_js.zuiDataTableStatusBase);
71
- var dataTableStateCellVariants = classVarianceAuthority.cva(chunkTJ2EWPER_js.zuiDataTableStateCellBase);
66
+ var dataTableRootVariants = classVarianceAuthority.cva(chunkDPNTQ4AK_js.zuiDataTableRootBase);
67
+ var dataTableToolbarVariants = classVarianceAuthority.cva(chunkDPNTQ4AK_js.zuiDataTableToolbarBase);
68
+ var dataTableToolbarGroupVariants = classVarianceAuthority.cva(chunkDPNTQ4AK_js.zuiDataTableToolbarGroupBase);
69
+ var dataTableColumnPanelVariants = classVarianceAuthority.cva(chunkDPNTQ4AK_js.zuiDataTableColumnPanelBase);
70
+ var dataTableStatusVariants = classVarianceAuthority.cva(chunkDPNTQ4AK_js.zuiDataTableStatusBase);
71
+ var dataTableStateCellVariants = classVarianceAuthority.cva(chunkDPNTQ4AK_js.zuiDataTableStateCellBase);
72
72
  var dataTableVirtualScrollVariants = classVarianceAuthority.cva(
73
- chunkTJ2EWPER_js.zuiDataTableVirtualScrollBase
73
+ chunkDPNTQ4AK_js.zuiDataTableVirtualScrollBase
74
74
  );
75
75
  var defaultLoadingContent = "Loading data";
76
76
  var defaultEmptyContent = "No results found";
@@ -493,7 +493,7 @@ function DataTableBase(props) {
493
493
  className: dataTableToolbarGroupVariants(),
494
494
  children: [
495
495
  bulkActions.map((action, index) => /* @__PURE__ */ jsxRuntime.jsx(
496
- chunk5ELR6MIN_js.Button,
496
+ chunkBAAXQPZ7_js.Button,
497
497
  {
498
498
  type: "button",
499
499
  appearance: "outline",
@@ -506,7 +506,7 @@ function DataTableBase(props) {
506
506
  )),
507
507
  enableColumnVisibility ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
508
508
  /* @__PURE__ */ jsxRuntime.jsx(
509
- chunk5ELR6MIN_js.Button,
509
+ chunkBAAXQPZ7_js.Button,
510
510
  {
511
511
  type: "button",
512
512
  appearance: "outline",
@@ -583,7 +583,7 @@ function DataTableBase(props) {
583
583
  sortedData.length
584
584
  ] }) : null,
585
585
  /* @__PURE__ */ jsxRuntime.jsx(
586
- chunkG7FVHZRB_js.Pagination,
586
+ chunkL5QORCUO_js.Pagination,
587
587
  {
588
588
  appearance: resolvedPaginationAppearance,
589
589
  size: resolvedSize,
@@ -1,20 +1,21 @@
1
1
  "use client";
2
+ import { useTableSort } from '../chunk-W6DO36XD.mjs';
2
3
  import { useVirtualList } from '../chunk-QKO5DA4N.mjs';
3
4
  import { useTableFilter } from '../chunk-ZOHCADDL.mjs';
4
- import { useTableSort } from '../chunk-W6DO36XD.mjs';
5
5
  import '../chunk-TDK5TVJE.mjs';
6
6
  import { TableBase, TableCaption, TableHeader, TableRow, TableHead, TableBody, TableCell } from '../chunk-BYXFSXNG.mjs';
7
- import { Pagination } from '../chunk-DBNGLT5U.mjs';
7
+ import { Pagination } from '../chunk-D7ZTSAA6.mjs';
8
8
  import { usePagination } from '../chunk-YNBJAFI2.mjs';
9
9
  import { Input } from '../chunk-LHBJD57K.mjs';
10
10
  import '../chunk-O22T5X4G.mjs';
11
11
  import '../chunk-VBNW2B4D.mjs';
12
- import { Button } from '../chunk-7UXPXCKV.mjs';
13
- import '../chunk-KVSRUAXP.mjs';
12
+ import { Button } from '../chunk-OWVQVAOY.mjs';
13
+ import '../chunk-4PAHLHYF.mjs';
14
14
  import { Checkbox } from '../chunk-CYKSS5S5.mjs';
15
15
  import '../chunk-ILCT3P7D.mjs';
16
- import { zuiDataTableRootBase, zuiDataTableToolbarBase, zuiDataTableToolbarGroupBase, zuiDataTableColumnPanelBase, zuiDataTableStatusBase, zuiDataTableStateCellBase, zuiDataTableVirtualScrollBase } from '../chunk-FUCW5GPE.mjs';
16
+ import { zuiDataTableRootBase, zuiDataTableToolbarBase, zuiDataTableToolbarGroupBase, zuiDataTableColumnPanelBase, zuiDataTableStatusBase, zuiDataTableStateCellBase, zuiDataTableVirtualScrollBase } from '../chunk-UVP3MUBU.mjs';
17
17
  import '../chunk-2NQKFH26.mjs';
18
+ import '../chunk-XY3TKIIH.mjs';
18
19
  import '../chunk-FX5KR2GP.mjs';
19
20
  import '../chunk-ZBAKTM2R.mjs';
20
21
  import '../chunk-4ZBMDWWY.mjs';
@@ -27,7 +28,6 @@ import '../chunk-LRYKMXKI.mjs';
27
28
  import '../chunk-XFJIX2YP.mjs';
28
29
  import '../chunk-4WG3VNVL.mjs';
29
30
  import '../chunk-YPTHTFVF.mjs';
30
- import '../chunk-XY3TKIIH.mjs';
31
31
  import '../chunk-JEDMUBYI.mjs';
32
32
  import '../chunk-EJ3UMMCS.mjs';
33
33
  import '../chunk-EE53BIXR.mjs';
@@ -1,5 +1,5 @@
1
1
  import type { DropdownProps, DropdownTriggerProps, DropdownContentProps, DropdownItemProps } from "./types";
2
- export declare const Dropdown: ({ children, defaultOpen, open: controlledOpen, onOpenChange, multiSelect, }: DropdownProps) => import("react/jsx-runtime").JSX.Element;
2
+ export declare const Dropdown: ({ children, className, defaultOpen, open: controlledOpen, onOpenChange, multiSelect, ...props }: DropdownProps) => import("react/jsx-runtime").JSX.Element;
3
3
  export declare const DropdownTrigger: ({ children, className, variant, size, onClick, ...props }: DropdownTriggerProps) => import("react/jsx-runtime").JSX.Element;
4
4
  export declare const DropdownContent: ({ children, className, placement, spacing, divider, ...props }: DropdownContentProps) => import("react/jsx-runtime").JSX.Element | null;
5
5
  export declare const DropdownItem: ({ children, value, className, variant, onClick, onKeyDown, onSelect, leftIcon, rightIcon, ...props }: DropdownItemProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown.d.ts","sourceRoot":"","sources":["../../../src/ui/dropdown/dropdown.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAEV,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAkBjB,eAAO,MAAM,QAAQ,GAAI,6EAMtB,aAAa,4CA4Cf,CAAC;AAKF,eAAO,MAAM,eAAe,GAAI,2DAO7B,oBAAoB,4CAqBtB,CAAC;AAKF,eAAO,MAAM,eAAe,GAAI,gEAO7B,oBAAoB,mDAgCtB,CAAC;AAKF,eAAO,MAAM,YAAY,GAAI,sGAW1B,iBAAiB,4CAgFnB,CAAC"}
1
+ {"version":3,"file":"dropdown.d.ts","sourceRoot":"","sources":["../../../src/ui/dropdown/dropdown.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAEV,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAkBjB,eAAO,MAAM,QAAQ,GAAI,iGAQtB,aAAa,4CA8Cf,CAAC;AAKF,eAAO,MAAM,eAAe,GAAI,2DAO7B,oBAAoB,4CAqBtB,CAAC;AAKF,eAAO,MAAM,eAAe,GAAI,gEAO7B,oBAAoB,mDAgCtB,CAAC;AAKF,eAAO,MAAM,YAAY,GAAI,sGAW1B,iBAAiB,4CAgFnB,CAAC"}
@@ -10,7 +10,7 @@ export type DropdownContextType = {
10
10
  menuId: string;
11
11
  };
12
12
  type Variant = keyof typeof zuiDropdownTriggerVariants;
13
- export type DropdownProps = {
13
+ export type DropdownProps = HTMLAttributes<HTMLDivElement> & {
14
14
  children: ReactNode;
15
15
  defaultOpen?: boolean;
16
16
  open?: boolean;
@@ -30,7 +30,7 @@ export type DropdownContentProps = HTMLAttributes<HTMLDivElement> & {
30
30
  };
31
31
  export type DropdownItemProps = HTMLAttributes<HTMLDivElement> & {
32
32
  children: ReactNode;
33
- value: string;
33
+ value?: string;
34
34
  onSelect?: () => void;
35
35
  leftIcon?: ReactNode;
36
36
  rightIcon?: ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ui/dropdown/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAExE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE/E,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,OAAO,GAAG,MAAM,OAAO,0BAA0B,CAAC;AAEvD,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IAC3E,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC,cAAc,CAAC,GAAG;IAClE,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IAChD,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,cAAc,CAAC,GAAG;IAC/D,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ui/dropdown/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAExE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE/E,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,OAAO,GAAG,MAAM,OAAO,0BAA0B,CAAC;AAEvD,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC,cAAc,CAAC,GAAG;IAC3D,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IAC3E,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC,cAAc,CAAC,GAAG;IAClE,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IAChD,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,cAAc,CAAC,GAAG;IAC/D,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC"}
@@ -1,241 +1,41 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunk7DCFVPWN_js = require('../chunk-7DCFVPWN.js');
5
- var chunkY5JAQEBF_js = require('../chunk-Y5JAQEBF.js');
6
- var chunkZS5756ZC_js = require('../chunk-ZS5756ZC.js');
4
+ var chunk4SLVTSHM_js = require('../chunk-4SLVTSHM.js');
5
+ require('../chunk-7DCFVPWN.js');
6
+ require('../chunk-Y5JAQEBF.js');
7
+ require('../chunk-ZS5756ZC.js');
7
8
  require('../chunk-PZ5AY32C.js');
8
- var react = require('react');
9
- var fi = require('react-icons/fi');
10
- var classVarianceAuthority = require('class-variance-authority');
11
- var jsxRuntime = require('react/jsx-runtime');
12
9
 
13
- var triggerVariants = classVarianceAuthority.cva(chunkY5JAQEBF_js.zuiDropdownTriggerBase, {
14
- variants: {
15
- variant: chunkY5JAQEBF_js.zuiDropdownTriggerVariants,
16
- size: chunkY5JAQEBF_js.zuiDropdownTriggerSizes
17
- },
18
- defaultVariants: {
19
- variant: "default",
20
- size: "md"
21
- }
10
+
11
+
12
+ Object.defineProperty(exports, "Dropdown", {
13
+ enumerable: true,
14
+ get: function () { return chunk4SLVTSHM_js.Dropdown; }
22
15
  });
23
- var contentVariants = classVarianceAuthority.cva(chunkY5JAQEBF_js.zuiDropdownContentBase, {
24
- variants: {
25
- placement: chunkY5JAQEBF_js.zuiDropdownPlacements,
26
- spacing: chunkY5JAQEBF_js.zuiDropdownSpacing
27
- },
28
- defaultVariants: {
29
- placement: "bottom",
30
- spacing: "default"
31
- }
16
+ Object.defineProperty(exports, "DropdownContent", {
17
+ enumerable: true,
18
+ get: function () { return chunk4SLVTSHM_js.DropdownContent; }
32
19
  });
33
- var itemVariants = classVarianceAuthority.cva(chunkY5JAQEBF_js.zuiDropdownItemBase, {
34
- variants: {
35
- variant: chunkY5JAQEBF_js.zuiDropdownItemVariants
36
- },
37
- defaultVariants: {
38
- variant: "default"
39
- }
20
+ Object.defineProperty(exports, "DropdownItem", {
21
+ enumerable: true,
22
+ get: function () { return chunk4SLVTSHM_js.DropdownItem; }
23
+ });
24
+ Object.defineProperty(exports, "DropdownTrigger", {
25
+ enumerable: true,
26
+ get: function () { return chunk4SLVTSHM_js.DropdownTrigger; }
27
+ });
28
+ Object.defineProperty(exports, "contentVariants", {
29
+ enumerable: true,
30
+ get: function () { return chunk4SLVTSHM_js.contentVariants; }
31
+ });
32
+ Object.defineProperty(exports, "itemVariants", {
33
+ enumerable: true,
34
+ get: function () { return chunk4SLVTSHM_js.itemVariants; }
35
+ });
36
+ Object.defineProperty(exports, "triggerVariants", {
37
+ enumerable: true,
38
+ get: function () { return chunk4SLVTSHM_js.triggerVariants; }
40
39
  });
41
- var DropdownContext = react.createContext(null);
42
- var useDropdown = () => {
43
- const ctx = react.useContext(DropdownContext);
44
- if (!ctx) throw new Error("Use inside Dropdown");
45
- return ctx;
46
- };
47
- var Dropdown = ({
48
- children,
49
- defaultOpen = false,
50
- open: controlledOpen,
51
- onOpenChange,
52
- multiSelect = false
53
- }) => {
54
- const menuId = `${react.useId()}-menu`;
55
- const [uncontrolledOpen, setUncontrolledOpen] = react.useState(defaultOpen);
56
- const [selectedValues, setSelectedValues] = react.useState([]);
57
- const open = controlledOpen ?? uncontrolledOpen;
58
- const setOpen = (val) => {
59
- if (controlledOpen !== void 0) {
60
- onOpenChange?.(val);
61
- } else {
62
- setUncontrolledOpen(val);
63
- }
64
- };
65
- const toggle = () => setOpen(!open);
66
- const toggleSelect = (value) => {
67
- if (!multiSelect) {
68
- setSelectedValues([value]);
69
- setOpen(false);
70
- return;
71
- }
72
- setSelectedValues(
73
- (prev) => prev.includes(value) ? prev.filter((v) => v !== value) : [...prev, value]
74
- );
75
- };
76
- return /* @__PURE__ */ jsxRuntime.jsx(
77
- DropdownContext.Provider,
78
- {
79
- value: {
80
- open,
81
- setOpen,
82
- toggle,
83
- selectedValues,
84
- toggleSelect,
85
- multiSelect,
86
- menuId
87
- },
88
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative inline-block", children })
89
- }
90
- );
91
- };
92
- var DropdownTrigger = ({
93
- children,
94
- className,
95
- variant,
96
- size,
97
- onClick,
98
- ...props
99
- }) => {
100
- const { toggle, open, menuId } = useDropdown();
101
- return /* @__PURE__ */ jsxRuntime.jsx(
102
- "button",
103
- {
104
- type: "button",
105
- "aria-expanded": open,
106
- "aria-haspopup": "menu",
107
- "aria-controls": menuId,
108
- className: chunkZS5756ZC_js.cn(triggerVariants({ variant, size }), className),
109
- ...props,
110
- onClick: (event) => {
111
- onClick?.(event);
112
- if (!event.defaultPrevented) {
113
- toggle();
114
- }
115
- },
116
- children
117
- }
118
- );
119
- };
120
- var DropdownContent = ({
121
- children,
122
- className,
123
- placement = "bottom",
124
- spacing = "default",
125
- divider,
126
- ...props
127
- }) => {
128
- const { open, setOpen, menuId } = useDropdown();
129
- const ref = react.useRef(null);
130
- chunk7DCFVPWN_js.useClickOutside({ ref, setOpen });
131
- react.useEffect(() => {
132
- if (!open) {
133
- return;
134
- }
135
- ref.current?.querySelector('[role="menuitem"]')?.focus();
136
- }, [open]);
137
- if (!open) return null;
138
- return /* @__PURE__ */ jsxRuntime.jsx(
139
- "div",
140
- {
141
- ref,
142
- id: menuId,
143
- role: "menu",
144
- className: chunkZS5756ZC_js.cn(
145
- contentVariants({ placement, spacing }),
146
- className,
147
- divider && "divide-y divide-current"
148
- ),
149
- ...props,
150
- children
151
- }
152
- );
153
- };
154
- var DropdownItem = ({
155
- children,
156
- value,
157
- className,
158
- variant,
159
- onClick,
160
- onKeyDown,
161
- onSelect,
162
- leftIcon,
163
- rightIcon,
164
- ...props
165
- }) => {
166
- const { toggleSelect, selectedValues } = useDropdown();
167
- const isSelected = selectedValues.includes(value);
168
- const handleClick = () => {
169
- toggleSelect(value);
170
- onSelect?.();
171
- };
172
- const focusSiblingItem = (event, direction) => {
173
- const menu = event.currentTarget.closest('[role="menu"]');
174
- const items = Array.from(
175
- menu?.querySelectorAll('[role="menuitem"]') ?? []
176
- );
177
- const currentIndex = items.indexOf(event.currentTarget);
178
- if (currentIndex === -1 || items.length === 0) {
179
- return;
180
- }
181
- const nextIndex = direction === "first" ? 0 : direction === "last" ? items.length - 1 : (currentIndex + (direction === "next" ? 1 : -1) + items.length) % items.length;
182
- items[nextIndex]?.focus();
183
- };
184
- return /* @__PURE__ */ jsxRuntime.jsxs(
185
- "div",
186
- {
187
- role: "menuitem",
188
- tabIndex: -1,
189
- onClick: (event) => {
190
- onClick?.(event);
191
- if (!event.defaultPrevented) {
192
- handleClick();
193
- }
194
- },
195
- onKeyDown: (e) => {
196
- onKeyDown?.(e);
197
- if (e.defaultPrevented) {
198
- return;
199
- }
200
- if (e.key === "Enter" || e.key === " ") {
201
- e.preventDefault();
202
- handleClick();
203
- } else if (e.key === "ArrowDown") {
204
- e.preventDefault();
205
- focusSiblingItem(e, "next");
206
- } else if (e.key === "ArrowUp") {
207
- e.preventDefault();
208
- focusSiblingItem(e, "previous");
209
- } else if (e.key === "Home") {
210
- e.preventDefault();
211
- focusSiblingItem(e, "first");
212
- } else if (e.key === "End") {
213
- e.preventDefault();
214
- focusSiblingItem(e, "last");
215
- }
216
- },
217
- className: chunkZS5756ZC_js.cn(itemVariants({ variant }), className),
218
- ...props,
219
- children: [
220
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
221
- leftIcon,
222
- children
223
- ] }),
224
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
225
- isSelected && /* @__PURE__ */ jsxRuntime.jsx(fi.FiCheck, {}),
226
- rightIcon
227
- ] })
228
- ]
229
- }
230
- );
231
- };
232
-
233
- exports.Dropdown = Dropdown;
234
- exports.DropdownContent = DropdownContent;
235
- exports.DropdownItem = DropdownItem;
236
- exports.DropdownTrigger = DropdownTrigger;
237
- exports.contentVariants = contentVariants;
238
- exports.itemVariants = itemVariants;
239
- exports.triggerVariants = triggerVariants;
240
40
  //# sourceMappingURL=dropdown.js.map
241
41
  //# sourceMappingURL=dropdown.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ui/dropdown/variants.ts","../../src/ui/dropdown/dropdown.tsx"],"names":["cva","zuiDropdownTriggerBase","zuiDropdownTriggerVariants","zuiDropdownTriggerSizes","zuiDropdownContentBase","zuiDropdownPlacements","zuiDropdownSpacing","zuiDropdownItemBase","zuiDropdownItemVariants","createContext","useContext","useId","useState","jsx","cn","useRef","useClickOutside","useEffect","jsxs","FiCheck"],"mappings":"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","file":"dropdown.js","sourcesContent":["import { cva } from \"class-variance-authority\";\n\nimport {\n zuiDropdownContentBase,\n zuiDropdownItemBase,\n zuiDropdownItemVariants,\n zuiDropdownPlacements,\n zuiDropdownSpacing,\n zuiDropdownTriggerBase,\n zuiDropdownTriggerSizes,\n zuiDropdownTriggerVariants,\n} from \"../../design-system/dropdown\";\n\nexport const triggerVariants = cva(zuiDropdownTriggerBase, {\n variants: {\n variant: zuiDropdownTriggerVariants,\n size: zuiDropdownTriggerSizes,\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n});\n\nexport const contentVariants = cva(zuiDropdownContentBase, {\n variants: {\n placement: zuiDropdownPlacements,\n spacing: zuiDropdownSpacing,\n },\n defaultVariants: {\n placement: \"bottom\",\n spacing: \"default\",\n },\n});\n\nexport const itemVariants = cva(zuiDropdownItemBase, {\n variants: {\n variant: zuiDropdownItemVariants,\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n","\"use client\";\n\nimport {\n createContext,\n useContext,\n useState,\n useRef,\n useEffect,\n useId,\n type KeyboardEvent,\n} from \"react\";\nimport { FiCheck } from \"react-icons/fi\";\nimport { cn } from \"../../lib/utils\";\nimport type {\n DropdownContextType,\n DropdownProps,\n DropdownTriggerProps,\n DropdownContentProps,\n DropdownItemProps,\n} from \"./types\";\nimport { triggerVariants, contentVariants, itemVariants } from \"./variants\";\nimport { useClickOutside } from \"../../hooks/useClickOutside\";\n\n/* =========================\n Context\n========================= */\nconst DropdownContext = createContext<DropdownContextType | null>(null);\n\nconst useDropdown = () => {\n const ctx = useContext(DropdownContext);\n if (!ctx) throw new Error(\"Use inside Dropdown\");\n return ctx;\n};\n\n/* =========================\n Root\n========================= */\nexport const Dropdown = ({\n children,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n multiSelect = false,\n}: DropdownProps) => {\n const menuId = `${useId()}-menu`;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const [selectedValues, setSelectedValues] = useState<string[]>([]);\n\n const open = controlledOpen ?? uncontrolledOpen;\n\n const setOpen = (val: boolean) => {\n if (controlledOpen !== undefined) {\n onOpenChange?.(val);\n } else {\n setUncontrolledOpen(val);\n }\n };\n\n const toggle = () => setOpen(!open);\n\n const toggleSelect = (value: string) => {\n if (!multiSelect) {\n setSelectedValues([value]);\n setOpen(false);\n return;\n }\n\n setSelectedValues((prev) =>\n prev.includes(value) ? prev.filter((v) => v !== value) : [...prev, value],\n );\n };\n\n return (\n <DropdownContext.Provider\n value={{\n open,\n setOpen,\n toggle,\n selectedValues,\n toggleSelect,\n multiSelect,\n menuId,\n }}\n >\n <div className=\"relative inline-block\">{children}</div>\n </DropdownContext.Provider>\n );\n};\n\n/* =========================\n Trigger\n========================= */\nexport const DropdownTrigger = ({\n children,\n className,\n variant,\n size,\n onClick,\n ...props\n}: DropdownTriggerProps) => {\n const { toggle, open, menuId } = useDropdown();\n\n return (\n <button\n type=\"button\"\n aria-expanded={open}\n aria-haspopup=\"menu\"\n aria-controls={menuId}\n className={cn(triggerVariants({ variant, size }), className)}\n {...props}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n toggle();\n }\n }}\n >\n {children}\n </button>\n );\n};\n\n/* =========================\n Content\n========================= */\nexport const DropdownContent = ({\n children,\n className,\n placement = \"bottom\",\n spacing = \"default\",\n divider,\n ...props\n}: DropdownContentProps) => {\n const { open, setOpen, menuId } = useDropdown();\n const ref = useRef<HTMLDivElement>(null);\n\n // click outside\n useClickOutside({ ref, setOpen });\n\n useEffect(() => {\n if (!open) {\n return;\n }\n\n ref.current?.querySelector<HTMLElement>('[role=\"menuitem\"]')?.focus();\n }, [open]);\n\n if (!open) return null;\n\n return (\n <div\n ref={ref}\n id={menuId}\n role=\"menu\"\n className={cn(\n contentVariants({ placement, spacing }),\n className,\n divider && \"divide-y divide-current\",\n )}\n {...props}\n >\n {children}\n </div>\n );\n};\n\n/* =========================\n Item\n========================= */\nexport const DropdownItem = ({\n children,\n value,\n className,\n variant,\n onClick,\n onKeyDown,\n onSelect,\n leftIcon,\n rightIcon,\n ...props\n}: DropdownItemProps) => {\n const { toggleSelect, selectedValues } = useDropdown();\n const isSelected = selectedValues.includes(value);\n\n const handleClick = () => {\n toggleSelect(value);\n onSelect?.();\n };\n\n const focusSiblingItem = (\n event: KeyboardEvent<HTMLDivElement>,\n direction: \"next\" | \"previous\" | \"first\" | \"last\",\n ) => {\n const menu = event.currentTarget.closest('[role=\"menu\"]');\n const items = Array.from(\n menu?.querySelectorAll<HTMLElement>('[role=\"menuitem\"]') ?? [],\n );\n const currentIndex = items.indexOf(event.currentTarget);\n\n if (currentIndex === -1 || items.length === 0) {\n return;\n }\n\n const nextIndex =\n direction === \"first\"\n ? 0\n : direction === \"last\"\n ? items.length - 1\n : (currentIndex + (direction === \"next\" ? 1 : -1) + items.length) %\n items.length;\n\n items[nextIndex]?.focus();\n };\n\n return (\n <div\n role=\"menuitem\"\n tabIndex={-1}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n handleClick();\n }\n }}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) {\n return;\n }\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleClick();\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault();\n focusSiblingItem(e, \"next\");\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n focusSiblingItem(e, \"previous\");\n } else if (e.key === \"Home\") {\n e.preventDefault();\n focusSiblingItem(e, \"first\");\n } else if (e.key === \"End\") {\n e.preventDefault();\n focusSiblingItem(e, \"last\");\n }\n }}\n className={cn(itemVariants({ variant }), className)}\n {...props}\n >\n <div className=\"flex items-center gap-2\">\n {leftIcon}\n {children}\n </div>\n\n <div className=\"flex items-center gap-2\">\n {isSelected && <FiCheck />}\n {rightIcon}\n </div>\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"dropdown.js"}