@ensolid/radix 0.0.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/dist/components/Accordion/Accordion.d.ts +79 -0
- package/dist/components/Accordion/Accordion.d.ts.map +1 -0
- package/dist/components/Accordion/Accordion.js +193 -0
- package/dist/components/Accordion/Accordion.js.map +1 -0
- package/dist/components/Accordion/index.d.ts +2 -0
- package/dist/components/Accordion/index.d.ts.map +1 -0
- package/dist/components/AlertDialog/AlertDialog.d.ts +89 -0
- package/dist/components/AlertDialog/AlertDialog.d.ts.map +1 -0
- package/dist/components/AlertDialog/AlertDialog.js +235 -0
- package/dist/components/AlertDialog/AlertDialog.js.map +1 -0
- package/dist/components/AlertDialog/index.d.ts +2 -0
- package/dist/components/AlertDialog/index.d.ts.map +1 -0
- package/dist/components/AspectRatio/AspectRatio.d.ts +14 -0
- package/dist/components/AspectRatio/AspectRatio.d.ts.map +1 -0
- package/dist/components/AspectRatio/AspectRatio.js +25 -0
- package/dist/components/AspectRatio/AspectRatio.js.map +1 -0
- package/dist/components/AspectRatio/index.d.ts +2 -0
- package/dist/components/AspectRatio/index.d.ts.map +1 -0
- package/dist/components/Avatar/Avatar.d.ts +41 -0
- package/dist/components/Avatar/Avatar.d.ts.map +1 -0
- package/dist/components/Avatar/Avatar.js +144 -0
- package/dist/components/Avatar/Avatar.js.map +1 -0
- package/dist/components/Avatar/index.d.ts +2 -0
- package/dist/components/Avatar/index.d.ts.map +1 -0
- package/dist/components/Checkbox/Checkbox.d.ts +27 -0
- package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
- package/dist/components/Checkbox/Checkbox.js +49 -0
- package/dist/components/Checkbox/Checkbox.js.map +1 -0
- package/dist/components/Checkbox/index.d.ts +2 -0
- package/dist/components/Checkbox/index.d.ts.map +1 -0
- package/dist/components/Collapsible/Collapsible.d.ts +54 -0
- package/dist/components/Collapsible/Collapsible.d.ts.map +1 -0
- package/dist/components/Collapsible/Collapsible.js +110 -0
- package/dist/components/Collapsible/Collapsible.js.map +1 -0
- package/dist/components/Collapsible/index.d.ts +2 -0
- package/dist/components/Collapsible/index.d.ts.map +1 -0
- package/dist/components/ContextMenu/ContextMenu.d.ts +89 -0
- package/dist/components/ContextMenu/ContextMenu.d.ts.map +1 -0
- package/dist/components/ContextMenu/ContextMenu.js +263 -0
- package/dist/components/ContextMenu/ContextMenu.js.map +1 -0
- package/dist/components/ContextMenu/index.d.ts +2 -0
- package/dist/components/ContextMenu/index.d.ts.map +1 -0
- package/dist/components/Dialog/Dialog.d.ts +87 -0
- package/dist/components/Dialog/Dialog.d.ts.map +1 -0
- package/dist/components/Dialog/Dialog.js +218 -0
- package/dist/components/Dialog/Dialog.js.map +1 -0
- package/dist/components/Dialog/index.d.ts +2 -0
- package/dist/components/Dialog/index.d.ts.map +1 -0
- package/dist/components/DropdownMenu/DropdownMenu.d.ts +81 -0
- package/dist/components/DropdownMenu/DropdownMenu.d.ts.map +1 -0
- package/dist/components/DropdownMenu/DropdownMenu.js +244 -0
- package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -0
- package/dist/components/DropdownMenu/index.d.ts +2 -0
- package/dist/components/DropdownMenu/index.d.ts.map +1 -0
- package/dist/components/HoverCard/HoverCard.d.ts +63 -0
- package/dist/components/HoverCard/HoverCard.d.ts.map +1 -0
- package/dist/components/HoverCard/HoverCard.js +199 -0
- package/dist/components/HoverCard/HoverCard.js.map +1 -0
- package/dist/components/HoverCard/index.d.ts +2 -0
- package/dist/components/HoverCard/index.d.ts.map +1 -0
- package/dist/components/Label/Label.d.ts +14 -0
- package/dist/components/Label/Label.d.ts.map +1 -0
- package/dist/components/Label/Label.js +23 -0
- package/dist/components/Label/Label.js.map +1 -0
- package/dist/components/Label/index.d.ts +2 -0
- package/dist/components/Label/index.d.ts.map +1 -0
- package/dist/components/Menubar/Menubar.d.ts +85 -0
- package/dist/components/Menubar/Menubar.d.ts.map +1 -0
- package/dist/components/Menubar/Menubar.js +299 -0
- package/dist/components/Menubar/Menubar.js.map +1 -0
- package/dist/components/Menubar/index.d.ts +2 -0
- package/dist/components/Menubar/index.d.ts.map +1 -0
- package/dist/components/NavigationMenu/NavigationMenu.d.ts +105 -0
- package/dist/components/NavigationMenu/NavigationMenu.d.ts.map +1 -0
- package/dist/components/NavigationMenu/NavigationMenu.js +320 -0
- package/dist/components/NavigationMenu/NavigationMenu.js.map +1 -0
- package/dist/components/NavigationMenu/index.d.ts +2 -0
- package/dist/components/NavigationMenu/index.d.ts.map +1 -0
- package/dist/components/Popover/Popover.d.ts +52 -0
- package/dist/components/Popover/Popover.d.ts.map +1 -0
- package/dist/components/Popover/Popover.js +176 -0
- package/dist/components/Popover/Popover.js.map +1 -0
- package/dist/components/Popover/index.d.ts +2 -0
- package/dist/components/Popover/index.d.ts.map +1 -0
- package/dist/components/Progress/Progress.d.ts +19 -0
- package/dist/components/Progress/Progress.d.ts.map +1 -0
- package/dist/components/Progress/Progress.js +44 -0
- package/dist/components/Progress/Progress.js.map +1 -0
- package/dist/components/Progress/index.d.ts +2 -0
- package/dist/components/Progress/index.d.ts.map +1 -0
- package/dist/components/RadioGroup/RadioGroup.d.ts +54 -0
- package/dist/components/RadioGroup/RadioGroup.d.ts.map +1 -0
- package/dist/components/RadioGroup/RadioGroup.js +100 -0
- package/dist/components/RadioGroup/RadioGroup.js.map +1 -0
- package/dist/components/RadioGroup/index.d.ts +2 -0
- package/dist/components/RadioGroup/index.d.ts.map +1 -0
- package/dist/components/ScrollArea/ScrollArea.d.ts +58 -0
- package/dist/components/ScrollArea/ScrollArea.d.ts.map +1 -0
- package/dist/components/ScrollArea/ScrollArea.js +91 -0
- package/dist/components/ScrollArea/ScrollArea.js.map +1 -0
- package/dist/components/ScrollArea/index.d.ts +2 -0
- package/dist/components/ScrollArea/index.d.ts.map +1 -0
- package/dist/components/Select/Select.d.ts +80 -0
- package/dist/components/Select/Select.d.ts.map +1 -0
- package/dist/components/Select/Select.js +240 -0
- package/dist/components/Select/Select.js.map +1 -0
- package/dist/components/Select/index.d.ts +2 -0
- package/dist/components/Select/index.d.ts.map +1 -0
- package/dist/components/Separator/Separator.d.ts +15 -0
- package/dist/components/Separator/Separator.d.ts.map +1 -0
- package/dist/components/Separator/Separator.js +30 -0
- package/dist/components/Separator/Separator.js.map +1 -0
- package/dist/components/Separator/index.d.ts +2 -0
- package/dist/components/Separator/index.d.ts.map +1 -0
- package/dist/components/Slider/Slider.d.ts +37 -0
- package/dist/components/Slider/Slider.d.ts.map +1 -0
- package/dist/components/Slider/Slider.js +63 -0
- package/dist/components/Slider/Slider.js.map +1 -0
- package/dist/components/Slider/index.d.ts +2 -0
- package/dist/components/Slider/index.d.ts.map +1 -0
- package/dist/components/Switch/Switch.d.ts +27 -0
- package/dist/components/Switch/Switch.d.ts.map +1 -0
- package/dist/components/Switch/Switch.js +50 -0
- package/dist/components/Switch/Switch.js.map +1 -0
- package/dist/components/Switch/index.d.ts +2 -0
- package/dist/components/Switch/index.d.ts.map +1 -0
- package/dist/components/Tabs/Tabs.d.ts +72 -0
- package/dist/components/Tabs/Tabs.d.ts.map +1 -0
- package/dist/components/Tabs/Tabs.js +150 -0
- package/dist/components/Tabs/Tabs.js.map +1 -0
- package/dist/components/Tabs/index.d.ts +2 -0
- package/dist/components/Tabs/index.d.ts.map +1 -0
- package/dist/components/Toggle/Toggle.d.ts +22 -0
- package/dist/components/Toggle/Toggle.d.ts.map +1 -0
- package/dist/components/Toggle/Toggle.js +51 -0
- package/dist/components/Toggle/Toggle.js.map +1 -0
- package/dist/components/Toggle/index.d.ts +2 -0
- package/dist/components/Toggle/index.d.ts.map +1 -0
- package/dist/components/ToggleGroup/ToggleGroup.d.ts +67 -0
- package/dist/components/ToggleGroup/ToggleGroup.d.ts.map +1 -0
- package/dist/components/ToggleGroup/ToggleGroup.js +119 -0
- package/dist/components/ToggleGroup/ToggleGroup.js.map +1 -0
- package/dist/components/ToggleGroup/index.d.ts +2 -0
- package/dist/components/ToggleGroup/index.d.ts.map +1 -0
- package/dist/components/Toolbar/Toolbar.d.ts +82 -0
- package/dist/components/Toolbar/Toolbar.d.ts.map +1 -0
- package/dist/components/Toolbar/Toolbar.js +110 -0
- package/dist/components/Toolbar/Toolbar.js.map +1 -0
- package/dist/components/Toolbar/index.d.ts +2 -0
- package/dist/components/Toolbar/index.d.ts.map +1 -0
- package/dist/components/Tooltip/Tooltip.d.ts +56 -0
- package/dist/components/Tooltip/Tooltip.d.ts.map +1 -0
- package/dist/components/Tooltip/Tooltip.js +155 -0
- package/dist/components/Tooltip/Tooltip.js.map +1 -0
- package/dist/components/Tooltip/index.d.ts +2 -0
- package/dist/components/Tooltip/index.d.ts.map +1 -0
- package/dist/components/VisuallyHidden/VisuallyHidden.d.ts +9 -0
- package/dist/components/VisuallyHidden/VisuallyHidden.d.ts.map +1 -0
- package/dist/components/VisuallyHidden/VisuallyHidden.js +23 -0
- package/dist/components/VisuallyHidden/VisuallyHidden.js.map +1 -0
- package/dist/components/VisuallyHidden/index.d.ts +2 -0
- package/dist/components/VisuallyHidden/index.d.ts.map +1 -0
- package/dist/components/index.d.ts +28 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +140 -0
- package/dist/index.js.map +1 -0
- package/package.json +97 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Component, JSX } from 'solid-js';
|
|
2
|
+
interface AccordionContextValue {
|
|
3
|
+
value: () => string | string[] | undefined;
|
|
4
|
+
setValue: (value: string) => void;
|
|
5
|
+
type: 'single' | 'multiple';
|
|
6
|
+
collapsible: boolean;
|
|
7
|
+
isItemOpen: (itemValue: string) => boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare const useAccordionContext: () => AccordionContextValue;
|
|
10
|
+
export declare const useAccordionItemContext: () => {
|
|
11
|
+
value: string;
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
};
|
|
14
|
+
export interface AccordionProps extends JSX.HTMLAttributes<HTMLDivElement> {
|
|
15
|
+
/**
|
|
16
|
+
* 当前打开的值(单个或数组)
|
|
17
|
+
*/
|
|
18
|
+
value?: string | string[];
|
|
19
|
+
/**
|
|
20
|
+
* 默认打开的值
|
|
21
|
+
*/
|
|
22
|
+
defaultValue?: string | string[];
|
|
23
|
+
/**
|
|
24
|
+
* 值变化回调
|
|
25
|
+
*/
|
|
26
|
+
onValueChange?: (value: string | string[]) => void;
|
|
27
|
+
/**
|
|
28
|
+
* 类型:单个或多个
|
|
29
|
+
* @default 'single'
|
|
30
|
+
*/
|
|
31
|
+
type?: 'single' | 'multiple';
|
|
32
|
+
/**
|
|
33
|
+
* 是否可折叠(仅 single 类型)
|
|
34
|
+
* @default false
|
|
35
|
+
*/
|
|
36
|
+
collapsible?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* 子元素
|
|
39
|
+
*/
|
|
40
|
+
children?: JSX.Element;
|
|
41
|
+
}
|
|
42
|
+
export interface AccordionComponent extends Component<AccordionProps> {
|
|
43
|
+
Item: Component<AccordionItemProps>;
|
|
44
|
+
Trigger: Component<AccordionTriggerProps>;
|
|
45
|
+
Content: Component<AccordionContentProps>;
|
|
46
|
+
}
|
|
47
|
+
export declare const Accordion: AccordionComponent;
|
|
48
|
+
export interface AccordionItemProps extends JSX.HTMLAttributes<HTMLDivElement> {
|
|
49
|
+
/**
|
|
50
|
+
* 项的值
|
|
51
|
+
*/
|
|
52
|
+
value: string;
|
|
53
|
+
/**
|
|
54
|
+
* 是否禁用
|
|
55
|
+
* @default false
|
|
56
|
+
*/
|
|
57
|
+
disabled?: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* 子元素
|
|
60
|
+
*/
|
|
61
|
+
children?: JSX.Element;
|
|
62
|
+
}
|
|
63
|
+
export declare const AccordionItem: Component<AccordionItemProps>;
|
|
64
|
+
export interface AccordionTriggerProps extends JSX.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
65
|
+
/**
|
|
66
|
+
* 子元素
|
|
67
|
+
*/
|
|
68
|
+
children?: JSX.Element;
|
|
69
|
+
}
|
|
70
|
+
export declare const AccordionTrigger: Component<AccordionTriggerProps>;
|
|
71
|
+
export interface AccordionContentProps extends JSX.HTMLAttributes<HTMLDivElement> {
|
|
72
|
+
/**
|
|
73
|
+
* 子元素
|
|
74
|
+
*/
|
|
75
|
+
children?: JSX.Element;
|
|
76
|
+
}
|
|
77
|
+
export declare const AccordionContent: Component<AccordionContentProps>;
|
|
78
|
+
export {};
|
|
79
|
+
//# sourceMappingURL=Accordion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Accordion.d.ts","sourceRoot":"","sources":["../../../src/components/Accordion/Accordion.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/C,UAAU,qBAAqB;IAC7B,KAAK,EAAE,MAAM,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;IAC3C,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;CAC5C;AAKD,eAAO,MAAM,mBAAmB,6BAM/B,CAAC;AAEF,eAAO,MAAM,uBAAuB;WAVgB,MAAM;eAAa,OAAO;CAgB7E,CAAC;AAEF,MAAM,WAAW,cAAe,SAAQ,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC;IACxE;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjC;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC;IACnD;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC7B;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CACxB;AA8ED,MAAM,WAAW,kBAAmB,SAAQ,SAAS,CAAC,cAAc,CAAC;IACnE,IAAI,EAAE,SAAS,CAAC,kBAAkB,CAAC,CAAC;IACpC,OAAO,EAAE,SAAS,CAAC,qBAAqB,CAAC,CAAC;IAC1C,OAAO,EAAE,SAAS,CAAC,qBAAqB,CAAC,CAAC;CAC3C;AAED,eAAO,MAAM,SAAS,EAIhB,kBAAkB,CAAC;AAEzB,MAAM,WAAW,kBAAmB,SAAQ,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC;IAC5E;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,aAAa,EAAE,SAAS,CAAC,kBAAkB,CAuBvD,CAAC;AAEF,MAAM,WAAW,qBAAsB,SAAQ,GAAG,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;IACxF;;OAEG;IACH,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,gBAAgB,EAAE,SAAS,CAAC,qBAAqB,CA+B7D,CAAC;AAEF,MAAM,WAAW,qBAAsB,SAAQ,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC;IAC/E;;OAEG;IACH,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,gBAAgB,EAAE,SAAS,CAAC,qBAAqB,CAkB7D,CAAC"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { delegateEvents, createComponent, template, spread, mergeProps, insert, memo } from "solid-js/web";
|
|
2
|
+
import { createContext, splitProps, createSignal, useContext } from "solid-js";
|
|
3
|
+
var _tmpl$ = /* @__PURE__ */ template(`<div>`), _tmpl$2 = /* @__PURE__ */ template(`<button type=button>`);
|
|
4
|
+
const AccordionContext = createContext();
|
|
5
|
+
const AccordionItemContext = createContext();
|
|
6
|
+
const useAccordionContext = () => {
|
|
7
|
+
const context = useContext(AccordionContext);
|
|
8
|
+
if (!context) {
|
|
9
|
+
throw new Error("Accordion components must be used within Accordion");
|
|
10
|
+
}
|
|
11
|
+
return context;
|
|
12
|
+
};
|
|
13
|
+
const useAccordionItemContext = () => {
|
|
14
|
+
const context = useContext(AccordionItemContext);
|
|
15
|
+
if (!context) {
|
|
16
|
+
throw new Error("Accordion.Trigger and Accordion.Content must be used within Accordion.Item");
|
|
17
|
+
}
|
|
18
|
+
return context;
|
|
19
|
+
};
|
|
20
|
+
const AccordionBase = (props) => {
|
|
21
|
+
const [local, others] = splitProps(props, ["value", "defaultValue", "onValueChange", "type", "collapsible", "class", "children"]);
|
|
22
|
+
const type = () => local.type ?? "single";
|
|
23
|
+
const collapsible = () => local.collapsible ?? false;
|
|
24
|
+
const [internalValue, setInternalValue] = createSignal(local.value ?? local.defaultValue);
|
|
25
|
+
const isControlled = () => local.value !== void 0;
|
|
26
|
+
const value = () => isControlled() ? local.value : internalValue();
|
|
27
|
+
const handleValueChange = (itemValue) => {
|
|
28
|
+
const currentValue = value();
|
|
29
|
+
let newValue;
|
|
30
|
+
if (type() === "single") {
|
|
31
|
+
if (collapsible() && currentValue === itemValue) {
|
|
32
|
+
newValue = "";
|
|
33
|
+
} else {
|
|
34
|
+
newValue = itemValue;
|
|
35
|
+
}
|
|
36
|
+
} else {
|
|
37
|
+
const currentArray = Array.isArray(currentValue) ? currentValue : currentValue ? [currentValue] : [];
|
|
38
|
+
const index = currentArray.indexOf(itemValue);
|
|
39
|
+
if (index > -1) {
|
|
40
|
+
newValue = currentArray.filter((v) => v !== itemValue);
|
|
41
|
+
} else {
|
|
42
|
+
newValue = [...currentArray, itemValue];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (!isControlled()) {
|
|
46
|
+
setInternalValue(newValue);
|
|
47
|
+
}
|
|
48
|
+
local.onValueChange?.(newValue);
|
|
49
|
+
};
|
|
50
|
+
const isItemOpen = (itemValue) => {
|
|
51
|
+
const currentValue = value();
|
|
52
|
+
if (type() === "single") {
|
|
53
|
+
return currentValue === itemValue;
|
|
54
|
+
} else {
|
|
55
|
+
const currentArray = Array.isArray(currentValue) ? currentValue : [];
|
|
56
|
+
return currentArray.includes(itemValue);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
const contextValue = {
|
|
60
|
+
value,
|
|
61
|
+
setValue: handleValueChange,
|
|
62
|
+
type: type(),
|
|
63
|
+
collapsible: collapsible(),
|
|
64
|
+
isItemOpen
|
|
65
|
+
};
|
|
66
|
+
return createComponent(AccordionContext.Provider, {
|
|
67
|
+
value: contextValue,
|
|
68
|
+
get children() {
|
|
69
|
+
var _el$ = _tmpl$();
|
|
70
|
+
spread(_el$, mergeProps({
|
|
71
|
+
get ["class"]() {
|
|
72
|
+
return local.class;
|
|
73
|
+
}
|
|
74
|
+
}, others), false, true);
|
|
75
|
+
insert(_el$, () => local.children);
|
|
76
|
+
return _el$;
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
const Accordion = Object.assign(AccordionBase, {
|
|
81
|
+
Item: null,
|
|
82
|
+
Trigger: null,
|
|
83
|
+
Content: null
|
|
84
|
+
});
|
|
85
|
+
const AccordionItem = (props) => {
|
|
86
|
+
const [local, others] = splitProps(props, ["value", "disabled", "children", "class"]);
|
|
87
|
+
const context = useAccordionContext();
|
|
88
|
+
const isOpen = () => context.isItemOpen(local.value);
|
|
89
|
+
const itemContext = {
|
|
90
|
+
value: local.value,
|
|
91
|
+
disabled: local.disabled
|
|
92
|
+
};
|
|
93
|
+
return createComponent(AccordionItemContext.Provider, {
|
|
94
|
+
value: itemContext,
|
|
95
|
+
get children() {
|
|
96
|
+
var _el$2 = _tmpl$();
|
|
97
|
+
spread(_el$2, mergeProps({
|
|
98
|
+
get ["class"]() {
|
|
99
|
+
return local.class;
|
|
100
|
+
},
|
|
101
|
+
get ["data-state"]() {
|
|
102
|
+
return isOpen() ? "open" : "closed";
|
|
103
|
+
},
|
|
104
|
+
get ["data-disabled"]() {
|
|
105
|
+
return local.disabled ? "" : void 0;
|
|
106
|
+
}
|
|
107
|
+
}, others), false, true);
|
|
108
|
+
insert(_el$2, () => local.children);
|
|
109
|
+
return _el$2;
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
};
|
|
113
|
+
const AccordionTrigger = (props) => {
|
|
114
|
+
const [local, others] = splitProps(props, ["children", "class", "onClick"]);
|
|
115
|
+
const context = useAccordionContext();
|
|
116
|
+
const itemContext = useAccordionItemContext();
|
|
117
|
+
const isOpen = () => context.isItemOpen(itemContext.value);
|
|
118
|
+
const handleClick = (e) => {
|
|
119
|
+
if (typeof local.onClick === "function") {
|
|
120
|
+
local.onClick(e);
|
|
121
|
+
}
|
|
122
|
+
if (!itemContext.disabled) {
|
|
123
|
+
context.setValue(itemContext.value);
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
return (() => {
|
|
127
|
+
var _el$3 = _tmpl$2();
|
|
128
|
+
_el$3.$$click = handleClick;
|
|
129
|
+
spread(_el$3, mergeProps({
|
|
130
|
+
get ["class"]() {
|
|
131
|
+
return local.class;
|
|
132
|
+
},
|
|
133
|
+
get disabled() {
|
|
134
|
+
return itemContext.disabled;
|
|
135
|
+
},
|
|
136
|
+
get ["aria-expanded"]() {
|
|
137
|
+
return isOpen();
|
|
138
|
+
},
|
|
139
|
+
get ["aria-controls"]() {
|
|
140
|
+
return `accordion-content-${itemContext.value}`;
|
|
141
|
+
},
|
|
142
|
+
get ["data-state"]() {
|
|
143
|
+
return isOpen() ? "open" : "closed";
|
|
144
|
+
},
|
|
145
|
+
get ["data-disabled"]() {
|
|
146
|
+
return itemContext.disabled ? "" : void 0;
|
|
147
|
+
}
|
|
148
|
+
}, others), false, true);
|
|
149
|
+
insert(_el$3, () => local.children);
|
|
150
|
+
return _el$3;
|
|
151
|
+
})();
|
|
152
|
+
};
|
|
153
|
+
const AccordionContent = (props) => {
|
|
154
|
+
const [local, others] = splitProps(props, ["children", "class"]);
|
|
155
|
+
const context = useAccordionContext();
|
|
156
|
+
const itemContext = useAccordionItemContext();
|
|
157
|
+
const isOpen = () => context.isItemOpen(itemContext.value);
|
|
158
|
+
return (() => {
|
|
159
|
+
var _el$4 = _tmpl$();
|
|
160
|
+
spread(_el$4, mergeProps({
|
|
161
|
+
get id() {
|
|
162
|
+
return `accordion-content-${itemContext.value}`;
|
|
163
|
+
},
|
|
164
|
+
get ["class"]() {
|
|
165
|
+
return local.class;
|
|
166
|
+
},
|
|
167
|
+
get hidden() {
|
|
168
|
+
return !isOpen();
|
|
169
|
+
},
|
|
170
|
+
get ["data-state"]() {
|
|
171
|
+
return isOpen() ? "open" : "closed";
|
|
172
|
+
}
|
|
173
|
+
}, others), false, true);
|
|
174
|
+
insert(_el$4, (() => {
|
|
175
|
+
var _c$ = memo(() => !!isOpen());
|
|
176
|
+
return () => _c$() && local.children;
|
|
177
|
+
})());
|
|
178
|
+
return _el$4;
|
|
179
|
+
})();
|
|
180
|
+
};
|
|
181
|
+
Accordion.Item = AccordionItem;
|
|
182
|
+
Accordion.Trigger = AccordionTrigger;
|
|
183
|
+
Accordion.Content = AccordionContent;
|
|
184
|
+
delegateEvents(["click"]);
|
|
185
|
+
export {
|
|
186
|
+
Accordion,
|
|
187
|
+
AccordionContent,
|
|
188
|
+
AccordionItem,
|
|
189
|
+
AccordionTrigger,
|
|
190
|
+
useAccordionContext,
|
|
191
|
+
useAccordionItemContext
|
|
192
|
+
};
|
|
193
|
+
//# sourceMappingURL=Accordion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Accordion.js","sources":["../../../src/components/Accordion/Accordion.tsx"],"sourcesContent":["import { splitProps, createSignal, createContext, useContext } from 'solid-js';\nimport type { Component, JSX } from 'solid-js';\n\ninterface AccordionContextValue {\n value: () => string | string[] | undefined;\n setValue: (value: string) => void;\n type: 'single' | 'multiple';\n collapsible: boolean;\n isItemOpen: (itemValue: string) => boolean;\n}\n\nconst AccordionContext = createContext<AccordionContextValue>();\nconst AccordionItemContext = createContext<{ value: string; disabled?: boolean }>();\n\nexport const useAccordionContext = () => {\n const context = useContext(AccordionContext);\n if (!context) {\n throw new Error('Accordion components must be used within Accordion');\n }\n return context;\n};\n\nexport const useAccordionItemContext = () => {\n const context = useContext(AccordionItemContext);\n if (!context) {\n throw new Error('Accordion.Trigger and Accordion.Content must be used within Accordion.Item');\n }\n return context;\n};\n\nexport interface AccordionProps extends JSX.HTMLAttributes<HTMLDivElement> {\n /**\n * 当前打开的值(单个或数组)\n */\n value?: string | string[];\n /**\n * 默认打开的值\n */\n defaultValue?: string | string[];\n /**\n * 值变化回调\n */\n onValueChange?: (value: string | string[]) => void;\n /**\n * 类型:单个或多个\n * @default 'single'\n */\n type?: 'single' | 'multiple';\n /**\n * 是否可折叠(仅 single 类型)\n * @default false\n */\n collapsible?: boolean;\n /**\n * 子元素\n */\n children?: JSX.Element;\n}\n\nconst AccordionBase: Component<AccordionProps> = (props) => {\n const [local, others] = splitProps(props, [\n 'value',\n 'defaultValue',\n 'onValueChange',\n 'type',\n 'collapsible',\n 'class',\n 'children',\n ]);\n\n const type = () => local.type ?? 'single';\n const collapsible = () => local.collapsible ?? false;\n\n const [internalValue, setInternalValue] = createSignal<string | string[] | undefined>(\n local.value ?? local.defaultValue\n );\n\n const isControlled = () => local.value !== undefined;\n const value = () => (isControlled() ? local.value : internalValue());\n\n const handleValueChange = (itemValue: string) => {\n const currentValue = value();\n let newValue: string | string[];\n\n if (type() === 'single') {\n // 单个模式:如果点击的是已打开的项且可折叠,则关闭;否则打开该项\n if (collapsible() && currentValue === itemValue) {\n newValue = '';\n } else {\n newValue = itemValue;\n }\n } else {\n // 多个模式:切换该项的打开状态\n const currentArray = Array.isArray(currentValue) ? currentValue : currentValue ? [currentValue] : [];\n const index = currentArray.indexOf(itemValue);\n if (index > -1) {\n newValue = currentArray.filter((v) => v !== itemValue);\n } else {\n newValue = [...currentArray, itemValue];\n }\n }\n\n if (!isControlled()) {\n setInternalValue(newValue);\n }\n local.onValueChange?.(newValue);\n };\n\n const isItemOpen = (itemValue: string) => {\n const currentValue = value();\n if (type() === 'single') {\n return currentValue === itemValue;\n } else {\n const currentArray = Array.isArray(currentValue) ? currentValue : [];\n return currentArray.includes(itemValue);\n }\n };\n\n const contextValue: AccordionContextValue = {\n value,\n setValue: handleValueChange,\n type: type(),\n collapsible: collapsible(),\n isItemOpen,\n };\n\n return (\n <AccordionContext.Provider value={contextValue}>\n <div class={local.class} {...others}>\n {local.children}\n </div>\n </AccordionContext.Provider>\n );\n};\n\nexport interface AccordionComponent extends Component<AccordionProps> {\n Item: Component<AccordionItemProps>;\n Trigger: Component<AccordionTriggerProps>;\n Content: Component<AccordionContentProps>;\n}\n\nexport const Accordion = Object.assign(AccordionBase, {\n Item: null as unknown as Component<AccordionItemProps>,\n Trigger: null as unknown as Component<AccordionTriggerProps>,\n Content: null as unknown as Component<AccordionContentProps>,\n}) as AccordionComponent;\n\nexport interface AccordionItemProps extends JSX.HTMLAttributes<HTMLDivElement> {\n /**\n * 项的值\n */\n value: string;\n /**\n * 是否禁用\n * @default false\n */\n disabled?: boolean;\n /**\n * 子元素\n */\n children?: JSX.Element;\n}\n\nexport const AccordionItem: Component<AccordionItemProps> = (props) => {\n const [local, others] = splitProps(props, ['value', 'disabled', 'children', 'class']);\n const context = useAccordionContext();\n\n const isOpen = () => context.isItemOpen(local.value);\n\n const itemContext = {\n value: local.value,\n disabled: local.disabled,\n };\n\n return (\n <AccordionItemContext.Provider value={itemContext}>\n <div\n class={local.class}\n data-state={isOpen() ? 'open' : 'closed'}\n data-disabled={local.disabled ? '' : undefined}\n {...others}\n >\n {local.children}\n </div>\n </AccordionItemContext.Provider>\n );\n};\n\nexport interface AccordionTriggerProps extends JSX.ButtonHTMLAttributes<HTMLButtonElement> {\n /**\n * 子元素\n */\n children?: JSX.Element;\n}\n\nexport const AccordionTrigger: Component<AccordionTriggerProps> = (props) => {\n const [local, others] = splitProps(props, ['children', 'class', 'onClick']);\n const context = useAccordionContext();\n const itemContext = useAccordionItemContext();\n\n const isOpen = () => context.isItemOpen(itemContext.value);\n\n const handleClick: JSX.EventHandler<HTMLButtonElement, MouseEvent> = (e) => {\n if (typeof local.onClick === 'function') {\n local.onClick(e);\n }\n if (!itemContext.disabled) {\n context.setValue(itemContext.value);\n }\n };\n\n return (\n <button\n type=\"button\"\n class={local.class}\n onClick={handleClick}\n disabled={itemContext.disabled}\n aria-expanded={isOpen()}\n aria-controls={`accordion-content-${itemContext.value}`}\n data-state={isOpen() ? 'open' : 'closed'}\n data-disabled={itemContext.disabled ? '' : undefined}\n {...others}\n >\n {local.children}\n </button>\n );\n};\n\nexport interface AccordionContentProps extends JSX.HTMLAttributes<HTMLDivElement> {\n /**\n * 子元素\n */\n children?: JSX.Element;\n}\n\nexport const AccordionContent: Component<AccordionContentProps> = (props) => {\n const [local, others] = splitProps(props, ['children', 'class']);\n const context = useAccordionContext();\n const itemContext = useAccordionItemContext();\n\n const isOpen = () => context.isItemOpen(itemContext.value);\n\n return (\n <div\n id={`accordion-content-${itemContext.value}`}\n class={local.class}\n hidden={!isOpen()}\n data-state={isOpen() ? 'open' : 'closed'}\n {...others}\n >\n {isOpen() && local.children}\n </div>\n );\n};\n\nAccordion.Item = AccordionItem;\nAccordion.Trigger = AccordionTrigger;\nAccordion.Content = AccordionContent;\n\n"],"names":["AccordionContext","createContext","AccordionItemContext","useAccordionContext","context","useContext","Error","useAccordionItemContext","AccordionBase","props","local","others","splitProps","type","collapsible","internalValue","setInternalValue","createSignal","value","defaultValue","isControlled","undefined","handleValueChange","itemValue","currentValue","newValue","currentArray","Array","isArray","index","indexOf","filter","v","onValueChange","isItemOpen","includes","contextValue","setValue","_$createComponent","Provider","children","_el$","_tmpl$","_$spread","_$mergeProps","class","_$insert","Accordion","Object","assign","Item","Trigger","Content","AccordionItem","isOpen","itemContext","disabled","_el$2","AccordionTrigger","handleClick","e","onClick","_el$3","_tmpl$2","$$click","AccordionContent","_el$4","id","hidden","_c$","_$memo","_$delegateEvents"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Accordion/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { Component, JSX } from 'solid-js';
|
|
2
|
+
interface AlertDialogContextValue {
|
|
3
|
+
open: () => boolean;
|
|
4
|
+
setOpen: (open: boolean) => void;
|
|
5
|
+
}
|
|
6
|
+
export declare const useAlertDialogContext: () => AlertDialogContextValue;
|
|
7
|
+
export interface AlertDialogProps extends JSX.HTMLAttributes<HTMLDivElement> {
|
|
8
|
+
/**
|
|
9
|
+
* 是否打开
|
|
10
|
+
*/
|
|
11
|
+
open?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* 默认打开状态
|
|
14
|
+
*/
|
|
15
|
+
defaultOpen?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* 打开状态变化回调
|
|
18
|
+
*/
|
|
19
|
+
onOpenChange?: (open: boolean) => void;
|
|
20
|
+
/**
|
|
21
|
+
* 子元素
|
|
22
|
+
*/
|
|
23
|
+
children?: JSX.Element;
|
|
24
|
+
}
|
|
25
|
+
export interface AlertDialogComponent extends Component<AlertDialogProps> {
|
|
26
|
+
Trigger: Component<AlertDialogTriggerProps>;
|
|
27
|
+
Overlay: Component<AlertDialogOverlayProps>;
|
|
28
|
+
Content: Component<AlertDialogContentProps>;
|
|
29
|
+
Title: Component<AlertDialogTitleProps>;
|
|
30
|
+
Description: Component<AlertDialogDescriptionProps>;
|
|
31
|
+
Action: Component<AlertDialogActionProps>;
|
|
32
|
+
Cancel: Component<AlertDialogCancelProps>;
|
|
33
|
+
}
|
|
34
|
+
export declare const AlertDialog: AlertDialogComponent;
|
|
35
|
+
export interface AlertDialogTriggerProps extends JSX.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
36
|
+
/**
|
|
37
|
+
* 子元素
|
|
38
|
+
*/
|
|
39
|
+
children?: JSX.Element;
|
|
40
|
+
/**
|
|
41
|
+
* 是否作为子元素传递
|
|
42
|
+
*/
|
|
43
|
+
asChild?: boolean;
|
|
44
|
+
}
|
|
45
|
+
export declare const AlertDialogTrigger: Component<AlertDialogTriggerProps>;
|
|
46
|
+
export interface AlertDialogContentProps extends JSX.HTMLAttributes<HTMLDivElement> {
|
|
47
|
+
/**
|
|
48
|
+
* 子元素
|
|
49
|
+
*/
|
|
50
|
+
children?: JSX.Element;
|
|
51
|
+
}
|
|
52
|
+
export interface AlertDialogOverlayProps extends JSX.HTMLAttributes<HTMLDivElement> {
|
|
53
|
+
/**
|
|
54
|
+
* 子元素
|
|
55
|
+
*/
|
|
56
|
+
children?: JSX.Element;
|
|
57
|
+
}
|
|
58
|
+
export declare const AlertDialogOverlay: Component<AlertDialogOverlayProps>;
|
|
59
|
+
export declare const AlertDialogContent: Component<AlertDialogContentProps>;
|
|
60
|
+
export interface AlertDialogTitleProps extends JSX.HTMLAttributes<HTMLHeadingElement> {
|
|
61
|
+
/**
|
|
62
|
+
* 标题文本
|
|
63
|
+
*/
|
|
64
|
+
children?: JSX.Element;
|
|
65
|
+
}
|
|
66
|
+
export declare const AlertDialogTitle: Component<AlertDialogTitleProps>;
|
|
67
|
+
export interface AlertDialogDescriptionProps extends JSX.HTMLAttributes<HTMLParagraphElement> {
|
|
68
|
+
/**
|
|
69
|
+
* 描述文本
|
|
70
|
+
*/
|
|
71
|
+
children?: JSX.Element;
|
|
72
|
+
}
|
|
73
|
+
export declare const AlertDialogDescription: Component<AlertDialogDescriptionProps>;
|
|
74
|
+
export interface AlertDialogActionProps extends JSX.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
75
|
+
/**
|
|
76
|
+
* 子元素
|
|
77
|
+
*/
|
|
78
|
+
children?: JSX.Element;
|
|
79
|
+
}
|
|
80
|
+
export declare const AlertDialogAction: Component<AlertDialogActionProps>;
|
|
81
|
+
export interface AlertDialogCancelProps extends JSX.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
82
|
+
/**
|
|
83
|
+
* 子元素
|
|
84
|
+
*/
|
|
85
|
+
children?: JSX.Element;
|
|
86
|
+
}
|
|
87
|
+
export declare const AlertDialogCancel: Component<AlertDialogCancelProps>;
|
|
88
|
+
export {};
|
|
89
|
+
//# sourceMappingURL=AlertDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AlertDialog.d.ts","sourceRoot":"","sources":["../../../src/components/AlertDialog/AlertDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { delegateEvents, isServer, createComponent, template, spread, mergeProps, insert, Portal } from "solid-js/web";
|
|
2
|
+
import { createContext, splitProps, createSignal, onMount, createEffect, onCleanup, Show, useContext } from "solid-js";
|
|
3
|
+
var _tmpl$ = /* @__PURE__ */ template(`<button type=button>`), _tmpl$2 = /* @__PURE__ */ template(`<div>`), _tmpl$3 = /* @__PURE__ */ template(`<div role=alertdialog aria-modal=true>`), _tmpl$4 = /* @__PURE__ */ template(`<h2>`), _tmpl$5 = /* @__PURE__ */ template(`<p>`);
|
|
4
|
+
const AlertDialogContext = createContext();
|
|
5
|
+
const useAlertDialogContext = () => {
|
|
6
|
+
const context = useContext(AlertDialogContext);
|
|
7
|
+
if (!context) {
|
|
8
|
+
throw new Error("AlertDialog components must be used within AlertDialog");
|
|
9
|
+
}
|
|
10
|
+
return context;
|
|
11
|
+
};
|
|
12
|
+
const AlertDialogBase = (props) => {
|
|
13
|
+
const [local] = splitProps(props, ["open", "defaultOpen", "onOpenChange", "children"]);
|
|
14
|
+
const [internalOpen, setInternalOpen] = createSignal(local.open ?? local.defaultOpen ?? false);
|
|
15
|
+
const isControlled = () => local.open !== void 0;
|
|
16
|
+
const open = () => isControlled() ? local.open : internalOpen();
|
|
17
|
+
const handleOpenChange = (newOpen) => {
|
|
18
|
+
if (!isControlled()) {
|
|
19
|
+
setInternalOpen(newOpen);
|
|
20
|
+
}
|
|
21
|
+
local.onOpenChange?.(newOpen);
|
|
22
|
+
};
|
|
23
|
+
const handleKeyDown = (e) => {
|
|
24
|
+
if (e.key === "Escape" && open()) {
|
|
25
|
+
handleOpenChange(false);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
onMount(() => {
|
|
29
|
+
if (!isServer && open()) {
|
|
30
|
+
document.addEventListener("keydown", handleKeyDown);
|
|
31
|
+
document.body.style.overflow = "hidden";
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
createEffect(() => {
|
|
35
|
+
if (!isServer) {
|
|
36
|
+
if (open()) {
|
|
37
|
+
document.addEventListener("keydown", handleKeyDown);
|
|
38
|
+
document.body.style.overflow = "hidden";
|
|
39
|
+
} else {
|
|
40
|
+
document.removeEventListener("keydown", handleKeyDown);
|
|
41
|
+
document.body.style.overflow = "";
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
onCleanup(() => {
|
|
46
|
+
if (!isServer) {
|
|
47
|
+
document.removeEventListener("keydown", handleKeyDown);
|
|
48
|
+
document.body.style.overflow = "";
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
const contextValue = {
|
|
52
|
+
open,
|
|
53
|
+
setOpen: handleOpenChange
|
|
54
|
+
};
|
|
55
|
+
return createComponent(AlertDialogContext.Provider, {
|
|
56
|
+
value: contextValue,
|
|
57
|
+
get children() {
|
|
58
|
+
return local.children;
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
const AlertDialog = Object.assign(AlertDialogBase, {
|
|
63
|
+
Trigger: null,
|
|
64
|
+
Overlay: null,
|
|
65
|
+
Content: null,
|
|
66
|
+
Title: null,
|
|
67
|
+
Description: null,
|
|
68
|
+
Action: null,
|
|
69
|
+
Cancel: null
|
|
70
|
+
});
|
|
71
|
+
const AlertDialogTrigger = (props) => {
|
|
72
|
+
const [local, others] = splitProps(props, ["children", "asChild", "class", "onClick"]);
|
|
73
|
+
const context = useAlertDialogContext();
|
|
74
|
+
const handleClick = (e) => {
|
|
75
|
+
if (typeof local.onClick === "function") {
|
|
76
|
+
local.onClick(e);
|
|
77
|
+
}
|
|
78
|
+
context.setOpen(true);
|
|
79
|
+
};
|
|
80
|
+
return (() => {
|
|
81
|
+
var _el$ = _tmpl$();
|
|
82
|
+
_el$.$$click = handleClick;
|
|
83
|
+
spread(_el$, mergeProps({
|
|
84
|
+
get ["class"]() {
|
|
85
|
+
return local.class;
|
|
86
|
+
}
|
|
87
|
+
}, others), false, true);
|
|
88
|
+
insert(_el$, () => local.children);
|
|
89
|
+
return _el$;
|
|
90
|
+
})();
|
|
91
|
+
};
|
|
92
|
+
const AlertDialogOverlay = (props) => {
|
|
93
|
+
const [local, others] = splitProps(props, ["children", "class", "onClick"]);
|
|
94
|
+
const context = useAlertDialogContext();
|
|
95
|
+
const handleClick = (e) => {
|
|
96
|
+
if (typeof local.onClick === "function") {
|
|
97
|
+
local.onClick(e);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
return (() => {
|
|
101
|
+
var _el$2 = _tmpl$2();
|
|
102
|
+
_el$2.$$click = handleClick;
|
|
103
|
+
spread(_el$2, mergeProps({
|
|
104
|
+
get ["class"]() {
|
|
105
|
+
return local.class;
|
|
106
|
+
},
|
|
107
|
+
get ["data-state"]() {
|
|
108
|
+
return context.open() ? "open" : "closed";
|
|
109
|
+
}
|
|
110
|
+
}, others), false, true);
|
|
111
|
+
insert(_el$2, () => local.children);
|
|
112
|
+
return _el$2;
|
|
113
|
+
})();
|
|
114
|
+
};
|
|
115
|
+
const AlertDialogContent = (props) => {
|
|
116
|
+
const [local, others] = splitProps(props, ["class", "children"]);
|
|
117
|
+
const context = useAlertDialogContext();
|
|
118
|
+
return createComponent(Show, {
|
|
119
|
+
get when() {
|
|
120
|
+
return context.open();
|
|
121
|
+
},
|
|
122
|
+
get children() {
|
|
123
|
+
return createComponent(Portal, {
|
|
124
|
+
get mount() {
|
|
125
|
+
return !isServer ? document.body : void 0;
|
|
126
|
+
},
|
|
127
|
+
get children() {
|
|
128
|
+
return [createComponent(AlertDialogOverlay, {
|
|
129
|
+
"class": "fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0"
|
|
130
|
+
}), (() => {
|
|
131
|
+
var _el$3 = _tmpl$3();
|
|
132
|
+
spread(_el$3, mergeProps({
|
|
133
|
+
get ["class"]() {
|
|
134
|
+
return local.class;
|
|
135
|
+
},
|
|
136
|
+
get ["data-state"]() {
|
|
137
|
+
return context.open() ? "open" : "closed";
|
|
138
|
+
}
|
|
139
|
+
}, others), false, true);
|
|
140
|
+
insert(_el$3, () => local.children);
|
|
141
|
+
return _el$3;
|
|
142
|
+
})()];
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
};
|
|
148
|
+
const AlertDialogTitle = (props) => {
|
|
149
|
+
const [local, others] = splitProps(props, ["children", "class"]);
|
|
150
|
+
return (() => {
|
|
151
|
+
var _el$4 = _tmpl$4();
|
|
152
|
+
spread(_el$4, mergeProps({
|
|
153
|
+
get ["class"]() {
|
|
154
|
+
return local.class;
|
|
155
|
+
}
|
|
156
|
+
}, others), false, true);
|
|
157
|
+
insert(_el$4, () => local.children);
|
|
158
|
+
return _el$4;
|
|
159
|
+
})();
|
|
160
|
+
};
|
|
161
|
+
const AlertDialogDescription = (props) => {
|
|
162
|
+
const [local, others] = splitProps(props, ["children", "class"]);
|
|
163
|
+
return (() => {
|
|
164
|
+
var _el$5 = _tmpl$5();
|
|
165
|
+
spread(_el$5, mergeProps({
|
|
166
|
+
get ["class"]() {
|
|
167
|
+
return local.class;
|
|
168
|
+
}
|
|
169
|
+
}, others), false, true);
|
|
170
|
+
insert(_el$5, () => local.children);
|
|
171
|
+
return _el$5;
|
|
172
|
+
})();
|
|
173
|
+
};
|
|
174
|
+
const AlertDialogAction = (props) => {
|
|
175
|
+
const [local, others] = splitProps(props, ["children", "class", "onClick"]);
|
|
176
|
+
const context = useAlertDialogContext();
|
|
177
|
+
const handleClick = (e) => {
|
|
178
|
+
if (typeof local.onClick === "function") {
|
|
179
|
+
local.onClick(e);
|
|
180
|
+
}
|
|
181
|
+
context.setOpen(false);
|
|
182
|
+
};
|
|
183
|
+
return (() => {
|
|
184
|
+
var _el$6 = _tmpl$();
|
|
185
|
+
_el$6.$$click = handleClick;
|
|
186
|
+
spread(_el$6, mergeProps({
|
|
187
|
+
get ["class"]() {
|
|
188
|
+
return local.class;
|
|
189
|
+
}
|
|
190
|
+
}, others), false, true);
|
|
191
|
+
insert(_el$6, () => local.children);
|
|
192
|
+
return _el$6;
|
|
193
|
+
})();
|
|
194
|
+
};
|
|
195
|
+
const AlertDialogCancel = (props) => {
|
|
196
|
+
const [local, others] = splitProps(props, ["children", "class", "onClick"]);
|
|
197
|
+
const context = useAlertDialogContext();
|
|
198
|
+
const handleClick = (e) => {
|
|
199
|
+
if (typeof local.onClick === "function") {
|
|
200
|
+
local.onClick(e);
|
|
201
|
+
}
|
|
202
|
+
context.setOpen(false);
|
|
203
|
+
};
|
|
204
|
+
return (() => {
|
|
205
|
+
var _el$7 = _tmpl$();
|
|
206
|
+
_el$7.$$click = handleClick;
|
|
207
|
+
spread(_el$7, mergeProps({
|
|
208
|
+
get ["class"]() {
|
|
209
|
+
return local.class;
|
|
210
|
+
}
|
|
211
|
+
}, others), false, true);
|
|
212
|
+
insert(_el$7, () => local.children);
|
|
213
|
+
return _el$7;
|
|
214
|
+
})();
|
|
215
|
+
};
|
|
216
|
+
AlertDialog.Trigger = AlertDialogTrigger;
|
|
217
|
+
AlertDialog.Overlay = AlertDialogOverlay;
|
|
218
|
+
AlertDialog.Content = AlertDialogContent;
|
|
219
|
+
AlertDialog.Title = AlertDialogTitle;
|
|
220
|
+
AlertDialog.Description = AlertDialogDescription;
|
|
221
|
+
AlertDialog.Action = AlertDialogAction;
|
|
222
|
+
AlertDialog.Cancel = AlertDialogCancel;
|
|
223
|
+
delegateEvents(["click"]);
|
|
224
|
+
export {
|
|
225
|
+
AlertDialog,
|
|
226
|
+
AlertDialogAction,
|
|
227
|
+
AlertDialogCancel,
|
|
228
|
+
AlertDialogContent,
|
|
229
|
+
AlertDialogDescription,
|
|
230
|
+
AlertDialogOverlay,
|
|
231
|
+
AlertDialogTitle,
|
|
232
|
+
AlertDialogTrigger,
|
|
233
|
+
useAlertDialogContext
|
|
234
|
+
};
|
|
235
|
+
//# sourceMappingURL=AlertDialog.js.map
|