draft-components 1.5.0 → 1.7.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 (176) hide show
  1. package/cjs/components/dialog/dialog.cjs +1 -1
  2. package/cjs/components/filtered-search/filter-item.cjs +23 -0
  3. package/cjs/components/filtered-search/filter-operator-select.cjs +17 -0
  4. package/cjs/components/filtered-search/filter-token.cjs +17 -0
  5. package/cjs/components/filtered-search/filter-value-list.cjs +20 -0
  6. package/cjs/components/filtered-search/filtered-search.cjs +202 -0
  7. package/cjs/components/filtered-search/icons.cjs +21 -0
  8. package/cjs/components/filtered-search/model/abstract-filter.cjs +6 -0
  9. package/cjs/components/filtered-search/model/string-filter.cjs +46 -0
  10. package/cjs/components/filtered-search/model/string-set-filter.cjs +44 -0
  11. package/cjs/components/filtered-search/string-filter-input.cjs +17 -0
  12. package/cjs/components/filtered-search/string-filter-item.cjs +68 -0
  13. package/cjs/components/filtered-search/string-set-filter-item.cjs +77 -0
  14. package/cjs/components/filtered-search/use-combobox-ids.cjs +17 -0
  15. package/cjs/components/filtered-search/use-translations.cjs +24 -0
  16. package/cjs/components/index.cjs +12 -0
  17. package/cjs/components/popover/popover.cjs +3 -4
  18. package/cjs/components/slide-over/slide-over-body.cjs +10 -0
  19. package/cjs/components/slide-over/slide-over-context.cjs +24 -0
  20. package/cjs/components/slide-over/slide-over-header.cjs +21 -0
  21. package/cjs/components/slide-over/slide-over.cjs +106 -0
  22. package/cjs/components/tooltip/tooltip.cjs +2 -2
  23. package/cjs/hooks/index.cjs +2 -2
  24. package/cjs/hooks/use-disable-body-scroll.cjs +3 -1
  25. package/cjs/hooks/use-esc-key-down.cjs +3 -1
  26. package/cjs/hooks/use-focus-trap.cjs +3 -1
  27. package/cjs/index.cjs +16 -2
  28. package/cjs/lib/helpers.cjs +5 -1
  29. package/cjs/lib/index.cjs +2 -0
  30. package/cjs/lib/keyboard-keys.cjs +1 -0
  31. package/cjs/lib/react-helpers.cjs +8 -0
  32. package/css/draft-components.css +340 -2
  33. package/css/draft-components.dark.css +65 -40
  34. package/esm/components/dialog/dialog.js +1 -1
  35. package/esm/components/filtered-search/filter-item.js +21 -0
  36. package/esm/components/filtered-search/filter-operator-select.js +15 -0
  37. package/esm/components/filtered-search/filter-token.js +15 -0
  38. package/esm/components/filtered-search/filter-value-list.js +18 -0
  39. package/esm/components/filtered-search/filtered-search.js +200 -0
  40. package/esm/components/filtered-search/icons.js +16 -0
  41. package/esm/components/filtered-search/model/abstract-filter.js +4 -0
  42. package/esm/components/filtered-search/model/string-filter.js +44 -0
  43. package/esm/components/filtered-search/model/string-set-filter.js +42 -0
  44. package/esm/components/filtered-search/string-filter-input.js +15 -0
  45. package/esm/components/filtered-search/string-filter-item.js +66 -0
  46. package/esm/components/filtered-search/string-set-filter-item.js +75 -0
  47. package/esm/components/filtered-search/use-combobox-ids.js +15 -0
  48. package/esm/components/filtered-search/use-translations.js +21 -0
  49. package/esm/components/index.js +6 -0
  50. package/esm/components/popover/popover.js +3 -4
  51. package/esm/components/slide-over/slide-over-body.js +8 -0
  52. package/esm/components/slide-over/slide-over-context.js +21 -0
  53. package/esm/components/slide-over/slide-over-header.js +19 -0
  54. package/esm/components/slide-over/slide-over.js +104 -0
  55. package/esm/components/tooltip/tooltip.js +2 -2
  56. package/esm/hooks/index.js +1 -1
  57. package/esm/hooks/use-disable-body-scroll.js +3 -1
  58. package/esm/hooks/use-esc-key-down.js +3 -1
  59. package/esm/hooks/use-focus-trap.js +3 -1
  60. package/esm/index.js +9 -3
  61. package/esm/lib/helpers.js +5 -2
  62. package/esm/lib/index.js +2 -2
  63. package/esm/lib/keyboard-keys.js +1 -0
  64. package/esm/lib/react-helpers.js +8 -1
  65. package/package.json +23 -23
  66. package/types/components/alert/alert.d.ts +1 -1
  67. package/types/components/avatar/avatar.d.ts +1 -1
  68. package/types/components/avatar-group/avatar-group.d.ts +1 -1
  69. package/types/components/badge/badge.d.ts +1 -1
  70. package/types/components/breadcrumbs/breadcrumbs-context.d.ts +1 -1
  71. package/types/components/breadcrumbs/breadcrumbs-item.d.ts +1 -1
  72. package/types/components/breadcrumbs/breadcrumbs.d.ts +1 -1
  73. package/types/components/button/button.d.ts +1 -1
  74. package/types/components/button/icon-button.d.ts +2 -2
  75. package/types/components/button-group/button-group.d.ts +1 -1
  76. package/types/components/caption/caption.d.ts +1 -1
  77. package/types/components/caption/icons.d.ts +1 -1
  78. package/types/components/checkbox/checkbox.d.ts +1 -1
  79. package/types/components/color-picker/color-picker-button.d.ts +1 -1
  80. package/types/components/color-picker/color-picker.d.ts +1 -1
  81. package/types/components/date-picker/calendar-day.d.ts +1 -1
  82. package/types/components/date-picker/calendar-grid-head.d.ts +1 -1
  83. package/types/components/date-picker/calendar-grid.d.ts +1 -1
  84. package/types/components/date-picker/calendar.d.ts +3 -3
  85. package/types/components/date-picker/date-picker.d.ts +3 -3
  86. package/types/components/date-picker/date-range-picker.d.ts +4 -4
  87. package/types/components/date-picker/date-range.d.ts +1 -1
  88. package/types/components/date-picker/icons.d.ts +1 -1
  89. package/types/components/date-picker-popover/date-picker-popover.d.ts +3 -3
  90. package/types/components/date-range-picker-popover/date-range-picker-popover-footer.d.ts +1 -1
  91. package/types/components/date-range-picker-popover/date-range-picker-popover-presets.d.ts +1 -1
  92. package/types/components/date-range-picker-popover/date-range-picker-popover.d.ts +4 -4
  93. package/types/components/date-range-picker-popover/types.d.ts +1 -1
  94. package/types/components/dialog/dialog-body.d.ts +1 -1
  95. package/types/components/dialog/dialog-context.d.ts +1 -1
  96. package/types/components/dialog/dialog-footer.d.ts +1 -1
  97. package/types/components/dialog/dialog-header.d.ts +1 -1
  98. package/types/components/dialog/dialog.d.ts +1 -1
  99. package/types/components/dialog/x-mark-icon.d.ts +1 -1
  100. package/types/components/empty-state/empty-state.d.ts +1 -1
  101. package/types/components/filter-buttons/filter-button.d.ts +1 -1
  102. package/types/components/filter-buttons/filter-buttons.d.ts +1 -1
  103. package/types/components/filtered-search/filter-item.d.ts +10 -0
  104. package/types/components/filtered-search/filter-operator-select.d.ts +10 -0
  105. package/types/components/filtered-search/filter-token.d.ts +9 -0
  106. package/types/components/filtered-search/filter-value-list.d.ts +8 -0
  107. package/types/components/filtered-search/filtered-search.d.ts +15 -0
  108. package/types/components/filtered-search/icons.d.ts +5 -0
  109. package/types/components/filtered-search/index.d.ts +4 -0
  110. package/types/components/filtered-search/model/abstract-filter.d.ts +6 -0
  111. package/types/components/filtered-search/model/string-filter.d.ts +47 -0
  112. package/types/components/filtered-search/model/string-set-filter.d.ts +41 -0
  113. package/types/components/filtered-search/model/validation-result.d.ts +6 -0
  114. package/types/components/filtered-search/string-filter-input.d.ts +9 -0
  115. package/types/components/filtered-search/string-filter-item.d.ts +13 -0
  116. package/types/components/filtered-search/string-set-filter-item.d.ts +15 -0
  117. package/types/components/filtered-search/types.d.ts +4 -0
  118. package/types/components/filtered-search/use-combobox-ids.d.ts +5 -0
  119. package/types/components/filtered-search/use-translations.d.ts +13 -0
  120. package/types/components/form-field/form-field.d.ts +1 -1
  121. package/types/components/index.d.ts +2 -0
  122. package/types/components/label/label.d.ts +1 -1
  123. package/types/components/menu/menu-item.d.ts +1 -1
  124. package/types/components/menu/menu-separator.d.ts +1 -1
  125. package/types/components/menu/menu.d.ts +3 -3
  126. package/types/components/nav-list/nav-list-item.d.ts +1 -1
  127. package/types/components/nav-list/nav-list-title.d.ts +1 -1
  128. package/types/components/nav-list/nav-list.d.ts +1 -1
  129. package/types/components/password-input/icons.d.ts +1 -1
  130. package/types/components/password-input/password-input.d.ts +1 -1
  131. package/types/components/popover/popover.d.ts +3 -1
  132. package/types/components/portal/portal-context.d.ts +1 -1
  133. package/types/components/portal/portal.d.ts +1 -1
  134. package/types/components/positioner/calc-position.d.ts +1 -1
  135. package/types/components/positioner/positioner.d.ts +2 -2
  136. package/types/components/radio/radio.d.ts +1 -1
  137. package/types/components/segmented-control/segmented-control-button.d.ts +1 -1
  138. package/types/components/segmented-control/segmented-control.d.ts +1 -1
  139. package/types/components/select/select.d.ts +1 -1
  140. package/types/components/selection-control/selection-control.d.ts +1 -1
  141. package/types/components/slide-over/index.d.ts +4 -0
  142. package/types/components/slide-over/slide-over-body.d.ts +3 -0
  143. package/types/components/slide-over/slide-over-context.d.ts +14 -0
  144. package/types/components/slide-over/slide-over-header.d.ts +11 -0
  145. package/types/components/slide-over/slide-over.d.ts +15 -0
  146. package/types/components/slide-over/types.d.ts +1 -0
  147. package/types/components/slider/slider-tick-marks.d.ts +1 -1
  148. package/types/components/slider/slider.d.ts +2 -2
  149. package/types/components/spinner/spinner.d.ts +1 -1
  150. package/types/components/switch/switch.d.ts +1 -1
  151. package/types/components/table/table-body.d.ts +1 -1
  152. package/types/components/table/table-cell.d.ts +1 -1
  153. package/types/components/table/table-container.d.ts +1 -1
  154. package/types/components/table/table-head-cell.d.ts +1 -1
  155. package/types/components/table/table-head.d.ts +1 -1
  156. package/types/components/table/table-row.d.ts +1 -1
  157. package/types/components/table/table.d.ts +1 -1
  158. package/types/components/tabs/tab-list.d.ts +1 -1
  159. package/types/components/tabs/tab-panel.d.ts +2 -2
  160. package/types/components/tabs/tab.d.ts +1 -1
  161. package/types/components/tabs/tabs-context.d.ts +2 -2
  162. package/types/components/tabs/tabs.d.ts +2 -2
  163. package/types/components/tag/tag.d.ts +1 -1
  164. package/types/components/text-input/text-input.d.ts +1 -1
  165. package/types/components/textarea/textarea.d.ts +1 -1
  166. package/types/components/toast/toast-button.d.ts +1 -1
  167. package/types/components/toast/toast.d.ts +1 -1
  168. package/types/components/toaster/toaster.d.ts +1 -1
  169. package/types/components/tooltip/tooltip.d.ts +5 -4
  170. package/types/hooks/index.d.ts +1 -1
  171. package/types/hooks/use-disable-body-scroll.d.ts +1 -1
  172. package/types/hooks/use-esc-key-down.d.ts +1 -1
  173. package/types/hooks/use-focus-trap.d.ts +2 -2
  174. package/types/lib/helpers.d.ts +1 -0
  175. package/types/lib/keyboard-keys.d.ts +1 -0
  176. package/types/lib/react-helpers.d.ts +2 -1
