haya-select 1.0.73 → 1.0.75

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,2 @@
1
- export default configuration;
2
- declare const configuration: HayaSelectConfiguration;
3
- declare class HayaSelectConfiguration {
4
- getBodyPortal(): any;
5
- setBodyPortal(newBodyPortal: any): void;
6
- _bodyPortal: any;
7
- }
1
+ export {};
8
2
  //# 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":""}
package/build/config.js CHANGED
@@ -1,13 +1,31 @@
1
+ const shared = {};
2
+ const t = (msgID) => {
3
+ if (!shared._translateWarning) {
4
+ shared._translateWarning = true;
5
+ console.log("HayaSelect: Translate method not set");
6
+ }
7
+ return msgID;
8
+ };
9
+ const useTranslateFallback = () => ({ t });
1
10
  class HayaSelectConfiguration {
11
+ _useTranslate = useTranslateFallback;
2
12
  getBodyPortal() {
3
13
  if (!this._bodyPortal)
4
14
  throw new Error("bodyPortal wasn't set");
5
15
  return this._bodyPortal;
6
16
  }
17
+ getUseTranslate() {
18
+ return this._useTranslate;
19
+ }
7
20
  setBodyPortal(newBodyPortal) {
8
21
  this._bodyPortal = newBodyPortal;
9
22
  }
23
+ setUseTranslate(callback) {
24
+ this._useTranslate = callback;
25
+ }
26
+ }
27
+ if (!globalThis.hayaSelectConfig) {
28
+ globalThis.hayaSelectConfig = new HayaSelectConfiguration();
10
29
  }
11
- const configuration = new HayaSelectConfiguration();
12
- export default configuration;
30
+ export default globalThis.hayaSelectConfig;
13
31
  //# sourceMappingURL=config.js.map
@@ -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,MAAM,GAAG,EAAE,CAAA;AAEjB,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE;IAClB,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC9B,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAA;QAC/B,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAA;IACrD,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAA;AAExC,MAAM,uBAAuB;IAC3B,aAAa,GAAG,oBAAoB,CAAA;IAEpC,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,eAAe;QACb,OAAO,IAAI,CAAC,aAAa,CAAA;IAC3B,CAAC;IAED,aAAa,CAAC,aAAa;QACzB,IAAI,CAAC,WAAW,GAAG,aAAa,CAAA;IAClC,CAAC;IAED,eAAe,CAAC,QAAQ;QACtB,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAA;IAC/B,CAAC;CACF;AAED,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC;IACjC,UAAU,CAAC,gBAAgB,GAAG,IAAI,uBAAuB,EAAE,CAAA;AAC7D,CAAC;AAED,eAAe,UAAU,CAAC,gBAAgB,CAAA","sourcesContent":["const shared = {}\n\nconst t = (msgID) => {\n if (!shared._translateWarning) {\n shared._translateWarning = true\n console.log(\"HayaSelect: Translate method not set\")\n }\n\n return msgID\n}\n\nconst useTranslateFallback = () => ({t})\n\nclass HayaSelectConfiguration {\n _useTranslate = useTranslateFallback\n\n getBodyPortal() {\n if (!this._bodyPortal) throw new Error(\"bodyPortal wasn't set\")\n\n return this._bodyPortal\n }\n\n getUseTranslate() {\n return this._useTranslate\n }\n\n setBodyPortal(newBodyPortal) {\n this._bodyPortal = newBodyPortal\n }\n\n setUseTranslate(callback) {\n this._useTranslate = callback\n }\n}\n\nif (!globalThis.hayaSelectConfig) {\n globalThis.hayaSelectConfig = new HayaSelectConfiguration()\n}\n\nexport default globalThis.hayaSelectConfig\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();
@@ -29,6 +29,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
29
29
  onBlur: null,
30
30
  onFocus: null,
31
31
  optionsAbsolute: true,
32
+ optionsPortal: true,
32
33
  optionsWidth: null,
33
34
  search: false,
34
35
  transparent: false
@@ -51,6 +52,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
51
52
  onOptionsClosed: PropTypes.func,
52
53
  options: PropTypes.oneOfType([PropTypes.array, PropTypes.func]).isRequired,
53
54
  optionsAbsolute: PropTypes.bool.isRequired,
55
+ optionsPortal: PropTypes.bool.isRequired,
54
56
  optionsWidth: PropTypes.number,
55
57
  placeholder: PropTypes.node,
56
58
  search: PropTypes.bool.isRequired,
@@ -65,8 +67,10 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
65
67
  values: PropTypes.array
66
68
  });
67
69
  callOptionsPositionAboveIfOutsideScreen = false;
70
+ windowWidth = Dimensions.get("window").width;
71
+ windowHeight = Dimensions.get("window").height;
68
72
  setup() {
69
- const { t } = useI18n({ namespace: "haya_select" });
73
+ const { t } = config.getUseTranslate()();
70
74
  if (this.props.values) {
71
75
  for (const value of this.props.values) {
72
76
  if (typeof value == "undefined") {
@@ -93,11 +97,12 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
93
97
  optionsTop: undefined,
94
98
  optionsVisibility: undefined,
95
99
  optionsWidth: undefined,
96
- scrollLeft: document.documentElement.scrollLeft,
97
- scrollTop: document.documentElement.scrollTop,
100
+ scrollLeft: Platform.OS == "web" ? document.documentElement.scrollLeft : null,
101
+ scrollTop: Platform.OS == "web" ? document.documentElement.scrollTop : null,
98
102
  searchText: "",
99
103
  toggled: () => this.defaultToggled()
100
104
  });
105
+ useEventListener(Dimensions, "change", this.tt.onDimensionsChange);
101
106
  if (Platform.OS == "web") {
102
107
  useEventListener(window, "click", this.tt.onWindowClicked);
103
108
  useEventListener(window, "resize", this.tt.onAnythingResizedDebounced);
@@ -116,6 +121,14 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
116
121
  }
117
122
  }, [this.props.values]);
118
123
  }
