draft-components 2.10.3 → 3.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 (86) hide show
  1. package/css/draft-components-utilities.css +6 -7
  2. package/css/draft-components-variables.css +437 -0
  3. package/css/draft-components.css +1199 -617
  4. package/dist/components/alert/alert.css +163 -0
  5. package/dist/components/avatar/avatar.css +91 -0
  6. package/dist/components/avatar/avatar.js +3 -1
  7. package/dist/components/badge/badge.css +28 -0
  8. package/dist/components/breadcrumbs/breadcrumbs.css +72 -0
  9. package/dist/components/button/button.css +241 -0
  10. package/dist/components/button/button.js +3 -1
  11. package/dist/components/button/icon-button.js +1 -1
  12. package/dist/components/button-group/button-group.css +27 -0
  13. package/dist/components/caption/caption.css +36 -0
  14. package/dist/components/checkbox/checkbox.css +90 -0
  15. package/dist/components/checkbox/checkbox.js +3 -1
  16. package/dist/components/color-picker/color-picker.css +86 -0
  17. package/dist/components/date-picker/calendar-grid.js +2 -2
  18. package/dist/components/date-picker/date-helpers.js +3 -3
  19. package/dist/components/date-picker/date-picker.css +203 -0
  20. package/dist/components/date-picker/date-range.js +4 -2
  21. package/dist/components/date-picker/parse-min-max-props.js +3 -3
  22. package/dist/components/date-picker-popover/date-picker-popover.css +8 -0
  23. package/dist/components/date-range-picker-popover/date-range-picker-popover.css +73 -0
  24. package/dist/components/date-range-picker-popover/helpers.js +2 -2
  25. package/dist/components/dialog/dialog.css +173 -0
  26. package/dist/components/empty-state/empty-state.css +52 -0
  27. package/dist/components/file-picker/file-picker.css +74 -0
  28. package/dist/components/filter-buttons/filter-buttons.css +60 -0
  29. package/dist/components/filter-buttons/filter-buttons.js +2 -2
  30. package/dist/components/filtered-search/filter-item.css +30 -0
  31. package/dist/components/filtered-search/filter-operator-select.css +6 -0
  32. package/dist/components/filtered-search/filter-token.css +63 -0
  33. package/dist/components/filtered-search/filter-value-list.css +17 -0
  34. package/dist/components/filtered-search/filtered-search.css +284 -0
  35. package/dist/components/filtered-search/model/string-filter.js +4 -2
  36. package/dist/components/filtered-search/model/string-set-filter.js +4 -2
  37. package/dist/components/filtered-search/string-filter-input.css +12 -0
  38. package/dist/components/filtered-search/string-filter-item.js +4 -2
  39. package/dist/components/filtered-search/string-set-filter-item.js +3 -1
  40. package/dist/components/form-field/form-field.css +21 -0
  41. package/dist/components/form-field/form-field.js +3 -1
  42. package/dist/components/label/label.css +23 -0
  43. package/dist/components/menu/menu.css +87 -0
  44. package/dist/components/menu/menu.d.ts +4 -4
  45. package/dist/components/menu/menu.js +4 -4
  46. package/dist/components/nav-list/nav-list-item.js +1 -1
  47. package/dist/components/nav-list/nav-list.css +89 -0
  48. package/dist/components/password-input/password-input.css +49 -0
  49. package/dist/components/popover/popover.css +98 -0
  50. package/dist/components/popover/popover.js +3 -3
  51. package/dist/components/positioner/calc-position.js +4 -4
  52. package/dist/components/radio/radio.css +88 -0
  53. package/dist/components/segmented-control/segmented-control.css +113 -0
  54. package/dist/components/select/select.css +121 -0
  55. package/dist/components/selection-control/selection-control.css +36 -0
  56. package/dist/components/selection-control/selection-control.js +3 -1
  57. package/dist/components/slide-over/slide-over-body.css +7 -0
  58. package/dist/components/slide-over/slide-over-header.css +29 -0
  59. package/dist/components/slide-over/slide-over-header.js +5 -1
  60. package/dist/components/slide-over/slide-over.css +85 -0
  61. package/dist/components/slider/get-offset-relative-to-thumb.js +5 -5
  62. package/dist/components/slider/range-slider.d.ts +21 -21
  63. package/dist/components/slider/range-slider.js +15 -15
  64. package/dist/components/slider/slider-thumb.d.ts +16 -17
  65. package/dist/components/slider/slider-thumb.js +3 -3
  66. package/dist/components/slider/slider-track.js +7 -7
  67. package/dist/components/slider/slider.css +261 -0
  68. package/dist/components/slider/slider.d.ts +17 -17
  69. package/dist/components/slider/slider.js +2 -2
  70. package/dist/components/spinner/spinner.css +42 -0
  71. package/dist/components/spinner/spinner.js +1 -1
  72. package/dist/components/switch/switch.css +123 -0
  73. package/dist/components/table/table-head-cell.js +1 -1
  74. package/dist/components/table/table.css +176 -0
  75. package/dist/components/tabs/tab.js +1 -1
  76. package/dist/components/tabs/tabs.css +94 -0
  77. package/dist/components/tag/tag.css +390 -0
  78. package/dist/components/text-input/text-input.css +146 -0
  79. package/dist/components/textarea/textarea.css +82 -0
  80. package/dist/components/toast/toast.css +154 -0
  81. package/dist/components/toaster/toaster.css +95 -0
  82. package/dist/components/toaster/toaster.js +7 -3
  83. package/dist/components/tooltip/tooltip.css +34 -0
  84. package/dist/hooks/use-mount-transition.js +2 -2
  85. package/package.json +23 -18
  86. package/css/draft-components.dark.css +0 -609
