boottent-design 0.1.260 → 0.1.261
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/dist/design-system/components/article-asset-card.md +1 -1
- package/dist/design-system/components/blog-review-card.md +1 -1
- package/dist/design-system/components/camp-card.md +1 -1
- package/dist/design-system/components/company-info-card.md +1 -1
- package/dist/design-system/components/dday-card.md +1 -1
- package/dist/design-system/components/environment-asset-photo.md +1 -1
- package/dist/design-system/components/event-asset-banner.md +1 -1
- package/dist/design-system/components/event-card.md +1 -1
- package/dist/design-system/components/lecturer-card.md +1 -1
- package/dist/design-system/components/main-banner-image.md +1 -1
- package/dist/design-system/components/mobile-camp-card.md +1 -1
- package/dist/design-system/components/partner-list-card.md +1 -1
- package/dist/design-system/components/portfolio-asset-card.md +1 -1
- package/dist/design-system/components/premium-card.md +1 -1
- package/dist/design-system/components/title-tag-card.md +1 -1
- package/dist/design-system/components/youtube-video-modal.md +1 -1
- package/dist/design-system/design-system.md +3 -2
- package/dist/design-system/tokens.md +1 -1
- package/dist/design-system/ui/accordion.md +1 -1
- package/dist/design-system/ui/alert-dialog.md +1 -1
- package/dist/design-system/ui/anchor.md +1 -1
- package/dist/design-system/ui/aspect-ratio.md +1 -1
- package/dist/design-system/ui/avatar.md +1 -1
- package/dist/design-system/ui/badge.md +1 -1
- package/dist/design-system/ui/button.md +1 -1
- package/dist/design-system/ui/calendar.md +1 -1
- package/dist/design-system/ui/callout.md +1 -1
- package/dist/design-system/ui/card-label.md +1 -1
- package/dist/design-system/ui/card.md +1 -1
- package/dist/design-system/ui/checkbox.md +1 -1
- package/dist/design-system/ui/circled-check-button.md +1 -1
- package/dist/design-system/ui/command.md +1 -1
- package/dist/design-system/ui/dialog.md +1 -1
- package/dist/design-system/ui/dropdown-menu.md +1 -1
- package/dist/design-system/ui/file-uploader.md +1 -1
- package/dist/design-system/ui/form.md +1 -1
- package/dist/design-system/ui/highlight-text.md +1 -1
- package/dist/design-system/ui/icons.md +1 -1
- package/dist/design-system/ui/image.md +1 -1
- package/dist/design-system/ui/input.md +1 -1
- package/dist/design-system/ui/label.md +1 -1
- package/dist/design-system/ui/month-picker.md +1 -1
- package/dist/design-system/ui/multi-select.md +1 -1
- package/dist/design-system/ui/navigation-menu.md +1 -1
- package/dist/design-system/ui/popover.md +1 -1
- package/dist/design-system/ui/portal.md +64 -0
- package/dist/design-system/ui/progress.md +1 -1
- package/dist/design-system/ui/radio-group.md +1 -1
- package/dist/design-system/ui/scroll-area.md +1 -1
- package/dist/design-system/ui/select.md +1 -1
- package/dist/design-system/ui/separator.md +1 -1
- package/dist/design-system/ui/simple-table.md +1 -1
- package/dist/design-system/ui/skeleton.md +1 -1
- package/dist/design-system/ui/slider.md +1 -1
- package/dist/design-system/ui/switch.md +1 -1
- package/dist/design-system/ui/symbols.md +1 -1
- package/dist/design-system/ui/tabs.md +1 -1
- package/dist/design-system/ui/tag.md +1 -1
- package/dist/design-system/ui/text.md +1 -1
- package/dist/design-system/ui/textarea.md +1 -1
- package/dist/design-system/ui/toast.md +9 -3
- package/dist/design-system/ui/toggle-group.md +1 -1
- package/dist/design-system/ui/toggle.md +1 -1
- package/dist/design-system/ui/tooltip.md +1 -1
- package/dist/design-system/usage.md +1 -1
- package/dist/design-system/when-to-use.md +3 -2
- package/dist/styles.css +1 -1
- package/dist/types/button.d.ts +1 -1
- package/dist/types/command.d.ts +6 -6
- package/dist/types/multi-select.d.ts +2 -2
- package/dist/types/portal.d.ts +179 -0
- package/dist/types/toast.d.ts +31 -2
- package/dist/types/toggle-group.d.ts +2 -2
- package/dist/types/toggle.d.ts +2 -2
- package/dist/types/ui/accordion.d.ts +1 -1
- package/dist/types/ui/alert-dialog.d.ts +1 -1
- package/dist/types/ui/anchor.d.ts +1 -1
- package/dist/types/ui/aspect-ratio.d.ts +1 -1
- package/dist/types/ui/avatar.d.ts +1 -1
- package/dist/types/ui/badge.d.ts +1 -1
- package/dist/types/ui/button.d.ts +1 -1
- package/dist/types/ui/calendar.d.ts +1 -1
- package/dist/types/ui/callout.d.ts +1 -1
- package/dist/types/ui/card-label.d.ts +1 -1
- package/dist/types/ui/card.d.ts +1 -1
- package/dist/types/ui/checkbox.d.ts +1 -1
- package/dist/types/ui/circled-check-button.d.ts +1 -1
- package/dist/types/ui/command.d.ts +1 -1
- package/dist/types/ui/dialog.d.ts +1 -1
- package/dist/types/ui/dropdown-menu.d.ts +1 -1
- package/dist/types/ui/file-uploader.d.ts +1 -1
- package/dist/types/ui/form.d.ts +1 -1
- package/dist/types/ui/highlight-text.d.ts +1 -1
- package/dist/types/ui/icons.d.ts +1 -1
- package/dist/types/ui/image.d.ts +1 -1
- package/dist/types/ui/input.d.ts +1 -1
- package/dist/types/ui/label.d.ts +1 -1
- package/dist/types/ui/month-picker.d.ts +1 -1
- package/dist/types/ui/multi-select.d.ts +1 -1
- package/dist/types/ui/navigation-menu.d.ts +1 -1
- package/dist/types/ui/popover.d.ts +1 -1
- package/dist/types/ui/portal.d.ts +2 -0
- package/dist/types/ui/progress.d.ts +1 -1
- package/dist/types/ui/radio-group.d.ts +1 -1
- package/dist/types/ui/scroll-area.d.ts +1 -1
- package/dist/types/ui/select.d.ts +1 -1
- package/dist/types/ui/separator.d.ts +1 -1
- package/dist/types/ui/simple-table.d.ts +1 -1
- package/dist/types/ui/skeleton.d.ts +1 -1
- package/dist/types/ui/slider.d.ts +1 -1
- package/dist/types/ui/switch.d.ts +1 -1
- package/dist/types/ui/symbols.d.ts +1 -1
- package/dist/types/ui/tabs.d.ts +1 -1
- package/dist/types/ui/tag.d.ts +1 -1
- package/dist/types/ui/text.d.ts +1 -1
- package/dist/types/ui/textarea.d.ts +1 -1
- package/dist/types/ui/toast.d.ts +1 -1
- package/dist/types/ui/toggle-group.d.ts +1 -1
- package/dist/types/ui/toggle.d.ts +1 -1
- package/dist/types/ui/tooltip.d.ts +1 -1
- package/dist/types/ui.d.ts +42 -14
- package/dist/ui/portal.cjs.js +1 -0
- package/dist/ui/portal.es.js +561 -0
- package/dist/ui/toast.cjs.js +1 -1
- package/dist/ui/toast.es.js +202 -47
- package/dist/ui.cjs.js +1 -1
- package/dist/ui.es.js +61 -57
- package/package.json +1 -1
package/dist/types/ui.d.ts
CHANGED
|
@@ -159,7 +159,7 @@ export declare interface ButtonProps extends React_2.ButtonHTMLAttributes<HTMLBu
|
|
|
159
159
|
|
|
160
160
|
export declare const buttonVariants: (props?: ({
|
|
161
161
|
theme?: "primary" | "secondary" | "etc" | null | undefined;
|
|
162
|
-
size?: "
|
|
162
|
+
size?: "sm" | "md" | "lg" | "xs" | "icon" | null | undefined;
|
|
163
163
|
variant?: "text" | "solid" | "outline" | null | undefined;
|
|
164
164
|
shape?: "square" | "rounded" | null | undefined;
|
|
165
165
|
} & ClassProp) | undefined) => string;
|
|
@@ -220,7 +220,7 @@ export declare const Command: React_2.ForwardRefExoticComponent<Omit<{
|
|
|
220
220
|
ref?: React_2.Ref<HTMLDivElement> | undefined;
|
|
221
221
|
} & {
|
|
222
222
|
asChild?: boolean | undefined;
|
|
223
|
-
}, "key" | keyof React_2.HTMLAttributes<HTMLDivElement
|
|
223
|
+
}, "key" | "asChild" | keyof React_2.HTMLAttributes<HTMLDivElement>> & {
|
|
224
224
|
label?: string | undefined;
|
|
225
225
|
shouldFilter?: boolean | undefined;
|
|
226
226
|
filter?: ((value: string, search: string, keywords?: string[] | undefined) => number) | undefined;
|
|
@@ -243,7 +243,7 @@ export declare const CommandEmpty: React_2.ForwardRefExoticComponent<Omit<{
|
|
|
243
243
|
ref?: React_2.Ref<HTMLDivElement> | undefined;
|
|
244
244
|
} & {
|
|
245
245
|
asChild?: boolean | undefined;
|
|
246
|
-
}, "key" | keyof React_2.HTMLAttributes<HTMLDivElement
|
|
246
|
+
}, "key" | "asChild" | keyof React_2.HTMLAttributes<HTMLDivElement>> & React_2.RefAttributes<HTMLDivElement>, "ref"> & React_2.RefAttributes<HTMLDivElement>>;
|
|
247
247
|
|
|
248
248
|
export declare const CommandGroup: React_2.ForwardRefExoticComponent<Omit<{
|
|
249
249
|
children?: React_2.ReactNode;
|
|
@@ -251,7 +251,7 @@ export declare const CommandGroup: React_2.ForwardRefExoticComponent<Omit<{
|
|
|
251
251
|
ref?: React_2.Ref<HTMLDivElement> | undefined;
|
|
252
252
|
} & {
|
|
253
253
|
asChild?: boolean | undefined;
|
|
254
|
-
}, "key" | keyof React_2.HTMLAttributes<HTMLDivElement
|
|
254
|
+
}, "key" | "asChild" | keyof React_2.HTMLAttributes<HTMLDivElement>>, "value" | "heading"> & {
|
|
255
255
|
heading?: React_2.ReactNode;
|
|
256
256
|
value?: string | undefined;
|
|
257
257
|
forceMount?: boolean | undefined;
|
|
@@ -272,7 +272,7 @@ export declare const CommandItem: React_2.ForwardRefExoticComponent<Omit<{
|
|
|
272
272
|
ref?: React_2.Ref<HTMLDivElement> | undefined;
|
|
273
273
|
} & {
|
|
274
274
|
asChild?: boolean | undefined;
|
|
275
|
-
}, "key" | keyof React_2.HTMLAttributes<HTMLDivElement
|
|
275
|
+
}, "key" | "asChild" | keyof React_2.HTMLAttributes<HTMLDivElement>>, "value" | "disabled" | "onSelect"> & {
|
|
276
276
|
disabled?: boolean | undefined;
|
|
277
277
|
onSelect?: ((value: string) => void) | undefined;
|
|
278
278
|
value?: string | undefined;
|
|
@@ -286,7 +286,7 @@ export declare const CommandList: React_2.ForwardRefExoticComponent<Omit<{
|
|
|
286
286
|
ref?: React_2.Ref<HTMLDivElement> | undefined;
|
|
287
287
|
} & {
|
|
288
288
|
asChild?: boolean | undefined;
|
|
289
|
-
}, "key" | keyof React_2.HTMLAttributes<HTMLDivElement
|
|
289
|
+
}, "key" | "asChild" | keyof React_2.HTMLAttributes<HTMLDivElement>> & {
|
|
290
290
|
label?: string | undefined;
|
|
291
291
|
} & React_2.RefAttributes<HTMLDivElement>, "ref"> & React_2.RefAttributes<HTMLDivElement>>;
|
|
292
292
|
|
|
@@ -294,7 +294,7 @@ export declare const CommandSeparator: React_2.ForwardRefExoticComponent<Omit<Pi
|
|
|
294
294
|
ref?: React_2.Ref<HTMLDivElement> | undefined;
|
|
295
295
|
} & {
|
|
296
296
|
asChild?: boolean | undefined;
|
|
297
|
-
}, "key" | keyof React_2.HTMLAttributes<HTMLDivElement
|
|
297
|
+
}, "key" | "asChild" | keyof React_2.HTMLAttributes<HTMLDivElement>> & {
|
|
298
298
|
alwaysRender?: boolean | undefined;
|
|
299
299
|
} & React_2.RefAttributes<HTMLDivElement>, "ref"> & React_2.RefAttributes<HTMLDivElement>>;
|
|
300
300
|
|
|
@@ -552,7 +552,7 @@ export declare const MultiSelectorItem: default_2.ForwardRefExoticComponent<{
|
|
|
552
552
|
ref?: default_2.Ref<HTMLDivElement> | undefined;
|
|
553
553
|
} & {
|
|
554
554
|
asChild?: boolean | undefined;
|
|
555
|
-
}, "key" | keyof default_2.HTMLAttributes<HTMLDivElement
|
|
555
|
+
}, "key" | "asChild" | keyof default_2.HTMLAttributes<HTMLDivElement>>, "value" | "disabled" | "onSelect"> & {
|
|
556
556
|
disabled?: boolean | undefined;
|
|
557
557
|
onSelect?: ((value: string) => void) | undefined;
|
|
558
558
|
value?: string | undefined;
|
|
@@ -566,7 +566,7 @@ export declare const MultiSelectorList: default_2.ForwardRefExoticComponent<Omit
|
|
|
566
566
|
ref?: default_2.Ref<HTMLDivElement> | undefined;
|
|
567
567
|
} & {
|
|
568
568
|
asChild?: boolean | undefined;
|
|
569
|
-
}, "key" | keyof default_2.HTMLAttributes<HTMLDivElement
|
|
569
|
+
}, "key" | "asChild" | keyof default_2.HTMLAttributes<HTMLDivElement>> & {
|
|
570
570
|
label?: string | undefined;
|
|
571
571
|
} & default_2.RefAttributes<HTMLDivElement>, "ref"> & default_2.RefAttributes<HTMLDivElement>>;
|
|
572
572
|
|
|
@@ -801,9 +801,17 @@ declare interface TextProps {
|
|
|
801
801
|
|
|
802
802
|
export declare const Toast: React_2.ForwardRefExoticComponent<Omit<ToastPrimitives.ToastProps & React_2.RefAttributes<HTMLLIElement>, "ref"> & VariantProps<(props?: ({
|
|
803
803
|
variant?: "white" | "black" | null | undefined;
|
|
804
|
-
size?: "full" | "sm" | "md" | "lg" | "
|
|
804
|
+
size?: "full" | "sm" | "md" | "lg" | "xl" | "fit" | null | undefined;
|
|
805
805
|
} & ClassProp) | undefined) => string> & React_2.RefAttributes<HTMLLIElement>>;
|
|
806
806
|
|
|
807
|
+
export declare function toast({ ...props }: Toast_2): {
|
|
808
|
+
id: string;
|
|
809
|
+
dismiss: () => void;
|
|
810
|
+
update: (props: ToasterProps) => void;
|
|
811
|
+
};
|
|
812
|
+
|
|
813
|
+
declare type Toast_2 = Omit<ToasterProps, "id">;
|
|
814
|
+
|
|
807
815
|
export declare const ToastAction: React_2.ForwardRefExoticComponent<Omit<ToastPrimitives.ToastActionProps & React_2.RefAttributes<HTMLButtonElement>, "ref"> & React_2.RefAttributes<HTMLButtonElement>>;
|
|
808
816
|
|
|
809
817
|
export declare type ToastActionElement = React_2.ReactElement<typeof ToastAction>;
|
|
@@ -812,6 +820,20 @@ export declare const ToastClose: React_2.ForwardRefExoticComponent<Omit<ToastPri
|
|
|
812
820
|
|
|
813
821
|
export declare const ToastDescription: React_2.ForwardRefExoticComponent<Omit<ToastPrimitives.ToastDescriptionProps & React_2.RefAttributes<HTMLDivElement>, "ref"> & React_2.RefAttributes<HTMLDivElement>>;
|
|
814
822
|
|
|
823
|
+
export declare type ToasterProps = ToastProps & ToastViewportProps & {
|
|
824
|
+
id?: string;
|
|
825
|
+
title?: React_2.ReactNode;
|
|
826
|
+
description?: React_2.ReactNode;
|
|
827
|
+
onAction?: () => void;
|
|
828
|
+
actionBtnText?: string | React_2.ReactNode;
|
|
829
|
+
closeButton?: boolean;
|
|
830
|
+
onClose?: () => void;
|
|
831
|
+
};
|
|
832
|
+
|
|
833
|
+
export declare function ToastForm(props: ToasterProps): JSX_2.Element;
|
|
834
|
+
|
|
835
|
+
export declare function ToastManager(): JSX_2.Element;
|
|
836
|
+
|
|
815
837
|
export declare type ToastPositionsType = "top-left" | "top-center" | "top-right" | "bottom-left" | "bottom-center" | "bottom-right";
|
|
816
838
|
|
|
817
839
|
export declare const toastPositionVariants: Record<ToastPositionsType, string>;
|
|
@@ -824,7 +846,7 @@ export declare const ToastTitle: React_2.ForwardRefExoticComponent<Omit<ToastPri
|
|
|
824
846
|
|
|
825
847
|
export declare const toastVariants: (props?: ({
|
|
826
848
|
variant?: "white" | "black" | null | undefined;
|
|
827
|
-
size?: "full" | "sm" | "md" | "lg" | "
|
|
849
|
+
size?: "full" | "sm" | "md" | "lg" | "xl" | "fit" | null | undefined;
|
|
828
850
|
} & ClassProp) | undefined) => string;
|
|
829
851
|
|
|
830
852
|
export declare const ToastViewport: React_2.ForwardRefExoticComponent<Omit<ToastPrimitives.ToastViewportProps & React_2.RefAttributes<HTMLOListElement>, "ref"> & {
|
|
@@ -836,7 +858,7 @@ export declare type ToastViewportProps = React_2.ComponentPropsWithoutRef<typeof
|
|
|
836
858
|
export declare const Toggle: React_2.ForwardRefExoticComponent<Omit<TogglePrimitive.ToggleProps & React_2.RefAttributes<HTMLButtonElement>, "ref"> & VariantProps<(props?: ({
|
|
837
859
|
variant?: "solid" | "outline" | null | undefined;
|
|
838
860
|
theme?: "primary" | "secondary" | null | undefined;
|
|
839
|
-
size?: "
|
|
861
|
+
size?: "sm" | "md" | "lg" | "xs" | "icon" | null | undefined;
|
|
840
862
|
shape?: "square" | "rounded" | null | undefined;
|
|
841
863
|
checked?: boolean | null | undefined;
|
|
842
864
|
} & ClassProp) | undefined) => string> & React_2.RefAttributes<HTMLButtonElement>>;
|
|
@@ -856,7 +878,7 @@ export declare type ToggleButtonType = "single" | "multiple";
|
|
|
856
878
|
export declare const ToggleGroup: React_2.ForwardRefExoticComponent<((ToggleGroupPrimitive.ToggleGroupSingleProps | ToggleGroupPrimitive.ToggleGroupMultipleProps) & VariantProps<(props?: ({
|
|
857
879
|
variant?: "solid" | "outline" | null | undefined;
|
|
858
880
|
theme?: "primary" | "secondary" | null | undefined;
|
|
859
|
-
size?: "
|
|
881
|
+
size?: "sm" | "md" | "lg" | "xs" | "icon" | null | undefined;
|
|
860
882
|
shape?: "square" | "rounded" | null | undefined;
|
|
861
883
|
checked?: boolean | null | undefined;
|
|
862
884
|
} & ClassProp) | undefined) => string>) & React_2.RefAttributes<HTMLDivElement>>;
|
|
@@ -880,7 +902,7 @@ declare interface ToggleGroupItemProps extends ToggleGroupPrimitive.ToggleGroupI
|
|
|
880
902
|
export declare const toggleVariants: (props?: ({
|
|
881
903
|
variant?: "solid" | "outline" | null | undefined;
|
|
882
904
|
theme?: "primary" | "secondary" | null | undefined;
|
|
883
|
-
size?: "
|
|
905
|
+
size?: "sm" | "md" | "lg" | "xs" | "icon" | null | undefined;
|
|
884
906
|
shape?: "square" | "rounded" | null | undefined;
|
|
885
907
|
checked?: boolean | null | undefined;
|
|
886
908
|
} & ClassProp) | undefined) => string;
|
|
@@ -940,6 +962,12 @@ export declare const useFormField: () => {
|
|
|
940
962
|
formMessageId: string;
|
|
941
963
|
};
|
|
942
964
|
|
|
965
|
+
export declare function useToast(): {
|
|
966
|
+
toast: typeof toast;
|
|
967
|
+
dismiss: (toastId?: string) => void;
|
|
968
|
+
toasts: ToasterProps[];
|
|
969
|
+
};
|
|
970
|
+
|
|
943
971
|
declare function ViewCard({ size, fill, }: SvgIconType): JSX_2.Element;
|
|
944
972
|
|
|
945
973
|
declare function ViewMore({ size, fill, }: SvgIconType): JSX_2.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use client";"use strict";var _=Object.defineProperty;var q=(s,e,t)=>e in s?_(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t;var b=(s,e,t)=>q(s,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("react"),o=require("react/jsx-runtime"),L=require("react-dom"),g=require("../common-DeneXo5X.cjs"),c=require("./dialog.cjs.js"),M=require("./icons.cjs.js"),C=require("./button.cjs.js"),Y=require("../index-DKCqkplO.cjs");function I(s){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(s){for(const t in s)if(t!=="default"){const n=Object.getOwnPropertyDescriptor(s,t);Object.defineProperty(e,t,n.get?n:{enumerable:!0,get:()=>s[t]})}}return e.default=s,Object.freeze(e)}const v=I(p),B=s=>"forceMount"in s&&s.forceMount===!0;class H{constructor(){b(this,"listeners",new Set);b(this,"portals",new Map);b(this,"queue",[]);b(this,"isProcessing",!1);b(this,"pendingEvents",[]);b(this,"broadcastScheduled",!1);b(this,"openPortalsSnapshot",[])}schedule(e){typeof window<"u"&&typeof window.requestAnimationFrame=="function"?window.requestAnimationFrame(()=>e()):setTimeout(e,0)}processQueue(){if(this.isProcessing||this.queue.length===0)return;this.isProcessing=!0;const e=()=>{const t=this.queue.shift();if(!t){this.isProcessing=!1;return}try{t()}finally{this.schedule(e)}};e()}scheduleBroadcast(e){this.pendingEvents.push(e),!this.broadcastScheduled&&(this.broadcastScheduled=!0,this.queue.push(()=>{const t=this.pendingEvents.slice();this.pendingEvents=[],this.broadcastScheduled=!1;for(const n of t)this.listeners.forEach(a=>{try{a(n.options,n.isOpen)}catch(u){process.env.NODE_ENV!=="production"&&console.error("[PortalManager] listener error:",u)}})}),this.processQueue())}isPortalOpen(e){var t;return((t=this.portals.get(e))==null?void 0:t.isOpen)??!1}rebuildSnapshot(){const e=[];for(const[t,n]of this.portals.entries())n.isOpen&&e.push(t);this.openPortalsSnapshot=e}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}openPortal(e,t){const n=t.id??this.generateId(e);if(this.isPortalOpen(n))return n;const u={...{id:n,type:e,props:{...t,id:n}},isOpen:!0};return this.portals.set(n,u),this.rebuildSnapshot(),this.scheduleBroadcast({options:u,isOpen:!0}),n}setPortalOpen(e,t,n="default"){var u,i;const a=this.portals.get(e);if(a&&!(!t&&B(a.props)&&n!=="force")&&a.isOpen!==t){if(!t){const r=a._openedAt;if(r&&Date.now()-r<300)return}a.isOpen=t,t&&(a._openedAt=Date.now()),this.portals.set(e,a),this.rebuildSnapshot(),this.scheduleBroadcast({options:a,isOpen:t}),t||(i=(u=a.props).onClose)==null||i.call(u)}}updatePortal(e,t,n){const a=this.portals.get(e);if(!a||a.type!==t)return;const u={...a,props:{...a.props,...n}};this.portals.set(e,u),this.scheduleBroadcast({options:u,isOpen:!0})}closePortal(e){this.setPortalOpen(e,!1)}forceClosePortal(e){const t=this.portals.get(e);t&&(t._forceClose=!0,this.setPortalOpen(e,!1,"force"),delete t._forceClose)}closeAllPortals(){this.getOpenPortals().forEach(e=>this.closePortal(e))}getIsPortalOpen(e){var t;return((t=this.portals.get(e))==null?void 0:t.isOpen)??!1}getOpenPortals(){const e=[];for(const[t,n]of this.portals.entries())n.isOpen&&e.push(t);return e}getOpenPortalsSnapshot(){return this.openPortalsSnapshot}generateId(e){const t=typeof window<"u"&&window.location?window.location.pathname:"ssr";return`${e}_${t}`}}const x=new H,U=[],$=s=>x.subscribe(s),K=()=>x.getOpenPortalsSnapshot(),Q=()=>U,W=()=>{const s=p.useSyncExternalStore($,K,Q),e=p.useCallback((l,f)=>x.openPortal(l,{...f,onClose:f.onClose??(()=>{})}),[]),t=p.useCallback(l=>e("modal",l),[e]),n=p.useCallback(l=>typeof l=="string"?e("alert",{description:l}):e("alert",l),[e]),a=p.useCallback(l=>e("dialog",l),[e]),u=p.useCallback(l=>e("custom",l),[e]),i=p.useCallback(l=>x.getIsPortalOpen(l),[]),r=p.useCallback(l=>x.closePortal(l),[]),m=p.useCallback(l=>x.forceClosePortal(l),[]),d=p.useCallback(()=>x.closeAllPortals(),[]);return{open:e,confirm:t,alert:n,dialog:a,custom:u,getIsOpen:i,closePortal:r,forceClosePortal:m,closeAllPortals:d,openPortals:s}},G=new Set(["ArrowUp","ArrowDown","PageUp","PageDown","Home","End"," ","Spacebar"]);function J(s){return s instanceof HTMLElement}function F(s,e){let t=s;for(;t;){const n=window.getComputedStyle(t);if(/(auto|scroll|overlay)/.test(n.overflowY)&&t.scrollHeight>t.clientHeight)return t;if(e&&t===e)break;t=t.parentElement}return null}function P(s,e,t){if(!s||!J(e)||!s.contains(e))return!1;const n=F(e,s)??F(s,s);return n?t<0?n.scrollTop>0:t>0?n.scrollTop+n.clientHeight<n.scrollHeight:!0:!1}function O(s,e){const t=p.useRef(null);p.useEffect(()=>{if(typeof document>"u"||!s)return;const n=r=>{P(e.current,r.target,r.deltaY)||r.preventDefault()},a=r=>{var m;t.current=((m=r.touches[0])==null?void 0:m.clientY)??null},u=r=>{var f;const m=(f=r.touches[0])==null?void 0:f.clientY,d=t.current;if(m==null||d==null){r.preventDefault();return}const l=d-m;P(e.current,r.target,l)||r.preventDefault()},i=r=>{if(!G.has(r.key))return;const m=r.key==="ArrowUp"||r.key==="PageUp"||r.key==="Home"?-1:1;P(e.current,document.activeElement,m)||r.preventDefault()};return document.addEventListener("wheel",n,{passive:!1,capture:!0}),document.addEventListener("touchstart",a,{passive:!0,capture:!0}),document.addEventListener("touchmove",u,{passive:!1,capture:!0}),document.addEventListener("keydown",i,{capture:!0}),()=>{document.removeEventListener("wheel",n,{capture:!0}),document.removeEventListener("touchstart",a,{capture:!0}),document.removeEventListener("touchmove",u,{capture:!0}),document.removeEventListener("keydown",i,{capture:!0})}},[s,e])}const V={sm:"w-full max-w-[344px]",md:"w-full max-w-[500px]",lg:"w-full max-w-[640px]",fit:"w-fit max-w-fit"},z=({title:s="알림",description:e,confirmText:t="확인",onConfirm:n,size:a="sm",onClose:u,theme:i="primary",children:r,forceMount:m,open:d=!0})=>{const l=v.useRef(null);return O(!0,l),o.jsxs(c.Dialog,{modal:!1,open:r?void 0:d,onOpenChange:f=>{!f&&u&&u()},children:[r&&o.jsx(c.DialogTrigger,{asChild:!0,children:r}),o.jsx("div",{"aria-hidden":"true","data-state":d?"open":"closed",className:g.cn("bt-ds-portal-backdrop fixed inset-0 z-50 bg-black/60 transition-opacity duration-200 data-[state=closed]:pointer-events-none data-[state=closed]:opacity-0")}),o.jsxs(c.DialogContent,{ref:l,forceMount:m,onInteractOutside:f=>f.preventDefault(),className:g.cn("z-[60] gap-4 rounded-lg p-4",V[a]),children:[o.jsxs(c.DialogHeader,{className:"space-y-2 text-left md:text-left",children:[o.jsx(c.DialogTitle,{className:"whitespace-pre-wrap px-0 text-base font-semibold md:px-0",children:s}),o.jsx(c.DialogDescription,{className:"w-full whitespace-pre-wrap px-0 text-sm text-grey-600 md:px-0",children:e})]}),o.jsx(c.DialogClose,{asChild:!0,children:o.jsx(C.Button,{theme:i,size:"sm",className:g.cn("w-full font-normal"),onClick:()=>{n&&n()},children:t})})]})]})},X={sm:"w-full max-w-[324px]",md:"w-full max-w-[324px] md:max-w-[600px]",lg:"w-full max-w-[324px] md:max-w-[600px] lg:max-w-[800px]",xl:"w-full max-w-[324px] md:max-w-[600px] lg:max-w-[900px] xl:max-w-[1100px]",max:"w-full max-w-[324px] md:max-w-[600px] lg:max-w-[1000px] xl:max-w-[1280px]",fit:"w-fit min-w-[324px]",full:"w-screen h-screen max-w-none max-h-none",auto:"w-full max-w-[324px] md:max-w-[600px] lg:max-w-[80vw] xl:max-w-[90vw]"},S=p.forwardRef(({id:s,title:e,description:t,onClose:n,content:a,className:u,open:i=!0,onOpenChange:r,footer:m,children:d,forceMount:l,size:f="md",...h},w)=>o.jsxs(c.Dialog,{modal:!1,open:d?void 0:i,onOpenChange:j=>{!j&&n&&n()},children:[d&&o.jsx(c.DialogTrigger,{asChild:!0,children:d}),o.jsx("div",{"aria-hidden":"true","data-state":i?"open":"closed",className:g.cn("bt-ds-portal-backdrop fixed inset-0 z-50 bg-black/50 transition-opacity duration-200 data-[state=closed]:pointer-events-none data-[state=closed]:opacity-0")}),o.jsxs(c.DialogContent,{ref:w,forceMount:l,className:g.cn("z-[60] flex flex-col gap-4 overflow-hidden rounded-lg px-0 py-0 pb-3 md:rounded-xl md:pb-4",X[f],u),...h,children:[o.jsxs(c.DialogHeader,{className:"sticky left-0 right-0 top-0 z-50 border-b border-b-border bg-white",children:[o.jsx(c.DialogTitle,{className:"flex w-full items-center justify-start whitespace-pre-wrap p-3 md:justify-center md:p-4",children:e}),!l&&o.jsxs(c.DialogClose,{className:"absolute right-2 top-3 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground md:right-3 md:top-4",children:[o.jsx(M.Icon.Cancel,{size:"14"}),o.jsx("span",{className:"sr-only",children:"Close"})]})]}),t&&o.jsx(c.DialogDescription,{className:"text-sm text-grey-600",children:t}),a&&o.jsx(c.DialogDescription,{children:a}),m&&o.jsx(c.DialogFooter,{children:m})]})]}));S.displayName="DialogForm";const E=p.forwardRef(({open:s=!0,onClose:e,className:t,contents:n,children:a,...u},i)=>o.jsxs(c.Dialog,{modal:!1,open:a?void 0:s,onOpenChange:r=>{!r&&e&&e()},children:[a&&o.jsx(c.DialogTrigger,{asChild:!0,children:a}),o.jsx("div",{"aria-hidden":"true","data-state":s?"open":"closed",className:g.cn("bt-ds-portal-backdrop fixed inset-0 z-50 bg-black/50 transition-opacity duration-200 data-[state=closed]:pointer-events-none data-[state=closed]:opacity-0")}),o.jsx(c.DialogContent,{ref:i,className:g.cn("z-[60] flex flex-col gap-0 px-0 py-0",t),...u,children:n&&o.jsx(o.Fragment,{children:n})})]}));E.displayName="FreeForm";const Z={sm:"w-full max-w-[344px]",md:"w-full max-w-[500px]",lg:"w-full max-w-[640px]",fit:"w-fit max-w-fit"},N=v.forwardRef(({title:s,description:e,subDescription:t,contents:n,onConfirm:a,confirmText:u="확인",onCancel:i,cancelText:r="취소",size:m="sm",className:d,onClose:l,theme:f="primary",children:h,forceMount:w,open:j=!0,...A},D)=>{const k=v.useRef(null);O(!0,k);const R=y=>{k.current=y,typeof D=="function"?D(y):D&&(D.current=y)};return o.jsxs(c.Dialog,{modal:!1,open:h?void 0:j,onOpenChange:y=>{!y&&l&&l()},children:[h&&o.jsx(c.DialogTrigger,{asChild:!0,children:h}),o.jsx("div",{"aria-hidden":"true","data-state":j?"open":"closed",className:g.cn("bt-ds-portal-backdrop fixed inset-0 z-50 bg-black/60 transition-opacity duration-200 data-[state=closed]:pointer-events-none data-[state=closed]:opacity-0")}),o.jsxs(c.DialogContent,{ref:R,forceMount:w,onInteractOutside:y=>y.preventDefault(),className:g.cn("z-[60] gap-2 rounded-lg p-4",Z[m],d),...A,children:[o.jsxs(c.DialogHeader,{className:"space-y-2 text-left md:text-left",children:[o.jsxs("div",{className:"flex items-start justify-between gap-2",children:[o.jsx(c.DialogTitle,{className:"px-0 text-base font-semibold leading-6 md:px-0",children:s}),!w&&o.jsx(c.DialogClose,{asChild:!0,children:o.jsx("button",{type:"button",className:"mt-0 h-auto w-auto border-none p-0",children:o.jsx(M.Icon.Cancel,{size:"14",fill:Y.colors.grey[600]})})})]}),e&&o.jsx(c.DialogDescription,{className:"w-full px-0 text-start text-sm text-grey-800 md:px-0",children:e}),t&&o.jsx(c.DialogDescription,{className:"w-full px-0 text-start text-xs text-grey-600",children:t})]}),n&&o.jsx(o.Fragment,{children:n}),o.jsxs(c.DialogFooter,{className:"flex w-full flex-col gap-1 border-t-0 px-0 md:flex-row md:items-center md:justify-between md:gap-2 md:px-0",children:[o.jsx(c.DialogClose,{asChild:!0,children:o.jsx(C.Button,{variant:"outline",theme:"secondary",size:"sm",onClick:()=>{i&&i()},className:"w-full md:w-1/2",children:r})}),o.jsx(c.DialogClose,{asChild:!0,children:o.jsx(C.Button,{theme:f,size:"sm",onClick:()=>{a&&a()},className:"w-full md:w-1/2",children:u})})]})]})]})});N.displayName="ModalForm";const T=s=>"forceMount"in s&&s.forceMount===!0,ee={modal:(s,e)=>o.jsx(N,{...s.props,open:s.isOpen,onClose:e},s.id),alert:(s,e)=>o.jsx(z,{...s.props,open:s.isOpen,onClose:e},s.id),dialog:(s,e)=>o.jsx(S,{...s.props,open:s.isOpen,onClose:e},s.id),custom:(s,e)=>o.jsx(E,{...s.props,open:s.isOpen,onClose:e},s.id)},te=()=>{const[s,e]=p.useState([]),t=p.useRef(new Map),n=300,a=p.useRef(new Map);p.useEffect(()=>{const i=x.subscribe((r,m)=>{e(d=>{const l=d.findIndex(f=>f.id===r.id);if(m)if(l===-1){const f=[...d,{...r,isOpen:!0}];a.current.set(r.id,Date.now());const h=t.current.get(r.id);return h&&(clearTimeout(h),t.current.delete(r.id)),f}else{const f=d.slice();f[l]={...f[l],...r,isOpen:!0},a.current.set(r.id,Date.now());const h=t.current.get(r.id);return h&&(clearTimeout(h),t.current.delete(r.id)),f}else{if(l===-1)return d;const f=r._forceClose===!0;if(T(d[l].props)&&!f)return d;const h=a.current.get(r.id);if(h&&Date.now()-h<n)return d;const w=d.slice();return w[l]={...w[l],isOpen:!1},w}})});return()=>i()},[]);const u=p.useCallback(i=>{const r=s.find(m=>m.id===i);r&&T(r.props)||x.setPortalOpen(i,!1)},[s]);return p.useEffect(()=>{const i=t.current;s.forEach(r=>{if(!r.isOpen&&!i.has(r.id)){const m=setTimeout(()=>{e(d=>d.filter(l=>l.id!==r.id)),i.delete(r.id)},300);i.set(r.id,m)}})},[s]),p.useEffect(()=>{const i=t.current;return()=>{i.forEach(r=>clearTimeout(r)),i.clear()}},[]),o.jsx(se,{children:s.map(i=>{const r=ee[i.type];return r(i,()=>u(i.id))})})},se=({children:s})=>{const[e,t]=p.useState(null);return p.useEffect(()=>{if(typeof document>"u")return;let n=document.getElementById("portal");n||(n=document.createElement("div"),n.id="portal",document.body.appendChild(n)),t(n)},[]),e?L.createPortal(s,e):null};exports.AlertForm=z;exports.DialogForm=S;exports.FreeForm=E;exports.ModalForm=N;exports.PortalProvider=te;exports.portalManager=x;exports.usePortal=W;exports.usePortalBodyScrollLock=O;
|