@tokis/theme 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +51 -0
  3. package/package.json +69 -0
  4. package/src/base/index.css +19 -0
  5. package/src/base/reset.css +76 -0
  6. package/src/base/variables.css +206 -0
  7. package/src/components/accordion.css +124 -0
  8. package/src/components/alert.css +196 -0
  9. package/src/components/app-bar.css +69 -0
  10. package/src/components/avatar.css +199 -0
  11. package/src/components/bottom-nav.css +79 -0
  12. package/src/components/button.css +213 -0
  13. package/src/components/card.css +248 -0
  14. package/src/components/charts.css +38 -0
  15. package/src/components/checkbox.css +158 -0
  16. package/src/components/circular-progress.css +62 -0
  17. package/src/components/codeblock.css +229 -0
  18. package/src/components/command-palette.css +183 -0
  19. package/src/components/confirm-dialog.css +95 -0
  20. package/src/components/context-menu.css +82 -0
  21. package/src/components/dialog.css +149 -0
  22. package/src/components/drawer.css +167 -0
  23. package/src/components/dropdown.css +33 -0
  24. package/src/components/emptystate.css +42 -0
  25. package/src/components/extended.css +663 -0
  26. package/src/components/hover-card.css +29 -0
  27. package/src/components/index.css +40 -0
  28. package/src/components/infinite-scroll.css +45 -0
  29. package/src/components/input.css +201 -0
  30. package/src/components/nav-rail.css +104 -0
  31. package/src/components/navigation.css +273 -0
  32. package/src/components/pagination.css +91 -0
  33. package/src/components/progress.css +192 -0
  34. package/src/components/result.css +58 -0
  35. package/src/components/search-field.css +102 -0
  36. package/src/components/select.css +175 -0
  37. package/src/components/slider.css +115 -0
  38. package/src/components/snackbar.css +234 -0
  39. package/src/components/statistic.css +70 -0
  40. package/src/components/stepper.css +131 -0
  41. package/src/components/switch.css +107 -0
  42. package/src/components/tabs.css +152 -0
  43. package/src/components/timeline.css +125 -0
  44. package/src/components/toggle.css +103 -0
  45. package/src/components/tooltip.css +113 -0
  46. package/src/components/treeview.css +107 -0
  47. package/src/components/virtual-list.css +19 -0
  48. package/src/index.css +6 -0
  49. package/src/utilities/index.css +2 -0
  50. package/src/utilities/layout.css +28 -0