124
+ translate(msgID) {
125
+ if (msgID.startsWith(".")) {
126
+ return this.t(`haya_select${msgID}`);
127
+ }
128
+ else {
129
+ return this.t(msgID);
130
+ }
131
+ }
119
132
  defaultCurrentOptions() {
120
133
  const { defaultValue, defaultValues, values } = this.props;
121
134
  const { options } = this.p;
@@ -206,7 +219,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
206
219
  paddingTop: 5,
207
220
  paddingBottom: 5,
208
221
  paddingLeft: 5
209
- });
222
+ }, [transparent]);
210
223
  if (opened) {
211
224
  // Prevent select from changing size once the content is replaced with search text once opened
212
225
  selectContainerStyleActual.height = this.s.height;
@@ -225,18 +238,18 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
225
238
  delete selectContainerStyleActual.borderRadius;
226
239
  }
227
240
  }
228
- return (React.createElement(View, { dataSet: {
241
+ return (React.createElement(View, { dataSet: this.cache("rootViewDataSet", {
229
242
  class: className,
230
243
  component: "haya-select",
231
244
  id,
232
245
  opened,
233
246
  optionsPlacement,
234
247
  toggles: Boolean(toggleOptions)
235
- }, style: this.stylingFor("main") },
248
+ }, [className, id, opened, optionsPlacement, Boolean(toggleOptions)]), style: this.stylingFor("main") },
236
249
  React.createElement(Pressable, { dataSet: this.selectContainerDataSet ||= { class: "select-container" }, onLayout: this.tt.onSelectContainerLayout, onPress: this.tt.onSelectClicked, ref: this.tt.selectContainerRef, style: selectContainerStyleActual },
237
250
  React.createElement(View, { dataSet: this.currentSelectedDataSet ||= { class: "current-selected" }, style: this.stylingFor("currentSelected", this.currentSelectedStyle ||= { width: "calc(100% - 25px)", flexWrap: "wrap", overflow: "hidden" }) },
238
251
  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 ||= {
252
+ React.createElement(TextInput, { dataSet: this.searchTextInputDataSet ||= { class: "search-text-input" }, onChange: this.tt.onSearchTextInputChangedDebounced, onChangeText: this.tt.onChangeSearchText, placeholder: this.translate(".search_dot_dot_dot"), ref: this.tt.searchTextInputRef, style: this.stylingFor("searchTextInput", this.searchTextInputStyle ||= {
240
253
  width: "100%",
241
254
  border: 0,
242
255
  outline: "none",
@@ -245,7 +258,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
245
258
  !opened &&
246
259
  React.createElement(React.Fragment, null,
247
260
  currentOptions.length == 0 &&
248
- React.createElement(Text, { numberOfLines: 1, style: this.stylingFor("nothingSelected", this.nothingSelectedStyle ||= { color: "grey" }) }, placeholder || this.t(".nothing_selected")),
261
+ React.createElement(Text, { numberOfLines: 1, style: this.stylingFor("nothingSelected", this.nothingSelectedStyle ||= { color: "grey" }) }, placeholder || this.translate(".nothing_selected")),
249
262
  currentOptions.length == 0 && Platform.OS == "web" &&
250
263
  React.createElement("input", { id: idForComponent(this), name: nameForComponentWithMultiple(this), type: "hidden", value: "" }),
251
264
  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 }) },
@@ -266,8 +279,10 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
266
279
  }) },
267
280
  React.createElement(FontAwesomeIcon, { name: opened ? "chevron-up" : "chevron-down", style: this.stylingFor("chevron", this.chevronStyle ||= { fontSize: 12 }) }))),
268
281
  React.createElement(View, { dataSet: this.endOfSelectDataSet ||= { class: "end-of-select" }, onLayout: this.tt.onEndOfSelectLayout, ref: endOfSelectRef }),
269
- opened &&
270
- React.createElement(Portal, null, this.optionsContainer())));
282
+ opened && this.p.optionsPortal &&
283
+ React.createElement(Portal, null, this.optionsContainer()),
284
+ opened && !this.p.optionsPortal &&
285
+ React.createElement(View, null, this.optionsContainer())));
271
286
  }
