sellmate-design-system-react 9.0.0-beta.79 → 9.0.0-beta.80
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/AGENTS.md +2027 -10
- package/dist/components/SExpansionItem/README.md +2 -2
- package/dist/components/SExpansionItem/SExpansionItem.d.ts +8 -2
- package/dist/components/SListItem/README.md +2 -2
- package/dist/components/SListItem/SListItem.d.ts +8 -2
- package/dist/components/SSkeleton/README.md +55 -0
- package/dist/components/SSkeleton/SSkeleton.d.ts +39 -0
- package/dist/components/SSkeleton/index.d.ts +2 -0
- package/dist/components/SSkeleton/skeleton.config.d.ts +22 -0
- package/dist/index.cjs +173 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +170 -9
- package/dist/index.js.map +1 -1
- package/dist/llms-full.txt +2203 -129
- package/dist/llms.txt +2029 -12
- package/dist/recipes/CategoryManagePage.d.ts +1 -0
- package/dist/recipes/ConsultConsolePage.d.ts +1 -0
- package/dist/recipes/ProductBulkUploadPage.d.ts +1 -0
- package/dist/recipes/ProductOverlayPage.d.ts +1 -0
- package/dist/recipes/SalesDashboardPage.d.ts +1 -0
- package/dist/recipes/SettingsPage.d.ts +1 -0
- package/dist/recipes/StoreSetupPage.d.ts +1 -0
- package/dist/recipes/api.d.ts +129 -0
- package/dist/styles.css +124 -0
- package/dist/theme.css +9 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function CategoryManagePage(): import("react").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function ConsultConsolePage(): import("react").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function ProductBulkUploadPage(): import("react").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function ProductOverlayPage(): import("react").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function SalesDashboardPage(): import("react").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function SettingsPage(): import("react").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function StoreSetupPage(): import("react").JSX.Element;
|
package/dist/recipes/api.d.ts
CHANGED
|
@@ -89,3 +89,132 @@ export declare function useExcelFiles(query: {
|
|
|
89
89
|
total: number;
|
|
90
90
|
lastPage: number;
|
|
91
91
|
};
|
|
92
|
+
/** 대시보드 지표 — 조회 기간(`period`)을 받아 요약 값·차트 데이터를 한 번에 돌려준다 */
|
|
93
|
+
export declare function useSalesDashboard(query: {
|
|
94
|
+
period: SDateRangeValue;
|
|
95
|
+
channel?: string;
|
|
96
|
+
}): {
|
|
97
|
+
summary: {
|
|
98
|
+
value: number;
|
|
99
|
+
label: string;
|
|
100
|
+
unit: string;
|
|
101
|
+
change: number;
|
|
102
|
+
}[];
|
|
103
|
+
daily: {
|
|
104
|
+
categories: string[];
|
|
105
|
+
dates: string[];
|
|
106
|
+
data: number[];
|
|
107
|
+
};
|
|
108
|
+
channelShare: {
|
|
109
|
+
name: string;
|
|
110
|
+
value: number;
|
|
111
|
+
}[];
|
|
112
|
+
topProducts: {
|
|
113
|
+
categories: string[];
|
|
114
|
+
data: number[];
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
export declare const CHANNEL_OPTIONS: {
|
|
118
|
+
label: string;
|
|
119
|
+
value: string;
|
|
120
|
+
}[];
|
|
121
|
+
/** 카테고리 트리 — 대분류 아래 중분류가 달린다 */
|
|
122
|
+
export interface Category {
|
|
123
|
+
id: string;
|
|
124
|
+
name: string;
|
|
125
|
+
code: string;
|
|
126
|
+
productCount: number;
|
|
127
|
+
children?: Category[];
|
|
128
|
+
}
|
|
129
|
+
export declare function useCategoryTree(): Category[];
|
|
130
|
+
/** 고른 카테고리 하나 — 상위 이름을 경로로 붙여 돌려준다 */
|
|
131
|
+
export declare function useCategory(id: string): {
|
|
132
|
+
path: string;
|
|
133
|
+
useYn: string;
|
|
134
|
+
memo: string;
|
|
135
|
+
id: string;
|
|
136
|
+
name: string;
|
|
137
|
+
code: string;
|
|
138
|
+
productCount: number;
|
|
139
|
+
children?: Category[];
|
|
140
|
+
} | undefined;
|
|
141
|
+
export declare function saveCategory(values: Record<string, unknown>): Promise<void>;
|
|
142
|
+
export declare function removeCategory(id: string): Promise<void>;
|
|
143
|
+
export declare const SETTINGS_TABS: {
|
|
144
|
+
label: string;
|
|
145
|
+
value: string;
|
|
146
|
+
}[];
|
|
147
|
+
/** 환경 설정 — 탭마다 따로 읽고 따로 저장한다 */
|
|
148
|
+
export declare function useSettings(tab: string): Record<string, unknown>;
|
|
149
|
+
export declare function saveSettings(tab: string, values: Record<string, unknown>): Promise<void>;
|
|
150
|
+
/** 엑셀 일괄 등록 — 올린 파일을 검증한 결과 */
|
|
151
|
+
export interface UploadRow {
|
|
152
|
+
id: number;
|
|
153
|
+
row: number;
|
|
154
|
+
name: string;
|
|
155
|
+
price: number;
|
|
156
|
+
error?: string;
|
|
157
|
+
[key: string]: unknown;
|
|
158
|
+
}
|
|
159
|
+
export declare function validateUpload(values: Record<string, unknown>): Promise<UploadRow[]>;
|
|
160
|
+
export declare function downloadErrorRows(rows: UploadRow[]): Promise<void>;
|
|
161
|
+
export declare function commitUpload(rows: UploadRow[]): Promise<number>;
|
|
162
|
+
/** 초기 설정 — 단계마다 따로 저장하고, 저장한 단계는 완료로 남는다 */
|
|
163
|
+
export declare const SETUP_STEPS: {
|
|
164
|
+
label: string;
|
|
165
|
+
value: string;
|
|
166
|
+
group: string;
|
|
167
|
+
}[];
|
|
168
|
+
/**
|
|
169
|
+
* 서버가 아는 단계별 상태 — 완료한 단계와 다시 확인해야 하는 단계.
|
|
170
|
+
* 오류는 완료한 단계에도 남을 수 있다 (연동은 끝냈지만 인증이 만료된 판매처 등).
|
|
171
|
+
*/
|
|
172
|
+
export declare function useSetupStatus(): {
|
|
173
|
+
completed: string[];
|
|
174
|
+
error: string[];
|
|
175
|
+
};
|
|
176
|
+
export declare function useSetupStep(step: string): Record<string, unknown>;
|
|
177
|
+
export declare function saveSetupStep(step: string, values: Record<string, unknown>): Promise<void>;
|
|
178
|
+
/** 상담 — 왼쪽 목록의 한 건 */
|
|
179
|
+
export interface Consult {
|
|
180
|
+
id: string;
|
|
181
|
+
customer: string;
|
|
182
|
+
topic: string;
|
|
183
|
+
lastMessage: string;
|
|
184
|
+
status: 'waiting' | 'active' | 'closed';
|
|
185
|
+
}
|
|
186
|
+
export declare const CONSULTS: Consult[];
|
|
187
|
+
/** 대화 한 줄 — 사람이 보낸 메시지이거나, 대화 중간에 시스템이 알리는 사실이다 */
|
|
188
|
+
export type ChatEntry = {
|
|
189
|
+
kind: 'message';
|
|
190
|
+
id: string;
|
|
191
|
+
direction: 'incoming' | 'outgoing';
|
|
192
|
+
/** YYYY-MM-DD — 날짜가 바뀌는 자리에 구분선을 끼운다 */
|
|
193
|
+
date: string;
|
|
194
|
+
time: string;
|
|
195
|
+
text?: string;
|
|
196
|
+
variant?: 'default' | 'template';
|
|
197
|
+
read?: boolean;
|
|
198
|
+
file?: {
|
|
199
|
+
name: string;
|
|
200
|
+
size: number;
|
|
201
|
+
};
|
|
202
|
+
} | {
|
|
203
|
+
kind: 'system';
|
|
204
|
+
id: string;
|
|
205
|
+
date: string;
|
|
206
|
+
text: string;
|
|
207
|
+
};
|
|
208
|
+
export declare function useConsultMessages(consultId: string): ChatEntry[];
|
|
209
|
+
/** 답변 템플릿 — 분류마다 여러 개 */
|
|
210
|
+
export declare const REPLY_TEMPLATES: {
|
|
211
|
+
id: string;
|
|
212
|
+
name: string;
|
|
213
|
+
items: {
|
|
214
|
+
id: string;
|
|
215
|
+
title: string;
|
|
216
|
+
body: string;
|
|
217
|
+
}[];
|
|
218
|
+
}[];
|
|
219
|
+
export declare function sendChatMessage(consultId: string, text: string): Promise<void>;
|
|
220
|
+
export declare function closeConsult(consultId: string): Promise<void>;
|
package/dist/styles.css
CHANGED
|
@@ -423,6 +423,9 @@
|
|
|
423
423
|
--animate-floating-out-bottom: floating-out-bottom 0.15s ease-in forwards;
|
|
424
424
|
--animate-floating-out-left: floating-out-left 0.15s ease-in forwards;
|
|
425
425
|
--animate-floating-out-right: floating-out-right 0.15s ease-in forwards;
|
|
426
|
+
--animate-skeleton-wave: skeleton-wave 1.5s linear 0.5s infinite;
|
|
427
|
+
--animate-skeleton-pulse: skeleton-pulse 1.5s ease-in-out 0.5s infinite;
|
|
428
|
+
--animate-skeleton-fade: skeleton-fade 1.5s linear 0.5s infinite;
|
|
426
429
|
}
|
|
427
430
|
}
|
|
428
431
|
@layer base {
|
|
@@ -870,6 +873,12 @@
|
|
|
870
873
|
.mt-\[24px\] {
|
|
871
874
|
margin-top: 24px;
|
|
872
875
|
}
|
|
876
|
+
.mt-\[var\(--cmp-chatMessage-group-message-gap\)\] {
|
|
877
|
+
margin-top: var(--cmp-chatMessage-group-message-gap);
|
|
878
|
+
}
|
|
879
|
+
.mt-\[var\(--cmp-chatMessage-group-system-gap\)\] {
|
|
880
|
+
margin-top: var(--cmp-chatMessage-group-system-gap);
|
|
881
|
+
}
|
|
873
882
|
.mt-\[var\(--cmp-guide-contents-gap\)\] {
|
|
874
883
|
margin-top: var(--cmp-guide-contents-gap);
|
|
875
884
|
}
|
|
@@ -1274,6 +1283,9 @@
|
|
|
1274
1283
|
.min-h-\[var\(--cmp-datepicker-calendar-day-circle-size\)\] {
|
|
1275
1284
|
min-height: var(--cmp-datepicker-calendar-day-circle-size);
|
|
1276
1285
|
}
|
|
1286
|
+
.min-h-full {
|
|
1287
|
+
min-height: 100%;
|
|
1288
|
+
}
|
|
1277
1289
|
.min-h-screen {
|
|
1278
1290
|
min-height: 100vh;
|
|
1279
1291
|
}
|
|
@@ -1487,6 +1499,9 @@
|
|
|
1487
1499
|
.w-sd-8 {
|
|
1488
1500
|
width: var(--spacing-sd-8);
|
|
1489
1501
|
}
|
|
1502
|
+
.max-w-\[280px\] {
|
|
1503
|
+
max-width: 280px;
|
|
1504
|
+
}
|
|
1490
1505
|
.max-w-\[360px\] {
|
|
1491
1506
|
max-width: 360px;
|
|
1492
1507
|
}
|
|
@@ -1592,6 +1607,9 @@
|
|
|
1592
1607
|
.flex-none {
|
|
1593
1608
|
flex: none;
|
|
1594
1609
|
}
|
|
1610
|
+
.flex-shrink {
|
|
1611
|
+
flex-shrink: 1;
|
|
1612
|
+
}
|
|
1595
1613
|
.flex-shrink-0 {
|
|
1596
1614
|
flex-shrink: 0;
|
|
1597
1615
|
}
|
|
@@ -1654,6 +1672,10 @@
|
|
|
1654
1672
|
--tw-translate-y: calc(calc(1 / 2 * 100%) * -1);
|
|
1655
1673
|
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
1656
1674
|
}
|
|
1675
|
+
.scale-y-50 {
|
|
1676
|
+
--tw-scale-y: 50%;
|
|
1677
|
+
scale: var(--tw-scale-x) var(--tw-scale-y);
|
|
1678
|
+
}
|
|
1657
1679
|
.scale-\[0\.3\] {
|
|
1658
1680
|
scale: 0.3;
|
|
1659
1681
|
}
|
|
@@ -1708,6 +1730,15 @@
|
|
|
1708
1730
|
.animate-modal-shake {
|
|
1709
1731
|
animation: var(--animate-modal-shake);
|
|
1710
1732
|
}
|
|
1733
|
+
.animate-skeleton-fade {
|
|
1734
|
+
animation: var(--animate-skeleton-fade);
|
|
1735
|
+
}
|
|
1736
|
+
.animate-skeleton-pulse {
|
|
1737
|
+
animation: var(--animate-skeleton-pulse);
|
|
1738
|
+
}
|
|
1739
|
+
.animate-skeleton-wave {
|
|
1740
|
+
animation: var(--animate-skeleton-wave);
|
|
1741
|
+
}
|
|
1711
1742
|
.cursor-col-resize {
|
|
1712
1743
|
cursor: col-resize;
|
|
1713
1744
|
}
|
|
@@ -1729,6 +1760,9 @@
|
|
|
1729
1760
|
.cursor-text {
|
|
1730
1761
|
cursor: text;
|
|
1731
1762
|
}
|
|
1763
|
+
.cursor-wait {
|
|
1764
|
+
cursor: wait;
|
|
1765
|
+
}
|
|
1732
1766
|
.touch-none {
|
|
1733
1767
|
touch-action: none;
|
|
1734
1768
|
}
|
|
@@ -1747,18 +1781,30 @@
|
|
|
1747
1781
|
.\[scrollbar-width\:none\] {
|
|
1748
1782
|
scrollbar-width: none;
|
|
1749
1783
|
}
|
|
1784
|
+
.list-disc {
|
|
1785
|
+
list-style-type: disc;
|
|
1786
|
+
}
|
|
1750
1787
|
.list-none {
|
|
1751
1788
|
list-style-type: none;
|
|
1752
1789
|
}
|
|
1753
1790
|
.grid-cols-1 {
|
|
1754
1791
|
grid-template-columns: repeat(1, minmax(0, 1fr));
|
|
1755
1792
|
}
|
|
1793
|
+
.grid-cols-2 {
|
|
1794
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
1795
|
+
}
|
|
1796
|
+
.grid-cols-4 {
|
|
1797
|
+
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
1798
|
+
}
|
|
1756
1799
|
.grid-cols-7 {
|
|
1757
1800
|
grid-template-columns: repeat(7, minmax(0, 1fr));
|
|
1758
1801
|
}
|
|
1759
1802
|
.grid-cols-\[200px_1fr\] {
|
|
1760
1803
|
grid-template-columns: 200px 1fr;
|
|
1761
1804
|
}
|
|
1805
|
+
.grid-cols-\[240px_auto_1fr\] {
|
|
1806
|
+
grid-template-columns: 240px auto 1fr;
|
|
1807
|
+
}
|
|
1762
1808
|
.grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,1fr\)\] {
|
|
1763
1809
|
grid-template-columns: minmax(0,1fr) minmax(0,1fr);
|
|
1764
1810
|
}
|
|
@@ -3356,6 +3402,9 @@
|
|
|
3356
3402
|
.px-\(--cmp-listDraggableItem-paddingX\) {
|
|
3357
3403
|
padding-inline: var(--cmp-listDraggableItem-paddingX);
|
|
3358
3404
|
}
|
|
3405
|
+
.px-\(--cmp-listItem-paddingX\) {
|
|
3406
|
+
padding-inline: var(--cmp-listItem-paddingX);
|
|
3407
|
+
}
|
|
3359
3408
|
.px-\(--cmp-pageHeader-paddingX\) {
|
|
3360
3409
|
padding-inline: var(--cmp-pageHeader-paddingX);
|
|
3361
3410
|
}
|
|
@@ -3482,6 +3531,9 @@
|
|
|
3482
3531
|
.px-sd-16 {
|
|
3483
3532
|
padding-inline: var(--spacing-sd-16);
|
|
3484
3533
|
}
|
|
3534
|
+
.px-sd-24 {
|
|
3535
|
+
padding-inline: var(--spacing-sd-24);
|
|
3536
|
+
}
|
|
3485
3537
|
.py-\(--cmp-calendarBoard-dayEvent-header-paddingY\) {
|
|
3486
3538
|
padding-block: var(--cmp-calendarBoard-dayEvent-header-paddingY);
|
|
3487
3539
|
}
|
|
@@ -3632,6 +3684,9 @@
|
|
|
3632
3684
|
.py-sd-24 {
|
|
3633
3685
|
padding-block: var(--spacing-sd-24);
|
|
3634
3686
|
}
|
|
3687
|
+
.py-sd-48 {
|
|
3688
|
+
padding-block: var(--spacing-sd-48);
|
|
3689
|
+
}
|
|
3635
3690
|
.pt-\(--cmp-calendarBoard-dayCard-header-paddingTop\) {
|
|
3636
3691
|
padding-top: var(--cmp-calendarBoard-dayCard-header-paddingTop);
|
|
3637
3692
|
}
|
|
@@ -3677,6 +3732,9 @@
|
|
|
3677
3732
|
.pr-\[var\(--cmp-overlay-header-paddingX\)\] {
|
|
3678
3733
|
padding-right: var(--cmp-overlay-header-paddingX);
|
|
3679
3734
|
}
|
|
3735
|
+
.pr-sd-4 {
|
|
3736
|
+
padding-right: var(--spacing-sd-4);
|
|
3737
|
+
}
|
|
3680
3738
|
.pb-\(--cmp-calendarBoard-dayCard-grid-paddingBottom\) {
|
|
3681
3739
|
padding-bottom: var(--cmp-calendarBoard-dayCard-grid-paddingBottom);
|
|
3682
3740
|
}
|
|
@@ -3743,6 +3801,12 @@
|
|
|
3743
3801
|
.pl-\[var\(--cmp-overlay-header-paddingX\)\] {
|
|
3744
3802
|
padding-left: var(--cmp-overlay-header-paddingX);
|
|
3745
3803
|
}
|
|
3804
|
+
.pl-sd-4 {
|
|
3805
|
+
padding-left: var(--spacing-sd-4);
|
|
3806
|
+
}
|
|
3807
|
+
.pl-sd-16 {
|
|
3808
|
+
padding-left: var(--spacing-sd-16);
|
|
3809
|
+
}
|
|
3746
3810
|
.pl-sd-24 {
|
|
3747
3811
|
padding-left: var(--spacing-sd-24);
|
|
3748
3812
|
}
|
|
@@ -4398,6 +4462,9 @@
|
|
|
4398
4462
|
.text-link-accent {
|
|
4399
4463
|
color: var(--color-link-accent);
|
|
4400
4464
|
}
|
|
4465
|
+
.text-oceanblue-75 {
|
|
4466
|
+
color: var(--color-oceanblue-75);
|
|
4467
|
+
}
|
|
4401
4468
|
.text-red-75 {
|
|
4402
4469
|
color: var(--color-red-75);
|
|
4403
4470
|
}
|
|
@@ -5611,6 +5678,16 @@
|
|
|
5611
5678
|
scrollbar-color: var(--color-grey-45) var(--color-white);
|
|
5612
5679
|
}
|
|
5613
5680
|
}
|
|
5681
|
+
.motion-reduce\:hidden {
|
|
5682
|
+
@media (prefers-reduced-motion: reduce) {
|
|
5683
|
+
display: none;
|
|
5684
|
+
}
|
|
5685
|
+
}
|
|
5686
|
+
.motion-reduce\:animate-none {
|
|
5687
|
+
@media (prefers-reduced-motion: reduce) {
|
|
5688
|
+
animation: none;
|
|
5689
|
+
}
|
|
5690
|
+
}
|
|
5614
5691
|
.motion-reduce\:transition-none {
|
|
5615
5692
|
@media (prefers-reduced-motion: reduce) {
|
|
5616
5693
|
transition-property: none;
|
|
@@ -6454,6 +6531,11 @@
|
|
|
6454
6531
|
flex: 1;
|
|
6455
6532
|
}
|
|
6456
6533
|
}
|
|
6534
|
+
.\[\&\>div\:last-child\]\:overflow-y-auto {
|
|
6535
|
+
&>div:last-child {
|
|
6536
|
+
overflow-y: auto;
|
|
6537
|
+
}
|
|
6538
|
+
}
|
|
6457
6539
|
.\[\&\>svg\]\:w-full\! {
|
|
6458
6540
|
&>svg {
|
|
6459
6541
|
width: 100% !important;
|
|
@@ -9415,6 +9497,30 @@
|
|
|
9415
9497
|
transform: translateX(-4px);
|
|
9416
9498
|
}
|
|
9417
9499
|
}
|
|
9500
|
+
@keyframes skeleton-wave {
|
|
9501
|
+
0% {
|
|
9502
|
+
transform: translateX(-100%);
|
|
9503
|
+
}
|
|
9504
|
+
100% {
|
|
9505
|
+
transform: translateX(100%);
|
|
9506
|
+
}
|
|
9507
|
+
}
|
|
9508
|
+
@keyframes skeleton-pulse {
|
|
9509
|
+
0%, 100% {
|
|
9510
|
+
transform: scale(1);
|
|
9511
|
+
}
|
|
9512
|
+
50% {
|
|
9513
|
+
transform: scale(0.85);
|
|
9514
|
+
}
|
|
9515
|
+
}
|
|
9516
|
+
@keyframes skeleton-fade {
|
|
9517
|
+
0%, 100% {
|
|
9518
|
+
opacity: 1;
|
|
9519
|
+
}
|
|
9520
|
+
50% {
|
|
9521
|
+
opacity: 0.4;
|
|
9522
|
+
}
|
|
9523
|
+
}
|
|
9418
9524
|
@property --tw-border-spacing-x {
|
|
9419
9525
|
syntax: "<length>";
|
|
9420
9526
|
inherits: false;
|
|
@@ -9440,6 +9546,21 @@
|
|
|
9440
9546
|
inherits: false;
|
|
9441
9547
|
initial-value: 0;
|
|
9442
9548
|
}
|
|
9549
|
+
@property --tw-scale-x {
|
|
9550
|
+
syntax: "*";
|
|
9551
|
+
inherits: false;
|
|
9552
|
+
initial-value: 1;
|
|
9553
|
+
}
|
|
9554
|
+
@property --tw-scale-y {
|
|
9555
|
+
syntax: "*";
|
|
9556
|
+
inherits: false;
|
|
9557
|
+
initial-value: 1;
|
|
9558
|
+
}
|
|
9559
|
+
@property --tw-scale-z {
|
|
9560
|
+
syntax: "*";
|
|
9561
|
+
inherits: false;
|
|
9562
|
+
initial-value: 1;
|
|
9563
|
+
}
|
|
9443
9564
|
@property --tw-rotate-x {
|
|
9444
9565
|
syntax: "*";
|
|
9445
9566
|
inherits: false;
|
|
@@ -9626,6 +9747,9 @@
|
|
|
9626
9747
|
--tw-translate-x: 0;
|
|
9627
9748
|
--tw-translate-y: 0;
|
|
9628
9749
|
--tw-translate-z: 0;
|
|
9750
|
+
--tw-scale-x: 1;
|
|
9751
|
+
--tw-scale-y: 1;
|
|
9752
|
+
--tw-scale-z: 1;
|
|
9629
9753
|
--tw-rotate-x: initial;
|
|
9630
9754
|
--tw-rotate-y: initial;
|
|
9631
9755
|
--tw-rotate-z: initial;
|
package/dist/theme.css
CHANGED
|
@@ -2446,6 +2446,11 @@
|
|
|
2446
2446
|
--animate-floating-out-bottom: floating-out-bottom 0.15s ease-in forwards;
|
|
2447
2447
|
--animate-floating-out-left: floating-out-left 0.15s ease-in forwards;
|
|
2448
2448
|
--animate-floating-out-right: floating-out-right 0.15s ease-in forwards;
|
|
2449
|
+
|
|
2450
|
+
/* 스켈레톤 (Quasar QSkeleton 포팅). 속도는 SSkeleton 이 animation-duration 으로 덮어쓴다 */
|
|
2451
|
+
--animate-skeleton-wave: skeleton-wave 1.5s linear 0.5s infinite;
|
|
2452
|
+
--animate-skeleton-pulse: skeleton-pulse 1.5s ease-in-out 0.5s infinite;
|
|
2453
|
+
--animate-skeleton-fade: skeleton-fade 1.5s linear 0.5s infinite;
|
|
2449
2454
|
}
|
|
2450
2455
|
@keyframes linear-indeterminate {
|
|
2451
2456
|
0% { transform: translateX(-100%) scaleX(0.2); }
|
|
@@ -2491,3 +2496,7 @@
|
|
|
2491
2496
|
@keyframes floating-out-bottom { from { opacity: 1; transform: translateY(0); } to { opacity: 0; transform: translateY(-4px); } }
|
|
2492
2497
|
@keyframes floating-out-left { from { opacity: 1; transform: translateX(0); } to { opacity: 0; transform: translateX(4px); } }
|
|
2493
2498
|
@keyframes floating-out-right { from { opacity: 1; transform: translateX(0); } to { opacity: 0; transform: translateX(-4px); } }
|
|
2499
|
+
/* 스켈레톤: wave 는 하이라이트 띠가 왼→오로 지나가고, pulse 는 크기, fade 는 투명도가 숨쉬듯 바뀐다 */
|
|
2500
|
+
@keyframes skeleton-wave { 0% { transform: translateX(-100%); } 100% { transform: translateX(100%); } }
|
|
2501
|
+
@keyframes skeleton-pulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(0.85); } }
|
|
2502
|
+
@keyframes skeleton-fade { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } }
|