@jbpark/ui-kit 10.3.0 → 10.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ko.md +97 -76
- package/README.md +91 -70
- package/dist/AutoComplete.mjs +1 -1
- package/dist/Breadcrumb.mjs +1 -1
- package/dist/Cascader.mjs +2 -2
- package/dist/Checkbox.d.mts +10 -0
- package/dist/Checkbox.d.mts.map +1 -0
- package/dist/Checkbox.mjs +9 -0
- package/dist/Checkbox.mjs.map +1 -0
- package/dist/CodeEditor.d.mts +8 -2
- package/dist/CodeEditor.d.mts.map +1 -1
- package/dist/CodeEditor.mjs +9 -4
- package/dist/CodeEditor.mjs.map +1 -1
- package/dist/{components/molecules/collapse.d.mts → Collapse.d.mts} +1 -1
- package/dist/Collapse.d.mts.map +1 -0
- package/dist/{components/molecules/collapse.mjs → Collapse.mjs} +3 -3
- package/dist/Collapse.mjs.map +1 -0
- package/dist/{components/atoms/color-picker.d.mts → ColorPicker.d.mts} +1 -1
- package/dist/ColorPicker.d.mts.map +1 -0
- package/dist/{components/atoms/color-picker.mjs → ColorPicker.mjs} +3 -3
- package/dist/ColorPicker.mjs.map +1 -0
- package/dist/{components/templates/container.d.mts → Container.d.mts} +1 -1
- package/dist/Container.d.mts.map +1 -0
- package/dist/{components/templates/container.mjs → Container.mjs} +2 -2
- package/dist/Container.mjs.map +1 -0
- package/dist/{components/atoms/date-picker.d.mts → DatePicker.d.mts} +1 -1
- package/dist/DatePicker.d.mts.map +1 -0
- package/dist/{components/atoms/date-picker.mjs → DatePicker.mjs} +6 -6
- package/dist/DatePicker.mjs.map +1 -0
- package/dist/{components/organisms/drawer.d.mts → Drawer.d.mts} +1 -1
- package/dist/Drawer.d.mts.map +1 -0
- package/dist/{components/organisms/drawer.mjs → Drawer.mjs} +5 -5
- package/dist/Drawer.mjs.map +1 -0
- package/dist/{components/molecules/dropdown.d.mts → Dropdown.d.mts} +2 -2
- package/dist/Dropdown.d.mts.map +1 -0
- package/dist/{components/molecules/dropdown.mjs → Dropdown.mjs} +4 -4
- package/dist/Dropdown.mjs.map +1 -0
- package/dist/{components/templates/empty.d.mts → Empty.d.mts} +2 -2
- package/dist/Empty.d.mts.map +1 -0
- package/dist/{components/templates/empty.mjs → Empty.mjs} +3 -3
- package/dist/Empty.mjs.map +1 -0
- package/dist/FloatButton.d.mts +10 -0
- package/dist/FloatButton.d.mts.map +1 -0
- package/dist/FloatButton.mjs +9 -0
- package/dist/FloatButton.mjs.map +1 -0
- package/dist/Input.d.mts +16 -0
- package/dist/Input.d.mts.map +1 -0
- package/dist/Input.mjs +15 -0
- package/dist/Input.mjs.map +1 -0
- package/dist/{components/organisms/list/index.d.mts → List.d.mts} +3 -3
- package/dist/List.d.mts.map +1 -0
- package/dist/List.mjs +9 -0
- package/dist/List.mjs.map +1 -0
- package/dist/Marquees.d.mts +10 -0
- package/dist/Marquees.d.mts.map +1 -0
- package/dist/Marquees.mjs +9 -0
- package/dist/Marquees.mjs.map +1 -0
- package/dist/Mentions.d.mts.map +1 -1
- package/dist/Mentions.mjs +8 -7
- package/dist/Mentions.mjs.map +1 -1
- package/dist/{components/organisms/modal.d.mts → Modal.d.mts} +1 -1
- package/dist/Modal.d.mts.map +1 -0
- package/dist/{components/organisms/modal.mjs → Modal.mjs} +6 -6
- package/dist/Modal.mjs.map +1 -0
- package/dist/{components/templates/page-header.d.mts → PageHeader.d.mts} +1 -1
- package/dist/PageHeader.d.mts.map +1 -0
- package/dist/{components/templates/page-header.mjs → PageHeader.mjs} +4 -4
- package/dist/PageHeader.mjs.map +1 -0
- package/dist/Pagination.mjs +2 -2
- package/dist/Popconfirm.d.mts +1 -1
- package/dist/Popconfirm.mjs +1 -1
- package/dist/{components/atoms/popover.d.mts → Popover.d.mts} +1 -1
- package/dist/Popover.d.mts.map +1 -0
- package/dist/{components/atoms/popover.mjs → Popover.mjs} +4 -4
- package/dist/Popover.mjs.map +1 -0
- package/dist/{components/atoms/progress.d.mts → Progress.d.mts} +1 -1
- package/dist/Progress.d.mts.map +1 -0
- package/dist/{components/atoms/progress.mjs → Progress.mjs} +3 -3
- package/dist/Progress.mjs.map +1 -0
- package/dist/Radio.d.mts +10 -0
- package/dist/Radio.d.mts.map +1 -0
- package/dist/Radio.mjs +9 -0
- package/dist/Radio.mjs.map +1 -0
- package/dist/{components/templates/result.d.mts → Result.d.mts} +1 -1
- package/dist/Result.d.mts.map +1 -0
- package/dist/{components/templates/result.mjs → Result.mjs} +2 -2
- package/dist/Result.mjs.map +1 -0
- package/dist/RichTextEditor.d.mts +3 -0
- package/dist/RichTextEditor.mjs +1 -0
- package/dist/{components/atoms/select.d.mts → Select.d.mts} +5 -5
- package/dist/Select.d.mts.map +1 -0
- package/dist/{components/atoms/select.mjs → Select.mjs} +5 -5
- package/dist/Select.mjs.map +1 -0
- package/dist/Skeleton.d.mts +12 -0
- package/dist/Skeleton.d.mts.map +1 -0
- package/dist/Skeleton.mjs +11 -0
- package/dist/Skeleton.mjs.map +1 -0
- package/dist/Slider.d.mts +2 -0
- package/dist/{components/atoms/slider/index.mjs → Slider.mjs} +2 -2
- package/dist/Slider.mjs.map +1 -0
- package/dist/Space.d.mts +3 -2
- package/dist/Space.d.mts.map +1 -1
- package/dist/Space.mjs +13 -4
- package/dist/Space.mjs.map +1 -1
- package/dist/{components/atoms/spin.d.mts → Spin.d.mts} +1 -1
- package/dist/Spin.d.mts.map +1 -0
- package/dist/{components/atoms/spin.mjs → Spin.mjs} +3 -3
- package/dist/Spin.mjs.map +1 -0
- package/dist/Splitter.d.mts +10 -0
- package/dist/Splitter.d.mts.map +1 -0
- package/dist/Splitter.mjs +9 -0
- package/dist/Splitter.mjs.map +1 -0
- package/dist/Statistic.mjs +1 -1
- package/dist/Swiper.d.mts +10 -0
- package/dist/Swiper.d.mts.map +1 -0
- package/dist/Swiper.mjs +9 -0
- package/dist/Swiper.mjs.map +1 -0
- package/dist/{components/atoms/switch.d.mts → Switch.d.mts} +2 -2
- package/dist/Switch.d.mts.map +1 -0
- package/dist/{components/atoms/switch.mjs → Switch.mjs} +4 -4
- package/dist/Switch.mjs.map +1 -0
- package/dist/Table.mjs +2 -2
- package/dist/Table.mjs.map +1 -1
- package/dist/{components/molecules/tabs.d.mts → Tabs.d.mts} +3 -3
- package/dist/Tabs.d.mts.map +1 -0
- package/dist/{components/molecules/tabs.mjs → Tabs.mjs} +3 -3
- package/dist/Tabs.mjs.map +1 -0
- package/dist/TimePicker.mjs +1 -1
- package/dist/{components/organisms/toast.d.mts → Toast.d.mts} +12 -2
- package/dist/Toast.d.mts.map +1 -0
- package/dist/Toast.mjs +198 -0
- package/dist/Toast.mjs.map +1 -0
- package/dist/ToggleGroup.d.mts +28 -0
- package/dist/ToggleGroup.d.mts.map +1 -0
- package/dist/ToggleGroup.mjs +58 -0
- package/dist/ToggleGroup.mjs.map +1 -0
- package/dist/{components/atoms/tooltip.d.mts → Tooltip.d.mts} +1 -1
- package/dist/Tooltip.d.mts.map +1 -0
- package/dist/{components/atoms/tooltip.mjs → Tooltip.mjs} +2 -2
- package/dist/Tooltip.mjs.map +1 -0
- package/dist/Tour.d.mts.map +1 -1
- package/dist/Tour.mjs +47 -64
- package/dist/Tour.mjs.map +1 -1
- package/dist/Transfer.mjs +2 -2
- package/dist/Tree.mjs +1 -1
- package/dist/{components/molecules/upload.d.mts → Upload.d.mts} +1 -1
- package/dist/Upload.d.mts.map +1 -0
- package/dist/{components/molecules/upload.mjs → Upload.mjs} +7 -7
- package/dist/Upload.mjs.map +1 -0
- package/dist/components/atoms/index.d.mts +34 -27
- package/dist/components/atoms/input/input.d.mts +2 -1
- package/dist/components/atoms/input/input.d.mts.map +1 -1
- package/dist/components/atoms/input/input.mjs.map +1 -1
- package/dist/components/atoms/rich-text-editor/toolbar-presets.mjs +4 -4
- package/dist/components/atoms/select-multiple.mjs +1 -1
- package/dist/components/atoms/select-searchable.mjs +1 -1
- package/dist/components/molecules/index.d.mts +22 -21
- package/dist/components/organisms/form/control.mjs +1 -1
- package/dist/components/organisms/imperative-stack.mjs +16 -1
- package/dist/components/organisms/imperative-stack.mjs.map +1 -1
- package/dist/components/organisms/index.d.mts +15 -15
- package/dist/components/organisms/list/list.d.mts +1 -1
- package/dist/components/organisms/list/list.mjs +1 -1
- package/dist/components/organisms/swiper/swiper.d.mts +6 -0
- package/dist/components/organisms/swiper/swiper.d.mts.map +1 -1
- package/dist/components/organisms/swiper/swiper.mjs +1 -1
- package/dist/components/templates/index.d.mts +11 -12
- package/dist/components/templates/layout/sider.d.mts.map +1 -1
- package/dist/components/templates/layout/sider.mjs +4 -6
- package/dist/components/templates/layout/sider.mjs.map +1 -1
- package/dist/core/badge.d.mts +1 -1
- package/dist/core/button.d.mts +2 -2
- package/dist/index.d.mts +81 -74
- package/dist/index.mjs +31 -30
- package/dist/style.css +21 -0
- package/package.json +157 -2
- package/dist/components/atoms/checkbox/index.d.mts +0 -10
- package/dist/components/atoms/checkbox/index.d.mts.map +0 -1
- package/dist/components/atoms/checkbox/index.mjs +0 -9
- package/dist/components/atoms/checkbox/index.mjs.map +0 -1
- package/dist/components/atoms/color-picker.d.mts.map +0 -1
- package/dist/components/atoms/color-picker.mjs.map +0 -1
- package/dist/components/atoms/date-picker.d.mts.map +0 -1
- package/dist/components/atoms/date-picker.mjs.map +0 -1
- package/dist/components/atoms/float-button/index.d.mts +0 -10
- package/dist/components/atoms/float-button/index.d.mts.map +0 -1
- package/dist/components/atoms/float-button/index.mjs +0 -9
- package/dist/components/atoms/float-button/index.mjs.map +0 -1
- package/dist/components/atoms/input/index.d.mts +0 -16
- package/dist/components/atoms/input/index.d.mts.map +0 -1
- package/dist/components/atoms/input/index.mjs +0 -15
- package/dist/components/atoms/input/index.mjs.map +0 -1
- package/dist/components/atoms/popover.d.mts.map +0 -1
- package/dist/components/atoms/popover.mjs.map +0 -1
- package/dist/components/atoms/progress.d.mts.map +0 -1
- package/dist/components/atoms/progress.mjs.map +0 -1
- package/dist/components/atoms/radio/index.d.mts +0 -10
- package/dist/components/atoms/radio/index.d.mts.map +0 -1
- package/dist/components/atoms/radio/index.mjs +0 -9
- package/dist/components/atoms/radio/index.mjs.map +0 -1
- package/dist/components/atoms/rich-text-editor/index.d.mts +0 -3
- package/dist/components/atoms/select.d.mts.map +0 -1
- package/dist/components/atoms/select.mjs.map +0 -1
- package/dist/components/atoms/skeleton/index.d.mts +0 -12
- package/dist/components/atoms/skeleton/index.d.mts.map +0 -1
- package/dist/components/atoms/skeleton/index.mjs +0 -11
- package/dist/components/atoms/skeleton/index.mjs.map +0 -1
- package/dist/components/atoms/slider/index.mjs.map +0 -1
- package/dist/components/atoms/spin.d.mts.map +0 -1
- package/dist/components/atoms/spin.mjs.map +0 -1
- package/dist/components/atoms/switch.d.mts.map +0 -1
- package/dist/components/atoms/switch.mjs.map +0 -1
- package/dist/components/atoms/tooltip.d.mts.map +0 -1
- package/dist/components/atoms/tooltip.mjs.map +0 -1
- package/dist/components/molecules/collapse.d.mts.map +0 -1
- package/dist/components/molecules/collapse.mjs.map +0 -1
- package/dist/components/molecules/dropdown.d.mts.map +0 -1
- package/dist/components/molecules/dropdown.mjs.map +0 -1
- package/dist/components/molecules/marquees/index.d.mts +0 -10
- package/dist/components/molecules/marquees/index.d.mts.map +0 -1
- package/dist/components/molecules/marquees/index.mjs +0 -9
- package/dist/components/molecules/marquees/index.mjs.map +0 -1
- package/dist/components/molecules/splitter/index.d.mts +0 -10
- package/dist/components/molecules/splitter/index.d.mts.map +0 -1
- package/dist/components/molecules/splitter/index.mjs +0 -9
- package/dist/components/molecules/splitter/index.mjs.map +0 -1
- package/dist/components/molecules/tabs.d.mts.map +0 -1
- package/dist/components/molecules/tabs.mjs.map +0 -1
- package/dist/components/molecules/upload.d.mts.map +0 -1
- package/dist/components/molecules/upload.mjs.map +0 -1
- package/dist/components/organisms/drawer.d.mts.map +0 -1
- package/dist/components/organisms/drawer.mjs.map +0 -1
- package/dist/components/organisms/list/index.d.mts.map +0 -1
- package/dist/components/organisms/list/index.mjs +0 -9
- package/dist/components/organisms/list/index.mjs.map +0 -1
- package/dist/components/organisms/modal.d.mts.map +0 -1
- package/dist/components/organisms/modal.mjs.map +0 -1
- package/dist/components/organisms/swiper/index.d.mts +0 -10
- package/dist/components/organisms/swiper/index.d.mts.map +0 -1
- package/dist/components/organisms/swiper/index.mjs +0 -9
- package/dist/components/organisms/swiper/index.mjs.map +0 -1
- package/dist/components/organisms/toast.d.mts.map +0 -1
- package/dist/components/organisms/toast.mjs +0 -126
- package/dist/components/organisms/toast.mjs.map +0 -1
- package/dist/components/templates/container.d.mts.map +0 -1
- package/dist/components/templates/container.mjs.map +0 -1
- package/dist/components/templates/empty.d.mts.map +0 -1
- package/dist/components/templates/empty.mjs.map +0 -1
- package/dist/components/templates/page-header.d.mts.map +0 -1
- package/dist/components/templates/page-header.mjs.map +0 -1
- package/dist/components/templates/result.d.mts.map +0 -1
- package/dist/components/templates/result.mjs.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { cn } from "
|
|
3
|
-
import { DEFAULT_LOCALE, useConfig } from "
|
|
2
|
+
import { cn } from "./utils.mjs";
|
|
3
|
+
import { DEFAULT_LOCALE, useConfig } from "./providers/config/context.mjs";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
import { Loader2 } from "lucide-react";
|
|
6
6
|
//#region src/components/atoms/spin.tsx
|
|
@@ -35,4 +35,4 @@ const Spin = ({ spinning, className, children, ...props }) => {
|
|
|
35
35
|
//#endregion
|
|
36
36
|
export { Spin as default };
|
|
37
37
|
|
|
38
|
-
//# sourceMappingURL=
|
|
38
|
+
//# sourceMappingURL=Spin.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Spin.mjs","names":[],"sources":["../src/components/atoms/spin.tsx"],"sourcesContent":["'use client';\n\nimport { Loader2 } from 'lucide-react';\n\nimport { DEFAULT_LOCALE, useConfig } from '@repo/ui/providers';\nimport { cn } from '@repo/ui/utils';\n\nexport interface Props extends React.ComponentPropsWithoutRef<'div'> {\n spinning?: boolean;\n}\n\nconst Spin = ({ spinning, className, children, ...props }: Props) => {\n const { locale } = useConfig();\n const loadingLabel = locale.loading ?? DEFAULT_LOCALE.loading;\n\n // With no children there's nothing to render at all while idle — unlike\n // the branch below, there's no wrapper for `className`/`props` to land\n // on regardless, so returning null here isn't the same bug.\n if (!children) {\n if (!spinning) {\n return null;\n }\n\n return (\n <div\n role=\"status\"\n aria-label={loadingLabel}\n className={cn('flex h-full items-center justify-center', className)}\n {...props}\n >\n <Loader2 className=\"animate-spin\" />\n </div>\n );\n }\n\n // Idle: return children as-is rather than inserting a wrapper div, same\n // policy Skeleton follows and for the same reason — a wrapper here could\n // produce invalid markup (e.g. inside a <tr>/<li>) or break flex/grid\n // child layout. className/props only ever describe the spinning overlay\n // below, so there's nothing for them to apply to while idle.\n if (!spinning) {\n return children;\n }\n\n return (\n <div className={cn('relative', className)} {...props}>\n <div className=\"pointer-events-none opacity-50\">{children}</div>\n <div\n role=\"status\"\n aria-label={loadingLabel}\n className=\"absolute inset-0 flex items-center justify-center\"\n >\n <Loader2 className=\"animate-spin\" />\n </div>\n </div>\n );\n};\n\nexport default Spin;\n"],"mappings":";;;;;;AAWA,MAAM,QAAQ,EAAE,UAAU,WAAW,UAAU,GAAG,YAAmB;CACnE,MAAM,EAAE,WAAW,UAAU;CAC7B,MAAM,eAAe,OAAO,WAAW,eAAe;CAKtD,IAAI,CAAC,UAAU;EACb,IAAI,CAAC,UACH,OAAO;EAGT,OACE,oBAAC,OAAD;GACE,MAAK;GACL,cAAY;GACZ,WAAW,GAAG,2CAA2C,SAAS;GAClE,GAAI;GAEJ,UAAA,oBAAC,SAAD,EAAS,WAAU,eAAgB,CAAA;EAChC,CAAA;CAET;CAOA,IAAI,CAAC,UACH,OAAO;CAGT,OACE,qBAAC,OAAD;EAAK,WAAW,GAAG,YAAY,SAAS;EAAG,GAAI;EAA/C,UAAA,CACE,oBAAC,OAAD;GAAK,WAAU;GAAkC;EAAc,CAAA,GAC/D,oBAAC,OAAD;GACE,MAAK;GACL,cAAY;GACZ,WAAU;GAEV,UAAA,oBAAC,SAAD,EAAS,WAAU,eAAgB,CAAA;EAChC,CAAA,CACF;;AAET"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import Panel, { Props as Props$1 } from "./components/molecules/splitter/panel.mjs";
|
|
2
|
+
import Splitter$1, { Props } from "./components/molecules/splitter/splitter.mjs";
|
|
3
|
+
//#region src/components/molecules/splitter/index.d.ts
|
|
4
|
+
type SplitterComponent = typeof Splitter$1 & {
|
|
5
|
+
Panel: typeof Panel;
|
|
6
|
+
};
|
|
7
|
+
declare const Splitter: SplitterComponent;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { type Props, type Props$1 as SplitterPanelProps, Splitter as default };
|
|
10
|
+
//# sourceMappingURL=Splitter.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Splitter.d.mts","names":["SplitterImpl"],"sources":["../src/components/molecules/splitter/index.ts"],"mappings":";;;KAGK,2BAA2BA;EAAiB,cAAc;;cAEzD,UAA2B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import Panel from "./components/molecules/splitter/panel.mjs";
|
|
2
|
+
import Splitter$1 from "./components/molecules/splitter/splitter.mjs";
|
|
3
|
+
//#region src/components/molecules/splitter/index.ts
|
|
4
|
+
const Splitter = Splitter$1;
|
|
5
|
+
Splitter.Panel = Panel;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { Splitter as default };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=Splitter.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Splitter.mjs","names":["SplitterImpl"],"sources":["../src/components/molecules/splitter/index.ts"],"sourcesContent":["import Panel, { type Props as SplitterPanelProps } from './panel';\nimport SplitterImpl, { type Props } from './splitter';\n\ntype SplitterComponent = typeof SplitterImpl & { Panel: typeof Panel };\n\nconst Splitter = SplitterImpl as SplitterComponent;\n\nSplitter.Panel = Panel;\n\nexport default Splitter;\nexport type { Props, SplitterPanelProps };\n"],"mappings":";;;AAKA,MAAM,WAAWA;AAEjB,SAAS,QAAQ"}
|
package/dist/Statistic.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "./utils.mjs";
|
|
3
|
-
import Skeleton from "./
|
|
3
|
+
import Skeleton from "./Skeleton.mjs";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
//#region src/components/molecules/statistic.tsx
|
|
6
6
|
const Statistic = ({ title, value, prefix, suffix, precision, locale = "en-US", formatter, loading = false, className, classNames, ...props }) => {
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import Slide from "./components/organisms/swiper/slide.mjs";
|
|
2
|
+
import Swiper$1, { Props, initialOptions } from "./components/organisms/swiper/swiper.mjs";
|
|
3
|
+
//#region src/components/organisms/swiper/index.d.ts
|
|
4
|
+
type SwiperComponent = typeof Swiper$1 & {
|
|
5
|
+
Slide: typeof Slide;
|
|
6
|
+
};
|
|
7
|
+
declare const Swiper: SwiperComponent;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { type Props as SwiperProps, Swiper as default, initialOptions };
|
|
10
|
+
//# sourceMappingURL=Swiper.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Swiper.d.mts","names":["SwiperImpl"],"sources":["../src/components/organisms/swiper/index.ts"],"mappings":";;;KAGK,yBAAyBA;EAAe,cAAc;;cAErD,QAAuB"}
|
package/dist/Swiper.mjs
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import Slide from "./components/organisms/swiper/slide.mjs";
|
|
2
|
+
import Swiper$1, { initialOptions } from "./components/organisms/swiper/swiper.mjs";
|
|
3
|
+
//#region src/components/organisms/swiper/index.ts
|
|
4
|
+
const Swiper = Swiper$1;
|
|
5
|
+
Swiper.Slide = Slide;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { Swiper as default, initialOptions };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=Swiper.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Swiper.mjs","names":["SwiperImpl"],"sources":["../src/components/organisms/swiper/index.ts"],"sourcesContent":["import Slide from './slide';\nimport SwiperImpl, { initialOptions } from './swiper';\n\ntype SwiperComponent = typeof SwiperImpl & { Slide: typeof Slide };\n\nconst Swiper = SwiperImpl as SwiperComponent;\n\nSwiper.Slide = Slide;\n\nexport default Swiper;\nexport { initialOptions };\nexport type { Props as SwiperProps } from './swiper';\n"],"mappings":";;;AAKA,MAAM,SAASA;AAEf,OAAO,QAAQ"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ComponentSize } from "
|
|
1
|
+
import { ComponentSize } from "./providers/config/types.mjs";
|
|
2
2
|
//#region src/components/atoms/switch.d.ts
|
|
3
3
|
export interface Props extends Omit<React.ComponentPropsWithoutRef<'span'>, 'onChange'> {
|
|
4
4
|
classNames?: {
|
|
@@ -23,4 +23,4 @@ export interface Props extends Omit<React.ComponentPropsWithoutRef<'span'>, 'onC
|
|
|
23
23
|
declare const Switch: ({ className, classNames, size, defaultChecked, checked: _checked, onChange: _onChange, checkedChildren, unCheckedChildren, ...props }: Props) => import("react").JSX.Element;
|
|
24
24
|
//#endregion
|
|
25
25
|
export { Switch as default };
|
|
26
|
-
//# sourceMappingURL=
|
|
26
|
+
//# sourceMappingURL=Switch.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Switch.d.mts","names":[],"sources":["../src/components/atoms/switch.tsx"],"mappings":";;iBAiDiB,cAAc,KAC7B,MAAM;EAGN;IACE;IACA;;;;;;;;;EASF,OAAO;EACP;EACA;EACA;EACA,YAAY;EACZ,kBAAkB,MAAM;EACxB,oBAAoB,MAAM;;cAGtB,WAAU,WAAA,YAAA,MAAA,gBAAA,SAAA,UAAA,UAAA,WAAA,iBAAA,sBAAA,SAUb,0BAAK,IAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { cn } from "
|
|
3
|
-
import { useConfig } from "
|
|
4
|
-
import { switch_exports } from "
|
|
2
|
+
import { cn } from "./utils.mjs";
|
|
3
|
+
import { useConfig } from "./providers/config/context.mjs";
|
|
4
|
+
import { switch_exports } from "./core/switch.mjs";
|
|
5
5
|
import { useControllableState } from "@jbpark/use-hooks";
|
|
6
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
7
|
//#region src/components/atoms/switch.tsx
|
|
@@ -70,4 +70,4 @@ const Switch = ({ className, classNames, size, defaultChecked, checked: _checked
|
|
|
70
70
|
//#endregion
|
|
71
71
|
export { Switch as default };
|
|
72
72
|
|
|
73
|
-
//# sourceMappingURL=
|
|
73
|
+
//# sourceMappingURL=Switch.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Switch.mjs","names":["switchComponent"],"sources":["../src/components/atoms/switch.tsx"],"sourcesContent":["'use client';\n\nimport { useControllableState } from '@jbpark/use-hooks';\n\nimport { type ComponentSize, useConfig } from '@repo/ui/providers';\nimport { cn } from '@repo/ui/utils';\n\nimport { switchComponent } from '../../core';\n\nconst { Switch: Core } = switchComponent;\n\n// Keyed by the shared `ComponentSize` vocabulary (#350). The `calc` offset on\n// each `handleChecked` is `handle width + 2px` (the `left-0.5` inset), so the\n// handle lands flush at both ends — it must be recomputed per row, not copied.\nconst sizeConfig = {\n small: {\n core: 'sm' as const,\n track: 'h-6! w-10!',\n handle: 'size-5!',\n handleChecked:\n 'data-unchecked:left-0.5 data-checked:left-[calc(100%-22px)]',\n fontSize: 'text-[10px]',\n marginChecked: 'mr-6 ml-1.5',\n marginUnchecked: 'mr-1.5 ml-6',\n },\n middle: {\n core: 'default' as const,\n track: 'h-8! w-12!',\n handle: 'size-6!',\n handleChecked:\n 'data-unchecked:left-0.5 data-checked:left-[calc(100%-26px)]',\n fontSize: 'text-xs',\n marginChecked: 'mr-7 ml-2',\n marginUnchecked: 'mr-2 ml-7',\n },\n large: {\n core: 'default' as const,\n track: 'h-10! w-16!',\n handle: 'size-8!',\n handleChecked:\n 'data-unchecked:left-0.5 data-checked:left-[calc(100%-34px)]',\n fontSize: 'text-sm',\n marginChecked: 'mr-9 ml-2.5',\n marginUnchecked: 'mr-2.5 ml-9',\n },\n} satisfies Record<ComponentSize, unknown>;\n\n// Base UI's Switch renders a `<span>` (plus a hidden `<input>`), not the\n// `<button>` Radix used — so the forwarded host props are span-based now.\nexport interface Props extends Omit<\n React.ComponentPropsWithoutRef<'span'>,\n 'onChange'\n> {\n classNames?: {\n track?: string;\n handle?: string;\n };\n /**\n * Density on the shared `ComponentSize` scale (`small` | `middle` | `large`),\n * falling back to the nearest `Config`'s `componentSize`, then `middle`.\n *\n * `medium` is accepted as a deprecated alias of `middle` — kept so existing\n * `size=\"medium\"` calls keep working; removed in the next major.\n */\n size?: ComponentSize | 'medium';\n defaultChecked?: boolean;\n checked?: boolean;\n disabled?: boolean;\n onChange?: (checked: boolean) => void;\n checkedChildren?: React.ReactNode;\n unCheckedChildren?: React.ReactNode;\n}\n\nconst Switch = ({\n className,\n classNames,\n size,\n defaultChecked,\n checked: _checked,\n onChange: _onChange = () => {},\n checkedChildren,\n unCheckedChildren,\n ...props\n}: Props) => {\n const [checked, onChange] = useControllableState<boolean>({\n value: _checked,\n defaultValue: defaultChecked ?? false,\n onChange: _onChange,\n });\n\n const { componentSize } = useConfig();\n // `medium` is the deprecated spelling of `middle`; an explicit `size` wins,\n // then the Config default, then `middle`.\n const resolvedSize =\n (size === 'medium' ? 'middle' : size) ?? componentSize ?? 'middle';\n\n const hasChildren = !!(checkedChildren || unCheckedChildren);\n const config = sizeConfig[resolvedSize];\n\n return (\n <Core\n checked={checked}\n size={config.core}\n className={cn(\n 'relative',\n config.track,\n hasChildren && 'w-auto! overflow-hidden',\n className,\n classNames?.track,\n //\n )}\n handleClassName={cn(\n config.handle,\n '!absolute top-1/2 !-translate-y-1/2 !translate-x-0',\n 'transition-[left] duration-200 will-change-[left]',\n config.handleChecked,\n classNames?.handle,\n //\n )}\n onCheckedChange={checked => {\n onChange(checked);\n }}\n {...props}\n >\n {hasChildren && (\n <span\n className={cn(\n `grid leading-none transition-[margin] duration-200\n will-change-[margin]`,\n config.fontSize,\n checked\n ? [config.marginChecked, 'text-primary-foreground']\n : [config.marginUnchecked, 'text-foreground'],\n //\n )}\n >\n <span\n className={cn(\n 'col-start-1 row-start-1 transition-opacity duration-200',\n checked ? 'opacity-100' : 'opacity-0',\n )}\n >\n {checkedChildren}\n </span>\n <span\n className={cn(\n 'col-start-1 row-start-1 transition-opacity duration-200',\n checked ? 'opacity-0' : 'opacity-100',\n )}\n >\n {unCheckedChildren}\n </span>\n </span>\n )}\n </Core>\n );\n};\n\nexport default Switch;\n"],"mappings":";;;;;;;AASA,MAAM,EAAE,QAAQ,SAASA;AAKzB,MAAM,aAAa;CACjB,OAAO;EACL,MAAM;EACN,OAAO;EACP,QAAQ;EACR,eACE;EACF,UAAU;EACV,eAAe;EACf,iBAAiB;CACnB;CACA,QAAQ;EACN,MAAM;EACN,OAAO;EACP,QAAQ;EACR,eACE;EACF,UAAU;EACV,eAAe;EACf,iBAAiB;CACnB;CACA,OAAO;EACL,MAAM;EACN,OAAO;EACP,QAAQ;EACR,eACE;EACF,UAAU;EACV,eAAe;EACf,iBAAiB;CACnB;AACF;AA4BA,MAAM,UAAU,EACd,WACA,YACA,MACA,gBACA,SAAS,UACT,UAAU,kBAAkB,CAAC,GAC7B,iBACA,mBACA,GAAG,YACQ;CACX,MAAM,CAAC,SAAS,YAAY,qBAA8B;EACxD,OAAO;EACP,cAAc,kBAAkB;EAChC,UAAU;CACZ,CAAC;CAED,MAAM,EAAE,kBAAkB,UAAU;CAGpC,MAAM,gBACH,SAAS,WAAW,WAAW,SAAS,iBAAiB;CAE5D,MAAM,cAAc,CAAC,EAAE,mBAAmB;CAC1C,MAAM,SAAS,WAAW;CAE1B,OACE,oBAAC,MAAD;EACW;EACT,MAAM,OAAO;EACb,WAAW,GACT,YACA,OAAO,OACP,eAAe,2BACf,WACA,YAAY,KAEd;EACA,iBAAiB,GACf,OAAO,QACP,sDACA,qDACA,OAAO,eACP,YAAY,MAEd;EACA,kBAAiB,YAAW;GAC1B,SAAS,OAAO;EAClB;EACA,GAAI;EAEH,UAAA,eACC,qBAAC,QAAD;GACE,WAAW,GACT;mCAEA,OAAO,UACP,UACI,CAAC,OAAO,eAAe,yBAAyB,IAChD,CAAC,OAAO,iBAAiB,iBAAiB,CAEhD;GATF,UAAA,CAWE,oBAAC,QAAD;IACE,WAAW,GACT,2DACA,UAAU,gBAAgB,WAC5B;IAEC,UAAA;GACG,CAAA,GACN,oBAAC,QAAD;IACE,WAAW,GACT,2DACA,UAAU,cAAc,aAC1B;IAEC,UAAA;GACG,CAAA,CACF;;CAEJ,CAAA;AAEV"}
|
package/dist/Table.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "./utils.mjs";
|
|
3
3
|
import { useConfig } from "./providers/config/context.mjs";
|
|
4
|
-
import Skeleton from "./
|
|
4
|
+
import Skeleton from "./Skeleton.mjs";
|
|
5
5
|
import Pagination from "./Pagination.mjs";
|
|
6
|
-
import Empty from "./
|
|
6
|
+
import Empty from "./Empty.mjs";
|
|
7
7
|
import { useState } from "react";
|
|
8
8
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
9
9
|
//#region src/components/organisms/table.tsx
|
package/dist/Table.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.mjs","names":[],"sources":["../src/components/organisms/table.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\n\nimport { useConfig } from '@repo/ui/providers';\nimport { cn } from '@repo/ui/utils';\n\nimport Skeleton from '../atoms/skeleton';\nimport Pagination, {\n type Props as PaginationProps,\n} from '../molecules/pagination';\nimport Empty from '../templates/empty';\n\nexport type PaginationOptions = Omit<PaginationProps, 'total'> &\n ({ mode?: 'client'; total?: never } | { mode: 'server'; total: number });\n\nexport interface Column<T> {\n key: React.Key;\n title: React.ReactNode;\n /** Field displayed when render is omitted. */\n dataIndex?: keyof T;\n render?: (record: T, index: number) => React.ReactNode;\n align?: 'left' | 'center' | 'right';\n width?: string | number;\n className?: string;\n headerClassName?: string;\n}\n\nexport interface Props<T> extends Omit<\n React.ComponentPropsWithoutRef<'table'>,\n 'children'\n> {\n columns: Column<T>[];\n data?: T[];\n /** Use a stable key when rows may be reordered or paged. */\n rowKey?: (record: T, index: number) => React.Key;\n caption?: React.ReactNode;\n loading?: boolean;\n empty?: React.ReactNode;\n size?: 'small' | 'middle' | 'large';\n bordered?: boolean;\n striped?: boolean;\n hoverable?: boolean;\n /** true paginates data locally; server mode expects current-page data. */\n pagination?: boolean | PaginationOptions;\n classNames?: {\n container?: string;\n header?: string;\n body?: string;\n row?: string;\n cell?: string;\n empty?: string;\n pagination?: string;\n };\n}\n\nconst clampPage = (page: number, pageCount: number) =>\n Math.min(\n Math.max(1, Number.isFinite(page) ? Math.floor(page) : 1),\n Math.max(1, pageCount),\n );\n\nconst normalizePageSize = (value: number) =>\n Number.isFinite(value) && value >= 1 ? Math.floor(value) : 10;\n\nconst Table = <T,>({\n columns,\n data = [],\n rowKey,\n loading = false,\n empty,\n size,\n bordered = false,\n striped = false,\n hoverable = true,\n pagination = false,\n caption,\n className,\n classNames,\n ...props\n}: Props<T>) => {\n const { componentSize } = useConfig();\n const paginationOptions: PaginationOptions =\n typeof pagination === 'object' ? pagination : {};\n const {\n mode = 'client',\n total: serverTotal,\n page: controlledPage,\n defaultPage = 1,\n pageSize: controlledPageSize,\n defaultPageSize = 10,\n onChange,\n onPageSizeChange,\n ...paginationProps\n } = paginationOptions;\n const [internal, setInternal] = useState(() => ({\n page: defaultPage,\n pageSize: normalizePageSize(defaultPageSize),\n pageCount: 0,\n }));\n const pageSize = normalizePageSize(controlledPageSize ?? internal.pageSize);\n const total = mode === 'server' ? (serverTotal ?? 0) : data.length;\n const pageCount = Math.ceil(total / pageSize);\n\n if (\n pagination &&\n controlledPage === undefined &&\n internal.pageCount !== pageCount\n ) {\n setInternal(current => ({\n ...current,\n page: clampPage(current.page, pageCount),\n pageCount,\n }));\n }\n\n const page = clampPage(controlledPage ?? internal.page, pageCount);\n const visibleData =\n pagination && mode === 'client'\n ? data.slice((page - 1) * pageSize, page * pageSize)\n : data;\n const resolvedSize = size ?? componentSize ?? 'middle';\n const cellPadding = {\n small: 'px-3 py-2',\n middle: 'px-4 py-3',\n large: 'px-5 py-4',\n }[resolvedSize];\n\n const handlePageChange = (next: number) => {\n if (controlledPage === undefined) {\n setInternal(current => ({ ...current, page: next }));\n }\n\n onChange?.(next);\n };\n\n const handlePageSizeChange = (next: number) => {\n if (controlledPageSize === undefined || controlledPage === undefined) {\n setInternal(current => ({\n ...current,\n page: controlledPage === undefined ? 1 : current.page,\n pageSize: controlledPageSize === undefined ? next : current.pageSize,\n pageCount: Math.ceil(total / next),\n }));\n }\n\n onPageSizeChange?.(next);\n };\n\n return (\n <>\n <div\n data-slot=\"table-container\"\n className={cn(\n 'w-full overflow-x-auto',\n bordered && 'rounded-md border',\n classNames?.container,\n //\n )}\n >\n <table\n {...props}\n data-slot=\"table\"\n aria-busy={loading || undefined}\n className={cn(\n 'w-full min-w-max border-collapse text-sm',\n className,\n //\n )}\n >\n {caption && <caption className=\"mb-2 text-start\">{caption}</caption>}\n <thead\n data-slot=\"table-header\"\n className={cn(\n 'bg-muted/50 border-b',\n classNames?.header,\n //\n )}\n >\n <tr>\n {columns.map(column => (\n <th\n key={column.key}\n scope=\"col\"\n style={{ width: column.width }}\n className={cn(\n 'text-foreground font-medium',\n cellPadding,\n column.align === 'center' && 'text-center',\n column.align === 'right' && 'text-right',\n column.align === undefined && 'text-start',\n bordered && 'border-e last:border-e-0',\n classNames?.cell,\n column.headerClassName,\n //\n )}\n >\n {column.title}\n </th>\n ))}\n </tr>\n </thead>\n <tbody data-slot=\"table-body\" className={classNames?.body}>\n {loading ? (\n <tr>\n <td\n colSpan={Math.max(columns.length, 1)}\n className={cellPadding}\n >\n <Skeleton count={3} className=\"py-2\" />\n </td>\n </tr>\n ) : visibleData.length === 0 ? (\n <tr>\n <td\n colSpan={Math.max(columns.length, 1)}\n className={cn(cellPadding, classNames?.empty)}\n >\n {empty ?? <Empty />}\n </td>\n </tr>\n ) : (\n visibleData.map((record, index) => (\n <tr\n key={rowKey?.(record, index) ?? index}\n data-slot=\"table-row\"\n className={cn(\n 'border-b last:border-b-0',\n striped && 'even:bg-muted/30',\n hoverable && 'hover:bg-muted/50',\n classNames?.row,\n //\n )}\n >\n {columns.map(column => {\n const value =\n column.dataIndex === undefined\n ? undefined\n : record[column.dataIndex];\n\n return (\n <td\n key={column.key}\n data-slot=\"table-cell\"\n className={cn(\n cellPadding,\n column.align === 'center' && 'text-center',\n column.align === 'right' && 'text-right',\n bordered && 'border-e last:border-e-0',\n classNames?.cell,\n column.className,\n //\n )}\n >\n {column.render\n ? column.render(record, index)\n : value == null\n ? null\n : String(value)}\n </td>\n );\n })}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n {pagination && (\n <div\n data-slot=\"table-pagination\"\n className={cn(\n 'mt-4 flex justify-end',\n classNames?.pagination,\n //\n )}\n >\n <Pagination\n {...paginationProps}\n total={total}\n page={page}\n pageSize={pageSize}\n onChange={handlePageChange}\n onPageSizeChange={handlePageSizeChange}\n />\n </div>\n )}\n </>\n );\n};\n\nexport default Table;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Table.mjs","names":[],"sources":["../src/components/organisms/table.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\n\nimport { useConfig } from '@repo/ui/providers';\nimport { cn } from '@repo/ui/utils';\n\nimport Skeleton from '../atoms/skeleton';\nimport Empty from '../molecules/empty';\nimport Pagination, {\n type Props as PaginationProps,\n} from '../molecules/pagination';\n\nexport type PaginationOptions = Omit<PaginationProps, 'total'> &\n ({ mode?: 'client'; total?: never } | { mode: 'server'; total: number });\n\nexport interface Column<T> {\n key: React.Key;\n title: React.ReactNode;\n /** Field displayed when render is omitted. */\n dataIndex?: keyof T;\n render?: (record: T, index: number) => React.ReactNode;\n align?: 'left' | 'center' | 'right';\n width?: string | number;\n className?: string;\n headerClassName?: string;\n}\n\nexport interface Props<T> extends Omit<\n React.ComponentPropsWithoutRef<'table'>,\n 'children'\n> {\n columns: Column<T>[];\n data?: T[];\n /** Use a stable key when rows may be reordered or paged. */\n rowKey?: (record: T, index: number) => React.Key;\n caption?: React.ReactNode;\n loading?: boolean;\n empty?: React.ReactNode;\n size?: 'small' | 'middle' | 'large';\n bordered?: boolean;\n striped?: boolean;\n hoverable?: boolean;\n /** true paginates data locally; server mode expects current-page data. */\n pagination?: boolean | PaginationOptions;\n classNames?: {\n container?: string;\n header?: string;\n body?: string;\n row?: string;\n cell?: string;\n empty?: string;\n pagination?: string;\n };\n}\n\nconst clampPage = (page: number, pageCount: number) =>\n Math.min(\n Math.max(1, Number.isFinite(page) ? Math.floor(page) : 1),\n Math.max(1, pageCount),\n );\n\nconst normalizePageSize = (value: number) =>\n Number.isFinite(value) && value >= 1 ? Math.floor(value) : 10;\n\nconst Table = <T,>({\n columns,\n data = [],\n rowKey,\n loading = false,\n empty,\n size,\n bordered = false,\n striped = false,\n hoverable = true,\n pagination = false,\n caption,\n className,\n classNames,\n ...props\n}: Props<T>) => {\n const { componentSize } = useConfig();\n const paginationOptions: PaginationOptions =\n typeof pagination === 'object' ? pagination : {};\n const {\n mode = 'client',\n total: serverTotal,\n page: controlledPage,\n defaultPage = 1,\n pageSize: controlledPageSize,\n defaultPageSize = 10,\n onChange,\n onPageSizeChange,\n ...paginationProps\n } = paginationOptions;\n const [internal, setInternal] = useState(() => ({\n page: defaultPage,\n pageSize: normalizePageSize(defaultPageSize),\n pageCount: 0,\n }));\n const pageSize = normalizePageSize(controlledPageSize ?? internal.pageSize);\n const total = mode === 'server' ? (serverTotal ?? 0) : data.length;\n const pageCount = Math.ceil(total / pageSize);\n\n if (\n pagination &&\n controlledPage === undefined &&\n internal.pageCount !== pageCount\n ) {\n setInternal(current => ({\n ...current,\n page: clampPage(current.page, pageCount),\n pageCount,\n }));\n }\n\n const page = clampPage(controlledPage ?? internal.page, pageCount);\n const visibleData =\n pagination && mode === 'client'\n ? data.slice((page - 1) * pageSize, page * pageSize)\n : data;\n const resolvedSize = size ?? componentSize ?? 'middle';\n const cellPadding = {\n small: 'px-3 py-2',\n middle: 'px-4 py-3',\n large: 'px-5 py-4',\n }[resolvedSize];\n\n const handlePageChange = (next: number) => {\n if (controlledPage === undefined) {\n setInternal(current => ({ ...current, page: next }));\n }\n\n onChange?.(next);\n };\n\n const handlePageSizeChange = (next: number) => {\n if (controlledPageSize === undefined || controlledPage === undefined) {\n setInternal(current => ({\n ...current,\n page: controlledPage === undefined ? 1 : current.page,\n pageSize: controlledPageSize === undefined ? next : current.pageSize,\n pageCount: Math.ceil(total / next),\n }));\n }\n\n onPageSizeChange?.(next);\n };\n\n return (\n <>\n <div\n data-slot=\"table-container\"\n className={cn(\n 'w-full overflow-x-auto',\n bordered && 'rounded-md border',\n classNames?.container,\n //\n )}\n >\n <table\n {...props}\n data-slot=\"table\"\n aria-busy={loading || undefined}\n className={cn(\n 'w-full min-w-max border-collapse text-sm',\n className,\n //\n )}\n >\n {caption && <caption className=\"mb-2 text-start\">{caption}</caption>}\n <thead\n data-slot=\"table-header\"\n className={cn(\n 'bg-muted/50 border-b',\n classNames?.header,\n //\n )}\n >\n <tr>\n {columns.map(column => (\n <th\n key={column.key}\n scope=\"col\"\n style={{ width: column.width }}\n className={cn(\n 'text-foreground font-medium',\n cellPadding,\n column.align === 'center' && 'text-center',\n column.align === 'right' && 'text-right',\n column.align === undefined && 'text-start',\n bordered && 'border-e last:border-e-0',\n classNames?.cell,\n column.headerClassName,\n //\n )}\n >\n {column.title}\n </th>\n ))}\n </tr>\n </thead>\n <tbody data-slot=\"table-body\" className={classNames?.body}>\n {loading ? (\n <tr>\n <td\n colSpan={Math.max(columns.length, 1)}\n className={cellPadding}\n >\n <Skeleton count={3} className=\"py-2\" />\n </td>\n </tr>\n ) : visibleData.length === 0 ? (\n <tr>\n <td\n colSpan={Math.max(columns.length, 1)}\n className={cn(cellPadding, classNames?.empty)}\n >\n {empty ?? <Empty />}\n </td>\n </tr>\n ) : (\n visibleData.map((record, index) => (\n <tr\n key={rowKey?.(record, index) ?? index}\n data-slot=\"table-row\"\n className={cn(\n 'border-b last:border-b-0',\n striped && 'even:bg-muted/30',\n hoverable && 'hover:bg-muted/50',\n classNames?.row,\n //\n )}\n >\n {columns.map(column => {\n const value =\n column.dataIndex === undefined\n ? undefined\n : record[column.dataIndex];\n\n return (\n <td\n key={column.key}\n data-slot=\"table-cell\"\n className={cn(\n cellPadding,\n column.align === 'center' && 'text-center',\n column.align === 'right' && 'text-right',\n bordered && 'border-e last:border-e-0',\n classNames?.cell,\n column.className,\n //\n )}\n >\n {column.render\n ? column.render(record, index)\n : value == null\n ? null\n : String(value)}\n </td>\n );\n })}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n {pagination && (\n <div\n data-slot=\"table-pagination\"\n className={cn(\n 'mt-4 flex justify-end',\n classNames?.pagination,\n //\n )}\n >\n <Pagination\n {...paginationProps}\n total={total}\n page={page}\n pageSize={pageSize}\n onChange={handlePageChange}\n onPageSizeChange={handlePageSizeChange}\n />\n </div>\n )}\n </>\n );\n};\n\nexport default Table;\n"],"mappings":";;;;;;;;;AAwDA,MAAM,aAAa,MAAc,cAC/B,KAAK,IACH,KAAK,IAAI,GAAG,OAAO,SAAS,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,GACxD,KAAK,IAAI,GAAG,SAAS,CACvB;AAEF,MAAM,qBAAqB,UACzB,OAAO,SAAS,KAAK,KAAK,SAAS,IAAI,KAAK,MAAM,KAAK,IAAI;AAE7D,MAAM,SAAa,EACjB,SACA,OAAO,CAAC,GACR,QACA,UAAU,OACV,OACA,MACA,WAAW,OACX,UAAU,OACV,YAAY,MACZ,aAAa,OACb,SACA,WACA,YACA,GAAG,YACW;CACd,MAAM,EAAE,kBAAkB,UAAU;CAGpC,MAAM,EACJ,OAAO,UACP,OAAO,aACP,MAAM,gBACN,cAAc,GACd,UAAU,oBACV,kBAAkB,IAClB,UACA,kBACA,GAAG,oBAVH,OAAO,eAAe,WAAW,aAAa,CAAC;CAYjD,MAAM,CAAC,UAAU,eAAe,gBAAgB;EAC9C,MAAM;EACN,UAAU,kBAAkB,eAAe;EAC3C,WAAW;CACb,EAAE;CACF,MAAM,WAAW,kBAAkB,sBAAsB,SAAS,QAAQ;CAC1E,MAAM,QAAQ,SAAS,WAAY,eAAe,IAAK,KAAK;CAC5D,MAAM,YAAY,KAAK,KAAK,QAAQ,QAAQ;CAE5C,IACE,cACA,mBAAmB,KAAA,KACnB,SAAS,cAAc,WAEvB,aAAY,aAAY;EACtB,GAAG;EACH,MAAM,UAAU,QAAQ,MAAM,SAAS;EACvC;CACF,EAAE;CAGJ,MAAM,OAAO,UAAU,kBAAkB,SAAS,MAAM,SAAS;CACjE,MAAM,cACJ,cAAc,SAAS,WACnB,KAAK,OAAO,OAAO,KAAK,UAAU,OAAO,QAAQ,IACjD;CAEN,MAAM,cAAc;EAClB,OAAO;EACP,QAAQ;EACR,OAAO;CACT,EALqB,QAAQ,iBAAiB;CAO9C,MAAM,oBAAoB,SAAiB;EACzC,IAAI,mBAAmB,KAAA,GACrB,aAAY,aAAY;GAAE,GAAG;GAAS,MAAM;EAAK,EAAE;EAGrD,WAAW,IAAI;CACjB;CAEA,MAAM,wBAAwB,SAAiB;EAC7C,IAAI,uBAAuB,KAAA,KAAa,mBAAmB,KAAA,GACzD,aAAY,aAAY;GACtB,GAAG;GACH,MAAM,mBAAmB,KAAA,IAAY,IAAI,QAAQ;GACjD,UAAU,uBAAuB,KAAA,IAAY,OAAO,QAAQ;GAC5D,WAAW,KAAK,KAAK,QAAQ,IAAI;EACnC,EAAE;EAGJ,mBAAmB,IAAI;CACzB;CAEA,OACE,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GACT,0BACA,YAAY,qBACZ,YAAY,SAEd;EAEA,UAAA,qBAAC,SAAD;GACE,GAAI;GACJ,aAAU;GACV,aAAW,WAAW,KAAA;GACtB,WAAW,GACT,4CACA,SAEF;GARF,UAAA;IAUG,WAAW,oBAAC,WAAD;KAAS,WAAU;KAAmB,UAAA;IAAiB,CAAA;IACnE,oBAAC,SAAD;KACE,aAAU;KACV,WAAW,GACT,wBACA,YAAY,MAEd;KAEA,UAAA,oBAAC,MAAD,EAAA,UACG,QAAQ,KAAI,WACX,oBAAC,MAAD;MAEE,OAAM;MACN,OAAO,EAAE,OAAO,OAAO,MAAM;MAC7B,WAAW,GACT,+BACA,aACA,OAAO,UAAU,YAAY,eAC7B,OAAO,UAAU,WAAW,cAC5B,OAAO,UAAU,KAAA,KAAa,cAC9B,YAAY,4BACZ,YAAY,MACZ,OAAO,eAET;MAEC,UAAA,OAAO;KACN,GAhBG,OAAO,GAgBV,CACL,EACC,CAAA;IACC,CAAA;IACP,oBAAC,SAAD;KAAO,aAAU;KAAa,WAAW,YAAY;KAClD,UAAA,UACC,oBAAC,MAAD,EAAA,UACE,oBAAC,MAAD;MACE,SAAS,KAAK,IAAI,QAAQ,QAAQ,CAAC;MACnC,WAAW;MAEX,UAAA,oBAAC,UAAD;OAAU,OAAO;OAAG,WAAU;MAAQ,CAAA;KACpC,CAAA,EACF,CAAA,IACF,YAAY,WAAW,IACzB,oBAAC,MAAD,EAAA,UACE,oBAAC,MAAD;MACE,SAAS,KAAK,IAAI,QAAQ,QAAQ,CAAC;MACnC,WAAW,GAAG,aAAa,YAAY,KAAK;MAE3C,UAAA,SAAS,oBAAC,OAAD,CAAQ,CAAA;KAChB,CAAA,EACF,CAAA,IAEJ,YAAY,KAAK,QAAQ,UACvB,oBAAC,MAAD;MAEE,aAAU;MACV,WAAW,GACT,4BACA,WAAW,oBACX,aAAa,qBACb,YAAY,GAEd;MAEC,UAAA,QAAQ,KAAI,WAAU;OACrB,MAAM,QACJ,OAAO,cAAc,KAAA,IACjB,KAAA,IACA,OAAO,OAAO;OAEpB,OACE,oBAAC,MAAD;QAEE,aAAU;QACV,WAAW,GACT,aACA,OAAO,UAAU,YAAY,eAC7B,OAAO,UAAU,WAAW,cAC5B,YAAY,4BACZ,YAAY,MACZ,OAAO,SAET;QAEC,UAAA,OAAO,SACJ,OAAO,OAAO,QAAQ,KAAK,IAC3B,SAAS,OACP,OACA,OAAO,KAAK;OAChB,GAjBG,OAAO,GAiBV;MAER,CAAC;KACC,GAtCG,SAAS,QAAQ,KAAK,KAAK,KAsC9B,CACL;IAEE,CAAA;GACF;;CACJ,CAAA,GACJ,cACC,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GACT,yBACA,YAAY,UAEd;EAEA,UAAA,oBAAC,YAAD;GACE,GAAI;GACG;GACD;GACI;GACV,UAAU;GACV,kBAAkB;EACnB,CAAA;CACE,CAAA,CAEP,EAAA,CAAA;AAEN"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Tabs as Tabs$1, tabs_d_exports } from "
|
|
2
|
-
import "
|
|
1
|
+
import { Tabs as Tabs$1, tabs_d_exports } from "./core/tabs.mjs";
|
|
2
|
+
import "./core/index.mjs";
|
|
3
3
|
import { ReactNode } from "react";
|
|
4
4
|
//#region src/components/molecules/tabs.d.ts
|
|
5
5
|
declare const Core: typeof Tabs$1;
|
|
@@ -38,4 +38,4 @@ export interface Props extends Omit<React.ComponentProps<typeof Core>, 'children
|
|
|
38
38
|
declare const Tabs: ({ items, listLabel, keepMounted, activateOnFocus, scrollable, fitted, extra, classNames, defaultValue, onChange, onValueChange, orientation, ...props }: Props) => import("react").JSX.Element;
|
|
39
39
|
//#endregion
|
|
40
40
|
export { Tabs as default };
|
|
41
|
-
//# sourceMappingURL=
|
|
41
|
+
//# sourceMappingURL=Tabs.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tabs.d.mts","names":["tabs","tabs.Tabs"],"sources":["../src/components/molecules/tabs.tsx"],"mappings":";;;;cAQc,aAAIC;iBAED;EACf;EACA,OAAO;EACP,UAAU;EACV;;EAEA,OAAO;;iBAGQ,cAAc,KAC7B,MAAM,sBAAsB;EAG5B,OAAO;;EAEP,YAAY;;EAEZ,gBAAgB,MAAM,sBAAsB;EAC5C;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA,QAAQ;EACR;IACE;IACA;IACA;IACA;;;cAIE,SAAQ,OAAA,WAAA,aAAA,iBAAA,YAAA,QAAA,OAAA,YAAA,cAAA,UAAA,eAAA,gBAAA,SAcX,0BAAK,IAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { cn } from "
|
|
3
|
-
import { tabs_exports } from "
|
|
2
|
+
import { cn } from "./utils.mjs";
|
|
3
|
+
import { tabs_exports } from "./core/tabs.mjs";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
//#region src/components/molecules/tabs.tsx
|
|
6
6
|
const { Tabs: Core, TabsList, TabsTab, TabsPanel } = tabs_exports;
|
|
@@ -52,4 +52,4 @@ const Tabs = ({ items, listLabel = "Tabs", keepMounted = false, activateOnFocus
|
|
|
52
52
|
//#endregion
|
|
53
53
|
export { Tabs as default };
|
|
54
54
|
|
|
55
|
-
//# sourceMappingURL=
|
|
55
|
+
//# sourceMappingURL=Tabs.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tabs.mjs","names":["tabs"],"sources":["../src/components/molecules/tabs.tsx"],"sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\n\nimport { cn } from '@repo/ui/utils';\n\nimport { tabs } from '../../core';\n\nconst { Tabs: Core, TabsList, TabsTab, TabsPanel } = tabs;\n\nexport interface Item {\n key: string;\n label: ReactNode;\n children: ReactNode;\n disabled?: boolean;\n /** Decorative icon rendered before the label with consistent spacing. */\n icon?: ReactNode;\n}\n\nexport interface Props extends Omit<\n React.ComponentProps<typeof Core>,\n 'children' | 'onChange'\n> {\n items: Item[];\n /** Called when the selected tab changes. */\n onChange?: (value: string | number | null) => void;\n /** @deprecated Use `onChange` for the selected value. */\n onValueChange?: React.ComponentProps<typeof Core>['onValueChange'];\n listLabel?: string;\n /** Preserve inactive panel DOM and local state. */\n keepMounted?: boolean;\n /** Select a tab when arrow-key focus moves to it. */\n activateOnFocus?: boolean;\n /** Scroll the tab list when its items exceed the available space. */\n scrollable?: boolean;\n /** Give tabs equal width in horizontal mode; ignored when scrollable. */\n fitted?: boolean;\n /** Content shown after the tab list, outside the tablist role. */\n extra?: ReactNode;\n classNames?: {\n list?: string;\n tab?: string;\n panel?: string;\n extra?: string;\n };\n}\n\nconst Tabs = ({\n items,\n listLabel = 'Tabs',\n keepMounted = false,\n activateOnFocus = false,\n scrollable = false,\n fitted = false,\n extra,\n classNames,\n defaultValue,\n onChange,\n onValueChange,\n orientation = 'horizontal',\n ...props\n}: Props) => {\n const initialValue =\n defaultValue === undefined\n ? items.find(item => !item.disabled)?.key\n : defaultValue;\n\n return (\n <Core\n defaultValue={props.value === undefined ? initialValue : undefined}\n orientation={orientation}\n onValueChange={(value, eventDetails) => {\n onChange?.(value);\n onValueChange?.(value, eventDetails);\n }}\n {...props}\n >\n <div\n data-slot=\"tabs-bar\"\n className={cn(\n 'flex min-w-0 items-stretch',\n orientation === 'vertical' && 'min-h-0 shrink-0 flex-col',\n //\n )}\n >\n <TabsList\n aria-label={listLabel}\n activateOnFocus={activateOnFocus}\n className={cn(\n 'min-w-0 flex-1',\n scrollable &&\n (orientation === 'vertical'\n ? 'min-h-0 overflow-y-auto'\n : `[scrollbar-width:none] overflow-x-auto overflow-y-hidden\n [&::-webkit-scrollbar]:hidden`),\n classNames?.list,\n //\n )}\n >\n {items.map(item => (\n <TabsTab\n key={item.key}\n value={item.key}\n disabled={item.disabled}\n className={cn(\n fitted &&\n !scrollable &&\n orientation === 'horizontal' &&\n 'flex-1',\n scrollable && 'shrink-0',\n classNames?.tab,\n //\n )}\n >\n {item.icon != null && (\n <span\n data-slot=\"tabs-icon\"\n aria-hidden=\"true\"\n className=\"inline-flex shrink-0 items-center\"\n >\n {item.icon}\n </span>\n )}\n {item.label}\n </TabsTab>\n ))}\n </TabsList>\n {extra != null && (\n <div\n data-slot=\"tabs-extra\"\n className={cn(\n `border-border flex shrink-0 items-center border-b px-3\n data-[orientation=vertical]:border-r\n data-[orientation=vertical]:border-b-0`,\n classNames?.extra,\n //\n )}\n data-orientation={orientation}\n >\n {extra}\n </div>\n )}\n </div>\n {items.map(item => (\n <TabsPanel\n key={item.key}\n value={item.key}\n keepMounted={keepMounted}\n className={classNames?.panel}\n >\n {item.children}\n </TabsPanel>\n ))}\n </Core>\n );\n};\n\nexport default Tabs;\n"],"mappings":";;;;;AAQA,MAAM,EAAE,MAAM,MAAM,UAAU,SAAS,cAAcA;AAuCrD,MAAM,QAAQ,EACZ,OACA,YAAY,QACZ,cAAc,OACd,kBAAkB,OAClB,aAAa,OACb,SAAS,OACT,OACA,YACA,cACA,UACA,eACA,cAAc,cACd,GAAG,YACQ;CACX,MAAM,eACJ,iBAAiB,KAAA,IACb,MAAM,MAAK,SAAQ,CAAC,KAAK,QAAQ,CAAC,EAAE,MACpC;CAEN,OACE,qBAAC,MAAD;EACE,cAAc,MAAM,UAAU,KAAA,IAAY,eAAe,KAAA;EAC5C;EACb,gBAAgB,OAAO,iBAAiB;GACtC,WAAW,KAAK;GAChB,gBAAgB,OAAO,YAAY;EACrC;EACA,GAAI;EAPN,UAAA,CASE,qBAAC,OAAD;GACE,aAAU;GACV,WAAW,GACT,8BACA,gBAAgB,cAAc,2BAEhC;GANF,UAAA,CAQE,oBAAC,UAAD;IACE,cAAY;IACK;IACjB,WAAW,GACT,kBACA,eACG,gBAAgB,aACb,4BACA;mDAEN,YAAY,IAEd;IAEC,UAAA,MAAM,KAAI,SACT,qBAAC,SAAD;KAEE,OAAO,KAAK;KACZ,UAAU,KAAK;KACf,WAAW,GACT,UACE,CAAC,cACD,gBAAgB,gBAChB,UACF,cAAc,YACd,YAAY,GAEd;KAZF,UAAA,CAcG,KAAK,QAAQ,QACZ,oBAAC,QAAD;MACE,aAAU;MACV,eAAY;MACZ,WAAU;MAET,UAAA,KAAK;KACF,CAAA,GAEP,KAAK,KACC;IAvBF,GAAA,KAAK,GAuBH,CACV;GACO,CAAA,GACT,SAAS,QACR,oBAAC,OAAD;IACE,aAAU;IACV,WAAW,GACT;;uDAGA,YAAY,KAEd;IACA,oBAAkB;IAEjB,UAAA;GACE,CAAA,CAEJ;EACJ,CAAA,GAAA,MAAM,KAAI,SACT,oBAAC,WAAD;GAEE,OAAO,KAAK;GACC;GACb,WAAW,YAAY;GAEtB,UAAA,KAAK;EACG,GANJ,KAAK,GAMD,CACZ,CACG;;AAEV"}
|
package/dist/TimePicker.mjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { cn } from "./utils.mjs";
|
|
3
3
|
import { useConfig } from "./providers/config/context.mjs";
|
|
4
4
|
import Button from "./Button.mjs";
|
|
5
|
-
import Input from "./
|
|
5
|
+
import Input from "./Input.mjs";
|
|
6
6
|
import * as React$1 from "react";
|
|
7
7
|
import { useMergedRef } from "@jbpark/use-hooks";
|
|
8
8
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
//#region src/components/organisms/toast.d.ts
|
|
2
|
-
type ToastStatus = 'info' | 'success' | 'error' | 'warning';
|
|
2
|
+
type ToastStatus = 'info' | 'success' | 'error' | 'warning' | 'loading';
|
|
3
|
+
export type Placement = 'top-start' | 'top' | 'top-end' | 'bottom-start' | 'bottom' | 'bottom-end';
|
|
3
4
|
export interface Props {
|
|
4
5
|
status?: ToastStatus;
|
|
5
6
|
title: React.ReactNode;
|
|
@@ -14,17 +15,26 @@ interface StaticProps extends Props {
|
|
|
14
15
|
id?: string;
|
|
15
16
|
duration?: number;
|
|
16
17
|
container?: HTMLElement;
|
|
18
|
+
placement?: Placement;
|
|
19
|
+
}
|
|
20
|
+
export interface GlobalConfig {
|
|
21
|
+
placement?: Placement;
|
|
22
|
+
duration?: number;
|
|
23
|
+
maxCount?: number;
|
|
17
24
|
}
|
|
18
25
|
declare const Toast: {
|
|
19
26
|
({ status, title, description, icon, closable, action, className, onClose }: Props): import("react").JSX.Element;
|
|
20
27
|
destroy: (id?: string) => void;
|
|
21
28
|
destroyAll(): void;
|
|
29
|
+
config(config: GlobalConfig): void;
|
|
30
|
+
open(props: StaticProps): string | undefined;
|
|
22
31
|
info(title: React.ReactNode, props?: TriggerOptions): string | undefined;
|
|
23
32
|
success(title: React.ReactNode, props?: TriggerOptions): string | undefined;
|
|
24
33
|
error(title: React.ReactNode, props?: TriggerOptions): string | undefined;
|
|
25
34
|
warning(title: React.ReactNode, props?: TriggerOptions): string | undefined;
|
|
35
|
+
loading(title: React.ReactNode, props?: TriggerOptions): string | undefined;
|
|
26
36
|
};
|
|
27
37
|
type TriggerOptions = Omit<StaticProps, 'status' | 'title'>;
|
|
28
38
|
//#endregion
|
|
29
39
|
export { type StaticProps as ToastOptions, Toast as default };
|
|
30
|
-
//# sourceMappingURL=
|
|
40
|
+
//# sourceMappingURL=Toast.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Toast.d.mts","names":[],"sources":["../src/components/organisms/toast.tsx"],"mappings":";KAyBK;YAEO;iBAGK;EACf,SAAS;EACT,OAAO,MAAM;EACb,cAAc,MAAM;EACpB,OAAO,MAAM;EACb;EACA,SAAS,MAAM;EACf;EACA;;UAGQ,oBAAoB;EAC5B;EACA;EACA,YAAY;EACZ,YAAY;;iBAGG;EACf,YAAY;EACZ;EAEA;;cAiBI;KASH,QAAA,OAAA,aAAA,MAAA,UAAA,QAAA,WAAA,WAAA,wBAAK,IAAA;EA0Mc,UAAA;;EAcE,OAAA,QAAA;EAMH,KAAA,OAAA;EACA,KAAA,OAAA,MAAM,WAAS,QAAU;EAEtB,QAAA,OAAA,MAAM,WAAS,QAAU;EAE3B,MAAA,OAAA,MAAM,WAAS,QAAU;EAEvB,QAAA,OAAA,MAAM,WAAS,QAAU;EAGzB,QAAA,OAAA,MAAM,WAAS,QAAU;;KAZ5C,iBAAiB,KAAK"}
|
package/dist/Toast.mjs
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "./utils.mjs";
|
|
3
|
+
import { DEFAULT_LOCALE, useConfig } from "./providers/config/context.mjs";
|
|
4
|
+
import Button from "./Button.mjs";
|
|
5
|
+
import { createImperativeStack, isBrowser } from "./components/organisms/imperative-stack.mjs";
|
|
6
|
+
import { useEffect, useRef, useState } from "react";
|
|
7
|
+
import { useTimeout } from "@jbpark/use-hooks";
|
|
8
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
import { Check, Info, LoaderCircle, OctagonAlert, OctagonX, X } from "lucide-react";
|
|
10
|
+
import { createPortal } from "react-dom";
|
|
11
|
+
//#region src/components/organisms/toast.tsx
|
|
12
|
+
const STATUS_ICONS = {
|
|
13
|
+
info: /* @__PURE__ */ jsx(Info, { className: "text-blue-400" }),
|
|
14
|
+
success: /* @__PURE__ */ jsx(Check, { className: "text-green-400" }),
|
|
15
|
+
error: /* @__PURE__ */ jsx(OctagonX, { className: "text-red-400" }),
|
|
16
|
+
warning: /* @__PURE__ */ jsx(OctagonAlert, { className: "text-yellow-400" }),
|
|
17
|
+
loading: /* @__PURE__ */ jsx(LoaderCircle, { className: "text-muted-foreground animate-spin" })
|
|
18
|
+
};
|
|
19
|
+
const Toast = ({ status, title, description, icon, closable = true, action, className, onClose }) => {
|
|
20
|
+
const { locale } = useConfig();
|
|
21
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
22
|
+
"data-slot": "toast",
|
|
23
|
+
role: status === "error" ? "alert" : "status",
|
|
24
|
+
className: cn(`pointer-events-auto flex w-80 max-w-[calc(100vw-2rem)] items-start
|
|
25
|
+
gap-3 rounded-lg`, "bg-background text-foreground border p-4 shadow-lg", className),
|
|
26
|
+
children: [
|
|
27
|
+
(icon || status) && /* @__PURE__ */ jsx("div", {
|
|
28
|
+
className: "mt-0.5 shrink-0 [&_svg]:size-5",
|
|
29
|
+
children: icon || status && STATUS_ICONS[status]
|
|
30
|
+
}),
|
|
31
|
+
/* @__PURE__ */ jsxs("div", {
|
|
32
|
+
className: "flex-1 space-y-1",
|
|
33
|
+
children: [
|
|
34
|
+
/* @__PURE__ */ jsx("p", {
|
|
35
|
+
className: "text-sm font-medium",
|
|
36
|
+
children: title
|
|
37
|
+
}),
|
|
38
|
+
description && /* @__PURE__ */ jsx("p", {
|
|
39
|
+
className: "text-muted-foreground text-sm",
|
|
40
|
+
children: description
|
|
41
|
+
}),
|
|
42
|
+
action && /* @__PURE__ */ jsx("div", {
|
|
43
|
+
className: "pt-1",
|
|
44
|
+
children: action
|
|
45
|
+
})
|
|
46
|
+
]
|
|
47
|
+
}),
|
|
48
|
+
closable && /* @__PURE__ */ jsx(Button, {
|
|
49
|
+
variant: "text",
|
|
50
|
+
shape: "circle",
|
|
51
|
+
size: "small",
|
|
52
|
+
"aria-label": locale.close ?? DEFAULT_LOCALE.close,
|
|
53
|
+
icon: /* @__PURE__ */ jsx(X, {}),
|
|
54
|
+
onClick: onClose
|
|
55
|
+
})
|
|
56
|
+
]
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
const DEFAULT_DURATION = 4e3;
|
|
60
|
+
const PLACEMENTS = [
|
|
61
|
+
"top-start",
|
|
62
|
+
"top",
|
|
63
|
+
"top-end",
|
|
64
|
+
"bottom-start",
|
|
65
|
+
"bottom",
|
|
66
|
+
"bottom-end"
|
|
67
|
+
];
|
|
68
|
+
const EXIT_CLASSES = {
|
|
69
|
+
"top-start": "-translate-x-2",
|
|
70
|
+
top: "-translate-y-2",
|
|
71
|
+
"top-end": "translate-x-2",
|
|
72
|
+
"bottom-start": "-translate-x-2",
|
|
73
|
+
bottom: "translate-y-2",
|
|
74
|
+
"bottom-end": "translate-x-2"
|
|
75
|
+
};
|
|
76
|
+
const globalConfig = {};
|
|
77
|
+
const StaticToast = ({ id, index, revision, duration = globalConfig.duration ?? DEFAULT_DURATION, container, placement = "bottom-end", onClose, ...props }) => {
|
|
78
|
+
const [visible, setVisible] = useState(true);
|
|
79
|
+
const isClosingRef = useRef(false);
|
|
80
|
+
const maxCount = globalConfig.maxCount;
|
|
81
|
+
const isQueued = maxCount !== void 0 && index >= Math.max(1, maxCount);
|
|
82
|
+
const close = () => {
|
|
83
|
+
if (isClosingRef.current) return;
|
|
84
|
+
isClosingRef.current = true;
|
|
85
|
+
onClose?.();
|
|
86
|
+
setVisible(false);
|
|
87
|
+
setTimeout(() => {
|
|
88
|
+
destroy(id);
|
|
89
|
+
}, 200);
|
|
90
|
+
};
|
|
91
|
+
const { reset, clear } = useTimeout(close, isQueued || !duration ? null : duration);
|
|
92
|
+
useEffect(() => {
|
|
93
|
+
if (revision > 0) reset();
|
|
94
|
+
}, [revision, reset]);
|
|
95
|
+
if (!isBrowser || isQueued) return null;
|
|
96
|
+
return createPortal(/* @__PURE__ */ jsx("div", {
|
|
97
|
+
className: cn("transition-all duration-200", visible ? "opacity-100" : cn("opacity-0", EXIT_CLASSES[placement])),
|
|
98
|
+
onMouseEnter: clear,
|
|
99
|
+
onMouseLeave: reset,
|
|
100
|
+
onFocus: clear,
|
|
101
|
+
onBlur: reset,
|
|
102
|
+
children: /* @__PURE__ */ jsx(Toast, {
|
|
103
|
+
...props,
|
|
104
|
+
onClose: close
|
|
105
|
+
})
|
|
106
|
+
}), stacks[placement].getRootElement(container));
|
|
107
|
+
};
|
|
108
|
+
const createRootElement = (placement) => () => {
|
|
109
|
+
const el = document.createElement("div");
|
|
110
|
+
const [vertical, horizontal = "center"] = placement.split("-");
|
|
111
|
+
el.setAttribute("role", "region");
|
|
112
|
+
el.setAttribute("aria-label", "Notifications");
|
|
113
|
+
el.dataset.slot = "toast-stack";
|
|
114
|
+
el.dataset.placement = placement;
|
|
115
|
+
el.style.zIndex = "10000";
|
|
116
|
+
el.style.position = "fixed";
|
|
117
|
+
el.style.display = "flex";
|
|
118
|
+
el.style.flexDirection = vertical === "top" ? "column" : "column-reverse";
|
|
119
|
+
el.style.gap = "8px";
|
|
120
|
+
el.style.padding = "16px";
|
|
121
|
+
el.style.pointerEvents = "none";
|
|
122
|
+
el.style[vertical === "top" ? "top" : "bottom"] = "0";
|
|
123
|
+
if (horizontal === "start") {
|
|
124
|
+
el.style.insetInlineStart = "0";
|
|
125
|
+
el.style.alignItems = "flex-start";
|
|
126
|
+
} else if (horizontal === "end") {
|
|
127
|
+
el.style.insetInlineEnd = "0";
|
|
128
|
+
el.style.alignItems = "flex-end";
|
|
129
|
+
} else {
|
|
130
|
+
el.style.left = "0";
|
|
131
|
+
el.style.right = "0";
|
|
132
|
+
el.style.alignItems = "center";
|
|
133
|
+
}
|
|
134
|
+
return el;
|
|
135
|
+
};
|
|
136
|
+
const stacks = Object.fromEntries(PLACEMENTS.map((placement) => [placement, createImperativeStack({
|
|
137
|
+
createRootElement: createRootElement(placement),
|
|
138
|
+
StackItem: StaticToast
|
|
139
|
+
})]));
|
|
140
|
+
let revisionCounter = 0;
|
|
141
|
+
const show = (props) => {
|
|
142
|
+
if (props.id) {
|
|
143
|
+
const revision = revisionCounter += 1;
|
|
144
|
+
for (const placement of PLACEMENTS) if (stacks[placement].update(props.id, (current) => ({
|
|
145
|
+
...props,
|
|
146
|
+
placement: current.placement,
|
|
147
|
+
container: current.container,
|
|
148
|
+
revision
|
|
149
|
+
}))) return props.id;
|
|
150
|
+
}
|
|
151
|
+
const placement = props.placement ?? globalConfig.placement ?? "bottom-end";
|
|
152
|
+
return stacks[placement].render({
|
|
153
|
+
...props,
|
|
154
|
+
placement,
|
|
155
|
+
revision: 0
|
|
156
|
+
});
|
|
157
|
+
};
|
|
158
|
+
const destroy = (id) => {
|
|
159
|
+
for (const placement of PLACEMENTS) stacks[placement].destroy(id);
|
|
160
|
+
};
|
|
161
|
+
Toast.destroy = destroy;
|
|
162
|
+
Toast.destroyAll = () => {
|
|
163
|
+
destroy();
|
|
164
|
+
};
|
|
165
|
+
Toast.config = (config) => {
|
|
166
|
+
Object.assign(globalConfig, config);
|
|
167
|
+
};
|
|
168
|
+
Toast.open = (props) => show(props);
|
|
169
|
+
Toast.info = (title, props) => show({
|
|
170
|
+
status: "info",
|
|
171
|
+
title,
|
|
172
|
+
...props
|
|
173
|
+
});
|
|
174
|
+
Toast.success = (title, props) => show({
|
|
175
|
+
status: "success",
|
|
176
|
+
title,
|
|
177
|
+
...props
|
|
178
|
+
});
|
|
179
|
+
Toast.error = (title, props) => show({
|
|
180
|
+
status: "error",
|
|
181
|
+
title,
|
|
182
|
+
...props
|
|
183
|
+
});
|
|
184
|
+
Toast.warning = (title, props) => show({
|
|
185
|
+
status: "warning",
|
|
186
|
+
title,
|
|
187
|
+
...props
|
|
188
|
+
});
|
|
189
|
+
Toast.loading = (title, props) => show({
|
|
190
|
+
status: "loading",
|
|
191
|
+
title,
|
|
192
|
+
duration: 0,
|
|
193
|
+
...props
|
|
194
|
+
});
|
|
195
|
+
//#endregion
|
|
196
|
+
export { Toast as default };
|
|
197
|
+
|
|
198
|
+
//# sourceMappingURL=Toast.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Toast.mjs","names":[],"sources":["../src/components/organisms/toast.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { useTimeout } from '@jbpark/use-hooks';\nimport {\n Check,\n Info,\n LoaderCircle,\n OctagonAlert,\n OctagonX,\n X,\n} from 'lucide-react';\n\nimport { DEFAULT_LOCALE, useConfig } from '@repo/ui/providers';\nimport { cn } from '@repo/ui/utils';\n\nimport Button from '../atoms/button';\nimport {\n type ImperativeStack,\n createImperativeStack,\n isBrowser,\n} from './imperative-stack';\n\ntype ToastStatus = 'info' | 'success' | 'error' | 'warning' | 'loading';\n\nexport type Placement =\n 'top-start' | 'top' | 'top-end' | 'bottom-start' | 'bottom' | 'bottom-end';\n\nexport interface Props {\n status?: ToastStatus;\n title: React.ReactNode;\n description?: React.ReactNode;\n icon?: React.ReactNode;\n closable?: boolean;\n action?: React.ReactNode;\n className?: string;\n onClose?: () => void;\n}\n\ninterface StaticProps extends Props {\n id?: string;\n duration?: number;\n container?: HTMLElement;\n placement?: Placement;\n}\n\nexport interface GlobalConfig {\n placement?: Placement;\n duration?: number;\n // Visible toasts per stack; later toasts wait until one closes.\n maxCount?: number;\n}\n\ninterface StackEntry extends StaticProps {\n revision: number;\n}\n\ntype StackItemProps = StackEntry & { id: string; index: number };\n\nconst STATUS_ICONS: Record<ToastStatus, React.ReactNode> = {\n info: <Info className=\"text-blue-400\" />,\n success: <Check className=\"text-green-400\" />,\n error: <OctagonX className=\"text-red-400\" />,\n warning: <OctagonAlert className=\"text-yellow-400\" />,\n loading: <LoaderCircle className=\"text-muted-foreground animate-spin\" />,\n};\n\nconst Toast = ({\n status,\n title,\n description,\n icon,\n closable = true,\n action,\n className,\n onClose,\n}: Props) => {\n const { locale } = useConfig();\n\n return (\n <div\n data-slot=\"toast\"\n role={status === 'error' ? 'alert' : 'status'}\n className={cn(\n `pointer-events-auto flex w-80 max-w-[calc(100vw-2rem)] items-start\n gap-3 rounded-lg`,\n 'bg-background text-foreground border p-4 shadow-lg',\n className,\n //\n )}\n >\n {(icon || status) && (\n <div className=\"mt-0.5 shrink-0 [&_svg]:size-5\">\n {icon || (status && STATUS_ICONS[status])}\n </div>\n )}\n <div className=\"flex-1 space-y-1\">\n <p className=\"text-sm font-medium\">{title}</p>\n {description && (\n <p className=\"text-muted-foreground text-sm\">{description}</p>\n )}\n {action && <div className=\"pt-1\">{action}</div>}\n </div>\n {closable && (\n <Button\n variant=\"text\"\n shape=\"circle\"\n size=\"small\"\n aria-label={locale.close ?? DEFAULT_LOCALE.close}\n icon={<X />}\n onClick={onClose}\n />\n )}\n </div>\n );\n};\n\nconst DEFAULT_DURATION = 4000;\n\nconst PLACEMENTS: readonly Placement[] = [\n 'top-start',\n 'top',\n 'top-end',\n 'bottom-start',\n 'bottom',\n 'bottom-end',\n];\n\nconst EXIT_CLASSES: Record<Placement, string> = {\n 'top-start': '-translate-x-2',\n top: '-translate-y-2',\n 'top-end': 'translate-x-2',\n 'bottom-start': '-translate-x-2',\n bottom: 'translate-y-2',\n 'bottom-end': 'translate-x-2',\n};\n\nconst globalConfig: GlobalConfig = {};\n\nconst StaticToast = ({\n id,\n index,\n revision,\n duration = globalConfig.duration ?? DEFAULT_DURATION,\n container,\n placement = 'bottom-end',\n onClose,\n ...props\n}: StackItemProps): React.ReactPortal | null => {\n const [visible, setVisible] = useState(true);\n const isClosingRef = useRef(false);\n\n const maxCount = globalConfig.maxCount;\n const isQueued = maxCount !== undefined && index >= Math.max(1, maxCount);\n\n const close = () => {\n if (isClosingRef.current) {\n return;\n }\n\n isClosingRef.current = true;\n onClose?.();\n setVisible(false);\n setTimeout(() => {\n destroy(id);\n }, 200);\n };\n\n const { reset, clear } = useTimeout(\n close,\n isQueued || !duration ? null : duration,\n );\n\n // An update restarts the visible duration.\n useEffect(() => {\n if (revision > 0) {\n reset();\n }\n }, [revision, reset]);\n\n if (!isBrowser || isQueued) {\n return null;\n }\n\n return createPortal(\n <div\n className={cn(\n 'transition-all duration-200',\n visible ? 'opacity-100' : cn('opacity-0', EXIT_CLASSES[placement]),\n )}\n // Without this, a toast with a closable/action button (or one the\n // user is mid-read on) could auto-dismiss itself out from under\n // them — hovering or focusing anything inside pauses the timer,\n // moving away restarts it from the full duration.\n onMouseEnter={clear}\n onMouseLeave={reset}\n onFocus={clear}\n onBlur={reset}\n >\n <Toast {...props} onClose={close} />\n </div>,\n stacks[placement].getRootElement(container)!,\n );\n};\n\nconst createRootElement = (placement: Placement) => () => {\n const el = document.createElement('div');\n const [vertical, horizontal = 'center'] = placement.split('-');\n\n el.setAttribute('role', 'region');\n // Plain DOM, created outside any React tree — no Config to read a\n // locale override from until #226 gives the imperative stack a way\n // to inherit one.\n el.setAttribute('aria-label', 'Notifications');\n el.dataset.slot = 'toast-stack';\n el.dataset.placement = placement;\n el.style.zIndex = '10000';\n el.style.position = 'fixed';\n el.style.display = 'flex';\n // The oldest toast sits nearest the screen edge.\n el.style.flexDirection = vertical === 'top' ? 'column' : 'column-reverse';\n el.style.gap = '8px';\n el.style.padding = '16px';\n el.style.pointerEvents = 'none';\n el.style[vertical === 'top' ? 'top' : 'bottom'] = '0';\n\n if (horizontal === 'start') {\n el.style.insetInlineStart = '0';\n el.style.alignItems = 'flex-start';\n } else if (horizontal === 'end') {\n el.style.insetInlineEnd = '0';\n el.style.alignItems = 'flex-end';\n } else {\n el.style.left = '0';\n el.style.right = '0';\n el.style.alignItems = 'center';\n }\n\n return el;\n};\n\nconst stacks = Object.fromEntries(\n PLACEMENTS.map(placement => [\n placement,\n createImperativeStack<StackEntry>({\n createRootElement: createRootElement(placement),\n StackItem: StaticToast,\n }),\n ]),\n) as Record<Placement, ImperativeStack<StackEntry>>;\n\nlet revisionCounter = 0;\n\nconst show = (props: StaticProps): string | undefined => {\n if (props.id) {\n const revision = (revisionCounter += 1);\n\n // An update replaces the content but stays in the toast's stack and\n // container, so `placement` and `container` from the new call are ignored.\n for (const placement of PLACEMENTS) {\n if (\n stacks[placement].update(props.id, current => ({\n ...props,\n placement: current.placement,\n container: current.container,\n revision,\n }))\n ) {\n return props.id;\n }\n }\n }\n\n const placement = props.placement ?? globalConfig.placement ?? 'bottom-end';\n\n return stacks[placement].render({ ...props, placement, revision: 0 });\n};\n\nconst destroy = (id?: string) => {\n for (const placement of PLACEMENTS) {\n stacks[placement].destroy(id);\n }\n};\n\nToast.destroy = destroy;\n\nToast.destroyAll = () => {\n destroy();\n};\n\n// Sets defaults for toasts shown afterwards. `maxCount` also applies to\n// queued toasts the next time their stack changes.\nToast.config = (config: GlobalConfig) => {\n Object.assign(globalConfig, config);\n};\n\ntype TriggerOptions = Omit<StaticProps, 'status' | 'title'>;\n\nToast.open = (props: StaticProps) => show(props);\nToast.info = (title: React.ReactNode, props?: TriggerOptions) =>\n show({ status: 'info', title, ...props });\nToast.success = (title: React.ReactNode, props?: TriggerOptions) =>\n show({ status: 'success', title, ...props });\nToast.error = (title: React.ReactNode, props?: TriggerOptions) =>\n show({ status: 'error', title, ...props });\nToast.warning = (title: React.ReactNode, props?: TriggerOptions) =>\n show({ status: 'warning', title, ...props });\n// Stays until updated or closed unless `duration` is given.\nToast.loading = (title: React.ReactNode, props?: TriggerOptions) =>\n show({ status: 'loading', title, duration: 0, ...props });\n\nexport default Toast;\nexport type { StaticProps as ToastOptions };\n"],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ComponentSize } from "./providers/config/types.mjs";
|
|
2
|
+
import { ReactNode } from "react";
|
|
3
|
+
import { ToggleGroup as ToggleGroup$1 } from "@base-ui/react/toggle-group";
|
|
4
|
+
//#region src/components/atoms/toggle-group.d.ts
|
|
5
|
+
export interface Option {
|
|
6
|
+
value: string;
|
|
7
|
+
label: string;
|
|
8
|
+
icon?: ReactNode;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
iconOnly?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface Props extends Omit<ToggleGroup$1.Props, 'children' | 'value' | 'defaultValue' | 'onValueChange' | 'multiple' | 'className' | 'onChange' | 'dir'> {
|
|
13
|
+
options: readonly Option[];
|
|
14
|
+
value?: readonly string[];
|
|
15
|
+
defaultValue?: readonly string[];
|
|
16
|
+
onChange?: (values: string[]) => void;
|
|
17
|
+
size?: ComponentSize;
|
|
18
|
+
dir?: 'ltr' | 'rtl';
|
|
19
|
+
className?: string;
|
|
20
|
+
classNames?: {
|
|
21
|
+
item?: string;
|
|
22
|
+
pressedItem?: string;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
declare const ToggleGroup: ({ options, value, defaultValue, onChange, size, disabled, orientation, dir, className, classNames, ...props }: Props) => import("react").JSX.Element;
|
|
26
|
+
//#endregion
|
|
27
|
+
export { ToggleGroup as default };
|
|
28
|
+
//# sourceMappingURL=ToggleGroup.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToggleGroup.d.mts","names":["ToggleGroupPrimitive"],"sources":["../src/components/atoms/toggle-group.tsx"],"mappings":";;;;iBAciB;EACf;EACA;EACA,OAAO;EACP;EAEA;;iBAGe,cAAc,KAC7BA,cAAqB;EAUrB,kBAAkB;EAClB;EACA;EAGA,YAAY;EACZ,OAAO;EACP;EACA;EACA;IACE;IACA;;;cAIE,gBAAe,SAAA,OAAA,cAAA,UAAA,MAAA,UAAA,aAAA,KAAA,WAAA,eAAA,SAYlB,0BAAK,IAAA"}
|