272
287
  defaultValues() {
273
288
  const { attribute, defaultValue, defaultValues, defaultValuesFromOptions, model } = this.props;
@@ -319,6 +334,10 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
319
334
  const loadedOptions = options.filter(({ text }) => !lowerSearchValue || text?.toLowerCase()?.includes(lowerSearchValue));
320
335
  this.setState({ loadedOptions });
321
336
  }
337
+ onDimensionsChange = ({ window }) => {
338
+ this.windowWidth = window.width;
339
+ this.windowHeight = window.height;
340
+ };
322
341
  onSelectContainerLayout = (e) => this.setState({ selectContainerLayout: Object.assign({}, digg(e, "nativeEvent", "layout")) });
323
342
  onEndOfSelectLayout = (e) => this.setState({ endOfSelectLayout: Object.assign({}, digg(e, "nativeEvent", "layout")) });
324
343
  onOptionsContainerLayout = (e) => this.setState({ optionsContainerLayout: Object.assign({}, digg(e, "nativeEvent", "layout")) });
@@ -373,10 +392,11 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
373
392
  this.setOptionsPositionBelow();
374
393
  }
375
394
  setOptionsPositionAboveIfOutsideScreen() {
395
+ const { windowHeight } = this.tt;
376
396
  const { optionsContainerLayout } = this.s;
377
397
  const optionsTop = this.s.endOfSelectLayout.top;
378
398
  const optionsTotalBottomPosition = optionsContainerLayout.height + optionsTop;
379
- const windowHeightWithScroll = document.body.clientHeight + this.s.scrollTop;
399
+ const windowHeightWithScroll = windowHeight + this.s.scrollTop;
380
400
  if (windowHeightWithScroll < optionsTotalBottomPosition) {
381
401
  this.setOptionsPositionAbove();
382
402
  }
@@ -410,8 +430,8 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
410
430
  onAnythingScrolled = () => {
411
431
  if (this.s.opened) {
412
432
  this.setState({
413
- scrollLeft: document.documentElement.scrollLeft,
414
- scrollTop: document.documentElement.scrollTop
433
+ scrollLeft: Platform.OS == "web" ? document.documentElement.scrollLeft : null,
434
+ scrollTop: Platform.OS == "web" ? document.documentElement.scrollTop : null
415
435
  });
416
436
  this.setOptionsPosition();
417
437
  }
@@ -426,8 +446,6 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
426
446
  }
427
447
  };
