@milaboratories/uikit 2.3.9 → 2.3.11

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.
@@ -1,6 +1,6 @@
1
1
   WARN  Issue while reading "/home/runner/_work/platforma/platforma/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
2
2
 
3
- > @milaboratories/uikit@2.3.9 build /home/runner/_work/platforma/platforma/lib/ui/uikit
3
+ > @milaboratories/uikit@2.3.11 build /home/runner/_work/platforma/platforma/lib/ui/uikit
4
4
  > vite build
5
5
 
6
6
  vite v6.3.5 building for production...
@@ -14,8 +14,8 @@ computing gzip size...
14
14
  dist/_virtual/stringify2.js  0.09 kB │ gzip: 0.11 kB │ map: 0.10 kB
15
15
  dist/node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/number.js  0.09 kB │ gzip: 0.11 kB │ map: 0.33 kB
16
16
  dist/components/PlTabs/Tab.vue2.js  0.09 kB │ gzip: 0.11 kB │ map: 0.09 kB
17
- dist/node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/identity.js  0.09 kB │ gzip: 0.11 kB │ map: 0.33 kB
18
17
  dist/node_modules/.pnpm/d3-axis@3.0.0/node_modules/d3-axis/src/identity.js  0.09 kB │ gzip: 0.11 kB │ map: 0.32 kB
18
+ dist/node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/identity.js  0.09 kB │ gzip: 0.11 kB │ map: 0.33 kB
19
19
  dist/node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/identity.js  0.09 kB │ gzip: 0.11 kB │ map: 0.32 kB
20
20
  dist/components/PlTooltip/global.js  0.10 kB │ gzip: 0.11 kB │ map: 0.22 kB
21
21
  dist/node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/array.js  0.10 kB │ gzip: 0.11 kB │ map: 0.36 kB
@@ -35,20 +35,20 @@ computing gzip size...
35
35
  dist/components/PlAlert/PlAlert.vue2.js  0.10 kB │ gzip: 0.11 kB │ map: 0.10 kB
36
36
  dist/components/VScroll.vue2.js  0.10 kB │ gzip: 0.11 kB │ map: 0.10 kB
37
37
  dist/components/HScroll.vue2.js  0.10 kB │ gzip: 0.11 kB │ map: 0.10 kB
38
- dist/base/BtnBase.vue2.js  0.10 kB │ gzip: 0.11 kB │ map: 0.10 kB
39
38
  dist/components/DataTable/TScroll.vue2.js  0.10 kB │ gzip: 0.11 kB │ map: 0.10 kB
39
+ dist/base/BtnBase.vue2.js  0.10 kB │ gzip: 0.11 kB │ map: 0.10 kB
40
40
  dist/components/TabItem.vue2.js  0.10 kB │ gzip: 0.11 kB │ map: 0.10 kB
41
41
  dist/layout/PlSpacer/PlSpacer.vue2.js  0.10 kB │ gzip: 0.11 kB │ map: 0.10 kB
42
42
  dist/components/PlSplash/PlSplash.vue2.js  0.10 kB │ gzip: 0.11 kB │ map: 0.10 kB
43
43
  dist/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/nodes.js  0.11 kB │ gzip: 0.12 kB │ map: 0.36 kB
44
- dist/components/PlTooltip/PlTooltip.vue2.js  0.11 kB │ gzip: 0.11 kB │ map: 0.10 kB
45
44
  dist/components/PlBtnLink/PlBtnLink.vue2.js  0.11 kB │ gzip: 0.11 kB │ map: 0.10 kB
45
+ dist/components/PlTooltip/PlTooltip.vue2.js  0.11 kB │ gzip: 0.11 kB │ map: 0.10 kB
46
46
  dist/components/PlLogView/PlLogView.vue2.js  0.11 kB │ gzip: 0.11 kB │ map: 0.10 kB
47
47
  dist/components/Scrollable.vue2.js  0.11 kB │ gzip: 0.11 kB │ map: 0.10 kB
48
48
  dist/components/PlBtnSplit/PlBtnSplit.vue2.js  0.11 kB │ gzip: 0.11 kB │ map: 0.10 kB
49
+ dist/components/PlTextArea/PlTextArea.vue2.js  0.11 kB │ gzip: 0.11 kB │ map: 0.10 kB
49
50
  dist/components/PlBtnGhost/PlBtnGhost.vue2.js  0.11 kB │ gzip: 0.11 kB │ map: 0.10 kB
50
51
  dist/components/PlBtnGroup/PlBtnGroup.vue2.js  0.11 kB │ gzip: 0.11 kB │ map: 0.10 kB
51
- dist/components/PlTextArea/PlTextArea.vue2.js  0.11 kB │ gzip: 0.11 kB │ map: 0.10 kB
52
52
  dist/components/PlDropdown/PlDropdown.vue2.js  0.11 kB │ gzip: 0.11 kB │ map: 0.10 kB
53
53
  dist/components/PlCheckbox/PlCheckbox.vue2.js  0.11 kB │ gzip: 0.11 kB │ map: 0.10 kB
54
54
  dist/components/InputRange.vue2.js  0.11 kB │ gzip: 0.11 kB │ map: 0.10 kB
@@ -61,33 +61,33 @@ computing gzip size...
61
61
  dist/components/PlBtnAccent/PlBtnAccent.vue2.js  0.11 kB │ gzip: 0.11 kB │ map: 0.10 kB
62
62
  dist/components/PlBtnDanger/PlBtnDanger.vue2.js  0.11 kB │ gzip: 0.11 kB │ map: 0.10 kB
63
63
  dist/components/PlTextField/PlTextField.vue2.js  0.11 kB │ gzip: 0.11 kB │ map: 0.10 kB
64
- dist/components/PlStatusTag/PlStatusTag.vue2.js  0.11 kB │ gzip: 0.11 kB │ map: 0.10 kB
65
- dist/components/PlAccordion/PlAccordion.vue2.js  0.11 kB │ gzip: 0.11 kB │ map: 0.10 kB
66
64
  dist/components/PlFileInput/PlFileInput.vue2.js  0.11 kB │ gzip: 0.11 kB │ map: 0.10 kB
65
+ dist/components/PlAccordion/PlAccordion.vue2.js  0.11 kB │ gzip: 0.11 kB │ map: 0.10 kB
66
+ dist/components/PlStatusTag/PlStatusTag.vue2.js  0.11 kB │ gzip: 0.11 kB │ map: 0.10 kB
67
67
  dist/components/DataTable/ColumnCaret.vue2.js  0.11 kB │ gzip: 0.11 kB │ map: 0.10 kB
68
68
  dist/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/sparse.js  0.11 kB │ gzip: 0.12 kB │ map: 0.39 kB
69
69
  dist/components/PlBtnPrimary/PlBtnPrimary.vue2.js  0.11 kB │ gzip: 0.12 kB │ map: 0.10 kB
70
- dist/components/PlSlideModal/PlSlideModal.vue2.js  0.11 kB │ gzip: 0.12 kB │ map: 0.10 kB
71
70
  dist/components/PlFileDialog/PlFileDialog.vue2.js  0.11 kB │ gzip: 0.12 kB │ map: 0.10 kB
71
+ dist/components/PlSlideModal/PlSlideModal.vue2.js  0.11 kB │ gzip: 0.12 kB │ map: 0.10 kB
72
72
  dist/utils/InnerBorder.vue2.js  0.11 kB │ gzip: 0.12 kB │ map: 0.34 kB
