@dataloop-ai/components 0.16.62 → 0.17.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 (42) hide show
  1. package/package.json +1 -1
  2. package/src/components/basic/DlAlert/DlAlert.vue +7 -8
  3. package/src/components/basic/DlButton/DlButton.vue +33 -11
  4. package/src/components/basic/DlButton/utils.ts +12 -2
  5. package/src/components/basic/DlChip/DlChip.vue +1 -8
  6. package/src/components/basic/DlPanelContainer/DlPanelContainer.vue +5 -5
  7. package/src/components/compound/DlCharts/charts/DlConfusionMatrix/utils.ts +6 -2
  8. package/src/components/compound/DlDialogBox/DlDialogBox.vue +3 -3
  9. package/src/components/compound/DlDropdownButton/DlDropdownButton.vue +21 -15
  10. package/src/components/compound/DlDropdownButton/components/ButtonGroup.vue +11 -9
  11. package/src/components/compound/DlInput/DlInput.vue +7 -7
  12. package/src/components/compound/DlJsonEditor/DlJsonEditor.vue +14 -14
  13. package/src/components/compound/DlPagination/components/PageNavigation.vue +21 -21
  14. package/src/components/compound/DlRange/DlRange.vue +1 -1
  15. package/src/components/compound/DlSearches/DlSearch/DlSearch.vue +3 -3
  16. package/src/components/compound/DlSearches/DlSmartSearch/DlSmartSearch.vue +132 -42
  17. package/src/components/compound/DlSearches/DlSmartSearch/components/DlSmartSearchFilters.vue +75 -0
  18. package/src/components/compound/DlSearches/DlSmartSearch/components/DlSmartSearchInput.vue +183 -173
  19. package/src/components/compound/DlSearches/DlSmartSearch/components/FiltersQuery.vue +101 -0
  20. package/src/components/compound/DlSearches/DlSmartSearch/types.ts +4 -4
  21. package/src/components/compound/DlSearches/DlSmartSearch/utils/highlightSyntax.ts +9 -4
  22. package/src/components/compound/DlSearches/DlSmartSearch/utils/utils.ts +18 -1
  23. package/src/components/compound/DlSelect/DlSelect.vue +3 -4
  24. package/src/components/compound/DlSlider/DlSlider.vue +1 -1
  25. package/src/components/compound/DlStepper/DlStepper.vue +2 -2
  26. package/src/components/compound/DlStepper/components/DlStepperFooter.vue +3 -3
  27. package/src/components/compound/DlStepper/components/DlStepperHeader.vue +2 -2
  28. package/src/components/compound/DlTabs/components/TabsWrapper.vue +1 -1
  29. package/src/components/compound/DlToggleButton/DlToggleButton.vue +14 -11
  30. package/src/components/essential/DlIcon/DlIcon.vue +1 -1
  31. package/src/components/essential/DlSpinner/styles/spinnerStyles.scss +1 -1
  32. package/src/components/essential/DlTypography/DlTypography.vue +18 -2
  33. package/src/components/shared/types.ts +7 -1
  34. package/src/demos/DlAlertDemo.vue +17 -3
  35. package/src/demos/DlDialogBoxDemo.vue +15 -1
  36. package/src/demos/DlDropdownButtonDemo.vue +4 -4
  37. package/src/demos/DlSearchDemo.vue +1 -1
  38. package/src/demos/DlStepperDemo/SimpleStepper.vue +1 -1
  39. package/src/demos/DlStepperDemo/steps/DataStep.vue +1 -1
  40. package/src/demos/SmartSearchDemo/DlSmartSearchDemo.vue +40 -75
  41. package/src/hooks/use-suggestions.ts +8 -3
  42. package/src/utils/parse-smart-query.ts +109 -1
@@ -4,13 +4,16 @@
4
4
  :style="cssVars"
5
5
  >
6
6
  <div class="dl-smart-search-input__search-bar-wrapper">
7
- <div :class="searchBarClasses">
7
+ <div
8
+ ref="searchBar"
9
+ :class="searchBarClasses"
10
+ >
8
11
  <div class="dl-smart-search-input__status-icon-wrapper">
9
12
  <dl-icon
10
- v-if="withSearchIcon || (!focused && status)"
13
+ v-if="!focused && (withSearchIcon || status)"
11
14
  :icon="statusIcon"
12
15
  :color="statusIconColor"