428
448
  optionsContainer() {
429
- const { optionsContainerRef } = this.tt;
430
- const { optionsAbsolute } = this.p;
431
449
  const { selectContainerLayout, loadedOptions, endOfSelectLayout, optionsContainerLayout, optionsPlacement, optionsVisibility } = this.s;
432
450
  let left, top;
433
451
  let style = {
@@ -441,7 +459,11 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
441
459
  maxHeight: 300,
442
460
  overflowY: "auto"
443
461
  };
444
- if (!optionsAbsolute) {
462
+ if (!this.p.optionsPortal) {
463
+ style.top = 0;
464
+ style.left = 0;
465
+ }
466
+ else if (!this.p.optionsAbsolute) {
445
467
  style.left = 0;
446
468
  style.bottom = 0;
447
469
  }
@@ -476,16 +498,16 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
476
498
  else {
477
499
  throw new Error(`Unkonwn options placement: ${optionsPlacement}`);
478
500
  }
479
- style = this.stylingFor("optionsContainer", style);
501
+ style = this.stylingFor("optionsContainer", style, [left, top, style.visibility, style.width]);
480
502
  const id = idForComponent(this);
481
- return (React.createElement(View, { dataSet: this.cache("optionsContainerDataSet", { class: "options-container", id }, [id]), onLayout: this.tt.onOptionsContainerLayout, ref: optionsContainerRef, style: style },
503
+ 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 },
482
504
  loadedOptions?.map((loadedOption) => this.hayaSelectOption({
483
505
  key: loadedOption.key || `loaded-option-${loadedOption.value}`,
484
506
  loadedOption
485
507
  })),
486
508
  loadedOptions?.length === 0 &&
487
509
  React.createElement(View, { dataSet: this.noOptionsContainerDataSet ||= { class: "no-options-container" } },
488
- React.createElement(Text, null, this.t(".no_options_found")))));
510
+ React.createElement(Text, null, this.translate(".no_options_found")))));
489
511
  }
490
512
  onOptionClicked = (event, loadedOption) => {
491
513
  event.preventDefault();
@@ -562,14 +584,14 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
562
584
  this.closeOptions();
563
585
  this.setState(newState);
564
586
  };
