@exitvibing/hqui 0.1.0 → 0.2.0

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 CHANGED
@@ -1,21 +1,21 @@
1
1
  # hqui
2
2
 
3
- React + Tailwind CSS component library. 19 components with light and dark mode support.
3
+ React + Tailwind CSS component library. 20 components with light and dark mode support.
4
4
 
5
5
  ## Install
6
6
 
7
7
  ```bash
8
- bun add hqui
8
+ bun add @exitvibing/hqui
9
9
  ```
10
10
 
11
11
  ## Use
12
12
 
13
13
  ```tsx
14
- import { Button, Card, Badge } from "hqui";
15
- import "hqui/dist/index.css";
14
+ import { Button, Card, Badge } from "@exitvibing/hqui";
15
+ import "@exitvibing/hqui/dist/index.css";
16
16
  ```
17
17
 
18
- You must import `hqui/dist/index.css` once in your app entry point. This loads the CSS variables, theme styles, and base layer rules.
18
+ You must import `@exitvibing/hqui/dist/index.css` once in your app entry point. This loads the CSS variables, theme styles, and base layer rules.
19
19
 
20
20
  ## Documentation
21
21
 
@@ -24,13 +24,13 @@ You must import `hqui/dist/index.css` once in your app entry point. This loads t
24
24
  | [design-system.md](./docs/design-system.md) | Colors, CSS variables, light/dark mode, text selection style |
25
25
  | [setup.md](./docs/setup.md) | Install, Tailwind config, PostCSS, Vite, how to enable dark mode |
26
26
  | [components.md](./docs/components.md) | Props and usage for 13 core components |
27
- | [extended-components.md](./docs/extended-components.md) | Props and usage for 6 extended components |
27
+ | [extended-components.md](./docs/extended-components.md) | Props and usage for 7 extended components |
28
28
 
29
29
  ## Components
30
30
 
31
31
  **Core:** Button, Card (CardHeader, CardTitle, CardDescription, CardContent, CardFooter), Input, Checkbox, ProgressBar, Table (TableHeader, TableBody, TableRow, TableHead, TableCell), HighlightText, Badge, Separator, Tabs (TabsList, TabsTrigger, TabsContent), Switch, Tooltip, ThemeToggle
32
32
 
33
- **Extended:** Counter, ArrowButton, ChooseList, Popup, StatusBar, WeekViewCalendar
33
+ **Extended:** Counter, ArrowButton, ChooseList, Popup, StatusBar, Sidebar, FloatingPopup
34
34
 
35
35
  ## Dark Mode
36
36
 
