@dataloop-ai/components 0.13.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 (294) hide show
  1. package/.eslintrc.js +154 -0
  2. package/.prettierrc.json +7 -0
  3. package/Dockerfile +12 -0
  4. package/LICENSE +201 -0
  5. package/README.md +43 -0
  6. package/favicon.ico +0 -0
  7. package/index.html +13 -0
  8. package/index.ts +1 -0
  9. package/jest.config.js +16 -0
  10. package/jest.setup.js +59 -0
  11. package/models.ts +1 -0
  12. package/package.json +109 -0
  13. package/src/App.vue +201 -0
  14. package/src/assets/globals.scss +253 -0
  15. package/src/assets/globalsKeys.ts +28 -0
  16. package/src/components/DlAccordion/AccordionHeader.vue +148 -0
  17. package/src/components/DlAccordion/DlAccordion.vue +108 -0
  18. package/src/components/DlAccordion/index.ts +2 -0
  19. package/src/components/DlAlert.vue +227 -0
  20. package/src/components/DlAvatar.vue +99 -0
  21. package/src/components/DlBadge.vue +127 -0
  22. package/src/components/DlButton/DlButton.vue +370 -0
  23. package/src/components/DlButton/index.ts +4 -0
  24. package/src/components/DlButton/utils.ts +169 -0
  25. package/src/components/DlButtonGroup.vue +122 -0
  26. package/src/components/DlCheckbox.vue +298 -0
  27. package/src/components/DlChip/DlChip.vue +244 -0
  28. package/src/components/DlChip/index.ts +4 -0
  29. package/src/components/DlChip/utils.ts +100 -0
  30. package/src/components/DlColorPicker/DlAlpha.vue +142 -0
  31. package/src/components/DlColorPicker/DlBox.vue +75 -0
  32. package/src/components/DlColorPicker/DlColorPicker.vue +306 -0
  33. package/src/components/DlColorPicker/DlColors.vue +139 -0
  34. package/src/components/DlColorPicker/DlHue.vue +135 -0
  35. package/src/components/DlColorPicker/DlPreview.vue +61 -0
  36. package/src/components/DlColorPicker/DlSaturation.vue +152 -0
  37. package/src/components/DlColorPicker/constants.ts +16 -0
  38. package/src/components/DlColorPicker/index.ts +20 -0
  39. package/src/components/DlColorPicker/types.ts +11 -0
  40. package/src/components/DlColorPicker/utils.ts +128 -0
  41. package/src/components/DlCounters.vue +173 -0
  42. package/src/components/DlDatePicker/DlCalendar.vue +332 -0
  43. package/src/components/DlDatePicker/DlDatePicker.vue +315 -0
  44. package/src/components/DlDatePicker/DlMonthCalendar.vue +282 -0
  45. package/src/components/DlDatePicker/classes/Calendar.ts +110 -0
  46. package/src/components/DlDatePicker/classes/CalendarDate.ts +12 -0
  47. package/src/components/DlDatePicker/classes/CustomDate.ts +218 -0
  48. package/src/components/DlDatePicker/index.ts +3 -0
  49. package/src/components/DlDatePicker/isInRange.ts +44 -0
  50. package/src/components/DlDatePicker/types.ts +4 -0
  51. package/src/components/DlDatePicker/utils.ts +39 -0
  52. package/src/components/DlDateTimeRange/DlCardSidebar.vue +109 -0
  53. package/src/components/DlDateTimeRange/DlDateInput.vue +105 -0
  54. package/src/components/DlDateTimeRange/DlDateTimeRange.vue +468 -0
  55. package/src/components/DlDateTimeRange/index.ts +3 -0
  56. package/src/components/DlDateTimeRange/types.ts +42 -0
  57. package/src/components/DlDialogBox/DlDialogBox.vue +196 -0
  58. package/src/components/DlDialogBox/DlDialogBoxFooter.vue +22 -0
  59. package/src/components/DlDialogBox/DlDialogBoxHeader.vue +75 -0
  60. package/src/components/DlDialogBox/index.ts +5 -0
  61. package/src/components/DlDropdownButton.vue +463 -0
  62. package/src/components/DlIcon.vue +147 -0
  63. package/src/components/DlInfoErrorMessage.vue +91 -0
  64. package/src/components/DlItem/DlItem.vue +35 -0
  65. package/src/components/DlItem/index.ts +2 -0
  66. package/src/components/DlItemSection.vue +88 -0
  67. package/src/components/DlLink/DlLink.vue +76 -0
  68. package/src/components/DlLink/index.ts +4 -0
  69. package/src/components/DlLink/utils.ts +4 -0
  70. package/src/components/DlList.vue +61 -0
  71. package/src/components/DlListItem/DlListItem.vue +205 -0
  72. package/src/components/DlListItem/index.ts +3 -0
  73. package/src/components/DlListItem/utils.ts +14 -0
  74. package/src/components/DlMenu/DlMenu.vue +438 -0
  75. package/src/components/DlMenu/index.ts +3 -0
  76. package/src/components/DlMenu/utils.ts +138 -0
  77. package/src/components/DlOptionGroup/DlOptionGroup.vue +201 -0
  78. package/src/components/DlOptionGroup/MenuItemWrapper.vue +48 -0
  79. package/src/components/DlOptionGroup/OptionGroup.types.ts +36 -0
  80. package/src/components/DlOptionGroup/SimpleWrapper.vue +28 -0
  81. package/src/components/DlOptionGroup/index.ts +4 -0
  82. package/src/components/DlOptionGroup/utils.ts +40 -0
  83. package/src/components/DlPagination/DlPagination.vue +184 -0
  84. package/src/components/DlPagination/PageNavigation.vue +350 -0
  85. package/src/components/DlPagination/PaginationLegend.vue +41 -0
  86. package/src/components/DlPagination/QuickNavigation.vue +146 -0
  87. package/src/components/DlPagination/RowsSelector.vue +74 -0
  88. package/src/components/DlPagination/index.ts +3 -0
  89. package/src/components/DlPanelContainer/DlPanel.vue +213 -0
  90. package/src/components/DlPanelContainer/DlPanelContainer.vue +527 -0
  91. package/src/components/DlPanelContainer/index.ts +4 -0
  92. package/src/components/DlPopup/DlPopup.vue +478 -0
  93. package/src/components/DlPopup/DraggableUpper.vue +64 -0
  94. package/src/components/DlPopup/PopupHeader.vue +129 -0
  95. package/src/components/DlPopup/index.ts +1 -0
  96. package/src/components/DlProgressBar.vue +159 -0
  97. package/src/components/DlProgressChart.vue +299 -0
  98. package/src/components/DlRadio.vue +218 -0
  99. package/src/components/DlRange/DlRange.vue +439 -0
  100. package/src/components/DlRange/utils.ts +209 -0
  101. package/src/components/DlSearch.vue +155 -0
  102. package/src/components/DlSelect/DlSelect.vue +992 -0
  103. package/src/components/DlSelect/SelectOption.vue +261 -0
  104. package/src/components/DlSelect/index.ts +4 -0
  105. package/src/components/DlSelect/utils.ts +43 -0
  106. package/src/components/DlSkeleton.vue +72 -0
  107. package/src/components/DlSlider/DlSlider.vue +243 -0
  108. package/src/components/DlSlider/components/DlSliderBase.vue +380 -0
  109. package/src/components/DlSlider/components/DlSliderInput.vue +123 -0
  110. package/src/components/DlSlider/components/index.ts +4 -0
  111. package/src/components/DlSlider/index.ts +3 -0
  112. package/src/components/DlSlider/sliderStyles.scss +109 -0
  113. package/src/components/DlSlider/useSlider.ts +277 -0
  114. package/src/components/DlSlider/utils.ts +7 -0
  115. package/src/components/DlSmartSearch/DlJsonEditor.vue +309 -0
  116. package/src/components/DlSmartSearch/DlSmartSearch.vue +333 -0
  117. package/src/components/DlSmartSearch/DlSmartSearchInput.vue +741 -0
  118. package/src/components/DlSmartSearch/DlSuggestionsDropdown.vue +73 -0
  119. package/src/components/DlSmartSearch/highlightSyntax.ts +169 -0
  120. package/src/components/DlSmartSearch/index.ts +4 -0
  121. package/src/components/DlSmartSearch/types.ts +36 -0
  122. package/src/components/DlSmartSearch/utils.ts +45 -0
  123. package/src/components/DlStepper/DlStepper.vue +196 -0
  124. package/src/components/DlStepper/DlStepperContainer.vue +55 -0
  125. package/src/components/DlStepper/DlStepperContent.vue +101 -0
  126. package/src/components/DlStepper/DlStepperFooter.vue +133 -0
  127. package/src/components/DlStepper/DlStepperHeader.vue +49 -0
  128. package/src/components/DlStepper/DlStepperSidebar.vue +167 -0
  129. package/src/components/DlStepper/Step.ts +101 -0
  130. package/src/components/DlStepper/Stepper.ts +107 -0
  131. package/src/components/DlStepper/index.ts +7 -0
  132. package/src/components/DlStepper/interfaces.ts +11 -0
  133. package/src/components/DlSwitch.vue +280 -0
  134. package/src/components/DlTabPanels/DlTabPanel.vue +22 -0
  135. package/src/components/DlTabPanels/DlTabPanels.vue +41 -0
  136. package/src/components/DlTabPanels/index.ts +4 -0
  137. package/src/components/DlTabPanels/utils.ts +19 -0
  138. package/src/components/DlTable/DlTable.vue +1264 -0
  139. package/src/components/DlTable/DlTd.vue +109 -0
  140. package/src/components/DlTable/DlTh.vue +126 -0
  141. package/src/components/DlTable/DlTr.vue +44 -0
  142. package/src/components/DlTable/ResizableManager.ts +233 -0
  143. package/src/components/DlTable/dl-table-styles.scss +466 -0
  144. package/src/components/DlTable/hooks/tableActions.ts +64 -0
  145. package/src/components/DlTable/hooks/tableColumnSelection.ts +112 -0
  146. package/src/components/DlTable/hooks/tableFilter.ts +42 -0
  147. package/src/components/DlTable/hooks/tablePagination.ts +197 -0
  148. package/src/components/DlTable/hooks/tableRowExpand.ts +55 -0
  149. package/src/components/DlTable/hooks/tableRowSelection.ts +106 -0
  150. package/src/components/DlTable/hooks/tableSort.ts +125 -0
  151. package/src/components/DlTable/index.ts +6 -0
  152. package/src/components/DlTable/types.ts +96 -0
  153. package/src/components/DlTabs/DlTab.vue +146 -0
  154. package/src/components/DlTabs/DlTabs.vue +192 -0
  155. package/src/components/DlTabs/TabsWrapper.vue +104 -0
  156. package/src/components/DlTabs/index.ts +4 -0
  157. package/src/components/DlTabs/types.ts +8 -0
  158. package/src/components/DlTextArea.vue +151 -0
  159. package/src/components/DlTextHolder.vue +65 -0
  160. package/src/components/DlTextInput.vue +753 -0
  161. package/src/components/DlThemeProvider.vue +41 -0
  162. package/src/components/DlTimePicker/DlTimeCounter.vue +81 -0
  163. package/src/components/DlTimePicker/DlTimePicker.vue +151 -0
  164. package/src/components/DlTimePicker/DlTimePickerInput.vue +311 -0
  165. package/src/components/DlTimePicker/index.ts +3 -0
  166. package/src/components/DlTimePicker/types.ts +4 -0
  167. package/src/components/DlTooltip.vue +456 -0
  168. package/src/components/DlTrend.vue +97 -0
  169. package/src/components/DlTypography.vue +87 -0
  170. package/src/components/DlVirtualScroll/DlVirtualScroll.vue +290 -0
  171. package/src/components/DlVirtualScroll/index.ts +3 -0
  172. package/src/components/DlVirtualScroll/useVirtualScroll.ts +833 -0
  173. package/src/components/DlWidget/DlWidget.vue +50 -0
  174. package/src/components/DlWidget/DlWidgetGrid.vue +360 -0
  175. package/src/components/DlWidget/index.ts +4 -0
  176. package/src/components/DlWidget/types.ts +6 -0
  177. package/src/components/DlWidget/utils.ts +30 -0
  178. package/src/components/index.ts +118 -0
  179. package/src/demo/DlAccordionDemo.vue +60 -0
  180. package/src/demo/DlAlertDemo.vue +54 -0
  181. package/src/demo/DlAvatarDemo.vue +43 -0
  182. package/src/demo/DlBadgeDemo.vue +65 -0
  183. package/src/demo/DlButtonDemo.vue +266 -0
  184. package/src/demo/DlCheckboxDemo.vue +50 -0
  185. package/src/demo/DlChipDemo.vue +181 -0
  186. package/src/demo/DlColorPickerDemo.vue +43 -0
  187. package/src/demo/DlCounterDemo.vue +53 -0
  188. package/src/demo/DlDateTimeRangeDemo.vue +217 -0
  189. package/src/demo/DlDialogBoxDemo.vue +175 -0
  190. package/src/demo/DlDropdownButtonDemo.vue +260 -0
  191. package/src/demo/DlIconDemo.vue +47 -0
  192. package/src/demo/DlLinkDemo.vue +23 -0
  193. package/src/demo/DlListDemo.vue +177 -0
  194. package/src/demo/DlMenuDemo.vue +524 -0
  195. package/src/demo/DlOptionGroupDemo.vue +79 -0
  196. package/src/demo/DlPaginationDemo.vue +44 -0
  197. package/src/demo/DlPanelContainerDemo.vue +221 -0
  198. package/src/demo/DlPopupDemo.vue +58 -0
  199. package/src/demo/DlProgressBarDemo.vue +22 -0
  200. package/src/demo/DlProgressChartDemo.vue +71 -0
  201. package/src/demo/DlRadioDemo.vue +35 -0
  202. package/src/demo/DlRangeDemo.vue +44 -0
  203. package/src/demo/DlSearchDemo.vue +27 -0
  204. package/src/demo/DlSelectDemo.vue +355 -0
  205. package/src/demo/DlSkeletonDemo.vue +20 -0
  206. package/src/demo/DlSliderDemo.vue +47 -0
  207. package/src/demo/DlStepperDemo/CenteredStepperInDialogBox.vue +260 -0
  208. package/src/demo/DlStepperDemo/SimpleStepper.vue +202 -0
  209. package/src/demo/DlStepperDemo/StepperInDialogBox.vue +261 -0
  210. package/src/demo/DlStepperDemo/index.ts +5 -0
  211. package/src/demo/DlStepperDemo/steps/AssignmentsStep.vue +97 -0
  212. package/src/demo/DlStepperDemo/steps/DataStep.vue +158 -0
  213. package/src/demo/DlStepperDemo/steps/GeneralStep.vue +106 -0
  214. package/src/demo/DlStepperDemo/steps/InstructionStep.vue +176 -0
  215. package/src/demo/DlStepperDemo/steps/QualityStep.vue +65 -0
  216. package/src/demo/DlSwitchDemo.vue +49 -0
  217. package/src/demo/DlTableDemo.vue +475 -0
  218. package/src/demo/DlTabsDemo.vue +67 -0
  219. package/src/demo/DlTdDemo.vue +19 -0
  220. package/src/demo/DlTextAreaDemo.vue +37 -0
  221. package/src/demo/DlTextHolderDemo.vue +42 -0
  222. package/src/demo/DlTextInputDemo.vue +89 -0
  223. package/src/demo/DlThDemo.vue +32 -0
  224. package/src/demo/DlTooltipDemo.vue +60 -0
  225. package/src/demo/DlTrDemo.vue +18 -0
  226. package/src/demo/DlTrendDemo.vue +25 -0
  227. package/src/demo/DlTypographyDemo.vue +93 -0
  228. package/src/demo/DlWidgetDemo.vue +157 -0
  229. package/src/demo/SmartSearchDemo/DlSmartSearchDemo.vue +202 -0
  230. package/src/demo/SmartSearchDemo/schema.ts +44 -0
  231. package/src/demo/index.ts +141 -0
  232. package/src/directives/TouchPan.ts +525 -0
  233. package/src/env.d.ts +8 -0
  234. package/src/hooks/use-anchor.ts +223 -0
  235. package/src/hooks/use-model-toggle.ts +181 -0
  236. package/src/hooks/use-portal.ts +104 -0
  237. package/src/hooks/use-scroll-target.ts +53 -0
  238. package/src/hooks/use-size-observer.ts +24 -0
  239. package/src/hooks/use-suggestions.ts +355 -0
  240. package/src/hooks/use-tick.ts +32 -0
  241. package/src/hooks/use-timeout.ts +20 -0
  242. package/src/hooks/use-transition.ts +32 -0
  243. package/src/hooks/use-window-size.ts +25 -0
  244. package/src/hooks/useForm.ts +12 -0
  245. package/src/index.ts +7 -0
  246. package/src/main.ts +4 -0
  247. package/src/models.ts +4 -0
  248. package/src/types.ts +6 -0
  249. package/src/utils/calcs.ts +18 -0
  250. package/src/utils/click-outside.ts +108 -0
  251. package/src/utils/component-name-parser.ts +1 -0
  252. package/src/utils/css-color-names.ts +150 -0
  253. package/src/utils/dom.ts +55 -0
  254. package/src/utils/draggable-table.ts +416 -0
  255. package/src/utils/escape-key.ts +54 -0
  256. package/src/utils/events.ts +67 -0
  257. package/src/utils/focus-manager.ts +33 -0
  258. package/src/utils/focusout.ts +29 -0
  259. package/src/utils/format.ts +3 -0
  260. package/src/utils/getColor.ts +17 -0
  261. package/src/utils/getLighterGradient.ts +36 -0
  262. package/src/utils/getRootStyles.ts +52 -0
  263. package/src/utils/global-config.ts +6 -0
  264. package/src/utils/global-nodes.ts +42 -0
  265. package/src/utils/includes.ts +3 -0
  266. package/src/utils/index.ts +29 -0
  267. package/src/utils/inject-object-prop.ts +21 -0
  268. package/src/utils/input-sizes.ts +7 -0
  269. package/src/utils/is-ellipsis-active.ts +3 -0
  270. package/src/utils/is-in-viewport.ts +13 -0
  271. package/src/utils/is.ts +15 -0
  272. package/src/utils/key-composition.ts +17 -0
  273. package/src/utils/keyCodes.ts +12 -0
  274. package/src/utils/logger/ConsoleLogger.ts +65 -0
  275. package/src/utils/logger/ILogger.ts +8 -0
  276. package/src/utils/logger/index.ts +8 -0
  277. package/src/utils/nav-keys-constants.ts +1 -0
  278. package/src/utils/portal.ts +55 -0
  279. package/src/utils/position-engine.ts +381 -0
  280. package/src/utils/render.ts +36 -0
  281. package/src/utils/ripple.ts +7 -0
  282. package/src/utils/scroll.ts +73 -0
  283. package/src/utils/selection.ts +15 -0
  284. package/src/utils/sort.ts +7 -0
  285. package/src/utils/splitByQuotes.ts +32 -0
  286. package/src/utils/string.ts +6 -0
  287. package/src/utils/teleport.ts +14 -0
  288. package/src/utils/theme.ts +2 -0
  289. package/src/utils/vm.ts +16 -0
  290. package/storybook.js +8 -0
  291. package/tsconfig.json +44 -0
  292. package/tsconfig.node.json +8 -0
  293. package/types.ts +1 -0
  294. package/vite.config.ts +13 -0
