@stableflow/pay-ui 0.0.1-beta-82ede460a5-20260923
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/autocomplete/index.d.ts +27 -0
- package/dist/autocomplete/index.js +229 -0
- package/dist/autocomplete/index.js.map +1 -0
- package/dist/button/index.d.ts +28 -0
- package/dist/button/index.js +83 -0
- package/dist/button/index.js.map +1 -0
- package/dist/card/index.d.ts +7 -0
- package/dist/card/index.js +8 -0
- package/dist/card/index.js.map +1 -0
- package/dist/checkbox/index.d.ts +11 -0
- package/dist/checkbox/index.js +54 -0
- package/dist/checkbox/index.js.map +1 -0
- package/dist/chunk-6OV2OZVR.js +34 -0
- package/dist/chunk-6OV2OZVR.js.map +1 -0
- package/dist/chunk-AIJAGS5R.js +223 -0
- package/dist/chunk-AIJAGS5R.js.map +1 -0
- package/dist/chunk-DON56HU7.js +113 -0
- package/dist/chunk-DON56HU7.js.map +1 -0
- package/dist/chunk-FXENEWNN.js +7 -0
- package/dist/chunk-FXENEWNN.js.map +1 -0
- package/dist/chunk-J5TQGGEN.js +57 -0
- package/dist/chunk-J5TQGGEN.js.map +1 -0
- package/dist/chunk-MJ36QLY3.js +23 -0
- package/dist/chunk-MJ36QLY3.js.map +1 -0
- package/dist/chunk-NZGSPYWG.js +34 -0
- package/dist/chunk-NZGSPYWG.js.map +1 -0
- package/dist/chunk-OGSFVQK2.js +34 -0
- package/dist/chunk-OGSFVQK2.js.map +1 -0
- package/dist/chunk-R46DAHYR.js +14 -0
- package/dist/chunk-R46DAHYR.js.map +1 -0
- package/dist/chunk-R4BKHISR.js +34 -0
- package/dist/chunk-R4BKHISR.js.map +1 -0
- package/dist/chunk-RUOUGZWI.js +73 -0
- package/dist/chunk-RUOUGZWI.js.map +1 -0
- package/dist/chunk-SE7Z4ZYP.js +34 -0
- package/dist/chunk-SE7Z4ZYP.js.map +1 -0
- package/dist/chunk-TUEV2KLC.js +11 -0
- package/dist/chunk-TUEV2KLC.js.map +1 -0
- package/dist/chunk-VAPGLPZ5.js +184 -0
- package/dist/chunk-VAPGLPZ5.js.map +1 -0
- package/dist/date-range-picker/index.d.ts +42 -0
- package/dist/date-range-picker/index.js +272 -0
- package/dist/date-range-picker/index.js.map +1 -0
- package/dist/dialog/index.d.ts +7 -0
- package/dist/dialog/index.js +116 -0
- package/dist/dialog/index.js.map +1 -0
- package/dist/drawer/index.d.ts +17 -0
- package/dist/drawer/index.js +15 -0
- package/dist/drawer/index.js.map +1 -0
- package/dist/dropdown/index.d.ts +29 -0
- package/dist/dropdown/index.js +198 -0
- package/dist/dropdown/index.js.map +1 -0
- package/dist/icons/alert.d.ts +6 -0
- package/dist/icons/alert.js +9 -0
- package/dist/icons/alert.js.map +1 -0
- package/dist/icons/all-networks.d.ts +6 -0
- package/dist/icons/all-networks.js +30 -0
- package/dist/icons/all-networks.js.map +1 -0
- package/dist/icons/arrow-down.d.ts +6 -0
- package/dist/icons/arrow-down.js +9 -0
- package/dist/icons/arrow-down.js.map +1 -0
- package/dist/icons/back.d.ts +6 -0
- package/dist/icons/back.js +47 -0
- package/dist/icons/back.js.map +1 -0
- package/dist/icons/bonus.d.ts +6 -0
- package/dist/icons/bonus.js +33 -0
- package/dist/icons/bonus.js.map +1 -0
- package/dist/icons/book.d.ts +6 -0
- package/dist/icons/book.js +30 -0
- package/dist/icons/book.js.map +1 -0
- package/dist/icons/calendar.d.ts +6 -0
- package/dist/icons/calendar.js +33 -0
- package/dist/icons/calendar.js.map +1 -0
- package/dist/icons/cash.d.ts +6 -0
- package/dist/icons/cash.js +33 -0
- package/dist/icons/cash.js.map +1 -0
- package/dist/icons/check.d.ts +6 -0
- package/dist/icons/check.js +9 -0
- package/dist/icons/check.js.map +1 -0
- package/dist/icons/chevron.d.ts +6 -0
- package/dist/icons/chevron.js +33 -0
- package/dist/icons/chevron.js.map +1 -0
- package/dist/icons/close.d.ts +6 -0
- package/dist/icons/close.js +9 -0
- package/dist/icons/close.js.map +1 -0
- package/dist/icons/cloud.d.ts +6 -0
- package/dist/icons/cloud.js +33 -0
- package/dist/icons/cloud.js.map +1 -0
- package/dist/icons/code.d.ts +6 -0
- package/dist/icons/code.js +36 -0
- package/dist/icons/code.js.map +1 -0
- package/dist/icons/copy.d.ts +6 -0
- package/dist/icons/copy.js +33 -0
- package/dist/icons/copy.js.map +1 -0
- package/dist/icons/database.d.ts +6 -0
- package/dist/icons/database.js +33 -0
- package/dist/icons/database.js.map +1 -0
- package/dist/icons/delete.d.ts +6 -0
- package/dist/icons/delete.js +33 -0
- package/dist/icons/delete.js.map +1 -0
- package/dist/icons/download.d.ts +6 -0
- package/dist/icons/download.js +30 -0
- package/dist/icons/download.js.map +1 -0
- package/dist/icons/duration.d.ts +6 -0
- package/dist/icons/duration.js +36 -0
- package/dist/icons/duration.js.map +1 -0
- package/dist/icons/email.d.ts +6 -0
- package/dist/icons/email.js +30 -0
- package/dist/icons/email.js.map +1 -0
- package/dist/icons/expense-user.d.ts +6 -0
- package/dist/icons/expense-user.js +33 -0
- package/dist/icons/expense-user.js.map +1 -0
- package/dist/icons/expense.d.ts +6 -0
- package/dist/icons/expense.js +30 -0
- package/dist/icons/expense.js.map +1 -0
- package/dist/icons/eye.d.ts +8 -0
- package/dist/icons/eye.js +59 -0
- package/dist/icons/eye.js.map +1 -0
- package/dist/icons/fee.d.ts +6 -0
- package/dist/icons/fee.js +34 -0
- package/dist/icons/fee.js.map +1 -0
- package/dist/icons/field-error.d.ts +6 -0
- package/dist/icons/field-error.js +40 -0
- package/dist/icons/field-error.js.map +1 -0
- package/dist/icons/flask.d.ts +6 -0
- package/dist/icons/flask.js +33 -0
- package/dist/icons/flask.js.map +1 -0
- package/dist/icons/google.d.ts +6 -0
- package/dist/icons/google.js +54 -0
- package/dist/icons/google.js.map +1 -0
- package/dist/icons/grants.d.ts +6 -0
- package/dist/icons/grants.js +33 -0
- package/dist/icons/grants.js.map +1 -0
- package/dist/icons/guard.d.ts +6 -0
- package/dist/icons/guard.js +33 -0
- package/dist/icons/guard.js.map +1 -0
- package/dist/icons/history.d.ts +6 -0
- package/dist/icons/history.js +33 -0
- package/dist/icons/history.js.map +1 -0
- package/dist/icons/import-file.d.ts +6 -0
- package/dist/icons/import-file.js +30 -0
- package/dist/icons/import-file.js.map +1 -0
- package/dist/icons/key.d.ts +6 -0
- package/dist/icons/key.js +34 -0
- package/dist/icons/key.js.map +1 -0
- package/dist/icons/kol-mkt.d.ts +6 -0
- package/dist/icons/kol-mkt.js +33 -0
- package/dist/icons/kol-mkt.js.map +1 -0
- package/dist/icons/link.d.ts +9 -0
- package/dist/icons/link.js +85 -0
- package/dist/icons/link.js.map +1 -0
- package/dist/icons/loading.d.ts +6 -0
- package/dist/icons/loading.js +9 -0
- package/dist/icons/loading.js.map +1 -0
- package/dist/icons/lock.d.ts +6 -0
- package/dist/icons/lock.js +33 -0
- package/dist/icons/lock.js.map +1 -0
- package/dist/icons/logout.d.ts +6 -0
- package/dist/icons/logout.js +33 -0
- package/dist/icons/logout.js.map +1 -0
- package/dist/icons/meno.d.ts +6 -0
- package/dist/icons/meno.js +33 -0
- package/dist/icons/meno.js.map +1 -0
- package/dist/icons/menu.d.ts +6 -0
- package/dist/icons/menu.js +33 -0
- package/dist/icons/menu.js.map +1 -0
- package/dist/icons/money.d.ts +6 -0
- package/dist/icons/money.js +33 -0
- package/dist/icons/money.js.map +1 -0
- package/dist/icons/more.d.ts +6 -0
- package/dist/icons/more.js +30 -0
- package/dist/icons/more.js.map +1 -0
- package/dist/icons/node.d.ts +6 -0
- package/dist/icons/node.js +33 -0
- package/dist/icons/node.js.map +1 -0
- package/dist/icons/office.d.ts +6 -0
- package/dist/icons/office.js +33 -0
- package/dist/icons/office.js.map +1 -0
- package/dist/icons/operations.d.ts +6 -0
- package/dist/icons/operations.js +33 -0
- package/dist/icons/operations.js.map +1 -0
- package/dist/icons/otc-treasury.d.ts +6 -0
- package/dist/icons/otc-treasury.js +33 -0
- package/dist/icons/otc-treasury.js.map +1 -0
- package/dist/icons/outsourcing.d.ts +6 -0
- package/dist/icons/outsourcing.js +33 -0
- package/dist/icons/outsourcing.js.map +1 -0
- package/dist/icons/overview.d.ts +6 -0
- package/dist/icons/overview.js +33 -0
- package/dist/icons/overview.js.map +1 -0
- package/dist/icons/pay.d.ts +6 -0
- package/dist/icons/pay.js +36 -0
- package/dist/icons/pay.js.map +1 -0
- package/dist/icons/payment.d.ts +6 -0
- package/dist/icons/payment.js +33 -0
- package/dist/icons/payment.js.map +1 -0
- package/dist/icons/payout-status.d.ts +8 -0
- package/dist/icons/payout-status.js +92 -0
- package/dist/icons/payout-status.js.map +1 -0
- package/dist/icons/payroll.d.ts +6 -0
- package/dist/icons/payroll.js +62 -0
- package/dist/icons/payroll.js.map +1 -0
- package/dist/icons/pen.d.ts +6 -0
- package/dist/icons/pen.js +33 -0
- package/dist/icons/pen.js.map +1 -0
- package/dist/icons/plus.d.ts +6 -0
- package/dist/icons/plus.js +33 -0
- package/dist/icons/plus.js.map +1 -0
- package/dist/icons/processing.d.ts +6 -0
- package/dist/icons/processing.js +34 -0
- package/dist/icons/processing.js.map +1 -0
- package/dist/icons/procurement.d.ts +6 -0
- package/dist/icons/procurement.js +33 -0
- package/dist/icons/procurement.js.map +1 -0
- package/dist/icons/question.d.ts +6 -0
- package/dist/icons/question.js +30 -0
- package/dist/icons/question.js.map +1 -0
- package/dist/icons/receipt.d.ts +6 -0
- package/dist/icons/receipt.js +30 -0
- package/dist/icons/receipt.js.map +1 -0
- package/dist/icons/records.d.ts +8 -0
- package/dist/icons/records.js +63 -0
- package/dist/icons/records.js.map +1 -0
- package/dist/icons/refresh.d.ts +6 -0
- package/dist/icons/refresh.js +33 -0
- package/dist/icons/refresh.js.map +1 -0
- package/dist/icons/reimbursement.d.ts +6 -0
- package/dist/icons/reimbursement.js +33 -0
- package/dist/icons/reimbursement.js.map +1 -0
- package/dist/icons/remove.d.ts +6 -0
- package/dist/icons/remove.js +50 -0
- package/dist/icons/remove.js.map +1 -0
- package/dist/icons/request.d.ts +6 -0
- package/dist/icons/request.js +30 -0
- package/dist/icons/request.js.map +1 -0
- package/dist/icons/reset-password.d.ts +6 -0
- package/dist/icons/reset-password.js +33 -0
- package/dist/icons/reset-password.js.map +1 -0
- package/dist/icons/search.d.ts +6 -0
- package/dist/icons/search.js +9 -0
- package/dist/icons/search.js.map +1 -0
- package/dist/icons/setting.d.ts +6 -0
- package/dist/icons/setting.js +33 -0
- package/dist/icons/setting.js.map +1 -0
- package/dist/icons/settings.d.ts +6 -0
- package/dist/icons/settings.js +30 -0
- package/dist/icons/settings.js.map +1 -0
- package/dist/icons/shield.d.ts +6 -0
- package/dist/icons/shield.js +33 -0
- package/dist/icons/shield.js.map +1 -0
- package/dist/icons/success.d.ts +6 -0
- package/dist/icons/success.js +34 -0
- package/dist/icons/success.js.map +1 -0
- package/dist/icons/support.d.ts +6 -0
- package/dist/icons/support.js +33 -0
- package/dist/icons/support.js.map +1 -0
- package/dist/icons/swap.d.ts +6 -0
- package/dist/icons/swap.js +42 -0
- package/dist/icons/swap.js.map +1 -0
- package/dist/icons/team.d.ts +6 -0
- package/dist/icons/team.js +33 -0
- package/dist/icons/team.js.map +1 -0
- package/dist/icons/to-right.d.ts +6 -0
- package/dist/icons/to-right.js +35 -0
- package/dist/icons/to-right.js.map +1 -0
- package/dist/icons/types.d.ts +8 -0
- package/dist/icons/types.js +1 -0
- package/dist/icons/types.js.map +1 -0
- package/dist/icons/up.d.ts +8 -0
- package/dist/icons/up.js +59 -0
- package/dist/icons/up.js.map +1 -0
- package/dist/icons/wallet.d.ts +6 -0
- package/dist/icons/wallet.js +42 -0
- package/dist/icons/wallet.js.map +1 -0
- package/dist/icons/webhooks.d.ts +6 -0
- package/dist/icons/webhooks.js +30 -0
- package/dist/icons/webhooks.js.map +1 -0
- package/dist/input-number/index.d.ts +10 -0
- package/dist/input-number/index.js +55 -0
- package/dist/input-number/index.js.map +1 -0
- package/dist/overlay/index.d.ts +48 -0
- package/dist/overlay/index.js +41 -0
- package/dist/overlay/index.js.map +1 -0
- package/dist/pagination/index.d.ts +11 -0
- package/dist/pagination/index.js +55 -0
- package/dist/pagination/index.js.map +1 -0
- package/dist/search-input/index.d.ts +13 -0
- package/dist/search-input/index.js +60 -0
- package/dist/search-input/index.js.map +1 -0
- package/dist/skeleton/index.d.ts +7 -0
- package/dist/skeleton/index.js +8 -0
- package/dist/skeleton/index.js.map +1 -0
- package/dist/switch/index.d.ts +14 -0
- package/dist/switch/index.js +79 -0
- package/dist/switch/index.js.map +1 -0
- package/dist/table/index.d.ts +29 -0
- package/dist/table/index.js +95 -0
- package/dist/table/index.js.map +1 -0
- package/dist/toast/index.d.ts +21 -0
- package/dist/toast/index.js +85 -0
- package/dist/toast/index.js.map +1 -0
- package/dist/tooltip/index.d.ts +17 -0
- package/dist/tooltip/index.js +104 -0
- package/dist/tooltip/index.js.map +1 -0
- package/dist/types-DNElDQZ9.d.ts +23 -0
- package/dist/use-floating-position-aNqQwkre.d.ts +33 -0
- package/package.json +111 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import {
|
|
2
|
+
IconClose
|
|
3
|
+
} from "./chunk-J5TQGGEN.js";
|
|
4
|
+
import {
|
|
5
|
+
Card
|
|
6
|
+
} from "./chunk-MJ36QLY3.js";
|
|
7
|
+
import {
|
|
8
|
+
OVERLAY_BASE_Z_INDEX,
|
|
9
|
+
OVERLAY_DIALOG_PANEL_FADE_SECONDS,
|
|
10
|
+
OVERLAY_EXIT_SECONDS,
|
|
11
|
+
OVERLAY_MASK_FADE_SECONDS,
|
|
12
|
+
OVERLAY_PANEL_SLIDE_SECONDS,
|
|
13
|
+
acquireOverlayLayer,
|
|
14
|
+
elevatedOverlayZIndex,
|
|
15
|
+
isTopOverlay,
|
|
16
|
+
releaseOverlayLayer
|
|
17
|
+
} from "./chunk-RUOUGZWI.js";
|
|
18
|
+
import {
|
|
19
|
+
fontSans
|
|
20
|
+
} from "./chunk-FXENEWNN.js";
|
|
21
|
+
import {
|
|
22
|
+
cn
|
|
23
|
+
} from "./chunk-TUEV2KLC.js";
|
|
24
|
+
|
|
25
|
+
// src/overlay/Overlay.tsx
|
|
26
|
+
import { useEffect, useLayoutEffect as useLayoutEffect2, useState as useState2 } from "react";
|
|
27
|
+
import { createPortal } from "react-dom";
|
|
28
|
+
import { AnimatePresence, motion } from "motion/react";
|
|
29
|
+
|
|
30
|
+
// src/overlay/use-overlay-layer.ts
|
|
31
|
+
import { useLayoutEffect, useState } from "react";
|
|
32
|
+
function useOverlayLayer(open) {
|
|
33
|
+
const [zIndex, setZIndex] = useState(OVERLAY_BASE_Z_INDEX);
|
|
34
|
+
useLayoutEffect(() => {
|
|
35
|
+
if (!open) return;
|
|
36
|
+
const nextZIndex = acquireOverlayLayer();
|
|
37
|
+
setZIndex(nextZIndex);
|
|
38
|
+
return () => {
|
|
39
|
+
releaseOverlayLayer(nextZIndex);
|
|
40
|
+
};
|
|
41
|
+
}, [open]);
|
|
42
|
+
return zIndex;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// src/overlay/Overlay.tsx
|
|
46
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
47
|
+
function Overlay(props) {
|
|
48
|
+
const {
|
|
49
|
+
type = "dialog",
|
|
50
|
+
open,
|
|
51
|
+
onClose,
|
|
52
|
+
mask = true,
|
|
53
|
+
maskClassName,
|
|
54
|
+
closeOnMaskClick = true,
|
|
55
|
+
children,
|
|
56
|
+
className,
|
|
57
|
+
elevated = false
|
|
58
|
+
} = props;
|
|
59
|
+
const [present, setPresent] = useState2(open);
|
|
60
|
+
useLayoutEffect2(() => {
|
|
61
|
+
if (open) setPresent(true);
|
|
62
|
+
}, [open]);
|
|
63
|
+
const zIndex = useOverlayLayer(open || present);
|
|
64
|
+
const visualZIndex = elevated ? elevatedOverlayZIndex(zIndex) : zIndex;
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
if (!open) return;
|
|
67
|
+
const onKeyDown = (event) => {
|
|
68
|
+
if (event.key !== "Escape") return;
|
|
69
|
+
if (!isTopOverlay(zIndex)) return;
|
|
70
|
+
onClose?.();
|
|
71
|
+
};
|
|
72
|
+
document.addEventListener("keydown", onKeyDown);
|
|
73
|
+
return () => document.removeEventListener("keydown", onKeyDown);
|
|
74
|
+
}, [open, onClose, zIndex]);
|
|
75
|
+
if (typeof document === "undefined") return null;
|
|
76
|
+
if (!open && !present) return null;
|
|
77
|
+
return createPortal(
|
|
78
|
+
/* @__PURE__ */ jsx(AnimatePresence, { onExitComplete: () => setPresent(false), children: open ? /* @__PURE__ */ jsxs(
|
|
79
|
+
motion.div,
|
|
80
|
+
{
|
|
81
|
+
className: cn("fixed inset-0 overflow-hidden", !mask && "pointer-events-none", className),
|
|
82
|
+
style: { zIndex: visualZIndex },
|
|
83
|
+
role: "presentation",
|
|
84
|
+
initial: { opacity: 1 },
|
|
85
|
+
animate: { opacity: 1 },
|
|
86
|
+
exit: { opacity: 1 },
|
|
87
|
+
transition: { duration: OVERLAY_EXIT_SECONDS },
|
|
88
|
+
children: [
|
|
89
|
+
/* @__PURE__ */ jsx(
|
|
90
|
+
motion.div,
|
|
91
|
+
{
|
|
92
|
+
className: cn(
|
|
93
|
+
"absolute inset-0",
|
|
94
|
+
mask ? "bg-[rgba(0,0,0,0.50)]" : "bg-transparent",
|
|
95
|
+
!closeOnMaskClick && "pointer-events-none",
|
|
96
|
+
maskClassName
|
|
97
|
+
),
|
|
98
|
+
initial: { opacity: 0 },
|
|
99
|
+
animate: { opacity: 1, transition: { duration: OVERLAY_MASK_FADE_SECONDS, delay: 0 } },
|
|
100
|
+
exit: {
|
|
101
|
+
opacity: 0,
|
|
102
|
+
transition: {
|
|
103
|
+
duration: OVERLAY_MASK_FADE_SECONDS,
|
|
104
|
+
delay: type === "drawer" ? OVERLAY_PANEL_SLIDE_SECONDS : OVERLAY_DIALOG_PANEL_FADE_SECONDS
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
onClick: closeOnMaskClick ? onClose : void 0
|
|
108
|
+
}
|
|
109
|
+
),
|
|
110
|
+
children
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
"overlay-root"
|
|
114
|
+
) : null }),
|
|
115
|
+
document.body
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// src/overlay/OverlayPanel.tsx
|
|
120
|
+
import { useEffect as useEffect2, useId } from "react";
|
|
121
|
+
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
122
|
+
function OverlayPanel(props) {
|
|
123
|
+
const {
|
|
124
|
+
title,
|
|
125
|
+
ariaLabel,
|
|
126
|
+
titleClassName,
|
|
127
|
+
closeClassName,
|
|
128
|
+
closeIcon,
|
|
129
|
+
headerAction,
|
|
130
|
+
onClose,
|
|
131
|
+
cardClassName,
|
|
132
|
+
contentClassName,
|
|
133
|
+
children,
|
|
134
|
+
style,
|
|
135
|
+
trapFocus = true
|
|
136
|
+
} = props;
|
|
137
|
+
const panelId = useId();
|
|
138
|
+
const titleId = panelId + "-title";
|
|
139
|
+
const hasTitle = title !== void 0 && title !== null && title !== "";
|
|
140
|
+
useEffect2(() => {
|
|
141
|
+
if (!trapFocus) return;
|
|
142
|
+
const panel = document.getElementById(panelId);
|
|
143
|
+
if (!panel) return;
|
|
144
|
+
const previouslyFocused = document.activeElement instanceof HTMLElement ? document.activeElement : null;
|
|
145
|
+
panel.focus({ preventScroll: true });
|
|
146
|
+
const handleKeyDown = (event) => {
|
|
147
|
+
if (event.key !== "Tab") return;
|
|
148
|
+
const focusableElements = Array.from(
|
|
149
|
+
panel.querySelectorAll(
|
|
150
|
+
'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])'
|
|
151
|
+
)
|
|
152
|
+
).filter((element) => element.getAttribute("aria-hidden") !== "true" && element.getClientRects().length > 0);
|
|
153
|
+
if (focusableElements.length === 0) {
|
|
154
|
+
event.preventDefault();
|
|
155
|
+
panel.focus({ preventScroll: true });
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const firstElement = focusableElements[0];
|
|
159
|
+
const lastElement = focusableElements[focusableElements.length - 1];
|
|
160
|
+
const activeElement = document.activeElement;
|
|
161
|
+
if (event.shiftKey && (activeElement === panel || activeElement === firstElement || !panel.contains(activeElement))) {
|
|
162
|
+
event.preventDefault();
|
|
163
|
+
lastElement.focus({ preventScroll: true });
|
|
164
|
+
} else if (!event.shiftKey && activeElement === lastElement) {
|
|
165
|
+
event.preventDefault();
|
|
166
|
+
firstElement.focus({ preventScroll: true });
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
panel.addEventListener("keydown", handleKeyDown);
|
|
170
|
+
return () => {
|
|
171
|
+
panel.removeEventListener("keydown", handleKeyDown);
|
|
172
|
+
if (previouslyFocused?.isConnected) previouslyFocused.focus({ preventScroll: true });
|
|
173
|
+
};
|
|
174
|
+
}, [panelId, trapFocus]);
|
|
175
|
+
return /* @__PURE__ */ jsxs2(
|
|
176
|
+
Card,
|
|
177
|
+
{
|
|
178
|
+
id: panelId,
|
|
179
|
+
role: "dialog",
|
|
180
|
+
"aria-modal": trapFocus ? "true" : void 0,
|
|
181
|
+
"aria-labelledby": hasTitle ? titleId : void 0,
|
|
182
|
+
"aria-label": hasTitle ? void 0 : ariaLabel,
|
|
183
|
+
tabIndex: -1,
|
|
184
|
+
className: cn("relative flex flex-col gap-5", cardClassName),
|
|
185
|
+
style,
|
|
186
|
+
onClick: (event) => event.stopPropagation(),
|
|
187
|
+
children: [
|
|
188
|
+
/* @__PURE__ */ jsxs2("div", { className: "relative flex shrink-0 items-center gap-3", children: [
|
|
189
|
+
/* @__PURE__ */ jsx2(
|
|
190
|
+
"h2",
|
|
191
|
+
{
|
|
192
|
+
id: hasTitle ? titleId : void 0,
|
|
193
|
+
className: cn(
|
|
194
|
+
"min-h-5 min-w-0 text-[20px] font-semibold leading-normal text-black",
|
|
195
|
+
fontSans,
|
|
196
|
+
titleClassName
|
|
197
|
+
),
|
|
198
|
+
children: title
|
|
199
|
+
}
|
|
200
|
+
),
|
|
201
|
+
headerAction,
|
|
202
|
+
/* @__PURE__ */ jsx2(
|
|
203
|
+
"button",
|
|
204
|
+
{
|
|
205
|
+
type: "button",
|
|
206
|
+
"aria-label": "Close",
|
|
207
|
+
onClick: onClose,
|
|
208
|
+
className: cn("ml-auto shrink-0 cursor-pointer border-0 bg-transparent p-0 text-black", closeClassName),
|
|
209
|
+
children: closeIcon ?? /* @__PURE__ */ jsx2(IconClose, { className: "size-3.25" })
|
|
210
|
+
}
|
|
211
|
+
)
|
|
212
|
+
] }),
|
|
213
|
+
/* @__PURE__ */ jsx2("div", { className: cn("min-h-0 flex-1 overflow-y-auto", contentClassName), children })
|
|
214
|
+
]
|
|
215
|
+
}
|
|
216
|
+
);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
export {
|
|
220
|
+
Overlay,
|
|
221
|
+
OverlayPanel
|
|
222
|
+
};
|
|
223
|
+
//# sourceMappingURL=chunk-AIJAGS5R.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/overlay/Overlay.tsx","../src/overlay/use-overlay-layer.ts","../src/overlay/OverlayPanel.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { useEffect, useLayoutEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { cn } from \"../lib/cn\";\nimport {\n OVERLAY_DIALOG_PANEL_FADE_SECONDS,\n OVERLAY_EXIT_SECONDS,\n OVERLAY_MASK_FADE_SECONDS,\n OVERLAY_PANEL_SLIDE_SECONDS,\n} from \"./config\";\nimport { elevatedOverlayZIndex, isTopOverlay } from \"./stack\";\nimport { useOverlayLayer } from \"./use-overlay-layer\";\n\nexport type OverlayProps = {\n type?: \"dialog\" | \"drawer\";\n open: boolean;\n onClose?: () => void;\n mask?: boolean;\n maskClassName?: string;\n closeOnMaskClick?: boolean;\n children?: ReactNode;\n className?: string;\n elevated?: boolean;\n};\n\nexport function Overlay(props: OverlayProps) {\n const {\n type = \"dialog\",\n open,\n onClose,\n mask = true,\n maskClassName,\n closeOnMaskClick = true,\n children,\n className,\n elevated = false,\n } = props;\n const [present, setPresent] = useState(open);\n\n useLayoutEffect(() => {\n if (open) setPresent(true);\n }, [open]);\n\n const zIndex = useOverlayLayer(open || present);\n const visualZIndex = elevated ? elevatedOverlayZIndex(zIndex) : zIndex;\n\n useEffect(() => {\n if (!open) return;\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") return;\n if (!isTopOverlay(zIndex)) return;\n onClose?.();\n };\n\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, [open, onClose, zIndex]);\n\n if (typeof document === \"undefined\") return null;\n if (!open && !present) return null;\n\n return createPortal(\n <AnimatePresence onExitComplete={() => setPresent(false)}>\n {open ? (\n <motion.div\n key=\"overlay-root\"\n className={cn(\"fixed inset-0 overflow-hidden\", !mask && \"pointer-events-none\", className)}\n style={{ zIndex: visualZIndex }}\n role=\"presentation\"\n initial={{ opacity: 1 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 1 }}\n transition={{ duration: OVERLAY_EXIT_SECONDS }}\n >\n <motion.div\n className={cn(\n \"absolute inset-0\",\n mask ? \"bg-[rgba(0,0,0,0.50)]\" : \"bg-transparent\",\n !closeOnMaskClick && \"pointer-events-none\",\n maskClassName,\n )}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1, transition: { duration: OVERLAY_MASK_FADE_SECONDS, delay: 0 } }}\n exit={{\n opacity: 0,\n transition: {\n duration: OVERLAY_MASK_FADE_SECONDS,\n delay: type === \"drawer\" ? OVERLAY_PANEL_SLIDE_SECONDS : OVERLAY_DIALOG_PANEL_FADE_SECONDS,\n },\n }}\n onClick={closeOnMaskClick ? onClose : undefined}\n />\n {children}\n </motion.div>\n ) : null}\n </AnimatePresence>,\n document.body,\n );\n}\n\nexport default Overlay;\n","import { useLayoutEffect, useState } from \"react\";\nimport { OVERLAY_BASE_Z_INDEX } from \"./config\";\nimport { acquireOverlayLayer, releaseOverlayLayer } from \"./stack\";\n\nexport function useOverlayLayer(open: boolean) {\n const [zIndex, setZIndex] = useState(OVERLAY_BASE_Z_INDEX);\n\n useLayoutEffect(() => {\n if (!open) return;\n const nextZIndex = acquireOverlayLayer();\n setZIndex(nextZIndex);\n return () => {\n releaseOverlayLayer(nextZIndex);\n };\n }, [open]);\n\n return zIndex;\n}\n","import { useEffect, useId, type CSSProperties, type ReactNode } from \"react\";\nimport { IconClose } from \"../icons/close\";\nimport { cn } from \"../lib/cn\";\nimport { fontSans } from \"../lib/font\";\nimport { Card } from \"../card/Card\";\n\nexport type OverlayPanelProps = {\n title?: ReactNode;\n ariaLabel?: string;\n titleClassName?: string;\n closeClassName?: string;\n closeIcon?: ReactNode;\n headerAction?: ReactNode;\n onClose?: () => void;\n cardClassName?: string;\n contentClassName?: string;\n children?: ReactNode;\n style?: CSSProperties;\n trapFocus?: boolean;\n};\n\nexport function OverlayPanel(props: OverlayPanelProps) {\n const {\n title,\n ariaLabel,\n titleClassName,\n closeClassName,\n closeIcon,\n headerAction,\n onClose,\n cardClassName,\n contentClassName,\n children,\n style,\n trapFocus = true,\n } = props;\n const panelId = useId();\n const titleId = panelId + \"-title\";\n const hasTitle = title !== undefined && title !== null && title !== \"\";\n\n useEffect(() => {\n if (!trapFocus) return;\n\n const panel = document.getElementById(panelId);\n if (!panel) return;\n\n const previouslyFocused = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n panel.focus({ preventScroll: true });\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Tab\") return;\n\n const focusableElements = Array.from(\n panel.querySelectorAll<HTMLElement>(\n 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])',\n ),\n ).filter((element) => element.getAttribute(\"aria-hidden\") !== \"true\" && element.getClientRects().length > 0);\n\n if (focusableElements.length === 0) {\n event.preventDefault();\n panel.focus({ preventScroll: true });\n return;\n }\n\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n const activeElement = document.activeElement;\n\n if (event.shiftKey && (activeElement === panel || activeElement === firstElement || !panel.contains(activeElement))) {\n event.preventDefault();\n lastElement.focus({ preventScroll: true });\n } else if (!event.shiftKey && activeElement === lastElement) {\n event.preventDefault();\n firstElement.focus({ preventScroll: true });\n }\n };\n\n panel.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n panel.removeEventListener(\"keydown\", handleKeyDown);\n if (previouslyFocused?.isConnected) previouslyFocused.focus({ preventScroll: true });\n };\n }, [panelId, trapFocus]);\n\n return (\n <Card\n id={panelId}\n role=\"dialog\"\n aria-modal={trapFocus ? \"true\" : undefined}\n aria-labelledby={hasTitle ? titleId : undefined}\n aria-label={hasTitle ? undefined : ariaLabel}\n tabIndex={-1}\n className={cn(\"relative flex flex-col gap-5\", cardClassName)}\n style={style}\n onClick={(event) => event.stopPropagation()}\n >\n <div className=\"relative flex shrink-0 items-center gap-3\">\n <h2\n id={hasTitle ? titleId : undefined}\n className={cn(\n \"min-h-5 min-w-0 text-[20px] font-semibold leading-normal text-black\",\n fontSans,\n titleClassName,\n )}\n >\n {title}\n </h2>\n {headerAction}\n <button\n type=\"button\"\n aria-label=\"Close\"\n onClick={onClose}\n className={cn(\"ml-auto shrink-0 cursor-pointer border-0 bg-transparent p-0 text-black\", closeClassName)}\n >\n {closeIcon ?? <IconClose className=\"size-3.25\" />}\n </button>\n </div>\n <div className={cn(\"min-h-0 flex-1 overflow-y-auto\", contentClassName)}>{children}</div>\n </Card>\n );\n}\n\nexport default OverlayPanel;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AACA,SAAS,WAAW,mBAAAA,kBAAiB,YAAAC,iBAAgB;AACrD,SAAS,oBAAoB;AAC7B,SAAS,iBAAiB,cAAc;;;ACHxC,SAAS,iBAAiB,gBAAgB;AAInC,SAAS,gBAAgB,MAAe;AAC7C,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,oBAAoB;AAEzD,kBAAgB,MAAM;AACpB,QAAI,CAAC,KAAM;AACX,UAAM,aAAa,oBAAoB;AACvC,cAAU,UAAU;AACpB,WAAO,MAAM;AACX,0BAAoB,UAAU;AAAA,IAChC;AAAA,EACF,GAAG,CAAC,IAAI,CAAC;AAET,SAAO;AACT;;;ADiDQ,SAUE,KAVF;AAxCD,SAAS,QAAQ,OAAqB;AAC3C,QAAM;AAAA,IACJ,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,IACnB;AAAA,IACA;AAAA,IACA,WAAW;AAAA,EACb,IAAI;AACJ,QAAM,CAAC,SAAS,UAAU,IAAIC,UAAS,IAAI;AAE3C,EAAAC,iBAAgB,MAAM;AACpB,QAAI,KAAM,YAAW,IAAI;AAAA,EAC3B,GAAG,CAAC,IAAI,CAAC;AAET,QAAM,SAAS,gBAAgB,QAAQ,OAAO;AAC9C,QAAM,eAAe,WAAW,sBAAsB,MAAM,IAAI;AAEhE,YAAU,MAAM;AACd,QAAI,CAAC,KAAM;AAEX,UAAM,YAAY,CAAC,UAAyB;AAC1C,UAAI,MAAM,QAAQ,SAAU;AAC5B,UAAI,CAAC,aAAa,MAAM,EAAG;AAC3B,gBAAU;AAAA,IACZ;AAEA,aAAS,iBAAiB,WAAW,SAAS;AAC9C,WAAO,MAAM,SAAS,oBAAoB,WAAW,SAAS;AAAA,EAChE,GAAG,CAAC,MAAM,SAAS,MAAM,CAAC;AAE1B,MAAI,OAAO,aAAa,YAAa,QAAO;AAC5C,MAAI,CAAC,QAAQ,CAAC,QAAS,QAAO;AAE9B,SAAO;AAAA,IACL,oBAAC,mBAAgB,gBAAgB,MAAM,WAAW,KAAK,GACpD,iBACC;AAAA,MAAC,OAAO;AAAA,MAAP;AAAA,QAEC,WAAW,GAAG,iCAAiC,CAAC,QAAQ,uBAAuB,SAAS;AAAA,QACxF,OAAO,EAAE,QAAQ,aAAa;AAAA,QAC9B,MAAK;AAAA,QACL,SAAS,EAAE,SAAS,EAAE;AAAA,QACtB,SAAS,EAAE,SAAS,EAAE;AAAA,QACtB,MAAM,EAAE,SAAS,EAAE;AAAA,QACnB,YAAY,EAAE,UAAU,qBAAqB;AAAA,QAE7C;AAAA;AAAA,YAAC,OAAO;AAAA,YAAP;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,OAAO,0BAA0B;AAAA,gBACjC,CAAC,oBAAoB;AAAA,gBACrB;AAAA,cACF;AAAA,cACA,SAAS,EAAE,SAAS,EAAE;AAAA,cACtB,SAAS,EAAE,SAAS,GAAG,YAAY,EAAE,UAAU,2BAA2B,OAAO,EAAE,EAAE;AAAA,cACrF,MAAM;AAAA,gBACJ,SAAS;AAAA,gBACT,YAAY;AAAA,kBACV,UAAU;AAAA,kBACV,OAAO,SAAS,WAAW,8BAA8B;AAAA,gBAC3D;AAAA,cACF;AAAA,cACA,SAAS,mBAAmB,UAAU;AAAA;AAAA,UACxC;AAAA,UACC;AAAA;AAAA;AAAA,MA3BG;AAAA,IA4BN,IACE,MACN;AAAA,IACA,SAAS;AAAA,EACX;AACF;;;AEpGA,SAAS,aAAAC,YAAW,aAAiD;AAgG/D,SACE,OAAAC,MADF,QAAAC,aAAA;AA3EC,SAAS,aAAa,OAA0B;AACrD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,EACd,IAAI;AACJ,QAAM,UAAU,MAAM;AACtB,QAAM,UAAU,UAAU;AAC1B,QAAM,WAAW,UAAU,UAAa,UAAU,QAAQ,UAAU;AAEpE,EAAAC,WAAU,MAAM;AACd,QAAI,CAAC,UAAW;AAEhB,UAAM,QAAQ,SAAS,eAAe,OAAO;AAC7C,QAAI,CAAC,MAAO;AAEZ,UAAM,oBAAoB,SAAS,yBAAyB,cAAc,SAAS,gBAAgB;AACnG,UAAM,MAAM,EAAE,eAAe,KAAK,CAAC;AAEnC,UAAM,gBAAgB,CAAC,UAAyB;AAC9C,UAAI,MAAM,QAAQ,MAAO;AAEzB,YAAM,oBAAoB,MAAM;AAAA,QAC9B,MAAM;AAAA,UACJ;AAAA,QACF;AAAA,MACF,EAAE,OAAO,CAAC,YAAY,QAAQ,aAAa,aAAa,MAAM,UAAU,QAAQ,eAAe,EAAE,SAAS,CAAC;AAE3G,UAAI,kBAAkB,WAAW,GAAG;AAClC,cAAM,eAAe;AACrB,cAAM,MAAM,EAAE,eAAe,KAAK,CAAC;AACnC;AAAA,MACF;AAEA,YAAM,eAAe,kBAAkB,CAAC;AACxC,YAAM,cAAc,kBAAkB,kBAAkB,SAAS,CAAC;AAClE,YAAM,gBAAgB,SAAS;AAE/B,UAAI,MAAM,aAAa,kBAAkB,SAAS,kBAAkB,gBAAgB,CAAC,MAAM,SAAS,aAAa,IAAI;AACnH,cAAM,eAAe;AACrB,oBAAY,MAAM,EAAE,eAAe,KAAK,CAAC;AAAA,MAC3C,WAAW,CAAC,MAAM,YAAY,kBAAkB,aAAa;AAC3D,cAAM,eAAe;AACrB,qBAAa,MAAM,EAAE,eAAe,KAAK,CAAC;AAAA,MAC5C;AAAA,IACF;AAEA,UAAM,iBAAiB,WAAW,aAAa;AAC/C,WAAO,MAAM;AACX,YAAM,oBAAoB,WAAW,aAAa;AAClD,UAAI,mBAAmB,YAAa,mBAAkB,MAAM,EAAE,eAAe,KAAK,CAAC;AAAA,IACrF;AAAA,EACF,GAAG,CAAC,SAAS,SAAS,CAAC;AAEvB,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,IAAI;AAAA,MACJ,MAAK;AAAA,MACL,cAAY,YAAY,SAAS;AAAA,MACjC,mBAAiB,WAAW,UAAU;AAAA,MACtC,cAAY,WAAW,SAAY;AAAA,MACnC,UAAU;AAAA,MACV,WAAW,GAAG,gCAAgC,aAAa;AAAA,MAC3D;AAAA,MACA,SAAS,CAAC,UAAU,MAAM,gBAAgB;AAAA,MAE1C;AAAA,wBAAAA,MAAC,SAAI,WAAU,6CACb;AAAA,0BAAAD;AAAA,YAAC;AAAA;AAAA,cACC,IAAI,WAAW,UAAU;AAAA,cACzB,WAAW;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA,cAEC;AAAA;AAAA,UACH;AAAA,UACC;AAAA,UACD,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,cAAW;AAAA,cACX,SAAS;AAAA,cACT,WAAW,GAAG,0EAA0E,cAAc;AAAA,cAErG,uBAAa,gBAAAA,KAAC,aAAU,WAAU,aAAY;AAAA;AAAA,UACjD;AAAA,WACF;AAAA,QACA,gBAAAA,KAAC,SAAI,WAAW,GAAG,kCAAkC,gBAAgB,GAAI,UAAS;AAAA;AAAA;AAAA,EACpF;AAEJ;","names":["useLayoutEffect","useState","useState","useLayoutEffect","useEffect","jsx","jsxs","useEffect"]}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Overlay,
|
|
3
|
+
OverlayPanel
|
|
4
|
+
} from "./chunk-AIJAGS5R.js";
|
|
5
|
+
import {
|
|
6
|
+
OVERLAY_MASK_FADE_SECONDS,
|
|
7
|
+
OVERLAY_PANEL_SLIDE_SECONDS
|
|
8
|
+
} from "./chunk-RUOUGZWI.js";
|
|
9
|
+
import {
|
|
10
|
+
cn
|
|
11
|
+
} from "./chunk-TUEV2KLC.js";
|
|
12
|
+
|
|
13
|
+
// src/drawer/config.ts
|
|
14
|
+
var DRAWER_SIDE = {
|
|
15
|
+
Top: "top",
|
|
16
|
+
Right: "right",
|
|
17
|
+
Bottom: "bottom",
|
|
18
|
+
Left: "left"
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
// src/drawer/Drawer.tsx
|
|
22
|
+
import { motion } from "motion/react";
|
|
23
|
+
import { jsx } from "react/jsx-runtime";
|
|
24
|
+
function Drawer(props) {
|
|
25
|
+
const {
|
|
26
|
+
open,
|
|
27
|
+
onClose,
|
|
28
|
+
title,
|
|
29
|
+
ariaLabel,
|
|
30
|
+
children,
|
|
31
|
+
mask = true,
|
|
32
|
+
maskClassName,
|
|
33
|
+
closeOnMaskClick = true,
|
|
34
|
+
cardClassName,
|
|
35
|
+
panelClassName,
|
|
36
|
+
titleClassName,
|
|
37
|
+
closeClassName,
|
|
38
|
+
closeIcon,
|
|
39
|
+
headerAction,
|
|
40
|
+
contentClassName,
|
|
41
|
+
side = DRAWER_SIDE.Right
|
|
42
|
+
} = props;
|
|
43
|
+
const hidden = slideHidden(side);
|
|
44
|
+
return /* @__PURE__ */ jsx(
|
|
45
|
+
Overlay,
|
|
46
|
+
{
|
|
47
|
+
type: "drawer",
|
|
48
|
+
open,
|
|
49
|
+
onClose,
|
|
50
|
+
mask,
|
|
51
|
+
maskClassName,
|
|
52
|
+
closeOnMaskClick,
|
|
53
|
+
elevated: props.elevated,
|
|
54
|
+
children: /* @__PURE__ */ jsx(
|
|
55
|
+
motion.div,
|
|
56
|
+
{
|
|
57
|
+
className: cn("pointer-events-auto", drawerPositionClassName(side), panelClassName),
|
|
58
|
+
initial: hidden,
|
|
59
|
+
animate: {
|
|
60
|
+
x: 0,
|
|
61
|
+
y: 0,
|
|
62
|
+
transition: { duration: OVERLAY_PANEL_SLIDE_SECONDS, delay: OVERLAY_MASK_FADE_SECONDS, ease: easeOut }
|
|
63
|
+
},
|
|
64
|
+
exit: {
|
|
65
|
+
...hidden,
|
|
66
|
+
transition: { duration: OVERLAY_PANEL_SLIDE_SECONDS, delay: 0, ease: easeOut }
|
|
67
|
+
},
|
|
68
|
+
children: /* @__PURE__ */ jsx(
|
|
69
|
+
OverlayPanel,
|
|
70
|
+
{
|
|
71
|
+
title,
|
|
72
|
+
ariaLabel,
|
|
73
|
+
titleClassName,
|
|
74
|
+
closeClassName,
|
|
75
|
+
closeIcon,
|
|
76
|
+
headerAction,
|
|
77
|
+
contentClassName,
|
|
78
|
+
onClose,
|
|
79
|
+
cardClassName: cn(drawerPanelClassName(side), cardClassName),
|
|
80
|
+
trapFocus: mask,
|
|
81
|
+
children
|
|
82
|
+
}
|
|
83
|
+
)
|
|
84
|
+
}
|
|
85
|
+
)
|
|
86
|
+
}
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
var easeOut = [0.32, 0.72, 0, 1];
|
|
90
|
+
function slideHidden(side) {
|
|
91
|
+
if (side === DRAWER_SIDE.Top) return { y: "-100%" };
|
|
92
|
+
if (side === DRAWER_SIDE.Bottom) return { y: "100%" };
|
|
93
|
+
if (side === DRAWER_SIDE.Left) return { x: "-100%" };
|
|
94
|
+
return { x: "100%" };
|
|
95
|
+
}
|
|
96
|
+
function drawerPositionClassName(side) {
|
|
97
|
+
if (side === DRAWER_SIDE.Top) return "absolute inset-x-0 top-0";
|
|
98
|
+
if (side === DRAWER_SIDE.Bottom) return "absolute inset-x-0 bottom-0";
|
|
99
|
+
if (side === DRAWER_SIDE.Left) return "absolute inset-y-0 left-0 h-full w-[min(100%,420px)]";
|
|
100
|
+
return "absolute inset-y-0 right-0 h-full w-[min(100%,420px)]";
|
|
101
|
+
}
|
|
102
|
+
function drawerPanelClassName(side) {
|
|
103
|
+
if (side === DRAWER_SIDE.Top) return "w-full max-h-[90vh] rounded-t-none md:rounded-t-none";
|
|
104
|
+
if (side === DRAWER_SIDE.Bottom) return "w-full max-h-[90vh] rounded-b-none md:rounded-b-none";
|
|
105
|
+
if (side === DRAWER_SIDE.Left) return "h-full w-full rounded-l-none md:rounded-l-none";
|
|
106
|
+
return "h-full w-full rounded-r-none md:rounded-r-none";
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export {
|
|
110
|
+
DRAWER_SIDE,
|
|
111
|
+
Drawer
|
|
112
|
+
};
|
|
113
|
+
//# sourceMappingURL=chunk-DON56HU7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/drawer/config.ts","../src/drawer/Drawer.tsx"],"sourcesContent":["export const DRAWER_SIDE = {\n Top: \"top\",\n Right: \"right\",\n Bottom: \"bottom\",\n Left: \"left\",\n} as const;\n\nexport type DrawerSide = (typeof DRAWER_SIDE)[keyof typeof DRAWER_SIDE];\n","import { motion } from \"motion/react\";\nimport { cn } from \"../lib/cn\";\nimport { Overlay } from \"../overlay/Overlay\";\nimport { OverlayPanel } from \"../overlay/OverlayPanel\";\nimport { OVERLAY_MASK_FADE_SECONDS, OVERLAY_PANEL_SLIDE_SECONDS } from \"../overlay/config\";\nimport type { OverlayChromeProps } from \"../overlay/types\";\nimport { DRAWER_SIDE, type DrawerSide } from \"./config\";\n\nexport type DrawerProps = OverlayChromeProps & {\n side?: DrawerSide;\n};\n\nexport function Drawer(props: DrawerProps) {\n const {\n open,\n onClose,\n title,\n ariaLabel,\n children,\n mask = true,\n maskClassName,\n closeOnMaskClick = true,\n cardClassName,\n panelClassName,\n titleClassName,\n closeClassName,\n closeIcon,\n headerAction,\n contentClassName,\n side = DRAWER_SIDE.Right,\n } = props;\n const hidden = slideHidden(side);\n\n return (\n <Overlay\n type=\"drawer\"\n open={open}\n onClose={onClose}\n mask={mask}\n maskClassName={maskClassName}\n closeOnMaskClick={closeOnMaskClick}\n elevated={props.elevated}\n >\n <motion.div\n className={cn(\"pointer-events-auto\", drawerPositionClassName(side), panelClassName)}\n initial={hidden}\n animate={{\n x: 0,\n y: 0,\n transition: { duration: OVERLAY_PANEL_SLIDE_SECONDS, delay: OVERLAY_MASK_FADE_SECONDS, ease: easeOut },\n }}\n exit={{\n ...hidden,\n transition: { duration: OVERLAY_PANEL_SLIDE_SECONDS, delay: 0, ease: easeOut },\n }}\n >\n <OverlayPanel\n title={title}\n ariaLabel={ariaLabel}\n titleClassName={titleClassName}\n closeClassName={closeClassName}\n closeIcon={closeIcon}\n headerAction={headerAction}\n contentClassName={contentClassName}\n onClose={onClose}\n cardClassName={cn(drawerPanelClassName(side), cardClassName)}\n trapFocus={mask}\n >\n {children}\n </OverlayPanel>\n </motion.div>\n </Overlay>\n );\n}\n\nexport default Drawer;\n\nconst easeOut: [number, number, number, number] = [0.32, 0.72, 0, 1];\n\nfunction slideHidden(side: DrawerSide): { x?: string; y?: string } {\n if (side === DRAWER_SIDE.Top) return { y: \"-100%\" };\n if (side === DRAWER_SIDE.Bottom) return { y: \"100%\" };\n if (side === DRAWER_SIDE.Left) return { x: \"-100%\" };\n return { x: \"100%\" };\n}\n\nfunction drawerPositionClassName(side: DrawerSide) {\n if (side === DRAWER_SIDE.Top) return \"absolute inset-x-0 top-0\";\n if (side === DRAWER_SIDE.Bottom) return \"absolute inset-x-0 bottom-0\";\n if (side === DRAWER_SIDE.Left) return \"absolute inset-y-0 left-0 h-full w-[min(100%,420px)]\";\n return \"absolute inset-y-0 right-0 h-full w-[min(100%,420px)]\";\n}\n\nfunction drawerPanelClassName(side: DrawerSide) {\n if (side === DRAWER_SIDE.Top) return \"w-full max-h-[90vh] rounded-t-none md:rounded-t-none\";\n if (side === DRAWER_SIDE.Bottom) return \"w-full max-h-[90vh] rounded-b-none md:rounded-b-none\";\n if (side === DRAWER_SIDE.Left) return \"h-full w-full rounded-l-none md:rounded-l-none\";\n return \"h-full w-full rounded-r-none md:rounded-r-none\";\n}\n"],"mappings":";;;;;;;;;;;;;AAAO,IAAM,cAAc;AAAA,EACzB,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AACR;;;ACLA,SAAS,cAAc;AAwDf;AA5CD,SAAS,OAAO,OAAoB;AACzC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,YAAY;AAAA,EACrB,IAAI;AACJ,QAAM,SAAS,YAAY,IAAI;AAE/B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU,MAAM;AAAA,MAEhB;AAAA,QAAC,OAAO;AAAA,QAAP;AAAA,UACC,WAAW,GAAG,uBAAuB,wBAAwB,IAAI,GAAG,cAAc;AAAA,UAClF,SAAS;AAAA,UACT,SAAS;AAAA,YACP,GAAG;AAAA,YACH,GAAG;AAAA,YACH,YAAY,EAAE,UAAU,6BAA6B,OAAO,2BAA2B,MAAM,QAAQ;AAAA,UACvG;AAAA,UACA,MAAM;AAAA,YACJ,GAAG;AAAA,YACH,YAAY,EAAE,UAAU,6BAA6B,OAAO,GAAG,MAAM,QAAQ;AAAA,UAC/E;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,eAAe,GAAG,qBAAqB,IAAI,GAAG,aAAa;AAAA,cAC3D,WAAW;AAAA,cAEV;AAAA;AAAA,UACH;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;AAIA,IAAM,UAA4C,CAAC,MAAM,MAAM,GAAG,CAAC;AAEnE,SAAS,YAAY,MAA8C;AACjE,MAAI,SAAS,YAAY,IAAK,QAAO,EAAE,GAAG,QAAQ;AAClD,MAAI,SAAS,YAAY,OAAQ,QAAO,EAAE,GAAG,OAAO;AACpD,MAAI,SAAS,YAAY,KAAM,QAAO,EAAE,GAAG,QAAQ;AACnD,SAAO,EAAE,GAAG,OAAO;AACrB;AAEA,SAAS,wBAAwB,MAAkB;AACjD,MAAI,SAAS,YAAY,IAAK,QAAO;AACrC,MAAI,SAAS,YAAY,OAAQ,QAAO;AACxC,MAAI,SAAS,YAAY,KAAM,QAAO;AACtC,SAAO;AACT;AAEA,SAAS,qBAAqB,MAAkB;AAC9C,MAAI,SAAS,YAAY,IAAK,QAAO;AACrC,MAAI,SAAS,YAAY,OAAQ,QAAO;AACxC,MAAI,SAAS,YAAY,KAAM,QAAO;AACtC,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/font.ts"],"sourcesContent":["/** Host-independent sans stack. Underscores in the arbitrary value become spaces. */\nexport const fontSans = \"[font-family:Montserrat,PingFang_SC,system-ui,sans-serif]\";\n"],"mappings":";AACO,IAAM,WAAW;","names":[]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// src/icons/close.tsx
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
var IconClose = (props) => {
|
|
4
|
+
const {
|
|
5
|
+
className,
|
|
6
|
+
style
|
|
7
|
+
} = props;
|
|
8
|
+
return /* @__PURE__ */ jsxs(
|
|
9
|
+
"svg",
|
|
10
|
+
{
|
|
11
|
+
width: "13",
|
|
12
|
+
height: "13",
|
|
13
|
+
viewBox: "0 0 13 13",
|
|
14
|
+
fill: "none",
|
|
15
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
16
|
+
className: className ? `sfp-icon ${className}` : "sfp-icon",
|
|
17
|
+
style,
|
|
18
|
+
children: [
|
|
19
|
+
/* @__PURE__ */ jsx(
|
|
20
|
+
"line",
|
|
21
|
+
{
|
|
22
|
+
x1: "0.75",
|
|
23
|
+
y1: "-0.75",
|
|
24
|
+
x2: "16.2197",
|
|
25
|
+
y2: "-0.75",
|
|
26
|
+
transform: "matrix(0.707069 -0.707145 0.707069 0.707145 1.00122 12.75)",
|
|
27
|
+
stroke: "currentColor",
|
|
28
|
+
strokeWidth: "1.5",
|
|
29
|
+
strokeLinecap: "round",
|
|
30
|
+
strokeLinejoin: "round"
|
|
31
|
+
}
|
|
32
|
+
),
|
|
33
|
+
/* @__PURE__ */ jsx(
|
|
34
|
+
"line",
|
|
35
|
+
{
|
|
36
|
+
x1: "0.75",
|
|
37
|
+
y1: "-0.75",
|
|
38
|
+
x2: "16.2197",
|
|
39
|
+
y2: "-0.75",
|
|
40
|
+
transform: "matrix(-0.707069 -0.707145 -0.707069 0.707145 11.9985 12.75)",
|
|
41
|
+
stroke: "currentColor",
|
|
42
|
+
strokeWidth: "1.5",
|
|
43
|
+
strokeLinecap: "round",
|
|
44
|
+
strokeLinejoin: "round"
|
|
45
|
+
}
|
|
46
|
+
)
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
);
|
|
50
|
+
};
|
|
51
|
+
var close_default = IconClose;
|
|
52
|
+
|
|
53
|
+
export {
|
|
54
|
+
IconClose,
|
|
55
|
+
close_default
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=chunk-J5TQGGEN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/icons/close.tsx"],"sourcesContent":["import type { IconProps } from \"./types\";\n\nexport const IconClose = (props: IconProps) => {\n const {\n className,\n style,\n } = props;\n\n return (\n <svg\n width=\"13\"\n height=\"13\"\n viewBox=\"0 0 13 13\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className ? `sfp-icon ${className}` : \"sfp-icon\"}\n style={style}\n >\n <line\n x1=\"0.75\"\n y1=\"-0.75\"\n x2=\"16.2197\"\n y2=\"-0.75\"\n transform=\"matrix(0.707069 -0.707145 0.707069 0.707145 1.00122 12.75)\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <line\n x1=\"0.75\"\n y1=\"-0.75\"\n x2=\"16.2197\"\n y2=\"-0.75\"\n transform=\"matrix(-0.707069 -0.707145 -0.707069 0.707145 11.9985 12.75)\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n\nexport default IconClose;\n"],"mappings":";AASI,SASE,KATF;AAPG,IAAM,YAAY,CAAC,UAAqB;AAC7C,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,WAAW,YAAY,YAAY,SAAS,KAAK;AAAA,MACjD;AAAA,MAEA;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,YACH,WAAU;AAAA,YACV,QAAO;AAAA,YACP,aAAY;AAAA,YACZ,eAAc;AAAA,YACd,gBAAe;AAAA;AAAA,QACjB;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,YACH,WAAU;AAAA,YACV,QAAO;AAAA,YACP,aAAY;AAAA,YACZ,eAAc;AAAA,YACd,gBAAe;AAAA;AAAA,QACjB;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,gBAAQ;","names":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import {
|
|
2
|
+
cn
|
|
3
|
+
} from "./chunk-TUEV2KLC.js";
|
|
4
|
+
|
|
5
|
+
// src/card/Card.tsx
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
function Card({ className, ...props }) {
|
|
8
|
+
return /* @__PURE__ */ jsx(
|
|
9
|
+
"div",
|
|
10
|
+
{
|
|
11
|
+
className: cn(
|
|
12
|
+
"rounded-[14px] border border-white bg-[#FDFDFD] p-4 shadow-[0_0_20px_0_rgba(0,0,0,0.06)] md:rounded-[20px] md:p-5",
|
|
13
|
+
className
|
|
14
|
+
),
|
|
15
|
+
...props
|
|
16
|
+
}
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export {
|
|
21
|
+
Card
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=chunk-MJ36QLY3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/card/Card.tsx"],"sourcesContent":["import type { HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport type CardProps = HTMLAttributes<HTMLDivElement>;\n\nexport function Card({ className, ...props }: CardProps) {\n return (\n <div\n className={cn(\n \"rounded-[14px] border border-white bg-[#FDFDFD] p-4 shadow-[0_0_20px_0_rgba(0,0,0,0.06)] md:rounded-[20px] md:p-5\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport default Card;\n"],"mappings":";;;;;AAOI;AAFG,SAAS,KAAK,EAAE,WAAW,GAAG,MAAM,GAAc;AACvD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// src/icons/alert.tsx
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
var IconAlert = (props) => {
|
|
4
|
+
const {
|
|
5
|
+
className,
|
|
6
|
+
style
|
|
7
|
+
} = props;
|
|
8
|
+
return /* @__PURE__ */ jsx(
|
|
9
|
+
"svg",
|
|
10
|
+
{
|
|
11
|
+
width: "2",
|
|
12
|
+
height: "7",
|
|
13
|
+
viewBox: "0 0 2 7",
|
|
14
|
+
fill: "none",
|
|
15
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
16
|
+
className: className ? `sfp-icon ${className}` : "sfp-icon",
|
|
17
|
+
style,
|
|
18
|
+
children: /* @__PURE__ */ jsx(
|
|
19
|
+
"path",
|
|
20
|
+
{
|
|
21
|
+
d: "M0.888801 5.112C0.653076 5.112 0.427006 5.20564 0.260324 5.37232C0.0936412 5.53901 0 5.76508 0 6.0008C0 6.23653 0.0936412 6.46259 0.260324 6.62928C0.427006 6.79596 0.653076 6.8896 0.888801 6.8896C1.12453 6.8896 1.35059 6.79596 1.51728 6.62928C1.68396 6.46259 1.7776 6.23653 1.7776 6.0008C1.7776 5.76508 1.68396 5.53901 1.51728 5.37232C1.35059 5.20564 1.12453 5.112 0.888801 5.112ZM0.888801 0.000800133C0.397601 0.000800133 0 0.3984 0 0.8896L0 3.3344C0 3.57013 0.0936412 3.79619 0.260324 3.96288C0.427006 4.12956 0.653076 4.2232 0.888801 4.2232C1.12453 4.2232 1.35059 4.12956 1.51728 3.96288C1.68396 3.79619 1.7776 3.57013 1.7776 3.3344V0.8888C1.7776 0.3976 1.38 0 0.8896 0L0.888801 0.000800133Z",
|
|
22
|
+
fill: "currentColor"
|
|
23
|
+
}
|
|
24
|
+
)
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
};
|
|
28
|
+
var alert_default = IconAlert;
|
|
29
|
+
|
|
30
|
+
export {
|
|
31
|
+
IconAlert,
|
|
32
|
+
alert_default
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=chunk-NZGSPYWG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/icons/alert.tsx"],"sourcesContent":["import type { IconProps } from \"./types\";\n\nexport const IconAlert = (props: IconProps) => {\n const {\n className,\n style,\n } = props;\n\n return (\n <svg\n width=\"2\"\n height=\"7\"\n viewBox=\"0 0 2 7\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className ? `sfp-icon ${className}` : \"sfp-icon\"}\n style={style}\n >\n <path\n d=\"M0.888801 5.112C0.653076 5.112 0.427006 5.20564 0.260324 5.37232C0.0936412 5.53901 0 5.76508 0 6.0008C0 6.23653 0.0936412 6.46259 0.260324 6.62928C0.427006 6.79596 0.653076 6.8896 0.888801 6.8896C1.12453 6.8896 1.35059 6.79596 1.51728 6.62928C1.68396 6.46259 1.7776 6.23653 1.7776 6.0008C1.7776 5.76508 1.68396 5.53901 1.51728 5.37232C1.35059 5.20564 1.12453 5.112 0.888801 5.112ZM0.888801 0.000800133C0.397601 0.000800133 0 0.3984 0 0.8896L0 3.3344C0 3.57013 0.0936412 3.79619 0.260324 3.96288C0.427006 4.12956 0.653076 4.2232 0.888801 4.2232C1.12453 4.2232 1.35059 4.12956 1.51728 3.96288C1.68396 3.79619 1.7776 3.57013 1.7776 3.3344V0.8888C1.7776 0.3976 1.38 0 0.8896 0L0.888801 0.000800133Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\nexport default IconAlert;\n"],"mappings":";AAkBM;AAhBC,IAAM,YAAY,CAAC,UAAqB;AAC7C,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,WAAW,YAAY,YAAY,SAAS,KAAK;AAAA,MACjD;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,GAAE;AAAA,UACF,MAAK;AAAA;AAAA,MACP;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,gBAAQ;","names":[]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// src/icons/arrow-down.tsx
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
var IconArrowDown = (props) => {
|
|
4
|
+
const {
|
|
5
|
+
className,
|
|
6
|
+
style
|
|
7
|
+
} = props;
|
|
8
|
+
return /* @__PURE__ */ jsx(
|
|
9
|
+
"svg",
|
|
10
|
+
{
|
|
11
|
+
width: "11",
|
|
12
|
+
height: "6",
|
|
13
|
+
viewBox: "0 0 11 6",
|
|
14
|
+
fill: "none",
|
|
15
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
16
|
+
className: className ? `sfp-icon ${className}` : "sfp-icon",
|
|
17
|
+
style,
|
|
18
|
+
children: /* @__PURE__ */ jsx(
|
|
19
|
+
"path",
|
|
20
|
+
{
|
|
21
|
+
d: "M0.305908 0.395508L5.47832 4.39551L10.3059 0.395508",
|
|
22
|
+
stroke: "currentColor"
|
|
23
|
+
}
|
|
24
|
+
)
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
};
|
|
28
|
+
var arrow_down_default = IconArrowDown;
|
|
29
|
+
|
|
30
|
+
export {
|
|
31
|
+
IconArrowDown,
|
|
32
|
+
arrow_down_default
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=chunk-OGSFVQK2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/icons/arrow-down.tsx"],"sourcesContent":["import type { IconProps } from \"./types\";\n\nexport const IconArrowDown = (props: IconProps) => {\n const {\n className,\n style,\n } = props;\n\n return (\n <svg\n width=\"11\"\n height=\"6\"\n viewBox=\"0 0 11 6\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className ? `sfp-icon ${className}` : \"sfp-icon\"}\n style={style}\n >\n <path\n d=\"M0.305908 0.395508L5.47832 4.39551L10.3059 0.395508\"\n stroke=\"currentColor\"\n />\n </svg>\n );\n};\n\nexport default IconArrowDown;\n"],"mappings":";AAkBM;AAhBC,IAAM,gBAAgB,CAAC,UAAqB;AACjD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,WAAW,YAAY,YAAY,SAAS,KAAK;AAAA,MACjD;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,GAAE;AAAA,UACF,QAAO;AAAA;AAAA,MACT;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,qBAAQ;","names":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import {
|
|
2
|
+
cn
|
|
3
|
+
} from "./chunk-TUEV2KLC.js";
|
|
4
|
+
|
|
5
|
+
// src/skeleton/Skeleton.tsx
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
function Skeleton({ className }) {
|
|
8
|
+
return /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: cn("block animate-pulse rounded-[8px] bg-[#e8e8e8]", className) });
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export {
|
|
12
|
+
Skeleton
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=chunk-R46DAHYR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/skeleton/Skeleton.tsx"],"sourcesContent":["import { cn } from \"../lib/cn\";\n\nexport function Skeleton({ className }: { className?: string }) {\n return <span aria-hidden className={cn(\"block animate-pulse rounded-[8px] bg-[#e8e8e8]\", className)} />;\n}\n\nexport default Skeleton;\n"],"mappings":";;;;;AAGS;AADF,SAAS,SAAS,EAAE,UAAU,GAA2B;AAC9D,SAAO,oBAAC,UAAK,eAAW,MAAC,WAAW,GAAG,kDAAkD,SAAS,GAAG;AACvG;","names":[]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// src/icons/search.tsx
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
var IconSearch = (props) => {
|
|
4
|
+
const {
|
|
5
|
+
className,
|
|
6
|
+
style
|
|
7
|
+
} = props;
|
|
8
|
+
return /* @__PURE__ */ jsx(
|
|
9
|
+
"svg",
|
|
10
|
+
{
|
|
11
|
+
width: "14",
|
|
12
|
+
height: "14",
|
|
13
|
+
viewBox: "0 0 14 14",
|
|
14
|
+
fill: "none",
|
|
15
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
16
|
+
className: className ? `sfp-icon ${className}` : "sfp-icon",
|
|
17
|
+
style,
|
|
18
|
+
children: /* @__PURE__ */ jsx(
|
|
19
|
+
"path",
|
|
20
|
+
{
|
|
21
|
+
d: "M6.36129 0C9.8746 0 12.7226 2.84799 12.7226 6.36129C12.7226 7.87116 12.1965 9.2583 11.3179 10.3491C11.3904 10.363 11.457 10.3985 11.5091 10.4509L13.8904 12.8322C13.9606 12.9024 14 12.9976 14 13.0968C14 13.196 13.9606 13.2912 13.8904 13.3613L13.3613 13.8904C13.2912 13.9606 13.196 14 13.0968 14C12.9976 14 12.9024 13.9606 12.8322 13.8904L10.4509 11.5091C10.3985 11.4569 10.3628 11.3904 10.3483 11.3179C9.21949 12.229 7.81199 12.7249 6.36129 12.7226C2.84799 12.7226 -1.75403e-08 9.8746 0 6.36129C1.75403e-08 2.84799 2.84799 0 6.36129 0ZM6.36129 1.49677C3.67458 1.49677 1.49677 3.67458 1.49677 6.36129C1.49677 9.048 3.67458 11.2258 6.36129 11.2258C9.048 11.2258 11.2258 9.048 11.2258 6.36129C11.2258 3.67458 9.048 1.49677 6.36129 1.49677Z",
|
|
22
|
+
fill: "currentColor"
|
|
23
|
+
}
|
|
24
|
+
)
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
};
|
|
28
|
+
var search_default = IconSearch;
|
|
29
|
+
|
|
30
|
+
export {
|
|
31
|
+
IconSearch,
|
|
32
|
+
search_default
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=chunk-R4BKHISR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/icons/search.tsx"],"sourcesContent":["import type { IconProps } from \"./types\";\n\nexport const IconSearch = (props: IconProps) => {\n const {\n className,\n style,\n } = props;\n\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className ? `sfp-icon ${className}` : \"sfp-icon\"}\n style={style}\n >\n <path\n d=\"M6.36129 0C9.8746 0 12.7226 2.84799 12.7226 6.36129C12.7226 7.87116 12.1965 9.2583 11.3179 10.3491C11.3904 10.363 11.457 10.3985 11.5091 10.4509L13.8904 12.8322C13.9606 12.9024 14 12.9976 14 13.0968C14 13.196 13.9606 13.2912 13.8904 13.3613L13.3613 13.8904C13.2912 13.9606 13.196 14 13.0968 14C12.9976 14 12.9024 13.9606 12.8322 13.8904L10.4509 11.5091C10.3985 11.4569 10.3628 11.3904 10.3483 11.3179C9.21949 12.229 7.81199 12.7249 6.36129 12.7226C2.84799 12.7226 -1.75403e-08 9.8746 0 6.36129C1.75403e-08 2.84799 2.84799 0 6.36129 0ZM6.36129 1.49677C3.67458 1.49677 1.49677 3.67458 1.49677 6.36129C1.49677 9.048 3.67458 11.2258 6.36129 11.2258C9.048 11.2258 11.2258 9.048 11.2258 6.36129C11.2258 3.67458 9.048 1.49677 6.36129 1.49677Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\nexport default IconSearch;\n"],"mappings":";AAkBM;AAhBC,IAAM,aAAa,CAAC,UAAqB;AAC9C,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,WAAW,YAAY,YAAY,SAAS,KAAK;AAAA,MACjD;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,GAAE;AAAA,UACF,MAAK;AAAA;AAAA,MACP;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,iBAAQ;","names":[]}
|