73
73
  dist/node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/number.js  0.11 kB │ gzip: 0.12 kB │ map: 0.78 kB
74
74
  dist/components/ThemeSwitcher.vue2.js  0.11 kB │ gzip: 0.12 kB │ map: 0.10 kB
75
- dist/components/PlNumberField/PlNumberField.vue2.js  0.11 kB │ gzip: 0.12 kB │ map: 0.10 kB
76
- dist/components/PlDropdownRef/PlDropdownRef.vue2.js  0.11 kB │ gzip: 0.12 kB │ map: 0.10 kB
77
75
  dist/components/PlProgressBar/PlProgressBar.vue2.js  0.11 kB │ gzip: 0.12 kB │ map: 0.10 kB
76
+ dist/components/PlDropdownRef/PlDropdownRef.vue2.js  0.11 kB │ gzip: 0.12 kB │ map: 0.10 kB
77
+ dist/components/PlNumberField/PlNumberField.vue2.js  0.11 kB │ gzip: 0.12 kB │ map: 0.10 kB
78
78
  dist/components/PlDialogModal/PlDialogModal.vue2.js  0.11 kB │ gzip: 0.12 kB │ map: 0.10 kB
79
79
  dist/components/DataTable/TableComponent.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.10 kB
80
80
  dist/components/PlBtnSecondary/PlBtnSecondary.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.10 kB
81
81
  dist/components/PlDropdownLine/PlDropdownLine.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.10 kB
82
- dist/components/PlToggleSwitch/PlToggleSwitch.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.10 kB
83
- dist/components/PlProgressCell/PlProgressCell.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.10 kB
84
82
  dist/components/PlAutocomplete/PlAutocomplete.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.10 kB
85
- dist/components/PlCheckbox/PlCheckboxBase.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.10 kB
83
+ dist/components/PlProgressCell/PlProgressCell.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.10 kB
84
+ dist/components/PlToggleSwitch/PlToggleSwitch.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.10 kB
86
85
  dist/components/PlDropdownLine/ResizableInput.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.10 kB
86
+ dist/components/PlCheckbox/PlCheckboxBase.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.10 kB
87
87
  dist/components/ContextProvider.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
88
88
  dist/components/PlErrorBoundary/PlErrorBoundary.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
89
- dist/components/PlDropdownMulti/PlDropdownMulti.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
90
89
  dist/components/PlEditableTitle/PlEditableTitle.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
90
+ dist/components/PlDropdownMulti/PlDropdownMulti.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
91
91
  dist/components/PlCheckboxGroup/PlCheckboxGroup.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
92
92
  dist/helpers/math.js  0.12 kB │ gzip: 0.13 kB │ map: 0.33 kB
93
93
  dist/utils/DropdownOverlay/DropdownOverlay.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
@@ -176,8 +176,8 @@ computing gzip size...
176
176
  dist/assets/icons/icon-assets-min/24_arrow-down.svg.js  0.27 kB │ gzip: 0.24 kB │ map: 0.44 kB
177
177
  dist/assets/icons/icon-assets-min/16_add.svg.js  0.27 kB │ gzip: 0.23 kB │ map: 0.44 kB
178
178
  dist/components/PlRadio/PlRadio.vue.js  0.27 kB │ gzip: 0.21 kB │ map: 0.10 kB
179
- dist/components/PlChartStackedBar/Legends.vue.js  0.27 kB │ gzip: 0.21 kB │ map: 0.10 kB
180
179
  dist/assets/icons/icon-assets-min/24_linetype-longdash.svg.js  0.27 kB │ gzip: 0.23 kB │ map: 0.47 kB
180
+ dist/components/PlChartStackedBar/Legends.vue.js  0.27 kB │ gzip: 0.21 kB │ map: 0.10 kB
181
181
  dist/assets/icons/icon-assets-min/16_chevron-first.svg.js  0.28 kB │ gzip: 0.23 kB │ map: 0.45 kB
182
182
  dist/components/PlIcon16/PlIcon16.vue.js  0.28 kB │ gzip: 0.22 kB │ map: 0.10 kB
183
183
  dist/components/PlIcon24/PlIcon24.vue.js  0.28 kB │ gzip: 0.22 kB │ map: 0.10 kB
@@ -230,10 +230,10 @@ computing gzip size...
230
230
  dist/assets/icons/icon-assets-min/24_text-align-right.svg.js  0.30 kB │ gzip: 0.25 kB │ map: 0.50 kB
231
231
  dist/assets/icons/icon-assets-min/16_checkmark.svg.js  0.30 kB │ gzip: 0.25 kB │ map: 0.48 kB
232
232
  dist/components/PlChartStackedBar/PlChartStackedBar.vue.js  0.30 kB │ gzip: 0.22 kB │ map: 0.11 kB
233
- dist/components/PlElementList/PlElementListItem.vue.js  0.30 kB │ gzip: 0.22 kB │ map: 0.11 kB
234
- dist/components/PlChartStackedBar/StackedRowCompact.vue.js  0.30 kB │ gzip: 0.22 kB │ map: 0.11 kB
235
233
  dist/assets/icons/icon-assets-min/16_arrow-up.svg.js  0.30 kB │ gzip: 0.25 kB │ map: 0.48 kB
236
234
  dist/assets/icons/icon-assets-min/24_linetype-twodash.svg.js  0.30 kB │ gzip: 0.25 kB │ map: 0.50 kB
235
+ dist/components/PlElementList/PlElementListItem.vue.js  0.30 kB │ gzip: 0.22 kB │ map: 0.11 kB
236
+ dist/components/PlChartStackedBar/StackedRowCompact.vue.js  0.30 kB │ gzip: 0.22 kB │ map: 0.11 kB
237
237
  dist/_virtual/canonicalize.js  0.30 kB │ gzip: 0.22 kB │ map: 0.10 kB
238
238
  dist/assets/icons/icon-assets-min/24_checkmark.svg.js  0.31 kB │ gzip: 0.25 kB │ map: 0.49 kB
239
239
  dist/assets/icons/icon-assets-min/16_arrow-down.svg.js  0.31 kB │ gzip: 0.25 kB │ map: 0.49 kB
@@ -360,8 +360,8 @@ computing gzip size...
360
360
  dist/assets/icons/icon-assets-min/16_y-axis.svg.js  0.45 kB │ gzip: 0.30 kB │ map: 0.65 kB
361
361
  dist/assets/icons/icon-assets-min/24_delete-circle.svg.js  0.45 kB │ gzip: 0.31 kB │ map: 0.65 kB
362
362
  dist/assets/icons/icon-assets-min/24_zoom-in.svg.js  0.45 kB │ gzip: 0.30 kB │ map: 0.65 kB
363
- dist/components/PlChartStackedBar/PlChartStackedBarCompact.vue3.js  0.45 kB │ gzip: 0.32 kB │ map: 0.12 kB
364
363
  dist/assets/images/24_checkbox-light-enabled-checked.svg.js  0.45 kB │ gzip: 0.33 kB │ map: 0.71 kB
364
+ dist/components/PlChartStackedBar/PlChartStackedBarCompact.vue3.js  0.45 kB │ gzip: 0.32 kB │ map: 0.12 kB
365
365
  dist/assets/icons/icon-assets-min/24_frame-type-all.svg.js  0.46 kB │ gzip: 0.31 kB │ map: 0.65 kB
