haya-select 1.0.72 → 1.0.74

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.
package/build/config.d.ts CHANGED
@@ -1,8 +1,11 @@
1
1
  export default configuration;
2
2
  declare const configuration: HayaSelectConfiguration;
3
3
  declare class HayaSelectConfiguration {
4
+ _translate: (msgID: any) => any;
4
5
  getBodyPortal(): any;
6
+ getTranslate(): (msgID: any) => any;
5
7
  setBodyPortal(newBodyPortal: any): void;
6
8
  _bodyPortal: any;
9
+ setTranslate(callback: any): void;
7
10
  }
8
11
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.js"],"names":[],"mappings":";AAYA,qDAAmD;AAZnD;IACE,qBAIC;IAED,wCAEC;IADC,iBAAgC;CAEnC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.js"],"names":[],"mappings":";AAsBA,qDAAmD;AAtBnD;IACE,gCAA6B;IAE7B,qBAIC;IAED,oCAEC;IAED,wCAEC;IADC,iBAAgC;IAGlC,kCAEC;CACF"}
package/build/config.js CHANGED
@@ -1,12 +1,19 @@
1
1
  class HayaSelectConfiguration {
2
+ _translate = (msgID) => msgID;
2
3
  getBodyPortal() {
3
4
  if (!this._bodyPortal)
4
5
  throw new Error("bodyPortal wasn't set");
5
6
  return this._bodyPortal;
6
7
  }
8
+ getTranslate() {
9
+ return this._translate;
10
+ }
7
11
  setBodyPortal(newBodyPortal) {
8
12
  this._bodyPortal = newBodyPortal;
9
13
  }
14
+ setTranslate(callback) {
15
+ this._translate = callback;
16
+ }
10
17
  }
11
18
  const configuration = new HayaSelectConfiguration();
