@crossangle-org/cs-ui 0.2.6 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/accordion/cs-accordion.js +116 -0
- package/dist/components/accordion/cs-accordion.js.map +1 -0
- package/dist/components/alert-dialog/cs-alert-dialog.js +148 -0
- package/dist/components/alert-dialog/cs-alert-dialog.js.map +1 -0
- package/dist/components/avatar/cs-avatar.js +44 -0
- package/dist/components/avatar/cs-avatar.js.map +1 -0
- package/dist/components/badge/cs-badge.js +40 -0
- package/dist/components/badge/cs-badge.js.map +1 -0
- package/dist/components/box/cs-box.js +37 -0
- package/dist/components/box/cs-box.js.map +1 -0
- package/dist/components/button/cs-button.js +91 -0
- package/dist/components/button/cs-button.js.map +1 -0
- package/dist/components/calendar/cs-calendar.js +199 -0
- package/dist/components/calendar/cs-calendar.js.map +1 -0
- package/dist/components/card/cs-card.js +95 -0
- package/dist/components/card/cs-card.js.map +1 -0
- package/dist/components/chart/cs-chart.js +88 -0
- package/dist/components/chart/cs-chart.js.map +1 -0
- package/dist/components/checkbox/cs-checkbox.js +55 -0
- package/dist/components/checkbox/cs-checkbox.js.map +1 -0
- package/dist/components/code-block/cs-code-block.js +39 -0
- package/dist/components/code-block/cs-code-block.js.map +1 -0
- package/dist/components/code-block/cs-code-highlighter.js +59 -0
- package/dist/components/code-block/cs-code-highlighter.js.map +1 -0
- package/dist/components/collapsible/cs-collapsible.js +36 -0
- package/dist/components/collapsible/cs-collapsible.js.map +1 -0
- package/dist/components/date-picker/cs-date-picker.js +25 -0
- package/dist/components/date-picker/cs-date-picker.js.map +1 -0
- package/dist/components/dialog/cs-dialog.js +131 -0
- package/dist/components/dialog/cs-dialog.js.map +1 -0
- package/dist/components/drawer/cs-drawer.js +131 -0
- package/dist/components/drawer/cs-drawer.js.map +1 -0
- package/dist/components/dropdown-menu/cs-dropdown-menu.js +247 -0
- package/dist/components/dropdown-menu/cs-dropdown-menu.js.map +1 -0
- package/dist/components/dropzone/cs-dropzone.js +147 -0
- package/dist/components/dropzone/cs-dropzone.js.map +1 -0
- package/dist/components/empty/cs-empty.js +107 -0
- package/dist/components/empty/cs-empty.js.map +1 -0
- package/dist/components/field/cs-field.js +218 -0
- package/dist/components/field/cs-field.js.map +1 -0
- package/dist/components/input/cs-input-group.js +207 -0
- package/dist/components/input/cs-input-group.js.map +1 -0
- package/dist/components/input/cs-input.js +40 -0
- package/dist/components/input/cs-input.js.map +1 -0
- package/dist/components/label/cs-label.js +26 -0
- package/dist/components/label/cs-label.js.map +1 -0
- package/dist/components/navigation-menu/cs-navigation-menu.js +214 -0
- package/dist/components/navigation-menu/cs-navigation-menu.js.map +1 -0
- package/dist/components/pagination/cs-pagination.js +124 -0
- package/dist/components/pagination/cs-pagination.js.map +1 -0
- package/dist/components/popover/cs-popover.js +60 -0
- package/dist/components/popover/cs-popover.js.map +1 -0
- package/dist/components/progress/cs-progress.js +62 -0
- package/dist/components/progress/cs-progress.js.map +1 -0
- package/dist/components/scroll-area/cs-scroll-area.js +61 -0
- package/dist/components/scroll-area/cs-scroll-area.js.map +1 -0
- package/dist/components/select/cs-select.js +195 -0
- package/dist/components/select/cs-select.js.map +1 -0
- package/dist/components/select/cs-simple-select.js +32 -0
- package/dist/components/select/cs-simple-select.js.map +1 -0
- package/dist/components/separator/cs-separator.js +28 -0
- package/dist/components/separator/cs-separator.js.map +1 -0
- package/dist/components/sheet/cs-sheet.js +128 -0
- package/dist/components/sheet/cs-sheet.js.map +1 -0
- package/dist/components/sidebar/cs-sidebar.js +657 -0
- package/dist/components/sidebar/cs-sidebar.js.map +1 -0
- package/dist/components/skeleton/cs-skeleton.js +32 -0
- package/dist/components/skeleton/cs-skeleton.js.map +1 -0
- package/dist/components/sonner/cs-sonner.js +76 -0
- package/dist/components/sonner/cs-sonner.js.map +1 -0
- package/dist/components/spinner/cs-spinner.js +34 -0
- package/dist/components/spinner/cs-spinner.js.map +1 -0
- package/dist/components/switch/cs-switch.js +38 -0
- package/dist/components/switch/cs-switch.js.map +1 -0
- package/dist/components/table/cs-data-base-table.js +108 -0
- package/dist/components/table/cs-data-base-table.js.map +1 -0
- package/dist/components/table/cs-data-table.js +32 -0
- package/dist/components/table/cs-data-table.js.map +1 -0
- package/dist/components/table/cs-skeleton-table.js +41 -0
- package/dist/components/table/cs-skeleton-table.js.map +1 -0
- package/dist/components/table/cs-table.js +120 -0
- package/dist/components/table/cs-table.js.map +1 -0
- package/dist/components/tabs/cs-simple-tabs.js +24 -0
- package/dist/components/tabs/cs-simple-tabs.js.map +1 -0
- package/dist/components/tabs/cs-tabs.js +114 -0
- package/dist/components/tabs/cs-tabs.js.map +1 -0
- package/dist/components/toggle/cs-toggle-group.js +65 -0
- package/dist/components/toggle/cs-toggle-group.js.map +1 -0
- package/dist/components/toggle/cs-toggle.js +46 -0
- package/dist/components/toggle/cs-toggle.js.map +1 -0
- package/dist/components/tooltip/cs-simple-tooltip.js +16 -0
- package/dist/components/tooltip/cs-simple-tooltip.js.map +1 -0
- package/dist/components/tooltip/cs-tooltip.js +72 -0
- package/dist/components/tooltip/cs-tooltip.js.map +1 -0
- package/dist/constants/cs-chart-option.constant.js +105 -0
- package/dist/constants/cs-chart-option.constant.js.map +1 -0
- package/dist/cs-ui.css +5 -96
- package/dist/hooks/use-accordion.js +54 -0
- package/dist/hooks/use-accordion.js.map +1 -0
- package/dist/hooks/use-infinite-scroll.js +40 -0
- package/dist/hooks/use-infinite-scroll.js.map +1 -0
- package/dist/hooks/use-laptop.js +20 -0
- package/dist/hooks/use-laptop.js.map +1 -0
- package/dist/hooks/use-mobile.js +20 -0
- package/dist/hooks/use-mobile.js.map +1 -0
- package/dist/index.d.ts +19 -6
- package/dist/index.js +287 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/chart.util.js +48 -0
- package/dist/lib/chart.util.js.map +1 -0
- package/dist/lib/style.util.js +19 -0
- package/dist/lib/style.util.js.map +1 -0
- package/dist/lib/utils.js +27 -0
- package/dist/lib/utils.js.map +1 -0
- package/package.json +4 -5
- package/dist/index.cjs.js +0 -147660
- package/dist/index.cjs.js.map +0 -1
- package/dist/index.es.js +0 -147625
- package/dist/index.es.js.map +0 -1
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { getFillerColor } from "../lib/chart.util.js";
|
|
2
|
+
import { csChartTooltipStyle } from "../components/tooltip/cs-tooltip.js";
|
|
3
|
+
const CsChartBaseOptions = {
|
|
4
|
+
tooltip: {
|
|
5
|
+
className: csChartTooltipStyle,
|
|
6
|
+
borderColor: "transparent"
|
|
7
|
+
},
|
|
8
|
+
legend: {
|
|
9
|
+
bottom: 0,
|
|
10
|
+
icon: "circle",
|
|
11
|
+
itemWidth: 12,
|
|
12
|
+
itemHeight: 12,
|
|
13
|
+
itemGap: 12,
|
|
14
|
+
textStyle: {
|
|
15
|
+
color: "var(--chart-data-label-font)"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
const CsLineChartTheme = {
|
|
20
|
+
line: {
|
|
21
|
+
symbol: "none",
|
|
22
|
+
symbolSize: 8,
|
|
23
|
+
itemStyle: {
|
|
24
|
+
borderWidth: 2
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const CsChartAxisOptions = {
|
|
29
|
+
grid: {
|
|
30
|
+
containLabel: true,
|
|
31
|
+
top: 10,
|
|
32
|
+
bottom: 40,
|
|
33
|
+
left: 10,
|
|
34
|
+
right: 10,
|
|
35
|
+
borderColor: "var(--chart-wrapper-grid-color)",
|
|
36
|
+
show: false
|
|
37
|
+
},
|
|
38
|
+
xAxis: {
|
|
39
|
+
axisLine: {
|
|
40
|
+
lineStyle: {
|
|
41
|
+
color: "var(--chart-wrapper-axis-color)"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
axisLabel: {
|
|
45
|
+
color: "var(--chart-wrapper-label)"
|
|
46
|
+
},
|
|
47
|
+
splitLine: {
|
|
48
|
+
lineStyle: {
|
|
49
|
+
color: "var(--chart-wrapper-grid-color)"
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
yAxis: {
|
|
54
|
+
axisLine: {
|
|
55
|
+
lineStyle: {
|
|
56
|
+
color: "var(--chart-wrapper-axis-color)"
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
axisLabel: {
|
|
60
|
+
color: "var(--chart-wrapper-label)"
|
|
61
|
+
},
|
|
62
|
+
splitLine: {
|
|
63
|
+
lineStyle: {
|
|
64
|
+
color: "var(--chart-wrapper-grid-color)"
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
const getCsChartZoomOptions = () => ({
|
|
70
|
+
dataZoom: [
|
|
71
|
+
{
|
|
72
|
+
type: "inside",
|
|
73
|
+
disabled: true,
|
|
74
|
+
start: 0,
|
|
75
|
+
end: 100
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
type: "slider",
|
|
79
|
+
show: false,
|
|
80
|
+
start: 0,
|
|
81
|
+
end: 100,
|
|
82
|
+
bottom: 20,
|
|
83
|
+
height: 24,
|
|
84
|
+
borderColor: "var(--chart-range-slider-track-border)",
|
|
85
|
+
backgroundColor: "var(--chart-range-slider-track-bg)",
|
|
86
|
+
fillerColor: getFillerColor(),
|
|
87
|
+
handleSize: "100%",
|
|
88
|
+
handleStyle: {
|
|
89
|
+
color: "var(--chart-range-slider-thumb-handle)",
|
|
90
|
+
borderColor: "var(--chart-range-slider-thumb-handle-border)",
|
|
91
|
+
borderWidth: 1
|
|
92
|
+
},
|
|
93
|
+
moveHandleStyle: {
|
|
94
|
+
color: "var(--chart-range-slider-thumb-bar)"
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
]
|
|
98
|
+
});
|
|
99
|
+
export {
|
|
100
|
+
CsChartAxisOptions,
|
|
101
|
+
CsChartBaseOptions,
|
|
102
|
+
CsLineChartTheme,
|
|
103
|
+
getCsChartZoomOptions
|
|
104
|
+
};
|
|
105
|
+
//# sourceMappingURL=cs-chart-option.constant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cs-chart-option.constant.js","sources":["../../src/constants/cs-chart-option.constant.ts"],"sourcesContent":["import { IXChartBodyProps } from \"x-charts/components/chart/x-charts-body\";\nimport { csChartTooltipStyle } from \"../components/tooltip\";\nimport { getFillerColor } from '../lib/chart.util';\n\nexport const CsChartBaseOptions: IXChartBodyProps['customOptions'] = {\n tooltip: {\n className: csChartTooltipStyle,\n borderColor: \"transparent\"\n },\n legend: {\n bottom: 0,\n icon: 'circle',\n itemWidth: 12,\n itemHeight: 12,\n itemGap: 12,\n textStyle: {\n color: 'var(--chart-data-label-font)',\n }\n }\n}\n\nexport const CsLineChartTheme = {\n line: {\n symbol: 'none',\n symbolSize: 8,\n itemStyle: {\n borderWidth: 2\n }\n }\n}\n\nexport const CsChartAxisOptions: IXChartBodyProps['customOptions'] = {\n grid: {\n containLabel: true,\n top: 10,\n bottom: 40,\n left: 10,\n right: 10,\n borderColor: 'var(--chart-wrapper-grid-color)',\n show: false\n },\n xAxis: {\n axisLine: {\n lineStyle: {\n color: 'var(--chart-wrapper-axis-color)'\n }\n },\n axisLabel: {\n color: 'var(--chart-wrapper-label)'\n },\n splitLine: {\n lineStyle: {\n color: 'var(--chart-wrapper-grid-color)'\n }\n }\n },\n yAxis: {\n axisLine: {\n lineStyle: {\n color: 'var(--chart-wrapper-axis-color)'\n }\n },\n axisLabel: {\n color: 'var(--chart-wrapper-label)'\n },\n splitLine: {\n lineStyle: {\n color: 'var(--chart-wrapper-grid-color)'\n }\n }\n }\n}\n\nexport const getCsChartZoomOptions = (): IXChartBodyProps['customOptions'] => ({\n dataZoom: [\n {\n type: 'inside',\n disabled: true,\n start: 0,\n end: 100\n },\n {\n type: 'slider',\n show: false,\n start: 0,\n end: 100,\n bottom: 20,\n height: 24,\n borderColor: 'var(--chart-range-slider-track-border)',\n backgroundColor: 'var(--chart-range-slider-track-bg)',\n fillerColor: getFillerColor(),\n handleSize: '100%',\n handleStyle: {\n color: 'var(--chart-range-slider-thumb-handle)',\n borderColor: 'var(--chart-range-slider-thumb-handle-border)',\n borderWidth: 1\n },\n moveHandleStyle: {\n color: 'var(--chart-range-slider-thumb-bar)',\n },\n }\n ]\n})"],"names":[],"mappings":";;AAIO,MAAM,qBAAwD;AAAA,EACnE,SAAS;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,EAAA;AAAA,EAEd,QAAQ;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,WAAW;AAAA,MACT,OAAO;AAAA,IAAA;AAAA,EACT;AAEJ;AAEO,MAAM,mBAAmB;AAAA,EAC9B,MAAM;AAAA,IACJ,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,WAAW;AAAA,MACT,aAAa;AAAA,IAAA;AAAA,EACf;AAEJ;AAEO,MAAM,qBAAwD;AAAA,EACnE,MAAM;AAAA,IACJ,cAAc;AAAA,IACd,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,EAAA;AAAA,EAER,OAAO;AAAA,IACL,UAAU;AAAA,MACR,WAAW;AAAA,QACT,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,IAEF,WAAW;AAAA,MACT,OAAO;AAAA,IAAA;AAAA,IAET,WAAW;AAAA,MACT,WAAW;AAAA,QACT,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEF,OAAO;AAAA,IACL,UAAU;AAAA,MACR,WAAW;AAAA,QACT,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,IAEF,WAAW;AAAA,MACT,OAAO;AAAA,IAAA;AAAA,IAET,WAAW;AAAA,MACT,WAAW;AAAA,QACT,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,EACF;AAEJ;AAEO,MAAM,wBAAwB,OAA0C;AAAA,EAC7E,UAAU;AAAA,IACR;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,MACP,KAAK;AAAA,IAAA;AAAA,IAEP;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,iBAAiB;AAAA,MACjB,aAAa,eAAA;AAAA,MACb,YAAY;AAAA,MACZ,aAAa;AAAA,QACX,OAAO;AAAA,QACP,aAAa;AAAA,QACb,aAAa;AAAA,MAAA;AAAA,MAEf,iBAAiB;AAAA,QACd,OAAO;AAAA,MAAA;AAAA,IACV;AAAA,EACF;AAEJ;"}
|
package/dist/cs-ui.css
CHANGED
|
@@ -837,7 +837,7 @@
|
|
|
837
837
|
--toast-error-description: var(--font-color-secondary-default);
|
|
838
838
|
--toast-error-icon: var(--color-state-error-default);
|
|
839
839
|
--calendar-date-picker-radius: var(--radius-medium);
|
|
840
|
-
--calendar-days-week-font: var(--font-color-
|
|
840
|
+
--calendar-days-week-font: var(--font-color-primary-default);
|
|
841
841
|
--calendar-date-picker-padding-x: var(--spacing-component-padding-md);
|
|
842
842
|
--calendar-date-picker-padding-y: var(--spacing-component-padding-md);
|
|
843
843
|
--calendar-date-picker-icon-size: var(--icon-size-medium);
|
|
@@ -4829,6 +4829,10 @@
|
|
|
4829
4829
|
color: var(--color-green-700);
|
|
4830
4830
|
}
|
|
4831
4831
|
|
|
4832
|
+
.text-red-500 {
|
|
4833
|
+
color: var(--color-red-500);
|
|
4834
|
+
}
|
|
4835
|
+
|
|
4832
4836
|
.text-red-700 {
|
|
4833
4837
|
color: var(--color-red-700);
|
|
4834
4838
|
}
|
|
@@ -7504,11 +7508,6 @@
|
|
|
7504
7508
|
height: var(--toggle-common-icon-size);
|
|
7505
7509
|
}
|
|
7506
7510
|
|
|
7507
|
-
.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*="size-"]) {
|
|
7508
|
-
width: calc(var(--spacing) * 4);
|
|
7509
|
-
height: calc(var(--spacing) * 4);
|
|
7510
|
-
}
|
|
7511
|
-
|
|
7512
7511
|
.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-6 svg:not([class*="size-"]) {
|
|
7513
7512
|
width: calc(var(--spacing) * 6);
|
|
7514
7513
|
height: calc(var(--spacing) * 6);
|
|
@@ -8856,93 +8855,3 @@
|
|
|
8856
8855
|
height: 0;
|
|
8857
8856
|
}
|
|
8858
8857
|
}
|
|
8859
|
-
pre code.hljs {
|
|
8860
|
-
display: block;
|
|
8861
|
-
overflow-x: auto;
|
|
8862
|
-
padding: 1em
|
|
8863
|
-
}
|
|
8864
|
-
code.hljs {
|
|
8865
|
-
padding: 3px 5px
|
|
8866
|
-
}
|
|
8867
|
-
/*
|
|
8868
|
-
|
|
8869
|
-
Atom One Dark by Daniel Gamage
|
|
8870
|
-
Original One Dark Syntax theme from https://github.com/atom/one-dark-syntax
|
|
8871
|
-
|
|
8872
|
-
base: #282c34
|
|
8873
|
-
mono-1: #abb2bf
|
|
8874
|
-
mono-2: #818896
|
|
8875
|
-
mono-3: #5c6370
|
|
8876
|
-
hue-1: #56b6c2
|
|
8877
|
-
hue-2: #61aeee
|
|
8878
|
-
hue-3: #c678dd
|
|
8879
|
-
hue-4: #98c379
|
|
8880
|
-
hue-5: #e06c75
|
|
8881
|
-
hue-5-2: #be5046
|
|
8882
|
-
hue-6: #d19a66
|
|
8883
|
-
hue-6-2: #e6c07b
|
|
8884
|
-
|
|
8885
|
-
*/
|
|
8886
|
-
.hljs {
|
|
8887
|
-
color: #abb2bf;
|
|
8888
|
-
background: #282c34
|
|
8889
|
-
}
|
|
8890
|
-
.hljs-comment,
|
|
8891
|
-
.hljs-quote {
|
|
8892
|
-
color: #5c6370;
|
|
8893
|
-
font-style: italic
|
|
8894
|
-
}
|
|
8895
|
-
.hljs-doctag,
|
|
8896
|
-
.hljs-keyword,
|
|
8897
|
-
.hljs-formula {
|
|
8898
|
-
color: #c678dd
|
|
8899
|
-
}
|
|
8900
|
-
.hljs-section,
|
|
8901
|
-
.hljs-name,
|
|
8902
|
-
.hljs-selector-tag,
|
|
8903
|
-
.hljs-deletion,
|
|
8904
|
-
.hljs-subst {
|
|
8905
|
-
color: #e06c75
|
|
8906
|
-
}
|
|
8907
|
-
.hljs-literal {
|
|
8908
|
-
color: #56b6c2
|
|
8909
|
-
}
|
|
8910
|
-
.hljs-string,
|
|
8911
|
-
.hljs-regexp,
|
|
8912
|
-
.hljs-addition,
|
|
8913
|
-
.hljs-attribute,
|
|
8914
|
-
.hljs-meta .hljs-string {
|
|
8915
|
-
color: #98c379
|
|
8916
|
-
}
|
|
8917
|
-
.hljs-attr,
|
|
8918
|
-
.hljs-variable,
|
|
8919
|
-
.hljs-template-variable,
|
|
8920
|
-
.hljs-type,
|
|
8921
|
-
.hljs-selector-class,
|
|
8922
|
-
.hljs-selector-attr,
|
|
8923
|
-
.hljs-selector-pseudo,
|
|
8924
|
-
.hljs-number {
|
|
8925
|
-
color: #d19a66
|
|
8926
|
-
}
|
|
8927
|
-
.hljs-symbol,
|
|
8928
|
-
.hljs-bullet,
|
|
8929
|
-
.hljs-link,
|
|
8930
|
-
.hljs-meta,
|
|
8931
|
-
.hljs-selector-id,
|
|
8932
|
-
.hljs-title {
|
|
8933
|
-
color: #61aeee
|
|
8934
|
-
}
|
|
8935
|
-
.hljs-built_in,
|
|
8936
|
-
.hljs-title.class_,
|
|
8937
|
-
.hljs-class .hljs-title {
|
|
8938
|
-
color: #e6c07b
|
|
8939
|
-
}
|
|
8940
|
-
.hljs-emphasis {
|
|
8941
|
-
font-style: italic
|
|
8942
|
-
}
|
|
8943
|
-
.hljs-strong {
|
|
8944
|
-
font-weight: bold
|
|
8945
|
-
}
|
|
8946
|
-
.hljs-link {
|
|
8947
|
-
text-decoration: underline
|
|
8948
|
-
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useMemo, useState, useCallback } from "react";
|
|
3
|
+
const useAccordion = (itemKeys, options) => {
|
|
4
|
+
const { initialOpenedItems = [], defaultOpenAll = false } = options ?? {};
|
|
5
|
+
const initialState = useMemo(() => {
|
|
6
|
+
if (defaultOpenAll) {
|
|
7
|
+
return itemKeys;
|
|
8
|
+
}
|
|
9
|
+
return initialOpenedItems;
|
|
10
|
+
}, []);
|
|
11
|
+
const [openedItems, setOpenedItems] = useState(initialState);
|
|
12
|
+
const allKeys = useMemo(
|
|
13
|
+
() => itemKeys,
|
|
14
|
+
[itemKeys]
|
|
15
|
+
);
|
|
16
|
+
const toggleAccordion = useCallback((value) => {
|
|
17
|
+
setOpenedItems(
|
|
18
|
+
(prev) => prev.includes(value) ? prev.filter((item) => item !== value) : [...prev, value]
|
|
19
|
+
);
|
|
20
|
+
}, []);
|
|
21
|
+
const openAllAccordions = useCallback(() => {
|
|
22
|
+
setOpenedItems(allKeys);
|
|
23
|
+
}, [allKeys]);
|
|
24
|
+
const closeAllAccordions = useCallback(() => {
|
|
25
|
+
setOpenedItems([]);
|
|
26
|
+
}, []);
|
|
27
|
+
const toggleAllAccordions = useCallback(() => {
|
|
28
|
+
setOpenedItems(
|
|
29
|
+
(prev) => prev.length === allKeys.length ? [] : allKeys
|
|
30
|
+
);
|
|
31
|
+
}, [allKeys]);
|
|
32
|
+
const isOpenedAll = useMemo(
|
|
33
|
+
() => openedItems.length === allKeys.length && allKeys.length > 0,
|
|
34
|
+
[openedItems.length, allKeys.length]
|
|
35
|
+
);
|
|
36
|
+
const isOpened = useCallback(
|
|
37
|
+
(value) => openedItems.includes(value),
|
|
38
|
+
[openedItems]
|
|
39
|
+
);
|
|
40
|
+
return {
|
|
41
|
+
openedItems,
|
|
42
|
+
setOpenedItems,
|
|
43
|
+
toggleAccordion,
|
|
44
|
+
openAllAccordions,
|
|
45
|
+
closeAllAccordions,
|
|
46
|
+
toggleAllAccordions,
|
|
47
|
+
isOpenedAll,
|
|
48
|
+
isOpened
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
export {
|
|
52
|
+
useAccordion
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=use-accordion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-accordion.js","sources":["../../src/hooks/use-accordion.tsx"],"sourcesContent":["'use client'\n\nimport { type Dispatch, type SetStateAction, useCallback, useMemo, useState } from 'react'\n\nexport interface UseCsAccordionOptions {\n /** 초기 열림 상태 (기본값: []) */\n initialOpenedItems?: string[]\n /** 초기에 모두 열림 상태로 시작 (기본값: false) */\n defaultOpenAll?: boolean\n}\n\nexport interface ReturnUseCsAccordion {\n openedItems: string[]\n setOpenedItems: Dispatch<SetStateAction<string[]>>\n toggleAccordion: (value: string) => void\n openAllAccordions: () => void\n closeAllAccordions: () => void\n toggleAllAccordions: () => void\n isOpenedAll: boolean\n isOpened: (value: string) => boolean\n}\n\n/**\n * CsAccordion 컴포넌트와 함께 사용하는 훅으로, 아코디언의 열림/닫힘 상태를 관리합니다.\n * \n * @var `openedItems` 열린 아코디언의 key 배열\n * @var `setOpenedItems` 열린 아코디언의 key 배열의 setter 함수\n * @var `toggleAccordion` 특정 아코디언을 토글하는 함수\n * @var `openAllAccordions` 모든 아코디언을 여는 함수\n * @var `closeAllAccordions` 모든 아코디언을 닫는 함수\n * @var `toggleAllAccordions` 모든 아코디언을 토글하는 함수 (모두 열림 → 모두 닫힘, 그 외 → 모두 열림)\n * @var `isOpenedAll` 모든 아코디언이 열려있는지 여부\n * @var `isOpened` 특정 아코디언이 열려있는지 확인하는 함수\n * \n * @example ```tsx\n * // 기본 사용법\n * const itemKeys = ['1', '2', '3']\n * \n * const {\n * openedItems,\n * setOpenedItems,\n * toggleAllAccordions,\n * isOpenedAll\n * } = useCsAccordion(itemKeys)\n * \n * return (\n * <>\n * <CsButton onClick={toggleAllAccordions}>\n * {isOpenedAll ? <Minimize2 /> : <Maximize2 />}\n * {isOpenedAll ? 'Collapse All' : 'Expand All'}\n * </CsButton>\n * \n * <CsAccordion\n * type=\"multiple\"\n * value={openedItems}\n * onValueChange={setOpenedItems}\n * >\n * {items.map((item) => (\n * <CsAccordionItem key={item.id} value={item.id}>\n * <CsAccordionTrigger>{item.title}</CsAccordionTrigger>\n * <CsAccordionContent>{item.content}</CsAccordionContent>\n * </CsAccordionItem>\n * ))}\n * </CsAccordion>\n * </>\n * )\n * ```\n * \n * @example ```tsx\n * // 초기 상태 설정\n * const { openedItems, setOpenedItems } = useCsAccordion(itemKeys, {\n * defaultOpenAll: true // 초기에 모두 열림\n * })\n * \n * // 또는\n * const { openedItems, setOpenedItems } = useCsAccordion(itemKeys, {\n * initialOpenedItems: ['1', '3'] // 특정 아이템만 열림\n * })\n * ```\n * \n * @param {string[]} itemKeys 아코디언 아이템의 key 배열\n * @param {UseCsAccordionOptions} options 옵션\n * @returns {ReturnUseCsAccordion}\n */\n\nexport const useAccordion = (\n itemKeys: string[],\n options?: UseCsAccordionOptions\n): ReturnUseCsAccordion => {\n const { initialOpenedItems = [], defaultOpenAll = false } = options ?? {}\n\n // 초기 상태 설정\n const initialState = useMemo(() => {\n if (defaultOpenAll) {\n return itemKeys\n }\n return initialOpenedItems\n }, []) // 의도적으로 빈 배열 - 초기 마운트 시에만 실행\n\n const [openedItems, setOpenedItems] = useState<string[]>(initialState)\n\n // 모든 아이템의 key 배열을 메모이제이션\n const allKeys = useMemo(\n () => itemKeys,\n [itemKeys]\n )\n\n // 특정 아코디언 토글\n const toggleAccordion = useCallback((value: string) => {\n setOpenedItems((prev) =>\n prev.includes(value)\n ? prev.filter((item) => item !== value)\n : [...prev, value]\n )\n }, [])\n\n // 모든 아코디언 열기\n const openAllAccordions = useCallback(() => {\n setOpenedItems(allKeys)\n }, [allKeys])\n\n // 모든 아코디언 닫기\n const closeAllAccordions = useCallback(() => {\n setOpenedItems([])\n }, [])\n\n // 모든 아코디언 토글 (모두 열림 → 닫힘, 그 외 → 열림)\n const toggleAllAccordions = useCallback(() => {\n setOpenedItems((prev) =>\n prev.length === allKeys.length ? [] : allKeys\n )\n }, [allKeys])\n\n // 모든 아코디언이 열려있는지 확인\n const isOpenedAll = useMemo(\n () => openedItems.length === allKeys.length && allKeys.length > 0,\n [openedItems.length, allKeys.length]\n )\n\n // 특정 아코디언이 열려있는지 확인\n const isOpened = useCallback(\n (value: string) => openedItems.includes(value),\n [openedItems]\n )\n\n return {\n openedItems,\n setOpenedItems,\n toggleAccordion,\n openAllAccordions,\n closeAllAccordions,\n toggleAllAccordions,\n isOpenedAll,\n isOpened,\n }\n}\n\n"],"names":[],"mappings":";;AAyFE,MAAA,eAAQ,CAAA,UAAqB,YAAI;AAGjC,QAAM,EAAA,qBAAuB,CAAA,GAAA,iBAAM,MAAA,IAAA,WAAA,CAAA;AACjC,QAAI,eAAA,QAAgB,MAAA;AAClB,wBAAO;AACT,aAAA;AAAA,IACA;AACF,WAAK;AAAA,EAEL,GAAA,CAAA,CAAA;AAGA,QAAM,CAAA,aAAU,cAAA,IAAA,SAAA,YAAA;AAAA,kBACR;AAAA,IACN,MAAC;AAAA,IACH,CAAA,QAAA;AAAA,EAGA;AACE,QAAA,kBAAA,YAAA,CAAA,UAAA;AAAA;AAAA,MAIA,CAAA,SAAA,KAAA,SAAA,KAAA,IAAA,KAAA,OAAA,CAAA,SAAA,SAAA,KAAA,IAAA,CAAA,GAAA,MAAA,KAAA;AAAA,IACF;AAAA,EAGA,GAAA,CAAA,CAAA;AACE,QAAA,oBAAsB,YAAA,MAAA;AACxB,mBAAY,OAAA;AAAA,EAGZ,GAAA,CAAA,OAAM,CAAA;AACJ,QAAA,qBAAiB,YAAA,MAAA;AACnB,mBAAK,CAAA,CAAA;AAAA,EAGL,GAAA,CAAA,CAAA;AACE,QAAA,sBAAA,YAAA,MAAA;AAAA;AAAA,MAEA,CAAA,SAAA,KAAA,WAAA,QAAA,SAAA,CAAA,IAAA;AAAA,IACF;AAAA,EAGA,GAAA,CAAA,OAAM,CAAA;AAAc,QAClB,cAAkB;AAAA,IAClB,MAAC,uBAA4B,QAAM,UAAA,QAAA,SAAA;AAAA,IACrC,CAAA,YAAA,QAAA,QAAA,MAAA;AAAA,EAGA;AAAiB,mBACI;AAAA,IACnB,CAAC,UAAA,YAAW,SAAA,KAAA;AAAA,IACd,CAAA,WAAA;AAAA,EAEA;AAAO,SACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACF;AAAA,EACF;;"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useRef, useEffect } from "react";
|
|
3
|
+
function useInfiniteScroll({
|
|
4
|
+
fetchMore,
|
|
5
|
+
hasMore,
|
|
6
|
+
isFetching,
|
|
7
|
+
threshold = 200
|
|
8
|
+
}) {
|
|
9
|
+
const observerRef = useRef(null);
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
const observer = new IntersectionObserver(
|
|
12
|
+
(entries) => {
|
|
13
|
+
const first = entries[0];
|
|
14
|
+
if (first.isIntersecting && hasMore && !isFetching) {
|
|
15
|
+
fetchMore();
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
root: null,
|
|
20
|
+
// viewport
|
|
21
|
+
rootMargin: `${threshold}px`,
|
|
22
|
+
threshold: 0.1
|
|
23
|
+
}
|
|
24
|
+
);
|
|
25
|
+
const currentTarget = observerRef.current;
|
|
26
|
+
if (currentTarget) {
|
|
27
|
+
observer.observe(currentTarget);
|
|
28
|
+
}
|
|
29
|
+
return () => {
|
|
30
|
+
if (currentTarget) {
|
|
31
|
+
observer.unobserve(currentTarget);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}, [fetchMore, hasMore, isFetching, threshold]);
|
|
35
|
+
return { scrollContainerRef: observerRef };
|
|
36
|
+
}
|
|
37
|
+
export {
|
|
38
|
+
useInfiniteScroll
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=use-infinite-scroll.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-infinite-scroll.js","sources":["../../src/hooks/use-infinite-scroll.ts"],"sourcesContent":["'use client'\n\nimport { useEffect, useRef } from 'react';\n\ninterface UseInfiniteScrollProps {\n fetchMore: () => void;\n hasMore: boolean;\n isFetching: boolean;\n threshold?: number; // IntersectionObserver의 rootMargin으로 사용 (px 단위)\n useWindowScroll?: boolean; // 하위 호환성을 위해 남겨둠 (사용 안 함)\n}\n\nexport function useInfiniteScroll<T extends HTMLElement = HTMLDivElement>({\n fetchMore,\n hasMore,\n isFetching,\n threshold = 200,\n}: UseInfiniteScrollProps) {\n const observerRef = useRef<T>(null);\n\n useEffect(() => {\n const observer = new IntersectionObserver(\n (entries) => {\n const first = entries[0];\n if (first.isIntersecting && hasMore && !isFetching) {\n fetchMore();\n }\n },\n {\n root: null, // viewport\n rootMargin: `${threshold}px`,\n threshold: 0.1,\n }\n );\n\n const currentTarget = observerRef.current;\n if (currentTarget) {\n observer.observe(currentTarget);\n }\n\n return () => {\n if (currentTarget) {\n observer.unobserve(currentTarget);\n }\n };\n }, [fetchMore, hasMore, isFetching, threshold]);\n\n return { scrollContainerRef: observerRef }; // 호환성을 위해 이름 유지 (실제로는 sentinel ref)\n}\n"],"names":[],"mappings":";;AAY0E,SACxE,kBAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACF,YAA2B;AACzB;AAEA,QAAA,cAAgB,OAAA,IAAA;AACd,YAAM;AAAe,qBACN,IAAA;AAAA,MACX,CAAA,YAAM;AACN,sBAAU,QAAA,CAAA;AACR,oCAAU,WAAA,CAAA,YAAA;AACZ,oBAAA;AAAA,QACF;AAAA,MACA;AAAA,MAAA;AAAA,QACQ,MAAA;AAAA;AAAA,QAEN,YAAW,GAAA,SAAA;AAAA,QAAA,WAAA;AAAA,MAEf;AAAA,IAEA;AACA,0BAAmB,YAAA;AACjB,QAAA,eAAiB;AACnB,eAAA,QAAA,aAAA;AAAA,IAEA;AACE;AACE,UAAA,eAAS;AACX,iBAAA,UAAA,aAAA;AAAA,MACF;AAAA;EAGF,GAAA,CAAA,WAAS,SAAA,qBAAgC,CAAA;AAC3C,SAAA,EAAA,oBAAA,YAAA;;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
const LAPTOP_BREAKPOINT = 1600;
|
|
4
|
+
function useIsLaptop() {
|
|
5
|
+
const [isLaptop, setIsLaptop] = React.useState(void 0);
|
|
6
|
+
React.useEffect(() => {
|
|
7
|
+
const mql = window.matchMedia(`(max-width: ${LAPTOP_BREAKPOINT - 1}px)`);
|
|
8
|
+
const onChange = () => {
|
|
9
|
+
setIsLaptop(window.innerWidth < LAPTOP_BREAKPOINT);
|
|
10
|
+
};
|
|
11
|
+
mql.addEventListener("change", onChange);
|
|
12
|
+
setIsLaptop(window.innerWidth < LAPTOP_BREAKPOINT);
|
|
13
|
+
return () => mql.removeEventListener("change", onChange);
|
|
14
|
+
}, []);
|
|
15
|
+
return !!isLaptop;
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
useIsLaptop
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=use-laptop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-laptop.js","sources":["../../src/hooks/use-laptop.tsx"],"sourcesContent":["'use client'\n\nimport * as React from \"react\"\n\n// Matches --breakpoint-laptop in packages/cs-ui/src/styles/globals.css\nconst LAPTOP_BREAKPOINT = 1600\n\nexport function useIsLaptop() {\n const [isLaptop, setIsLaptop] = React.useState<boolean | undefined>(undefined)\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${LAPTOP_BREAKPOINT - 1}px)`)\n const onChange = () => {\n setIsLaptop(window.innerWidth < LAPTOP_BREAKPOINT)\n }\n mql.addEventListener(\"change\", onChange)\n setIsLaptop(window.innerWidth < LAPTOP_BREAKPOINT)\n return () => mql.removeEventListener(\"change\", onChange)\n }, [])\n\n return !!isLaptop\n}\n"],"names":[],"mappings":";;AAOO,MAAA,oBAAuB;AAC5B,SAAO,cAAU;AAEjB,QAAM,CAAA,UAAU,WAAM,IAAA,MAAA,SAAA,MAAA;AACpB,kBAAY;AACZ,UAAM,MAAA,OAAW,WAAM,eAAA,oBAAA,CAAA,KAAA;AACrB,qBAAY,MAAO;AACrB,kBAAA,OAAA,aAAA,iBAAA;AAAA,IACA;AACA,yBAAmB;AACnB,qDAA+C;AACjD,WAAK,MAAA,IAAA,oBAAA,UAAA,QAAA;AAAA,EAEL,GAAA,CAAA,CAAA;AACF,SAAA,CAAA,CAAA;;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
const MOBILE_BREAKPOINT = 840;
|
|
4
|
+
function useIsMobile() {
|
|
5
|
+
const [isMobile, setIsMobile] = React.useState(void 0);
|
|
6
|
+
React.useEffect(() => {
|
|
7
|
+
const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
|
|
8
|
+
const onChange = () => {
|
|
9
|
+
setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
|
|
10
|
+
};
|
|
11
|
+
mql.addEventListener("change", onChange);
|
|
12
|
+
setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
|
|
13
|
+
return () => mql.removeEventListener("change", onChange);
|
|
14
|
+
}, []);
|
|
15
|
+
return !!isMobile;
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
useIsMobile
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=use-mobile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-mobile.js","sources":["../../src/hooks/use-mobile.tsx"],"sourcesContent":["'use client'\n\nimport * as React from \"react\"\n\n// Matches --breakpoint-max-mobile in packages/cs-ui/src/styles/globals.css\nconst MOBILE_BREAKPOINT = 840\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined)\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`)\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n }\n mql.addEventListener(\"change\", onChange)\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n return () => mql.removeEventListener(\"change\", onChange)\n }, [])\n\n return !!isMobile\n}\n"],"names":[],"mappings":";;AAOO,MAAA,oBAAuB;AAC5B,SAAO,cAAU;AAEjB,QAAM,CAAA,UAAU,WAAM,IAAA,MAAA,SAAA,MAAA;AACpB,kBAAY;AACZ,UAAM,MAAA,OAAW,WAAM,eAAA,oBAAA,CAAA,KAAA;AACrB,qBAAY,MAAO;AACrB,kBAAA,OAAA,aAAA,iBAAA;AAAA,IACA;AACA,yBAAmB;AACnB,qDAA+C;AACjD,WAAK,MAAA,IAAA,oBAAA,UAAA,QAAA;AAAA,EAEL,GAAA,CAAA,CAAA;AACF,SAAA,CAAA,CAAA;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -224,19 +224,15 @@ export declare function CsCollapsibleContent({ ...props }: React.ComponentProps<
|
|
|
224
224
|
|
|
225
225
|
export declare function CsCollapsibleTrigger({ ...props }: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>): JSX.Element;
|
|
226
226
|
|
|
227
|
-
export declare function
|
|
227
|
+
export declare function CsDataBaseTable<T>(props: CsDataBaseTableProps<T>): JSX.Element;
|
|
228
228
|
|
|
229
|
-
export declare interface
|
|
229
|
+
export declare interface CsDataBaseTableProps<T> {
|
|
230
230
|
columns: TableColumnDef<T>[];
|
|
231
231
|
rows?: T[];
|
|
232
232
|
expandable?: boolean;
|
|
233
|
-
isLoading?: boolean;
|
|
234
|
-
isError?: boolean;
|
|
235
233
|
className?: string;
|
|
236
|
-
defaultRowSize?: number;
|
|
237
234
|
subRowsName?: string;
|
|
238
235
|
EmptyFallback?: ReactNode;
|
|
239
|
-
ErrorFallback?: ReactNode;
|
|
240
236
|
defaultHeaderComp?: ComponentType<{
|
|
241
237
|
column: any;
|
|
242
238
|
children: React.ReactNode;
|
|
@@ -246,6 +242,15 @@ export declare interface CsDataTableProps<T> {
|
|
|
246
242
|
isFetchingNextPage?: boolean;
|
|
247
243
|
}
|
|
248
244
|
|
|
245
|
+
export declare function CsDataTable<T>(props: CsDataTableProps<T>): JSX.Element;
|
|
246
|
+
|
|
247
|
+
export declare interface CsDataTableProps<T> extends CsDataBaseTableProps<T> {
|
|
248
|
+
isLoading?: boolean;
|
|
249
|
+
isError?: boolean;
|
|
250
|
+
defaultRowSize?: number;
|
|
251
|
+
ErrorFallback?: ReactNode;
|
|
252
|
+
}
|
|
253
|
+
|
|
249
254
|
export declare function CsDatePicker({ children, className, ...props }: PropsWithChildren<CsCalendarProps>): default_2.JSX.Element;
|
|
250
255
|
|
|
251
256
|
export declare type CsDatePickerProps = PropsWithChildren<CsCalendarProps>;
|
|
@@ -765,6 +770,14 @@ export declare type CsSkeletonProps = React.ComponentProps<"div"> & {
|
|
|
765
770
|
radius?: 'default' | 'max';
|
|
766
771
|
};
|
|
767
772
|
|
|
773
|
+
export declare function CsSkeletonTable<T>({ columns, rowCount, className, }: CsSkeletonTableProps<T>): JSX.Element;
|
|
774
|
+
|
|
775
|
+
export declare interface CsSkeletonTableProps<T> {
|
|
776
|
+
columns: TableColumnDef<T>[];
|
|
777
|
+
rowCount?: number;
|
|
778
|
+
className?: string;
|
|
779
|
+
}
|
|
780
|
+
|
|
768
781
|
export declare const csSkeletonVariants: (props?: ({
|
|
769
782
|
radius?: "default" | "max" | null | undefined;
|
|
770
783
|
} & ClassProp) | undefined) => string;
|