@dataloop-ai/components 0.17.134 → 0.18.1

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 (180) hide show
  1. package/package.json +3 -1
  2. package/src/App.vue +5 -227
  3. package/src/assets/globals.scss +4 -0
  4. package/src/components/basic/DlAccordion/DlAccordion.vue +26 -4
  5. package/src/components/basic/DlButton/DlButton.vue +2 -6
  6. package/src/components/basic/DlChip/DlChip.vue +1 -5
  7. package/src/components/basic/DlEmptyState/DlEmptyState.vue +282 -0
  8. package/src/components/basic/DlEmptyState/index.ts +2 -0
  9. package/src/components/basic/DlEmptyState/types.ts +20 -0
  10. package/src/components/basic/DlListItem/DlListItem.vue +96 -63
  11. package/src/components/basic/DlListItem/utils.ts +0 -3
  12. package/src/components/basic/DlPanelContainer/DlPanelContainer.vue +35 -12
  13. package/src/components/basic/DlPopup/DlPopup.vue +29 -7
  14. package/src/components/basic/DlWidget/DlWidget.vue +32 -4
  15. package/src/components/basic/index.ts +2 -1
  16. package/src/components/basic/types.ts +2 -0
  17. package/src/components/compound/DlCard/DlCard.vue +796 -0
  18. package/src/components/compound/DlCard/components/DescriptionModal.vue +137 -0
  19. package/src/components/compound/DlCard/types.ts +38 -0
  20. package/src/components/compound/DlCharts/charts/DlBarChart/DlBarChart.vue +35 -3
  21. package/src/components/compound/DlCharts/charts/DlColumnChart/DlColumnChart.vue +51 -12
  22. package/src/components/compound/DlCharts/charts/DlConfusionMatrix/DlConfusionMatrix.vue +71 -14
  23. package/src/components/compound/DlCharts/charts/DlDoughnutChart/DlDoughnutChart.vue +28 -4
  24. package/src/components/compound/DlCharts/charts/DlDoughnutChart/components/DlDoughnutChartLegend.vue +1 -1
  25. package/src/components/compound/DlCharts/charts/DlLineChart/DlLineChart.vue +46 -8
  26. package/src/components/compound/DlCharts/components/DlBrush.vue +2 -2
  27. package/src/components/compound/DlCharts/types/props.ts +5 -1
  28. package/src/components/compound/DlCharts/utils.ts +1 -1
  29. package/src/components/compound/DlCodeEditor/DlCodeEditor.vue +171 -0
  30. package/src/components/compound/DlCodeEditor/README.md +11 -0
  31. package/src/components/compound/DlCodeEditor/components/CodeEditor.vue +705 -0
  32. package/src/components/compound/DlCodeEditor/index.ts +3 -0
  33. package/src/components/compound/DlCodeEditor/styles/themes-base16.css +12809 -0
  34. package/src/components/compound/DlCodeEditor/styles/themes.css +3999 -0
  35. package/src/components/compound/DlCodeEditor/types.ts +21 -0
  36. package/src/components/compound/DlDateTime/DlDateTimeRange/{DlCardSidebar.vue → CardSidebar.vue} +10 -11
  37. package/src/components/compound/DlDateTime/DlDateTimeRange/DlDateTimeRange.vue +8 -8
  38. package/src/components/compound/DlDialogBox/DlDialogBox.vue +26 -2
  39. package/src/components/compound/DlInput/DlInput.vue +2 -2
  40. package/src/components/compound/DlOptionGroup/components/MenuItemWrapper.vue +2 -2
  41. package/src/components/compound/DlRange/DlRange.vue +2 -2
  42. package/src/components/compound/DlSearches/DlSmartSearch/components/DlSmartSearchInput.vue +1 -1
  43. package/src/components/compound/DlSearches/DlSmartSearch/components/DlSuggestionsDropdown.vue +1 -1
  44. package/src/components/compound/DlSearches/DlSmartSearch/utils/highlightSyntax.ts +10 -6
  45. package/src/components/compound/DlSelect/DlSelect.vue +78 -70
  46. package/src/components/compound/DlSlider/components/DlSliderBase.vue +2 -2
  47. package/src/components/compound/DlSlider/useSlider.ts +2 -2
  48. package/src/components/compound/DlStepper/DlStepper.vue +33 -3
  49. package/src/components/compound/DlStepper/components/DlStepperContent.vue +6 -2
  50. package/src/components/compound/DlStepper/components/DlStepperSidebar.vue +12 -6
  51. package/src/components/compound/DlTable/DlTable.vue +30 -4
  52. package/src/components/compound/DlTable/components/DlTd.vue +8 -8
  53. package/src/components/compound/DlTable/components/DlTh.vue +1 -1
  54. package/src/components/compound/DlTable/hooks/tableColumnSelection.ts +35 -40
  55. package/src/components/compound/DlTable/hooks/tableFilter.ts +33 -21
  56. package/src/components/compound/DlTable/hooks/tablePagination.ts +10 -13
  57. package/src/components/compound/DlTable/hooks/tableRowExpand.ts +2 -1
  58. package/src/components/compound/DlTable/hooks/tableRowSelection.ts +0 -1
  59. package/src/components/compound/DlTable/hooks/tableSort.ts +52 -47
  60. package/src/components/compound/DlThumbnailGallery/DlThumbnailGallery.vue +268 -0
  61. package/src/components/compound/DlThumbnailGallery/index.ts +2 -0
  62. package/src/components/compound/DlThumbnailGallery/types.ts +11 -0
  63. package/src/components/compound/DlTreeTable/DlTreeTable.vue +1293 -0
  64. package/src/components/compound/DlTreeTable/components/DlTdTree.vue +119 -0
  65. package/src/components/compound/DlTreeTable/components/DlTrTree.vue +52 -0
  66. package/src/components/compound/DlTreeTable/index.ts +3 -0
  67. package/src/components/compound/DlTreeTable/types.ts +1 -0
  68. package/src/components/compound/DlTreeTable/utils/convertToNestedObject.ts +51 -0
  69. package/src/components/compound/DlTreeTable/utils/flatTreeData.ts +19 -0
  70. package/src/components/compound/DlTreeTable/utils/getFromChildren.ts +39 -0
  71. package/src/components/compound/DlTreeTable/utils/trSpacing.ts +13 -0
  72. package/src/components/compound/DlTreeTable/utils/treeTableRowSelection.ts +184 -0
  73. package/src/components/compound/index.ts +5 -0
  74. package/src/components/compound/types.ts +2 -0
  75. package/src/components/essential/DlBadge/DlBadge.vue +3 -3
  76. package/src/components/essential/DlCheckbox/DlCheckbox.vue +6 -3
  77. package/src/components/essential/DlEllipsis/DlEllipsis.vue +18 -14
  78. package/src/components/essential/DlIcon/DlIcon.vue +1 -1
  79. package/src/components/essential/DlLabel/DlLabel.vue +174 -0
  80. package/src/components/essential/DlLabel/index.ts +2 -0
  81. package/src/components/essential/DlList/DlList.vue +2 -2
  82. package/src/components/essential/DlMenu/DlMenu.vue +26 -20
  83. package/src/components/essential/DlMenu/utils.ts +7 -6
  84. package/src/components/essential/DlPageLayout/DlPageLayout.vue +90 -0
  85. package/src/components/essential/DlPageLayout/index.ts +2 -0
  86. package/src/components/essential/DlSeparator/DlSeparator.vue +2 -2
  87. package/src/components/essential/DlThemeProvider/DlThemeProvider.vue +6 -0
  88. package/src/components/essential/index.ts +2 -1
  89. package/src/components/shared/DlTooltip/DlTooltip.vue +9 -10
  90. package/src/demos/BarChartDemo.vue +47 -2
  91. package/src/demos/ColumnChartDemo.vue +51 -2
  92. package/src/demos/DlAccordionDemo.vue +92 -43
  93. package/src/demos/DlCardDemo.vue +156 -19
  94. package/src/demos/DlChartDoughnutDemo.vue +49 -2
  95. package/src/demos/DlCheckboxDemo.vue +13 -0
  96. package/src/demos/DlCodeEditor/DlCodeEditorDemo.vue +247 -0
  97. package/src/demos/DlCodeEditor/index.ts +2 -0
  98. package/src/demos/DlConfusionMatrixDemo.vue +51 -6
  99. package/src/demos/DlDemoPage.vue +235 -0
  100. package/src/demos/DlDialogBoxDemo.vue +56 -51
  101. package/src/demos/DlDropdownButtonDemo.vue +1 -1
  102. package/src/demos/DlEmptyStateDemo.vue +81 -0
  103. package/src/demos/DlLabelDemo.vue +128 -0
  104. package/src/demos/DlLineChartDemo.vue +50 -2
  105. package/src/demos/DlListDemo.vue +12 -9
  106. package/src/demos/DlMenuDemo.vue +13 -14
  107. package/src/demos/DlPageLayoutDemo.vue +146 -0
  108. package/src/demos/DlPanelContainerDemo.vue +113 -2
  109. package/src/demos/DlPopupDemo.vue +51 -0
  110. package/src/demos/DlSelectDemo.vue +14 -5
  111. package/src/demos/DlStepperDemo/DlStepperDemo.vue +5 -1
  112. package/src/demos/DlStepperDemo/EmptyStateStepper.vue +149 -0
  113. package/src/demos/DlTableDemo.vue +65 -2
  114. package/src/demos/DlTabsDemo.vue +1 -1
  115. package/src/demos/DlThumbnailGalleryDemo.vue +99 -0
  116. package/src/demos/DlTreeTableDemo.vue +694 -0
  117. package/src/demos/DlWidgetDemo.vue +48 -3
  118. package/src/demos/index.ts +17 -4
  119. package/src/hooks/use-anchor.ts +14 -16
  120. package/src/hooks/use-model-toggle.ts +12 -14
  121. package/src/hooks/use-portal.ts +2 -2
  122. package/src/hooks/use-scroll-target.ts +2 -4
  123. package/src/hooks/use-size-observer.ts +3 -2
  124. package/src/hooks/use-transition.ts +10 -4
  125. package/src/index.ts +22 -1
  126. package/src/layouts/DlDatasetBrowser/DemoComponents/DatasetFooter.vue +78 -0
  127. package/src/layouts/DlDatasetBrowser/DemoComponents/DatasetHeader.vue +22 -0
  128. package/src/layouts/DlDatasetBrowser/DemoComponents/DatasetLeftDrawer.vue +96 -0
  129. package/src/layouts/DlDatasetBrowser/DemoComponents/DatasetMainContent.vue +51 -0
  130. package/src/layouts/DlDatasetBrowser/DemoComponents/DatasetRightDrawer.vue +88 -0
  131. package/src/layouts/DlDatasetBrowser/DemoComponents/MainContent/ActionsMenu.vue +70 -0
  132. package/src/layouts/DlDatasetBrowser/DemoComponents/MainContent/AutomationMenu.vue +106 -0
  133. package/src/layouts/DlDatasetBrowser/DemoComponents/MainContent/CardView.vue +101 -0
  134. package/src/layouts/DlDatasetBrowser/DemoComponents/MainContent/CardViewGallery.vue +141 -0
  135. package/src/layouts/DlDatasetBrowser/DemoComponents/MainContent/CardViewTable.vue +193 -0
  136. package/src/layouts/DlDatasetBrowser/DemoComponents/MainContent/EmptyState/LayoutEmptyState.vue +227 -0
  137. package/src/layouts/DlDatasetBrowser/DemoComponents/MainContent/EmptyState/UploadData.vue +106 -0
  138. package/src/layouts/DlDatasetBrowser/DemoComponents/MainContent/MainContentImages.vue +540 -0
  139. package/src/layouts/DlDatasetBrowser/DemoComponents/MainContent/MainContentNav.vue +329 -0
  140. package/src/layouts/DlDatasetBrowser/DemoComponents/NavbarKpi.vue +84 -0
  141. package/src/layouts/DlDatasetBrowser/DemoComponents/NavbarSearch.vue +132 -0
  142. package/src/layouts/DlDatasetBrowser/DemoComponents/SearchFilterMenu.vue +19 -0
  143. package/src/layouts/DlDatasetBrowser/DemoComponents/filters/AddFilter.vue +212 -0
  144. package/src/layouts/DlDatasetBrowser/DemoComponents/types/imageMetadata.ts +28 -0
  145. package/src/layouts/DlDatasetBrowser/DlDatasetBrowser.vue +42 -0
  146. package/src/layouts/DlStudioLayout/DlStudioLayout.vue +42 -0
  147. package/src/layouts/DlStudioLayout/components/Demo/LeftMenuContent.vue +23 -0
  148. package/src/layouts/DlStudioLayout/components/Demo/StudioFooter.vue +25 -0
  149. package/src/layouts/DlStudioLayout/components/Demo/StudioHeader.vue +121 -0
  150. package/src/layouts/DlStudioLayout/components/Demo/StudioLeftDrawer.vue +245 -0
  151. package/src/layouts/DlStudioLayout/components/Demo/StudioMainContent.vue +31 -0
  152. package/src/layouts/DlStudioLayout/components/Demo/StudioTabsMenu.vue +117 -0
  153. package/src/layouts/DlStudioLayout/components/Demo/TabMenu/FilterMenu.vue +62 -0
  154. package/src/layouts/DlStudioLayout/components/Demo/TabMenu/TabMenuAnnotations.vue +98 -0
  155. package/src/layouts/DlStudioLayout/components/Demo/TabMenu/TabMenuItem.vue +66 -0
  156. package/src/layouts/DlStudioLayout/components/LayoutNavbar.vue +24 -0
  157. package/src/layouts/DlStudioLayout/components/ListAutocomplete.vue +149 -0
  158. package/src/layouts/DlStudioLayout/components/NavigationDrawer.vue +147 -0
  159. package/src/layouts/DlStudioLayout/index.ts +2 -0
  160. package/src/layouts/DlStudioLayout/types/HorizontalItems.ts +9 -0
  161. package/src/layouts/DlStudioLayout/types/VerticalItems.ts +10 -0
  162. package/src/simple-code-editor.d.ts +1 -0
  163. package/src/utils/click-outside.ts +1 -1
  164. package/src/utils/dom.ts +5 -5
  165. package/src/utils/events.ts +3 -3
  166. package/src/utils/global-nodes.ts +2 -2
  167. package/src/utils/is-ellipsis-active.ts +4 -1
  168. package/src/utils/portal.ts +5 -5
  169. package/src/utils/position-engine.ts +5 -5
  170. package/src/utils/render.ts +1 -1
  171. package/src/utils/scroll.ts +2 -2
  172. package/src/utils/selection.ts +3 -3
  173. package/vite.config.ts +9 -1
  174. package/src/components/basic/DlCard/DlCard.vue +0 -242
  175. package/src/components/basic/DlCard/types.ts +0 -20
  176. package/src/components/essential/DlTextHolder/DlTextHolder.vue +0 -93
  177. package/src/components/essential/DlTextHolder/index.ts +0 -2
  178. package/src/demos/DlTextHolderDemo.vue +0 -50
  179. /package/src/components/{basic → compound}/DlCard/index.ts +0 -0
  180. /package/src/components/compound/DlDateTime/DlDateTimeRange/{DlDateInput.vue → DateInput.vue} +0 -0