12
19
  export default configuration;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.js"],"names":[],"mappings":"AAAA,MAAM,uBAAuB;IAC3B,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;QAE/D,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAED,aAAa,CAAC,aAAa;QACzB,IAAI,CAAC,WAAW,GAAG,aAAa,CAAA;IAClC,CAAC;CACF;AAED,MAAM,aAAa,GAAG,IAAI,uBAAuB,EAAE,CAAA;AAEnD,eAAe,aAAa,CAAA","sourcesContent":["class HayaSelectConfiguration {\n getBodyPortal() {\n if (!this._bodyPortal) throw new Error(\"bodyPortal wasn't set\")\n\n return this._bodyPortal\n }\n\n setBodyPortal(newBodyPortal) {\n this._bodyPortal = newBodyPortal\n }\n}\n\nconst configuration = new HayaSelectConfiguration()\n\nexport default configuration\n"]}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.js"],"names":[],"mappings":"AAAA,MAAM,uBAAuB;IAC3B,UAAU,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAA;IAE7B,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;QAE/D,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,UAAU,CAAA;IACxB,CAAC;IAED,aAAa,CAAC,aAAa;QACzB,IAAI,CAAC,WAAW,GAAG,aAAa,CAAA;IAClC,CAAC;IAED,YAAY,CAAC,QAAQ;QACnB,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAA;IAC5B,CAAC;CACF;AAED,MAAM,aAAa,GAAG,IAAI,uBAAuB,EAAE,CAAA;AAEnD,eAAe,aAAa,CAAA","sourcesContent":["class HayaSelectConfiguration {\n _translate = (msgID) => msgID\n\n getBodyPortal() {\n if (!this._bodyPortal) throw new Error(\"bodyPortal wasn't set\")\n\n return this._bodyPortal\n }\n\n getTranslate() {\n return this._translate\n }\n\n setBodyPortal(newBodyPortal) {\n this._bodyPortal = newBodyPortal\n }\n\n setTranslate(callback) {\n this._translate = callback\n }\n}\n\nconst configuration = new HayaSelectConfiguration()\n\nexport default configuration\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/select/index.jsx"],"names":[],"mappings":";;kBAG6C,OAAO"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/select/index.jsx"],"names":[],"mappings":";;kBAI6C,OAAO"}
@@ -1,6 +1,7 @@
1
1
  import { anythingDifferent } from "set-state-compare/src/diff-utils";
2
+ import config from "../config.js";
2
3
  import { dig, digg } from "diggerize";
3
- import { Platform, Pressable, Text, TextInput, View } from "react-native";
4
+ import { Dimensions, Platform, Pressable, Text, TextInput, View } from "react-native";
4
5
  import React, { memo, useEffect, useRef } from "react";
5
6
  import { shapeComponent, ShapeComponent } from "set-state-compare/src/shape-component.js";
6
7
  import debounce from "debounce";
@@ -14,7 +15,6 @@ import propTypesExact from "prop-types-exact";
14
15
  import RenderHtml from "react-native-render-html";
15
16
  import { Portal } from "conjointment";
16
17
  import useEventListener from "@kaspernj/api-maker/build/use-event-listener";
17
- import useI18n from "i18n-on-steroids/src/use-i18n.mjs";
18
18
  const nameForComponentWithMultiple = (component) => {
19
19
  let name = nameForComponent(component);
20
20
  const currentOptions = component.getCurrentOptions();
@@ -23,12 +23,21 @@ const nameForComponentWithMultiple = (component) => {
23
23
  }
24
24
  return name;
25
25
  };
26
+ const t = (msgID) => {
27
+ if (msgID.startsWith(".")) {
28
+ return config.getTranslate()(`haya_select${msgID}`);
29
+ }
30
+ else {
31
+ return config.getTranslate()(msgID);
32
+ }
33
+ };
26
34
  export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
27
35
  static defaultProps = {
28
36
  multiple: false,
29
37
  onBlur: null,
30
38
  onFocus: null,
31
39
  optionsAbsolute: true,
40
+ optionsPortal: true,
32
41
  optionsWidth: null,
33
42
  search: false,
34
43
  transparent: false
@@ -51,6 +60,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
51
60
  onOptionsClosed: PropTypes.func,
52
61
  options: PropTypes.oneOfType([PropTypes.array, PropTypes.func]).isRequired,
53
62
  optionsAbsolute: PropTypes.bool.isRequired,
63
+ optionsPortal: PropTypes.bool.isRequired,
54
64
  optionsWidth: PropTypes.number,
55
65
  placeholder: PropTypes.node,
56
66
  search: PropTypes.bool.isRequired,
@@ -65,8 +75,9 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
65
75
  values: PropTypes.array
66
76
  });
67
77
  callOptionsPositionAboveIfOutsideScreen = false;
78
+ windowWidth = Dimensions.get("window").width;
79
+ windowHeight = Dimensions.get("window").height;
68
80
  setup() {
69
- const { t } = useI18n({ namespace: "haya_select" });
70
81
  if (this.props.values) {
71
82
  for (const value of this.props.values) {
72
83
  if (typeof value == "undefined") {
@@ -78,8 +89,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
78
89
  endOfSelectRef: useRef(),
79
90
  optionsContainerRef: useRef(),
80
91
  searchTextInputRef: useRef(),
81
- selectContainerRef: useRef(),
82
- t
92
+ selectContainerRef: useRef()
83
93
  });
84
94
  this.useStates({
85
95
  currentOptions: () => this.defaultCurrentOptions(),
@@ -93,11 +103,12 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
93
103
  optionsTop: undefined,
94
104
  optionsVisibility: undefined,
95
105
  optionsWidth: undefined,
96
- scrollLeft: document.documentElement.scrollLeft,
97
- scrollTop: document.documentElement.scrollTop,
106
+ scrollLeft: Platform.OS == "web" ? document.documentElement.scrollLeft : null,
107
+ scrollTop: Platform.OS == "web" ? document.documentElement.scrollTop : null,
98
108
  searchText: "",
99
109
  toggled: () => this.defaultToggled()
100
110
  });
111
+ useEventListener(Dimensions, "change", this.tt.onDimensionsChange);
101
112
  if (Platform.OS == "web") {
102
113
  useEventListener(window, "click", this.tt.onWindowClicked);
103
114
  useEventListener(window, "resize", this.tt.onAnythingResizedDebounced);
@@ -225,18 +236,18 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
225
236
  delete selectContainerStyleActual.borderRadius;
226
237
  }
227
238
  }
228
- return (React.createElement(View, { dataSet: {
239
+ return (React.createElement(View, { dataSet: this.cache("rootViewDataSet", {
229
240
  class: className,
230
241
  component: "haya-select",
231
242
  id,
232
243
  opened,
233
244
  optionsPlacement,
234
245
  toggles: Boolean(toggleOptions)
235
- }, style: this.stylingFor("main") },
246
+ }, [className, id, opened, optionsPlacement, Boolean(toggleOptions)]), style: this.stylingFor("main") },
236
247
  React.createElement(Pressable, { dataSet: this.selectContainerDataSet ||= { class: "select-container" }, onLayout: this.tt.onSelectContainerLayout, onPress: this.tt.onSelectClicked, ref: this.tt.selectContainerRef, style: selectContainerStyleActual },
237
248
  React.createElement(View, { dataSet: this.currentSelectedDataSet ||= { class: "current-selected" }, style: this.stylingFor("currentSelected", this.currentSelectedStyle ||= { width: "calc(100% - 25px)", flexWrap: "wrap", overflow: "hidden" }) },
238
249
  opened &&
239
- React.createElement(TextInput, { dataSet: this.searchTextInputDataSet ||= { class: "search-text-input" }, onChange: this.tt.onSearchTextInputChangedDebounced, onChangeText: this.tt.onChangeSearchText, placeholder: this.t(".search_dot_dot_dot"), ref: this.tt.searchTextInputRef, style: this.stylingFor("searchTextInput", this.searchTextInputStyle ||= {
250
+ React.createElement(TextInput, { dataSet: this.searchTextInputDataSet ||= { class: "search-text-input" }, onChange: this.tt.onSearchTextInputChangedDebounced, onChangeText: this.tt.onChangeSearchText, placeholder: t(".search_dot_dot_dot"), ref: this.tt.searchTextInputRef, style: this.stylingFor("searchTextInput", this.searchTextInputStyle ||= {
240
251
  width: "100%",
241
252
  border: 0,
242
253
  outline: "none",
@@ -245,7 +256,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
245
256
  !opened &&
246
257
  React.createElement(React.Fragment, null,
247
258
  currentOptions.length == 0 &&
248
- React.createElement(Text, { numberOfLines: 1, style: this.stylingFor("nothingSelected", this.nothingSelectedStyle ||= { color: "grey" }) }, placeholder || this.t(".nothing_selected")),
259
+ React.createElement(Text, { numberOfLines: 1, style: this.stylingFor("nothingSelected", this.nothingSelectedStyle ||= { color: "grey" }) }, placeholder || t(".nothing_selected")),
249
260
  currentOptions.length == 0 && Platform.OS == "web" &&
250
261
  React.createElement("input", { id: idForComponent(this), name: nameForComponentWithMultiple(this), type: "hidden", value: "" }),
251
262
  currentOptions.map((currentOption) => React.createElement(View, { dataSet: this.currentOptionDataSet ||= { class: "current-option" }, key: currentOption.key || `current-value-${currentOption.value}`, style: this.stylingFor("currentOption", { marginRight: 6 }) },
@@ -261,12 +272,15 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
261
272
  alignItems: "center",
262
273
  justifyContent: "center",
263
274
  height: "100%",
264
- marginLeft: "auto"
275
+ marginLeft: "auto",
276
+ marginRight: 8
265
277
  }) },
266
278
  React.createElement(FontAwesomeIcon, { name: opened ? "chevron-up" : "chevron-down", style: this.stylingFor("chevron", this.chevronStyle ||= { fontSize: 12 }) }))),
267
279
  React.createElement(View, { dataSet: this.endOfSelectDataSet ||= { class: "end-of-select" }, onLayout: this.tt.onEndOfSelectLayout, ref: endOfSelectRef }),
268
- opened &&
269
- React.createElement(Portal, null, this.optionsContainer())));
280
+ opened && this.p.optionsPortal &&
281
+ React.createElement(Portal, null, this.optionsContainer()),
282
+ opened && !this.p.optionsPortal &&
283
+ React.createElement(View, null, this.optionsContainer())));
270
284
  }
271
285
  defaultValues() {
272
286
  const { attribute, defaultValue, defaultValues, defaultValuesFromOptions, model } = this.props;
@@ -318,6 +332,10 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
318
332
  const loadedOptions = options.filter(({ text }) => !lowerSearchValue || text?.toLowerCase()?.includes(lowerSearchValue));
319
333
  this.setState({ loadedOptions });
320
334
  }
335
+ onDimensionsChange = ({ window }) => {
336
+ this.windowWidth = window.width;
337
+ this.windowHeight = window.height;
338
+ };
321
339
  onSelectContainerLayout = (e) => this.setState({ selectContainerLayout: Object.assign({}, digg(e, "nativeEvent", "layout")) });
322
340
  onEndOfSelectLayout = (e) => this.setState({ endOfSelectLayout: Object.assign({}, digg(e, "nativeEvent", "layout")) });
323
341
  onOptionsContainerLayout = (e) => this.setState({ optionsContainerLayout: Object.assign({}, digg(e, "nativeEvent", "layout")) });
@@ -372,10 +390,11 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
372
390
  this.setOptionsPositionBelow();
373
391
  }
374
392
  setOptionsPositionAboveIfOutsideScreen() {
393
+ const { windowHeight } = this.tt;
375
394
  const { optionsContainerLayout } = this.s;
376
395
  const optionsTop = this.s.endOfSelectLayout.top;
377
396
  const optionsTotalBottomPosition = optionsContainerLayout.height + optionsTop;
378
- const windowHeightWithScroll = document.body.clientHeight + this.s.scrollTop;
397
+ const windowHeightWithScroll = windowHeight + this.s.scrollTop;
379
398
  if (windowHeightWithScroll < optionsTotalBottomPosition) {
380
399
  this.setOptionsPositionAbove();
381
400
  }
@@ -409,8 +428,8 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
409
428
  onAnythingScrolled = () => {
410
429
  if (this.s.opened) {
411
430
  this.setState({
412
- scrollLeft: document.documentElement.scrollLeft,
413
- scrollTop: document.documentElement.scrollTop
431
+ scrollLeft: Platform.OS == "web" ? document.documentElement.scrollLeft : null,
432
+ scrollTop: Platform.OS == "web" ? document.documentElement.scrollTop : null
414
433
  });
415
434
  this.setOptionsPosition();
416
435
  }
@@ -425,8 +444,6 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
425
444
  }
426
445
  };
427
446
  optionsContainer() {
428
- const { optionsContainerRef } = this.tt;
429
- const { optionsAbsolute } = this.p;
430
447
  const { selectContainerLayout, loadedOptions, endOfSelectLayout, optionsContainerLayout, optionsPlacement, optionsVisibility } = this.s;
431
448
  let left, top;
432
449
  let style = {
@@ -440,7 +457,11 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
440
457
  maxHeight: 300,
441
458
  overflowY: "auto"
442
459
  };
443
- if (!optionsAbsolute) {
460
+ if (!this.p.optionsPortal) {
461
+ style.top = 0;
462
+ style.left = 0;
463
+ }
464
+ else if (!this.p.optionsAbsolute) {
444
465
  style.left = 0;
445
466
  style.bottom = 0;
446
467
  }
@@ -477,14 +498,14 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
477
498
  }
478
499
  style = this.stylingFor("optionsContainer", style);
479
500
  const id = idForComponent(this);
480
- return (React.createElement(View, { dataSet: this.cache("optionsContainerDataSet", { class: "options-container", id }, [id]), onLayout: this.tt.onOptionsContainerLayout, ref: optionsContainerRef, style: style },
501
+ return (React.createElement(View, { dataSet: this.cache("optionsContainerDataSet", { class: "options-container", id, role: "dialog" }, [id]), onLayout: this.tt.onOptionsContainerLayout, ref: this.tt.optionsContainerRef, style: style },
481
502
  loadedOptions?.map((loadedOption) => this.hayaSelectOption({
482
503
  key: loadedOption.key || `loaded-option-${loadedOption.value}`,
483
504
  loadedOption
484
505
  })),
485
506
  loadedOptions?.length === 0 &&
486
507
  React.createElement(View, { dataSet: this.noOptionsContainerDataSet ||= { class: "no-options-container" } },
487
- React.createElement(Text, null, this.t(".no_options_found")))));
508
+ React.createElement(Text, null, t(".no_options_found")))));
488
509
  }
489
510
  onOptionClicked = (event, loadedOption) => {
490
511
  event.preventDefault();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/select/index.jsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAC,MAAM,kCAAkC,CAAA;AAClE,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,MAAM,WAAW,CAAA;AACnC,OAAO,EAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAC,MAAM,cAAc,CAAA;AACvE,OAAO,KAAK,EAAE,EAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAC,MAAM,OAAO,CAAA;AACpD,OAAO,EAAC,cAAc,EAAE,cAAc,EAAC,MAAM,0CAA0C,CAAA;AACvF,OAAO,QAAQ,MAAM,UAAU,CAAA;AAC/B,OAAO,eAAe,MAAM,uCAAuC,CAAA;AACnE,OAAO,cAAc,MAAM,mDAAmD,CAAA;AAC9E,OAAO,gBAAgB,MAAM,qDAAqD,CAAA;AAClF,OAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,OAAO,WAAW,MAAM,gBAAgB,CAAA;AACxC,OAAO,SAAS,MAAM,YAAY,CAAA;AAClC,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAC7C,OAAO,UAAU,MAAM,0BAA0B,CAAA;AACjD,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAA;AACnC,OAAO,gBAAgB,MAAM,8CAA8C,CAAA;AAC3E,OAAO,OAAO,MAAM,mCAAmC,CAAA;AAEvD,MAAM,4BAA4B,GAAG,CAAC,SAAS,EAAE,EAAE;IACjD,IAAI,IAAI,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAA;IAEtC,MAAM,cAAc,GAAG,SAAS,CAAC,iBAAiB,EAAE,CAAA;IAEpD,IAAI,SAAS,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClE,IAAI,IAAI,IAAI,CAAA;IACd,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,eAAe,IAAI,CAAC,cAAc,CAAC,MAAM,UAAW,SAAQ,cAAc;IACxE,MAAM,CAAC,YAAY,GAAG;QACpB,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,IAAI;QACb,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE,IAAI;QAClB,MAAM,EAAE,KAAK;QACb,WAAW,EAAE,KAAK;KACnB,CAAA;IAED,MAAM,CAAC,SAAS,GAAG,cAAc,CAAC;QAChC,SAAS,EAAE,SAAS,CAAC,MAAM;QAC3B,SAAS,EAAE,SAAS,CAAC,MAAM;QAC3B,cAAc,EAAE,SAAS,CAAC,MAAM;QAChC,YAAY,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACvE,aAAa,EAAE,SAAS,CAAC,KAAK;QAC9B,wBAAwB,EAAE,SAAS,CAAC,KAAK;QACzC,EAAE,EAAE,SAAS,CAAC,IAAI;QAClB,KAAK,EAAE,SAAS,CAAC,MAAM;QACvB,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;QACnC,IAAI,EAAE,SAAS,CAAC,MAAM;QACtB,MAAM,EAAE,SAAS,CAAC,IAAI;QACtB,QAAQ,EAAE,SAAS,CAAC,IAAI;QACxB,aAAa,EAAE,SAAS,CAAC,IAAI;QAC7B,OAAO,EAAE,SAAS,CAAC,IAAI;QACvB,eAAe,EAAE,SAAS,CAAC,IAAI;QAC/B,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU;QAC1E,eAAe,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;QAC1C,YAAY,EAAE,SAAS,CAAC,MAAM;QAC9B,WAAW,EAAE,SAAS,CAAC,IAAI;QAC3B,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;QACjC,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,OAAO,EAAE,SAAS,CAAC,MAAM;QACzB,aAAa,EAAE,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC;YAC/C,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;YACjC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;YAClC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;SACnC,CAAC,CAAC;QACH,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;QACtC,MAAM,EAAE,SAAS,CAAC,KAAK;KACxB,CAAC,CAAA;IAEF,uCAAuC,GAAG,KAAK,CAAA;IAE/C,KAAK;QACH,MAAM,EAAC,CAAC,EAAC,GAAG,OAAO,CAAC,EAAC,SAAS,EAAE,aAAa,EAAC,CAAC,CAAA;QAE/C,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACtC,IAAI,OAAO,KAAK,IAAI,WAAW,EAAE,CAAC;oBAChC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;gBACzD,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,WAAW,CAAC;YACf,cAAc,EAAE,MAAM,EAAE;YACxB,mBAAmB,EAAE,MAAM,EAAE;YAC7B,kBAAkB,EAAE,MAAM,EAAE;YAC5B,kBAAkB,EAAE,MAAM,EAAE;YAC5B,CAAC;SACF,CAAC,CAAA;QACF,IAAI,CAAC,SAAS,CAAC;YACb,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE;YAClD,qBAAqB,EAAE,IAAI;YAC3B,iBAAiB,EAAE,IAAI;YACvB,MAAM,EAAE,IAAI;YACZ,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAChD,MAAM,EAAE,KAAK;YACb,sBAAsB,EAAE,IAAI;YAC5B,gBAAgB,EAAE,SAAS;YAC3B,UAAU,EAAE,SAAS;YACrB,iBAAiB,EAAE,SAAS;YAC5B,YAAY,EAAE,SAAS;YACvB,UAAU,EAAE,QAAQ,CAAC,eAAe,CAAC,UAAU;YAC/C,SAAS,EAAE,QAAQ,CAAC,eAAe,CAAC,SAAS;YAC7C,UAAU,EAAE,EAAE;YACd,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE;SACrC,CAAC,CAAA;QAEF,IAAI,QAAQ,CAAC,EAAE,IAAI,KAAK,EAAE,CAAC;YACzB,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,CAAA;YAC1D,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAA;YACtE,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAA;QACzE,CAAC;QAED,SAAS,CAAC,GAAG,EAAE;YACb,IAAI,IAAI,CAAC,EAAE,CAAC,uCAAuC,IAAI,IAAI,CAAC,CAAC,CAAC,sBAAsB,EAAE,CAAC;gBACrF,IAAI,CAAC,uCAAuC,GAAG,KAAK,CAAA;gBACpD,IAAI,CAAC,sCAAsC,EAAE,CAAA;YAC/C,CAAC;QACH,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,uCAAuC,EAAE,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAA;QAEpF,SAAS,CAAC,GAAG,EAAE;YACb,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;YAE3F,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,iBAAiB,CAAC,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,UAAU,EAAE,CAAC;gBAC3H,IAAI,CAAC,yBAAyB,EAAE,CAAA;YAClC,CAAC;QACH,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;IACzB,CAAC;IAED,qBAAqB;QACnB,MAAM,EAAC,YAAY,EAAE,aAAa,EAAE,MAAM,EAAC,GAAG,IAAI,CAAC,KAAK,CAAA;QACxD,MAAM,EAAC,OAAO,EAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QAExB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,OAAO,EAAE,CAAA;QAEtC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,EAAC,KAAK,EAAC,EAAE,EAAE,CAChC,CAAC,YAAY,IAAI,KAAK,IAAI,YAAY,CAAC;YACrC,CAAC,aAAa,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChD,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CACrC,CAAA;IACH,CAAC;IAED,oBAAoB;QAClB,MAAM,EAAC,OAAO,EAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QAExB,IAAI,OAAO,OAAO,IAAI,UAAU,EAAE,CAAC;YACjC,OAAO,SAAS,CAAA;QAClB,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,OAAO,OAAO,CAAA;QAChB,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,OAAO,EAAE,CAAC,CAAA;IAC/D,CAAC;IAED,cAAc,GAAG,GAAG,EAAE,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,CAAA;IACnG,UAAU,GAAG,GAAG,EAAE,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAA;IAC9E,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IAC9H,iBAAiB,GAAG,GAAG,EAAE;QACvB,IAAI,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,WAAW,EAAE,CAAC;YACtE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC3D,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,CAAA;YAC7F,CAAC;iBAAM,IAAI,IAAI,CAAC,CAAC,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACrD,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;oBACjC,IAAI,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,CAAA;oBAE9E,IAAI,CAAC,WAAW,EAAE,CAAC;wBACjB,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,CAAA;wBAE3E,IAAI,CAAC,WAAW,EAAE,CAAC;4BACjB,OAAO,CAAC,KAAK,CACX,yBAAyB,KAAK,2CAA2C,EACzE,EAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,CAAC,aAAa,EAAE,mBAAmB,EAAE,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAC,CACzH,CAAA;wBACH,CAAC;oBACH,CAAC;oBAED,OAAO,WAAW,CAAA;gBACpB,CAAC,CAAC,CAAA;YACJ,CAAC;iBAAM,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACxE,mCAAmC;YACrC,CAAC;iBAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC7B,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAC,KAAK,EAAC,CAAC,CAAC,CAAA;YAChD,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,CAAC,CAAC,cAAc,CAAA;IAC9B,CAAC,CAAA;IAED,sBAAsB;QACpB,IAAI,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAA;QACtB,CAAC;QAED,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC/D,CAAC;IAED,iBAAiB;QACf,MAAM,EAAC,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAC,GAAG,IAAI,CAAC,KAAK,CAAA;QAErG,IAAI,CAAC,CAAC,YAAY,IAAI,aAAa,IAAI,wBAAwB,CAAC,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,IAAI,OAAO,OAAO,IAAI,UAAU,EAAE,CAAC;YAC1H,IAAI,CAAC,oCAAoC,EAAE,CAAA;QAC7C,CAAC;IACH,CAAC;IAED,kBAAkB;QAChB,MAAM,QAAQ,GAAG,EAAE,CAAA;QAEnB,IAAI,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAA;YAEjC,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC;gBACtD,QAAQ,CAAC,OAAO,GAAG,UAAU,CAAA;YAC/B,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACzB,CAAC;IACH,CAAC;IAED,MAAM;QACJ,MAAM,EAAC,cAAc,EAAC,GAAG,IAAI,CAAC,EAAE,CAAA;QAChC,MAAM,EAAC,WAAW,EAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QAC5B,MAAM,EAAC,SAAS,EAAE,WAAW,EAAE,aAAa,EAAC,GAAG,IAAI,CAAC,KAAK,CAAA;QAC1D,MAAM,EAAC,MAAM,EAAE,gBAAgB,EAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QACzC,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAA;QAC/C,MAAM,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;QAE/B,MAAM,0BAA0B,GAAG,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE;YACpE,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,QAAQ;YACpB,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;YACjD,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB;YAClD,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACzC,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,CAAC;YACb,aAAa,EAAE,CAAC;YAChB,WAAW,EAAE,CAAC;SACf,CAAC,CAAA;QAEF,IAAI,MAAM,EAAE,CAAC;YACX,8FAA8F;YAC9F,0BAA0B,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAA;YAEjD,IAAI,gBAAgB,IAAI,OAAO,EAAE,CAAC;gBAChC,0BAA0B,CAAC,mBAAmB,GAAG,CAAC,CAAA;gBAClD,0BAA0B,CAAC,oBAAoB,GAAG,CAAC,CAAA;gBACnD,0BAA0B,CAAC,uBAAuB,GAAG,0BAA0B,CAAC,YAAY,CAAA;gBAC5F,0BAA0B,CAAC,sBAAsB,GAAG,0BAA0B,CAAC,YAAY,CAAA;gBAE3F,OAAO,0BAA0B,CAAC,YAAY,CAAA;YAChD,CAAC;iBAAM,IAAI,gBAAgB,IAAI,OAAO,EAAE,CAAC;gBACvC,0BAA0B,CAAC,mBAAmB,GAAG,0BAA0B,CAAC,YAAY,CAAA;gBACxF,0BAA0B,CAAC,oBAAoB,GAAG,0BAA0B,CAAC,YAAY,CAAA;gBACzF,0BAA0B,CAAC,uBAAuB,GAAG,CAAC,CAAA;gBACtD,0BAA0B,CAAC,sBAAsB,GAAG,CAAC,CAAA;gBAErD,OAAO,0BAA0B,CAAC,YAAY,CAAA;YAChD,CAAC;QACH,CAAC;QAED,OAAO,CACL,oBAAC,IAAI,IACH,OAAO,EAAE;gBACP,KAAK,EAAE,SAAS;gBAChB,SAAS,EAAE,aAAa;gBACxB,EAAE;gBACF,MAAM;gBACN,gBAAgB;gBAChB,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC;aAChC,EACD,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAE9B,oBAAC,SAAS,IACR,OAAO,EAAE,IAAI,CAAC,sBAAsB,KAAK,EAAC,KAAK,EAAE,kBAAkB,EAAC,EACpE,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,uBAAuB,EACzC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,eAAe,EAChC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAC/B,KAAK,EAAE,0BAA0B;gBAEjC,oBAAC,IAAI,IACH,OAAO,EAAE,IAAI,CAAC,sBAAsB,KAAK,EAAC,KAAK,EAAE,kBAAkB,EAAC,EACpE,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,IAAI,CAAC,oBAAoB,KAAK,EAAC,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAC,CAAC;oBAE1I,MAAM;wBACL,oBAAC,SAAS,IACR,OAAO,EAAE,IAAI,CAAC,sBAAsB,KAAK,EAAC,KAAK,EAAE,mBAAmB,EAAC,EACrE,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,iCAAiC,EACnD,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC,kBAAkB,EACxC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,EAC1C,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAC/B,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,IAAI,CAAC,oBAAoB,KAAK;gCACtE,KAAK,EAAE,MAAM;gCACb,MAAM,EAAE,CAAC;gCACT,OAAO,EAAE,MAAM;gCACf,OAAO,EAAE,CAAC;6BACX,CAAC,EACF,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAC5B;oBAEH,CAAC,MAAM;wBACN;4BACG,cAAc,CAAC,MAAM,IAAI,CAAC;gCACzB,oBAAC,IAAI,IAAC,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,IAAI,CAAC,oBAAoB,KAAK,EAAC,KAAK,EAAE,MAAM,EAAC,CAAC,IAC7G,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,CACtC;4BAER,cAAc,CAAC,MAAM,IAAI,CAAC,IAAI,QAAQ,CAAC,EAAE,IAAI,KAAK;gCACjD,+BACE,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,EACxB,IAAI,EAAE,4BAA4B,CAAC,IAAI,CAAC,EACxC,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,EAAE,GACR;4BAEH,cAAc,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CACpC,oBAAC,IAAI,IACH,OAAO,EAAE,IAAI,CAAC,oBAAoB,KAAK,EAAC,KAAK,EAAE,gBAAgB,EAAC,EAChE,GAAG,EAAE,aAAa,CAAC,GAAG,IAAI,iBAAiB,aAAa,CAAC,KAAK,EAAE,EAChE,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,EAAC,WAAW,EAAE,CAAC,EAAC,CAAC;gCAExD,aAAa,CAAC,IAAI,IAAI,OAAO;oCAC5B,oBAAC,IAAI,IAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,IAAI,CAAC,uBAAuB,KAAK,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;wCACvG,oBAAC,IAAI,IAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,IACnD,aAAa,CAAC,IAAI,CACd,CACF;gCAER,aAAa,CAAC,IAAI,IAAI,OAAO;oCAC5B;wCACG,QAAQ,CAAC,EAAE,IAAI,KAAK,IAAI,4BAA4B,CAAC,IAAI,CAAC;4CACzD,+BACE,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,EACxB,IAAI,EAAE,4BAA4B,CAAC,IAAI,CAAC,EACxC,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,GACnC;wCAEH,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,SAAS,CAAC,CAC5C,CAEA,CACR,CACA,CAEA;gBACP,oBAAC,IAAI,IACH,OAAO,EAAE,IAAI,CAAC,uBAAuB,KAAK,EAAC,KAAK,EAAE,mBAAmB,EAAC,EACtE,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,IAAI,CAAC,qBAAqB,KAAK;wBACxE,UAAU,EAAE,QAAQ;wBACpB,cAAc,EAAE,QAAQ;wBACxB,MAAM,EAAE,MAAM;wBACd,UAAU,EAAE,MAAM;qBACnB,CAAC;oBAEF,oBAAC,eAAe,IAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,KAAK,EAAC,QAAQ,EAAE,EAAE,EAAC,CAAC,GAAI,CACrI,CACG;YACZ,oBAAC,IAAI,IACH,OAAO,EAAE,IAAI,CAAC,kBAAkB,KAAK,EAAC,KAAK,EAAE,eAAe,EAAC,EAC7D,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,mBAAmB,EACrC,GAAG,EAAE,cAAc,GACnB;YACD,MAAM;gBACL,oBAAC,MAAM,QACJ,IAAI,CAAC,gBAAgB,EAAE,CACjB,CAEN,CACR,CAAA;IACH,CAAC;IAED,aAAa;QACX,MAAM,EAAC,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,wBAAwB,EAAE,KAAK,EAAC,GAAG,IAAI,CAAC,KAAK,CAAA;QAE5F,IAAI,wBAAwB;YAAE,OAAO,wBAAwB,CAAA;QAC7D,IAAI,YAAY;YAAE,OAAO,YAAY,CAAA;QACrC,IAAI,aAAa;YAAE,OAAO,aAAa,CAAA;QAEvC,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,CAAC,cAAc,EAAE,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC,CAAA;YAE/G,OAAO,KAAK,CAAC,SAAS,CAAC,EAAE,CAAA;QAC3B,CAAC;IACH,CAAC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YACnC,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAED,KAAK,CAAC,oCAAoC;QACxC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QAE1C,IAAI,CAAC,aAAa;YAAE,OAAM;QAE1B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YACtC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU;YAC9B,MAAM,EAAE,aAAa;SACtB,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,EAAC,CAAC,CAAA;IAC3E,CAAC;IAED,WAAW,GAAG,KAAK,IAAI,EAAE;QACvB,MAAM,EAAC,OAAO,EAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QACxB,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,CAAA;QAErC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QACxD,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,EAAC,WAAW,EAAC,CAAC,CAAA;QAElD,IAAI,CAAC,QAAQ,CAAC,EAAC,aAAa,EAAC,CAAC,CAAA;IAChC,CAAC,CAAA;IAED,gBAAgB,CAAC,EAAC,GAAG,EAAE,YAAY,EAAC;QAClC,IAAI,YAAY,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;YACjC,OAAO,oBAAC,WAAW,IAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,GAAI,CAAA;QACxD,CAAC;QAED,OAAO,CACL,oBAAC,MAAM,IACL,mBAAmB,EAAE,IAAI,CAAC,sBAAsB,EAAE,EAClD,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,EACtC,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,eAAe,EACxC,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,GACpC,CACH,CAAA;IACH,CAAC;IAED,oBAAoB,CAAC,OAAO,EAAE,WAAW;QACvC,MAAM,gBAAgB,GAAG,WAAW,EAAE,WAAW,EAAE,CAAA;QACnD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAE,CAAC,CAAC,gBAAgB,IAAI,IAAI,EAAE,WAAW,EAAE,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAA;QAEtH,IAAI,CAAC,QAAQ,CAAC,EAAC,aAAa,EAAC,CAAC,CAAA;IAChC,CAAC;IAED,uBAAuB,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAC,qBAAqB,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAA;IAC5H,mBAAmB,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAA;IACpH,wBAAwB,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAC,sBAAsB,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAA;IAE9H,eAAe,GAAG,CAAC,CAAC,EAAE,EAAE;QACtB,CAAC,CAAC,cAAc,EAAE,CAAA;QAClB,CAAC,CAAC,eAAe,EAAE,CAAA;QAEnB,MAAM,EAAC,MAAM,EAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QAEvB,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,EAAE,CAAA;QACrB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,WAAW,EAAE,CAAA;QACpB,CAAC;IACH,CAAC,CAAA;IAED,iCAAiC,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;IAEtE,YAAY;QACV,IAAI,CAAC,QAAQ,CAAC;YACZ,MAAM,EAAE,IAAI;YACZ,aAAa,EAAE,SAAS;YACxB,MAAM,EAAE,KAAK;YACb,sBAAsB,EAAE,IAAI;SAC7B,CAAC,CAAA;QAEF,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,EAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAC,CAAC,CAAA;QACjE,CAAC;QAED,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM;YAAE,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAA;IACpC,CAAC;IAED,kBAAkB,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAC,UAAU,EAAC,CAAC,CAAA;IAEhE,WAAW;QACT,IAAI,CAAC,uBAAuB,EAAE,CAAA;QAC9B,IAAI,CAAC,WAAW,EAAE,CAAA;QAClB,IAAI,CAAC,uCAAuC,GAAG,IAAI,CAAA;QACnD,IAAI,CAAC,QAAQ,CACX;YACE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM;YAC3C,MAAM,EAAE,IAAI;YACZ,UAAU,EAAE,QAAQ,CAAC,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;YAC7E,SAAS,EAAE,QAAQ,CAAC,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;YAC3E,UAAU,EAAE,EAAE;SACf,EACD,GAAG,EAAE;YACH,IAAI,CAAC,cAAc,EAAE,CAAA;QACvB,CAAC,CACF,CAAA;QAED,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO;YAAE,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;IACtC,CAAC;IAED,cAAc,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,CAAA;IAE3E,kBAAkB;QAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YACrB,OAAM,CAAC,qCAAqC;QAC9C,CAAC;QAED,IAAI,CAAC,uCAAuC,GAAG,IAAI,CAAA;QACnD,IAAI,CAAC,uBAAuB,EAAE,CAAA;IAChC,CAAC;IAED,sCAAsC;QACpC,MAAM,EAAC,sBAAsB,EAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAA;QAC/C,MAAM,0BAA0B,GAAG,sBAAsB,CAAC,MAAM,GAAG,UAAU,CAAA;QAC7E,MAAM,sBAAsB,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;QAE5E,IAAI,sBAAsB,GAAG,0BAA0B,EAAE,CAAC;YACxD,IAAI,CAAC,uBAAuB,EAAE,CAAA;QAChC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,CAAC,EAAC,iBAAiB,EAAE,SAAS,EAAC,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC;IAED,uBAAuB;QACrB,MAAM,EAAC,iBAAiB,EAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QAElC,IAAI,CAAC,QAAQ,CACX;YACE,MAAM,EAAE,IAAI;YACZ,gBAAgB,EAAE,OAAO;YACzB,iBAAiB,EAAE,SAAS;YAC5B,YAAY,EAAE,iBAAiB,CAAC,KAAK;SACtC,EACD,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAC5B,CAAA;IACH,CAAC;IAED,uBAAuB;QACrB,IAAI,CAAC,QAAQ,CACX;YACE,MAAM,EAAE,IAAI;YACZ,gBAAgB,EAAE,OAAO;YACzB,iBAAiB,EAAE,QAAQ;YAC3B,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK;SAC7C,EACD,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAC5B,CAAA;IACH,CAAC;IAED,iBAAiB,GAAG,GAAG,EAAE;QACvB,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAClB,IAAI,CAAC,kBAAkB,EAAE,CAAA;QAC3B,CAAC;IACH,CAAC,CAAA;IAED,0BAA0B,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAA;IAEpE,kBAAkB,GAAG,GAAG,EAAE;QACxB,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAClB,IAAI,CAAC,QAAQ,CAAC;gBACZ,UAAU,EAAE,QAAQ,CAAC,eAAe,CAAC,UAAU;gBAC/C,SAAS,EAAE,QAAQ,CAAC,eAAe,CAAC,SAAS;aAC9C,CAAC,CAAA;YACF,IAAI,CAAC,kBAAkB,EAAE,CAAA;QAC3B,CAAC;IACH,CAAC,CAAA;IAED,2BAA2B,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAA;IAEtE,eAAe,GAAG,CAAC,CAAC,EAAE,EAAE;QACtB,MAAM,EAAC,mBAAmB,EAAC,GAAG,IAAI,CAAC,EAAE,CAAA;QACrC,MAAM,EAAC,MAAM,EAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QAEvB,2EAA2E;QAC3E,IAAI,MAAM,IAAI,mBAAmB,CAAC,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9F,IAAI,CAAC,YAAY,EAAE,CAAA;QACrB,CAAC;IACH,CAAC,CAAA;IAED,gBAAgB;QACd,MAAM,EAAC,mBAAmB,EAAC,GAAG,IAAI,CAAC,EAAE,CAAA;QACrC,MAAM,EAAC,eAAe,EAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QAChC,MAAM,EAAC,qBAAqB,EAAE,aAAa,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,iBAAiB,EAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QACrI,IAAI,IAAI,EAAE,GAAG,CAAA;QAEb,IAAI,KAAK,GAAG;YACV,QAAQ,EAAE,UAAU;YACpB,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,KAAK;YAChB,UAAU,EAAE,iBAAiB;YAC7B,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY;YACjD,eAAe,EAAE,MAAM;YACvB,MAAM,EAAE,gBAAgB;YACxB,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,MAAM;SAClB,CAAA;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,GAAG,CAAC,CAAA;YACd,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;QAClB,CAAC;aAAM,IAAI,gBAAgB,IAAI,OAAO,EAAE,CAAC;YACvC,IAAI,QAAQ,CAAC,EAAE,IAAI,KAAK,EAAE,CAAC;gBACzB,+EAA+E;gBAC/E,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,SAAS,GAAG,CAAC,CAAA;gBAElH,0DAA0D;gBAC1D,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,UAAU,CAAA;YACnH,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAA;gBACpC,GAAG,GAAG,qBAAqB,CAAC,GAAG,CAAA;YACjC,CAAC;YAED,KAAK,CAAC,IAAI,GAAG,IAAI,CAAA;YACjB,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAA;QACrB,CAAC;aAAM,IAAI,gBAAgB,IAAI,OAAO,EAAE,CAAC;YACvC,IAAI,QAAQ,CAAC,EAAE,IAAI,KAAK,EAAE,CAAC;gBACzB,+EAA+E;gBAC/E,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAA;gBAElH,0DAA0D;gBAC1D,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,UAAU,CAAA;YACvH,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAA;gBAC7B,GAAG,GAAG,qBAAqB,CAAC,GAAG,CAAA;YACjC,CAAC;YAED,KAAK,CAAC,IAAI,GAAG,IAAI,CAAA;YACjB,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,sBAAsB,CAAC,MAAM,GAAG,CAAC,CAAA;QACrD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,8BAA8B,gBAAgB,EAAE,CAAC,CAAA;QACnE,CAAC;QAED,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAA;QAElD,MAAM,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;QAE/B,OAAO,CACL,oBAAC,IAAI,IACH,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAC,KAAK,EAAE,mBAAmB,EAAE,EAAE,EAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACtF,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,wBAAwB,EAC1C,GAAG,EAAE,mBAAmB,EACxB,KAAK,EAAE,KAAK;YAEX,aAAa,EAAE,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CACnC,IAAI,CAAC,gBAAgB,CAAC;gBACpB,GAAG,EAAE,YAAY,CAAC,GAAG,IAAI,iBAAiB,YAAY,CAAC,KAAK,EAAE;gBAC9D,YAAY;aACb,CAAC,CACH;YACA,aAAa,EAAE,MAAM,KAAK,CAAC;gBAC1B,oBAAC,IAAI,IAAC,OAAO,EAAE,IAAI,CAAC,yBAAyB,KAAK,EAAC,KAAK,EAAE,sBAAsB,EAAC;oBAC/E,oBAAC,IAAI,QAAE,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAQ,CACrC,CAEJ,CACR,CAAA;IACH,CAAC;IAED,eAAe,GAAG,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE;QACxC,KAAK,CAAC,cAAc,EAAE,CAAA;QACtB,KAAK,CAAC,eAAe,EAAE,CAAA;QAEvB,MAAM,EAAC,QAAQ,EAAE,aAAa,EAAC,GAAG,IAAI,CAAC,KAAK,CAAA;QAC5C,MAAM,EAAC,QAAQ,EAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QACzB,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAA;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;QACjC,MAAM,QAAQ,GAAG,EAAE,CAAA;QACnB,MAAM,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,CAAA;QACxG,MAAM,UAAU,GAAG,EAAC,GAAG,OAAO,EAAC,CAAA;QAC/B,IAAI,iBAAiB,CAAA;QAErB,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;gBACjD,MAAM,YAAY,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,aAAa,CAAC,CAAA;gBAEzF,IAAI,YAAY,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;oBAC/C,8CAA8C;oBAC9C,OAAO,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;oBAErC,iBAAiB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,CAAA;gBACzG,CAAC;qBAAM,CAAC;oBACN,uCAAuC;oBACvC,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,YAAY,GAAG,CAAC,EAAE,OAAO,CAAC,CAAA;gBACjF,CAAC;gBAED,QAAQ,CAAC,OAAO,GAAG,UAAU,CAAA;YAC/B,CAAC;iBAAM,CAAC;gBACN,8BAA8B;gBAC9B,iBAAiB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,CAAA;YACzG,CAAC;QACH,CAAC;aAAM,CAAC;YACN,sDAAsD;YACtD,IAAI,YAAY,CAAC,QAAQ;gBAAE,OAAM;YAEjC,IAAI,aAAa,EAAE,CAAC;gBAClB,mBAAmB;gBACnB,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;gBACvD,QAAQ,CAAC,OAAO,GAAG,UAAU,CAAA;YAC/B,CAAC;YAED,IAAI,QAAQ,IAAI,aAAa,EAAE,CAAC;gBAC9B,iBAAiB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAA;YAC3D,CAAC;iBAAM,CAAC;gBACN,iBAAiB,GAAG,CAAC,YAAY,CAAC,CAAA;YACpC,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9D,6FAA6F;QAC/F,CAAC;aAAM,IAAI,iBAAiB,EAAE,CAAC;YAC7B,QAAQ,CAAC,cAAc,GAAG,iBAAiB,CAAA;QAC7C,CAAC;QAED,MAAM,OAAO,GAAG,iBAAiB,IAAI,cAAc,CAAA;QAEnD,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC;gBACP,KAAK;gBACL,OAAO;gBACP,OAAO,EAAE,UAAU;aACpB,CAAC,CAAA;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YAC7B,IAAI,WAAW,CAAA;YAEf,IAAI,QAAQ,EAAE,CAAC;gBACb,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACrD,CAAC;iBAAM,CAAC;gBACN,WAAW,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;YACxC,CAAC;YAED,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAA;QACnC,CAAC;QAED,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,YAAY,EAAE,CAAA;QAClC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IACzB,CAAC,CAAA;IAED,UAAU,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE;QAChC,IAAI,aAAa,GAAG,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAA;QAE7D,IAAI,OAAO,aAAa,IAAI,UAAU;YAAE,aAAa,GAAG,aAAa,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAC,CAAC,CAAA;QAEjG,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,CAAA;QAC5C,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAED,aAAa,CAAC,MAAM;QAClB,MAAM,EAAC,aAAa,EAAC,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAA;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;QAEjC,IAAI,aAAa,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,EAAE,CAAC;YAC/C,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAC1C,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,YAAY,CAAC,CAAA;YAEpF,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,4CAA4C,YAAY,EAAE,CAAC,CAAA;YAC7E,CAAC;YAED,OAAO,aAAa,CAAC,IAAI,CAAA;QAC3B,CAAC;IACH,CAAC;IAED,aAAa,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;QAC/B,MAAM,EAAC,aAAa,EAAC,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAA;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QACvC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACzC,MAAM,YAAY,GAAG,aAAa,EAAE,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,IAAI,WAAW,CAAC,CAAA;QAC/F,IAAI,KAAK,CAAA;QAET,IAAI,IAAI,IAAI,SAAS,EAAE,CAAC;YACtB,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,+BAA+B,EAAE,EAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAC,CAAC,CAAA;QAC3F,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,wBAAwB,EAAE,EAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAC,CAAC,CAAA;QACpF,CAAC;QAED,OAAO,CACL,oBAAC,IAAI,IACH,OAAO,EAAE;gBACP,KAAK,EAAE,qBAAqB;gBAC5B,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,UAAU,EAAE,YAAY,EAAE,IAAI;gBAC9B,WAAW,EAAE,YAAY,EAAE,KAAK;gBAChC,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,EACD,KAAK,EAAE,IAAI,CAAC,uBAAuB,KAAK,EAAC,aAAa,EAAE,KAAK,EAAC;YAE7D,aAAa,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC;gBAC1C,oBAAC,IAAI,IACH,OAAO,EAAE,IAAI,CAAC,4BAA4B,KAAK,EAAC,KAAK,EAAE,yBAAyB,EAAC,EACjF,KAAK,EAAE,IAAI,CAAC,0BAA0B,KAAK,EAAC,KAAK,EAAE,EAAE,EAAC,GACtD;YAEH,aAAa,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC;gBACzC,oBAAC,IAAI,IAAC,KAAK,EAAE,IAAI,CAAC,wBAAwB,KAAK,EAAC,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAC;oBACxG,oBAAC,eAAe,IACd,OAAO,EAAE,IAAI,CAAC,iBAAiB,KAAK,EAAC,KAAK,EAAE,aAAa,EAAC,EAC1D,IAAI,EAAE,IAAI,GACV,CACG;YAER,CAAC,GAAG,EAAE;gBACL,IAAI,IAAI,IAAI,SAAS,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;oBAC/C,OAAO,MAAM,CAAC,cAAc,EAAE,CAAA;gBAChC,CAAC;qBAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBAC1B,OAAO,MAAM,CAAC,OAAO,EAAE,CAAA;gBACzB,CAAC;qBAAM,IAAI,MAAM,IAAI,MAAM,IAAI,QAAQ,CAAC,EAAE,IAAI,KAAK,EAAE,CAAC;oBACpD,OAAO,oBAAC,UAAU,IAAC,MAAM,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAC,GAAI,CAAA;gBAC7D,CAAC;qBAAM,IAAI,MAAM,IAAI,MAAM,IAAI,QAAQ,CAAC,EAAE,IAAI,KAAK,EAAE,CAAC;oBACpD,OAAO,6BAAK,uBAAuB,EAAE,EAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAC,GAAI,CAAA;gBACzE,CAAC;qBAAM,CAAC;oBACN,OAAO,CACL,oBAAC,IAAI,IACH,OAAO,EAAE,IAAI,CAAC,6BAA6B,KAAK,EAAC,KAAK,EAAE,0BAA0B,EAAC,EACnF,KAAK,EAAE,KAAK,IAEX,MAAM,CAAC,IAAI,CACP,CACR,CAAA;gBACH,CAAC;YACH,CAAC,CAAC,EAAE,CACC,CACR,CAAA;IACH,CAAC,CAAA;IAED,KAAK,CAAC,yBAAyB;QAC7B,MAAM,EAAC,OAAO,EAAE,MAAM,EAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QAChC,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,EAAC,MAAM,EAAC,CAAC,CAAA;QAC9C,MAAM,aAAa,GAAG,cAAc,EAAE,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QACjF,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QAEtF,IAAI,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,QAAQ,CAAC,EAAC,cAAc,EAAC,CAAC,CAAA;QACjC,CAAC;IACH,CAAC;CACF,CAAC,CAAC,CAAA","sourcesContent":["import {anythingDifferent} from \"set-state-compare/src/diff-utils\"\nimport {dig, digg} from \"diggerize\"\nimport {Platform, Pressable, Text, TextInput, View} from \"react-native\"\nimport React, {memo, useEffect, useRef} from \"react\"\nimport {shapeComponent, ShapeComponent} from \"set-state-compare/src/shape-component.js\"\nimport debounce from \"debounce\"\nimport FontAwesomeIcon from \"react-native-vector-icons/FontAwesome\"\nimport idForComponent from \"@kaspernj/api-maker/build/inputs/id-for-component\"\nimport nameForComponent from \"@kaspernj/api-maker/build/inputs/name-for-component\"\nimport Option from \"./option\"\nimport OptionGroup from \"./option-group\"\nimport PropTypes from \"prop-types\"\nimport propTypesExact from \"prop-types-exact\"\nimport RenderHtml from \"react-native-render-html\"\nimport {Portal} from \"conjointment\"\nimport useEventListener from \"@kaspernj/api-maker/build/use-event-listener\"\nimport useI18n from \"i18n-on-steroids/src/use-i18n.mjs\"\n\nconst nameForComponentWithMultiple = (component) => {\n let name = nameForComponent(component)\n\n const currentOptions = component.getCurrentOptions()\n\n if (component.props.multiple && name && currentOptions.length > 0) {\n name += \"[]\"\n }\n\n return name\n}\n\nexport default memo(shapeComponent(class HayaSelect extends ShapeComponent {\n static defaultProps = {\n multiple: false,\n onBlur: null,\n onFocus: null,\n optionsAbsolute: true,\n optionsWidth: null,\n search: false,\n transparent: false\n }\n\n static propTypes = propTypesExact({\n attribute: PropTypes.string,\n className: PropTypes.string,\n defaultToggled: PropTypes.object,\n defaultValue: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n defaultValues: PropTypes.array,\n defaultValuesFromOptions: PropTypes.array,\n id: PropTypes.node,\n model: PropTypes.object,\n multiple: PropTypes.bool.isRequired,\n name: PropTypes.string,\n onBlur: PropTypes.func,\n onChange: PropTypes.func,\n onChangeValue: PropTypes.func,\n onFocus: PropTypes.func,\n onOptionsClosed: PropTypes.func,\n options: PropTypes.oneOfType([PropTypes.array, PropTypes.func]).isRequired,\n optionsAbsolute: PropTypes.bool.isRequired,\n optionsWidth: PropTypes.number,\n placeholder: PropTypes.node,\n search: PropTypes.bool.isRequired,\n styles: PropTypes.object,\n toggled: PropTypes.object,\n toggleOptions: PropTypes.arrayOf(PropTypes.shape({\n icon: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired\n })),\n transparent: PropTypes.bool.isRequired,\n values: PropTypes.array\n })\n\n callOptionsPositionAboveIfOutsideScreen = false\n\n setup() {\n const {t} = useI18n({namespace: \"haya_select\"})\n\n if (this.props.values) {\n for (const value of this.props.values) {\n if (typeof value == \"undefined\") {\n throw new Error(\"HayaSelect: Undefined given as value\")\n }\n }\n }\n\n this.setInstance({\n endOfSelectRef: useRef(),\n optionsContainerRef: useRef(),\n searchTextInputRef: useRef(),\n selectContainerRef: useRef(),\n t\n })\n this.useStates({\n currentOptions: () => this.defaultCurrentOptions(),\n selectContainerLayout: null,\n endOfSelectLayout: null,\n height: null,\n loadedOptions: () => this.defaultLoadedOptions(),\n opened: false,\n optionsContainerLayout: null,\n optionsPlacement: undefined,\n optionsTop: undefined,\n optionsVisibility: undefined,\n optionsWidth: undefined,\n scrollLeft: document.documentElement.scrollLeft,\n scrollTop: document.documentElement.scrollTop,\n searchText: \"\",\n toggled: () => this.defaultToggled()\n })\n\n if (Platform.OS == \"web\") {\n useEventListener(window, \"click\", this.tt.onWindowClicked)\n useEventListener(window, \"resize\", this.tt.onAnythingResizedDebounced)\n useEventListener(window, \"scroll\", this.tt.onAnythingScrolledDebounced)\n }\n\n useEffect(() => {\n if (this.tt.callOptionsPositionAboveIfOutsideScreen && this.s.optionsContainerLayout) {\n this.callOptionsPositionAboveIfOutsideScreen = false\n this.setOptionsPositionAboveIfOutsideScreen()\n }\n }, [this.tt.callOptionsPositionAboveIfOutsideScreen, this.s.optionsContainerLayout])\n\n useEffect(() => {\n const currentOptionIds = this.s.currentOptions?.map((currentOption) => currentOption.value)\n\n if (this.props.values && anythingDifferent(currentOptionIds, this.props.values) && typeof this.props.options == \"function\") {\n this.setCurrentFromGivenValues()\n }\n }, [this.props.values])\n }\n\n defaultCurrentOptions() {\n const {defaultValue, defaultValues, values} = this.props\n const {options} = this.p\n\n if (!Array.isArray(options)) return []\n\n return options.filter(({value}) =>\n (defaultValue && value == defaultValue) ||\n (defaultValues && defaultValues.includes(value)) ||\n (values && values.includes(value))\n )\n }\n\n defaultLoadedOptions() {\n const {options} = this.p\n\n if (typeof options == \"function\") {\n return undefined\n } else if (Array.isArray(options)) {\n return options\n }\n\n throw new Error(`Unknown type of options: ${typeof options}`)\n }\n\n defaultToggled = () => (\"toggled\" in this.props) ? this.p.toggled : this.props.defaultToggled || {}\n getToggled = () => (\"toggled\" in this.props) ? this.p.toggled : this.s.toggled\n getValues = () => (\"values\" in this.props) ? this.p.values : this.s.currentOptions.map((currentOption) => currentOption.value)\n getCurrentOptions = () => {\n if (\"values\" in this.props && typeof this.props.values != \"undefined\") {\n if (Array.isArray(this.props.options) && this.props.values) {\n return this.p.values.map((value) => this.p.options.find((option) => option.value == value))\n } else if (this.s.loadedOptions && this.props.values) {\n return this.p.values.map((value) => {\n let foundOption = this.s.loadedOptions.find((option) => option.value == value)\n\n if (!foundOption) {\n foundOption = this.s.currentOptions.find((option) => option.value == value)\n\n if (!foundOption) {\n console.error(\n `Couldn't find option: ${value} in loadedOptions or state currentOptions`,\n {stateLoadedOptions: this.s.loadedOptions, stateCurrentOptions: this.s.currentOptions, propsOptions: this.props.options}\n )\n }\n }\n\n return foundOption\n })\n } else if (typeof this.props.options == \"function\" && this.props.values) {\n // Options haven't been loaded yet.\n } else if (this.props.values) {\n return this.p.values.map((value) => ({value}))\n }\n }\n\n return this.s.currentOptions\n }\n\n getCurrentOptionValues() {\n if (\"values\" in this.props) {\n return this.p.values\n }\n\n return this.getCurrentOptions().map((option) => option.value)\n }\n\n componentDidMount() {\n const {attribute, defaultValue, defaultValues, defaultValuesFromOptions, model, options} = this.props\n\n if (((defaultValue || defaultValues || defaultValuesFromOptions) || (attribute && model)) && typeof options == \"function\") {\n this.loadDefaultValuesFromOptionsCallback()\n }\n }\n\n componentDidUpdate() {\n const newState = {}\n\n if (\"toggled\" in this.props) {\n const newToggled = this.p.toggled\n\n if (anythingDifferent(this.state.toggled, newToggled)) {\n newState.toggled = newToggled\n }\n }\n\n if (Object.keys(newState).length > 0) {\n this.setState(newState)\n }\n }\n\n render() {\n const {endOfSelectRef} = this.tt\n const {transparent} = this.p\n const {className, placeholder, toggleOptions} = this.props\n const {opened, optionsPlacement} = this.s\n const currentOptions = this.getCurrentOptions()\n const id = idForComponent(this)\n\n const selectContainerStyleActual = this.stylingFor(\"selectContainer\", {\n flexDirection: \"row\",\n alignItems: \"center\",\n backgroundColor: transparent ? undefined : \"#fff\",\n border: transparent ? undefined : \"1px solid #999\",\n borderRadius: transparent ? undefined : 4,\n color: \"#000\",\n cursor: \"pointer\",\n paddingTop: 5,\n paddingBottom: 5,\n paddingLeft: 5\n })\n\n if (opened) {\n // Prevent select from changing size once the content is replaced with search text once opened\n selectContainerStyleActual.height = this.s.height\n\n if (optionsPlacement == \"above\") {\n selectContainerStyleActual.borderTopLeftRadius = 0\n selectContainerStyleActual.borderTopRightRadius = 0\n selectContainerStyleActual.borderBottomRightRadius = selectContainerStyleActual.borderRadius\n selectContainerStyleActual.borderBottomLeftRadius = selectContainerStyleActual.borderRadius\n\n delete selectContainerStyleActual.borderRadius\n } else if (optionsPlacement == \"below\") {\n selectContainerStyleActual.borderTopLeftRadius = selectContainerStyleActual.borderRadius\n selectContainerStyleActual.borderTopRightRadius = selectContainerStyleActual.borderRadius\n selectContainerStyleActual.borderBottomRightRadius = 0\n selectContainerStyleActual.borderBottomLeftRadius = 0\n\n delete selectContainerStyleActual.borderRadius\n }\n }\n\n return (\n <View\n dataSet={{\n class: className,\n component: \"haya-select\",\n id,\n opened,\n optionsPlacement,\n toggles: Boolean(toggleOptions)\n }}\n style={this.stylingFor(\"main\")}\n >\n <Pressable\n dataSet={this.selectContainerDataSet ||= {class: \"select-container\"}}\n onLayout={this.tt.onSelectContainerLayout}\n onPress={this.tt.onSelectClicked}\n ref={this.tt.selectContainerRef}\n style={selectContainerStyleActual}\n >\n <View\n dataSet={this.currentSelectedDataSet ||= {class: \"current-selected\"}}\n style={this.stylingFor(\"currentSelected\", this.currentSelectedStyle ||= {width: \"calc(100% - 25px)\", flexWrap: \"wrap\", overflow: \"hidden\"})}\n >\n {opened &&\n <TextInput\n dataSet={this.searchTextInputDataSet ||= {class: \"search-text-input\"}}\n onChange={this.tt.onSearchTextInputChangedDebounced}\n onChangeText={this.tt.onChangeSearchText}\n placeholder={this.t(\".search_dot_dot_dot\")}\n ref={this.tt.searchTextInputRef}\n style={this.stylingFor(\"searchTextInput\", this.searchTextInputStyle ||= {\n width: \"100%\",\n border: 0,\n outline: \"none\",\n padding: 0\n })}\n value={this.state.searchText}\n />\n }\n {!opened &&\n <>\n {currentOptions.length == 0 &&\n <Text numberOfLines={1} style={this.stylingFor(\"nothingSelected\", this.nothingSelectedStyle ||= {color: \"grey\"})}>\n {placeholder || this.t(\".nothing_selected\")}\n </Text>\n }\n {currentOptions.length == 0 && Platform.OS == \"web\" &&\n <input\n id={idForComponent(this)}\n name={nameForComponentWithMultiple(this)}\n type=\"hidden\"\n value=\"\"\n />\n }\n {currentOptions.map((currentOption) =>\n <View\n dataSet={this.currentOptionDataSet ||= {class: \"current-option\"}}\n key={currentOption.key || `current-value-${currentOption.value}`}\n style={this.stylingFor(\"currentOption\", {marginRight: 6})}\n >\n {currentOption.type == \"group\" &&\n <View style={this.stylingFor(\"currentOptionGroup\", this.currentOptionGroupStyle ||= {fontWeight: \"bold\"})}>\n <Text style={this.stylingFor(\"currentOptionGroupText\")}>\n {currentOption.text}\n </Text>\n </View>\n }\n {currentOption.type != \"group\" &&\n <>\n {Platform.OS == \"web\" && nameForComponentWithMultiple(this) &&\n <input\n id={idForComponent(this)}\n name={nameForComponentWithMultiple(this)}\n type=\"hidden\"\n value={digg(currentOption, \"value\")}\n />\n }\n {this.presentOption(currentOption, \"current\")}\n </>\n }\n </View>\n )}\n </>\n }\n </View>\n <View\n dataSet={this.chevronContainerDataSet ||= {class: \"chevron-container\"}}\n style={this.stylingFor(\"chevronContainer\", this.chevronContainerStyle ||= {\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"100%\",\n marginLeft: \"auto\"\n })}\n >\n <FontAwesomeIcon name={opened ? \"chevron-up\" : \"chevron-down\"} style={this.stylingFor(\"chevron\", this.chevronStyle ||= {fontSize: 12})} />\n </View>\n </Pressable>\n <View\n dataSet={this.endOfSelectDataSet ||= {class: \"end-of-select\"}}\n onLayout={this.tt.onEndOfSelectLayout}\n ref={endOfSelectRef}\n />\n {opened &&\n <Portal>\n {this.optionsContainer()}\n </Portal>\n }\n </View>\n )\n }\n\n defaultValues () {\n const {attribute, defaultValue, defaultValues, defaultValuesFromOptions, model} = this.props\n\n if (defaultValuesFromOptions) return defaultValuesFromOptions\n if (defaultValue) return defaultValue\n if (defaultValues) return defaultValues\n\n if (attribute && model) {\n if (!(attribute in model)) throw new Error(`No such attribute on ${model.modelClassData().name}: ${attribute}`)\n\n return model[attribute]()\n }\n }\n\n isActive() {\n if (this.tt.endOfSelectRef.current) {\n return true\n }\n\n return false\n }\n\n async loadDefaultValuesFromOptionsCallback() {\n const defaultValues = this.defaultValues()\n\n if (!defaultValues) return\n\n const result = await this.props.options({\n searchValue: this.s.searchText,\n values: defaultValues\n })\n\n this.setState({currentOptions: this.state.currentOptions.concat(result)})\n }\n\n loadOptions = async () => {\n const {options} = this.p\n const searchValue = this.s.searchText\n\n if (Array.isArray(options)) {\n return this.loadOptionsFromArray(options, searchValue)\n }\n\n const loadedOptions = await options({searchValue})\n\n this.setState({loadedOptions})\n }\n\n hayaSelectOption({key, loadedOption}) {\n if (loadedOption.type == \"group\") {\n return <OptionGroup key={key} option={loadedOption} />\n }\n\n return (\n <Option\n currentOptionValues={this.getCurrentOptionValues()}\n icon={this.iconForOption(loadedOption)}\n key={key}\n option={loadedOption}\n onOptionClicked={this.tt.onOptionClicked}\n presentOption={this.tt.presentOption}\n />\n )\n }\n\n loadOptionsFromArray(options, searchValue) {\n const lowerSearchValue = searchValue?.toLowerCase()\n const loadedOptions = options.filter(({text}) => !lowerSearchValue || text?.toLowerCase()?.includes(lowerSearchValue))\n\n this.setState({loadedOptions})\n }\n\n onSelectContainerLayout = (e) => this.setState({selectContainerLayout: Object.assign({}, digg(e, \"nativeEvent\", \"layout\"))})\n onEndOfSelectLayout = (e) => this.setState({endOfSelectLayout: Object.assign({}, digg(e, \"nativeEvent\", \"layout\"))})\n onOptionsContainerLayout = (e) => this.setState({optionsContainerLayout: Object.assign({}, digg(e, \"nativeEvent\", \"layout\"))})\n\n onSelectClicked = (e) => {\n e.preventDefault()\n e.stopPropagation()\n\n const {opened} = this.s\n\n if (opened) {\n this.closeOptions()\n } else {\n this.openOptions()\n }\n }\n\n onSearchTextInputChangedDebounced = debounce(this.tt.loadOptions, 200)\n\n closeOptions() {\n this.setState({\n height: null,\n loadedOptions: undefined,\n opened: false,\n optionsContainerLayout: null\n })\n\n if (this.props.onOptionsClosed) {\n this.props.onOptionsClosed({options: this.getCurrentOptions()})\n }\n\n if (this.p.onBlur) this.p.onBlur()\n }\n\n onChangeSearchText = (searchText) => this.setState({searchText})\n\n openOptions() {\n this.setOptionsPositionBelow()\n this.loadOptions()\n this.callOptionsPositionAboveIfOutsideScreen = true\n this.setState(\n {\n height: this.s.selectContainerLayout.height,\n opened: true,\n scrollLeft: Platform.OS == \"web\" ? document.documentElement.scrollLeft : null,\n scrollTop: Platform.OS == \"web\" ? document.documentElement.scrollTop : null,\n searchText: \"\"\n },\n () => {\n this.focusTextInput()\n }\n )\n\n if (this.p.onFocus) this.p.onFocus()\n }\n\n focusTextInput = () => digg(this.tt.searchTextInputRef, \"current\")?.focus()\n\n setOptionsPosition() {\n if (!this.isActive()) {\n return // Debounce after un-mount handeling.\n }\n\n this.callOptionsPositionAboveIfOutsideScreen = true\n this.setOptionsPositionBelow()\n }\n\n setOptionsPositionAboveIfOutsideScreen() {\n const {optionsContainerLayout} = this.s\n const optionsTop = this.s.endOfSelectLayout.top\n const optionsTotalBottomPosition = optionsContainerLayout.height + optionsTop\n const windowHeightWithScroll = document.body.clientHeight + this.s.scrollTop\n\n if (windowHeightWithScroll < optionsTotalBottomPosition) {\n this.setOptionsPositionAbove()\n } else {\n this.setState({optionsVisibility: \"visible\"})\n }\n }\n\n setOptionsPositionAbove() {\n const {endOfSelectLayout} = this.s\n\n this.setState(\n {\n opened: true,\n optionsPlacement: \"above\",\n optionsVisibility: \"visible\",\n optionsWidth: endOfSelectLayout.width\n },\n () => this.focusTextInput()\n )\n }\n\n setOptionsPositionBelow() {\n this.setState(\n {\n opened: true,\n optionsPlacement: \"below\",\n optionsVisibility: \"hidden\",\n optionsWidth: this.s.endOfSelectLayout.width\n },\n () => this.focusTextInput()\n )\n }\n\n onAnythingResized = () => {\n if (this.s.opened) {\n this.setOptionsPosition()\n }\n }\n\n onAnythingResizedDebounced = debounce(this.tt.onAnythingResized, 25)\n\n onAnythingScrolled = () => {\n if (this.s.opened) {\n this.setState({\n scrollLeft: document.documentElement.scrollLeft,\n scrollTop: document.documentElement.scrollTop\n })\n this.setOptionsPosition()\n }\n }\n\n onAnythingScrolledDebounced = debounce(this.tt.onAnythingScrolled, 25)\n\n onWindowClicked = (e) => {\n const {optionsContainerRef} = this.tt\n const {opened} = this.s\n\n // If options are open and a click is made outside of the options container\n if (opened && optionsContainerRef.current && !optionsContainerRef.current?.contains(e.target)) {\n this.closeOptions()\n }\n }\n\n optionsContainer() {\n const {optionsContainerRef} = this.tt\n const {optionsAbsolute} = this.p\n const {selectContainerLayout, loadedOptions, endOfSelectLayout, optionsContainerLayout, optionsPlacement, optionsVisibility} = this.s\n let left, top\n\n let style = {\n position: \"absolute\",\n zIndex: 99999,\n elevation: 99999,\n visibility: optionsVisibility,\n width: this.p.optionsWidth || this.s.optionsWidth,\n backgroundColor: \"#fff\",\n border: \"1px solid #999\",\n maxHeight: 300,\n overflowY: \"auto\"\n }\n\n if (!optionsAbsolute) {\n style.left = 0\n style.bottom = 0\n } else if (optionsPlacement == \"below\") {\n if (Platform.OS == \"web\") {\n // onLayout top value is sometimes negative so use browser JS to get it instead\n top = digg(this.tt.endOfSelectRef.current.getBoundingClientRect(), \"top\") + document.documentElement.scrollTop + 1\n\n // onLayout left values doesn't always update when changed\n left = digg(this.tt.endOfSelectRef.current.getBoundingClientRect(), \"left\") + document.documentElement.scrollLeft\n } else {\n left = this.s.endOfSelectLayout.left\n top = selectContainerLayout.top\n }\n\n style.left = left\n style.top = top - 2\n } else if (optionsPlacement == \"above\") {\n if (Platform.OS == \"web\") {\n // onLayout top value is sometimes negative so use browser JS to get it instead\n top = digg(this.tt.selectContainerRef.current.getBoundingClientRect(), \"top\") + document.documentElement.scrollTop\n\n // onLayout left values doesn't always update when changed\n left = digg(this.tt.selectContainerRef.current.getBoundingClientRect(), \"left\") + document.documentElement.scrollLeft\n } else {\n left = endOfSelectLayout.left\n top = selectContainerLayout.top\n }\n\n style.left = left\n style.top = top - optionsContainerLayout.height + 1\n } else {\n throw new Error(`Unkonwn options placement: ${optionsPlacement}`)\n }\n\n style = this.stylingFor(\"optionsContainer\", style)\n\n const id = idForComponent(this)\n\n return (\n <View\n dataSet={this.cache(\"optionsContainerDataSet\", {class: \"options-container\", id}, [id])}\n onLayout={this.tt.onOptionsContainerLayout}\n ref={optionsContainerRef}\n style={style}\n >\n {loadedOptions?.map((loadedOption) =>\n this.hayaSelectOption({\n key: loadedOption.key || `loaded-option-${loadedOption.value}`,\n loadedOption\n })\n )}\n {loadedOptions?.length === 0 &&\n <View dataSet={this.noOptionsContainerDataSet ||= {class: \"no-options-container\"}}>\n <Text>{this.t(\".no_options_found\")}</Text>\n </View>\n }\n </View>\n )\n }\n\n onOptionClicked = (event, loadedOption) => {\n event.preventDefault()\n event.stopPropagation()\n\n const {onChange, toggleOptions} = this.props\n const {multiple} = this.p\n const currentOptions = this.getCurrentOptions()\n const toggled = this.getToggled()\n const newState = {}\n const existingOption = currentOptions.find((currentOption) => currentOption.value == loadedOption.value)\n const newToggled = {...toggled}\n let newCurrentOptions\n\n if (existingOption) {\n if (toggleOptions) {\n const currentToggle = toggled[loadedOption.value]\n const currentIndex = toggleOptions.findIndex((element) => element.value == currentToggle)\n\n if (currentIndex >= (toggleOptions.length - 1)) {\n // No next toggled - remove toggled and option\n delete newToggled[loadedOption.value]\n\n newCurrentOptions = currentOptions.filter((currentOption) => currentOption.value != loadedOption.value)\n } else {\n // Already toggled - set to next toggle\n newToggled[loadedOption.value] = digg(toggleOptions, currentIndex + 1, \"value\")\n }\n\n newState.toggled = newToggled\n } else {\n // Remove from current options\n newCurrentOptions = currentOptions.filter((currentOption) => currentOption.value != loadedOption.value)\n }\n } else {\n // Don't do anything if the clicked option is disabled\n if (loadedOption.disabled) return\n\n if (toggleOptions) {\n // Set fresh toggle\n newToggled[loadedOption.value] = toggleOptions[0].value\n newState.toggled = newToggled\n }\n\n if (multiple || toggleOptions) {\n newCurrentOptions = currentOptions.concat([loadedOption])\n } else {\n newCurrentOptions = [loadedOption]\n }\n }\n\n if (\"values\" in this.props && this.props.values !== undefined) {\n // currentOptions are controlled and a useMemo callback is handeling setting current options.\n } else if (newCurrentOptions) {\n newState.currentOptions = newCurrentOptions\n }\n\n const options = newCurrentOptions || currentOptions\n\n if (onChange) {\n onChange({\n event,\n options,\n toggles: newToggled\n })\n }\n\n if (this.props.onChangeValue) {\n let optionValue\n\n if (multiple) {\n optionValue = options.map((option) => option.value)\n } else {\n optionValue = dig(options, 0, \"value\")\n }\n\n this.p.onChangeValue(optionValue)\n }\n\n if (!multiple) this.closeOptions()\n this.setState(newState)\n }\n\n stylingFor(stylingName, style = {}) {\n let customStyling = dig(this, \"props\", \"styles\", stylingName)\n\n if (typeof customStyling == \"function\") customStyling = customStyling({state: this.state, style})\n\n if (customStyling) {\n return Object.assign(style, customStyling)\n }\n\n return style\n }\n\n iconForOption(option) {\n const {toggleOptions} = this.props || {}\n const toggled = this.getToggled()\n\n if (toggleOptions && (option.value in toggled)) {\n const toggledValue = toggled[option.value]\n const toggledOption = toggleOptions.find((element) => element.value == toggledValue)\n\n if (!toggledOption) {\n throw new Error(`Couldn't find a toggle option for value: ${toggledValue}`)\n }\n\n return toggledOption.icon\n }\n }\n\n presentOption = (option, mode) => {\n const {toggleOptions} = this.props || {}\n const toggled = this.getToggled()\n const icon = this.iconForOption(option)\n const toggleValue = toggled[option.value]\n const toggleOption = toggleOptions?.find((toggleOptionI) => toggleOptionI.value == toggleValue)\n let style\n\n if (mode == \"current\") {\n style = this.stylingFor(\"currentOptionPresentationText\", {flex: 1, whiteSpace: \"nowrap\"})\n } else {\n style = this.stylingFor(\"optionPresentationText\", {flex: 1, whiteSpace: \"nowrap\"})\n }\n\n return (\n <View\n dataSet={{\n class: \"option-presentation\",\n text: option.text,\n toggleIcon: toggleOption?.icon,\n toggleValue: toggleOption?.value,\n value: option.value\n }}\n style={this.optionPresentationStyle ||= {flexDirection: \"row\"}}\n >\n {toggleOptions && !(option.value in toggled) &&\n <View\n dataSet={this.toggleIconPlaceholderDataSet ||= {class: \"toggle-icon-placeholder\"}}\n style={this.toggleIconPlaceholderStyle ||= {width: 20}}\n />\n }\n {toggleOptions && (option.value in toggled) &&\n <View style={this.toggleIconContainerStyle ||= {alignItems: \"center\", justifyContent: \"center\", width: 20}}>\n <FontAwesomeIcon\n dataSet={this.toggleIconDataSet ||= {class: \"toggle-icon\"}}\n name={icon}\n />\n </View>\n }\n {(() => {\n if (mode == \"current\" && option.currentContent) {\n return option.currentContent()\n } else if (option.content) {\n return option.content()\n } else if (\"html\" in option && Platform.OS != \"web\") {\n return <RenderHtml source={{html: digg(option, \"html\")}} />\n } else if (\"html\" in option && Platform.OS == \"web\") {\n return <div dangerouslySetInnerHTML={{__html: digg(option, \"html\")}} />\n } else {\n return (\n <Text\n dataSet={this.optionPresentationTextDataSet ||= {class: \"option-presentation-text\"}}\n style={style}\n >\n {option.text}\n </Text>\n )\n }\n })()}\n </View>\n )\n }\n\n async setCurrentFromGivenValues() {\n const {options, values} = this.p\n const currentOptions = await options({values})\n const currentValues = currentOptions?.map((currentOption) => currentOption.value)\n const stateValues = this.s.currentOptions?.map((currentOption) => currentOption.value)\n\n if (anythingDifferent(currentValues, stateValues)) {\n this.setState({currentOptions})\n }\n }\n}))\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/select/index.jsx"],"names":[],"mappings":"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","sourcesContent":["import {anythingDifferent} from \"set-state-compare/src/diff-utils\"\nimport config from \"../config.js\"\nimport {dig, digg} from \"diggerize\"\nimport {Dimensions, Platform, Pressable, Text, TextInput, View} from \"react-native\"\nimport React, {memo, useEffect, useRef} from \"react\"\nimport {shapeComponent, ShapeComponent} from \"set-state-compare/src/shape-component.js\"\nimport debounce from \"debounce\"\nimport FontAwesomeIcon from \"react-native-vector-icons/FontAwesome\"\nimport idForComponent from \"@kaspernj/api-maker/build/inputs/id-for-component\"\nimport nameForComponent from \"@kaspernj/api-maker/build/inputs/name-for-component\"\nimport Option from \"./option\"\nimport OptionGroup from \"./option-group\"\nimport PropTypes from \"prop-types\"\nimport propTypesExact from \"prop-types-exact\"\nimport RenderHtml from \"react-native-render-html\"\nimport {Portal} from \"conjointment\"\nimport useEventListener from \"@kaspernj/api-maker/build/use-event-listener\"\n\nconst nameForComponentWithMultiple = (component) => {\n let name = nameForComponent(component)\n\n const currentOptions = component.getCurrentOptions()\n\n if (component.props.multiple && name && currentOptions.length > 0) {\n name += \"[]\"\n }\n\n return name\n}\n\n\nconst t = (msgID) => {\n if (msgID.startsWith(\".\")) {\n return config.getTranslate()(`haya_select${msgID}`)\n } else {\n return config.getTranslate()(msgID)\n }\n}\n\nexport default memo(shapeComponent(class HayaSelect extends ShapeComponent {\n static defaultProps = {\n multiple: false,\n onBlur: null,\n onFocus: null,\n optionsAbsolute: true,\n optionsPortal: true,\n optionsWidth: null,\n search: false,\n transparent: false\n }\n\n static propTypes = propTypesExact({\n attribute: PropTypes.string,\n className: PropTypes.string,\n defaultToggled: PropTypes.object,\n defaultValue: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n defaultValues: PropTypes.array,\n defaultValuesFromOptions: PropTypes.array,\n id: PropTypes.node,\n model: PropTypes.object,\n multiple: PropTypes.bool.isRequired,\n name: PropTypes.string,\n onBlur: PropTypes.func,\n onChange: PropTypes.func,\n onChangeValue: PropTypes.func,\n onFocus: PropTypes.func,\n onOptionsClosed: PropTypes.func,\n options: PropTypes.oneOfType([PropTypes.array, PropTypes.func]).isRequired,\n optionsAbsolute: PropTypes.bool.isRequired,\n optionsPortal: PropTypes.bool.isRequired,\n optionsWidth: PropTypes.number,\n placeholder: PropTypes.node,\n search: PropTypes.bool.isRequired,\n styles: PropTypes.object,\n toggled: PropTypes.object,\n toggleOptions: PropTypes.arrayOf(PropTypes.shape({\n icon: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired\n })),\n transparent: PropTypes.bool.isRequired,\n values: PropTypes.array\n })\n\n callOptionsPositionAboveIfOutsideScreen = false\n windowWidth = Dimensions.get(\"window\").width\n windowHeight = Dimensions.get(\"window\").height\n\n setup() {\n if (this.props.values) {\n for (const value of this.props.values) {\n if (typeof value == \"undefined\") {\n throw new Error(\"HayaSelect: Undefined given as value\")\n }\n }\n }\n\n this.setInstance({\n endOfSelectRef: useRef(),\n optionsContainerRef: useRef(),\n searchTextInputRef: useRef(),\n selectContainerRef: useRef()\n })\n this.useStates({\n currentOptions: () => this.defaultCurrentOptions(),\n selectContainerLayout: null,\n endOfSelectLayout: null,\n height: null,\n loadedOptions: () => this.defaultLoadedOptions(),\n opened: false,\n optionsContainerLayout: null,\n optionsPlacement: undefined,\n optionsTop: undefined,\n optionsVisibility: undefined,\n optionsWidth: undefined,\n scrollLeft: Platform.OS == \"web\" ? document.documentElement.scrollLeft : null,\n scrollTop: Platform.OS == \"web\" ? document.documentElement.scrollTop : null,\n searchText: \"\",\n toggled: () => this.defaultToggled()\n })\n\n useEventListener(Dimensions, \"change\", this.tt.onDimensionsChange)\n\n if (Platform.OS == \"web\") {\n useEventListener(window, \"click\", this.tt.onWindowClicked)\n useEventListener(window, \"resize\", this.tt.onAnythingResizedDebounced)\n useEventListener(window, \"scroll\", this.tt.onAnythingScrolledDebounced)\n }\n\n useEffect(() => {\n if (this.tt.callOptionsPositionAboveIfOutsideScreen && this.s.optionsContainerLayout) {\n this.callOptionsPositionAboveIfOutsideScreen = false\n this.setOptionsPositionAboveIfOutsideScreen()\n }\n }, [this.tt.callOptionsPositionAboveIfOutsideScreen, this.s.optionsContainerLayout])\n\n useEffect(() => {\n const currentOptionIds = this.s.currentOptions?.map((currentOption) => currentOption.value)\n\n if (this.props.values && anythingDifferent(currentOptionIds, this.props.values) && typeof this.props.options == \"function\") {\n this.setCurrentFromGivenValues()\n }\n }, [this.props.values])\n }\n\n defaultCurrentOptions() {\n const {defaultValue, defaultValues, values} = this.props\n const {options} = this.p\n\n if (!Array.isArray(options)) return []\n\n return options.filter(({value}) =>\n (defaultValue && value == defaultValue) ||\n (defaultValues && defaultValues.includes(value)) ||\n (values && values.includes(value))\n )\n }\n\n defaultLoadedOptions() {\n const {options} = this.p\n\n if (typeof options == \"function\") {\n return undefined\n } else if (Array.isArray(options)) {\n return options\n }\n\n throw new Error(`Unknown type of options: ${typeof options}`)\n }\n\n defaultToggled = () => (\"toggled\" in this.props) ? this.p.toggled : this.props.defaultToggled || {}\n getToggled = () => (\"toggled\" in this.props) ? this.p.toggled : this.s.toggled\n getValues = () => (\"values\" in this.props) ? this.p.values : this.s.currentOptions.map((currentOption) => currentOption.value)\n getCurrentOptions = () => {\n if (\"values\" in this.props && typeof this.props.values != \"undefined\") {\n if (Array.isArray(this.props.options) && this.props.values) {\n return this.p.values.map((value) => this.p.options.find((option) => option.value == value))\n } else if (this.s.loadedOptions && this.props.values) {\n return this.p.values.map((value) => {\n let foundOption = this.s.loadedOptions.find((option) => option.value == value)\n\n if (!foundOption) {\n foundOption = this.s.currentOptions.find((option) => option.value == value)\n\n if (!foundOption) {\n console.error(\n `Couldn't find option: ${value} in loadedOptions or state currentOptions`,\n {stateLoadedOptions: this.s.loadedOptions, stateCurrentOptions: this.s.currentOptions, propsOptions: this.props.options}\n )\n }\n }\n\n return foundOption\n })\n } else if (typeof this.props.options == \"function\" && this.props.values) {\n // Options haven't been loaded yet.\n } else if (this.props.values) {\n return this.p.values.map((value) => ({value}))\n }\n }\n\n return this.s.currentOptions\n }\n\n getCurrentOptionValues() {\n if (\"values\" in this.props) {\n return this.p.values\n }\n\n return this.getCurrentOptions().map((option) => option.value)\n }\n\n componentDidMount() {\n const {attribute, defaultValue, defaultValues, defaultValuesFromOptions, model, options} = this.props\n\n if (((defaultValue || defaultValues || defaultValuesFromOptions) || (attribute && model)) && typeof options == \"function\") {\n this.loadDefaultValuesFromOptionsCallback()\n }\n }\n\n componentDidUpdate() {\n const newState = {}\n\n if (\"toggled\" in this.props) {\n const newToggled = this.p.toggled\n\n if (anythingDifferent(this.state.toggled, newToggled)) {\n newState.toggled = newToggled\n }\n }\n\n if (Object.keys(newState).length > 0) {\n this.setState(newState)\n }\n }\n\n render() {\n const {endOfSelectRef} = this.tt\n const {transparent} = this.p\n const {className, placeholder, toggleOptions} = this.props\n const {opened, optionsPlacement} = this.s\n const currentOptions = this.getCurrentOptions()\n const id = idForComponent(this)\n\n const selectContainerStyleActual = this.stylingFor(\"selectContainer\", {\n flexDirection: \"row\",\n alignItems: \"center\",\n backgroundColor: transparent ? undefined : \"#fff\",\n border: transparent ? undefined : \"1px solid #999\",\n borderRadius: transparent ? undefined : 4,\n color: \"#000\",\n cursor: \"pointer\",\n paddingTop: 5,\n paddingBottom: 5,\n paddingLeft: 5\n })\n\n if (opened) {\n // Prevent select from changing size once the content is replaced with search text once opened\n selectContainerStyleActual.height = this.s.height\n\n if (optionsPlacement == \"above\") {\n selectContainerStyleActual.borderTopLeftRadius = 0\n selectContainerStyleActual.borderTopRightRadius = 0\n selectContainerStyleActual.borderBottomRightRadius = selectContainerStyleActual.borderRadius\n selectContainerStyleActual.borderBottomLeftRadius = selectContainerStyleActual.borderRadius\n\n delete selectContainerStyleActual.borderRadius\n } else if (optionsPlacement == \"below\") {\n selectContainerStyleActual.borderTopLeftRadius = selectContainerStyleActual.borderRadius\n selectContainerStyleActual.borderTopRightRadius = selectContainerStyleActual.borderRadius\n selectContainerStyleActual.borderBottomRightRadius = 0\n selectContainerStyleActual.borderBottomLeftRadius = 0\n\n delete selectContainerStyleActual.borderRadius\n }\n }\n\n return (\n <View\n dataSet={this.cache(\"rootViewDataSet\", {\n class: className,\n component: \"haya-select\",\n id,\n opened,\n optionsPlacement,\n toggles: Boolean(toggleOptions)\n }, [className, id, opened, optionsPlacement, Boolean(toggleOptions)])}\n style={this.stylingFor(\"main\")}\n >\n <Pressable\n dataSet={this.selectContainerDataSet ||= {class: \"select-container\"}}\n onLayout={this.tt.onSelectContainerLayout}\n onPress={this.tt.onSelectClicked}\n ref={this.tt.selectContainerRef}\n style={selectContainerStyleActual}\n >\n <View\n dataSet={this.currentSelectedDataSet ||= {class: \"current-selected\"}}\n style={this.stylingFor(\"currentSelected\", this.currentSelectedStyle ||= {width: \"calc(100% - 25px)\", flexWrap: \"wrap\", overflow: \"hidden\"})}\n >\n {opened &&\n <TextInput\n dataSet={this.searchTextInputDataSet ||= {class: \"search-text-input\"}}\n onChange={this.tt.onSearchTextInputChangedDebounced}\n onChangeText={this.tt.onChangeSearchText}\n placeholder={t(\".search_dot_dot_dot\")}\n ref={this.tt.searchTextInputRef}\n style={this.stylingFor(\"searchTextInput\", this.searchTextInputStyle ||= {\n width: \"100%\",\n border: 0,\n outline: \"none\",\n padding: 0\n })}\n value={this.state.searchText}\n />\n }\n {!opened &&\n <>\n {currentOptions.length == 0 &&\n <Text numberOfLines={1} style={this.stylingFor(\"nothingSelected\", this.nothingSelectedStyle ||= {color: \"grey\"})}>\n {placeholder || t(\".nothing_selected\")}\n </Text>\n }\n {currentOptions.length == 0 && Platform.OS == \"web\" &&\n <input\n id={idForComponent(this)}\n name={nameForComponentWithMultiple(this)}\n type=\"hidden\"\n value=\"\"\n />\n }\n {currentOptions.map((currentOption) =>\n <View\n dataSet={this.currentOptionDataSet ||= {class: \"current-option\"}}\n key={currentOption.key || `current-value-${currentOption.value}`}\n style={this.stylingFor(\"currentOption\", {marginRight: 6})}\n >\n {currentOption.type == \"group\" &&\n <View style={this.stylingFor(\"currentOptionGroup\", this.currentOptionGroupStyle ||= {fontWeight: \"bold\"})}>\n <Text style={this.stylingFor(\"currentOptionGroupText\")}>\n {currentOption.text}\n </Text>\n </View>\n }\n {currentOption.type != \"group\" &&\n <>\n {Platform.OS == \"web\" && nameForComponentWithMultiple(this) &&\n <input\n id={idForComponent(this)}\n name={nameForComponentWithMultiple(this)}\n type=\"hidden\"\n value={digg(currentOption, \"value\")}\n />\n }\n {this.presentOption(currentOption, \"current\")}\n </>\n }\n </View>\n )}\n </>\n }\n </View>\n <View\n dataSet={this.chevronContainerDataSet ||= {class: \"chevron-container\"}}\n style={this.stylingFor(\"chevronContainer\", this.chevronContainerStyle ||= {\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"100%\",\n marginLeft: \"auto\",\n marginRight: 8\n })}\n >\n <FontAwesomeIcon name={opened ? \"chevron-up\" : \"chevron-down\"} style={this.stylingFor(\"chevron\", this.chevronStyle ||= {fontSize: 12})} />\n </View>\n </Pressable>\n <View\n dataSet={this.endOfSelectDataSet ||= {class: \"end-of-select\"}}\n onLayout={this.tt.onEndOfSelectLayout}\n ref={endOfSelectRef}\n />\n {opened && this.p.optionsPortal &&\n <Portal>\n {this.optionsContainer()}\n </Portal>\n }\n {opened && !this.p.optionsPortal &&\n <View>\n {this.optionsContainer()}\n </View>\n }\n </View>\n )\n }\n\n defaultValues () {\n const {attribute, defaultValue, defaultValues, defaultValuesFromOptions, model} = this.props\n\n if (defaultValuesFromOptions) return defaultValuesFromOptions\n if (defaultValue) return defaultValue\n if (defaultValues) return defaultValues\n\n if (attribute && model) {\n if (!(attribute in model)) throw new Error(`No such attribute on ${model.modelClassData().name}: ${attribute}`)\n\n return model[attribute]()\n }\n }\n\n isActive() {\n if (this.tt.endOfSelectRef.current) {\n return true\n }\n\n return false\n }\n\n async loadDefaultValuesFromOptionsCallback() {\n const defaultValues = this.defaultValues()\n\n if (!defaultValues) return\n\n const result = await this.props.options({\n searchValue: this.s.searchText,\n values: defaultValues\n })\n\n this.setState({currentOptions: this.state.currentOptions.concat(result)})\n }\n\n loadOptions = async () => {\n const {options} = this.p\n const searchValue = this.s.searchText\n\n if (Array.isArray(options)) {\n return this.loadOptionsFromArray(options, searchValue)\n }\n\n const loadedOptions = await options({searchValue})\n\n this.setState({loadedOptions})\n }\n\n hayaSelectOption({key, loadedOption}) {\n if (loadedOption.type == \"group\") {\n return <OptionGroup key={key} option={loadedOption} />\n }\n\n return (\n <Option\n currentOptionValues={this.getCurrentOptionValues()}\n icon={this.iconForOption(loadedOption)}\n key={key}\n option={loadedOption}\n onOptionClicked={this.tt.onOptionClicked}\n presentOption={this.tt.presentOption}\n />\n )\n }\n\n loadOptionsFromArray(options, searchValue) {\n const lowerSearchValue = searchValue?.toLowerCase()\n const loadedOptions = options.filter(({text}) => !lowerSearchValue || text?.toLowerCase()?.includes(lowerSearchValue))\n\n this.setState({loadedOptions})\n }\n\n onDimensionsChange = ({window}) => {\n this.windowWidth = window.width\n this.windowHeight = window.height\n }\n\n onSelectContainerLayout = (e) => this.setState({selectContainerLayout: Object.assign({}, digg(e, \"nativeEvent\", \"layout\"))})\n onEndOfSelectLayout = (e) => this.setState({endOfSelectLayout: Object.assign({}, digg(e, \"nativeEvent\", \"layout\"))})\n onOptionsContainerLayout = (e) => this.setState({optionsContainerLayout: Object.assign({}, digg(e, \"nativeEvent\", \"layout\"))})\n\n onSelectClicked = (e) => {\n e.preventDefault()\n e.stopPropagation()\n\n const {opened} = this.s\n\n if (opened) {\n this.closeOptions()\n } else {\n this.openOptions()\n }\n }\n\n onSearchTextInputChangedDebounced = debounce(this.tt.loadOptions, 200)\n\n closeOptions() {\n this.setState({\n height: null,\n loadedOptions: undefined,\n opened: false,\n optionsContainerLayout: null\n })\n\n if (this.props.onOptionsClosed) {\n this.props.onOptionsClosed({options: this.getCurrentOptions()})\n }\n\n if (this.p.onBlur) this.p.onBlur()\n }\n\n onChangeSearchText = (searchText) => this.setState({searchText})\n\n openOptions() {\n this.setOptionsPositionBelow()\n this.loadOptions()\n this.callOptionsPositionAboveIfOutsideScreen = true\n this.setState(\n {\n height: this.s.selectContainerLayout.height,\n opened: true,\n scrollLeft: Platform.OS == \"web\" ? document.documentElement.scrollLeft : null,\n scrollTop: Platform.OS == \"web\" ? document.documentElement.scrollTop : null,\n searchText: \"\"\n },\n () => {\n this.focusTextInput()\n }\n )\n\n if (this.p.onFocus) this.p.onFocus()\n }\n\n focusTextInput = () => digg(this.tt.searchTextInputRef, \"current\")?.focus()\n\n setOptionsPosition() {\n if (!this.isActive()) {\n return // Debounce after un-mount handeling.\n }\n\n this.callOptionsPositionAboveIfOutsideScreen = true\n this.setOptionsPositionBelow()\n }\n\n setOptionsPositionAboveIfOutsideScreen() {\n const {windowHeight} = this.tt\n const {optionsContainerLayout} = this.s\n const optionsTop = this.s.endOfSelectLayout.top\n const optionsTotalBottomPosition = optionsContainerLayout.height + optionsTop\n const windowHeightWithScroll = windowHeight + this.s.scrollTop\n\n if (windowHeightWithScroll < optionsTotalBottomPosition) {\n this.setOptionsPositionAbove()\n } else {\n this.setState({optionsVisibility: \"visible\"})\n }\n }\n\n setOptionsPositionAbove() {\n const {endOfSelectLayout} = this.s\n\n this.setState(\n {\n opened: true,\n optionsPlacement: \"above\",\n optionsVisibility: \"visible\",\n optionsWidth: endOfSelectLayout.width\n },\n () => this.focusTextInput()\n )\n }\n\n setOptionsPositionBelow() {\n this.setState(\n {\n opened: true,\n optionsPlacement: \"below\",\n optionsVisibility: \"hidden\",\n optionsWidth: this.s.endOfSelectLayout.width\n },\n () => this.focusTextInput()\n )\n }\n\n onAnythingResized = () => {\n if (this.s.opened) {\n this.setOptionsPosition()\n }\n }\n\n onAnythingResizedDebounced = debounce(this.tt.onAnythingResized, 25)\n\n onAnythingScrolled = () => {\n if (this.s.opened) {\n this.setState({\n scrollLeft: Platform.OS == \"web\" ? document.documentElement.scrollLeft : null,\n scrollTop: Platform.OS == \"web\" ? document.documentElement.scrollTop : null\n })\n this.setOptionsPosition()\n }\n }\n\n onAnythingScrolledDebounced = debounce(this.tt.onAnythingScrolled, 25)\n\n onWindowClicked = (e) => {\n const {optionsContainerRef} = this.tt\n const {opened} = this.s\n\n // If options are open and a click is made outside of the options container\n if (opened && optionsContainerRef.current && !optionsContainerRef.current?.contains(e.target)) {\n this.closeOptions()\n }\n }\n\n optionsContainer() {\n const {selectContainerLayout, loadedOptions, endOfSelectLayout, optionsContainerLayout, optionsPlacement, optionsVisibility} = this.s\n let left, top\n\n let style = {\n position: \"absolute\",\n zIndex: 99999,\n elevation: 99999,\n visibility: optionsVisibility,\n width: this.p.optionsWidth || this.s.optionsWidth,\n backgroundColor: \"#fff\",\n border: \"1px solid #999\",\n maxHeight: 300,\n overflowY: \"auto\"\n }\n\n if (!this.p.optionsPortal) {\n style.top = 0\n style.left = 0\n } else if (!this.p.optionsAbsolute) {\n style.left = 0\n style.bottom = 0\n } else if (optionsPlacement == \"below\") {\n if (Platform.OS == \"web\") {\n // onLayout top value is sometimes negative so use browser JS to get it instead\n top = digg(this.tt.endOfSelectRef.current.getBoundingClientRect(), \"top\") + document.documentElement.scrollTop + 1\n\n // onLayout left values doesn't always update when changed\n left = digg(this.tt.endOfSelectRef.current.getBoundingClientRect(), \"left\") + document.documentElement.scrollLeft\n } else {\n left = this.s.endOfSelectLayout.left\n top = selectContainerLayout.top\n }\n\n style.left = left\n style.top = top - 2\n } else if (optionsPlacement == \"above\") {\n if (Platform.OS == \"web\") {\n // onLayout top value is sometimes negative so use browser JS to get it instead\n top = digg(this.tt.selectContainerRef.current.getBoundingClientRect(), \"top\") + document.documentElement.scrollTop\n\n // onLayout left values doesn't always update when changed\n left = digg(this.tt.selectContainerRef.current.getBoundingClientRect(), \"left\") + document.documentElement.scrollLeft\n } else {\n left = endOfSelectLayout.left\n top = selectContainerLayout.top\n }\n\n style.left = left\n style.top = top - optionsContainerLayout.height + 1\n } else {\n throw new Error(`Unkonwn options placement: ${optionsPlacement}`)\n }\n\n style = this.stylingFor(\"optionsContainer\", style)\n\n const id = idForComponent(this)\n\n return (\n <View\n dataSet={this.cache(\"optionsContainerDataSet\", {class: \"options-container\", id, role: \"dialog\"}, [id])}\n onLayout={this.tt.onOptionsContainerLayout}\n ref={this.tt.optionsContainerRef}\n style={style}\n >\n {loadedOptions?.map((loadedOption) =>\n this.hayaSelectOption({\n key: loadedOption.key || `loaded-option-${loadedOption.value}`,\n loadedOption\n })\n )}\n {loadedOptions?.length === 0 &&\n <View dataSet={this.noOptionsContainerDataSet ||= {class: \"no-options-container\"}}>\n <Text>{t(\".no_options_found\")}</Text>\n </View>\n }\n </View>\n )\n }\n\n onOptionClicked = (event, loadedOption) => {\n event.preventDefault()\n event.stopPropagation()\n\n const {onChange, toggleOptions} = this.props\n const {multiple} = this.p\n const currentOptions = this.getCurrentOptions()\n const toggled = this.getToggled()\n const newState = {}\n const existingOption = currentOptions.find((currentOption) => currentOption.value == loadedOption.value)\n const newToggled = {...toggled}\n let newCurrentOptions\n\n if (existingOption) {\n if (toggleOptions) {\n const currentToggle = toggled[loadedOption.value]\n const currentIndex = toggleOptions.findIndex((element) => element.value == currentToggle)\n\n if (currentIndex >= (toggleOptions.length - 1)) {\n // No next toggled - remove toggled and option\n delete newToggled[loadedOption.value]\n\n newCurrentOptions = currentOptions.filter((currentOption) => currentOption.value != loadedOption.value)\n } else {\n // Already toggled - set to next toggle\n newToggled[loadedOption.value] = digg(toggleOptions, currentIndex + 1, \"value\")\n }\n\n newState.toggled = newToggled\n } else {\n // Remove from current options\n newCurrentOptions = currentOptions.filter((currentOption) => currentOption.value != loadedOption.value)\n }\n } else {\n // Don't do anything if the clicked option is disabled\n if (loadedOption.disabled) return\n\n if (toggleOptions) {\n // Set fresh toggle\n newToggled[loadedOption.value] = toggleOptions[0].value\n newState.toggled = newToggled\n }\n\n if (multiple || toggleOptions) {\n newCurrentOptions = currentOptions.concat([loadedOption])\n } else {\n newCurrentOptions = [loadedOption]\n }\n }\n\n if (\"values\" in this.props && this.props.values !== undefined) {\n // currentOptions are controlled and a useMemo callback is handeling setting current options.\n } else if (newCurrentOptions) {\n newState.currentOptions = newCurrentOptions\n }\n\n const options = newCurrentOptions || currentOptions\n\n if (onChange) {\n onChange({\n event,\n options,\n toggles: newToggled\n })\n }\n\n if (this.props.onChangeValue) {\n let optionValue\n\n if (multiple) {\n optionValue = options.map((option) => option.value)\n } else {\n optionValue = dig(options, 0, \"value\")\n }\n\n this.p.onChangeValue(optionValue)\n }\n\n if (!multiple) this.closeOptions()\n this.setState(newState)\n }\n\n stylingFor(stylingName, style = {}) {\n let customStyling = dig(this, \"props\", \"styles\", stylingName)\n\n if (typeof customStyling == \"function\") customStyling = customStyling({state: this.state, style})\n\n if (customStyling) {\n return Object.assign(style, customStyling)\n }\n\n return style\n }\n\n iconForOption(option) {\n const {toggleOptions} = this.props || {}\n const toggled = this.getToggled()\n\n if (toggleOptions && (option.value in toggled)) {\n const toggledValue = toggled[option.value]\n const toggledOption = toggleOptions.find((element) => element.value == toggledValue)\n\n if (!toggledOption) {\n throw new Error(`Couldn't find a toggle option for value: ${toggledValue}`)\n }\n\n return toggledOption.icon\n }\n }\n\n presentOption = (option, mode) => {\n const {toggleOptions} = this.props || {}\n const toggled = this.getToggled()\n const icon = this.iconForOption(option)\n const toggleValue = toggled[option.value]\n const toggleOption = toggleOptions?.find((toggleOptionI) => toggleOptionI.value == toggleValue)\n let style\n\n if (mode == \"current\") {\n style = this.stylingFor(\"currentOptionPresentationText\", {flex: 1, whiteSpace: \"nowrap\"})\n } else {\n style = this.stylingFor(\"optionPresentationText\", {flex: 1, whiteSpace: \"nowrap\"})\n }\n\n return (\n <View\n dataSet={{\n class: \"option-presentation\",\n text: option.text,\n toggleIcon: toggleOption?.icon,\n toggleValue: toggleOption?.value,\n value: option.value\n }}\n style={this.optionPresentationStyle ||= {flexDirection: \"row\"}}\n >\n {toggleOptions && !(option.value in toggled) &&\n <View\n dataSet={this.toggleIconPlaceholderDataSet ||= {class: \"toggle-icon-placeholder\"}}\n style={this.toggleIconPlaceholderStyle ||= {width: 20}}\n />\n }\n {toggleOptions && (option.value in toggled) &&\n <View style={this.toggleIconContainerStyle ||= {alignItems: \"center\", justifyContent: \"center\", width: 20}}>\n <FontAwesomeIcon\n dataSet={this.toggleIconDataSet ||= {class: \"toggle-icon\"}}\n name={icon}\n />\n </View>\n }\n {(() => {\n if (mode == \"current\" && option.currentContent) {\n return option.currentContent()\n } else if (option.content) {\n return option.content()\n } else if (\"html\" in option && Platform.OS != \"web\") {\n return <RenderHtml source={{html: digg(option, \"html\")}} />\n } else if (\"html\" in option && Platform.OS == \"web\") {\n return <div dangerouslySetInnerHTML={{__html: digg(option, \"html\")}} />\n } else {\n return (\n <Text\n dataSet={this.optionPresentationTextDataSet ||= {class: \"option-presentation-text\"}}\n style={style}\n >\n {option.text}\n </Text>\n )\n }\n })()}\n </View>\n )\n }\n\n async setCurrentFromGivenValues() {\n const {options, values} = this.p\n const currentOptions = await options({values})\n const currentValues = currentOptions?.map((currentOption) => currentOption.value)\n const stateValues = this.s.currentOptions?.map((currentOption) => currentOption.value)\n\n if (anythingDifferent(currentValues, stateValues)) {\n this.setState({currentOptions})\n }\n }\n}))\n"]}
@@ -8,7 +8,7 @@ export default memo(shapeComponent(class OptionGroup extends ShapeComponent {
8
8
  option: PropTypes.object.isRequired
9
9
  };
10
10
  render() {
11
- return (React.createElement(View, { dataSet: { class: "haya-select--option-group" }, style: {
11
+ return (React.createElement(View, { dataSet: this.rootViewDataSet ||= { class: "haya-select--option-group" }, style: this.rootViewStyle ||= {
12
12
  paddingTop: 4,
13
13
  paddingRight: 8,
14
14
  paddingBottom: 4,
@@ -1 +1 @@
1
- {"version":3,"file":"option-group.js","sourceRoot":"","sources":["../../src/select/option-group.jsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,OAAO,CAAA;AAC1B,OAAO,SAAS,MAAM,YAAY,CAAA;AAClC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAC,cAAc,EAAE,cAAc,EAAC,MAAM,0CAA0C,CAAA;AACvF,OAAO,EAAC,IAAI,EAAE,IAAI,EAAC,MAAM,cAAc,CAAA;AAEvC,eAAe,IAAI,CAAC,cAAc,CAAC,MAAM,WAAY,SAAQ,cAAc;IACzE,MAAM,CAAC,SAAS,GAAG;QACjB,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;KACpC,CAAA;IAED,MAAM;QACJ,OAAO,CACL,oBAAC,IAAI,IACH,OAAO,EAAE,EAAC,KAAK,EAAE,2BAA2B,EAAC,EAC7C,KAAK,EAAE;gBACL,UAAU,EAAE,CAAC;gBACb,YAAY,EAAE,CAAC;gBACf,aAAa,EAAE,CAAC;gBAChB,WAAW,EAAE,CAAC;gBACd,KAAK,EAAE,MAAM;gBACb,UAAU,EAAE,MAAM;aACnB;YAED,oBAAC,IAAI,QACF,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAClB,CACF,CACR,CAAA;IACH,CAAC;CACF,CAAC,CAAC,CAAA","sourcesContent":["import {memo} from \"react\"\nimport PropTypes from \"prop-types\"\nimport React from \"react\"\nimport {shapeComponent, ShapeComponent} from \"set-state-compare/src/shape-component.js\"\nimport {Text, View} from \"react-native\"\n\nexport default memo(shapeComponent(class OptionGroup extends ShapeComponent {\n static propTypes = {\n option: PropTypes.object.isRequired\n }\n\n render() {\n return (\n <View\n dataSet={{class: \"haya-select--option-group\"}}\n style={{\n paddingTop: 4,\n paddingRight: 8,\n paddingBottom: 4,\n paddingLeft: 8,\n color: \"#000\",\n fontWeight: \"bold\"\n }}\n >\n <Text>\n {this.props.option.text}\n </Text>\n </View>\n )\n }\n}))\n"]}
1
+ {"version":3,"file":"option-group.js","sourceRoot":"","sources":["../../src/select/option-group.jsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,OAAO,CAAA;AAC1B,OAAO,SAAS,MAAM,YAAY,CAAA;AAClC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAC,cAAc,EAAE,cAAc,EAAC,MAAM,0CAA0C,CAAA;AACvF,OAAO,EAAC,IAAI,EAAE,IAAI,EAAC,MAAM,cAAc,CAAA;AAEvC,eAAe,IAAI,CAAC,cAAc,CAAC,MAAM,WAAY,SAAQ,cAAc;IACzE,MAAM,CAAC,SAAS,GAAG;QACjB,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;KACpC,CAAA;IAED,MAAM;QACJ,OAAO,CACL,oBAAC,IAAI,IACH,OAAO,EAAE,IAAI,CAAC,eAAe,KAAK,EAAC,KAAK,EAAE,2BAA2B,EAAC,EACtE,KAAK,EAAE,IAAI,CAAC,aAAa,KAAK;gBAC5B,UAAU,EAAE,CAAC;gBACb,YAAY,EAAE,CAAC;gBACf,aAAa,EAAE,CAAC;gBAChB,WAAW,EAAE,CAAC;gBACd,KAAK,EAAE,MAAM;gBACb,UAAU,EAAE,MAAM;aACnB;YAED,oBAAC,IAAI,QACF,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAClB,CACF,CACR,CAAA;IACH,CAAC;CACF,CAAC,CAAC,CAAA","sourcesContent":["import {memo} from \"react\"\nimport PropTypes from \"prop-types\"\nimport React from \"react\"\nimport {shapeComponent, ShapeComponent} from \"set-state-compare/src/shape-component.js\"\nimport {Text, View} from \"react-native\"\n\nexport default memo(shapeComponent(class OptionGroup extends ShapeComponent {\n static propTypes = {\n option: PropTypes.object.isRequired\n }\n\n render() {\n return (\n <View\n dataSet={this.rootViewDataSet ||= {class: \"haya-select--option-group\"}}\n style={this.rootViewStyle ||= {\n paddingTop: 4,\n paddingRight: 8,\n paddingBottom: 4,\n paddingLeft: 8,\n color: \"#000\",\n fontWeight: \"bold\"\n }}\n >\n <Text>\n {this.props.option.text}\n </Text>\n </View>\n )\n }\n}))\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"option.d.ts","sourceRoot":"","sources":["../../src/select/option.jsx"],"names":[],"mappings":";;kBAEkB,OAAO"}
1
+ {"version":3,"file":"option.d.ts","sourceRoot":"","sources":["../../src/select/option.jsx"],"names":[],"mappings":";;kBAIkB,OAAO"}
@@ -1,8 +1,8 @@
1
- import { memo } from "react";
1
+ import { shapeComponent, ShapeComponent } from "set-state-compare/src/shape-component.js";
2
+ import { memo, useMemo } from "react";
3
+ import { Pressable } from "react-native";
2
4
  import PropTypes from "prop-types";
3
5
  import React from "react";
4
- import { shapeComponent, ShapeComponent } from "set-state-compare/src/shape-component.js";
5
- import { View } from "react-native";
6
6
  export default memo(shapeComponent(class Option extends ShapeComponent {
7
7
  static defaultProps = {
8
8
  disabled: false
@@ -22,37 +22,41 @@ export default memo(shapeComponent(class Option extends ShapeComponent {
22
22
  }
23
23
  render() {
24
24
  const { currentOptionValues, option } = this.p;
25
+ const { hover } = this.s;
25
26
  const disabled = Boolean(option.disabled);
26
27
  const selected = Boolean(currentOptionValues?.find((currentOptionValue) => currentOptionValue == option.value));
27
- const style = {
28
- paddingTop: 4,
29
- paddingRight: 8,
30
- paddingBottom: 4,
31
- paddingLeft: 8,
32
- color: "#000"
33
- };
34
- if (disabled) {
35
- style.cursor = "default";
36
- style.opacity = 0.6;
37
- }
38
- else {
39
- style.cursor = "pointer";
40
- }
41
- if (selected) {
42
- style.backgroundColor = "#80b2ff";
43
- }
44
- if (this.state.hover) {
45
- style.backgroundColor = "steelblue";
46
- }
47
- return (React.createElement(View, { dataSet: {
28
+ const style = useMemo(() => {
29
+ const style = {
30
+ paddingTop: 4,
31
+ paddingRight: 8,
32
+ paddingBottom: 4,
33
+ paddingLeft: 8,
34
+ color: "#000"
35
+ };
36
+ if (disabled) {
37
+ style.cursor = "default";
38
+ style.opacity = 0.6;
39
+ }
40
+ else {
41
+ style.cursor = "pointer";
42
+ }
43
+ if (selected) {
44
+ style.backgroundColor = "#80b2ff";
45
+ }
46
+ if (hover) {
47
+ style.backgroundColor = "steelblue";
48
+ }
49
+ return style;
50
+ }, [disabled, hover, selected]);
51
+ return (React.createElement(Pressable, { dataSet: this.cache("pressableDataSet", {
48
52
  class: "select-option",
49
53
  disabled,
50
54
  selected,
51
55
  value: this.props.option.value
52
- }, onClick: this.tt.onClick, onPointerOver: this.tt.onPointerOver, onPointerOut: this.tt.onPointerOut, style: style }, this.p.presentOption(option, "option")));
56
+ }, [disabled, selected, this.props.option.value]), onPress: this.tt.onPress, onPointerOver: this.tt.onPointerOver, onPointerOut: this.tt.onPointerOut, style: style }, this.p.presentOption(option, "option")));
53
57
  }
54
- onClick = (e) => this.p.onOptionClicked(e, this.props.option);
55
58
  onPointerOver = () => this.setState({ hover: true });
56
59
  onPointerOut = () => this.setState({ hover: false });
60
+ onPress = (e) => this.p.onOptionClicked(e, this.props.option);
57
61
  }));
58
62
  //# sourceMappingURL=option.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"option.js","sourceRoot":"","sources":["../../src/select/option.jsx"],"names":[],"mappings":"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","sourcesContent":["import {memo} from \"react\"\nimport PropTypes from \"prop-types\"\nimport React from \"react\"\nimport {shapeComponent, ShapeComponent} from \"set-state-compare/src/shape-component.js\"\nimport {View} from \"react-native\"\n\nexport default memo(shapeComponent(class Option extends ShapeComponent {\n static defaultProps = {\n disabled: false\n }\n\n static propTypes = {\n currentOptionValues: PropTypes.array,\n disabled: PropTypes.bool.isRequired,\n icon: PropTypes.string,\n onOptionClicked: PropTypes.func.isRequired,\n option: PropTypes.object.isRequired,\n presentOption: PropTypes.func.isRequired\n }\n\n setup() {\n this.useStates({\n hover: false\n })\n }\n\n render() {\n const {currentOptionValues, option} = this.p\n const disabled = Boolean(option.disabled)\n const selected = Boolean(currentOptionValues?.find((currentOptionValue) => currentOptionValue == option.value))\n const style = {\n paddingTop: 4,\n paddingRight: 8,\n paddingBottom: 4,\n paddingLeft: 8,\n color: \"#000\"\n }\n\n if (disabled) {\n style.cursor = \"default\"\n style.opacity = 0.6\n } else {\n style.cursor = \"pointer\"\n }\n\n if (selected) {\n style.backgroundColor = \"#80b2ff\"\n }\n\n if (this.state.hover) {\n style.backgroundColor = \"steelblue\"\n }\n\n return (\n <View\n dataSet={{\n class: \"select-option\",\n disabled,\n selected,\n value: this.props.option.value\n }}\n onClick={this.tt.onClick}\n onPointerOver={this.tt.onPointerOver}\n onPointerOut={this.tt.onPointerOut}\n style={style}\n >\n {this.p.presentOption(option, \"option\")}\n </View>\n )\n }\n\n onClick = (e) => this.p.onOptionClicked(e, this.props.option)\n onPointerOver = () => this.setState({hover: true})\n onPointerOut = () => this.setState({hover: false})\n}))\n"]}
1
+ {"version":3,"file":"option.js","sourceRoot":"","sources":["../../src/select/option.jsx"],"names":[],"mappings":"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","sourcesContent":["import {shapeComponent, ShapeComponent} from \"set-state-compare/src/shape-component.js\"\nimport {memo, useMemo} from \"react\"\nimport {Pressable} from \"react-native\"\nimport PropTypes from \"prop-types\"\nimport React from \"react\"\n\nexport default memo(shapeComponent(class Option extends ShapeComponent {\n static defaultProps = {\n disabled: false\n }\n\n static propTypes = {\n currentOptionValues: PropTypes.array,\n disabled: PropTypes.bool.isRequired,\n icon: PropTypes.string,\n onOptionClicked: PropTypes.func.isRequired,\n option: PropTypes.object.isRequired,\n presentOption: PropTypes.func.isRequired\n }\n\n setup() {\n this.useStates({\n hover: false\n })\n }\n\n render() {\n const {currentOptionValues, option} = this.p\n const {hover} = this.s\n const disabled = Boolean(option.disabled)\n const selected = Boolean(currentOptionValues?.find((currentOptionValue) => currentOptionValue == option.value))\n\n const style = useMemo(() => {\n const style = {\n paddingTop: 4,\n paddingRight: 8,\n paddingBottom: 4,\n paddingLeft: 8,\n color: \"#000\"\n }\n\n if (disabled) {\n style.cursor = \"default\"\n style.opacity = 0.6\n } else {\n style.cursor = \"pointer\"\n }\n\n if (selected) {\n style.backgroundColor = \"#80b2ff\"\n }\n\n if (hover) {\n style.backgroundColor = \"steelblue\"\n }\n\n return style\n }, [disabled, hover, selected])\n\n return (\n <Pressable\n dataSet={this.cache(\"pressableDataSet\", {\n class: \"select-option\",\n disabled,\n selected,\n value: this.props.option.value\n }, [disabled, selected, this.props.option.value])}\n onPress={this.tt.onPress}\n onPointerOver={this.tt.onPointerOver}\n onPointerOut={this.tt.onPointerOut}\n style={style}\n >\n {this.p.presentOption(option, \"option\")}\n </Pressable>\n )\n }\n\n onPointerOver = () => this.setState({hover: true})\n onPointerOut = () => this.setState({hover: false})\n onPress = (e) => this.p.onOptionClicked(e, this.props.option)\n}))\n"]}
package/link.sh ADDED
@@ -0,0 +1,8 @@
1
+ #!/bin/sh
2
+
3
+ cd node_modules
4
+ rm -rf react
5
+ ln -s ../../gratisbyggetilbud_rails/node_modules/react
6
+
7
+ yarn link conjointment
8
+ yarn link i18n-on-steroids
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "haya-select",
3
- "version": "1.0.72",
3
+ "version": "1.0.74",
4
4
  "description": "Just another select component for React Native + Web.",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -46,7 +46,7 @@
46
46
  "react": "*",
47
47
  "react-native": "*",
48
48
  "conjointment": "*",
49
- "i18n-on-steroids": "*",
50
49
  "prop-types": "*"
51
- }
50
+ },
51
+ "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
52
52
  }
package/src/config.js CHANGED
@@ -1,13 +1,23 @@
1
1
  class HayaSelectConfiguration {
2
+ _translate = (msgID) => msgID
3
+
2
4
  getBodyPortal() {
3
5
  if (!this._bodyPortal) throw new Error("bodyPortal wasn't set")
4
6
 
5
7
  return this._bodyPortal
6
8
  }
7
9
 
10
+ getTranslate() {
11
+ return this._translate
12
+ }
13
+
8
14
  setBodyPortal(newBodyPortal) {
9
15
  this._bodyPortal = newBodyPortal
10
16
  }
17
+
18
+ setTranslate(callback) {
19
+ this._translate = callback
20
+ }
11
21
  }
12
22
 
13
23
  const configuration = new HayaSelectConfiguration()
@@ -1,6 +1,7 @@
1
1
  import {anythingDifferent} from "set-state-compare/src/diff-utils"
2
+ import config from "../config.js"
2
3
  import {dig, digg} from "diggerize"
3
- import {Platform, Pressable, Text, TextInput, View} from "react-native"
4
+ import {Dimensions, Platform, Pressable, Text, TextInput, View} from "react-native"
4
5
  import React, {memo, useEffect, useRef} from "react"
5
6
  import {shapeComponent, ShapeComponent} from "set-state-compare/src/shape-component.js"
6
7
  import debounce from "debounce"
@@ -14,7 +15,6 @@ import propTypesExact from "prop-types-exact"
14
15
  import RenderHtml from "react-native-render-html"
15
16
  import {Portal} from "conjointment"
16
17
  import useEventListener from "@kaspernj/api-maker/build/use-event-listener"
17
- import useI18n from "i18n-on-steroids/src/use-i18n.mjs"
18
18
 
19
19
  const nameForComponentWithMultiple = (component) => {
20
20
  let name = nameForComponent(component)
@@ -28,12 +28,22 @@ const nameForComponentWithMultiple = (component) => {
28
28
  return name
29
29
  }
30
30
 
31
+
32
+ const t = (msgID) => {
33
+ if (msgID.startsWith(".")) {
34
+ return config.getTranslate()(`haya_select${msgID}`)
35
+ } else {
36
+ return config.getTranslate()(msgID)
37
+ }
38
+ }
39
+
31
40
  export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
32
41
  static defaultProps = {
33
42
  multiple: false,
34
43
  onBlur: null,
35
44
  onFocus: null,
36
45
  optionsAbsolute: true,
46
+ optionsPortal: true,
37
47
  optionsWidth: null,
38
48
  search: false,
39
49
  transparent: false
@@ -57,6 +67,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
57
67
  onOptionsClosed: PropTypes.func,
58
68
  options: PropTypes.oneOfType([PropTypes.array, PropTypes.func]).isRequired,
59
69
  optionsAbsolute: PropTypes.bool.isRequired,
70
+ optionsPortal: PropTypes.bool.isRequired,
60
71
  optionsWidth: PropTypes.number,
61
72
  placeholder: PropTypes.node,
62
73
  search: PropTypes.bool.isRequired,
@@ -72,10 +83,10 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
72
83
  })
73
84
 
74
85
  callOptionsPositionAboveIfOutsideScreen = false
86
+ windowWidth = Dimensions.get("window").width
87
+ windowHeight = Dimensions.get("window").height
75
88
 
76
89
  setup() {
77
- const {t} = useI18n({namespace: "haya_select"})
78
-
79
90
  if (this.props.values) {
80
91
  for (const value of this.props.values) {
81
92
  if (typeof value == "undefined") {
@@ -88,8 +99,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
88
99
  endOfSelectRef: useRef(),
89
100
  optionsContainerRef: useRef(),
90
101
  searchTextInputRef: useRef(),
91
- selectContainerRef: useRef(),
92
- t
102
+ selectContainerRef: useRef()
93
103
  })
94
104
  this.useStates({
95
105
  currentOptions: () => this.defaultCurrentOptions(),
@@ -103,12 +113,14 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
103
113
  optionsTop: undefined,
104
114
  optionsVisibility: undefined,
105
115
  optionsWidth: undefined,
106
- scrollLeft: document.documentElement.scrollLeft,
107
- scrollTop: document.documentElement.scrollTop,
116
+ scrollLeft: Platform.OS == "web" ? document.documentElement.scrollLeft : null,
117
+ scrollTop: Platform.OS == "web" ? document.documentElement.scrollTop : null,
108
118
  searchText: "",
109
119
  toggled: () => this.defaultToggled()
110
120
  })
111
121
 
122
+ useEventListener(Dimensions, "change", this.tt.onDimensionsChange)
123
+
112
124
  if (Platform.OS == "web") {
113
125
  useEventListener(window, "click", this.tt.onWindowClicked)
114
126
  useEventListener(window, "resize", this.tt.onAnythingResizedDebounced)
@@ -266,14 +278,14 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
266
278
 
267
279
  return (
268
280
  <View
269
- dataSet={{
281
+ dataSet={this.cache("rootViewDataSet", {
270
282
  class: className,
271
283
  component: "haya-select",
272
284
  id,
273
285
  opened,
274
286
  optionsPlacement,
275
287
  toggles: Boolean(toggleOptions)
276
- }}
288
+ }, [className, id, opened, optionsPlacement, Boolean(toggleOptions)])}
277
289
  style={this.stylingFor("main")}
278
290
  >
279
291
  <Pressable
@@ -292,7 +304,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
292
304
  dataSet={this.searchTextInputDataSet ||= {class: "search-text-input"}}
293
305
  onChange={this.tt.onSearchTextInputChangedDebounced}
294
306
  onChangeText={this.tt.onChangeSearchText}
295
- placeholder={this.t(".search_dot_dot_dot")}
307
+ placeholder={t(".search_dot_dot_dot")}
296
308
  ref={this.tt.searchTextInputRef}
297
309
  style={this.stylingFor("searchTextInput", this.searchTextInputStyle ||= {
298
310
  width: "100%",
@@ -307,7 +319,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
307
319
  <>
308
320
  {currentOptions.length == 0 &&
309
321
  <Text numberOfLines={1} style={this.stylingFor("nothingSelected", this.nothingSelectedStyle ||= {color: "grey"})}>
310
- {placeholder || this.t(".nothing_selected")}
322
+ {placeholder || t(".nothing_selected")}
311
323
  </Text>
312
324
  }
313
325
  {currentOptions.length == 0 && Platform.OS == "web" &&
@@ -355,7 +367,8 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
355
367
  alignItems: "center",
356
368
  justifyContent: "center",
357
369
  height: "100%",
358
- marginLeft: "auto"
370
+ marginLeft: "auto",
371
+ marginRight: 8
359
372
  })}
360
373
  >
361
374
  <FontAwesomeIcon name={opened ? "chevron-up" : "chevron-down"} style={this.stylingFor("chevron", this.chevronStyle ||= {fontSize: 12})} />
@@ -366,11 +379,16 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
366
379
  onLayout={this.tt.onEndOfSelectLayout}
367
380
  ref={endOfSelectRef}
368
381
  />
369
- {opened &&
382
+ {opened && this.p.optionsPortal &&
370
383
  <Portal>
371
384
  {this.optionsContainer()}
372
385
  </Portal>
373
386
  }
387
+ {opened && !this.p.optionsPortal &&
388
+ <View>
389
+ {this.optionsContainer()}
390
+ </View>
391
+ }
374
392
  </View>
375
393
  )
376
394
  }
@@ -447,6 +465,11 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
447
465
  this.setState({loadedOptions})
448
466
  }
449
467
 
468
+ onDimensionsChange = ({window}) => {
469
+ this.windowWidth = window.width
470
+ this.windowHeight = window.height
471
+ }
472
+
450
473
  onSelectContainerLayout = (e) => this.setState({selectContainerLayout: Object.assign({}, digg(e, "nativeEvent", "layout"))})
451
474
  onEndOfSelectLayout = (e) => this.setState({endOfSelectLayout: Object.assign({}, digg(e, "nativeEvent", "layout"))})
452
475
  onOptionsContainerLayout = (e) => this.setState({optionsContainerLayout: Object.assign({}, digg(e, "nativeEvent", "layout"))})
@@ -515,10 +538,11 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
515
538
  }
516
539
 
517
540
  setOptionsPositionAboveIfOutsideScreen() {
541
+ const {windowHeight} = this.tt
518
542
  const {optionsContainerLayout} = this.s
519
543
  const optionsTop = this.s.endOfSelectLayout.top
520
544
  const optionsTotalBottomPosition = optionsContainerLayout.height + optionsTop
521
- const windowHeightWithScroll = document.body.clientHeight + this.s.scrollTop
545
+ const windowHeightWithScroll = windowHeight + this.s.scrollTop
522
546
 
523
547
  if (windowHeightWithScroll < optionsTotalBottomPosition) {
524
548
  this.setOptionsPositionAbove()
@@ -564,8 +588,8 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
564
588
  onAnythingScrolled = () => {
565
589
  if (this.s.opened) {
566
590
  this.setState({
567
- scrollLeft: document.documentElement.scrollLeft,
568
- scrollTop: document.documentElement.scrollTop
591
+ scrollLeft: Platform.OS == "web" ? document.documentElement.scrollLeft : null,
592
+ scrollTop: Platform.OS == "web" ? document.documentElement.scrollTop : null
569
593
  })
570
594
  this.setOptionsPosition()
571
595
  }
@@ -584,8 +608,6 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
584
608
  }
585
609
 
586
610
  optionsContainer() {
587
- const {optionsContainerRef} = this.tt
588
- const {optionsAbsolute} = this.p
589
611
  const {selectContainerLayout, loadedOptions, endOfSelectLayout, optionsContainerLayout, optionsPlacement, optionsVisibility} = this.s
590
612
  let left, top
591
613
 
@@ -601,7 +623,10 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
601
623
  overflowY: "auto"
602
624
  }
603
625
 
604
- if (!optionsAbsolute) {
626
+ if (!this.p.optionsPortal) {
627
+ style.top = 0
628
+ style.left = 0
629
+ } else if (!this.p.optionsAbsolute) {
605
630
  style.left = 0
606
631
  style.bottom = 0
607
632
  } else if (optionsPlacement == "below") {
@@ -642,9 +667,9 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
642
667
 
643
668
  return (
644
669
  <View
645
- dataSet={this.cache("optionsContainerDataSet", {class: "options-container", id}, [id])}
670
+ dataSet={this.cache("optionsContainerDataSet", {class: "options-container", id, role: "dialog"}, [id])}
646
671
  onLayout={this.tt.onOptionsContainerLayout}
647
- ref={optionsContainerRef}
672
+ ref={this.tt.optionsContainerRef}
648
673
  style={style}
649
674
  >
650
675
  {loadedOptions?.map((loadedOption) =>
@@ -655,7 +680,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
655
680
  )}
656
681
  {loadedOptions?.length === 0 &&
657
682
  <View dataSet={this.noOptionsContainerDataSet ||= {class: "no-options-container"}}>
658
- <Text>{this.t(".no_options_found")}</Text>
683
+ <Text>{t(".no_options_found")}</Text>
659
684
  </View>
660
685
  }
661
686
  </View>
@@ -12,8 +12,8 @@ export default memo(shapeComponent(class OptionGroup extends ShapeComponent {
12
12
  render() {
13
13
  return (
14
14
  <View
15
- dataSet={{class: "haya-select--option-group"}}
16
- style={{
15
+ dataSet={this.rootViewDataSet ||= {class: "haya-select--option-group"}}
16
+ style={this.rootViewStyle ||= {
17
17
  paddingTop: 4,
18
18
  paddingRight: 8,
19
19
  paddingBottom: 4,
@@ -1,8 +1,8 @@
1
- import {memo} from "react"
1
+ import {shapeComponent, ShapeComponent} from "set-state-compare/src/shape-component.js"
2
+ import {memo, useMemo} from "react"
3
+ import {Pressable} from "react-native"
2
4
  import PropTypes from "prop-types"
3
5
  import React from "react"
4
- import {shapeComponent, ShapeComponent} from "set-state-compare/src/shape-component.js"
5
- import {View} from "react-native"
6
6
 
7
7
  export default memo(shapeComponent(class Option extends ShapeComponent {
8
8
  static defaultProps = {
@@ -26,50 +26,56 @@ export default memo(shapeComponent(class Option extends ShapeComponent {
26
26
 
27
27
  render() {
28
28
  const {currentOptionValues, option} = this.p
29
+ const {hover} = this.s
29
30
  const disabled = Boolean(option.disabled)
30
31
  const selected = Boolean(currentOptionValues?.find((currentOptionValue) => currentOptionValue == option.value))
31
- const style = {
32
- paddingTop: 4,
33
- paddingRight: 8,
34
- paddingBottom: 4,
35
- paddingLeft: 8,
36
- color: "#000"
37
- }
38
32
 
39
- if (disabled) {
40
- style.cursor = "default"
41
- style.opacity = 0.6
42
- } else {
43
- style.cursor = "pointer"
44
- }
33
+ const style = useMemo(() => {
34
+ const style = {
35
+ paddingTop: 4,
36
+ paddingRight: 8,
37
+ paddingBottom: 4,
38
+ paddingLeft: 8,
39
+ color: "#000"
40
+ }
41
+
42
+ if (disabled) {
43
+ style.cursor = "default"
44
+ style.opacity = 0.6
45
+ } else {
46
+ style.cursor = "pointer"
47
+ }
48
+
49
+ if (selected) {
50
+ style.backgroundColor = "#80b2ff"
51
+ }
45
52
 
46
- if (selected) {
47
- style.backgroundColor = "#80b2ff"
48
- }
53
+ if (hover) {
54
+ style.backgroundColor = "steelblue"
55
+ }
49
56
 
50
- if (this.state.hover) {
51
- style.backgroundColor = "steelblue"
52
- }
57
+ return style
58
+ }, [disabled, hover, selected])
53
59
 
54
60
  return (
55
- <View
56
- dataSet={{
61
+ <Pressable
62
+ dataSet={this.cache("pressableDataSet", {
57
63
  class: "select-option",
58
64
  disabled,
59
65
  selected,
60
66
  value: this.props.option.value
61
- }}
62
- onClick={this.tt.onClick}
67
+ }, [disabled, selected, this.props.option.value])}
68
+ onPress={this.tt.onPress}
63
69
  onPointerOver={this.tt.onPointerOver}
64
70
  onPointerOut={this.tt.onPointerOut}
65
71
  style={style}
66
72
  >
67
73
  {this.p.presentOption(option, "option")}
68
- </View>
74
+ </Pressable>
69
75
  )
70
76
  }
71
77
 
72
- onClick = (e) => this.p.onOptionClicked(e, this.props.option)
73
78
  onPointerOver = () => this.setState({hover: true})
74
79
  onPointerOut = () => this.setState({hover: false})
80
+ onPress = (e) => this.p.onOptionClicked(e, this.props.option)
75
81
  }))