@@ -1020,8 +1020,8 @@
1020
1020
  --dc-popover-transition-duration: 100ms;
1021
1021
  --dc-popover-bg: white;
1022
1022
  --dc-popover-shadow:
1023
- 0 2px 0 -1px rgb(var(--dc-black-rgb) / 0.075),
1024
- 0 0 0 1px var(--dc-gray-200),
1023
+ 0 0 0 1px rgb(var(--dc-black-rgb) / 0.075),
1024
+ 0 -1px 0 0 rgb(var(--dc-black-rgb) / 0.05),
1025
1025
  var(--dc-shadow-lg);
1026
1026
 
1027
1027
  color-scheme: light;
@@ -1251,6 +1251,75 @@
1251
1251
  border-bottom-left-radius: inherit;
1252
1252
  }
1253
1253
 
1254
+ .dc-slide-over-header {
1255
+ color: var(--dc-slide-over-text-color);
1256
+ box-sizing: border-box;
1257
+ padding: 16px;
1258
+ }
1259
+
1260
+ .dc-slide-over-header__title {
1261
+ display: flex;
1262
+ align-items: center;
1263
+ }
1264
+
1265
+ .dc-slide-over-header__title > h2 {
1266
+ font: 700 var(--dc-text-md);
1267
+ color: inherit;
1268
+ flex-grow: 1;
1269
+ margin: 0;
1270
+ }
1271
+
1272
+ .dc-slide-over-header__description {
1273
+ font: var(--dc-text-sm);
1274
+ color: var(--dc-slide-over-secondary-text-color);
1275
+ margin-top: 4px;
1276
+ }
1277
+
1278
+ .dc-slide-over-body {
1279
+ color: var(--dc-slide-over-text-color);
1280
+ overflow: auto;
1281
+ flex-grow: 1;
1282
+ box-sizing: border-box;
1283
+ padding: 0 16px;
1284
+ }
1285
+
1286
+ .dc-slide-over {
1287
+ --dc-slide-over-text-color: var(--dc-primary-text-color);
1288
+ --dc-slide-over-secondary-text-color: var(--dc-secondary-text-color);
1289
+ --dc-slide-over-panel-max-width: 512px;
1290
+ --dc-slide-over-panel-bg: var(--dc-primary-bg);
1291
+ --dc-slide-over-backdrop-color: rgb(var(--dc-gray-900-rgb) / 0.4);
1292
+
1293
+ color-scheme: light;
1294
+ position: relative;
1295
+ z-index: var(--dc-overlay-z-index);
1296
+ }
1297
+
1298
+ .dc-slide-over__backdrop,
1299
+ .dc-slide-over__panel {
1300
+ position: fixed;
1301
+ top: 0;
1302
+ height: 100%;
1303
+ }
1304
+
1305
+ .dc-slide-over__backdrop {
1306
+ left: 0;
1307
+ width: 100%;
1308
+ background: var(--dc-slide-over-backdrop-color);
1309
+ }
1310
+
1311
+ .dc-slide-over__panel {
1312
+ color: var(--dc-primary-text-color);
1313
+ right: 0;
1314
+ display: flex;
1315
+ flex-direction: column;
1316
+ box-sizing: border-box;
1317
+ width: 100%;
1318
+ max-width: var(--dc-slide-over-panel-max-width);
1319
+ background: var(--dc-slide-over-panel-bg);
1320
+ box-shadow: var(--dc-shadow-md);
1321
+ }
1322
+
1254
1323
  /* Forms */
