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,173 @@
1
+ .dc-dialog {
2
+ --dc-dialog-max-width: 480px;
3
+ --dc-dialog-safe-area: 16px;
4
+ --dc-dialog-viewport-gap: 16px;
5
+ --dc-dialog-transition-duration: 200ms;
6
+ --dc-dialog-open-transition-duration: 250ms;
7
+ --dc-dialog-close-transition-duration: 150ms;
8
+ --dc-dialog-text-color: var(--dc-primary-text-color);
9
+ --dc-dialog-border-color: transparent;
10
+ --dc-dialog-bg: var(--dc-primary-bg);
11
+ --dc-dialog-divider-color: var(--dc-border-color-transparent-2);
12
+ --dc-dialog-backdrop-color: rgb(var(--dc-gray-900-rgb) / 40%);
13
+
14
+ position: fixed;
15
+ top: 0;
16
+ left: 0;
17
+ z-index: var(--dc-overlay-z-index);
18
+ box-sizing: border-box;
19
+ display: flex;
20
+ align-items: center;
21
+ justify-content: center;
22
+ width: 100%;
23
+ height: 100%;
24
+ padding: var(--dc-dialog-viewport-gap);
25
+ color-scheme: light;
26
+ }
27
+
28
+ .dc-dialog__backdrop {
29
+ position: fixed;
30
+ inset: 0;
31
+ background: var(--dc-dialog-backdrop-color);
32
+ }
33
+
34
+ .dc-dialog__modal {
35
+ position: relative;
36
+ box-sizing: border-box;
37
+ display: flex;
38
+ flex-direction: column;
39
+ width: 480px;
40
+ max-width: 100%;
41
+ max-height: 100%;
42
+ font: var(--dc-text-sm);
43
+ color: var(--dc-dialog-text-color);
44
+ background: var(--dc-dialog-bg);
45
+ border-radius: 12px;
46
+ box-shadow: var(--dc-shadow-xl);
47
+ }
48
+
49
+ .dc-dialog__modal_sm {
50
+ width: 320px;
51
+ }
52
+
53
+ .dc-dialog__modal_lg {
54
+ width: 640px;
55
+ }
56
+
57
+ .dc-dialog-header,
58
+ .dc-dialog-body,
59
+ .dc-dialog-footer {
60
+ padding: var(--dc-dialog-safe-area);
61
+ }
62
+
63
+ .dc-dialog-header {
64
+ display: grid;
65
+ grid-template-columns: 1fr auto;
66
+ grid-gap: 4px;
67
+ align-items: center;
68
+ font: var(--dc-text-sm);
69
+ }
70
+
71
+ .dc-dialog-header_has_divider {
72
+ border-bottom: 1px solid var(--dc-dialog-divider-color);
73
+ }
74
+
75
+ .dc-dialog-header__title {
76
+ grid-column: 1 / 2;
77
+ margin: 0;
78
+ font: 700 var(--dc-text-md);
79
+ }
80
+
81
+ .dc-dialog-header__subtitle,
82
+ .dc-dialog-header__body {
83
+ grid-column: 1 / 3;
84
+ }
85
+
86
+ .dc-dialog-header__close-button {
87
+ grid-column: 2 / 3;
88
+ width: 24px;
89
+ height: 24px;
90
+ }
91
+
92
+ .dc-dialog-body {
93
+ position: relative;
94
+ flex-grow: 1;
95
+ padding-top: var(--dc-dialog-safe-area);
96
+ padding-bottom: var(--dc-dialog-safe-area);
97
+ overflow: auto;
98
+ -webkit-overflow-scrolling: touch;
99
+ }
100
+
101
+ .dc-dialog-footer {
102
+ display: flex;
103
+ flex-wrap: wrap;
104
+ gap: 8px;
105
+ align-items: center;
106
+ justify-content: flex-end;
107
+ }
108
+
109
+ .dc-dialog-footer_has_divider {
110
+ border-top: 1px solid var(--dc-dialog-divider-color);
111
+ }
112
+
113
+ .dc-dialog__modal > :first-child {
114
+ border-top-left-radius: inherit;
115
+ border-top-right-radius: inherit;
116
+ }
117
+
118
+ .dc-dialog__modal > :last-child {
119
+ border-bottom-right-radius: inherit;
120
+ border-bottom-left-radius: inherit;
121
+ }
122
+
123
+ .dc-dialog.enter {
124
+ transition: opacity var(--dc-dialog-open-transition-duration) ease;
125
+ }
126
+
127
+ .dc-dialog.enter-from {
128
+ opacity: 0;
129
+ }
130
+
131
+ .dc-dialog.enter-to {
132
+ opacity: 1;
133
+ }
134
+
135
+ .dc-dialog.enter .dc-dialog__modal {
136
+ transition: transform var(--dc-dialog-open-transition-duration) ease-out;
137
+ }
138
+
139
+ .dc-dialog.enter-from .dc-dialog__modal {
140
+ transform: scale(0.95);
141
+ }
142
+
143
+ .dc-dialog.enter-to .dc-dialog__modal {
144
+ transform: scale(1);
145
+ }
146
+
147
+ .dc-dialog.leave {
148
+ transition: opacity var(--dc-dialog-close-transition-duration) ease;
149
+ }
150
+
151
+ .dc-dialog.leave-from {
152
+ opacity: 1;
153
+ }
154
+
155
+ .dc-dialog.leave-to {
156
+ opacity: 0;
157
+ }
158
+
159
+ .dark .dc-dialog,
160
+ .dark.dc-dialog {
161
+ --dc-dialog-border-color: var(--dc-gray-700);
162
+ --dc-dialog-bg: var(--dc-gray-800);
163
+ --dc-dialog-divider-color: var(--dc-border-color-transparent-1);
164
+
165
+ color-scheme: dark;
166
+ }
167
+
168
+ .dark .dc-dialog .dc-dialog-modal,
169
+ .dark.dc-dialog .dc-dialog-modal {
170
+ box-shadow:
171
+ 0 0 0 1px var(--dc-border-color-transparent-2),
172
+ var(--dc-shadow-xl);
173
+ }
@@ -0,0 +1,52 @@
1
+ .dc-empty-state {
2
+ --dc-empty-state-inner-width: 640px;
3
+ --dc-empty-state-primary-color: var(--dc-primary-text-color);
4
+ --dc-empty-state-secondary-color: var(--dc-secondary-text-color);
5
+
6
+ box-sizing: border-box;
7
+ display: flex;
8
+ flex-direction: column;
9
+ align-items: center;
10
+ justify-content: center;
11
+ padding: 16px;
12
+ font: var(--dc-text-sm);
13
+ text-align: center;
14
+ color-scheme: light;
15
+ }
16
+
17
+ .dc-empty-state__image {
18
+ color: var(--dc-empty-state-secondary-color);
19
+ }
20
+
21
+ .dc-empty-state__title,
22
+ .dc-empty-state__message {
23
+ max-width: var(--dc-empty-state-inner-width);
24
+ margin: 0;
25
+ }
26
+
27
+ .dc-empty-state__title {
28
+ font: 700 var(--dc-text-md);
29
+ }
30
+
31
+ * + .dc-empty-state__title,
32
+ * + .dc-empty-state__message {
33
+ margin-top: 8px;
34
+ }
35
+
36
+ .dc-empty-state__title + .dc-empty-state__message {
37
+ margin-top: 4px;
38
+ }
39
+
40
+ * + .dc-empty-state__primary-action,
41
+ * + .dc-empty-state__secondary-action {
42
+ margin-top: 24px;
43
+ }
44
+
45
+ .dc-empty-state__primary-action + .dc-empty-state__secondary-action {
46
+ margin-top: 12px;
47
+ }
48
+
49
+ .dark .dc-empty-state,
50
+ .dark.dc-empty-state {
51
+ color-scheme: dark;
52
+ }
@@ -0,0 +1,74 @@
1
+ .dc-file-picker {
2
+ --dc-file-picker-label-color: var(--dc-control-primary-text-color);
3
+ --dc-file-picker-icon-color: var(--dc-control-secondary-text-color);
4
+ --dc-file-picker-caption-color: var(--dc-control-secondary-text-color);
5
+ --dc-file-picker-border-color: var(--dc-control-border-color);
6
+ --dc-file-picker-border-color-drag-over: var(--dc-control-primary-color);
7
+ --dc-file-picker-bg-drag-over: var(--dc-control-secondary-color);
8
+
9
+ position: relative;
10
+ box-sizing: border-box;
11
+ display: inline-flex;
12
+ flex-wrap: wrap;
13
+ gap: 12px 20px;
14
+ align-items: center;
15
+ padding: 16px 20px;
16
+ color-scheme: light;
17
+ border: 1px dashed var(--dc-file-picker-border-color);
18
+ border-radius: 8px;
19
+ }
20
+
21
+ .dc-file-picker__input {
22
+ position: absolute;
23
+ width: 1px;
24
+ height: 1px;
25
+ overflow: hidden;
26
+ clip: rect(0, 0, 0, 0);
27
+ }
28
+
29
+ .dc-file-picker__body {
30
+ display: flex;
31
+ flex: auto;
32
+ align-items: center;
33
+ font-family: var(--dc-primary-font);
34
+ font-size: 14px;
35
+ line-height: 1.25;
36
+ }
37
+
38
+ .dc-file-picker__icon {
39
+ display: inline-flex;
40
+ margin-right: 16px;
41
+ color: var(--dc-file-picker-icon-color);
42
+ }
43
+
44
+ .dc-file-picker__label {
45
+ color: var(--dc-file-picker-label-color);
46
+ }
47
+
48
+ .dc-file-picker__caption {
49
+ margin-top: 4px;
50
+ font-size: 12px;
51
+ color: var(--dc-file-picker-caption-color);
52
+ }
53
+
54
+ .dc-file-picker__button {
55
+ box-shadow: none;
56
+ }
57
+
58
+ .dc-file-picker_disabled {
59
+ opacity: var(--dc-disabled-state-opacity);
60
+ }
61
+
62
+ .dc-file-picker_disabled .dc-file-picker__button {
63
+ pointer-events: none;
64
+ }
65
+
66
+ .dc-file-picker_dragging-over {
67
+ background: var(--dc-file-picker-bg-drag-over);
68
+ border-color: var(--dc-file-picker-border-color-drag-over);
69
+ }
70
+
71
+ .dark .dc-file-picker,
72
+ .dark.dc-file-picker {
73
+ color-scheme: dark;
74
+ }
@@ -0,0 +1,60 @@
1
+ .dc-filter-buttons {
2
+ --dc-filter-button-text-color: var(--dc-button-gray-tinted-text-color);
3
+ --dc-filter-button-bg: var(--dc-button-gray-tinted-bg);
4
+ --dc-filter-button-bg-hover: var(--dc-button-gray-tinted-bg-hover);
5
+ --dc-filter-button-text-color-active: var(--dc-button-blue-text-color);
6
+ --dc-filter-button-bg-active: var(--dc-button-blue-bg);
7
+ --dc-filter-button-bg-active-hover: var(--dc-button-blue-bg-hover);
8
+
9
+ position: relative;
10
+ display: flex;
11
+ align-items: center;
12
+ max-width: 100%;
13
+ padding-bottom: 4px;
14
+ overflow: auto;
15
+ color-scheme: light;
16
+ }
17
+
18
+ .dc-filter-buttons > * + * {
19
+ margin-left: 8px;
20
+ }
21
+
22
+ .dc-filter-button {
23
+ box-sizing: border-box;
24
+ display: inline-flex;
25
+ align-items: center;
26
+ height: 28px;
27
+ padding: 0 8px;
28
+ font: var(--dc-text-sm);
29
+ color: var(--dc-filter-button-text-color);
30
+ white-space: nowrap;
31
+ cursor: pointer;
32
+ -webkit-user-select: none;
33
+ -moz-user-select: none;
34
+ user-select: none;
35
+ background: var(--dc-filter-button-bg);
36
+ border: 1px solid transparent;
37
+ border-radius: 7px;
38
+ transition-duration: 0.2s;
39
+ transition-property: color, background-color;
40
+ }
41
+
42
+ .dc-filter-button:hover {
43
+ background: var(--dc-filter-button-bg-hover);
44
+ }
45
+
46
+ .dc-filter-button.active,
47
+ .dc-filter-button[aria-pressed="true"] {
48
+ color: var(--dc-filter-button-text-color-active);
49
+ background: var(--dc-filter-button-bg-active);
50
+ }
51
+
52
+ .dc-filter-button.active:hover,
53
+ .dc-filter-button[aria-pressed="true"]:hover {
54
+ background: var(--dc-filter-button-bg-active-hover);
55
+ }
56
+
57
+ .dark .dc-filter-buttons,
58
+ .dark.dc-filter-buttons {
59
+ color-scheme: dark;
60
+ }
@@ -8,8 +8,8 @@ export function FilterButtons({ className, children, ...props }) {
8
8
  const el = ref.current;
9
9
  assertIfNullable(el, 'FilterButtons ref was not set');
10
10
  for (const child of el.children) {
11
- if (child instanceof HTMLButtonElement &&
12
- child.dataset.active === 'true') {
11
+ if (child instanceof HTMLButtonElement
12
+ && child.dataset.active === 'true') {
13
13
  const offset = el.offsetWidth - child.offsetWidth - child.offsetLeft;
14
14
  if (offset < 0) {
15
15
  el.scrollTo(Math.abs(offset), 0);
@@ -0,0 +1,30 @@
1
+ .dc-filter-popover {
2
+ width: 320px;
3
+ max-width: 100%;
4
+ padding: 16px;
5
+ font: var(--dc-text-sm);
6
+ }
7
+
8
+ .dc-filter-form {
9
+ display: block;
10
+ width: 100%;
11
+ }
12
+
13
+ .dc-filter-form__operator {
14
+ margin-bottom: 8px;
15
+ }
16
+
17
+ .dc-filter-form__value-list {
18
+ padding-right: 16px;
19
+ padding-left: 16px;
20
+ margin-right: -16px;
21
+ margin-left: -16px;
22
+ }
23
+
24
+ .dc-filter-form__buttons {
25
+ display: flex;
26
+ gap: 4px;
27
+ align-items: center;
28
+ justify-content: flex-end;
29
+ margin-top: 16px;
30
+ }
@@ -0,0 +1,6 @@
1
+ .dc-filter-operator-select {
2
+ display: grid;
3
+ grid-template-columns: auto 1fr;
4
+ grid-column-gap: 8px;
5
+ align-items: center;
6
+ }
@@ -0,0 +1,63 @@
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
+ }
@@ -0,0 +1,17 @@
1
+ .dc-filter-value-list {
2
+ box-sizing: border-box;
3
+ max-height: 192px;
4
+ padding: 0;
5
+ margin: 0;
6
+ overflow-y: auto;
7
+ list-style: none;
8
+ scroll-behavior: smooth;
9
+ scroll-snap-type: y mandatory;
10
+ }
11
+
12
+ .dc-filter-value-list > li {
13
+ display: flex;
14
+ scroll-snap-align: start;
15
+ align-items: center;
16
+ min-height: 32px;
17
+ }