@@ -1,71 +1,67 @@
1
1
  <template>
2
2
  <component
3
- :is="as"
3
+ :is="type"
4
4
  :id="uuid"
5
5
  class="list-item-wrapper"
6
6
  >
7
- <hr
8
- class="separator"
9
- :class="{ 'separator--visible': bordered }"
10
- >
11
7
  <div
12
8
  v-wave="!disabled && withWave"
13
9
  :class="[
14
10
  {
15
11
  'dl-list-item': true,
16
- 'dl-list-item-disabled': disabled,
17
- 'dl-list-spaced': bordered
12
+ 'dl-list-item-disabled': disabled
18
13
  },
19
14
  'row'
20
15
  ]"
21
16
  :style="cssItemVars"
22
17
  @click="onClick"
23
18
  >
24
- <dl-item-section
25
- v-if="startIcon"
26
- side
27
- style="display: flex"
28
- >
29
- <dl-icon
30
- :icon="startIcon"
31
- :color="startIconColor"
32
- :size="startIconSize"
33
- />
34
- </dl-item-section>
19
+ <slot name="prefix">
20
+ <dl-item-section
21
+ v-if="startIcon"
22
+ side
23
+ style="display: flex"
24
+ >
25
+ <dl-icon
26
+ :icon="startIconData.icon"
27
+ :color="startIconData.color"
28
+ :size="startIconData.size"
29
+ />
30
+ </dl-item-section>
31
+ </slot>
35
32
  <slot />