1255
1324
 
1256
1325
  .dc-text-input__container {
@@ -3664,3 +3733,272 @@
3664
3733
  .dc-filter-button[aria-pressed="true"]:hover {
3665
3734
  background: var(--dc-filter-button-bg-active-hover);
3666
3735
  }
3736
+
3737
+ /* Other */
3738
+
3739
+ .dc-filter-token {
3740
+ color: var(--dc-filtered-search-token-color);
3741
+ display: inline-flex;
3742
+ align-items: center;
3743
+ min-width: 0;
3744
+ border-radius: 6px;
3745
+ background: var(--dc-filtered-search-token-bg);
3746
+ }
3747
+
3748
+ .dc-filter-token_highlighted {
3749
+ color: var(--dc-filtered-search-token-color-selected);
3750
+ background: var(--dc-filtered-search-token-bg-selected);
3751
+ }
3752
+
3753
+ .dc-filter-token__label,
3754
+ .dc-filter-token__button {
3755
+ font-size: 14px;
3756
+ color: inherit;
3757
+ cursor: pointer;
3758
+ box-sizing: border-box;
3759
+ height: 28px;
3760
+ padding: 0;
3761
+ border: none;
3762
+ background: none;
3763
+ }
3764
+
3765
+ .dc-filter-token__label {
3766
+ line-height: 28px;
3767
+ overflow: hidden;
3768
+ min-width: 0;
3769
+ max-width: 100%;
3770
+ padding: 0 4px 0 8px;
3771
+ white-space: nowrap;
3772
+ text-overflow: ellipsis;
3773
+ border-top-left-radius: inherit;
3774
+ border-bottom-left-radius: inherit;
3775
+ }
3776
+
3777
+ .dc-filter-token__button {
3778
+ display: inline-flex;
3779
+ align-items: center;
3780
+ justify-content: center;
3781
+ width: 28px;
3782
+ border-top-right-radius: inherit;
3783
+ border-bottom-right-radius: inherit;
3784
+
3785
+ }
3786
+
3787
+ .dc-filter-token__label:focus,
3788
+ .dc-filter-token__button:focus {
3789
+ outline: none;
3790
+ background: var(--dc-filtered-search-token-bg-hover);
3791
+ }
3792
+
3793
+ .dc-filter-token__label:hover,
3794
+ .dc-filter-token__button:hover {
3795
+ background: var(--dc-filtered-search-token-bg-hover) !important;
3796
+ }
3797
+
3798
+ .dc-filter-token__label:focus:not(:focus-visible),
3799
+ .dc-filter-token__button:focus:not(:focus-visible) {
3800
+ background: none;
3801
+ }
3802
+
3803
+ .dc-filter-operator-select {
3804
+ display: grid;
3805
+ grid-template-columns: auto 1fr;
3806
+ grid-column-gap: 8px;
3807
+ align-items: center;
3808
+ }
3809
+
3810
+ .dc-string-filter-input {
3811
+ display: grid;
3812
+ grid-template-columns: auto 1fr;
3813
+ grid-gap: 4px 8px;
3814
+ align-items: center;
3815
+ box-sizing: border-box;
3816
+ padding-left: 4px;
3817
+ }
3818
+
3819
+ .dc-string-filter-input__error {
3820
+ grid-column: 1/3;
3821
+ }
3822
+
3823
+ .dc-filter-value-list {
3824
+ overflow-y: auto;
3825
+ scroll-behavior: smooth;
3826
+ scroll-snap-type: y mandatory;
3827
+ box-sizing: border-box;
3828
+ max-height: 192px;
3829
+ margin: 0;
3830
+ padding: 0;
3831
+ list-style: none;
3832
+ }
3833
+
3834
+ .dc-filter-value-list > li {
3835
+ display: flex;
3836
+ scroll-snap-align: start;
3837
+ align-items: center;
3838
+ min-height: 32px;
3839
+ }
3840
+
3841
+ .dc-filter-popover {
3842
+ font: var(--dc-text-sm);
3843
+ width: 320px;
3844
+ max-width: 100%;
3845
+ padding: 16px;
3846
+ }
3847
+
3848
+ .dc-filter-form {
3849
+ display: block;
3850
+ width: 100%;
3851
+ }
3852
+
3853
+ .dc-filter-form__operator {
3854
+ margin-bottom: 8px;
3855
+ }
3856
+
3857
+ .dc-filter-form__value-list {
3858
+ margin-right: -16px;
3859
+ margin-left: -16px;
3860
+ padding-right: 16px;
3861
+ padding-left: 16px;
3862
+ }
3863
+
3864
+ .dc-filter-form__buttons {
3865
+ display: flex;
3866
+ gap: 4px;
3867
+ align-items: center;
3868
+ justify-content: flex-end;
3869
+ margin-top: 16px;
3870
+ }
3871
+
3872
+ .dc-filtered-search {
3873
+ --dc-filtered-search-font-size: 14px;
3874
+ --dc-filtered-search-height: 36px;
3875
+ --dc-filtered-search-padding-x: 12px;
3876
+ --dc-filtered-search-border-radius: 7px;
3877
+ --dc-filtered-search-text-color: var(--dc-control-primary-text-color);
3878
+ --dc-filtered-search-border-color: var(--dc-control-border-color);
3879
+ --dc-filtered-search-bg: var(--dc-control-bg);
3880
+ --dc-filtered-search-icon-color: var(--dc-control-secondary-text-color);
3881
+ --dc-filtered-search-focus-ring-color: var(--dc-control-primary-color);
3882
+ --dc-filtered-search-option-color: var(--dc-control-primary-text-color);
3883
+ --dc-filtered-search-option-bg: none;
3884
+ --dc-filtered-search-selected-option-color: var(--dc-on-primary-color);
3885
+ --dc-filtered-search-selected-option-bg: var(--dc-primary-color);
3886
+ --dc-filtered-search-listbox-bg: var(--dc-white);
3887
+ --dc-filtered-search-listbox-shadow:
3888
+ 0 0 0 1px rgb(var(--dc-black-rgb) / 0.075),
3889
+ 0 -1px 0 0 rgb(var(--dc-black-rgb) / 0.05),
3890
+ var(--dc-shadow-lg);
3891
+ --dc-filtered-search-token-color: var(--dc-primary-text-color);
3892
+ --dc-filtered-search-token-color-selected: var(--dc-on-primary-color);
3893
+ --dc-filtered-search-token-bg: var(--dc-gray-200);
3894
+ --dc-filtered-search-token-bg-hover: rgb(var(--dc-black-rgb) / 0.1);
3895
+ --dc-filtered-search-token-bg-selected: var(--dc-primary-color);
3896
+
3897
+ color-scheme: light;
3898
+ font-family: var(--dc-primary-font);
3899
+ font-size: var(--dc-filtered-search-font-size);
3900
+ font-weight: 400;
3901
+ line-height: 1;
3902
+ color: var(--dc-filtered-search-text-color);
3903
+ position: relative;
3904
+ display: flex;
3905
+ cursor: text;
3906
+ box-sizing: border-box;
3907
+ width: 100%;
3908
+ border: 1px solid var(--dc-filtered-search-border-color);
3909
+ border-radius: var(--dc-filtered-search-border-radius);
3910
+ background: var(--dc-filtered-search-bg);
3911
+ }
3912
+
3913
+ .dc-filtered-search_has_focus {
3914
+ border-color: var(--dc-filtered-search-focus-ring-color);
3915
+ box-shadow: 0 0 0 1px var(--dc-filtered-search-focus-ring-color);
3916
+ }
3917
+
3918
+ .dc-filtered-search__icon {
3919
+ flex-shrink: 0;
3920
+ width: 18px;
3921
+ height: 18px;
3922
+ margin-top: 8px;
3923
+ margin-left: 8px;
3924
+ pointer-events: none;
3925
+ }
3926
+
3927
+ .dc-filtered-search__clear-button {
3928
+ margin-top: 1px;
3929
+ margin-right: 1px;
3930
+ white-space: nowrap;
3931
+ border-radius: calc(var(--dc-filtered-search-border-radius) - 1px);
3932
+ }
3933
+
3934
+ .dc-filtered-search__filters {
3935
+ display: flex;
3936
+ flex-grow: 1;
3937
+ flex-wrap: wrap;
3938
+ align-items: center;
3939
+ min-width: 0;
3940
+ padding: 0 4px;
3941
+ pointer-events: none;
3942
+ }
3943
+
3944
+ .dc-filtered-search__filters > * {
3945
+ margin: 3px 2px;
3946
+ pointer-events: all;
3947
+ }
3948
+
3949
+ .dc-filtered-search__input {
3950
+ -webkit-appearance: none;
3951
+ -moz-appearance: none;
3952
+ appearance: none;
3953
+ font: inherit;
3954
+ color: inherit;
3955
+ flex-grow: 1;
3956
+ height: 28px;
3957
+ min-width: 0;
3958
+ padding: 0 8px;
3959
+ border: none;
3960
+ border-radius: inherit;
3961
+ background: none;
3962
+ }
3963
+
3964
+ .dc-filtered-search__input::-moz-placeholder {
3965
+ color: inherit;
3966
+ opacity: 0.4;
3967
+ }
3968
+
3969
+ .dc-filtered-search__input::placeholder {
3970
+ color: inherit;
3971
+ opacity: 0.4;
3972
+ }
3973
+
3974
+ .dc-filtered-search__input:focus {
3975
+ outline: none;
3976
+ }
3977
+
3978
+ .dc-filtered-search__list-box {
3979
+ font-size: var(--dc-filtered-search-font-size);
3980
+ position: absolute;
3981
+ top: calc(100% + 8px);
3982
+ left: 0;
3983
+ box-sizing: border-box;
3984
+ width: 100%;
3985
+ margin: 0;
3986
+ padding: 4px;
3987
+ list-style: none;
3988
+ border-radius: var(--dc-filtered-search-border-radius);
3989
+ background: var(--dc-filtered-search-listbox-bg);
3990
+ box-shadow: var(--dc-filtered-search-listbox-shadow);
3991
+ }
3992
+
3993
+ .dc-filtered-search__list-box > [role="option"] {
3994
+ color: var(--dc-filtered-search-option-color);
3995
+ cursor: pointer;
3996
+ box-sizing: border-box;
3997
+ padding: 6px 8px;
3998
+ border-radius: 5px;
3999
+ }
4000
+
4001
+ .dc-filtered-search__list-box > [role="option"][aria-selected="true"] {
4002
+ color: var(--dc-filtered-search-selected-option-color);
4003
+ background: var(--dc-filtered-search-selected-option-bg);
4004
+ }
@@ -242,6 +242,54 @@
242
242
  color-scheme: dark;
243
243
  }
