@dodlhuat/basix 1.3.1 → 1.3.3
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 +14 -8
- package/css/accordion.scss +0 -5
- package/css/badge.scss +1 -6
- package/css/bottom-sheet.scss +3 -8
- package/css/breadcrumb.scss +6 -15
- package/css/button.scss +2 -1
- package/css/calendar.scss +0 -67
- package/css/card.scss +0 -5
- package/css/carousel.scss +0 -3
- package/css/chart.scss +0 -25
- package/css/chat-bubbles.scss +0 -15
- package/css/checkbox.scss +3 -2
- package/css/chips.scss +3 -7
- package/css/code-viewer.scss +1 -5
- package/css/context-menu.scss +5 -21
- package/css/datepicker.scss +6 -9
- package/css/docs.scss +0 -4
- package/css/dropdown.scss +1 -1
- package/css/editor.scss +1 -23
- package/css/file-uploader.scss +2 -2
- package/css/flyout-menu.scss +65 -58
- package/css/form.scss +0 -28
- package/css/gallery.scss +2 -3
- package/css/group-picker.scss +5 -35
- package/css/icons.scss +0 -3
- package/css/lightbox.scss +2 -4
- package/css/mixins.scss +8 -0
- package/css/modal.scss +3 -3
- package/css/parameters.scss +6 -1
- package/css/popover.scss +3 -15
- package/css/progress.scss +0 -6
- package/css/push-menu.scss +3 -28
- package/css/radiobutton.scss +2 -1
- package/css/range-slider.scss +1 -7
- package/css/scrollbar.scss +9 -16
- package/css/sidebar-nav.scss +0 -12
- package/css/stepper.scss +0 -4
- package/css/style.css +108 -116
- package/css/style.css.map +1 -1
- package/css/style.min.css +1 -1
- package/css/style.min.css.map +1 -1
- package/css/style.scss +1 -1
- package/css/table.scss +0 -4
- package/css/tabs.scss +0 -2
- package/css/timeline.scss +1 -13
- package/css/timepicker.scss +55 -39
- package/css/toast.scss +1 -1
- package/css/tooltip.scss +1 -5
- package/css/tree.scss +1 -1
- package/css/typography.scss +3 -3
- package/css/virtual-dropdown.scss +3 -28
- package/js/bottom-sheet.d.ts +3 -1
- package/js/bottom-sheet.js +26 -27
- package/js/calendar.d.ts +7 -0
- package/js/calendar.js +14 -33
- package/js/carousel.d.ts +2 -0
- package/js/carousel.js +13 -5
- package/js/chart.d.ts +4 -0
- package/js/chart.js +13 -31
- package/js/code-viewer.d.ts +1 -0
- package/js/code-viewer.js +4 -0
- package/js/context-menu.d.ts +9 -2
- package/js/context-menu.js +17 -14
- package/js/datepicker.d.ts +4 -0
- package/js/datepicker.js +26 -11
- package/js/dropdown.d.ts +3 -3
- package/js/dropdown.js +6 -9
- package/js/editor.d.ts +1 -1
- package/js/editor.js +14 -20
- package/js/file-uploader.d.ts +4 -0
- package/js/file-uploader.js +52 -43
- package/js/flyout-menu.d.ts +5 -3
- package/js/flyout-menu.js +23 -46
- package/js/gallery.d.ts +4 -0
- package/js/gallery.js +39 -50
- package/js/group-picker.d.ts +5 -0
- package/js/group-picker.js +12 -17
- package/js/lightbox.d.ts +3 -0
- package/js/lightbox.js +12 -6
- package/js/modal.d.ts +3 -1
- package/js/modal.js +14 -11
- package/js/popover.d.ts +2 -0
- package/js/popover.js +26 -30
- package/js/position.d.ts +2 -0
- package/js/position.js +1 -5
- package/js/push-menu.d.ts +2 -1
- package/js/push-menu.js +25 -48
- package/js/range-slider.d.ts +1 -0
- package/js/range-slider.js +5 -3
- package/js/scroll.d.ts +2 -0
- package/js/scroll.js +1 -0
- package/js/scrollbar.d.ts +2 -0
- package/js/scrollbar.js +24 -36
- package/js/select.d.ts +1 -0
- package/js/select.js +5 -10
- package/js/sidebar-nav.d.ts +2 -0
- package/js/sidebar-nav.js +8 -0
- package/js/stepper.d.ts +2 -0
- package/js/stepper.js +7 -1
- package/js/table.d.ts +4 -0
- package/js/table.js +15 -22
- package/js/tabs.d.ts +2 -0
- package/js/tabs.js +6 -14
- package/js/theme.d.ts +1 -0
- package/js/theme.js +5 -13
- package/js/timepicker.d.ts +22 -5
- package/js/timepicker.js +160 -57
- package/js/toast.d.ts +3 -1
- package/js/toast.js +25 -22
- package/js/tooltip.d.ts +2 -0
- package/js/tooltip.js +21 -19
- package/js/tree.d.ts +3 -0
- package/js/tree.js +13 -0
- package/js/utils.d.ts +1 -3
- package/js/utils.js +0 -3
- package/js/virtual-dropdown.d.ts +3 -0
- package/js/virtual-dropdown.js +25 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Basix 1.3.
|
|
1
|
+
# Basix 1.3.3
|
|
2
2
|
|
|
3
3
|
Basix is intended as a starter for the rapid development of a design. Each design element can be added individually to
|
|
4
4
|
include only the data required. It is using plain javascript / typescript and therefore is not dependent on any plugin.
|
|
@@ -77,7 +77,7 @@ Basix ships icons in two formats:
|
|
|
77
77
|
<span class="icon icon-home"></span>
|
|
78
78
|
```
|
|
79
79
|
|
|
80
|
-
**SVG sprite** — a single `svg-icons/icons.svg` sprite
|
|
80
|
+
**SVG sprite** — the full Google Material Icon set (~6,400+ icons) in a single `svg-icons/icons.svg` sprite. Preferred for consistent sizing, `currentColor` inheritance, and use inside JS-generated markup.
|
|
81
81
|
|
|
82
82
|
``` html
|
|
83
83
|
<svg class="icon-svg"><use href="svg-icons/icons.svg#home"/></svg>
|
|
@@ -616,18 +616,24 @@ new ContextMenu('.my-element', [
|
|
|
616
616
|
{ label: 'Rename', icon: 'edit', shortcut: 'F2', action: (target) => {} },
|
|
617
617
|
'separator',
|
|
618
618
|
{
|
|
619
|
-
label: 'Share', icon: '
|
|
619
|
+
label: 'Share', icon: 'share',
|
|
620
620
|
submenu: [
|
|
621
|
-
{ label: 'Copy link', icon: '
|
|
622
|
-
{ label: 'Send by mail', icon: 'mail',
|
|
621
|
+
{ label: 'Copy link', icon: 'link', action: (target) => {} },
|
|
622
|
+
{ label: 'Send by mail', icon: 'mail', action: (target) => {} },
|
|
623
623
|
]
|
|
624
624
|
},
|
|
625
625
|
'separator',
|
|
626
626
|
{ label: 'Delete', icon: 'delete', destructive: true, action: (target) => {} },
|
|
627
|
-
]);
|
|
627
|
+
], { spritePath: 'svg-icons/icons.svg' });
|
|
628
628
|
```
|
|
629
629
|
|
|
630
|
-
The constructor accepts a CSS selector string, a single `HTMLElement`, or an array of `HTMLElement`s as the first argument.
|
|
630
|
+
The constructor accepts a CSS selector string, a single `HTMLElement`, or an array of `HTMLElement`s as the first argument. The optional third argument is an options object.
|
|
631
|
+
|
|
632
|
+
#### Options
|
|
633
|
+
|
|
634
|
+
| Option | Type | Default | Description |
|
|
635
|
+
|---|---|---|---|
|
|
636
|
+
| `spritePath` | string | — | Path to the SVG sprite file (e.g. `'svg-icons/icons.svg'`). Icons are only rendered when this is set. |
|
|
631
637
|
|
|
632
638
|
#### Item types
|
|
633
639
|
|
|
@@ -642,7 +648,7 @@ The constructor accepts a CSS selector string, a single `HTMLElement`, or an arr
|
|
|
642
648
|
| Property | Type | Description |
|
|
643
649
|
|---|---|---|
|
|
644
650
|
| `label` | string | Display text |
|
|
645
|
-
| `icon` | string | SVG sprite icon
|
|
651
|
+
| `icon` | string | SVG sprite icon ID (e.g. `'delete'`). Requires `spritePath` option. |
|
|
646
652
|
| `shortcut` | string | Keyboard shortcut hint shown on the right (e.g. `'⌘O'`) |
|
|
647
653
|
| `disabled` | boolean | Renders item at reduced opacity, non-interactive |
|
|
648
654
|
| `destructive` | boolean | Renders item in error/red color |
|
package/css/accordion.scss
CHANGED
|
@@ -14,12 +14,10 @@
|
|
|
14
14
|
&:last-child { border-bottom: none; }
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
// Hidden checkbox toggle
|
|
18
17
|
.accordion-toggle {
|
|
19
18
|
display: none;
|
|
20
19
|
}
|
|
21
20
|
|
|
22
|
-
// Clickable header / trigger
|
|
23
21
|
.accordion-header {
|
|
24
22
|
display: flex;
|
|
25
23
|
justify-content: space-between;
|
|
@@ -49,7 +47,6 @@
|
|
|
49
47
|
}
|
|
50
48
|
}
|
|
51
49
|
|
|
52
|
-
// Active state
|
|
53
50
|
.accordion-toggle:checked + .accordion-header {
|
|
54
51
|
color: var(--accent-color);
|
|
55
52
|
|
|
@@ -59,7 +56,6 @@
|
|
|
59
56
|
}
|
|
60
57
|
}
|
|
61
58
|
|
|
62
|
-
// Grid wrapper — animates height via grid-template-rows
|
|
63
59
|
.accordion-content {
|
|
64
60
|
display: grid;
|
|
65
61
|
grid-template-rows: 0fr;
|
|
@@ -71,7 +67,6 @@
|
|
|
71
67
|
grid-template-rows: 1fr;
|
|
72
68
|
}
|
|
73
69
|
|
|
74
|
-
// Inner body — min-height:0 is required for grid 0fr to collapse
|
|
75
70
|
.accordion-body {
|
|
76
71
|
min-height: 0;
|
|
77
72
|
padding: 0;
|
package/css/badge.scss
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
align-items: center;
|
|
12
12
|
gap: calc($spacing * 0.3);
|
|
13
13
|
padding: calc($spacing * 0.15) calc($spacing * 0.5);
|
|
14
|
-
border-radius:
|
|
14
|
+
border-radius: $radius-xl;
|
|
15
15
|
font-size: 0.75rem;
|
|
16
16
|
font-weight: 500;
|
|
17
17
|
line-height: 1.4;
|
|
@@ -20,7 +20,6 @@
|
|
|
20
20
|
vertical-align: middle;
|
|
21
21
|
border: 1px solid transparent;
|
|
22
22
|
|
|
23
|
-
// Default — neutral
|
|
24
23
|
background: var(--secondary-background);
|
|
25
24
|
color: var(--secondary-text);
|
|
26
25
|
|
|
@@ -56,7 +55,6 @@
|
|
|
56
55
|
border-color: color-mix(in srgb, var(--error) 20%, transparent);
|
|
57
56
|
}
|
|
58
57
|
|
|
59
|
-
// Solid filled
|
|
60
58
|
&-solid {
|
|
61
59
|
&.badge-info { background: var(--accent-color); color: #fff; border-color: transparent; }
|
|
62
60
|
&.badge-success { background: var(--success); color: #fff; border-color: transparent; }
|
|
@@ -64,7 +62,6 @@
|
|
|
64
62
|
&.badge-error { background: var(--error); color: #fff; border-color: transparent; }
|
|
65
63
|
}
|
|
66
64
|
|
|
67
|
-
// Outline only
|
|
68
65
|
&-outline {
|
|
69
66
|
background: transparent;
|
|
70
67
|
border-color: var(--divider);
|
|
@@ -76,7 +73,6 @@
|
|
|
76
73
|
&.badge-error { border-color: var(--error); color: var(--error); }
|
|
77
74
|
}
|
|
78
75
|
|
|
79
|
-
// Sizes
|
|
80
76
|
&-sm {
|
|
81
77
|
padding: calc($spacing * 0.1) calc($spacing * 0.35);
|
|
82
78
|
font-size: 0.6875rem;
|
|
@@ -87,7 +83,6 @@
|
|
|
87
83
|
font-size: 0.875rem;
|
|
88
84
|
}
|
|
89
85
|
|
|
90
|
-
// Dot indicator — no text
|
|
91
86
|
&-dot {
|
|
92
87
|
width: 0.5rem;
|
|
93
88
|
height: 0.5rem;
|
package/css/bottom-sheet.scss
CHANGED
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
background: var(--background);
|
|
40
40
|
border: 1px solid var(--divider);
|
|
41
41
|
border-bottom: none;
|
|
42
|
-
border-radius:
|
|
42
|
+
border-radius: $radius-xl $radius-xl 0 0;
|
|
43
43
|
box-shadow:
|
|
44
44
|
0 -2px 0 rgba(255, 255, 255, 0.06) inset,
|
|
45
45
|
0 -8px 40px rgba(0, 0, 0, 0.18),
|
|
@@ -54,7 +54,6 @@
|
|
|
54
54
|
will-change: transform;
|
|
55
55
|
overscroll-behavior: contain;
|
|
56
56
|
|
|
57
|
-
// Snap height variants
|
|
58
57
|
&.snap-half {
|
|
59
58
|
height: 50vh;
|
|
60
59
|
}
|
|
@@ -65,7 +64,6 @@
|
|
|
65
64
|
}
|
|
66
65
|
}
|
|
67
66
|
|
|
68
|
-
// Drag handle — large tap target wrapping a visual pill
|
|
69
67
|
.bottom-sheet-handle {
|
|
70
68
|
flex-shrink: 0;
|
|
71
69
|
display: flex;
|
|
@@ -97,7 +95,6 @@
|
|
|
97
95
|
}
|
|
98
96
|
}
|
|
99
97
|
|
|
100
|
-
// Scrollable content area
|
|
101
98
|
.bottom-sheet-body {
|
|
102
99
|
flex: 1;
|
|
103
100
|
overflow-x: hidden;
|
|
@@ -106,7 +103,6 @@
|
|
|
106
103
|
padding: 0 $spacing $spacing;
|
|
107
104
|
padding-bottom: calc($spacing + env(safe-area-inset-bottom));
|
|
108
105
|
|
|
109
|
-
// fade out bottom edge when content overflows
|
|
110
106
|
mask-image: linear-gradient(to bottom, black calc(100% - 2rem), transparent 100%);
|
|
111
107
|
-webkit-mask-image: linear-gradient(to bottom, black calc(100% - 2rem), transparent 100%);
|
|
112
108
|
|
|
@@ -116,7 +112,6 @@
|
|
|
116
112
|
}
|
|
117
113
|
}
|
|
118
114
|
|
|
119
|
-
// Header and footer are outside .bottom-sheet-body so they stay fixed
|
|
120
115
|
.bottom-sheet-header {
|
|
121
116
|
flex-shrink: 0;
|
|
122
117
|
display: flex;
|
|
@@ -177,12 +172,12 @@
|
|
|
177
172
|
width: 480px;
|
|
178
173
|
bottom: $spacing;
|
|
179
174
|
border: 1px solid var(--divider);
|
|
180
|
-
border-radius:
|
|
175
|
+
border-radius: $radius-xl;
|
|
181
176
|
transform: translateX(-50%) translateY(calc(100% + #{$spacing}));
|
|
182
177
|
max-height: 80vh;
|
|
183
178
|
|
|
184
179
|
.bottom-sheet-footer {
|
|
185
|
-
border-radius: 0 0
|
|
180
|
+
border-radius: 0 0 $radius-xl $radius-xl;
|
|
186
181
|
}
|
|
187
182
|
}
|
|
188
183
|
|
package/css/breadcrumb.scss
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
@use "properties";
|
|
2
2
|
@use "parameters" as *;
|
|
3
|
-
|
|
4
|
-
// ─── Breadcrumb ────────────────────────────────────────────────────────────────
|
|
3
|
+
@use "mixins" as *;
|
|
5
4
|
|
|
6
5
|
.breadcrumb {
|
|
7
6
|
ol {
|
|
@@ -19,9 +18,8 @@
|
|
|
19
18
|
align-items: center;
|
|
20
19
|
min-width: 0;
|
|
21
20
|
|
|
22
|
-
// Chevron separator via Material Symbols font
|
|
23
21
|
+ li::before {
|
|
24
|
-
content: "\e409";
|
|
22
|
+
content: "\e409";
|
|
25
23
|
font-family: "Material Symbols Outlined 24pt";
|
|
26
24
|
font-size: 1.125rem;
|
|
27
25
|
line-height: 1;
|
|
@@ -40,7 +38,7 @@
|
|
|
40
38
|
color: var(--secondary-text);
|
|
41
39
|
text-decoration: none;
|
|
42
40
|
padding: 0.25rem 0.375rem;
|
|
43
|
-
border-radius:
|
|
41
|
+
border-radius: $radius-sm;
|
|
44
42
|
white-space: nowrap;
|
|
45
43
|
transition: color 0.15s ease, background 0.15s ease;
|
|
46
44
|
|
|
@@ -54,13 +52,11 @@
|
|
|
54
52
|
}
|
|
55
53
|
|
|
56
54
|
&:focus-visible {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
border-radius: calc($border-radius / 2);
|
|
55
|
+
@include focus-ring(-1px);
|
|
56
|
+
border-radius: $radius-sm;
|
|
60
57
|
}
|
|
61
58
|
}
|
|
62
59
|
|
|
63
|
-
// Current page item (not a link)
|
|
64
60
|
&[aria-current="page"] > span {
|
|
65
61
|
display: block;
|
|
66
62
|
font-size: 0.8125rem;
|
|
@@ -74,14 +70,12 @@
|
|
|
74
70
|
}
|
|
75
71
|
}
|
|
76
72
|
|
|
77
|
-
// Collapse modifier: on small screens, hide everything except last ancestor + current
|
|
78
73
|
&--collapse {
|
|
79
74
|
@media (max-width: 600px) {
|
|
80
75
|
li:not(:nth-last-child(-n+2)) {
|
|
81
76
|
display: none;
|
|
82
77
|
}
|
|
83
78
|
|
|
84
|
-
// Replace separator with ellipsis when items are hidden
|
|
85
79
|
li:nth-last-child(2):not(:first-child)::before {
|
|
86
80
|
content: "···";
|
|
87
81
|
font-family: inherit;
|
|
@@ -94,8 +88,6 @@
|
|
|
94
88
|
}
|
|
95
89
|
}
|
|
96
90
|
|
|
97
|
-
// ─── Page Header ───────────────────────────────────────────────────────────────
|
|
98
|
-
|
|
99
91
|
.page-header {
|
|
100
92
|
padding-block: calc($spacing * 1.25) $spacing;
|
|
101
93
|
|
|
@@ -121,7 +113,7 @@
|
|
|
121
113
|
align-items: center;
|
|
122
114
|
gap: calc($spacing * 0.5);
|
|
123
115
|
flex-shrink: 0;
|
|
124
|
-
padding-top: 0.3rem;
|
|
116
|
+
padding-top: 0.3rem;
|
|
125
117
|
}
|
|
126
118
|
|
|
127
119
|
&__description {
|
|
@@ -132,7 +124,6 @@
|
|
|
132
124
|
color: var(--secondary-text);
|
|
133
125
|
}
|
|
134
126
|
|
|
135
|
-
// Bordered variant — adds a bottom divider and bottom margin
|
|
136
127
|
&--bordered {
|
|
137
128
|
border-bottom: 1px solid var(--divider);
|
|
138
129
|
padding-bottom: calc($spacing * 1.25);
|
package/css/button.scss
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
@use "properties";
|
|
2
2
|
@use "parameters" as *;
|
|
3
|
+
@use "mixins" as *;
|
|
3
4
|
|
|
4
5
|
@mixin button-variant($bg) {
|
|
5
6
|
background: $bg;
|
|
@@ -55,7 +56,7 @@ button,
|
|
|
55
56
|
|
|
56
57
|
&:focus-visible {
|
|
57
58
|
outline: none;
|
|
58
|
-
|
|
59
|
+
@include focus-glow();
|
|
59
60
|
}
|
|
60
61
|
|
|
61
62
|
&.active {
|
package/css/calendar.scss
CHANGED
|
@@ -1,16 +1,3 @@
|
|
|
1
|
-
// ============================================================
|
|
2
|
-
// calendar.scss — Basix Calendar Component Styles
|
|
3
|
-
//
|
|
4
|
-
// Integration principles:
|
|
5
|
-
// - No hard-coded colours — uses Basix CSS custom properties
|
|
6
|
-
// - No global reset
|
|
7
|
-
// - BEM: .cal / .cal__* / is-* / has-*
|
|
8
|
-
// - State classes match Basix convention: .is-today, .is-selected,
|
|
9
|
-
// .is-disabled, .has-events, .active, .error, .success
|
|
10
|
-
// - Font, spacing, radius, border — all from Basix tokens
|
|
11
|
-
// - Event pills accept any Basix badge/alert class as className
|
|
12
|
-
// ============================================================
|
|
13
|
-
|
|
14
1
|
@use "parameters" as *;
|
|
15
2
|
|
|
16
3
|
.cal {
|
|
@@ -53,10 +40,6 @@
|
|
|
53
40
|
box-sizing: inherit;
|
|
54
41
|
}
|
|
55
42
|
|
|
56
|
-
// ------------------------------------------------------------------
|
|
57
|
-
// Header
|
|
58
|
-
// ------------------------------------------------------------------
|
|
59
|
-
|
|
60
43
|
.cal__header {
|
|
61
44
|
display: flex;
|
|
62
45
|
align-items: center;
|
|
@@ -157,18 +140,10 @@
|
|
|
157
140
|
}
|
|
158
141
|
}
|
|
159
142
|
|
|
160
|
-
// ------------------------------------------------------------------
|
|
161
|
-
// Body wrapper
|
|
162
|
-
// ------------------------------------------------------------------
|
|
163
|
-
|
|
164
143
|
.cal__body {
|
|
165
144
|
width: 100%;
|
|
166
145
|
}
|
|
167
146
|
|
|
168
|
-
// ------------------------------------------------------------------
|
|
169
|
-
// Month View
|
|
170
|
-
// ------------------------------------------------------------------
|
|
171
|
-
|
|
172
147
|
.cal__month-grid {
|
|
173
148
|
border: 1px solid var(--cal-border);
|
|
174
149
|
border-radius: var(--cal-radius);
|
|
@@ -193,7 +168,6 @@
|
|
|
193
168
|
text-transform: uppercase;
|
|
194
169
|
}
|
|
195
170
|
|
|
196
|
-
// Each week row is a 7-column subgrid with span bars overlaid
|
|
197
171
|
.cal__week-row {
|
|
198
172
|
display: grid;
|
|
199
173
|
grid-template-columns: repeat(7, minmax(0, 1fr));
|
|
@@ -202,7 +176,6 @@
|
|
|
202
176
|
position: relative;
|
|
203
177
|
border-top: 1px solid var(--cal-border);
|
|
204
178
|
|
|
205
|
-
// Push event pills below span bars
|
|
206
179
|
.cal__day-events {
|
|
207
180
|
margin-top: calc(var(--span-lanes, 0) * var(--cal-span-lane-height, 20px));
|
|
208
181
|
}
|
|
@@ -273,7 +246,6 @@
|
|
|
273
246
|
overflow: hidden;
|
|
274
247
|
}
|
|
275
248
|
|
|
276
|
-
// Event pills — use badge color semantics for the left border accent
|
|
277
249
|
.cal__event-pill {
|
|
278
250
|
font-size: 0.6875rem;
|
|
279
251
|
line-height: 1.4;
|
|
@@ -305,7 +277,6 @@
|
|
|
305
277
|
outline-offset: 1px;
|
|
306
278
|
}
|
|
307
279
|
|
|
308
|
-
// Badge-class color mapping for left border
|
|
309
280
|
&.badge-success { border-left-color: var(--success); }
|
|
310
281
|
&.badge-warning { border-left-color: var(--warning); }
|
|
311
282
|
&.badge-error { border-left-color: var(--error); }
|
|
@@ -320,10 +291,6 @@
|
|
|
320
291
|
cursor: pointer;
|
|
321
292
|
}
|
|
322
293
|
|
|
323
|
-
// ------------------------------------------------------------------
|
|
324
|
-
// Span bars — multi-day events in month and week all-day row
|
|
325
|
-
// ------------------------------------------------------------------
|
|
326
|
-
|
|
327
294
|
.cal__span-bar {
|
|
328
295
|
position: absolute;
|
|
329
296
|
height: 18px;
|
|
@@ -342,7 +309,6 @@
|
|
|
342
309
|
z-index: 2;
|
|
343
310
|
transition: filter 0.12s ease, transform 0.1s ease;
|
|
344
311
|
|
|
345
|
-
// Position via CSS custom props set inline
|
|
346
312
|
left: calc(var(--span-col) * 100% / 7);
|
|
347
313
|
width: calc(var(--span-len) * 100% / 7 - 4px);
|
|
348
314
|
|
|
@@ -353,19 +319,16 @@
|
|
|
353
319
|
outline-offset: 1px;
|
|
354
320
|
}
|
|
355
321
|
|
|
356
|
-
// Rounded end removed when event continues past week boundary
|
|
357
322
|
&--cont-before { border-left: none; border-radius: 0 var(--cal-radius-sm) var(--cal-radius-sm) 0; padding-left: 4px; }
|
|
358
323
|
&--cont-after { border-radius: var(--cal-radius-sm) 0 0 var(--cal-radius-sm); }
|
|
359
324
|
&--cont-before#{&}--cont-after { border-radius: 0; }
|
|
360
325
|
|
|
361
|
-
// Color variants — match badge semantics
|
|
362
326
|
&.badge-success { border-left-color: var(--success); background: color-mix(in srgb, var(--success) 14%, var(--cal-bg)); }
|
|
363
327
|
&.badge-warning { border-left-color: var(--warning); background: color-mix(in srgb, var(--warning) 14%, var(--cal-bg)); }
|
|
364
328
|
&.badge-error { border-left-color: var(--error); background: color-mix(in srgb, var(--error) 14%, var(--cal-bg)); }
|
|
365
329
|
&.badge-info { border-left-color: var(--accent-color); background: color-mix(in srgb, var(--accent-color) 14%, var(--cal-bg)); }
|
|
366
330
|
}
|
|
367
331
|
|
|
368
|
-
// Month view: bars sit just below the date number
|
|
369
332
|
.cal__week-row > .cal__span-bar {
|
|
370
333
|
top: calc(36px + var(--span-lane) * var(--cal-span-lane-height, 20px));
|
|
371
334
|
}
|
|
@@ -376,10 +339,6 @@
|
|
|
376
339
|
opacity: 0.7;
|
|
377
340
|
}
|
|
378
341
|
|
|
379
|
-
// ------------------------------------------------------------------
|
|
380
|
-
// Week View
|
|
381
|
-
// ------------------------------------------------------------------
|
|
382
|
-
|
|
383
342
|
.cal__week {
|
|
384
343
|
border: 1px solid var(--cal-border);
|
|
385
344
|
border-radius: var(--cal-radius);
|
|
@@ -473,14 +432,12 @@
|
|
|
473
432
|
font-weight: 500;
|
|
474
433
|
}
|
|
475
434
|
|
|
476
|
-
// Span container for all-day events in week view
|
|
477
435
|
.cal__allday-spans {
|
|
478
436
|
position: relative;
|
|
479
437
|
display: grid;
|
|
480
438
|
grid-template-columns: repeat(7, minmax(0, 1fr));
|
|
481
439
|
min-height: calc(max(var(--allday-lanes, 1), 1) * var(--cal-span-lane-height, 20px) + 6px);
|
|
482
440
|
|
|
483
|
-
// Week view span bars: no date-num offset, 2px top padding per lane
|
|
484
441
|
> .cal__span-bar {
|
|
485
442
|
top: calc(var(--span-lane) * var(--cal-span-lane-height, 20px) + 3px);
|
|
486
443
|
}
|
|
@@ -609,7 +566,6 @@
|
|
|
609
566
|
z-index: 3;
|
|
610
567
|
}
|
|
611
568
|
|
|
612
|
-
// Badge-class color mapping
|
|
613
569
|
&.badge-success {
|
|
614
570
|
border-left-color: var(--success);
|
|
615
571
|
background: color-mix(in srgb, var(--success) 10%, var(--cal-bg));
|
|
@@ -628,7 +584,6 @@
|
|
|
628
584
|
}
|
|
629
585
|
}
|
|
630
586
|
|
|
631
|
-
// Now-line
|
|
632
587
|
.cal__now-line {
|
|
633
588
|
position: absolute;
|
|
634
589
|
left: var(--cal-time-col-width);
|
|
@@ -652,10 +607,6 @@
|
|
|
652
607
|
}
|
|
653
608
|
}
|
|
654
609
|
|
|
655
|
-
// ------------------------------------------------------------------
|
|
656
|
-
// Agenda View
|
|
657
|
-
// ------------------------------------------------------------------
|
|
658
|
-
|
|
659
610
|
.cal__agenda {
|
|
660
611
|
border: 1px solid var(--cal-border);
|
|
661
612
|
border-radius: var(--cal-radius);
|
|
@@ -747,7 +698,6 @@
|
|
|
747
698
|
outline-offset: 1px;
|
|
748
699
|
}
|
|
749
700
|
|
|
750
|
-
// Badge-class color mapping
|
|
751
701
|
&.badge-success { border-left-color: var(--success); }
|
|
752
702
|
&.badge-warning { border-left-color: var(--warning); }
|
|
753
703
|
&.badge-error { border-left-color: var(--error); }
|
|
@@ -779,10 +729,6 @@
|
|
|
779
729
|
text-align: center;
|
|
780
730
|
}
|
|
781
731
|
|
|
782
|
-
// ------------------------------------------------------------------
|
|
783
|
-
// Responsive — mobile-first refinements
|
|
784
|
-
// ------------------------------------------------------------------
|
|
785
|
-
|
|
786
732
|
@media (max-width: 600px) {
|
|
787
733
|
.cal__header {
|
|
788
734
|
gap: var(--cal-spacing-xs);
|
|
@@ -808,7 +754,6 @@
|
|
|
808
754
|
}
|
|
809
755
|
}
|
|
810
756
|
|
|
811
|
-
// Month grid — borderless, airy, centered numbers
|
|
812
757
|
.cal__month-grid {
|
|
813
758
|
border: none;
|
|
814
759
|
border-radius: 0;
|
|
@@ -872,12 +817,10 @@
|
|
|
872
817
|
display: none;
|
|
873
818
|
}
|
|
874
819
|
|
|
875
|
-
// Reset span-lane-based margin since bars are hidden
|
|
876
820
|
.cal__week-row .cal__day-events {
|
|
877
821
|
margin-top: 0;
|
|
878
822
|
}
|
|
879
823
|
|
|
880
|
-
// Week view — compact
|
|
881
824
|
.cal {
|
|
882
825
|
--cal-time-col-width: 40px;
|
|
883
826
|
}
|
|
@@ -902,7 +845,6 @@
|
|
|
902
845
|
padding-right: 3px;
|
|
903
846
|
}
|
|
904
847
|
|
|
905
|
-
// Agenda — tighter
|
|
906
848
|
.cal__agenda-day {
|
|
907
849
|
padding: var(--cal-spacing-sm) var(--cal-spacing-md);
|
|
908
850
|
gap: var(--cal-spacing-md);
|
|
@@ -924,10 +866,6 @@
|
|
|
924
866
|
}
|
|
925
867
|
}
|
|
926
868
|
|
|
927
|
-
// ------------------------------------------------------------------
|
|
928
|
-
// Print styles
|
|
929
|
-
// ------------------------------------------------------------------
|
|
930
|
-
|
|
931
869
|
@media print {
|
|
932
870
|
.cal__header .cal__view-toggle,
|
|
933
871
|
.cal__header .cal__nav .cal__btn--today {
|
|
@@ -946,10 +884,6 @@
|
|
|
946
884
|
}
|
|
947
885
|
}
|
|
948
886
|
|
|
949
|
-
// ------------------------------------------------------------------
|
|
950
|
-
// Animation — staggered grid entrance + now-line pulse
|
|
951
|
-
// ------------------------------------------------------------------
|
|
952
|
-
|
|
953
887
|
@media (prefers-reduced-motion: no-preference) {
|
|
954
888
|
.cal__body {
|
|
955
889
|
animation: cal-slide-in 0.25s cubic-bezier(0.2, 0, 0, 1);
|
|
@@ -960,7 +894,6 @@
|
|
|
960
894
|
animation: cal-cell-in 0.3s cubic-bezier(0.2, 0, 0, 1) both;
|
|
961
895
|
}
|
|
962
896
|
|
|
963
|
-
// Stagger day cells across week rows
|
|
964
897
|
@for $i from 1 through 7 {
|
|
965
898
|
.cal__week-row:nth-child(#{$i}) .cal__day {
|
|
966
899
|
animation-delay: #{0.03s * ($i - 1) + 0.01s};
|
package/css/card.scss
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
@use "defaults";
|
|
3
3
|
@use "parameters" as *;
|
|
4
4
|
|
|
5
|
-
// Base card styles
|
|
6
5
|
.card {
|
|
7
6
|
box-shadow: $shadow;
|
|
8
7
|
background: var(--secondary-background);
|
|
@@ -17,14 +16,12 @@
|
|
|
17
16
|
flex-direction: row;
|
|
18
17
|
}
|
|
19
18
|
|
|
20
|
-
// Card header
|
|
21
19
|
.card-header {
|
|
22
20
|
border-bottom: 1px solid var(--divider);
|
|
23
21
|
margin: (-$spacing) (-$spacing) $spacing (-$spacing);
|
|
24
22
|
padding: $spacing;
|
|
25
23
|
}
|
|
26
24
|
|
|
27
|
-
// Card footer
|
|
28
25
|
.card-footer {
|
|
29
26
|
border-top: 1px solid var(--divider);
|
|
30
27
|
margin: auto (-$spacing) (-$spacing) (-$spacing);
|
|
@@ -32,7 +29,6 @@
|
|
|
32
29
|
}
|
|
33
30
|
}
|
|
34
31
|
|
|
35
|
-
// Card variants
|
|
36
32
|
.card-flat {
|
|
37
33
|
box-shadow: none;
|
|
38
34
|
border: 1px solid var(--divider);
|
|
@@ -51,7 +47,6 @@
|
|
|
51
47
|
}
|
|
52
48
|
}
|
|
53
49
|
|
|
54
|
-
// Utility modifiers for cards
|
|
55
50
|
.card-padding-none {
|
|
56
51
|
padding: 0;
|
|
57
52
|
}
|
package/css/carousel.scss
CHANGED
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
box-shadow: $shadow;
|
|
11
11
|
background: var(--secondary-background);
|
|
12
12
|
|
|
13
|
-
// Gradient scrim so controls are readable over any slide content
|
|
14
13
|
&::after {
|
|
15
14
|
content: '';
|
|
16
15
|
position: absolute;
|
|
@@ -49,7 +48,6 @@
|
|
|
49
48
|
user-select: none;
|
|
50
49
|
}
|
|
51
50
|
|
|
52
|
-
// Prev / next buttons — glass pill, always visible
|
|
53
51
|
.carousel-button {
|
|
54
52
|
position: absolute;
|
|
55
53
|
top: 50%;
|
|
@@ -92,7 +90,6 @@
|
|
|
92
90
|
.carousel-button--left { left: calc($spacing * 0.75); }
|
|
93
91
|
.carousel-button--right { right: calc($spacing * 0.75); }
|
|
94
92
|
|
|
95
|
-
// Dot navigation
|
|
96
93
|
.carousel-nav {
|
|
97
94
|
display: flex;
|
|
98
95
|
align-items: center;
|