@semcore/input-number 17.2.2 → 17.3.0-prerelease.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.
@@ -1,9 +1,14 @@
1
+ import _applyDecs from "@babel/runtime/helpers/applyDecs2311";
2
+ import _identity from "@babel/runtime/helpers/identity";
1
3
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
4
  import { sstyled as _sstyled } from "@semcore/core";
3
5
  import { assignProps as _assignProps3 } from "@semcore/core";
4
6
  import { assignProps as _assignProps2 } from "@semcore/core";
5
7
  import { assignProps as _assignProps } from "@semcore/core";
8
+ var _Class, _Value3;
9
+ let _initClass, _Value2;
6
10
  import { Component, createComponent, Root, sstyled } from '@semcore/core';
11
+ import propsObserver from '@semcore/core/lib/decorators/propsObserver';
7
12
  import { callAllEventHandlers } from '@semcore/core/lib/utils/assignProps';
8
13
  import i18nEnhance from '@semcore/core/lib/utils/enhances/i18nEnhance';
9
14
  import { forkRef } from '@semcore/core/lib/utils/ref';
@@ -11,17 +16,17 @@ import Input from '@semcore/input';
11
16
  import React from 'react';
12
17
  import { DecrementIcon, IncrementIcon } from './buttons';
13
18
  /*!__reshadow-styles__:"./style/input-number.shadow.css"*/