366
366
  dist/assets/icons/icon-assets-min/16_delete-bin.svg.js  0.46 kB │ gzip: 0.32 kB │ map: 0.64 kB
367
367
  dist/assets/icons/icon-assets-min/24_frame-type-left-bottom.svg.js  0.46 kB │ gzip: 0.30 kB │ map: 0.67 kB
@@ -415,8 +415,8 @@ computing gzip size...
415
415
  dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/filter.js  0.53 kB │ gzip: 0.35 kB │ map: 1.42 kB
416
416
  dist/utils/PlCloseModalBtn.vue.js  0.53 kB │ gzip: 0.36 kB │ map: 0.85 kB
417
417
  dist/assets/icons/icon-assets-min/24_warning.svg.js  0.53 kB │ gzip: 0.37 kB │ map: 0.71 kB
418
- dist/components/DataTable/composition/useColumn.js  0.54 kB │ gzip: 0.31 kB │ map: 1.45 kB
419
418
  dist/assets/icons/icon-assets-min/24_info-outline.svg.js  0.54 kB │ gzip: 0.36 kB │ map: 0.72 kB
419
+ dist/components/DataTable/composition/useColumn.js  0.54 kB │ gzip: 0.31 kB │ map: 1.45 kB
420
420
  dist/assets/icons/icon-assets-min/24_align-center.svg.js  0.54 kB │ gzip: 0.31 kB │ map: 0.75 kB
421
421
  dist/assets/icons/icon-assets-min/24_table-alias.svg.js  0.54 kB │ gzip: 0.34 kB │ map: 0.72 kB
422
422
  dist/assets/icons/icon-assets-min/24_box.svg.js  0.54 kB │ gzip: 0.34 kB │ map: 0.71 kB
@@ -739,7 +739,7 @@ computing gzip size...
739
739
  dist/components/PlFileDialog/Remote.vue.js  8.72 kB │ gzip: 2.79 kB │ map: 14.20 kB
740
740
  dist/components/PlElementList/PlElementList.vue2.js  9.13 kB │ gzip: 2.42 kB │ map: 16.89 kB
741
741
  dist/node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/color.js  9.19 kB │ gzip: 3.33 kB │ map: 21.96 kB
742
- dist/components/PlNumberField/PlNumberField.vue.js  10.17 kB │ gzip: 3.25 kB │ map: 13.39 kB
742
+ dist/components/PlNumberField/PlNumberField.vue.js  10.38 kB │ gzip: 3.33 kB │ map: 13.86 kB
743
743
  dist/components/PlFileInput/PlFileInput.vue.js  10.72 kB │ gzip: 3.36 kB │ map: 8.41 kB
744
744
  dist/demo-site-data/all-css-variables.js  11.00 kB │ gzip: 1.76 kB │ map: 18.21 kB
745
745
  dist/components/PlDropdownLine/PlDropdownLine.vue.js  14.66 kB │ gzip: 3.91 kB │ map: 13.27 kB
@@ -756,6 +756,6 @@ computing gzip size...
756
756
  dist/index.js 501.34 kB │ gzip: 192.29 kB │ map: 5.60 kB
757
757
  dist/components/PlSlideModal/PlSlideModal.vue.js 601.75 kB │ gzip: 204.43 kB │ map: 3.22 kB
758
758
  dist/components/DataTable/TableComponent.vue.js 603.09 kB │ gzip: 205.04 kB │ map: 4.87 kB
759
- [vite:dts] Declaration files built in 6198ms.
759
+ [vite:dts] Declaration files built in 6869ms.
760
760
 
761
- ✓ built in 10.85s
761
+ ✓ built in 11.41s
@@ -1,5 +1,5 @@
1
1
   WARN  Issue while reading "/home/runner/_work/platforma/platforma/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
2
2
 
3
- > @milaboratories/uikit@2.3.9 type-check /home/runner/_work/platforma/platforma/lib/ui/uikit
3
+ > @milaboratories/uikit@2.3.11 type-check /home/runner/_work/platforma/platforma/lib/ui/uikit
4
4
  > vue-tsc --project ./tsconfig.lib.json
5
5
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # @milaboratories/uikit
2
2
 
3
+ ## 2.3.11
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [890240e]
8
+ - @platforma-sdk/model@1.40.1
9
+
10
+ ## 2.3.10
11
+
12
+ ### Patch Changes
13
+
14
+ - 30ce5da: Updated `PlNumberField` to handle fractional increments/decrements better
15
+ - Updated dependencies [30ce5da]
16
+ - @platforma-sdk/model@1.40.0
17
+
3
18
  ## 2.3.9
4
19
 
5
20
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"PlNumberField.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlNumberField/PlNumberField.vue"],"names":[],"mappings":"AA6RA,OAAO,wBAAwB,CAAC;AAMhC,KAAK,gBAAgB,GAAG;IACtB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,yIAAyI;IACzI,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yFAAyF;IACzF,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CAC9C,CAAC;AAEF,KAAK,WAAW,GAAG,gBAAgB,CAAC;AAwMpC,KAAK,iBAAiB,GAAG;IACzB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B,GAAG,WAAW,CAAC;AAKhB,iBAAS,cAAc;WAyIT,OAAO,IAA6B;;yBAZpB,GAAG;;;;;;;EAiBhC;AAyBD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;WA1YX,MAAM;UAIP,MAAM;iBAFC,MAAM;cAIT,MAAM;cAEN,MAAM;yBAEK,OAAO;kBAId,MAAM;cAEV,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS;;;;kBAoY5C,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"PlNumberField.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlNumberField/PlNumberField.vue"],"names":[],"mappings":"AAqSA,OAAO,wBAAwB,CAAC;AAMhC,KAAK,gBAAgB,GAAG;IACtB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,yIAAyI;IACzI,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yFAAyF;IACzF,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CAC9C,CAAC;AAEF,KAAK,WAAW,GAAG,gBAAgB,CAAC;AAgNpC,KAAK,iBAAiB,GAAG;IACzB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B,GAAG,WAAW,CAAC;AAKhB,iBAAS,cAAc;WAyIT,OAAO,IAA6B;;yBAZpB,GAAG;;;;;;;EAiBhC;AAyBD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;WAlZX,MAAM;UAIP,MAAM;iBAFC,MAAM;cAIT,MAAM;cAEN,MAAM;yBAEK,OAAO;kBAId,MAAM;cAEV,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS;;;;kBA4Y5C,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -1,16 +1,16 @@
1
1
  (function(){"use strict";try{if(typeof document<"u"){var r=document.createElement("style");r.appendChild(document.createTextNode(".mi-number-field{--contour-color: var(--txt-01);--contour-border-width: 1px;--options-bg: #fff;--option-hover-bg: var(--btn-sec-hover-grey);--label-offset-left-x: 8px;--label-offset-right-x: 8px;--label-color: var(--txt-01);--color-hint: #9d9eae}.mi-number-field ::placeholder{color:#cfd1db;opacity:1}.mi-number-field__main-wrapper{height:40px;position:relative}.mi-number-field__wrapper{padding-left:12px;border-radius:6px}.mi-number-field__wrapper.withoutArrows{padding-right:12px}.mi-number-field__icons{width:40px;border-radius:0 6px 6px 0;border-left:1px solid var(--contour-color)}.mi-number-field__icon{line-height:0}.mi-number-field__icon.disabled{cursor:not-allowed;position:relative;z-index:1}.mi-number-field__icon.disabled svg path{fill:#cfd1db}.mi-number-field__icon:hover{background-color:#9babcc29}.mi-number-field__icon:first-child{border-bottom:1px solid var(--contour-color)}.mi-number-field__hint{margin-top:3px;color:var(--color-hint)}.mi-number-field input{outline:none;border:none;width:100%;background:unset;text-overflow:ellipsis}.mi-number-field__contour{border-radius:var(--border-radius-control);border:var(--contour-border-width) solid var(--contour-color);box-shadow:var(--contour-box-shadow);z-index:0;pointer-events:none;transition:all .3s}.mi-number-field:focus-within:not(.error){--label-color: var(--txt-focus);--contour-color: var(--border-color-focus);--contour-border-width: 2px;--contour-box-shadow: 0 0 0 4px var(--border-color-focus-shadow)}.mi-number-field:focus-within.error{--contour-border-width: 2px;--contour-box-shadow: 0 0 0 4px var(--color-error-shadow)}.mi-number-field.error{--contour-color: var(--txt-error);--label-color: var(--txt-error);--color-hint: var(--txt-error)}.mi-number-field.disabled{--contour-color: var(--color-dis-01);--control-mask-fill: var(--color-dis-01);cursor:not-allowed}.mi-number-field.disabled label,.mi-number-field.disabled .mi-number-field__hint,.mi-number-field.disabled input{color:var(--contour-color)}.mi-number-field.disabled svg path{fill:var(--contour-color)}.mi-number-field.disabled .mi-number-field__icons{pointer-events:none}.mi-number-field label{position:absolute;top:0;transform:translateY(-60%);left:var(--label-offset-left-x);display:flex;align-items:center;padding:0 4px;overflow:hidden;white-space:pre;text-overflow:ellipsis;cursor:inherit;color:var(--label-color);transition:color .3s}.mi-number-field label .required{display:inline-block;font-weight:500;font-size:12px;line-height:16px;color:var(--txt-error);margin-right:4px}")),document.head.appendChild(r)}}catch(o){console.error("vite-plugin-css-injected-by-js",o)}})();
