@eml-payments/ui-kit 0.1.18 → 0.1.20
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.
- package/README.md +8 -15
- package/dist/index.css +1 -1
- package/dist/src/components/Dropdown/Dropdown.d.ts +25 -0
- package/dist/src/components/Dropdown/Dropdown.js +51 -0
- package/dist/src/components/Dropdown/Dropdown.stories.d.ts +10 -0
- package/dist/src/components/Dropdown/Dropdown.stories.js +32 -0
- package/dist/src/components/Dropdown/index.d.ts +1 -0
- package/dist/src/components/Dropdown/index.js +1 -0
- package/dist/src/components/DropdownWrapper/DropdownWrapper.d.ts +11 -0
- package/dist/src/components/DropdownWrapper/DropdownWrapper.js +31 -0
- package/dist/src/components/DropdownWrapper/DropdownWrapper.stories.d.ts +10 -0
- package/dist/src/components/DropdownWrapper/DropdownWrapper.stories.js +74 -0
- package/dist/src/components/DropdownWrapper/DropdownWrapper.types.d.ts +11 -0
- package/dist/src/components/DropdownWrapper/DropdownWrapper.types.js +1 -0
- package/dist/src/components/DropdownWrapper/index.d.ts +1 -0
- package/dist/src/components/DropdownWrapper/index.js +1 -0
- package/dist/src/components/Table/Pagination/PaginationControls.d.ts +1 -1
- package/dist/src/components/Table/Pagination/PaginationControls.js +10 -8
- package/dist/src/components/Table/Pagination/PaginationControls.types.d.ts +5 -1
- package/dist/src/components/Table/Table.js +6 -5
- package/dist/src/components/Table/Table.stories.d.ts +1 -8
- package/dist/src/components/Table/Table.stories.js +32 -2
- package/dist/src/components/Table/Table.types.d.ts +2 -1
- package/dist/src/components/Table/hooks/usePaginationController.d.ts +15 -0
- package/dist/src/components/Table/hooks/usePaginationController.js +30 -0
- package/dist/src/components/Table/hooks/useTableController.d.ts +7 -3
- package/dist/src/components/Table/hooks/useTableController.js +9 -4
- package/dist/src/components/index.d.ts +2 -0
- package/dist/src/components/index.js +2 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -44,8 +44,8 @@ import { UIKitProvider } from '@eml-payments/ui-kit';
|
|
|
44
44
|
|
|
45
45
|
const theme = {
|
|
46
46
|
colors: {
|
|
47
|
-
primary:
|
|
48
|
-
success:
|
|
47
|
+
primary: { light: "#0A5FFF", dark: "#7c80f8" },
|
|
48
|
+
success: { light: "#12D176", dark: "#16c784" },
|
|
49
49
|
error: '#d7263d',
|
|
50
50
|
// ...override any design token here
|
|
51
51
|
},
|
|
@@ -76,12 +76,12 @@ You can fully override the theme tokens using the `config` prop:
|
|
|
76
76
|
```ts
|
|
77
77
|
type UIKitConfig = {
|
|
78
78
|
colors?: {
|
|
79
|
-
primary?: string;
|
|
80
|
-
secondary?: string;
|
|
81
|
-
accent?: string;
|
|
82
|
-
success?: string;
|
|
83
|
-
warning?: string;
|
|
84
|
-
error?: string;
|
|
79
|
+
primary?: string | { light: string; dark: string };
|
|
80
|
+
secondary?: string | { light: string; dark: string };
|
|
81
|
+
accent?: string | { light: string; dark: string };
|
|
82
|
+
success?: string | { light: string; dark: string };
|
|
83
|
+
warning?: string | { light: string; dark: string };
|
|
84
|
+
error?: string | { light: string; dark: string };
|
|
85
85
|
[key: string]: string | undefined;
|
|
86
86
|
};
|
|
87
87
|
radius?: string; // e.g. "8px"
|
|
@@ -130,13 +130,6 @@ const data = [
|
|
|
130
130
|
|
|
131
131
|
---
|
|
132
132
|
|
|
133
|
-
## 🤝 Contributing
|
|
134
|
-
|
|
135
|
-
We welcome PRs and issues!
|
|
136
|
-
See [CONTRIBUTING.md](./CONTRIBUTING.md) for details.
|
|
137
|
-
|
|
138
|
-
---
|
|
139
|
-
|
|
140
133
|
## 📝 License
|
|
141
134
|
|
|
142
135
|
MIT © EML Payments
|
package/dist/index.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background:0 0% 100%;--foreground:0 0% 3.9%;--card:0 0% 100%;--card-foreground:0 0% 3.9%;--popover:0 0% 100%;--popover-foreground:0 0% 3.9%;--primary:0 0% 9%;--primary-foreground:0 0% 98%;--secondary:0 0% 96.1%;--secondary-foreground:0 0% 9%;--muted:0 0% 96.1%;--muted-foreground:0 0% 45.1%;--accent:0 0% 96.1%;--accent-foreground:0 0% 9%;--destructive:0 84.2% 60.2%;--destructive-foreground:0 0% 98%;--border:0 0% 89.8%;--input:0 0% 89.8%;--ring:0 0% 3.9%;--chart-1:12 76% 61%;--chart-2:173 58% 39%;--chart-3:197 37% 24%;--chart-4:43 74% 66%;--chart-5:27 87% 67%;--radius:0.5rem}.dark{--background:0 0% 3.9%;--foreground:0 0% 98%;--card:0 0% 3.9%;--card-foreground:0 0% 98%;--popover:0 0% 3.9%;--popover-foreground:0 0% 98%;--primary:0 0% 98%;--primary-foreground:0 0% 9%;--secondary:0 0% 14.9%;--secondary-foreground:0 0% 98%;--muted:0 0% 14.9%;--muted-foreground:0 0% 63.9%;--accent:0 0% 14.9%;--accent-foreground:0 0% 98%;--destructive:0 62.8% 30.6%;--destructive-foreground:0 0% 98%;--border:0 0% 14.9%;--input:0 0% 14.9%;--ring:0 0% 83.1%;--chart-1:220 70% 50%;--chart-2:160 60% 45%;--chart-3:30 80% 55%;--chart-4:280 65% 60%;--chart-5:340 75% 55%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground))}.pointer-events-none{pointer-events:none}.absolute{position:absolute}.relative{position:relative}.inset-y-0{top:0;bottom:0}.right-2{right:.5rem}.right-3{right:.75rem}.z-50{z-index:50}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.\!table{display:table!important}.table{display:table}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1/1}.h-10{height:2.5rem}.h-2{height:.5rem}.h-24{height:6rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[12px\]{height:12px}.h-\[18px\]{height:18px}.h-\[20px\]{height:20px}.h-\[22px\]{height:22px}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-full{height:100%}.h-px{height:1px}.max-h-\[--radix-select-content-available-height\]{max-height:var(--radix-select-content-available-height)}.w-11{width:2.75rem}.w-14{width:3.5rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[12px\]{width:12px}.w-\[18px\]{width:18px}.w-\[200px\]{width:200px}.w-\[20px\]{width:20px}.w-\[320px\]{width:320px}.w-\[40px\]{width:40px}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-px{width:1px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.table-fixed{table-layout:fixed}.origin-\[--radix-select-content-transform-origin\]{transform-origin:var(--radix-select-content-transform-origin)}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;white-space:nowrap}.text-ellipsis,.truncate{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:var(--uikit-radius,.5rem)}.rounded-\[var\(--uikit-radius\)\]{border-radius:var(--uikit-radius)}.rounded-full{border-radius:9999px}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.border{border-width:1px}.border-2{border-width:2px}.border-\[3px\]{border-width:3px}.border-t{border-top-width:1px}.border-\[var\(--uikit-error\)\]{border-color:var(--uikit-error)}.border-\[var\(--uikit-info\)\]{border-color:var(--uikit-info)}.border-\[var\(--uikit-primary\)\]{border-color:var(--uikit-primary)}.border-\[var\(--uikit-secondary\)\]{border-color:var(--uikit-secondary)}.border-\[var\(--uikit-success\)\]{border-color:var(--uikit-success)}.border-\[var\(--uikit-warning\)\]{border-color:var(--uikit-warning)}.border-black{--tw-border-opacity:1;border-color:rgb(0 0 0/var(--tw-border-opacity,1))}.border-error{border-color:var(--uikit-error,#d7263d)}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.bg-\[var\(--hover-bg-color\)\]{background-color:var(--hover-bg-color)}.bg-\[var\(--uikit-error\)\]{background-color:var(--uikit-error)}.bg-\[var\(--uikit-info\)\]{background-color:var(--uikit-info)}.bg-\[var\(--uikit-primary\)\]{background-color:var(--uikit-primary)}.bg-\[var\(--uikit-secondary\)\]{background-color:var(--uikit-secondary)}.bg-\[var\(--uikit-success\)\]{background-color:var(--uikit-success)}.bg-\[var\(--uikit-tertiary\)\]{background-color:var(--uikit-tertiary)}.bg-\[var\(--uikit-warning\)\]{background-color:var(--uikit-warning)}.bg-background{background-color:hsl(var(--background))}.bg-muted{background-color:hsl(var(--muted))}.bg-popover{background-color:hsl(var(--popover))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.fill-\[var\(--uikit-primary\)\]{fill:var(--uikit-primary)}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.px-\[4px\]{padding-left:4px;padding-right:4px}.px-\[6px\]{padding-left:6px;padding-right:6px}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[3px\]{padding-top:3px;padding-bottom:3px}.py-\[4px\]{padding-top:4px;padding-bottom:4px}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pr-8{padding-right:2rem}.text-left{text-align:left}.text-center{text-align:center}.text-\[16px\]{font-size:16px}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-\[var\(--uikit-font-family\)\]{font-weight:var(--uikit-font-family)}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.leading-none{line-height:1}.text-\[var\(--uikit-error\)\]{color:var(--uikit-error)}.text-\[var\(--uikit-info\)\]{color:var(--uikit-info)}.text-\[var\(--uikit-primary\)\]{color:var(--uikit-primary)}.text-\[var\(--uikit-secondary\)\]{color:var(--uikit-secondary)}.text-\[var\(--uikit-success\)\]{color:var(--uikit-success)}.text-\[var\(--uikit-text-primary\)\]{color:var(--uikit-text-primary)}.text-\[var\(--uikit-warning\)\]{color:var(--uikit-warning)}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.text-current{color:currentColor}.text-error{color:var(--uikit-error,#d7263d)}.text-foreground{color:hsl(var(--foreground))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-transparent{color:transparent}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-md,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-0,.ring-1{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-\[var\(--uikit-error\)\]{--tw-ring-color:var(--uikit-error)}.ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}:root{--uikit-primary:#0a5fff;--uikit-secondary:#71717b;--uikit-tertiary:#f3f5fb;--uikit-accent:#e3ecff;--uikit-success:#16c784;--uikit-warning:#f4b740;--uikit-error:#d7263d;--uikit-info:#fef9bf;--uikit-radius:8px;--uikit-font-family:Inter,system-ui,sans-serif;--uikit-text-primary:#27272a;--hover-bg-color:#dff2fe}@keyframes mui-bar1{0%{left:-35%;right:100%}60%{left:100%;right:-90%}to{left:100%;right:-90%}}@keyframes mui-bar2{0%{left:-200%;right:100%}60%{left:107%;right:-8%}to{left:107%;right:-8%}}.mui-loader{position:absolute;top:37px;left:0;right:0;height:4px;overflow:hidden;background-color:var(--hover-bg-color);z-index:10}.mui-loader:after,.mui-loader:before{content:"";position:absolute;height:100%;background-color:var(--uikit-primary)}.mui-loader:before{animation:mui-bar1 2.5s cubic-bezier(.65,.815,.735,.395) infinite}.mui-loader:after{animation:mui-bar2 2.5s cubic-bezier(.165,.84,.44,1) infinite}.file\:border-0::file-selector-button{border-width:0}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.hover\:border:hover{border-width:1px}.hover\:border-\[var\(--uikit-primary\)\]:hover{border-color:var(--uikit-primary)}.hover\:bg-\[var\(--hover-bg-color\)\]:hover{background-color:var(--hover-bg-color)}.hover\:bg-\[var\(--uikit-secondary\)\]:hover{background-color:var(--uikit-secondary)}.hover\:bg-transparent:hover{background-color:transparent}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.focus\:border-\[var\(--uikit-primary\)\]:focus{border-color:var(--uikit-primary)}.focus\:border-\[var\(--uikit-secondary\)\]:focus{border-color:var(--uikit-secondary)}.focus\:bg-\[var\(--uikit-error\)\]:focus{background-color:var(--uikit-error)}.focus\:bg-\[var\(--uikit-primary\)\]:focus{background-color:var(--uikit-primary)}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:bg-white:focus{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.focus\:text-\[var\(--uikit-secondary\)\]:focus{color:var(--uikit-secondary)}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-error:focus-visible{--tw-ring-color:var(--uikit-error,#d7263d)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color:hsl(var(--background))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom],.data-\[side\=left\]\:-translate-x-1[data-side=left]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.data-\[side\=right\]\:translate-x-1[data-side=right],.data-\[side\=top\]\:-translate-y-1[data-side=top]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x:1rem}.data-\[state\=checked\]\:translate-x-4[data-state=checked],.data-\[state\=checked\]\:translate-x-5[data-state=checked]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:1.25rem}.data-\[state\=checked\]\:translate-x-7[data-state=checked]{--tw-translate-x:1.75rem}.data-\[state\=checked\]\:translate-x-7[data-state=checked],.data-\[state\=checked\]\:translate-x-\[21px\][data-state=checked]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:translate-x-\[21px\][data-state=checked]{--tw-translate-x:21px}.data-\[state\=unchecked\]\:translate-x-\[2px\][data-state=unchecked]{--tw-translate-x:2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:bg-\[var\(--uikit-primary\)\][data-state=checked]{background-color:var(--uikit-primary)}.data-\[state\=unchecked\]\:bg-black[data-state=unchecked]{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.data-\[state\=checked\]\:text-\[var\(--uikit-primary\)\][data-state=checked]{color:var(--uikit-primary)}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:-0.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:0.5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:-0.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:0.5rem}@media (min-width:640px){.sm\:max-w-sm{max-width:24rem}}@media (min-width:768px){.md\:max-w-md{max-width:28rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:h-3 svg{height:.75rem}.\[\&_svg\]\:h-4 svg{height:1rem}.\[\&_svg\]\:w-3 svg{width:.75rem}.\[\&_svg\]\:w-4 svg{width:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}
|
|
1
|
+
*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background:0 0% 100%;--foreground:0 0% 3.9%;--card:0 0% 100%;--card-foreground:0 0% 3.9%;--popover:0 0% 100%;--popover-foreground:0 0% 3.9%;--primary:0 0% 9%;--primary-foreground:0 0% 98%;--secondary:0 0% 96.1%;--secondary-foreground:0 0% 9%;--muted:0 0% 96.1%;--muted-foreground:0 0% 45.1%;--accent:0 0% 96.1%;--accent-foreground:0 0% 9%;--destructive:0 84.2% 60.2%;--destructive-foreground:0 0% 98%;--border:0 0% 89.8%;--input:0 0% 89.8%;--ring:0 0% 3.9%;--chart-1:12 76% 61%;--chart-2:173 58% 39%;--chart-3:197 37% 24%;--chart-4:43 74% 66%;--chart-5:27 87% 67%;--radius:0.5rem}.dark{--background:0 0% 3.9%;--foreground:0 0% 98%;--card:0 0% 3.9%;--card-foreground:0 0% 98%;--popover:0 0% 3.9%;--popover-foreground:0 0% 98%;--primary:0 0% 98%;--primary-foreground:0 0% 9%;--secondary:0 0% 14.9%;--secondary-foreground:0 0% 98%;--muted:0 0% 14.9%;--muted-foreground:0 0% 63.9%;--accent:0 0% 14.9%;--accent-foreground:0 0% 98%;--destructive:0 62.8% 30.6%;--destructive-foreground:0 0% 98%;--border:0 0% 14.9%;--input:0 0% 14.9%;--ring:0 0% 83.1%;--chart-1:220 70% 50%;--chart-2:160 60% 45%;--chart-3:30 80% 55%;--chart-4:280 65% 60%;--chart-5:340 75% 55%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground))}.pointer-events-none{pointer-events:none}.absolute{position:absolute}.relative{position:relative}.inset-y-0{top:0;bottom:0}.left-2{left:.5rem}.right-2{right:.5rem}.right-3{right:.75rem}.z-50{z-index:50}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.ml-auto{margin-left:auto}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.\!table{display:table!important}.table{display:table}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1/1}.size-2{width:.5rem;height:.5rem}.size-3\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.h-10{height:2.5rem}.h-2{height:.5rem}.h-24{height:6rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[12px\]{height:12px}.h-\[18px\]{height:18px}.h-\[20px\]{height:20px}.h-\[22px\]{height:22px}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-full{height:100%}.h-px{height:1px}.max-h-\[--radix-select-content-available-height\]{max-height:var(--radix-select-content-available-height)}.w-11{width:2.75rem}.w-14{width:3.5rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-4{width:1rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[12px\]{width:12px}.w-\[18px\]{width:18px}.w-\[200px\]{width:200px}.w-\[20px\]{width:20px}.w-\[320px\]{width:320px}.w-\[40px\]{width:40px}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-px{width:1px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.table-fixed{table-layout:fixed}.origin-\[--radix-select-content-transform-origin\]{transform-origin:var(--radix-select-content-transform-origin)}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;white-space:nowrap}.text-ellipsis,.truncate{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:var(--uikit-radius,.5rem)}.rounded-\[var\(--uikit-radius\)\]{border-radius:var(--uikit-radius)}.rounded-full{border-radius:9999px}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.border{border-width:1px}.border-2{border-width:2px}.border-\[3px\]{border-width:3px}.border-t{border-top-width:1px}.border-none{border-style:none}.border-\[var\(--uikit-error\)\]{border-color:var(--uikit-error)}.border-\[var\(--uikit-info\)\]{border-color:var(--uikit-info)}.border-\[var\(--uikit-primary\)\]{border-color:var(--uikit-primary)}.border-\[var\(--uikit-secondary\)\]{border-color:var(--uikit-secondary)}.border-\[var\(--uikit-success\)\]{border-color:var(--uikit-success)}.border-\[var\(--uikit-warning\)\]{border-color:var(--uikit-warning)}.border-black{--tw-border-opacity:1;border-color:rgb(0 0 0/var(--tw-border-opacity,1))}.border-error{border-color:var(--uikit-error,#d7263d)}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.bg-\[var\(--uikit-error\)\]{background-color:var(--uikit-error)}.bg-\[var\(--uikit-info\)\]{background-color:var(--uikit-info)}.bg-\[var\(--uikit-primary\)\]{background-color:var(--uikit-primary)}.bg-\[var\(--uikit-primary-10\)\]{background-color:var(--uikit-primary-10)}.bg-\[var\(--uikit-secondary\)\]{background-color:var(--uikit-secondary)}.bg-\[var\(--uikit-success\)\]{background-color:var(--uikit-success)}.bg-\[var\(--uikit-tertiary\)\]{background-color:var(--uikit-tertiary)}.bg-\[var\(--uikit-warning\)\]{background-color:var(--uikit-warning)}.bg-background{background-color:hsl(var(--background))}.bg-border{background-color:hsl(var(--border))}.bg-muted{background-color:hsl(var(--muted))}.bg-popover{background-color:hsl(var(--popover))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.fill-\[var\(--uikit-primary\)\]{fill:var(--uikit-primary)}.fill-current{fill:currentColor}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.px-\[4px\]{padding-left:4px;padding-right:4px}.px-\[6px\]{padding-left:6px;padding-right:6px}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[3px\]{padding-top:3px;padding-bottom:3px}.py-\[4px\]{padding-top:4px;padding-bottom:4px}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-8{padding-left:2rem}.pr-2{padding-right:.5rem}.pr-8{padding-right:2rem}.text-left{text-align:left}.text-center{text-align:center}.text-\[16px\]{font-size:16px}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-\[var\(--uikit-font-family\)\]{font-weight:var(--uikit-font-family)}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.leading-none{line-height:1}.tracking-widest{letter-spacing:.1em}.text-\[var\(--uikit-error\)\]{color:var(--uikit-error)}.text-\[var\(--uikit-info\)\]{color:var(--uikit-info)}.text-\[var\(--uikit-primary\)\]{color:var(--uikit-primary)}.text-\[var\(--uikit-secondary\)\]{color:var(--uikit-secondary)}.text-\[var\(--uikit-success\)\]{color:var(--uikit-success)}.text-\[var\(--uikit-text-primary\)\]{color:var(--uikit-text-primary)}.text-\[var\(--uikit-warning\)\]{color:var(--uikit-warning)}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.text-current{color:currentColor}.text-error{color:var(--uikit-error,#d7263d)}.text-foreground{color:hsl(var(--foreground))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-transparent{color:transparent}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-md,.shadow-none{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-0,.ring-1{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-\[var\(--uikit-error\)\]{--tw-ring-color:var(--uikit-error)}.ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}:root{--uikit-primary:#0a5fff;--uikit-primary-10:color-mix(in srgb,var(--uikit-primary) 10%,transparent);--uikit-secondary:#71717b;--uikit-tertiary:#f3f5fb;--uikit-accent:#e3ecff;--uikit-success:#16c784;--uikit-warning:#f4b740;--uikit-error:#d7263d;--uikit-info:#fef9bf;--uikit-radius:8px;--uikit-font-family:Inter,system-ui,sans-serif;--uikit-text-primary:#27272a}@keyframes mui-bar1{0%{left:-35%;right:100%}60%{left:100%;right:-90%}to{left:100%;right:-90%}}@keyframes mui-bar2{0%{left:-200%;right:100%}60%{left:107%;right:-8%}to{left:107%;right:-8%}}.mui-loader{position:absolute;top:37px;left:0;right:0;height:4px;overflow:hidden;background-color:var(--uikit-primary-10);z-index:10}.mui-loader:after,.mui-loader:before{content:"";position:absolute;height:100%;background-color:var(--uikit-primary)}.mui-loader:before{animation:mui-bar1 2.5s cubic-bezier(.65,.815,.735,.395) infinite}.mui-loader:after{animation:mui-bar2 2.5s cubic-bezier(.165,.84,.44,1) infinite}.file\:border-0::file-selector-button{border-width:0}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.hover\:border:hover{border-width:1px}.hover\:border-\[var\(--uikit-primary\)\]:hover{border-color:var(--uikit-primary)}.hover\:bg-\[var\(--uikit-primary-10\)\]:hover{background-color:var(--uikit-primary-10)}.hover\:bg-\[var\(--uikit-secondary\)\]:hover{background-color:var(--uikit-secondary)}.hover\:bg-muted:hover{background-color:hsl(var(--muted))}.hover\:bg-transparent:hover{background-color:transparent}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.focus\:border-\[var\(--uikit-primary\)\]:focus{border-color:var(--uikit-primary)}.focus\:border-\[var\(--uikit-secondary\)\]:focus{border-color:var(--uikit-secondary)}.focus\:bg-\[var\(--uikit-error\)\]:focus{background-color:var(--uikit-error)}.focus\:bg-\[var\(--uikit-primary\)\]:focus{background-color:var(--uikit-primary)}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:bg-muted:focus{background-color:hsl(var(--muted))}.focus\:bg-white:focus{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.focus\:text-\[var\(--uikit-secondary\)\]:focus{color:var(--uikit-secondary)}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-error:focus-visible{--tw-ring-color:var(--uikit-error,#d7263d)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color:hsl(var(--background))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom],.data-\[side\=left\]\:-translate-x-1[data-side=left]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.data-\[side\=right\]\:translate-x-1[data-side=right],.data-\[side\=top\]\:-translate-y-1[data-side=top]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x:1rem}.data-\[state\=checked\]\:translate-x-4[data-state=checked],.data-\[state\=checked\]\:translate-x-5[data-state=checked]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:1.25rem}.data-\[state\=checked\]\:translate-x-7[data-state=checked]{--tw-translate-x:1.75rem}.data-\[state\=checked\]\:translate-x-7[data-state=checked],.data-\[state\=checked\]\:translate-x-\[21px\][data-state=checked]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:translate-x-\[21px\][data-state=checked]{--tw-translate-x:21px}.data-\[state\=unchecked\]\:translate-x-\[2px\][data-state=unchecked]{--tw-translate-x:2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:bg-\[var\(--uikit-primary\)\][data-state=checked]{background-color:var(--uikit-primary)}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=unchecked\]\:bg-black[data-state=unchecked]{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.data-\[inset\]\:pl-8[data-inset]{padding-left:2rem}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.data-\[state\=checked\]\:text-\[var\(--uikit-primary\)\][data-state=checked]{color:var(--uikit-primary)}.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:hsl(var(--accent-foreground))}.data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{color:hsl(var(--destructive))}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:-0.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:0.5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:-0.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:0.5rem}.data-\[variant\=destructive\]\:focus\:bg-destructive\/10:focus[data-variant=destructive]{background-color:hsl(var(--destructive)/.1)}.data-\[variant\=destructive\]\:focus\:text-destructive:focus[data-variant=destructive]{color:hsl(var(--destructive))}.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:focus[data-variant=destructive]:is(.dark *){background-color:hsl(var(--destructive)/.2)}@media (min-width:640px){.sm\:max-w-sm{max-width:24rem}}@media (min-width:768px){.md\:max-w-md{max-width:28rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:1rem;height:1rem}.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:hsl(var(--muted-foreground))}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:h-3 svg{height:.75rem}.\[\&_svg\]\:h-4 svg{height:1rem}.\[\&_svg\]\:w-3 svg{width:.75rem}.\[\&_svg\]\:w-4 svg{width:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
|
|
3
|
+
declare function DropdownMenu({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
declare function DropdownMenuPortal({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
declare function DropdownMenuTrigger({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
declare function DropdownMenuContent({ className, sideOffset, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Content>): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
declare function DropdownMenuGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
declare function DropdownMenuItem({ className, inset, variant, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {
|
|
9
|
+
inset?: boolean;
|
|
10
|
+
variant?: 'default' | 'destructive';
|
|
11
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
declare function DropdownMenuCheckboxItem({ className, children, checked, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
declare function DropdownMenuRadioGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
declare function DropdownMenuRadioItem({ className, children, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
declare function DropdownMenuLabel({ className, inset, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {
|
|
16
|
+
inset?: boolean;
|
|
17
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
declare function DropdownMenuSeparator({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
declare function DropdownMenuShortcut({ className, ...props }: React.ComponentProps<'span'>): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
declare function DropdownMenuSub({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
declare function DropdownMenuSubTrigger({ className, inset, children, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {
|
|
22
|
+
inset?: boolean;
|
|
23
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
declare function DropdownMenuSubContent({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
export { DropdownMenu, DropdownMenuPortal, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
|
|
3
|
+
import { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react';
|
|
4
|
+
import { cn } from '../../lib/utils';
|
|
5
|
+
const dropdownItemStyles = 'hover:bg-muted focus:outline-none focus-visible:outline-none cursor-pointer';
|
|
6
|
+
function DropdownMenu({ ...props }) {
|
|
7
|
+
return _jsx(DropdownMenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props });
|
|
8
|
+
}
|
|
9
|
+
function DropdownMenuPortal({ ...props }) {
|
|
10
|
+
return _jsx(DropdownMenuPrimitive.Portal, { "data-slot": "dropdown-menu-portal", ...props });
|
|
11
|
+
}
|
|
12
|
+
function DropdownMenuTrigger({ ...props }) {
|
|
13
|
+
return _jsx(DropdownMenuPrimitive.Trigger, { "data-slot": "dropdown-menu-trigger", ...props });
|
|
14
|
+
}
|
|
15
|
+
function DropdownMenuContent({ className, sideOffset = 4, ...props }) {
|
|
16
|
+
return (_jsx(DropdownMenuPrimitive.Portal, { children: _jsx(DropdownMenuPrimitive.Content, { "data-slot": "dropdown-menu-content", sideOffset: sideOffset, className: cn('bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md', className), ...props }) }));
|
|
17
|
+
}
|
|
18
|
+
function DropdownMenuGroup({ ...props }) {
|
|
19
|
+
return _jsx(DropdownMenuPrimitive.Group, { "data-slot": "dropdown-menu-group", ...props });
|
|
20
|
+
}
|
|
21
|
+
function DropdownMenuItem({ className, inset, variant = 'default', ...props }) {
|
|
22
|
+
return (_jsx(DropdownMenuPrimitive.Item, { "data-slot": "dropdown-menu-item", "data-inset": inset, "data-variant": variant, className: cn(dropdownItemStyles, "focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className), ...props }));
|
|
23
|
+
}
|
|
24
|
+
function DropdownMenuCheckboxItem({ className, children, checked, ...props }) {
|
|
25
|
+
return (_jsxs(DropdownMenuPrimitive.CheckboxItem, { "data-slot": "dropdown-menu-checkbox-item", className: cn(dropdownItemStyles, "focus:bg-accent focus:outline-none focus:bg-muted focus:text-accent-foreground relative flex items-center gap-2 py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className), checked: checked, ...props, children: [_jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: _jsx(DropdownMenuPrimitive.ItemIndicator, { children: _jsx(CheckIcon, { className: "size-4" }) }) }), children] }));
|
|
26
|
+
}
|
|
27
|
+
function DropdownMenuRadioGroup({ ...props }) {
|
|
28
|
+
return _jsx(DropdownMenuPrimitive.RadioGroup, { "data-slot": "dropdown-menu-radio-group", ...props });
|
|
29
|
+
}
|
|
30
|
+
function DropdownMenuRadioItem({ className, children, ...props }) {
|
|
31
|
+
return (_jsxs(DropdownMenuPrimitive.RadioItem, { "data-slot": "dropdown-menu-radio-item", className: cn(dropdownItemStyles, "focus:bg-accent focus:text-accent-foreground relative flex items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className), ...props, children: [_jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: _jsx(DropdownMenuPrimitive.ItemIndicator, { children: _jsx(CircleIcon, { className: "size-2 fill-current" }) }) }), children] }));
|
|
32
|
+
}
|
|
33
|
+
function DropdownMenuLabel({ className, inset, ...props }) {
|
|
34
|
+
return (_jsx(DropdownMenuPrimitive.Label, { "data-slot": "dropdown-menu-label", "data-inset": inset, className: cn('px-2 py-1.5 text-sm font-medium data-[inset]:pl-8', className), ...props }));
|
|
35
|
+
}
|
|
36
|
+
function DropdownMenuSeparator({ className, ...props }) {
|
|
37
|
+
return (_jsx(DropdownMenuPrimitive.Separator, { "data-slot": "dropdown-menu-separator", className: cn('bg-border -mx-1 my-1 h-px', className), ...props }));
|
|
38
|
+
}
|
|
39
|
+
function DropdownMenuShortcut({ className, ...props }) {
|
|
40
|
+
return (_jsx("span", { "data-slot": "dropdown-menu-shortcut", className: cn('text-muted-foreground ml-auto text-xs tracking-widest', className), ...props }));
|
|
41
|
+
}
|
|
42
|
+
function DropdownMenuSub({ ...props }) {
|
|
43
|
+
return _jsx(DropdownMenuPrimitive.Sub, { "data-slot": "dropdown-menu-sub", ...props });
|
|
44
|
+
}
|
|
45
|
+
function DropdownMenuSubTrigger({ className, inset, children, ...props }) {
|
|
46
|
+
return (_jsxs(DropdownMenuPrimitive.SubTrigger, { "data-slot": "dropdown-menu-sub-trigger", "data-inset": inset, className: cn(dropdownItemStyles, 'focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8', className), ...props, children: [children, _jsx(ChevronRightIcon, { className: "ml-auto size-4" })] }));
|
|
47
|
+
}
|
|
48
|
+
function DropdownMenuSubContent({ className, ...props }) {
|
|
49
|
+
return (_jsx(DropdownMenuPrimitive.SubContent, { "data-slot": "dropdown-menu-sub-content", className: cn('bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg', className), ...props }));
|
|
50
|
+
}
|
|
51
|
+
export { DropdownMenu, DropdownMenuPortal, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { DropdownMenu } from './Dropdown';
|
|
3
|
+
declare const meta: Meta<typeof DropdownMenu>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof DropdownMenu>;
|
|
6
|
+
export declare const DefaultItems: Story;
|
|
7
|
+
export declare const WithCheckboxItems: Story;
|
|
8
|
+
export declare const WithRadioItems: Story;
|
|
9
|
+
export declare const WithLabelAndSeparator: Story;
|
|
10
|
+
export declare const WithSubMenu: Story;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, } from './Dropdown';
|
|
3
|
+
import { Button } from '../Button';
|
|
4
|
+
import { useState } from 'react';
|
|
5
|
+
const meta = {
|
|
6
|
+
title: 'UIKit/Dropdown',
|
|
7
|
+
component: DropdownMenu,
|
|
8
|
+
tags: ['autodocs'],
|
|
9
|
+
};
|
|
10
|
+
export default meta;
|
|
11
|
+
export const DefaultItems = {
|
|
12
|
+
render: () => (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { title: "Menu" }) }), _jsxs(DropdownMenuContent, { children: [_jsx(DropdownMenuItem, { children: "Profile" }), _jsx(DropdownMenuItem, { children: "Billing" }), _jsx(DropdownMenuItem, { children: "Log out" })] })] })),
|
|
13
|
+
};
|
|
14
|
+
export const WithCheckboxItems = {
|
|
15
|
+
render: () => {
|
|
16
|
+
const [showSidebar, setShowSidebar] = useState(true);
|
|
17
|
+
const [enableSync, setEnableSync] = useState(false);
|
|
18
|
+
return (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { title: "Settings" }) }), _jsxs(DropdownMenuContent, { children: [_jsx(DropdownMenuCheckboxItem, { checked: showSidebar, onCheckedChange: setShowSidebar, children: "Show Sidebar" }), _jsx(DropdownMenuCheckboxItem, { checked: enableSync, onCheckedChange: setEnableSync, children: "Enable Sync" })] })] }));
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
export const WithRadioItems = {
|
|
22
|
+
render: () => {
|
|
23
|
+
const [theme, setTheme] = useState('light');
|
|
24
|
+
return (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { title: "Theme" }) }), _jsxs(DropdownMenuContent, { children: [_jsx(DropdownMenuLabel, { children: "Theme" }), _jsxs(DropdownMenuRadioGroup, { value: theme, onValueChange: setTheme, children: [_jsx(DropdownMenuRadioItem, { value: "light", children: "Light" }), _jsx(DropdownMenuRadioItem, { value: "dark", children: "Dark" }), _jsx(DropdownMenuRadioItem, { value: "system", children: "System" })] })] })] }));
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
export const WithLabelAndSeparator = {
|
|
28
|
+
render: () => (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { title: "Account" }) }), _jsxs(DropdownMenuContent, { children: [_jsx(DropdownMenuLabel, { children: "Account" }), _jsx(DropdownMenuItem, { children: "Email" }), _jsx(DropdownMenuItem, { children: "Password" }), _jsx(DropdownMenuSeparator, {}), _jsx(DropdownMenuItem, { variant: "destructive", children: "Delete Account" })] })] })),
|
|
29
|
+
};
|
|
30
|
+
export const WithSubMenu = {
|
|
31
|
+
render: () => (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { title: "More" }) }), _jsxs(DropdownMenuContent, { children: [_jsx(DropdownMenuItem, { children: "Dashboard" }), _jsxs(DropdownMenuSub, { children: [_jsx(DropdownMenuSubTrigger, { children: "Tools" }), _jsxs(DropdownMenuSubContent, { children: [_jsx(DropdownMenuItem, { children: "Editor" }), _jsx(DropdownMenuItem, { children: "Console" })] })] })] })] })),
|
|
32
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { DropdownMenu, DropdownMenuPortal, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, } from './Dropdown';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { DropdownMenu, DropdownMenuPortal, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, } from './Dropdown';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { DropdownOption, DropdownStructure } from './DropdownWrapper.types';
|
|
3
|
+
declare const DropdownWrapper: ({ triggerElement, options, className, structure, selectedValue, onValueChange, }: {
|
|
4
|
+
triggerElement: React.ReactNode;
|
|
5
|
+
options: DropdownOption[];
|
|
6
|
+
className?: string;
|
|
7
|
+
structure?: DropdownStructure;
|
|
8
|
+
selectedValue?: string;
|
|
9
|
+
onValueChange?: (value: string) => void;
|
|
10
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export { DropdownWrapper };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { DropdownMenu, DropdownMenuContent, DropdownMenuTrigger, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, } from '../Dropdown';
|
|
4
|
+
const getKey = (opt) => { var _a, _b; return (_a = opt.value) !== null && _a !== void 0 ? _a : `${(_b = opt.groupLabel) !== null && _b !== void 0 ? _b : 'group'}-${opt.label}`; };
|
|
5
|
+
const DropdownWrapper = ({ triggerElement, options, className, structure = 'default', selectedValue, onValueChange, }) => {
|
|
6
|
+
const renderContent = () => {
|
|
7
|
+
switch (structure) {
|
|
8
|
+
case 'radio':
|
|
9
|
+
return (_jsx(DropdownMenuRadioGroup, { value: selectedValue, onValueChange: onValueChange, children: options.map((opt) => {
|
|
10
|
+
var _a;
|
|
11
|
+
return (_jsx(DropdownMenuRadioItem, { value: (_a = opt.value) !== null && _a !== void 0 ? _a : opt.label, children: opt.label }, getKey(opt)));
|
|
12
|
+
}) }));
|
|
13
|
+
case 'checkbox':
|
|
14
|
+
return options.map((opt) => (_jsx(DropdownMenuCheckboxItem, { checked: opt.checked, onCheckedChange: opt.onCheckedChange, disabled: opt.disabled, children: opt.label }, getKey(opt))));
|
|
15
|
+
case 'grouped':
|
|
16
|
+
return options.map((opt, i) => {
|
|
17
|
+
var _a;
|
|
18
|
+
const currentGroup = opt.groupLabel;
|
|
19
|
+
const previousGroup = (_a = options[i - 1]) === null || _a === void 0 ? void 0 : _a.groupLabel;
|
|
20
|
+
const isNewGroup = currentGroup && currentGroup !== previousGroup;
|
|
21
|
+
return (_jsxs(React.Fragment, { children: [isNewGroup && _jsx(DropdownMenuLabel, { children: currentGroup }), _jsx(DropdownMenuItem, { disabled: opt.disabled, onSelect: opt.onSelect, children: opt.label })] }, getKey(opt)));
|
|
22
|
+
});
|
|
23
|
+
case 'submenu':
|
|
24
|
+
return options.map((opt) => opt.subOptions ? (_jsxs(DropdownMenuSub, { children: [_jsx(DropdownMenuSubTrigger, { children: opt.label }), _jsx(DropdownMenuSubContent, { children: opt.subOptions.map((sub) => (_jsx(DropdownMenuItem, { onSelect: sub.onSelect, children: sub.label }, sub.label))) })] }, opt.label)) : (_jsx(DropdownMenuItem, { onSelect: opt.onSelect, children: opt.label }, opt.label)));
|
|
25
|
+
default:
|
|
26
|
+
return options.map((opt) => (_jsx(DropdownMenuItem, { onSelect: opt.onSelect, disabled: opt.disabled, children: opt.label }, opt.label)));
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
return (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: triggerElement }), _jsx(DropdownMenuContent, { className: className !== null && className !== void 0 ? className : 'w-56', children: renderContent() })] }));
|
|
30
|
+
};
|
|
31
|
+
export { DropdownWrapper };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { DropdownWrapper } from './DropdownWrapper';
|
|
3
|
+
declare const meta: Meta<typeof DropdownWrapper>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof DropdownWrapper>;
|
|
6
|
+
export declare const Default: Story;
|
|
7
|
+
export declare const Checkbox: Story;
|
|
8
|
+
export declare const Radio: Story;
|
|
9
|
+
export declare const Grouped: Story;
|
|
10
|
+
export declare const Submenu: Story;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { DropdownWrapper } from './DropdownWrapper';
|
|
4
|
+
import { Button } from '../Button';
|
|
5
|
+
const meta = {
|
|
6
|
+
title: 'UIKit/DropdownWrapper',
|
|
7
|
+
component: DropdownWrapper,
|
|
8
|
+
tags: ['autodocs'],
|
|
9
|
+
};
|
|
10
|
+
export default meta;
|
|
11
|
+
export const Default = {
|
|
12
|
+
render: () => {
|
|
13
|
+
const options = [
|
|
14
|
+
{ label: 'Profile', onSelect: () => alert('Profile selected') },
|
|
15
|
+
{ label: 'Settings', onSelect: () => alert('Settings selected') },
|
|
16
|
+
{ label: 'Logout', onSelect: () => alert('Logout selected') },
|
|
17
|
+
];
|
|
18
|
+
return (_jsx(DropdownWrapper, { structure: "default", options: options, triggerElement: _jsx(Button, { title: "Open Default" }) }));
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
export const Checkbox = {
|
|
22
|
+
render: () => {
|
|
23
|
+
const [optA, setOptA] = useState(true);
|
|
24
|
+
const [optB, setOptB] = useState(false);
|
|
25
|
+
const options = [
|
|
26
|
+
{ label: 'Enable Notifications', checked: optA, onCheckedChange: setOptA },
|
|
27
|
+
{ label: 'Auto Sync', checked: optB, onCheckedChange: setOptB },
|
|
28
|
+
];
|
|
29
|
+
return (_jsx(DropdownWrapper, { structure: "checkbox", options: options, triggerElement: _jsx(Button, { title: "Checkbox Settings" }) }));
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
export const Radio = {
|
|
33
|
+
render: () => {
|
|
34
|
+
const [selected, setSelected] = useState('light');
|
|
35
|
+
const options = [
|
|
36
|
+
{ label: 'Light', value: 'light' },
|
|
37
|
+
{ label: 'Dark', value: 'dark' },
|
|
38
|
+
{ label: 'System', value: 'system' },
|
|
39
|
+
];
|
|
40
|
+
return (_jsx(DropdownWrapper, { structure: "radio", options: options, selectedValue: selected, onValueChange: setSelected, triggerElement: _jsx(Button, { title: "Choose Theme" }) }));
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
export const Grouped = {
|
|
44
|
+
render: () => {
|
|
45
|
+
const options = [
|
|
46
|
+
{ groupLabel: 'Account', label: 'Email', onSelect: () => alert('Email') },
|
|
47
|
+
{ groupLabel: 'Account', label: 'Password', onSelect: () => alert('Password') },
|
|
48
|
+
{ groupLabel: 'Danger zone', label: 'Delete Account', onSelect: () => alert('Deleted'), disabled: false },
|
|
49
|
+
];
|
|
50
|
+
return (_jsx(DropdownWrapper, { structure: "grouped", options: options, triggerElement: _jsx(Button, { title: "Grouped Menu" }) }));
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
export const Submenu = {
|
|
54
|
+
render: () => {
|
|
55
|
+
const options = [
|
|
56
|
+
{
|
|
57
|
+
label: 'Dashboard',
|
|
58
|
+
onSelect: () => alert('Dashboard'),
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
label: 'Tools',
|
|
62
|
+
subOptions: [
|
|
63
|
+
{ label: 'Editor', onSelect: () => alert('Editor') },
|
|
64
|
+
{ label: 'Console', onSelect: () => alert('Console') },
|
|
65
|
+
],
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
label: 'Support',
|
|
69
|
+
onSelect: () => alert('Support'),
|
|
70
|
+
},
|
|
71
|
+
];
|
|
72
|
+
return (_jsx(DropdownWrapper, { structure: "submenu", options: options, triggerElement: _jsx(Button, { title: "With Submenu" }) }));
|
|
73
|
+
},
|
|
74
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type DropdownStructure = 'default' | 'checkbox' | 'radio' | 'grouped' | 'submenu';
|
|
2
|
+
export type DropdownOption = {
|
|
3
|
+
label: string;
|
|
4
|
+
value?: string;
|
|
5
|
+
checked?: boolean;
|
|
6
|
+
onCheckedChange?: (checked: boolean) => void;
|
|
7
|
+
onSelect?: () => void;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
subOptions?: DropdownOption[];
|
|
10
|
+
groupLabel?: string;
|
|
11
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { DropdownWrapper } from './DropdownWrapper';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { DropdownWrapper } from './DropdownWrapper';
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { PageSizeSelectorProps, PaginationControlsProps } from './PaginationControls.types';
|
|
2
2
|
export declare const PageSizeSelector: ({ id, value, onChange, options, label, className, size, }: PageSizeSelectorProps) => import("react/jsx-runtime").JSX.Element;
|
|
3
|
-
export declare const PaginationFooter: <T>({ table, tableId, paginationMode,
|
|
3
|
+
export declare const PaginationFooter: <T>({ table, tableId, paginationMode, onPageSizeChange, totalServerRows, onNextPage, onPrevPage, }: PaginationControlsProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Button } from '../../Button';
|
|
3
2
|
import { SelectWrapper } from '../../SelectWrapper';
|
|
4
3
|
import { cn } from '../../../lib/utils';
|
|
4
|
+
import { FaChevronLeft, FaChevronRight } from 'react-icons/fa';
|
|
5
5
|
export const PageSizeSelector = ({ id, value, onChange, options = ['5', '10', '20', '50', '100'], label = 'Rows per page:', className, size = 'default', }) => {
|
|
6
|
-
return (_jsxs("div", { className: cn('flex items-center gap-2
|
|
6
|
+
return (_jsxs("div", { className: cn('flex items-center gap-2 text-sm', className), id: `page-size-select-${id}`, children: [_jsx("label", { htmlFor: `page-size-select-${id}`, children: label }), _jsx("div", { className: "w-fit", children: _jsx(SelectWrapper, { size: size, value: value, onChange: onChange, options: options.map((option) => ({
|
|
7
7
|
label: option,
|
|
8
8
|
value: option,
|
|
9
|
-
})) }) })] }));
|
|
9
|
+
})), className: "bg-transparent shadow-none border-none gap-1" }) })] }));
|
|
10
10
|
};
|
|
11
|
-
export const PaginationFooter = ({ table, tableId, paginationMode = 'client',
|
|
12
|
-
const { pageIndex } = table.getState().pagination;
|
|
13
|
-
const
|
|
14
|
-
|
|
11
|
+
export const PaginationFooter = ({ table, tableId, paginationMode = 'client', onPageSizeChange, totalServerRows, onNextPage, onPrevPage, }) => {
|
|
12
|
+
const { pageIndex, pageSize } = table.getState().pagination;
|
|
13
|
+
const totalRows = paginationMode === 'server' ? (totalServerRows !== null && totalServerRows !== void 0 ? totalServerRows : 0) : table.getFilteredRowModel().rows.length;
|
|
14
|
+
const startRow = pageIndex * pageSize + 1;
|
|
15
|
+
const endRow = Math.min((pageIndex + 1) * pageSize, totalRows);
|
|
16
|
+
return (_jsxs("div", { className: "flex justify-end items-center gap-6 px-4 py-2 text-sm w-full", children: [_jsx(PageSizeSelector, { id: tableId, value: String(pageSize), onChange: (val) => {
|
|
15
17
|
const newSize = Number(val);
|
|
16
18
|
table.setPageSize(newSize);
|
|
17
19
|
onPageSizeChange === null || onPageSizeChange === void 0 ? void 0 : onPageSizeChange(newSize);
|
|
18
|
-
}, size: "small" }),
|
|
20
|
+
}, size: "small", label: "Rows per page" }), totalRows > 0 && _jsx("div", { id: `page-indicator-${tableId}`, children: `${startRow} - ${endRow} of ${totalRows}` }), totalRows > 0 && (_jsxs("div", { className: "flex gap-4", id: `pagination-controls-${tableId}`, children: [_jsx("button", { onClick: onPrevPage, disabled: !table.getCanPreviousPage(), className: `${!table.getCanPreviousPage() ? 'cursor-not-allowed' : 'cursor-pointer'} px-2 py-2`, children: _jsx(FaChevronLeft, {}) }), _jsx("button", { onClick: onNextPage, disabled: !table.getCanNextPage(), className: `${!table.getCanNextPage() ? 'cursor-not-allowed' : 'cursor-pointer'} px-2 py-2`, children: _jsx(FaChevronRight, {}) })] }))] }));
|
|
19
21
|
};
|
|
@@ -4,9 +4,13 @@ export interface PaginationControlsProps<T> {
|
|
|
4
4
|
tableId: string;
|
|
5
5
|
table: Table<T>;
|
|
6
6
|
paginationMode?: 'client' | 'server';
|
|
7
|
-
|
|
7
|
+
totalServerRows?: number;
|
|
8
8
|
pageSizeOptions?: string[];
|
|
9
9
|
onPageSizeChange?: (size: number) => void;
|
|
10
|
+
onNextPage: () => void;
|
|
11
|
+
onPrevPage: () => void;
|
|
12
|
+
canNextPage: boolean;
|
|
13
|
+
canPrevPage: boolean;
|
|
10
14
|
}
|
|
11
15
|
export type PageSizeSelectorProps = {
|
|
12
16
|
id: string;
|
|
@@ -3,9 +3,10 @@ import { flexRender } from '@tanstack/react-table';
|
|
|
3
3
|
import { classNames } from '../../utils/classNames';
|
|
4
4
|
import { PaginationFooter } from './Pagination/PaginationControls';
|
|
5
5
|
import { useTableController } from './hooks/useTableController';
|
|
6
|
+
import { FaChevronDown, FaChevronUp } from 'react-icons/fa';
|
|
6
7
|
export function Table(props) {
|
|
7
8
|
var _a;
|
|
8
|
-
const { table, setPageSize } = useTableController(props);
|
|
9
|
+
const { table, setPageSize, ...pagination } = useTableController(props);
|
|
9
10
|
let tableContent;
|
|
10
11
|
if (props.isLoading && props.showSkeletonRows) {
|
|
11
12
|
tableContent = Array.from({ length: 3 }).map((_c) => (_jsx("tr", { className: "border-t animate-pulse", children: table.getVisibleFlatColumns().map((__c) => (_jsx("td", { className: "px-4 py-2", children: _jsx("div", { className: "h-4 w-3/4 bg-[var(--uikit-tertiary)] rounded" }) }, `skeleton-cell-${__c.id}`))) }, `skeleton-row`)));
|
|
@@ -14,7 +15,7 @@ export function Table(props) {
|
|
|
14
15
|
tableContent = (_jsx("tr", { children: _jsx("td", { colSpan: table.getVisibleFlatColumns().length, className: "px-4 py-8 text-center text-muted-foreground", children: (_a = props.noRowsMessage) !== null && _a !== void 0 ? _a : 'No rows to display' }) }));
|
|
15
16
|
}
|
|
16
17
|
else {
|
|
17
|
-
tableContent = table.getRowModel().rows.map((row) => (_jsx("tr", { className: classNames('border-t hover:bg-[var(--
|
|
18
|
+
tableContent = table.getRowModel().rows.map((row) => (_jsx("tr", { className: classNames('border-t hover:bg-[var(--uikit-primary-10)]', row.getIsSelected() && 'bg-[var(--uikit-primary-10)]'), children: row.getVisibleCells().map((cell) => {
|
|
18
19
|
const width = cell.column.getSize();
|
|
19
20
|
return (_jsx("td", { style: { width }, className: cell.column.id === 'select' ? 'p-1' : 'px-4 py-2', children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id));
|
|
20
21
|
}) }, row.id)));
|
|
@@ -25,8 +26,8 @@ export function Table(props) {
|
|
|
25
26
|
: undefined, children: _jsxs("div", { className: classNames('w-full h-full', header.id === 'select'
|
|
26
27
|
? 'flex justify-center items-center'
|
|
27
28
|
: 'flex items-center gap-2'), children: [flexRender(header.column.columnDef.header, header.getContext()), header.column.getCanSort() && (_jsx("span", { className: "text-xs", children: {
|
|
28
|
-
asc:
|
|
29
|
-
desc:
|
|
29
|
+
asc: _jsx(FaChevronUp, {}),
|
|
30
|
+
desc: _jsx(FaChevronDown, {}),
|
|
30
31
|
}[header.column.getIsSorted()] || null }))] }) }, header.id));
|
|
31
|
-
}) }, headerGroup.id))) }), _jsx("tbody", { children: tableContent })] }) }), _jsx(PaginationFooter, { tableId: props.id, table: table, paginationMode: props.paginationMode,
|
|
32
|
+
}) }, headerGroup.id))) }), _jsx("tbody", { children: tableContent })] }) }), _jsx(PaginationFooter, { tableId: props.id, table: table, paginationMode: props.paginationMode, totalServerRows: props.totalServerRows, onPageSizeChange: setPageSize, ...pagination })] }));
|
|
32
33
|
}
|
|
@@ -1,13 +1,5 @@
|
|
|
1
1
|
import { Table } from './Table';
|
|
2
|
-
import type { FlexColumnDef } from './Table.types';
|
|
3
2
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
4
|
-
type User = {
|
|
5
|
-
id: string;
|
|
6
|
-
name: string;
|
|
7
|
-
email: string;
|
|
8
|
-
role: string;
|
|
9
|
-
};
|
|
10
|
-
export declare const columns: FlexColumnDef<User>[];
|
|
11
3
|
declare const meta: Meta<typeof Table>;
|
|
12
4
|
export default meta;
|
|
13
5
|
type Story = StoryObj<typeof Table>;
|
|
@@ -15,6 +7,7 @@ export declare const Basic: Story;
|
|
|
15
7
|
export declare const NoRows: Story;
|
|
16
8
|
export declare const LoadingWithSkeleton: Story;
|
|
17
9
|
export declare const ClientPagination: Story;
|
|
10
|
+
export declare const ServerSidePagination: Story;
|
|
18
11
|
export declare const WithCheckboxSelection: Story;
|
|
19
12
|
export declare const WithDisabledSelection: Story;
|
|
20
13
|
export declare const WithSingleRowSelection: Story;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useState } from 'react';
|
|
2
|
+
import { useCallback, useState } from 'react';
|
|
3
3
|
import { Table } from './Table';
|
|
4
4
|
const data = Array.from({ length: 10 }).map((_, i) => ({
|
|
5
5
|
id: `user-${i + 1}`,
|
|
@@ -7,7 +7,7 @@ const data = Array.from({ length: 10 }).map((_, i) => ({
|
|
|
7
7
|
email: `user${i + 1}@example.com`,
|
|
8
8
|
role: i % 2 === 0 ? 'Admin' : 'User',
|
|
9
9
|
}));
|
|
10
|
-
|
|
10
|
+
const columns = [
|
|
11
11
|
{
|
|
12
12
|
accessorKey: 'id',
|
|
13
13
|
header: 'ID',
|
|
@@ -53,6 +53,36 @@ export const LoadingWithSkeleton = {
|
|
|
53
53
|
export const ClientPagination = {
|
|
54
54
|
render: () => _jsx(Table, { id: "example-table", data: data, columns: columns, paginationMode: "client", rowsPerPage: 5 }),
|
|
55
55
|
};
|
|
56
|
+
const fetchServerData = (pageIndex, pageSize) => {
|
|
57
|
+
return new Promise((resolve) => {
|
|
58
|
+
setTimeout(() => {
|
|
59
|
+
const start = pageIndex * pageSize;
|
|
60
|
+
const data = Array.from({ length: pageSize }).map((_, i) => {
|
|
61
|
+
const id = start + i + 1;
|
|
62
|
+
return {
|
|
63
|
+
id: `user-${id}`,
|
|
64
|
+
name: `User ${id}`,
|
|
65
|
+
email: `user${id}@example.com`,
|
|
66
|
+
role: id % 2 === 0 ? 'Admin' : 'User',
|
|
67
|
+
};
|
|
68
|
+
});
|
|
69
|
+
resolve(data);
|
|
70
|
+
}, 500);
|
|
71
|
+
});
|
|
72
|
+
};
|
|
73
|
+
export const ServerSidePagination = {
|
|
74
|
+
render: () => {
|
|
75
|
+
const [data, setData] = useState([]);
|
|
76
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
77
|
+
const fetchData = useCallback(async (pageIndex, pageSize) => {
|
|
78
|
+
setIsLoading(true);
|
|
79
|
+
const results = await fetchServerData(pageIndex, pageSize);
|
|
80
|
+
setData(results);
|
|
81
|
+
setIsLoading(false);
|
|
82
|
+
}, []);
|
|
83
|
+
return (_jsx(Table, { id: "server-table", data: data, columns: columns, paginationMode: "server", totalServerRows: 100, onRefetch: fetchData, isLoading: isLoading }));
|
|
84
|
+
},
|
|
85
|
+
};
|
|
56
86
|
const handleSelectionChange = (selectedRowIds) => {
|
|
57
87
|
console.log('Selected Row IDs:', selectedRowIds);
|
|
58
88
|
// Update your state or perform actions based on selected rows
|
|
@@ -16,8 +16,9 @@ export interface TableProps<T> {
|
|
|
16
16
|
onSortingChange?: (s: SortingState) => void;
|
|
17
17
|
onSelectionChange?: (selectedIds: string[]) => void;
|
|
18
18
|
enableRowSelection?: (row: Row<T>) => boolean;
|
|
19
|
+
onRefetch?: (pageIndex: number, pageSize: number) => void;
|
|
19
20
|
isMultiRowSelection?: boolean;
|
|
20
|
-
|
|
21
|
+
totalServerRows?: number;
|
|
21
22
|
paginationMode?: 'client' | 'server';
|
|
22
23
|
noRowsMessage?: string;
|
|
23
24
|
rowsPerPage?: number;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Table } from '@tanstack/react-table';
|
|
2
|
+
interface UsePaginationControllerOptions<T> {
|
|
3
|
+
table: Table<T>;
|
|
4
|
+
paginationMode: 'client' | 'server';
|
|
5
|
+
onRefetch?: (pageIndex: number, pageSize: number) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare function usePaginationController<T>({ table, paginationMode, onRefetch }: UsePaginationControllerOptions<T>): {
|
|
8
|
+
pageIndex: number;
|
|
9
|
+
pageSize: number;
|
|
10
|
+
canNextPage: boolean;
|
|
11
|
+
canPrevPage: boolean;
|
|
12
|
+
onNextPage: () => void;
|
|
13
|
+
onPrevPage: () => void;
|
|
14
|
+
};
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { useCallback, useEffect, useMemo } from 'react';
|
|
2
|
+
export function usePaginationController({ table, paginationMode, onRefetch }) {
|
|
3
|
+
const { pageIndex, pageSize } = table.getState().pagination;
|
|
4
|
+
const canNextPage = table.getCanNextPage();
|
|
5
|
+
const canPrevPage = table.getCanPreviousPage();
|
|
6
|
+
const onNextPage = useCallback(() => {
|
|
7
|
+
if (canNextPage) {
|
|
8
|
+
table.nextPage();
|
|
9
|
+
}
|
|
10
|
+
}, [canNextPage, table]);
|
|
11
|
+
const onPrevPage = useCallback(() => {
|
|
12
|
+
if (canPrevPage) {
|
|
13
|
+
table.previousPage();
|
|
14
|
+
}
|
|
15
|
+
}, [canPrevPage, table]);
|
|
16
|
+
// Only refetch in server mode
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
if (paginationMode === 'server' && onRefetch) {
|
|
19
|
+
onRefetch(pageIndex, pageSize);
|
|
20
|
+
}
|
|
21
|
+
}, [paginationMode, pageIndex, pageSize, onRefetch]);
|
|
22
|
+
return useMemo(() => ({
|
|
23
|
+
pageIndex,
|
|
24
|
+
pageSize,
|
|
25
|
+
canNextPage,
|
|
26
|
+
canPrevPage,
|
|
27
|
+
onNextPage,
|
|
28
|
+
onPrevPage,
|
|
29
|
+
}), [pageIndex, pageSize, canNextPage, canPrevPage, onNextPage, onPrevPage]);
|
|
30
|
+
}
|
|
@@ -2,10 +2,14 @@ import { type SortingState } from '@tanstack/react-table';
|
|
|
2
2
|
import type { TableProps } from '../Table.types';
|
|
3
3
|
export declare function useTableController<T extends {
|
|
4
4
|
id: string;
|
|
5
|
-
}>({ data, columns, checkboxSelection, checkboxPosition, paginationMode,
|
|
6
|
-
table: import("@tanstack/react-table").Table<T>;
|
|
7
|
-
pageSize: number;
|
|
5
|
+
}>({ data, columns, checkboxSelection, checkboxPosition, paginationMode, sorting, onSortingChange, onSelectionChange, enableRowSelection, rowsPerPage, isMultiRowSelection, selectedRowIds, rowIdKey, totalServerRows, onRefetch, }: TableProps<T>): {
|
|
8
6
|
pageIndex: number;
|
|
7
|
+
pageSize: number;
|
|
8
|
+
canNextPage: boolean;
|
|
9
|
+
canPrevPage: boolean;
|
|
10
|
+
onNextPage: () => void;
|
|
11
|
+
onPrevPage: () => void;
|
|
12
|
+
table: import("@tanstack/react-table").Table<T>;
|
|
9
13
|
setPageSize: import("react").Dispatch<import("react").SetStateAction<number>>;
|
|
10
14
|
setPageIndex: import("react").Dispatch<import("react").SetStateAction<number>>;
|
|
11
15
|
sorting: SortingState;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { useEffect, useState } from 'react';
|
|
2
2
|
import { useReactTable, getCoreRowModel, getSortedRowModel, getPaginationRowModel, } from '@tanstack/react-table';
|
|
3
3
|
import { applyFlexSizes, getCheckboxSelectionColumn } from '../table.helpers';
|
|
4
|
-
|
|
4
|
+
import { usePaginationController } from './usePaginationController';
|
|
5
|
+
export function useTableController({ data, columns, checkboxSelection, checkboxPosition = 'start', paginationMode = 'client', sorting, onSortingChange, onSelectionChange, enableRowSelection, rowsPerPage = 10, isMultiRowSelection = true, selectedRowIds, rowIdKey = 'id', totalServerRows, onRefetch, }) {
|
|
5
6
|
const safeData = Array.isArray(data) ? data : [];
|
|
6
7
|
const [tableColumns, setTableColumns] = useState(() => applyFlexSizes(columns !== null && columns !== void 0 ? columns : []));
|
|
7
8
|
const [internalSorting, setInternalSorting] = useState(sorting !== null && sorting !== void 0 ? sorting : []);
|
|
@@ -29,7 +30,7 @@ export function useTableController({ data, columns, checkboxSelection, checkboxP
|
|
|
29
30
|
getCoreRowModel: getCoreRowModel(),
|
|
30
31
|
getPaginationRowModel: getPaginationRowModel(),
|
|
31
32
|
manualPagination: paginationMode === 'server',
|
|
32
|
-
pageCount: paginationMode === 'server' ?
|
|
33
|
+
pageCount: paginationMode === 'server' ? Math.ceil((totalServerRows !== null && totalServerRows !== void 0 ? totalServerRows : 0) / pageSize) : undefined,
|
|
33
34
|
onPaginationChange: (updater) => {
|
|
34
35
|
const next = typeof updater === 'function' ? updater({ pageIndex, pageSize }) : updater;
|
|
35
36
|
setPageIndex(next.pageIndex);
|
|
@@ -51,6 +52,11 @@ export function useTableController({ data, columns, checkboxSelection, checkboxP
|
|
|
51
52
|
},
|
|
52
53
|
enableMultiRowSelection: isMultiRowSelection,
|
|
53
54
|
});
|
|
55
|
+
const pagination = usePaginationController({
|
|
56
|
+
table,
|
|
57
|
+
paginationMode,
|
|
58
|
+
onRefetch,
|
|
59
|
+
});
|
|
54
60
|
useEffect(() => {
|
|
55
61
|
const normalized = applyFlexSizes(columns !== null && columns !== void 0 ? columns : []);
|
|
56
62
|
const selectionColumn = checkboxSelection ? getCheckboxSelectionColumn(table) : null;
|
|
@@ -73,10 +79,9 @@ export function useTableController({ data, columns, checkboxSelection, checkboxP
|
|
|
73
79
|
}, [columns, checkboxSelection, checkboxPosition, table]);
|
|
74
80
|
return {
|
|
75
81
|
table,
|
|
76
|
-
pageSize,
|
|
77
|
-
pageIndex,
|
|
78
82
|
setPageSize,
|
|
79
83
|
setPageIndex,
|
|
80
84
|
sorting: sorting !== null && sorting !== void 0 ? sorting : internalSorting,
|
|
85
|
+
...pagination,
|
|
81
86
|
};
|
|
82
87
|
}
|