244
244
 
245
+ /* Overlays */
246
+
247
+ .dark .dc-tooltip,
248
+ .dark.dc-tooltip {
249
+ --dc-tooltip-text-color: var(--dc-gray-800);
250
+ --dc-tooltip-bg: var(--dc-gray-100);
251
+
252
+ color-scheme: dark;
253
+ }
254
+
255
+ .dark .dc-popover,
256
+ .dark.dc-popover {
257
+ --dc-popover-border-color: var(--dc-gray-700);
258
+ --dc-popover-bg: var(--dc-gray-800);
259
+ --dc-popover-shadow:
260
+ 0 0 0 1px var(--dc-gray-700),
261
+ var(--dc-shadow-lg);
262
+
263
+ color-scheme: dark;
264
+ }
265
+
266
+ .dark .dc-dialog,
267
+ .dark.dc-dialog {
268
+ --dc-dialog-border-color: var(--dc-gray-700);
269
+ --dc-dialog-bg: var(--dc-gray-800);
270
+ --dc-dialog-inset-shadow-color: var(--dc-border-color-transparent-1);
271
+
272
+ color-scheme: dark;
273
+ }
274
+
275
+ .dark .dc-dialog .dc-dialog-modal,
276
+ .dark.dc-dialog .dc-dialog-modal {
277
+ box-shadow:
278
+ 0 0 0 1px var(--dc-border-color-transparent-2),
279
+ var(--dc-shadow-xl);
280
+ }
281
+
282
+ .dark .dc-slide-over,
283
+ .dark.dc-slide-over {
284
+ --dc-slide-over-panel-bg: var(--dc-gray-800);
285
+
286
+ color-scheme: dark;
287
+ }
288
+
289
+ .dark .dc-slide-over__panel {
290
+ box-shadow: 0 0 0 1px var(--dc-border-color-transparent-1), var(--dc-shadow-md);
291
+ }
292
+
245
293
  /* Forms */
