ixia-ui-react 1.8.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -1
- package/dist/accordion/index.d.ts +41 -0
- package/dist/accordion/index.js +142 -0
- package/dist/accordion/index.js.map +1 -0
- package/dist/alert/index.d.ts +22 -0
- package/dist/alert/index.js +1 -0
- package/dist/alert-Dcu9R8CY.js +73 -0
- package/dist/alert-Dcu9R8CY.js.map +1 -0
- package/dist/alert-dialog/index.d.ts +39 -0
- package/dist/alert-dialog/index.js +134 -0
- package/dist/alert-dialog/index.js.map +1 -0
- package/dist/autocomplete/index.d.ts +2 -0
- package/dist/autocomplete/index.js +1 -0
- package/dist/autocomplete-BfpWVO1l.js +169 -0
- package/dist/autocomplete-BfpWVO1l.js.map +1 -0
- package/dist/avatar/index.d.ts +2 -0
- package/dist/avatar/index.js +1 -0
- package/dist/avatar-Bp4gZh21.js +93 -0
- package/dist/avatar-Bp4gZh21.js.map +1 -0
- package/dist/badge/index.d.ts +2 -0
- package/dist/badge/index.js +1 -0
- package/dist/badge-Cl-9WTW-.js +160 -0
- package/dist/badge-Cl-9WTW-.js.map +1 -0
- package/dist/bento-box/index.d.ts +30 -0
- package/dist/bento-box/index.js +103 -0
- package/dist/bento-box/index.js.map +1 -0
- package/dist/breadcrumb/index.d.ts +18 -0
- package/dist/breadcrumb/index.js +58 -0
- package/dist/breadcrumb/index.js.map +1 -0
- package/dist/button/index.d.ts +3 -0
- package/dist/button/index.js +1 -0
- package/dist/button-DXQvyQyj.js +309 -0
- package/dist/button-DXQvyQyj.js.map +1 -0
- package/dist/button-group/index.d.ts +2 -0
- package/dist/button-group/index.js +1 -0
- package/dist/button-group-BiSk3iIf.js +269 -0
- package/dist/button-group-BiSk3iIf.js.map +1 -0
- package/dist/button-group-context-CScS9Ntz.js +7 -0
- package/dist/button-group-context-CScS9Ntz.js.map +1 -0
- package/dist/button.types-BFKrBCGd.d.ts +10 -0
- package/dist/calendar/index.d.ts +63 -0
- package/dist/calendar/index.js +292 -0
- package/dist/calendar/index.js.map +1 -0
- package/dist/chart/index.d.ts +87 -0
- package/dist/chart/index.js +262 -0
- package/dist/chart/index.js.map +1 -0
- package/dist/checkbox/index.d.ts +2 -0
- package/dist/checkbox/index.js +1 -0
- package/dist/checkbox-BuUZ1Lly.js +54 -0
- package/dist/checkbox-BuUZ1Lly.js.map +1 -0
- package/dist/checkbox-group/index.d.ts +6 -0
- package/dist/checkbox-group/index.js +17 -0
- package/dist/checkbox-group/index.js.map +1 -0
- package/dist/cn-BDi0DfT5.js +29 -0
- package/dist/cn-BDi0DfT5.js.map +1 -0
- package/dist/code-block/index.d.ts +53 -0
- package/dist/code-block/index.js +193 -0
- package/dist/code-block/index.js.map +1 -0
- package/dist/collapsible/index.d.ts +2 -0
- package/dist/collapsible/index.js +1 -0
- package/dist/collapsible-C3OPWY9l.js +44 -0
- package/dist/collapsible-C3OPWY9l.js.map +1 -0
- package/dist/color-channel-slider/index.d.ts +2 -0
- package/dist/color-channel-slider/index.js +1 -0
- package/dist/color-channel-slider-h8mUPJ35.js +70 -0
- package/dist/color-channel-slider-h8mUPJ35.js.map +1 -0
- package/dist/color-picker/index.d.ts +137 -0
- package/dist/color-picker/index.js +621 -0
- package/dist/color-picker/index.js.map +1 -0
- package/dist/combobox/index.d.ts +64 -0
- package/dist/combobox/index.js +289 -0
- package/dist/combobox/index.js.map +1 -0
- package/dist/context-menu/index.d.ts +49 -0
- package/dist/context-menu/index.js +166 -0
- package/dist/context-menu/index.js.map +1 -0
- package/dist/copy-button/index.d.ts +2 -0
- package/dist/copy-button/index.js +1 -0
- package/dist/copy-button-BAG-P44v.js +28 -0
- package/dist/copy-button-BAG-P44v.js.map +1 -0
- package/dist/dialog/index.d.ts +36 -0
- package/dist/dialog/index.js +119 -0
- package/dist/dialog/index.js.map +1 -0
- package/dist/drawer/index.d.ts +31 -0
- package/dist/drawer/index.js +95 -0
- package/dist/drawer/index.js.map +1 -0
- package/dist/dropzone/index.d.ts +70 -0
- package/dist/dropzone/index.js +479 -0
- package/dist/dropzone/index.js.map +1 -0
- package/dist/field/index.d.ts +2 -0
- package/dist/field/index.js +1 -0
- package/dist/field-DkMfrmdj.js +254 -0
- package/dist/field-DkMfrmdj.js.map +1 -0
- package/dist/form/index.d.ts +220 -0
- package/dist/form/index.js +3 -0
- package/dist/form-V2VqHn0D.js +192 -0
- package/dist/form-V2VqHn0D.js.map +1 -0
- package/dist/has-single-element-child-DLGI0Dh2.js +12 -0
- package/dist/has-single-element-child-DLGI0Dh2.js.map +1 -0
- package/dist/hooks/index.d.ts +26 -0
- package/dist/hooks/index.js +1 -0
- package/dist/hooks-DUm-q_ig.js +68 -0
- package/dist/hooks-DUm-q_ig.js.map +1 -0
- package/dist/icon/index.d.ts +2 -0
- package/dist/icon/index.js +1 -0
- package/dist/icon-D3JWfCa2.js +85 -0
- package/dist/icon-D3JWfCa2.js.map +1 -0
- package/dist/icon-container/index.d.ts +10 -0
- package/dist/icon-container/index.js +64 -0
- package/dist/icon-container/index.js.map +1 -0
- package/dist/index-0ZQzIKoE.d.ts +11 -0
- package/dist/index-B0Qz4Egw.d.ts +33 -0
- package/dist/index-BJVMIPq4.d.ts +54 -0
- package/dist/index-BsV-u_jc.d.ts +4 -0
- package/dist/index-BygR7cUT.d.ts +22 -0
- package/dist/index-BzTOLSgZ.d.ts +9 -0
- package/dist/index-C15xiG9O.d.ts +14 -0
- package/dist/index-C2zco6-C.d.ts +15 -0
- package/dist/index-CIDOd4Z8.d.ts +56 -0
- package/dist/index-CQti9gFb.d.ts +49 -0
- package/dist/index-CiE-Rqit.d.ts +70 -0
- package/dist/index-CpNMNewO.d.ts +11 -0
- package/dist/index-D1kkOg9k.d.ts +14 -0
- package/dist/index-DLfdAked.d.ts +34 -0
- package/dist/index-DMaW_XF1.d.ts +24 -0
- package/dist/index-DVMheqs_.d.ts +9 -0
- package/dist/index-DXDObRKO.d.ts +14 -0
- package/dist/index-Db_QGr6S.d.ts +5 -0
- package/dist/index-DdFxZ3Xr.d.ts +22 -0
- package/dist/index-DyQYoAUf.d.ts +29 -0
- package/dist/index-PuhTRMce.d.ts +11 -0
- package/dist/index-Wb_tILYa.d.ts +24 -0
- package/dist/index-uaJUy56Z.d.ts +4 -0
- package/dist/index-x4f8gnaI.d.ts +15 -0
- package/dist/input/index.d.ts +3 -0
- package/dist/input/index.js +1 -0
- package/dist/input-Czt30vp7.js +179 -0
- package/dist/input-Czt30vp7.js.map +1 -0
- package/dist/input-group/index.d.ts +2 -0
- package/dist/input-group/index.js +1 -0
- package/dist/input-group-CgdazGrY.js +111 -0
- package/dist/input-group-CgdazGrY.js.map +1 -0
- package/dist/input-otp/index.d.ts +13 -0
- package/dist/input-otp/index.js +44 -0
- package/dist/input-otp/index.js.map +1 -0
- package/dist/input.types-816rEVWU.d.ts +20 -0
- package/dist/input.types-D0gyoaQv.js +48 -0
- package/dist/input.types-D0gyoaQv.js.map +1 -0
- package/dist/kbd/index.d.ts +9 -0
- package/dist/kbd/index.js +25 -0
- package/dist/kbd/index.js.map +1 -0
- package/dist/label/index.d.ts +8 -0
- package/dist/label/index.js +1 -0
- package/dist/label-BgpayDvN.js +27 -0
- package/dist/label-BgpayDvN.js.map +1 -0
- package/dist/layer-tree/index.d.ts +728 -0
- package/dist/layer-tree/index.js +685 -0
- package/dist/layer-tree/index.js.map +1 -0
- package/dist/map/google/index.d.ts +143 -0
- package/dist/map/google/index.js +445 -0
- package/dist/map/google/index.js.map +1 -0
- package/dist/map/index.d.ts +94 -0
- package/dist/map/index.js +208 -0
- package/dist/map/index.js.map +1 -0
- package/dist/map.context-Dw1D7E8m.js +11 -0
- package/dist/map.context-Dw1D7E8m.js.map +1 -0
- package/dist/menu/index.d.ts +2 -0
- package/dist/menu/index.js +1 -0
- package/dist/menu-sf13cnGp.js +173 -0
- package/dist/menu-sf13cnGp.js.map +1 -0
- package/dist/menu-tone-DWBEHoX2.js +22 -0
- package/dist/menu-tone-DWBEHoX2.js.map +1 -0
- package/dist/meter/index.d.ts +2 -0
- package/dist/meter/index.js +1 -0
- package/dist/meter-HD5taq57.js +116 -0
- package/dist/meter-HD5taq57.js.map +1 -0
- package/dist/nav-bar/index.d.ts +25 -0
- package/dist/nav-bar/index.js +133 -0
- package/dist/nav-bar/index.js.map +1 -0
- package/dist/navigation-menu/index.d.ts +43 -0
- package/dist/navigation-menu/index.js +176 -0
- package/dist/navigation-menu/index.js.map +1 -0
- package/dist/number-field/index.d.ts +14 -0
- package/dist/number-field/index.js +116 -0
- package/dist/number-field/index.js.map +1 -0
- package/dist/popover/index.d.ts +2 -0
- package/dist/popover/index.js +1 -0
- package/dist/popover-0WDxRi-s.js +114 -0
- package/dist/popover-0WDxRi-s.js.map +1 -0
- package/dist/preview-card/index.d.ts +13 -0
- package/dist/preview-card/index.js +35 -0
- package/dist/preview-card/index.js.map +1 -0
- package/dist/profile/index.d.ts +21 -0
- package/dist/profile/index.js +52 -0
- package/dist/profile/index.js.map +1 -0
- package/dist/progress/index.d.ts +23 -0
- package/dist/progress/index.js +97 -0
- package/dist/progress/index.js.map +1 -0
- package/dist/radar-ping/index.d.ts +11 -0
- package/dist/radar-ping/index.js +49 -0
- package/dist/radar-ping/index.js.map +1 -0
- package/dist/radio-group/index.d.ts +2 -0
- package/dist/radio-group/index.js +1 -0
- package/dist/radio-group-Dj43u35Z.js +47 -0
- package/dist/radio-group-Dj43u35Z.js.map +1 -0
- package/dist/resizeable/index.d.ts +11 -0
- package/dist/resizeable/index.js +31 -0
- package/dist/resizeable/index.js.map +1 -0
- package/dist/scroll-area/index.d.ts +11 -0
- package/dist/scroll-area/index.js +51 -0
- package/dist/scroll-area/index.js.map +1 -0
- package/dist/select/index.d.ts +2 -0
- package/dist/select/index.js +1 -0
- package/dist/select-DncJXYim.js +159 -0
- package/dist/select-DncJXYim.js.map +1 -0
- package/dist/separator/index.d.ts +2 -0
- package/dist/separator/index.js +1 -0
- package/dist/separator-DgIQp1cB.js +97 -0
- package/dist/separator-DgIQp1cB.js.map +1 -0
- package/dist/sidebar/index.d.ts +80 -0
- package/dist/sidebar/index.js +334 -0
- package/dist/sidebar/index.js.map +1 -0
- package/dist/site-header/index.d.ts +22 -0
- package/dist/site-header/index.js +55 -0
- package/dist/site-header/index.js.map +1 -0
- package/dist/skeleton/index.d.ts +4 -0
- package/dist/skeleton/index.js +1 -0
- package/dist/skeleton-DSG3FWby.js +13 -0
- package/dist/skeleton-DSG3FWby.js.map +1 -0
- package/dist/slider/index.d.ts +2 -0
- package/dist/slider/index.js +1 -0
- package/dist/slider-D_XlV4OW.js +114 -0
- package/dist/slider-D_XlV4OW.js.map +1 -0
- package/dist/slider-group/index.d.ts +46 -0
- package/dist/slider-group/index.js +198 -0
- package/dist/slider-group/index.js.map +1 -0
- package/dist/styles.css +4 -1
- package/dist/switch/index.d.ts +2 -0
- package/dist/switch/index.js +1 -0
- package/dist/switch-DXHixGHe.js +23 -0
- package/dist/switch-DXHixGHe.js.map +1 -0
- package/dist/table/index.d.ts +920 -0
- package/dist/table/index.js +1544 -0
- package/dist/table/index.js.map +1 -0
- package/dist/tabs/index.d.ts +2 -0
- package/dist/tabs/index.js +1 -0
- package/dist/tabs-DTC7coap.js +270 -0
- package/dist/tabs-DTC7coap.js.map +1 -0
- package/dist/text-area/index.d.ts +2 -0
- package/dist/text-area/index.js +1 -0
- package/dist/text-area-H6HjKnv_.js +50 -0
- package/dist/text-area-H6HjKnv_.js.map +1 -0
- package/dist/toast/index.d.ts +65 -0
- package/dist/toast/index.js +216 -0
- package/dist/toast/index.js.map +1 -0
- package/dist/toggle/index.d.ts +2 -0
- package/dist/toggle/index.js +1 -0
- package/dist/toggle-ZT9thVmz.js +73 -0
- package/dist/toggle-ZT9thVmz.js.map +1 -0
- package/dist/toggle-group/index.d.ts +10 -0
- package/dist/toggle-group/index.js +63 -0
- package/dist/toggle-group/index.js.map +1 -0
- package/dist/toggle-group-context-CBNZEf1I.js +6 -0
- package/dist/toggle-group-context-CBNZEf1I.js.map +1 -0
- package/dist/tooltip/index.d.ts +18 -0
- package/dist/tooltip/index.js +1 -0
- package/dist/tooltip-B6z3tDbW.js +41 -0
- package/dist/tooltip-B6z3tDbW.js.map +1 -0
- package/dist/trim-text-children-CQRFg2fL.js +33 -0
- package/dist/trim-text-children-CQRFg2fL.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils-BI2x7nW5.js +5 -0
- package/dist/utils-BI2x7nW5.js.map +1 -0
- package/package.json +100 -31
- package/dist/index.d.ts +0 -8000
- package/dist/index.js +0 -17274
- package/dist/index.js.map +0 -1
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { t as cn } from "../cn-BDi0DfT5.js";
|
|
2
|
+
import { n as Icon } from "../icon-D3JWfCa2.js";
|
|
3
|
+
import { t as Button } from "../button-DXQvyQyj.js";
|
|
4
|
+
import { t as Separator } from "../separator-DgIQp1cB.js";
|
|
5
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import React from "react";
|
|
7
|
+
import { Toast as Toast$1 } from "@base-ui/react/toast";
|
|
8
|
+
// src/components/toast/anchored-toast-item.tsx
|
|
9
|
+
function AnchoredToastItem({ className, ref, toast, ...props }) {
|
|
10
|
+
return /* @__PURE__ */ jsxs(Toast$1.Root, {
|
|
11
|
+
className: cn("group flex w-max origin-(--transform-origin) flex-col rounded-full bg-surface px-sm py-2xs shadow-lg transition-[transform,scale,opacity] data-ending-style:scale-90 data-ending-style:opacity-0 data-starting-style:scale-90 data-starting-style:opacity-0", className),
|
|
12
|
+
ref,
|
|
13
|
+
toast,
|
|
14
|
+
...props,
|
|
15
|
+
children: [/* @__PURE__ */ jsx(Toast$1.Arrow, { className: "data-[side=bottom]:-top-3xs data-[side=left]:right-[-13px] data-[side=left]:rotate-90 data-[side=right]:left-[-13px] data-[side=right]:-rotate-90 data-[side=top]:-bottom-3xs data-[side=top]:rotate-180" }), /* @__PURE__ */ jsx(Toast$1.Content, { children: /* @__PURE__ */ jsx(Toast$1.Description, { className: "style-text-default--1" }) })]
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
// src/components/toast/toast-manager.ts
|
|
19
|
+
const createToastManager = () => {
|
|
20
|
+
const manager = Toast$1.createToastManager(), add = (options) => manager.add({
|
|
21
|
+
...options,
|
|
22
|
+
data: {
|
|
23
|
+
...options.data,
|
|
24
|
+
icon: options.icon,
|
|
25
|
+
variant: options.variant
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
return {
|
|
29
|
+
...manager,
|
|
30
|
+
add
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
const useToastManager = () => {
|
|
34
|
+
const toast = Toast$1.useToastManager(), add = (options) => toast.add({
|
|
35
|
+
...options,
|
|
36
|
+
data: {
|
|
37
|
+
...options.data,
|
|
38
|
+
icon: options.icon,
|
|
39
|
+
variant: options.variant
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
return {
|
|
43
|
+
add,
|
|
44
|
+
toasts: toast.toasts
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
// src/components/toast/anchored-toasts.tsx
|
|
48
|
+
function AnchoredToasts({ className, ref, ...props }) {
|
|
49
|
+
const { toasts } = useToastManager();
|
|
50
|
+
return /* @__PURE__ */ jsx(Toast$1.Portal, { children: /* @__PURE__ */ jsx(Toast$1.Viewport, {
|
|
51
|
+
"aria-label": "Anchored notifications",
|
|
52
|
+
className: cn("fixed top-auto right-[1rem] bottom-[1rem] z-10 mx-auto flex w-[250px] sm:right-[2rem] sm:bottom-[2rem] sm:w-[300px]", className),
|
|
53
|
+
ref,
|
|
54
|
+
...props,
|
|
55
|
+
children: toasts.map((toast) => /* @__PURE__ */ jsx(Toast$1.Positioner, {
|
|
56
|
+
className: "z-[calc(1000-var(--toast-index))]",
|
|
57
|
+
toast,
|
|
58
|
+
children: /* @__PURE__ */ jsx(AnchoredToastItem, { toast })
|
|
59
|
+
}, toast.id))
|
|
60
|
+
}) });
|
|
61
|
+
}
|
|
62
|
+
// src/components/toast/stack-toast-item.tsx
|
|
63
|
+
const DEFAULT_DURATION = 1e4;
|
|
64
|
+
const RING_RADIUS = 14;
|
|
65
|
+
const RING_CIRCUMFERENCE = Math.PI * 28;
|
|
66
|
+
function getVariantBgColor(variant) {
|
|
67
|
+
switch (variant) {
|
|
68
|
+
case "brand": return "bg-brand-default";
|
|
69
|
+
case "accent": return "bg-accent-default";
|
|
70
|
+
case "neutral": return "bg-neutral-default";
|
|
71
|
+
case "error": return "bg-error-default";
|
|
72
|
+
case "info": return "bg-info-default";
|
|
73
|
+
case "success": return "bg-success-default";
|
|
74
|
+
case "warning": return "bg-warning-default";
|
|
75
|
+
default: return "bg-neutral-default";
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function getVariantBorderColor(variant) {
|
|
79
|
+
switch (variant) {
|
|
80
|
+
case "brand": return "border-brand-border-strong";
|
|
81
|
+
case "accent": return "border-accent-border-strong";
|
|
82
|
+
case "neutral": return "border-neutral-border-strong";
|
|
83
|
+
case "error": return "border-error-border-strong";
|
|
84
|
+
case "info": return "border-info-border-strong";
|
|
85
|
+
case "success": return "border-success-border-strong";
|
|
86
|
+
case "warning": return "border-warning-border-strong";
|
|
87
|
+
default: return "border-neutral-border-strong";
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function getVariantIcon(variant, icon) {
|
|
91
|
+
if (icon) return React.createElement(icon);
|
|
92
|
+
switch (variant) {
|
|
93
|
+
case "error": return /* @__PURE__ */ jsx(Icon, {
|
|
94
|
+
name: "error",
|
|
95
|
+
weight: "fill"
|
|
96
|
+
});
|
|
97
|
+
case "success": return /* @__PURE__ */ jsx(Icon, {
|
|
98
|
+
name: "success",
|
|
99
|
+
weight: "fill"
|
|
100
|
+
});
|
|
101
|
+
case "warning": return /* @__PURE__ */ jsx(Icon, {
|
|
102
|
+
name: "warning",
|
|
103
|
+
weight: "fill"
|
|
104
|
+
});
|
|
105
|
+
default: return /* @__PURE__ */ jsx(Icon, {
|
|
106
|
+
name: "info",
|
|
107
|
+
weight: "fill"
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
function StackToastItem({ className, ref, toast, ...props }) {
|
|
112
|
+
const duration = toast.timeout ?? DEFAULT_DURATION, variant = toast.data?.variant, icon = toast.data?.icon;
|
|
113
|
+
return /* @__PURE__ */ jsxs(Toast$1.Root, {
|
|
114
|
+
className: cn("absolute right-[0px] bottom-[0px] left-auto z-[calc(1000-var(--toast-index))] mr-[0px] flex h-2xl origin-bottom transform-[translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)-(var(--toast-index)*var(--peek))-(var(--shrink)*var(--height))))_scale(var(--scale))] items-center justify-center gap-xs overflow-hidden rounded-full border bg-surface bg-clip-padding pr-sm shadow-lg select-none [--gap:0.75rem] [--height:var(--toast-frontmost-height,var(--toast-height))] [--offset-y:calc(var(--toast-offset-y)*-1+calc(var(--toast-index)*var(--gap)*-1)+var(--toast-swipe-movement-y))] [--peek:0.75rem] [--scale:calc(max(0,1-(var(--toast-index)*0.1)))] [--shrink:calc(1-var(--scale))] [transition:transform_0.5s_cubic-bezier(0.22,1,0.36,1),opacity_0.5s,height_0.15s] after:absolute after:top-full after:left-[0px] after:w-full after:content-[''] data-ending-style:opacity-0 data-expanded:h-(--toast-height) data-expanded:transform-[translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--offset-y)))] data-limited:opacity-0 data-starting-style:transform-[translateY(150%)] data-ending-style:data-[swipe-direction=down]:transform-[translateY(calc(var(--toast-swipe-movement-y)+150%))] data-expanded:data-ending-style:data-[swipe-direction=down]:transform-[translateY(calc(var(--toast-swipe-movement-y)+150%))] data-ending-style:data-[swipe-direction=left]:transform-[translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))] data-expanded:data-ending-style:data-[swipe-direction=left]:transform-[translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))] data-ending-style:data-[swipe-direction=right]:transform-[translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))] data-expanded:data-ending-style:data-[swipe-direction=right]:transform-[translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))] data-ending-style:data-[swipe-direction=up]:transform-[translateY(calc(var(--toast-swipe-movement-y)-150%))] data-expanded:data-ending-style:data-[swipe-direction=up]:transform-[translateY(calc(var(--toast-swipe-movement-y)-150%))] [&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:transform-[translateY(150%)]", className, getVariantBorderColor(variant)),
|
|
115
|
+
ref,
|
|
116
|
+
toast,
|
|
117
|
+
...props,
|
|
118
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
119
|
+
className: cn("flex aspect-square size-2xl items-center justify-center [&>svg]:size-lg [&>svg]:text-on-surface-inverse", getVariantBgColor(variant)),
|
|
120
|
+
children: getVariantIcon(variant, icon)
|
|
121
|
+
}), /* @__PURE__ */ jsxs(Toast$1.Content, {
|
|
122
|
+
className: "flex items-center justify-center gap-3xs overflow-hidden pl-2xs transition-opacity duration-250 data-behind:pointer-events-none data-behind:opacity-0 data-expanded:pointer-events-auto data-expanded:opacity-100",
|
|
123
|
+
children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx(Toast$1.Title, { className: "style-text-strong--1" }), /* @__PURE__ */ jsx(Toast$1.Description, { className: "style-text-prose--1 whitespace-nowrap text-on-surface-variant" })] }), /* @__PURE__ */ jsxs("div", {
|
|
124
|
+
className: "ml-xl flex h-lg grow items-center justify-center gap-xs",
|
|
125
|
+
children: [
|
|
126
|
+
/* @__PURE__ */ jsx(Toast$1.Action, { render: ({ onClick, children }) => /* @__PURE__ */ jsx(Button, {
|
|
127
|
+
"data-testid": "toast-action-button",
|
|
128
|
+
onClick,
|
|
129
|
+
size: "small",
|
|
130
|
+
tone: toast.data?.variant,
|
|
131
|
+
variant: "soft",
|
|
132
|
+
children
|
|
133
|
+
}) }),
|
|
134
|
+
toast.actionProps && /* @__PURE__ */ jsx(Separator, {
|
|
135
|
+
variant: "strong",
|
|
136
|
+
orientation: "vertical",
|
|
137
|
+
weight: "thinnest"
|
|
138
|
+
}),
|
|
139
|
+
/* @__PURE__ */ jsxs(Toast$1.Close, {
|
|
140
|
+
"aria-label": "Close",
|
|
141
|
+
className: "relative flex size-sm items-center justify-center rounded-full bg-transparent p-xs text-on-surface-variant transition-colors hover:cursor-pointer hover:bg-error-container hover:text-error-on-container",
|
|
142
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
143
|
+
className: "pointer-events-none absolute inset-[0px] z-10 flex items-center justify-center",
|
|
144
|
+
children: /* @__PURE__ */ jsxs("svg", {
|
|
145
|
+
width: "100%",
|
|
146
|
+
height: "100%",
|
|
147
|
+
viewBox: "0 0 32 32",
|
|
148
|
+
className: "block -rotate-90",
|
|
149
|
+
children: [/* @__PURE__ */ jsx("style", { children: `
|
|
150
|
+
@keyframes toast-drain-${toast.id} {
|
|
151
|
+
from { stroke-dashoffset: 0; }
|
|
152
|
+
to { stroke-dashoffset: ${RING_CIRCUMFERENCE}; }
|
|
153
|
+
}
|
|
154
|
+
` }), /* @__PURE__ */ jsx("circle", {
|
|
155
|
+
cx: "16",
|
|
156
|
+
cy: "16",
|
|
157
|
+
r: RING_RADIUS,
|
|
158
|
+
fill: "none",
|
|
159
|
+
stroke: "currentColor",
|
|
160
|
+
strokeWidth: "2",
|
|
161
|
+
strokeDasharray: RING_CIRCUMFERENCE,
|
|
162
|
+
strokeLinecap: "round",
|
|
163
|
+
className: "text-error-border-strong",
|
|
164
|
+
style: { animation: `toast-drain-${toast.id} ${duration}ms linear forwards` }
|
|
165
|
+
})]
|
|
166
|
+
})
|
|
167
|
+
}), /* @__PURE__ */ jsx(Icon, {
|
|
168
|
+
name: "close",
|
|
169
|
+
className: "size-sm shrink-0"
|
|
170
|
+
})]
|
|
171
|
+
})
|
|
172
|
+
]
|
|
173
|
+
})]
|
|
174
|
+
})]
|
|
175
|
+
}, toast.id);
|
|
176
|
+
}
|
|
177
|
+
// src/components/toast/stack-toasts.tsx
|
|
178
|
+
function StackToasts({ className, ref, ...props }) {
|
|
179
|
+
const { toasts } = useToastManager();
|
|
180
|
+
return /* @__PURE__ */ jsx(Toast$1.Portal, { children: /* @__PURE__ */ jsx(Toast$1.Viewport, {
|
|
181
|
+
"aria-label": "Notifications",
|
|
182
|
+
className: cn("fixed top-auto right-[1rem] bottom-[1rem] z-10 mx-auto flex w-[250px] sm:right-[2rem] sm:bottom-[2rem] sm:w-[300px]", className),
|
|
183
|
+
ref,
|
|
184
|
+
...props,
|
|
185
|
+
children: toasts.map((toast) => /* @__PURE__ */ jsx(StackToastItem, { toast }, toast.id))
|
|
186
|
+
}) });
|
|
187
|
+
}
|
|
188
|
+
// src/components/toast/toast-managers.ts
|
|
189
|
+
const anchoredToastManager = createToastManager();
|
|
190
|
+
const stackToastManager = createToastManager();
|
|
191
|
+
// src/components/toast/toast-provider.tsx
|
|
192
|
+
function ToastProvider({ children }) {
|
|
193
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
194
|
+
/* @__PURE__ */ jsx(Toast$1.Provider, {
|
|
195
|
+
timeout: 1e4,
|
|
196
|
+
toastManager: anchoredToastManager,
|
|
197
|
+
children: /* @__PURE__ */ jsx(AnchoredToasts, {})
|
|
198
|
+
}),
|
|
199
|
+
/* @__PURE__ */ jsx(Toast$1.Provider, {
|
|
200
|
+
timeout: 1e4,
|
|
201
|
+
toastManager: stackToastManager,
|
|
202
|
+
children: /* @__PURE__ */ jsx(StackToasts, {})
|
|
203
|
+
}),
|
|
204
|
+
children
|
|
205
|
+
] });
|
|
206
|
+
}
|
|
207
|
+
// src/components/toast/toast.tsx
|
|
208
|
+
const Toast = Object.assign(ToastProvider, {
|
|
209
|
+
AnchoredToastItem,
|
|
210
|
+
AnchoredToasts,
|
|
211
|
+
StackToastItem,
|
|
212
|
+
StackToasts
|
|
213
|
+
});
|
|
214
|
+
export { AnchoredToastItem, AnchoredToasts, StackToastItem, StackToasts, Toast, ToastProvider, anchoredToastManager, stackToastManager, useToastManager };
|
|
215
|
+
|
|
216
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["BaseToast","BaseToast","BaseToast","BaseToast","BaseToast","BaseToast"],"sources":["../../src/components/toast/anchored-toast-item.tsx","../../src/components/toast/toast-manager.ts","../../src/components/toast/anchored-toasts.tsx","../../src/components/toast/stack-toast-item.tsx","../../src/components/toast/stack-toasts.tsx","../../src/components/toast/toast-managers.ts","../../src/components/toast/toast-provider.tsx","../../src/components/toast/toast.tsx"],"sourcesContent":["import { Toast as BaseToast } from '@base-ui/react/toast'\n\nimport { cn } from '@/utils/cn'\n\nimport type { AnchoredToastItemProps } from './toast.types'\n\nexport function AnchoredToastItem({ className, ref, toast, ...props }: AnchoredToastItemProps) {\n return (\n <BaseToast.Root\n className={cn(\n 'group flex w-max origin-(--transform-origin) flex-col rounded-full bg-surface px-sm py-2xs shadow-lg transition-[transform,scale,opacity] data-ending-style:scale-90 data-ending-style:opacity-0 data-starting-style:scale-90 data-starting-style:opacity-0',\n className,\n )}\n ref={ref}\n toast={toast}\n {...props}\n >\n <BaseToast.Arrow className=\"data-[side=bottom]:-top-3xs data-[side=left]:right-[-13px] data-[side=left]:rotate-90 data-[side=right]:left-[-13px] data-[side=right]:-rotate-90 data-[side=top]:-bottom-3xs data-[side=top]:rotate-180\" />\n <BaseToast.Content>\n <BaseToast.Description className=\"style-text-default--1\" />\n </BaseToast.Content>\n </BaseToast.Root>\n )\n}\n","import { Toast as BaseToast } from '@base-ui/react/toast'\nimport type { ToastManagerAddOptions } from '@base-ui/react/toast'\n\nimport type { IconComponent } from '../icon'\nimport type { ToastVariant } from './toast.types'\n\ntype ToastAddOptions = ToastManagerAddOptions<object> & {\n icon?: IconComponent\n variant?: ToastVariant\n}\n\nconst createToastManager = () => {\n const manager = BaseToast.createToastManager(),\n add = (options: ToastAddOptions) =>\n manager.add({\n ...options,\n data: {\n ...options.data,\n icon: options.icon,\n variant: options.variant,\n },\n })\n\n return {\n ...manager,\n add,\n }\n },\n useToastManager = () => {\n const toast = BaseToast.useToastManager(),\n add = (options: ToastAddOptions) =>\n toast.add({\n ...options,\n data: {\n ...options.data,\n icon: options.icon,\n variant: options.variant,\n },\n })\n\n return { add, toasts: toast.toasts }\n }\n\nexport { createToastManager, useToastManager }\n","import { Toast as BaseToast } from '@base-ui/react/toast'\n\nimport { cn } from '@/utils/cn'\n\nimport { AnchoredToastItem } from './anchored-toast-item'\nimport { useToastManager } from './toast-manager'\nimport type { AnchoredToastProps } from './toast.types'\n\nexport function AnchoredToasts({ className, ref, ...props }: AnchoredToastProps) {\n const { toasts } = useToastManager()\n\n return (\n <BaseToast.Portal>\n <BaseToast.Viewport\n aria-label=\"Anchored notifications\"\n className={cn(\n 'fixed top-auto right-[1rem] bottom-[1rem] z-10 mx-auto flex w-[250px] sm:right-[2rem] sm:bottom-[2rem] sm:w-[300px]',\n className,\n )}\n ref={ref}\n {...props}\n >\n {toasts.map((toast) => (\n <BaseToast.Positioner\n className=\"z-[calc(1000-var(--toast-index))]\"\n key={toast.id}\n toast={toast}\n >\n <AnchoredToastItem toast={toast} />\n </BaseToast.Positioner>\n ))}\n </BaseToast.Viewport>\n </BaseToast.Portal>\n )\n}\n","import { Toast as BaseToast } from '@base-ui/react/toast'\nimport React from 'react'\n\nimport { cn } from '@/utils/cn'\n\nimport { Button } from '../button'\nimport { Icon } from '../icon'\nimport type { IconComponent } from '../icon'\nimport { Separator } from '../separator'\nimport type { StackToastItemProps, ToastVariant } from './toast.types'\n\nconst DEFAULT_DURATION = 10_000,\n RING_RADIUS = 14,\n RING_DIAMETER = RING_RADIUS + RING_RADIUS,\n RING_CIRCUMFERENCE = Math.PI * RING_DIAMETER\n\nfunction getVariantBgColor(variant: ToastVariant | undefined): string {\n switch (variant) {\n case 'brand': {\n return 'bg-brand-default'\n }\n case 'accent': {\n return 'bg-accent-default'\n }\n case 'neutral': {\n return 'bg-neutral-default'\n }\n case 'error': {\n return 'bg-error-default'\n }\n case 'info': {\n return 'bg-info-default'\n }\n case 'success': {\n return 'bg-success-default'\n }\n case 'warning': {\n return 'bg-warning-default'\n }\n default: {\n return 'bg-neutral-default'\n }\n }\n}\n\nfunction getVariantBorderColor(variant: ToastVariant | undefined): string {\n switch (variant) {\n case 'brand': {\n return 'border-brand-border-strong'\n }\n case 'accent': {\n return 'border-accent-border-strong'\n }\n case 'neutral': {\n return 'border-neutral-border-strong'\n }\n case 'error': {\n return 'border-error-border-strong'\n }\n case 'info': {\n return 'border-info-border-strong'\n }\n case 'success': {\n return 'border-success-border-strong'\n }\n case 'warning': {\n return 'border-warning-border-strong'\n }\n default: {\n return 'border-neutral-border-strong'\n }\n }\n}\n\nfunction getVariantIcon(variant: ToastVariant | undefined, icon?: IconComponent) {\n if (icon) {\n return React.createElement(icon)\n }\n switch (variant) {\n case 'error': {\n return <Icon name=\"error\" weight=\"fill\" />\n }\n case 'success': {\n return <Icon name=\"success\" weight=\"fill\" />\n }\n case 'warning': {\n return <Icon name=\"warning\" weight=\"fill\" />\n }\n default: {\n return <Icon name=\"info\" weight=\"fill\" />\n }\n }\n}\n\nexport function StackToastItem({ className, ref, toast, ...props }: StackToastItemProps) {\n const duration = toast.timeout ?? DEFAULT_DURATION,\n variant = toast.data?.variant,\n icon = toast.data?.icon\n\n return (\n <BaseToast.Root\n className={cn(\n \"absolute right-[0px] bottom-[0px] left-auto z-[calc(1000-var(--toast-index))] mr-[0px] flex h-2xl origin-bottom transform-[translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)-(var(--toast-index)*var(--peek))-(var(--shrink)*var(--height))))_scale(var(--scale))] items-center justify-center gap-xs overflow-hidden rounded-full border bg-surface bg-clip-padding pr-sm shadow-lg select-none [--gap:0.75rem] [--height:var(--toast-frontmost-height,var(--toast-height))] [--offset-y:calc(var(--toast-offset-y)*-1+calc(var(--toast-index)*var(--gap)*-1)+var(--toast-swipe-movement-y))] [--peek:0.75rem] [--scale:calc(max(0,1-(var(--toast-index)*0.1)))] [--shrink:calc(1-var(--scale))] [transition:transform_0.5s_cubic-bezier(0.22,1,0.36,1),opacity_0.5s,height_0.15s] after:absolute after:top-full after:left-[0px] after:w-full after:content-[''] data-ending-style:opacity-0 data-expanded:h-(--toast-height) data-expanded:transform-[translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--offset-y)))] data-limited:opacity-0 data-starting-style:transform-[translateY(150%)] data-ending-style:data-[swipe-direction=down]:transform-[translateY(calc(var(--toast-swipe-movement-y)+150%))] data-expanded:data-ending-style:data-[swipe-direction=down]:transform-[translateY(calc(var(--toast-swipe-movement-y)+150%))] data-ending-style:data-[swipe-direction=left]:transform-[translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))] data-expanded:data-ending-style:data-[swipe-direction=left]:transform-[translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))] data-ending-style:data-[swipe-direction=right]:transform-[translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))] data-expanded:data-ending-style:data-[swipe-direction=right]:transform-[translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))] data-ending-style:data-[swipe-direction=up]:transform-[translateY(calc(var(--toast-swipe-movement-y)-150%))] data-expanded:data-ending-style:data-[swipe-direction=up]:transform-[translateY(calc(var(--toast-swipe-movement-y)-150%))] [&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:transform-[translateY(150%)]\",\n className,\n getVariantBorderColor(variant),\n )}\n key={toast.id}\n ref={ref}\n toast={toast}\n {...props}\n >\n <div\n className={cn(\n 'flex aspect-square size-2xl items-center justify-center [&>svg]:size-lg [&>svg]:text-on-surface-inverse',\n getVariantBgColor(variant),\n )}\n >\n {getVariantIcon(variant, icon)}\n </div>\n <BaseToast.Content className=\"flex items-center justify-center gap-3xs overflow-hidden pl-2xs transition-opacity duration-250 data-behind:pointer-events-none data-behind:opacity-0 data-expanded:pointer-events-auto data-expanded:opacity-100\">\n <div>\n <BaseToast.Title className=\"style-text-strong--1\" />\n <BaseToast.Description className=\"style-text-prose--1 whitespace-nowrap text-on-surface-variant\" />\n </div>\n <div className=\"ml-xl flex h-lg grow items-center justify-center gap-xs\">\n <BaseToast.Action\n render={({ onClick, children }) => (\n <Button\n data-testid=\"toast-action-button\"\n onClick={onClick}\n size=\"small\"\n tone={toast.data?.variant}\n variant=\"soft\"\n >\n {children}\n </Button>\n )}\n />\n {toast.actionProps && (\n <Separator variant=\"strong\" orientation=\"vertical\" weight=\"thinnest\" />\n )}\n <BaseToast.Close\n aria-label=\"Close\"\n className=\"relative flex size-sm items-center justify-center rounded-full bg-transparent p-xs text-on-surface-variant transition-colors hover:cursor-pointer hover:bg-error-container hover:text-error-on-container\"\n >\n <span className=\"pointer-events-none absolute inset-[0px] z-10 flex items-center justify-center\">\n <svg width=\"100%\" height=\"100%\" viewBox=\"0 0 32 32\" className=\"block -rotate-90\">\n <style>{`\n @keyframes toast-drain-${toast.id} {\n from { stroke-dashoffset: 0; }\n to { stroke-dashoffset: ${RING_CIRCUMFERENCE}; }\n }\n `}</style>\n <circle\n cx=\"16\"\n cy=\"16\"\n r={RING_RADIUS}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeDasharray={RING_CIRCUMFERENCE}\n strokeLinecap=\"round\"\n className=\"text-error-border-strong\"\n style={{\n animation: `toast-drain-${toast.id} ${duration}ms linear forwards`,\n }}\n />\n </svg>\n </span>\n\n <Icon name=\"close\" className=\"size-sm shrink-0\" />\n </BaseToast.Close>\n </div>\n </BaseToast.Content>\n </BaseToast.Root>\n )\n}\n","import { Toast as BaseToast } from '@base-ui/react/toast'\n\nimport { cn } from '@/utils/cn'\n\nimport { StackToastItem } from './stack-toast-item'\nimport { useToastManager } from './toast-manager'\nimport type { StackToastProps } from './toast.types'\n\nexport function StackToasts({ className, ref, ...props }: StackToastProps) {\n const { toasts } = useToastManager()\n\n return (\n <BaseToast.Portal>\n <BaseToast.Viewport\n aria-label=\"Notifications\"\n className={cn(\n 'fixed top-auto right-[1rem] bottom-[1rem] z-10 mx-auto flex w-[250px] sm:right-[2rem] sm:bottom-[2rem] sm:w-[300px]',\n className,\n )}\n ref={ref}\n {...props}\n >\n {toasts.map((toast) => (\n <StackToastItem key={toast.id} toast={toast} />\n ))}\n </BaseToast.Viewport>\n </BaseToast.Portal>\n )\n}\n","import { createToastManager } from './toast-manager'\n\nconst anchoredToastManager = createToastManager(),\n stackToastManager = createToastManager()\n\nexport { anchoredToastManager, stackToastManager }\n","import { Toast as BaseToast } from '@base-ui/react/toast'\n\nimport { AnchoredToasts } from './anchored-toasts'\nimport { StackToasts } from './stack-toasts'\nimport { anchoredToastManager, stackToastManager } from './toast-managers'\nimport type { ToastProviderProps } from './toast.types'\n\nexport function ToastProvider({ children }: ToastProviderProps) {\n return (\n <>\n <BaseToast.Provider timeout={10_000} toastManager={anchoredToastManager}>\n <AnchoredToasts />\n </BaseToast.Provider>\n <BaseToast.Provider timeout={10_000} toastManager={stackToastManager}>\n <StackToasts />\n </BaseToast.Provider>\n {children}\n </>\n )\n}\n","import { AnchoredToastItem } from './anchored-toast-item'\nimport { AnchoredToasts } from './anchored-toasts'\nimport { StackToastItem } from './stack-toast-item'\nimport { StackToasts } from './stack-toasts'\nimport { ToastProvider } from './toast-provider'\n\nconst Toast = Object.assign(ToastProvider, {\n AnchoredToastItem,\n AnchoredToasts,\n StackToastItem,\n StackToasts,\n})\n\nexport { Toast }\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { t as Toggle } from "../toggle-ZT9thVmz.js";
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { t as cn } from "./cn-BDi0DfT5.js";
|
|
2
|
+
import { t as hasSingleElementChild } from "./has-single-element-child-DLGI0Dh2.js";
|
|
3
|
+
import { t as trimTextChildren } from "./trim-text-children-CQRFg2fL.js";
|
|
4
|
+
import { t as ToggleGroupContext } from "./toggle-group-context-CBNZEf1I.js";
|
|
5
|
+
import { cva } from "class-variance-authority";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
import { useContext } from "react";
|
|
8
|
+
import { Toggle } from "@base-ui/react/toggle";
|
|
9
|
+
// src/components/toggle/toggle.types.ts
|
|
10
|
+
const toggleVariants = cva("flex items-center justify-center rounded-full text-on-surface-variant transition-all hover:cursor-pointer disabled:opacity-70", {
|
|
11
|
+
defaultVariants: {
|
|
12
|
+
size: "medium",
|
|
13
|
+
tone: "brand"
|
|
14
|
+
},
|
|
15
|
+
variants: {
|
|
16
|
+
size: {
|
|
17
|
+
large: "h-2xl gap-xs px-sm font-body text-base leading-none font-medium [&:where([data-icon-only]:has(>svg:only-child))]:size-2xl [&:where([data-icon-only]:has(>svg:only-child))]:p-0 [&>svg]:size-lg",
|
|
18
|
+
medium: "h-xl gap-2xs px-xs font-body text-sm leading-none font-medium [&:where([data-icon-only]:has(>svg:only-child))]:size-xl [&:where([data-icon-only]:has(>svg:only-child))]:p-0 [&>svg]:size-md",
|
|
19
|
+
small: "h-lg gap-3xs px-2xs font-body text-xs leading-none font-medium [&:where([data-icon-only]:has(>svg:only-child))]:size-lg [&:where([data-icon-only]:has(>svg:only-child))]:p-0 [&>svg]:size-sm"
|
|
20
|
+
},
|
|
21
|
+
tone: {
|
|
22
|
+
accent: "hover:not-disabled:bg-accent-container hover:not-disabled:text-accent-on-container data-pressed:text-accent-default",
|
|
23
|
+
brand: "hover:not-disabled:bg-brand-container hover:not-disabled:text-brand-on-container data-pressed:text-brand-default",
|
|
24
|
+
error: "hover:not-disabled:bg-error-container hover:not-disabled:text-error-on-container data-pressed:text-error-default",
|
|
25
|
+
info: "hover:not-disabled:bg-info-container hover:not-disabled:text-info-on-container data-pressed:text-info-default",
|
|
26
|
+
neutral: "hover:not-disabled:bg-neutral-container hover:not-disabled:text-neutral-on-container data-pressed:text-neutral-default",
|
|
27
|
+
success: "hover:not-disabled:bg-success-container hover:not-disabled:text-success-on-container data-pressed:text-success-default",
|
|
28
|
+
warning: "hover:not-disabled:bg-warning-container hover:not-disabled:text-warning-on-container data-pressed:text-warning-default"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
const toggleGroupHoverVariants = cva("", {
|
|
33
|
+
defaultVariants: { tone: "brand" },
|
|
34
|
+
variants: { tone: {
|
|
35
|
+
accent: "hover:not-disabled:bg-accent-container-high",
|
|
36
|
+
brand: "hover:not-disabled:bg-brand-container-high",
|
|
37
|
+
error: "hover:not-disabled:bg-error-container-high",
|
|
38
|
+
info: "hover:not-disabled:bg-info-container-high",
|
|
39
|
+
neutral: "hover:not-disabled:bg-neutral-container-high",
|
|
40
|
+
success: "hover:not-disabled:bg-success-container-high",
|
|
41
|
+
warning: "hover:not-disabled:bg-warning-container-high"
|
|
42
|
+
} }
|
|
43
|
+
});
|
|
44
|
+
// src/components/toggle/toggle.tsx
|
|
45
|
+
function getContent(children, state) {
|
|
46
|
+
if (typeof children === "function") return children(state);
|
|
47
|
+
return children;
|
|
48
|
+
}
|
|
49
|
+
function Toggle$1({ size, tone, className, children, ref, ...props }) {
|
|
50
|
+
const toggleGroupContext = useContext(ToggleGroupContext), effectiveSize = size ?? toggleGroupContext?.size ?? "medium";
|
|
51
|
+
return /* @__PURE__ */ jsx(Toggle, {
|
|
52
|
+
ref,
|
|
53
|
+
...props,
|
|
54
|
+
render: (innerProps, state) => {
|
|
55
|
+
const content = getContent(children, state);
|
|
56
|
+
let iconOnly = void 0;
|
|
57
|
+
if (hasSingleElementChild(content)) iconOnly = "";
|
|
58
|
+
return /* @__PURE__ */ jsx("button", {
|
|
59
|
+
...innerProps,
|
|
60
|
+
"data-icon-only": iconOnly,
|
|
61
|
+
className: cn(toggleVariants({
|
|
62
|
+
size: effectiveSize,
|
|
63
|
+
tone
|
|
64
|
+
}), toggleGroupContext?.hasBackground && toggleGroupHoverVariants({ tone }), className),
|
|
65
|
+
type: "button",
|
|
66
|
+
children: trimTextChildren(content)
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
export { Toggle$1 as t };
|
|
72
|
+
|
|
73
|
+
//# sourceMappingURL=toggle-ZT9thVmz.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toggle-ZT9thVmz.js","names":["Toggle","BaseToggle"],"sources":["../src/components/toggle/toggle.types.ts","../src/components/toggle/toggle.tsx"],"sourcesContent":["import type { Toggle, ToggleState } from '@base-ui/react'\nimport { cva } from 'class-variance-authority'\nimport type { VariantProps } from 'class-variance-authority'\n\nexport const toggleVariants = cva(\n 'flex items-center justify-center rounded-full text-on-surface-variant transition-all hover:cursor-pointer disabled:opacity-70',\n {\n defaultVariants: {\n size: 'medium',\n tone: 'brand',\n },\n variants: {\n size: {\n large:\n 'h-2xl gap-xs px-sm font-body text-base leading-none font-medium [&:where([data-icon-only]:has(>svg:only-child))]:size-2xl [&:where([data-icon-only]:has(>svg:only-child))]:p-0 [&>svg]:size-lg',\n medium:\n 'h-xl gap-2xs px-xs font-body text-sm leading-none font-medium [&:where([data-icon-only]:has(>svg:only-child))]:size-xl [&:where([data-icon-only]:has(>svg:only-child))]:p-0 [&>svg]:size-md',\n small:\n 'h-lg gap-3xs px-2xs font-body text-xs leading-none font-medium [&:where([data-icon-only]:has(>svg:only-child))]:size-lg [&:where([data-icon-only]:has(>svg:only-child))]:p-0 [&>svg]:size-sm',\n },\n tone: {\n accent:\n 'hover:not-disabled:bg-accent-container hover:not-disabled:text-accent-on-container data-pressed:text-accent-default',\n brand:\n 'hover:not-disabled:bg-brand-container hover:not-disabled:text-brand-on-container data-pressed:text-brand-default',\n error:\n 'hover:not-disabled:bg-error-container hover:not-disabled:text-error-on-container data-pressed:text-error-default',\n info: 'hover:not-disabled:bg-info-container hover:not-disabled:text-info-on-container data-pressed:text-info-default',\n neutral:\n 'hover:not-disabled:bg-neutral-container hover:not-disabled:text-neutral-on-container data-pressed:text-neutral-default',\n success:\n 'hover:not-disabled:bg-success-container hover:not-disabled:text-success-on-container data-pressed:text-success-default',\n warning:\n 'hover:not-disabled:bg-warning-container hover:not-disabled:text-warning-on-container data-pressed:text-warning-default',\n },\n },\n },\n ),\n toggleGroupHoverVariants = cva('', {\n defaultVariants: {\n tone: 'brand',\n },\n variants: {\n tone: {\n accent: 'hover:not-disabled:bg-accent-container-high',\n brand: 'hover:not-disabled:bg-brand-container-high',\n error: 'hover:not-disabled:bg-error-container-high',\n info: 'hover:not-disabled:bg-info-container-high',\n neutral: 'hover:not-disabled:bg-neutral-container-high',\n success: 'hover:not-disabled:bg-success-container-high',\n warning: 'hover:not-disabled:bg-warning-container-high',\n },\n },\n })\n\nexport type ToggleProps = Omit<React.ComponentProps<typeof Toggle>, 'children'> &\n VariantProps<typeof toggleVariants> & {\n children?: React.ReactNode | ((state: ToggleState) => React.ReactNode)\n }\n","import type { ToggleState } from '@base-ui/react'\nimport { Toggle as BaseToggle } from '@base-ui/react/toggle'\nimport { useContext } from 'react'\nimport type { ReactNode } from 'react'\n\nimport { cn } from '@/utils/cn'\nimport { hasSingleElementChild } from '@/utils/has-single-element-child'\nimport { trimTextChildren } from '@/utils/trim-text-children'\n\nimport { ToggleGroupContext } from '../toggle-group/toggle-group-context'\nimport { toggleGroupHoverVariants, toggleVariants } from './toggle.types'\nimport type { ToggleProps } from './toggle.types'\n\nfunction getContent(children: ToggleProps['children'], state: ToggleState): ReactNode {\n if (typeof children === 'function') {\n return children(state)\n }\n return children\n}\n\nexport function Toggle({ size, tone, className, children, ref, ...props }: ToggleProps) {\n const toggleGroupContext = useContext(ToggleGroupContext),\n effectiveSize = size ?? toggleGroupContext?.size ?? 'medium'\n\n return (\n <BaseToggle\n ref={ref}\n {...props}\n render={(innerProps, state) => {\n const content = getContent(children, state)\n let iconOnly: '' | undefined = undefined\n\n if (hasSingleElementChild(content)) {\n iconOnly = ''\n }\n\n return (\n <button\n {...innerProps}\n data-icon-only={iconOnly}\n className={cn(\n toggleVariants({ size: effectiveSize, tone }),\n toggleGroupContext?.hasBackground && toggleGroupHoverVariants({ tone }),\n className,\n )}\n type=\"button\"\n >\n {trimTextChildren(content)}\n </button>\n )\n }}\n />\n )\n}\n"],"mappings":";;;;;;;;;AAIA,MAAa,iBAAiB,IAC1B,iIACA;CACE,iBAAiB;EACf,MAAM;EACN,MAAM;CACR;CACA,UAAU;EACR,MAAM;GACJ,OACE;GACF,QACE;GACF,OACE;EACJ;EACA,MAAM;GACJ,QACE;GACF,OACE;GACF,OACE;GACF,MAAM;GACN,SACE;GACF,SACE;GACF,SACE;EACJ;CACF;AACF,CACF;AACA,MAAA,2BAA2B,IAAI,IAAI;CACjC,iBAAiB,EACf,MAAM,QACR;CACA,UAAU,EACR,MAAM;EACJ,QAAQ;EACR,OAAO;EACP,OAAO;EACP,MAAM;EACN,SAAS;EACT,SAAS;EACT,SAAS;CACX,EACF;AACF,CAAC;;ACxCH,SAAS,WAAW,UAAmC,OAA+B;CACpF,IAAI,OAAO,aAAa,YACtB,OAAO,SAAS,KAAK;CAEvB,OAAO;AACT;AAEA,SAAgBA,SAAO,EAAE,MAAM,MAAM,WAAW,UAAU,KAAK,GAAG,SAAsB;CACtF,MAAM,qBAAqB,WAAW,kBAAkB,GACtD,gBAAgB,QAAQ,oBAAoB,QAAQ;CAEtD,OACE,oBAACC,QAAD;EACO;EACL,GAAI;EACJ,SAAS,YAAY,UAAU;GAC7B,MAAM,UAAU,WAAW,UAAU,KAAK;GAC1C,IAAI,WAA2B,KAAA;GAE/B,IAAI,sBAAsB,OAAO,GAC/B,WAAW;GAGb,OACE,oBAAC,UAAD;IACE,GAAI;IACJ,kBAAgB;IAChB,WAAW,GACT,eAAe;KAAE,MAAM;KAAe;IAAK,CAAC,GAC5C,oBAAoB,iBAAiB,yBAAyB,EAAE,KAAK,CAAC,GACtE,SACF;IACA,MAAK;IAEJ,UAAA,iBAAiB,OAAO;GACnB,CAAA;EAEZ;CACD,CAAA;AAEL"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { VariantProps } from "class-variance-authority";
|
|
2
|
+
import { ToggleGroup as ToggleGroup$1 } from "@base-ui/react/toggle-group";
|
|
3
|
+
declare const toggleGroupVariants: (props?: ({
|
|
4
|
+
size?: "large" | "medium" | "small" | null | undefined;
|
|
5
|
+
variant?: "default" | "ghost" | null | undefined;
|
|
6
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
7
|
+
type ToggleGroupProps = React.ComponentProps<typeof ToggleGroup$1> & VariantProps<typeof toggleGroupVariants>;
|
|
8
|
+
export declare function ToggleGroup({ size, variant, className, ref, ...props }: ToggleGroupProps): import("react").JSX.Element;
|
|
9
|
+
export type { ToggleGroupProps };
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { t as cn } from "../cn-BDi0DfT5.js";
|
|
2
|
+
import { t as ToggleGroupContext } from "../toggle-group-context-CBNZEf1I.js";
|
|
3
|
+
import { cva } from "class-variance-authority";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
|
+
import { ToggleGroup as ToggleGroup$1 } from "@base-ui/react/toggle-group";
|
|
6
|
+
// src/components/toggle-group/toggle-group.types.ts
|
|
7
|
+
const toggleGroupVariants = cva("group flex w-fit items-center justify-center gap-3xs rounded-full", {
|
|
8
|
+
compoundVariants: [
|
|
9
|
+
{
|
|
10
|
+
className: "p-3xs",
|
|
11
|
+
size: "small",
|
|
12
|
+
variant: "default"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
className: "p-2xs",
|
|
16
|
+
size: "medium",
|
|
17
|
+
variant: "default"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
className: "p-2xs",
|
|
21
|
+
size: "large",
|
|
22
|
+
variant: "default"
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
defaultVariants: {
|
|
26
|
+
size: "medium",
|
|
27
|
+
variant: "default"
|
|
28
|
+
},
|
|
29
|
+
variants: {
|
|
30
|
+
size: {
|
|
31
|
+
large: "",
|
|
32
|
+
medium: "",
|
|
33
|
+
small: ""
|
|
34
|
+
},
|
|
35
|
+
variant: {
|
|
36
|
+
default: "bg-surface-low",
|
|
37
|
+
ghost: "bg-transparent"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
// src/components/toggle-group/toggle-group.tsx
|
|
42
|
+
function ToggleGroup({ size = "medium", variant, className, ref, ...props }) {
|
|
43
|
+
const displaySize = size ?? "medium", hasBackground = variant === void 0 || variant === "default";
|
|
44
|
+
return /* @__PURE__ */ jsx(ToggleGroupContext.Provider, {
|
|
45
|
+
value: {
|
|
46
|
+
hasBackground,
|
|
47
|
+
size: displaySize
|
|
48
|
+
},
|
|
49
|
+
children: /* @__PURE__ */ jsx(ToggleGroup$1, {
|
|
50
|
+
className: cn(toggleGroupVariants({
|
|
51
|
+
className,
|
|
52
|
+
size: displaySize,
|
|
53
|
+
variant
|
|
54
|
+
})),
|
|
55
|
+
"data-size": displaySize,
|
|
56
|
+
ref,
|
|
57
|
+
...props
|
|
58
|
+
})
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
export { ToggleGroup };
|
|
62
|
+
|
|
63
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["BaseToggleGroup"],"sources":["../../src/components/toggle-group/toggle-group.types.ts","../../src/components/toggle-group/toggle-group.tsx"],"sourcesContent":["import type { ToggleGroup } from '@base-ui/react/toggle-group'\nimport { cva } from 'class-variance-authority'\nimport type { VariantProps } from 'class-variance-authority'\n\nexport const toggleGroupVariants = cva(\n 'group flex w-fit items-center justify-center gap-3xs rounded-full',\n {\n compoundVariants: [\n {\n className: 'p-3xs',\n size: 'small',\n variant: 'default',\n },\n {\n className: 'p-2xs',\n size: 'medium',\n variant: 'default',\n },\n {\n className: 'p-2xs',\n size: 'large',\n variant: 'default',\n },\n ],\n defaultVariants: {\n size: 'medium',\n variant: 'default',\n },\n variants: {\n size: {\n large: '',\n medium: '',\n small: '',\n },\n variant: {\n default: 'bg-surface-low',\n ghost: 'bg-transparent',\n },\n },\n },\n)\n\nexport type ToggleGroupProps = React.ComponentProps<typeof ToggleGroup> &\n VariantProps<typeof toggleGroupVariants>\n","import { ToggleGroup as BaseToggleGroup } from '@base-ui/react/toggle-group'\n\nimport { cn } from '@/utils/cn'\n\nimport { ToggleGroupContext } from './toggle-group-context'\nimport { toggleGroupVariants } from './toggle-group.types'\nimport type { ToggleGroupProps } from './toggle-group.types'\n\nexport function ToggleGroup({\n size = 'medium',\n variant,\n className,\n ref,\n ...props\n}: ToggleGroupProps) {\n const displaySize = size ?? 'medium',\n hasBackground = variant === undefined || variant === 'default'\n return (\n <ToggleGroupContext.Provider value={{ hasBackground, size: displaySize }}>\n <BaseToggleGroup\n className={cn(toggleGroupVariants({ className, size: displaySize, variant }))}\n data-size={displaySize}\n ref={ref}\n {...props}\n />\n </ToggleGroupContext.Provider>\n )\n}\n"],"mappings":";;;;;;AAIA,MAAa,sBAAsB,IACjC,qEACA;CACE,kBAAkB;EAChB;GACE,WAAW;GACX,MAAM;GACN,SAAS;EACX;EACA;GACE,WAAW;GACX,MAAM;GACN,SAAS;EACX;EACA;GACE,WAAW;GACX,MAAM;GACN,SAAS;EACX;CACF;CACA,iBAAiB;EACf,MAAM;EACN,SAAS;CACX;CACA,UAAU;EACR,MAAM;GACJ,OAAO;GACP,QAAQ;GACR,OAAO;EACT;EACA,SAAS;GACP,SAAS;GACT,OAAO;EACT;CACF;AACF,CACF;;AChCA,SAAgB,YAAY,EAC1B,OAAO,UACP,SACA,WACA,KACA,GAAG,SACgB;CACnB,MAAM,cAAc,QAAQ,UAC1B,gBAAgB,YAAY,KAAA,KAAa,YAAY;CACvD,OACE,oBAAC,mBAAmB,UAApB;EAA6B,OAAO;GAAE;GAAe,MAAM;EAAY;EACrE,UAAA,oBAACA,eAAD;GACE,WAAW,GAAG,oBAAoB;IAAE;IAAW,MAAM;IAAa;GAAQ,CAAC,CAAC;GAC5E,aAAW;GACN;GACL,GAAI;EACL,CAAA;CAC0B,CAAA;AAEjC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toggle-group-context-CBNZEf1I.js","names":[],"sources":["../src/components/toggle-group/toggle-group-context.ts"],"sourcesContent":["import { createContext, useContext } from 'react'\n\ninterface ToggleGroupContextType {\n hasBackground: boolean\n size?: 'small' | 'medium' | 'large'\n}\n\nconst ToggleGroupContext = createContext<ToggleGroupContextType | undefined>(undefined),\n useToggleGroupContext = () => {\n const context = useContext(ToggleGroupContext)\n return context\n }\n\nexport { ToggleGroupContext, useToggleGroupContext }\nexport type { ToggleGroupContextType }\n"],"mappings":";;AAOA,MAAM,qBAAqB,cAAkD,KAAA,CAAS"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ComponentProps } from "react";
|
|
2
|
+
import { Tooltip as Tooltip$1 } from "@base-ui/react/tooltip";
|
|
3
|
+
type TooltipProps = ComponentProps<typeof Tooltip$1.Root>;
|
|
4
|
+
type TooltipTriggerProps = ComponentProps<typeof Tooltip$1.Trigger>;
|
|
5
|
+
type TooltipContentProps = ComponentProps<typeof Tooltip$1.Popup> & {
|
|
6
|
+
side?: 'top' | 'right' | 'bottom' | 'left';
|
|
7
|
+
alignOffset?: number;
|
|
8
|
+
sideOffset?: number;
|
|
9
|
+
};
|
|
10
|
+
declare function Tooltip$2({ ...props }: TooltipProps): import("react").JSX.Element;
|
|
11
|
+
export declare function TooltipContent({ side, alignOffset, sideOffset, className, children, ...props }: TooltipContentProps): import("react").JSX.Element;
|
|
12
|
+
export declare function TooltipTrigger({ children, ...props }: TooltipTriggerProps): import("react").JSX.Element;
|
|
13
|
+
declare const Tooltip: typeof Tooltip$2 & {
|
|
14
|
+
Content: typeof TooltipContent;
|
|
15
|
+
Trigger: typeof TooltipTrigger;
|
|
16
|
+
};
|
|
17
|
+
export { Tooltip, type TooltipContentProps, type TooltipProps, type TooltipTriggerProps };
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { t as Tooltip, r as TooltipContent, n as TooltipTrigger } from "../tooltip-B6z3tDbW.js";
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { t as cn } from "./cn-BDi0DfT5.js";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { isValidElement } from "react";
|
|
4
|
+
import { Tooltip } from "@base-ui/react/tooltip";
|
|
5
|
+
// src/components/tooltip/tooltip.tsx
|
|
6
|
+
function Tooltip$2({ ...props }) {
|
|
7
|
+
return /* @__PURE__ */ jsx(Tooltip.Provider, { children: /* @__PURE__ */ jsx(Tooltip.Root, { ...props }) });
|
|
8
|
+
}
|
|
9
|
+
// src/components/tooltip/tooltip-context.tsx
|
|
10
|
+
const DEFAULT_ALIGN_OFFSET = 0;
|
|
11
|
+
const DEFAULT_SIDE_OFFSET = 5;
|
|
12
|
+
function TooltipContent({ side = "top", alignOffset = DEFAULT_ALIGN_OFFSET, sideOffset = DEFAULT_SIDE_OFFSET, className, children, ...props }) {
|
|
13
|
+
return /* @__PURE__ */ jsx(Tooltip.Portal, { children: /* @__PURE__ */ jsx(Tooltip.Positioner, {
|
|
14
|
+
className: "z-50",
|
|
15
|
+
side,
|
|
16
|
+
alignOffset,
|
|
17
|
+
sideOffset,
|
|
18
|
+
children: /* @__PURE__ */ jsx(Tooltip.Popup, {
|
|
19
|
+
className: cn("w-fit origin-(--transform-origin) animate-in rounded-md bg-surface-2 px-xs py-3xs text-sm text-balance shadow-md fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95", className),
|
|
20
|
+
...props,
|
|
21
|
+
children
|
|
22
|
+
})
|
|
23
|
+
}) });
|
|
24
|
+
}
|
|
25
|
+
// src/components/tooltip/tooltip-trigger.tsx
|
|
26
|
+
function TooltipTrigger({ children, ...props }) {
|
|
27
|
+
let render = void 0;
|
|
28
|
+
if (isValidElement(children)) render = children;
|
|
29
|
+
return /* @__PURE__ */ jsx(Tooltip.Trigger, {
|
|
30
|
+
render,
|
|
31
|
+
...props
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
// src/components/tooltip/index.ts
|
|
35
|
+
const Tooltip$1 = Object.assign(Tooltip$2, {
|
|
36
|
+
Content: TooltipContent,
|
|
37
|
+
Trigger: TooltipTrigger
|
|
38
|
+
});
|
|
39
|
+
export { TooltipTrigger as n, TooltipContent as r, Tooltip$1 as t };
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=tooltip-B6z3tDbW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tooltip-B6z3tDbW.js","names":["Tooltip","BaseTooltip","BaseTooltip","BaseTooltip","Tooltip","TooltipRoot"],"sources":["../src/components/tooltip/tooltip.tsx","../src/components/tooltip/tooltip-context.tsx","../src/components/tooltip/tooltip-trigger.tsx","../src/components/tooltip/index.ts"],"sourcesContent":["import { Tooltip as BaseTooltip } from '@base-ui/react/tooltip'\n\nimport type { TooltipProps } from './tooltip.types'\n\nexport function Tooltip({ ...props }: TooltipProps) {\n return (\n <BaseTooltip.Provider>\n <BaseTooltip.Root {...props} />\n </BaseTooltip.Provider>\n )\n}\n","import { Tooltip as BaseTooltip } from '@base-ui/react/tooltip'\n\nimport { cn } from '@/utils/cn'\n\nimport type { TooltipContentProps } from './tooltip.types'\n\nconst DEFAULT_ALIGN_OFFSET = 0,\n DEFAULT_SIDE_OFFSET = 5\n\nexport function TooltipContent({\n side = 'top',\n alignOffset = DEFAULT_ALIGN_OFFSET,\n sideOffset = DEFAULT_SIDE_OFFSET,\n className,\n children,\n ...props\n}: TooltipContentProps) {\n return (\n <BaseTooltip.Portal>\n <BaseTooltip.Positioner\n className=\"z-50\"\n side={side}\n alignOffset={alignOffset}\n sideOffset={sideOffset}\n >\n <BaseTooltip.Popup\n className={cn(\n 'w-fit origin-(--transform-origin) animate-in rounded-md bg-surface-2 px-xs py-3xs text-sm text-balance shadow-md fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n className,\n )}\n {...props}\n >\n {children}\n </BaseTooltip.Popup>\n </BaseTooltip.Positioner>\n </BaseTooltip.Portal>\n )\n}\n","import { Tooltip as BaseTooltip } from '@base-ui/react/tooltip'\nimport { isValidElement } from 'react'\nimport type { ReactElement } from 'react'\n\nimport type { TooltipTriggerProps } from './tooltip.types'\n\nexport function TooltipTrigger({ children, ...props }: TooltipTriggerProps) {\n let render: ReactElement | undefined = undefined\n if (isValidElement(children)) {\n render = children\n }\n\n return <BaseTooltip.Trigger render={render} {...props} />\n}\n","import { Tooltip as TooltipRoot } from './tooltip'\nimport { TooltipContent } from './tooltip-context'\nimport { TooltipTrigger } from './tooltip-trigger'\n\nconst Tooltip = Object.assign(TooltipRoot, {\n Content: TooltipContent,\n Trigger: TooltipTrigger,\n})\n\nexport type { TooltipContentProps, TooltipProps, TooltipTriggerProps } from './tooltip.types'\nexport { TooltipContent } from './tooltip-context'\nexport { TooltipTrigger } from './tooltip-trigger'\n\nexport { Tooltip }\n"],"mappings":";;;;;AAIA,SAAgBA,UAAQ,EAAE,GAAG,SAAuB;CAClD,OACE,oBAACC,QAAY,UAAb,EAAA,UACE,oBAACA,QAAY,MAAb,EAAkB,GAAI,MAAQ,CAAA,EACV,CAAA;AAE1B;;ACJA,MAAM,uBAAuB;AAC3B,MAAA,sBAAsB;AAExB,SAAgB,eAAe,EAC7B,OAAO,OACP,cAAc,sBACd,aAAa,qBACb,WACA,UACA,GAAG,SACmB;CACtB,OACE,oBAACC,QAAY,QAAb,EAAA,UACE,oBAACA,QAAY,YAAb;EACE,WAAU;EACJ;EACO;EACD;EAEZ,UAAA,oBAACA,QAAY,OAAb;GACE,WAAW,GACT,oYACA,SACF;GACA,GAAI;GAEH;EACgB,CAAA;CACG,CAAA,EACN,CAAA;AAExB;;AC/BA,SAAgB,eAAe,EAAE,UAAU,GAAG,SAA8B;CAC1E,IAAI,SAAmC,KAAA;CACvC,IAAI,eAAe,QAAQ,GACzB,SAAS;CAGX,OAAO,oBAACC,QAAY,SAAb;EAA6B;EAAQ,GAAI;CAAQ,CAAA;AAC1D;;ACTA,MAAMC,YAAU,OAAO,OAAOC,WAAa;CACzC,SAAS;CACT,SAAS;AACX,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Children, Fragment as Fragment$1, isValidElement } from "react";
|
|
3
|
+
// src/utils/trim-text-children.tsx
|
|
4
|
+
const EMPTY = 0;
|
|
5
|
+
/**
|
|
6
|
+
* Wraps loose text children in a `text-box-trim` span. Flex containers can't trim their
|
|
7
|
+
* anonymous text items, so without this the text is centred on rounded font metrics and
|
|
8
|
+
* drifts off-centre at fluid font sizes and browser zoom levels.
|
|
9
|
+
*/
|
|
10
|
+
function trimTextChildren(children) {
|
|
11
|
+
const result = [], text = [], flush = () => {
|
|
12
|
+
if (text.length === EMPTY) return;
|
|
13
|
+
result.push(/* @__PURE__ */ jsx("span", {
|
|
14
|
+
"data-slot": "text",
|
|
15
|
+
className: "text-box-trim",
|
|
16
|
+
children: text.join("")
|
|
17
|
+
}, `trim-text-${result.length}`));
|
|
18
|
+
text.length = EMPTY;
|
|
19
|
+
};
|
|
20
|
+
for (const child of Children.toArray(children)) if (typeof child === "string" || typeof child === "number") text.push(child);
|
|
21
|
+
else if (isValidElement(child) && child.type === Fragment$1) {
|
|
22
|
+
flush();
|
|
23
|
+
result.push(/* @__PURE__ */ jsx(Fragment$1, { children: trimTextChildren(child.props.children) }, child.key));
|
|
24
|
+
} else {
|
|
25
|
+
flush();
|
|
26
|
+
result.push(child);
|
|
27
|
+
}
|
|
28
|
+
flush();
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
export { trimTextChildren as t };
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=trim-text-children-CQRFg2fL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trim-text-children-CQRFg2fL.js","names":["Fragment"],"sources":["../src/utils/trim-text-children.tsx"],"sourcesContent":["import { Children, Fragment, isValidElement } from 'react'\nimport type { ReactNode } from 'react'\n\nconst EMPTY = 0\n\n/**\n * Wraps loose text children in a `text-box-trim` span. Flex containers can't trim their\n * anonymous text items, so without this the text is centred on rounded font metrics and\n * drifts off-centre at fluid font sizes and browser zoom levels.\n */\nexport function trimTextChildren(children: ReactNode): ReactNode {\n const result: ReactNode[] = [],\n text: (string | number)[] = [],\n flush = () => {\n if (text.length === EMPTY) {\n return\n }\n result.push(\n <span key={`trim-text-${result.length}`} data-slot=\"text\" className=\"text-box-trim\">\n {text.join('')}\n </span>,\n )\n text.length = EMPTY\n }\n\n for (const child of Children.toArray(children)) {\n if (typeof child === 'string' || typeof child === 'number') {\n text.push(child)\n } else if (isValidElement<{ children?: ReactNode }>(child) && child.type === Fragment) {\n flush()\n result.push(<Fragment key={child.key}>{trimTextChildren(child.props.children)}</Fragment>)\n } else {\n flush()\n result.push(child)\n }\n }\n flush()\n\n return result\n}\n"],"mappings":";;;AAGA,MAAM,QAAQ;;;;;;AAOd,SAAgB,iBAAiB,UAAgC;CAC/D,MAAM,SAAsB,CAAC,GAC3B,OAA4B,CAAC,GAC7B,cAAc;EACZ,IAAI,KAAK,WAAW,OAClB;EAEF,OAAO,KACL,oBAAC,QAAD;GAAyC,aAAU;GAAO,WAAU;GACjE,UAAA,KAAK,KAAK,EAAE;EACT,GAFK,aAAa,OAAO,QAEzB,CACR;EACA,KAAK,SAAS;CAChB;CAEF,KAAK,MAAM,SAAS,SAAS,QAAQ,QAAQ,GAC3C,IAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAChD,KAAK,KAAK,KAAK;MACV,IAAI,eAAyC,KAAK,KAAK,MAAM,SAASA,YAAU;EACrF,MAAM;EACN,OAAO,KAAK,oBAACA,YAAD,EAAA,UAA2B,iBAAiB,MAAM,MAAM,QAAQ,EAAY,GAA7D,MAAM,GAAuD,CAAC;CAC3F,OAAO;EACL,MAAM;EACN,OAAO,KAAK,KAAK;CACnB;CAEF,MAAM;CAEN,OAAO;AACT"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-BI2x7nW5.js","names":[],"sources":["../src/utils/date-time.ts"],"sourcesContent":["export const formatDate = (\n date: Date,\n locale?: Intl.LocalesArgument,\n options?: Intl.DateTimeFormatOptions,\n): string => new Intl.DateTimeFormat(locale, options).format(date)\n"],"mappings":";AAAA,MAAa,cACX,MACA,QACA,YACW,IAAI,KAAK,eAAe,QAAQ,OAAO,CAAC,CAAC,OAAO,IAAI"}
|