@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,350 @@
1
+ <template>
2
+ <div class="dl-pagination--page_navigation">
3
+ <button
4
+ v-if="boundaryLinks"
5
+ class="dl-pagination--nav_btn"
6
+ :disabled="disabled || isFirstPage"
7
+ :style="cssVars"
8
+ @click="setPage(min)"
9
+ >
10
+ <dl-icon
11
+ icon="icon-dl-first-page"
12
+ size="16px"
13
+ />
14
+ </button>
15
+ <button
16
+ v-if="directionLinks"
17
+ class="dl-pagination--nav_btn"
18
+ :disabled="disabled || isFirstPage"
19
+ :style="cssVars"
20
+ @click="setPage(value - 1)"
21
+ >
22
+ <dl-icon
23
+ icon="icon-dl-previous-page"
24
+ size="16px"
25
+ />
26
+ </button>
27
+ <div class="dl-pagination--page_btns_wrapper">
28
+ <button
29
+ v-if="boundaryNumbers"
30
+ class="dl-pagination--page_btn"
31
+ :style="isActivePage(min) ? activePageCssVars : cssVars"
32
+ :disabled="disabled"
33
+ @click="setPage(min)"
34
+ >
35
+ {{ min }}
36
+ </button>
37
+ <button
38
+ v-if="ellipsesStart"
39
+ class="dl-pagination--page_btn"
40
+ :style="cssVars"
41
+ :disabled="disabled"
42
+ @click="setPage(pgFrom - 1)"
43
+ >
44
+ ...
45
+ </button>
46
+ <template v-if="pages.length > 0">
47
+ <button
48
+ v-for="page in pages"
49
+ :key="page"
50
+ class="dl-pagination--page_btn"
51
+ :class="{ active: isActivePage(page) }"
52
+ :style="isActivePage(page) ? activePageCssVars : cssVars"
53
+ :disabled="disabled"
54
+ @click="setPage(page)"
55
+ >
56
+ {{ page }}
57
+ </button>
58
+ </template>
59
+ <button
60
+ v-if="ellipsesEnd"
61
+ class="dl-pagination--page_btn"
62
+ :style="cssVars"
63
+ :disabled="disabled"
64
+ @click="setPage(pgTo + 1)"
65
+ >
66
+ ...
67
+ </button>
68
+ <button
69
+ v-if="boundaryNumbers && min !== max"
70
+ class="dl-pagination--page_btn"
71
+ :style="isActivePage(max) ? activePageCssVars : cssVars"
72
+ :disabled="disabled"
73
+ @click="setPage(max)"
74
+ >
75
+ {{ max }}
76
+ </button>
77
+ </div>
78
+ <button
79
+ v-if="directionLinks"
80
+ class="dl-pagination--nav_btn"
81
+ :disabled="disabled || isLastPage"
82
+ :style="cssVars"
83
+ @click="setPage(value + 1)"
84
+ >
85
+ <dl-icon
86
+ icon="icon-dl-right-next-page"
87
+ size="16px"
88
+ />
89
+ </button>
90
+ <button
91
+ v-if="boundaryLinks"
92
+ class="dl-pagination--nav_btn"
93
+ :disabled="disabled || isLastPage"
94
+ :style="cssVars"
95
+ @click="setPage(max)"
96
+ >
97
+ <dl-icon
98
+ icon="icon-dl-last-page"
99
+ size="16px"
100
+ />
101
+ </button>
102
+ </div>
103
+ </template>
104
+
105
+ <script lang="ts">
106
+ import { defineComponent } from 'vue-demi'
107
+ import { getColor } from '../../utils'
108
+ import DlIcon from '../DlIcon.vue'
109
+
110
+ export default defineComponent({
111
+ name: 'PageNavigation',
112
+ components: {
113
+ DlIcon
114
+ },
115
+ model: {
116
+ prop: 'modelValue',
117
+ event: 'update:modelValue'
118
+ },
119
+ props: {
120
+ modelValue: {
121
+ type: Number,
122
+ default: 1
123
+ },
124
+ min: {
125
+ type: Number,
126
+ default: 1,
127
+ validator: (v: number) => v >= 1
128
+ },
129
+ max: {
130
+ type: Number,
131
+ required: true
132
+ },
133
+ maxPages: {
134
+ type: Number,
135
+ default: 0,
136
+ validator: (v: number) => v >= 0
137
+ },
138
+ disabled: Boolean,
139
+ boundaryNumbers: Boolean,
140
+ boundaryLinks: Boolean,
141
+ directionLinks: Boolean,
142
+ color: {
143
+ type: String,
144
+ default: 'dl-color-bg'
145
+ },
146
+ textColor: {
147
+ type: String,
148
+ default: 'dl-color-darker'
149
+ },
150
+ activeColor: {
151
+ type: String,
152
+ default: 'dl-color-secondary'
153
+ },
154
+ activeTextColor: {
155
+ type: String,
156
+ default: 'dl-color-text-buttons'
157
+ }
158
+ },
159
+ emits: ['update:modelValue'],
160
+ data() {
161
+ return {
162
+ value: this.modelValue,
163
+ pgFrom: this.min,
164
+ pgTo: this.max,
165
+ ellipsesStart: false,
166
+ ellipsesEnd: false
167
+ }
168
+ },
169
+ computed: {
170
+ isFirstPage(): boolean {
171
+ return this.value === this.min
172
+ },
173
+ isLastPage(): boolean {
174
+ return this.value === this.max
175
+ },
176
+ btnMinWidth(): string {
177
+ return `${Math.max(2, String(this.max).length)}em`
178
+ },
179
+ cssVars(): Record<string, any> {
180
+ return {
181
+ '--dl-page-bg-color': getColor(this.color, 'dl-color-bg'),
182
+ '--dl-page-text-color': getColor(
183
+ this.textColor,
184
+ 'dl-color-darker'
185
+ ),
186
+ '--dl-btn-min-width': this.btnMinWidth
187
+ }
188
+ },
189
+ activePageCssVars(): Record<string, any> {
190
+ return {
191
+ '--dl-page-bg-color': getColor(
192
+ this.activeColor,
193
+ 'dl-color-secondary'
194
+ ),
195
+ '--dl-page-text-color': getColor(
196
+ this.activeTextColor,
197
+ 'dl-color-text-buttons'
198
+ ),
199
+ '--dl-btn-min-width': this.btnMinWidth
200
+ }
201
+ },
202
+ pages(): number[] {
203
+ const pages: number[] = []
204
+
205
+ for (let i = this.pgFrom; i <= this.pgTo; i++) {
206
+ pages.push(i)
207
+ }
208
+
209
+ return pages
210
+ }
211
+ },
212
+ watch: {
213
+ value() {
214
+ this.updateState()
215
+ },
216
+ max() {
217
+ this.updateState()
218
+ },
219
+ modelValue() {
220
+ this.value = this.modelValue
221
+ }
222
+ },
223
+ beforeMount() {
224
+ this.updateState()
225
+ },
226
+ methods: {
227
+ isActivePage(page: number): boolean {
228
+ return page === this.value
229
+ },
230
+ set(value: number) {
231
+ this.value = value
232
+ },
233
+ setByOffset(offset: number) {
234
+ this.value = this.value + offset
235
+ },
236
+ setPage(value: number) {
237
+ this.set(value)
238
+ this.$emit('update:modelValue', value)
239
+ },
240
+ updateState() {
241
+ this.ellipsesStart = false
242
+ this.ellipsesEnd = false
243
+
244
+ let maxPages = Math.max(
245
+ this.maxPages,
246
+ 3 + (this.boundaryNumbers ? 2 : 0)
247
+ )
248
+
249
+ this.pgFrom = this.boundaryNumbers ? this.min + 1 : this.min
250
+ this.pgTo = this.boundaryNumbers ? this.max - 1 : this.max
251
+
252
+ if (this.maxPages && maxPages < this.max - this.min + 1) {
253
+ maxPages = 1 + Math.floor(maxPages / 2) * 2
254
+
255
+ this.pgFrom = Math.max(
256
+ this.min,
257
+ Math.min(
258
+ this.max - maxPages + 1,
259
+ this.value - Math.floor(maxPages / 2)
260
+ )
261
+ )
262
+
263
+ this.pgTo = Math.min(this.max, this.pgFrom + maxPages - 1)
264
+
265
+ if (this.boundaryNumbers) {
266
+ this.pgFrom += 1
267
+ this.pgTo -= 1
268
+ }
269
+
270
+ if (this.pgFrom > this.min + (this.boundaryNumbers ? 1 : 0)) {
271
+ this.pgFrom += 1
272
+ this.ellipsesStart = true
273
+ }
274
+
275
+ if (this.pgTo < this.max - (this.boundaryNumbers ? 1 : 0)) {
276
+ this.pgTo -= 1
277
+ this.ellipsesEnd = true
278
+ }
279
+ }
280
+ }
281
+ }
282
+ })
283
+ </script>
284
+
285
+ <style scoped lang="scss">
286
+ .dl-pagination {
287
+ &--page_navigation {
288
+ display: flex;
289
+ align-items: center;
290
+ justify-content: center;
291
+ padding: 0 16px;
292
+ }
293
+
294
+ &--page_btns_wrapper {
295
+ display: flex;
296
+ padding-left: 10px;
297
+ padding-right: 10px;
298
+ }
299
+
300
+ &--page_btn {
301
+ text-align: center;
302
+ width: 20px;
303
+ height: 20px;
304
+ font-size: 12px;
305
+ line-height: 14px;
306
+ font-weight: 400;
307
+ white-space: nowrap;
308
+ overflow: hidden;
309
+ text-overflow: ellipsis;
310
+ }
311
+
312
+ &--page_btn,
313
+ &--nav_btn {
314
+ min-width: var(--dl-btn-min-width);
315
+ padding: 0;
316
+ cursor: pointer;
317
+ border: none;
318
+ border-radius: 2px;
319
+ color: var(--dl-page-text-color);
320
+ background-color: var(--dl-page-bg-color);
321
+
322
+ &:active:not(:disabled) {
323
+ background-color: var(--dl-color-secondary);
324
+ color: var(--dl-color-text-buttons);
325
+
326
+ ::v-deep .dl-icon {
327
+ color: var(--dl-color-text-buttons);
328
+ }
329
+ }
330
+
331
+ &:disabled {
332
+ color: var(--dl-color-disabled);
333
+ cursor: default;
334
+
335
+ ::v-deep .dl-icon {
336
+ color: var(--dl-color-disabled);
337
+ }
338
+ }
339
+
340
+ &:hover:not(:disabled):not(.active) {
341
+ background-color: var(--dl-color-hover);
342
+ color: var(--dl-color-text-buttons);
343
+
344
+ ::v-deep .dl-icon {
345
+ color: var(--dl-color-text-buttons);
346
+ }
347
+ }
348
+ }
349
+ }
350
+ </style>
@@ -0,0 +1,41 @@
1
+ <template>
2
+ <div class="dl-pagination--legend">
3
+ <span>Showing {{ from }}-{{ to
4
+ }}<span v-if="total"> of {{ total }} {{ itemsName }} </span></span>
5
+ </div>
6
+ </template>
7
+
8
+ <script lang="ts">
9
+ import { defineComponent } from 'vue-demi'
10
+
11
+ export default defineComponent({
12
+ name: 'PaginationLegend',
13
+ props: {
14
+ from: {
15
+ type: Number,
16
+ required: true
17
+ },
18
+ to: {
19
+ type: Number,
20
+ required: true
21
+ },
22
+ total: {
23
+ type: Number,
24
+ default: null
25
+ },
26
+ itemsName: {
27
+ type: String,
28
+ default: 'rows'
29
+ }
30
+ }
31
+ })
32
+ </script>
33
+
34
+ <style scoped lang="scss">
35
+ .dl-pagination--legend {
36
+ justify-content: flex-end;
37
+ display: flex;
38
+ color: var(--dl-color-lighter);
39
+ margin-left: 16px;
40
+ }
41
+ </style>
@@ -0,0 +1,146 @@
1
+ <template>
2
+ <div class="dl-pagination--quick_navigation">
3
+ <dl-typography> Go to page </dl-typography>
4
+ <input
5
+ v-model="inputValue"
6
+ type="number"
7
+ class="dl-pagination--navigation_input"
8
+ :max="max"
9
+ :min="min"
10
+ :disabled="disabled"
11
+ @keydown="handleKeyDown"
12
+ @keyup="handleKeyUp"
13
+ >
14
+ <dl-button
15
+ size="s"
16
+ flat
17
+ class="dl-pagination--quick_nav_button"
18
+ :disabled="disabled"
19
+ @click="handleNavigation"
20
+ >
21
+ Go
22
+ </dl-button>
23
+ </div>
24
+ </template>
25
+
26
+ <script lang="ts">
27
+ import { defineComponent } from 'vue-demi'
28
+ import DlTypography from '../DlTypography.vue'
29
+ import { DlButton } from '../DlButton'
30
+ import { stopAndPrevent } from '../../utils'
31
+ import { admissibleKeys } from '../../utils/nav-keys-constants'
32
+
33
+ export default defineComponent({
34
+ name: 'QuickNavigation',
35
+ components: {
36
+ DlTypography,
37
+ DlButton
38
+ },
39
+ model: {
40
+ prop: 'modelValue',
41
+ event: 'update:modelValue'
42
+ },
43
+ props: {
44
+ modelValue: { type: Number, required: true },
45
+ min: { type: Number, required: true },
46
+ max: { type: Number, required: true },
47
+ disabled: Boolean
48
+ },
49
+ emits: ['update:modelValue'],
50
+ data() {
51
+ return {
52
+ inputValue: this.modelValue.toString(),
53
+ lastValue: ''
54
+ }
55
+ },
56
+ watch: {
57
+ modelValue() {
58
+ this.inputValue = this.modelValue.toString()
59
+ }
60
+ },
61
+ methods: {
62
+ handleNavigation() {
63
+ const numericValue = Number(this.inputValue)
64
+
65
+ if (numericValue < this.min) {
66
+ this.inputValue = this.min.toString()
67
+ }
68
+
69
+ if (numericValue > this.max) {
70
+ this.inputValue = this.max.toString()
71
+ }
72
+
73
+ this.$emit('update:modelValue', Number(this.inputValue))
74
+ },
75
+ handleKeyDown(e: KeyboardEvent) {
76
+ if (
77
+ (Number.isNaN(Number(e.key)) &&
78
+ !admissibleKeys.includes(e.key)) ||
79
+ e.key === ' '
80
+ ) {
81
+ stopAndPrevent(e)
82
+ }
83
+ },
84
+ handleKeyUp(e: KeyboardEvent) {
85
+ if (e.key === 'Enter' || e.key === ' ') {
86
+ this.handleNavigation()
87
+ }
88
+ }
89
+ }
90
+ })
91
+ </script>
92
+
93
+ <style scoped lang="scss">
94
+ .dl-pagination {
95
+ &--quick_navigation {
96
+ display: flex;
97
+ align-items: center;
98
+ color: var(--dl-color-darker);
99
+ padding-right: 16px;
100
+ & p {
101
+ padding-right: 4px;
102
+ }
103
+ }
104
+ &--navigation_input {
105
+ border: 1px solid var(--dl-color-separator);
106
+ border-radius: 2px;
107
+ color: var(--dl-color-darker);
108
+ outline: none;
109
+ background: none;
110
+ padding-top: 3px;
111
+ padding-bottom: 3px;
112
+ padding-left: 5px;
113
+ padding-right: 5px;
114
+ font-size: 10px;
115
+ &::-webkit-outer-spin-button,
116
+ &::-webkit-inner-spin-button {
117
+ -webkit-appearance: none;
118
+ margin: 0;
119
+ }
120
+ &:hover {
121
+ border-color: var(--dl-color-hover);
122
+ }
123
+
124
+ &:focus {
125
+ border-color: var(--dl-color-secondary);
126
+ }
127
+
128
+ &:disabled {
129
+ border-color: var(--dl-color-disabled);
130
+ color: var(--dl-color-disabled);
131
+ cursor: not-allowed;
132
+
133
+ &:hover {
134
+ border-color: var(--dl-color-disabled);
135
+ }
136
+ }
137
+ max-width: 30px; // 40px - 10px (paddings)
138
+ -moz-appearance: textfield;
139
+ }
140
+ }
141
+
142
+ ::v-deep .dl-button {
143
+ padding: 4px 5px;
144
+ text-transform: uppercase;
145
+ }
146
+ </style>
@@ -0,0 +1,74 @@
1
+ <template>
2
+ <div class="dl-pagination--rows_selector">
3
+ <span class="dl-pagination--rows_per_page_label">{{ itemsName }} per page:</span>
4
+ <dl-select
5
+ size="s"
6
+ :options="options"
7
+ :disabled="disabled"
8
+ :fit="false"
9
+ width="min-content"
10
+ align-right
11
+ disable-dropdown-icon-padding
12
+ without-borders
13
+ :model-value="modelValue"
14
+ @update:model-value="setSelectedItem"
15
+ />
16
+ </div>
17
+ </template>
18
+
19
+ <script lang="ts">
20
+ import { defineComponent, PropType } from 'vue-demi'
21
+ import { DlSelect } from '../DlSelect'
22
+
23
+ export default defineComponent({
24
+ name: 'RowsSelector',
25
+ components: {
26
+ DlSelect
27
+ },
28
+ model: {
29
+ prop: 'modelValue',
30
+ event: 'update:modelValue'
31
+ },
32
+ props: {
33
+ options: {
34
+ type: Array as PropType<number[]>,
35
+ required: true
36
+ },
37
+ modelValue: {
38
+ type: Number,
39
+ required: true
40
+ },
41
+ itemsName: {
42
+ type: String,
43
+ default: 'rows'
44
+ },
45
+ disabled: Boolean
46
+ },
47
+ emits: ['update:modelValue'],
48
+ methods: {
49
+ setSelectedItem(val: number) {
50
+ this.$emit('update:modelValue', val)
51
+ }
52
+ }
53
+ })
54
+ </script>
55
+
56
+ <style scoped lang="scss">
57
+ .dl-pagination {
58
+ &--rows_selector {
59
+ width: 15%;
60
+ display: flex;
61
+ align-items: center;
62
+ color: var(--dl-color-darker);
63
+ padding-right: 2px;
64
+ }
65
+
66
+ &--rows_per_page_label {
67
+ white-space: nowrap;
68
+ padding-right: 4px;
69
+ &::first-letter {
70
+ text-transform: uppercase;
71
+ }
72
+ }
73
+ }
74
+ </style>
@@ -0,0 +1,3 @@
1
+ import DlPagination from './DlPagination.vue'
2
+
3
+ export { DlPagination }