565
- stylingFor(stylingName, style = {}) {
587
+ stylingFor(stylingName, style = {}, caches = []) {
566
588
  let customStyling = dig(this, "props", "styles", stylingName);
567
589
  if (typeof customStyling == "function")
568
590
  customStyling = customStyling({ state: this.state, style });
569
591
  if (customStyling) {
570
592
  return Object.assign(style, customStyling);
571
593
  }
572
- return style;
594
+ return this.cache(`stylingFor-${stylingName}`, style, caches);
573
595
  }
574
596
  iconForOption(option) {
575
597
  const { toggleOptions } = this.props || {};
@@ -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;wBAClB,WAAW,EAAE,CAAC;qBACf,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 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 &&\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\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 const {t} = config.getUseTranslate()()\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: 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 translate(msgID) {\n if (msgID.startsWith(\".\")) {\n return this.t(`haya_select${msgID}`)\n } else {\n return this.t(msgID)\n }\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 }, [transparent])\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={this.translate(\".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.translate(\".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, [left, top, style.visibility, style.width])\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>{this.translate(\".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 = {}, caches = []) {\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 this.cache(`stylingFor-${stylingName}`, style, caches)\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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "haya-select",
3
- "version": "1.0.73",
3
+ "version": "1.0.75",
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,15 +1,40 @@
1
+ const shared = {}
2
+
3
+ const t = (msgID) => {
4
+ if (!shared._translateWarning) {
5
+ shared._translateWarning = true
6
+ console.log("HayaSelect: Translate method not set")
7
+ }
8
+
9
+ return msgID
10
+ }
11
+
12
+ const useTranslateFallback = () => ({t})
13
+
1
14
  class HayaSelectConfiguration {
15
+ _useTranslate = useTranslateFallback
16
+
2
17
  getBodyPortal() {
3
18
  if (!this._bodyPortal) throw new Error("bodyPortal wasn't set")
4
19
 
5
20
  return this._bodyPortal
6
21
  }
7
22
 
23
+ getUseTranslate() {
24
+ return this._useTranslate
25
+ }
26
+
8
27
  setBodyPortal(newBodyPortal) {
9
28
  this._bodyPortal = newBodyPortal
10
29
  }
30
+
31
+ setUseTranslate(callback) {
32
+ this._useTranslate = callback
33
+ }
11
34
  }
12
35
 
13
- const configuration = new HayaSelectConfiguration()
36
+ if (!globalThis.hayaSelectConfig) {
37
+ globalThis.hayaSelectConfig = new HayaSelectConfiguration()
38
+ }
14
39
 
15
- export default configuration
40
+ export default globalThis.hayaSelectConfig
@@ -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)
@@ -34,6 +34,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
34
34
  onBlur: null,
35
35
  onFocus: null,
36
36
  optionsAbsolute: true,
37
+ optionsPortal: true,
37
38
  optionsWidth: null,
38
39
  search: false,
39
40
  transparent: false
@@ -57,6 +58,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
57
58
  onOptionsClosed: PropTypes.func,
58
59
  options: PropTypes.oneOfType([PropTypes.array, PropTypes.func]).isRequired,
59
60
  optionsAbsolute: PropTypes.bool.isRequired,
61
+ optionsPortal: PropTypes.bool.isRequired,
60
62
  optionsWidth: PropTypes.number,
61
63
  placeholder: PropTypes.node,
62
64
  search: PropTypes.bool.isRequired,
@@ -72,9 +74,11 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
72
74
  })
73
75
 
74
76
  callOptionsPositionAboveIfOutsideScreen = false
77
+ windowWidth = Dimensions.get("window").width
78
+ windowHeight = Dimensions.get("window").height
75
79
 
76
80
  setup() {
77
- const {t} = useI18n({namespace: "haya_select"})
81
+ const {t} = config.getUseTranslate()()
78
82
 
79
83
  if (this.props.values) {
80
84
  for (const value of this.props.values) {
@@ -103,12 +107,14 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
103
107
  optionsTop: undefined,
104
108
  optionsVisibility: undefined,
105
109
  optionsWidth: undefined,
106
- scrollLeft: document.documentElement.scrollLeft,
107
- scrollTop: document.documentElement.scrollTop,
110
+ scrollLeft: Platform.OS == "web" ? document.documentElement.scrollLeft : null,
111
+ scrollTop: Platform.OS == "web" ? document.documentElement.scrollTop : null,
108
112
  searchText: "",
109
113
  toggled: () => this.defaultToggled()
110
114
  })
111
115
 
116
+ useEventListener(Dimensions, "change", this.tt.onDimensionsChange)
117
+
112
118
  if (Platform.OS == "web") {
113
119
  useEventListener(window, "click", this.tt.onWindowClicked)
114
120
  useEventListener(window, "resize", this.tt.onAnythingResizedDebounced)
@@ -131,6 +137,14 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
131
137
  }, [this.props.values])
132
138
  }
133
139
 
140
+ translate(msgID) {
141
+ if (msgID.startsWith(".")) {
142
+ return this.t(`haya_select${msgID}`)
143
+ } else {
144
+ return this.t(msgID)
145
+ }
146
+ }
147
+
134
148
  defaultCurrentOptions() {
135
149
  const {defaultValue, defaultValues, values} = this.props
136
150
  const {options} = this.p
@@ -241,7 +255,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
241
255
  paddingTop: 5,
242
256
  paddingBottom: 5,
243
257
  paddingLeft: 5
244
- })
258
+ }, [transparent])
245
259
 
