ics-ui-kit 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +73 -73
- package/dist/AlertContext-CxjW1LVL.js.map +1 -1
- package/dist/AlertIcon-BphnEYvV.js.map +1 -1
- package/dist/Button-_qdP4hSf.js.map +1 -1
- package/dist/ButtonBase-CbWrYcx-.js.map +1 -1
- package/dist/CalendarPreviousMonthButton-CHMp8bkd.js.map +1 -1
- package/dist/CheckboxField-xDqHgXHh.js.map +1 -1
- package/dist/Combination-DeIugdgY.js.map +1 -1
- package/dist/Command-WsAKNQrY.js.map +1 -1
- package/dist/ComponentVariantProvider-brk0g-hm.js.map +1 -1
- package/dist/Description-BTPMlTT-.js.map +1 -1
- package/dist/Dialog-i_Y-phdM.js.map +1 -1
- package/dist/Divider-DPW5ZhZ8.js.map +1 -1
- package/dist/EmptyState-DRKjscH-.js.map +1 -1
- package/dist/ErrorState-B26k67-z.js.map +1 -1
- package/dist/FeatureIcon-BGE0Orkc.js.map +1 -1
- package/dist/Field-BcwUtgGr.js.map +1 -1
- package/dist/FieldLabel-DYu1AcGH.js.map +1 -1
- package/dist/FolderSvg-cw0DxNVy.js.map +1 -1
- package/dist/FormFooterTemplate-CHlas_Pp.js.map +1 -1
- package/dist/FormHeader-PE63OqG9.js.map +1 -1
- package/dist/FormStack-DfoaOry7.js.map +1 -1
- package/dist/HintState-BxrCAWqq.js.map +1 -1
- package/dist/Icon-DH3ev9GK.js.map +1 -1
- package/dist/IconButton-DAg1oMwz.js.map +1 -1
- package/dist/IconTooltip-R6_6_f40.js.map +1 -1
- package/dist/Indicator-AqxHWPA9.js.map +1 -1
- package/dist/InputGroup-CW55G5nE.js.map +1 -1
- package/dist/InputOTP-DkVh6bBz.js.map +1 -1
- package/dist/Loader-BpHiL6W-.js.map +1 -1
- package/dist/MenuItem-C51uFz3V.js.map +1 -1
- package/dist/MenuItemShortcut-D1faeIXp.js.map +1 -1
- package/dist/MenuItemText-CRpaPbvg.js.map +1 -1
- package/dist/Overlay-E0UvxzIc.js.map +1 -1
- package/dist/Popover-XrJa7lyb.js.map +1 -1
- package/dist/RichButton-Bt0yUShU.js.map +1 -1
- package/dist/ScrollArea-CuuTeDn3.js.map +1 -1
- package/dist/ScrollShadowContainer-DdrnF8qU.js.map +1 -1
- package/dist/SearchSelectTag-Dp5_OvZp.js.map +1 -1
- package/dist/Select-DO02vXt3.js.map +1 -1
- package/dist/Sheet-C2UoHLL0.js.map +1 -1
- package/dist/Shortcut-D8L15_ed.js.map +1 -1
- package/dist/Skeleton-y6I-i9q5.js.map +1 -1
- package/dist/TableFillHandle-CHHoUi6s.js.map +1 -1
- package/dist/Tag-Cf6HftP-.js.map +1 -1
- package/dist/Text-DeBE8AKl.js.map +1 -1
- package/dist/TextInput-CoL8nOyt.js.map +1 -1
- package/dist/TextOverflowTooltip-XPDdO9Dz.js.map +1 -1
- package/dist/Toggle-CmalMf4O.js.map +1 -1
- package/dist/Tooltip-D2XvRS0c.js.map +1 -1
- package/dist/TriggerButton-CoAgB4lx.js.map +1 -1
- package/dist/blocks/auth/otp-form.js.map +1 -1
- package/dist/cn-dsXlqdJg.js.map +1 -1
- package/dist/components/alert-dialog.js.map +1 -1
- package/dist/components/alert.js.map +1 -1
- package/dist/components/avatar.js.map +1 -1
- package/dist/components/background-pattern.js.map +1 -1
- package/dist/components/badge.js.map +1 -1
- package/dist/components/banner.js.map +1 -1
- package/dist/components/breadcrumb.js.map +1 -1
- package/dist/components/button.js.map +1 -1
- package/dist/components/calendar-scroll.js +28 -27
- package/dist/components/calendar-scroll.js.map +1 -1
- package/dist/components/calendar.js.map +1 -1
- package/dist/components/card.js.map +1 -1
- package/dist/components/carousel.js.map +1 -1
- package/dist/components/collapsible.js.map +1 -1
- package/dist/components/color-tile.js.map +1 -1
- package/dist/components/container.js.map +1 -1
- package/dist/components/context-menu.js.map +1 -1
- package/dist/components/counter.js.map +1 -1
- package/dist/components/dialog.js.map +1 -1
- package/dist/components/divider.js.map +1 -1
- package/dist/components/drawer.js.map +1 -1
- package/dist/components/dropdown.js.map +1 -1
- package/dist/components/error-state.js.map +1 -1
- package/dist/components/file-upload.js.map +1 -1
- package/dist/components/form.js.map +1 -1
- package/dist/components/glass-toolbar.js.map +1 -1
- package/dist/components/image-placeholder.js.map +1 -1
- package/dist/components/image-preview.js.map +1 -1
- package/dist/components/image-uploader.js.map +1 -1
- package/dist/components/input.js.map +1 -1
- package/dist/components/menu-item.js.map +1 -1
- package/dist/components/page-state.js.map +1 -1
- package/dist/components/progress-circle.js.map +1 -1
- package/dist/components/progress.js.map +1 -1
- package/dist/components/prose.js.map +1 -1
- package/dist/components/radio-group.js.map +1 -1
- package/dist/components/resizable.js +26 -1530
- package/dist/components/resizable.js.map +1 -1
- package/dist/components/scheduler/components/hour-rows/HourRows.stories.d.ts +1 -1
- package/dist/components/scheduler/components/week-days/WeekDays.stories.d.ts +1 -0
- package/dist/components/scheduler.js.map +1 -1
- package/dist/components/search-select.js.map +1 -1
- package/dist/components/sidebar.js +142 -141
- package/dist/components/sidebar.js.map +1 -1
- package/dist/components/slider.js.map +1 -1
- package/dist/components/stepper.js.map +1 -1
- package/dist/components/switch.js.map +1 -1
- package/dist/components/system-state.js.map +1 -1
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/tag-input.js.map +1 -1
- package/dist/components/textarea.js +30 -189
- package/dist/components/textarea.js.map +1 -1
- package/dist/components/timer.js.map +1 -1
- package/dist/components/toast.js.map +1 -1
- package/dist/components/toggle-group.js.map +1 -1
- package/dist/components/toolbar.js.map +1 -1
- package/dist/floating-ui.react-dom-BwDfy92G.js.map +1 -1
- package/dist/font-smoothing.css +4 -4
- package/dist/formatBytes-C4QXq5lC.js.map +1 -1
- package/dist/index-0ioNhtNM.js.map +1 -1
- package/dist/index-1SnkxfPR.js.map +1 -1
- package/dist/index-437EL2iq.js.map +1 -1
- package/dist/index-BDrapWDv.js.map +1 -1
- package/dist/index-BGQepRFJ.js.map +1 -1
- package/dist/index-BVqs-uqP.js.map +1 -1
- package/dist/index-BZPx6jYI.js.map +1 -1
- package/dist/index-Bb23HztA.js.map +1 -1
- package/dist/index-BjtNfqNq.js.map +1 -1
- package/dist/index-BpWB3aFK.js.map +1 -1
- package/dist/index-ByaXH_ih.js.map +1 -1
- package/dist/index-CCKe-Mpx.js.map +1 -1
- package/dist/index-CFaU3UXv.js.map +1 -1
- package/dist/index-CLuiUUQ8.js.map +1 -1
- package/dist/index-CMxHunQ4.js.map +1 -1
- package/dist/index-CmBeyp2d.js.map +1 -1
- package/dist/index-DFZozV_h.js.map +1 -1
- package/dist/index-DHsfW5Rj.js.map +1 -1
- package/dist/index-DHyZ_0Ut.js.map +1 -1
- package/dist/index-DLcqcWxM.js.map +1 -1
- package/dist/index-DnnQs07z.js.map +1 -1
- package/dist/index-Uiy0Xwy2.js.map +1 -1
- package/dist/index-_ITz1IyW.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/inputBaseStyles-CZwQWSub.js.map +1 -1
- package/dist/lib/utils.js.map +1 -1
- package/dist/opaqueCell-D95h1mFM.js.map +1 -1
- package/dist/ssr.test.d.ts +1 -0
- package/dist/tailwind.css +407 -407
- package/dist/theme.css +360 -360
- package/dist/treeModel-CUO1A5s7.js.map +1 -1
- package/dist/types/css.d.ts +4 -4
- package/dist/useBreakpoints-DHvp74UL.js.map +1 -1
- package/dist/useDebounce-BRah78CF.js.map +1 -1
- package/dist/useFileUpload-Bnl3P8mP.js.map +1 -1
- package/dist/useIsomorphicLayoutEffect-MNxJD61V.js +6 -0
- package/dist/useIsomorphicLayoutEffect-MNxJD61V.js.map +1 -0
- package/dist/useItemsKeyboardNavigation-CmeOR30y.js.map +1 -1
- package/dist/useMergeRefs-qoKniYqT.js.map +1 -1
- package/package.json +210 -210
- package/dist/design-tokens.source.json +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"breadcrumb.js","sources":["../../node_modules/.pnpm/lucide-react@0.460.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/ellipsis.js","../../src/components/breadcrumb/Breadcrumb.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Ellipsis = createLucideIcon(\"Ellipsis\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"1\", key: \"41hilf\" }],\n [\"circle\", { cx: \"19\", cy: \"12\", r: \"1\", key: \"1wjl8i\" }],\n [\"circle\", { cx: \"5\", cy: \"12\", r: \"1\", key: \"1pcz8c\" }]\n]);\n\nexport { Ellipsis as default };\n//# sourceMappingURL=ellipsis.js.map\n","import * as React from \"react\";\
|
|
1
|
+
{"version":3,"file":"breadcrumb.js","sources":["../../node_modules/.pnpm/lucide-react@0.460.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/ellipsis.js","../../src/components/breadcrumb/Breadcrumb.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Ellipsis = createLucideIcon(\"Ellipsis\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"1\", key: \"41hilf\" }],\n [\"circle\", { cx: \"19\", cy: \"12\", r: \"1\", key: \"1wjl8i\" }],\n [\"circle\", { cx: \"5\", cy: \"12\", r: \"1\", key: \"1pcz8c\" }]\n]);\n\nexport { Ellipsis as default };\n//# sourceMappingURL=ellipsis.js.map\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { ChevronRight, MoreHorizontal } from \"lucide-react\";\nimport { tv } from \"tailwind-variants\";\n\nconst Breadcrumb = React.forwardRef<\n\tHTMLElement,\n\tReact.ComponentPropsWithoutRef<\"nav\"> & {\n\t\tseparator?: React.ReactNode;\n\t}\n>(({ ...props }, ref) => <nav ref={ref} aria-label=\"breadcrumb\" {...props} />);\n\nBreadcrumb.displayName = \"Breadcrumb\";\n\nconst breadcrumbListStyles = tv({\n\tbase: \"flex flex-wrap items-center gap-2 break-words text-sm text-muted\"\n});\n\nconst BreadcrumbList = React.forwardRef<HTMLOListElement, React.ComponentPropsWithoutRef<\"ol\">>(\n\t({ className, ...props }, ref) => <ol ref={ref} className={breadcrumbListStyles({ className })} {...props} />\n);\n\nBreadcrumbList.displayName = \"BreadcrumbList\";\n\nconst breadcrumbItemStyles = tv({\n\tbase: \"inline-flex items-center gap-1.5 py-2\"\n});\n\nconst BreadcrumbItem = React.forwardRef<HTMLLIElement, React.ComponentPropsWithoutRef<\"li\">>(\n\t({ className, ...props }, ref) => <li ref={ref} className={breadcrumbItemStyles({ className })} {...props} />\n);\n\nBreadcrumbItem.displayName = \"BreadcrumbItem\";\n\nconst breadcrumbLinkStyles = tv({\n\tbase: \"transition-colors hover:text-primary-fg\"\n});\n\nconst BreadcrumbLink = React.forwardRef<\n\tHTMLAnchorElement,\n\tReact.ComponentPropsWithoutRef<\"a\"> & {\n\t\tasChild?: boolean;\n\t}\n>(({ asChild, className, ...props }, ref) => {\n\tconst Comp = asChild ? Slot : \"a\";\n\n\treturn <Comp ref={ref} className={breadcrumbLinkStyles({ className })} {...props} />;\n});\n\nBreadcrumbLink.displayName = \"BreadcrumbLink\";\n\nconst breadcrumbPageStyles = tv({\n\tbase: \"font-normal text-primary-fg\"\n});\n\nconst BreadcrumbPage = React.forwardRef<HTMLSpanElement, React.ComponentPropsWithoutRef<\"span\">>(\n\t({ className, ...props }, ref) => (\n\t\t<span\n\t\t\tref={ref}\n\t\t\trole=\"link\"\n\t\t\taria-disabled=\"true\"\n\t\t\taria-current=\"page\"\n\t\t\tclassName={breadcrumbPageStyles({ className })}\n\t\t\t{...props}\n\t\t/>\n\t)\n);\n\nBreadcrumbPage.displayName = \"BreadcrumbPage\";\n\nconst breadcrumbSeparatorStyles = tv({\n\tbase: \"[&>svg]:h-4 [&>svg]:w-4\"\n});\n\nconst BreadcrumbSeparator = ({ children, className, ...props }: React.ComponentProps<\"li\">) => (\n\t<li role=\"presentation\" aria-hidden=\"true\" className={breadcrumbSeparatorStyles({ className })} {...props}>\n\t\t{children ?? <ChevronRight />}\n\t</li>\n);\n\nBreadcrumbSeparator.displayName = \"BreadcrumbSeparator\";\n\nconst breadcrumbEllipsisStyles = tv({\n\tslots: {\n\t\twrapper: \"flex h-5 w-5 items-center justify-center hover:text-primary-fg\",\n\t\tmore: \"h-4 w-4\",\n\t\ttext: \"sr-only\"\n\t}\n});\n\nconst BreadcrumbEllipsis = ({ className, ...props }: React.ComponentProps<\"span\">) => {\n\tconst styles = breadcrumbEllipsisStyles();\n\n\treturn (\n\t\t<span role=\"presentation\" aria-hidden=\"true\" className={styles.wrapper({ className })} {...props}>\n\t\t\t<MoreHorizontal className={styles.more()} />\n\t\t\t<span className={styles.text()}>More</span>\n\t\t</span>\n\t);\n};\n\nBreadcrumbEllipsis.displayName = \"BreadcrumbElipssis\";\n\nexport {\n\tBreadcrumb,\n\tBreadcrumbList,\n\tBreadcrumbItem,\n\tBreadcrumbLink,\n\tBreadcrumbPage,\n\tBreadcrumbSeparator,\n\tBreadcrumbEllipsis\n};\n"],"names":["Ellipsis","createLucideIcon","Breadcrumb","React","props","ref","jsx","breadcrumbListStyles","tv","BreadcrumbList","className","breadcrumbItemStyles","BreadcrumbItem","breadcrumbLinkStyles","BreadcrumbLink","asChild","Slot","breadcrumbPageStyles","BreadcrumbPage","breadcrumbSeparatorStyles","BreadcrumbSeparator","children","ChevronRight","breadcrumbEllipsisStyles","BreadcrumbEllipsis","styles","jsxs","MoreHorizontal"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button.js","sources":["../../src/components/button/templates/loading-button/LoadingButtonTemplate.tsx"],"sourcesContent":["import React, { PropsWithChildren } from \"react\";\
|
|
1
|
+
{"version":3,"file":"button.js","sources":["../../src/components/button/templates/loading-button/LoadingButtonTemplate.tsx"],"sourcesContent":["import React, { PropsWithChildren } from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport { LoaderCircle } from \"lucide-react\";\nimport { IconButton } from \"../../icon-button/IconButton\";\nimport { Button } from \"../../button/Button\";\nimport { ButtonBaseProps } from \"../../button-base/ButtonBase\";\n\nconst loadingButtonTemplateVariants = tv({\n\tslots: {\n\t\ticon: \"animate-spin\"\n\t}\n});\n\nexport type LoadingButtonTemplateProps = ButtonBaseProps & {\n\ttext?: string;\n};\n\nexport const LoadingButtonTemplate = React.forwardRef<HTMLButtonElement, PropsWithChildren<LoadingButtonTemplateProps>>(\n\t({ text, ...props }, ref) => {\n\t\tconst styles = loadingButtonTemplateVariants();\n\n\t\tif (!text) return <IconButton disabled icon={LoaderCircle} iconClassName={styles.icon()} {...props} />;\n\n\t\treturn (\n\t\t\t<Button disabled startIcon={LoaderCircle} iconClassName={styles.icon()} ref={ref} {...props}>\n\t\t\t\t{text}\n\t\t\t</Button>\n\t\t);\n\t}\n);\n\nLoadingButtonTemplate.displayName = \"LoadingButtonTemplate\";\n"],"names":["loadingButtonTemplateVariants","tv","LoadingButtonTemplate","React","text","props","ref","styles","jsx","Button","LoaderCircle","IconButton"],"mappings":";;;;;;;;;AAOA,MAAMA,IAAgCC,EAAG;AAAA,EACxC,OAAO;AAAA,IACN,MAAM;AAAA,EAAA;AAER,CAAC,GAMYC,IAAwBC,EAAM;AAAA,EAC1C,CAAC,EAAE,MAAAC,GAAM,GAAGC,EAAA,GAASC,MAAQ;AAC5B,UAAMC,IAASP,EAA8B;AAE7C,WAAKI,IAGH,gBAAAI,EAAAC,GAAA,EAAO,UAAQ,IAAC,WAAWC,GAAc,eAAeH,EAAO,KAAK,GAAG,KAAAD,GAAW,GAAGD,GACpF,UACFD,GAAA,IALiB,gBAAAI,EAACG,KAAW,UAAQ,IAAC,MAAMD,GAAc,eAAeH,EAAO,KAAK,GAAI,GAAGF,EAAO,CAAA;AAAA,EAKnG;AAGH;AAEAH,EAAsB,cAAc;"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as n, jsxs as E } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
2
|
+
import { n as ue } from "../useIsomorphicLayoutEffect-MNxJD61V.js";
|
|
3
|
+
import { useRef as C, useState as L, useCallback as N, useEffect as Z, useMemo as i, Children as me, cloneElement as he, isValidElement as fe } from "react";
|
|
3
4
|
import { T as pe } from "../index-BVqs-uqP.js";
|
|
4
5
|
import { f as H, e as be, s as we, a as xe, C as ye, l as Me, b as P, c as q, d as ve, g as ge, h as De, i as Ee, D as Ne, j as Se, M as Ce } from "../CalendarPreviousMonthButton-CHMp8bkd.js";
|
|
5
6
|
const d = 280, V = 4, G = 1, Fe = 100, ke = 2100, _e = pe({
|
|
@@ -16,32 +17,32 @@ const d = 280, V = 4, G = 1, Fe = 100, ke = 2100, _e = pe({
|
|
|
16
17
|
scroller: "relative flex-1 overflow-y-auto overscroll-contain px-3",
|
|
17
18
|
window: "absolute inset-x-3 top-0"
|
|
18
19
|
}
|
|
19
|
-
}), B = (o) => o.getFullYear() * 12 + o.getMonth(), f = (o) => new Date(Math.floor(o / 12), o % 12, 1), S = (o, s, a) => Math.min(Math.max(o, s), a),
|
|
20
|
-
const a = C(null),
|
|
20
|
+
}), B = (o) => o.getFullYear() * 12 + o.getMonth(), f = (o) => new Date(Math.floor(o / 12), o % 12, 1), S = (o, s, a) => Math.min(Math.max(o, s), a), Te = ({ modifiers: o, ...s }) => {
|
|
21
|
+
const a = C(null), m = C(!0);
|
|
21
22
|
return Z(() => {
|
|
22
|
-
const F =
|
|
23
|
-
if (
|
|
23
|
+
const F = m.current;
|
|
24
|
+
if (m.current = !1, !o.focused || F)
|
|
24
25
|
return;
|
|
25
26
|
const u = a.current?.querySelector("button"), M = u?.closest("[data-calendar-scroll-scroller]");
|
|
26
27
|
!u || !M || u === document.activeElement || M.contains(document.activeElement) && (u.focus({ preventScroll: !0 }), u.scrollIntoView({ block: "nearest" }));
|
|
27
28
|
}, [o.focused]), /* @__PURE__ */ n("span", { ref: a, className: "contents", children: /* @__PURE__ */ n(Se, { ...s, modifiers: { ...o, focused: !1 } }) });
|
|
28
|
-
},
|
|
29
|
-
(a) => fe(a) && a.props.calendarMonth ?
|
|
30
|
-
) }),
|
|
29
|
+
}, Ae = ({ children: o, ...s }) => /* @__PURE__ */ n(Ce, { ...s, children: me.toArray(o).map(
|
|
30
|
+
(a) => fe(a) && a.props.calendarMonth ? he(a, { key: a.props.calendarMonth.date.getTime() }) : a
|
|
31
|
+
) }), Le = ({
|
|
31
32
|
className: o,
|
|
32
33
|
classNames: s,
|
|
33
34
|
locale: a = be,
|
|
34
|
-
weekStartsOn:
|
|
35
|
+
weekStartsOn: m,
|
|
35
36
|
startMonth: F,
|
|
36
37
|
endMonth: u,
|
|
37
38
|
defaultMonth: M,
|
|
38
39
|
components: R,
|
|
39
40
|
...Y
|
|
40
41
|
}) => {
|
|
41
|
-
const c = _e(), p = C(null), v = C(0), r = B(F ?? new Date((/* @__PURE__ */ new Date()).getFullYear() - Fe, 0, 1)), b = B(u ?? new Date(ke, 11, 1)), l = Math.max(b - r + 1, 1), [J, Q] =
|
|
42
|
+
const c = _e(), p = C(null), v = C(0), r = B(F ?? new Date((/* @__PURE__ */ new Date()).getFullYear() - Fe, 0, 1)), b = B(u ?? new Date(ke, 11, 1)), l = Math.max(b - r + 1, 1), [J, Q] = L(V), k = Math.min(J, l), w = N(
|
|
42
43
|
(e) => S(e - G, 0, l - k),
|
|
43
44
|
[l, k]
|
|
44
|
-
), _ = S(B(M ?? /* @__PURE__ */ new Date()) - r, 0, l - 1), [x, z] =
|
|
45
|
+
), _ = S(B(M ?? /* @__PURE__ */ new Date()) - r, 0, l - 1), [x, z] = L(_), [T, W] = L(() => w(_));
|
|
45
46
|
ue(() => {
|
|
46
47
|
const e = p.current;
|
|
47
48
|
if (!e)
|
|
@@ -59,22 +60,22 @@ const d = 280, V = 4, G = 1, Fe = 100, ke = 2100, _e = pe({
|
|
|
59
60
|
v.current || (v.current = requestAnimationFrame(() => {
|
|
60
61
|
v.current = 0, j();
|
|
61
62
|
}));
|
|
62
|
-
}, [j]),
|
|
63
|
+
}, [j]), A = N(
|
|
63
64
|
(e) => {
|
|
64
65
|
const t = p.current;
|
|
65
66
|
if (!t)
|
|
66
67
|
return;
|
|
67
|
-
const
|
|
68
|
-
t.scrollTop =
|
|
68
|
+
const h = S(e - r, 0, l - 1);
|
|
69
|
+
t.scrollTop = h * d, z(h), W(w(h));
|
|
69
70
|
},
|
|
70
71
|
[w, r, l]
|
|
71
72
|
), I = (e) => {
|
|
72
73
|
const t = p.current;
|
|
73
|
-
t &&
|
|
74
|
+
t && A(r + Math.round(t.scrollTop / d) + e);
|
|
74
75
|
}, g = f(r + x), $ = f(r + x - 1), ee = f(r + x + 1), O = x === 0, K = x === l - 1, te = (e) => {
|
|
75
|
-
|
|
76
|
+
A(g.getFullYear() * 12 + Number(e.target.value));
|
|
76
77
|
}, oe = (e) => {
|
|
77
|
-
|
|
78
|
+
A(Number(e.target.value) * 12 + g.getMonth());
|
|
78
79
|
}, y = a, D = Y.labels, ne = i(
|
|
79
80
|
() => Array.from({ length: 12 }, (e, t) => ({
|
|
80
81
|
value: t,
|
|
@@ -83,11 +84,11 @@ const d = 280, V = 4, G = 1, Fe = 100, ke = 2100, _e = pe({
|
|
|
83
84
|
})),
|
|
84
85
|
[y]
|
|
85
86
|
), re = i(() => {
|
|
86
|
-
const e = we(/* @__PURE__ */ new Date(), { locale: y, weekStartsOn:
|
|
87
|
-
return Array.from({ length: 7 }, (t,
|
|
88
|
-
}, [y,
|
|
87
|
+
const e = we(/* @__PURE__ */ new Date(), { locale: y, weekStartsOn: m });
|
|
88
|
+
return Array.from({ length: 7 }, (t, h) => H(xe(e, h), "EEEEEE", { locale: y }));
|
|
89
|
+
}, [y, m]), ae = i(() => {
|
|
89
90
|
const e = Math.floor(r / 12), t = Math.floor(b / 12);
|
|
90
|
-
return Array.from({ length: t - e + 1 }, (
|
|
91
|
+
return Array.from({ length: t - e + 1 }, (h, U) => ({
|
|
91
92
|
value: e + U,
|
|
92
93
|
label: String(e + U),
|
|
93
94
|
disabled: !1
|
|
@@ -107,9 +108,9 @@ const d = 280, V = 4, G = 1, Fe = 100, ke = 2100, _e = pe({
|
|
|
107
108
|
}),
|
|
108
109
|
[s]
|
|
109
110
|
), se = i(
|
|
110
|
-
() => ({ Months:
|
|
111
|
+
() => ({ Months: Ae, DayButton: Te, ...R }),
|
|
111
112
|
[R]
|
|
112
|
-
), ce = i(() => f(r), [r]), ie = i(() => f(b), [b]), de = i(() => f(r +
|
|
113
|
+
), ce = i(() => f(r), [r]), ie = i(() => f(b), [b]), de = i(() => f(r + T), [r, T]);
|
|
113
114
|
return /* @__PURE__ */ E("div", { className: c.root({ className: o }), children: [
|
|
114
115
|
/* @__PURE__ */ E("div", { className: c.header(), children: [
|
|
115
116
|
/* @__PURE__ */ E("div", { className: c.nav(), children: [
|
|
@@ -154,12 +155,12 @@ const d = 280, V = 4, G = 1, Fe = 100, ke = 2100, _e = pe({
|
|
|
154
155
|
] }),
|
|
155
156
|
/* @__PURE__ */ n("div", { className: c.weekdays(), "aria-hidden": "true", children: re.map((e, t) => /* @__PURE__ */ n("span", { className: c.weekday(), children: e }, t)) })
|
|
156
157
|
] }),
|
|
157
|
-
/* @__PURE__ */ n("div", { ref: p, className: c.scroller(), "data-calendar-scroll-scroller": "", onScroll: X, children: /* @__PURE__ */ n("div", { style: { height: l * d }, children: /* @__PURE__ */ n("div", { className: c.window(), style: { top:
|
|
158
|
+
/* @__PURE__ */ n("div", { ref: p, className: c.scroller(), "data-calendar-scroll-scroller": "", onScroll: X, children: /* @__PURE__ */ n("div", { style: { height: l * d }, children: /* @__PURE__ */ n("div", { className: c.window(), style: { top: T * d }, children: /* @__PURE__ */ n(
|
|
158
159
|
Ne,
|
|
159
160
|
{
|
|
160
161
|
...Y,
|
|
161
162
|
locale: a,
|
|
162
|
-
weekStartsOn:
|
|
163
|
+
weekStartsOn: m,
|
|
163
164
|
startMonth: ce,
|
|
164
165
|
endMonth: ie,
|
|
165
166
|
month: de,
|
|
@@ -174,8 +175,8 @@ const d = 280, V = 4, G = 1, Fe = 100, ke = 2100, _e = pe({
|
|
|
174
175
|
) }) }) })
|
|
175
176
|
] });
|
|
176
177
|
};
|
|
177
|
-
|
|
178
|
+
Le.displayName = "CalendarScroll";
|
|
178
179
|
export {
|
|
179
|
-
|
|
180
|
+
Le as CalendarScroll
|
|
180
181
|
};
|
|
181
182
|
//# sourceMappingURL=calendar-scroll.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar-scroll.js","sources":["../../src/components/calendar-scroll/CalendarScroll.tsx"],"sourcesContent":["import { addDays, format, Locale, startOfWeek } from \"date-fns\";\r\nimport {\r\n\tChangeEvent,\r\n\tChildren,\r\n\tcloneElement,\r\n\tisValidElement,\r\n\tuseCallback,\r\n\tuseEffect,\r\n\tuseLayoutEffect,\r\n\tuseMemo,\r\n\tuseRef,\r\n\tuseState\r\n} from \"react\";\r\nimport {\r\n\tDayPicker,\r\n\tDayPickerProps,\r\n\tDropdownOption,\r\n\tlabelMonthDropdown,\r\n\tlabelNext,\r\n\tlabelPrevious,\r\n\tlabelYearDropdown,\r\n\tMonthProps,\r\n\tMonths,\r\n\tMonthsProps\r\n} from \"react-day-picker\";\r\nimport { enUS } from \"react-day-picker/locale\";\r\nimport { tv } from \"tailwind-variants\";\r\nimport { CalendarChevron } from \"../calendar/components/calendar-chevron/CalendarChevron\";\r\nimport {\r\n\tCalendarDayButton,\r\n\tCalendarDayButtonProps\r\n} from \"../calendar/components/calendar-day-button/CalendarDayButton\";\r\nimport { CalendarNextMonthButton } from \"../calendar/components/calendar-next-month-button/CalendarNextMonthButton\";\r\nimport { CalendarPreviousMonthButton } from \"../calendar/components/calendar-previous-month-button/CalendarPreviousMonthButton\";\r\nimport { CalendarDropdown } from \"../calendar/components/calendar-dropdown/CalendarDropdown\";\r\n\r\n/**\r\n * Высота одного месяца в px. Фиксирована (6 недель всегда), поэтому позицию месяца\r\n * в скролле считаем арифметикой, без измерений DOM:\r\n * подпись 20 (text-sm) + gap 4 + 6 недель × (36 + 4) + нижний отступ 16 = 280.\r\n * Если меняете стили месяца ниже — меняйте и эту константу.\r\n */\r\nconst MONTH_HEIGHT = 280;\r\n/**\r\n * Сколько месяцев лежит в DOM до замера высоты скроллера. После монтирования окно\r\n * подгоняется под реальную высоту: видимые месяцы + 1 снизу + BUFFER_BEFORE сверху.\r\n * Каждый лишний месяц — ~42 дня, которые DayPicker пересчитывает на любом рендере.\r\n */\r\nconst DEFAULT_WINDOW_SIZE = 4;\r\n/** Сколько месяцев держим в DOM выше верхнего видимого */\r\nconst BUFFER_BEFORE = 1;\r\nconst DEFAULT_YEARS_BACK = 100;\r\nconst DEFAULT_END_YEAR = 2100;\r\n\r\nconst calendarScrollStyles = tv({\r\n\tslots: {\r\n\t\troot: [\r\n\t\t\t\"flex h-[420px] w-fit flex-col overflow-hidden rounded-md\",\r\n\t\t\t\"border border-solid border-secondary-border bg-secondary-bg shadow-soft-sm\"\r\n\t\t],\r\n\t\theader: \"flex flex-col gap-2 border-b border-secondary-border p-3 pb-2\",\r\n\t\tnav: \"flex h-9 items-center justify-between gap-1\",\r\n\t\tdropdowns: \"flex items-center justify-center gap-1.5 text-sm font-medium capitalize\",\r\n\t\tweekdays: \"flex\",\r\n\t\tweekday: \"w-9 shrink-0 text-center text-xs font-medium text-muted-foreground opacity-70\",\r\n\t\tscroller: \"relative flex-1 overflow-y-auto overscroll-contain px-3\",\r\n\t\twindow: \"absolute inset-x-3 top-0\"\r\n\t}\r\n});\r\n\r\nconst toKey = (date: Date) => date.getFullYear() * 12 + date.getMonth();\r\nconst fromKey = (key: number) => new Date(Math.floor(key / 12), key % 12, 1);\r\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\r\n\r\n/**\r\n * Кнопка дня для вертикального скролла.\r\n *\r\n * Штатный DayButton из react-day-picker зовёт `focus()` без `preventScroll`, когда день\r\n * получает флаг `focused`. В скролл-списке это ломает прокрутку: окно месяцев сдвигается,\r\n * ранее выбранный день снова попадает в DOM, фокус на него утягивает скролл назад.\r\n * Поэтому программный фокус делаем сами: только при клавиатурной навигации (фокус уже\r\n * внутри скроллера), с `preventScroll`, и скроллим к дню лишь если он вне видимой области.\r\n */\r\nconst CalendarScrollDayButton = ({ modifiers, ...props }: CalendarDayButtonProps) => {\r\n\tconst anchorRef = useRef<HTMLSpanElement>(null);\r\n\tconst isFirstRun = useRef(true);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst isMount = isFirstRun.current;\r\n\t\tisFirstRun.current = false;\r\n\t\tif (!modifiers.focused || isMount) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst button = anchorRef.current?.querySelector(\"button\");\r\n\t\tconst scroller = button?.closest(\"[data-calendar-scroll-scroller]\");\r\n\t\tif (!button || !scroller || button === document.activeElement) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (scroller.contains(document.activeElement)) {\r\n\t\t\tbutton.focus({ preventScroll: true });\r\n\t\t\tbutton.scrollIntoView({ block: \"nearest\" });\r\n\t\t}\r\n\t}, [modifiers.focused]);\r\n\r\n\treturn (\r\n\t\t<span ref={anchorRef} className=\"contents\">\r\n\t\t\t<CalendarDayButton {...props} modifiers={{ ...modifiers, focused: false }} />\r\n\t\t</span>\r\n\t);\r\n};\r\n\r\n/**\r\n * Контейнер месяцев с ключами по самому месяцу.\r\n *\r\n * DayPicker ключует месяцы по позиции (`displayIndex`), а дни — по дате и месяцу показа.\r\n * При сдвиге окна на месяц каждая позиция получает другой месяц, и React пересоздаёт\r\n * все дни всех месяцев окна. Перекладываем ключ на `yyyy-MM`: месяцы, оставшиеся в окне,\r\n * сохраняют свои узлы, монтируется только вошедший месяц. Заодно не теряется фокус\r\n * на только что нажатом дне.\r\n */\r\nconst CalendarScrollMonths = ({ children, ...props }: MonthsProps) => (\r\n\t<Months {...props}>\r\n\t\t{Children.toArray(children).map((child) =>\r\n\t\t\tisValidElement<MonthProps>(child) && child.props.calendarMonth\r\n\t\t\t\t? cloneElement(child, { key: child.props.calendarMonth.date.getTime() })\r\n\t\t\t\t: child\r\n\t\t)}\r\n\t</Months>\r\n);\r\n\r\ntype DistributiveOmit<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never;\r\n\r\n/** Пропсы DayPicker, которыми управляет сам CalendarScroll */\r\ntype ManagedProps =\r\n\t| \"month\"\r\n\t| \"onMonthChange\"\r\n\t| \"numberOfMonths\"\r\n\t| \"captionLayout\"\r\n\t| \"fixedWeeks\"\r\n\t| \"hideNavigation\"\r\n\t| \"showOutsideDays\"\r\n\t| \"pagedNavigation\"\r\n\t| \"reverseMonths\";\r\n\r\nexport type CalendarScrollProps = DistributiveOmit<DayPickerProps, ManagedProps>;\r\n\r\n/**\r\n * CalendarScroll — календарь с вертикальным скроллом месяцев (как в мобильных банках).\r\n *\r\n * Месяцы идут друг за другом, сверху общая шапка с селектами месяца и года для быстрого\r\n * прыжка. Селекты синхронизированы со скроллом. В DOM лежит только окно из нескольких\r\n * месяцев, поэтому диапазон может быть широким (по умолчанию ±100 лет). Виртуализацию лучше\r\n * не отключать: без неё DayPicker пересчитывал бы дни всех месяцев диапазона на каждом рендере.\r\n *\r\n * Высота задаётся через `className` (по умолчанию 420px). Выбор дат — те же `mode`,\r\n * `selected`, `onSelect`, что и у Calendar.\r\n */\r\nexport const CalendarScroll = ({\r\n\tclassName,\r\n\tclassNames,\r\n\tlocale = enUS,\r\n\tweekStartsOn,\r\n\tstartMonth,\r\n\tendMonth,\r\n\tdefaultMonth,\r\n\tcomponents,\r\n\t...props\r\n}: CalendarScrollProps) => {\r\n\tconst styles = calendarScrollStyles();\r\n\tconst scrollerRef = useRef<HTMLDivElement>(null);\r\n\tconst frameRef = useRef(0);\r\n\r\n\tconst startKey = toKey(startMonth ?? new Date(new Date().getFullYear() - DEFAULT_YEARS_BACK, 0, 1));\r\n\tconst endKey = toKey(endMonth ?? new Date(DEFAULT_END_YEAR, 11, 1));\r\n\tconst total = Math.max(endKey - startKey + 1, 1);\r\n\tconst [windowSizeLimit, setWindowSizeLimit] = useState(DEFAULT_WINDOW_SIZE);\r\n\tconst windowSize = Math.min(windowSizeLimit, total);\r\n\r\n\tconst getWindowStart = useCallback(\r\n\t\t(index: number) => clamp(index - BUFFER_BEFORE, 0, total - windowSize),\r\n\t\t[total, windowSize]\r\n\t);\r\n\r\n\tconst initialIndex = clamp(toKey(defaultMonth ?? new Date()) - startKey, 0, total - 1);\r\n\tconst [currentIndex, setCurrentIndex] = useState(initialIndex);\r\n\tconst [windowStart, setWindowStart] = useState(() => getWindowStart(initialIndex));\r\n\r\n\t// Первичная позиция и размер окна — до отрисовки, чтобы не было прыжка и пустоты\r\n\tuseLayoutEffect(() => {\r\n\t\tconst scroller = scrollerRef.current;\r\n\t\tif (!scroller) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst visibleMonths = Math.ceil(scroller.clientHeight / MONTH_HEIGHT) + 1;\r\n\t\tscroller.scrollTop = initialIndex * MONTH_HEIGHT;\r\n\t\tsetWindowSizeLimit(Math.max(DEFAULT_WINDOW_SIZE, visibleMonths + BUFFER_BEFORE));\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, []);\r\n\r\n\tuseEffect(() => () => cancelAnimationFrame(frameRef.current), []);\r\n\r\n\tconst syncWithScroll = useCallback(() => {\r\n\t\tconst scroller = scrollerRef.current;\r\n\t\tif (!scroller) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst scrollTop = scroller.scrollTop;\r\n\t\tsetCurrentIndex(clamp(Math.round(scrollTop / MONTH_HEIGHT), 0, total - 1));\r\n\t\tsetWindowStart(getWindowStart(Math.floor(scrollTop / MONTH_HEIGHT)));\r\n\t}, [getWindowStart, total]);\r\n\r\n\tconst onScroll = useCallback(() => {\r\n\t\tif (frameRef.current) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tframeRef.current = requestAnimationFrame(() => {\r\n\t\t\tframeRef.current = 0;\r\n\t\t\tsyncWithScroll();\r\n\t\t});\r\n\t}, [syncWithScroll]);\r\n\r\n\tconst jumpTo = useCallback(\r\n\t\t(key: number) => {\r\n\t\t\tconst scroller = scrollerRef.current;\r\n\t\t\tif (!scroller) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst index = clamp(key - startKey, 0, total - 1);\r\n\t\t\tscroller.scrollTop = index * MONTH_HEIGHT;\r\n\t\t\tsetCurrentIndex(index);\r\n\t\t\tsetWindowStart(getWindowStart(index));\r\n\t\t},\r\n\t\t[getWindowStart, startKey, total]\r\n\t);\r\n\r\n\t// Смещение считаем от scrollTop, а не от state: он обновляется синхронно,\r\n\t// поэтому быстрые клики подряд не теряются до перерендера\r\n\tconst jumpBy = (delta: number) => {\r\n\t\tconst scroller = scrollerRef.current;\r\n\t\tif (scroller) {\r\n\t\t\tjumpTo(startKey + Math.round(scroller.scrollTop / MONTH_HEIGHT) + delta);\r\n\t\t}\r\n\t};\r\n\r\n\tconst current = fromKey(startKey + currentIndex);\r\n\tconst previous = fromKey(startKey + currentIndex - 1);\r\n\tconst next = fromKey(startKey + currentIndex + 1);\r\n\tconst isFirst = currentIndex === 0;\r\n\tconst isLast = currentIndex === total - 1;\r\n\r\n\tconst onMonthSelect = (event: ChangeEvent<HTMLSelectElement>) => {\r\n\t\tjumpTo(current.getFullYear() * 12 + Number(event.target.value));\r\n\t};\r\n\r\n\tconst onYearSelect = (event: ChangeEvent<HTMLSelectElement>) => {\r\n\t\tjumpTo(Number(event.target.value) * 12 + current.getMonth());\r\n\t};\r\n\r\n\t// DayPicker типизирует locale как Partial, но на деле это полноценная date-fns Locale\r\n\tconst dateFnsLocale = locale as Locale;\r\n\t// Подписи для a11y берём из тех же labels, что и DayPicker, чтобы переопределялись одним пропсом\r\n\tconst labels = props.labels;\r\n\r\n\tconst monthOptions: DropdownOption[] = useMemo(\r\n\t\t() =>\r\n\t\t\tArray.from({ length: 12 }, (_, month) => ({\r\n\t\t\t\tvalue: month,\r\n\t\t\t\tlabel: format(new Date(2000, month, 1), \"LLLL\", { locale: dateFnsLocale }),\r\n\t\t\t\tdisabled: false\r\n\t\t\t})),\r\n\t\t[dateFnsLocale]\r\n\t);\r\n\r\n\tconst weekdayNames = useMemo(() => {\r\n\t\tconst first = startOfWeek(new Date(), { locale: dateFnsLocale, weekStartsOn });\r\n\t\treturn Array.from({ length: 7 }, (_, day) => format(addDays(first, day), \"EEEEEE\", { locale: dateFnsLocale }));\r\n\t}, [dateFnsLocale, weekStartsOn]);\r\n\r\n\tconst yearOptions: DropdownOption[] = useMemo(() => {\r\n\t\tconst first = Math.floor(startKey / 12);\r\n\t\tconst last = Math.floor(endKey / 12);\r\n\t\treturn Array.from({ length: last - first + 1 }, (_, i) => ({\r\n\t\t\tvalue: first + i,\r\n\t\t\tlabel: String(first + i),\r\n\t\t\tdisabled: false\r\n\t\t}));\r\n\t}, [startKey, endKey]);\r\n\r\n\tconst classNamesMemoized: DayPickerProps[\"classNames\"] = useMemo(\r\n\t\t() => ({\r\n\t\t\tmonths: \"flex flex-col\",\r\n\t\t\tmonth: \"flex h-[280px] flex-col gap-1 pb-4\",\r\n\t\t\tmonth_caption: \"flex items-center px-2 capitalize\",\r\n\t\t\tcaption_label: \"select-none text-sm font-medium\",\r\n\t\t\tmonth_grid: \"w-full border-collapse\",\r\n\t\t\tweekdays: \"hidden\",\r\n\t\t\tweek: \"mt-1 flex h-9\",\r\n\t\t\tday: \"size-9 shrink-0 border-0 p-0\",\r\n\t\t\thidden: \"invisible\",\r\n\t\t\t...classNames\r\n\t\t}),\r\n\t\t[classNames]\r\n\t);\r\n\r\n\tconst componentsMemoized: DayPickerProps[\"components\"] = useMemo(\r\n\t\t() => ({ Months: CalendarScrollMonths, DayButton: CalendarScrollDayButton, ...components }),\r\n\t\t[components]\r\n\t);\r\n\r\n\tconst firstMonth = useMemo(() => fromKey(startKey), [startKey]);\r\n\tconst lastMonth = useMemo(() => fromKey(endKey), [endKey]);\r\n\tconst windowMonth = useMemo(() => fromKey(startKey + windowStart), [startKey, windowStart]);\r\n\r\n\treturn (\r\n\t\t<div className={styles.root({ className })}>\r\n\t\t\t<div className={styles.header()}>\r\n\t\t\t\t<div className={styles.nav()}>\r\n\t\t\t\t\t<CalendarPreviousMonthButton\r\n\t\t\t\t\t\taria-label={(labels?.labelPrevious ?? labelPrevious)(isFirst ? undefined : previous)}\r\n\t\t\t\t\t\tdisabled={isFirst}\r\n\t\t\t\t\t\tonClick={() => jumpBy(-1)}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<CalendarChevron orientation=\"left\" />\r\n\t\t\t\t\t</CalendarPreviousMonthButton>\r\n\t\t\t\t\t<div className={styles.dropdowns()}>\r\n\t\t\t\t\t\t<CalendarDropdown\r\n\t\t\t\t\t\t\taria-label={(labels?.labelMonthDropdown ?? labelMonthDropdown)()}\r\n\t\t\t\t\t\t\toptions={monthOptions}\r\n\t\t\t\t\t\t\tvalue={current.getMonth()}\r\n\t\t\t\t\t\t\tonChange={onMonthSelect}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<CalendarDropdown\r\n\t\t\t\t\t\t\taria-label={(labels?.labelYearDropdown ?? labelYearDropdown)()}\r\n\t\t\t\t\t\t\toptions={yearOptions}\r\n\t\t\t\t\t\t\tvalue={current.getFullYear()}\r\n\t\t\t\t\t\t\tonChange={onYearSelect}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<CalendarNextMonthButton\r\n\t\t\t\t\t\taria-label={(labels?.labelNext ?? labelNext)(isLast ? undefined : next)}\r\n\t\t\t\t\t\tdisabled={isLast}\r\n\t\t\t\t\t\tonClick={() => jumpBy(1)}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<CalendarChevron orientation=\"right\" />\r\n\t\t\t\t\t</CalendarNextMonthButton>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div className={styles.weekdays()} aria-hidden=\"true\">\r\n\t\t\t\t\t{weekdayNames.map((name, index) => (\r\n\t\t\t\t\t\t<span key={index} className={styles.weekday()}>\r\n\t\t\t\t\t\t\t{name}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div ref={scrollerRef} className={styles.scroller()} data-calendar-scroll-scroller=\"\" onScroll={onScroll}>\r\n\t\t\t\t<div style={{ height: total * MONTH_HEIGHT }}>\r\n\t\t\t\t\t<div className={styles.window()} style={{ top: windowStart * MONTH_HEIGHT }}>\r\n\t\t\t\t\t\t<DayPicker\r\n\t\t\t\t\t\t\t{...props}\r\n\t\t\t\t\t\t\tlocale={locale}\r\n\t\t\t\t\t\t\tweekStartsOn={weekStartsOn}\r\n\t\t\t\t\t\t\tstartMonth={firstMonth}\r\n\t\t\t\t\t\t\tendMonth={lastMonth}\r\n\t\t\t\t\t\t\tmonth={windowMonth}\r\n\t\t\t\t\t\t\tnumberOfMonths={windowSize}\r\n\t\t\t\t\t\t\tcaptionLayout=\"label\"\r\n\t\t\t\t\t\t\tfixedWeeks\r\n\t\t\t\t\t\t\thideNavigation\r\n\t\t\t\t\t\t\tshowOutsideDays={false}\r\n\t\t\t\t\t\t\tclassNames={classNamesMemoized}\r\n\t\t\t\t\t\t\tcomponents={componentsMemoized}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n};\r\n\r\nCalendarScroll.displayName = \"CalendarScroll\";\r\n"],"names":["MONTH_HEIGHT","DEFAULT_WINDOW_SIZE","BUFFER_BEFORE","DEFAULT_YEARS_BACK","DEFAULT_END_YEAR","calendarScrollStyles","tv","toKey","date","fromKey","key","clamp","value","min","max","CalendarScrollDayButton","modifiers","props","anchorRef","useRef","isFirstRun","useEffect","isMount","button","scroller","jsx","CalendarDayButton","CalendarScrollMonths","children","Months","Children","child","isValidElement","cloneElement","CalendarScroll","className","classNames","locale","enUS","weekStartsOn","startMonth","endMonth","defaultMonth","components","styles","scrollerRef","frameRef","startKey","endKey","total","windowSizeLimit","setWindowSizeLimit","useState","windowSize","getWindowStart","useCallback","index","initialIndex","currentIndex","setCurrentIndex","windowStart","setWindowStart","useLayoutEffect","visibleMonths","syncWithScroll","scrollTop","onScroll","jumpTo","jumpBy","delta","current","previous","next","isFirst","isLast","onMonthSelect","event","onYearSelect","dateFnsLocale","labels","monthOptions","useMemo","_","month","format","weekdayNames","first","startOfWeek","day","addDays","yearOptions","last","i","classNamesMemoized","componentsMemoized","firstMonth","lastMonth","windowMonth","jsxs","CalendarPreviousMonthButton","labelPrevious","CalendarChevron","CalendarDropdown","labelMonthDropdown","labelYearDropdown","CalendarNextMonthButton","labelNext","name","DayPicker"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"calendar-scroll.js","sources":["../../src/components/calendar-scroll/CalendarScroll.tsx"],"sourcesContent":["import { useIsomorphicLayoutEffect } from \"@siberiacancode/reactuse\";\nimport { addDays, format, Locale, startOfWeek } from \"date-fns\";\nimport {\n\tChangeEvent,\n\tChildren,\n\tcloneElement,\n\tisValidElement,\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState\n} from \"react\";\nimport {\n\tDayPicker,\n\tDayPickerProps,\n\tDropdownOption,\n\tlabelMonthDropdown,\n\tlabelNext,\n\tlabelPrevious,\n\tlabelYearDropdown,\n\tMonthProps,\n\tMonths,\n\tMonthsProps\n} from \"react-day-picker\";\nimport { enUS } from \"react-day-picker/locale\";\nimport { tv } from \"tailwind-variants\";\nimport { CalendarChevron } from \"../calendar/components/calendar-chevron/CalendarChevron\";\nimport {\n\tCalendarDayButton,\n\tCalendarDayButtonProps\n} from \"../calendar/components/calendar-day-button/CalendarDayButton\";\nimport { CalendarNextMonthButton } from \"../calendar/components/calendar-next-month-button/CalendarNextMonthButton\";\nimport { CalendarPreviousMonthButton } from \"../calendar/components/calendar-previous-month-button/CalendarPreviousMonthButton\";\nimport { CalendarDropdown } from \"../calendar/components/calendar-dropdown/CalendarDropdown\";\n\n/**\n * Высота одного месяца в px. Фиксирована (6 недель всегда), поэтому позицию месяца\n * в скролле считаем арифметикой, без измерений DOM:\n * подпись 20 (text-sm) + gap 4 + 6 недель × (36 + 4) + нижний отступ 16 = 280.\n * Если меняете стили месяца ниже — меняйте и эту константу.\n */\nconst MONTH_HEIGHT = 280;\n/**\n * Сколько месяцев лежит в DOM до замера высоты скроллера. После монтирования окно\n * подгоняется под реальную высоту: видимые месяцы + 1 снизу + BUFFER_BEFORE сверху.\n * Каждый лишний месяц — ~42 дня, которые DayPicker пересчитывает на любом рендере.\n */\nconst DEFAULT_WINDOW_SIZE = 4;\n/** Сколько месяцев держим в DOM выше верхнего видимого */\nconst BUFFER_BEFORE = 1;\nconst DEFAULT_YEARS_BACK = 100;\nconst DEFAULT_END_YEAR = 2100;\n\nconst calendarScrollStyles = tv({\n\tslots: {\n\t\troot: [\n\t\t\t\"flex h-[420px] w-fit flex-col overflow-hidden rounded-md\",\n\t\t\t\"border border-solid border-secondary-border bg-secondary-bg shadow-soft-sm\"\n\t\t],\n\t\theader: \"flex flex-col gap-2 border-b border-secondary-border p-3 pb-2\",\n\t\tnav: \"flex h-9 items-center justify-between gap-1\",\n\t\tdropdowns: \"flex items-center justify-center gap-1.5 text-sm font-medium capitalize\",\n\t\tweekdays: \"flex\",\n\t\tweekday: \"w-9 shrink-0 text-center text-xs font-medium text-muted-foreground opacity-70\",\n\t\tscroller: \"relative flex-1 overflow-y-auto overscroll-contain px-3\",\n\t\twindow: \"absolute inset-x-3 top-0\"\n\t}\n});\n\nconst toKey = (date: Date) => date.getFullYear() * 12 + date.getMonth();\nconst fromKey = (key: number) => new Date(Math.floor(key / 12), key % 12, 1);\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\n/**\n * Кнопка дня для вертикального скролла.\n *\n * Штатный DayButton из react-day-picker зовёт `focus()` без `preventScroll`, когда день\n * получает флаг `focused`. В скролл-списке это ломает прокрутку: окно месяцев сдвигается,\n * ранее выбранный день снова попадает в DOM, фокус на него утягивает скролл назад.\n * Поэтому программный фокус делаем сами: только при клавиатурной навигации (фокус уже\n * внутри скроллера), с `preventScroll`, и скроллим к дню лишь если он вне видимой области.\n */\nconst CalendarScrollDayButton = ({ modifiers, ...props }: CalendarDayButtonProps) => {\n\tconst anchorRef = useRef<HTMLSpanElement>(null);\n\tconst isFirstRun = useRef(true);\n\n\tuseEffect(() => {\n\t\tconst isMount = isFirstRun.current;\n\t\tisFirstRun.current = false;\n\t\tif (!modifiers.focused || isMount) {\n\t\t\treturn;\n\t\t}\n\t\tconst button = anchorRef.current?.querySelector(\"button\");\n\t\tconst scroller = button?.closest(\"[data-calendar-scroll-scroller]\");\n\t\tif (!button || !scroller || button === document.activeElement) {\n\t\t\treturn;\n\t\t}\n\t\tif (scroller.contains(document.activeElement)) {\n\t\t\tbutton.focus({ preventScroll: true });\n\t\t\tbutton.scrollIntoView({ block: \"nearest\" });\n\t\t}\n\t}, [modifiers.focused]);\n\n\treturn (\n\t\t<span ref={anchorRef} className=\"contents\">\n\t\t\t<CalendarDayButton {...props} modifiers={{ ...modifiers, focused: false }} />\n\t\t</span>\n\t);\n};\n\n/**\n * Контейнер месяцев с ключами по самому месяцу.\n *\n * DayPicker ключует месяцы по позиции (`displayIndex`), а дни — по дате и месяцу показа.\n * При сдвиге окна на месяц каждая позиция получает другой месяц, и React пересоздаёт\n * все дни всех месяцев окна. Перекладываем ключ на `yyyy-MM`: месяцы, оставшиеся в окне,\n * сохраняют свои узлы, монтируется только вошедший месяц. Заодно не теряется фокус\n * на только что нажатом дне.\n */\nconst CalendarScrollMonths = ({ children, ...props }: MonthsProps) => (\n\t<Months {...props}>\n\t\t{Children.toArray(children).map((child) =>\n\t\t\tisValidElement<MonthProps>(child) && child.props.calendarMonth\n\t\t\t\t? cloneElement(child, { key: child.props.calendarMonth.date.getTime() })\n\t\t\t\t: child\n\t\t)}\n\t</Months>\n);\n\ntype DistributiveOmit<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never;\n\n/** Пропсы DayPicker, которыми управляет сам CalendarScroll */\ntype ManagedProps =\n\t| \"month\"\n\t| \"onMonthChange\"\n\t| \"numberOfMonths\"\n\t| \"captionLayout\"\n\t| \"fixedWeeks\"\n\t| \"hideNavigation\"\n\t| \"showOutsideDays\"\n\t| \"pagedNavigation\"\n\t| \"reverseMonths\";\n\nexport type CalendarScrollProps = DistributiveOmit<DayPickerProps, ManagedProps>;\n\n/**\n * CalendarScroll — календарь с вертикальным скроллом месяцев (как в мобильных банках).\n *\n * Месяцы идут друг за другом, сверху общая шапка с селектами месяца и года для быстрого\n * прыжка. Селекты синхронизированы со скроллом. В DOM лежит только окно из нескольких\n * месяцев, поэтому диапазон может быть широким (по умолчанию ±100 лет). Виртуализацию лучше\n * не отключать: без неё DayPicker пересчитывал бы дни всех месяцев диапазона на каждом рендере.\n *\n * Высота задаётся через `className` (по умолчанию 420px). Выбор дат — те же `mode`,\n * `selected`, `onSelect`, что и у Calendar.\n */\nexport const CalendarScroll = ({\n\tclassName,\n\tclassNames,\n\tlocale = enUS,\n\tweekStartsOn,\n\tstartMonth,\n\tendMonth,\n\tdefaultMonth,\n\tcomponents,\n\t...props\n}: CalendarScrollProps) => {\n\tconst styles = calendarScrollStyles();\n\tconst scrollerRef = useRef<HTMLDivElement>(null);\n\tconst frameRef = useRef(0);\n\n\tconst startKey = toKey(startMonth ?? new Date(new Date().getFullYear() - DEFAULT_YEARS_BACK, 0, 1));\n\tconst endKey = toKey(endMonth ?? new Date(DEFAULT_END_YEAR, 11, 1));\n\tconst total = Math.max(endKey - startKey + 1, 1);\n\tconst [windowSizeLimit, setWindowSizeLimit] = useState(DEFAULT_WINDOW_SIZE);\n\tconst windowSize = Math.min(windowSizeLimit, total);\n\n\tconst getWindowStart = useCallback(\n\t\t(index: number) => clamp(index - BUFFER_BEFORE, 0, total - windowSize),\n\t\t[total, windowSize]\n\t);\n\n\tconst initialIndex = clamp(toKey(defaultMonth ?? new Date()) - startKey, 0, total - 1);\n\tconst [currentIndex, setCurrentIndex] = useState(initialIndex);\n\tconst [windowStart, setWindowStart] = useState(() => getWindowStart(initialIndex));\n\n\t// Первичная позиция и размер окна — до отрисовки, чтобы не было прыжка и пустоты\n\tuseIsomorphicLayoutEffect(() => {\n\t\tconst scroller = scrollerRef.current;\n\t\tif (!scroller) {\n\t\t\treturn;\n\t\t}\n\t\tconst visibleMonths = Math.ceil(scroller.clientHeight / MONTH_HEIGHT) + 1;\n\t\tscroller.scrollTop = initialIndex * MONTH_HEIGHT;\n\t\tsetWindowSizeLimit(Math.max(DEFAULT_WINDOW_SIZE, visibleMonths + BUFFER_BEFORE));\n\t}, []);\n\n\tuseEffect(() => () => cancelAnimationFrame(frameRef.current), []);\n\n\tconst syncWithScroll = useCallback(() => {\n\t\tconst scroller = scrollerRef.current;\n\t\tif (!scroller) {\n\t\t\treturn;\n\t\t}\n\t\tconst scrollTop = scroller.scrollTop;\n\t\tsetCurrentIndex(clamp(Math.round(scrollTop / MONTH_HEIGHT), 0, total - 1));\n\t\tsetWindowStart(getWindowStart(Math.floor(scrollTop / MONTH_HEIGHT)));\n\t}, [getWindowStart, total]);\n\n\tconst onScroll = useCallback(() => {\n\t\tif (frameRef.current) {\n\t\t\treturn;\n\t\t}\n\t\tframeRef.current = requestAnimationFrame(() => {\n\t\t\tframeRef.current = 0;\n\t\t\tsyncWithScroll();\n\t\t});\n\t}, [syncWithScroll]);\n\n\tconst jumpTo = useCallback(\n\t\t(key: number) => {\n\t\t\tconst scroller = scrollerRef.current;\n\t\t\tif (!scroller) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst index = clamp(key - startKey, 0, total - 1);\n\t\t\tscroller.scrollTop = index * MONTH_HEIGHT;\n\t\t\tsetCurrentIndex(index);\n\t\t\tsetWindowStart(getWindowStart(index));\n\t\t},\n\t\t[getWindowStart, startKey, total]\n\t);\n\n\t// Смещение считаем от scrollTop, а не от state: он обновляется синхронно,\n\t// поэтому быстрые клики подряд не теряются до перерендера\n\tconst jumpBy = (delta: number) => {\n\t\tconst scroller = scrollerRef.current;\n\t\tif (scroller) {\n\t\t\tjumpTo(startKey + Math.round(scroller.scrollTop / MONTH_HEIGHT) + delta);\n\t\t}\n\t};\n\n\tconst current = fromKey(startKey + currentIndex);\n\tconst previous = fromKey(startKey + currentIndex - 1);\n\tconst next = fromKey(startKey + currentIndex + 1);\n\tconst isFirst = currentIndex === 0;\n\tconst isLast = currentIndex === total - 1;\n\n\tconst onMonthSelect = (event: ChangeEvent<HTMLSelectElement>) => {\n\t\tjumpTo(current.getFullYear() * 12 + Number(event.target.value));\n\t};\n\n\tconst onYearSelect = (event: ChangeEvent<HTMLSelectElement>) => {\n\t\tjumpTo(Number(event.target.value) * 12 + current.getMonth());\n\t};\n\n\t// DayPicker типизирует locale как Partial, но на деле это полноценная date-fns Locale\n\tconst dateFnsLocale = locale as Locale;\n\t// Подписи для a11y берём из тех же labels, что и DayPicker, чтобы переопределялись одним пропсом\n\tconst labels = props.labels;\n\n\tconst monthOptions: DropdownOption[] = useMemo(\n\t\t() =>\n\t\t\tArray.from({ length: 12 }, (_, month) => ({\n\t\t\t\tvalue: month,\n\t\t\t\tlabel: format(new Date(2000, month, 1), \"LLLL\", { locale: dateFnsLocale }),\n\t\t\t\tdisabled: false\n\t\t\t})),\n\t\t[dateFnsLocale]\n\t);\n\n\tconst weekdayNames = useMemo(() => {\n\t\tconst first = startOfWeek(new Date(), { locale: dateFnsLocale, weekStartsOn });\n\t\treturn Array.from({ length: 7 }, (_, day) => format(addDays(first, day), \"EEEEEE\", { locale: dateFnsLocale }));\n\t}, [dateFnsLocale, weekStartsOn]);\n\n\tconst yearOptions: DropdownOption[] = useMemo(() => {\n\t\tconst first = Math.floor(startKey / 12);\n\t\tconst last = Math.floor(endKey / 12);\n\t\treturn Array.from({ length: last - first + 1 }, (_, i) => ({\n\t\t\tvalue: first + i,\n\t\t\tlabel: String(first + i),\n\t\t\tdisabled: false\n\t\t}));\n\t}, [startKey, endKey]);\n\n\tconst classNamesMemoized: DayPickerProps[\"classNames\"] = useMemo(\n\t\t() => ({\n\t\t\tmonths: \"flex flex-col\",\n\t\t\tmonth: \"flex h-[280px] flex-col gap-1 pb-4\",\n\t\t\tmonth_caption: \"flex items-center px-2 capitalize\",\n\t\t\tcaption_label: \"select-none text-sm font-medium\",\n\t\t\tmonth_grid: \"w-full border-collapse\",\n\t\t\tweekdays: \"hidden\",\n\t\t\tweek: \"mt-1 flex h-9\",\n\t\t\tday: \"size-9 shrink-0 border-0 p-0\",\n\t\t\thidden: \"invisible\",\n\t\t\t...classNames\n\t\t}),\n\t\t[classNames]\n\t);\n\n\tconst componentsMemoized: DayPickerProps[\"components\"] = useMemo(\n\t\t() => ({ Months: CalendarScrollMonths, DayButton: CalendarScrollDayButton, ...components }),\n\t\t[components]\n\t);\n\n\tconst firstMonth = useMemo(() => fromKey(startKey), [startKey]);\n\tconst lastMonth = useMemo(() => fromKey(endKey), [endKey]);\n\tconst windowMonth = useMemo(() => fromKey(startKey + windowStart), [startKey, windowStart]);\n\n\treturn (\n\t\t<div className={styles.root({ className })}>\n\t\t\t<div className={styles.header()}>\n\t\t\t\t<div className={styles.nav()}>\n\t\t\t\t\t<CalendarPreviousMonthButton\n\t\t\t\t\t\taria-label={(labels?.labelPrevious ?? labelPrevious)(isFirst ? undefined : previous)}\n\t\t\t\t\t\tdisabled={isFirst}\n\t\t\t\t\t\tonClick={() => jumpBy(-1)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<CalendarChevron orientation=\"left\" />\n\t\t\t\t\t</CalendarPreviousMonthButton>\n\t\t\t\t\t<div className={styles.dropdowns()}>\n\t\t\t\t\t\t<CalendarDropdown\n\t\t\t\t\t\t\taria-label={(labels?.labelMonthDropdown ?? labelMonthDropdown)()}\n\t\t\t\t\t\t\toptions={monthOptions}\n\t\t\t\t\t\t\tvalue={current.getMonth()}\n\t\t\t\t\t\t\tonChange={onMonthSelect}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<CalendarDropdown\n\t\t\t\t\t\t\taria-label={(labels?.labelYearDropdown ?? labelYearDropdown)()}\n\t\t\t\t\t\t\toptions={yearOptions}\n\t\t\t\t\t\t\tvalue={current.getFullYear()}\n\t\t\t\t\t\t\tonChange={onYearSelect}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<CalendarNextMonthButton\n\t\t\t\t\t\taria-label={(labels?.labelNext ?? labelNext)(isLast ? undefined : next)}\n\t\t\t\t\t\tdisabled={isLast}\n\t\t\t\t\t\tonClick={() => jumpBy(1)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<CalendarChevron orientation=\"right\" />\n\t\t\t\t\t</CalendarNextMonthButton>\n\t\t\t\t</div>\n\t\t\t\t<div className={styles.weekdays()} aria-hidden=\"true\">\n\t\t\t\t\t{weekdayNames.map((name, index) => (\n\t\t\t\t\t\t<span key={index} className={styles.weekday()}>\n\t\t\t\t\t\t\t{name}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div ref={scrollerRef} className={styles.scroller()} data-calendar-scroll-scroller=\"\" onScroll={onScroll}>\n\t\t\t\t<div style={{ height: total * MONTH_HEIGHT }}>\n\t\t\t\t\t<div className={styles.window()} style={{ top: windowStart * MONTH_HEIGHT }}>\n\t\t\t\t\t\t<DayPicker\n\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\tlocale={locale}\n\t\t\t\t\t\t\tweekStartsOn={weekStartsOn}\n\t\t\t\t\t\t\tstartMonth={firstMonth}\n\t\t\t\t\t\t\tendMonth={lastMonth}\n\t\t\t\t\t\t\tmonth={windowMonth}\n\t\t\t\t\t\t\tnumberOfMonths={windowSize}\n\t\t\t\t\t\t\tcaptionLayout=\"label\"\n\t\t\t\t\t\t\tfixedWeeks\n\t\t\t\t\t\t\thideNavigation\n\t\t\t\t\t\t\tshowOutsideDays={false}\n\t\t\t\t\t\t\tclassNames={classNamesMemoized}\n\t\t\t\t\t\t\tcomponents={componentsMemoized}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nCalendarScroll.displayName = \"CalendarScroll\";\n"],"names":["MONTH_HEIGHT","DEFAULT_WINDOW_SIZE","BUFFER_BEFORE","DEFAULT_YEARS_BACK","DEFAULT_END_YEAR","calendarScrollStyles","tv","toKey","date","fromKey","key","clamp","value","min","max","CalendarScrollDayButton","modifiers","props","anchorRef","useRef","isFirstRun","useEffect","isMount","button","scroller","jsx","CalendarDayButton","CalendarScrollMonths","children","Months","Children","child","isValidElement","cloneElement","CalendarScroll","className","classNames","locale","enUS","weekStartsOn","startMonth","endMonth","defaultMonth","components","styles","scrollerRef","frameRef","startKey","endKey","total","windowSizeLimit","setWindowSizeLimit","useState","windowSize","getWindowStart","useCallback","index","initialIndex","currentIndex","setCurrentIndex","windowStart","setWindowStart","useIsomorphicLayoutEffect","visibleMonths","syncWithScroll","scrollTop","onScroll","jumpTo","jumpBy","delta","current","previous","next","isFirst","isLast","onMonthSelect","event","onYearSelect","dateFnsLocale","labels","monthOptions","useMemo","_","month","format","weekdayNames","first","startOfWeek","day","addDays","yearOptions","last","i","classNamesMemoized","componentsMemoized","firstMonth","lastMonth","windowMonth","jsxs","CalendarPreviousMonthButton","labelPrevious","CalendarChevron","CalendarDropdown","labelMonthDropdown","labelYearDropdown","CalendarNextMonthButton","labelNext","name","DayPicker"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar.js","sources":["../../src/components/calendar/components/calendar-root/CalendarRoot.tsx","../../src/components/calendar/components/calendar-week-day/CalendarWeekDay.tsx","../../src/components/calendar/Calendar.tsx"],"sourcesContent":["import { Root, RootProps } from \"react-day-picker\";\
|
|
1
|
+
{"version":3,"file":"calendar.js","sources":["../../src/components/calendar/components/calendar-root/CalendarRoot.tsx","../../src/components/calendar/components/calendar-week-day/CalendarWeekDay.tsx","../../src/components/calendar/Calendar.tsx"],"sourcesContent":["import { Root, RootProps } from \"react-day-picker\";\nimport { tv } from \"tailwind-variants\";\n\nconst calendarRootStyles = tv({\n\tbase: [\n\t\t\"w-fit rounded-md border bg-background\",\n\t\t\"border border-solid border-secondary-border bg-secondary-bg shadow-soft-sm\"\n\t]\n});\n\n/**\n * Корневой контейнер для Calendar\n *\n * @param className - Дополнительные CSS классы\n * @param props - Пропсы от react-day-picker Root\n */\nexport const CalendarRoot = ({ className, ...props }: RootProps) => {\n\treturn <Root {...props} className={calendarRootStyles({ className })} />;\n};\n\nCalendarRoot.displayName = \"CalendarRoot\";\n","import { tv } from \"tailwind-variants\";\nimport { Weekday, WeekdayProps } from \"react-day-picker\";\n\nconst calendarWeekDayStyles = tv({\n\tbase: [\n\t\t\"inline-flex items-center justify-center gap-2\",\n\t\t\"transition-all\",\n\t\t\"text-xs font-medium text-muted-foreground\",\n\t\t\"w-9 shrink-0 rounded p-0\",\n\t\t\"opacity-70\"\n\t]\n});\n\n/**\n * Компонент для отображения дня недели в Calendar\n *\n * @param className - Дополнительные CSS классы\n * @param props - Пропсы от react-day-picker Weekday\n */\nexport const CalendarWeekDay = ({ className, ...props }: WeekdayProps) => {\n\treturn <Weekday className={calendarWeekDayStyles({ className })} {...props}></Weekday>;\n};\n\nCalendarWeekDay.displayName = \"CalendarWeekDay\";\n","import { useMemo } from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport { CalendarChevron } from \"./components/calendar-chevron/CalendarChevron\";\nimport { CalendarDayButton } from \"./components/calendar-day-button/CalendarDayButton\";\nimport { CalendarDropdown } from \"./components/calendar-dropdown/CalendarDropdown\";\nimport { CalendarNextMonthButton } from \"./components/calendar-next-month-button/CalendarNextMonthButton\";\nimport { CalendarPreviousMonthButton } from \"./components/calendar-previous-month-button/CalendarPreviousMonthButton\";\nimport { CalendarRoot } from \"./components/calendar-root/CalendarRoot\";\nimport { CalendarWeekDay } from \"./components/calendar-week-day/CalendarWeekDay\";\nimport { calendarDropdownStyles } from \"./styles\";\nimport { DayPicker, DayPickerProps } from \"react-day-picker\";\n\nconst CalendarStyles = tv({\n\tbase: [\n\t\t\"bg-background p-3 [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent\"\n\t],\n\tslots: {\n\t\tmonths: \"relative flex flex-col gap-4 md:flex-row\",\n\t\tmonth: \"flex w-full flex-col gap-4\",\n\t\tnav: \"absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1\",\n\t\tmonth_caption: \"flex h-9 w-full items-center justify-center px-2 capitalize\",\n\t\tdropdowns: \"flex h-9 w-full items-center justify-center gap-1.5 text-sm font-medium\",\n\t\ttable: \"w-full border-collapse\",\n\t\tweekdays: \"flex\",\n\t\tweek: \"mt-1 flex\",\n\t\thidden: \"invisible\",\n\t\tday: \"border-0 p-0\"\n\t}\n});\n\nconst captionLabelStyle = tv({\n\tbase: \"select-none text-sm font-medium\"\n});\n\nexport type CalendarProps = DayPickerProps;\n\n/**\n * Calendar компонент для выбора дат\n *\n * Основан на [react-day-picker](https://Calendar.dev/) с кастомной стилизацией.\n * Поддерживает выбор одной даты, множественный выбор и выбор диапазона дат.\n *\n * @see https://ui-kit.ics-it.ru/?path=/docs/components-day-picker-Calendar--docs\n */\nexport const Calendar = ({\n\tclassName,\n\tclassNames,\n\tshowOutsideDays = true,\n\tcaptionLayout = \"dropdown\",\n\tcomponents,\n\t...props\n}: CalendarProps) => {\n\tconst styles = CalendarStyles();\n\tconst dropdownStyles = calendarDropdownStyles();\n\n\t/**\n\t * По умолчанию react-day-picker ограничивает выбор даты:\n\t * - Минимум - текущий год минус 100 лет\n\t * - Максимум - последний месяц текущего года\n\t * Переопределяем это поведение, чтобы можно было выбирать даты до 2100 года.\n\t */\n\tconst endMonth = useMemo(() => {\n\t\treturn new Date(2100, 11, 31);\n\t}, []);\n\n\tconst classNamesMemoized: CalendarProps[\"classNames\"] = useMemo(() => {\n\t\treturn {\n\t\t\tmonths: styles.months(),\n\t\t\tmonth: styles.month(),\n\t\t\tnav: styles.nav(),\n\t\t\tmonth_caption: styles.month_caption(),\n\t\t\tdropdowns: styles.dropdowns(),\n\t\t\tdropdown_root: dropdownStyles.root(),\n\t\t\tdropdown: dropdownStyles.select(),\n\t\t\tcaption_label: captionLayout === \"label\" ? captionLabelStyle() : dropdownStyles.label(),\n\t\t\ttable: styles.table(),\n\t\t\tweekdays: styles.weekdays(),\n\t\t\tweek: styles.week(),\n\t\t\thidden: styles.hidden(),\n\t\t\tday: styles.day(),\n\t\t\t...classNames\n\t\t};\n\t}, [classNames]);\n\n\tconst componentsMemoized: CalendarProps[\"components\"] = useMemo(() => {\n\t\treturn {\n\t\t\tRoot: CalendarRoot,\n\t\t\tChevron: CalendarChevron,\n\t\t\tDayButton: CalendarDayButton,\n\t\t\tDropdown: CalendarDropdown,\n\t\t\tWeekday: CalendarWeekDay,\n\t\t\tPreviousMonthButton: CalendarPreviousMonthButton,\n\t\t\tNextMonthButton: CalendarNextMonthButton,\n\t\t\t...components\n\t\t};\n\t}, [components]);\n\n\treturn (\n\t\t<DayPicker\n\t\t\tendMonth={endMonth}\n\t\t\tshowOutsideDays={showOutsideDays}\n\t\t\tclassName={styles.base({ className })}\n\t\t\tcaptionLayout={captionLayout}\n\t\t\tclassNames={classNamesMemoized}\n\t\t\tcomponents={componentsMemoized}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n\nCalendar.displayName = \"Calendar\";\n"],"names":["calendarRootStyles","tv","CalendarRoot","className","props","jsx","Root","calendarWeekDayStyles","CalendarWeekDay","Weekday","CalendarStyles","captionLabelStyle","Calendar","classNames","showOutsideDays","captionLayout","components","styles","dropdownStyles","calendarDropdownStyles","endMonth","useMemo","classNamesMemoized","componentsMemoized","CalendarChevron","CalendarDayButton","CalendarDropdown","CalendarPreviousMonthButton","CalendarNextMonthButton","DayPicker"],"mappings":";;;;AAGA,MAAMA,IAAqBC,EAAG;AAAA,EAC7B,MAAM;AAAA,IACL;AAAA,IACA;AAAA,EAAA;AAEF,CAAC,GAQYC,IAAe,CAAC,EAAE,WAAAC,GAAW,GAAGC,QACrC,gBAAAC,EAACC,KAAM,GAAGF,GAAO,WAAWJ,EAAmB,EAAE,WAAAG,EAAW,CAAA,GAAG;AAGvED,EAAa,cAAc;ACjB3B,MAAMK,IAAwBN,EAAG;AAAA,EAChC,MAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEF,CAAC,GAQYO,IAAkB,CAAC,EAAE,WAAAL,GAAW,GAAGC,QACxC,gBAAAC,EAACI,KAAQ,WAAWF,EAAsB,EAAE,WAAAJ,EAAW,CAAA,GAAI,GAAGC,GAAO;AAG7EI,EAAgB,cAAc;ACX9B,MAAME,IAAiBT,EAAG;AAAA,EACzB,MAAM;AAAA,IACL;AAAA,EACD;AAAA,EACA,OAAO;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,KAAK;AAAA,IACL,eAAe;AAAA,IACf,WAAW;AAAA,IACX,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,KAAK;AAAA,EAAA;AAEP,CAAC,GAEKU,IAAoBV,EAAG;AAAA,EAC5B,MAAM;AACP,CAAC,GAYYW,IAAW,CAAC;AAAA,EACxB,WAAAT;AAAA,EACA,YAAAU;AAAA,EACA,iBAAAC,IAAkB;AAAA,EAClB,eAAAC,IAAgB;AAAA,EAChB,YAAAC;AAAA,EACA,GAAGZ;AACJ,MAAqB;AACpB,QAAMa,IAASP,EAAe,GACxBQ,IAAiBC,EAAuB,GAQxCC,IAAWC,EAAQ,MACjB,IAAI,KAAK,MAAM,IAAI,EAAE,GAC1B,EAAE,GAECC,IAAkDD,EAAQ,OACxD;AAAA,IACN,QAAQJ,EAAO,OAAO;AAAA,IACtB,OAAOA,EAAO,MAAM;AAAA,IACpB,KAAKA,EAAO,IAAI;AAAA,IAChB,eAAeA,EAAO,cAAc;AAAA,IACpC,WAAWA,EAAO,UAAU;AAAA,IAC5B,eAAeC,EAAe,KAAK;AAAA,IACnC,UAAUA,EAAe,OAAO;AAAA,IAChC,eAAeH,MAAkB,UAAUJ,EAAkB,IAAIO,EAAe,MAAM;AAAA,IACtF,OAAOD,EAAO,MAAM;AAAA,IACpB,UAAUA,EAAO,SAAS;AAAA,IAC1B,MAAMA,EAAO,KAAK;AAAA,IAClB,QAAQA,EAAO,OAAO;AAAA,IACtB,KAAKA,EAAO,IAAI;AAAA,IAChB,GAAGJ;AAAA,EACJ,IACE,CAACA,CAAU,CAAC,GAETU,IAAkDF,EAAQ,OACxD;AAAA,IACN,MAAMnB;AAAA,IACN,SAASsB;AAAA,IACT,WAAWC;AAAA,IACX,UAAUC;AAAA,IACV,SAASlB;AAAA,IACT,qBAAqBmB;AAAA,IACrB,iBAAiBC;AAAA,IACjB,GAAGZ;AAAA,EACJ,IACE,CAACA,CAAU,CAAC;AAGd,SAAA,gBAAAX;AAAA,IAACwB;AAAA,IAAA;AAAA,MACA,UAAAT;AAAA,MACA,iBAAAN;AAAA,MACA,WAAWG,EAAO,KAAK,EAAE,WAAAd,GAAW;AAAA,MACpC,eAAAY;AAAA,MACA,YAAYO;AAAA,MACZ,YAAYC;AAAA,MACX,GAAGnB;AAAA,IAAA;AAAA,EACL;AAEF;AAEAQ,EAAS,cAAc;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card.js","sources":["../../node_modules/.pnpm/lucide-react@0.460.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/ellipsis-vertical.js","../../src/components/card/styles.ts","../../src/components/card/Card.tsx","../../src/components/card/components/ActionCard.tsx","../../src/components/card/components/CardTitle.tsx","../../src/components/card/components/CardSubTitle.tsx","../../src/components/card/components/CardFooter.tsx","../../src/components/card/components/CardVisualBadge.tsx","../../src/components/card/components/CardFeature.tsx","../../src/components/card/components/CardMenuTrigger.tsx","../../src/components/card/components/FolderSvg.tsx","../../src/components/card/components/CardFolder.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst EllipsisVertical = createLucideIcon(\"EllipsisVertical\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"1\", key: \"41hilf\" }],\n [\"circle\", { cx: \"12\", cy: \"5\", r: \"1\", key: \"gxeob9\" }],\n [\"circle\", { cx: \"12\", cy: \"19\", r: \"1\", key: \"lyex9k\" }]\n]);\n\nexport { EllipsisVertical as default };\n//# sourceMappingURL=ellipsis-vertical.js.map\n","import { tv } from \"tailwind-variants\";\r\n\r\nexport const cardStyles = tv({\r\n\tbase: [\r\n\t\t\"group/card overflow-hidden rounded-xl border border-secondary-border bg-secondary-bg text-start shadow-soft-sm\",\r\n\t\t\"relative flex flex-col px-3 pb-3 pt-2.5 lg:px-4\"\r\n\t]\r\n});\r\n","import { Slot } from \"@radix-ui/react-slot\";\r\nimport React from \"react\";\r\nimport { cardStyles } from \"./styles\";\r\n\r\nexport type CardProps = React.HTMLAttributes<HTMLDivElement> & {\r\n\tasChild?: boolean;\r\n};\r\n\r\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\r\n\t({ className, children, asChild = false, ...props }, ref) => {\r\n\t\tconst Comp = asChild ? Slot : \"div\";\r\n\t\treturn (\r\n\t\t\t<Comp ref={ref} className={cardStyles({ className })} {...props}>\r\n\t\t\t\t{children}\r\n\t\t\t</Comp>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nCard.displayName = \"Card\";\r\n","import { Slot } from \"@radix-ui/react-slot\";\r\nimport React, { useCallback } from \"react\";\r\nimport { tv } from \"tailwind-variants\";\r\nimport { cardStyles } from \"../styles\";\r\n\r\nconst actionCardStyles = tv({\r\n\textend: cardStyles,\r\n\tbase: [\r\n\t\t\"cursor-pointer hover:border-primary-border hover:bg-secondary-bg-hover hover:shadow-soft-base\",\r\n\t\t\"focus-visible:border-secondary-border focus-visible:bg-secondary-bg focus-visible:shadow-focus focus-visible:outline-hidden\"\r\n\t]\r\n});\r\n\r\nexport type ActionCardProps = React.HTMLAttributes<HTMLDivElement> & {\r\n\tasChild?: boolean;\r\n};\r\n\r\nexport const ActionCard = React.forwardRef<HTMLDivElement, ActionCardProps>(\r\n\t({ className, children, asChild = false, onClick, ...props }, ref) => {\r\n\t\tconst Comp = asChild ? Slot : \"div\";\r\n\r\n\t\tconst handleKeyDown = useCallback(\r\n\t\t\t(event: React.KeyboardEvent<HTMLDivElement>) => {\r\n\t\t\t\tif (onClick && (event.key === \"Enter\" || event.key === \" \") && event.target === event.currentTarget) {\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tonClick(event as unknown as React.MouseEvent<HTMLDivElement>);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t[onClick]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Comp\r\n\t\t\t\tref={ref}\r\n\t\t\t\tclassName={actionCardStyles({ className })}\r\n\t\t\t\tonClick={onClick}\r\n\t\t\t\tonKeyDown={handleKeyDown}\r\n\t\t\t\ttabIndex={0}\r\n\t\t\t\trole=\"button\"\r\n\t\t\t\t{...props}\r\n\t\t\t>\r\n\t\t\t\t{children}\r\n\t\t\t</Comp>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nActionCard.displayName = \"ActionCard\";\r\n","import { Slot } from \"@radix-ui/react-slot\";\r\nimport React from \"react\";\r\nimport { tv } from \"tailwind-variants\";\r\n\r\nconst cardTitleStyles = tv({\r\n\tbase: \"mb-1 mr-4 text-base font-medium text-secondary-fg\"\r\n});\r\n\r\nexport type CardTitleProps = React.HTMLAttributes<HTMLHeadingElement> & {\r\n\tasChild?: boolean;\r\n};\r\n\r\nexport const CardTitle = React.forwardRef<HTMLHeadingElement, CardTitleProps>(\r\n\t({ className, children, asChild = false, ...props }, ref) => {\r\n\t\tconst Comp = asChild ? Slot : \"h3\";\r\n\t\treturn (\r\n\t\t\t<Comp className={cardTitleStyles({ className })} ref={ref} {...props}>\r\n\t\t\t\t{children}\r\n\t\t\t</Comp>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nCardTitle.displayName = \"CardTitle\";\r\n","import React from \"react\";\r\nimport { tv } from \"tailwind-variants\";\r\nimport { Slot } from \"@radix-ui/react-slot\";\r\n\r\nconst cardSubTitleStyles = tv({\r\n\tbase: \"mb-1 text-xs text-muted\"\r\n});\r\n\r\nexport type CardSubTitleProps = React.HTMLAttributes<HTMLHeadingElement> & {\r\n\tasChild?: boolean;\r\n};\r\n\r\nexport const CardSubTitle = React.forwardRef<HTMLHeadingElement, CardSubTitleProps>(\r\n\t({ className, children, asChild = false, ...props }, ref) => {\r\n\t\tconst Comp = asChild ? Slot : \"h4\";\r\n\r\n\t\treturn (\r\n\t\t\t<Comp className={cardSubTitleStyles({ className })} ref={ref} {...props}>\r\n\t\t\t\t{children}\r\n\t\t\t</Comp>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nCardSubTitle.displayName = \"CardSubTitle\";\r\n","import React from \"react\";\r\nimport { tv } from \"tailwind-variants\";\r\nimport { Slot } from \"@radix-ui/react-slot\";\r\n\r\nconst cardFooterStyles = tv({\r\n\tbase: \"mt-auto flex pt-2.5\"\r\n});\r\n\r\nexport type CardFooterProps = React.HTMLAttributes<HTMLDivElement> & {\r\n\tasChild?: boolean;\r\n};\r\n\r\nexport const CardFooter = React.forwardRef<HTMLDivElement, CardFooterProps>(\r\n\t({ className, children, asChild = false, ...props }, ref) => {\r\n\t\tconst Comp = asChild ? Slot : \"div\";\r\n\r\n\t\treturn (\r\n\t\t\t<Comp className={cardFooterStyles({ className })} ref={ref} {...props}>\r\n\t\t\t\t{children}\r\n\t\t\t</Comp>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nCardFooter.displayName = \"CardFooter\";\r\n","import React from \"react\";\r\nimport { tv } from \"tailwind-variants\";\r\nimport { Slot } from \"@radix-ui/react-slot\";\r\n\r\nconst cardVisualBadgeStyles = tv({\r\n\tbase: \"absolute -bottom-0.5 -right-0.5 flex h-[3.875rem] w-[3.875rem] items-center justify-center overflow-hidden rounded-tl-lg\"\r\n});\r\n\r\nexport type CardVisualBadgeProps = React.HTMLAttributes<HTMLDivElement> & {\r\n\tasChild?: boolean;\r\n};\r\n\r\nexport const CardVisualBadge = React.forwardRef<HTMLDivElement, CardVisualBadgeProps>(\r\n\t({ className, children, asChild = false, ...props }, ref) => {\r\n\t\tconst Comp = asChild ? Slot : \"div\";\r\n\r\n\t\treturn (\r\n\t\t\t<Comp className={cardVisualBadgeStyles({ className })} ref={ref} {...props}>\r\n\t\t\t\t{children}\r\n\t\t\t</Comp>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nCardVisualBadge.displayName = \"CardVisualBadge\";\r\n","import React from \"react\";\r\nimport { tv } from \"tailwind-variants\";\r\nimport { Slot } from \"@radix-ui/react-slot\";\r\n\r\nconst cardFeatureStyles = tv({\r\n\tbase: \"absolute bottom-3 right-3\"\r\n});\r\n\r\nexport type CardFeatureProps = React.HTMLAttributes<HTMLDivElement> & {\r\n\tasChild?: boolean;\r\n};\r\n\r\nexport const CardFeature = React.forwardRef<HTMLDivElement, CardFeatureProps>(\r\n\t({ className, children, asChild = false, ...props }, ref) => {\r\n\t\tconst Comp = asChild ? Slot : \"div\";\r\n\r\n\t\treturn (\r\n\t\t\t<Comp className={cardFeatureStyles({ className })} ref={ref} {...props}>\r\n\t\t\t\t{children}\r\n\t\t\t</Comp>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nCardFeature.displayName = \"CardFeature\";\r\n","import { IconButton, IconButtonProps } from \"@/components/button/icon-button/IconButton\";\r\nimport { useIsMobile } from \"@/hooks/useBreakpoints\";\r\nimport { MoreVertical } from \"lucide-react\";\r\nimport React from \"react\";\r\nimport { tv } from \"tailwind-variants\";\r\n\r\nconst cardMenuTriggerStyles = tv({\r\n\tbase: [\r\n\t\t\"absolute right-px top-1.5 h-8 w-8\",\r\n\t\t\"invisible group-focus-within/card:visible group-hover/card:visible data-[state=open]:visible touch:visible\"\r\n\t],\r\n\tvariants: {\r\n\t\tisMobile: {\r\n\t\t\ttrue: \"right-0 top-1\"\r\n\t\t}\r\n\t}\r\n});\r\n\r\nexport type CardMenuTriggerProps = Omit<IconButtonProps, \"icon\"> & {\r\n\ticonProps?: Partial<IconButtonProps>;\r\n};\r\n\r\nexport const CardMenuTrigger = React.forwardRef<HTMLButtonElement, CardMenuTriggerProps>(\r\n\t({ className, ...props }, ref) => {\r\n\t\tconst isMobile = useIsMobile();\r\n\r\n\t\treturn (\r\n\t\t\t<IconButton\r\n\t\t\t\tsize=\"sm\"\r\n\t\t\t\tvariant=\"text\"\r\n\t\t\t\ticon={MoreVertical}\r\n\t\t\t\tclassName={cardMenuTriggerStyles({ className, isMobile })}\r\n\t\t\t\tref={ref}\r\n\t\t\t\t{...props}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nCardMenuTrigger.displayName = \"CardMenuTrigger\";\r\n","import { tv } from \"tailwind-variants\";\r\n\r\nconst SVH_FOLDER_HEIGHT = \"calc(100% - 5px)\";\r\n\r\nconst folderSvgStyles = tv({\r\n\tbase: \"stroke-secondary-border\"\r\n});\r\n\r\nexport const FolderSvgLeft = () => {\r\n\treturn (\r\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"62\" height=\"100%\" fill=\"none\">\r\n\t\t\t<path\r\n\t\t\t\td=\"M62.5747 125.5H13.5C6.32031 125.5 0.5 119.68 0.5 112.5L0.5 12.5009C0.5 5.87323 5.87296 0.50055 12.5006 0.500889L47.9439 0.502702C49.7901 0.502797 51.6136 0.923824 53.2503 1.77825C54.6399 2.50376 56.3395 3.41983 57.6085 4.19672C59.5519 5.38647 62.11 5.50052 62.11 5.50052\"\r\n\t\t\t\tclassName={folderSvgStyles()}\r\n\t\t\t/>\r\n\t\t</svg>\r\n\t);\r\n};\r\n\r\nconst folderSvgMediumStyles = tv({\r\n\tbase: \"flex-1 border-y border-secondary-border\"\r\n});\r\n\r\nexport const FolderSvgMedium = () => {\r\n\treturn <div className={folderSvgMediumStyles()} style={{ height: SVH_FOLDER_HEIGHT }} />;\r\n};\r\n\r\nexport const FolderSvgRight = () => {\r\n\treturn (\r\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height={SVH_FOLDER_HEIGHT} fill=\"none\">\r\n\t\t\t<path\r\n\t\t\t\td=\"M-0.319971 0.500366L17.4965 0.500309C23.0194 0.50029 27.4966 4.97745 27.4966 10.5003V108.5C27.4966 115.127 22.124 120.5 15.4966 120.5H-0.319971\"\r\n\t\t\t\tclassName={folderSvgStyles()}\r\n\t\t\t/>\r\n\t\t</svg>\r\n\t);\r\n};\r\n","import React from \"react\";\r\nimport { tv } from \"tailwind-variants\";\r\nimport { FolderSvgLeft, FolderSvgMedium, FolderSvgRight } from \"./FolderSvg\";\r\n\r\nconst cardFolderStyles = tv({\r\n\tbase: \"relative pt-[0.625rem]\",\r\n\tslots: {\r\n\t\tframe: \"pointer-events-none absolute inset-0 flex h-full max-h-8 w-full items-end\"\r\n\t}\r\n});\r\n\r\nexport type CardFolderProps = React.HTMLAttributes<HTMLDivElement> & {\r\n\tasChild?: boolean;\r\n\tclassName?: string;\r\n};\r\n\r\nexport const CardFolder = ({ className, children, ...props }: CardFolderProps) => {\r\n\tconst styles = cardFolderStyles();\r\n\r\n\treturn (\r\n\t\t<div className={styles.base({ className })} {...props}>\r\n\t\t\t<div className={styles.frame()} aria-hidden>\r\n\t\t\t\t<FolderSvgLeft />\r\n\t\t\t\t<FolderSvgMedium />\r\n\t\t\t\t<FolderSvgRight />\r\n\t\t\t</div>\r\n\r\n\t\t\t{children}\r\n\t\t</div>\r\n\t);\r\n};\r\n\r\nCardFolder.displayName = \"CardFolder\";\r\n"],"names":["EllipsisVertical","createLucideIcon","cardStyles","tv","Card","React","className","children","asChild","props","ref","jsx","Slot","actionCardStyles","ActionCard","onClick","Comp","handleKeyDown","useCallback","event","cardTitleStyles","CardTitle","cardSubTitleStyles","CardSubTitle","cardFooterStyles","CardFooter","cardVisualBadgeStyles","CardVisualBadge","cardFeatureStyles","CardFeature","cardMenuTriggerStyles","CardMenuTrigger","isMobile","useIsMobile","IconButton","MoreVertical","SVH_FOLDER_HEIGHT","folderSvgStyles","FolderSvgLeft","folderSvgMediumStyles","FolderSvgMedium","FolderSvgRight","cardFolderStyles","CardFolder","styles","jsxs"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"card.js","sources":["../../node_modules/.pnpm/lucide-react@0.460.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/ellipsis-vertical.js","../../src/components/card/styles.ts","../../src/components/card/Card.tsx","../../src/components/card/components/ActionCard.tsx","../../src/components/card/components/CardTitle.tsx","../../src/components/card/components/CardSubTitle.tsx","../../src/components/card/components/CardFooter.tsx","../../src/components/card/components/CardVisualBadge.tsx","../../src/components/card/components/CardFeature.tsx","../../src/components/card/components/CardMenuTrigger.tsx","../../src/components/card/components/FolderSvg.tsx","../../src/components/card/components/CardFolder.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst EllipsisVertical = createLucideIcon(\"EllipsisVertical\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"1\", key: \"41hilf\" }],\n [\"circle\", { cx: \"12\", cy: \"5\", r: \"1\", key: \"gxeob9\" }],\n [\"circle\", { cx: \"12\", cy: \"19\", r: \"1\", key: \"lyex9k\" }]\n]);\n\nexport { EllipsisVertical as default };\n//# sourceMappingURL=ellipsis-vertical.js.map\n","import { tv } from \"tailwind-variants\";\n\nexport const cardStyles = tv({\n\tbase: [\n\t\t\"group/card overflow-hidden rounded-xl border border-secondary-border bg-secondary-bg text-start shadow-soft-sm\",\n\t\t\"relative flex flex-col px-3 pb-3 pt-2.5 lg:px-4\"\n\t]\n});\n","import { Slot } from \"@radix-ui/react-slot\";\nimport React from \"react\";\nimport { cardStyles } from \"./styles\";\n\nexport type CardProps = React.HTMLAttributes<HTMLDivElement> & {\n\tasChild?: boolean;\n};\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n\t({ className, children, asChild = false, ...props }, ref) => {\n\t\tconst Comp = asChild ? Slot : \"div\";\n\t\treturn (\n\t\t\t<Comp ref={ref} className={cardStyles({ className })} {...props}>\n\t\t\t\t{children}\n\t\t\t</Comp>\n\t\t);\n\t}\n);\n\nCard.displayName = \"Card\";\n","import { Slot } from \"@radix-ui/react-slot\";\nimport React, { useCallback } from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport { cardStyles } from \"../styles\";\n\nconst actionCardStyles = tv({\n\textend: cardStyles,\n\tbase: [\n\t\t\"cursor-pointer hover:border-primary-border hover:bg-secondary-bg-hover hover:shadow-soft-base\",\n\t\t\"focus-visible:border-secondary-border focus-visible:bg-secondary-bg focus-visible:shadow-focus focus-visible:outline-hidden\"\n\t]\n});\n\nexport type ActionCardProps = React.HTMLAttributes<HTMLDivElement> & {\n\tasChild?: boolean;\n};\n\nexport const ActionCard = React.forwardRef<HTMLDivElement, ActionCardProps>(\n\t({ className, children, asChild = false, onClick, ...props }, ref) => {\n\t\tconst Comp = asChild ? Slot : \"div\";\n\n\t\tconst handleKeyDown = useCallback(\n\t\t\t(event: React.KeyboardEvent<HTMLDivElement>) => {\n\t\t\t\tif (onClick && (event.key === \"Enter\" || event.key === \" \") && event.target === event.currentTarget) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tonClick(event as unknown as React.MouseEvent<HTMLDivElement>);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[onClick]\n\t\t);\n\n\t\treturn (\n\t\t\t<Comp\n\t\t\t\tref={ref}\n\t\t\t\tclassName={actionCardStyles({ className })}\n\t\t\t\tonClick={onClick}\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\ttabIndex={0}\n\t\t\t\trole=\"button\"\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</Comp>\n\t\t);\n\t}\n);\n\nActionCard.displayName = \"ActionCard\";\n","import { Slot } from \"@radix-ui/react-slot\";\nimport React from \"react\";\nimport { tv } from \"tailwind-variants\";\n\nconst cardTitleStyles = tv({\n\tbase: \"mb-1 mr-4 text-base font-medium text-secondary-fg\"\n});\n\nexport type CardTitleProps = React.HTMLAttributes<HTMLHeadingElement> & {\n\tasChild?: boolean;\n};\n\nexport const CardTitle = React.forwardRef<HTMLHeadingElement, CardTitleProps>(\n\t({ className, children, asChild = false, ...props }, ref) => {\n\t\tconst Comp = asChild ? Slot : \"h3\";\n\t\treturn (\n\t\t\t<Comp className={cardTitleStyles({ className })} ref={ref} {...props}>\n\t\t\t\t{children}\n\t\t\t</Comp>\n\t\t);\n\t}\n);\n\nCardTitle.displayName = \"CardTitle\";\n","import React from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport { Slot } from \"@radix-ui/react-slot\";\n\nconst cardSubTitleStyles = tv({\n\tbase: \"mb-1 text-xs text-muted\"\n});\n\nexport type CardSubTitleProps = React.HTMLAttributes<HTMLHeadingElement> & {\n\tasChild?: boolean;\n};\n\nexport const CardSubTitle = React.forwardRef<HTMLHeadingElement, CardSubTitleProps>(\n\t({ className, children, asChild = false, ...props }, ref) => {\n\t\tconst Comp = asChild ? Slot : \"h4\";\n\n\t\treturn (\n\t\t\t<Comp className={cardSubTitleStyles({ className })} ref={ref} {...props}>\n\t\t\t\t{children}\n\t\t\t</Comp>\n\t\t);\n\t}\n);\n\nCardSubTitle.displayName = \"CardSubTitle\";\n","import React from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport { Slot } from \"@radix-ui/react-slot\";\n\nconst cardFooterStyles = tv({\n\tbase: \"mt-auto flex pt-2.5\"\n});\n\nexport type CardFooterProps = React.HTMLAttributes<HTMLDivElement> & {\n\tasChild?: boolean;\n};\n\nexport const CardFooter = React.forwardRef<HTMLDivElement, CardFooterProps>(\n\t({ className, children, asChild = false, ...props }, ref) => {\n\t\tconst Comp = asChild ? Slot : \"div\";\n\n\t\treturn (\n\t\t\t<Comp className={cardFooterStyles({ className })} ref={ref} {...props}>\n\t\t\t\t{children}\n\t\t\t</Comp>\n\t\t);\n\t}\n);\n\nCardFooter.displayName = \"CardFooter\";\n","import React from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport { Slot } from \"@radix-ui/react-slot\";\n\nconst cardVisualBadgeStyles = tv({\n\tbase: \"absolute -bottom-0.5 -right-0.5 flex h-[3.875rem] w-[3.875rem] items-center justify-center overflow-hidden rounded-tl-lg\"\n});\n\nexport type CardVisualBadgeProps = React.HTMLAttributes<HTMLDivElement> & {\n\tasChild?: boolean;\n};\n\nexport const CardVisualBadge = React.forwardRef<HTMLDivElement, CardVisualBadgeProps>(\n\t({ className, children, asChild = false, ...props }, ref) => {\n\t\tconst Comp = asChild ? Slot : \"div\";\n\n\t\treturn (\n\t\t\t<Comp className={cardVisualBadgeStyles({ className })} ref={ref} {...props}>\n\t\t\t\t{children}\n\t\t\t</Comp>\n\t\t);\n\t}\n);\n\nCardVisualBadge.displayName = \"CardVisualBadge\";\n","import React from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport { Slot } from \"@radix-ui/react-slot\";\n\nconst cardFeatureStyles = tv({\n\tbase: \"absolute bottom-3 right-3\"\n});\n\nexport type CardFeatureProps = React.HTMLAttributes<HTMLDivElement> & {\n\tasChild?: boolean;\n};\n\nexport const CardFeature = React.forwardRef<HTMLDivElement, CardFeatureProps>(\n\t({ className, children, asChild = false, ...props }, ref) => {\n\t\tconst Comp = asChild ? Slot : \"div\";\n\n\t\treturn (\n\t\t\t<Comp className={cardFeatureStyles({ className })} ref={ref} {...props}>\n\t\t\t\t{children}\n\t\t\t</Comp>\n\t\t);\n\t}\n);\n\nCardFeature.displayName = \"CardFeature\";\n","import { IconButton, IconButtonProps } from \"@/components/button/icon-button/IconButton\";\nimport { useIsMobile } from \"@/hooks/useBreakpoints\";\nimport { MoreVertical } from \"lucide-react\";\nimport React from \"react\";\nimport { tv } from \"tailwind-variants\";\n\nconst cardMenuTriggerStyles = tv({\n\tbase: [\n\t\t\"absolute right-px top-1.5 h-8 w-8\",\n\t\t\"invisible group-focus-within/card:visible group-hover/card:visible data-[state=open]:visible touch:visible\"\n\t],\n\tvariants: {\n\t\tisMobile: {\n\t\t\ttrue: \"right-0 top-1\"\n\t\t}\n\t}\n});\n\nexport type CardMenuTriggerProps = Omit<IconButtonProps, \"icon\"> & {\n\ticonProps?: Partial<IconButtonProps>;\n};\n\nexport const CardMenuTrigger = React.forwardRef<HTMLButtonElement, CardMenuTriggerProps>(\n\t({ className, ...props }, ref) => {\n\t\tconst isMobile = useIsMobile();\n\n\t\treturn (\n\t\t\t<IconButton\n\t\t\t\tsize=\"sm\"\n\t\t\t\tvariant=\"text\"\n\t\t\t\ticon={MoreVertical}\n\t\t\t\tclassName={cardMenuTriggerStyles({ className, isMobile })}\n\t\t\t\tref={ref}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t}\n);\n\nCardMenuTrigger.displayName = \"CardMenuTrigger\";\n","import { tv } from \"tailwind-variants\";\n\nconst SVH_FOLDER_HEIGHT = \"calc(100% - 5px)\";\n\nconst folderSvgStyles = tv({\n\tbase: \"stroke-secondary-border\"\n});\n\nexport const FolderSvgLeft = () => {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"62\" height=\"100%\" fill=\"none\">\n\t\t\t<path\n\t\t\t\td=\"M62.5747 125.5H13.5C6.32031 125.5 0.5 119.68 0.5 112.5L0.5 12.5009C0.5 5.87323 5.87296 0.50055 12.5006 0.500889L47.9439 0.502702C49.7901 0.502797 51.6136 0.923824 53.2503 1.77825C54.6399 2.50376 56.3395 3.41983 57.6085 4.19672C59.5519 5.38647 62.11 5.50052 62.11 5.50052\"\n\t\t\t\tclassName={folderSvgStyles()}\n\t\t\t/>\n\t\t</svg>\n\t);\n};\n\nconst folderSvgMediumStyles = tv({\n\tbase: \"flex-1 border-y border-secondary-border\"\n});\n\nexport const FolderSvgMedium = () => {\n\treturn <div className={folderSvgMediumStyles()} style={{ height: SVH_FOLDER_HEIGHT }} />;\n};\n\nexport const FolderSvgRight = () => {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height={SVH_FOLDER_HEIGHT} fill=\"none\">\n\t\t\t<path\n\t\t\t\td=\"M-0.319971 0.500366L17.4965 0.500309C23.0194 0.50029 27.4966 4.97745 27.4966 10.5003V108.5C27.4966 115.127 22.124 120.5 15.4966 120.5H-0.319971\"\n\t\t\t\tclassName={folderSvgStyles()}\n\t\t\t/>\n\t\t</svg>\n\t);\n};\n","import React from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport { FolderSvgLeft, FolderSvgMedium, FolderSvgRight } from \"./FolderSvg\";\n\nconst cardFolderStyles = tv({\n\tbase: \"relative pt-[0.625rem]\",\n\tslots: {\n\t\tframe: \"pointer-events-none absolute inset-0 flex h-full max-h-8 w-full items-end\"\n\t}\n});\n\nexport type CardFolderProps = React.HTMLAttributes<HTMLDivElement> & {\n\tasChild?: boolean;\n\tclassName?: string;\n};\n\nexport const CardFolder = ({ className, children, ...props }: CardFolderProps) => {\n\tconst styles = cardFolderStyles();\n\n\treturn (\n\t\t<div className={styles.base({ className })} {...props}>\n\t\t\t<div className={styles.frame()} aria-hidden>\n\t\t\t\t<FolderSvgLeft />\n\t\t\t\t<FolderSvgMedium />\n\t\t\t\t<FolderSvgRight />\n\t\t\t</div>\n\n\t\t\t{children}\n\t\t</div>\n\t);\n};\n\nCardFolder.displayName = \"CardFolder\";\n"],"names":["EllipsisVertical","createLucideIcon","cardStyles","tv","Card","React","className","children","asChild","props","ref","jsx","Slot","actionCardStyles","ActionCard","onClick","Comp","handleKeyDown","useCallback","event","cardTitleStyles","CardTitle","cardSubTitleStyles","CardSubTitle","cardFooterStyles","CardFooter","cardVisualBadgeStyles","CardVisualBadge","cardFeatureStyles","CardFeature","cardMenuTriggerStyles","CardMenuTrigger","isMobile","useIsMobile","IconButton","MoreVertical","SVH_FOLDER_HEIGHT","folderSvgStyles","FolderSvgLeft","folderSvgMediumStyles","FolderSvgMedium","FolderSvgRight","cardFolderStyles","CardFolder","styles","jsxs"],"mappings":"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","x_google_ignoreList":[0]}
|