@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 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/date-range-picker/DateRangePicker.tsx","../../src/date-range-picker/config.ts","../../src/date-range-picker/utils.ts"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n addMonths,\n eachDayOfInterval,\n endOfMonth,\n endOfWeek,\n format,\n isSameDay,\n isSameMonth,\n isWithinInterval,\n startOfMonth,\n startOfWeek,\n} from \"date-fns\";\nimport { IconArrowDown } from \"../icons/arrow-down\";\nimport { cn } from \"../lib/cn\";\nimport { fontSans } from \"../lib/font\";\nimport { floatingLayerZIndex } from \"../overlay/stack\";\nimport { FLOATING_ALIGN, FLOATING_SIDE, useFloatingPosition } from \"../overlay/use-floating-position\";\nimport { DATE_RANGE_PRESET_OPTIONS, DATE_RANGE_WEEKDAY_LABELS } from \"./config\";\nimport { calendarRangeFromPicks, formatDateRangeLabel, lastNDaysRange, type DateRangeValue } from \"./utils\";\n\nexport type { DateRangeValue } from \"./utils\";\n\nexport function DateRangePicker(props: {\n value: DateRangeValue;\n onChange: (range: DateRangeValue) => void;\n className?: string;\n triggerClassName?: string;\n}) {\n const { value, onChange, className, triggerClassName } = props;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n const [viewMonth, setViewMonth] = useState(() => startOfMonth(value.to));\n const [draftStart, setDraftStart] = useState<Date | null>(null);\n const panelStyle = useFloatingPosition({\n open,\n triggerRef,\n panelRef,\n side: FLOATING_SIDE.Bottom,\n align: FLOATING_ALIGN.Start,\n offset: 6,\n });\n\n useEffect(() => {\n if (open) setViewMonth(startOfMonth(value.to));\n }, [open, value.to]);\n\n useEffect(() => {\n if (!open) return;\n const onPointerDown = (event: MouseEvent) => {\n const target = event.target as Node | null;\n if (!target) return;\n if (triggerRef.current?.contains(target)) return;\n if (panelRef.current?.contains(target)) return;\n setOpen(false);\n setDraftStart(null);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setOpen(false);\n setDraftStart(null);\n }\n };\n document.addEventListener(\"mousedown\", onPointerDown);\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"mousedown\", onPointerDown);\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [open]);\n\n const days = useMemo(() => {\n const monthStart = startOfMonth(viewMonth);\n return eachDayOfInterval({\n start: startOfWeek(monthStart),\n end: endOfWeek(endOfMonth(monthStart)),\n });\n }, [viewMonth]);\n\n const commit = (range: DateRangeValue) => {\n onChange(range);\n setDraftStart(null);\n setOpen(false);\n };\n\n const pickDay = (day: Date) => {\n if (!draftStart) {\n setDraftStart(day);\n return;\n }\n commit(calendarRangeFromPicks(draftStart, day));\n };\n\n return (\n <div className={cn(\"relative inline-block min-w-0\", className)}>\n <button\n ref={triggerRef}\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-label=\"Select time range\"\n onClick={() => {\n setOpen((current) => !current);\n setDraftStart(null);\n }}\n className={cn(\n \"inline-flex cursor-pointer h-9 w-full min-w-0 items-center justify-between gap-2 overflow-hidden rounded-[6px] border border-[#E3E3E3] bg-white px-3 text-sm font-medium text-black outline-none\",\n fontSans,\n triggerClassName,\n )}\n >\n <span className=\"min-w-0 shrink truncate text-[#aaa]\">Time</span>\n <span className=\"flex min-w-0 flex-1 items-center justify-end gap-2 truncate text-right\">\n {formatDateRangeLabel(value)}\n </span>\n <IconArrowDown className={cn(\"h-1.5 w-2.75 shrink-0 text-black transition-transform\", open && \"rotate-180\")} />\n </button>\n {open && typeof document !== \"undefined\"\n ? createPortal(\n <div\n ref={panelRef}\n role=\"dialog\"\n aria-label=\"Date range\"\n style={{ ...panelStyle, zIndex: floatingLayerZIndex() }}\n className={cn(\n \"w-[min(320px,calc(100vw-32px))] rounded-[16px] border border-black/10 bg-white p-4 shadow-[0_8px_24px_rgba(0,0,0,0.08)]\",\n fontSans,\n )}\n >\n <div className=\"mb-3 flex items-center justify-between\">\n <button\n type=\"button\"\n aria-label=\"Previous month\"\n onClick={() => setViewMonth((month) => addMonths(month, -1))}\n className=\"inline-flex size-8 cursor-pointer items-center justify-center rounded-full border-0 bg-transparent p-0 text-[#606060] hover:bg-black/5\"\n >\n <IconArrowDown className=\"h-1.5 w-2.75 rotate-90\" />\n </button>\n <span className=\"text-sm font-semibold text-black\">{format(viewMonth, \"yyyy MMM\")}</span>\n <button\n type=\"button\"\n aria-label=\"Next month\"\n onClick={() => setViewMonth((month) => addMonths(month, 1))}\n className=\"inline-flex size-8 cursor-pointer items-center justify-center rounded-full border-0 bg-transparent p-0 text-[#606060] hover:bg-black/5\"\n >\n <IconArrowDown className=\"h-1.5 w-2.75 -rotate-90\" />\n </button>\n </div>\n <div className=\"grid grid-cols-7 gap-1\">\n {DATE_RANGE_WEEKDAY_LABELS.map((label) => (\n <div key={label} className=\"text-center text-[11px] font-medium text-[#aaa]\">\n {label}\n </div>\n ))}\n </div>\n <div className=\"grid grid-cols-7 gap-1\">\n {days.map((day) => {\n const inMonth = isSameMonth(day, viewMonth);\n const selected = isSameDay(day, value.from) || isSameDay(day, value.to) || (draftStart ? isSameDay(day, draftStart) : false);\n const inRange = !draftStart && isWithinInterval(day, { start: value.from, end: value.to });\n return (\n <button\n key={day.toISOString()}\n type=\"button\"\n onClick={() => pickDay(day)}\n className={cn(\n \"h-8 cursor-pointer rounded-[8px] border-0 bg-transparent text-[13px] font-medium text-black hover:bg-black/5\",\n !inMonth && \"text-[#ccc]\",\n inRange && !selected && \"bg-black/5\",\n selected && \"bg-black text-white hover:bg-black\",\n )}\n >\n {format(day, \"d\")}\n </button>\n );\n })}\n </div>\n <div className=\"mt-3 flex flex-col gap-1 border-t border-black/10 pt-2\">\n {DATE_RANGE_PRESET_OPTIONS.map((option) => (\n <button\n key={option.days}\n type=\"button\"\n onClick={() => commit(lastNDaysRange(option.days))}\n className=\"cursor-pointer rounded-[8px] border-0 bg-transparent px-2 py-1.5 text-left text-sm font-medium text-black hover:bg-black/5\"\n >\n {option.label}\n </button>\n ))}\n </div>\n </div>,\n document.body,\n )\n : null}\n </div>\n );\n}\n\nexport default DateRangePicker;\n","export const DATE_RANGE_WEEKDAY_LABELS = [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"] as const;\n\nexport const DATE_RANGE_PRESET = {\n Days30: 30,\n Days7: 7,\n Days1: 1,\n} as const;\n\nexport const DATE_RANGE_PRESET_OPTIONS = [\n { days: DATE_RANGE_PRESET.Days30, label: \"Last 30 days\" },\n { days: DATE_RANGE_PRESET.Days7, label: \"Last 7 days\" },\n { days: DATE_RANGE_PRESET.Days1, label: \"Last 1 day\" },\n] as const;\n","import {\n differenceInCalendarDays,\n endOfDay,\n format,\n isSameDay,\n startOfDay,\n subDays,\n} from \"date-fns\";\nimport { DATE_RANGE_PRESET_OPTIONS } from \"./config\";\n\nexport type DateRangeValue = {\n from: Date;\n to: Date;\n};\n\nexport function calendarRangeFromPicks(start: Date, end: Date): DateRangeValue {\n if (isSameDay(start, end)) {\n return { from: startOfDay(end), to: endOfDay(end) };\n }\n const from = start.getTime() <= end.getTime() ? start : end;\n const to = start.getTime() <= end.getTime() ? end : start;\n return { from: startOfDay(from), to: endOfDay(to) };\n}\n\nexport function lastNDaysRange(days: number, now: Date = new Date()): DateRangeValue {\n return {\n from: startOfDay(subDays(now, days - 1)),\n to: endOfDay(now),\n };\n}\n\nexport function matchesLastNDays(range: DateRangeValue, days: number, now: Date = new Date()) {\n const expected = lastNDaysRange(days, now);\n return isSameDay(range.from, expected.from) && isSameDay(range.to, expected.to);\n}\n\nexport function formatDateRangeLabel(range: DateRangeValue, now: Date = new Date()) {\n const preset = DATE_RANGE_PRESET_OPTIONS.find((option) =>\n matchesLastNDays(range, option.days, now),\n );\n if (preset) return preset.label;\n if (isSameDay(range.from, range.to)) return format(range.from, \"MMM d, yyyy\");\n return `${format(range.from, \"MMM d, yyyy\")} – ${format(range.to, \"MMM d, yyyy\")}`;\n}\n\nexport function isInDateRange(iso: string, range: DateRangeValue) {\n const time = new Date(iso).getTime();\n if (Number.isNaN(time)) return true;\n return time >= range.from.getTime() && time <= range.to.getTime();\n}\n\nexport function rangeToUnixSeconds(range: DateRangeValue) {\n return {\n start_time: Math.floor(range.from.getTime() / 1000),\n end_time: Math.floor(range.to.getTime() / 1000),\n };\n}\n\nexport function dateRangeDayCount(range: DateRangeValue) {\n return differenceInCalendarDays(range.to, range.from) + 1;\n}\n"],"mappings":"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","names":["format","isSameDay","format","isSameDay"]}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DRAWER_SIDE,
|
|
3
|
+
Drawer
|
|
4
|
+
} from "../chunk-DON56HU7.js";
|
|
5
|
+
import {
|
|
6
|
+
Overlay,
|
|
7
|
+
OverlayPanel
|
|
8
|
+
} from "../chunk-AIJAGS5R.js";
|
|
9
|
+
import "../chunk-J5TQGGEN.js";
|
|
10
|
+
import "../chunk-MJ36QLY3.js";
|
|
11
|
+
import {
|
|
12
|
+
DESKTOP_MEDIA_QUERY,
|
|
13
|
+
OVERLAY_DIALOG_PANEL_FADE_SECONDS
|
|
14
|
+
} from "../chunk-RUOUGZWI.js";
|
|
15
|
+
import "../chunk-FXENEWNN.js";
|
|
16
|
+
import {
|
|
17
|
+
cn
|
|
18
|
+
} from "../chunk-TUEV2KLC.js";
|
|
19
|
+
|
|
20
|
+
// src/dialog/Dialog.tsx
|
|
21
|
+
import { motion } from "motion/react";
|
|
22
|
+
|
|
23
|
+
// src/hooks/use-media-query.ts
|
|
24
|
+
import { useEffect, useState } from "react";
|
|
25
|
+
function useMediaQuery(query) {
|
|
26
|
+
const [matches, setMatches] = useState(() => {
|
|
27
|
+
if (typeof window === "undefined") return true;
|
|
28
|
+
return window.matchMedia(query).matches;
|
|
29
|
+
});
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
const media = window.matchMedia(query);
|
|
32
|
+
const onChange = () => setMatches(media.matches);
|
|
33
|
+
onChange();
|
|
34
|
+
media.addEventListener("change", onChange);
|
|
35
|
+
return () => media.removeEventListener("change", onChange);
|
|
36
|
+
}, [query]);
|
|
37
|
+
return matches;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// src/dialog/Dialog.tsx
|
|
41
|
+
import { jsx } from "react/jsx-runtime";
|
|
42
|
+
function Dialog(props) {
|
|
43
|
+
const {
|
|
44
|
+
open,
|
|
45
|
+
onClose,
|
|
46
|
+
title,
|
|
47
|
+
ariaLabel,
|
|
48
|
+
children,
|
|
49
|
+
mask = true,
|
|
50
|
+
maskClassName,
|
|
51
|
+
closeOnMaskClick = true,
|
|
52
|
+
cardClassName,
|
|
53
|
+
titleClassName,
|
|
54
|
+
closeClassName,
|
|
55
|
+
closeIcon,
|
|
56
|
+
headerAction,
|
|
57
|
+
contentClassName
|
|
58
|
+
} = props;
|
|
59
|
+
const isDesktop = useMediaQuery(DESKTOP_MEDIA_QUERY);
|
|
60
|
+
if (!isDesktop) {
|
|
61
|
+
return /* @__PURE__ */ jsx(
|
|
62
|
+
Drawer,
|
|
63
|
+
{
|
|
64
|
+
...props,
|
|
65
|
+
side: DRAWER_SIDE.Bottom,
|
|
66
|
+
cardClassName: cn("w-full rounded-b-none", cardClassName)
|
|
67
|
+
}
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
return /* @__PURE__ */ jsx(
|
|
71
|
+
Overlay,
|
|
72
|
+
{
|
|
73
|
+
open,
|
|
74
|
+
onClose,
|
|
75
|
+
mask,
|
|
76
|
+
maskClassName,
|
|
77
|
+
closeOnMaskClick,
|
|
78
|
+
elevated: props.elevated,
|
|
79
|
+
children: /* @__PURE__ */ jsx("div", { className: "pointer-events-none relative flex size-full items-center justify-center p-4", children: /* @__PURE__ */ jsx(
|
|
80
|
+
motion.div,
|
|
81
|
+
{
|
|
82
|
+
className: "pointer-events-auto",
|
|
83
|
+
initial: { opacity: 0 },
|
|
84
|
+
animate: {
|
|
85
|
+
opacity: 1,
|
|
86
|
+
transition: { duration: OVERLAY_DIALOG_PANEL_FADE_SECONDS, delay: 0 }
|
|
87
|
+
},
|
|
88
|
+
exit: {
|
|
89
|
+
opacity: 0,
|
|
90
|
+
transition: { duration: OVERLAY_DIALOG_PANEL_FADE_SECONDS, delay: 0 }
|
|
91
|
+
},
|
|
92
|
+
children: /* @__PURE__ */ jsx(
|
|
93
|
+
OverlayPanel,
|
|
94
|
+
{
|
|
95
|
+
title,
|
|
96
|
+
ariaLabel,
|
|
97
|
+
titleClassName,
|
|
98
|
+
closeClassName,
|
|
99
|
+
closeIcon,
|
|
100
|
+
headerAction,
|
|
101
|
+
contentClassName,
|
|
102
|
+
onClose,
|
|
103
|
+
cardClassName: cn("w-full max-h-[90vh] md:w-[500px]", cardClassName),
|
|
104
|
+
trapFocus: mask,
|
|
105
|
+
children
|
|
106
|
+
}
|
|
107
|
+
)
|
|
108
|
+
}
|
|
109
|
+
) })
|
|
110
|
+
}
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
export {
|
|
114
|
+
Dialog
|
|
115
|
+
};
|
|
116
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/dialog/Dialog.tsx","../../src/hooks/use-media-query.ts"],"sourcesContent":["import { motion } from \"motion/react\";\nimport { cn } from \"../lib/cn\";\nimport { useMediaQuery } from \"../hooks/use-media-query\";\nimport { Overlay } from \"../overlay/Overlay\";\nimport { OverlayPanel } from \"../overlay/OverlayPanel\";\nimport { DESKTOP_MEDIA_QUERY, OVERLAY_DIALOG_PANEL_FADE_SECONDS } from \"../overlay/config\";\nimport type { OverlayChromeProps } from \"../overlay/types\";\nimport { Drawer } from \"../drawer/Drawer\";\nimport { DRAWER_SIDE } from \"../drawer/config\";\n\nexport type DialogProps = OverlayChromeProps;\n\nexport function Dialog(props: DialogProps) {\n const {\n open,\n onClose,\n title,\n ariaLabel,\n children,\n mask = true,\n maskClassName,\n closeOnMaskClick = true,\n cardClassName,\n titleClassName,\n closeClassName,\n closeIcon,\n headerAction,\n contentClassName,\n } = props;\n const isDesktop = useMediaQuery(DESKTOP_MEDIA_QUERY);\n\n if (!isDesktop) {\n return (\n <Drawer\n {...props}\n side={DRAWER_SIDE.Bottom}\n cardClassName={cn(\"w-full rounded-b-none\", cardClassName)}\n />\n );\n }\n\n return (\n <Overlay\n open={open}\n onClose={onClose}\n mask={mask}\n maskClassName={maskClassName}\n closeOnMaskClick={closeOnMaskClick}\n elevated={props.elevated}\n >\n <div className=\"pointer-events-none relative flex size-full items-center justify-center p-4\">\n <motion.div\n className=\"pointer-events-auto\"\n initial={{ opacity: 0 }}\n animate={{\n opacity: 1,\n transition: { duration: OVERLAY_DIALOG_PANEL_FADE_SECONDS, delay: 0 },\n }}\n exit={{\n opacity: 0,\n transition: { duration: OVERLAY_DIALOG_PANEL_FADE_SECONDS, delay: 0 },\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(\"w-full max-h-[90vh] md:w-[500px]\", cardClassName)}\n trapFocus={mask}\n >\n {children}\n </OverlayPanel>\n </motion.div>\n </div>\n </Overlay>\n );\n}\n\nexport default Dialog;\n","import { useEffect, useState } from \"react\";\n\nexport function useMediaQuery(query: string): boolean {\n const [matches, setMatches] = useState(() => {\n if (typeof window === \"undefined\") return true;\n return window.matchMedia(query).matches;\n });\n\n useEffect(() => {\n const media = window.matchMedia(query);\n const onChange = () => setMatches(media.matches);\n onChange();\n media.addEventListener(\"change\", onChange);\n return () => media.removeEventListener(\"change\", onChange);\n }, [query]);\n\n return matches;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,SAAS,cAAc;;;ACAvB,SAAS,WAAW,gBAAgB;AAE7B,SAAS,cAAc,OAAwB;AACpD,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,MAAM;AAC3C,QAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,WAAO,OAAO,WAAW,KAAK,EAAE;AAAA,EAClC,CAAC;AAED,YAAU,MAAM;AACd,UAAM,QAAQ,OAAO,WAAW,KAAK;AACrC,UAAM,WAAW,MAAM,WAAW,MAAM,OAAO;AAC/C,aAAS;AACT,UAAM,iBAAiB,UAAU,QAAQ;AACzC,WAAO,MAAM,MAAM,oBAAoB,UAAU,QAAQ;AAAA,EAC3D,GAAG,CAAC,KAAK,CAAC;AAEV,SAAO;AACT;;;ADgBM;AArBC,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,EACF,IAAI;AACJ,QAAM,YAAY,cAAc,mBAAmB;AAEnD,MAAI,CAAC,WAAW;AACd,WACE;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ,MAAM,YAAY;AAAA,QAClB,eAAe,GAAG,yBAAyB,aAAa;AAAA;AAAA,IAC1D;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU,MAAM;AAAA,MAEhB,8BAAC,SAAI,WAAU,+EACb;AAAA,QAAC,OAAO;AAAA,QAAP;AAAA,UACC,WAAU;AAAA,UACV,SAAS,EAAE,SAAS,EAAE;AAAA,UACtB,SAAS;AAAA,YACP,SAAS;AAAA,YACT,YAAY,EAAE,UAAU,mCAAmC,OAAO,EAAE;AAAA,UACtE;AAAA,UACA,MAAM;AAAA,YACJ,SAAS;AAAA,YACT,YAAY,EAAE,UAAU,mCAAmC,OAAO,EAAE;AAAA,UACtE;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,oCAAoC,aAAa;AAAA,cACnE,WAAW;AAAA,cAEV;AAAA;AAAA,UACH;AAAA;AAAA,MACF,GACF;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { O as OverlayChromeProps } from '../types-DNElDQZ9.js';
|
|
3
|
+
|
|
4
|
+
declare const DRAWER_SIDE: {
|
|
5
|
+
readonly Top: "top";
|
|
6
|
+
readonly Right: "right";
|
|
7
|
+
readonly Bottom: "bottom";
|
|
8
|
+
readonly Left: "left";
|
|
9
|
+
};
|
|
10
|
+
type DrawerSide = (typeof DRAWER_SIDE)[keyof typeof DRAWER_SIDE];
|
|
11
|
+
|
|
12
|
+
type DrawerProps = OverlayChromeProps & {
|
|
13
|
+
side?: DrawerSide;
|
|
14
|
+
};
|
|
15
|
+
declare function Drawer(props: DrawerProps): react.JSX.Element;
|
|
16
|
+
|
|
17
|
+
export { DRAWER_SIDE, Drawer, type DrawerProps, type DrawerSide };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DRAWER_SIDE,
|
|
3
|
+
Drawer
|
|
4
|
+
} from "../chunk-DON56HU7.js";
|
|
5
|
+
import "../chunk-AIJAGS5R.js";
|
|
6
|
+
import "../chunk-J5TQGGEN.js";
|
|
7
|
+
import "../chunk-MJ36QLY3.js";
|
|
8
|
+
import "../chunk-RUOUGZWI.js";
|
|
9
|
+
import "../chunk-FXENEWNN.js";
|
|
10
|
+
import "../chunk-TUEV2KLC.js";
|
|
11
|
+
export {
|
|
12
|
+
DRAWER_SIDE,
|
|
13
|
+
Drawer
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
type DropdownOption = {
|
|
5
|
+
value: string;
|
|
6
|
+
label: ReactNode;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
};
|
|
9
|
+
type DropdownProps = {
|
|
10
|
+
value?: string;
|
|
11
|
+
defaultValue?: string;
|
|
12
|
+
onChange?: (value: string) => void;
|
|
13
|
+
options: DropdownOption[];
|
|
14
|
+
label?: ReactNode;
|
|
15
|
+
placeholder?: string;
|
|
16
|
+
disabled?: boolean;
|
|
17
|
+
loading?: boolean;
|
|
18
|
+
className?: string;
|
|
19
|
+
triggerClassName?: string;
|
|
20
|
+
panelClassName?: string;
|
|
21
|
+
empty?: ReactNode;
|
|
22
|
+
renderOption?: (option: DropdownOption, selected: boolean) => ReactNode;
|
|
23
|
+
};
|
|
24
|
+
declare function Dropdown(props: DropdownProps): react.JSX.Element;
|
|
25
|
+
|
|
26
|
+
declare const DROPDOWN_PLACEHOLDER = "Select";
|
|
27
|
+
declare const DROPDOWN_LOADING = "Loading...";
|
|
28
|
+
|
|
29
|
+
export { DROPDOWN_LOADING, DROPDOWN_PLACEHOLDER, Dropdown, type DropdownOption, type DropdownProps };
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import {
|
|
2
|
+
IconLoading
|
|
3
|
+
} from "../chunk-SE7Z4ZYP.js";
|
|
4
|
+
import {
|
|
5
|
+
IconArrowDown
|
|
6
|
+
} from "../chunk-OGSFVQK2.js";
|
|
7
|
+
import {
|
|
8
|
+
FLOATING_ALIGN,
|
|
9
|
+
FLOATING_SIDE,
|
|
10
|
+
useFloatingPosition
|
|
11
|
+
} from "../chunk-VAPGLPZ5.js";
|
|
12
|
+
import {
|
|
13
|
+
floatingLayerZIndex
|
|
14
|
+
} from "../chunk-RUOUGZWI.js";
|
|
15
|
+
import {
|
|
16
|
+
fontSans
|
|
17
|
+
} from "../chunk-FXENEWNN.js";
|
|
18
|
+
import {
|
|
19
|
+
cn
|
|
20
|
+
} from "../chunk-TUEV2KLC.js";
|
|
21
|
+
|
|
22
|
+
// src/dropdown/Dropdown.tsx
|
|
23
|
+
import { useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
24
|
+
import { createPortal } from "react-dom";
|
|
25
|
+
|
|
26
|
+
// src/dropdown/config.ts
|
|
27
|
+
var DROPDOWN_PLACEHOLDER = "Select";
|
|
28
|
+
var DROPDOWN_LOADING = "Loading...";
|
|
29
|
+
|
|
30
|
+
// src/dropdown/Dropdown.tsx
|
|
31
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
32
|
+
function Dropdown(props) {
|
|
33
|
+
const {
|
|
34
|
+
value,
|
|
35
|
+
defaultValue,
|
|
36
|
+
onChange,
|
|
37
|
+
options,
|
|
38
|
+
label,
|
|
39
|
+
placeholder = "Select",
|
|
40
|
+
disabled = false,
|
|
41
|
+
loading = false,
|
|
42
|
+
className,
|
|
43
|
+
triggerClassName,
|
|
44
|
+
panelClassName,
|
|
45
|
+
empty = "No options",
|
|
46
|
+
renderOption
|
|
47
|
+
} = props;
|
|
48
|
+
const triggerRef = useRef(null);
|
|
49
|
+
const panelRef = useRef(null);
|
|
50
|
+
const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);
|
|
51
|
+
const [open, setOpen] = useState(false);
|
|
52
|
+
const [triggerWidth, setTriggerWidth] = useState();
|
|
53
|
+
const selectedValue = value ?? uncontrolledValue;
|
|
54
|
+
const panelStyle = useFloatingPosition({
|
|
55
|
+
open,
|
|
56
|
+
triggerRef,
|
|
57
|
+
panelRef,
|
|
58
|
+
side: FLOATING_SIDE.Bottom,
|
|
59
|
+
align: FLOATING_ALIGN.Start,
|
|
60
|
+
offset: 6
|
|
61
|
+
});
|
|
62
|
+
const selectedOption = useMemo(
|
|
63
|
+
() => options.find((option) => option.value === selectedValue),
|
|
64
|
+
[options, selectedValue]
|
|
65
|
+
);
|
|
66
|
+
const close = () => setOpen(false);
|
|
67
|
+
const selectValue = (nextValue) => {
|
|
68
|
+
if (value === void 0) setUncontrolledValue(nextValue);
|
|
69
|
+
onChange?.(nextValue);
|
|
70
|
+
close();
|
|
71
|
+
};
|
|
72
|
+
useLayoutEffect(() => {
|
|
73
|
+
if (!open) return;
|
|
74
|
+
const width = triggerRef.current?.getBoundingClientRect().width;
|
|
75
|
+
if (width) setTriggerWidth(width);
|
|
76
|
+
}, [open]);
|
|
77
|
+
useEffect(() => {
|
|
78
|
+
if (!open) return;
|
|
79
|
+
const onPointerDown = (event) => {
|
|
80
|
+
const target = event.target;
|
|
81
|
+
if (!target) return;
|
|
82
|
+
if (triggerRef.current?.contains(target)) return;
|
|
83
|
+
if (panelRef.current?.contains(target)) return;
|
|
84
|
+
close();
|
|
85
|
+
};
|
|
86
|
+
const onKeyDown = (event) => {
|
|
87
|
+
if (event.key === "Escape") close();
|
|
88
|
+
};
|
|
89
|
+
const onScroll = (event) => {
|
|
90
|
+
const target = event.target;
|
|
91
|
+
if (target instanceof Node && panelRef.current?.contains(target)) return;
|
|
92
|
+
close();
|
|
93
|
+
};
|
|
94
|
+
document.addEventListener("mousedown", onPointerDown);
|
|
95
|
+
document.addEventListener("keydown", onKeyDown);
|
|
96
|
+
window.addEventListener("scroll", onScroll, true);
|
|
97
|
+
return () => {
|
|
98
|
+
document.removeEventListener("mousedown", onPointerDown);
|
|
99
|
+
document.removeEventListener("keydown", onKeyDown);
|
|
100
|
+
window.removeEventListener("scroll", onScroll, true);
|
|
101
|
+
};
|
|
102
|
+
}, [open]);
|
|
103
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("relative inline-block min-w-0", className), children: [
|
|
104
|
+
/* @__PURE__ */ jsxs(
|
|
105
|
+
"button",
|
|
106
|
+
{
|
|
107
|
+
ref: triggerRef,
|
|
108
|
+
type: "button",
|
|
109
|
+
disabled,
|
|
110
|
+
"aria-haspopup": "listbox",
|
|
111
|
+
"aria-expanded": open,
|
|
112
|
+
onClick: () => {
|
|
113
|
+
if (disabled) return;
|
|
114
|
+
setOpen((current) => !current);
|
|
115
|
+
},
|
|
116
|
+
className: cn(
|
|
117
|
+
"inline-flex cursor-pointer h-9 w-full min-w-0 items-center justify-between gap-2 overflow-hidden rounded-[6px] border border-[#E3E3E3] bg-white px-3 text-sm font-medium text-black outline-none",
|
|
118
|
+
fontSans,
|
|
119
|
+
disabled && "cursor-not-allowed opacity-30",
|
|
120
|
+
triggerClassName
|
|
121
|
+
),
|
|
122
|
+
children: [
|
|
123
|
+
label ? /* @__PURE__ */ jsx("span", { className: "min-w-0 shrink truncate text-[#aaa]", children: label }) : null,
|
|
124
|
+
/* @__PURE__ */ jsxs(
|
|
125
|
+
"span",
|
|
126
|
+
{
|
|
127
|
+
className: cn(
|
|
128
|
+
"flex min-w-0 items-center gap-2 truncate",
|
|
129
|
+
label && "flex-1 justify-end text-right",
|
|
130
|
+
!selectedOption && "text-[#606060]"
|
|
131
|
+
),
|
|
132
|
+
children: [
|
|
133
|
+
loading ? /* @__PURE__ */ jsx(IconLoading, { className: "size-3.25 shrink-0 animate-spin text-[#909090]" }) : null,
|
|
134
|
+
/* @__PURE__ */ jsx("span", { className: "min-w-0 truncate", children: selectedOption?.label ?? placeholder })
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
),
|
|
138
|
+
/* @__PURE__ */ jsx(IconArrowDown, { className: cn("h-1.5 w-2.75 shrink-0 text-black transition-transform", open && "rotate-180") })
|
|
139
|
+
]
|
|
140
|
+
}
|
|
141
|
+
),
|
|
142
|
+
open && typeof document !== "undefined" ? createPortal(
|
|
143
|
+
/* @__PURE__ */ jsx(
|
|
144
|
+
"div",
|
|
145
|
+
{
|
|
146
|
+
ref: panelRef,
|
|
147
|
+
role: "listbox",
|
|
148
|
+
style: { ...panelStyle, minWidth: triggerWidth, zIndex: floatingLayerZIndex() },
|
|
149
|
+
className: cn(
|
|
150
|
+
"w-max overflow-hidden rounded-[12px] border border-[#E0E0E0] bg-[#FDFDFD] py-1 text-base font-medium leading-normal text-black shadow-[0_0_20px_0_rgba(0,0,0,0.06)]",
|
|
151
|
+
fontSans,
|
|
152
|
+
panelClassName
|
|
153
|
+
),
|
|
154
|
+
children: loading ? /* @__PURE__ */ jsxs(
|
|
155
|
+
"p",
|
|
156
|
+
{
|
|
157
|
+
role: "status",
|
|
158
|
+
className: cn("flex items-center justify-center gap-2 px-3 py-4 text-sm font-medium text-[#aaa]", fontSans),
|
|
159
|
+
children: [
|
|
160
|
+
/* @__PURE__ */ jsx(IconLoading, { className: "size-3.25 shrink-0 animate-spin" }),
|
|
161
|
+
DROPDOWN_LOADING
|
|
162
|
+
]
|
|
163
|
+
}
|
|
164
|
+
) : options.length === 0 ? /* @__PURE__ */ jsx("p", { role: "status", className: cn("px-3 py-4 text-center text-sm font-medium text-[#aaa]", fontSans), children: empty }) : options.map((option) => {
|
|
165
|
+
const selected = option.value === selectedValue;
|
|
166
|
+
return /* @__PURE__ */ jsx(
|
|
167
|
+
"button",
|
|
168
|
+
{
|
|
169
|
+
type: "button",
|
|
170
|
+
role: "option",
|
|
171
|
+
"aria-selected": selected,
|
|
172
|
+
disabled: option.disabled,
|
|
173
|
+
onClick: () => {
|
|
174
|
+
if (option.disabled) return;
|
|
175
|
+
selectValue(option.value);
|
|
176
|
+
},
|
|
177
|
+
className: cn(
|
|
178
|
+
"flex cursor-pointer w-full border-0 bg-transparent text-left text-xs font-medium text-black hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-30",
|
|
179
|
+
renderOption ? "items-center px-2.5 py-1.5" : "px-3 py-2",
|
|
180
|
+
selected && "bg-black/5"
|
|
181
|
+
),
|
|
182
|
+
children: renderOption ? renderOption(option, selected) : option.label
|
|
183
|
+
},
|
|
184
|
+
option.value
|
|
185
|
+
);
|
|
186
|
+
})
|
|
187
|
+
}
|
|
188
|
+
),
|
|
189
|
+
document.body
|
|
190
|
+
) : null
|
|
191
|
+
] });
|
|
192
|
+
}
|
|
193
|
+
export {
|
|
194
|
+
DROPDOWN_LOADING,
|
|
195
|
+
DROPDOWN_PLACEHOLDER,
|
|
196
|
+
Dropdown
|
|
197
|
+
};
|
|
198
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/dropdown/Dropdown.tsx","../../src/dropdown/config.ts"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { IconArrowDown } from \"../icons/arrow-down\";\nimport { IconLoading } from \"../icons/loading\";\nimport { cn } from \"../lib/cn\";\nimport { fontSans } from \"../lib/font\";\nimport { floatingLayerZIndex } from \"../overlay/stack\";\nimport { FLOATING_ALIGN, FLOATING_SIDE, useFloatingPosition } from \"../overlay/use-floating-position\";\nimport { DROPDOWN_LOADING } from \"./config\";\n\nexport type DropdownOption = {\n value: string;\n label: ReactNode;\n disabled?: boolean;\n};\n\nexport type DropdownProps = {\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n options: DropdownOption[];\n label?: ReactNode;\n placeholder?: string;\n disabled?: boolean;\n loading?: boolean;\n className?: string;\n triggerClassName?: string;\n panelClassName?: string;\n empty?: ReactNode;\n renderOption?: (option: DropdownOption, selected: boolean) => ReactNode;\n};\n\nexport function Dropdown(props: DropdownProps) {\n const {\n value,\n defaultValue,\n onChange,\n options,\n label,\n placeholder = \"Select\",\n disabled = false,\n loading = false,\n className,\n triggerClassName,\n panelClassName,\n empty = \"No options\",\n renderOption,\n } = props;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);\n const [open, setOpen] = useState(false);\n const [triggerWidth, setTriggerWidth] = useState<number>();\n const selectedValue = value ?? uncontrolledValue;\n const panelStyle = useFloatingPosition({\n open,\n triggerRef,\n panelRef,\n side: FLOATING_SIDE.Bottom,\n align: FLOATING_ALIGN.Start,\n offset: 6,\n });\n\n const selectedOption = useMemo(\n () => options.find((option) => option.value === selectedValue),\n [options, selectedValue],\n );\n\n const close = () => setOpen(false);\n\n const selectValue = (nextValue: string) => {\n if (value === undefined) setUncontrolledValue(nextValue);\n onChange?.(nextValue);\n close();\n };\n\n useLayoutEffect(() => {\n if (!open) return;\n const width = triggerRef.current?.getBoundingClientRect().width;\n if (width) setTriggerWidth(width);\n }, [open]);\n\n useEffect(() => {\n if (!open) return;\n const onPointerDown = (event: MouseEvent) => {\n const target = event.target as Node | null;\n if (!target) return;\n if (triggerRef.current?.contains(target)) return;\n if (panelRef.current?.contains(target)) return;\n close();\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") close();\n };\n const onScroll = (event: Event) => {\n const target = event.target;\n if (target instanceof Node && panelRef.current?.contains(target)) return;\n close();\n };\n document.addEventListener(\"mousedown\", onPointerDown);\n document.addEventListener(\"keydown\", onKeyDown);\n window.addEventListener(\"scroll\", onScroll, true);\n return () => {\n document.removeEventListener(\"mousedown\", onPointerDown);\n document.removeEventListener(\"keydown\", onKeyDown);\n window.removeEventListener(\"scroll\", onScroll, true);\n };\n }, [open]);\n\n return (\n <div className={cn(\"relative inline-block min-w-0\", className)}>\n <button\n ref={triggerRef}\n type=\"button\"\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n onClick={() => {\n if (disabled) return;\n setOpen((current) => !current);\n }}\n className={cn(\n \"inline-flex cursor-pointer h-9 w-full min-w-0 items-center justify-between gap-2 overflow-hidden rounded-[6px] border border-[#E3E3E3] bg-white px-3 text-sm font-medium text-black outline-none\",\n fontSans,\n disabled && \"cursor-not-allowed opacity-30\",\n triggerClassName,\n )}\n >\n {label ? <span className=\"min-w-0 shrink truncate text-[#aaa]\">{label}</span> : null}\n <span\n className={cn(\n \"flex min-w-0 items-center gap-2 truncate\",\n label && \"flex-1 justify-end text-right\",\n !selectedOption && \"text-[#606060]\",\n )}\n >\n {loading ? <IconLoading className=\"size-3.25 shrink-0 animate-spin text-[#909090]\" /> : null}\n <span className=\"min-w-0 truncate\">{selectedOption?.label ?? placeholder}</span>\n </span>\n <IconArrowDown className={cn(\"h-1.5 w-2.75 shrink-0 text-black transition-transform\", open && \"rotate-180\")} />\n </button>\n {open && typeof document !== \"undefined\"\n ? createPortal(\n <div\n ref={panelRef}\n role=\"listbox\"\n style={{ ...panelStyle, minWidth: triggerWidth, zIndex: floatingLayerZIndex() }}\n className={cn(\n \"w-max overflow-hidden rounded-[12px] border border-[#E0E0E0] bg-[#FDFDFD] py-1 text-base font-medium leading-normal text-black shadow-[0_0_20px_0_rgba(0,0,0,0.06)]\",\n fontSans,\n panelClassName,\n )}\n >\n {loading ? (\n <p\n role=\"status\"\n className={cn(\"flex items-center justify-center gap-2 px-3 py-4 text-sm font-medium text-[#aaa]\", fontSans)}\n >\n <IconLoading className=\"size-3.25 shrink-0 animate-spin\" />\n {DROPDOWN_LOADING}\n </p>\n ) : options.length === 0 ? (\n <p role=\"status\" className={cn(\"px-3 py-4 text-center text-sm font-medium text-[#aaa]\", fontSans)}>\n {empty}\n </p>\n ) : (\n options.map((option) => {\n const selected = option.value === selectedValue;\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"option\"\n aria-selected={selected}\n disabled={option.disabled}\n onClick={() => {\n if (option.disabled) return;\n selectValue(option.value);\n }}\n className={cn(\n \"flex cursor-pointer w-full border-0 bg-transparent text-left text-xs font-medium text-black hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-30\",\n renderOption ? \"items-center px-2.5 py-1.5\" : \"px-3 py-2\",\n selected && \"bg-black/5\",\n )}\n >\n {renderOption ? renderOption(option, selected) : option.label}\n </button>\n );\n })\n )}\n </div>,\n document.body,\n )\n : null}\n </div>\n );\n}\n\nexport default Dropdown;\n","export const DROPDOWN_PLACEHOLDER = \"Select\";\nexport const DROPDOWN_LOADING = \"Loading...\";\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// src/icons/all-networks.tsx
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
var IconAllNetworks = (props) => {
|
|
4
|
+
const { className, style } = props;
|
|
5
|
+
return /* @__PURE__ */ jsx(
|
|
6
|
+
"svg",
|
|
7
|
+
{
|
|
8
|
+
width: "22",
|
|
9
|
+
height: "22",
|
|
10
|
+
viewBox: "0 0 22 22",
|
|
11
|
+
fill: "none",
|
|
12
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
13
|
+
className,
|
|
14
|
+
style,
|
|
15
|
+
children: /* @__PURE__ */ jsx(
|
|
16
|
+
"path",
|
|
17
|
+
{
|
|
18
|
+
d: "M8.25 0C8.52085 -3.70305e-09 8.78905 0.053348 9.03928 0.156998C9.28952 0.260649 9.51689 0.412571 9.70841 0.604092C9.89993 0.795613 10.0519 1.02298 10.1555 1.27322C10.2592 1.52345 10.3125 1.79165 10.3125 2.0625V10.3125H2.0625C1.79165 10.3125 1.52345 10.2592 1.27322 10.1555C1.02298 10.0519 0.795613 9.89993 0.604092 9.70841C0.412571 9.51689 0.260649 9.28952 0.156998 9.03928C0.053348 8.78905 -3.70305e-09 8.52085 0 8.25V2.0625C0 1.51549 0.217298 0.990886 0.604092 0.604092C0.990886 0.217298 1.51549 0 2.0625 0H8.25ZM8.25 2.0625H2.0625V8.25H8.25V2.0625ZM10.3125 11.6875V19.9375C10.3125 20.2084 10.2592 20.4766 10.1555 20.7268C10.0519 20.977 9.89993 21.2044 9.70841 21.3959C9.51689 21.5874 9.28952 21.7394 9.03928 21.843C8.78905 21.9467 8.52085 22 8.25 22H2.0625C1.51549 22 0.990886 21.7827 0.604092 21.3959C0.217298 21.0091 0 20.4845 0 19.9375V13.75C-3.70305e-09 13.4791 0.053348 13.211 0.156998 12.9607C0.260649 12.7105 0.412571 12.4831 0.604092 12.2916C0.795613 12.1001 1.02298 11.9481 1.27322 11.8445C1.52345 11.7408 1.79165 11.6875 2.0625 11.6875H10.3125ZM2.0625 13.75V19.9375H8.25V13.75H2.0625ZM16.8438 0C18.2113 0 19.5228 0.543246 20.4898 1.51023C21.4568 2.47722 22 3.78873 22 5.15625C22 6.52377 21.4568 7.83529 20.4898 8.80227C19.5228 9.76925 18.2113 10.3125 16.8438 10.3125C15.4762 10.3125 14.1647 9.76925 13.1977 8.80227C12.2307 7.83529 11.6875 6.52377 11.6875 5.15625C11.6875 3.78873 12.2307 2.47722 13.1977 1.51023C14.1647 0.543246 15.4762 0 16.8438 0ZM16.8438 2.0625C16.4374 2.06246 16.0351 2.14246 15.6597 2.29791C15.2843 2.45337 14.9433 2.68125 14.6559 2.96853C14.3686 3.25582 14.1407 3.59689 13.9852 3.97226C13.8297 4.34763 13.7497 4.74995 13.7497 5.15625C13.7497 5.56255 13.8297 5.96488 13.9852 6.34025C14.1407 6.71562 14.3686 7.05668 14.6559 7.34397C14.9433 7.63125 15.2843 7.85913 15.6597 8.01459C16.0351 8.17005 16.4374 8.25004 16.8438 8.25C17.6642 8.24992 18.451 7.92394 19.0312 7.34376C19.6113 6.76358 19.9372 5.97671 19.9372 5.15625C19.9372 4.33579 19.6113 3.54893 19.0312 2.96874C18.451 2.38856 17.6642 2.06258 16.8438 2.0625ZM19.9375 11.6875C20.2084 11.6875 20.4766 11.7408 20.7268 11.8445C20.977 11.9481 21.2044 12.1001 21.3959 12.2916C21.5874 12.4831 21.7394 12.7105 21.843 12.9607C21.9467 13.211 22 13.4791 22 13.75V19.9375C22 20.2084 21.9467 20.4766 21.843 20.7268C21.7394 20.977 21.5874 21.2044 21.3959 21.3959C21.2044 21.5874 20.977 21.7394 20.7268 21.843C20.4766 21.9467 20.2084 22 19.9375 22H13.75C13.4791 22 13.211 21.9467 12.9607 21.843C12.7105 21.7394 12.4831 21.5874 12.2916 21.3959C12.1001 21.2044 11.9481 20.977 11.8445 20.7268C11.7408 20.4766 11.6875 20.2084 11.6875 19.9375V11.6875H19.9375ZM13.75 19.9375H19.9375V13.75H13.75V19.9375Z",
|
|
19
|
+
fill: "currentColor"
|
|
20
|
+
}
|
|
21
|
+
)
|
|
22
|
+
}
|
|
23
|
+
);
|
|
24
|
+
};
|
|
25
|
+
var all_networks_default = IconAllNetworks;
|
|
26
|
+
export {
|
|
27
|
+
IconAllNetworks,
|
|
28
|
+
all_networks_default as default
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=all-networks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/icons/all-networks.tsx"],"sourcesContent":["import type { IconProps } from \"./types\";\n\nexport const IconAllNetworks = (props: IconProps) => {\n const { className, style } = props;\n\n return (\n <svg\n width=\"22\"\n height=\"22\"\n viewBox=\"0 0 22 22\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <path\n d=\"M8.25 0C8.52085 -3.70305e-09 8.78905 0.053348 9.03928 0.156998C9.28952 0.260649 9.51689 0.412571 9.70841 0.604092C9.89993 0.795613 10.0519 1.02298 10.1555 1.27322C10.2592 1.52345 10.3125 1.79165 10.3125 2.0625V10.3125H2.0625C1.79165 10.3125 1.52345 10.2592 1.27322 10.1555C1.02298 10.0519 0.795613 9.89993 0.604092 9.70841C0.412571 9.51689 0.260649 9.28952 0.156998 9.03928C0.053348 8.78905 -3.70305e-09 8.52085 0 8.25V2.0625C0 1.51549 0.217298 0.990886 0.604092 0.604092C0.990886 0.217298 1.51549 0 2.0625 0H8.25ZM8.25 2.0625H2.0625V8.25H8.25V2.0625ZM10.3125 11.6875V19.9375C10.3125 20.2084 10.2592 20.4766 10.1555 20.7268C10.0519 20.977 9.89993 21.2044 9.70841 21.3959C9.51689 21.5874 9.28952 21.7394 9.03928 21.843C8.78905 21.9467 8.52085 22 8.25 22H2.0625C1.51549 22 0.990886 21.7827 0.604092 21.3959C0.217298 21.0091 0 20.4845 0 19.9375V13.75C-3.70305e-09 13.4791 0.053348 13.211 0.156998 12.9607C0.260649 12.7105 0.412571 12.4831 0.604092 12.2916C0.795613 12.1001 1.02298 11.9481 1.27322 11.8445C1.52345 11.7408 1.79165 11.6875 2.0625 11.6875H10.3125ZM2.0625 13.75V19.9375H8.25V13.75H2.0625ZM16.8438 0C18.2113 0 19.5228 0.543246 20.4898 1.51023C21.4568 2.47722 22 3.78873 22 5.15625C22 6.52377 21.4568 7.83529 20.4898 8.80227C19.5228 9.76925 18.2113 10.3125 16.8438 10.3125C15.4762 10.3125 14.1647 9.76925 13.1977 8.80227C12.2307 7.83529 11.6875 6.52377 11.6875 5.15625C11.6875 3.78873 12.2307 2.47722 13.1977 1.51023C14.1647 0.543246 15.4762 0 16.8438 0ZM16.8438 2.0625C16.4374 2.06246 16.0351 2.14246 15.6597 2.29791C15.2843 2.45337 14.9433 2.68125 14.6559 2.96853C14.3686 3.25582 14.1407 3.59689 13.9852 3.97226C13.8297 4.34763 13.7497 4.74995 13.7497 5.15625C13.7497 5.56255 13.8297 5.96488 13.9852 6.34025C14.1407 6.71562 14.3686 7.05668 14.6559 7.34397C14.9433 7.63125 15.2843 7.85913 15.6597 8.01459C16.0351 8.17005 16.4374 8.25004 16.8438 8.25C17.6642 8.24992 18.451 7.92394 19.0312 7.34376C19.6113 6.76358 19.9372 5.97671 19.9372 5.15625C19.9372 4.33579 19.6113 3.54893 19.0312 2.96874C18.451 2.38856 17.6642 2.06258 16.8438 2.0625ZM19.9375 11.6875C20.2084 11.6875 20.4766 11.7408 20.7268 11.8445C20.977 11.9481 21.2044 12.1001 21.3959 12.2916C21.5874 12.4831 21.7394 12.7105 21.843 12.9607C21.9467 13.211 22 13.4791 22 13.75V19.9375C22 20.2084 21.9467 20.4766 21.843 20.7268C21.7394 20.977 21.5874 21.2044 21.3959 21.3959C21.2044 21.5874 20.977 21.7394 20.7268 21.843C20.4766 21.9467 20.2084 22 19.9375 22H13.75C13.4791 22 13.211 21.9467 12.9607 21.843C12.7105 21.7394 12.4831 21.5874 12.2916 21.3959C12.1001 21.2044 11.9481 20.977 11.8445 20.7268C11.7408 20.4766 11.6875 20.2084 11.6875 19.9375V11.6875H19.9375ZM13.75 19.9375H19.9375V13.75H13.75V19.9375Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\nexport default IconAllNetworks;\n"],"mappings":";AAeM;AAbC,IAAM,kBAAkB,CAAC,UAAqB;AACnD,QAAM,EAAE,WAAW,MAAM,IAAI;AAE7B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN;AAAA,MACA;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,GAAE;AAAA,UACF,MAAK;AAAA;AAAA,MACP;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,uBAAQ;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// src/icons/back.tsx
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
var IconBack = (props) => {
|
|
4
|
+
const { className, style } = props;
|
|
5
|
+
return /* @__PURE__ */ jsxs(
|
|
6
|
+
"svg",
|
|
7
|
+
{
|
|
8
|
+
width: "28",
|
|
9
|
+
height: "28",
|
|
10
|
+
viewBox: "0 0 28 28",
|
|
11
|
+
fill: "none",
|
|
12
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
13
|
+
className: className ? `sfp-icon ${className}` : "sfp-icon",
|
|
14
|
+
style,
|
|
15
|
+
children: [
|
|
16
|
+
/* @__PURE__ */ jsx(
|
|
17
|
+
"path",
|
|
18
|
+
{
|
|
19
|
+
d: "M16 9L12 14.1724L16 19",
|
|
20
|
+
stroke: "currentColor",
|
|
21
|
+
strokeWidth: "1.5",
|
|
22
|
+
strokeLinecap: "round",
|
|
23
|
+
strokeLinejoin: "round"
|
|
24
|
+
}
|
|
25
|
+
),
|
|
26
|
+
/* @__PURE__ */ jsx(
|
|
27
|
+
"rect",
|
|
28
|
+
{
|
|
29
|
+
opacity: "0.1",
|
|
30
|
+
x: "0.5",
|
|
31
|
+
y: "0.5",
|
|
32
|
+
width: "27",
|
|
33
|
+
height: "27",
|
|
34
|
+
rx: "13.5",
|
|
35
|
+
stroke: "black"
|
|
36
|
+
}
|
|
37
|
+
)
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
);
|
|
41
|
+
};
|
|
42
|
+
var back_default = IconBack;
|
|
43
|
+
export {
|
|
44
|
+
IconBack,
|
|
45
|
+
back_default as default
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=back.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/icons/back.tsx"],"sourcesContent":["import type { IconProps } from \"./types\";\n\nexport const IconBack = (props: IconProps) => {\n const { className, style } = props;\n\n return (\n <svg\n width=\"28\"\n height=\"28\"\n viewBox=\"0 0 28 28\"\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=\"M16 9L12 14.1724L16 19\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <rect\n opacity=\"0.1\"\n x=\"0.5\"\n y=\"0.5\"\n width=\"27\"\n height=\"27\"\n rx=\"13.5\"\n stroke=\"black\"\n />\n </svg>\n );\n};\n\nexport default IconBack;\n"],"mappings":";AAMI,SASE,KATF;AAJG,IAAM,WAAW,CAAC,UAAqB;AAC5C,QAAM,EAAE,WAAW,MAAM,IAAI;AAE7B,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,GAAE;AAAA,YACF,QAAO;AAAA,YACP,aAAY;AAAA,YACZ,eAAc;AAAA,YACd,gBAAe;AAAA;AAAA,QACjB;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,SAAQ;AAAA,YACR,GAAE;AAAA,YACF,GAAE;AAAA,YACF,OAAM;AAAA,YACN,QAAO;AAAA,YACP,IAAG;AAAA,YACH,QAAO;AAAA;AAAA,QACT;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,eAAQ;","names":[]}
|