@@ -0,0 +1,152 @@
1
+ /* ============================================================
2
+ Tokis — Tabs
3
+ ============================================================ */
4
+
5
+ .tokis-tabs-root {
6
+ display: flex;
7
+ flex-direction: column;
8
+ }
9
+ .tokis-tabs-root--vertical {
10
+ flex-direction: row;
11
+ align-items: flex-start;
12
+ }
13
+
14
+ /* ── Tab List ───────────────────────────────────────────────── */
15
+
16
+ .tokis-tabs-list {
17
+ display: flex;
18
+ align-items: center;
19
+ border-bottom: 1px solid var(--tokis-color-border);
20
+ gap: 0;
21
+ overflow-x: auto;
22
+ scrollbar-width: none;
23
+ flex-shrink: 0;
24
+ -webkit-overflow-scrolling: touch;
25
+ }
26
+ .tokis-tabs-list::-webkit-scrollbar { display: none; }
27
+
28
+ .tokis-tabs-root--vertical .tokis-tabs-list {
29
+ flex-direction: column;
30
+ border-bottom: none;
31
+ border-right: 1px solid var(--tokis-color-border);
32
+ align-items: flex-start;
33
+ min-width: 160px;
34
+ overflow-x: visible;
35
+ overflow-y: auto;
36
+ }
37
+
38
+ /* Pills variant */
39
+ .tokis-tabs-list--pills {
40
+ border-bottom: none;
41
+ background: var(--tokis-color-neutral-100);
42
+ border-radius: var(--tokis-radius-lg);
43
+ padding: var(--tokis-spacing-1);
44
+ gap: var(--tokis-spacing-1);
45
+ }
46
+
47
+ /* ── Trigger ────────────────────────────────────────────────── */
48
+
49
+ .tokis-tabs-trigger {
50
+ display: inline-flex;
51
+ align-items: center;
52
+ gap: var(--tokis-spacing-2);
53
+ padding: var(--tokis-spacing-2) var(--tokis-spacing-4);
54
+ font-size: var(--tokis-font-size-sm);
55
+ font-weight: var(--tokis-font-weight-medium);
56
+ font-family: inherit;
57
+ color: var(--tokis-text-secondary);
58
+ background: none;
59
+ border: none;
60
+ border-bottom: 2px solid transparent;
61
+ cursor: pointer;
62
+ white-space: nowrap;
63
+ transition:
64
+ color var(--tokis-duration-fast) var(--tokis-ease-out),
65
+ border-color var(--tokis-duration-fast) var(--tokis-ease-out),
66
+ background var(--tokis-duration-fast) var(--tokis-ease-out);
67
+ outline: none;
68
+ margin-bottom: -1px;
69
+ border-radius: var(--tokis-radius-md) var(--tokis-radius-md) 0 0;
70
+ -webkit-tap-highlight-color: transparent;
71
+ }
72
+
73
+ .tokis-tabs-trigger:hover {
74
+ color: var(--tokis-text-primary);
75
+ }
76
+
77
+ .tokis-tabs-trigger[data-active="true"] {
78
+ color: var(--tokis-color-primary);
79
+ border-bottom-color: var(--tokis-color-primary);
80
+ }
81
+
82
+ .tokis-tabs-trigger:focus-visible {
83
+ outline: 2px solid var(--tokis-color-primary);
84
+ outline-offset: -2px;
85
+ border-radius: var(--tokis-radius-sm);
86
+ }
87
+
88
+ .tokis-tabs-trigger[data-disabled="true"],
89
+ .tokis-tabs-trigger[disabled] {
90
+ opacity: 0.45;
91
+ cursor: not-allowed;
92
+ pointer-events: none;
93
+ }
94
+
95
+ /* Pills trigger */
96
+ .tokis-tabs-list--pills .tokis-tabs-trigger {
97
+ border-bottom: none;
98
+ border-radius: var(--tokis-radius-md);
99
+ margin-bottom: 0;
100
+ padding: var(--tokis-spacing-2) var(--tokis-spacing-3);
101
+ }
102
+ .tokis-tabs-list--pills .tokis-tabs-trigger:hover {
103
+ background: var(--tokis-color-neutral-200);
104
+ color: var(--tokis-text-primary);
105
+ }
106
+ .tokis-tabs-list--pills .tokis-tabs-trigger[data-active="true"] {
107
+ background: var(--tokis-color-surface-raised);
108
+ color: var(--tokis-text-primary);
109
+ box-shadow: var(--tokis-shadow-sm);
110
+ }
111
+
112
+ /* Vertical trigger */
113
+ .tokis-tabs-root--vertical .tokis-tabs-trigger {
114
+ border-bottom: none;
115
+ border-right: 2px solid transparent;
116
+ border-radius: var(--tokis-radius-md) 0 0 var(--tokis-radius-md);
117
+ margin-bottom: 0;
118
+ margin-right: -1px;
119
+ width: 100%;
120
+ justify-content: flex-start;
121
+ }
122
+ .tokis-tabs-root--vertical .tokis-tabs-trigger[data-active="true"] {
123
+ border-right-color: var(--tokis-color-primary);
124
+ background: var(--tokis-color-primary-subtle);
125
+ color: var(--tokis-color-primary);
126
+ }
127
+
128
+ /* ── Panel ──────────────────────────────────────────────────── */
129
+
130
+ .tokis-tabs-panel {
131
+ padding: var(--tokis-spacing-5) 0;
132
+ outline: none;
133
+ animation: tokis-tab-fade-in var(--tokis-duration-fast) var(--tokis-ease-out);
134
+ }
135
+ .tokis-tabs-root--vertical .tokis-tabs-panel {
136
+ padding: 0 0 0 var(--tokis-spacing-6);
137
+ flex: 1;
138
+ animation: none;
139
+ }
140
+ .tokis-tabs-panel[hidden] { display: none; }
141
+
142
+ @keyframes tokis-tab-fade-in {
143
+ from { opacity: 0; transform: translateY(4px); }
144
+ to { opacity: 1; transform: translateY(0); }
145
+ }
146
+
147
+ /* ── Reduced motion ─────────────────────────────────────────── */
148
+
149
+ @media (prefers-reduced-motion: reduce) {
150
+ .tokis-tabs-trigger { transition: none; }
151
+ .tokis-tabs-panel { animation: none; }
152
+ }
@@ -0,0 +1,125 @@
1
+ .tokis-timeline {
2
+ list-style: none;
3
+ margin: 0;
4
+ padding: 0;
5
+ display: flex;
6
+ flex-direction: column;
7
+ }
8
+
9
+ .tokis-timeline__item {
10
+ display: flex;
11
+ gap: var(--tokis-spacing-4);
12
+ position: relative;
13
+ }
14
+
15
+ .tokis-timeline__track {
16
+ display: flex;
17
+ flex-direction: column;
18
+ align-items: center;
19
+ flex-shrink: 0;
20
+ }
21
+
22
+ .tokis-timeline__dot {
23
+ display: flex;
24
+ align-items: center;
25
+ justify-content: center;
26
+ width: 32px;
27
+ height: 32px;
28
+ border-radius: var(--tokis-radius-full);
29
+ background: var(--tokis-color-surface-raised);
30
+ border: 2px solid var(--tokis-color-border);
31
+ color: var(--tokis-text-secondary);
32
+ flex-shrink: 0;
33
+ z-index: 1;
34
+ }
35
+
36
+ .tokis-timeline__dot--success {
37
+ background: color-mix(in srgb, var(--tokis-color-success) 15%, transparent);
38
+ border-color: var(--tokis-color-success);
39
+ color: var(--tokis-color-success);
40
+ }
41
+
42
+ .tokis-timeline__dot--error {
43
+ background: color-mix(in srgb, var(--tokis-color-error) 15%, transparent);
44
+ border-color: var(--tokis-color-error);
45
+ color: var(--tokis-color-error);
46
+ }
47
+
48
+ .tokis-timeline__dot--warning {
49
+ background: color-mix(in srgb, var(--tokis-color-warning) 15%, transparent);
50
+ border-color: var(--tokis-color-warning);
51
+ color: var(--tokis-color-warning);
52
+ }
53
+
54
+ .tokis-timeline__dot--info {
55
+ background: color-mix(in srgb, var(--tokis-color-info) 15%, transparent);
56
+ border-color: var(--tokis-color-info);
57
+ color: var(--tokis-color-info);
58
+ }
59
+
60
+ .tokis-timeline__connector {
61
+ width: 2px;
62
+ flex: 1;
63
+ min-height: var(--tokis-spacing-4);
64
+ background: var(--tokis-color-border);
65
+ margin-top: var(--tokis-spacing-1);
66
+ margin-bottom: var(--tokis-spacing-1);
67
+ }
68
+
69
+ .tokis-timeline__content {
70
+ flex: 1;
71
+ padding-bottom: var(--tokis-spacing-6);
72
+ padding-top: var(--tokis-spacing-1);
73
+ }
74
+
75
+ .tokis-timeline__header {
76
+ display: flex;
77
+ align-items: baseline;
78
+ gap: var(--tokis-spacing-3);
79
+ flex-wrap: wrap;
80
+ margin-bottom: var(--tokis-spacing-1);
81
+ }
82
+
83
+ .tokis-timeline__title {
84
+ font-size: var(--tokis-font-size-sm);
85
+ font-weight: var(--tokis-font-weight-semibold);
86
+ color: var(--tokis-text-primary);
87
+ line-height: var(--tokis-line-height-normal);
88
+ }
89
+
90
+ .tokis-timeline__date {
91
+ font-size: var(--tokis-font-size-xs);
92
+ color: var(--tokis-text-tertiary);
93
+ white-space: nowrap;
94
+ }
95
+
96
+ .tokis-timeline__desc {
97
+ font-size: var(--tokis-font-size-sm);
98
+ color: var(--tokis-text-secondary);
99
+ line-height: var(--tokis-line-height-normal);
100
+ }
101
+
102
+ [data-theme='dark'] .tokis-timeline__dot:not(.tokis-timeline__dot--success):not(.tokis-timeline__dot--error):not(.tokis-timeline__dot--warning):not(.tokis-timeline__dot--info) {
103
+ background: var(--tokis-color-surface-raised);
104
+ border-color: var(--tokis-color-border);
105
+ }
106
+
107
+ [data-theme='dark'] .tokis-timeline__dot--success {
108
+ background: color-mix(in srgb, var(--tokis-color-success) 20%, transparent);
109
+ }
110
+
111
+ [data-theme='dark'] .tokis-timeline__dot--error {
112
+ background: color-mix(in srgb, var(--tokis-color-error) 20%, transparent);
113
+ }
114
+
115
+ [data-theme='dark'] .tokis-timeline__dot--warning {
116
+ background: color-mix(in srgb, var(--tokis-color-warning) 20%, transparent);
117
+ }
118
+
119
+ [data-theme='dark'] .tokis-timeline__dot--info {
120
+ background: color-mix(in srgb, var(--tokis-color-info) 20%, transparent);
121
+ }
122
+
123
+ [data-theme='dark'] .tokis-timeline__connector {
124
+ background: var(--tokis-color-border);
125
+ }
@@ -0,0 +1,103 @@
1
+ /* ── ToggleButton ────────────────────────────────────────── */
2
+
3
+ .tokis-toggle {
4
+ display: inline-flex;
5
+ align-items: center;
6
+ justify-content: center;
7
+ gap: var(--tokis-spacing-2);
8
+ border: 1px solid var(--tokis-color-border);
9
+ border-radius: var(--tokis-radius-md);
10
+ background: var(--tokis-color-surface);
11
+ color: var(--tokis-text-secondary);
12
+ font-size: var(--tokis-font-size-sm);
13
+ font-weight: var(--tokis-font-weight-medium);
14
+ font-family: var(--tokis-font-family);
15
+ cursor: pointer;
16
+ transition: all var(--tokis-duration-fast) var(--tokis-ease-out);
17
+ }
18
+
19
+ .tokis-toggle--sm { padding: 4px var(--tokis-spacing-2); font-size: var(--tokis-font-size-xs); }
20
+ .tokis-toggle--md { padding: var(--tokis-spacing-2) var(--tokis-spacing-3); }
21
+ .tokis-toggle--lg { padding: var(--tokis-spacing-3) var(--tokis-spacing-4); font-size: var(--tokis-font-size-base); }
22
+
23
+ .tokis-toggle:hover {
24
+ background: var(--tokis-color-surface-hover);
25
+ border-color: var(--tokis-color-border-strong);
26
+ color: var(--tokis-text-primary);
27
+ }
28
+
29
+ .tokis-toggle--pressed {
30
+ background: var(--tokis-color-primary-subtle);
31
+ border-color: var(--tokis-color-primary);
32
+ color: var(--tokis-color-primary);
33
+ }
34
+
35
+ .tokis-toggle--pressed:hover {
36
+ background: var(--tokis-color-primary-subtle);
37
+ }
38
+
39
+ .tokis-toggle:disabled {
40
+ opacity: 0.5;
41
+ cursor: not-allowed;
42
+ }
43
+
44
+ .tokis-toggle:focus-visible {
45
+ outline: none;
46
+ box-shadow: 0 0 0 3px var(--tokis-color-focus-ring);
47
+ }
48
+
49
+ /* ── ToggleGroup ─────────────────────────────────────────── */
50
+
51
+ .tokis-toggle-group {
52
+ display: inline-flex;
53
+ border: 1px solid var(--tokis-color-border);
54
+ border-radius: var(--tokis-radius-md);
55
+ overflow: hidden;
56
+ }
57
+
58
+ .tokis-toggle-group__item {
59
+ display: inline-flex;
60
+ align-items: center;
61
+ justify-content: center;
62
+ gap: var(--tokis-spacing-2);
63
+ background: var(--tokis-color-surface);
64
+ border: none;
65
+ border-right: 1px solid var(--tokis-color-border);
66
+ color: var(--tokis-text-secondary);
67
+ font-size: var(--tokis-font-size-sm);
68
+ font-weight: var(--tokis-font-weight-medium);
69
+ font-family: var(--tokis-font-family);
70
+ cursor: pointer;
71
+ transition: all var(--tokis-duration-fast) var(--tokis-ease-out);
72
+ }
73
+
74
+ .tokis-toggle-group__item:last-child { border-right: none; }
75
+
76
+ .tokis-toggle-group__item--sm { padding: 4px var(--tokis-spacing-2); font-size: var(--tokis-font-size-xs); }
77
+ .tokis-toggle-group__item--md { padding: var(--tokis-spacing-2) var(--tokis-spacing-3); }
78
+ .tokis-toggle-group__item--lg { padding: var(--tokis-spacing-3) var(--tokis-spacing-4); }
79
+
80
+ .tokis-toggle-group__item:hover {
81
+ background: var(--tokis-color-surface-hover);
82
+ color: var(--tokis-text-primary);
83
+ }
84
+
85
+ .tokis-toggle-group__item--active {
86
+ background: var(--tokis-color-primary-subtle);
87
+ color: var(--tokis-color-primary);
88
+ }
89
+
90
+ .tokis-toggle-group__item:disabled {
91
+ opacity: 0.5;
92
+ cursor: not-allowed;
93
+ }
94
+
95
+ .tokis-toggle-group__item:focus-visible {
96
+ outline: none;
97
+ box-shadow: inset 0 0 0 2px var(--tokis-color-focus-ring);
98
+ }
99
+
100
+ @media (prefers-reduced-motion: reduce) {
101
+ .tokis-toggle,
102
+ .tokis-toggle-group__item { transition: none; }
103
+ }
@@ -0,0 +1,113 @@
1
+ /* ============================================================
2
+ Tokis — Tooltip & Popover
3
+ ============================================================ */
4
+
5
+ /* ── Tooltip ────────────────────────────────────────────────── */
6
+
7
+ .tokis-tooltip-content {
8
+ position: fixed;
9
+ z-index: var(--tokis-z-tooltip);
10
+ background: var(--tokis-color-neutral-900);
11
+ color: var(--tokis-text-inverse);
12
+ font-size: var(--tokis-font-size-xs);
13
+ font-weight: var(--tokis-font-weight-medium);
14
+ line-height: var(--tokis-line-height-normal);
15
+ padding: var(--tokis-spacing-1) var(--tokis-spacing-2);
16
+ border-radius: var(--tokis-radius-md);
17
+ white-space: normal;
18
+ max-width: 260px;
19
+ pointer-events: none;
20
+ box-shadow: var(--tokis-shadow-lg);
21
+ animation: tokis-tooltip-in var(--tokis-duration-fast) var(--tokis-ease-out);
22
+ word-break: break-word;
23
+ }
24
+
25
+ [data-theme="dark"] .tokis-tooltip-content {
26
+ background: var(--tokis-color-neutral-100);
27
+ color: var(--tokis-text-primary);
28
+ border: 1px solid var(--tokis-color-border);
29
+ }
30
+
31
+ /* Placement modifiers */
32
+ .tokis-tooltip-content[data-placement="top"] { transform: translateX(-50%); }
33
+ .tokis-tooltip-content[data-placement="bottom"] { transform: translateX(-50%); }
34
+ .tokis-tooltip-content[data-placement="left"] { transform: translateY(-50%); }
35
+ .tokis-tooltip-content[data-placement="right"] { transform: translateY(-50%); }
36
+
37
+ /* ── Popover ────────────────────────────────────────────────── */
38
+
39
+ .tokis-popover-content {
40
+ position: absolute;
41
+ z-index: var(--tokis-z-popover);
42
+ background: var(--tokis-color-surface-overlay);
43
+ border: 1px solid var(--tokis-color-border);
44
+ border-radius: var(--tokis-radius-xl);
45
+ box-shadow: var(--tokis-shadow-xl);
46
+ padding: var(--tokis-spacing-4);
47
+ min-width: 200px;
48
+ max-width: 360px;
49
+ animation: tokis-popover-in var(--tokis-duration-fast) var(--tokis-ease-out);
50
+ outline: none;
51
+ }
52
+
53
+ .tokis-popover-title {
54
+ font-size: var(--tokis-font-size-sm);
55
+ font-weight: var(--tokis-font-weight-semibold);
56
+ color: var(--tokis-text-primary);
57
+ margin-bottom: var(--tokis-spacing-1);
58
+ padding-right: var(--tokis-spacing-6);
59
+ }
60
+
61
+ .tokis-popover-description {
62
+ font-size: var(--tokis-font-size-sm);
63
+ color: var(--tokis-text-secondary);
64
+ line-height: var(--tokis-line-height-normal);
65
+ }
66
+
67
+ .tokis-popover-close {
68
+ position: absolute;
69
+ top: var(--tokis-spacing-3);
70
+ right: var(--tokis-spacing-3);
71
+ display: flex;
72
+ align-items: center;
73
+ justify-content: center;
74
+ width: 24px;
75
+ height: 24px;
76
+ border-radius: var(--tokis-radius-sm);
77
+ color: var(--tokis-text-tertiary);
78
+ cursor: pointer;
79
+ background: none;
80
+ border: none;
81
+ outline: none;
82
+ transition: background var(--tokis-duration-fast) var(--tokis-ease-out), color var(--tokis-duration-fast) var(--tokis-ease-out);
83
+ -webkit-tap-highlight-color: transparent;
84
+ }
85
+ .tokis-popover-close:hover {
86
+ background: var(--tokis-color-surface-hover);
87
+ color: var(--tokis-text-primary);
88
+ }
89
+ .tokis-popover-close:focus-visible {
90
+ box-shadow: 0 0 0 2px var(--tokis-color-focus-ring);
91
+ }
92
+
93
+ /* ── Animations ─────────────────────────────────────────────── */
94
+
95
+ @keyframes tokis-tooltip-in {
96
+ /* Use standalone 'scale' property so it doesn't conflict with the
97
+ positioning 'transform: translateX(-50%)' on the same element */
98
+ from { opacity: 0; scale: 0.92; }
99
+ to { opacity: 1; scale: 1; }
100
+ }
101
+
102
+ @keyframes tokis-popover-in {
103
+ from { opacity: 0; transform: translateY(-4px) scale(0.97); }
104
+ to { opacity: 1; transform: translateY(0) scale(1); }
105
+ }
106
+
107
+ /* ── Reduced motion ─────────────────────────────────────────── */
108
+
109
+ @media (prefers-reduced-motion: reduce) {
110
+ .tokis-tooltip-content { animation: none; }
111
+ .tokis-popover-content { animation: none; }
112
+ .tokis-popover-close { transition: none; }
113
+ }
@@ -0,0 +1,107 @@
1
+ .tokis-treeview {
2
+ list-style: none;
3
+ margin: 0;
4
+ padding: 0;
5
+ font-size: var(--tokis-font-size-sm);
6
+ color: var(--tokis-text-primary);
7
+ user-select: none;
8
+ }
9
+
10
+ .tokis-treeview__group {
11
+ list-style: none;
12
+ margin: 0;
13
+ padding: 0;
14
+ }
15
+
16
+ .tokis-treeview__item {
17
+ display: flex;
18
+ align-items: center;
19
+ gap: var(--tokis-spacing-2);
20
+ padding-top: var(--tokis-spacing-1);
21
+ padding-bottom: var(--tokis-spacing-1);
22
+ padding-right: var(--tokis-spacing-2);
23
+ border-radius: var(--tokis-radius-md);
24
+ cursor: pointer;
25
+ outline: none;
26
+ transition:
27
+ background-color var(--tokis-duration-fast) var(--tokis-ease-out),
28
+ color var(--tokis-duration-fast) var(--tokis-ease-out);
29
+ min-height: 32px;
30
+ }
31
+
32
+ .tokis-treeview__item:hover:not(.tokis-treeview__item--disabled) {
33
+ background: var(--tokis-color-surface-hover);
34
+ }
35
+
36
+ .tokis-treeview__item:focus-visible {
37
+ outline: 2px solid var(--tokis-color-focus-ring);
38
+ outline-offset: -2px;
39
+ }
40
+
41
+ .tokis-treeview__item--selected {
42
+ background: color-mix(in srgb, var(--tokis-color-primary) 12%, transparent);
43
+ color: var(--tokis-color-primary);
44
+ font-weight: var(--tokis-font-weight-medium);
45
+ }
46
+
47
+ .tokis-treeview__item--selected:hover {
48
+ background: color-mix(in srgb, var(--tokis-color-primary) 18%, transparent);
49
+ }
50
+
51
+ .tokis-treeview__item--disabled {
52
+ opacity: 0.4;
53
+ cursor: not-allowed;
54
+ pointer-events: none;
55
+ }
56
+
57
+ .tokis-treeview__chevron {
58
+ display: flex;
59
+ align-items: center;
60
+ justify-content: center;
61
+ width: 16px;
62
+ height: 16px;
63
+ flex-shrink: 0;
64
+ color: var(--tokis-text-tertiary);
65
+ transition: transform var(--tokis-duration-fast) var(--tokis-ease-out);
66
+ }
67
+
68
+ .tokis-treeview__chevron--open {
69
+ transform: rotate(90deg);
70
+ }
71
+
72
+ .tokis-treeview__leaf-spacer {
73
+ display: inline-block;
74
+ width: 16px;
75
+ height: 16px;
76
+ flex-shrink: 0;
77
+ }
78
+
79
+ .tokis-treeview__icon {
80
+ display: flex;
81
+ align-items: center;
82
+ justify-content: center;
83
+ width: 16px;
84
+ height: 16px;
85
+ flex-shrink: 0;
86
+ color: var(--tokis-text-secondary);
87
+ }
88
+
89
+ .tokis-treeview__label {
90
+ flex: 1;
91
+ min-width: 0;
92
+ overflow: hidden;
93
+ text-overflow: ellipsis;
94
+ white-space: nowrap;
95
+ line-height: var(--tokis-line-height-normal);
96
+ }
97
+
98
+ [data-theme='dark'] .tokis-treeview__item--selected {
99
+ background: color-mix(in srgb, var(--tokis-color-primary) 20%, transparent);
100
+ }
101
+
102
+ @media (prefers-reduced-motion: reduce) {
103
+ .tokis-treeview__chevron,
104
+ .tokis-treeview__item {
105
+ transition: none;
106
+ }
107
+ }
@@ -0,0 +1,19 @@
1
+ /* ── VirtualizedList ─────────────────────────────────────── */
2
+
3
+ .tokis-virtual-list {
4
+ scrollbar-width: thin;
5
+ scrollbar-color: var(--tokis-color-border) transparent;
6
+ }
7
+
8
+ .tokis-virtual-list::-webkit-scrollbar {
9
+ width: 6px;
10
+ }
11
+
12
+ .tokis-virtual-list::-webkit-scrollbar-track {
13
+ background: transparent;
14
+ }
15
+
16
+ .tokis-virtual-list::-webkit-scrollbar-thumb {
17
+ background: var(--tokis-color-border);
18
+ border-radius: var(--tokis-radius-full);
19
+ }
package/src/index.css ADDED
@@ -0,0 +1,6 @@
1
+ /* TOKIS Theme — Full bundle */
2
+ @import "./base/reset.css";
3
+ @import "./base/variables.css";
4
+ @import "./components/index.css";
5
+ @import "./utilities/index.css";
6
+
@@ -0,0 +1,2 @@
1
+ @import "./layout.css";
2
+
@@ -0,0 +1,28 @@
1
+ /* ============================================================
2
+ Tokis — Layout utilities: Box, Stack, Grid, Container
3
+ ============================================================ */
4
+
5
+ .tokis-container {
6
+ width: 100%;
7
+ margin-left: auto;
8
+ margin-right: auto;
9
+ padding-left: var(--tokis-spacing-4);
10
+ padding-right: var(--tokis-spacing-4);
11
+ }
12
+ @media (min-width: 640px) { .tokis-container { max-width: 640px; padding-left: var(--tokis-spacing-6); padding-right: var(--tokis-spacing-6); } }
13
+ @media (min-width: 768px) { .tokis-container { max-width: 768px; } }
14
+ @media (min-width: 1024px) { .tokis-container { max-width: 1024px; } }
15
+ @media (min-width: 1280px) { .tokis-container { max-width: 1280px; } }
16
+ @media (min-width: 1536px) { .tokis-container { max-width: 1536px; } }
17
+ .tokis-container--fluid { max-width: none; }
18
+
19
+ .tokis-stack { display: flex; }
20
+ .tokis-stack--v { flex-direction: column; }
21
+ .tokis-stack--h { flex-direction: row; }
22
+ .tokis-stack--wrap { flex-wrap: wrap; }
23
+ /* Gap scale via data-gap attribute handled in JS */
24
+
25
+ .tokis-grid { display: grid; width: 100%; }
26
+
27
+ .tokis-box { display: block; }
28
+