2
- import { defineComponent as F, mergeModels as I, useModel as S, ref as f, useSlots as A, computed as s, watch as T, createElementBlock as m, openBlock as d, normalizeClass as v, createElementVNode as n, createCommentVNode as c, createVNode as P, withDirectives as U, createTextVNode as j, createBlock as K, toDisplayString as _, unref as C, withCtx as R, renderSlot as Z, vModelText as q } from "vue";
2
+ import { defineComponent as F, mergeModels as I, useModel as A, ref as v, useSlots as T, computed as s, watch as P, createElementBlock as m, openBlock as f, normalizeClass as c, createElementVNode as n, createCommentVNode as p, createVNode as U, withDirectives as j, createTextVNode as K, createBlock as R, toDisplayString as C, unref as E, withCtx as Z, renderSlot as q, vModelText as z } from "vue";
3
3
 
4
- import z from "../../utils/DoubleContour.vue.js";
5
- import { useLabelNotch as G } from "../../utils/useLabelNotch.js";
6
- import X from "../PlTooltip/PlTooltip.vue.js";
7
- const H = { class: "mi-number-field__main-wrapper d-flex" }, J = {
4
+ import G from "../../utils/DoubleContour.vue.js";
5
+ import { useLabelNotch as X } from "../../utils/useLabelNotch.js";
6
+ import H from "../PlTooltip/PlTooltip.vue.js";
7
+ const J = { class: "mi-number-field__main-wrapper d-flex" }, Q = {
8
8
  key: 0,
9
9
  class: "text-description"
10
- }, Q = ["disabled", "placeholder"], W = {
10
+ }, W = ["disabled", "placeholder"], Y = {
11
11
  key: 0,
12
12
  class: "mi-number-field__hint text-description"
13
- }, oe = /* @__PURE__ */ F({
13
+ }, ne = /* @__PURE__ */ F({
14
14
  __name: "PlNumberField",
15
15
  props: /* @__PURE__ */ I({
16
16
  disabled: { type: Boolean },
@@ -28,47 +28,47 @@ const H = { class: "mi-number-field__main-wrapper d-flex" }, J = {
28
28
  modelModifiers: {}
29
29
  }),
30
30
  emits: ["update:modelValue"],
31
- setup(b) {
32
- const t = b, r = S(b, "modelValue"), w = f(), E = A(), u = f();
33
- G(w);
34
- function p(e) {
31
+ setup(w) {
32
+ const t = w, a = A(w, "modelValue"), g = v(), D = T(), d = v();
33
+ X(g);
34
+ function V(e) {
35
35
  return e === void 0 ? "" : String(+e);
36
36
  }
37
- function g(e) {
37
+ function h(e) {
38
38
  return e === "." || e === "," || e === "-";
39
39
  }
40
- function h(e) {
40
+ function x(e) {
41
41
  if (e === "")
42
42
  return;
43
- if (g(e))
43
+ if (h(e))
44
44
  return 0;
45
45
  let l = e;
46
46
  return l = l.replace(",", "."), l = l.replace("−", "-"), l = l.replace("–", "-"), l = l.replace("+", ""), parseFloat(l);
47
47
  }
48
- const o = f(p(r.value)), a = s(() => h(o.value));
49
- T(() => r.value, (e) => {
50
- parseFloat(o.value) !== e && (o.value = p(e));
48
+ const o = v(V(a.value)), r = s(() => x(o.value));
49
+ P(() => a.value, (e) => {
50
+ parseFloat(o.value) !== e && (o.value = V(e));
51
51
  });
52
- const D = /^[-−–+]?(\d+)?[\\.,]?(\d+)?$/, x = s({
52
+ const O = /^[-−–+]?(\d+)?[\\.,]?(\d+)?$/, y = s({
53
53
  get() {
54
54
  return o.value;
55
55
  },
56
56
  set(e) {
57
- const l = h(e);
58
- l === void 0 || e.match(D) && !isNaN(l) ? (o.value = e, !t.updateOnEnterOrClickOutside && !g(e) && k()) : u.value && (u.value.value = o.value);
57
+ const l = x(e);
58
+ l === void 0 || e.match(O) && !isNaN(l) ? (o.value = e, !t.updateOnEnterOrClickOutside && !h(e) && B()) : d.value && (d.value.value = o.value);
59
59
  }
60
- }), y = f(!1);
61
- function k() {
60
+ }), k = v(!1);
61
+ function B() {
62
62
  if (o.value === "") {
63
- r.value = void 0;
63
+ a.value = void 0;
64
64
  return;
65
65
  }
66
- r.value = a.value;
66
+ a.value = r.value;
67
67
  }
68
- const V = s(() => {
68
+ const b = s(() => {
69
69
  let e = [];
70
70
  t.errorMessage && e.push(t.errorMessage);
71
- const l = a.value;
71
+ const l = r.value;
72
72
  if (l !== void 0 && isNaN(l))
73
73
  e.push("Value is not a number");
74
74
  else if (t.validate && l !== void 0) {
@@ -77,81 +77,86 @@ const H = { class: "mi-number-field__main-wrapper d-flex" }, J = {
77
77
  } else
78
78
  t.minValue !== void 0 && l !== void 0 && l < t.minValue && e.push(`Value must be higher than ${t.minValue}`), t.maxValue !== void 0 && l !== void 0 && l > t.maxValue && e.push(`Value must be less than ${t.maxValue}`);
79
79
  return e = [...e], e.join(" ");
80
- }), B = s(() => {
81
- const e = a.value;
82
- return t.maxValue !== void 0 && e !== void 0 ? e >= t.maxValue : !1;
83
80
  }), M = s(() => {
84
- const e = a.value;
81
+ const e = r.value;
82
+ return t.maxValue !== void 0 && e !== void 0 ? e >= t.maxValue : !1;
83
+ }), L = s(() => {
84
+ const e = r.value;
85
85
  return t.minValue !== void 0 && e !== void 0 ? e <= t.minValue : !1;
86
- });
87
- function L() {
88
- const e = a.value;
89
- if (!B.value) {
90
- let l;
91
- e === void 0 ? l = t.minValue ? t.minValue : 0 : l = (e || 0) + t.step, r.value = t.maxValue !== void 0 ? Math.min(t.maxValue, l) : l;
86
+ }), u = s(
87
+ () => {
88
+ var e;
89
+ return 10 ** (((e = t.step.toString().split(".").at(1)) == null ? void 0 : e.length) ?? 0);
92
90
  }
93
- }
91
+ );
94
92
  function N() {
95
- const e = a.value;
93
+ const e = r.value;
96
94
  if (!M.value) {
97
95
  let l;
98
- e === void 0 ? l = 0 : l = +(e || 0) - t.step, r.value = t.minValue !== void 0 ? Math.max(t.minValue, l) : l;
96
+ e === void 0 ? l = t.minValue ? t.minValue : 0 : l = ((e || 0) * u.value + t.step * u.value) / u.value, a.value = t.maxValue !== void 0 ? Math.min(t.maxValue, l) : l;
97
+ }
98
+ }
99
+ function _() {
100
+ const e = r.value;
101
+ if (!L.value) {
102
+ let l;
103
+ e === void 0 ? l = 0 : l = ((e || 0) * u.value - t.step * u.value) / u.value, a.value = t.minValue !== void 0 ? Math.max(t.minValue, l) : l;
99
104
  }
100
105
  }
101
- function O(e) {
106
+ function S(e) {
102
107
  var l, i;
103
- t.updateOnEnterOrClickOutside && (e.code === "Escape" && (o.value = p(r.value), (l = u.value) == null || l.blur()), e.code === "Enter" && ((i = u.value) == null || i.blur())), e.code === "Enter" && (o.value = String(r.value)), ["ArrowDown", "ArrowUp"].includes(e.code) && e.preventDefault(), t.useIncrementButtons && e.code === "ArrowUp" && L(), t.useIncrementButtons && e.code === "ArrowDown" && N();
108
+ t.updateOnEnterOrClickOutside && (e.code === "Escape" && (o.value = V(a.value), (l = d.value) == null || l.blur()), e.code === "Enter" && ((i = d.value) == null || i.blur())), e.code === "Enter" && (o.value = String(a.value)), ["ArrowDown", "ArrowUp"].includes(e.code) && e.preventDefault(), t.useIncrementButtons && e.code === "ArrowUp" && N(), t.useIncrementButtons && e.code === "ArrowDown" && _();
104
109
  }
105
110
  const $ = (e) => {
106
111
  e.detail > 1 && e.preventDefault();
107
112
  };
108
- return (e, l) => (d(), m("div", {
113
+ return (e, l) => (f(), m("div", {
109
114
  ref_key: "root",
110
- ref: w,
111
- class: v([{ error: !!V.value.trim(), disabled: e.disabled }, "mi-number-field d-flex-column"]),
112
- onKeydown: l[3] || (l[3] = (i) => O(i))
115
+ ref: g,
116
+ class: c([{ error: !!b.value.trim(), disabled: e.disabled }, "mi-number-field d-flex-column"]),
117
+ onKeydown: l[3] || (l[3] = (i) => S(i))
113
118
  }, [
114
- n("div", H, [
115
- P(z, { class: "mi-number-field__contour" }),
119
+ n("div", J, [
120
+ U(G, { class: "mi-number-field__contour" }),
116
121
  n("div", {
117
- class: v(["mi-number-field__wrapper flex-grow d-flex flex-align-center", { withoutArrows: !e.useIncrementButtons }])
122
+ class: c(["mi-number-field__wrapper flex-grow d-flex flex-align-center", { withoutArrows: !e.useIncrementButtons }])
118
123
  }, [
119
- e.label ? (d(), m("label", J, [
120
- j(_(e.label) + " ", 1),
121
- C(E).tooltip ? (d(), K(C(X), {
124
+ e.label ? (f(), m("label", Q, [
125
+ K(C(e.label) + " ", 1),
126
+ E(D).tooltip ? (f(), R(E(H), {
122
127
  key: 0,
123
128
  class: "info",
124
129
  position: "top"
125
130
  }, {
126
- tooltip: R(() => [
127
- Z(e.$slots, "tooltip")
131
+ tooltip: Z(() => [
132
+ q(e.$slots, "tooltip")
128
133
  ]),
129
134
  _: 3
130
- })) : c("", !0)
131
- ])) : c("", !0),
132
- U(n("input", {
135
+ })) : p("", !0)
136
+ ])) : p("", !0),
137
+ j(n("input", {
133
138
  ref_key: "input",
134
- ref: u,
135
- "onUpdate:modelValue": l[0] || (l[0] = (i) => x.value = i),
139
+ ref: d,
140
+ "onUpdate:modelValue": l[0] || (l[0] = (i) => y.value = i),
136
141
  disabled: e.disabled,
137
142
  placeholder: e.placeholder,
138
143
  class: "text-s flex-grow",
139
- onFocusin: l[1] || (l[1] = (i) => y.value = !0),
144
+ onFocusin: l[1] || (l[1] = (i) => k.value = !0),
140
145
  onFocusout: l[2] || (l[2] = (i) => {
141
- y.value = !1, k();
146
+ k.value = !1, B();
142
147
  })
143
- }, null, 40, Q), [
144
- [q, x.value]
148
+ }, null, 40, W), [
149
+ [z, y.value]
145
150
  ])
146
151
  ], 2),
147
- e.useIncrementButtons ? (d(), m("div", {
152
+ e.useIncrementButtons ? (f(), m("div", {
148
153
  key: 0,
149
154
  class: "mi-number-field__icons d-flex-column",
150
155
  onMousedown: $
151
156
  }, [
152
157
  n("div", {
153
- class: v([{ disabled: B.value }, "mi-number-field__icon d-flex flex-justify-center uc-pointer flex-grow flex-align-center"]),
154
- onClick: L
158
+ class: c([{ disabled: M.value }, "mi-number-field__icon d-flex flex-justify-center uc-pointer flex-grow flex-align-center"]),
159
+ onClick: N
155
160
  }, l[4] || (l[4] = [
156
161
  n("svg", {
157
162
  xmlns: "http://www.w3.org/2000/svg",
@@ -169,8 +174,8 @@ const H = { class: "mi-number-field__main-wrapper d-flex" }, J = {
169
174
  ], -1)
170
175
  ]), 2),
171
176
  n("div", {
172
- class: v([{ disabled: M.value }, "mi-number-field__icon d-flex flex-justify-center uc-pointer flex-grow flex-align-center"]),
173
- onClick: N
177
+ class: c([{ disabled: L.value }, "mi-number-field__icon d-flex flex-justify-center uc-pointer flex-grow flex-align-center"]),
178
+ onClick: _
174
179
  }, l[5] || (l[5] = [
175
180
  n("svg", {
176
181
  xmlns: "http://www.w3.org/2000/svg",
@@ -187,13 +192,13 @@ const H = { class: "mi-number-field__main-wrapper d-flex" }, J = {
187
192
  })
188
193
  ], -1)
189
194
  ]), 2)
190
- ], 32)) : c("", !0)
195
+ ], 32)) : p("", !0)
191
196
  ]),
192
- V.value.trim() ? (d(), m("div", W, _(V.value), 1)) : c("", !0)
197
+ b.value.trim() ? (f(), m("div", Y, C(b.value), 1)) : p("", !0)
193
198
  ], 34));
194
199
  }
195
200
  });
196
201
  export {
197
- oe as default
202
+ ne as default
198
203
  };
199
204
  //# sourceMappingURL=PlNumberField.vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlNumberField.vue.js","sources":["../../../src/components/PlNumberField/PlNumberField.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport './pl-number-field.scss';\nimport DoubleContour from '../../utils/DoubleContour.vue';\nimport { useLabelNotch } from '../../utils/useLabelNotch';\nimport { computed, ref, useSlots, watch } from 'vue';\nimport { PlTooltip } from '../PlTooltip';\n\ntype NumberInputProps = {\n /** Input is disabled if true */\n disabled?: boolean;\n /** Label on the top border of the field, empty by default */\n label?: string;\n /** Input placeholder, empty by default */\n placeholder?: string;\n /** Step for increment/decrement buttons, 1 by default */\n step?: number;\n /** If defined - show an error if value is lower */\n minValue?: number;\n /** If defined - show an error if value is higher */\n maxValue?: number;\n /** If false - remove buttons on the right */\n useIncrementButtons?: boolean;\n /** If true - changes do not apply immediately, they apply only by removing focus from the input (by click enter or by click outside) */\n updateOnEnterOrClickOutside?: boolean;\n /** Error message that shows always when it's provided, without other checks */\n errorMessage?: string;\n /** Additional validity check for input value that must return an error text if failed */\n validate?: (v: number) => string | undefined;\n};\n\nconst props = withDefaults(defineProps<NumberInputProps>(), {\n step: 1,\n label: undefined,\n placeholder: undefined,\n minValue: undefined,\n maxValue: undefined,\n useIncrementButtons: true,\n updateOnEnter: false,\n errorMessage: undefined,\n validate: undefined,\n});\n\nconst modelValue = defineModel<number | undefined>({ required: true });\n\nconst root = ref<HTMLElement>();\nconst slots = useSlots();\nconst input = ref<HTMLInputElement>();\n\nuseLabelNotch(root);\n\nfunction modelToString(v: number | undefined) {\n return v === undefined ? '' : String(+v); // (+v) to avoid staying in input non-number values if they are provided in model\n}\n\nfunction isPartial(v: string) {\n return v === '.' || v === ',' || v === '-';\n}\nfunction stringToModel(v: string) {\n if (v === '') {\n return undefined;\n }\n if (isPartial(v)) {\n return 0;\n }\n let forParsing = v;\n forParsing = forParsing.replace(',', '.');\n forParsing = forParsing.replace('−', '-'); // minus, replacing for the case of input the whole copied value\n forParsing = forParsing.replace('–', '-'); // dash, replacing for the case of input the whole copied value\n forParsing = forParsing.replace('+', '');\n return parseFloat(forParsing);\n}\n\nconst innerTextValue = ref(modelToString(modelValue.value));\nconst innerNumberValue = computed(() => stringToModel(innerTextValue.value));\n\nwatch(() => modelValue.value, (outerValue) => { // update inner value if outer value is changed\n if (parseFloat(innerTextValue.value) !== outerValue) {\n innerTextValue.value = modelToString(outerValue);\n }\n});\n\nconst NUMBER_REGEX = /^[-−–+]?(\\d+)?[\\\\.,]?(\\d+)?$/; // parseFloat works without errors on strings with multiple dots, or letters in value\nconst inputValue = computed({\n get() {\n return innerTextValue.value;\n },\n set(nextValue: string) {\n const parsedValue = stringToModel(nextValue);\n // we allow to set empty value or valid numeric value, otherwise reset input value to previous valid\n if (parsedValue === undefined\n || (nextValue.match(NUMBER_REGEX) && !isNaN(parsedValue))\n ) {\n innerTextValue.value = nextValue;\n if (!props.updateOnEnterOrClickOutside && !isPartial(nextValue)) { // to avoid applying '-' or '.'\n applyChanges();\n }\n } else if (input.value) {\n input.value.value = innerTextValue.value;\n }\n },\n});\nconst focused = ref(false);\n\nfunction applyChanges() {\n if (innerTextValue.value === '') {\n modelValue.value = undefined;\n return;\n }\n modelValue.value = innerNumberValue.value;\n}\n\nconst errors = computed(() => {\n let ers: string[] = [];\n if (props.errorMessage) {\n ers.push(props.errorMessage);\n }\n const parsedValue = innerNumberValue.value;\n if (parsedValue !== undefined && isNaN(parsedValue)) {\n ers.push('Value is not a number');\n } else if (props.validate && parsedValue !== undefined) {\n const error = props.validate(parsedValue);\n if (error) {\n ers.push(error);\n }\n } else {\n if (props.minValue !== undefined && parsedValue !== undefined && parsedValue < props.minValue) {\n ers.push(`Value must be higher than ${props.minValue}`);\n }\n if (props.maxValue !== undefined && parsedValue !== undefined && parsedValue > props.maxValue) {\n ers.push(`Value must be less than ${props.maxValue}`);\n }\n }\n\n ers = [...ers];\n\n return ers.join(' ');\n});\n\nconst isIncrementDisabled = computed(() => {\n const parsedValue = innerNumberValue.value;\n if (props.maxValue !== undefined && parsedValue !== undefined) {\n return parsedValue >= props.maxValue;\n }\n return false;\n});\n\nconst isDecrementDisabled = computed(() => {\n const parsedValue = innerNumberValue.value;\n if (props.minValue !== undefined && parsedValue !== undefined) {\n return parsedValue <= props.minValue;\n }\n return false;\n});\n\nfunction increment() {\n const parsedValue = innerNumberValue.value;\n if (!isIncrementDisabled.value) {\n let nV;\n if (parsedValue === undefined) {\n nV = props.minValue ? props.minValue : 0;\n } else {\n nV = (parsedValue || 0) + props.step;\n }\n modelValue.value = props.maxValue !== undefined ? Math.min(props.maxValue, nV) : nV;\n }\n}\n\nfunction decrement() {\n const parsedValue = innerNumberValue.value;\n if (!isDecrementDisabled.value) {\n let nV;\n if (parsedValue === undefined) {\n nV = 0;\n } else {\n nV = +(parsedValue || 0) - props.step;\n }\n modelValue.value = props.minValue !== undefined ? Math.max(props.minValue, nV) : nV;\n }\n}\n\nfunction handleKeyPress(e: { code: string; preventDefault(): void }) {\n if (props.updateOnEnterOrClickOutside) {\n if (e.code === 'Escape') {\n innerTextValue.value = modelToString(modelValue.value);\n input.value?.blur();\n }\n if (e.code === 'Enter') {\n input.value?.blur();\n }\n }\n\n if (e.code === 'Enter') {\n innerTextValue.value = String(modelValue.value); // to make .1 => 0.1, 10.00 => 10, remove leading zeros etc\n }\n\n if (['ArrowDown', 'ArrowUp'].includes(e.code)) {\n e.preventDefault();\n }\n if (props.useIncrementButtons && e.code === 'ArrowUp') {\n increment();\n }\n if (props.useIncrementButtons && e.code === 'ArrowDown') {\n decrement();\n }\n}\n\n// https://stackoverflow.com/questions/880512/prevent-text-selection-after-double-click#:~:text=If%20you%20encounter%20a%20situation,none%3B%20to%20the%20summary%20element.\n// this prevents selecting of more than input content in some cases,\n// but also disable selecting input content by double-click (useful feature)\nconst onMousedown = (ev: MouseEvent) => {\n if (ev.detail > 1) {\n ev.preventDefault();\n }\n};\n</script>\n\n<template>\n <div\n ref=\"root\"\n :class=\"{ error: !!errors.trim(), disabled: disabled }\"\n class=\"mi-number-field d-flex-column\"\n @keydown=\"handleKeyPress($event)\"\n >\n <div class=\"mi-number-field__main-wrapper d-flex\">\n <DoubleContour class=\"mi-number-field__contour\"/>\n <div\n class=\"mi-number-field__wrapper flex-grow d-flex flex-align-center\"\n :class=\"{withoutArrows: !useIncrementButtons}\"\n >\n <label v-if=\"label\" class=\"text-description\">\n {{ label }}\n <PlTooltip v-if=\"slots.tooltip\" class=\"info\" position=\"top\">\n <template #tooltip>\n <slot name=\"tooltip\"/>\n </template>\n </PlTooltip>\n </label>\n <input\n ref=\"input\"\n v-model=\"inputValue\"\n :disabled=\"disabled\"\n :placeholder=\"placeholder\"\n class=\"text-s flex-grow\"\n @focusin=\"focused = true\"\n @focusout=\"focused = false; applyChanges()\"\n />\n </div>\n <div v-if=\"useIncrementButtons\" class=\"mi-number-field__icons d-flex-column\" @mousedown=\"onMousedown\">\n <div\n :class=\"{ disabled: isIncrementDisabled }\"\n class=\"mi-number-field__icon d-flex flex-justify-center uc-pointer flex-grow flex-align-center\"\n @click=\"increment\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M8 4.93933L13.5303 10.4697L12.4697 11.5303L8 7.06065L3.53033 11.5303L2.46967 10.4697L8 4.93933Z\"\n fill=\"#110529\"\n />\n </svg>\n </div>\n <div\n :class=\"{ disabled: isDecrementDisabled }\"\n class=\"mi-number-field__icon d-flex flex-justify-center uc-pointer flex-grow flex-align-center\"\n @click=\"decrement\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M2.46967 6.53033L3.53033 5.46967L8 9.93934L12.4697 5.46967L13.5303 6.53033L8 12.0607L2.46967 6.53033Z\"\n fill=\"#110529\"\n />\n </svg>\n </div>\n </div>\n </div>\n <div v-if=\"errors.trim()\" class=\"mi-number-field__hint text-description\">\n {{ errors }}\n </div>\n </div>\n</template>\n"],"names":["props","__props","modelValue","_useModel","root","ref","slots","useSlots","input","useLabelNotch","modelToString","v","isPartial","stringToModel","forParsing","innerTextValue","innerNumberValue","computed","watch","outerValue","NUMBER_REGEX","inputValue","nextValue","parsedValue","applyChanges","focused","errors","ers","error","isIncrementDisabled","isDecrementDisabled","increment","nV","decrement","handleKeyPress","_a","_b","onMousedown","ev"],"mappings":"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"}
1
+ {"version":3,"file":"PlNumberField.vue.js","sources":["../../../src/components/PlNumberField/PlNumberField.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport './pl-number-field.scss';\nimport DoubleContour from '../../utils/DoubleContour.vue';\nimport { useLabelNotch } from '../../utils/useLabelNotch';\nimport { computed, ref, useSlots, watch } from 'vue';\nimport { PlTooltip } from '../PlTooltip';\n\ntype NumberInputProps = {\n /** Input is disabled if true */\n disabled?: boolean;\n /** Label on the top border of the field, empty by default */\n label?: string;\n /** Input placeholder, empty by default */\n placeholder?: string;\n /** Step for increment/decrement buttons, 1 by default */\n step?: number;\n /** If defined - show an error if value is lower */\n minValue?: number;\n /** If defined - show an error if value is higher */\n maxValue?: number;\n /** If false - remove buttons on the right */\n useIncrementButtons?: boolean;\n /** If true - changes do not apply immediately, they apply only by removing focus from the input (by click enter or by click outside) */\n updateOnEnterOrClickOutside?: boolean;\n /** Error message that shows always when it's provided, without other checks */\n errorMessage?: string;\n /** Additional validity check for input value that must return an error text if failed */\n validate?: (v: number) => string | undefined;\n};\n\nconst props = withDefaults(defineProps<NumberInputProps>(), {\n step: 1,\n label: undefined,\n placeholder: undefined,\n minValue: undefined,\n maxValue: undefined,\n useIncrementButtons: true,\n updateOnEnter: false,\n errorMessage: undefined,\n validate: undefined,\n});\n\nconst modelValue = defineModel<number | undefined>({ required: true });\n\nconst root = ref<HTMLElement>();\nconst slots = useSlots();\nconst input = ref<HTMLInputElement>();\n\nuseLabelNotch(root);\n\nfunction modelToString(v: number | undefined) {\n return v === undefined ? '' : String(+v); // (+v) to avoid staying in input non-number values if they are provided in model\n}\n\nfunction isPartial(v: string) {\n return v === '.' || v === ',' || v === '-';\n}\nfunction stringToModel(v: string) {\n if (v === '') {\n return undefined;\n }\n if (isPartial(v)) {\n return 0;\n }\n let forParsing = v;\n forParsing = forParsing.replace(',', '.');\n forParsing = forParsing.replace('−', '-'); // minus, replacing for the case of input the whole copied value\n forParsing = forParsing.replace('–', '-'); // dash, replacing for the case of input the whole copied value\n forParsing = forParsing.replace('+', '');\n return parseFloat(forParsing);\n}\n\nconst innerTextValue = ref(modelToString(modelValue.value));\nconst innerNumberValue = computed(() => stringToModel(innerTextValue.value));\n\nwatch(() => modelValue.value, (outerValue) => { // update inner value if outer value is changed\n if (parseFloat(innerTextValue.value) !== outerValue) {\n innerTextValue.value = modelToString(outerValue);\n }\n});\n\nconst NUMBER_REGEX = /^[-−–+]?(\\d+)?[\\\\.,]?(\\d+)?$/; // parseFloat works without errors on strings with multiple dots, or letters in value\nconst inputValue = computed({\n get() {\n return innerTextValue.value;\n },\n set(nextValue: string) {\n const parsedValue = stringToModel(nextValue);\n // we allow to set empty value or valid numeric value, otherwise reset input value to previous valid\n if (parsedValue === undefined\n || (nextValue.match(NUMBER_REGEX) && !isNaN(parsedValue))\n ) {\n innerTextValue.value = nextValue;\n if (!props.updateOnEnterOrClickOutside && !isPartial(nextValue)) { // to avoid applying '-' or '.'\n applyChanges();\n }\n } else if (input.value) {\n input.value.value = innerTextValue.value;\n }\n },\n});\nconst focused = ref(false);\n\nfunction applyChanges() {\n if (innerTextValue.value === '') {\n modelValue.value = undefined;\n return;\n }\n modelValue.value = innerNumberValue.value;\n}\n\nconst errors = computed(() => {\n let ers: string[] = [];\n if (props.errorMessage) {\n ers.push(props.errorMessage);\n }\n const parsedValue = innerNumberValue.value;\n if (parsedValue !== undefined && isNaN(parsedValue)) {\n ers.push('Value is not a number');\n } else if (props.validate && parsedValue !== undefined) {\n const error = props.validate(parsedValue);\n if (error) {\n ers.push(error);\n }\n } else {\n if (props.minValue !== undefined && parsedValue !== undefined && parsedValue < props.minValue) {\n ers.push(`Value must be higher than ${props.minValue}`);\n }\n if (props.maxValue !== undefined && parsedValue !== undefined && parsedValue > props.maxValue) {\n ers.push(`Value must be less than ${props.maxValue}`);\n }\n }\n\n ers = [...ers];\n\n return ers.join(' ');\n});\n\nconst isIncrementDisabled = computed(() => {\n const parsedValue = innerNumberValue.value;\n if (props.maxValue !== undefined && parsedValue !== undefined) {\n return parsedValue >= props.maxValue;\n }\n return false;\n});\n\nconst isDecrementDisabled = computed(() => {\n const parsedValue = innerNumberValue.value;\n if (props.minValue !== undefined && parsedValue !== undefined) {\n return parsedValue <= props.minValue;\n }\n return false;\n});\n\nconst multiplier = computed(() =>\n 10 ** (props.step.toString().split('.').at(1)?.length ?? 0),\n);\n\nfunction increment() {\n const parsedValue = innerNumberValue.value;\n if (!isIncrementDisabled.value) {\n let nV;\n if (parsedValue === undefined) {\n nV = props.minValue ? props.minValue : 0;\n } else {\n nV = ((parsedValue || 0) * multiplier.value\n + props.step * multiplier.value)\n / multiplier.value;\n }\n modelValue.value = props.maxValue !== undefined ? Math.min(props.maxValue, nV) : nV;\n }\n}\n\nfunction decrement() {\n const parsedValue = innerNumberValue.value;\n if (!isDecrementDisabled.value) {\n let nV;\n if (parsedValue === undefined) {\n nV = 0;\n } else {\n nV = ((parsedValue || 0) * multiplier.value\n - props.step * multiplier.value)\n / multiplier.value;\n }\n modelValue.value = props.minValue !== undefined ? Math.max(props.minValue, nV) : nV;\n }\n}\n\nfunction handleKeyPress(e: { code: string; preventDefault(): void }) {\n if (props.updateOnEnterOrClickOutside) {\n if (e.code === 'Escape') {\n innerTextValue.value = modelToString(modelValue.value);\n input.value?.blur();\n }\n if (e.code === 'Enter') {\n input.value?.blur();\n }\n }\n\n if (e.code === 'Enter') {\n innerTextValue.value = String(modelValue.value); // to make .1 => 0.1, 10.00 => 10, remove leading zeros etc\n }\n\n if (['ArrowDown', 'ArrowUp'].includes(e.code)) {\n e.preventDefault();\n }\n if (props.useIncrementButtons && e.code === 'ArrowUp') {\n increment();\n }\n if (props.useIncrementButtons && e.code === 'ArrowDown') {\n decrement();\n }\n}\n\n// https://stackoverflow.com/questions/880512/prevent-text-selection-after-double-click#:~:text=If%20you%20encounter%20a%20situation,none%3B%20to%20the%20summary%20element.\n// this prevents selecting of more than input content in some cases,\n// but also disable selecting input content by double-click (useful feature)\nconst onMousedown = (ev: MouseEvent) => {\n if (ev.detail > 1) {\n ev.preventDefault();\n }\n};\n</script>\n\n<template>\n <div\n ref=\"root\"\n :class=\"{ error: !!errors.trim(), disabled: disabled }\"\n class=\"mi-number-field d-flex-column\"\n @keydown=\"handleKeyPress($event)\"\n >\n <div class=\"mi-number-field__main-wrapper d-flex\">\n <DoubleContour class=\"mi-number-field__contour\"/>\n <div\n class=\"mi-number-field__wrapper flex-grow d-flex flex-align-center\"\n :class=\"{withoutArrows: !useIncrementButtons}\"\n >\n <label v-if=\"label\" class=\"text-description\">\n {{ label }}\n <PlTooltip v-if=\"slots.tooltip\" class=\"info\" position=\"top\">\n <template #tooltip>\n <slot name=\"tooltip\"/>\n </template>\n </PlTooltip>\n </label>\n <input\n ref=\"input\"\n v-model=\"inputValue\"\n :disabled=\"disabled\"\n :placeholder=\"placeholder\"\n class=\"text-s flex-grow\"\n @focusin=\"focused = true\"\n @focusout=\"focused = false; applyChanges()\"\n />\n </div>\n <div v-if=\"useIncrementButtons\" class=\"mi-number-field__icons d-flex-column\" @mousedown=\"onMousedown\">\n <div\n :class=\"{ disabled: isIncrementDisabled }\"\n class=\"mi-number-field__icon d-flex flex-justify-center uc-pointer flex-grow flex-align-center\"\n @click=\"increment\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M8 4.93933L13.5303 10.4697L12.4697 11.5303L8 7.06065L3.53033 11.5303L2.46967 10.4697L8 4.93933Z\"\n fill=\"#110529\"\n />\n </svg>\n </div>\n <div\n :class=\"{ disabled: isDecrementDisabled }\"\n class=\"mi-number-field__icon d-flex flex-justify-center uc-pointer flex-grow flex-align-center\"\n @click=\"decrement\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M2.46967 6.53033L3.53033 5.46967L8 9.93934L12.4697 5.46967L13.5303 6.53033L8 12.0607L2.46967 6.53033Z\"\n fill=\"#110529\"\n />\n </svg>\n </div>\n </div>\n </div>\n <div v-if=\"errors.trim()\" class=\"mi-number-field__hint text-description\">\n {{ errors }}\n </div>\n </div>\n</template>\n"],"names":["props","__props","modelValue","_useModel","root","ref","slots","useSlots","input","useLabelNotch","modelToString","v","isPartial","stringToModel","forParsing","innerTextValue","innerNumberValue","computed","watch","outerValue","NUMBER_REGEX","inputValue","nextValue","parsedValue","applyChanges","focused","errors","ers","error","isIncrementDisabled","isDecrementDisabled","multiplier","_a","increment","nV","decrement","handleKeyPress","_b","onMousedown","ev"],"mappings":"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"}