@@ -0,0 +1,201 @@
1
+ <template>
2
+ <div
3
+ :id="uuid"
4
+ :class="{ 'option-group-wrapper': true, column: !inline }"
5
+ :style="cssVars"
6
+ >
7
+ <component
8
+ :is="wrappers[isInMenu ? 'menuItem' : 'label']"
9
+ v-for="(option, index) in options"
10
+ :key="option.value"
11
+ class="option"
12
+ :left-label="leftLabel"
13
+ :for="individualProps[index].id"
14
+ data-test="item-wrapper"
15
+ :class="{ disabled: individualProps[index].disabled || disabled }"
16
+ >
17
+ <div
18
+ :for="individualProps[index].id"
19
+ style="display: inline-flex; gap: 5px"
20
+ >
21
+ <span>{{ option.label }}</span>
22
+ <span
23
+ v-if="!!option.tooltip && !!option.tooltip.length"
24
+ style="display: flex; align-items: center"
25
+ >
26
+ <dl-icon
27
+ icon="icon-dl-info"
28
+ class="tooltip-icon"
29
+ size="12px"
30
+ />
31
+ <dl-tooltip>
32
+ {{ option.tooltip }}
33
+ </dl-tooltip>
34
+ </span>
35
+ </div>
36
+ <component
37
+ :is="components[type]"
38
+ :id="individualProps[index].id"
39
+ v-bind="individualProps[index]"
40
+ :ref="`control-item-${index}`"
41
+ data-test="item-control-element"
42
+ :model-value="modelValue"
43
+ class="control-element"
44
+ :color="individualProps[index].color || color"
45
+ :disabled="individualProps[index].disabled || disabled"
46
+ :label="null"
47
+ @update:model-value="handleUpdate"
48
+ />
49
+ </component>
50
+ </div>
51
+ </template>
52
+
53
+ <script lang="ts">
54
+ import { defineComponent, PropType } from 'vue-demi'
55
+ import { components, typeValidator, optionsValidator, wrappers } from './utils'
56
+ import {
57
+ OptionGroupOptions,
58
+ OptionProps,
59
+ SelectedValue
60
+ } from './OptionGroup.types'
61
+ import { loggerFactory } from '../../utils'
62
+ import { v4 } from 'uuid'
63
+ import DlIcon from '../DlIcon.vue'
64
+ import DlTooltip from '../DlTooltip.vue'
65
+
66
+ export default defineComponent({
67
+ name: 'DlOptionGroup',
68
+ components: {
69
+ DlIcon,
70
+ DlTooltip
71
+ },
72
+ model: {
73
+ prop: 'modelValue',
74
+ event: 'update:model-value'
75
+ },
76
+ props: {
77
+ color: { type: String, default: 'dl-color-secondary' },
78
+ disabled: { type: Boolean, default: false },
79
+ inline: { type: Boolean, default: false },
80
+ leftLabel: { type: Boolean, default: false },
81
+ maxWidth: { type: String, default: '100%' },
82
+ options: {
83
+ type: Array as PropType<OptionGroupOptions>,
84
+ required: true,
85
+ validator: optionsValidator
86
+ },
87
+ type: { type: String, default: 'radio', validator: typeValidator },
88
+ modelValue: { type: [Array, String, Number, Boolean], required: true }
89
+ },
90
+ data() {
91
+ const logger = loggerFactory('DlOptionGroup')
92
+ return {
93
+ uuid: `dl-option-group-${v4()}`,
94
+ logger,
95
+ components,
96
+ wrappers
97
+ }
98
+ },
99
+ computed: {
100
+ individualProps(): (OptionProps & { id: string })[] {
101
+ return this.options.map((option) => {
102
+ const { value, label, ...rest } = option
103
+ return {
104
+ value,
105
+ id: `${v4()}`,
106
+ ...rest
107
+ }
108
+ })
109
+ },
110
+ isInMenu(): boolean {
111
+ return (
112
+ this.$parent?.$parent?.$options.name === 'DlMenu' ||
113
+ this.$parent?.$options.name === 'DlList'
114
+ )
115
+ },
116
+ cssVars(): Record<string, string> {
117
+ return {
118
+ '--option-flex-direction': this.leftLabel
119
+ ? 'row'
120
+ : 'row-reverse',
121
+ '--option-justify-content':
122
+ this.leftLabel && !this.inline
123
+ ? 'space-between'
124
+ : 'flex-end',
125
+ '--option-group-width':
126
+ this.leftLabel && !this.inline ? '100%' : 'auto',
127
+ '--option-group-max-width': this.maxWidth,
128
+ '--control-element-padding-left': this.leftLabel
129
+ ? '10px'
130
+ : this.inline
131
+ ? '12px'
132
+ : '0px',
133
+ '--control-element-padding-right': this.leftLabel
134
+ ? '0px'
135
+ : '10px'
136
+ }
137
+ }
138
+ },
139
+ watch: {
140
+ $props: {
141
+ immediate: true,
142
+ handler() {
143
+ this.validateProps()
144
+ }
145
+ }
146
+ },
147
+ methods: {
148
+ validateProps() {
149
+ if (this.type !== 'radio' && !Array.isArray(this.modelValue)) {
150
+ this.logger.error(
151
+ 'Option group with multiple choices should have an array of options as modelValue.'
152
+ )
153
+ }
154
+ },
155
+ handleUpdate(newValue: SelectedValue, e: Event) {
156
+ this.$emit('update:model-value', newValue, e)
157
+ }
158
+ },
159
+ template: 'dl-option-group'
160
+ })
161
+ </script>
162
+
163
+ <style scoped lang="scss">
164
+ .tooltip-icon {
165
+ color: var(--dl-color-medium);
166
+ display: flex !important;
167
+ align-self: center;
168
+ }
169
+ .option-group-wrapper {
170
+ display: inline-flex;
171
+ width: var(--option-group-width);
172
+ max-width: var(--option-group-max-width);
173
+ }
174
+ .option-group-wrapper.column {
175
+ flex-direction: column;
176
+ }
177
+
178
+ .option {
179
+ display: flex;
180
+ align-items: center;
181
+ flex-direction: var(--option-flex-direction);
182
+ justify-content: var(--option-justify-content);
183
+ font-size: var(--dl-font-size-body);
184
+ user-select: none;
185
+ height: 24px;
186
+ color: var(--dl-color-darker);
187
+ }
188
+
189
+ .disabled {
190
+ cursor: not-allowed;
191
+ & label {
192
+ cursor: not-allowed;
193
+ }
194
+ color: var(--dl-color-disabled);
195
+ }
196
+
197
+ .control-element {
198
+ padding-left: var(--control-element-padding-left);
199
+ padding-right: var(--control-element-padding-right);
200
+ }
201
+ </style>
@@ -0,0 +1,48 @@
1
+ <template>
2
+ <dl-list-item
3
+ as="label"
4
+ clickable
5
+ @click="emitClick"
6
+ >
7
+ <dl-item-section
8
+ class="menu-item-wrapper-section"
9
+ :class="{ 'left-label': leftLabel }"
10
+ >
11
+ <slot />
12
+ </dl-item-section>
13
+ </dl-list-item>
14
+ </template>
15
+
16
+ <script lang="ts">
17
+ import { defineComponent } from 'vue-demi'
18
+ import { DlListItem } from '../DlListItem'
19
+ import DlItemSection from '../DlItemSection.vue'
20
+
21
+ export default defineComponent({
22
+ name: 'DlMenuItemWrapper',
23
+ components: { DlListItem, DlItemSection },
24
+ props: {
25
+ leftLabel: Boolean
26
+ },
27
+ emits: ['click'],
28
+ methods: {
29
+ emitClick(e: Event) {
30
+ this.$emit('click', e)
31
+ }
32
+ }
33
+ })
34
+ </script>
35
+
36
+ <style scoped>
37
+ .menu-item-wrapper-section {
38
+ display: flex;
39
+ flex-direction: row-reverse;
40
+ justify-content: flex-start;
41
+ align-items: center;
42
+ }
43
+
44
+ .left-label {
45
+ justify-content: space-between;
46
+ flex-direction: row;
47
+ }
48
+ </style>
@@ -0,0 +1,36 @@
1
+ export type SelectedValue = number | string | boolean | null
2
+
3
+ interface GenericOption {
4
+ label: string
5
+ value: SelectedValue
6
+ disabled?: boolean
7
+ color?: string
8
+ tooltip?: string
9
+ }
10
+
11
+ export interface RadioOption extends GenericOption {
12
+ tabindex?: number | string
13
+ }
14
+
15
+ export interface CheckboxOption extends GenericOption {
16
+ tabindex?: number | string
17
+ 'toggle-indeterminate'?: boolean
18
+ 'true-value'?: any
19
+ 'false-value'?: any
20
+ }
21
+
22
+ export interface ToggleOption extends GenericOption {
23
+ icon?: string
24
+ }
25
+
26
+ export type OptionGroupOptions = (RadioOption | CheckboxOption | ToggleOption)[]
27
+
28
+ export interface OptionProps
29
+ extends Partial<RadioOption>,
30
+ Partial<CheckboxOption>,
31
+ Partial<ToggleOption> {
32
+ value?: SelectedValue
33
+ class?: string
34
+ rightLabel?: string
35
+ leftLabel?: string
36
+ }
@@ -0,0 +1,28 @@
1
+ <template>
2
+ <label
3
+ class="simple-option-group-item"
4
+ @click="emitClick"
5
+ >
6
+ <slot />
7
+ </label>
8
+ </template>
9
+
10
+ <script lang="ts">
11
+ import { defineComponent } from 'vue-demi'
12
+
13
+ export default defineComponent({
14
+ name: 'DlSimpleWrapper',
15
+ emits: ['click'],
16
+ methods: {
17
+ emitClick(e: Event) {
18
+ this.$emit('click', e)
19
+ }
20
+ }
21
+ })
22
+ </script>
23
+
24
+ <style scoped>
25
+ .simple-option-group-item {
26
+ white-space: nowrap;
27
+ }
28
+ </style>
@@ -0,0 +1,4 @@
1
+ import DlOptionGroup from './DlOptionGroup.vue'
2
+ export { DlOptionGroup }
3
+ export * from './utils'
4
+ export * from './OptionGroup.types'
@@ -0,0 +1,40 @@
1
+ import DlRadio from '../DlRadio.vue'
2
+ import DlSwitch from '../DlSwitch.vue'
3
+ import DlCheckbox from '../DlCheckbox.vue'
4
+
5
+ import { isVue3, shallowRef } from 'vue-demi'
6
+ import { OptionGroupOptions } from './OptionGroup.types'
7
+ import MenuItemWrapper from './MenuItemWrapper.vue'
8
+ import SimpleWrapper from './SimpleWrapper.vue'
9
+
10
+ export const components = isVue3
11
+ ? {
12
+ radio: shallowRef(DlRadio),
13
+ checkbox: shallowRef(DlCheckbox),
14
+ switch: shallowRef(DlSwitch)
15
+ // toggle: shallowRef(DlToggle),
16
+ }
17
+ : {
18
+ radio: () => import('../DlRadio.vue').then((d) => d.default),
19
+ checkbox: () => import('../DlCheckbox.vue').then((d) => d.default),
20
+ switch: () => import('../DlSwitch.vue').then((d) => d.default)
21
+ // toggle: () => import('../DlToggle.vue').then(d => d.default),
22
+ }
23
+ export const componentsType = Object.keys(components)
24
+
25
+ export const typeValidator = (type: string) => componentsType.includes(type)
26
+
27
+ export const optionsValidator = (opts: OptionGroupOptions) => {
28
+ return opts.every((opt) => 'value' in opt && 'label' in opt)
29
+ }
30
+
31
+ export const wrappers = isVue3
32
+ ? {
33
+ menuItem: shallowRef(MenuItemWrapper),
34
+ label: shallowRef(SimpleWrapper)
35
+ }
36
+ : {
37
+ menuItem: () =>
38
+ import('./MenuItemWrapper.vue').then((d) => d.default),
39
+ label: () => import('./SimpleWrapper.vue').then((d) => d.default)
40
+ }
@@ -0,0 +1,184 @@
1
+ <template>
2
+ <div
3
+ :id="uuid"
4
+ class="dl-pagination"
5
+ >
6
+ <div class="dl-pagination--container">
7
+ <rows-selector
8
+ v-if="withRowsPerPage"
9
+ v-model="rowsPerPageState"
10
+ :options="rowsPerPageOptions"
11
+ :items-name="itemsName"
12
+ :disabled="disabled"
13
+ />
14
+ <div class="dl-pagination--navigation">
15
+ <page-navigation
16
+ :model-value="value"
17
+ :min="min"
18
+ :max="max"
19
+ :max-pages="maxPages"
20
+ :disabled="disabled"
21
+ :boundary-numbers="boundaryNumbers"
22
+ :boundary-links="boundaryLinks"
23
+ :direction-links="directionLinks"
24
+ :color="color"
25
+ :active-color="activeColor"
26
+ :text-color="textColor"
27
+ :active-text-color="activeTextColor"
28
+ @update:modelValue="setValue"
29
+ />
30
+ <quick-navigation
31
+ v-if="withQuickNavigation"
32
+ :model-value="value"
33
+ :max="max"
34
+ :min="min"
35
+ :disabled="disabled"
36
+ @update:modelValue="setValue"
37
+ />
38
+ </div>
39
+ <pagination-legend
40
+ v-if="withLegend"
41
+ :from="rowFrom"
42
+ :to="rowTo"
43
+ :total="totalItems"
44
+ :items-name="itemsName"
45
+ />
46
+ </div>
47
+ </div>
48
+ </template>
49
+
50
+ <script lang="ts">
51
+ import { defineComponent, PropType } from 'vue-demi'
52
+ import RowsSelector from './RowsSelector.vue'
53
+ import PageNavigation from './PageNavigation.vue'
54
+ import QuickNavigation from './QuickNavigation.vue'
55
+ import PaginationLegend from './PaginationLegend.vue'
56
+ import { v4 } from 'uuid'
57
+
58
+ export default defineComponent({
59
+ name: 'DlPagination',
60
+ components: {
61
+ RowsSelector,
62
+ PageNavigation,
63
+ QuickNavigation,
64
+ PaginationLegend
65
+ },
66
+ model: {
67
+ prop: 'modelValue',
68
+ event: 'update:modelValue'
69
+ },
70
+ props: {
71
+ modelValue: {
72
+ type: Number,
73
+ default: 1
74
+ },
75
+ min: {
76
+ type: Number,
77
+ default: 1
78
+ },
79
+ maxPages: {
80
+ type: Number,
81
+ default: 0,
82
+ validator: (v: number) => v >= 0
83
+ },
84
+ rowsPerPage: {
85
+ type: Number,
86
+ default: 10
87
+ },
88
+ rowsPerPageOptions: {
89
+ type: Array as PropType<number[]>,
90
+ default: () => [10, 25, 50, 75, 100]
91
+ },
92
+ disabled: Boolean,
93
+ boundaryNumbers: Boolean,
94
+ boundaryLinks: Boolean,
95
+ directionLinks: Boolean,
96
+ color: {
97
+ type: String,
98
+ default: 'dl-color-bg'
99
+ },
100
+ textColor: {
101
+ type: String,
102
+ default: 'dl-color-darker'
103
+ },
104
+ activeColor: {
105
+ type: String,
106
+ default: 'dl-color-secondary'
107
+ },
108
+ activeTextColor: {
109
+ type: String,
110
+ default: 'dl-color-text-buttons'
111
+ },
112
+ totalItems: {
113
+ type: Number,
114
+ required: true
115
+ },
116
+ itemsName: {
117
+ type: String,
118
+ default: null
119
+ },
120
+ withQuickNavigation: Boolean,
121
+ withRowsPerPage: Boolean,
122
+ withLegend: Boolean
123
+ },
124
+ emits: ['update:modelValue', 'update:rowsPerPage'],
125
+ data() {
126
+ return {
127
+ uuid: `dl-pagination-${v4()}`,
128
+ value: this.modelValue,
129
+ rowsPerPageState: this.rowsPerPage
130
+ }
131
+ },
132
+ computed: {
133
+ rowFrom(): number {
134
+ return 1 + this.rowsPerPageState * (this.value - 1)
135
+ },
136
+ rowTo(): number {
137
+ const to = this.rowsPerPageState * this.value
138
+ return to > this.totalItems ? this.totalItems : to
139
+ },
140
+ max(): number {
141
+ return Math.ceil(this.totalItems / this.rowsPerPageState)
142
+ }
143
+ },
144
+ watch: {
145
+ modelValue(val: number) {
146
+ this.value = this.modelValue
147
+ },
148
+ rowsPerPageState(newVal: number) {
149
+ this.setValue(this.min)
150
+ this.$emit('update:rowsPerPage', newVal)
151
+ },
152
+ rowsPerPage(newVal: number) {
153
+ this.rowsPerPageState = newVal
154
+ }
155
+ },
156
+
157
+ methods: {
158
+ setValue(value: number) {
159
+ this.value = value
160
+ this.$emit('update:modelValue', value)
161
+ }
162
+ }
163
+ })
164
+ </script>
165
+
166
+ <style lang="scss" scoped>
167
+ .dl-pagination {
168
+ width: 100%;
169
+ height: 40px;
170
+ font-size: 12px;
171
+ font-weight: 400;
172
+
173
+ &--container {
174
+ height: 100%;
175
+ display: flex;
176
+ justify-content: space-between;
177
+ align-items: center;
178
+ }
179
+
180
+ &--navigation {
181
+ display: flex;
182
+ }
183
+ }
184
+ </style>