14
- const style = (/*__reshadow_css_start__*/_sstyled.insert(/*__inner_css_start__*/".___SValue_1i69c_gg_:focus~.___SControls_1i69c_gg_{display:flex}.___SControls_1i69c_gg_{display:none;flex-flow:column;justify-content:center;height:100%;box-sizing:border-box}.___SControls_1i69c_gg_.__showControls_1i69c_gg_{display:flex}.___SDown_1i69c_gg_,.___SUp_1i69c_gg_{padding:0;width:16px;color:var(--intergalactic-icon-secondary-neutral,rgba(0,5,2,.385));box-sizing:border-box;display:inline-flex;justify-content:center;border:none;background:none;cursor:pointer}@media (color-gamut:p3){.___SDown_1i69c_gg_,.___SUp_1i69c_gg_{color:var(--intergalactic-icon-secondary-neutral,oklch(.104 .023 162.3/.385))}}.___SDown_1i69c_gg_:focus,.___SUp_1i69c_gg_:focus{outline:none}@media (hover:hover){.___SDown_1i69c_gg_:hover,.___SUp_1i69c_gg_:hover{color:var(--intergalactic-icon-secondary-neutral-hover-active,#0005026e)}@media (color-gamut:p3){.___SDown_1i69c_gg_:hover,.___SUp_1i69c_gg_:hover{color:var(--intergalactic-icon-secondary-neutral-hover-active,oklch(.1 .023 159.1/.433))}}}.___SUp_1i69c_gg_{padding-bottom:1px}.___SDown_1i69c_gg_{padding-top:1px}.___SValue_1i69c_gg_::-webkit-inner-spin-button,.___SValue_1i69c_gg_::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.___SValue_1i69c_gg_._type_number_1i69c_gg_{-moz-appearance:textfield}.___SValue_1i69c_gg_.__disabled_1i69c_gg_~.___SControls_1i69c_gg_{opacity:var(--intergalactic-disabled-opacity,.4);cursor:default;pointer-events:none}.___SValueHidden_1i69c_gg_{position:absolute;top:0;width:1px;height:1px;padding:0;overflow:hidden}", /*__inner_css_end__*/"1i69c_gg_"),
19
+ const style = (/*__reshadow_css_start__*/_sstyled.insert(/*__inner_css_start__*/".___SValue_9udw0_gg_:focus~.___SControls_9udw0_gg_{display:flex}.___SControls_9udw0_gg_{display:none;flex-flow:column;justify-content:center;height:100%;box-sizing:border-box}.___SControls_9udw0_gg_.__showControls_9udw0_gg_{display:flex}.___SDown_9udw0_gg_,.___SUp_9udw0_gg_{padding:0;width:16px;color:var(--intergalactic-icon-secondary-neutral,rgba(0,5,2,.385));box-sizing:border-box;display:inline-flex;justify-content:center;border:none;background:none;cursor:pointer}@media (color-gamut:p3){.___SDown_9udw0_gg_,.___SUp_9udw0_gg_{color:var(--intergalactic-icon-secondary-neutral,oklch(.104 .023 162.3/.385))}}.___SDown_9udw0_gg_:focus,.___SUp_9udw0_gg_:focus{outline:none}@media (hover:hover){.___SDown_9udw0_gg_:hover,.___SUp_9udw0_gg_:hover{color:var(--intergalactic-icon-secondary-neutral-hover-active,#0005026e)}@media (color-gamut:p3){.___SDown_9udw0_gg_:hover,.___SUp_9udw0_gg_:hover{color:var(--intergalactic-icon-secondary-neutral-hover-active,oklch(.1 .023 159.1/.433))}}}.___SUp_9udw0_gg_{padding-bottom:1px}.___SDown_9udw0_gg_{padding-top:1px}.___SValue_9udw0_gg_::-webkit-inner-spin-button,.___SValue_9udw0_gg_::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.___SValue_9udw0_gg_._type_number_9udw0_gg_{-moz-appearance:textfield}.___SValue_9udw0_gg_.__disabled_9udw0_gg_~.___SControls_9udw0_gg_{opacity:var(--intergalactic-disabled-opacity,.4);cursor:default;pointer-events:none}.___SValueHidden_9udw0_gg_{position:absolute;top:0;width:1px;height:1px;padding:0;overflow:hidden}", /*__inner_css_end__*/"9udw0_gg_"),
15
20
  /*__reshadow_css_end__*/
16
21
  {
17
- "__SValue": "___SValue_1i69c_gg_",
18
- "__SControls": "___SControls_1i69c_gg_",
19
- "_showControls": "__showControls_1i69c_gg_",
20
- "__SUp": "___SUp_1i69c_gg_",
21
- "__SDown": "___SDown_1i69c_gg_",
22
- "_disabled": "__disabled_1i69c_gg_",
23
- "__SValueHidden": "___SValueHidden_1i69c_gg_",
24
- "_type_number": "_type_number_1i69c_gg_"
22
+ "__SValue": "___SValue_9udw0_gg_",
23
+ "__SControls": "___SControls_9udw0_gg_",
24
+ "_showControls": "__showControls_9udw0_gg_",
25
+ "__SUp": "___SUp_9udw0_gg_",
26
+ "__SDown": "___SDown_9udw0_gg_",
27
+ "_disabled": "__disabled_9udw0_gg_",
28
+ "__SValueHidden": "___SValueHidden_9udw0_gg_",
29
+ "_type_number": "_type_number_9udw0_gg_"
25
30
  });
26
31
  import { localizedMessages } from './translations/__intergalactic-dynamic-locales';
27
32
 
@@ -85,39 +90,35 @@ _defineProperty(InputNumber, "defaultProps", {
85
90
  i18n: localizedMessages,
86
91
  locale: 'en'
87
92
  });
88
- class Value extends Component {
93
+ let _Value;
94
+ new (_Value2 = (_Value3 = class Value extends Component {
89
95
  constructor(...args) {
90
96
  super(...args);
97
+ _defineProperty(this, "valueType", typeof this.props.value === 'number' || this.props.value === null ? 'number' : 'string');
91
98
  _defineProperty(this, "state", {
92
99
  displayValue: ''
93
100
  });
94
101
  _defineProperty(this, "valueInputRef", /*#__PURE__*/React.createRef());
95
102
  _defineProperty(this, "cursorPosition", -1);
96
103
  _defineProperty(this, "getFormattedValue", value => {
97
- return value.replace(new RegExp(`[${this.separatorThousands}]`, 'g'), '').replace(this.separatorDecimal, '.');
104
+ return value.replace(new RegExp(`[${this.separatorThousands}]`, 'g'), '').replace(this.separatorDecimal, '.').replace(new RegExp('\\.\\.', 'g'), '.');
98
105
  });
99
- _defineProperty(this, "valueParser", (value, prevValue, prevDisplayValue) => {
106
+ _defineProperty(this, "getDisplayValue", (value, prevDisplayValue) => {
100
107
  const {
101
108
  numberFormatter
102
109
  } = this.props;
103
- const stringNumber = this.getFormattedValue(String(value));
110
+ const stringNumber = String(value);
104
111
  if (Number.isNaN(Number(stringNumber))) {
105
- return {
106
- parsedValue: prevValue,
107
- displayValue: prevDisplayValue
108
- };
112
+ return prevDisplayValue;
109
113
  }
110
114
  let displayValue = '';
111
115
  if (/\.[0-9]*0$/.test(stringNumber)) {
112
- const [int, decimal] = stringNumber.split(this.separatorDecimal);
116
+ const [int, decimal] = stringNumber.split('.');
113
117
  displayValue = numberFormatter.format(+int) + this.separatorDecimal + decimal;
114
118
  } else if (stringNumber !== '') {
115
119
  displayValue = numberFormatter.format(+stringNumber);
116
120
  }
117
- return {
118
- parsedValue: stringNumber,
119
- displayValue: displayValue
120
- };
121
+ return displayValue;
121
122
  });
122
123
  _defineProperty(this, "handleValidation", event => {
123
124
  const {
@@ -126,15 +127,10 @@ class Value extends Component {
126
127
  max,
127
128
  step
128
129
  } = this.asProps;
129
- const {
130
- displayValue
131
- } = this.state;
132
- const {
133
- parsedValue
134
- } = this.valueParser(event.currentTarget.value, value, displayValue);
130
+ const parsedValue = this.getFormattedValue(event.currentTarget.value);
135
131
  if (Number.isNaN(value) || Number.isNaN(Number.parseFloat(parsedValue))) {
136
132
  event.currentTarget.value = '';
137
- this.handlers.value('', event);
133
+ this.handlers.value(this.processedValue(''), event);
138
134
  } else {
139
135
  let numberValue = parseValueWithMinMax(Number.parseFloat(parsedValue), min, max);
140
136
  const rounded = this.round(numberValue % step);
@@ -145,7 +141,7 @@ class Value extends Component {
145
141
  numberValue -= rounded;
146
142
  }
147
143
  }
148
- this.handlers.value(this.getDisplayValue(numberValue), event);
144
+ this.handlers.value(this.processedValue(this.getStringValue(numberValue)), event);
149
145
  }
150
146
  });
151
147
  _defineProperty(this, "onWheel", event => {
@@ -177,19 +173,26 @@ class Value extends Component {
177
173
  return false;
178
174
  }
179
175
  if (value.endsWith('.')) {
180
- if (value.length > prevValue.length) {
176
+ if (prevValue !== null && value.length > prevValue.toString().length) {
181
177
  this.setState({
182
178
  displayValue: numberFormatter.format(value) + this.separatorDecimal
183
179
  });
184
180
  return false;
185
181
  } else {
186
- this.handlers.value(value.slice(0, -1), event);
182
+ this.handlers.value(this.processedValue(value.slice(0, -1)), event);
187
183
  return false;
188
184
  }
189
185
  }
190
186
  const digits = /^[0-9.-]+$/.test(value);
191
187
  if (digits || value === '') {
192
- this.handlers.value(this.limitDecimals(value), event);
188
+ const newValue = this.limitDecimals(value);
189
+ this.handlers.value(this.processedValue(newValue), event);
190
+ if (newValue === prevValue) {
191
+ const displayValue = this.getDisplayValue(newValue ?? '', this.state.displayValue);
192
+ this.setState({
193
+ displayValue
194
+ });
195
+ }
193
196
  }
194
197
  });
195
198
  _defineProperty(this, "handleKeyUp", event => {
@@ -318,14 +321,14 @@ class Value extends Component {
318
321
  let numberValue;
319
322
 
320
323
  // https://stackoverflow.com/questions/68010124/safari-number-input-stepup-stepdown-not-functioning-with-empty-value
321
- if (value === '') {
324
+ if (value === '' || value === null) {
322
325
  numberValue = min ?? 0;
323
326
  } else {
324
327
  numberValue = Number.parseFloat(value);
325
328
  }
326
329
  if (Number.isNaN(numberValue)) return;
327
330
  const nextValue = Math.min(numberValue + step, max);
328
- this.handlers.value(this.getDisplayValue(nextValue), event);
331
+ this.handlers.value(this.processedValue(this.getStringValue(nextValue)), event);
329
332
  });
330
333
  _defineProperty(this, "stepDown", event => {
331
334
  const {
@@ -335,14 +338,14 @@ class Value extends Component {
335
338
  value
336
339
  } = this.asProps;
337
340
  let numberValue;
338
- if (value === '') {
341
+ if (value === '' || value === null) {
339
342
  numberValue = max ?? 0;
340
343
  } else {
341
344
  numberValue = Number.parseFloat(value);
342
345
  }
343
346
  if (Number.isNaN(numberValue)) return;
344
347
  const nextValue = Math.max(numberValue - step, min);
345
- this.handlers.value(this.getDisplayValue(nextValue), event);
348
+ this.handlers.value(this.processedValue(this.getStringValue(nextValue)), event);
346
349
  });
347
350
  }
348
351
  uncontrolledProps() {
@@ -351,17 +354,11 @@ class Value extends Component {
351
354
  const {
352
355
  displayValue: prevDisplayValue
353
356
  } = this.state;
354
- const {
355
- value: prevValue
356
- } = this.asProps;
357
- const {
358
- parsedValue,
359
- displayValue
360
- } = this.valueParser(newValue ?? '', prevValue, prevDisplayValue);
357
+ const displayValue = this.getDisplayValue(newValue ?? '', prevDisplayValue);
361
358
  this.setState({
362
359
  displayValue
363
360
  });
364
- return parsedValue;
361
+ return String(newValue);
365
362
  }]
366
363
  };
367
364
  }
@@ -375,7 +372,19 @@ class Value extends Component {
375
372
  const {
376
373
  numberFormatter
377
374
  } = this.props;
378
- return numberFormatter.format(1111).replace(/\d/g, '');
375
+ return numberFormatter.format(11111).replace(/\d/g, '');
376
+ }
377
+ onPropsChange(changedProps) {
378
+ const {
379
+ value
380
+ } = changedProps;
381
+ if (value !== undefined) {
382
+ if (typeof value === 'number' || value === null) {
383
+ this.valueType = 'number';
384
+ } else {
385
+ this.valueType = 'string';
386
+ }
387
+ }
379
388
  }
380
389
  get stepPrecision() {
381
390
  const {
@@ -384,7 +393,7 @@ class Value extends Component {
384
393
  const [_, decimals] = step?.toString().split('.') ?? [];
385
394
  return decimals?.length ?? 0;
386
395
  }
387
- getDisplayValue(value) {
396
+ getStringValue(value) {
388
397
  return value === 0 ? `${value}` : value.toFixed(this.stepPrecision);
389
398
  }
390
399
  limitDecimals(value) {
@@ -420,9 +429,7 @@ class Value extends Component {
420
429
  inputRef.current.stepDown = this.stepDown;
421
430
  }
422
431
  if (value !== '') {
423
- const {
424
- displayValue
425
- } = this.valueParser(value, '', '');
432
+ const displayValue = this.getDisplayValue(value, '');
426
433
  this.setState({
427
434
  displayValue
428
435
  });
@@ -430,9 +437,7 @@ class Value extends Component {
430
437
  }
431
438
  componentDidUpdate(prevProps, prevState) {
432
439
  if (prevProps.value !== this.props.value) {
433
- const {
434
- displayValue
435
- } = this.valueParser(this.props.value ?? '', prevProps.value, prevState.displayValue);
440
+ const displayValue = this.getDisplayValue(this.props.value ?? '', prevState.displayValue);
436
441
  this.setState({
437
442
  displayValue
438
443
  });
@@ -441,6 +446,15 @@ class Value extends Component {
441
446
  componentWillUnmount() {
442
447
  this.valueInputRef.current?.removeEventListener('wheel', this.onWheel);
443
448
  }
449
+ processedValue(value) {
450
+ if (this.valueType === 'string') {
451
+ return value;
452
+ }
453
+ if (value === '') {
454
+ return null;
455
+ }
456
+ return Number(value);
457
+ }
444
458
  render() {
445
459
  var _ref2 = this.asProps,
446
460
  _ref5;
@@ -473,13 +487,15 @@ class Value extends Component {
473
487
  }, _ref2)
474
488
  })));
475
489
  }
476
- }
477
- _defineProperty(Value, "style", style);
478
- _defineProperty(Value, "defaultProps", {
479
- defaultValue: '',
480
- defaultDisplayValue: '',
481
- step: 1
482
- });
490
+ }, [_Value, _initClass] = _applyDecs(_Value3, [propsObserver(['value'])], [], 0, void 0, Component).c, _Value3), _Class = class extends _identity {
491
+ constructor() {
492
+ super(_Value), _defineProperty(this, "style", style), _defineProperty(this, "defaultProps", {
493
+ defaultValue: '',
494
+ defaultDisplayValue: '',
495
+ step: 1
496
+ }), _initClass();
497
+ }
498
+ }, _defineProperty(_Class, _Value2, void 0), _Class)();
483
499
  function Controls(props) {
484
500
  var _ref3 = arguments[0],
485
501
  _ref6;
@@ -517,7 +533,7 @@ Controls.style = style;
517
533
  * {@link https://developer.semrush.com/intergalactic/components/input-number/input-number-api/|API} | {@link https://developer.semrush.com/intergalactic/components/input-number/input-number-code/|Examples}
518
534
  */
519
535
  export default createComponent(InputNumber, {
520
- Value,
536
+ Value: _Value,
521
537
  Controls,
522
538
  Addon: Input.Addon
523
539
  });
@@ -1 +1 @@
1
- {"version":3,"file":"InputNumber.js","names":["Component","createComponent","Root","sstyled","callAllEventHandlers","i18nEnhance","forkRef","Input","React","DecrementIcon","IncrementIcon","style","_sstyled","insert","localizedMessages","parseValueWithMinMax","value","min","Number","MIN_SAFE_INTEGER","max","MAX_SAFE_INTEGER","Math","InputNumber","constructor","args","_defineProperty","createRef","event","inputRef","current","stepUp","stepDown","getValueProps","numberFormatter","Intl","NumberFormat","asProps","locale","maximumFractionDigits","increment","decrement","getControlsProps","getI18nText","render","_ref","_ref4","SInputNumber","createElement","cn","_assignProps","size","i18n","Value","displayValue","replace","RegExp","separatorThousands","separatorDecimal","prevValue","prevDisplayValue","props","stringNumber","getFormattedValue","String","isNaN","parsedValue","test","int","decimal","split","format","step","state","valueParser","currentTarget","parseFloat","handlers","numberValue","rounded","round","abs","getDisplayValue","onWheel","handleWheel","target","valueInputRef","document","activeElement","preventDefault","deltaY","setState","endsWith","length","slice","digits","limitDecimals","key","cursorPosition","element","indexOf","stopPropagation","selectionStart","includes","afterSelection","selectionEnd","undefined","requestAnimationFrame","newValue","index","lastIndexOf","setSelectionRange","cursorIndex","shiftKey","moveSelectionLeft","moveSelectionRight","nextPosition","nextValue","uncontrolledProps","stepPrecision","_","decimals","toString","toFixed","dotIndex","toPrecision","componentDidMount","addEventListener","autoFocus","setTimeout","focus","componentDidUpdate","prevProps","prevState","componentWillUnmount","removeEventListener","_ref2","_ref5","SValue","styles","forwardRef","Fragment","_assignProps2","handleValidation","handleChange","handleKeyDown","handleKeyUp","handleClick","isInteger","defaultValue","defaultDisplayValue","Controls","_ref3","arguments[0]","_ref6","Children","SControls","Addon","SUp","SDown","_assignProps3"],"sources":["../../src/InputNumber.tsx"],"sourcesContent":["import type { Intergalactic } from '@semcore/core';\nimport { Component, createComponent, Root, sstyled } from '@semcore/core';\nimport { callAllEventHandlers } from '@semcore/core/lib/utils/assignProps';\nimport type { WithI18nEnhanceProps } from '@semcore/core/lib/utils/enhances/i18nEnhance';\nimport i18nEnhance from '@semcore/core/lib/utils/enhances/i18nEnhance';\nimport { forkRef } from '@semcore/core/lib/utils/ref';\nimport Input from '@semcore/input';\nimport React from 'react';\n\nimport { DecrementIcon, IncrementIcon } from './buttons';\nimport type { NSInputNumber } from './InputNumber.type';\nimport style from './style/input-number.shadow.css';\nimport { localizedMessages } from './translations/__intergalactic-dynamic-locales';\n\n/** Events that can trigger a value step (buttons, keyboard arrows, mouse wheel). */\ntype StepEvent =\n | React.MouseEvent\n | React.KeyboardEvent\n | WheelEvent;\n\n/**\n * The input DOM node whose native `stepUp`/`stepDown` methods are replaced at runtime\n * (see `Value.componentDidMount`) with event-aware versions.\n */\ntype InputElement = Omit<HTMLInputElement, 'stepUp' | 'stepDown'> & {\n stepUp: (event: StepEvent) => void;\n stepDown: (event: StepEvent) => void;\n};\n\nexport function parseValueWithMinMax(\n value: number,\n min = Number.MIN_SAFE_INTEGER,\n max = Number.MAX_SAFE_INTEGER,\n) {\n return Math.max(min, Math.min(max, value));\n}\n\nclass InputNumber extends Component<\n Intergalactic.InternalTypings.InferComponentProps<NSInputNumber.Component>,\n typeof InputNumber.enhance,\n {},\n WithI18nEnhanceProps,\n {},\n NSInputNumber.DefaultProps\n> {\n static displayName = 'InputNumber';\n static style = style;\n static enhance = [i18nEnhance(localizedMessages)] as const;\n static defaultProps = {\n size: 'm',\n i18n: localizedMessages,\n locale: 'en',\n } as const;\n\n inputRef = React.createRef<InputElement>();\n\n increment = (event: React.MouseEvent) => {\n (this.inputRef.current)?.stepUp?.(event);\n };\n\n decrement = (event: React.MouseEvent) => {\n (this.inputRef.current)?.stepDown?.(event);\n };\n\n getValueProps() {\n const numberFormatter = new Intl.NumberFormat(this.asProps.locale, {\n style: 'decimal',\n maximumFractionDigits: 100,\n });\n\n return {\n inputRef: this.inputRef,\n increment: this.increment,\n decrement: this.decrement,\n numberFormatter,\n };\n }\n\n getControlsProps() {\n const { getI18nText } = this.asProps;\n return {\n increment: this.increment,\n decrement: this.decrement,\n getI18nText,\n };\n }\n\n render() {\n const SInputNumber = Root;\n return sstyled(this.asProps.style)(<SInputNumber render={Input} />);\n }\n}\n\nclass Value extends Component<\n Intergalactic.InternalTypings.InferChildComponentProps<NSInputNumber.Value.Component, typeof InputNumber, 'Value'>,\n [],\n NSInputNumber.Value.Handlers,\n {},\n NSInputNumber.Value.State,\n NSInputNumber.Value.DefaultProps\n> {\n static style = style;\n static defaultProps = {\n defaultValue: '',\n defaultDisplayValue: '',\n step: 1,\n } as const;\n\n state: NSInputNumber.Value.State = {\n displayValue: '',\n };\n\n valueInputRef = React.createRef<HTMLInputElement>();\n\n cursorPosition: number | null = -1;\n\n uncontrolledProps(): NSInputNumber.Value.Handlers {\n return {\n value: [\n null,\n (newValue) => {\n const { displayValue: prevDisplayValue } = this.state;\n const { value: prevValue } = this.asProps;\n\n const { parsedValue, displayValue } = this.valueParser(\n newValue ?? '',\n prevValue,\n prevDisplayValue,\n );\n\n this.setState({ displayValue });\n\n return parsedValue;\n },\n ],\n };\n }\n\n get separatorDecimal() {\n const { numberFormatter } = this.props;\n\n return numberFormatter.format(11.11).replace(/\\d/g, '');\n }\n\n get separatorThousands() {\n const { numberFormatter } = this.props;\n\n return numberFormatter.format(1111).replace(/\\d/g, '');\n }\n\n getFormattedValue = (value: string) => {\n return value\n .replace(new RegExp(`[${this.separatorThousands}]`, 'g'), '')\n .replace(this.separatorDecimal, '.');\n };\n\n valueParser = (\n value: typeof this.asProps['value'],\n prevValue: typeof this.asProps['value'],\n prevDisplayValue: NSInputNumber.Value.State['displayValue'],\n ) => {\n const { numberFormatter } = this.props;\n\n const stringNumber = this.getFormattedValue(String(value));\n\n if (Number.isNaN(Number(stringNumber))) {\n return {\n parsedValue: prevValue,\n displayValue: prevDisplayValue,\n };\n }\n\n let displayValue = '';\n\n if (/\\.[0-9]*0$/.test(stringNumber)) {\n const [int, decimal] = stringNumber.split(this.separatorDecimal);\n displayValue = numberFormatter.format(+int) + this.separatorDecimal + decimal;\n } else if (stringNumber !== '') {\n displayValue = numberFormatter.format(+stringNumber);\n }\n\n return {\n parsedValue: stringNumber,\n displayValue: displayValue,\n };\n };\n\n get stepPrecision() {\n const { step } = this.asProps;\n const [_, decimals] = step?.toString().split('.') ?? [];\n\n return decimals?.length ?? 0;\n }\n\n getDisplayValue(value: number): string {\n return value === 0 ? `${value}` : value.toFixed(this.stepPrecision);\n }\n\n limitDecimals(value: string) {\n const { stepPrecision } = this;\n if (stepPrecision === 0) return value;\n\n const dotIndex = value.indexOf('.');\n if (dotIndex === -1 || value.length - dotIndex - 1 <= stepPrecision) return value;\n\n return value.slice(0, dotIndex + 1 + stepPrecision);\n }\n\n round(value: number): number {\n const { stepPrecision } = this;\n\n return stepPrecision === 0\n ? value\n : Number(value.toPrecision(stepPrecision));\n }\n\n handleValidation = (event: React.FocusEvent<HTMLInputElement>) => {\n const { value, min, max, step } = this.asProps;\n const { displayValue } = this.state;\n const { parsedValue } = this.valueParser(event.currentTarget.value, value, displayValue);\n\n if (Number.isNaN(value) || Number.isNaN(Number.parseFloat(parsedValue))) {\n event.currentTarget.value = '';\n this.handlers.value('', event);\n } else {\n let numberValue = parseValueWithMinMax(Number.parseFloat(parsedValue), min, max);\n const rounded = this.round(numberValue % step);\n if (rounded !== 0) {\n if (rounded >= step / 2) {\n numberValue += step - rounded;\n } else if (Math.abs(rounded) < step) {\n numberValue -= rounded;\n }\n }\n\n this.handlers.value(this.getDisplayValue(numberValue), event);\n }\n };\n\n // https://stackoverflow.com/questions/57358640/cancel-wheel-event-with-e-preventdefault-in-react-event-bubbling\n componentDidMount() {\n this.valueInputRef.current?.addEventListener('wheel', this.onWheel);\n\n const { inputRef, value, autoFocus } = this.asProps;\n\n if (autoFocus) {\n setTimeout(() => {\n this.valueInputRef.current?.focus();\n });\n }\n\n if (inputRef.current) {\n inputRef.current.stepUp = this.stepUp;\n inputRef.current.stepDown = this.stepDown;\n }\n\n if (value !== '') {\n const { displayValue } = this.valueParser(value, '', '');\n this.setState({ displayValue });\n }\n }\n\n componentDidUpdate(prevProps: typeof this.asProps, prevState: typeof this.state) {\n if (prevProps.value !== this.props.value) {\n const { displayValue } = this.valueParser(\n this.props.value ?? '',\n prevProps.value,\n prevState.displayValue,\n );\n this.setState({ displayValue });\n }\n }\n\n componentWillUnmount() {\n this.valueInputRef.current?.removeEventListener('wheel', this.onWheel);\n }\n\n onWheel = (event: WheelEvent) => {\n callAllEventHandlers(this.asProps.onWheel, this.handleWheel)(event);\n };\n\n handleWheel = (event: WheelEvent) => {\n if (event.target !== this.valueInputRef.current) return;\n if (document.activeElement !== this.valueInputRef.current) return;\n event.preventDefault();\n if (event.deltaY < 0) {\n this.stepUp(event);\n } else if (event.deltaY > 0) {\n this.stepDown(event);\n }\n };\n\n handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const value = this.getFormattedValue(event.currentTarget.value);\n const { numberFormatter, value: prevValue } = this.asProps;\n\n if (value === '.' || value === '-') {\n this.setState({ displayValue: value });\n return false;\n }\n\n if (value.endsWith('-')) {\n return false;\n }\n\n if (value.endsWith('.')) {\n if (value.length > prevValue.length) {\n this.setState({ displayValue: numberFormatter.format(value as `${number}`) + this.separatorDecimal });\n return false;\n } else {\n this.handlers.value(value.slice(0, -1), event);\n return false;\n }\n }\n\n const digits = /^[0-9.-]+$/.test(value);\n\n if (digits || value === '') {\n this.handlers.value(this.limitDecimals(value), event);\n }\n };\n\n handleKeyUp = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Shift') {\n this.cursorPosition = -1;\n }\n };\n\n handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const element = event.currentTarget;\n const value = element.value;\n const length = value.length;\n const { displayValue } = this.state;\n\n if (event.key === '.' || event.key === ',') {\n // for the first decimal separator we should replace both ',' and '.' to '.' because of how js convert strings to numbers (with ',' it will be Number.NaN)\n if (value.indexOf(this.separatorDecimal) === -1 && event.key === ',') {\n event.currentTarget.value = value + '.';\n } else if (value.indexOf(this.separatorDecimal) !== -1) { // we could press decimal separator second time - prevent this '1.5.'\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n }\n\n if (event.key === 'Backspace' && value.endsWith(this.separatorDecimal)) {\n event.preventDefault();\n event.stopPropagation();\n this.setState({ displayValue: displayValue?.slice(0, -1) });\n return false;\n }\n\n if (\n element.selectionStart !== length &&\n (event.key === 'Backspace' ||\n event.key === this.separatorDecimal ||\n ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'].includes(event.key))\n ) {\n const afterSelection = value.slice(element.selectionEnd ?? undefined);\n\n requestAnimationFrame(() => {\n const newValue = this.state.displayValue;\n const index = newValue.lastIndexOf(afterSelection);\n const selectionStart = index;\n const selectionEnd = index;\n\n element.setSelectionRange(selectionStart, selectionEnd);\n });\n }\n\n // For correct moving cursor with skip separatorThousands.\n // Examples:\n // - Press ArrowLeft: `12,3|4 -> 12|,34`\n // - Press ArrowRight: `1|,55 -> 1,5|5`\n const cursorIndex = 2;\n\n if (event.shiftKey && this.cursorPosition === -1) {\n this.cursorPosition = element.selectionStart;\n }\n\n switch (event.key) {\n case 'ArrowLeft': {\n event.preventDefault();\n this.moveSelectionLeft(element, cursorIndex);\n break;\n }\n case 'ArrowRight': {\n event.preventDefault();\n this.moveSelectionRight(element, cursorIndex);\n break;\n }\n case 'ArrowDown': {\n event.preventDefault();\n this.stepDown(event);\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n this.stepUp(event);\n break;\n }\n }\n };\n\n moveSelectionLeft = (element: React.KeyboardEvent<HTMLInputElement>['currentTarget'], cursorIndex: number) => {\n if (element.selectionStart === null) return;\n\n const value = element.value;\n\n const nextPosition = element.selectionStart - 1 >= 0 ? element.selectionStart - 1 : 0;\n\n const cursorPosition =\n value[element.selectionStart - cursorIndex] === this.separatorThousands\n ? element.selectionStart - cursorIndex\n : nextPosition;\n\n if (this.cursorPosition === -1) {\n // without shift\n element.setSelectionRange(cursorPosition, cursorPosition);\n } else {\n if (\n this.cursorPosition &&\n element.selectionStart <= this.cursorPosition &&\n element.selectionEnd === this.cursorPosition\n ) {\n element.setSelectionRange(cursorPosition, element.selectionEnd);\n } else if (element.selectionEnd !== null) {\n element.setSelectionRange(\n element.selectionStart,\n value[element.selectionEnd - cursorIndex] === this.separatorThousands\n ? element.selectionEnd - cursorIndex\n : element.selectionEnd - 1,\n );\n }\n }\n };\n\n moveSelectionRight = (element: React.KeyboardEvent<HTMLInputElement>['currentTarget'], cursorIndex: number) => {\n if (element.selectionEnd === null) return;\n\n const value = element.value;\n const nextPosition = element.selectionEnd + 1;\n\n const cursorPosition =\n value[element.selectionEnd] === this.separatorThousands\n ? element.selectionEnd + cursorIndex\n : nextPosition;\n\n if (this.cursorPosition === -1) {\n // without shift\n element.setSelectionRange(cursorPosition, cursorPosition);\n } else {\n if (\n this.cursorPosition &&\n element.selectionEnd >= this.cursorPosition &&\n element.selectionStart === this.cursorPosition\n ) {\n element.setSelectionRange(element.selectionStart, cursorPosition);\n } else if (element.selectionStart !== null) {\n element.setSelectionRange(\n value[element.selectionStart] === this.separatorThousands\n ? element.selectionStart + cursorIndex\n : element.selectionStart + 1,\n element.selectionEnd,\n );\n }\n }\n };\n\n handleClick = (event: React.MouseEvent<HTMLInputElement>) => {\n const element = event.currentTarget;\n const value = element.value;\n\n if (element.selectionStart !== null && value[element.selectionStart - 1] === this.separatorThousands) {\n element.setSelectionRange(element.selectionStart - 1, element.selectionEnd! - 1);\n }\n };\n\n stepUp = (event: StepEvent) => {\n const { max = Number.MAX_SAFE_INTEGER, min, step, value } = this.asProps;\n\n let numberValue;\n\n // https://stackoverflow.com/questions/68010124/safari-number-input-stepup-stepdown-not-functioning-with-empty-value\n if (value === '') {\n numberValue = min ?? 0;\n } else {\n numberValue = Number.parseFloat(value);\n }\n\n if (Number.isNaN(numberValue)) return;\n\n const nextValue = Math.min(numberValue + step, max);\n\n this.handlers.value(this.getDisplayValue(nextValue), event);\n };\n\n stepDown = (event: StepEvent) => {\n const { max, min = Number.MIN_SAFE_INTEGER, step, value } = this.asProps;\n\n let numberValue;\n\n if (value === '') {\n numberValue = max ?? 0;\n } else {\n numberValue = Number.parseFloat(value);\n }\n\n if (Number.isNaN(numberValue)) return;\n\n const nextValue = Math.max(numberValue - step, min);\n\n this.handlers.value(this.getDisplayValue(nextValue), event);\n };\n\n render() {\n const SValue = Root;\n const { styles, min, max, step, forwardRef, inputRef } = this.asProps;\n const { displayValue } = this.state;\n\n return sstyled(styles)(\n <>\n <SValue\n render={Input.Value}\n autoComplete='off'\n onBlur={this.handleValidation}\n use:onChange={this.handleChange}\n onKeyDown={this.handleKeyDown}\n onKeyUp={this.handleKeyUp}\n onClick={this.handleClick}\n use:ref={forkRef(this.valueInputRef, inputRef, forwardRef ?? null)}\n use:value={displayValue}\n inputMode={Number.isInteger(step) ? 'numeric' : 'decimal'}\n min={min}\n max={max}\n step={step}\n />\n </>,\n );\n }\n}\n\nfunction Controls(\n props: Intergalactic.InternalTypings.InferChildComponentProps<NSInputNumber.Controls.Component, typeof InputNumber, 'Controls'>,\n) {\n const { Children, increment, decrement, styles, getI18nText } = props;\n const SControls = Root;\n const SUp = 'button';\n const SDown = 'button';\n\n return sstyled(styles)(\n <SControls render={Input.Addon} aria-hidden='true'>\n <SUp\n onClick={increment}\n tabIndex={-1}\n type='button'\n aria-label={getI18nText('increment')}\n >\n <IncrementIcon />\n </SUp>\n <SDown\n onClick={decrement}\n tabIndex={-1}\n type='button'\n aria-label={getI18nText('decrement')}\n >\n <DecrementIcon />\n </SDown>\n <Children />\n </SControls>,\n );\n}\nControls.style = style;\n\n/**\n * InputNumber\n *\n * {@link https://developer.semrush.com/intergalactic/components/input-number/input-number-api/|API} | {@link https://developer.semrush.com/intergalactic/components/input-number/input-number-code/|Examples}\n */\nexport default createComponent<\n NSInputNumber.Component,\n typeof InputNumber\n>(InputNumber, {\n Value,\n Controls,\n Addon: Input.Addon,\n});\n"],"mappings":";;;;;AACA,SAASA,SAAS,EAAEC,eAAe,EAAEC,IAAI,EAAEC,OAAO,QAAQ,eAAe;AACzE,SAASC,oBAAoB,QAAQ,qCAAqC;AAE1E,OAAOC,WAAW,MAAM,8CAA8C;AACtE,SAASC,OAAO,QAAQ,6BAA6B;AACrD,OAAOC,KAAK,MAAM,gBAAgB;AAClC,OAAOC,KAAK,MAAM,OAAO;AAEzB,SAASC,aAAa,EAAEC,aAAa,QAAQ,WAAW;AAAC;AAAA,MAAAC,KAAA,8BAAAC,QAAA,CAAAC,MAAA;AAAA;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;AAGzD,SAASC,iBAAiB,QAAQ,gDAAgD;;AAElF;;AAMA;AACA;AACA;AACA;;AAMA,OAAO,SAASC,oBAAoBA,CAClCC,KAAa,EACbC,GAAG,GAAGC,MAAM,CAACC,gBAAgB,EAC7BC,GAAG,GAAGF,MAAM,CAACG,gBAAgB,EAC7B;EACA,OAAOC,IAAI,CAACF,GAAG,CAACH,GAAG,EAAEK,IAAI,CAACL,GAAG,CAACG,GAAG,EAAEJ,KAAK,CAAC,CAAC;AAC5C;AAEA,MAAMO,WAAW,SAASvB,SAAS,CAOjC;EAAAwB,YAAA,GAAAC,IAAA;IAAA,SAAAA,IAAA;IAAAC,eAAA,gCAUWlB,KAAK,CAACmB,SAAS,CAAe,CAAC;IAAAD,eAAA,oBAE7BE,KAAuB,IAAK;MACtC,IAAI,CAACC,QAAQ,CAACC,OAAO,EAAGC,MAAM,GAAGH,KAAK,CAAC;IAC1C,CAAC;IAAAF,eAAA,oBAEYE,KAAuB,IAAK;MACtC,IAAI,CAACC,QAAQ,CAACC,OAAO,EAAGE,QAAQ,GAAGJ,KAAK,CAAC;IAC5C,CAAC;EAAA;EAEDK,aAAaA,CAAA,EAAG;IACd,MAAMC,eAAe,GAAG,IAAIC,IAAI,CAACC,YAAY,CAAC,IAAI,CAACC,OAAO,CAACC,MAAM,EAAE;MACjE3B,KAAK,EAAE,SAAS;MAChB4B,qBAAqB,EAAE;IACzB,CAAC,CAAC;IAEF,OAAO;MACLV,QAAQ,EAAE,IAAI,CAACA,QAAQ;MACvBW,SAAS,EAAE,IAAI,CAACA,SAAS;MACzBC,SAAS,EAAE,IAAI,CAACA,SAAS;MACzBP;IACF,CAAC;EACH;EAEAQ,gBAAgBA,CAAA,EAAG;IACjB,MAAM;MAAEC;IAAY,CAAC,GAAG,IAAI,CAACN,OAAO;IACpC,OAAO;MACLG,SAAS,EAAE,IAAI,CAACA,SAAS;MACzBC,SAAS,EAAE,IAAI,CAACA,SAAS;MACzBE;IACF,CAAC;EACH;EAEAC,MAAMA,CAAA,EAAG;IAAA,IAAAC,IAAA,QAAAR,OAAA;MAAAS,KAAA;IACP,MAAMC,YAAY,GACuCxC,KAAK;IAA9D,OAAAuC,KAAA,GAAO3C,OAAO,CAAC,IAAI,CAACkC,OAAO,CAAC1B,KAAK,CAAC,eAACH,KAAA,CAAAwC,aAAA,CAACD,YAAY,EAAAD,KAAA,CAAAG,EAAA;MAAA,GAAAC,YAAA,KAAAL,IAAA;IAAA,EAAiB,CAAC;EACpE;AACF;AAACnB,eAAA,CAtDKH,WAAW,iBAQM,aAAa;AAAAG,eAAA,CAR9BH,WAAW,WASAZ,KAAK;AAAAe,eAAA,CAThBH,WAAW,aAUE,CAAClB,WAAW,CAACS,iBAAiB,CAAC,CAAC;AAAAY,eAAA,CAV7CH,WAAW,kBAWO;EACpB4B,IAAI,EAAE,GAAG;EACTC,IAAI,EAAEtC,iBAAiB;EACvBwB,MAAM,EAAE;AACV,CAAC;AAyCH,MAAMe,KAAK,SAASrD,SAAS,CAO3B;EAAAwB,YAAA,GAAAC,IAAA;IAAA,SAAAA,IAAA;IAAAC,eAAA,gBAQmC;MACjC4B,YAAY,EAAE;IAChB,CAAC;IAAA5B,eAAA,qCAEelB,KAAK,CAACmB,SAAS,CAAmB,CAAC;IAAAD,eAAA,yBAEnB,CAAC,CAAC;IAAAA,eAAA,4BAoCbV,KAAa,IAAK;MACrC,OAAOA,KAAK,CACTuC,OAAO,CAAC,IAAIC,MAAM,CAAC,IAAI,IAAI,CAACC,kBAAkB,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAC5DF,OAAO,CAAC,IAAI,CAACG,gBAAgB,EAAE,GAAG,CAAC;IACxC,CAAC;IAAAhC,eAAA,sBAEa,CACZV,KAAmC,EACnC2C,SAAuC,EACvCC,gBAA2D,KACxD;MACH,MAAM;QAAE1B;MAAgB,CAAC,GAAG,IAAI,CAAC2B,KAAK;MAEtC,MAAMC,YAAY,GAAG,IAAI,CAACC,iBAAiB,CAACC,MAAM,CAAChD,KAAK,CAAC,CAAC;MAE1D,IAAIE,MAAM,CAAC+C,KAAK,CAAC/C,MAAM,CAAC4C,YAAY,CAAC,CAAC,EAAE;QACtC,OAAO;UACLI,WAAW,EAAEP,SAAS;UACtBL,YAAY,EAAEM;QAChB,CAAC;MACH;MAEA,IAAIN,YAAY,GAAG,EAAE;MAErB,IAAI,YAAY,CAACa,IAAI,CAACL,YAAY,CAAC,EAAE;QACnC,MAAM,CAACM,GAAG,EAAEC,OAAO,CAAC,GAAGP,YAAY,CAACQ,KAAK,CAAC,IAAI,CAACZ,gBAAgB,CAAC;QAChEJ,YAAY,GAAGpB,eAAe,CAACqC,MAAM,CAAC,CAACH,GAAG,CAAC,GAAG,IAAI,CAACV,gBAAgB,GAAGW,OAAO;MAC/E,CAAC,MAAM,IAAIP,YAAY,KAAK,EAAE,EAAE;QAC9BR,YAAY,GAAGpB,eAAe,CAACqC,MAAM,CAAC,CAACT,YAAY,CAAC;MACtD;MAEA,OAAO;QACLI,WAAW,EAAEJ,YAAY;QACzBR,YAAY,EAAEA;MAChB,CAAC;IACH,CAAC;IAAA5B,eAAA,2BA+BmBE,KAAyC,IAAK;MAChE,MAAM;QAAEZ,KAAK;QAAEC,GAAG;QAAEG,GAAG;QAAEoD;MAAK,CAAC,GAAG,IAAI,CAACnC,OAAO;MAC9C,MAAM;QAAEiB;MAAa,CAAC,GAAG,IAAI,CAACmB,KAAK;MACnC,MAAM;QAAEP;MAAY,CAAC,GAAG,IAAI,CAACQ,WAAW,CAAC9C,KAAK,CAAC+C,aAAa,CAAC3D,KAAK,EAAEA,KAAK,EAAEsC,YAAY,CAAC;MAExF,IAAIpC,MAAM,CAAC+C,KAAK,CAACjD,KAAK,CAAC,IAAIE,MAAM,CAAC+C,KAAK,CAAC/C,MAAM,CAAC0D,UAAU,CAACV,WAAW,CAAC,CAAC,EAAE;QACvEtC,KAAK,CAAC+C,aAAa,CAAC3D,KAAK,GAAG,EAAE;QAC9B,IAAI,CAAC6D,QAAQ,CAAC7D,KAAK,CAAC,EAAE,EAAEY,KAAK,CAAC;MAChC,CAAC,MAAM;QACL,IAAIkD,WAAW,GAAG/D,oBAAoB,CAACG,MAAM,CAAC0D,UAAU,CAACV,WAAW,CAAC,EAAEjD,GAAG,EAAEG,GAAG,CAAC;QAChF,MAAM2D,OAAO,GAAG,IAAI,CAACC,KAAK,CAACF,WAAW,GAAGN,IAAI,CAAC;QAC9C,IAAIO,OAAO,KAAK,CAAC,EAAE;UACjB,IAAIA,OAAO,IAAIP,IAAI,GAAG,CAAC,EAAE;YACvBM,WAAW,IAAIN,IAAI,GAAGO,OAAO;UAC/B,CAAC,MAAM,IAAIzD,IAAI,CAAC2D,GAAG,CAACF,OAAO,CAAC,GAAGP,IAAI,EAAE;YACnCM,WAAW,IAAIC,OAAO;UACxB;QACF;QAEA,IAAI,CAACF,QAAQ,CAAC7D,KAAK,CAAC,IAAI,CAACkE,eAAe,CAACJ,WAAW,CAAC,EAAElD,KAAK,CAAC;MAC/D;IACF,CAAC;IAAAF,eAAA,kBAwCUE,KAAiB,IAAK;MAC/BxB,oBAAoB,CAAC,IAAI,CAACiC,OAAO,CAAC8C,OAAO,EAAE,IAAI,CAACC,WAAW,CAAC,CAACxD,KAAK,CAAC;IACrE,CAAC;IAAAF,eAAA,sBAEcE,KAAiB,IAAK;MACnC,IAAIA,KAAK,CAACyD,MAAM,KAAK,IAAI,CAACC,aAAa,CAACxD,OAAO,EAAE;MACjD,IAAIyD,QAAQ,CAACC,aAAa,KAAK,IAAI,CAACF,aAAa,CAACxD,OAAO,EAAE;MAC3DF,KAAK,CAAC6D,cAAc,CAAC,CAAC;MACtB,IAAI7D,KAAK,CAAC8D,MAAM,GAAG,CAAC,EAAE;QACpB,IAAI,CAAC3D,MAAM,CAACH,KAAK,CAAC;MACpB,CAAC,MAAM,IAAIA,KAAK,CAAC8D,MAAM,GAAG,CAAC,EAAE;QAC3B,IAAI,CAAC1D,QAAQ,CAACJ,KAAK,CAAC;MACtB;IACF,CAAC;IAAAF,eAAA,uBAEeE,KAA0C,IAAK;MAC7D,MAAMZ,KAAK,GAAG,IAAI,CAAC+C,iBAAiB,CAACnC,KAAK,CAAC+C,aAAa,CAAC3D,KAAK,CAAC;MAC/D,MAAM;QAAEkB,eAAe;QAAElB,KAAK,EAAE2C;MAAU,CAAC,GAAG,IAAI,CAACtB,OAAO;MAE1D,IAAIrB,KAAK,KAAK,GAAG,IAAIA,KAAK,KAAK,GAAG,EAAE;QAClC,IAAI,CAAC2E,QAAQ,CAAC;UAAErC,YAAY,EAAEtC;QAAM,CAAC,CAAC;QACtC,OAAO,KAAK;MACd;MAEA,IAAIA,KAAK,CAAC4E,QAAQ,CAAC,GAAG,CAAC,EAAE;QACvB,OAAO,KAAK;MACd;MAEA,IAAI5E,KAAK,CAAC4E,QAAQ,CAAC,GAAG,CAAC,EAAE;QACvB,IAAI5E,KAAK,CAAC6E,MAAM,GAAGlC,SAAS,CAACkC,MAAM,EAAE;UACnC,IAAI,CAACF,QAAQ,CAAC;YAAErC,YAAY,EAAEpB,eAAe,CAACqC,MAAM,CAACvD,KAAoB,CAAC,GAAG,IAAI,CAAC0C;UAAiB,CAAC,CAAC;UACrG,OAAO,KAAK;QACd,CAAC,MAAM;UACL,IAAI,CAACmB,QAAQ,CAAC7D,KAAK,CAACA,KAAK,CAAC8E,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAElE,KAAK,CAAC;UAC9C,OAAO,KAAK;QACd;MACF;MAEA,MAAMmE,MAAM,GAAG,YAAY,CAAC5B,IAAI,CAACnD,KAAK,CAAC;MAEvC,IAAI+E,MAAM,IAAI/E,KAAK,KAAK,EAAE,EAAE;QAC1B,IAAI,CAAC6D,QAAQ,CAAC7D,KAAK,CAAC,IAAI,CAACgF,aAAa,CAAChF,KAAK,CAAC,EAAEY,KAAK,CAAC;MACvD;IACF,CAAC;IAAAF,eAAA,sBAEcE,KAA4C,IAAK;MAC9D,IAAIA,KAAK,CAACqE,GAAG,KAAK,OAAO,EAAE;QACzB,IAAI,CAACC,cAAc,GAAG,CAAC,CAAC;MAC1B;IACF,CAAC;IAAAxE,eAAA,wBAEgBE,KAA4C,IAAK;MAChE,MAAMuE,OAAO,GAAGvE,KAAK,CAAC+C,aAAa;MACnC,MAAM3D,KAAK,GAAGmF,OAAO,CAACnF,KAAK;MAC3B,MAAM6E,MAAM,GAAG7E,KAAK,CAAC6E,MAAM;MAC3B,MAAM;QAAEvC;MAAa,CAAC,GAAG,IAAI,CAACmB,KAAK;MAEnC,IAAI7C,KAAK,CAACqE,GAAG,KAAK,GAAG,IAAIrE,KAAK,CAACqE,GAAG,KAAK,GAAG,EAAE;QAC1C;QACA,IAAIjF,KAAK,CAACoF,OAAO,CAAC,IAAI,CAAC1C,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI9B,KAAK,CAACqE,GAAG,KAAK,GAAG,EAAE;UACpErE,KAAK,CAAC+C,aAAa,CAAC3D,KAAK,GAAGA,KAAK,GAAG,GAAG;QACzC,CAAC,MAAM,IAAIA,KAAK,CAACoF,OAAO,CAAC,IAAI,CAAC1C,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE;UAAE;UACxD9B,KAAK,CAAC6D,cAAc,CAAC,CAAC;UACtB7D,KAAK,CAACyE,eAAe,CAAC,CAAC;UACvB;QACF;MACF;MAEA,IAAIzE,KAAK,CAACqE,GAAG,KAAK,WAAW,IAAIjF,KAAK,CAAC4E,QAAQ,CAAC,IAAI,CAAClC,gBAAgB,CAAC,EAAE;QACtE9B,KAAK,CAAC6D,cAAc,CAAC,CAAC;QACtB7D,KAAK,CAACyE,eAAe,CAAC,CAAC;QACvB,IAAI,CAACV,QAAQ,CAAC;UAAErC,YAAY,EAAEA,YAAY,EAAEwC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAAE,CAAC,CAAC;QAC3D,OAAO,KAAK;MACd;MAEA,IACEK,OAAO,CAACG,cAAc,KAAKT,MAAM,KAChCjE,KAAK,CAACqE,GAAG,KAAK,WAAW,IACxBrE,KAAK,CAACqE,GAAG,KAAK,IAAI,CAACvC,gBAAgB,IACnC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC6C,QAAQ,CAAC3E,KAAK,CAACqE,GAAG,CAAC,CAAC,EACzE;QACA,MAAMO,cAAc,GAAGxF,KAAK,CAAC8E,KAAK,CAACK,OAAO,CAACM,YAAY,IAAIC,SAAS,CAAC;QAErEC,qBAAqB,CAAC,MAAM;UAC1B,MAAMC,QAAQ,GAAG,IAAI,CAACnC,KAAK,CAACnB,YAAY;UACxC,MAAMuD,KAAK,GAAGD,QAAQ,CAACE,WAAW,CAACN,cAAc,CAAC;UAClD,MAAMF,cAAc,GAAGO,KAAK;UAC5B,MAAMJ,YAAY,GAAGI,KAAK;UAE1BV,OAAO,CAACY,iBAAiB,CAACT,cAAc,EAAEG,YAAY,CAAC;QACzD,CAAC,CAAC;MACJ;;MAEA;MACA;MACA;MACA;MACA,MAAMO,WAAW,GAAG,CAAC;MAErB,IAAIpF,KAAK,CAACqF,QAAQ,IAAI,IAAI,CAACf,cAAc,KAAK,CAAC,CAAC,EAAE;QAChD,IAAI,CAACA,cAAc,GAAGC,OAAO,CAACG,cAAc;MAC9C;MAEA,QAAQ1E,KAAK,CAACqE,GAAG;QACf,KAAK,WAAW;UAAE;YAChBrE,KAAK,CAAC6D,cAAc,CAAC,CAAC;YACtB,IAAI,CAACyB,iBAAiB,CAACf,OAAO,EAAEa,WAAW,CAAC;YAC5C;UACF;QACA,KAAK,YAAY;UAAE;YACjBpF,KAAK,CAAC6D,cAAc,CAAC,CAAC;YACtB,IAAI,CAAC0B,kBAAkB,CAAChB,OAAO,EAAEa,WAAW,CAAC;YAC7C;UACF;QACA,KAAK,WAAW;UAAE;YAChBpF,KAAK,CAAC6D,cAAc,CAAC,CAAC;YACtB,IAAI,CAACzD,QAAQ,CAACJ,KAAK,CAAC;YACpB;UACF;QACA,KAAK,SAAS;UAAE;YACdA,KAAK,CAAC6D,cAAc,CAAC,CAAC;YACtB,IAAI,CAAC1D,MAAM,CAACH,KAAK,CAAC;YAClB;UACF;MACF;IACF,CAAC;IAAAF,eAAA,4BAEmB,CAACyE,OAA+D,EAAEa,WAAmB,KAAK;MAC5G,IAAIb,OAAO,CAACG,cAAc,KAAK,IAAI,EAAE;MAErC,MAAMtF,KAAK,GAAGmF,OAAO,CAACnF,KAAK;MAE3B,MAAMoG,YAAY,GAAGjB,OAAO,CAACG,cAAc,GAAG,CAAC,IAAI,CAAC,GAAGH,OAAO,CAACG,cAAc,GAAG,CAAC,GAAG,CAAC;MAErF,MAAMJ,cAAc,GAClBlF,KAAK,CAACmF,OAAO,CAACG,cAAc,GAAGU,WAAW,CAAC,KAAK,IAAI,CAACvD,kBAAkB,GACnE0C,OAAO,CAACG,cAAc,GAAGU,WAAW,GACpCI,YAAY;MAElB,IAAI,IAAI,CAAClB,cAAc,KAAK,CAAC,CAAC,EAAE;QAC9B;QACAC,OAAO,CAACY,iBAAiB,CAACb,cAAc,EAAEA,cAAc,CAAC;MAC3D,CAAC,MAAM;QACL,IACE,IAAI,CAACA,cAAc,IACnBC,OAAO,CAACG,cAAc,IAAI,IAAI,CAACJ,cAAc,IAC7CC,OAAO,CAACM,YAAY,KAAK,IAAI,CAACP,cAAc,EAC5C;UACAC,OAAO,CAACY,iBAAiB,CAACb,cAAc,EAAEC,OAAO,CAACM,YAAY,CAAC;QACjE,CAAC,MAAM,IAAIN,OAAO,CAACM,YAAY,KAAK,IAAI,EAAE;UACxCN,OAAO,CAACY,iBAAiB,CACvBZ,OAAO,CAACG,cAAc,EACtBtF,KAAK,CAACmF,OAAO,CAACM,YAAY,GAAGO,WAAW,CAAC,KAAK,IAAI,CAACvD,kBAAkB,GACjE0C,OAAO,CAACM,YAAY,GAAGO,WAAW,GAClCb,OAAO,CAACM,YAAY,GAAG,CAC7B,CAAC;QACH;MACF;IACF,CAAC;IAAA/E,eAAA,6BAEoB,CAACyE,OAA+D,EAAEa,WAAmB,KAAK;MAC7G,IAAIb,OAAO,CAACM,YAAY,KAAK,IAAI,EAAE;MAEnC,MAAMzF,KAAK,GAAGmF,OAAO,CAACnF,KAAK;MAC3B,MAAMoG,YAAY,GAAGjB,OAAO,CAACM,YAAY,GAAG,CAAC;MAE7C,MAAMP,cAAc,GAClBlF,KAAK,CAACmF,OAAO,CAACM,YAAY,CAAC,KAAK,IAAI,CAAChD,kBAAkB,GACnD0C,OAAO,CAACM,YAAY,GAAGO,WAAW,GAClCI,YAAY;MAElB,IAAI,IAAI,CAAClB,cAAc,KAAK,CAAC,CAAC,EAAE;QAC9B;QACAC,OAAO,CAACY,iBAAiB,CAACb,cAAc,EAAEA,cAAc,CAAC;MAC3D,CAAC,MAAM;QACL,IACE,IAAI,CAACA,cAAc,IACnBC,OAAO,CAACM,YAAY,IAAI,IAAI,CAACP,cAAc,IAC3CC,OAAO,CAACG,cAAc,KAAK,IAAI,CAACJ,cAAc,EAC9C;UACAC,OAAO,CAACY,iBAAiB,CAACZ,OAAO,CAACG,cAAc,EAAEJ,cAAc,CAAC;QACnE,CAAC,MAAM,IAAIC,OAAO,CAACG,cAAc,KAAK,IAAI,EAAE;UAC1CH,OAAO,CAACY,iBAAiB,CACvB/F,KAAK,CAACmF,OAAO,CAACG,cAAc,CAAC,KAAK,IAAI,CAAC7C,kBAAkB,GACrD0C,OAAO,CAACG,cAAc,GAAGU,WAAW,GACpCb,OAAO,CAACG,cAAc,GAAG,CAAC,EAC9BH,OAAO,CAACM,YACV,CAAC;QACH;MACF;IACF,CAAC;IAAA/E,eAAA,sBAEcE,KAAyC,IAAK;MAC3D,MAAMuE,OAAO,GAAGvE,KAAK,CAAC+C,aAAa;MACnC,MAAM3D,KAAK,GAAGmF,OAAO,CAACnF,KAAK;MAE3B,IAAImF,OAAO,CAACG,cAAc,KAAK,IAAI,IAAItF,KAAK,CAACmF,OAAO,CAACG,cAAc,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC7C,kBAAkB,EAAE;QACpG0C,OAAO,CAACY,iBAAiB,CAACZ,OAAO,CAACG,cAAc,GAAG,CAAC,EAAEH,OAAO,CAACM,YAAY,GAAI,CAAC,CAAC;MAClF;IACF,CAAC;IAAA/E,eAAA,iBAESE,KAAgB,IAAK;MAC7B,MAAM;QAAER,GAAG,GAAGF,MAAM,CAACG,gBAAgB;QAAEJ,GAAG;QAAEuD,IAAI;QAAExD;MAAM,CAAC,GAAG,IAAI,CAACqB,OAAO;MAExE,IAAIyC,WAAW;;MAEf;MACA,IAAI9D,KAAK,KAAK,EAAE,EAAE;QAChB8D,WAAW,GAAG7D,GAAG,IAAI,CAAC;MACxB,CAAC,MAAM;QACL6D,WAAW,GAAG5D,MAAM,CAAC0D,UAAU,CAAC5D,KAAK,CAAC;MACxC;MAEA,IAAIE,MAAM,CAAC+C,KAAK,CAACa,WAAW,CAAC,EAAE;MAE/B,MAAMuC,SAAS,GAAG/F,IAAI,CAACL,GAAG,CAAC6D,WAAW,GAAGN,IAAI,EAAEpD,GAAG,CAAC;MAEnD,IAAI,CAACyD,QAAQ,CAAC7D,KAAK,CAAC,IAAI,CAACkE,eAAe,CAACmC,SAAS,CAAC,EAAEzF,KAAK,CAAC;IAC7D,CAAC;IAAAF,eAAA,mBAEWE,KAAgB,IAAK;MAC/B,MAAM;QAAER,GAAG;QAAEH,GAAG,GAAGC,MAAM,CAACC,gBAAgB;QAAEqD,IAAI;QAAExD;MAAM,CAAC,GAAG,IAAI,CAACqB,OAAO;MAExE,IAAIyC,WAAW;MAEf,IAAI9D,KAAK,KAAK,EAAE,EAAE;QAChB8D,WAAW,GAAG1D,GAAG,IAAI,CAAC;MACxB,CAAC,MAAM;QACL0D,WAAW,GAAG5D,MAAM,CAAC0D,UAAU,CAAC5D,KAAK,CAAC;MACxC;MAEA,IAAIE,MAAM,CAAC+C,KAAK,CAACa,WAAW,CAAC,EAAE;MAE/B,MAAMuC,SAAS,GAAG/F,IAAI,CAACF,GAAG,CAAC0D,WAAW,GAAGN,IAAI,EAAEvD,GAAG,CAAC;MAEnD,IAAI,CAAC4D,QAAQ,CAAC7D,KAAK,CAAC,IAAI,CAACkE,eAAe,CAACmC,SAAS,CAAC,EAAEzF,KAAK,CAAC;IAC7D,CAAC;EAAA;EA7YD0F,iBAAiBA,CAAA,EAAiC;IAChD,OAAO;MACLtG,KAAK,EAAE,CACL,IAAI,EACH4F,QAAQ,IAAK;QACZ,MAAM;UAAEtD,YAAY,EAAEM;QAAiB,CAAC,GAAG,IAAI,CAACa,KAAK;QACrD,MAAM;UAAEzD,KAAK,EAAE2C;QAAU,CAAC,GAAG,IAAI,CAACtB,OAAO;QAEzC,MAAM;UAAE6B,WAAW;UAAEZ;QAAa,CAAC,GAAG,IAAI,CAACoB,WAAW,CACpDkC,QAAQ,IAAI,EAAE,EACdjD,SAAS,EACTC,gBACF,CAAC;QAED,IAAI,CAAC+B,QAAQ,CAAC;UAAErC;QAAa,CAAC,CAAC;QAE/B,OAAOY,WAAW;MACpB,CAAC;IAEL,CAAC;EACH;EAEA,IAAIR,gBAAgBA,CAAA,EAAG;IACrB,MAAM;MAAExB;IAAgB,CAAC,GAAG,IAAI,CAAC2B,KAAK;IAEtC,OAAO3B,eAAe,CAACqC,MAAM,CAAC,KAAK,CAAC,CAAChB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;EACzD;EAEA,IAAIE,kBAAkBA,CAAA,EAAG;IACvB,MAAM;MAAEvB;IAAgB,CAAC,GAAG,IAAI,CAAC2B,KAAK;IAEtC,OAAO3B,eAAe,CAACqC,MAAM,CAAC,IAAI,CAAC,CAAChB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;EACxD;EAuCA,IAAIgE,aAAaA,CAAA,EAAG;IAClB,MAAM;MAAE/C;IAAK,CAAC,GAAG,IAAI,CAACnC,OAAO;IAC7B,MAAM,CAACmF,CAAC,EAAEC,QAAQ,CAAC,GAAGjD,IAAI,EAAEkD,QAAQ,CAAC,CAAC,CAACpD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE;IAEvD,OAAOmD,QAAQ,EAAE5B,MAAM,IAAI,CAAC;EAC9B;EAEAX,eAAeA,CAAClE,KAAa,EAAU;IACrC,OAAOA,KAAK,KAAK,CAAC,GAAG,GAAGA,KAAK,EAAE,GAAGA,KAAK,CAAC2G,OAAO,CAAC,IAAI,CAACJ,aAAa,CAAC;EACrE;EAEAvB,aAAaA,CAAChF,KAAa,EAAE;IAC3B,MAAM;MAAEuG;IAAc,CAAC,GAAG,IAAI;IAC9B,IAAIA,aAAa,KAAK,CAAC,EAAE,OAAOvG,KAAK;IAErC,MAAM4G,QAAQ,GAAG5G,KAAK,CAACoF,OAAO,CAAC,GAAG,CAAC;IACnC,IAAIwB,QAAQ,KAAK,CAAC,CAAC,IAAI5G,KAAK,CAAC6E,MAAM,GAAG+B,QAAQ,GAAG,CAAC,IAAIL,aAAa,EAAE,OAAOvG,KAAK;IAEjF,OAAOA,KAAK,CAAC8E,KAAK,CAAC,CAAC,EAAE8B,QAAQ,GAAG,CAAC,GAAGL,aAAa,CAAC;EACrD;EAEAvC,KAAKA,CAAChE,KAAa,EAAU;IAC3B,MAAM;MAAEuG;IAAc,CAAC,GAAG,IAAI;IAE9B,OAAOA,aAAa,KAAK,CAAC,GACtBvG,KAAK,GACLE,MAAM,CAACF,KAAK,CAAC6G,WAAW,CAACN,aAAa,CAAC,CAAC;EAC9C;EAyBA;EACAO,iBAAiBA,CAAA,EAAG;IAClB,IAAI,CAACxC,aAAa,CAACxD,OAAO,EAAEiG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC5C,OAAO,CAAC;IAEnE,MAAM;MAAEtD,QAAQ;MAAEb,KAAK;MAAEgH;IAAU,CAAC,GAAG,IAAI,CAAC3F,OAAO;IAEnD,IAAI2F,SAAS,EAAE;MACbC,UAAU,CAAC,MAAM;QACf,IAAI,CAAC3C,aAAa,CAACxD,OAAO,EAAEoG,KAAK,CAAC,CAAC;MACrC,CAAC,CAAC;IACJ;IAEA,IAAIrG,QAAQ,CAACC,OAAO,EAAE;MACpBD,QAAQ,CAACC,OAAO,CAACC,MAAM,GAAG,IAAI,CAACA,MAAM;MACrCF,QAAQ,CAACC,OAAO,CAACE,QAAQ,GAAG,IAAI,CAACA,QAAQ;IAC3C;IAEA,IAAIhB,KAAK,KAAK,EAAE,EAAE;MAChB,MAAM;QAAEsC;MAAa,CAAC,GAAG,IAAI,CAACoB,WAAW,CAAC1D,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC;MACxD,IAAI,CAAC2E,QAAQ,CAAC;QAAErC;MAAa,CAAC,CAAC;IACjC;EACF;EAEA6E,kBAAkBA,CAACC,SAA8B,EAAEC,SAA4B,EAAE;IAC/E,IAAID,SAAS,CAACpH,KAAK,KAAK,IAAI,CAAC6C,KAAK,CAAC7C,KAAK,EAAE;MACxC,MAAM;QAAEsC;MAAa,CAAC,GAAG,IAAI,CAACoB,WAAW,CACvC,IAAI,CAACb,KAAK,CAAC7C,KAAK,IAAI,EAAE,EACtBoH,SAAS,CAACpH,KAAK,EACfqH,SAAS,CAAC/E,YACZ,CAAC;MACD,IAAI,CAACqC,QAAQ,CAAC;QAAErC;MAAa,CAAC,CAAC;IACjC;EACF;EAEAgF,oBAAoBA,CAAA,EAAG;IACrB,IAAI,CAAChD,aAAa,CAACxD,OAAO,EAAEyG,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAACpD,OAAO,CAAC;EACxE;EAgPAvC,MAAMA,CAAA,EAAG;IAAA,IAAA4F,KAAA,QAAAnG,OAAA;MAAAoG,KAAA;IACP,MAAMC,MAAM,GAOEnI,KAAK,CAAC8C,KAAK;IANzB,MAAM;MAAEsF,MAAM;MAAE1H,GAAG;MAAEG,GAAG;MAAEoD,IAAI;MAAEoE,UAAU;MAAE/G;IAAS,CAAC,GAAG,IAAI,CAACQ,OAAO;IACrE,MAAM;MAAEiB;IAAa,CAAC,GAAG,IAAI,CAACmB,KAAK;IAEnC,OAAAgE,KAAA,GAAOtI,OAAO,CAACwI,MAAM,CAAC,eACpBnI,KAAA,CAAAwC,aAAA,CAAAxC,KAAA,CAAAqI,QAAA,qBACErI,KAAA,CAAAwC,aAAA,CAAC0F,MAAM,EAAAD,KAAA,CAAAxF,EAAA;MAAA,GAAA6F,aAAA;QAAA,gBAEQ,KAAK;QAAA,UACV,IAAI,CAACC,gBAAgB;QAAA,gBACf,IAAI,CAACC,YAAY;QAAA,aACpB,IAAI,CAACC,aAAa;QAAA,WACpB,IAAI,CAACC,WAAW;QAAA,WAChB,IAAI,CAACC,WAAW;QAAA,WAChB7I,OAAO,CAAC,IAAI,CAACgF,aAAa,EAAEzD,QAAQ,EAAE+G,UAAU,IAAI,IAAI,CAAC;QAAA,aACvDtF,YAAY;QAAA,aACZpC,MAAM,CAACkI,SAAS,CAAC5E,IAAI,CAAC,GAAG,SAAS,GAAG,SAAS;QAAA,OACpDvD,GAAG;QAAA,OACHG,GAAG;QAAA,QACFoD;MAAI,GAAAgE,KAAA;IAAA,EACX,CACD,CAAC;EAEP;AACF;AAAC9G,eAAA,CA/bK2B,KAAK,WAQM1C,KAAK;AAAAe,eAAA,CARhB2B,KAAK,kBASa;EACpBgG,YAAY,EAAE,EAAE;EAChBC,mBAAmB,EAAE,EAAE;EACvB9E,IAAI,EAAE;AACR,CAAC;AAobH,SAAS+E,QAAQA,CACf1F,KAA+H,EAC/H;EAAA,IAAA2F,KAAA,GAAAC,YAAA;IAAAC,KAAA;EACA,MAAM;IAAEC,QAAQ;IAAEnH,SAAS;IAAEC,SAAS;IAAEkG,MAAM;IAAEhG;EAAY,CAAC,GAAGkB,KAAK;EACrE,MAAM+F,SAAS,GAKMrJ,KAAK,CAACsJ,KAAK;EAJhC,MAAMC,GAAG,GAAG,QAAQ;EACpB,MAAMC,KAAK,GAAG,QAAQ;EAEtB,OAAAL,KAAA,GAAOvJ,OAAO,CAACwI,MAAM,CAAC,eACpBnI,KAAA,CAAAwC,aAAA,CAAC4G,SAAS,EAAAF,KAAA,CAAAzG,EAAA;IAAA,GAAA+G,aAAA;MAAA,eAAkC;IAAM,GAAAR,KAAA;EAAA,iBAChDhJ,KAAA,CAAAwC,aAAA,CAAC8G,GAAG,EAAAJ,KAAA,CAAAzG,EAAA;IAAA,WACOT,SAAS;IAAA,YACR,CAAC,CAAC;IAAA,QACP,QAAQ;IAAA,cACDG,WAAW,CAAC,WAAW;EAAC,iBAEpCnC,KAAA,CAAAwC,aAAA,CAACtC,aAAa,EAAAgJ,KAAA,CAAAzG,EAAA,qBAAE,CACb,CAAC,eACNzC,KAAA,CAAAwC,aAAA,CAAC+G,KAAK,EAAAL,KAAA,CAAAzG,EAAA;IAAA,WACKR,SAAS;IAAA,YACR,CAAC,CAAC;IAAA,QACP,QAAQ;IAAA,cACDE,WAAW,CAAC,WAAW;EAAC,iBAEpCnC,KAAA,CAAAwC,aAAA,CAACvC,aAAa,EAAAiJ,KAAA,CAAAzG,EAAA,qBAAE,CACX,CAAC,eACRzC,KAAA,CAAAwC,aAAA,CAAC2G,QAAQ,EAAAD,KAAA,CAAAzG,EAAA,gBAAE,CACF,CAAC;AAEhB;AACAsG,QAAQ,CAAC5I,KAAK,GAAGA,KAAK;;AAEtB;AACA;AACA;AACA;AACA;AACA,eAAeV,eAAe,CAG5BsB,WAAW,EAAE;EACb8B,KAAK;EACLkG,QAAQ;EACRM,KAAK,EAAEtJ,KAAK,CAACsJ;AACf,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"InputNumber.js","names":["Component","createComponent","Root","sstyled","propsObserver","callAllEventHandlers","i18nEnhance","forkRef","Input","React","DecrementIcon","IncrementIcon","style","_sstyled","insert","localizedMessages","parseValueWithMinMax","value","min","Number","MIN_SAFE_INTEGER","max","MAX_SAFE_INTEGER","Math","InputNumber","constructor","args","_defineProperty","createRef","event","inputRef","current","stepUp","stepDown","getValueProps","numberFormatter","Intl","NumberFormat","asProps","locale","maximumFractionDigits","increment","decrement","getControlsProps","getI18nText","render","_ref","_ref4","SInputNumber","createElement","cn","_assignProps","size","i18n","_Value","_Value2","_Value3","Value","props","displayValue","replace","RegExp","separatorThousands","separatorDecimal","prevDisplayValue","stringNumber","String","isNaN","test","int","decimal","split","format","step","parsedValue","getFormattedValue","currentTarget","parseFloat","handlers","processedValue","numberValue","rounded","round","abs","getStringValue","onWheel","handleWheel","target","valueInputRef","document","activeElement","preventDefault","deltaY","prevValue","setState","endsWith","length","toString","slice","digits","newValue","limitDecimals","getDisplayValue","state","key","cursorPosition","element","indexOf","stopPropagation","selectionStart","includes","afterSelection","selectionEnd","undefined","requestAnimationFrame","index","lastIndexOf","setSelectionRange","cursorIndex","shiftKey","moveSelectionLeft","moveSelectionRight","nextPosition","nextValue","uncontrolledProps","onPropsChange","changedProps","valueType","stepPrecision","_","decimals","toFixed","dotIndex","toPrecision","componentDidMount","addEventListener","autoFocus","setTimeout","focus","componentDidUpdate","prevProps","prevState","componentWillUnmount","removeEventListener","_ref2","_ref5","SValue","styles","forwardRef","Fragment","_assignProps2","handleValidation","handleChange","handleKeyDown","handleKeyUp","handleClick","isInteger","_initClass","_applyDecs","c","_Class","_identity","defaultValue","defaultDisplayValue","Controls","_ref3","arguments[0]","_ref6","Children","SControls","Addon","SUp","SDown","_assignProps3"],"sources":["../../src/InputNumber.tsx"],"sourcesContent":["import type { Intergalactic } from '@semcore/core';\nimport { Component, createComponent, Root, sstyled } from '@semcore/core';\nimport propsObserver from '@semcore/core/lib/decorators/propsObserver';\nimport { callAllEventHandlers } from '@semcore/core/lib/utils/assignProps';\nimport type { WithI18nEnhanceProps } from '@semcore/core/lib/utils/enhances/i18nEnhance';\nimport i18nEnhance from '@semcore/core/lib/utils/enhances/i18nEnhance';\nimport { forkRef } from '@semcore/core/lib/utils/ref';\nimport Input from '@semcore/input';\nimport React from 'react';\n\nimport { DecrementIcon, IncrementIcon } from './buttons';\nimport type { NSInputNumber } from './InputNumber.type';\nimport style from './style/input-number.shadow.css';\nimport { localizedMessages } from './translations/__intergalactic-dynamic-locales';\n\n/** Events that can trigger a value step (buttons, keyboard arrows, mouse wheel). */\ntype StepEvent =\n | React.MouseEvent\n | React.KeyboardEvent\n | WheelEvent;\n\n/**\n * The input DOM node whose native `stepUp`/`stepDown` methods are replaced at runtime\n * (see `Value.componentDidMount`) with event-aware versions.\n */\ntype InputElement = Omit<HTMLInputElement, 'stepUp' | 'stepDown'> & {\n stepUp: (event: StepEvent) => void;\n stepDown: (event: StepEvent) => void;\n};\n\nexport function parseValueWithMinMax(\n value: number,\n min = Number.MIN_SAFE_INTEGER,\n max = Number.MAX_SAFE_INTEGER,\n) {\n return Math.max(min, Math.min(max, value));\n}\n\nclass InputNumber extends Component<\n Intergalactic.InternalTypings.InferComponentProps<NSInputNumber.Component>,\n typeof InputNumber.enhance,\n {},\n WithI18nEnhanceProps,\n {},\n NSInputNumber.DefaultProps\n> {\n static displayName = 'InputNumber';\n static style = style;\n static enhance = [i18nEnhance(localizedMessages)] as const;\n static defaultProps = {\n size: 'm',\n i18n: localizedMessages,\n locale: 'en',\n } as const;\n\n inputRef = React.createRef<InputElement>();\n\n increment = (event: React.MouseEvent) => {\n (this.inputRef.current)?.stepUp?.(event);\n };\n\n decrement = (event: React.MouseEvent) => {\n (this.inputRef.current)?.stepDown?.(event);\n };\n\n getValueProps() {\n const numberFormatter = new Intl.NumberFormat(this.asProps.locale, {\n style: 'decimal',\n maximumFractionDigits: 100,\n });\n\n return {\n inputRef: this.inputRef,\n increment: this.increment,\n decrement: this.decrement,\n numberFormatter,\n };\n }\n\n getControlsProps() {\n const { getI18nText } = this.asProps;\n return {\n increment: this.increment,\n decrement: this.decrement,\n getI18nText,\n };\n }\n\n render() {\n const SInputNumber = Root;\n return sstyled(this.asProps.style)(<SInputNumber render={Input} />);\n }\n}\n\n@propsObserver(['value'])\nclass Value extends Component<\n Intergalactic.InternalTypings.InferChildComponentProps<NSInputNumber.Value.Component, typeof InputNumber, 'Value'>,\n [],\n NSInputNumber.Value.Handlers,\n {},\n NSInputNumber.Value.State,\n NSInputNumber.Value.DefaultProps\n > {\n static style = style;\n static defaultProps = {\n defaultValue: '',\n defaultDisplayValue: '',\n step: 1,\n } as const;\n\n valueType: 'string' | 'number' = (typeof this.props.value === 'number' || this.props.value === null) ? 'number' : 'string';\n\n state: NSInputNumber.Value.State = {\n displayValue: '',\n };\n\n valueInputRef = React.createRef<HTMLInputElement>();\n\n cursorPosition: number | null = -1;\n\n uncontrolledProps(): NSInputNumber.Value.Handlers {\n return {\n value: [\n null,\n (newValue) => {\n const { displayValue: prevDisplayValue } = this.state;\n\n const displayValue = this.getDisplayValue(\n newValue ?? '',\n prevDisplayValue,\n );\n\n this.setState({ displayValue });\n\n return String(newValue);\n },\n ],\n };\n }\n\n get separatorDecimal() {\n const { numberFormatter } = this.props;\n\n return numberFormatter.format(11.11).replace(/\\d/g, '');\n }\n\n get separatorThousands() {\n const { numberFormatter } = this.props;\n\n return numberFormatter.format(11111).replace(/\\d/g, '');\n }\n\n onPropsChange(changedProps: { value?: string | number | null }) {\n const { value } = changedProps;\n\n if (value !== undefined) {\n if (typeof value === 'number' || value === null) {\n this.valueType = 'number';\n } else {\n this.valueType = 'string';\n }\n }\n }\n\n getFormattedValue = (value: string) => {\n return value\n .replace(new RegExp(`[${this.separatorThousands}]`, 'g'), '')\n .replace(this.separatorDecimal, '.')\n .replace(new RegExp('\\\\.\\\\.', 'g'), '.');\n };\n\n getDisplayValue = (\n value: string | number,\n prevDisplayValue: NSInputNumber.Value.State['displayValue'],\n ) => {\n const { numberFormatter } = this.props;\n const stringNumber = String(value);\n\n if (Number.isNaN(Number(stringNumber))) {\n return prevDisplayValue;\n }\n\n let displayValue = '';\n\n if (/\\.[0-9]*0$/.test(stringNumber)) {\n const [int, decimal] = stringNumber.split('.');\n displayValue = numberFormatter.format(+int) + this.separatorDecimal + decimal;\n } else if (stringNumber !== '') {\n displayValue = numberFormatter.format(+stringNumber);\n }\n\n return displayValue;\n };\n\n get stepPrecision() {\n const { step } = this.asProps;\n const [_, decimals] = step?.toString().split('.') ?? [];\n\n return decimals?.length ?? 0;\n }\n\n getStringValue(value: number): string {\n return value === 0 ? `${value}` : value.toFixed(this.stepPrecision);\n }\n\n limitDecimals(value: string) {\n const { stepPrecision } = this;\n if (stepPrecision === 0) return value;\n\n const dotIndex = value.indexOf('.');\n if (dotIndex === -1 || value.length - dotIndex - 1 <= stepPrecision) return value;\n\n return value.slice(0, dotIndex + 1 + stepPrecision);\n }\n\n round(value: number): number {\n const { stepPrecision } = this;\n\n return stepPrecision === 0\n ? value\n : Number(value.toPrecision(stepPrecision));\n }\n\n handleValidation = (event: React.FocusEvent<HTMLInputElement>) => {\n const { value, min, max, step } = this.asProps;\n const parsedValue = this.getFormattedValue(event.currentTarget.value);\n\n if (Number.isNaN(value) || Number.isNaN(Number.parseFloat(parsedValue))) {\n event.currentTarget.value = '';\n this.handlers.value(this.processedValue(''), event);\n } else {\n let numberValue = parseValueWithMinMax(Number.parseFloat(parsedValue), min, max);\n const rounded = this.round(numberValue % step);\n if (rounded !== 0) {\n if (rounded >= step / 2) {\n numberValue += step - rounded;\n } else if (Math.abs(rounded) < step) {\n numberValue -= rounded;\n }\n }\n\n this.handlers.value(this.processedValue(this.getStringValue(numberValue)), event);\n }\n };\n\n // https://stackoverflow.com/questions/57358640/cancel-wheel-event-with-e-preventdefault-in-react-event-bubbling\n componentDidMount() {\n this.valueInputRef.current?.addEventListener('wheel', this.onWheel);\n\n const { inputRef, value, autoFocus } = this.asProps;\n\n if (autoFocus) {\n setTimeout(() => {\n this.valueInputRef.current?.focus();\n });\n }\n\n if (inputRef.current) {\n inputRef.current.stepUp = this.stepUp;\n inputRef.current.stepDown = this.stepDown;\n }\n\n if (value !== '') {\n const displayValue = this.getDisplayValue(value, '');\n this.setState({ displayValue });\n }\n }\n\n componentDidUpdate(prevProps: typeof this.asProps, prevState: typeof this.state) {\n if (prevProps.value !== this.props.value) {\n const displayValue = this.getDisplayValue(\n this.props.value ?? '',\n prevState.displayValue,\n );\n this.setState({ displayValue });\n }\n }\n\n componentWillUnmount() {\n this.valueInputRef.current?.removeEventListener('wheel', this.onWheel);\n }\n\n onWheel = (event: WheelEvent) => {\n callAllEventHandlers(this.asProps.onWheel, this.handleWheel)(event);\n };\n\n handleWheel = (event: WheelEvent) => {\n if (event.target !== this.valueInputRef.current) return;\n if (document.activeElement !== this.valueInputRef.current) return;\n event.preventDefault();\n if (event.deltaY < 0) {\n this.stepUp(event);\n } else if (event.deltaY > 0) {\n this.stepDown(event);\n }\n };\n\n handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const value = this.getFormattedValue(event.currentTarget.value);\n const { numberFormatter, value: prevValue } = this.asProps;\n\n if (value === '.' || value === '-') {\n this.setState({ displayValue: value });\n return false;\n }\n\n if (value.endsWith('-')) {\n return false;\n }\n\n if (value.endsWith('.')) {\n if (prevValue !== null && value.length > prevValue.toString().length) {\n this.setState({ displayValue: numberFormatter.format(value as `${number}`) + this.separatorDecimal });\n return false;\n } else {\n this.handlers.value(this.processedValue(value.slice(0, -1)), event);\n return false;\n }\n }\n\n const digits = /^[0-9.-]+$/.test(value);\n\n if (digits || value === '') {\n const newValue = this.limitDecimals(value);\n this.handlers.value(this.processedValue(newValue), event);\n if (newValue === prevValue) {\n const displayValue = this.getDisplayValue(\n newValue ?? '',\n this.state.displayValue,\n );\n this.setState({ displayValue });\n }\n }\n };\n\n handleKeyUp = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Shift') {\n this.cursorPosition = -1;\n }\n };\n\n handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const element = event.currentTarget;\n const value = element.value;\n const length = value.length;\n const { displayValue } = this.state;\n\n if (event.key === '.' || event.key === ',') {\n // for the first decimal separator we should replace both ',' and '.' to '.' because of how js convert strings to numbers (with ',' it will be Number.NaN)\n if (value.indexOf(this.separatorDecimal) === -1 && event.key === ',') {\n event.currentTarget.value = value + '.';\n } else if (value.indexOf(this.separatorDecimal) !== -1) { // we could press decimal separator second time - prevent this '1.5.'\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n }\n\n if (event.key === 'Backspace' && value.endsWith(this.separatorDecimal)) {\n event.preventDefault();\n event.stopPropagation();\n this.setState({ displayValue: displayValue?.slice(0, -1) });\n return false;\n }\n\n if (\n element.selectionStart !== length &&\n (event.key === 'Backspace' ||\n event.key === this.separatorDecimal ||\n ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'].includes(event.key))\n ) {\n const afterSelection = value.slice(element.selectionEnd ?? undefined);\n\n requestAnimationFrame(() => {\n const newValue = this.state.displayValue;\n const index = newValue.lastIndexOf(afterSelection);\n const selectionStart = index;\n const selectionEnd = index;\n\n element.setSelectionRange(selectionStart, selectionEnd);\n });\n }\n\n // For correct moving cursor with skip separatorThousands.\n // Examples:\n // - Press ArrowLeft: `12,3|4 -> 12|,34`\n // - Press ArrowRight: `1|,55 -> 1,5|5`\n const cursorIndex = 2;\n\n if (event.shiftKey && this.cursorPosition === -1) {\n this.cursorPosition = element.selectionStart;\n }\n\n switch (event.key) {\n case 'ArrowLeft': {\n event.preventDefault();\n this.moveSelectionLeft(element, cursorIndex);\n break;\n }\n case 'ArrowRight': {\n event.preventDefault();\n this.moveSelectionRight(element, cursorIndex);\n break;\n }\n case 'ArrowDown': {\n event.preventDefault();\n this.stepDown(event);\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n this.stepUp(event);\n break;\n }\n }\n };\n\n moveSelectionLeft = (element: React.KeyboardEvent<HTMLInputElement>['currentTarget'], cursorIndex: number) => {\n if (element.selectionStart === null) return;\n\n const value = element.value;\n\n const nextPosition = element.selectionStart - 1 >= 0 ? element.selectionStart - 1 : 0;\n\n const cursorPosition =\n value[element.selectionStart - cursorIndex] === this.separatorThousands\n ? element.selectionStart - cursorIndex\n : nextPosition;\n\n if (this.cursorPosition === -1) {\n // without shift\n element.setSelectionRange(cursorPosition, cursorPosition);\n } else {\n if (\n this.cursorPosition &&\n element.selectionStart <= this.cursorPosition &&\n element.selectionEnd === this.cursorPosition\n ) {\n element.setSelectionRange(cursorPosition, element.selectionEnd);\n } else if (element.selectionEnd !== null) {\n element.setSelectionRange(\n element.selectionStart,\n value[element.selectionEnd - cursorIndex] === this.separatorThousands\n ? element.selectionEnd - cursorIndex\n : element.selectionEnd - 1,\n );\n }\n }\n };\n\n moveSelectionRight = (element: React.KeyboardEvent<HTMLInputElement>['currentTarget'], cursorIndex: number) => {\n if (element.selectionEnd === null) return;\n\n const value = element.value;\n const nextPosition = element.selectionEnd + 1;\n\n const cursorPosition =\n value[element.selectionEnd] === this.separatorThousands\n ? element.selectionEnd + cursorIndex\n : nextPosition;\n\n if (this.cursorPosition === -1) {\n // without shift\n element.setSelectionRange(cursorPosition, cursorPosition);\n } else {\n if (\n this.cursorPosition &&\n element.selectionEnd >= this.cursorPosition &&\n element.selectionStart === this.cursorPosition\n ) {\n element.setSelectionRange(element.selectionStart, cursorPosition);\n } else if (element.selectionStart !== null) {\n element.setSelectionRange(\n value[element.selectionStart] === this.separatorThousands\n ? element.selectionStart + cursorIndex\n : element.selectionStart + 1,\n element.selectionEnd,\n );\n }\n }\n };\n\n handleClick = (event: React.MouseEvent<HTMLInputElement>) => {\n const element = event.currentTarget;\n const value = element.value;\n\n if (element.selectionStart !== null && value[element.selectionStart - 1] === this.separatorThousands) {\n element.setSelectionRange(element.selectionStart - 1, element.selectionEnd! - 1);\n }\n };\n\n stepUp = (event: StepEvent) => {\n const { max = Number.MAX_SAFE_INTEGER, min, step, value } = this.asProps;\n\n let numberValue;\n\n // https://stackoverflow.com/questions/68010124/safari-number-input-stepup-stepdown-not-functioning-with-empty-value\n if (value === '' || value === null) {\n numberValue = min ?? 0;\n } else {\n numberValue = Number.parseFloat(value);\n }\n\n if (Number.isNaN(numberValue)) return;\n\n const nextValue = Math.min(numberValue + step, max);\n\n this.handlers.value(this.processedValue(this.getStringValue(nextValue)), event);\n };\n\n stepDown = (event: StepEvent) => {\n const { max, min = Number.MIN_SAFE_INTEGER, step, value } = this.asProps;\n\n let numberValue;\n\n if (value === '' || value === null) {\n numberValue = max ?? 0;\n } else {\n numberValue = Number.parseFloat(value);\n }\n\n if (Number.isNaN(numberValue)) return;\n\n const nextValue = Math.max(numberValue - step, min);\n\n this.handlers.value(this.processedValue(this.getStringValue(nextValue)), event);\n };\n\n processedValue(value: string): NSInputNumber.Value | NSInputNumber.ValueNumber {\n if (this.valueType === 'string') {\n return value;\n }\n\n if (value === '') {\n return null;\n }\n\n return Number(value);\n }\n\n render() {\n const SValue = Root;\n const { styles, min, max, step, forwardRef, inputRef } = this.asProps;\n const { displayValue } = this.state;\n\n return sstyled(styles)(\n <>\n <SValue\n render={Input.Value}\n autoComplete='off'\n onBlur={this.handleValidation}\n use:onChange={this.handleChange}\n onKeyDown={this.handleKeyDown}\n onKeyUp={this.handleKeyUp}\n onClick={this.handleClick}\n use:ref={forkRef(this.valueInputRef, inputRef, forwardRef ?? null)}\n use:value={displayValue}\n inputMode={Number.isInteger(step) ? 'numeric' : 'decimal'}\n min={min}\n max={max}\n step={step}\n />\n </>,\n );\n }\n}\n\nfunction Controls(\n props: Intergalactic.InternalTypings.InferChildComponentProps<NSInputNumber.Controls.Component, typeof InputNumber, 'Controls'>,\n) {\n const { Children, increment, decrement, styles, getI18nText } = props;\n const SControls = Root;\n const SUp = 'button';\n const SDown = 'button';\n\n return sstyled(styles)(\n <SControls render={Input.Addon} aria-hidden='true'>\n <SUp\n onClick={increment}\n tabIndex={-1}\n type='button'\n aria-label={getI18nText('increment')}\n >\n <IncrementIcon />\n </SUp>\n <SDown\n onClick={decrement}\n tabIndex={-1}\n type='button'\n aria-label={getI18nText('decrement')}\n >\n <DecrementIcon />\n </SDown>\n <Children />\n </SControls>,\n );\n}\nControls.style = style;\n\n/**\n * InputNumber\n *\n * {@link https://developer.semrush.com/intergalactic/components/input-number/input-number-api/|API} | {@link https://developer.semrush.com/intergalactic/components/input-number/input-number-code/|Examples}\n */\nexport default createComponent<\n NSInputNumber.Component,\n typeof InputNumber\n>(InputNumber, {\n Value,\n Controls,\n Addon: Input.Addon,\n});\n"],"mappings":";;;;;;;;;AACA,SAASA,SAAS,EAAEC,eAAe,EAAEC,IAAI,EAAEC,OAAO,QAAQ,eAAe;AACzE,OAAOC,aAAa,MAAM,4CAA4C;AACtE,SAASC,oBAAoB,QAAQ,qCAAqC;AAE1E,OAAOC,WAAW,MAAM,8CAA8C;AACtE,SAASC,OAAO,QAAQ,6BAA6B;AACrD,OAAOC,KAAK,MAAM,gBAAgB;AAClC,OAAOC,KAAK,MAAM,OAAO;AAEzB,SAASC,aAAa,EAAEC,aAAa,QAAQ,WAAW;AAAC;AAAA,MAAAC,KAAA,8BAAAC,QAAA,CAAAC,MAAA;AAAA;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;AAGzD,SAASC,iBAAiB,QAAQ,gDAAgD;;AAElF;;AAMA;AACA;AACA;AACA;;AAMA,OAAO,SAASC,oBAAoBA,CAClCC,KAAa,EACbC,GAAG,GAAGC,MAAM,CAACC,gBAAgB,EAC7BC,GAAG,GAAGF,MAAM,CAACG,gBAAgB,EAC7B;EACA,OAAOC,IAAI,CAACF,GAAG,CAACH,GAAG,EAAEK,IAAI,CAACL,GAAG,CAACG,GAAG,EAAEJ,KAAK,CAAC,CAAC;AAC5C;AAEA,MAAMO,WAAW,SAASxB,SAAS,CAOjC;EAAAyB,YAAA,GAAAC,IAAA;IAAA,SAAAA,IAAA;IAAAC,eAAA,gCAUWlB,KAAK,CAACmB,SAAS,CAAe,CAAC;IAAAD,eAAA,oBAE7BE,KAAuB,IAAK;MACtC,IAAI,CAACC,QAAQ,CAACC,OAAO,EAAGC,MAAM,GAAGH,KAAK,CAAC;IAC1C,CAAC;IAAAF,eAAA,oBAEYE,KAAuB,IAAK;MACtC,IAAI,CAACC,QAAQ,CAACC,OAAO,EAAGE,QAAQ,GAAGJ,KAAK,CAAC;IAC5C,CAAC;EAAA;EAEDK,aAAaA,CAAA,EAAG;IACd,MAAMC,eAAe,GAAG,IAAIC,IAAI,CAACC,YAAY,CAAC,IAAI,CAACC,OAAO,CAACC,MAAM,EAAE;MACjE3B,KAAK,EAAE,SAAS;MAChB4B,qBAAqB,EAAE;IACzB,CAAC,CAAC;IAEF,OAAO;MACLV,QAAQ,EAAE,IAAI,CAACA,QAAQ;MACvBW,SAAS,EAAE,IAAI,CAACA,SAAS;MACzBC,SAAS,EAAE,IAAI,CAACA,SAAS;MACzBP;IACF,CAAC;EACH;EAEAQ,gBAAgBA,CAAA,EAAG;IACjB,MAAM;MAAEC;IAAY,CAAC,GAAG,IAAI,CAACN,OAAO;IACpC,OAAO;MACLG,SAAS,EAAE,IAAI,CAACA,SAAS;MACzBC,SAAS,EAAE,IAAI,CAACA,SAAS;MACzBE;IACF,CAAC;EACH;EAEAC,MAAMA,CAAA,EAAG;IAAA,IAAAC,IAAA,QAAAR,OAAA;MAAAS,KAAA;IACP,MAAMC,YAAY,GACuCxC,KAAK;IAA9D,OAAAuC,KAAA,GAAO5C,OAAO,CAAC,IAAI,CAACmC,OAAO,CAAC1B,KAAK,CAAC,eAACH,KAAA,CAAAwC,aAAA,CAACD,YAAY,EAAAD,KAAA,CAAAG,EAAA;MAAA,GAAAC,YAAA,KAAAL,IAAA;IAAA,EAAiB,CAAC;EACpE;AACF;AAACnB,eAAA,CAtDKH,WAAW,iBAQM,aAAa;AAAAG,eAAA,CAR9BH,WAAW,WASAZ,KAAK;AAAAe,eAAA,CAThBH,WAAW,aAUE,CAAClB,WAAW,CAACS,iBAAiB,CAAC,CAAC;AAAAY,eAAA,CAV7CH,WAAW,kBAWO;EACpB4B,IAAI,EAAE,GAAG;EACTC,IAAI,EAAEtC,iBAAiB;EACvBwB,MAAM,EAAE;AACV,CAAC;AAAA,IAAAe,MAAA;AAAA,KAAAC,OAAA,IAAAC,OAAA,GAyCH,MAAAC,KAAA,SACoBzD,SAAS,CAOzB;EAAAyB,YAAA,GAAAC,IAAA;IAAA,SAAAA,IAAA;IAAAC,eAAA,oBAQgC,OAAO,IAAI,CAAC+B,KAAK,CAACzC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAACyC,KAAK,CAACzC,KAAK,KAAK,IAAI,GAAI,QAAQ,GAAG,QAAQ;IAAAU,eAAA,gBAEvF;MACjCgC,YAAY,EAAE;IAChB,CAAC;IAAAhC,eAAA,qCAEelB,KAAK,CAACmB,SAAS,CAAmB,CAAC;IAAAD,eAAA,yBAEnB,CAAC,CAAC;IAAAA,eAAA,4BA8CbV,KAAa,IAAK;MACrC,OAAOA,KAAK,CACT2C,OAAO,CAAC,IAAIC,MAAM,CAAC,IAAI,IAAI,CAACC,kBAAkB,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAC5DF,OAAO,CAAC,IAAI,CAACG,gBAAgB,EAAE,GAAG,CAAC,CACnCH,OAAO,CAAC,IAAIC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC;IAC5C,CAAC;IAAAlC,eAAA,0BAEiB,CAChBV,KAAsB,EACtB+C,gBAA2D,KACxD;MACH,MAAM;QAAE7B;MAAgB,CAAC,GAAG,IAAI,CAACuB,KAAK;MACtC,MAAMO,YAAY,GAAGC,MAAM,CAACjD,KAAK,CAAC;MAElC,IAAIE,MAAM,CAACgD,KAAK,CAAChD,MAAM,CAAC8C,YAAY,CAAC,CAAC,EAAE;QACtC,OAAOD,gBAAgB;MACzB;MAEA,IAAIL,YAAY,GAAG,EAAE;MAErB,IAAI,YAAY,CAACS,IAAI,CAACH,YAAY,CAAC,EAAE;QACnC,MAAM,CAACI,GAAG,EAAEC,OAAO,CAAC,GAAGL,YAAY,CAACM,KAAK,CAAC,GAAG,CAAC;QAC9CZ,YAAY,GAAGxB,eAAe,CAACqC,MAAM,CAAC,CAACH,GAAG,CAAC,GAAG,IAAI,CAACN,gBAAgB,GAAGO,OAAO;MAC/E,CAAC,MAAM,IAAIL,YAAY,KAAK,EAAE,EAAE;QAC9BN,YAAY,GAAGxB,eAAe,CAACqC,MAAM,CAAC,CAACP,YAAY,CAAC;MACtD;MAEA,OAAON,YAAY;IACrB,CAAC;IAAAhC,eAAA,2BA+BmBE,KAAyC,IAAK;MAChE,MAAM;QAAEZ,KAAK;QAAEC,GAAG;QAAEG,GAAG;QAAEoD;MAAK,CAAC,GAAG,IAAI,CAACnC,OAAO;MAC9C,MAAMoC,WAAW,GAAG,IAAI,CAACC,iBAAiB,CAAC9C,KAAK,CAAC+C,aAAa,CAAC3D,KAAK,CAAC;MAErE,IAAIE,MAAM,CAACgD,KAAK,CAAClD,KAAK,CAAC,IAAIE,MAAM,CAACgD,KAAK,CAAChD,MAAM,CAAC0D,UAAU,CAACH,WAAW,CAAC,CAAC,EAAE;QACvE7C,KAAK,CAAC+C,aAAa,CAAC3D,KAAK,GAAG,EAAE;QAC9B,IAAI,CAAC6D,QAAQ,CAAC7D,KAAK,CAAC,IAAI,CAAC8D,cAAc,CAAC,EAAE,CAAC,EAAElD,KAAK,CAAC;MACrD,CAAC,MAAM;QACL,IAAImD,WAAW,GAAGhE,oBAAoB,CAACG,MAAM,CAAC0D,UAAU,CAACH,WAAW,CAAC,EAAExD,GAAG,EAAEG,GAAG,CAAC;QAChF,MAAM4D,OAAO,GAAG,IAAI,CAACC,KAAK,CAACF,WAAW,GAAGP,IAAI,CAAC;QAC9C,IAAIQ,OAAO,KAAK,CAAC,EAAE;UACjB,IAAIA,OAAO,IAAIR,IAAI,GAAG,CAAC,EAAE;YACvBO,WAAW,IAAIP,IAAI,GAAGQ,OAAO;UAC/B,CAAC,MAAM,IAAI1D,IAAI,CAAC4D,GAAG,CAACF,OAAO,CAAC,GAAGR,IAAI,EAAE;YACnCO,WAAW,IAAIC,OAAO;UACxB;QACF;QAEA,IAAI,CAACH,QAAQ,CAAC7D,KAAK,CAAC,IAAI,CAAC8D,cAAc,CAAC,IAAI,CAACK,cAAc,CAACJ,WAAW,CAAC,CAAC,EAAEnD,KAAK,CAAC;MACnF;IACF,CAAC;IAAAF,eAAA,kBAuCUE,KAAiB,IAAK;MAC/BxB,oBAAoB,CAAC,IAAI,CAACiC,OAAO,CAAC+C,OAAO,EAAE,IAAI,CAACC,WAAW,CAAC,CAACzD,KAAK,CAAC;IACrE,CAAC;IAAAF,eAAA,sBAEcE,KAAiB,IAAK;MACnC,IAAIA,KAAK,CAAC0D,MAAM,KAAK,IAAI,CAACC,aAAa,CAACzD,OAAO,EAAE;MACjD,IAAI0D,QAAQ,CAACC,aAAa,KAAK,IAAI,CAACF,aAAa,CAACzD,OAAO,EAAE;MAC3DF,KAAK,CAAC8D,cAAc,CAAC,CAAC;MACtB,IAAI9D,KAAK,CAAC+D,MAAM,GAAG,CAAC,EAAE;QACpB,IAAI,CAAC5D,MAAM,CAACH,KAAK,CAAC;MACpB,CAAC,MAAM,IAAIA,KAAK,CAAC+D,MAAM,GAAG,CAAC,EAAE;QAC3B,IAAI,CAAC3D,QAAQ,CAACJ,KAAK,CAAC;MACtB;IACF,CAAC;IAAAF,eAAA,uBAEeE,KAA0C,IAAK;MAC7D,MAAMZ,KAAK,GAAG,IAAI,CAAC0D,iBAAiB,CAAC9C,KAAK,CAAC+C,aAAa,CAAC3D,KAAK,CAAC;MAC/D,MAAM;QAAEkB,eAAe;QAAElB,KAAK,EAAE4E;MAAU,CAAC,GAAG,IAAI,CAACvD,OAAO;MAE1D,IAAIrB,KAAK,KAAK,GAAG,IAAIA,KAAK,KAAK,GAAG,EAAE;QAClC,IAAI,CAAC6E,QAAQ,CAAC;UAAEnC,YAAY,EAAE1C;QAAM,CAAC,CAAC;QACtC,OAAO,KAAK;MACd;MAEA,IAAIA,KAAK,CAAC8E,QAAQ,CAAC,GAAG,CAAC,EAAE;QACvB,OAAO,KAAK;MACd;MAEA,IAAI9E,KAAK,CAAC8E,QAAQ,CAAC,GAAG,CAAC,EAAE;QACvB,IAAIF,SAAS,KAAK,IAAI,IAAI5E,KAAK,CAAC+E,MAAM,GAAGH,SAAS,CAACI,QAAQ,CAAC,CAAC,CAACD,MAAM,EAAE;UACpE,IAAI,CAACF,QAAQ,CAAC;YAAEnC,YAAY,EAAExB,eAAe,CAACqC,MAAM,CAACvD,KAAoB,CAAC,GAAG,IAAI,CAAC8C;UAAiB,CAAC,CAAC;UACrG,OAAO,KAAK;QACd,CAAC,MAAM;UACL,IAAI,CAACe,QAAQ,CAAC7D,KAAK,CAAC,IAAI,CAAC8D,cAAc,CAAC9D,KAAK,CAACiF,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAErE,KAAK,CAAC;UACnE,OAAO,KAAK;QACd;MACF;MAEA,MAAMsE,MAAM,GAAG,YAAY,CAAC/B,IAAI,CAACnD,KAAK,CAAC;MAEvC,IAAIkF,MAAM,IAAIlF,KAAK,KAAK,EAAE,EAAE;QAC1B,MAAMmF,QAAQ,GAAG,IAAI,CAACC,aAAa,CAACpF,KAAK,CAAC;QAC1C,IAAI,CAAC6D,QAAQ,CAAC7D,KAAK,CAAC,IAAI,CAAC8D,cAAc,CAACqB,QAAQ,CAAC,EAAEvE,KAAK,CAAC;QACzD,IAAIuE,QAAQ,KAAKP,SAAS,EAAE;UAC1B,MAAMlC,YAAY,GAAG,IAAI,CAAC2C,eAAe,CACvCF,QAAQ,IAAI,EAAE,EACd,IAAI,CAACG,KAAK,CAAC5C,YACb,CAAC;UACD,IAAI,CAACmC,QAAQ,CAAC;YAAEnC;UAAa,CAAC,CAAC;QACjC;MACF;IACF,CAAC;IAAAhC,eAAA,sBAEcE,KAA4C,IAAK;MAC9D,IAAIA,KAAK,CAAC2E,GAAG,KAAK,OAAO,EAAE;QACzB,IAAI,CAACC,cAAc,GAAG,CAAC,CAAC;MAC1B;IACF,CAAC;IAAA9E,eAAA,wBAEgBE,KAA4C,IAAK;MAChE,MAAM6E,OAAO,GAAG7E,KAAK,CAAC+C,aAAa;MACnC,MAAM3D,KAAK,GAAGyF,OAAO,CAACzF,KAAK;MAC3B,MAAM+E,MAAM,GAAG/E,KAAK,CAAC+E,MAAM;MAC3B,MAAM;QAAErC;MAAa,CAAC,GAAG,IAAI,CAAC4C,KAAK;MAEnC,IAAI1E,KAAK,CAAC2E,GAAG,KAAK,GAAG,IAAI3E,KAAK,CAAC2E,GAAG,KAAK,GAAG,EAAE;QAC1C;QACA,IAAIvF,KAAK,CAAC0F,OAAO,CAAC,IAAI,CAAC5C,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAIlC,KAAK,CAAC2E,GAAG,KAAK,GAAG,EAAE;UACpE3E,KAAK,CAAC+C,aAAa,CAAC3D,KAAK,GAAGA,KAAK,GAAG,GAAG;QACzC,CAAC,MAAM,IAAIA,KAAK,CAAC0F,OAAO,CAAC,IAAI,CAAC5C,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE;UAAE;UACxDlC,KAAK,CAAC8D,cAAc,CAAC,CAAC;UACtB9D,KAAK,CAAC+E,eAAe,CAAC,CAAC;UACvB;QACF;MACF;MAEA,IAAI/E,KAAK,CAAC2E,GAAG,KAAK,WAAW,IAAIvF,KAAK,CAAC8E,QAAQ,CAAC,IAAI,CAAChC,gBAAgB,CAAC,EAAE;QACtElC,KAAK,CAAC8D,cAAc,CAAC,CAAC;QACtB9D,KAAK,CAAC+E,eAAe,CAAC,CAAC;QACvB,IAAI,CAACd,QAAQ,CAAC;UAAEnC,YAAY,EAAEA,YAAY,EAAEuC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAAE,CAAC,CAAC;QAC3D,OAAO,KAAK;MACd;MAEA,IACEQ,OAAO,CAACG,cAAc,KAAKb,MAAM,KAChCnE,KAAK,CAAC2E,GAAG,KAAK,WAAW,IACxB3E,KAAK,CAAC2E,GAAG,KAAK,IAAI,CAACzC,gBAAgB,IACnC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC+C,QAAQ,CAACjF,KAAK,CAAC2E,GAAG,CAAC,CAAC,EACzE;QACA,MAAMO,cAAc,GAAG9F,KAAK,CAACiF,KAAK,CAACQ,OAAO,CAACM,YAAY,IAAIC,SAAS,CAAC;QAErEC,qBAAqB,CAAC,MAAM;UAC1B,MAAMd,QAAQ,GAAG,IAAI,CAACG,KAAK,CAAC5C,YAAY;UACxC,MAAMwD,KAAK,GAAGf,QAAQ,CAACgB,WAAW,CAACL,cAAc,CAAC;UAClD,MAAMF,cAAc,GAAGM,KAAK;UAC5B,MAAMH,YAAY,GAAGG,KAAK;UAE1BT,OAAO,CAACW,iBAAiB,CAACR,cAAc,EAAEG,YAAY,CAAC;QACzD,CAAC,CAAC;MACJ;;MAEA;MACA;MACA;MACA;MACA,MAAMM,WAAW,GAAG,CAAC;MAErB,IAAIzF,KAAK,CAAC0F,QAAQ,IAAI,IAAI,CAACd,cAAc,KAAK,CAAC,CAAC,EAAE;QAChD,IAAI,CAACA,cAAc,GAAGC,OAAO,CAACG,cAAc;MAC9C;MAEA,QAAQhF,KAAK,CAAC2E,GAAG;QACf,KAAK,WAAW;UAAE;YAChB3E,KAAK,CAAC8D,cAAc,CAAC,CAAC;YACtB,IAAI,CAAC6B,iBAAiB,CAACd,OAAO,EAAEY,WAAW,CAAC;YAC5C;UACF;QACA,KAAK,YAAY;UAAE;YACjBzF,KAAK,CAAC8D,cAAc,CAAC,CAAC;YACtB,IAAI,CAAC8B,kBAAkB,CAACf,OAAO,EAAEY,WAAW,CAAC;YAC7C;UACF;QACA,KAAK,WAAW;UAAE;YAChBzF,KAAK,CAAC8D,cAAc,CAAC,CAAC;YACtB,IAAI,CAAC1D,QAAQ,CAACJ,KAAK,CAAC;YACpB;UACF;QACA,KAAK,SAAS;UAAE;YACdA,KAAK,CAAC8D,cAAc,CAAC,CAAC;YACtB,IAAI,CAAC3D,MAAM,CAACH,KAAK,CAAC;YAClB;UACF;MACF;IACF,CAAC;IAAAF,eAAA,4BAEmB,CAAC+E,OAA+D,EAAEY,WAAmB,KAAK;MAC5G,IAAIZ,OAAO,CAACG,cAAc,KAAK,IAAI,EAAE;MAErC,MAAM5F,KAAK,GAAGyF,OAAO,CAACzF,KAAK;MAE3B,MAAMyG,YAAY,GAAGhB,OAAO,CAACG,cAAc,GAAG,CAAC,IAAI,CAAC,GAAGH,OAAO,CAACG,cAAc,GAAG,CAAC,GAAG,CAAC;MAErF,MAAMJ,cAAc,GAClBxF,KAAK,CAACyF,OAAO,CAACG,cAAc,GAAGS,WAAW,CAAC,KAAK,IAAI,CAACxD,kBAAkB,GACnE4C,OAAO,CAACG,cAAc,GAAGS,WAAW,GACpCI,YAAY;MAElB,IAAI,IAAI,CAACjB,cAAc,KAAK,CAAC,CAAC,EAAE;QAC9B;QACAC,OAAO,CAACW,iBAAiB,CAACZ,cAAc,EAAEA,cAAc,CAAC;MAC3D,CAAC,MAAM;QACL,IACE,IAAI,CAACA,cAAc,IACnBC,OAAO,CAACG,cAAc,IAAI,IAAI,CAACJ,cAAc,IAC7CC,OAAO,CAACM,YAAY,KAAK,IAAI,CAACP,cAAc,EAC5C;UACAC,OAAO,CAACW,iBAAiB,CAACZ,cAAc,EAAEC,OAAO,CAACM,YAAY,CAAC;QACjE,CAAC,MAAM,IAAIN,OAAO,CAACM,YAAY,KAAK,IAAI,EAAE;UACxCN,OAAO,CAACW,iBAAiB,CACvBX,OAAO,CAACG,cAAc,EACtB5F,KAAK,CAACyF,OAAO,CAACM,YAAY,GAAGM,WAAW,CAAC,KAAK,IAAI,CAACxD,kBAAkB,GACjE4C,OAAO,CAACM,YAAY,GAAGM,WAAW,GAClCZ,OAAO,CAACM,YAAY,GAAG,CAC7B,CAAC;QACH;MACF;IACF,CAAC;IAAArF,eAAA,6BAEoB,CAAC+E,OAA+D,EAAEY,WAAmB,KAAK;MAC7G,IAAIZ,OAAO,CAACM,YAAY,KAAK,IAAI,EAAE;MAEnC,MAAM/F,KAAK,GAAGyF,OAAO,CAACzF,KAAK;MAC3B,MAAMyG,YAAY,GAAGhB,OAAO,CAACM,YAAY,GAAG,CAAC;MAE7C,MAAMP,cAAc,GAClBxF,KAAK,CAACyF,OAAO,CAACM,YAAY,CAAC,KAAK,IAAI,CAAClD,kBAAkB,GACnD4C,OAAO,CAACM,YAAY,GAAGM,WAAW,GAClCI,YAAY;MAElB,IAAI,IAAI,CAACjB,cAAc,KAAK,CAAC,CAAC,EAAE;QAC9B;QACAC,OAAO,CAACW,iBAAiB,CAACZ,cAAc,EAAEA,cAAc,CAAC;MAC3D,CAAC,MAAM;QACL,IACE,IAAI,CAACA,cAAc,IACnBC,OAAO,CAACM,YAAY,IAAI,IAAI,CAACP,cAAc,IAC3CC,OAAO,CAACG,cAAc,KAAK,IAAI,CAACJ,cAAc,EAC9C;UACAC,OAAO,CAACW,iBAAiB,CAACX,OAAO,CAACG,cAAc,EAAEJ,cAAc,CAAC;QACnE,CAAC,MAAM,IAAIC,OAAO,CAACG,cAAc,KAAK,IAAI,EAAE;UAC1CH,OAAO,CAACW,iBAAiB,CACvBpG,KAAK,CAACyF,OAAO,CAACG,cAAc,CAAC,KAAK,IAAI,CAAC/C,kBAAkB,GACrD4C,OAAO,CAACG,cAAc,GAAGS,WAAW,GACpCZ,OAAO,CAACG,cAAc,GAAG,CAAC,EAC9BH,OAAO,CAACM,YACV,CAAC;QACH;MACF;IACF,CAAC;IAAArF,eAAA,sBAEcE,KAAyC,IAAK;MAC3D,MAAM6E,OAAO,GAAG7E,KAAK,CAAC+C,aAAa;MACnC,MAAM3D,KAAK,GAAGyF,OAAO,CAACzF,KAAK;MAE3B,IAAIyF,OAAO,CAACG,cAAc,KAAK,IAAI,IAAI5F,KAAK,CAACyF,OAAO,CAACG,cAAc,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC/C,kBAAkB,EAAE;QACpG4C,OAAO,CAACW,iBAAiB,CAACX,OAAO,CAACG,cAAc,GAAG,CAAC,EAAEH,OAAO,CAACM,YAAY,GAAI,CAAC,CAAC;MAClF;IACF,CAAC;IAAArF,eAAA,iBAESE,KAAgB,IAAK;MAC7B,MAAM;QAAER,GAAG,GAAGF,MAAM,CAACG,gBAAgB;QAAEJ,GAAG;QAAEuD,IAAI;QAAExD;MAAM,CAAC,GAAG,IAAI,CAACqB,OAAO;MAExE,IAAI0C,WAAW;;MAEf;MACA,IAAI/D,KAAK,KAAK,EAAE,IAAIA,KAAK,KAAK,IAAI,EAAE;QAClC+D,WAAW,GAAG9D,GAAG,IAAI,CAAC;MACxB,CAAC,MAAM;QACL8D,WAAW,GAAG7D,MAAM,CAAC0D,UAAU,CAAC5D,KAAK,CAAC;MACxC;MAEA,IAAIE,MAAM,CAACgD,KAAK,CAACa,WAAW,CAAC,EAAE;MAE/B,MAAM2C,SAAS,GAAGpG,IAAI,CAACL,GAAG,CAAC8D,WAAW,GAAGP,IAAI,EAAEpD,GAAG,CAAC;MAEnD,IAAI,CAACyD,QAAQ,CAAC7D,KAAK,CAAC,IAAI,CAAC8D,cAAc,CAAC,IAAI,CAACK,cAAc,CAACuC,SAAS,CAAC,CAAC,EAAE9F,KAAK,CAAC;IACjF,CAAC;IAAAF,eAAA,mBAEWE,KAAgB,IAAK;MAC/B,MAAM;QAAER,GAAG;QAAEH,GAAG,GAAGC,MAAM,CAACC,gBAAgB;QAAEqD,IAAI;QAAExD;MAAM,CAAC,GAAG,IAAI,CAACqB,OAAO;MAExE,IAAI0C,WAAW;MAEf,IAAI/D,KAAK,KAAK,EAAE,IAAIA,KAAK,KAAK,IAAI,EAAE;QAClC+D,WAAW,GAAG3D,GAAG,IAAI,CAAC;MACxB,CAAC,MAAM;QACL2D,WAAW,GAAG7D,MAAM,CAAC0D,UAAU,CAAC5D,KAAK,CAAC;MACxC;MAEA,IAAIE,MAAM,CAACgD,KAAK,CAACa,WAAW,CAAC,EAAE;MAE/B,MAAM2C,SAAS,GAAGpG,IAAI,CAACF,GAAG,CAAC2D,WAAW,GAAGP,IAAI,EAAEvD,GAAG,CAAC;MAEnD,IAAI,CAAC4D,QAAQ,CAAC7D,KAAK,CAAC,IAAI,CAAC8D,cAAc,CAAC,IAAI,CAACK,cAAc,CAACuC,SAAS,CAAC,CAAC,EAAE9F,KAAK,CAAC;IACjF,CAAC;EAAA;EAtZD+F,iBAAiBA,CAAA,EAAiC;IAChD,OAAO;MACL3G,KAAK,EAAE,CACL,IAAI,EACHmF,QAAQ,IAAK;QACZ,MAAM;UAAEzC,YAAY,EAAEK;QAAiB,CAAC,GAAG,IAAI,CAACuC,KAAK;QAErD,MAAM5C,YAAY,GAAG,IAAI,CAAC2C,eAAe,CACvCF,QAAQ,IAAI,EAAE,EACdpC,gBACF,CAAC;QAED,IAAI,CAAC8B,QAAQ,CAAC;UAAEnC;QAAa,CAAC,CAAC;QAE/B,OAAOO,MAAM,CAACkC,QAAQ,CAAC;MACzB,CAAC;IAEL,CAAC;EACH;EAEA,IAAIrC,gBAAgBA,CAAA,EAAG;IACrB,MAAM;MAAE5B;IAAgB,CAAC,GAAG,IAAI,CAACuB,KAAK;IAEtC,OAAOvB,eAAe,CAACqC,MAAM,CAAC,KAAK,CAAC,CAACZ,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;EACzD;EAEA,IAAIE,kBAAkBA,CAAA,EAAG;IACvB,MAAM;MAAE3B;IAAgB,CAAC,GAAG,IAAI,CAACuB,KAAK;IAEtC,OAAOvB,eAAe,CAACqC,MAAM,CAAC,KAAK,CAAC,CAACZ,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;EACzD;EAEAiE,aAAaA,CAACC,YAAgD,EAAE;IAC9D,MAAM;MAAE7G;IAAM,CAAC,GAAG6G,YAAY;IAE9B,IAAI7G,KAAK,KAAKgG,SAAS,EAAE;MACvB,IAAI,OAAOhG,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,IAAI,EAAE;QAC/C,IAAI,CAAC8G,SAAS,GAAG,QAAQ;MAC3B,CAAC,MAAM;QACL,IAAI,CAACA,SAAS,GAAG,QAAQ;MAC3B;IACF;EACF;EAgCA,IAAIC,aAAaA,CAAA,EAAG;IAClB,MAAM;MAAEvD;IAAK,CAAC,GAAG,IAAI,CAACnC,OAAO;IAC7B,MAAM,CAAC2F,CAAC,EAAEC,QAAQ,CAAC,GAAGzD,IAAI,EAAEwB,QAAQ,CAAC,CAAC,CAAC1B,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE;IAEvD,OAAO2D,QAAQ,EAAElC,MAAM,IAAI,CAAC;EAC9B;EAEAZ,cAAcA,CAACnE,KAAa,EAAU;IACpC,OAAOA,KAAK,KAAK,CAAC,GAAG,GAAGA,KAAK,EAAE,GAAGA,KAAK,CAACkH,OAAO,CAAC,IAAI,CAACH,aAAa,CAAC;EACrE;EAEA3B,aAAaA,CAACpF,KAAa,EAAE;IAC3B,MAAM;MAAE+G;IAAc,CAAC,GAAG,IAAI;IAC9B,IAAIA,aAAa,KAAK,CAAC,EAAE,OAAO/G,KAAK;IAErC,MAAMmH,QAAQ,GAAGnH,KAAK,CAAC0F,OAAO,CAAC,GAAG,CAAC;IACnC,IAAIyB,QAAQ,KAAK,CAAC,CAAC,IAAInH,KAAK,CAAC+E,MAAM,GAAGoC,QAAQ,GAAG,CAAC,IAAIJ,aAAa,EAAE,OAAO/G,KAAK;IAEjF,OAAOA,KAAK,CAACiF,KAAK,CAAC,CAAC,EAAEkC,QAAQ,GAAG,CAAC,GAAGJ,aAAa,CAAC;EACrD;EAEA9C,KAAKA,CAACjE,KAAa,EAAU;IAC3B,MAAM;MAAE+G;IAAc,CAAC,GAAG,IAAI;IAE9B,OAAOA,aAAa,KAAK,CAAC,GACtB/G,KAAK,GACLE,MAAM,CAACF,KAAK,CAACoH,WAAW,CAACL,aAAa,CAAC,CAAC;EAC9C;EAwBA;EACAM,iBAAiBA,CAAA,EAAG;IAClB,IAAI,CAAC9C,aAAa,CAACzD,OAAO,EAAEwG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAClD,OAAO,CAAC;IAEnE,MAAM;MAAEvD,QAAQ;MAAEb,KAAK;MAAEuH;IAAU,CAAC,GAAG,IAAI,CAAClG,OAAO;IAEnD,IAAIkG,SAAS,EAAE;MACbC,UAAU,CAAC,MAAM;QACf,IAAI,CAACjD,aAAa,CAACzD,OAAO,EAAE2G,KAAK,CAAC,CAAC;MACrC,CAAC,CAAC;IACJ;IAEA,IAAI5G,QAAQ,CAACC,OAAO,EAAE;MACpBD,QAAQ,CAACC,OAAO,CAACC,MAAM,GAAG,IAAI,CAACA,MAAM;MACrCF,QAAQ,CAACC,OAAO,CAACE,QAAQ,GAAG,IAAI,CAACA,QAAQ;IAC3C;IAEA,IAAIhB,KAAK,KAAK,EAAE,EAAE;MAChB,MAAM0C,YAAY,GAAG,IAAI,CAAC2C,eAAe,CAACrF,KAAK,EAAE,EAAE,CAAC;MACpD,IAAI,CAAC6E,QAAQ,CAAC;QAAEnC;MAAa,CAAC,CAAC;IACjC;EACF;EAEAgF,kBAAkBA,CAACC,SAA8B,EAAEC,SAA4B,EAAE;IAC/E,IAAID,SAAS,CAAC3H,KAAK,KAAK,IAAI,CAACyC,KAAK,CAACzC,KAAK,EAAE;MACxC,MAAM0C,YAAY,GAAG,IAAI,CAAC2C,eAAe,CACvC,IAAI,CAAC5C,KAAK,CAACzC,KAAK,IAAI,EAAE,EACtB4H,SAAS,CAAClF,YACZ,CAAC;MACD,IAAI,CAACmC,QAAQ,CAAC;QAAEnC;MAAa,CAAC,CAAC;IACjC;EACF;EAEAmF,oBAAoBA,CAAA,EAAG;IACrB,IAAI,CAACtD,aAAa,CAACzD,OAAO,EAAEgH,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC1D,OAAO,CAAC;EACxE;EAwPAN,cAAcA,CAAC9D,KAAa,EAAmD;IAC7E,IAAI,IAAI,CAAC8G,SAAS,KAAK,QAAQ,EAAE;MAC/B,OAAO9G,KAAK;IACd;IAEA,IAAIA,KAAK,KAAK,EAAE,EAAE;MAChB,OAAO,IAAI;IACb;IAEA,OAAOE,MAAM,CAACF,KAAK,CAAC;EACtB;EAEA4B,MAAMA,CAAA,EAAG;IAAA,IAAAmG,KAAA,QAAA1G,OAAA;MAAA2G,KAAA;IACP,MAAMC,MAAM,GAOE1I,KAAK,CAACiD,KAAK;IANzB,MAAM;MAAE0F,MAAM;MAAEjI,GAAG;MAAEG,GAAG;MAAEoD,IAAI;MAAE2E,UAAU;MAAEtH;IAAS,CAAC,GAAG,IAAI,CAACQ,OAAO;IACrE,MAAM;MAAEqB;IAAa,CAAC,GAAG,IAAI,CAAC4C,KAAK;IAEnC,OAAA0C,KAAA,GAAO9I,OAAO,CAACgJ,MAAM,CAAC,eACpB1I,KAAA,CAAAwC,aAAA,CAAAxC,KAAA,CAAA4I,QAAA,qBACE5I,KAAA,CAAAwC,aAAA,CAACiG,MAAM,EAAAD,KAAA,CAAA/F,EAAA;MAAA,GAAAoG,aAAA;QAAA,gBAEQ,KAAK;QAAA,UACV,IAAI,CAACC,gBAAgB;QAAA,gBACf,IAAI,CAACC,YAAY;QAAA,aACpB,IAAI,CAACC,aAAa;QAAA,WACpB,IAAI,CAACC,WAAW;QAAA,WAChB,IAAI,CAACC,WAAW;QAAA,WAChBpJ,OAAO,CAAC,IAAI,CAACiF,aAAa,EAAE1D,QAAQ,EAAEsH,UAAU,IAAI,IAAI,CAAC;QAAA,aACvDzF,YAAY;QAAA,aACZxC,MAAM,CAACyI,SAAS,CAACnF,IAAI,CAAC,GAAG,SAAS,GAAG,SAAS;QAAA,OACpDvD,GAAG;QAAA,OACHG,GAAG;QAAA,QACFoD;MAAI,GAAAuE,KAAA;IAAA,EACX,CACD,CAAC;EAEP;AACF,CAAC,GAAA1F,MAAA,EAAAuG,UAAA,IAAAC,UAAA,CAAAtG,OAAA,GAvdApD,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,kBACLJ,SAAS,EAAA+J,CAAA,EAAAvG,OAAA,GAAAwG,MAAA,iBAAAC,SAAA;EAAAxI,YAAA;IAAA,MAAA6B,MAAA,GAAA3B,eAAA,gBAQZf,KAAK,GAAAe,eAAA,uBACE;MACpBuI,YAAY,EAAE,EAAE;MAChBC,mBAAmB,EAAE,EAAE;MACvB1F,IAAI,EAAE;IACR,CAAC,GAAAoF,UAAA;EAAA;AAAA,GAAAlI,eAAA,CAAAqI,MAAA,EAAAzG,OAAA,WAAAyG,MAAA;AA2cH,SAASI,QAAQA,CACf1G,KAA+H,EAC/H;EAAA,IAAA2G,KAAA,GAAAC,YAAA;IAAAC,KAAA;EACA,MAAM;IAAEC,QAAQ;IAAE/H,SAAS;IAAEC,SAAS;IAAEyG,MAAM;IAAEvG;EAAY,CAAC,GAAGc,KAAK;EACrE,MAAM+G,SAAS,GAKMjK,KAAK,CAACkK,KAAK;EAJhC,MAAMC,GAAG,GAAG,QAAQ;EACpB,MAAMC,KAAK,GAAG,QAAQ;EAEtB,OAAAL,KAAA,GAAOpK,OAAO,CAACgJ,MAAM,CAAC,eACpB1I,KAAA,CAAAwC,aAAA,CAACwH,SAAS,EAAAF,KAAA,CAAArH,EAAA;IAAA,GAAA2H,aAAA;MAAA,eAAkC;IAAM,GAAAR,KAAA;EAAA,iBAChD5J,KAAA,CAAAwC,aAAA,CAAC0H,GAAG,EAAAJ,KAAA,CAAArH,EAAA;IAAA,WACOT,SAAS;IAAA,YACR,CAAC,CAAC;IAAA,QACP,QAAQ;IAAA,cACDG,WAAW,CAAC,WAAW;EAAC,iBAEpCnC,KAAA,CAAAwC,aAAA,CAACtC,aAAa,EAAA4J,KAAA,CAAArH,EAAA,qBAAE,CACb,CAAC,eACNzC,KAAA,CAAAwC,aAAA,CAAC2H,KAAK,EAAAL,KAAA,CAAArH,EAAA;IAAA,WACKR,SAAS;IAAA,YACR,CAAC,CAAC;IAAA,QACP,QAAQ;IAAA,cACDE,WAAW,CAAC,WAAW;EAAC,iBAEpCnC,KAAA,CAAAwC,aAAA,CAACvC,aAAa,EAAA6J,KAAA,CAAArH,EAAA,qBAAE,CACX,CAAC,eACRzC,KAAA,CAAAwC,aAAA,CAACuH,QAAQ,EAAAD,KAAA,CAAArH,EAAA,gBAAE,CACF,CAAC;AAEhB;AACAkH,QAAQ,CAACxJ,KAAK,GAAGA,KAAK;;AAEtB;AACA;AACA;AACA;AACA;AACA,eAAeX,eAAe,CAG5BuB,WAAW,EAAE;EACbiC,KAAK,EAALA,MAAK;EACL2G,QAAQ;EACRM,KAAK,EAAElK,KAAK,CAACkK;AACf,CAAC,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"InputNumber.type.js","names":[],"sources":["../../src/InputNumber.type.ts"],"sourcesContent":["import type { Intergalactic, PropGetterFn } from '@semcore/core';\nimport type { NSInput } from '@semcore/input';\nimport type React from 'react';\n\nimport type { LocalizedMessages } from './translations/__intergalactic-dynamic-locales';\n\ndeclare namespace NSInputNumber {\n type Value = string;\n type Size = 'm' | 'l';\n type Props = NSInput.Props & {\n /** Input size\n * @default m\n * */\n size?: NSInputNumber.Size;\n /**\n * Locale value\n */\n locale?: string;\n };\n type DefaultProps = {\n size: 'm';\n i18n: LocalizedMessages;\n locale: 'en';\n };\n type Ctx = {\n getValueProps: PropGetterFn;\n getControlsProps: PropGetterFn;\n getAddonProps: PropGetterFn;\n };\n\n namespace Value {\n type Props = NSInput.Value.Props & {\n /** Minimum value\n * @default Number.MIN_SAFE_INTEGER\n */\n min?: number;\n /** Maximum value\n * @default Number.MAX_SAFE_INTEGER\n */\n max?: number;\n /** Value change step\n * @default 1\n */\n step?: number;\n /** Numeric value */\n value?: NSInputNumber.Value;\n /** Called when the input value changes, it returns its current value in numeric format */\n onChange?: (value: NSInputNumber.Value, event?: React.SyntheticEvent<HTMLInputElement>) => void;\n };\n type DefaultProps = {\n defaultValue: '';\n step: 1;\n };\n type State = {\n displayValue: NSInputNumber.Value;\n };\n type Handlers = {\n value: [\n null,\n (value: Props['value'], event: React.SyntheticEvent | WheelEvent) => void,\n ];\n };\n\n type Component = Intergalactic.Component<'input', Props>;\n }\n\n namespace Controls {\n type Props = NSInput.Addon.Props & {\n /** Always displays controls (steppers)\n * @default false\n */\n showControls?: boolean;\n };\n\n type Component = Intergalactic.Component<'div', Props>;\n }\n\n namespace Addon {\n type Component = Intergalactic.Component<'div', NSInput.Addon.Props>;\n }\n\n type Component = Intergalactic.Component<'div', Props, Ctx> & {\n Value: Value.Component;\n Controls: Controls.Component;\n Addon: Addon.Component;\n };\n}\n\n/** @deprecated It will be removed in v18. */\nexport type InputNumberValue = NSInputNumber.Value;\n/** @deprecated It will be removed in v18. */\nexport type InputNumberSize = NSInputNumber.Size;\n/** @deprecated It will be removed in v18. */\nexport type InputNumberProps = NSInputNumber.Props;\n/** @deprecated It will be removed in v18. */\nexport type InputNumberValueProps = NSInputNumber.Value.Props;\n/** @deprecated It will be removed in v18. */\nexport type InputNumberControlsProps = NSInputNumber.Controls.Props;\n/** @deprecated It will be removed in v18. */\nexport type InputNumberCtx = NSInputNumber.Ctx;\n\nexport type { NSInputNumber };\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"InputNumber.type.js","names":[],"sources":["../../src/InputNumber.type.ts"],"sourcesContent":["import type { Intergalactic, PropGetterFn } from '@semcore/core';\nimport type { NSInput } from '@semcore/input';\nimport type React from 'react';\n\nimport type { LocalizedMessages } from './translations/__intergalactic-dynamic-locales';\n\ndeclare namespace NSInputNumber {\n type Value = string;\n type ValueNumber = number | null;\n type CalculatedValue<V> = V extends Value ? Value : ValueNumber;\n type Size = 'm' | 'l';\n type Props = NSInput.Props & {\n /** Input size\n * @default m\n * */\n size?: NSInputNumber.Size;\n /**\n * Locale value\n */\n locale?: string;\n };\n type DefaultProps = {\n size: 'm';\n i18n: LocalizedMessages;\n locale: 'en';\n };\n type Ctx = {\n getValueProps: PropGetterFn;\n getControlsProps: PropGetterFn;\n getAddonProps: PropGetterFn;\n };\n\n namespace Value {\n type Props<V extends Value | ValueNumber> = Intergalactic.InternalTypings.EfficientOmit<NSInput.Value.Props, 'value' | 'onChange'> & {\n /** Minimum value\n * @default Number.MIN_SAFE_INTEGER\n */\n min?: number;\n /** Maximum value\n * @default Number.MAX_SAFE_INTEGER\n */\n max?: number;\n /** Value change step\n * @default 1\n */\n step?: number;\n /** Numeric value */\n value?: CalculatedValue<V>;\n /** Called when the input value changes, it returns its current value in numeric format */\n onChange?: (value: CalculatedValue<V>, event?: React.SyntheticEvent<HTMLInputElement>) => void;\n };\n type DefaultProps = {\n defaultValue: '';\n step: 1;\n };\n type State = {\n displayValue: NSInputNumber.Value;\n };\n type Handlers = {\n value: [\n null,\n (value: Value | ValueNumber | undefined, event: React.SyntheticEvent | WheelEvent) => void,\n ];\n };\n\n type Component = (<\n V extends Value | ValueNumber = Value,\n Tag extends Intergalactic.Tag = 'input',\n >(\n props: Intergalactic.InternalTypings.EfficientOmit<\n Intergalactic.InternalTypings.ComponentProps<Tag, 'input', Props<V>>,\n 'tag' | 'children'\n >\n ) => Intergalactic.InternalTypings.ComponentRenderingResults) &\n Intergalactic.InternalTypings.ComponentAdditive<'input', 'input', Props<any>>;\n }\n\n namespace Controls {\n type Props = NSInput.Addon.Props & {\n /** Always displays controls (steppers)\n * @default false\n */\n showControls?: boolean;\n };\n\n type Component = Intergalactic.Component<'div', Props>;\n }\n\n namespace Addon {\n type Component = Intergalactic.Component<'div', NSInput.Addon.Props>;\n }\n\n type Component = Intergalactic.Component<'div', Props, Ctx> & {\n Value: Value.Component;\n Controls: Controls.Component;\n Addon: Addon.Component;\n };\n}\n\n/** @deprecated It will be removed in v19. */\nexport type InputNumberValue = NSInputNumber.Value;\n/** @deprecated It will be removed in v19. */\nexport type InputNumberSize = NSInputNumber.Size;\n/** @deprecated It will be removed in v19. */\nexport type InputNumberProps = NSInputNumber.Props;\n/** @deprecated It will be removed in v19. */\nexport type InputNumberValueProps = NSInputNumber.Value.Props<string>;\n/** @deprecated It will be removed in v19. */\nexport type InputNumberControlsProps = NSInputNumber.Controls.Props;\n/** @deprecated It will be removed in v19. */\nexport type InputNumberCtx = NSInputNumber.Ctx;\n\nexport type { NSInputNumber };\n"],"mappings":"","ignoreList":[]}