13
- size="18px"
16
+ size="16px"
14
17
  :inline="false"
15
18
  />
16
19
  </div>
@@ -18,8 +21,8 @@
18
21
  <div
19
22
  id="editor"
20
23
  ref="input"
21
- class="dl-smart-search-input__textarea"
22
- style="-webkit-appearance: textfield"
24
+ :class="inputClass"
25
+ :style="textareaStyles"
23
26
  :placeholder="placeholder"
24
27
  :contenteditable="!disabled"
25
28
  @keypress="keyPress"
@@ -35,63 +38,65 @@
35
38
  >
36
39
  <dl-button
37
40
  icon="icon-dl-close"
38
- size="10px"
41
+ size="12px"
39
42
  flat
40
43
  :disabled="disabled"
41
44
  @mousedown="clearValue"
42
45
  />
43
46
  <dl-tooltip> Clear Query </dl-tooltip>
44
47
  </div>
45
- <div
46
- v-if="withScreenButton"
47
- class="dl-smart-search-input__screen-btn-wrapper"
48
- >
49
- <dl-button
50
- :icon="screenIcon"
51
- size="16px"
52
- flat
53
- :disabled="disabled"
54
- @mousedown="handleScreenBtnClick"
55
- />
56
- <dl-tooltip>
57
- {{ expanded ? 'Collapse' : 'Expand' }} Smart Search
58
- </dl-tooltip>
59
- </div>
60
- <div
61
- v-if="withSaveButton"
62
- class="dl-smart-search-input__save-btn-wrapper"
63
- >
64
- <dl-button
65
- icon="icon-dl-save"
66
- size="16px"
67
- flat
68
- :disabled="saveStatus"
69
- @click="save"
48
+ <div class="dl-smart-search-input__toolbar--right">
49
+ <div
50
+ v-if="withScreenButton"
51
+ class="dl-smart-search-input__screen-btn-wrapper"
70
52
  >
71
- <dl-tooltip> Save Query </dl-tooltip>
72
- </dl-button>
73
- <dl-button
74
- icon="icon-dl-loop"
75
- size="16px"
76
- flat
77
- transform="none"
78
- text-color="dl-color-darker"
79
- :disabled="saveStatus"
80
- label="switch to DQL"
81
- @click="edit"
53
+ <dl-button
54
+ :icon="screenIcon"
55
+ size="16px"
56
+ flat
57
+ :disabled="disabled"
58
+ @mousedown="handleScreenButtonClick"
59
+ />
60
+ <dl-tooltip>
61
+ {{ expanded ? 'Collapse' : 'Expand' }} Smart
62
+ Search
63
+ </dl-tooltip>
64
+ </div>
65
+ <div
66
+ v-if="withSaveButton"
67
+ class="dl-smart-search-input__save-btn-wrapper"
82
68
  >
83
- <dl-tooltip> Switch to DQL </dl-tooltip>
84
- </dl-button>
69
+ <dl-button
70
+ icon="icon-dl-save"
71
+ size="16px"
72
+ flat
73
+ :disabled="saveStatus"
74
+ @click="save"
75
+ >
76
+ <dl-tooltip> Save Query </dl-tooltip>
77
+ </dl-button>
78
+ <dl-button
79
+ icon="icon-dl-edit"
80
+ size="16px"
81
+ flat
82
+ transform="none"
83
+ text-color="dl-color-darker"
84
+ uppercase
85
+ label="DQL"
86
+ @click="edit"
87
+ >
88
+ <dl-tooltip> Switch to DQL </dl-tooltip>
89
+ </dl-button>
90
+ </div>
85
91
  </div>
86
92
  </div>
87
93
  </div>
88
94
  <label
89
- v-if="status.message !== 'info'"
95
+ v-if="!focused"
90
96
  ref="label"
91
97
  class="dl-smart-search-input__search-label"
92
- for="search-input"
93
98
  :style="labelStyles"
94
- >{{ status.message }}</label>
99
+ >{{ status ? status.message : null }}</label>
95
100
  </div>
96
101
  <div :class="messageClasses">
97
102
  {{ message }}
@@ -117,7 +122,7 @@
117
122
  </div>
118
123
  </template>
119
124
  <script lang="ts">
120
- import { defineComponent, ref, PropType, computed } from 'vue-demi'
125
+ import { defineComponent, ref, PropType } from 'vue-demi'
121
126
  import { DlButton } from '../../../../basic'