@@ -0,0 +1,284 @@
1
+ .dc-filter-token {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ min-width: 0;
5
+ color: var(--dc-filtered-search-token-color);
6
+ background: var(--dc-filtered-search-token-bg);
7
+ border-radius: 6px;
8
+ }
9
+
10
+ .dc-filter-token_highlighted {
11
+ color: var(--dc-filtered-search-token-color-selected);
12
+ background: var(--dc-filtered-search-token-bg-selected);
13
+ }
14
+
15
+ .dc-filter-token__label,
16
+ .dc-filter-token__button {
17
+ box-sizing: border-box;
18
+ height: 28px;
19
+ padding: 0;
20
+ font-size: 14px;
21
+ color: inherit;
22
+ cursor: pointer;
23
+ background: none;
24
+ border: none;
25
+ }
26
+
27
+ .dc-filter-token__label {
28
+ min-width: 0;
29
+ max-width: 100%;
30
+ padding: 0 4px 0 8px;
31
+ overflow: hidden;
32
+ line-height: 28px;
33
+ text-overflow: ellipsis;
34
+ white-space: nowrap;
35
+ border-top-left-radius: inherit;
36
+ border-bottom-left-radius: inherit;
37
+ }
38
+
39
+ .dc-filter-token__button {
40
+ display: inline-flex;
41
+ align-items: center;
42
+ justify-content: center;
43
+ width: 28px;
44
+ border-top-right-radius: inherit;
45
+ border-bottom-right-radius: inherit;
46
+
47
+ }
48
+
49
+ .dc-filter-token__label:focus,
50
+ .dc-filter-token__button:focus {
51
+ background: var(--dc-filtered-search-token-bg-hover);
52
+ outline: none;
53
+ }
54
+
55
+ .dc-filter-token__label:hover,
56
+ .dc-filter-token__button:hover {
57
+ background: var(--dc-filtered-search-token-bg-hover) !important;
58
+ }
59
+
60
+ .dc-filter-token__label:focus:not(:focus-visible),
61
+ .dc-filter-token__button:focus:not(:focus-visible) {
62
+ background: none;
63
+ }
64
+
65
+ .dc-filter-operator-select {
66
+ display: grid;
67
+ grid-template-columns: auto 1fr;
68
+ grid-column-gap: 8px;
69
+ align-items: center;
70
+ }
71
+
72
+ .dc-string-filter-input {
73
+ box-sizing: border-box;
74
+ display: grid;
75
+ grid-template-columns: auto 1fr;
76
+ grid-gap: 4px 8px;
77
+ align-items: center;
78
+ padding-left: 4px;
79
+ }
80
+
81
+ .dc-string-filter-input__error {
82
+ grid-column: 1/3;
83
+ }
84
+
85
+ .dc-filter-value-list {
86
+ box-sizing: border-box;
87
+ max-height: 192px;
88
+ padding: 0;
89
+ margin: 0;
90
+ overflow-y: auto;
91
+ list-style: none;
92
+ scroll-behavior: smooth;
93
+ scroll-snap-type: y mandatory;
94
+ }
95
+
96
+ .dc-filter-value-list > li {
97
+ display: flex;
98
+ scroll-snap-align: start;
99
+ align-items: center;
100
+ min-height: 32px;
101
+ }
102
+
103
+ .dc-filter-popover {
104
+ width: 320px;
105
+ max-width: 100%;
106
+ padding: 16px;
107
+ font: var(--dc-text-sm);
108
+ }
109
+
110
+ .dc-filter-form {
111
+ display: block;
112
+ width: 100%;
113
+ }
114
+
115
+ .dc-filter-form__operator {
116
+ margin-bottom: 8px;
117
+ }
118
+
119
+ .dc-filter-form__value-list {
120
+ padding-right: 16px;
121
+ padding-left: 16px;
122
+ margin-right: -16px;
123
+ margin-left: -16px;
124
+ }
125
+
126
+ .dc-filter-form__buttons {
127
+ display: flex;
128
+ gap: 4px;
129
+ align-items: center;
130
+ justify-content: flex-end;
131
+ margin-top: 16px;
132
+ }
133
+
134
+ .dc-filtered-search {
135
+ --dc-filtered-search-font-size: 14px;
136
+ --dc-filtered-search-height: 36px;
137
+ --dc-filtered-search-padding-x: 12px;
138
+ --dc-filtered-search-border-radius: 7px;
139
+ --dc-filtered-search-text-color: var(--dc-control-primary-text-color);
140
+ --dc-filtered-search-border-color: var(--dc-control-border-color);
141
+ --dc-filtered-search-bg: var(--dc-control-bg);
142
+ --dc-filtered-search-icon-color: var(--dc-control-secondary-text-color);
143
+ --dc-filtered-search-focus-ring-color: var(--dc-control-primary-color);
144
+ --dc-filtered-search-option-color: var(--dc-control-primary-text-color);
145
+ --dc-filtered-search-option-bg: none;
146
+ --dc-filtered-search-selected-option-color: var(--dc-on-primary-color);
147
+ --dc-filtered-search-selected-option-bg: var(--dc-primary-color);
148
+ --dc-filtered-search-listbox-bg: var(--dc-white);
149
+ --dc-filtered-search-listbox-shadow:
150
+ 0 0 0 1px rgb(var(--dc-black-rgb) / 7.5%),
151
+ 0 -1px 0 0 rgb(var(--dc-black-rgb) / 5%),
152
+ var(--dc-shadow-lg);
153
+ --dc-filtered-search-token-color: var(--dc-primary-text-color);
154
+ --dc-filtered-search-token-color-selected: var(--dc-on-primary-color);
155
+ --dc-filtered-search-token-bg: var(--dc-gray-200);
156
+ --dc-filtered-search-token-bg-hover: rgb(var(--dc-black-rgb) / 10%);
157
+ --dc-filtered-search-token-bg-selected: var(--dc-primary-color);
158
+
159
+ position: relative;
160
+ box-sizing: border-box;
161
+ display: flex;
162
+ width: 100%;
163
+ font-family: var(--dc-primary-font);
164
+ font-size: var(--dc-filtered-search-font-size);
165
+ font-weight: 400;
166
+ line-height: 1;
167
+ color: var(--dc-filtered-search-text-color);
168
+ color-scheme: light;
169
+ cursor: text;
170
+ background: var(--dc-filtered-search-bg);
171
+ border: 1px solid var(--dc-filtered-search-border-color);
172
+ border-radius: var(--dc-filtered-search-border-radius);
173
+ }
174
+
175
+ .dc-filtered-search_has_focus {
176
+ border-color: var(--dc-filtered-search-focus-ring-color);
177
+ box-shadow: 0 0 0 1px var(--dc-filtered-search-focus-ring-color);
178
+ }
179
+
180
+ .dc-filtered-search__icon {
181
+ flex-shrink: 0;
182
+ width: 18px;
183
+ height: 18px;
184
+ margin-top: 8px;
185
+ margin-left: 8px;
186
+ pointer-events: none;
187
+ }
188
+
189
+ .dc-filtered-search__clear-button {
190
+ flex-shrink: 0;
191
+ margin-top: 1px;
192
+ margin-right: 1px;
193
+ white-space: nowrap;
194
+ border-radius: calc(var(--dc-filtered-search-border-radius) - 1px);
195
+ }
196
+
197
+ .dc-filtered-search__clear-button:focus::after {
198
+ border-radius: inherit;
199
+ }
200
+
201
+ .dc-filtered-search__filters {
202
+ display: flex;
203
+ flex-grow: 1;
204
+ flex-wrap: wrap;
205
+ align-items: center;
206
+ min-width: 0;
207
+ padding: 0 4px;
208
+ pointer-events: none;
209
+ }
210
+
211
+ .dc-filtered-search__filters > * {
212
+ margin: 3px 2px;
213
+ pointer-events: all;
214
+ }
215
+
216
+ .dc-filtered-search__input {
217
+ flex-grow: 1;
218
+ min-width: 0;
219
+ height: 28px;
220
+ padding: 0 8px;
221
+ font: inherit;
222
+ color: inherit;
223
+ -webkit-appearance: none;
224
+ -moz-appearance: none;
225
+ appearance: none;
226
+ background: none;
227
+ border: none;
228
+ border-radius: inherit;
229
+ }
230
+
231
+ .dc-filtered-search__input::-moz-placeholder {
232
+ color: inherit;
233
+ opacity: 0.4;
234
+ }
235
+
236
+ .dc-filtered-search__input::placeholder {
237
+ color: inherit;
238
+ opacity: 0.4;
239
+ }
240
+
241
+ .dc-filtered-search__input:focus {
242
+ outline: none;
243
+ }
244
+
245
+ .dc-filtered-search__list-box {
246
+ position: absolute;
247
+ top: calc(100% + 8px);
248
+ left: 0;
249
+ z-index: var(--dc-overlay-z-index);
250
+ box-sizing: border-box;
251
+ width: 100%;
252
+ padding: 4px;
253
+ margin: 0;
254
+ font-size: var(--dc-filtered-search-font-size);
255
+ list-style: none;
256
+ background: var(--dc-filtered-search-listbox-bg);
257
+ border-radius: var(--dc-filtered-search-border-radius);
258
+ box-shadow: var(--dc-filtered-search-listbox-shadow);
259
+ }
260
+
261
+ .dc-filtered-search__list-box > [role="option"] {
262
+ box-sizing: border-box;
263
+ padding: 6px 8px;
264
+ color: var(--dc-filtered-search-option-color);
265
+ cursor: pointer;
266
+ border-radius: 5px;
267
+ }
268
+
269
+ .dc-filtered-search__list-box > [role="option"][aria-selected="true"] {
270
+ color: var(--dc-filtered-search-selected-option-color);
271
+ background: var(--dc-filtered-search-selected-option-bg);
272
+ }
273
+
274
+ .dark .dc-filtered-search,
275
+ .dark.dc-filtered-search {
276
+ --dc-filtered-search-listbox-bg: var(--dc-gray-800);
277
+ --dc-filtered-search-listbox-shadow:
278
+ 0 0 0 1px var(--dc-gray-700),
279
+ var(--dc-shadow-lg);
280
+ --dc-filtered-search-token-bg: var(--dc-gray-700);
281
+ --dc-filtered-search-token-bg-hover: rgb(var(--dc-white-rgb) / 10%);
282
+
283
+ color-scheme: dark;
284
+ }
@@ -7,6 +7,10 @@ const OPERATORS = {
7
7
  notContain: 'NOT_CONTAIN',
8
8
  };
