@digiko-npm/designsystem 0.1.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 (47) hide show
  1. package/README.md +89 -0
  2. package/dist/designsystem.css +4642 -0
  3. package/dist/designsystem.js +67 -0
  4. package/package.json +32 -0
  5. package/src/base/index.css +2 -0
  6. package/src/base/reset.css +120 -0
  7. package/src/base/typography.css +163 -0
  8. package/src/components/accordion.css +150 -0
  9. package/src/components/alert.css +150 -0
  10. package/src/components/avatar.css +109 -0
  11. package/src/components/badge.css +80 -0
  12. package/src/components/breadcrumb.css +95 -0
  13. package/src/components/button.css +168 -0
  14. package/src/components/card.css +121 -0
  15. package/src/components/command.css +185 -0
  16. package/src/components/divider.css +66 -0
  17. package/src/components/drawer.css +209 -0
  18. package/src/components/dropdown.css +139 -0
  19. package/src/components/empty-state.css +69 -0
  20. package/src/components/index.css +35 -0
  21. package/src/components/input.css +116 -0
  22. package/src/components/kbd.css +55 -0
  23. package/src/components/modal.css +103 -0
  24. package/src/components/nav.css +153 -0
  25. package/src/components/pagination.css +166 -0
  26. package/src/components/popover.css +112 -0
  27. package/src/components/progress.css +214 -0
  28. package/src/components/skeleton.css +96 -0
  29. package/src/components/slider.css +125 -0
  30. package/src/components/table.css +48 -0
  31. package/src/components/tabs.css +163 -0
  32. package/src/components/tag.css +159 -0
  33. package/src/components/timeline.css +131 -0
  34. package/src/components/toast.css +70 -0
  35. package/src/components/toggle.css +135 -0
  36. package/src/components/tooltip.css +161 -0
  37. package/src/index.css +19 -0
  38. package/src/js/theme.js +67 -0
  39. package/src/tokens/colors.css +180 -0
  40. package/src/tokens/index.css +11 -0
  41. package/src/tokens/shadows.css +26 -0
  42. package/src/tokens/spacing.css +53 -0
  43. package/src/tokens/typography.css +51 -0
  44. package/src/utilities/index.css +3 -0
  45. package/src/utilities/layout.css +134 -0
  46. package/src/utilities/spacing.css +75 -0
  47. package/src/utilities/text.css +221 -0