36
- <dl-item-section
37
- v-if="endIcon"
38
- side
39
- style="display: flex"
40
- >
41
- <dl-icon
42
- :icon="endIcon"
43
- :color="endIconColor"
44
- :size="endIconSize"
45
- />
46
- </dl-item-section>
33
+ <slot name="suffix">
34
+ <dl-item-section
35
+ v-if="endIcon"
36
+ side
37
+ style="display: flex"
38
+ >
39
+ <dl-icon
40
+ :icon="endIconData.icon"
41
+ :color="endIconData.color"
42
+ :size="endIconData.size"
43
+ />
44
+ </dl-item-section>
45
+ </slot>
47
46
  </div>
47
+ <dl-separator v-if="separator" />
48
48
  </component>
49
49
  </template>
50
50
 
51
51
  <script lang="ts">
52
- import { defineComponent } from 'vue-demi'
52
+ import { PropType, defineComponent } from 'vue-demi'
53
53
  import { DlItemSection } from '../../shared'
54
- import { DlIcon } from '../../essential'
55
- import {
56
- itemHoverColor,
57
- itemActiveColor,
58
- itemCursor,
59
- itemBorder,
60
- itemColor
61
- } from './utils'
54
+ import { DlIcon, DlSeparator } from '../../essential'
55
+ import { itemHoverColor, itemActiveColor, itemCursor, itemColor } from './utils'
62
56
  import { wave, waveTrigger } from '../../../utils'