9
9
  export class StringFilter extends AbstractFilter {
10
+ static Type = TYPE;
11
+ static Operators = OPERATORS;
12
+ config;
13
+ state;
10
14
  constructor(config, state) {
11
15
  super();
12
16
  this.config = config;
@@ -37,5 +41,3 @@ export class StringFilter extends AbstractFilter {
37
41
  return this.value === '';
38
42
  }
39
43
  }
40
- StringFilter.Type = TYPE;
41
- StringFilter.Operators = OPERATORS;
@@ -5,6 +5,10 @@ const OPERATORS = {
5
5
  notIn: 'NOT_IN',
6
6
  };
7
7
  export class StringSetFilter extends AbstractFilter {
8
+ static Type = TYPE;
9
+ static Operators = OPERATORS;
10
+ config;
11
+ state;
8
12
  constructor(config, state) {
9
13
  super();
10
14
  this.config = config;
@@ -35,5 +39,3 @@ export class StringSetFilter extends AbstractFilter {
35
39
  return this.value.length === 0;
36
40
  }
37
41
  }
38
- StringSetFilter.Type = TYPE;
39
- StringSetFilter.Operators = OPERATORS;
@@ -0,0 +1,12 @@
1
+ .dc-string-filter-input {
2
+ box-sizing: border-box;
3
+ display: grid;
4
+ grid-template-columns: auto 1fr;
5
+ grid-gap: 4px 8px;
6
+ align-items: center;
7
+ padding-left: 4px;
8
+ }
9
+
10
+ .dc-string-filter-input__error {
11
+ grid-column: 1/3;
12
+ }
@@ -47,7 +47,9 @@ export function StringFilterItem({ filter, isEditing, onEditStart, onEditCancel,
47
47
  }
48
48
  onChange(filter);
49
49
  };
50
- const anchor = (_jsxs(FilterToken, { isHighlighted: isEditing, onClickLabel: startEdit, onClickCloseButton: onClickCloseButton, children: [label, filter.value ? (_jsxs(_Fragment, { children: ["\u00A0", _jsx("span", { children: formatOperator(filter.operator) }), "\u00A0", _jsx("b", { children: filter.value })] })) : null] }));
50
+ const anchor = (_jsxs(FilterToken, { isHighlighted: isEditing, onClickLabel: startEdit, onClickCloseButton: onClickCloseButton, children: [label, filter.value
51
+ ? (_jsxs(_Fragment, { children: ["\u00A0", _jsx("span", { children: formatOperator(filter.operator) }), "\u00A0", _jsx("b", { children: filter.value })] }))
52
+ : null] }));
51
53
  return (_jsx(Popover, { className: "dc-filter-popover", anchor: anchor, anchorGap: 2, transitionDurationMs: 0, isOpen: isEditing, onClose: cancelEdit, children: _jsxs("form", { className: "dc-filter-form", onSubmit: onSubmit, children: [_jsx(FilterOperatorSelect, { className: "dc-filter-form__operator", accessibleName: operatorSelectAccessibleName, label: label, values: operators, value: filterOperator, onChange: setFilterOperator, formatValue: formatOperator }), _jsx(StringFilterInput, { placeholder: valueInputPlaceholder, accessibleName: valueInputAccessibleName, error: error, value: filterValue, onChangeValue: setFilterValue }), _jsxs("div", { className: "dc-filter-form__buttons", children: [_jsx(Button, { buttonStyle: "plain", type: "button", onClick: cancelEdit, children: translations.cancelButton }), _jsx(Button, { type: "submit", tint: "blue", disabled: !filterValue, children: translations.applyButton })] })] }) }));
52
54
  }
53
55
  StringFilterItem.defaultOperatorFormatter = defaultOperatorFormatter;
@@ -56,7 +58,7 @@ function defaultOperatorFormatter(operator) {
56
58
  [StringFilter.Operators.equal]: 'is',
57
59
  [StringFilter.Operators.notEqual]: 'is not',
58
60
  [StringFilter.Operators.contain]: 'contains',
59
- [StringFilter.Operators.notContain]: "doesn't contain",
61
+ [StringFilter.Operators.notContain]: 'doesn\'t contain',
60
62
  };
61
63
  return messages[operator];
62
64
  }