122
127
  import { DlDatePicker } from '../../../DlDateTime'
123
128
  import { DlMenu, DlIcon } from '../../../../essential'
@@ -201,6 +206,14 @@ export default defineComponent({
201
206
  disabled: {
202
207
  type: Boolean,
203
208
  default: false
209
+ },
210
+ searchBarWidth: {
211
+ type: String,
212
+ default: 'auto'
213
+ },
214
+ defaultWidth: {
215
+ type: String,
216
+ default: '450px'
204
217
  }
205
218
  },
206
219
  emits: [
@@ -221,6 +234,7 @@ export default defineComponent({
221
234
  const focused = ref(false)
222
235
  const isOverflow = ref(false)
223
236
  const isTyping = ref(false)
237
+ const scroll = ref(false)
224
238
 
225
239
  const { hasEllipsis } = useSizeObserver(input)
226
240
 
@@ -257,16 +271,28 @@ export default defineComponent({
257
271
  emit('update:modelValue', stringValue)
258
272
  }
259
273
 
260
- const saveStatus = computed(() => {
261
- return (
262
- props.disabled ||
263
- !props.modelValue ||
264
- props.status?.type === 'error'
265
- )
266
- })
267
-
268
- const statusIcon = computed(() => {
269
- switch (props.status?.type) {
274
+ return {
275
+ input,
276
+ label,
277
+ hasEllipsis,
278
+ suggestionModal,
279
+ setInputValue,
280
+ menuOffset,
281
+ cancelBlur,
282
+ expanded,
283
+ styledTexarea,
284
+ styledInput,
285
+ datePickerSelection,
286
+ isDatePickerVisible,
287
+ focused,
288
+ isOverflow,
289
+ isTyping,
290
+ scroll
291
+ }
292
+ },
293
+ computed: {
294
+ statusIcon(): string {
295
+ switch (this.status.type) {
270
296
  case 'success':
271
297
  return 'icon-dl-approve-filled'
272
298
  case 'error':
@@ -276,10 +302,9 @@ export default defineComponent({
276
302
  default:
277
303
  return ''
278
304
  }
279
- })
280
-
281
- const statusIconColor = computed(() => {
282
- switch (props.status?.type) {
305
+ },
306
+ statusIconColor(): string {
307
+ switch (this.status.type) {
283
308
  case 'success':
284
309
  return 'dl-color-positive'
285
310
  case 'error':
@@ -289,89 +314,79 @@ export default defineComponent({
289
314
  default:
290
315
  return ''
291
316
  }
292
- })
293
-
294
- const screenIcon = computed(() => {
295
- return expanded ? 'icon-dl-fit-to-screen' : 'icon-dl-full-screen'
296
- })
297
-
298
- const searchBarClasses = computed(() => {
317
+ },
318
+ screenIcon(): string {
319
+ return this.expanded
320
+ ? 'icon-dl-fit-to-screen'
321
+ : 'icon-dl-full-screen'
322
+ },
323
+ textareaStyles(): Record<string, any> {
324
+ const overflow: string =
325
+ this.scroll && this.focused ? 'scroll' : 'hidden'
326
+ return {
327
+ overflow,
328
+ '-webkit-appearance': 'textfield'
329
+ }
330
+ },
331
+ searchBarClasses(): string {
299
332
  let classes = 'dl-smart-search-input__search-bar'
300
333
 
301
- if (focused && props.status?.type === 'info') {
334
+ if (this.focused) {
302
335
  classes += ' dl-smart-search-input__search-bar--focused'
303
- } else {
304
- if (props.status?.type === 'error') {
336
+ } else if (!this.focused) {
337
+ if (this.status.type === 'error') {
305
338
  classes += ' dl-smart-search-input__search-bar--error'
306
- } else if (props.status?.type === 'warning') {
339
+ } else if (this.status.type === 'warning') {
307
340
  classes += ' dl-smart-search-input__search-bar--warning'
308
341
  }
309
342
  }
310
343
 
311
- if (expanded) {
344
+ if (this.expanded) {
312
345
  classes += ' dl-smart-search-input__search-bar--expanded'
313
346
  }
314
347
 
315
- if (props.disabled) {
348
+ if (this.disabled) {
316
349
  classes += ' dl-smart-search-input__search-bar--disabled'
317
350
  }
318
351
 
319
352
  return classes
320
- })
321
-
322
- const labelStyles = computed(() => {
323
- return {
324
- color: props.status?.type === 'error' ? 'red' : 'gray'
325
- }
326
- })
327
-
328
- const messageClasses = computed(() => {
353
+ },
354
+ inputClass(): string {
355
+ return `dl-smart-search-input__textarea${
356
+ this.focused ? ' focus' : ''
357
+ }`
358
+ },
359
+ messageClasses(): string {
329
360
  let classes = 'dl-smart-search-input__message'
330
361
 
331
- if (props.status) {
332
- classes += ` dl-smart-search-input__message--${props.status}`
362
+ if (this.status) {
363
+ classes += ` dl-smart-search-input__message--${this.status}`
333
364
  }
334
365
 
335
366
  return classes
336
- })
337
-
338
- const withClearBtn = computed(() => {
339
- return props.modelValue?.length > 0
340
- })
341
-
342
- const cssVars = computed(() => {
367
+ },
368
+ withClearBtn(): boolean {
369
+ return this.modelValue.length > 0
370
+ },
371
+ cssVars(): Record<string, string> {
343
372
  return {
344
373
  '--dl-smart-search-bar-wrapper-height':
345
- props.expandedInputHeight,
346
- '--dl-smart-search-input-height': props.inputHeight
374
+ this.expandedInputHeight,
375
+ '--dl-smart-search-input-height': this.inputHeight,
376
+ '--search-bar-width': this.searchBarWidth
377
+ }
378
+ },
379
+ saveStatus(): boolean {
380
+ return (
381
+ this.disabled ||
382
+ !this.modelValue ||
383
+ this.status.type === 'error'
384
+ )
385
+ },
386
+ labelStyles(): Record<string, any> {
387
+ return {
388
+ color: this.status?.type === 'error' ? 'red' : 'gray'
347
389
  }
348
- })
349
-
350
- return {
351
- input,
352
- label,
353
- hasEllipsis,
354
- suggestionModal,
355
- setInputValue,
356
- menuOffset,
357
- cancelBlur,
358
- expanded,
359
- styledTexarea,
360
- styledInput,
361
- datePickerSelection,
362
- isDatePickerVisible,
363
- focused,
364
- isOverflow,
365
- isTyping,
366
- saveStatus,
367
- statusIcon,
368
- statusIconColor,
369
- screenIcon,
370
- searchBarClasses,
371
- labelStyles,
372
- messageClasses,
373
- withClearBtn,
374
- cssVars
375
390
  }
376
391
  },
377
392
  watch: {
@@ -394,6 +409,7 @@ export default defineComponent({
394
409
  this.isDatePickerVisible = true
395
410
  this.suggestionModal = false
396
411
  }
412
+ this.scroll = (this.$refs.input as HTMLDivElement).offsetHeight > 40
397
413
  },
398
414
  suggestions(val) {
399
415
  if (this.isDatePickerVisible) return
@@ -420,6 +436,15 @@ export default defineComponent({
420
436
  this.focus()
421
437
  })
422
438
  },
439
+ focused(value) {
440
+ (this.$refs.searchBar as HTMLElement).style.maxHeight = `${
441
+ value ? parseInt(this.searchBarWidth) : 450
442
+ }px`
443
+ if (!value) {
444
+ (this.$refs.input as HTMLElement).parentElement.style.width =
445
+ '1px'
446
+ }
447
+ },
423
448
  isDatePickerVisible(val: boolean) {
424
449
  if (!val) {
425
450
  this.datePickerSelection = null
@@ -508,7 +533,7 @@ export default defineComponent({
508
533
 
509
534
  this.$emit('update:modelValue', text)
510
535
  },
511
- handleScreenBtnClick() {
536
+ handleScreenButtonClick() {
512
537
  this.cancelBlur = this.cancelBlur === 0 ? 1 : this.cancelBlur
513
538
  this.expanded = !this.expanded
514
539
  if (!this.focused) {
@@ -530,6 +555,8 @@ export default defineComponent({
530
555
  .dl-smart-search-input {
531
556
  display: flex;
532
557
  text-align: left;
558
+ position: absolute;
559
+ width: var(--search-bar-width);
533
560
 
534
561
  &__char {
535
562
  ::selection {
@@ -547,7 +574,7 @@ export default defineComponent({
547
574
  &__search-bar {
548
575
  display: flex;
549
576
  flex-grow: 1;
550
- height: auto;
577
+ height: 100%;
551
578
  padding: 0 10px;
552
579
  overflow-y: auto;
553
580
  background-color: var(--dl-color-panel-background);
@@ -558,7 +585,7 @@ export default defineComponent({
558
585
  border: 1px solid var(--dl-color-separator);
559
586
  border-radius: 2px;
560
587
 
561
- max-height: 40px;
588
+ max-height: var(--dl-smart-search-bar-wrapper-height);
562
589
 
563
590
  &--error {
564
591
  border-color: var(--dl-color-negative);
@@ -589,45 +616,15 @@ export default defineComponent({
589
616
 
590
617
  &__status-icon-wrapper {
591
618
  display: flex;
592
- align-items: center;
593
- height: var(--dl-smart-search-input-height);
594
- margin-right: 5px;
595
- }
596
-
597
- &__input {
598
- font-size: 12px;
599
- line-height: 14px;
600
- font-weight: 400;
601
- font-family: 'Roboto', sans-serif;
602
- width: 100%;
603
- border: none;
604
- outline: none;
605
-
606
- position: absolute;
607
- width: 100%;
608
- font-size: inherit;
609
- font-family: inherit;
610
-
611
- height: 14px;
612
- overflow-y: hidden;
613
- overflow-x: auto;
614
- white-space: nowrap;
615
- user-select: none;
616
-
617
- -ms-overflow-style: none; /* IE and Edge */
618
- scrollbar-width: none; /* Firefox */
619
- &::-webkit-scrollbar {
620
- display: none;
621
- }
622
- &:not(:focus) {
623
- width: 100%;
624
- text-overflow: ellipsis;
619
+ line-height: 15px;
620
+ margin: 6px 8px 0px 0px;
621
+ align-items: flex-start;
622
+ div:first-child {
623
+ display: flex;
624
+ align-items: center;
625
625
  }
626
-
627
- caret-color: var(--dl-color-tooltip-background);
628
626
  }
629
627
 
630
- &__input,
631
628
  &__text,
632
629
  &__textarea {
633
630
  width: 100%;
@@ -637,28 +634,28 @@ export default defineComponent({
637
634
 
638
635
  &__textarea {
639
636
  font-size: 12px;
640
- line-height: 14px;
641
637
  font-weight: 400;
638
+ line-height: 14px;
642
639
  font-family: 'Roboto', sans-serif;
643
640
  width: 100%;
644
641
  border: none;
645
642
  outline: none;
646
643
  resize: none;
647
644
 
645
+ white-space: pre;
646
+ margin-top: 7px;
647
+
648
648
  height: auto;
649
+
649
650
  min-height: 14px;
650
651
  max-height: 100%;
651
- overflow-y: auto;
652
-
653
- word-break: break-all;
654
- flex-wrap: wrap;
652
+ display: block;
655
653
  }
656
654
 
657
655
  &__input,
658
656
  &__textarea {
659
657
  color: var(--dl-color-darker);
660
658
  background-color: var(--dl-color-panel-background);
661
- padding: 0;
662
659
 
663
660
  ::placeholder {
664
661
  color: var(--dl-color-lighter);
@@ -670,10 +667,10 @@ export default defineComponent({
670
667
 
671
668
  &__input-wrapper,
672
669
  &__textarea-wrapper {
670
+ min-height: 28px;
673
671
  position: relative;
674
672
  display: flex;
675
673
  flex-grow: 1;
676
- padding: 6px 10px 6px 0;
677
674
  position: relative;
678
675
 
679
676
  align-items: flex-start;
@@ -686,14 +683,22 @@ export default defineComponent({
686
683
 
687
684
  &__toolbar {
688
685
  display: flex;
689
- height: var(--dl-smart-search-input-height);
686
+ align-items: flex-start;
687
+ height: 28px;
688
+ &--right {
689
+ height: 100%;
690
+ display: flex;
691
+ }
690
692
  }
691
693
 
692
694
  &__clear-btn-wrapper {
693
695
  border-right: 1px solid var(--dl-color-separator);
694
- padding: 0 7px;
696
+ height: 100%;
695
697
  display: flex;
696
698
  align-items: center;
699
+ div:first-child {
700
+ margin-right: 5px;
701
+ }
697
702
  ::v-deep .dl-button {
698
703
  padding: 0px;
699
704
  color: var(--dl-color-darker);
@@ -702,8 +707,9 @@ export default defineComponent({
702
707
 
703
708
  &__screen-btn-wrapper {
704
709
  display: flex;
710
+ margin-right: 14px;
705
711
  align-items: center;
706
- padding: 0 10px;
712
+ margin-left: 9px;
707
713
  ::v-deep .dl-icon {
708
714
  font-size: 16px;
709
715
  color: var(--dl-color-darker);
@@ -747,9 +753,8 @@ export default defineComponent({
747
753
  }
748
754
 
749
755
  &__search-label {
756
+ margin-top: 3px;
750
757
  font-size: 10px;
751
- margin-left: 4px;
752
- margin-top: 4px;
753
758
  color: gray;
754
759
  position: relative;
755
760
  word-break: break-all;
@@ -759,4 +764,9 @@ export default defineComponent({
759
764
  width: 562px;
760
765
  }
761
766
  }
767
+ .focus {
768
+ word-break: break-all;
769
+ flex-wrap: wrap;
770
+ white-space: pre-wrap;
771
+ }
762
772
  </style>
@@ -0,0 +1,101 @@
1
+ <template>
2
+ <div
3
+ class="query"
4
+ @mouseenter="actionsVisible = true"
5
+ @mouseleave="actionsVisible = false"
6
+ >
7
+ <div
8
+ class="query__header"
9
+ @mousedown="$emit('select')"
10
+ >
11
+ <dl-icon
12
+ :icon="icon"
13
+ style="margin-bottom: 3px"
14
+ />
15
+ <span class="query__header--title">
16
+ {{ name }}
17
+ </span>
18
+ </div>
19
+ <div
20
+ v-if="actionsVisible"
21
+ class="query__actions"
22
+ >
23
+ <div
24
+ class="query__actions--icon"
25
+ @mousedown="$emit('delete')"
26
+ >
27
+ <dl-icon
28
+ :inline="false"
29
+ size="14px"
30
+ icon="icon-dl-delete"
31
+ />
32
+ <dl-tooltip>Delete</dl-tooltip>
33
+ </div>
34
+ </div>
35
+ </div>
36
+ </template>
37
+
38
+ <script lang="ts">
39
+ import { defineComponent } from 'vue-demi'
40
+ import { DlIcon, DlTooltip } from '../../../../essential'
41
+ export default defineComponent({
42
+ components: {
43
+ DlIcon,
44
+ DlTooltip
45
+ },
46
+ props: {
47
+ type: {
48
+ type: String,
49
+ default: 'saved'
50
+ },
51
+ name: {
52
+ type: String,
53
+ default: ''
54
+ }
55
+ },
56
+ emits: ['delete', 'select'],
57
+ data() {
58
+ return {
59
+ actionsVisible: false
60
+ }
61
+ },
62
+ computed: {
63
+ icon(): string {
64
+ return this.type === 'saved' ? 'icon-dl-save' : 'icon-dl-time'
65
+ }
66
+ }
67
+ })
68
+ </script>
69
+
70
+ <style lang="scss" scoped>
71
+ .query {
72
+ height: 18px;
73
+ padding: 5px 10px;
74
+ border-radius: 3px;
75
+ display: flex;
76
+ justify-content: space-between;
77
+ color: var(--dl-color-darker);
78
+ &__header {
79
+ cursor: pointer;
80
+ display: flex;
81
+ align-items: center;
82
+ &--title {
83
+ font-size: 0.5em;
84
+ margin: 0px 12px;
85
+ }
86
+ }
87
+
88
+ &__actions {
89
+ display: flex;
90
+ align-items: center;
91
+ &--icon {
92
+ cursor: pointer;
93
+ margin: 0px 5px;
94
+ }
95
+ }
96
+
97
+ &:hover {
98
+ background-color: var(--dl-color-fill);
99
+ }
100
+ }
101
+ </style>
@@ -3,10 +3,10 @@ export interface Query {
3
3
  query: string | null
4
4
  }
5
5
 
6
- export interface Filter {
7
- name: string
8
- label: string
9
- queries: Query[]
6
+ export interface Filters {
7
+ saved: Query[]
8
+ recent: Query[]
9
+ suggested: Query[]
10
10
  }
11
11
 
12
12
  export interface ColorSchema {