246
260
  if (opened) {
247
261
  // Prevent select from changing size once the content is replaced with search text once opened
@@ -266,14 +280,14 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
266
280
 
267
281
  return (
268
282
  <View
269
- dataSet={{
283
+ dataSet={this.cache("rootViewDataSet", {
270
284
  class: className,
271
285
  component: "haya-select",
272
286
  id,
273
287
  opened,
274
288
  optionsPlacement,
275
289
  toggles: Boolean(toggleOptions)
276
- }}
290
+ }, [className, id, opened, optionsPlacement, Boolean(toggleOptions)])}
277
291
  style={this.stylingFor("main")}
278
292
  >
279
293
  <Pressable
@@ -292,7 +306,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
292
306
  dataSet={this.searchTextInputDataSet ||= {class: "search-text-input"}}
293
307
  onChange={this.tt.onSearchTextInputChangedDebounced}
294
308
  onChangeText={this.tt.onChangeSearchText}
295
- placeholder={this.t(".search_dot_dot_dot")}
309
+ placeholder={this.translate(".search_dot_dot_dot")}
296
310
  ref={this.tt.searchTextInputRef}
297
311
  style={this.stylingFor("searchTextInput", this.searchTextInputStyle ||= {
298
312
  width: "100%",
@@ -307,7 +321,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
307
321
  <>
308
322
  {currentOptions.length == 0 &&
309
323
  <Text numberOfLines={1} style={this.stylingFor("nothingSelected", this.nothingSelectedStyle ||= {color: "grey"})}>
310
- {placeholder || this.t(".nothing_selected")}
324
+ {placeholder || this.translate(".nothing_selected")}
311
325
  </Text>
312
326
  }
313
327
  {currentOptions.length == 0 && Platform.OS == "web" &&
@@ -367,11 +381,16 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
367
381
  onLayout={this.tt.onEndOfSelectLayout}
368
382
  ref={endOfSelectRef}
369
383
  />
370
- {opened &&
384
+ {opened && this.p.optionsPortal &&
371
385
  <Portal>
372
386
  {this.optionsContainer()}
373
387
  </Portal>
374
388
  }
389
+ {opened && !this.p.optionsPortal &&
390
+ <View>
391
+ {this.optionsContainer()}
392
+ </View>
393
+ }
375
394
  </View>
376
395
  )
377
396
  }
@@ -448,6 +467,11 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
448
467
  this.setState({loadedOptions})
449
468
  }
450
469
 
470
+ onDimensionsChange = ({window}) => {
471
+ this.windowWidth = window.width
472
+ this.windowHeight = window.height
473
+ }
474
+
451
475
  onSelectContainerLayout = (e) => this.setState({selectContainerLayout: Object.assign({}, digg(e, "nativeEvent", "layout"))})
452
476
  onEndOfSelectLayout = (e) => this.setState({endOfSelectLayout: Object.assign({}, digg(e, "nativeEvent", "layout"))})
453
477
  onOptionsContainerLayout = (e) => this.setState({optionsContainerLayout: Object.assign({}, digg(e, "nativeEvent", "layout"))})
@@ -516,10 +540,11 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
516
540
  }
517
541
 
518
542
  setOptionsPositionAboveIfOutsideScreen() {
543
+ const {windowHeight} = this.tt
519
544
  const {optionsContainerLayout} = this.s
520
545
  const optionsTop = this.s.endOfSelectLayout.top
521
546
  const optionsTotalBottomPosition = optionsContainerLayout.height + optionsTop
522
- const windowHeightWithScroll = document.body.clientHeight + this.s.scrollTop
547
+ const windowHeightWithScroll = windowHeight + this.s.scrollTop
523
548
 
524
549
  if (windowHeightWithScroll < optionsTotalBottomPosition) {
525
550
  this.setOptionsPositionAbove()
@@ -565,8 +590,8 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
565
590
  onAnythingScrolled = () => {
566
591
  if (this.s.opened) {
567
592
  this.setState({
568
- scrollLeft: document.documentElement.scrollLeft,
569
- scrollTop: document.documentElement.scrollTop
593
+ scrollLeft: Platform.OS == "web" ? document.documentElement.scrollLeft : null,
594
+ scrollTop: Platform.OS == "web" ? document.documentElement.scrollTop : null
570
595
  })
571
596
  this.setOptionsPosition()
572
597
  }
@@ -585,8 +610,6 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
585
610
  }
586
611
 
587
612
  optionsContainer() {
588
- const {optionsContainerRef} = this.tt
589
- const {optionsAbsolute} = this.p
590
613
  const {selectContainerLayout, loadedOptions, endOfSelectLayout, optionsContainerLayout, optionsPlacement, optionsVisibility} = this.s
591
614
  let left, top
592
615
 
@@ -602,7 +625,10 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
602
625
  overflowY: "auto"
603
626
  }
604
627
 
605
- if (!optionsAbsolute) {
628
+ if (!this.p.optionsPortal) {
629
+ style.top = 0
630
+ style.left = 0
631
+ } else if (!this.p.optionsAbsolute) {
606
632
  style.left = 0
607
633
  style.bottom = 0
608
634
  } else if (optionsPlacement == "below") {
@@ -637,15 +663,15 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
637
663
  throw new Error(`Unkonwn options placement: ${optionsPlacement}`)
638
664
  }
639
665
 
640
- style = this.stylingFor("optionsContainer", style)
666
+ style = this.stylingFor("optionsContainer", style, [left, top, style.visibility, style.width])
641
667
 
642
668
  const id = idForComponent(this)
643
669
 
644
670
  return (
645
671
  <View
646
- dataSet={this.cache("optionsContainerDataSet", {class: "options-container", id}, [id])}
672
+ dataSet={this.cache("optionsContainerDataSet", {class: "options-container", id, role: "dialog"}, [id])}
647
673
  onLayout={this.tt.onOptionsContainerLayout}
648
- ref={optionsContainerRef}
674
+ ref={this.tt.optionsContainerRef}
649
675
  style={style}
650
676
  >
651
677
  {loadedOptions?.map((loadedOption) =>
@@ -656,7 +682,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
656
682
  )}
657
683
  {loadedOptions?.length === 0 &&
658
684
  <View dataSet={this.noOptionsContainerDataSet ||= {class: "no-options-container"}}>
659
- <Text>{this.t(".no_options_found")}</Text>
685
+ <Text>{this.translate(".no_options_found")}</Text>
660
686
  </View>
661
687
  }
662
688
  </View>
@@ -745,7 +771,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
745
771
  this.setState(newState)
746
772
  }
747
773
 
748
- stylingFor(stylingName, style = {}) {
774
+ stylingFor(stylingName, style = {}, caches = []) {
749
775
  let customStyling = dig(this, "props", "styles", stylingName)
750
776
 
751
777
  if (typeof customStyling == "function") customStyling = customStyling({state: this.state, style})
@@ -754,7 +780,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
754
780
  return Object.assign(style, customStyling)
755
781
  }
756
782
 
757
- return style
783
+ return this.cache(`stylingFor-${stylingName}`, style, caches)
758
784
  }
759
785
 
760
786
  iconForOption(option) {
@@ -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
  }))