@@ -40,7 +40,9 @@ export function StringSetFilterItem({ filter, isEditing, onEditStart, onEditCanc
40
40
  }
41
41
  onChange(changedFilter);
42
42
  };
43
- const anchor = (_jsxs(FilterToken, { isHighlighted: isEditing, onClickLabel: startEdit, onClickCloseButton: onClickCloseButton, children: [label, filter.value.length > 0 ? (_jsxs(_Fragment, { children: ["\u00A0", _jsx("span", { children: formatOperator(filter.operator) }), "\u00A0", _jsx("b", { children: formatValues(filter.value) })] })) : null] }));
43
+ const anchor = (_jsxs(FilterToken, { isHighlighted: isEditing, onClickLabel: startEdit, onClickCloseButton: onClickCloseButton, children: [label, filter.value.length > 0
44
+ ? (_jsxs(_Fragment, { children: ["\u00A0", _jsx("span", { children: formatOperator(filter.operator) }), "\u00A0", _jsx("b", { children: formatValues(filter.value) })] }))
45
+ : null] }));
44
46
  return (_jsx(Popover, { className: "dc-filter-popover", anchor: anchor, anchorGap: 2, transitionDurationMs: 0, isOpen: isEditing, onClose: cancelEdit, children: _jsxs("form", { className: "dc-filter-form", onSubmit: onSubmit, children: [_jsx(FilterOperatorSelect, { className: "dc-filter-form__operator", accessibleName: operatorSelectAccessibleName, label: label, values: operators, value: filterOperator, onChange: setFilterOperator, formatValue: formatOperator }), _jsx(FilterValueList, { className: "dc-filter-form__value-list", values: values, checkedValues: filterValue, onChangeCheckedValues: setFilterValue, formatValue: formatValue }), _jsxs("div", { className: "dc-filter-form__buttons", children: [_jsx(Button, { type: "button", buttonStyle: "plain", onClick: cancelEdit, children: translations.cancelButton }), _jsx(Button, { type: "submit", tint: "blue", disabled: filterValue.length < 1, children: translations.applyButton })] })] }) }));