63
57
  import { v4 } from 'uuid'
58
+ import { isObject } from 'lodash'
64
59
 
65
60
  export default defineComponent({
66
61
  name: 'DlListItem',
67
62
  components: {
68
63
  DlItemSection,
64
+ DlSeparator,
69
65
  DlIcon
70
66
  },
71
67
  directives: {
@@ -75,36 +71,58 @@ export default defineComponent({
75
71
  props: {
76
72
  disabled: Boolean,
77
73
  clickable: Boolean,
78
- bordered: Boolean,
74
+ separator: Boolean,
79
75
  withWave: Boolean,
80
- startIcon: { type: String, required: false, default: '' },
81
- endIcon: { type: String, required: false, default: '' },
82
- as: {
76
+ type: {
83
77
  type: String,
84
78
  default: 'div'
85
79
  },
86
- startIconColor: {
87
- type: String,
88
- required: false,
89
- default: 'dl-color-darker'
90
- },
91
- endIconColor: {
92
- type: String,
93
- required: false,
94
- default: 'dl-color-darker'
95
- },
96
- startIconSize: {
97
- type: String,
98
- default: '16px'
99
- },
100
- endIconSize: {
101
- type: String,
102
- default: '16px'
103
- },
104
80
  height: { type: String, default: null, required: false },
105
81
  padding: { type: String, default: null, required: false },
106
- isHighlighted: {
82
+ highlighted: {
107
83
  type: Boolean
84
+ },
85
+ startIcon: {
86
+ type: [Object, String] as PropType<
87
+ | {
88
+ icon: string
89
+ color?: string
90
+ size?: string
91
+ }
92
+ | string
93
+ >,
94
+ default: null,
95
+ validator: (value: any) => {
96
+ if (value) {
97
+ if (isObject(value) as any) {
98
+ return value.icon && typeof value.icon === 'string'
99
+ } else {
100
+ return typeof value === 'string'
101
+ }
102
+ }
103
+ return true
104
+ }
105
+ },
106
+ endIcon: {
107
+ type: [Object, String] as PropType<
108
+ | {
109
+ icon: string
110
+ color?: string
111
+ size?: string
112
+ }
113
+ | string
114
+ >,
115
+ default: null,
116
+ validator: (value: any) => {
117
+ if (value) {
118
+ if (isObject(value) as any) {
119
+ return value.icon && typeof value.icon === 'string'
120
+ } else {
121
+ return typeof value === 'string'
122
+ }
123
+ }
124
+ return true
125
+ }
108
126
  }
109
127
  },
110
128
  emits: ['click'],
@@ -125,14 +143,27 @@ export default defineComponent({
125
143
  this.isClickable,
126
144
  this.disabled
127
145
  ),
128
- '--dl-list-item-border': itemBorder(this.bordered),
129
146
  '--dl-list-item-color': itemColor(this.disabled),
130
147
  '--dl-list-item-height': this.height ?? '28px',
131
148
  '--dl-list-item-padding': this.padding ?? '0px 10px',
132
- '--dl-list-item-bg-color': this.isHighlighted
149
+ '--dl-list-item-bg-color': this.highlighted
133
150
  ? 'var(--dl-color-fill-hover)'
134
151
  : 'transparent'
135
152
  }
153
+ },
154
+ startIconData(): { icon: string; color: string; size: string } {
155
+ return Object.assign(
156
+ { color: 'dl-color-darker', size: '16px' },
157
+ isObject(this.startIcon)
158
+ ? this.startIcon
159
+ : { icon: this.startIcon }
160
+ )
161
+ },
162
+ endIconData(): { icon: string; color: string; size: string } {
163
+ return Object.assign(
164
+ { color: 'dl-color-darker', size: '16px' },
165
+ isObject(this.endIcon) ? this.endIcon : { icon: this.endIcon }
166
+ )
136
167
  }
137
168
  },
138
169
  methods: {
@@ -148,6 +179,8 @@ export default defineComponent({
148
179
  <style scoped lang="scss">
149
180
  .list-item-wrapper {
150
181
  width: 100%;
182
+ border-left: var(--dl-list-item-border-left);
183
+ margin-bottom: 4px;
151
184
  }
152
185
 
153
186
  .dl-list-item {
@@ -7,8 +7,5 @@ export const itemActiveColor = (isActionable: boolean) =>
7
7
  export const itemCursor = (actionable: boolean, disabled: boolean) =>
8
8
  actionable ? 'pointer' : disabled ? 'not-allowed' : 'cursor'
9
9
 
10
- export const itemBorder = (bordered: boolean) =>
11
- bordered ? `1px solid var(--dl-color-separator)` : '0px'
12
-
13
10
  export const itemColor = (disabled: boolean) =>
14
11
  disabled ? 'var(--dl-color-disabled)' : 'var(--dl-color-darker)'
@@ -79,10 +79,10 @@
79
79
  :style="glutterStyles"
80
80
  />
81
81
  </div>
82
- <div
83
- v-if="hasHeader === true"
84
- class="header"
85
- :style="headerStyles"
82
+ <div
83
+ v-if="hasHeader === true && !isEmpty"
84
+ class="header"
85
+ :style="headerStyles"
86
86
  >
87
87
  <div class="overflow-hidden">
88
88
  <slot name="header" />
@@ -93,12 +93,26 @@
93
93
  :style="contentStyle"
94
94
  >
95
95
  <div class="column" />
96
- <slot />
96
+ <dl-empty-state
97
+ v-if="isEmpty"
98
+ v-bind="emptyStateProps"
99
+ >
100
+ <template
101
+ v-for="(_, slot) in $slots"
102
+ #[slot]="props"
103
+ >
104
+ <slot
105
+ :name="slot"
106
+ v-bind="props"
107
+ />
108
+ </template>
109
+ </dl-empty-state>
110
+ <slot v-if="!isEmpty" />
97
111
  </div>
98
- <div
99
- v-if="hasFooter === true"
100
- class="footer"
101
- :style="footerStyles"
112
+ <div
113
+ v-if="hasFooter === true && !isEmpty"
114
+ class="footer"
115
+ :style="footerStyles"
102
116
  >
103
117
  <div class="overflow-hidden">
104
118
  <slot name="footer" />
@@ -110,15 +124,19 @@
110
124
 
111
125
  <script lang="ts">
112
126
  import { v4 } from 'uuid'
113
- import { defineComponent } from 'vue-demi'
127
+ import { defineComponent, PropType } from 'vue-demi'
114
128
  import { DlIcon } from '../../essential'
115
129
  import { DlTooltip } from '../../shared'
130
+ import { DlEmptyStateProps } from '../DlEmptyState/types'
131
+ // todo: this will cause issues
132
+ import DlEmptyState from '../DlEmptyState/DlEmptyState.vue'
116
133
 
117
134
  export default defineComponent({
118
135
  name: 'DlPanelContainer',
119
136
  components: {
120
137
  DlIcon,
121
- DlTooltip
138
+ DlTooltip,
139
+ DlEmptyState
122
140
  },
123
141
  model: {
124
142
  prop: 'modelValue',
@@ -159,7 +177,12 @@ export default defineComponent({
159
177
  type: String,
160
178
  default: '70px'
161
179
  },
162
- modelValue: { type: Boolean, required: false, default: false }
180
+ modelValue: { type: Boolean, required: false, default: false },
181
+ isEmpty: Boolean,
182
+ emptyStateProps: {
183
+ type: Object as PropType<DlEmptyStateProps>,
184
+ default: null
185
+ }
163
186
  },
164
187
  emits: ['update:model-value'],
165
188
  data() {
@@ -43,7 +43,21 @@
43
43
  </template>
44
44
  </popup-header>
45
45
  <div class="popup-content">
46
- <slot />
46
+ <slot v-if="!isEmpty" />
47
+ <dl-empty-state
48
+ v-if="isEmpty"
49
+ v-bind="emptyStateProps"
50
+ >
51
+ <template
52
+ v-for="(_, slot) in $slots"
53
+ #[slot]="props"
54
+ >
55
+ <slot
56
+ :name="slot"
57
+ v-bind="props"
58
+ />
59
+ </template>
60
+ </dl-empty-state>
47
61
  </div>
48
62
  <div
49
63
  v-if="hasFooterSlot"
@@ -115,14 +129,17 @@ import DraggableUpper from './components/DraggableUpper.vue'
115
129
  import PopupHeader from './components/PopupHeader.vue'
116
130
  import { v4 } from 'uuid'
117
131
  import { isString } from 'lodash'
132
+ import { DlEmptyStateProps } from '../DlEmptyState/types'
118
133
  import { stringStyleToRecord } from '../../../utils'
134
+ import DlEmptyState from '../DlEmptyState/DlEmptyState.vue'
119
135
 
120
136
  export default defineComponent({
121
137
  name: 'DlPopup',
122
138
  components: {
123
139
  DlTeleport,
124
140
  PopupHeader,
125
- DraggableUpper
141
+ DraggableUpper,
142
+ DlEmptyState
126
143
  },
127
144
  model: {
128
145
  prop: 'modelValue',
@@ -160,7 +177,7 @@ export default defineComponent({
160
177
  },
161
178
  scrollTarget: {
162
179
  type: String as PropType<Element | string>,
163
- default: void 0
180
+ default: null
164
181
  },
165
182
  touchPosition: Boolean,
166
183
  maxHeight: { type: String, default: 'auto' },
@@ -168,6 +185,11 @@ export default defineComponent({
168
185
  height: { type: String, default: 'auto' },
169
186
  width: { type: String, default: 'auto' },
170
187
  draggable: Boolean,
188
+ isEmpty: Boolean,
189
+ emptyStateProps: {
190
+ type: Object as PropType<DlEmptyStateProps>,
191
+ default: () => ({} as DlEmptyStateProps)
192
+ },
171
193
  zIndex: {
172
194
  type: [Number, String],
173
195
  default: 'var(--dl-z-index-popup)'
@@ -291,7 +313,7 @@ export default defineComponent({
291
313
 
292
314
  showPortal()
293
315
 
294
- absoluteOffset = void 0
316
+ absoluteOffset = null
295
317
 
296
318
  const offsetOnShow = setOffsetOnShow(evt as TouchEvent, {
297
319
  contextMenu: props.contextMenu,
@@ -302,7 +324,7 @@ export default defineComponent({
302
324
 
303
325
  absoluteOffset = offsetOnShow as Record<any, any> | undefined
304
326
 
305
- if (unwatchPosition === void 0) {
327
+ if (!unwatchPosition) {
306
328
  unwatchPosition = watch(() => screen, updatePosition, {
307
329
  deep: true
308
330
  })
@@ -337,7 +359,7 @@ export default defineComponent({
337
359
  }
338
360
 
339
361
  function anchorCleanup(hiding: boolean) {
340
- absoluteOffset = void 0
362
+ absoluteOffset = null
341
363
 
342
364
  unwatchPosition = updateUnwatchPosition(unwatchPosition)
343
365
 
@@ -353,7 +375,7 @@ export default defineComponent({
353
375
  }
354
376
 
355
377
  function configureScrollTarget() {
356
- if (anchorEl.value !== null || props.scrollTarget !== void 0) {
378
+ if (anchorEl.value !== null || props.scrollTarget) {
357
379
  (localScrollTarget as Ref<any>).value = getScrollTarget(
358
380
  anchorEl.value as HTMLElement,
359
381
  props.scrollTarget
@@ -28,10 +28,30 @@
28
28
  </div>
29
29
 
30
30
  <div class="dl-widget__content">
31
- <slot name="content" />
31
+ <dl-empty-state
32
+ v-if="isEmpty"
33
+ v-bind="emptyStateProps"
34
+ >
35
+ <template
36
+ v-for="(_, slot) in $slots"
37
+ #[slot]="props"
38
+ >
39
+ <slot
40
+ :name="slot"
41
+ v-bind="props"
42
+ />
43
+ </template>
44
+ </dl-empty-state>
45
+ <slot
46
+ v-if="!isEmpty"
47
+ name="content"
48
+ />
32
49
  </div>
33
50
 
34
- <div class="dl-widget__description">
51
+ <div
52
+ v-if="!isEmpty"
53
+ class="dl-widget__description"
54
+ >
35
55
  <slot name="description" />
36
56
  </div>
37
57
  </slot>
@@ -44,16 +64,24 @@
44
64
  </template>
45
65
  <script lang="ts">
46
66
  import { v4 } from 'uuid'
47
- import { computed, defineComponent, ref, toRef } from 'vue-demi'
67
+ import { computed, defineComponent, ref, toRef, PropType } from 'vue-demi'
48
68
  import { DlIcon } from '../../essential'
49
69
  import { getElementAbove, addMouseEnter, removeMouseEnter } from './utils'
70
+ import { DlEmptyStateProps } from '../DlEmptyState/types'
71
+ import DlEmptyState from '../DlEmptyState/DlEmptyState.vue'
50
72
 
51
73
  export default defineComponent({
52
74
  name: 'DlWidget',
53
75
  components: {
54
- DlIcon
76
+ DlIcon,
77
+ DlEmptyState
55
78
  },
56
79
  props: {
80
+ isEmpty: Boolean,
81
+ emptyStateProps: {
82
+ type: Object as PropType<DlEmptyStateProps>,
83
+ default: null
84
+ },
57
85
  draggable: {
58
86
  type: Boolean,
59
87
  default: true
@@ -9,7 +9,8 @@ export * from './DlWidget'
9
9
  export * from './DlPopup'
10
10
  export * from './DlPanelContainer'
11
11
  export * from './DlProgressChart'
12
- export * from './DlCard'
12
+ export * from './DlEmptyState'
13
13
  export * from './DlGrid'
14
14
  export * from './DlMarkupTable'
15
15
  export * from './DlContainer'
16
+ export * from './DlEmptyState'
@@ -6,3 +6,5 @@ export type { DlChipProps, DlButtonProps }
6
6
  export * from './DlKpi/types'
7
7
  export * from './DlWidget/types'
8
8
  export * from './DlButton/types'
9
+ export * from './DlGrid/types'
10
+ export * from './DlEmptyState/types'