@kupola/kupola 2.0.0-alpha.1 → 2.0.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -5
- package/README.zh-CN.md +6 -4
- package/dist/css/components.css +273 -0
- package/dist/css/components.min.css +1 -0
- package/dist/css/index.css +14 -0
- package/dist/css/index.min.css +1 -0
- package/dist/css/responsive.css +153 -0
- package/dist/css/responsive.min.css +1 -0
- package/dist/css/tokens.css +191 -0
- package/dist/css/tokens.min.css +1 -0
- package/dist/{kupola-core-badge.cjs.js → kupola-core-badge.cjs} +1 -1
- package/dist/kupola-core-badge.esm.js +1 -1
- package/dist/kupola-core-datepicker.cjs +28 -0
- package/dist/kupola-core-datepicker.esm.js +9 -9
- package/dist/kupola-core-dialog.cjs +13 -0
- package/dist/kupola-core-dialog.esm.js +8 -8
- package/dist/kupola-core-drawer.cjs +15 -0
- package/dist/kupola-core-drawer.esm.js +5 -5
- package/dist/kupola-core-dropdown.cjs +11 -0
- package/dist/kupola-core-dropdown.esm.js +4 -4
- package/dist/kupola-core-i18n.cjs +1 -0
- package/dist/kupola-core-i18n.esm.js +1 -0
- package/dist/kupola-core-modal.cjs +15 -0
- package/dist/kupola-core-modal.esm.js +6 -6
- package/dist/kupola-core-notification.cjs +1 -0
- package/dist/kupola-core-notification.esm.js +1 -1
- package/dist/{kupola-core-numberinput.cjs.js → kupola-core-numberinput.cjs} +6 -5
- package/dist/kupola-core-numberinput.esm.js +6 -5
- package/dist/kupola-core-select.cjs +16 -0
- package/dist/kupola-core-select.esm.js +8 -7
- package/dist/kupola-core-table.cjs +1 -0
- package/dist/kupola-core-table.esm.js +1 -1
- package/dist/kupola-core-timepicker.cjs +22 -0
- package/dist/kupola-core-timepicker.esm.js +3 -3
- package/dist/kupola-core.cjs +1 -0
- package/dist/kupola-core.esm.js +1 -1
- package/package.json +76 -54
- package/packages/core/__tests__/component.test.js +4 -4
- package/packages/core/__tests__/components/breadcrumb.test.js +3 -3
- package/packages/core/__tests__/components/calendar.test.js +4 -4
- package/packages/core/__tests__/components/carousel.test.js +20 -20
- package/packages/core/__tests__/components/collapse.test.js +10 -10
- package/packages/core/__tests__/components/colorpicker.test.js +4 -4
- package/packages/core/__tests__/components/datepicker.test.js +1 -1
- package/packages/core/__tests__/components/dropdown.test.js +1 -1
- package/packages/core/__tests__/components/dynamictags.test.js +21 -21
- package/packages/core/__tests__/components/form.test.js +2 -2
- package/packages/core/__tests__/components/heatmap.test.js +1 -1
- package/packages/core/__tests__/components/imagepreview.test.js +1 -1
- package/packages/core/__tests__/components/menu.test.js +12 -12
- package/packages/core/__tests__/components/pagination.test.js +1 -1
- package/packages/core/__tests__/components/radio.test.js +4 -4
- package/packages/core/__tests__/components/select.test.js +7 -7
- package/packages/core/__tests__/components/table.test.js +24 -24
- package/packages/core/__tests__/components/timeline.test.js +7 -7
- package/packages/core/__tests__/components/tree.test.js +2 -2
- package/packages/core/__tests__/components/validation.test.js +2 -2
- package/packages/core/__tests__/components/virtuallist.test.js +3 -3
- package/packages/core/__tests__/core.test.js +3 -3
- package/packages/core/__tests__/server.test.js +3 -3
- package/packages/core/__tests__/template.test.js +2 -2
- package/packages/core/package.json +52 -52
- package/packages/core/src/batch.js +1 -1
- package/packages/core/src/components/alert.js +3 -3
- package/packages/core/src/components/avatar.js +5 -5
- package/packages/core/src/components/badge.js +5 -5
- package/packages/core/src/components/calendar.js +19 -19
- package/packages/core/src/components/carousel.js +9 -9
- package/packages/core/src/components/checkbox.js +6 -6
- package/packages/core/src/components/collapse.js +7 -7
- package/packages/core/src/components/colorpicker.js +10 -10
- package/packages/core/src/components/countdown.js +7 -7
- package/packages/core/src/components/datepicker.js +36 -31
- package/packages/core/src/components/dialog.js +22 -15
- package/packages/core/src/components/drawer.js +11 -9
- package/packages/core/src/components/dropdown.js +41 -29
- package/packages/core/src/components/dynamictags.js +10 -10
- package/packages/core/src/components/empty.js +1 -1
- package/packages/core/src/components/fileupload.js +17 -17
- package/packages/core/src/components/form.js +15 -15
- package/packages/core/src/components/heatmap.js +12 -12
- package/packages/core/src/components/icons.js +3 -3
- package/packages/core/src/components/imagepreview.js +16 -16
- package/packages/core/src/components/input.js +5 -5
- package/packages/core/src/components/menu.js +1 -1
- package/packages/core/src/components/message.js +9 -9
- package/packages/core/src/components/modal.js +30 -8
- package/packages/core/src/components/notification.js +15 -8
- package/packages/core/src/components/numberinput.js +20 -11
- package/packages/core/src/components/pagination.js +5 -5
- package/packages/core/src/components/progress.js +4 -4
- package/packages/core/src/components/radio.js +3 -3
- package/packages/core/src/components/select.js +67 -50
- package/packages/core/src/components/skeleton.js +2 -2
- package/packages/core/src/components/slider.js +5 -5
- package/packages/core/src/components/statcard.js +4 -4
- package/packages/core/src/components/switch.js +4 -4
- package/packages/core/src/components/table.js +82 -80
- package/packages/core/src/components/tabs.js +6 -6
- package/packages/core/src/components/tag.js +3 -3
- package/packages/core/src/components/textarea.js +5 -5
- package/packages/core/src/components/timepicker.js +16 -15
- package/packages/core/src/components/tooltip.js +27 -27
- package/packages/core/src/components/tree.js +8 -8
- package/packages/core/src/components/validation.js +26 -26
- package/packages/core/src/components/virtuallist.js +4 -4
- package/packages/core/src/devtools.js +303 -0
- package/packages/core/src/directives.js +28 -28
- package/packages/core/src/effect.js +8 -3
- package/packages/core/src/errors.js +80 -0
- package/packages/core/src/i18n.js +91 -0
- package/packages/core/src/index.js +15 -0
- package/packages/core/src/lazy.js +128 -0
- package/packages/core/src/render.js +12 -12
- package/packages/core/src/scheduler.js +1 -1
- package/packages/core/src/server.js +8 -8
- package/packages/core/src/signal.js +3 -0
- package/packages/core/src/theme.js +173 -0
- package/packages/css/components.css +273 -0
- package/packages/css/index.css +14 -0
- package/packages/css/responsive.css +153 -0
- package/packages/css/tokens.css +191 -0
- package/version.json +1 -1
- package/dist/kupola-core-datepicker.cjs.js +0 -28
- package/dist/kupola-core-dialog.cjs.js +0 -13
- package/dist/kupola-core-drawer.cjs.js +0 -15
- package/dist/kupola-core-dropdown.cjs.js +0 -11
- package/dist/kupola-core-modal.cjs.js +0 -15
- package/dist/kupola-core-notification.cjs.js +0 -1
- package/dist/kupola-core-select.cjs.js +0 -15
- package/dist/kupola-core-table.cjs.js +0 -1
- package/dist/kupola-core-timepicker.cjs.js +0 -22
- package/dist/kupola-core.cjs.js +0 -1
- /package/dist/{kupola-core-alert.cjs.js → kupola-core-alert.cjs} +0 -0
- /package/dist/{kupola-core-avatar.cjs.js → kupola-core-avatar.cjs} +0 -0
- /package/dist/{kupola-core-breadcrumb.cjs.js → kupola-core-breadcrumb.cjs} +0 -0
- /package/dist/{kupola-core-calendar.cjs.js → kupola-core-calendar.cjs} +0 -0
- /package/dist/{kupola-core-carousel.cjs.js → kupola-core-carousel.cjs} +0 -0
- /package/dist/{kupola-core-checkbox.cjs.js → kupola-core-checkbox.cjs} +0 -0
- /package/dist/{kupola-core-collapse.cjs.js → kupola-core-collapse.cjs} +0 -0
- /package/dist/{kupola-core-colorpicker.cjs.js → kupola-core-colorpicker.cjs} +0 -0
- /package/dist/{kupola-core-countdown.cjs.js → kupola-core-countdown.cjs} +0 -0
- /package/dist/{kupola-core-directives.cjs.js → kupola-core-directives.cjs} +0 -0
- /package/dist/{kupola-core-divider.cjs.js → kupola-core-divider.cjs} +0 -0
- /package/dist/{kupola-core-dynamictags.cjs.js → kupola-core-dynamictags.cjs} +0 -0
- /package/dist/{kupola-core-empty.cjs.js → kupola-core-empty.cjs} +0 -0
- /package/dist/{kupola-core-fileupload.cjs.js → kupola-core-fileupload.cjs} +0 -0
- /package/dist/{kupola-core-form.cjs.js → kupola-core-form.cjs} +0 -0
- /package/dist/{kupola-core-heatmap.cjs.js → kupola-core-heatmap.cjs} +0 -0
- /package/dist/{kupola-core-icons.cjs.js → kupola-core-icons.cjs} +0 -0
- /package/dist/{kupola-core-imagepreview.cjs.js → kupola-core-imagepreview.cjs} +0 -0
- /package/dist/{kupola-core-input.cjs.js → kupola-core-input.cjs} +0 -0
- /package/dist/{kupola-core-kbd.cjs.js → kupola-core-kbd.cjs} +0 -0
- /package/dist/{kupola-core-menu.cjs.js → kupola-core-menu.cjs} +0 -0
- /package/dist/{kupola-core-message.cjs.js → kupola-core-message.cjs} +0 -0
- /package/dist/{kupola-core-pagination.cjs.js → kupola-core-pagination.cjs} +0 -0
- /package/dist/{kupola-core-progress.cjs.js → kupola-core-progress.cjs} +0 -0
- /package/dist/{kupola-core-radio.cjs.js → kupola-core-radio.cjs} +0 -0
- /package/dist/{kupola-core-server.cjs.js → kupola-core-server.cjs} +0 -0
- /package/dist/{kupola-core-skeleton.cjs.js → kupola-core-skeleton.cjs} +0 -0
- /package/dist/{kupola-core-slider.cjs.js → kupola-core-slider.cjs} +0 -0
- /package/dist/{kupola-core-spin.cjs.js → kupola-core-spin.cjs} +0 -0
- /package/dist/{kupola-core-statcard.cjs.js → kupola-core-statcard.cjs} +0 -0
- /package/dist/{kupola-core-switch.cjs.js → kupola-core-switch.cjs} +0 -0
- /package/dist/{kupola-core-tabs.cjs.js → kupola-core-tabs.cjs} +0 -0
- /package/dist/{kupola-core-tag.cjs.js → kupola-core-tag.cjs} +0 -0
- /package/dist/{kupola-core-textarea.cjs.js → kupola-core-textarea.cjs} +0 -0
- /package/dist/{kupola-core-timeline.cjs.js → kupola-core-timeline.cjs} +0 -0
- /package/dist/{kupola-core-tooltip.cjs.js → kupola-core-tooltip.cjs} +0 -0
- /package/dist/{kupola-core-tree.cjs.js → kupola-core-tree.cjs} +0 -0
- /package/dist/{kupola-core-validation.cjs.js → kupola-core-validation.cjs} +0 -0
- /package/dist/{kupola-core-virtuallist.cjs.js → kupola-core-virtuallist.cjs} +0 -0
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
[中文文档](./README.zh-CN.md)
|
|
1
|
+
[中文文档](./README.zh-CN.md) | [Pages](https://kupola-cn.github.io/kupola/)
|
|
2
2
|
|
|
3
3
|

|
|
4
4
|

|
|
@@ -51,16 +51,18 @@ Or use the programmatic API:
|
|
|
51
51
|
|
|
52
52
|
## Installation
|
|
53
53
|
|
|
54
|
+
> **Current version**: `2.0.0-alpha.1` (pre-release). Use `@next` tag to install:
|
|
55
|
+
|
|
54
56
|
```bash
|
|
55
|
-
npm install @kupola/kupola # Full package
|
|
57
|
+
npm install @kupola/kupola@next # Full package
|
|
56
58
|
# Or core engine only
|
|
57
|
-
npm install @kupola/kupola/core # signal + template + render + SSR
|
|
59
|
+
npm install @kupola/kupola/core@next # signal + template + render + SSR
|
|
58
60
|
```
|
|
59
61
|
|
|
60
62
|
```bash
|
|
61
63
|
# CDN
|
|
62
|
-
https://cdn.jsdelivr.net/npm/@kupola/kupola/dist/kupola-core.esm.js
|
|
63
|
-
https://cdn.jsdelivr.net/npm/@kupola/kupola/dist/kupola-core.cjs.js
|
|
64
|
+
https://cdn.jsdelivr.net/npm/@kupola/kupola@next/dist/kupola-core.esm.js
|
|
65
|
+
https://cdn.jsdelivr.net/npm/@kupola/kupola@next/dist/kupola-core.cjs.js
|
|
64
66
|
```
|
|
65
67
|
|
|
66
68
|
---
|
package/README.zh-CN.md
CHANGED
|
@@ -51,16 +51,18 @@
|
|
|
51
51
|
|
|
52
52
|
## 安装
|
|
53
53
|
|
|
54
|
+
> **当前版本**:`2.0.0-alpha.1`(预发布版)。请使用 `@next` 标签安装:
|
|
55
|
+
|
|
54
56
|
```bash
|
|
55
|
-
npm install @kupola/kupola # 完整包
|
|
57
|
+
npm install @kupola/kupola@next # 完整包
|
|
56
58
|
# 或仅核心引擎
|
|
57
|
-
npm install @kupola/kupola/core # signal + template + render + SSR
|
|
59
|
+
npm install @kupola/kupola/core@next # signal + template + render + SSR
|
|
58
60
|
```
|
|
59
61
|
|
|
60
62
|
```bash
|
|
61
63
|
# CDN
|
|
62
|
-
https://cdn.jsdelivr.net/npm/@kupola/kupola/dist/kupola-core.esm.js
|
|
63
|
-
https://cdn.jsdelivr.net/npm/@kupola/kupola/dist/kupola-core.cjs.js
|
|
64
|
+
https://cdn.jsdelivr.net/npm/@kupola/kupola@next/dist/kupola-core.esm.js
|
|
65
|
+
https://cdn.jsdelivr.net/npm/@kupola/kupola@next/dist/kupola-core.cjs.js
|
|
64
66
|
```
|
|
65
67
|
|
|
66
68
|
---
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kupola Component Styles
|
|
3
|
+
* Core ds-* class definitions using design tokens.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/* ── Reset ────────────────────────────────────────────────── */
|
|
7
|
+
*, *::before, *::after { box-sizing: border-box; }
|
|
8
|
+
|
|
9
|
+
/* ── Base ─────────────────────────────────────────────────── */
|
|
10
|
+
body {
|
|
11
|
+
margin: 0;
|
|
12
|
+
background: var(--color-background);
|
|
13
|
+
color: var(--color-foreground);
|
|
14
|
+
font-family: var(--font-family-default);
|
|
15
|
+
font-size: var(--body-base-font-size);
|
|
16
|
+
line-height: var(--body-base-line-height);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* ── Button ───────────────────────────────────────────────── */
|
|
20
|
+
.ds-btn {
|
|
21
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
22
|
+
gap: var(--spacer-6); padding: 0 var(--spacer-12); height: 28px;
|
|
23
|
+
border-radius: var(--radius-4); border: 1px solid transparent;
|
|
24
|
+
cursor: pointer; user-select: none; white-space: nowrap;
|
|
25
|
+
font-size: var(--body-sm-font-size); font-weight: var(--font-weight-medium);
|
|
26
|
+
transition: background var(--transition-fast), color var(--transition-fast), border-color var(--transition-fast);
|
|
27
|
+
}
|
|
28
|
+
.ds-btn--sm { height: 24px; padding: 0 var(--spacer-8); font-size: var(--body-xs-font-size); }
|
|
29
|
+
.ds-btn--lg { height: 32px; padding: 0 var(--spacer-16); font-size: var(--body-base-font-size); }
|
|
30
|
+
.ds-btn--primary { background: var(--bg-brand); color: var(--text-onbrand); border-color: var(--bg-brand); }
|
|
31
|
+
.ds-btn--primary:hover { background: var(--bg-brand-hover); }
|
|
32
|
+
.ds-btn--secondary { background: var(--bg-overlay-l2); color: var(--text-default); border-color: var(--border-neutral-l1); }
|
|
33
|
+
.ds-btn--secondary:hover { background: var(--bg-overlay-l3); }
|
|
34
|
+
.ds-btn--tertiary { background: transparent; color: var(--text-default); }
|
|
35
|
+
.ds-btn--tertiary:hover { background: var(--bg-overlay-l2); }
|
|
36
|
+
.ds-btn--danger { background: var(--status-error-default); color: #fff; }
|
|
37
|
+
.ds-btn[disabled] { opacity: 0.5; cursor: not-allowed; }
|
|
38
|
+
|
|
39
|
+
/* ── Input ────────────────────────────────────────────────── */
|
|
40
|
+
.ds-input {
|
|
41
|
+
display: flex; align-items: center; gap: var(--spacer-8);
|
|
42
|
+
padding: 0 var(--spacer-12); height: 28px;
|
|
43
|
+
background: var(--bg-overlay-l1); border: 1px solid var(--border-neutral-l1);
|
|
44
|
+
border-radius: var(--radius-4); color: var(--text-default); width: 100%;
|
|
45
|
+
font-size: var(--body-sm-font-size);
|
|
46
|
+
}
|
|
47
|
+
.ds-input:focus-within { border-color: var(--bg-brand); }
|
|
48
|
+
.ds-input input { flex: 1; background: transparent; border: none; outline: none; color: inherit; font: inherit; }
|
|
49
|
+
.ds-input input::placeholder { color: var(--text-tertiary); }
|
|
50
|
+
.ds-input.is-error { border-color: var(--status-error-default); }
|
|
51
|
+
|
|
52
|
+
/* ── Modal ────────────────────────────────────────────────── */
|
|
53
|
+
.ds-modal-mask {
|
|
54
|
+
position: fixed; inset: 0; z-index: var(--z-index-modal);
|
|
55
|
+
background: rgba(0, 0, 0, 0.5);
|
|
56
|
+
display: none; align-items: center; justify-content: center;
|
|
57
|
+
}
|
|
58
|
+
.ds-modal-mask.is-visible { display: flex; }
|
|
59
|
+
.ds-modal {
|
|
60
|
+
background: var(--bg-base-secondary); border: 1px solid var(--border-neutral-l1);
|
|
61
|
+
border-radius: var(--radius-8); width: 100%; max-width: 480px;
|
|
62
|
+
outline: none;
|
|
63
|
+
}
|
|
64
|
+
.ds-modal__header {
|
|
65
|
+
display: flex; align-items: center; justify-content: space-between;
|
|
66
|
+
padding: var(--spacer-16) var(--spacer-24);
|
|
67
|
+
border-bottom: 1px solid var(--border-neutral-l1);
|
|
68
|
+
}
|
|
69
|
+
.ds-modal__title { font-size: var(--heading-sm-font-size); font-weight: var(--font-weight-strong); }
|
|
70
|
+
.ds-modal__close {
|
|
71
|
+
width: 28px; height: 28px; display: inline-flex; align-items: center; justify-content: center;
|
|
72
|
+
background: transparent; border: none; color: var(--icon-secondary);
|
|
73
|
+
cursor: pointer; border-radius: var(--radius-4);
|
|
74
|
+
}
|
|
75
|
+
.ds-modal__close:hover { background: var(--bg-overlay-l2); }
|
|
76
|
+
.ds-modal__body { padding: var(--spacer-16) var(--spacer-24); }
|
|
77
|
+
.ds-modal__footer {
|
|
78
|
+
display: flex; justify-content: flex-end; gap: var(--spacer-8);
|
|
79
|
+
padding: var(--spacer-12) var(--spacer-24);
|
|
80
|
+
border-top: 1px solid var(--border-neutral-l1);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/* ── Drawer ───────────────────────────────────────────────── */
|
|
84
|
+
.ds-drawer-mask {
|
|
85
|
+
position: fixed; inset: 0; z-index: var(--z-index-drawer);
|
|
86
|
+
background: rgba(0, 0, 0, 0.5); display: none;
|
|
87
|
+
}
|
|
88
|
+
.ds-drawer-mask.is-visible { display: block; }
|
|
89
|
+
.ds-drawer {
|
|
90
|
+
position: fixed; top: 0; right: 0; bottom: 0; z-index: var(--z-index-drawer);
|
|
91
|
+
width: 360px; max-width: 100vw;
|
|
92
|
+
background: var(--bg-base-secondary); border-left: 1px solid var(--border-neutral-l1);
|
|
93
|
+
display: flex; flex-direction: column;
|
|
94
|
+
transform: translateX(100%); transition: transform var(--transition-slow);
|
|
95
|
+
}
|
|
96
|
+
.ds-drawer.is-visible { transform: translateX(0); }
|
|
97
|
+
.ds-drawer__header {
|
|
98
|
+
display: flex; align-items: center; justify-content: space-between;
|
|
99
|
+
padding: var(--spacer-16) var(--spacer-24);
|
|
100
|
+
border-bottom: 1px solid var(--border-neutral-l1);
|
|
101
|
+
}
|
|
102
|
+
.ds-drawer__body { padding: var(--spacer-16) var(--spacer-24); flex: 1; overflow-y: auto; }
|
|
103
|
+
|
|
104
|
+
/* ── Dropdown ─────────────────────────────────────────────── */
|
|
105
|
+
.ds-dropdown { position: relative; display: inline-block; }
|
|
106
|
+
.ds-dropdown__menu {
|
|
107
|
+
position: absolute; top: calc(100% + 4px); left: 0; min-width: 160px;
|
|
108
|
+
background: var(--bg-base-secondary); border: 1px solid var(--border-neutral-l2);
|
|
109
|
+
border-radius: var(--radius-4); box-shadow: 0 4px 16px rgba(0,0,0,0.2);
|
|
110
|
+
z-index: var(--z-index-dropdown); display: none; padding: var(--spacer-4);
|
|
111
|
+
}
|
|
112
|
+
.ds-dropdown__menu.is-open { display: block; }
|
|
113
|
+
.ds-dropdown__item {
|
|
114
|
+
display: flex; align-items: center; padding: var(--spacer-6) var(--spacer-8);
|
|
115
|
+
border-radius: var(--radius-2); color: var(--text-default);
|
|
116
|
+
font-size: var(--body-sm-font-size); cursor: pointer;
|
|
117
|
+
}
|
|
118
|
+
.ds-dropdown__item:hover { background: var(--bg-overlay-l1); }
|
|
119
|
+
|
|
120
|
+
/* ── Tooltip ──────────────────────────────────────────────── */
|
|
121
|
+
.ds-tooltip {
|
|
122
|
+
position: fixed; z-index: var(--z-index-tooltip);
|
|
123
|
+
padding: var(--spacer-4) var(--spacer-8);
|
|
124
|
+
background: var(--bg-base-tertiary); border: 1px solid var(--border-neutral-l1);
|
|
125
|
+
border-radius: var(--radius-4); font-size: var(--body-xs-font-size);
|
|
126
|
+
color: var(--text-default); pointer-events: none;
|
|
127
|
+
max-width: 280px; white-space: pre-wrap;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/* ── Table ────────────────────────────────────────────────── */
|
|
131
|
+
.ds-table { width: 100%; border-collapse: collapse; }
|
|
132
|
+
.ds-table th, .ds-table td {
|
|
133
|
+
text-align: left; padding: var(--spacer-12) var(--spacer-8);
|
|
134
|
+
border-bottom: 1px solid var(--border-neutral-l1);
|
|
135
|
+
font-size: var(--body-sm-font-size);
|
|
136
|
+
}
|
|
137
|
+
.ds-table th { color: var(--text-tertiary); font-weight: var(--font-weight-default); font-size: var(--body-xs-font-size); text-transform: uppercase; letter-spacing: 0.04em; }
|
|
138
|
+
.ds-table td { color: var(--text-default); }
|
|
139
|
+
.ds-table--striped tbody tr:nth-child(even) { background: var(--bg-base-secondary); }
|
|
140
|
+
.ds-table--hover tbody tr:hover { background: var(--bg-overlay-l1); }
|
|
141
|
+
|
|
142
|
+
/* ── Form ─────────────────────────────────────────────────── */
|
|
143
|
+
.ds-form { display: flex; flex-direction: column; gap: var(--spacer-16); }
|
|
144
|
+
.ds-form__group { display: flex; flex-direction: column; gap: var(--spacer-6); }
|
|
145
|
+
.ds-form__label { font-size: var(--body-sm-font-size); font-weight: var(--font-weight-medium); color: var(--text-default); }
|
|
146
|
+
.ds-form__error { font-size: var(--body-xs-font-size); color: var(--status-error-default); }
|
|
147
|
+
.ds-form__actions { display: flex; justify-content: flex-end; gap: var(--spacer-8); margin-top: var(--spacer-16); }
|
|
148
|
+
|
|
149
|
+
/* ── Alert ────────────────────────────────────────────────── */
|
|
150
|
+
.ds-alert {
|
|
151
|
+
display: flex; gap: var(--spacer-12);
|
|
152
|
+
padding: var(--spacer-12) var(--spacer-16);
|
|
153
|
+
background: var(--bg-base-secondary); border: 1px solid var(--border-neutral-l1);
|
|
154
|
+
border-radius: var(--radius-4); color: var(--text-default);
|
|
155
|
+
}
|
|
156
|
+
.ds-alert--success { background: var(--status-success-surface-l1); border-color: var(--status-success-default); }
|
|
157
|
+
.ds-alert--warning { background: var(--status-warning-surface-l1); border-color: var(--status-warning-default); }
|
|
158
|
+
.ds-alert--error { background: var(--status-error-surface-l1); border-color: var(--status-error-default); }
|
|
159
|
+
.ds-alert--info { background: var(--status-info-surface-l1); border-color: var(--status-info-default); }
|
|
160
|
+
|
|
161
|
+
/* ── Tag / Badge ──────────────────────────────────────────── */
|
|
162
|
+
.ds-tag {
|
|
163
|
+
display: inline-flex; align-items: center;
|
|
164
|
+
padding: 0 var(--spacer-6); height: 18px;
|
|
165
|
+
border-radius: var(--radius-2); font-size: var(--body-xs-font-size);
|
|
166
|
+
background: var(--bg-overlay-l2); color: var(--text-secondary);
|
|
167
|
+
border: 1px solid var(--border-neutral-l1);
|
|
168
|
+
}
|
|
169
|
+
.ds-tag--success { background: var(--status-success-surface-l1); color: var(--status-success-default); }
|
|
170
|
+
.ds-tag--warning { background: var(--status-warning-surface-l1); color: var(--status-warning-default); }
|
|
171
|
+
.ds-tag--error { background: var(--status-error-surface-l1); color: var(--status-error-default); }
|
|
172
|
+
|
|
173
|
+
/* ── Tabs ─────────────────────────────────────────────────── */
|
|
174
|
+
.ds-tabs { display: flex; gap: var(--spacer-24); border-bottom: 1px solid var(--border-neutral-l1); }
|
|
175
|
+
.ds-tab {
|
|
176
|
+
padding: var(--spacer-12) 0; background: transparent; border: none;
|
|
177
|
+
color: var(--text-tertiary); cursor: pointer; font: inherit;
|
|
178
|
+
font-size: var(--body-sm-font-size); position: relative;
|
|
179
|
+
}
|
|
180
|
+
.ds-tab:hover { color: var(--text-default); }
|
|
181
|
+
.ds-tab.is-active { color: var(--text-default); }
|
|
182
|
+
.ds-tab.is-active::after {
|
|
183
|
+
content: ''; position: absolute; left: 0; right: 0; bottom: -1px; height: 2px;
|
|
184
|
+
background: var(--icon-default);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/* ── Message / Notification ───────────────────────────────── */
|
|
188
|
+
.ds-message {
|
|
189
|
+
position: fixed; top: var(--spacer-24); left: 50%; transform: translateX(-50%);
|
|
190
|
+
z-index: var(--z-index-notification);
|
|
191
|
+
padding: var(--spacer-8) var(--spacer-16);
|
|
192
|
+
background: var(--bg-base-secondary); border: 1px solid var(--border-neutral-l1);
|
|
193
|
+
border-radius: var(--radius-4); box-shadow: 0 4px 12px rgba(0,0,0,0.15);
|
|
194
|
+
font-size: var(--body-sm-font-size); color: var(--text-default);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/* ── Progress ─────────────────────────────────────────────── */
|
|
198
|
+
.ds-progress { width: 100%; height: 4px; background: var(--bg-overlay-l2); border-radius: var(--radius-full); overflow: hidden; }
|
|
199
|
+
.ds-progress__bar { height: 100%; background: var(--bg-brand); border-radius: var(--radius-full); transition: width var(--transition-normal); }
|
|
200
|
+
|
|
201
|
+
/* ── Switch ───────────────────────────────────────────────── */
|
|
202
|
+
.ds-switch {
|
|
203
|
+
position: relative; width: 36px; height: 20px;
|
|
204
|
+
background: var(--bg-overlay-l3); border-radius: var(--radius-full);
|
|
205
|
+
cursor: pointer; transition: background var(--transition-fast);
|
|
206
|
+
}
|
|
207
|
+
.ds-switch.is-active { background: var(--bg-brand); }
|
|
208
|
+
.ds-switch::after {
|
|
209
|
+
content: ''; position: absolute; top: 2px; left: 2px;
|
|
210
|
+
width: 16px; height: 16px; border-radius: 50%;
|
|
211
|
+
background: #fff; transition: transform var(--transition-fast);
|
|
212
|
+
}
|
|
213
|
+
.ds-switch.is-active::after { transform: translateX(16px); }
|
|
214
|
+
|
|
215
|
+
/* ── Card ─────────────────────────────────────────────────── */
|
|
216
|
+
.ds-card {
|
|
217
|
+
background: var(--bg-base-secondary); border: 1px solid var(--border-neutral-l1);
|
|
218
|
+
border-radius: var(--radius-4); padding: var(--spacer-24);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/* ── Skeleton ─────────────────────────────────────────────── */
|
|
222
|
+
.ds-skeleton {
|
|
223
|
+
background: var(--bg-overlay-l2); border-radius: var(--radius-4);
|
|
224
|
+
animation: ds-skeleton-pulse 1.5s ease-in-out infinite;
|
|
225
|
+
}
|
|
226
|
+
@keyframes ds-skeleton-pulse {
|
|
227
|
+
0%, 100% { opacity: 1; }
|
|
228
|
+
50% { opacity: 0.4; }
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/* ── Empty ────────────────────────────────────────────────── */
|
|
232
|
+
.ds-empty {
|
|
233
|
+
display: flex; flex-direction: column; align-items: center; justify-content: center;
|
|
234
|
+
padding: var(--spacer-40); color: var(--text-tertiary);
|
|
235
|
+
font-size: var(--body-sm-font-size);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/* ── Divider ──────────────────────────────────────────────── */
|
|
239
|
+
.ds-divider { height: 1px; background: var(--border-neutral-l1); }
|
|
240
|
+
|
|
241
|
+
/* ── Avatar ───────────────────────────────────────────────── */
|
|
242
|
+
.ds-avatar {
|
|
243
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
244
|
+
width: 32px; height: 32px; border-radius: 50%;
|
|
245
|
+
background: var(--bg-overlay-l3); color: var(--text-default);
|
|
246
|
+
font-size: var(--body-sm-font-size); font-weight: var(--font-weight-strong);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/* ── Badge ────────────────────────────────────────────────── */
|
|
250
|
+
.ds-badge {
|
|
251
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
252
|
+
min-width: 18px; height: 18px; padding: 0 var(--spacer-4);
|
|
253
|
+
border-radius: var(--radius-full); font-size: 11px; font-weight: 600;
|
|
254
|
+
background: var(--status-error-default); color: #fff;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/* ── Collapse ─────────────────────────────────────────────── */
|
|
258
|
+
.ds-collapse__header {
|
|
259
|
+
display: flex; align-items: center; justify-content: space-between;
|
|
260
|
+
padding: var(--spacer-12) var(--spacer-16);
|
|
261
|
+
cursor: pointer; color: var(--text-default); font-weight: var(--font-weight-medium);
|
|
262
|
+
}
|
|
263
|
+
.ds-collapse__body { padding: 0 var(--spacer-16) var(--spacer-16); }
|
|
264
|
+
|
|
265
|
+
/* ── Spin / Loading ───────────────────────────────────────── */
|
|
266
|
+
.ds-spin {
|
|
267
|
+
display: inline-block; width: 24px; height: 24px;
|
|
268
|
+
border: 2px solid var(--bg-overlay-l3); border-top-color: var(--bg-brand);
|
|
269
|
+
border-radius: 50%; animation: ds-spin-rotate 0.8s linear infinite;
|
|
270
|
+
}
|
|
271
|
+
@keyframes ds-spin-rotate {
|
|
272
|
+
to { transform: rotate(360deg); }
|
|
273
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*,::after,::before{box-sizing:border-box}body{margin:0;background:var(--color-background);color:var(--color-foreground);font-family:var(--font-family-default);font-size:var(--body-base-font-size);line-height:var(--body-base-line-height)}.ds-btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--spacer-6);padding:0 var(--spacer-12);height:28px;border-radius:var(--radius-4);border:1px solid transparent;cursor:pointer;user-select:none;white-space:nowrap;font-size:var(--body-sm-font-size);font-weight:var(--font-weight-medium);transition:background var(--transition-fast),color var(--transition-fast),border-color var(--transition-fast)}.ds-btn--sm{height:24px;padding:0 var(--spacer-8);font-size:var(--body-xs-font-size)}.ds-btn--lg{height:32px;padding:0 var(--spacer-16);font-size:var(--body-base-font-size)}.ds-btn--primary{background:var(--bg-brand);color:var(--text-onbrand);border-color:var(--bg-brand)}.ds-btn--primary:hover{background:var(--bg-brand-hover)}.ds-btn--secondary{background:var(--bg-overlay-l2);color:var(--text-default);border-color:var(--border-neutral-l1)}.ds-btn--secondary:hover{background:var(--bg-overlay-l3)}.ds-btn--tertiary{background:0 0;color:var(--text-default)}.ds-btn--tertiary:hover{background:var(--bg-overlay-l2)}.ds-btn--danger{background:var(--status-error-default);color:#fff}.ds-btn[disabled]{opacity:.5;cursor:not-allowed}.ds-input{display:flex;align-items:center;gap:var(--spacer-8);padding:0 var(--spacer-12);height:28px;background:var(--bg-overlay-l1);border:1px solid var(--border-neutral-l1);border-radius:var(--radius-4);color:var(--text-default);width:100%;font-size:var(--body-sm-font-size)}.ds-input:focus-within{border-color:var(--bg-brand)}.ds-input input{flex:1;background:0 0;border:none;outline:0;color:inherit;font:inherit}.ds-input input::placeholder{color:var(--text-tertiary)}.ds-input.is-error{border-color:var(--status-error-default)}.ds-modal-mask{position:fixed;inset:0;z-index:var(--z-index-modal);background:rgba(0,0,0,.5);display:none;align-items:center;justify-content:center}.ds-modal-mask.is-visible{display:flex}.ds-modal{background:var(--bg-base-secondary);border:1px solid var(--border-neutral-l1);border-radius:var(--radius-8);width:100%;max-width:480px;outline:0}.ds-modal__header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacer-16) var(--spacer-24);border-bottom:1px solid var(--border-neutral-l1)}.ds-modal__title{font-size:var(--heading-sm-font-size);font-weight:var(--font-weight-strong)}.ds-modal__close{width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;background:0 0;border:none;color:var(--icon-secondary);cursor:pointer;border-radius:var(--radius-4)}.ds-modal__close:hover{background:var(--bg-overlay-l2)}.ds-modal__body{padding:var(--spacer-16) var(--spacer-24)}.ds-modal__footer{display:flex;justify-content:flex-end;gap:var(--spacer-8);padding:var(--spacer-12) var(--spacer-24);border-top:1px solid var(--border-neutral-l1)}.ds-drawer-mask{position:fixed;inset:0;z-index:var(--z-index-drawer);background:rgba(0,0,0,.5);display:none}.ds-drawer-mask.is-visible{display:block}.ds-drawer{position:fixed;top:0;right:0;bottom:0;z-index:var(--z-index-drawer);width:360px;max-width:100vw;background:var(--bg-base-secondary);border-left:1px solid var(--border-neutral-l1);display:flex;flex-direction:column;transform:translateX(100%);transition:transform var(--transition-slow)}.ds-drawer.is-visible{transform:translateX(0)}.ds-drawer__header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacer-16) var(--spacer-24);border-bottom:1px solid var(--border-neutral-l1)}.ds-drawer__body{padding:var(--spacer-16) var(--spacer-24);flex:1;overflow-y:auto}.ds-dropdown{position:relative;display:inline-block}.ds-dropdown__menu{position:absolute;top:calc(100% + 4px);left:0;min-width:160px;background:var(--bg-base-secondary);border:1px solid var(--border-neutral-l2);border-radius:var(--radius-4);box-shadow:0 4px 16px rgba(0,0,0,.2);z-index:var(--z-index-dropdown);display:none;padding:var(--spacer-4)}.ds-dropdown__menu.is-open{display:block}.ds-dropdown__item{display:flex;align-items:center;padding:var(--spacer-6) var(--spacer-8);border-radius:var(--radius-2);color:var(--text-default);font-size:var(--body-sm-font-size);cursor:pointer}.ds-dropdown__item:hover{background:var(--bg-overlay-l1)}.ds-tooltip{position:fixed;z-index:var(--z-index-tooltip);padding:var(--spacer-4) var(--spacer-8);background:var(--bg-base-tertiary);border:1px solid var(--border-neutral-l1);border-radius:var(--radius-4);font-size:var(--body-xs-font-size);color:var(--text-default);pointer-events:none;max-width:280px;white-space:pre-wrap}.ds-table{width:100%;border-collapse:collapse}.ds-table td,.ds-table th{text-align:left;padding:var(--spacer-12) var(--spacer-8);border-bottom:1px solid var(--border-neutral-l1);font-size:var(--body-sm-font-size)}.ds-table th{color:var(--text-tertiary);font-weight:var(--font-weight-default);font-size:var(--body-xs-font-size);text-transform:uppercase;letter-spacing:.04em}.ds-table td{color:var(--text-default)}.ds-table--striped tbody tr:nth-child(2n){background:var(--bg-base-secondary)}.ds-table--hover tbody tr:hover{background:var(--bg-overlay-l1)}.ds-form{display:flex;flex-direction:column;gap:var(--spacer-16)}.ds-form__group{display:flex;flex-direction:column;gap:var(--spacer-6)}.ds-form__label{font-size:var(--body-sm-font-size);font-weight:var(--font-weight-medium);color:var(--text-default)}.ds-form__error{font-size:var(--body-xs-font-size);color:var(--status-error-default)}.ds-form__actions{display:flex;justify-content:flex-end;gap:var(--spacer-8);margin-top:var(--spacer-16)}.ds-alert{display:flex;gap:var(--spacer-12);padding:var(--spacer-12) var(--spacer-16);background:var(--bg-base-secondary);border:1px solid var(--border-neutral-l1);border-radius:var(--radius-4);color:var(--text-default)}.ds-alert--success{background:var(--status-success-surface-l1);border-color:var(--status-success-default)}.ds-alert--warning{background:var(--status-warning-surface-l1);border-color:var(--status-warning-default)}.ds-alert--error{background:var(--status-error-surface-l1);border-color:var(--status-error-default)}.ds-alert--info{background:var(--status-info-surface-l1);border-color:var(--status-info-default)}.ds-tag{display:inline-flex;align-items:center;padding:0 var(--spacer-6);height:18px;border-radius:var(--radius-2);font-size:var(--body-xs-font-size);background:var(--bg-overlay-l2);color:var(--text-secondary);border:1px solid var(--border-neutral-l1)}.ds-tag--success{background:var(--status-success-surface-l1);color:var(--status-success-default)}.ds-tag--warning{background:var(--status-warning-surface-l1);color:var(--status-warning-default)}.ds-tag--error{background:var(--status-error-surface-l1);color:var(--status-error-default)}.ds-tabs{display:flex;gap:var(--spacer-24);border-bottom:1px solid var(--border-neutral-l1)}.ds-tab{padding:var(--spacer-12) 0;background:0 0;border:none;color:var(--text-tertiary);cursor:pointer;font:inherit;font-size:var(--body-sm-font-size);position:relative}.ds-tab.is-active,.ds-tab:hover{color:var(--text-default)}.ds-tab.is-active::after{content:'';position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--icon-default)}.ds-message{position:fixed;top:var(--spacer-24);left:50%;transform:translateX(-50%);z-index:var(--z-index-notification);padding:var(--spacer-8) var(--spacer-16);background:var(--bg-base-secondary);border:1px solid var(--border-neutral-l1);border-radius:var(--radius-4);box-shadow:0 4px 12px rgba(0,0,0,.15);font-size:var(--body-sm-font-size);color:var(--text-default)}.ds-progress{width:100%;height:4px;background:var(--bg-overlay-l2);border-radius:var(--radius-full);overflow:hidden}.ds-progress__bar{height:100%;background:var(--bg-brand);border-radius:var(--radius-full);transition:width var(--transition-normal)}.ds-switch{position:relative;width:36px;height:20px;background:var(--bg-overlay-l3);border-radius:var(--radius-full);cursor:pointer;transition:background var(--transition-fast)}.ds-switch.is-active{background:var(--bg-brand)}.ds-switch::after{content:'';position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;transition:transform var(--transition-fast)}.ds-switch.is-active::after{transform:translateX(16px)}.ds-card{background:var(--bg-base-secondary);border:1px solid var(--border-neutral-l1);border-radius:var(--radius-4);padding:var(--spacer-24)}.ds-skeleton{background:var(--bg-overlay-l2);border-radius:var(--radius-4);animation:1.5s ease-in-out infinite ds-skeleton-pulse}@keyframes ds-skeleton-pulse{0%,100%{opacity:1}50%{opacity:.4}}.ds-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--spacer-40);color:var(--text-tertiary);font-size:var(--body-sm-font-size)}.ds-divider{height:1px;background:var(--border-neutral-l1)}.ds-avatar{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;background:var(--bg-overlay-l3);color:var(--text-default);font-size:var(--body-sm-font-size);font-weight:var(--font-weight-strong)}.ds-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 var(--spacer-4);border-radius:var(--radius-full);font-size:11px;font-weight:600;background:var(--status-error-default);color:#fff}.ds-collapse__header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacer-12) var(--spacer-16);cursor:pointer;color:var(--text-default);font-weight:var(--font-weight-medium)}.ds-collapse__body{padding:0 var(--spacer-16) var(--spacer-16)}.ds-spin{display:inline-block;width:24px;height:24px;border:2px solid var(--bg-overlay-l3);border-top-color:var(--bg-brand);border-radius:50%;animation:.8s linear infinite ds-spin-rotate}@keyframes ds-spin-rotate{to{transform:rotate(360deg)}}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kupola CSS — Full stylesheet bundle.
|
|
3
|
+
*
|
|
4
|
+
* @module @kupola/kupola/css
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* <link rel="stylesheet" href="node_modules/@kupola/kupola/dist/kupola.css">
|
|
8
|
+
* // or in JS:
|
|
9
|
+
* import '@kupola/kupola/css';
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
@import './tokens.css';
|
|
13
|
+
@import './components.css';
|
|
14
|
+
@import './responsive.css';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
'Cascadia Code','Fira Code','Segoe UI',-apple-system,[data-theme=dark]{color-scheme:dark;--bg-base-default:#0C0C0D;--bg-base-secondary:#1A1B1D;--bg-base-tertiary:#222427;--bg-overlay-l1:rgba(255, 255, 255, 0.04);--bg-overlay-l2:rgba(255, 255, 255, 0.06);--bg-overlay-l3:rgba(255, 255, 255, 0.08);--bg-overlay-l4:rgba(255, 255, 255, 0.12);--text-default:#E5E7EB;--text-secondary:#B8BDCA;--text-tertiary:#9CA3AF;--text-disabled:#8B93A1;--text-onbrand:#FFFFFF;--icon-default:#E5E7EB;--icon-secondary:#B8BDCA;--icon-tertiary:#9CA3AF;--icon-disabled:#8B93A1;--border-neutral-l1:rgba(255, 255, 255, 0.12);--border-neutral-l2:rgba(255, 255, 255, 0.18);--border-neutral-l3:rgba(255, 255, 255, 0.25);--bg-brand:#32F08C;--bg-brand-hover:#53F4A2;--bg-brand-disabled:rgba(50, 240, 140, 0.3);--status-success-default:#32F08C;--status-warning-default:#FFAD5B;--status-error-default:#FF9CA8;--status-info-default:#79B8FF;--status-success-surface-l1:rgba(50, 240, 140, 0.12);--status-warning-surface-l1:rgba(255, 173, 91, 0.12);--status-error-surface-l1:rgba(255, 156, 168, 0.12);--status-info-surface-l1:rgba(121, 184, 255, 0.12);--color-background:var(--bg-base-default);--color-surface:var(--bg-base-secondary);--color-foreground:var(--text-default);--color-border:var(--border-neutral-l1)}[data-theme=light]{color-scheme:light;--bg-base-default:#FFFFFF;--bg-base-secondary:#F5F6F8;--bg-base-tertiary:#EDF0F5;--bg-overlay-l1:rgba(0, 0, 0, 0.04);--bg-overlay-l2:rgba(0, 0, 0, 0.06);--bg-overlay-l3:rgba(0, 0, 0, 0.08);--bg-overlay-l4:rgba(0, 0, 0, 0.12);--text-default:#0F1117;--text-secondary:#4B5563;--text-tertiary:#5B6370;--text-disabled:#525A68;--text-onbrand:#FFFFFF;--icon-default:#0F1117;--icon-secondary:#4B5563;--icon-tertiary:#5B6370;--icon-disabled:#525A68;--border-neutral-l1:rgba(0, 0, 0, 0.12);--border-neutral-l2:rgba(0, 0, 0, 0.18);--border-neutral-l3:rgba(0, 0, 0, 0.25);--bg-brand:#22C55E;--bg-brand-hover:#16A34A;--bg-brand-disabled:rgba(34, 197, 94, 0.3);--status-success-default:#16A34A;--status-warning-default:#CA8A04;--status-error-default:#DC2626;--status-info-default:#2E69FF;--status-success-surface-l1:rgba(22, 163, 74, 0.08);--status-warning-surface-l1:rgba(202, 138, 4, 0.08);--status-error-surface-l1:rgba(220, 38, 38, 0.08);--status-info-surface-l1:rgba(46, 105, 255, 0.08);--color-background:var(--bg-base-default);--color-surface:var(--bg-base-secondary);--color-foreground:var(--text-default);--color-border:var(--border-neutral-l1)}*,::after,::before{box-sizing:border-box}body{margin:0;background:var(--color-background);color:var(--color-foreground);font-family:var(--font-family-default);font-size:var(--body-base-font-size);line-height:var(--body-base-line-height)}.ds-btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--spacer-6);padding:0 var(--spacer-12);height:28px;border-radius:var(--radius-4);border:1px solid transparent;cursor:pointer;user-select:none;white-space:nowrap;font-size:var(--body-sm-font-size);font-weight:var(--font-weight-medium);transition:background var(--transition-fast),color var(--transition-fast),border-color var(--transition-fast)}.ds-btn--sm{height:24px;padding:0 var(--spacer-8);font-size:var(--body-xs-font-size)}.ds-btn--lg{height:32px;padding:0 var(--spacer-16);font-size:var(--body-base-font-size)}.ds-btn--primary{background:var(--bg-brand);color:var(--text-onbrand);border-color:var(--bg-brand)}.ds-btn--primary:hover{background:var(--bg-brand-hover)}.ds-btn--secondary{background:var(--bg-overlay-l2);color:var(--text-default);border-color:var(--border-neutral-l1)}.ds-btn--secondary:hover{background:var(--bg-overlay-l3)}.ds-btn--tertiary{background:0 0;color:var(--text-default)}.ds-btn--tertiary:hover{background:var(--bg-overlay-l2)}.ds-btn--danger{background:var(--status-error-default);color:#fff}.ds-btn[disabled]{opacity:.5;cursor:not-allowed}.ds-input{display:flex;align-items:center;gap:var(--spacer-8);padding:0 var(--spacer-12);height:28px;background:var(--bg-overlay-l1);border:1px solid var(--border-neutral-l1);border-radius:var(--radius-4);color:var(--text-default);width:100%;font-size:var(--body-sm-font-size)}.ds-input:focus-within{border-color:var(--bg-brand)}.ds-input input{flex:1;background:0 0;border:none;outline:0;color:inherit;font:inherit}.ds-input input::placeholder{color:var(--text-tertiary)}.ds-input.is-error{border-color:var(--status-error-default)}.ds-modal-mask{position:fixed;inset:0;z-index:var(--z-index-modal);background:rgba(0,0,0,.5);display:none;align-items:center;justify-content:center}.ds-modal-mask.is-visible{display:flex}.ds-modal{background:var(--bg-base-secondary);border:1px solid var(--border-neutral-l1);border-radius:var(--radius-8);width:100%;max-width:480px;outline:0}.ds-modal__header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacer-16) var(--spacer-24);border-bottom:1px solid var(--border-neutral-l1)}.ds-modal__title{font-size:var(--heading-sm-font-size);font-weight:var(--font-weight-strong)}.ds-modal__close{width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;background:0 0;border:none;color:var(--icon-secondary);cursor:pointer;border-radius:var(--radius-4)}.ds-modal__close:hover{background:var(--bg-overlay-l2)}.ds-modal__body{padding:var(--spacer-16) var(--spacer-24)}.ds-modal__footer{display:flex;justify-content:flex-end;gap:var(--spacer-8);padding:var(--spacer-12) var(--spacer-24);border-top:1px solid var(--border-neutral-l1)}.ds-drawer-mask{position:fixed;inset:0;z-index:var(--z-index-drawer);background:rgba(0,0,0,.5);display:none}.ds-drawer-mask.is-visible{display:block}.ds-drawer{position:fixed;top:0;right:0;bottom:0;z-index:var(--z-index-drawer);width:360px;max-width:100vw;background:var(--bg-base-secondary);border-left:1px solid var(--border-neutral-l1);display:flex;flex-direction:column;transform:translateX(100%);transition:transform var(--transition-slow)}.ds-drawer.is-visible{transform:translateX(0)}.ds-drawer__header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacer-16) var(--spacer-24);border-bottom:1px solid var(--border-neutral-l1)}.ds-drawer__body{padding:var(--spacer-16) var(--spacer-24);flex:1;overflow-y:auto}.ds-dropdown{position:relative;display:inline-block}.ds-dropdown__menu{position:absolute;top:calc(100% + 4px);left:0;min-width:160px;background:var(--bg-base-secondary);border:1px solid var(--border-neutral-l2);border-radius:var(--radius-4);box-shadow:0 4px 16px rgba(0,0,0,.2);z-index:var(--z-index-dropdown);display:none;padding:var(--spacer-4)}.ds-dropdown__menu.is-open{display:block}.ds-dropdown__item{display:flex;align-items:center;padding:var(--spacer-6) var(--spacer-8);border-radius:var(--radius-2);color:var(--text-default);font-size:var(--body-sm-font-size);cursor:pointer}.ds-dropdown__item:hover{background:var(--bg-overlay-l1)}.ds-tooltip{position:fixed;z-index:var(--z-index-tooltip);padding:var(--spacer-4) var(--spacer-8);background:var(--bg-base-tertiary);border:1px solid var(--border-neutral-l1);border-radius:var(--radius-4);font-size:var(--body-xs-font-size);color:var(--text-default);pointer-events:none;max-width:280px;white-space:pre-wrap}.ds-table{width:100%;border-collapse:collapse}.ds-table td,.ds-table th{text-align:left;padding:var(--spacer-12) var(--spacer-8);border-bottom:1px solid var(--border-neutral-l1);font-size:var(--body-sm-font-size)}.ds-table th{color:var(--text-tertiary);font-weight:var(--font-weight-default);font-size:var(--body-xs-font-size);text-transform:uppercase;letter-spacing:.04em}.ds-table td{color:var(--text-default)}.ds-table--striped tbody tr:nth-child(2n){background:var(--bg-base-secondary)}.ds-table--hover tbody tr:hover{background:var(--bg-overlay-l1)}.ds-form{display:flex;flex-direction:column;gap:var(--spacer-16)}.ds-form__group{display:flex;flex-direction:column;gap:var(--spacer-6)}.ds-form__label{font-size:var(--body-sm-font-size);font-weight:var(--font-weight-medium);color:var(--text-default)}.ds-form__error{font-size:var(--body-xs-font-size);color:var(--status-error-default)}.ds-form__actions{display:flex;justify-content:flex-end;gap:var(--spacer-8);margin-top:var(--spacer-16)}.ds-alert{display:flex;gap:var(--spacer-12);padding:var(--spacer-12) var(--spacer-16);background:var(--bg-base-secondary);border:1px solid var(--border-neutral-l1);border-radius:var(--radius-4);color:var(--text-default)}.ds-alert--success{background:var(--status-success-surface-l1);border-color:var(--status-success-default)}.ds-alert--warning{background:var(--status-warning-surface-l1);border-color:var(--status-warning-default)}.ds-alert--error{background:var(--status-error-surface-l1);border-color:var(--status-error-default)}.ds-alert--info{background:var(--status-info-surface-l1);border-color:var(--status-info-default)}.ds-tag{display:inline-flex;align-items:center;padding:0 var(--spacer-6);height:18px;border-radius:var(--radius-2);font-size:var(--body-xs-font-size);background:var(--bg-overlay-l2);color:var(--text-secondary);border:1px solid var(--border-neutral-l1)}.ds-tag--success{background:var(--status-success-surface-l1);color:var(--status-success-default)}.ds-tag--warning{background:var(--status-warning-surface-l1);color:var(--status-warning-default)}.ds-tag--error{background:var(--status-error-surface-l1);color:var(--status-error-default)}.ds-tabs{display:flex;gap:var(--spacer-24);border-bottom:1px solid var(--border-neutral-l1)}.ds-tab{padding:var(--spacer-12) 0;background:0 0;border:none;color:var(--text-tertiary);cursor:pointer;font:inherit;font-size:var(--body-sm-font-size);position:relative}.ds-tab.is-active,.ds-tab:hover{color:var(--text-default)}.ds-tab.is-active::after{content:'';position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--icon-default)}.ds-message{position:fixed;top:var(--spacer-24);left:50%;transform:translateX(-50%);z-index:var(--z-index-notification);padding:var(--spacer-8) var(--spacer-16);background:var(--bg-base-secondary);border:1px solid var(--border-neutral-l1);border-radius:var(--radius-4);box-shadow:0 4px 12px rgba(0,0,0,.15);font-size:var(--body-sm-font-size);color:var(--text-default)}.ds-progress{width:100%;height:4px;background:var(--bg-overlay-l2);border-radius:var(--radius-full);overflow:hidden}.ds-progress__bar{height:100%;background:var(--bg-brand);border-radius:var(--radius-full);transition:width var(--transition-normal)}.ds-switch{position:relative;width:36px;height:20px;background:var(--bg-overlay-l3);border-radius:var(--radius-full);cursor:pointer;transition:background var(--transition-fast)}.ds-switch.is-active{background:var(--bg-brand)}.ds-switch::after{content:'';position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;transition:transform var(--transition-fast)}.ds-switch.is-active::after{transform:translateX(16px)}.ds-card{background:var(--bg-base-secondary);border:1px solid var(--border-neutral-l1);border-radius:var(--radius-4);padding:var(--spacer-24)}.ds-skeleton{background:var(--bg-overlay-l2);border-radius:var(--radius-4);animation:1.5s ease-in-out infinite ds-skeleton-pulse}@keyframes ds-skeleton-pulse{0%,100%{opacity:1}50%{opacity:.4}}.ds-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--spacer-40);color:var(--text-tertiary);font-size:var(--body-sm-font-size)}.ds-divider{height:1px;background:var(--border-neutral-l1)}.ds-avatar{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;background:var(--bg-overlay-l3);color:var(--text-default);font-size:var(--body-sm-font-size);font-weight:var(--font-weight-strong)}.ds-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 var(--spacer-4);border-radius:var(--radius-full);font-size:11px;font-weight:600;background:var(--status-error-default);color:#fff}.ds-collapse__header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacer-12) var(--spacer-16);cursor:pointer;color:var(--text-default);font-weight:var(--font-weight-medium)}.ds-collapse__body{padding:0 var(--spacer-16) var(--spacer-16)}.ds-spin{display:inline-block;width:24px;height:24px;border:2px solid var(--bg-overlay-l3);border-top-color:var(--bg-brand);border-radius:50%;animation:.8s linear infinite ds-spin-rotate}@keyframes ds-spin-rotate{to{transform:rotate(360deg)}}@media (min-width:576px){.ds-show-sm{display:none!important}}@media (min-width:768px){.ds-show-md{display:none!important}}@media (max-width:1023.98px){.ds-hide-below-lg,.ds-hide-lg{display:none!important}}@media (min-width:1024px){.ds-show-lg{display:none!important}}@media (max-width:1279.98px){.ds-hide-below-xl,.ds-hide-xl{display:none!important}}@media (min-width:1280px){.ds-show-xl{display:none!important}}@media (max-width:767.98px){.ds-hide-below-md,.ds-hide-md{display:none!important}.ds-padding-responsive{padding:var(--spacing-3,12px)!important}.ds-margin-responsive{margin:var(--spacing-3,12px)!important}.ds-text-responsive{font-size:var(--font-size-sm, 13px)!important}.ds-table-wrapper{overflow-x:auto;-webkit-overflow-scrolling:touch}.ds-table{min-width:600px}.ds-table td,.ds-table th{white-space:nowrap;padding:var(--spacing-2,8px) var(--spacing-3,12px);font-size:var(--font-size-sm, 13px)}}@media (max-width:575.98px){.ds-hide-below-sm,.ds-hide-sm{display:none!important}.ds-modal-content{width:100%!important;max-width:100%!important;min-height:100vh!important;border-radius:0!important;margin:0!important}.ds-modal-mask{padding:0!important}.ds-drawer-left,.ds-drawer-right{width:100%!important;max-width:100%!important}.ds-drawer-bottom,.ds-drawer-top{height:90vh!important;max-height:90vh!important}.ds-dialog{width:calc(100% - 32px)!important;max-width:100%!important;margin:16px!important}.ds-select-dropdown{position:fixed!important;bottom:0;left:0;right:0;max-height:50vh;border-radius:12px 12px 0 0;z-index:var(--z-index-modal,3000)}.ds-datepicker-panel{width:calc(100vw - 32px)!important;max-width:100%!important}.ds-notification{width:calc(100% - 24px)!important;max-width:100%!important;right:12px!important;left:12px!important}}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kupola CSS — Responsive utilities & component adaptations.
|
|
3
|
+
*
|
|
4
|
+
* Breakpoints:
|
|
5
|
+
* sm: 576px (phones landscape)
|
|
6
|
+
* md: 768px (tablets)
|
|
7
|
+
* lg: 1024px (laptops)
|
|
8
|
+
* xl: 1280px (desktops)
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* <div class="ds-hide-sm">Hidden on phones</div>
|
|
12
|
+
* <div class="ds-show-md">Only visible on tablets+</div>
|
|
13
|
+
* <div class="ds-hide-lg">Hidden below laptops</div>
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/* ═══════════════════════════════════════════════════════════
|
|
17
|
+
Responsive display utilities
|
|
18
|
+
═══════════════════════════════════════════════════════════ */
|
|
19
|
+
|
|
20
|
+
/* ── sm: < 576px (phones) ─────────────────────────────── */
|
|
21
|
+
@media (max-width: 575.98px) {
|
|
22
|
+
.ds-hide-sm { display: none !important; }
|
|
23
|
+
.ds-hide-below-sm { display: none !important; }
|
|
24
|
+
}
|
|
25
|
+
@media (min-width: 576px) {
|
|
26
|
+
.ds-show-sm { display: none !important; }
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/* ── md: < 768px (below tablets) ──────────────────────── */
|
|
30
|
+
@media (max-width: 767.98px) {
|
|
31
|
+
.ds-hide-md { display: none !important; }
|
|
32
|
+
.ds-hide-below-md { display: none !important; }
|
|
33
|
+
}
|
|
34
|
+
@media (min-width: 768px) {
|
|
35
|
+
.ds-show-md { display: none !important; }
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/* ── lg: < 1024px (below laptops) ─────────────────────── */
|
|
39
|
+
@media (max-width: 1023.98px) {
|
|
40
|
+
.ds-hide-lg { display: none !important; }
|
|
41
|
+
.ds-hide-below-lg { display: none !important; }
|
|
42
|
+
}
|
|
43
|
+
@media (min-width: 1024px) {
|
|
44
|
+
.ds-show-lg { display: none !important; }
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* ── xl: < 1280px (below desktops) ────────────────────── */
|
|
48
|
+
@media (max-width: 1279.98px) {
|
|
49
|
+
.ds-hide-xl { display: none !important; }
|
|
50
|
+
.ds-hide-below-xl { display: none !important; }
|
|
51
|
+
}
|
|
52
|
+
@media (min-width: 1280px) {
|
|
53
|
+
.ds-show-xl { display: none !important; }
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* ═══════════════════════════════════════════════════════════
|
|
57
|
+
Responsive spacing utilities
|
|
58
|
+
═══════════════════════════════════════════════════════════ */
|
|
59
|
+
|
|
60
|
+
@media (max-width: 767.98px) {
|
|
61
|
+
.ds-padding-responsive { padding: var(--spacing-3, 12px) !important; }
|
|
62
|
+
.ds-margin-responsive { margin: var(--spacing-3, 12px) !important; }
|
|
63
|
+
.ds-text-responsive { font-size: var(--font-size-sm, 13px) !important; }
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/* ═══════════════════════════════════════════════════════════
|
|
67
|
+
Component responsive adaptations
|
|
68
|
+
═══════════════════════════════════════════════════════════ */
|
|
69
|
+
|
|
70
|
+
/* ── Modal: full-screen on phones ─────────────────────────── */
|
|
71
|
+
@media (max-width: 575.98px) {
|
|
72
|
+
.ds-modal-content {
|
|
73
|
+
width: 100% !important;
|
|
74
|
+
max-width: 100% !important;
|
|
75
|
+
min-height: 100vh !important;
|
|
76
|
+
border-radius: 0 !important;
|
|
77
|
+
margin: 0 !important;
|
|
78
|
+
}
|
|
79
|
+
.ds-modal-mask {
|
|
80
|
+
padding: 0 !important;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/* ── Drawer: full-width/height on phones ──────────────────── */
|
|
85
|
+
@media (max-width: 575.98px) {
|
|
86
|
+
.ds-drawer-right,
|
|
87
|
+
.ds-drawer-left {
|
|
88
|
+
width: 100% !important;
|
|
89
|
+
max-width: 100% !important;
|
|
90
|
+
}
|
|
91
|
+
.ds-drawer-bottom,
|
|
92
|
+
.ds-drawer-top {
|
|
93
|
+
height: 90vh !important;
|
|
94
|
+
max-height: 90vh !important;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/* ── Dialog: full-width on phones ─────────────────────────── */
|
|
99
|
+
@media (max-width: 575.98px) {
|
|
100
|
+
.ds-dialog {
|
|
101
|
+
width: calc(100% - 32px) !important;
|
|
102
|
+
max-width: 100% !important;
|
|
103
|
+
margin: 16px !important;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/* ── Table: horizontal scroll on small screens ────────────── */
|
|
108
|
+
@media (max-width: 767.98px) {
|
|
109
|
+
.ds-table-wrapper {
|
|
110
|
+
overflow-x: auto;
|
|
111
|
+
-webkit-overflow-scrolling: touch;
|
|
112
|
+
}
|
|
113
|
+
.ds-table {
|
|
114
|
+
min-width: 600px;
|
|
115
|
+
}
|
|
116
|
+
.ds-table th,
|
|
117
|
+
.ds-table td {
|
|
118
|
+
white-space: nowrap;
|
|
119
|
+
padding: var(--spacing-2, 8px) var(--spacing-3, 12px);
|
|
120
|
+
font-size: var(--font-size-sm, 13px);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/* ── Select: full-width on phones ─────────────────────────── */
|
|
125
|
+
@media (max-width: 575.98px) {
|
|
126
|
+
.ds-select-dropdown {
|
|
127
|
+
position: fixed !important;
|
|
128
|
+
bottom: 0;
|
|
129
|
+
left: 0;
|
|
130
|
+
right: 0;
|
|
131
|
+
max-height: 50vh;
|
|
132
|
+
border-radius: 12px 12px 0 0;
|
|
133
|
+
z-index: var(--z-index-modal, 3000);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/* ── DatePicker: full-width on phones ─────────────────────── */
|
|
138
|
+
@media (max-width: 575.98px) {
|
|
139
|
+
.ds-datepicker-panel {
|
|
140
|
+
width: calc(100vw - 32px) !important;
|
|
141
|
+
max-width: 100% !important;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* ── Notification: stack full-width on phones ─────────────── */
|
|
146
|
+
@media (max-width: 575.98px) {
|
|
147
|
+
.ds-notification {
|
|
148
|
+
width: calc(100% - 24px) !important;
|
|
149
|
+
max-width: 100% !important;
|
|
150
|
+
right: 12px !important;
|
|
151
|
+
left: 12px !important;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@media (min-width:576px){.ds-show-sm{display:none!important}}@media (min-width:768px){.ds-show-md{display:none!important}}@media (max-width:1023.98px){.ds-hide-below-lg,.ds-hide-lg{display:none!important}}@media (min-width:1024px){.ds-show-lg{display:none!important}}@media (max-width:1279.98px){.ds-hide-below-xl,.ds-hide-xl{display:none!important}}@media (min-width:1280px){.ds-show-xl{display:none!important}}@media (max-width:767.98px){.ds-hide-below-md,.ds-hide-md{display:none!important}.ds-padding-responsive{padding:var(--spacing-3,12px)!important}.ds-margin-responsive{margin:var(--spacing-3,12px)!important}.ds-text-responsive{font-size:var(--font-size-sm, 13px)!important}.ds-table-wrapper{overflow-x:auto;-webkit-overflow-scrolling:touch}.ds-table{min-width:600px}.ds-table td,.ds-table th{white-space:nowrap;padding:var(--spacing-2,8px) var(--spacing-3,12px);font-size:var(--font-size-sm, 13px)}}@media (max-width:575.98px){.ds-hide-below-sm,.ds-hide-sm{display:none!important}.ds-modal-content{width:100%!important;max-width:100%!important;min-height:100vh!important;border-radius:0!important;margin:0!important}.ds-modal-mask{padding:0!important}.ds-drawer-left,.ds-drawer-right{width:100%!important;max-width:100%!important}.ds-drawer-bottom,.ds-drawer-top{height:90vh!important;max-height:90vh!important}.ds-dialog{width:calc(100% - 32px)!important;max-width:100%!important;margin:16px!important}.ds-select-dropdown{position:fixed!important;bottom:0;left:0;right:0;max-height:50vh;border-radius:12px 12px 0 0;z-index:var(--z-index-modal,3000)}.ds-datepicker-panel{width:calc(100vw - 32px)!important;max-width:100%!important}.ds-notification{width:calc(100% - 24px)!important;max-width:100%!important;right:12px!important;left:12px!important}}
|