45
47
  }
46
48
  StringSetFilterItem.defaultValueFormatter = defaultValueFormatter;
@@ -0,0 +1,21 @@
1
+ .dc-form-field {
2
+ display: block;
3
+ min-width: 0;
4
+ text-align: left;
5
+ color-scheme: light;
6
+ }
7
+
8
+ .dc-form-field__label {
9
+ margin-bottom: 4px;
10
+ }
11
+
12
+ .dc-form-field__error,
13
+ .dc-form-field__hint {
14
+ display: block;
15
+ margin-top: 4px;
16
+ }
17
+
18
+ .dark .dc-form-field,
19
+ .dark.dc-form-field {
20
+ color-scheme: dark;
21
+ }
@@ -33,5 +33,7 @@ export function FormField({ required = false, labelFor = '', label, error, hint,
33
33
  else {
34
34
  inputElement = children;
35
35
  }
36
- return (_jsxs("div", { ...props, className: classNames('dc-form-field', className), children: [label ? (_jsx(Label, { className: "dc-form-field__label", required: required, htmlFor: inputId, children: label })) : null, _jsx("div", { className: "dc-form-field__input", children: inputElement }), errorElement, hintElement] }));
36
+ return (_jsxs("div", { ...props, className: classNames('dc-form-field', className), children: [label
37
+ ? (_jsx(Label, { className: "dc-form-field__label", required: required, htmlFor: inputId, children: label }))
38
+ : null, _jsx("div", { className: "dc-form-field__input", children: inputElement }), errorElement, hintElement] }));
37
39
  }
@@ -0,0 +1,23 @@
1
+ .dc-label {
2
+ --dc-label-text-color: var(--dc-primary-text-color);
3
+ --dc-label-required-mark-color: #dc2626;
4
+
5
+ display: inline-block;
6
+ font: var(--dc-text-sm);
7
+ font-weight: 500;
8
+ color: var(--dc-label-text-color);
9
+ color-scheme: light;
10
+ }
11
+
12
+ .dc-label_required::after {
13
+ padding-left: 0.25em;
14
+ color: var(--dc-label-required-mark-color);
15
+ content: "*";
16
+ }
17
+
18
+ .dark .dc-label,
19
+ .dark.dc-label {
20
+ --dc-label-required-mark-color: #f87171;
21
+
22
+ color-scheme: dark;
23
+ }
@@ -0,0 +1,87 @@
1
+ .dc-menu {
2
+ --dc-menu-item-icon-gap: 8px;
3
+ --dc-menu-item-color: var(--dc-button-gray-plain-text-color);
4
+ --dc-menu-item-bg: var(--dc-button-gray-bg-hover);
5
+ --dc-menu-item-color-destructive: var(--dc-button-red-plain-text-color);
6
+ --dc-menu-item-bg-destructive: var(--dc-button-red-plain-bg-hover);
7
+ --dc-menu-separator-color: var(--dc-bg-transparent-2);
8
+
9
+ box-sizing: border-box;
10
+ width: 100%;
11
+ padding: 0;
12
+ margin: 0;
13
+ list-style: none;
14
+ color-scheme: light;
15
+ }
16
+
17
+ .dc-menu__container {
18
+ min-width: 160px;
19
+ padding: 4px;
20
+ }
21
+
22
+ .dc-menu__separator {
23
+ box-sizing: border-box;
24
+ height: 1px;
25
+ margin: 4px 8px;
26
+ background: var(--dc-menu-separator-color);
27
+ }
28
+
29
+ .dc-menu-btn {
30
+ display: flex;
31
+ align-items: center;
32
+ width: 100%;
33
+ height: 32px;
34
+ padding: 0 12px;
35
+ font: var(--dc-text-sm);
36
+ color: var(--dc-menu-item-color);
37
+ text-align: left;
38
+ white-space: nowrap;
39
+ -webkit-appearance: none;
40
+ -moz-appearance: none;
41
+ appearance: none;
42
+ -webkit-user-select: none;
43
+ -moz-user-select: none;
44
+ user-select: none;
45
+ background: transparent;
46
+ border: none;
47
+ border-radius: 6px;
48
+ }
49
+
50
+ .dc-menu-btn:hover {
51
+ cursor: pointer;
52
+ }
53
+
54
+ .dc-menu-btn:focus {
55
+ background: var(--dc-menu-item-bg);
56
+ outline: none;
57
+ }
58
+
59
+ .dc-menu-btn:disabled {
60
+ cursor: default;
61
+ opacity: var(--dc-disabled-state-opacity);
62
+ }
63
+
64
+ .dc-menu-btn__label {
65
+ flex-grow: 1;
66
+ }
67
+
68
+ .dc-menu-btn__label_gap_left {
69
+ padding-left: var(--dc-menu-item-icon-gap);
70
+ }
71
+
72
+ .dc-menu-btn__label_gap_right {
73
+ padding-right: var(--dc-menu-item-icon-gap);
74
+ }
75
+
76
+ .dc-menu-btn_destructive {
77
+ color: var(--dc-menu-item-color-destructive);
78
+ }
79
+
80
+ .dc-menu-btn_destructive:focus {
81
+ background: var(--dc-menu-item-bg-destructive);
82
+ }
83
+
84
+ .dark .dc-menu,
85
+ .dark.dc-menu {
86
+ color-scheme: dark;
87
+ }
@@ -4,13 +4,13 @@ import { PopoverAlignment, PopoverPlacement } from '../popover/index.js';
4
4
  import { MenuItemProps } from './menu-item.js';
5
5
  import { MenuSeparator } from './menu-separator.js';
6
6
  export type MenuButtonRenderFn = (props: {
7
- ref: RefCallback<HTMLElement>;
8
- id: string;
7
+ 'ref': RefCallback<HTMLElement>;
8
+ 'id': string;
9
9
  'aria-haspopup': true;
10
10
  'aria-expanded': boolean;
11
11
  'aria-controls': string;
12
- onClick: MouseEventHandler;
13
- onKeyDown: KeyboardEventHandler;
12
+ 'onClick': MouseEventHandler;
13
+ 'onKeyDown': KeyboardEventHandler;
14
14
  }, context: {
15
15
  isOpen: boolean;
16
16
  openMenu: () => void;
@@ -89,10 +89,10 @@ export function Menu({ defaultIsOpen = false, placement = 'bottom', alignment =
89
89
  event.stopPropagation();
90
90
  };
91
91
  const handleButtonKeyDown = (event) => {
92
- if (event.key === KeyboardKeys.ArrowUp ||
93
- event.key === KeyboardKeys.ArrowDown ||
94
- event.key === KeyboardKeys.Enter ||
95
- event.key === KeyboardKeys.Space) {
92
+ if (event.key === KeyboardKeys.ArrowUp
93
+ || event.key === KeyboardKeys.ArrowDown
94
+ || event.key === KeyboardKeys.Enter
95
+ || event.key === KeyboardKeys.Space) {
96
96
  openMenu();
97
97
  window.setTimeout(event.key === KeyboardKeys.ArrowUp
98
98
  ? focusLastMenuItem
@@ -3,7 +3,7 @@ import { classNames } from '../../lib/react-helpers.js';
3
3
  import { Badge } from '../badge/index.js';
4
4
  export function NavListItem({ className, icon, badge, children, renderAs, ...props }) {
5
5
  className = classNames(className, 'dc-nav-link');
6
- children = (_jsxs(_Fragment, { children: [icon != null && _jsxs("div", { className: "dc-nav-link__icon", children: [icon, " "] }), _jsx("div", { className: "dc-nav-link__text", children: children }), badge != null && _jsxs(_Fragment, { children: ["\u00A0", _jsx(Badge, { className: "dc-nav-link__badge", children: badge })] })] }));
6
+ children = (_jsxs(_Fragment, { children: [icon != null && (_jsxs("div", { className: "dc-nav-link__icon", children: [icon, ' '] })), _jsx("div", { className: "dc-nav-link__text", children: children }), badge != null && (_jsxs(_Fragment, { children: ["\u00A0", _jsx(Badge, { className: "dc-nav-link__badge", children: badge })] }))] }));
7
7
  let content;
8
8
  if (typeof renderAs === 'function') {
9
9
  content = renderAs({ className, children });
@@ -0,0 +1,89 @@
1
+ .dc-nav-list {
2
+ --dc-nav-list-title-color: var(--dc-secondary-text-color);
3
+ --dc-nav-link-text-color: var(--dc-primary-text-color);
4
+ --dc-nav-link-bg: transparent;
5
+ --dc-nav-link-bg-hover: var(--dc-bg-transparent-2);
6
+ --dc-nav-link-bg-active: var(--dc-bg-transparent-2);
7
+ --dc-nav-link-focus-ring-color: var(--dc-focus-ring-color);
8
+
9
+ color-scheme: light;
10
+ }
11
+
12
+ .dc-nav-list__items {
13
+ padding: 0;
14
+ margin: 0;
15
+ list-style: none;
16
+ }
17
+
18
+ .dc-nav-list__title,
19
+ .dc-nav-link {
20
+ box-sizing: border-box;
21
+ padding: 0 12px;
22
+ }
23
+
24
+ .dc-nav-list__title {
25
+ font: 500 var(--dc-text-xs);
26
+ color: var(--dc-nav-list-title-color);
27
+ }
28
+
29
+ * + .dc-nav-list__title {
30
+ margin-top: 20px;
31
+ }
32
+
33
+ * + .dc-nav-list__item {
34
+ margin-top: 2px;
35
+ }
36
+
37
+ .dc-nav-link {
38
+ display: flex;
39
+ align-items: center;
40
+ height: 36px;
41
+ font: var(--dc-text-sm);
42
+ color: var(--dc-nav-link-text-color);
43
+ text-decoration: none;
44
+ white-space: nowrap;
45
+ cursor: pointer;
46
+ border-radius: 8px;
47
+ }
48
+
49
+ .dc-nav-link:hover {
50
+ background: var(--dc-nav-link-bg-hover);
51
+ }
52
+
53
+ .dc-nav-link:focus {
54
+ outline: none;
55
+ box-shadow: 0 0 0 2px var(--dc-nav-link-focus-ring-color);
56
+ }
57
+
58
+ .dc-nav-link:focus:not(:focus-visible) {
59
+ box-shadow: none;
60
+ }
61
+
62
+ .dc-nav-link.active,
63
+ .dc-nav-link[aria-current="page"],
64
+ .dc-nav-link[aria-current="step"],
65
+ .dc-nav-link[aria-current="true"] {
66
+ background: var(--dc-nav-link-bg-active);
67
+ }
68
+
69
+ .dc-nav-link__icon {
70
+ display: inline-flex;
71
+ margin-right: 8px;
72
+ }
73
+
74
+ .dc-nav-link__text {
75
+ flex-grow: 1;
76
+ grid-area: text;
77
+ min-width: 0;
78
+ overflow: hidden;
79
+ text-overflow: ellipsis;
80
+ }
81
+
82
+ .dc-nav-link__badge {
83
+ margin-left: 8px;
84
+ }
85
+
86
+ .dark .dc-nav-list,
87
+ .dark.dc-nav-list {
88
+ color-scheme: dark;
89
+ }
@@ -0,0 +1,49 @@
1
+ .dc-password-input {
2
+ --dc-password-input-toggle-color: var(--dc-control-secondary-text-color);
3
+ --dc-password-input-toggle-color-hover: var(--dc-control-primary-text-color);
4
+ --dc-password-input-toggle-bg: none;
5
+ --dc-password-input-toggle-bg-hover: var(--dc-bg-transparent-2);
6
+
7
+ padding-right: 0;
8
+ color-scheme: light;
9
+ }
10
+
11
+ .dc-password-input > input {
12
+ padding-right: calc(var(--dc-input-padding-x) / 2);
13
+ }
14
+
15
+ .dc-password-input__toggle-button {
16
+ box-sizing: border-box;
17
+ display: inline-flex;
18
+ flex-shrink: 0;
19
+ align-items: center;
20
+ justify-content: center;
21
+ width: var(--dc-input-height);
22
+ height: 100%;
23
+ padding: 0;
24
+ color: inherit;
25
+ -webkit-appearance: none;
26
+ -moz-appearance: none;
27
+ appearance: none;
28
+ background: var(--dc-password-input-toggle-bg);
29
+ border: none;
30
+ border-radius: calc(var(--dc-input-border-radius) - 1px);
31
+ }
32
+
33
+ .dc-password-input__toggle-button:not(:disabled):focus,
34
+ .dc-password-input__toggle-button:not(:disabled):hover {
35
+ color: var(--dc-password-input-toggle-color-hover);
36
+ cursor: pointer;
37
+ background: var(--dc-password-input-toggle-bg-hover);
38
+ outline: none;
39
+ }
40
+
41
+ .dc-password-input__toggle-button:focus:not(:focus-visible, :hover) {
42
+ color: var(--dc-password-input-toggle-color);
43
+ background: var(--dc-password-input-toggle-bg);
44
+ }
45
+
46
+ .dark .dc-password-input,
47
+ .dark.dc-password-input {
48
+ color-scheme: dark;
49
+ }