@@ -0,0 +1,159 @@
1
+ /* ==========================================================================
2
+ Tag / Chip Component
3
+ ==========================================================================
4
+ Interactive, optionally removable tag for categorisation and filtering.
5
+
6
+ Usage:
7
+ <span class="ds-tag">Default</span>
8
+ <span class="ds-tag ds-tag--success">Approved</span>
9
+ <span class="ds-tag ds-tag--removable">
10
+ Removable
11
+ <button class="ds-tag__remove" aria-label="Remove">&times;</button>
12
+ </span>
13
+ ========================================================================== */
14
+
15
+ /* ---------------------------------------------------------------------------
16
+ Base
17
+ --------------------------------------------------------------------------- */
18
+
19
+ .ds-tag {
20
+ display: inline-flex;
21
+ align-items: center;
22
+ gap: var(--ds-space-1);
23
+ padding: var(--ds-space-1) var(--ds-space-2-5, 0.625rem);
24
+ font-size: var(--ds-text-xs);
25
+ font-weight: var(--ds-weight-medium);
26
+ font-family: var(--ds-font-sans);
27
+ line-height: 1;
28
+ border-radius: var(--ds-radius-full);
29
+ background-color: var(--ds-color-bg-elevated);
30
+ border: 1px solid var(--ds-color-border);
31
+ color: var(--ds-color-text-secondary);
32
+ white-space: nowrap;
33
+ transition:
34
+ border-color var(--ds-duration-fast) var(--ds-ease-out),
35
+ background-color var(--ds-duration-fast) var(--ds-ease-out);
36
+ }
37
+
38
+ .ds-tag:hover {
39
+ border-color: var(--ds-color-border-hover);
40
+ }
41
+
42
+ /* ---------------------------------------------------------------------------
43
+ Color variants — subtle background + vivid text + subtle border
44
+ --------------------------------------------------------------------------- */
45
+
46
+ .ds-tag--primary {
47
+ background-color: var(--ds-color-interactive-subtle, var(--ds-color-bg-elevated));
48
+ color: var(--ds-color-interactive);
49
+ border-color: var(--ds-color-interactive-border, var(--ds-color-interactive));
50
+ }
51
+
52
+ .ds-tag--success {
53
+ background-color: var(--ds-color-success-subtle, var(--ds-color-bg-elevated));
54
+ color: var(--ds-color-success);
55
+ border-color: var(--ds-color-success-border, var(--ds-color-success));
56
+ }
57
+
58
+ .ds-tag--warning {
59
+ background-color: var(--ds-color-warning-subtle, var(--ds-color-bg-elevated));
60
+ color: var(--ds-color-warning);
61
+ border-color: var(--ds-color-warning-border, var(--ds-color-warning));
62
+ }
63
+
64
+ .ds-tag--error {
65
+ background-color: var(--ds-color-error-subtle, var(--ds-color-bg-elevated));
66
+ color: var(--ds-color-error);
67
+ border-color: var(--ds-color-error-border, var(--ds-color-error));
68
+ }
69
+
70
+ .ds-tag--info {
71
+ background-color: var(--ds-color-info-subtle, var(--ds-color-bg-elevated));
72
+ color: var(--ds-color-info);
73
+ border-color: var(--ds-color-info-border, var(--ds-color-info));
74
+ }
75
+
76
+ .ds-tag--purple {
77
+ background-color: var(--ds-color-purple-subtle, var(--ds-color-bg-elevated));
78
+ color: var(--ds-color-purple, var(--ds-color-interactive));
79
+ border-color: var(--ds-color-purple-border, var(--ds-color-purple, var(--ds-color-interactive)));
80
+ }
81
+
82
+ /* ---------------------------------------------------------------------------
83
+ Removable — tighter right padding for the close button
84
+ --------------------------------------------------------------------------- */
85
+
86
+ .ds-tag--removable {
87
+ padding-right: var(--ds-space-1);
88
+ }
89
+
90
+ /* ---------------------------------------------------------------------------
91
+ Remove button
92
+ --------------------------------------------------------------------------- */
93
+
94
+ .ds-tag__remove {
95
+ display: inline-flex;
96
+ align-items: center;
97
+ justify-content: center;
98
+ width: 1rem;
99
+ height: 1rem;
100
+ padding: 0;
101
+ border: none;
102
+ border-radius: var(--ds-radius-full);
103
+ background: transparent;
104
+ color: currentColor;
105
+ font-size: inherit;
106
+ line-height: 1;
107
+ opacity: 0.6;
108
+ cursor: pointer;
109
+ transition:
110
+ opacity var(--ds-duration-fast) var(--ds-ease-out),
111
+ background-color var(--ds-duration-fast) var(--ds-ease-out);
112
+ -webkit-appearance: none;
113
+ appearance: none;
114
+ }
115
+
116
+ .ds-tag__remove:hover {
117
+ opacity: 1;
118
+ background-color: var(--ds-color-overlay-hover);
119
+ }
120
+
121
+ .ds-tag__remove:focus-visible {
122
+ outline: 2px solid var(--ds-color-interactive);
123
+ outline-offset: 1px;
124
+ opacity: 1;
125
+ }
126
+
127
+ /* ---------------------------------------------------------------------------
128
+ Variant: Outline
129
+ --------------------------------------------------------------------------- */
130
+
131
+ .ds-tag--outline {
132
+ background-color: transparent;
133
+ }
134
+
135
+ /* ---------------------------------------------------------------------------
136
+ Size: Small
137
+ --------------------------------------------------------------------------- */
138
+
139
+ .ds-tag--sm {
140
+ padding: var(--ds-space-0-5, 0.125rem) var(--ds-space-2, 0.5rem);
141
+ font-size: 0.625rem;
142
+ }
143
+
144
+ .ds-tag--sm.ds-tag--removable {
145
+ padding-right: var(--ds-space-0-5, 0.125rem);
146
+ }
147
+
148
+ /* ---------------------------------------------------------------------------
149
+ Size: Large
150
+ --------------------------------------------------------------------------- */
151
+
152
+ .ds-tag--lg {
153
+ padding: var(--ds-space-1-5, 0.375rem) var(--ds-space-3);
154
+ font-size: var(--ds-text-sm);
155
+ }
156
+
157
+ .ds-tag--lg.ds-tag--removable {
158
+ padding-right: var(--ds-space-1-5, 0.375rem);
159
+ }
@@ -0,0 +1,131 @@
1
+ /* ==========================================================================
2
+ * Timeline
3
+ * ==========================================================================
4
+ *
5
+ * Vertical timeline component for roadmaps, activity feeds, and step-based
6
+ * flows. Each item has a dot indicator on a vertical line with support for
7
+ * completed, current, and error states.
8
+ *
9
+ * Usage:
10
+ * <div class="ds-timeline">
11
+ * <div class="ds-timeline__item ds-timeline__item--completed">
12
+ * <div class="ds-timeline__dot"></div>
13
+ * <div class="ds-timeline__content">
14
+ * <div class="ds-timeline__title">Step one</div>
15
+ * <div class="ds-timeline__description">Details here.</div>
16
+ * <div class="ds-timeline__time">2 hours ago</div>
17
+ * </div>
18
+ * </div>
19
+ * </div>
20
+ *
21
+ * Modifiers:
22
+ * .ds-timeline__item--completed — Green dot (success)
23
+ * .ds-timeline__item--current — Inverted dot (active)
24
+ * .ds-timeline__item--error — Red dot (error)
25
+ * .ds-timeline--compact — Tighter spacing, smaller dots
26
+ * ========================================================================== */
27
+
28
+ .ds-timeline {
29
+ position: relative;
30
+ padding-left: var(--ds-space-8);
31
+ }
32
+
33
+ /* Vertical line */
34
+ .ds-timeline::before {
35
+ content: "";
36
+ position: absolute;
37
+ left: 0.9rem;
38
+ top: 0;
39
+ bottom: 0;
40
+ width: 2px;
41
+ background-color: var(--ds-color-border);
42
+ }
43
+
44
+ /* Item */
45
+ .ds-timeline__item {
46
+ position: relative;
47
+ padding-bottom: var(--ds-space-6);
48
+ }
49
+
50
+ .ds-timeline__item:last-child {
51
+ padding-bottom: 0;
52
+ }
53
+
54
+ /* Dot */
55
+ .ds-timeline__dot {
56
+ position: absolute;
57
+ left: calc(-1 * var(--ds-space-8) + 0.5rem);
58
+ width: 1rem;
59
+ height: 1rem;
60
+ border-radius: var(--ds-radius-full);
61
+ background-color: var(--ds-color-bg-elevated);
62
+ border: 2px solid var(--ds-color-border);
63
+ z-index: 1;
64
+ }
65
+
66
+ /* Dot state: completed */
67
+ .ds-timeline__item--completed .ds-timeline__dot {
68
+ background-color: var(--ds-color-success);
69
+ border-color: var(--ds-color-success);
70
+ }
71
+
72
+ /* Dot state: current */
73
+ .ds-timeline__item--current .ds-timeline__dot {
74
+ background-color: var(--ds-color-inverted);
75
+ border-color: var(--ds-color-inverted);
76
+ }
77
+
78
+ /* Dot state: error */
79
+ .ds-timeline__item--error .ds-timeline__dot {
80
+ background-color: var(--ds-color-error);
81
+ border-color: var(--ds-color-error);
82
+ }
83
+
84
+ /* Content area */
85
+ .ds-timeline__content {
86
+ /* no additional layout needed; flows naturally after the dot */
87
+ }
88
+
89
+ /* Title */
90
+ .ds-timeline__title {
91
+ font-size: var(--ds-text-sm);
92
+ font-weight: var(--ds-weight-medium);
93
+ color: var(--ds-color-text);
94
+ }
95
+
96
+ /* Description */
97
+ .ds-timeline__description {
98
+ font-size: var(--ds-text-sm);
99
+ color: var(--ds-color-text-secondary);
100
+ margin-top: var(--ds-space-1);
101
+ }
102
+
103
+ /* Timestamp */
104
+ .ds-timeline__time {
105
+ font-size: var(--ds-text-xs);
106
+ color: var(--ds-color-text-tertiary);
107
+ margin-top: var(--ds-space-0-5);
108
+ }
109
+
110
+ /* Compact variant */
111
+ .ds-timeline--compact {
112
+ padding-left: var(--ds-space-6);
113
+ }
114
+
115
+ .ds-timeline--compact::before {
116
+ left: 0.6rem;
117
+ }
118
+
119
+ .ds-timeline--compact .ds-timeline__item {
120
+ padding-bottom: var(--ds-space-4);
121
+ }
122
+
123
+ .ds-timeline--compact .ds-timeline__item:last-child {
124
+ padding-bottom: 0;
125
+ }
126
+
127
+ .ds-timeline--compact .ds-timeline__dot {
128
+ left: calc(-1 * var(--ds-space-6) + 0.25rem);
129
+ width: 0.75rem;
130
+ height: 0.75rem;
131
+ }
@@ -0,0 +1,70 @@
1
+ /* ==========================================================================
2
+ Component: Toast
3
+ ========================================================================== */
4
+
5
+ .ds-toast-container {
6
+ position: fixed;
7
+ z-index: var(--ds-z-toast);
8
+ display: flex;
9
+ flex-direction: column;
10
+ gap: var(--ds-space-2);
11
+ padding: var(--ds-space-4);
12
+ pointer-events: none;
13
+ }
14
+
15
+ .ds-toast-container--top-right { top: 0; right: 0; }
16
+ .ds-toast-container--bottom-right { bottom: 0; right: 0; }
17
+ .ds-toast-container--bottom-center {
18
+ bottom: 0; left: 50%;
19
+ transform: translateX(-50%);
20
+ align-items: center;
21
+ }
22
+
23
+ .ds-toast {
24
+ display: flex;
25
+ align-items: center;
26
+ gap: var(--ds-space-3);
27
+ padding: var(--ds-space-3) var(--ds-space-4);
28
+ background-color: var(--ds-color-surface);
29
+ border: 1px solid var(--ds-color-border);
30
+ border-radius: var(--ds-radius-lg);
31
+ box-shadow: var(--ds-shadow-lg);
32
+ pointer-events: auto;
33
+ min-width: 18rem;
34
+ max-width: 28rem;
35
+ animation: ds-toast-in var(--ds-duration-slow) var(--ds-ease-out-expo) forwards;
36
+ }
37
+
38
+ .ds-toast--info { border-left: 3px solid var(--ds-color-info); }
39
+ .ds-toast--success { border-left: 3px solid var(--ds-color-success); }
40
+ .ds-toast--warning { border-left: 3px solid var(--ds-color-warning); }
41
+ .ds-toast--error { border-left: 3px solid var(--ds-color-error); }
42
+
43
+ .ds-toast__message {
44
+ flex: 1;
45
+ font-size: var(--ds-text-sm);
46
+ color: var(--ds-color-text);
47
+ }
48
+
49
+ .ds-toast__close {
50
+ color: var(--ds-color-text-tertiary);
51
+ padding: var(--ds-space-1);
52
+ border-radius: var(--ds-radius-sm);
53
+ transition: color var(--ds-duration-fast) ease;
54
+ }
55
+ .ds-toast__close:hover {
56
+ color: var(--ds-color-text);
57
+ }
58
+
59
+ @keyframes ds-toast-in {
60
+ from { opacity: 0; transform: translateY(-8px); }
61
+ to { opacity: 1; transform: translateY(0); }
62
+ }
63
+
64
+ .ds-toast--exit {
65
+ animation: ds-toast-out var(--ds-duration-normal) var(--ds-ease-default) forwards;
66
+ }
67
+
68
+ @keyframes ds-toast-out {
69
+ to { opacity: 0; transform: translateX(100%); }
70
+ }
@@ -0,0 +1,135 @@
1
+ /* ==========================================================================
2
+ Toggle / Switch Component
3
+ ==========================================================================
4
+ A toggle (switch) control for binary on/off states.
5
+ Supports aria-checked attribute and modifier-class driven states.
6
+
7
+ Usage:
8
+ <button class="ds-toggle" role="switch" aria-checked="false"></button>
9
+
10
+ <label class="ds-toggle-label">
11
+ <button class="ds-toggle" role="switch" aria-checked="true"></button>
12
+ <span class="ds-toggle-label__text">Dark mode</span>
13
+ </label>
14
+ ========================================================================== */
15
+
16
+ /* ---------------------------------------------------------------------------
17
+ Track
18
+ --------------------------------------------------------------------------- */
19
+
20
+ .ds-toggle {
21
+ display: inline-flex;
22
+ position: relative;
23
+ width: 2.75rem;
24
+ height: 1.5rem;
25
+ padding: 2px;
26
+ border: none;
27
+ border-radius: var(--ds-radius-full);
28
+ background-color: var(--ds-color-bg-muted);
29
+ cursor: pointer;
30
+ transition: background-color var(--ds-duration-normal) var(--ds-ease-out);
31
+ -webkit-appearance: none;
32
+ appearance: none;
33
+ flex-shrink: 0;
34
+ }
35
+
36
+ /* ---------------------------------------------------------------------------
37
+ Thumb (pseudo-element)
38
+ --------------------------------------------------------------------------- */
39
+
40
+ .ds-toggle::after {
41
+ content: "";
42
+ position: absolute;
43
+ left: 2px;
44
+ top: 50%;
45
+ width: 1.25rem;
46
+ height: 1.25rem;
47
+ border-radius: var(--ds-radius-full);
48
+ background-color: #fff;
49
+ box-shadow: var(--ds-shadow-sm);
50
+ transform: translateY(-50%);
51
+ transition: transform var(--ds-duration-normal) var(--ds-ease-out);
52
+ }
53
+
54
+ /* ---------------------------------------------------------------------------
55
+ Checked state
56
+ --------------------------------------------------------------------------- */
57
+
58
+ .ds-toggle[aria-checked="true"],
59
+ .ds-toggle--checked {
60
+ background-color: var(--ds-color-interactive);
61
+ }
62
+
63
+ .ds-toggle[aria-checked="true"]::after,
64
+ .ds-toggle--checked::after {
65
+ transform: translateX(1.25rem) translateY(-50%);
66
+ }
67
+
68
+ /* ---------------------------------------------------------------------------
69
+ Hover
70
+ --------------------------------------------------------------------------- */
71
+
72
+ .ds-toggle:hover {
73
+ background-color: var(--ds-color-border-hover);
74
+ }
75
+
76
+ .ds-toggle[aria-checked="true"]:hover,
77
+ .ds-toggle--checked:hover {
78
+ background-color: var(--ds-color-interactive-hover);
79
+ }
80
+
81
+ /* ---------------------------------------------------------------------------
82
+ Focus
83
+ --------------------------------------------------------------------------- */
84
+
85
+ .ds-toggle:focus-visible {
86
+ outline: 2px solid var(--ds-color-interactive);
87
+ outline-offset: 2px;
88
+ }
89
+
90
+ /* ---------------------------------------------------------------------------
91
+ Disabled
92
+ --------------------------------------------------------------------------- */
93
+
94
+ .ds-toggle:disabled,
95
+ .ds-toggle--disabled {
96
+ opacity: var(--ds-opacity-disabled);
97
+ cursor: not-allowed;
98
+ pointer-events: none;
99
+ }
100
+
101
+ /* ---------------------------------------------------------------------------
102
+ Size: Small
103
+ --------------------------------------------------------------------------- */
104
+
105
+ .ds-toggle--sm {
106
+ width: 2rem;
107
+ height: 1.125rem;
108
+ }
109
+
110
+ .ds-toggle--sm::after {
111
+ width: 0.875rem;
112
+ height: 0.875rem;
113
+ }
114
+
115
+ .ds-toggle--sm[aria-checked="true"]::after,
116
+ .ds-toggle--sm.ds-toggle--checked::after {
117
+ transform: translateX(0.875rem) translateY(-50%);
118
+ }
119
+
120
+ /* ---------------------------------------------------------------------------
121
+ Label wrapper
122
+ --------------------------------------------------------------------------- */
123
+
124
+ .ds-toggle-label {
125
+ display: inline-flex;
126
+ align-items: center;
127
+ gap: var(--ds-space-2);
128
+ cursor: pointer;
129
+ font-size: var(--ds-text-sm);
130
+ font-family: var(--ds-font-sans);
131
+ }
132
+
133
+ .ds-toggle-label__text {
134
+ color: var(--ds-color-text-secondary);
135
+ }
@@ -0,0 +1,161 @@
1
+ /* ==========================================================================
2
+ Component: Tooltip
3
+ Inverted bubble with arrow, positioned via modifier classes.
4
+ Default placement: top.
5
+ ========================================================================== */
6
+
7
+ .ds-tooltip {
8
+ position: relative;
9
+ display: inline-flex;
10
+ }
11
+
12
+ /* --- Tooltip bubble --- */
13
+
14
+ .ds-tooltip__content {
15
+ position: absolute;
16
+ z-index: var(--ds-z-tooltip);
17
+ background-color: var(--ds-color-inverted);
18
+ color: var(--ds-color-on-inverted);
19
+ font-size: var(--ds-text-xs);
20
+ font-weight: var(--ds-weight-medium);
21
+ line-height: var(--ds-leading-snug);
22
+ padding: var(--ds-space-1) var(--ds-space-2);
23
+ border-radius: var(--ds-radius-md);
24
+ white-space: nowrap;
25
+ pointer-events: none;
26
+ opacity: 0;
27
+ visibility: hidden;
28
+ transition:
29
+ opacity var(--ds-duration-fast) var(--ds-ease-default),
30
+ visibility var(--ds-duration-fast) var(--ds-ease-default),
31
+ transform var(--ds-duration-fast) var(--ds-ease-out);
32
+ }
33
+
34
+ /* --- Arrow (shared base) --- */
35
+
36
+ .ds-tooltip__content::after {
37
+ content: '';
38
+ position: absolute;
39
+ border: 4px solid transparent;
40
+ }
41
+
42
+ /* --- Show on hover --- */
43
+
44
+ .ds-tooltip:hover .ds-tooltip__content {
45
+ opacity: 1;
46
+ visibility: visible;
47
+ }
48
+
49
+ /* --- Delay modifier --- */
50
+
51
+ .ds-tooltip--delay .ds-tooltip__content {
52
+ transition-delay: 0ms;
53
+ }
54
+
55
+ .ds-tooltip--delay:hover .ds-tooltip__content {
56
+ transition-delay: 200ms;
57
+ }
58
+
59
+ /* =============================================
60
+ Placement: Top (default)
61
+ ============================================= */
62
+
63
+ .ds-tooltip .ds-tooltip__content,
64
+ .ds-tooltip--top .ds-tooltip__content {
65
+ bottom: calc(100% + 8px);
66
+ left: 50%;
67
+ transform: translateX(-50%) translateY(4px);
68
+ }
69
+
70
+ .ds-tooltip:hover .ds-tooltip__content,
71
+ .ds-tooltip--top:hover .ds-tooltip__content {
72
+ transform: translateX(-50%) translateY(0);
73
+ }
74
+
75
+ /* Arrow — points down */
76
+ .ds-tooltip .ds-tooltip__content::after,
77
+ .ds-tooltip--top .ds-tooltip__content::after {
78
+ top: 100%;
79
+ left: 50%;
80
+ transform: translateX(-50%);
81
+ border-top-color: var(--ds-color-inverted);
82
+ }
83
+
84
+ /* =============================================
85
+ Placement: Bottom
86
+ ============================================= */
87
+
88
+ .ds-tooltip--bottom .ds-tooltip__content {
89
+ top: calc(100% + 8px);
90
+ bottom: auto;
91
+ left: 50%;
92
+ transform: translateX(-50%) translateY(-4px);
93
+ }
94
+
95
+ .ds-tooltip--bottom:hover .ds-tooltip__content {
96
+ transform: translateX(-50%) translateY(0);
97
+ }
98
+
99
+ /* Arrow — points up */
100
+ .ds-tooltip--bottom .ds-tooltip__content::after {
101
+ bottom: 100%;
102
+ top: auto;
103
+ left: 50%;
104
+ transform: translateX(-50%);
105
+ border-top-color: transparent;
106
+ border-bottom-color: var(--ds-color-inverted);
107
+ }
108
+
109
+ /* =============================================
110
+ Placement: Left
111
+ ============================================= */
112
+
113
+ .ds-tooltip--left .ds-tooltip__content {
114
+ right: calc(100% + 8px);
115
+ left: auto;
116
+ bottom: auto;
117
+ top: 50%;
118
+ transform: translateY(-50%) translateX(4px);
119
+ }
120
+
121
+ .ds-tooltip--left:hover .ds-tooltip__content {
122
+ transform: translateY(-50%) translateX(0);
123
+ }
124
+
125
+ /* Arrow — points right */
126
+ .ds-tooltip--left .ds-tooltip__content::after {
127
+ left: 100%;
128
+ top: 50%;
129
+ bottom: auto;
130
+ right: auto;
131
+ transform: translateY(-50%);
132
+ border-top-color: transparent;
133
+ border-left-color: var(--ds-color-inverted);
134
+ }
135
+
136
+ /* =============================================
137
+ Placement: Right
138
+ ============================================= */
139
+
140
+ .ds-tooltip--right .ds-tooltip__content {
141
+ left: calc(100% + 8px);
142
+ right: auto;
143
+ bottom: auto;
144
+ top: 50%;
145
+ transform: translateY(-50%) translateX(-4px);
146
+ }
147
+
148
+ .ds-tooltip--right:hover .ds-tooltip__content {
149
+ transform: translateY(-50%) translateX(0);
150
+ }
151
+
152
+ /* Arrow — points left */
153
+ .ds-tooltip--right .ds-tooltip__content::after {
154
+ right: 100%;
155
+ left: auto;
156
+ top: 50%;
157
+ bottom: auto;
158
+ transform: translateY(-50%);
159
+ border-top-color: transparent;
160
+ border-right-color: var(--ds-color-inverted);
161
+ }
package/src/index.css ADDED
@@ -0,0 +1,19 @@
1
+ /* ==========================================================================
2
+ @ds/designsystem
3
+
4
+ Import this one file to get everything.
5
+ Or import individual layers for fine-grained control:
6
+
7
+ import '@ds/designsystem/tokens'
8
+ import '@ds/designsystem/base'
9
+ import '@ds/designsystem/components'
10
+ import '@ds/designsystem/utilities'
11
+
12
+ To customize: override any --ds-* variable in your project CSS.
13
+ Your values always win. Nothing breaks.
14
+ ========================================================================== */
15
+
16
+ @import './tokens/index.css';
17
+ @import './base/index.css';
18
+ @import './components/index.css';
19
+ @import './utilities/index.css';