@@ -43,3 +43,9 @@ bun run build
43
43
  ```
44
44
 
45
45
  Outputs: `dist/index.js` (CJS), `dist/index.mjs` (ESM), `dist/index.d.ts`, `dist/index.css`
46
+
47
+ ## Publish
48
+
49
+ ```bash
50
+ bun publish --access public
51
+ ```
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.19 | 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:240 10% 3.9%;--card:0 0% 100%;--card-foreground:240 10% 3.9%;--popover:0 0% 100%;--popover-foreground:240 10% 3.9%;--primary:240 5.9% 10%;--primary-foreground:0 0% 98%;--secondary:240 4.8% 95.9%;--secondary-foreground:240 5.9% 10%;--muted:240 4.8% 95.9%;--muted-foreground:240 3.8% 46.1%;--accent:240 4.8% 95.9%;--accent-foreground:240 5.9% 10%;--destructive:0 84.2% 60.2%;--destructive-foreground:0 0% 98%;--border:240 5.9% 90%;--input:240 5.9% 90%;--ring:240 5.9% 10%;--radius:0.5rem;--purple:258 90% 66%;--orange:24 95% 53%;--blue:217 91% 60%;--green:142 71% 45%;--red:0 84% 60%}.dark{--background:240 10% 3.9%;--foreground:0 0% 98%;--card:240 10% 3.9%;--card-foreground:0 0% 98%;--popover:240 10% 3.9%;--popover-foreground:0 0% 98%;--primary:0 0% 98%;--primary-foreground:240 5.9% 10%;--secondary:240 3.7% 15.6%;--secondary-foreground:0 0% 98%;--muted:240 3.7% 15.6%;--muted-foreground:240 5% 64.9%;--accent:240 3.7% 15.6%;--accent-foreground:0 0% 98%;--destructive:0 62.8% 30.6%;--destructive-foreground:0 0% 98%;--border:240 3.7% 15.6%;--input:240 3.7% 15.6%;--ring:240 4.9% 83.9%;--radius:0.5rem;--purple:258 90% 66%;--orange:24 95% 53%;--blue:217 91% 60%;--green:142 71% 45%;--red:0 84% 60%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::-moz-selection{background:#fff;color:#000}::selection{background:#fff;color:#000}.dark ::-moz-selection{background:#fff;color:#000}.dark ::selection{background:#fff;color:#000}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{top:0;bottom:0}.left-0{left:0}.left-0\.5{left:.125rem}.right-0{right:0}.top-0\.5{top:.125rem}.z-10{z-index:10}.z-50{z-index:50}.z-\[9999\]{z-index:9999}.mb-4{margin-bottom:1rem}.ml-auto{margin-left:auto}.mt-2{margin-top:.5rem}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[1px\]{height:1px}.h-full{height:100%}.max-h-\[500px\]{max-height:500px}.w-10{width:2.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[1px\]{width:1px}.w-full{width:100%}.max-w-lg{max-width:32rem}.shrink-0{flex-shrink:0}.caption-bottom{caption-side:bottom}@keyframes fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.animate-fade-in{animation:fade-in .3s ease-out}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.whitespace-nowrap{white-space:nowrap}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.border{border-width:1px}.border-2{border-width:2px}.border-x{border-left-width:1px;border-right-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-\[hsl\(var\(--blue\)\)\]\/20{border-color:hsl(var(--blue)/.2)}.border-\[hsl\(var\(--green\)\)\]\/20{border-color:hsl(var(--green)/.2)}.border-\[hsl\(var\(--orange\)\)\]\/20{border-color:hsl(var(--orange)/.2)}.border-\[hsl\(var\(--purple\)\)\]\/20{border-color:hsl(var(--purple)/.2)}.border-\[hsl\(var\(--red\)\)\]\/20{border-color:hsl(var(--red)/.2)}.border-border{border-color:hsl(var(--border))}.border-border\/50{border-color:hsl(var(--border)/.5)}.border-foreground\/20{border-color:hsl(var(--foreground)/.2)}.border-foreground\/30{border-color:hsl(var(--foreground)/.3)}.border-input{border-color:hsl(var(--input))}.border-transparent{border-color:transparent}.border-white\/10{border-color:hsla(0,0%,100%,.1)}.bg-\[hsl\(var\(--blue\)\)\]{background-color:hsl(var(--blue))}.bg-\[hsl\(var\(--blue\)\)\]\/15{background-color:hsl(var(--blue)/.15)}.bg-\[hsl\(var\(--green\)\)\]{background-color:hsl(var(--green))}.bg-\[hsl\(var\(--green\)\)\]\/15{background-color:hsl(var(--green)/.15)}.bg-\[hsl\(var\(--orange\)\)\]{background-color:hsl(var(--orange))}.bg-\[hsl\(var\(--orange\)\)\]\/15{background-color:hsl(var(--orange)/.15)}.bg-\[hsl\(var\(--purple\)\)\]{background-color:hsl(var(--purple))}.bg-\[hsl\(var\(--purple\)\)\]\/15{background-color:hsl(var(--purple)/.15)}.bg-\[hsl\(var\(--red\)\)\]{background-color:hsl(var(--red))}.bg-\[hsl\(var\(--red\)\)\]\/15{background-color:hsl(var(--red)/.15)}.bg-background{background-color:hsl(var(--background))}.bg-background\/80{background-color:hsl(var(--background)/.8)}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-foreground{background-color:hsl(var(--foreground))}.bg-foreground\/10{background-color:hsl(var(--foreground)/.1)}.bg-input{background-color:hsl(var(--input))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.bg-muted\/30{background-color:hsl(var(--muted)/.3)}.bg-muted\/50{background-color:hsl(var(--muted)/.5)}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-transparent{background-color:transparent}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.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-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.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}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pr-10{padding-right:2.5rem}.pt-0{padding-top:0}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.tracking-tight{letter-spacing:-.025em}.tracking-wider{letter-spacing:.05em}.text-\[hsl\(var\(--blue\)\)\]{color:hsl(var(--blue))}.text-\[hsl\(var\(--green\)\)\]{color:hsl(var(--green))}.text-\[hsl\(var\(--orange\)\)\]{color:hsl(var(--orange))}.text-\[hsl\(var\(--purple\)\)\]{color:hsl(var(--purple))}.text-\[hsl\(var\(--red\)\)\]{color:hsl(var(--red))}.text-background{color:hsl(var(--background))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-foreground{color:hsl(var(--foreground))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.opacity-0{opacity:0}.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-2xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.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-lg,.shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.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-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{outline-style:solid}.ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition-all{transition-property:all;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-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-shadow{transition-property:box-shadow;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}.duration-500{transition-duration:.5s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.custom-scrollbar::-webkit-scrollbar{width:6px}.custom-scrollbar::-webkit-scrollbar-track{background:transparent}.custom-scrollbar::-webkit-scrollbar-thumb{background:hsla(0,0%,100%,.1);border-radius:3px}.custom-scrollbar::-webkit-scrollbar-thumb:hover{background:hsla(0,0%,100%,.2)}@keyframes popup-fade-in{0%{opacity:0}to{opacity:1}}@keyframes popup-scale-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.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))}.checked\:border-foreground:checked{border-color:hsl(var(--foreground))}.checked\:bg-foreground:checked{background-color:hsl(var(--foreground))}.hover\:scale-\[1\.02\]:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;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))}.hover\:bg-\[hsl\(var\(--blue\)\)\]\/90:hover{background-color:hsl(var(--blue)/.9)}.hover\:bg-\[hsl\(var\(--green\)\)\]\/90:hover{background-color:hsl(var(--green)/.9)}.hover\:bg-\[hsl\(var\(--orange\)\)\]\/90:hover{background-color:hsl(var(--orange)/.9)}.hover\:bg-\[hsl\(var\(--purple\)\)\]\/90:hover{background-color:hsl(var(--purple)/.9)}.hover\:bg-\[hsl\(var\(--red\)\)\]\/80:hover{background-color:hsl(var(--red)/.8)}.hover\:bg-\[hsl\(var\(--red\)\)\]\/90:hover{background-color:hsl(var(--red)/.9)}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-background\/50:hover{background-color:hsl(var(--background)/.5)}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted)/.5)}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary)/.8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary)/.9)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary)/.8)}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:shadow-md:hover{--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);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.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-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.peer:checked~.peer-checked\:translate-x-4{--tw-translate-x:1rem;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))}.peer:checked~.peer-checked\:bg-background{background-color:hsl(var(--background))}.peer:checked~.peer-checked\:bg-foreground{background-color:hsl(var(--foreground))}.peer:checked~.peer-checked\:opacity-100{opacity:1}.peer:focus-visible~.peer-focus-visible\:outline-none{outline:2px solid transparent;outline-offset:2px}.peer:focus-visible~.peer-focus-visible\:ring-2{--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)}.peer:focus-visible~.peer-focus-visible\:ring-ring{--tw-ring-color:hsl(var(--ring))}.peer:focus-visible~.peer-focus-visible\:ring-offset-2{--tw-ring-offset-width:2px}.peer:focus-visible~.peer-focus-visible\:ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-50{opacity:.5}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:hsl(var(--muted))}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0}.\[\&_tr\]\:border-b tr{border-bottom-width:1px}
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.19 | 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:240 10% 3.9%;--card:0 0% 100%;--card-foreground:240 10% 3.9%;--popover:0 0% 100%;--popover-foreground:240 10% 3.9%;--primary:240 5.9% 10%;--primary-foreground:0 0% 98%;--secondary:240 4.8% 95.9%;--secondary-foreground:240 5.9% 10%;--muted:240 4.8% 95.9%;--muted-foreground:240 3.8% 46.1%;--accent:240 4.8% 95.9%;--accent-foreground:240 5.9% 10%;--destructive:0 84.2% 60.2%;--destructive-foreground:0 0% 98%;--border:240 5.9% 90%;--input:240 5.9% 90%;--ring:240 5.9% 10%;--radius:0.5rem;--purple:258 90% 66%;--orange:24 95% 53%;--blue:217 91% 60%;--green:142 71% 45%;--red:0 84% 60%}.dark{--background:240 10% 3.9%;--foreground:0 0% 98%;--card:240 10% 3.9%;--card-foreground:0 0% 98%;--popover:240 10% 3.9%;--popover-foreground:0 0% 98%;--primary:0 0% 98%;--primary-foreground:240 5.9% 10%;--secondary:240 3.7% 15.6%;--secondary-foreground:0 0% 98%;--muted:240 3.7% 15.6%;--muted-foreground:240 5% 64.9%;--accent:240 3.7% 15.6%;--accent-foreground:0 0% 98%;--destructive:0 62.8% 30.6%;--destructive-foreground:0 0% 98%;--border:240 3.7% 15.6%;--input:240 3.7% 15.6%;--ring:240 4.9% 83.9%;--radius:0.5rem;--purple:258 90% 66%;--orange:24 95% 53%;--blue:217 91% 60%;--green:142 71% 45%;--red:0 84% 60%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::-moz-selection{background:#fff;color:#000}::selection{background:#fff;color:#000}.dark ::-moz-selection{background:#fff;color:#000}.dark ::selection{background:#fff;color:#000}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.inset-y-0{top:0;bottom:0}.left-0\.5{left:.125rem}.right-0{right:0}.top-0\.5{top:.125rem}.z-50{z-index:50}.z-\[9999\]{z-index:9999}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.ml-auto{margin-left:auto}.mt-2{margin-top:.5rem}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.hidden{display:none}.h-10{height:2.5rem}.h-2{height:.5rem}.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-\[1px\]{height:1px}.h-full{height:100%}.w-10{width:2.5rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[1px\]{width:1px}.w-full{width:100%}.max-w-lg{max-width:32rem}.shrink-0{flex-shrink:0}.caption-bottom{caption-side:bottom}@keyframes fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.animate-fade-in{animation:fade-in .3s ease-out}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.whitespace-nowrap{white-space:nowrap}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.border{border-width:1px}.border-2{border-width:2px}.border-x{border-left-width:1px;border-right-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-\[hsl\(var\(--blue\)\)\]\/20{border-color:hsl(var(--blue)/.2)}.border-\[hsl\(var\(--green\)\)\]\/20{border-color:hsl(var(--green)/.2)}.border-\[hsl\(var\(--orange\)\)\]\/20{border-color:hsl(var(--orange)/.2)}.border-\[hsl\(var\(--purple\)\)\]\/20{border-color:hsl(var(--purple)/.2)}.border-\[hsl\(var\(--red\)\)\]\/20{border-color:hsl(var(--red)/.2)}.border-border{border-color:hsl(var(--border))}.border-foreground\/20{border-color:hsl(var(--foreground)/.2)}.border-foreground\/30{border-color:hsl(var(--foreground)/.3)}.border-input{border-color:hsl(var(--input))}.border-transparent{border-color:transparent}.bg-\[hsl\(var\(--blue\)\)\]{background-color:hsl(var(--blue))}.bg-\[hsl\(var\(--blue\)\)\]\/15{background-color:hsl(var(--blue)/.15)}.bg-\[hsl\(var\(--green\)\)\]{background-color:hsl(var(--green))}.bg-\[hsl\(var\(--green\)\)\]\/15{background-color:hsl(var(--green)/.15)}.bg-\[hsl\(var\(--orange\)\)\]{background-color:hsl(var(--orange))}.bg-\[hsl\(var\(--orange\)\)\]\/15{background-color:hsl(var(--orange)/.15)}.bg-\[hsl\(var\(--purple\)\)\]{background-color:hsl(var(--purple))}.bg-\[hsl\(var\(--purple\)\)\]\/15{background-color:hsl(var(--purple)/.15)}.bg-\[hsl\(var\(--red\)\)\]{background-color:hsl(var(--red))}.bg-\[hsl\(var\(--red\)\)\]\/15{background-color:hsl(var(--red)/.15)}.bg-background{background-color:hsl(var(--background))}.bg-background\/80{background-color:hsl(var(--background)/.8)}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-foreground{background-color:hsl(var(--foreground))}.bg-foreground\/10{background-color:hsl(var(--foreground)/.1)}.bg-input{background-color:hsl(var(--input))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.bg-muted\/50{background-color:hsl(var(--muted)/.5)}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-transparent{background-color:transparent}.p-0{padding:0}.p-1{padding:.25rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.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-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.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}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pr-10{padding-right:2.5rem}.pt-0{padding-top:0}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.tracking-tight{letter-spacing:-.025em}.tracking-wider{letter-spacing:.05em}.text-\[hsl\(var\(--blue\)\)\]{color:hsl(var(--blue))}.text-\[hsl\(var\(--green\)\)\]{color:hsl(var(--green))}.text-\[hsl\(var\(--orange\)\)\]{color:hsl(var(--orange))}.text-\[hsl\(var\(--purple\)\)\]{color:hsl(var(--purple))}.text-\[hsl\(var\(--red\)\)\]{color:hsl(var(--red))}.text-background{color:hsl(var(--background))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-foreground{color:hsl(var(--foreground))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.opacity-0{opacity:0}.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-2xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.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-lg,.shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.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-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{outline-style:solid}.ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition-all{transition-property:all;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-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-shadow{transition-property:box-shadow;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}.duration-500{transition-duration:.5s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.custom-scrollbar::-webkit-scrollbar{width:6px}.custom-scrollbar::-webkit-scrollbar-track{background:transparent}.custom-scrollbar::-webkit-scrollbar-thumb{background:hsla(0,0%,100%,.1);border-radius:3px}.custom-scrollbar::-webkit-scrollbar-thumb:hover{background:hsla(0,0%,100%,.2)}@keyframes popup-fade-in{0%{opacity:0}to{opacity:1}}@keyframes popup-scale-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.sidebar-root{position:relative;display:flex;flex-shrink:0;height:100%}.sidebar-left{flex-direction:row}.sidebar-right{flex-direction:row-reverse}.sidebar-panel{width:var(--sidebar-w,240px);overflow:hidden;background:hsl(var(--card));border-right:1px solid hsl(var(--border));transition:width .2s ease-in-out,opacity .2s ease-in-out}.sidebar-right .sidebar-panel{border-right:none;border-left:1px solid hsl(var(--border))}.sidebar-panel-open{opacity:1}.sidebar-panel-closed{width:0;opacity:0;border-width:0}.sidebar-content{width:var(--sidebar-w,240px);height:100%;overflow-y:auto;padding:.5rem}.sidebar-toggle{display:flex;align-items:center;justify-content:center;width:24px;flex-shrink:0;cursor:pointer;border:none;background:hsl(var(--muted));color:hsl(var(--muted-foreground));transition:background .15s,color .15s}.sidebar-toggle:hover{background:hsl(var(--accent));color:hsl(var(--accent-foreground))}.floating-popup{background:hsl(var(--card));border:1px solid hsl(var(--border));border-radius:.75rem;padding:.75rem 1rem;box-shadow:0 4px 24px rgba(0,0,0,.12),0 1px 4px rgba(0,0,0,.08);opacity:0;transition:opacity .15s ease-out,transform .15s ease-out;pointer-events:none}.floating-popup-below{transform:translateY(-6px)}.floating-popup-above{transform:translateY(6px)}.floating-popup-visible{opacity:1;transform:translateY(0);pointer-events:auto}.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))}.checked\:border-foreground:checked{border-color:hsl(var(--foreground))}.checked\:bg-foreground:checked{background-color:hsl(var(--foreground))}.hover\:bg-\[hsl\(var\(--blue\)\)\]\/90:hover{background-color:hsl(var(--blue)/.9)}.hover\:bg-\[hsl\(var\(--green\)\)\]\/90:hover{background-color:hsl(var(--green)/.9)}.hover\:bg-\[hsl\(var\(--orange\)\)\]\/90:hover{background-color:hsl(var(--orange)/.9)}.hover\:bg-\[hsl\(var\(--purple\)\)\]\/90:hover{background-color:hsl(var(--purple)/.9)}.hover\:bg-\[hsl\(var\(--red\)\)\]\/80:hover{background-color:hsl(var(--red)/.8)}.hover\:bg-\[hsl\(var\(--red\)\)\]\/90:hover{background-color:hsl(var(--red)/.9)}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-background\/50:hover{background-color:hsl(var(--background)/.5)}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted)/.5)}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary)/.8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary)/.9)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary)/.8)}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:shadow-md:hover{--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);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.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-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.peer:checked~.peer-checked\:translate-x-4{--tw-translate-x:1rem;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))}.peer:checked~.peer-checked\:bg-background{background-color:hsl(var(--background))}.peer:checked~.peer-checked\:bg-foreground{background-color:hsl(var(--foreground))}.peer:checked~.peer-checked\:opacity-100{opacity:1}.peer:focus-visible~.peer-focus-visible\:outline-none{outline:2px solid transparent;outline-offset:2px}.peer:focus-visible~.peer-focus-visible\:ring-2{--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)}.peer:focus-visible~.peer-focus-visible\:ring-ring{--tw-ring-color:hsl(var(--ring))}.peer:focus-visible~.peer-focus-visible\:ring-offset-2{--tw-ring-offset-width:2px}.peer:focus-visible~.peer-focus-visible\:ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-50{opacity:.5}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:hsl(var(--muted))}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0}.\[\&_tr\]\:border-b tr{border-bottom-width:1px}
package/dist/index.d.mts CHANGED
@@ -162,19 +162,21 @@ interface StatusBarProps extends HTMLAttributes<HTMLDivElement> {
162
162
  }
163
163
  declare const StatusBar: React.ForwardRefExoticComponent<StatusBarProps & React.RefAttributes<HTMLDivElement>>;
164
164
 
165
- interface WeekViewEvent {
166
- id: string;
167
- dayIndex: number;
168
- startHour: number;
169
- durationHours: number;
170
- title: string;
171
- color?: string;
172
- }
173
- interface WeekViewCalendarProps extends HTMLAttributes<HTMLDivElement> {
174
- events?: WeekViewEvent[];
175
- startHour?: number;
176
- endHour?: number;
177
- }
178
- declare const WeekViewCalendar: React.ForwardRefExoticComponent<WeekViewCalendarProps & React.RefAttributes<HTMLDivElement>>;
179
-
180
- export { ArrowButton, type ArrowButtonProps, Badge, type BadgeProps, Button, type ButtonProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, type CheckboxProps, ChooseList, type ChooseListProps, Counter, type CounterProps, HighlightText, type HighlightTextProps, Input, type InputProps, Popup, type PopupProps, ProgressBar, type ProgressBarProps, Separator, type SeparatorProps, StatusBar, type StatusBarProps, Switch, type SwitchProps, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Tabs, TabsContent, type TabsContentProps, TabsList, type TabsProps, TabsTrigger, type TabsTriggerProps, ThemeToggle, type ThemeToggleProps, Tooltip, type TooltipProps, WeekViewCalendar, type WeekViewCalendarProps, type WeekViewEvent, cn };
165
+ interface SidebarProps extends HTMLAttributes<HTMLDivElement> {
166
+ side: "left" | "right";
167
+ open: boolean;
168
+ onToggle: () => void;
169
+ width?: number;
170
+ }
171
+ declare const Sidebar: React.ForwardRefExoticComponent<SidebarProps & React.RefAttributes<HTMLDivElement>>;
172
+
173
+ interface FloatingPopupProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
174
+ open: boolean;
175
+ onClose: () => void;
176
+ anchorRef: React.RefObject<HTMLElement | null>;
177
+ title?: React.ReactNode;
178
+ gap?: number;
179
+ }
180
+ declare const FloatingPopup: React.ForwardRefExoticComponent<FloatingPopupProps & React.RefAttributes<HTMLDivElement>>;
181
+
182
+ export { ArrowButton, type ArrowButtonProps, Badge, type BadgeProps, Button, type ButtonProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, type CheckboxProps, ChooseList, type ChooseListProps, Counter, type CounterProps, FloatingPopup, type FloatingPopupProps, HighlightText, type HighlightTextProps, Input, type InputProps, Popup, type PopupProps, ProgressBar, type ProgressBarProps, Separator, type SeparatorProps, Sidebar, type SidebarProps, StatusBar, type StatusBarProps, Switch, type SwitchProps, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Tabs, TabsContent, type TabsContentProps, TabsList, type TabsProps, TabsTrigger, type TabsTriggerProps, ThemeToggle, type ThemeToggleProps, Tooltip, type TooltipProps, cn };
package/dist/index.d.ts CHANGED
@@ -162,19 +162,21 @@ interface StatusBarProps extends HTMLAttributes<HTMLDivElement> {
162
162
  }
163
163
  declare const StatusBar: React.ForwardRefExoticComponent<StatusBarProps & React.RefAttributes<HTMLDivElement>>;
164
164
 
165
- interface WeekViewEvent {
166
- id: string;
167
- dayIndex: number;
168
- startHour: number;
169
- durationHours: number;
170
- title: string;
171
- color?: string;
172
- }
173
- interface WeekViewCalendarProps extends HTMLAttributes<HTMLDivElement> {
174
- events?: WeekViewEvent[];
175
- startHour?: number;
176
- endHour?: number;
177
- }
178
- declare const WeekViewCalendar: React.ForwardRefExoticComponent<WeekViewCalendarProps & React.RefAttributes<HTMLDivElement>>;
179
-
180
- export { ArrowButton, type ArrowButtonProps, Badge, type BadgeProps, Button, type ButtonProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, type CheckboxProps, ChooseList, type ChooseListProps, Counter, type CounterProps, HighlightText, type HighlightTextProps, Input, type InputProps, Popup, type PopupProps, ProgressBar, type ProgressBarProps, Separator, type SeparatorProps, StatusBar, type StatusBarProps, Switch, type SwitchProps, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Tabs, TabsContent, type TabsContentProps, TabsList, type TabsProps, TabsTrigger, type TabsTriggerProps, ThemeToggle, type ThemeToggleProps, Tooltip, type TooltipProps, WeekViewCalendar, type WeekViewCalendarProps, type WeekViewEvent, cn };
165
+ interface SidebarProps extends HTMLAttributes<HTMLDivElement> {
166
+ side: "left" | "right";
167
+ open: boolean;
168
+ onToggle: () => void;
169
+ width?: number;
170
+ }
171
+ declare const Sidebar: React.ForwardRefExoticComponent<SidebarProps & React.RefAttributes<HTMLDivElement>>;
172
+
173
+ interface FloatingPopupProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
174
+ open: boolean;
175
+ onClose: () => void;
176
+ anchorRef: React.RefObject<HTMLElement | null>;
177
+ title?: React.ReactNode;
178
+ gap?: number;
179
+ }
180
+ declare const FloatingPopup: React.ForwardRefExoticComponent<FloatingPopupProps & React.RefAttributes<HTMLDivElement>>;
181
+
182
+ export { ArrowButton, type ArrowButtonProps, Badge, type BadgeProps, Button, type ButtonProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, type CheckboxProps, ChooseList, type ChooseListProps, Counter, type CounterProps, FloatingPopup, type FloatingPopupProps, HighlightText, type HighlightTextProps, Input, type InputProps, Popup, type PopupProps, ProgressBar, type ProgressBarProps, Separator, type SeparatorProps, Sidebar, type SidebarProps, StatusBar, type StatusBarProps, Switch, type SwitchProps, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Tabs, TabsContent, type TabsContentProps, TabsList, type TabsProps, TabsTrigger, type TabsTriggerProps, ThemeToggle, type ThemeToggleProps, Tooltip, type TooltipProps, cn };
package/dist/index.js CHANGED
@@ -42,11 +42,13 @@ __export(index_exports, {
42
42
  Checkbox: () => Checkbox,
43
43
  ChooseList: () => ChooseList,
44
44
  Counter: () => Counter,
45
+ FloatingPopup: () => FloatingPopup,
45
46
  HighlightText: () => HighlightText,
46
47
  Input: () => Input,
47
48
  Popup: () => Popup,
48
49
  ProgressBar: () => ProgressBar,
49
50
  Separator: () => Separator,
51
+ Sidebar: () => Sidebar,
50
52
  StatusBar: () => StatusBar,
51
53
  Switch: () => Switch,
52
54
  Table: () => Table,
@@ -61,7 +63,6 @@ __export(index_exports, {
61
63
  TabsTrigger: () => TabsTrigger,
62
64
  ThemeToggle: () => ThemeToggle,
63
65
  Tooltip: () => Tooltip,
64
- WeekViewCalendar: () => WeekViewCalendar,
65
66
  cn: () => cn
66
67
  });
67
68
  module.exports = __toCommonJS(index_exports);
@@ -909,108 +910,149 @@ var StatusBar = (0, import_react18.forwardRef)(
909
910
  );
910
911
  StatusBar.displayName = "StatusBar";
911
912
 
912
- // src/components/extended/WeekViewCalendar.tsx
913
+ // src/components/extended/Sidebar.tsx
913
914
  var import_react19 = require("react");
915
+ var import_lucide_react7 = require("lucide-react");
914
916
  var import_jsx_runtime19 = require("react/jsx-runtime");
915
- var WeekViewCalendar = (0, import_react19.forwardRef)(({ className, events = [], startHour = 8, endHour = 18, ...props }, ref) => {
916
- const days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
917
- const hours = Array.from(
918
- { length: endHour - startHour },
919
- (_, i) => i + startHour
920
- );
921
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
922
- "div",
923
- {
924
- ref,
925
- className: cn(
926
- "flex flex-col rounded-lg border border-border overflow-hidden bg-card",
927
- className
928
- ),
929
- ...props,
930
- children: [
931
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "grid grid-cols-8 border-b border-border bg-muted/30", children: [
932
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "flex items-center justify-center border-r border-border p-2 text-xs font-medium text-muted-foreground w-16", children: "Time" }),
933
- days.map((day, i) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
934
- "div",
935
- {
936
- className: cn(
937
- "p-2 text-center text-sm font-semibold",
938
- i < 6 && "border-r border-border"
939
- ),
940
- children: day
941
- },
942
- day
943
- ))
944
- ] }),
945
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "relative overflow-y-auto max-h-[500px] custom-scrollbar", children: [
946
- hours.map((hour, hIndex) => /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
917
+ var Sidebar = (0, import_react19.forwardRef)(
918
+ ({ className, side, open, onToggle, width = 240, children, style, ...props }, ref) => {
919
+ const isLeft = side === "left";
920
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
921
+ "div",
922
+ {
923
+ ref,
924
+ className: cn("sidebar-root", `sidebar-${side}`, className),
925
+ style: {
926
+ "--sidebar-w": `${width}px`,
927
+ ...style
928
+ },
929
+ ...props,
930
+ children: [
931
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
947
932
  "div",
948
933
  {
949
934
  className: cn(
950
- "grid grid-cols-8",
951
- hIndex < hours.length - 1 && "border-b border-border/50"
935
+ "sidebar-panel",
936
+ open ? "sidebar-panel-open" : "sidebar-panel-closed"
952
937
  ),
953
- children: [
954
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "flex items-start justify-center border-r border-border p-2 text-xs text-muted-foreground w-16 sticky left-0 bg-card", children: `${hour === 0 ? 12 : hour > 12 ? hour - 12 : hour} ${hour >= 12 ? "PM" : "AM"}` }),
955
- days.map((_, dIndex) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
956
- "div",
957
- {
958
- className: cn(
959
- "h-16 relative",
960
- dIndex < 6 && "border-r border-border/50"
961
- )
962
- },
963
- dIndex
964
- ))
965
- ]
966
- },
967
- hour
968
- )),
938
+ children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "sidebar-content", children })
939
+ }
940
+ ),
969
941
  /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
970
- "div",
942
+ "button",
971
943
  {
972
- className: "absolute inset-0 z-10 pointer-events-none",
973
- style: { paddingLeft: "4rem" },
974
- children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "relative w-full h-full", children: events.map((event) => {
975
- if (event.startHour < startHour || event.startHour >= endHour)
976
- return null;
977
- const top = (event.startHour - startHour) / (endHour - startHour) * 100;
978
- const height = event.durationHours / (endHour - startHour) * 100;
979
- const left = event.dayIndex / 7 * 100;
980
- const width = 100 / 7;
981
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
982
- "div",
983
- {
984
- className: "absolute p-0.5 pointer-events-auto",
985
- style: {
986
- top: `${top}%`,
987
- left: `${left}%`,
988
- height: `${height}%`,
989
- width: `${width}%`
990
- },
991
- children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
992
- "div",
993
- {
994
- className: "h-full w-full rounded-md border border-white/10 p-1.5 text-xs font-semibold text-white overflow-hidden shadow-sm transition-transform hover:scale-[1.02] hover:shadow-md cursor-pointer",
995
- style: {
996
- backgroundColor: event.color || "hsl(var(--primary))"
997
- },
998
- title: event.title,
999
- children: event.title
1000
- }
1001
- )
1002
- },
1003
- event.id
1004
- );
1005
- }) })
944
+ type: "button",
945
+ onClick: onToggle,
946
+ className: "sidebar-toggle",
947
+ "aria-label": open ? `Hide ${side} sidebar` : `Show ${side} sidebar`,
948
+ children: isLeft ? open ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react7.ChevronLeft, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react7.ChevronRight, { className: "h-4 w-4" }) : open ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react7.ChevronRight, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react7.ChevronLeft, { className: "h-4 w-4" })
1006
949
  }
1007
950
  )
1008
- ] })
1009
- ]
1010
- }
1011
- );
1012
- });
1013
- WeekViewCalendar.displayName = "WeekViewCalendar";
951
+ ]
952
+ }
953
+ );
954
+ }
955
+ );
956
+ Sidebar.displayName = "Sidebar";
957
+
958
+ // src/components/extended/FloatingPopup.tsx
959
+ var import_react20 = require("react");
960
+ var import_lucide_react8 = require("lucide-react");
961
+ var import_jsx_runtime20 = require("react/jsx-runtime");
962
+ var FloatingPopup = (0, import_react20.forwardRef)(
963
+ ({ className, open, onClose, anchorRef, title, gap = 8, children, ...props }, ref) => {
964
+ const [pos, setPos] = (0, import_react20.useState)(null);
965
+ const [visible, setVisible] = (0, import_react20.useState)(false);
966
+ const calculate = (0, import_react20.useCallback)(() => {
967
+ if (!anchorRef.current) return;
968
+ const rect = anchorRef.current.getBoundingClientRect();
969
+ const popupHeight = 200;
970
+ const popupWidth = 320;
971
+ const spaceBelow = window.innerHeight - rect.bottom;
972
+ const direction = spaceBelow >= popupHeight + gap ? "below" : "above";
973
+ let top;
974
+ if (direction === "below") {
975
+ top = rect.bottom + gap;
976
+ } else {
977
+ top = rect.top - popupHeight - gap;
978
+ if (top < 8) top = 8;
979
+ }
980
+ let left = rect.left + rect.width / 2 - popupWidth / 2;
981
+ if (left < 8) left = 8;
982
+ if (left + popupWidth > window.innerWidth - 8) {
983
+ left = window.innerWidth - popupWidth - 8;
984
+ }
985
+ setPos({ top, left, direction });
986
+ }, [anchorRef, gap]);
987
+ (0, import_react20.useLayoutEffect)(() => {
988
+ if (open) {
989
+ calculate();
990
+ requestAnimationFrame(() => setVisible(true));
991
+ } else {
992
+ setVisible(false);
993
+ setPos(null);
994
+ }
995
+ }, [open, calculate]);
996
+ (0, import_react20.useEffect)(() => {
997
+ if (!open) return;
998
+ const onResize = () => calculate();
999
+ const onScroll = () => calculate();
1000
+ window.addEventListener("resize", onResize);
1001
+ window.addEventListener("scroll", onScroll, true);
1002
+ return () => {
1003
+ window.removeEventListener("resize", onResize);
1004
+ window.removeEventListener("scroll", onScroll, true);
1005
+ };
1006
+ }, [open, calculate]);
1007
+ (0, import_react20.useEffect)(() => {
1008
+ if (!open) return;
1009
+ const handleEsc = (e) => {
1010
+ if (e.key === "Escape") onClose();
1011
+ };
1012
+ document.addEventListener("keydown", handleEsc);
1013
+ return () => document.removeEventListener("keydown", handleEsc);
1014
+ }, [open, onClose]);
1015
+ if (!open || !pos) return null;
1016
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
1017
+ "div",
1018
+ {
1019
+ ref,
1020
+ className: cn(
1021
+ "floating-popup",
1022
+ visible && "floating-popup-visible",
1023
+ pos.direction === "above" ? "floating-popup-above" : "floating-popup-below",
1024
+ className
1025
+ ),
1026
+ style: {
1027
+ position: "fixed",
1028
+ top: pos.top,
1029
+ left: pos.left,
1030
+ zIndex: 50,
1031
+ width: 320
1032
+ },
1033
+ ...props,
1034
+ children: [
1035
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "flex items-center justify-between mb-2", children: [
1036
+ title && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "text-sm font-semibold tracking-tight", children: title }),
1037
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1038
+ Button,
1039
+ {
1040
+ variant: "ghost",
1041
+ size: "icon",
1042
+ className: "h-6 w-6 rounded-full ml-auto",
1043
+ onClick: onClose,
1044
+ "aria-label": "Close popup",
1045
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react8.X, { className: "h-3.5 w-3.5" })
1046
+ }
1047
+ )
1048
+ ] }),
1049
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "text-sm text-muted-foreground", children })
1050
+ ]
1051
+ }
1052
+ );
1053
+ }
1054
+ );
1055
+ FloatingPopup.displayName = "FloatingPopup";
1014
1056
  // Annotate the CommonJS export names for ESM import in node:
1015
1057
  0 && (module.exports = {
1016
1058
  ArrowButton,
@@ -1025,11 +1067,13 @@ WeekViewCalendar.displayName = "WeekViewCalendar";
1025
1067
  Checkbox,
1026
1068
  ChooseList,
1027
1069
  Counter,
1070
+ FloatingPopup,
1028
1071
  HighlightText,
1029
1072
  Input,
1030
1073
  Popup,
1031
1074
  ProgressBar,
1032
1075
  Separator,
1076
+ Sidebar,
1033
1077
  StatusBar,
1034
1078
  Switch,
1035
1079
  Table,
@@ -1044,6 +1088,5 @@ WeekViewCalendar.displayName = "WeekViewCalendar";
1044
1088
  TabsTrigger,
1045
1089
  ThemeToggle,
1046
1090
  Tooltip,
1047
- WeekViewCalendar,
1048
1091
  cn
1049
1092
  });