@vritti/quantum-ui 0.4.2 → 0.4.4
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/DropdownMenu.js +59 -25
- package/dist/DropdownMenu.js.map +1 -1
- package/dist/OfferingSelector.js +21 -0
- package/dist/OfferingSelector.js.map +1 -0
- package/dist/OfferingVariantSelector.js +24 -0
- package/dist/OfferingVariantSelector.js.map +1 -0
- package/dist/Sidebar.js +1 -1
- package/dist/Switch.js +23 -6
- package/dist/Switch.js.map +1 -1
- package/dist/assets/quantum-ui.css +122 -103
- package/dist/components/TokenInput.js +3 -4
- package/dist/components/TokenInput.js.map +1 -1
- package/dist/dropdown-menu.js +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/components/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/lib/components/DropdownMenu/types.d.ts +4 -0
- package/dist/lib/components/DropdownMenu/types.d.ts.map +1 -1
- package/dist/lib/components/Switch/Switch.d.ts +2 -0
- package/dist/lib/components/Switch/Switch.d.ts.map +1 -1
- package/dist/lib/components/TokenInput/TokenInput.d.ts.map +1 -1
- package/dist/lib/selects/index.d.ts +2 -0
- package/dist/lib/selects/index.d.ts.map +1 -1
- package/dist/lib/selects/offering/OfferingSelector.d.ts +4 -0
- package/dist/lib/selects/offering/OfferingSelector.d.ts.map +1 -0
- package/dist/lib/selects/offering/index.d.ts +2 -0
- package/dist/lib/selects/offering/index.d.ts.map +1 -0
- package/dist/lib/selects/offering-variant/OfferingVariantSelector.d.ts +6 -0
- package/dist/lib/selects/offering-variant/OfferingVariantSelector.d.ts.map +1 -0
- package/dist/lib/selects/offering-variant/index.d.ts +2 -0
- package/dist/lib/selects/offering-variant/index.d.ts.map +1 -0
- package/dist/lib/utils/zod.d.ts +5 -0
- package/dist/lib/utils/zod.d.ts.map +1 -1
- package/dist/lodash.js +38 -27
- package/dist/lodash.js.map +1 -1
- package/dist/selects/offering-variant.js +2 -0
- package/dist/selects/offering-variant.js.map +1 -0
- package/dist/selects/offering.js +2 -0
- package/dist/selects/offering.js.map +1 -0
- package/dist/useDataTable.js +4906 -2439
- package/dist/useDataTable.js.map +1 -1
- package/dist/utils/axios.js +2825 -1215
- package/dist/utils/axios.js.map +1 -1
- package/dist/utils/zod.js +14 -2
- package/dist/utils/zod.js.map +1 -1
- package/package.json +23 -15
package/dist/DropdownMenu.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { useState, Fragment as Fragment$1 } from 'react';
|
|
2
|
+
import { useState, useMemo, Fragment as Fragment$1 } from 'react';
|
|
3
3
|
import { B as Button } from './Button.js';
|
|
4
4
|
import { D as Dialog } from './Dialog.js';
|
|
5
|
-
import {
|
|
5
|
+
import { c as usePermissionGate, l as lockedTip, b as PermissionLockIcon } from './PermissionGate.js';
|
|
6
|
+
import { D as DropdownMenu$1, a as DropdownMenuTrigger$1, b as DropdownMenuContent$1, c as DropdownMenuItem$1, d as DropdownMenuShortcut$1, e as DropdownMenuGroup$1, f as DropdownMenuLabel$1, g as DropdownMenuSub$1, h as DropdownMenuSubTrigger$1, i as DropdownMenuPortal$1, j as DropdownMenuSubContent$1, k as DropdownMenuRadioGroup$1, l as DropdownMenuRadioItem$1, m as DropdownMenuCheckboxItem$1, n as DropdownMenuSeparator$1 } from './dropdown-menu.js';
|
|
6
7
|
|
|
7
8
|
const DropdownMenuRoot = DropdownMenu$1;
|
|
8
9
|
const DropdownMenuCheckboxItem = DropdownMenuCheckboxItem$1;
|
|
@@ -19,31 +20,61 @@ const DropdownMenuSub = DropdownMenuSub$1;
|
|
|
19
20
|
const DropdownMenuSubContent = DropdownMenuSubContent$1;
|
|
20
21
|
const DropdownMenuSubTrigger = DropdownMenuSubTrigger$1;
|
|
21
22
|
const DropdownMenuTrigger = DropdownMenuTrigger$1;
|
|
22
|
-
const
|
|
23
|
+
const resolveItems = (items, gate, locks) => {
|
|
24
|
+
const resolved = [];
|
|
25
|
+
for (const item of items) {
|
|
26
|
+
const entry = item.type === "sub" || item.type === "group" ? { ...item, items: resolveItems(item.items, gate, locks) } : item;
|
|
27
|
+
if ((entry.type === "sub" || entry.type === "group") && entry.items.length === 0) continue;
|
|
28
|
+
if ("hidden" in entry && entry.hidden) continue;
|
|
29
|
+
if (!("permission" in entry) || !entry.permission) {
|
|
30
|
+
resolved.push(entry);
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
const result = gate(entry.permission);
|
|
34
|
+
if (!result.granted) continue;
|
|
35
|
+
if (result.locked) {
|
|
36
|
+
locks.set(entry.id, { reason: result.reason, tip: lockedTip(result) });
|
|
37
|
+
resolved.push({ ...entry, disabled: true });
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
resolved.push(entry);
|
|
41
|
+
}
|
|
42
|
+
return resolved.filter((item, index, list) => {
|
|
43
|
+
if (item.type !== "separator") return true;
|
|
44
|
+
const previous = list[index - 1];
|
|
45
|
+
const next = list.slice(index + 1).find((candidate) => candidate.type !== "separator");
|
|
46
|
+
return previous !== void 0 && previous.type !== "separator" && next !== void 0;
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
const LeadingIcon = ({ icon: Icon, lock }) => {
|
|
50
|
+
if (lock) return /* @__PURE__ */ jsx(PermissionLockIcon, { reason: lock.reason, className: "mr-2 h-4 w-4" });
|
|
51
|
+
return Icon ? /* @__PURE__ */ jsx(Icon, { className: "mr-2 h-4 w-4" }) : null;
|
|
52
|
+
};
|
|
53
|
+
const renderMenuItem = (item, index, locks, onDialogSelect) => {
|
|
54
|
+
const lock = item.id ? locks.get(item.id) : void 0;
|
|
23
55
|
switch (item.type) {
|
|
24
56
|
case "separator":
|
|
25
57
|
return /* @__PURE__ */ jsx(DropdownMenuSeparator, {}, item.id ?? `separator-${index}`);
|
|
26
58
|
case "label":
|
|
27
59
|
return /* @__PURE__ */ jsx(DropdownMenuLabel, { children: item.label }, item.id);
|
|
28
60
|
case "item": {
|
|
29
|
-
const
|
|
61
|
+
const trailing = lock?.tip ?? item.shortcut;
|
|
30
62
|
return /* @__PURE__ */ jsxs(
|
|
31
63
|
DropdownMenuItem,
|
|
32
64
|
{
|
|
33
65
|
onClick: item.onClick,
|
|
34
66
|
disabled: item.disabled,
|
|
35
|
-
className: item.variant === "destructive" ? "text-destructive focus:text-destructive" : void 0,
|
|
67
|
+
className: item.variant === "destructive" && !lock ? "text-destructive focus:text-destructive" : void 0,
|
|
36
68
|
children: [
|
|
37
|
-
|
|
69
|
+
/* @__PURE__ */ jsx(LeadingIcon, { icon: item.icon, lock }),
|
|
38
70
|
/* @__PURE__ */ jsx("span", { children: item.label }),
|
|
39
|
-
|
|
71
|
+
trailing && /* @__PURE__ */ jsx(DropdownMenuShortcut, { children: trailing })
|
|
40
72
|
]
|
|
41
73
|
},
|
|
42
74
|
item.id
|
|
43
75
|
);
|
|
44
76
|
}
|
|
45
|
-
case "checkbox":
|
|
46
|
-
const Icon = item.icon;
|
|
77
|
+
case "checkbox":
|
|
47
78
|
return /* @__PURE__ */ jsxs(
|
|
48
79
|
DropdownMenuCheckboxItem,
|
|
49
80
|
{
|
|
@@ -51,13 +82,13 @@ const renderMenuItem = (item, index, onDialogSelect) => {
|
|
|
51
82
|
onCheckedChange: item.onCheckedChange,
|
|
52
83
|
disabled: item.disabled,
|
|
53
84
|
children: [
|
|
54
|
-
|
|
55
|
-
item.label
|
|
85
|
+
/* @__PURE__ */ jsx(LeadingIcon, { icon: item.icon, lock }),
|
|
86
|
+
item.label,
|
|
87
|
+
lock && /* @__PURE__ */ jsx(DropdownMenuShortcut, { children: lock.tip })
|
|
56
88
|
]
|
|
57
89
|
},
|
|
58
90
|
item.id
|
|
59
91
|
);
|
|
60
|
-
}
|
|
61
92
|
case "radio-group":
|
|
62
93
|
return /* @__PURE__ */ jsx(DropdownMenuRadioGroup, { value: item.value, onValueChange: item.onValueChange, children: item.items.map((radioItem) => {
|
|
63
94
|
const Icon = radioItem.icon;
|
|
@@ -66,23 +97,20 @@ const renderMenuItem = (item, index, onDialogSelect) => {
|
|
|
66
97
|
radioItem.label
|
|
67
98
|
] }, radioItem.value);
|
|
68
99
|
}) }, item.id);
|
|
69
|
-
case "sub":
|
|
70
|
-
const Icon = item.icon;
|
|
100
|
+
case "sub":
|
|
71
101
|
return /* @__PURE__ */ jsxs(DropdownMenuSub, { children: [
|
|
72
102
|
/* @__PURE__ */ jsxs(DropdownMenuSubTrigger, { disabled: item.disabled, children: [
|
|
73
|
-
|
|
103
|
+
/* @__PURE__ */ jsx(LeadingIcon, { icon: item.icon, lock }),
|
|
74
104
|
/* @__PURE__ */ jsx("span", { children: item.label })
|
|
75
105
|
] }),
|
|
76
|
-
/* @__PURE__ */ jsx(DropdownMenuPortal, { children: /* @__PURE__ */ jsx(DropdownMenuSubContent, { children: item.items.map((subItem, subIndex) => renderMenuItem(subItem, subIndex, onDialogSelect)) }) })
|
|
106
|
+
/* @__PURE__ */ jsx(DropdownMenuPortal, { children: /* @__PURE__ */ jsx(DropdownMenuSubContent, { children: item.items.map((subItem, subIndex) => renderMenuItem(subItem, subIndex, locks, onDialogSelect)) }) })
|
|
77
107
|
] }, item.id);
|
|
78
|
-
}
|
|
79
108
|
case "group":
|
|
80
109
|
return /* @__PURE__ */ jsxs(DropdownMenuGroup, { children: [
|
|
81
110
|
item.label && /* @__PURE__ */ jsx(DropdownMenuLabel, { children: item.label }),
|
|
82
|
-
item.items.map((groupItem, groupIndex) => renderMenuItem(groupItem, groupIndex, onDialogSelect))
|
|
111
|
+
item.items.map((groupItem, groupIndex) => renderMenuItem(groupItem, groupIndex, locks, onDialogSelect))
|
|
83
112
|
] }, item.id);
|
|
84
|
-
case "dialog":
|
|
85
|
-
const Icon = item.icon;
|
|
113
|
+
case "dialog":
|
|
86
114
|
return /* @__PURE__ */ jsxs(
|
|
87
115
|
DropdownMenuItem,
|
|
88
116
|
{
|
|
@@ -92,13 +120,13 @@ const renderMenuItem = (item, index, onDialogSelect) => {
|
|
|
92
120
|
onDialogSelect?.(item.id);
|
|
93
121
|
},
|
|
94
122
|
children: [
|
|
95
|
-
|
|
96
|
-
/* @__PURE__ */ jsx("span", { children: item.label })
|
|
123
|
+
/* @__PURE__ */ jsx(LeadingIcon, { icon: item.icon, lock }),
|
|
124
|
+
/* @__PURE__ */ jsx("span", { children: item.label }),
|
|
125
|
+
lock && /* @__PURE__ */ jsx(DropdownMenuShortcut, { children: lock.tip })
|
|
97
126
|
]
|
|
98
127
|
},
|
|
99
128
|
item.id
|
|
100
129
|
);
|
|
101
|
-
}
|
|
102
130
|
case "custom": {
|
|
103
131
|
const content = typeof item.render === "function" ? item.render() : item.render;
|
|
104
132
|
if (item.asMenuItem) {
|
|
@@ -120,6 +148,11 @@ const DropdownMenu = ({
|
|
|
120
148
|
}) => {
|
|
121
149
|
const [activeDialogId, setActiveDialogId] = useState(null);
|
|
122
150
|
const TriggerIcon = trigger.icon;
|
|
151
|
+
const gate = usePermissionGate();
|
|
152
|
+
const { visible, locks } = useMemo(() => {
|
|
153
|
+
const resolvedLocks = /* @__PURE__ */ new Map();
|
|
154
|
+
return { visible: resolveItems(items, gate, resolvedLocks), locks: resolvedLocks };
|
|
155
|
+
}, [items, gate]);
|
|
123
156
|
const collectDialogItems = (menuItems) => {
|
|
124
157
|
const result = [];
|
|
125
158
|
for (const item of menuItems) {
|
|
@@ -128,7 +161,8 @@ const DropdownMenu = ({
|
|
|
128
161
|
}
|
|
129
162
|
return result;
|
|
130
163
|
};
|
|
131
|
-
const dialogItems = collectDialogItems(
|
|
164
|
+
const dialogItems = collectDialogItems(visible);
|
|
165
|
+
if (visible.length === 0) return null;
|
|
132
166
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
133
167
|
/* @__PURE__ */ jsxs(DropdownMenuRoot, { modal, children: [
|
|
134
168
|
/* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: trigger.children ?? /* @__PURE__ */ jsxs(Button, { variant: trigger.variant, className: trigger.className, children: [
|
|
@@ -146,7 +180,7 @@ const DropdownMenu = ({
|
|
|
146
180
|
event.preventDefault();
|
|
147
181
|
}
|
|
148
182
|
},
|
|
149
|
-
children:
|
|
183
|
+
children: visible.map((item, index) => renderMenuItem(item, index, locks, setActiveDialogId))
|
|
150
184
|
}
|
|
151
185
|
)
|
|
152
186
|
] }),
|
package/dist/DropdownMenu.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownMenu.js","sources":["../lib/components/DropdownMenu/DropdownMenu.tsx"],"sourcesContent":["import type React from 'react';\nimport { Fragment, useState } from 'react';\nimport {\n DropdownMenuCheckboxItem as ShadcnDropdownMenuCheckboxItem,\n DropdownMenuContent as ShadcnDropdownMenuContent,\n DropdownMenuGroup as ShadcnDropdownMenuGroup,\n DropdownMenuItem as ShadcnDropdownMenuItem,\n DropdownMenuLabel as ShadcnDropdownMenuLabel,\n DropdownMenuPortal as ShadcnDropdownMenuPortal,\n DropdownMenuRadioGroup as ShadcnDropdownMenuRadioGroup,\n DropdownMenuRadioItem as ShadcnDropdownMenuRadioItem,\n DropdownMenu as ShadcnDropdownMenuRoot,\n DropdownMenuSeparator as ShadcnDropdownMenuSeparator,\n DropdownMenuShortcut as ShadcnDropdownMenuShortcut,\n DropdownMenuSub as ShadcnDropdownMenuSub,\n DropdownMenuSubContent as ShadcnDropdownMenuSubContent,\n DropdownMenuSubTrigger as ShadcnDropdownMenuSubTrigger,\n DropdownMenuTrigger as ShadcnDropdownMenuTrigger,\n} from '../../../shadcn/shadcnDropdownMenu';\nimport type { DialogHandle } from '../../hooks/useDialog';\nimport { Button } from '../Button';\nimport { Dialog } from '../Dialog';\nimport type { DialogMenuItem, DropdownMenuProps, MenuItem } from './types';\n\nconst DropdownMenuRoot = ShadcnDropdownMenuRoot;\nconst DropdownMenuCheckboxItem = ShadcnDropdownMenuCheckboxItem;\nconst DropdownMenuContent = ShadcnDropdownMenuContent;\nconst DropdownMenuGroup = ShadcnDropdownMenuGroup;\nconst DropdownMenuItem = ShadcnDropdownMenuItem;\nconst DropdownMenuLabel = ShadcnDropdownMenuLabel;\nconst DropdownMenuPortal = ShadcnDropdownMenuPortal;\nconst DropdownMenuRadioGroup = ShadcnDropdownMenuRadioGroup;\nconst DropdownMenuRadioItem = ShadcnDropdownMenuRadioItem;\nconst DropdownMenuSeparator = ShadcnDropdownMenuSeparator;\nconst DropdownMenuShortcut = ShadcnDropdownMenuShortcut;\nconst DropdownMenuSub = ShadcnDropdownMenuSub;\nconst DropdownMenuSubContent = ShadcnDropdownMenuSubContent;\nconst DropdownMenuSubTrigger = ShadcnDropdownMenuSubTrigger;\nconst DropdownMenuTrigger = ShadcnDropdownMenuTrigger;\n\n// Renders a single menu item based on its type — supports nested submenus\nconst renderMenuItem = (item: MenuItem, index: number, onDialogSelect?: (id: string) => void): React.ReactNode => {\n switch (item.type) {\n case 'separator':\n return <DropdownMenuSeparator key={item.id ?? `separator-${index}`} />;\n\n case 'label':\n return <DropdownMenuLabel key={item.id}>{item.label}</DropdownMenuLabel>;\n\n case 'item': {\n const Icon = item.icon;\n return (\n <DropdownMenuItem\n key={item.id}\n onClick={item.onClick}\n disabled={item.disabled}\n className={item.variant === 'destructive' ? 'text-destructive focus:text-destructive' : undefined}\n >\n {Icon && <Icon className=\"mr-2 h-4 w-4\" />}\n <span>{item.label}</span>\n {item.shortcut && <DropdownMenuShortcut>{item.shortcut}</DropdownMenuShortcut>}\n </DropdownMenuItem>\n );\n }\n\n case 'checkbox': {\n const Icon = item.icon;\n return (\n <DropdownMenuCheckboxItem\n key={item.id}\n checked={item.checked}\n onCheckedChange={item.onCheckedChange}\n disabled={item.disabled}\n >\n {Icon && <Icon className=\"mr-2 h-4 w-4\" />}\n {item.label}\n </DropdownMenuCheckboxItem>\n );\n }\n\n case 'radio-group':\n return (\n <DropdownMenuRadioGroup key={item.id} value={item.value} onValueChange={item.onValueChange}>\n {item.items.map((radioItem) => {\n const Icon = radioItem.icon;\n return (\n <DropdownMenuRadioItem key={radioItem.value} value={radioItem.value} disabled={radioItem.disabled}>\n {Icon && <Icon className=\"mr-2 h-4 w-4\" />}\n {radioItem.label}\n </DropdownMenuRadioItem>\n );\n })}\n </DropdownMenuRadioGroup>\n );\n\n case 'sub': {\n const Icon = item.icon;\n return (\n <DropdownMenuSub key={item.id}>\n <DropdownMenuSubTrigger disabled={item.disabled}>\n {Icon && <Icon className=\"mr-2 h-4 w-4\" />}\n <span>{item.label}</span>\n </DropdownMenuSubTrigger>\n <DropdownMenuPortal>\n <DropdownMenuSubContent>\n {item.items.map((subItem, subIndex) => renderMenuItem(subItem, subIndex, onDialogSelect))}\n </DropdownMenuSubContent>\n </DropdownMenuPortal>\n </DropdownMenuSub>\n );\n }\n\n case 'group':\n return (\n <DropdownMenuGroup key={item.id}>\n {item.label && <DropdownMenuLabel>{item.label}</DropdownMenuLabel>}\n {item.items.map((groupItem, groupIndex) => renderMenuItem(groupItem, groupIndex, onDialogSelect))}\n </DropdownMenuGroup>\n );\n\n case 'dialog': {\n const Icon = item.icon;\n return (\n <DropdownMenuItem\n key={item.id}\n disabled={item.disabled}\n onSelect={(e) => {\n e.preventDefault();\n onDialogSelect?.(item.id);\n }}\n >\n {Icon && <Icon className=\"mr-2 h-4 w-4\" />}\n <span>{item.label}</span>\n </DropdownMenuItem>\n );\n }\n\n case 'custom': {\n const content = typeof item.render === 'function' ? item.render() : item.render;\n if (item.asMenuItem) {\n return (\n <DropdownMenuItem key={item.id} onClick={item.onClick} disabled={item.disabled}>\n {content}\n </DropdownMenuItem>\n );\n }\n return <Fragment key={item.id}>{content}</Fragment>;\n }\n\n default:\n return null;\n }\n};\n\n// A flexible, data-driven dropdown menu built from a declarative items array\nexport const DropdownMenu: React.FC<DropdownMenuProps> = ({\n trigger,\n items,\n modal = false,\n contentClassName,\n align = 'end',\n side,\n}) => {\n const [activeDialogId, setActiveDialogId] = useState<string | null>(null);\n const TriggerIcon = trigger.icon;\n\n // Collect all dialog-type items (including nested) for rendering outside the Radix root\n const collectDialogItems = (menuItems: MenuItem[]): DialogMenuItem[] => {\n const result: DialogMenuItem[] = [];\n for (const item of menuItems) {\n if (item.type === 'dialog') result.push(item);\n if (item.type === 'sub' || item.type === 'group') result.push(...collectDialogItems(item.items));\n }\n return result;\n };\n\n const dialogItems = collectDialogItems(items);\n\n return (\n <>\n <DropdownMenuRoot modal={modal}>\n <DropdownMenuTrigger asChild>\n {trigger.children ?? (\n <Button variant={trigger.variant} className={trigger.className}>\n {TriggerIcon && <TriggerIcon className=\"mr-2 h-4 w-4\" />}\n {trigger.label}\n </Button>\n )}\n </DropdownMenuTrigger>\n <DropdownMenuContent\n className={contentClassName}\n align={align}\n side={side}\n onCloseAutoFocus={(event) => {\n if (!modal) {\n event.preventDefault();\n }\n }}\n >\n {items.map((item, index) => renderMenuItem(item, index, setActiveDialogId))}\n </DropdownMenuContent>\n </DropdownMenuRoot>\n {dialogItems.map((item) => {\n const handle: DialogHandle = {\n isOpen: activeDialogId === item.id,\n open: () => setActiveDialogId(item.id),\n close: () => setActiveDialogId(null),\n onOpenChange: (val) => {\n if (!val) setActiveDialogId(null);\n },\n };\n return (\n <Dialog\n key={item.id}\n handle={handle}\n icon={item.icon}\n title={item.dialog.title}\n description={item.dialog.description}\n badgeSlot={item.dialog.badgeSlot}\n content={item.dialog.content}\n />\n );\n })}\n </>\n );\n};\n\nDropdownMenu.displayName = 'DropdownMenu';\n"],"names":["ShadcnDropdownMenuRoot","ShadcnDropdownMenuCheckboxItem","ShadcnDropdownMenuContent","ShadcnDropdownMenuGroup","ShadcnDropdownMenuItem","ShadcnDropdownMenuLabel","ShadcnDropdownMenuPortal","ShadcnDropdownMenuRadioGroup","ShadcnDropdownMenuRadioItem","ShadcnDropdownMenuSeparator","ShadcnDropdownMenuShortcut","ShadcnDropdownMenuSub","ShadcnDropdownMenuSubContent","ShadcnDropdownMenuSubTrigger","ShadcnDropdownMenuTrigger","Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DropdownMenu.js","sources":["../lib/components/DropdownMenu/DropdownMenu.tsx"],"sourcesContent":["import type { LucideIcon } from 'lucide-react';\nimport type React from 'react';\nimport { Fragment, useMemo, useState } from 'react';\nimport {\n DropdownMenuCheckboxItem as ShadcnDropdownMenuCheckboxItem,\n DropdownMenuContent as ShadcnDropdownMenuContent,\n DropdownMenuGroup as ShadcnDropdownMenuGroup,\n DropdownMenuItem as ShadcnDropdownMenuItem,\n DropdownMenuLabel as ShadcnDropdownMenuLabel,\n DropdownMenuPortal as ShadcnDropdownMenuPortal,\n DropdownMenuRadioGroup as ShadcnDropdownMenuRadioGroup,\n DropdownMenuRadioItem as ShadcnDropdownMenuRadioItem,\n DropdownMenu as ShadcnDropdownMenuRoot,\n DropdownMenuSeparator as ShadcnDropdownMenuSeparator,\n DropdownMenuShortcut as ShadcnDropdownMenuShortcut,\n DropdownMenuSub as ShadcnDropdownMenuSub,\n DropdownMenuSubContent as ShadcnDropdownMenuSubContent,\n DropdownMenuSubTrigger as ShadcnDropdownMenuSubTrigger,\n DropdownMenuTrigger as ShadcnDropdownMenuTrigger,\n} from '../../../shadcn/shadcnDropdownMenu';\nimport type { DialogHandle } from '../../hooks/useDialog';\nimport { Button } from '../Button';\nimport { Dialog } from '../Dialog';\nimport {\n lockedTip,\n type PermissionGateFn,\n PermissionLockIcon,\n type PermissionLockReason,\n usePermissionGate,\n} from '../PermissionGate';\nimport type { DialogMenuItem, DropdownMenuProps, MenuItem } from './types';\n\nconst DropdownMenuRoot = ShadcnDropdownMenuRoot;\nconst DropdownMenuCheckboxItem = ShadcnDropdownMenuCheckboxItem;\nconst DropdownMenuContent = ShadcnDropdownMenuContent;\nconst DropdownMenuGroup = ShadcnDropdownMenuGroup;\nconst DropdownMenuItem = ShadcnDropdownMenuItem;\nconst DropdownMenuLabel = ShadcnDropdownMenuLabel;\nconst DropdownMenuPortal = ShadcnDropdownMenuPortal;\nconst DropdownMenuRadioGroup = ShadcnDropdownMenuRadioGroup;\nconst DropdownMenuRadioItem = ShadcnDropdownMenuRadioItem;\nconst DropdownMenuSeparator = ShadcnDropdownMenuSeparator;\nconst DropdownMenuShortcut = ShadcnDropdownMenuShortcut;\nconst DropdownMenuSub = ShadcnDropdownMenuSub;\nconst DropdownMenuSubContent = ShadcnDropdownMenuSubContent;\nconst DropdownMenuSubTrigger = ShadcnDropdownMenuSubTrigger;\nconst DropdownMenuTrigger = ShadcnDropdownMenuTrigger;\n\ninterface LockInfo {\n reason: PermissionLockReason | null;\n tip: string;\n}\n\ntype LockMap = Map<string, LockInfo>;\n\nconst resolveItems = (items: MenuItem[], gate: PermissionGateFn, locks: LockMap): MenuItem[] => {\n const resolved: MenuItem[] = [];\n\n for (const item of items) {\n const entry =\n item.type === 'sub' || item.type === 'group' ? { ...item, items: resolveItems(item.items, gate, locks) } : item;\n\n if ((entry.type === 'sub' || entry.type === 'group') && entry.items.length === 0) continue;\n if ('hidden' in entry && entry.hidden) continue;\n\n if (!('permission' in entry) || !entry.permission) {\n resolved.push(entry);\n continue;\n }\n\n const result = gate(entry.permission);\n if (!result.granted) continue;\n if (result.locked) {\n locks.set(entry.id, { reason: result.reason, tip: lockedTip(result) });\n resolved.push({ ...entry, disabled: true });\n continue;\n }\n resolved.push(entry);\n }\n\n return resolved.filter((item, index, list) => {\n if (item.type !== 'separator') return true;\n const previous = list[index - 1];\n const next = list.slice(index + 1).find((candidate) => candidate.type !== 'separator');\n return previous !== undefined && previous.type !== 'separator' && next !== undefined;\n });\n};\n\nconst LeadingIcon: React.FC<{ icon?: LucideIcon; lock?: LockInfo }> = ({ icon: Icon, lock }) => {\n if (lock) return <PermissionLockIcon reason={lock.reason} className=\"mr-2 h-4 w-4\" />;\n return Icon ? <Icon className=\"mr-2 h-4 w-4\" /> : null;\n};\n\n// Renders a single menu item based on its type — supports nested submenus\nconst renderMenuItem = (\n item: MenuItem,\n index: number,\n locks: LockMap,\n onDialogSelect?: (id: string) => void,\n): React.ReactNode => {\n const lock = item.id ? locks.get(item.id) : undefined;\n\n switch (item.type) {\n case 'separator':\n return <DropdownMenuSeparator key={item.id ?? `separator-${index}`} />;\n\n case 'label':\n return <DropdownMenuLabel key={item.id}>{item.label}</DropdownMenuLabel>;\n\n case 'item': {\n const trailing = lock?.tip ?? item.shortcut;\n return (\n <DropdownMenuItem\n key={item.id}\n onClick={item.onClick}\n disabled={item.disabled}\n className={item.variant === 'destructive' && !lock ? 'text-destructive focus:text-destructive' : undefined}\n >\n <LeadingIcon icon={item.icon} lock={lock} />\n <span>{item.label}</span>\n {trailing && <DropdownMenuShortcut>{trailing}</DropdownMenuShortcut>}\n </DropdownMenuItem>\n );\n }\n\n case 'checkbox':\n return (\n <DropdownMenuCheckboxItem\n key={item.id}\n checked={item.checked}\n onCheckedChange={item.onCheckedChange}\n disabled={item.disabled}\n >\n <LeadingIcon icon={item.icon} lock={lock} />\n {item.label}\n {lock && <DropdownMenuShortcut>{lock.tip}</DropdownMenuShortcut>}\n </DropdownMenuCheckboxItem>\n );\n\n case 'radio-group':\n return (\n <DropdownMenuRadioGroup key={item.id} value={item.value} onValueChange={item.onValueChange}>\n {item.items.map((radioItem) => {\n const Icon = radioItem.icon;\n return (\n <DropdownMenuRadioItem key={radioItem.value} value={radioItem.value} disabled={radioItem.disabled}>\n {Icon && <Icon className=\"mr-2 h-4 w-4\" />}\n {radioItem.label}\n </DropdownMenuRadioItem>\n );\n })}\n </DropdownMenuRadioGroup>\n );\n\n case 'sub':\n return (\n <DropdownMenuSub key={item.id}>\n <DropdownMenuSubTrigger disabled={item.disabled}>\n <LeadingIcon icon={item.icon} lock={lock} />\n <span>{item.label}</span>\n </DropdownMenuSubTrigger>\n <DropdownMenuPortal>\n <DropdownMenuSubContent>\n {item.items.map((subItem, subIndex) => renderMenuItem(subItem, subIndex, locks, onDialogSelect))}\n </DropdownMenuSubContent>\n </DropdownMenuPortal>\n </DropdownMenuSub>\n );\n\n case 'group':\n return (\n <DropdownMenuGroup key={item.id}>\n {item.label && <DropdownMenuLabel>{item.label}</DropdownMenuLabel>}\n {item.items.map((groupItem, groupIndex) => renderMenuItem(groupItem, groupIndex, locks, onDialogSelect))}\n </DropdownMenuGroup>\n );\n\n case 'dialog':\n return (\n <DropdownMenuItem\n key={item.id}\n disabled={item.disabled}\n onSelect={(e) => {\n e.preventDefault();\n onDialogSelect?.(item.id);\n }}\n >\n <LeadingIcon icon={item.icon} lock={lock} />\n <span>{item.label}</span>\n {lock && <DropdownMenuShortcut>{lock.tip}</DropdownMenuShortcut>}\n </DropdownMenuItem>\n );\n\n case 'custom': {\n const content = typeof item.render === 'function' ? item.render() : item.render;\n if (item.asMenuItem) {\n return (\n <DropdownMenuItem key={item.id} onClick={item.onClick} disabled={item.disabled}>\n {content}\n </DropdownMenuItem>\n );\n }\n return <Fragment key={item.id}>{content}</Fragment>;\n }\n\n default:\n return null;\n }\n};\n\n// A flexible, data-driven dropdown menu built from a declarative items array\nexport const DropdownMenu: React.FC<DropdownMenuProps> = ({\n trigger,\n items,\n modal = false,\n contentClassName,\n align = 'end',\n side,\n}) => {\n const [activeDialogId, setActiveDialogId] = useState<string | null>(null);\n const TriggerIcon = trigger.icon;\n const gate = usePermissionGate();\n\n const { visible, locks } = useMemo(() => {\n const resolvedLocks: LockMap = new Map();\n return { visible: resolveItems(items, gate, resolvedLocks), locks: resolvedLocks };\n }, [items, gate]);\n\n // Collect all dialog-type items (including nested) for rendering outside the Radix root\n const collectDialogItems = (menuItems: MenuItem[]): DialogMenuItem[] => {\n const result: DialogMenuItem[] = [];\n for (const item of menuItems) {\n if (item.type === 'dialog') result.push(item);\n if (item.type === 'sub' || item.type === 'group') result.push(...collectDialogItems(item.items));\n }\n return result;\n };\n\n const dialogItems = collectDialogItems(visible);\n\n if (visible.length === 0) return null;\n\n return (\n <>\n <DropdownMenuRoot modal={modal}>\n <DropdownMenuTrigger asChild>\n {trigger.children ?? (\n <Button variant={trigger.variant} className={trigger.className}>\n {TriggerIcon && <TriggerIcon className=\"mr-2 h-4 w-4\" />}\n {trigger.label}\n </Button>\n )}\n </DropdownMenuTrigger>\n <DropdownMenuContent\n className={contentClassName}\n align={align}\n side={side}\n onCloseAutoFocus={(event) => {\n if (!modal) {\n event.preventDefault();\n }\n }}\n >\n {visible.map((item, index) => renderMenuItem(item, index, locks, setActiveDialogId))}\n </DropdownMenuContent>\n </DropdownMenuRoot>\n {dialogItems.map((item) => {\n const handle: DialogHandle = {\n isOpen: activeDialogId === item.id,\n open: () => setActiveDialogId(item.id),\n close: () => setActiveDialogId(null),\n onOpenChange: (val) => {\n if (!val) setActiveDialogId(null);\n },\n };\n return (\n <Dialog\n key={item.id}\n handle={handle}\n icon={item.icon}\n title={item.dialog.title}\n description={item.dialog.description}\n badgeSlot={item.dialog.badgeSlot}\n content={item.dialog.content}\n />\n );\n })}\n </>\n );\n};\n\nDropdownMenu.displayName = 'DropdownMenu';\n"],"names":["ShadcnDropdownMenuRoot","ShadcnDropdownMenuCheckboxItem","ShadcnDropdownMenuContent","ShadcnDropdownMenuGroup","ShadcnDropdownMenuItem","ShadcnDropdownMenuLabel","ShadcnDropdownMenuPortal","ShadcnDropdownMenuRadioGroup","ShadcnDropdownMenuRadioItem","ShadcnDropdownMenuSeparator","ShadcnDropdownMenuShortcut","ShadcnDropdownMenuSub","ShadcnDropdownMenuSubContent","ShadcnDropdownMenuSubTrigger","ShadcnDropdownMenuTrigger","Fragment"],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { S as Select } from './Select.js';
|
|
4
|
+
|
|
5
|
+
const DEFAULT_FIELD_KEYS = { valueKey: "id", labelKey: "name", descriptionKey: "code" };
|
|
6
|
+
const OfferingSelector = forwardRef(({ fieldKeys, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
7
|
+
Select,
|
|
8
|
+
{
|
|
9
|
+
ref,
|
|
10
|
+
label: "Offering",
|
|
11
|
+
placeholder: "Select offering",
|
|
12
|
+
searchable: true,
|
|
13
|
+
optionsEndpoint: "commerce-api/select-api/offerings",
|
|
14
|
+
...props,
|
|
15
|
+
fieldKeys: { ...DEFAULT_FIELD_KEYS, ...fieldKeys }
|
|
16
|
+
}
|
|
17
|
+
));
|
|
18
|
+
OfferingSelector.displayName = "OfferingSelector";
|
|
19
|
+
|
|
20
|
+
export { OfferingSelector as O };
|
|
21
|
+
//# sourceMappingURL=OfferingSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OfferingSelector.js","sources":["../lib/selects/offering/OfferingSelector.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport { Select, type SelectProps } from '../../components/Select/Select';\n\nexport type OfferingSelectorProps = SelectProps;\n\nconst DEFAULT_FIELD_KEYS = { valueKey: 'id', labelKey: 'name', descriptionKey: 'code' } as const;\n\n// Pre-configured Select for offering selection with async search\nexport const OfferingSelector = forwardRef<HTMLButtonElement, OfferingSelectorProps>(({ fieldKeys, ...props }, ref) => (\n <Select\n ref={ref}\n label=\"Offering\"\n placeholder=\"Select offering\"\n searchable\n optionsEndpoint=\"commerce-api/select-api/offerings\"\n {...props}\n fieldKeys={{ ...DEFAULT_FIELD_KEYS, ...fieldKeys }}\n />\n));\nOfferingSelector.displayName = 'OfferingSelector';\n"],"names":[],"mappings":";;;;AAKA,MAAM,qBAAqB,EAAE,QAAA,EAAU,MAAM,QAAA,EAAU,MAAA,EAAQ,gBAAgB,MAAA,EAAO;AAG/E,MAAM,gBAAA,GAAmB,WAAqD,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC7G,GAAA;AAAA,EAAC,MAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,KAAA,EAAM,UAAA;AAAA,IACN,WAAA,EAAY,iBAAA;AAAA,IACZ,UAAA,EAAU,IAAA;AAAA,IACV,eAAA,EAAgB,mCAAA;AAAA,IACf,GAAG,KAAA;AAAA,IACJ,SAAA,EAAW,EAAE,GAAG,kBAAA,EAAoB,GAAG,SAAA;AAAU;AACnD,CACD;AACD,gBAAA,CAAiB,WAAA,GAAc,kBAAA;;;;"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { S as Select } from './Select.js';
|
|
4
|
+
|
|
5
|
+
const DEFAULT_FIELD_KEYS = { valueKey: "id", labelKey: "sku", descriptionKey: "name" };
|
|
6
|
+
const OfferingVariantSelector = forwardRef(
|
|
7
|
+
({ offeringId, fieldKeys, params, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
8
|
+
Select,
|
|
9
|
+
{
|
|
10
|
+
ref,
|
|
11
|
+
label: "Variant",
|
|
12
|
+
placeholder: "Select variant",
|
|
13
|
+
searchable: true,
|
|
14
|
+
optionsEndpoint: "commerce-api/select-api/offering-variants",
|
|
15
|
+
...props,
|
|
16
|
+
params: { ...params, offeringId },
|
|
17
|
+
fieldKeys: { ...DEFAULT_FIELD_KEYS, ...fieldKeys }
|
|
18
|
+
}
|
|
19
|
+
)
|
|
20
|
+
);
|
|
21
|
+
OfferingVariantSelector.displayName = "OfferingVariantSelector";
|
|
22
|
+
|
|
23
|
+
export { OfferingVariantSelector as O };
|
|
24
|
+
//# sourceMappingURL=OfferingVariantSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OfferingVariantSelector.js","sources":["../lib/selects/offering-variant/OfferingVariantSelector.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport { Select, type SelectProps } from '../../components/Select/Select';\n\nexport interface OfferingVariantSelectorProps extends SelectProps {\n // Variants are only meaningful within their offering, so the parent scopes every query\n offeringId: string;\n}\n\nconst DEFAULT_FIELD_KEYS = { valueKey: 'id', labelKey: 'sku', descriptionKey: 'name' } as const;\n\n// Pre-configured Select for the variants of one offering, keyed by SKU\nexport const OfferingVariantSelector = forwardRef<HTMLButtonElement, OfferingVariantSelectorProps>(\n ({ offeringId, fieldKeys, params, ...props }, ref) => (\n <Select\n ref={ref}\n label=\"Variant\"\n placeholder=\"Select variant\"\n searchable\n optionsEndpoint=\"commerce-api/select-api/offering-variants\"\n {...props}\n params={{ ...params, offeringId }}\n fieldKeys={{ ...DEFAULT_FIELD_KEYS, ...fieldKeys }}\n />\n ),\n);\nOfferingVariantSelector.displayName = 'OfferingVariantSelector';\n"],"names":[],"mappings":";;;;AAQA,MAAM,qBAAqB,EAAE,QAAA,EAAU,MAAM,QAAA,EAAU,KAAA,EAAO,gBAAgB,MAAA,EAAO;AAG9E,MAAM,uBAAA,GAA0B,UAAA;AAAA,EACrC,CAAC,EAAE,UAAA,EAAY,SAAA,EAAW,QAAQ,GAAG,KAAA,IAAS,GAAA,qBAC5C,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,KAAA,EAAM,SAAA;AAAA,MACN,WAAA,EAAY,gBAAA;AAAA,MACZ,UAAA,EAAU,IAAA;AAAA,MACV,eAAA,EAAgB,2CAAA;AAAA,MACf,GAAG,KAAA;AAAA,MACJ,MAAA,EAAQ,EAAE,GAAG,MAAA,EAAQ,UAAA,EAAW;AAAA,MAChC,SAAA,EAAW,EAAE,GAAG,kBAAA,EAAoB,GAAG,SAAA;AAAU;AAAA;AAGvD;AACA,uBAAA,CAAwB,WAAA,GAAc,yBAAA;;;;"}
|
package/dist/Sidebar.js
CHANGED
|
@@ -8,7 +8,7 @@ import { c as cn } from './utils.js';
|
|
|
8
8
|
import { T as TooltipProvider, a as Tooltip, b as TooltipTrigger, c as TooltipContent } from './tooltip2.js';
|
|
9
9
|
import { R as Root, P as Portal, C as Content, a as Close, b as Title, D as Description, O as Overlay } from './index30.js';
|
|
10
10
|
import { X } from './x.js';
|
|
11
|
-
import { D as DropdownMenu, a as DropdownMenuTrigger, b as DropdownMenuContent,
|
|
11
|
+
import { D as DropdownMenu, a as DropdownMenuTrigger, b as DropdownMenuContent, f as DropdownMenuLabel, c as DropdownMenuItem } from './dropdown-menu.js';
|
|
12
12
|
import { P as PanelLeft } from './panel-left.js';
|
|
13
13
|
import { C as Collapsible, a as CollapsibleTrigger, b as CollapsibleContent } from './collapsible2.js';
|
|
14
14
|
import { C as ChevronRight } from './chevron-right.js';
|
package/dist/Switch.js
CHANGED
|
@@ -3,6 +3,7 @@ import * as React from 'react';
|
|
|
3
3
|
import React__default from 'react';
|
|
4
4
|
import { F as Field, e as FieldLabel, c as FieldError } from './field.js';
|
|
5
5
|
import { w as withDisabledTip } from './disabledTip.js';
|
|
6
|
+
import { u as usePermission, l as lockedTip, b as PermissionLockIcon } from './PermissionGate.js';
|
|
6
7
|
import { u as useControllableState, P as Primitive, c as composeEventHandlers } from './index20.js';
|
|
7
8
|
import { u as useComposedRefs } from './index12.js';
|
|
8
9
|
import { c as createContextScope } from './index21.js';
|
|
@@ -178,12 +179,21 @@ function Switch$1({
|
|
|
178
179
|
}
|
|
179
180
|
|
|
180
181
|
const Switch = React__default.forwardRef(
|
|
181
|
-
({ label, description, error, disabledTip, id, size = "lg", ...props }, ref) => {
|
|
182
|
+
({ label, description, error, disabledTip, permission, id, size = "lg", ...props }, ref) => {
|
|
182
183
|
const generatedId = React__default.useId();
|
|
183
184
|
const fieldId = id || generatedId;
|
|
184
185
|
const hasError = !!error;
|
|
185
|
-
|
|
186
|
-
|
|
186
|
+
const { granted, locked, reason, unlockPlans } = usePermission(permission);
|
|
187
|
+
if (!granted) {
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
const isDisabled = props.disabled || locked;
|
|
191
|
+
const tip = locked ? lockedTip({ reason, unlockPlans }) : disabledTip;
|
|
192
|
+
return /* @__PURE__ */ jsxs(Field, { "data-disabled": isDisabled, "data-invalid": hasError, children: [
|
|
193
|
+
label && /* @__PURE__ */ jsxs(FieldLabel, { htmlFor: fieldId, className: "flex cursor-pointer items-center gap-1.5", children: [
|
|
194
|
+
locked && /* @__PURE__ */ jsx(PermissionLockIcon, { reason, className: "size-3.5" }),
|
|
195
|
+
label
|
|
196
|
+
] }),
|
|
187
197
|
/* @__PURE__ */ jsxs("div", { className: "flex min-h-9 items-center gap-3", children: [
|
|
188
198
|
description && /* @__PURE__ */ jsx(
|
|
189
199
|
"label",
|
|
@@ -202,12 +212,13 @@ const Switch = React__default.forwardRef(
|
|
|
202
212
|
ref,
|
|
203
213
|
id: fieldId,
|
|
204
214
|
size,
|
|
215
|
+
disabled: isDisabled,
|
|
205
216
|
"aria-describedby": description || error ? `${fieldId}-description ${fieldId}-error` : void 0,
|
|
206
217
|
"aria-invalid": hasError
|
|
207
218
|
}
|
|
208
219
|
),
|
|
209
|
-
|
|
210
|
-
|
|
220
|
+
tip,
|
|
221
|
+
isDisabled
|
|
211
222
|
)
|
|
212
223
|
] }),
|
|
213
224
|
error && /* @__PURE__ */ jsx(FieldError, { id: `${fieldId}-error`, children: error })
|
|
@@ -215,7 +226,13 @@ const Switch = React__default.forwardRef(
|
|
|
215
226
|
}
|
|
216
227
|
);
|
|
217
228
|
Switch.displayName = "Switch";
|
|
218
|
-
const CompactSwitch = ({ size = "sm", disabledTip, ...props }) =>
|
|
229
|
+
const CompactSwitch = ({ size = "sm", disabledTip, permission, ...props }) => {
|
|
230
|
+
const { granted, locked, reason, unlockPlans } = usePermission(permission);
|
|
231
|
+
if (!granted) return null;
|
|
232
|
+
const isDisabled = props.disabled || locked;
|
|
233
|
+
const tip = locked ? lockedTip({ reason, unlockPlans }) : disabledTip;
|
|
234
|
+
return withDisabledTip(/* @__PURE__ */ jsx(Switch$1, { size, ...props, disabled: isDisabled }), tip, isDisabled);
|
|
235
|
+
};
|
|
219
236
|
CompactSwitch.displayName = "CompactSwitch";
|
|
220
237
|
|
|
221
238
|
export { CompactSwitch as C, Switch as S, Switch$1 as a };
|
package/dist/Switch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Switch.js","sources":["../node_modules/.pnpm/@radix-ui+react-switch@1.2.6_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react_c3445f43106be928beab9f2bef095c25/node_modules/@radix-ui/react-switch/dist/index.mjs","../shadcn/shadcnSwitch/Switch.tsx","../lib/components/Switch/Switch.tsx"],"sourcesContent":["\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = \"on\",\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = button ? form || !!button.closest(\"form\") : true;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n return /* @__PURE__ */ jsxs(SwitchProvider, { scope: __scopeSwitch, checked, disabled, children: [\n /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(props.onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n control: button,\n bubbles: !hasConsumerStoppedPropagationRef.current,\n name,\n value,\n checked,\n required,\n disabled,\n form,\n style: { transform: \"translateX(-100%)\" }\n }\n )\n ] });\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n ({\n __scopeSwitch,\n control,\n checked,\n bubbles = true,\n ...props\n }, forwardedRef) => {\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n return /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: checked,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0\n }\n }\n );\n }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nvar Root = Switch;\nvar Thumb = SwitchThumb;\nexport {\n Root,\n Switch,\n SwitchThumb,\n Thumb,\n createSwitchScope\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\nimport type * as React from 'react';\n\nimport { cn } from '../utils';\n\nfunction Switch({\n className,\n size = 'default',\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: 'sm' | 'default' | 'lg';\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n 'peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent outline-none transition-all focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] data-[size=lg]:h-[24px] data-[size=lg]:w-[40px]',\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className=\"bg-primary-foreground shadow-sm pointer-events-none block rounded-full ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=lg]/switch:size-5 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0\"\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import React from 'react';\nimport { Field, FieldError, FieldLabel } from '../../../shadcn/shadcnField';\nimport { Switch as ShadcnSwitch } from '../../../shadcn/shadcnSwitch';\nimport { withDisabledTip } from '../../utils/disabledTip';\n\nexport interface SwitchProps extends React.ComponentPropsWithoutRef<typeof ShadcnSwitch> {\n label?: React.ReactNode;\n\n description: React.ReactNode;\n\n error?: string;\n\n disabledTip?: string;\n}\n\n// Switch for toggling on/off; label + description on the left with the toggle pinned right (description required)\nexport const Switch = React.forwardRef<React.ElementRef<typeof ShadcnSwitch>, SwitchProps>(\n ({ label, description, error, disabledTip, id, size = 'lg', ...props }, ref) => {\n const generatedId = React.useId();\n const fieldId = id || generatedId;\n const hasError = !!error;\n\n return (\n <Field data-disabled={props.disabled} data-invalid={hasError}>\n {label && (\n <FieldLabel htmlFor={fieldId} className=\"cursor-pointer\">\n {label}\n </FieldLabel>\n )}\n <div className=\"flex min-h-9 items-center gap-3\">\n {description && (\n <label\n htmlFor={fieldId}\n id={`${fieldId}-description`}\n className=\"flex-1 cursor-pointer text-sm leading-snug text-muted-foreground\"\n >\n {description}\n </label>\n )}\n {withDisabledTip(\n <ShadcnSwitch\n {...props}\n ref={ref}\n id={fieldId}\n size={size}\n aria-describedby={description || error ? `${fieldId}-description ${fieldId}-error` : undefined}\n aria-invalid={hasError}\n />,\n disabledTip,\n props.disabled,\n )}\n </div>\n {error && <FieldError id={`${fieldId}-error`}>{error}</FieldError>}\n </Field>\n );\n },\n);\n\nSwitch.displayName = 'Switch';\n\nexport type CompactSwitchProps = React.ComponentProps<typeof ShadcnSwitch> & { disabledTip?: string };\n\n// Bare compact switch with no Field wrapper, defaults to sm size for dense layouts like table/matrix cells\nexport const CompactSwitch: React.FC<CompactSwitchProps> = ({ size = 'sm', disabledTip, ...props }) =>\n withDisabledTip(<ShadcnSwitch size={size} {...props} />, disabledTip, props.disabled);\n\nCompactSwitch.displayName = 'CompactSwitch';\n"],"names":["Switch","SwitchPrimitive.Root","SwitchPrimitive.Thumb","React","ShadcnSwitch"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"Switch.js","sources":["../node_modules/.pnpm/@radix-ui+react-switch@1.2.6_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react_c3445f43106be928beab9f2bef095c25/node_modules/@radix-ui/react-switch/dist/index.mjs","../shadcn/shadcnSwitch/Switch.tsx","../lib/components/Switch/Switch.tsx"],"sourcesContent":["\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = \"on\",\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = button ? form || !!button.closest(\"form\") : true;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n return /* @__PURE__ */ jsxs(SwitchProvider, { scope: __scopeSwitch, checked, disabled, children: [\n /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(props.onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n control: button,\n bubbles: !hasConsumerStoppedPropagationRef.current,\n name,\n value,\n checked,\n required,\n disabled,\n form,\n style: { transform: \"translateX(-100%)\" }\n }\n )\n ] });\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n ({\n __scopeSwitch,\n control,\n checked,\n bubbles = true,\n ...props\n }, forwardedRef) => {\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n return /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: checked,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0\n }\n }\n );\n }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nvar Root = Switch;\nvar Thumb = SwitchThumb;\nexport {\n Root,\n Switch,\n SwitchThumb,\n Thumb,\n createSwitchScope\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\nimport type * as React from 'react';\n\nimport { cn } from '../utils';\n\nfunction Switch({\n className,\n size = 'default',\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: 'sm' | 'default' | 'lg';\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n 'peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent outline-none transition-all focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] data-[size=lg]:h-[24px] data-[size=lg]:w-[40px]',\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className=\"bg-primary-foreground shadow-sm pointer-events-none block rounded-full ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=lg]/switch:size-5 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0\"\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import React from 'react';\nimport { Field, FieldError, FieldLabel } from '../../../shadcn/shadcnField';\nimport { Switch as ShadcnSwitch } from '../../../shadcn/shadcnSwitch';\nimport { withDisabledTip } from '../../utils/disabledTip';\nimport { lockedTip, PermissionLockIcon, usePermission } from '../PermissionGate';\n\nexport interface SwitchProps extends React.ComponentPropsWithoutRef<typeof ShadcnSwitch> {\n label?: React.ReactNode;\n\n description: React.ReactNode;\n\n error?: string;\n\n disabledTip?: string;\n\n permission?: string;\n}\n\n// Switch for toggling on/off; label + description on the left with the toggle pinned right (description required)\nexport const Switch = React.forwardRef<React.ElementRef<typeof ShadcnSwitch>, SwitchProps>(\n ({ label, description, error, disabledTip, permission, id, size = 'lg', ...props }, ref) => {\n const generatedId = React.useId();\n const fieldId = id || generatedId;\n const hasError = !!error;\n const { granted, locked, reason, unlockPlans } = usePermission(permission);\n\n // render = role: the role doesn't grant this action, so the control doesn't exist for this user\n if (!granted) {\n return null;\n }\n\n // enable = role ∧ plan ∧ BU: granted but locked renders disabled with the upsell as its tooltip\n const isDisabled = props.disabled || locked;\n const tip = locked ? lockedTip({ reason, unlockPlans }) : disabledTip;\n\n return (\n <Field data-disabled={isDisabled} data-invalid={hasError}>\n {label && (\n <FieldLabel htmlFor={fieldId} className=\"flex cursor-pointer items-center gap-1.5\">\n {locked && <PermissionLockIcon reason={reason} className=\"size-3.5\" />}\n {label}\n </FieldLabel>\n )}\n <div className=\"flex min-h-9 items-center gap-3\">\n {description && (\n <label\n htmlFor={fieldId}\n id={`${fieldId}-description`}\n className=\"flex-1 cursor-pointer text-sm leading-snug text-muted-foreground\"\n >\n {description}\n </label>\n )}\n {withDisabledTip(\n <ShadcnSwitch\n {...props}\n ref={ref}\n id={fieldId}\n size={size}\n disabled={isDisabled}\n aria-describedby={description || error ? `${fieldId}-description ${fieldId}-error` : undefined}\n aria-invalid={hasError}\n />,\n tip,\n isDisabled,\n )}\n </div>\n {error && <FieldError id={`${fieldId}-error`}>{error}</FieldError>}\n </Field>\n );\n },\n);\n\nSwitch.displayName = 'Switch';\n\nexport type CompactSwitchProps = React.ComponentProps<typeof ShadcnSwitch> & {\n disabledTip?: string;\n permission?: string;\n};\n\n// Bare compact switch with no Field wrapper, defaults to sm size for dense layouts like table/matrix cells\nexport const CompactSwitch: React.FC<CompactSwitchProps> = ({ size = 'sm', disabledTip, permission, ...props }) => {\n const { granted, locked, reason, unlockPlans } = usePermission(permission);\n if (!granted) return null;\n\n // No adornment slot here, so a locked switch reads as disabled with the upsell on hover\n const isDisabled = props.disabled || locked;\n const tip = locked ? lockedTip({ reason, unlockPlans }) : disabledTip;\n return withDisabledTip(<ShadcnSwitch size={size} {...props} disabled={isDisabled} />, tip, isDisabled);\n};\n\nCompactSwitch.displayName = 'CompactSwitch';\n"],"names":["Switch","SwitchPrimitive.Root","SwitchPrimitive.Thumb","React","ShadcnSwitch"],"mappings":"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","x_google_ignoreList":[0]}
|