246
294
 
247
295
  .dark .dc-text-input__container,
@@ -332,6 +380,16 @@
332
380
  color-scheme: dark;
333
381
  }
334
382
 
383
+ .dark .dc-date-picker-popover,
384
+ .dark.dc-date-picker-popover {
385
+ color-scheme: dark;
386
+ }
387
+
388
+ .dark .dc-date-range-picker-popover,
389
+ .dark.dc-date-range-picker-popover {
390
+ color-scheme: dark;
391
+ }
392
+
335
393
  /* Data display */
336
394
 
337
395
  .dark .dc-table,
@@ -453,49 +511,16 @@
453
511
  color-scheme: dark;
454
512
  }
455
513
 
456
- /* Overlays */
457
-
458
- .dark .dc-tooltip,
459
- .dark.dc-tooltip {
460
- --dc-tooltip-text-color: var(--dc-gray-800);
461
- --dc-tooltip-bg: var(--dc-gray-100);
514
+ /* Other */
462
515
 
463
- color-scheme: dark;
464
- }
465
-
466
- .dark .dc-popover,
467
- .dark.dc-popover {
468
- --dc-popover-border-color: var(--dc-gray-700);
469
- --dc-popover-bg: var(--dc-gray-800);
470
- --dc-popover-shadow:
516
+ .dark .dc-filtered-search,
517
+ .dark.dc-filtered-search {
518
+ --dc-filtered-search-listbox-bg: var(--dc-gray-800);
519
+ --dc-filtered-search-listbox-shadow:
471
520
  0 0 0 1px var(--dc-gray-700),
472
521
  var(--dc-shadow-lg);
522
+ --dc-filtered-search-token-bg: var(--dc-gray-700);
523
+ --dc-filtered-search-token-bg-hover: rgb(var(--dc-white-rgb) / 0.1);
473
524
 
474
525
  color-scheme: dark;
475
526
  }
476
-
477
- .dark .dc-dialog,
478
- .dark.dc-dialog {
479
- --dc-dialog-border-color: var(--dc-gray-700);
480
- --dc-dialog-bg: var(--dc-gray-800);
481
- --dc-dialog-inset-shadow-color: var(--dc-border-color-transparent-1);
482
-
483
- color-scheme: dark;
484
- }
485
-
486
- .dark .dc-dialog .dc-dialog-modal,
487
- .dark.dc-dialog .dc-dialog-modal {
488
- box-shadow:
489
- 0 0 0 1px var(--dc-border-color-transparent-2),
490
- var(--dc-shadow-xl);
491
- }
492
-
493
- .dark .dc-date-picker-popover,
494
- .dark.dc-date-picker-popover {
495
- color-scheme: dark;
496
- }
497
-
498
- .dark .dc-date-range-picker-popover,
499
- .dark.dc-date-range-picker-popover {
500
- color-scheme: dark;
501
- }
@@ -1,10 +1,10 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { useId, useRef, useEffect } from 'react';
3
3
  import { focusElement, classNames } from '../../lib/react-helpers.js';
4
- import { useMountTransition } from '../../hooks/use-mount-transition.js';
5
4
  import { useDisableBodyScroll } from '../../hooks/use-disable-body-scroll.js';
6
5
  import { useEscKeyDown } from '../../hooks/use-esc-key-down.js';
7
6
  import { useFocusTrap } from '../../hooks/use-focus-trap.js';
7
+ import { useMountTransition } from '../../hooks/use-mount-transition.js';
8
8
  import { Portal } from '../portal/portal.js';
9
9
  import { DialogContextProvider } from './dialog-context.js';
10
10
 
@@ -0,0 +1,21 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { StringFilter } from './model/string-filter.js';
3
+ import { StringSetFilter } from './model/string-set-filter.js';
4
+ import { exhaustiveCheck } from '../../lib/helpers.js';
5
+ import 'react';
6
+ import { StringFilterItem } from './string-filter-item.js';
7
+ import { StringSetFilterItem } from './string-set-filter-item.js';
8
+
9
+ function FilterItem({ filter, isEditing, onEditStart, onEditCancel, onRemove, onChange, }) {
10
+ const filterType = filter.type;
11
+ switch (filterType) {
12
+ case StringFilter.Type:
13
+ return (jsx(StringFilterItem, { filter: filter, isEditing: isEditing, onEditStart: onEditStart, onEditCancel: onEditCancel, onRemove: onRemove, onChange: onChange }));
14
+ case StringSetFilter.Type:
15
+ return (jsx(StringSetFilterItem, { filter: filter, isEditing: isEditing, onEditStart: onEditStart, onEditCancel: onEditCancel, onRemove: onRemove, onChange: onChange }));
16
+ default:
17
+ exhaustiveCheck(filterType, `Unable to render filter type ${filterType}.`);
18
+ }
19
+ }
20
+
21
+ export { FilterItem };
@@ -0,0 +1,15 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { classNames } from '../../lib/react-helpers.js';
3
+ import { Select } from '../select/select.js';
4
+
5
+ function FilterOperatorSelect({ accessibleName, className, label, values, value, onChange, formatValue, }) {
6
+ const shouldRenderSelect = values.length > 1;
7
+ const onValueChanged = (newValue) => {
8
+ onChange(newValue);
9
+ };
10
+ return (jsxs("div", { className: classNames('dc-filter-operator-select', className), children: [jsx("span", { children: shouldRenderSelect
11
+ ? label
12
+ : `${label} ${formatValue(value)}` }), shouldRenderSelect && (jsx(Select, { size: "sm", "data-testid": "filter-operator-select", "aria-label": accessibleName, value: value, onChangeValue: onValueChanged, children: values.map((value) => (jsx("option", { value: value, children: formatValue(value) }, value))) }))] }));
13
+ }
14
+
15
+ export { FilterOperatorSelect };
@@ -0,0 +1,15 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { forwardRef } from 'react';
3
+ import { classNames } from '../../lib/react-helpers.js';
4
+ import { XMarkIcon } from './icons.js';
5
+ import { useTranslations } from './use-translations.js';
6
+
7
+ const FilterToken = forwardRef(function FilterToken({ className, isHighlighted, children, onClickLabel, onClickCloseButton, }, ref) {
8
+ const { removeFilterButton } = useTranslations();
9
+ return (jsxs("div", { ref: ref, "data-testid": "filter-token", className: classNames(className, {
10
+ 'dc-filter-token': true,
11
+ 'dc-filter-token_highlighted': isHighlighted,
12
+ }), children: [jsx("button", { className: "dc-filter-token__label", onClick: onClickLabel, children: children }), jsx("button", { className: "dc-filter-token__button", type: "button", "aria-label": removeFilterButton, onClick: onClickCloseButton, children: jsx(XMarkIcon, {}) })] }));
13
+ });
14
+
15
+ export { FilterToken };
@@ -0,0 +1,18 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { classNames } from '../../lib/react-helpers.js';
3
+ import { SelectionControl } from '../selection-control/selection-control.js';
4
+ import { Checkbox } from '../checkbox/checkbox.js';
5
+
6
+ function FilterValueList({ className, values, checkedValues, onChangeCheckedValues, formatValue, }) {
7
+ const onChange = (event) => {
8
+ const checkboxElement = event.currentTarget;
9
+ const value = checkboxElement.value;
10
+ const checked = checkboxElement.checked;
11
+ onChangeCheckedValues(checked
12
+ ? [...checkedValues, value]
13
+ : checkedValues.filter((prevValue) => prevValue !== value));
14
+ };
15
+ return (jsx("ul", { className: classNames('dc-filter-value-list', className), children: values.map((value, index) => (jsx("li", { children: jsx(SelectionControl, { label: formatValue(value), children: jsx(Checkbox, { autoFocus: index === 0, value: value, checked: checkedValues.includes(value), onChange: onChange }) }) }, value))) }));
16
+ }
17
+
18
+ export { FilterValueList };