@shoper/phoenix_design_system 1.1.8 → 1.2.0-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/build/cjs/packages/phoenix/src/components/form/file_picker/file/file.js +67 -0
  2. package/build/cjs/packages/phoenix/src/components/form/file_picker/file/file.js.map +1 -0
  3. package/build/cjs/packages/phoenix/src/components/form/file_picker/file/file_model.js +18 -0
  4. package/build/cjs/packages/phoenix/src/components/form/file_picker/file/file_model.js.map +1 -0
  5. package/build/cjs/packages/phoenix/src/components/form/file_picker/file_picker.js +177 -0
  6. package/build/cjs/packages/phoenix/src/components/form/file_picker/file_picker.js.map +1 -0
  7. package/build/cjs/packages/phoenix/src/components/form/file_picker/file_picker_constants.js +37 -0
  8. package/build/cjs/packages/phoenix/src/components/form/file_picker/file_picker_constants.js.map +1 -0
  9. package/build/cjs/packages/phoenix/src/components/form/select/components/option/select_option.js +6 -5
  10. package/build/cjs/packages/phoenix/src/components/form/select/components/option/select_option.js.map +1 -1
  11. package/build/cjs/packages/phoenix/src/components/form/select/controllers/base_select_controller.js +13 -13
  12. package/build/cjs/packages/phoenix/src/components/form/select/controllers/multi_select_controller.js +6 -6
  13. package/build/cjs/packages/phoenix/src/components/form/select/controllers/select_controller.js +2 -2
  14. package/build/cjs/packages/phoenix/src/components/form/select/select.js +23 -79
  15. package/build/cjs/packages/phoenix/src/components/form/select/select.js.map +1 -1
  16. package/build/cjs/packages/phoenix/src/components/form/select/select_constants.js +0 -5
  17. package/build/cjs/packages/phoenix/src/components/form/select/select_constants.js.map +1 -1
  18. package/build/cjs/packages/phoenix/src/components/form/select/select_utils.js +0 -6
  19. package/build/cjs/packages/phoenix/src/components/form/select/select_utils.js.map +1 -1
  20. package/build/cjs/packages/phoenix/src/components/modal/modal.js +1 -1
  21. package/build/cjs/packages/phoenix/src/index.js +14 -0
  22. package/build/cjs/packages/phoenix/src/index.js.map +1 -1
  23. package/build/esm/packages/phoenix/src/components/form/file_picker/file/file.d.ts +12 -0
  24. package/build/esm/packages/phoenix/src/components/form/file_picker/file/file.js +65 -0
  25. package/build/esm/packages/phoenix/src/components/form/file_picker/file/file.js.map +1 -0
  26. package/build/esm/packages/phoenix/src/components/form/file_picker/file/file_model.d.ts +9 -0
  27. package/build/esm/packages/phoenix/src/components/form/file_picker/file/file_model.js +14 -0
  28. package/build/esm/packages/phoenix/src/components/form/file_picker/file/file_model.js.map +1 -0
  29. package/build/esm/packages/phoenix/src/components/form/file_picker/file_picker.d.ts +31 -0
  30. package/build/esm/packages/phoenix/src/components/form/file_picker/file_picker.js +175 -0
  31. package/build/esm/packages/phoenix/src/components/form/file_picker/file_picker.js.map +1 -0
  32. package/build/esm/packages/phoenix/src/components/form/file_picker/file_picker_constants.d.ts +29 -0
  33. package/build/esm/packages/phoenix/src/components/form/file_picker/file_picker_constants.js +29 -0
  34. package/build/esm/packages/phoenix/src/components/form/file_picker/file_picker_constants.js.map +1 -0
  35. package/build/esm/packages/phoenix/src/components/form/file_picker/file_picker_label.d.ts +13 -0
  36. package/build/esm/packages/phoenix/src/components/form/file_picker/file_picker_label.js +55 -0
  37. package/build/esm/packages/phoenix/src/components/form/file_picker/file_picker_label.js.map +1 -0
  38. package/build/esm/packages/phoenix/src/components/form/select/components/option/select_option.d.ts +1 -2
  39. package/build/esm/packages/phoenix/src/components/form/select/components/option/select_option.js +6 -5
  40. package/build/esm/packages/phoenix/src/components/form/select/components/option/select_option.js.map +1 -1
  41. package/build/esm/packages/phoenix/src/components/form/select/controllers/base_select_controller.d.ts +10 -10
  42. package/build/esm/packages/phoenix/src/components/form/select/controllers/base_select_controller.js +13 -13
  43. package/build/esm/packages/phoenix/src/components/form/select/controllers/multi_select_controller.d.ts +3 -3
  44. package/build/esm/packages/phoenix/src/components/form/select/controllers/multi_select_controller.js +6 -6
  45. package/build/esm/packages/phoenix/src/components/form/select/controllers/select_controller.d.ts +1 -1
  46. package/build/esm/packages/phoenix/src/components/form/select/controllers/select_controller.js +2 -2
  47. package/build/esm/packages/phoenix/src/components/form/select/controllers/select_controllers_types.d.ts +9 -9
  48. package/build/esm/packages/phoenix/src/components/form/select/select.d.ts +3 -16
  49. package/build/esm/packages/phoenix/src/components/form/select/select.js +24 -80
  50. package/build/esm/packages/phoenix/src/components/form/select/select.js.map +1 -1
  51. package/build/esm/packages/phoenix/src/components/form/select/select_constants.d.ts +0 -4
  52. package/build/esm/packages/phoenix/src/components/form/select/select_constants.js +1 -5
  53. package/build/esm/packages/phoenix/src/components/form/select/select_constants.js.map +1 -1
  54. package/build/esm/packages/phoenix/src/components/form/select/select_utils.d.ts +0 -2
  55. package/build/esm/packages/phoenix/src/components/form/select/select_utils.js +0 -6
  56. package/build/esm/packages/phoenix/src/components/form/select/select_utils.js.map +1 -1
  57. package/build/esm/packages/phoenix/src/components/modal/modal.js +1 -1
  58. package/build/esm/packages/phoenix/src/index.d.ts +2 -0
  59. package/build/esm/packages/phoenix/src/index.js +2 -0
  60. package/build/esm/packages/phoenix/src/index.js.map +1 -1
  61. package/package.json +2 -2
  62. package/build/esm/packages/phoenix/src/components/form/select/select_types.d.ts +0 -2
  63. package/build/esm/packages/phoenix/src/components/form/select/select_types.js +0 -2
  64. package/build/esm/packages/phoenix/src/components/form/select/select_types.js.map +0 -1
@@ -0,0 +1,29 @@
1
+ export declare const FILE_ITEM_CSS_CLASSES: {
2
+ readonly file: "file";
3
+ readonly fileName: "file__name";
4
+ readonly fileRemoveButton: "file__remove-button";
5
+ };
6
+ export declare const FILE_ITEM_EVENT_NAMES: {
7
+ readonly removed: "fileItemRemoved";
8
+ };
9
+ export declare type TFileItemConstructorOptions = {
10
+ name: string;
11
+ containerId: string;
12
+ removeButtonText: string;
13
+ removeButtonIconName?: string;
14
+ };
15
+ export declare const FILE_PICKER_CONTROL_CSS_CLASSES: {
16
+ readonly filePicker: "file-picker";
17
+ readonly filePickerDisabled: "file-picker_disabled";
18
+ readonly filePickerRequired: "file-picker_required";
19
+ readonly filePickerError: "file-picker_error";
20
+ readonly filePickerHasValue: "file-picker_has-value";
21
+ readonly filePickerInput: "file-picker__input";
22
+ readonly filePickerLabel: "file-picker__label";
23
+ };
24
+ export declare const FILE_PICKER_LABEL_EVENT_NAMES: {
25
+ readonly filePickerLabelClicked: "filePickerLabelClicked";
26
+ };
27
+ export declare const FILE_PICKER_ICON_CSS_CLASSES: {
28
+ readonly filePickerIcon: "file-picker-icon";
29
+ };
@@ -0,0 +1,29 @@
1
+ const baseFileItemClass = 'file';
2
+ const FILE_ITEM_CSS_CLASSES = {
3
+ file: baseFileItemClass,
4
+ fileName: `${baseFileItemClass}__name`,
5
+ fileRemoveButton: `${baseFileItemClass}__remove-button`
6
+ };
7
+ const FILE_ITEM_EVENT_NAMES = {
8
+ removed: 'fileItemRemoved'
9
+ };
10
+ const baseFilePickerControlClass = 'file-picker';
11
+ const FILE_PICKER_CONTROL_CSS_CLASSES = {
12
+ filePicker: baseFilePickerControlClass,
13
+ filePickerDisabled: `${baseFilePickerControlClass}_disabled`,
14
+ filePickerRequired: `${baseFilePickerControlClass}_required`,
15
+ filePickerError: `${baseFilePickerControlClass}_error`,
16
+ filePickerHasValue: `${baseFilePickerControlClass}_has-value`,
17
+ filePickerInput: `${baseFilePickerControlClass}__input`,
18
+ filePickerLabel: `${baseFilePickerControlClass}__label`
19
+ };
20
+ const FILE_PICKER_LABEL_EVENT_NAMES = {
21
+ filePickerLabelClicked: 'filePickerLabelClicked'
22
+ };
23
+ const baseFilePickerIconClass = 'file-picker-icon';
24
+ const FILE_PICKER_ICON_CSS_CLASSES = {
25
+ filePickerIcon: baseFilePickerIconClass
26
+ };
27
+
28
+ export { FILE_ITEM_CSS_CLASSES, FILE_ITEM_EVENT_NAMES, FILE_PICKER_CONTROL_CSS_CLASSES, FILE_PICKER_ICON_CSS_CLASSES, FILE_PICKER_LABEL_EVENT_NAMES };
29
+ //# sourceMappingURL=file_picker_constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -0,0 +1,13 @@
1
+ import { TemplateResult } from 'lit';
2
+ import { PhoenixLightLitElement } from "../../../core/phoenix_light_lit_element/phoenix_light_lit_element";
3
+ export declare class HFilePickerLabel extends PhoenixLightLitElement {
4
+ controlId: string;
5
+ labelText: string;
6
+ labelIconName: string;
7
+ private _btnController;
8
+ constructor();
9
+ connectedCallback(): void;
10
+ disconnectedCallback(): void;
11
+ protected render(): TemplateResult;
12
+ private _dispatchClickEvent;
13
+ }
@@ -0,0 +1,55 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { FILE_PICKER_CONTROL_CSS_CLASSES, FILE_PICKER_ICON_CSS_CLASSES, FILE_PICKER_LABEL_EVENT_NAMES } from './file_picker_constants';
3
+ import { html, nothing } from 'lit';
4
+ import { BtnController } from '@phoenixRoot/controllers/btn_controller/btn_controller';
5
+ import { ICON_CSS_CLASSES } from '@phoenixRoot/components/icon/icon_constants';
6
+ import { PhoenixLightLitElement } from '@phoenixRoot/core/phoenix_light_lit_element/phoenix_light_lit_element';
7
+ import { phoenixCustomElement } from '@phoenixRoot/core/decorators/phoenix_custom_element';
8
+ import { property } from 'lit/decorators';
9
+ let HFilePickerLabel = class HFilePickerLabel extends PhoenixLightLitElement {
10
+ constructor() {
11
+ super();
12
+ this._dispatchClickEvent = () => {
13
+ this.dispatchEvent(new CustomEvent(FILE_PICKER_LABEL_EVENT_NAMES.filePickerLabelClicked, {
14
+ bubbles: true
15
+ }));
16
+ };
17
+ this._btnController = new BtnController(this, this._dispatchClickEvent);
18
+ }
19
+ connectedCallback() {
20
+ super.connectedCallback();
21
+ }
22
+ disconnectedCallback() {
23
+ super.disconnectedCallback();
24
+ }
25
+ render() {
26
+ super.render();
27
+ return html `<label class="${FILE_PICKER_CONTROL_CSS_CLASSES.filePickerLabel}" for="${this.controlId}">
28
+ ${this.labelIconName
29
+ ? html `<h-icon
30
+ class="${ICON_CSS_CLASSES.icon} ${FILE_PICKER_ICON_CSS_CLASSES.filePickerIcon}"
31
+ icon-name=${this.labelIconName}
32
+ />`
33
+ : nothing}
34
+ ${this.labelText}
35
+ </label>`;
36
+ }
37
+ };
38
+ __decorate([
39
+ property({ type: String, attribute: 'control-id', reflect: true }),
40
+ __metadata("design:type", String)
41
+ ], HFilePickerLabel.prototype, "controlId", void 0);
42
+ __decorate([
43
+ property({ type: String, attribute: 'label-text' }),
44
+ __metadata("design:type", String)
45
+ ], HFilePickerLabel.prototype, "labelText", void 0);
46
+ __decorate([
47
+ property({ type: String, attribute: 'label-icon-name' }),
48
+ __metadata("design:type", String)
49
+ ], HFilePickerLabel.prototype, "labelIconName", void 0);
50
+ HFilePickerLabel = __decorate([
51
+ phoenixCustomElement('h-file-picker-label'),
52
+ __metadata("design:paramtypes", [])
53
+ ], HFilePickerLabel);
54
+ export { HFilePickerLabel };
55
+ //# sourceMappingURL=file_picker_label.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file_picker_label.js","sourceRoot":"","sources":["../../../../../../../../src/components/form/file_picker/file_picker_label.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,+BAA+B,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACvI,OAAO,EAAkB,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,wDAAwD,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,uEAAuE,CAAC;AAC/G,OAAO,EAAE,oBAAoB,EAAE,MAAM,qDAAqD,CAAC;AAC3F,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,IAAa,gBAAgB,GAA7B,MAAa,gBAAiB,SAAQ,sBAAsB;IAYxD;QACI,KAAK,EAAE,CAAC;QA2BJ,wBAAmB,GAAG,GAAS,EAAE;YACrC,IAAI,CAAC,aAAa,CACd,IAAI,WAAW,CAAC,6BAA6B,CAAC,sBAAsB,EAAE;gBAClE,OAAO,EAAE,IAAI;aAChB,CAAC,CACL,CAAC;QACN,CAAC,CAAC;QA/BE,IAAI,CAAC,cAAc,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC5E,CAAC;IAEM,iBAAiB;QACpB,KAAK,CAAC,iBAAiB,EAAE,CAAC;IAC9B,CAAC;IAEM,oBAAoB;QACvB,KAAK,CAAC,oBAAoB,EAAE,CAAC;IACjC,CAAC;IAES,MAAM;QACZ,KAAK,CAAC,MAAM,EAAE,CAAC;QAEf,OAAO,IAAI,CAAA,iBAAiB,+BAA+B,CAAC,eAAe,UAAU,IAAI,CAAC,SAAS;cAC7F,IAAI,CAAC,aAAa;YAChB,CAAC,CAAC,IAAI,CAAA;+BACS,gBAAgB,CAAC,IAAI,IAAI,4BAA4B,CAAC,cAAc;kCACjE,IAAI,CAAC,aAAa;qBAC/B;YACL,CAAC,CAAC,OAAO;cACX,IAAI,CAAC,SAAS;iBACX,CAAC;IACd,CAAC;CASJ,CAAA;AA7CG;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;mDAC1C;AAGzB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;;mDAC3B;AAGzB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;;uDAC5B;AARpB,gBAAgB;IAD5B,oBAAoB,CAAC,qBAAqB,CAAC;;GAC/B,gBAAgB,CA+C5B;SA/CY,gBAAgB"}
@@ -1,5 +1,4 @@
1
1
  import { PhoenixLightLitElement } from "../../../../../core/phoenix_light_lit_element/phoenix_light_lit_element";
2
- import { PropertyValues } from '@lit/reactive-element';
3
2
  export declare class HOption extends PhoenixLightLitElement {
4
3
  value: string;
5
4
  selected: boolean;
@@ -10,7 +9,7 @@ export declare class HOption extends PhoenixLightLitElement {
10
9
  connectedCallback(): void;
11
10
  private _setupEvents;
12
11
  private _dispatchClickedEvent;
13
- updated(changedProperties: PropertyValues): void;
12
+ attributeChangedCallback(name: string, _old: string | null, value: string | null): void;
14
13
  private _addSelectedIcon;
15
14
  private _removeSelectedIcon;
16
15
  }
@@ -5,7 +5,6 @@ import { property } from '@lit/reactive-element/decorators.js';
5
5
  import { SELECT_OPTION_EVENT_NAMES, SELECT_RELATED_COMPONENTS_NAMES } from '../select_components_constatns.js';
6
6
  import { BtnController } from '../../../../../controllers/btn_controller/btn_controller.js';
7
7
  import { SELECT_OPTION_CSS_CLASSES } from './select_option_constants.js';
8
- import '@lit/reactive-element';
9
8
 
10
9
  let HOption = class HOption extends PhoenixLightLitElement {
11
10
  constructor() {
@@ -34,10 +33,12 @@ let HOption = class HOption extends PhoenixLightLitElement {
34
33
  _setupEvents() {
35
34
  this.addEventListener('click', this._dispatchClickedEvent);
36
35
  }
37
- updated(changedProperties) {
38
- super.updated(changedProperties);
39
- if (changedProperties.has('selected'))
40
- this.selected ? this._addSelectedIcon() : this._removeSelectedIcon();
36
+ attributeChangedCallback(name, _old, value) {
37
+ super.attributeChangedCallback(name, _old, value);
38
+ switch (name) {
39
+ case 'selected':
40
+ this.selected ? this._addSelectedIcon() : this._removeSelectedIcon();
41
+ }
41
42
  }
42
43
  _addSelectedIcon() {
43
44
  this._$checkedIcon = document.createElement('h-icon');
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,qDAAyD;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,qDAAyD;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -13,15 +13,15 @@ export declare abstract class BaseSelectController implements ISelectController,
13
13
  constructor({ host }: SelectControllerConstructorOptions);
14
14
  private _setupComputedStateObserver;
15
15
  private _calculateValuesRelatedToOptions;
16
- toggle(option: SelectOption): void;
17
- abstract select(option: SelectOption): void;
18
- remove(optionValue: string): void;
19
- add(option: SelectOption, position?: number): void;
20
- replace(options: SelectOption[]): void;
21
- deselectAll(): void;
22
- deselect(option: SelectOption): void;
23
- filter(value: string): void;
24
- protected requestUpdate(): void;
25
- getOption(selectValue: string): SelectOption | undefined;
16
+ toggleOption(option: SelectOption): void;
17
+ abstract selectOption(option: SelectOption): void;
18
+ removeOption(optionValue: string): void;
19
+ addOption(option: SelectOption, position?: number): void;
20
+ replaceOptions(options: SelectOption[]): void;
21
+ deselectOptions(): void;
22
+ deselectOption(option: SelectOption): void;
23
+ filterOptions(value: string): void;
24
+ protected requestOptionsUpdate(): void;
25
+ getSelectOption(selectValue: string): SelectOption | undefined;
26
26
  hostConnected(): void;
27
27
  }
@@ -25,16 +25,16 @@ class BaseSelectController {
25
25
  this._optionsObserver = new Observer(this._calculateValuesRelatedToOptions);
26
26
  this.options$.subscribe(this._optionsObserver);
27
27
  }
28
- toggle(option) {
29
- option.selected ? this.deselect(option) : this.select(option);
28
+ toggleOption(option) {
29
+ option.selected ? this.deselectOption(option) : this.selectOption(option);
30
30
  }
31
- remove(optionValue) {
31
+ removeOption(optionValue) {
32
32
  const options = this.options$.getValue();
33
33
  if (!options)
34
34
  return;
35
35
  this.options$.notify(options.filter((option) => option.value !== optionValue));
36
36
  }
37
- add(option, position) {
37
+ addOption(option, position) {
38
38
  var _a;
39
39
  const options = (_a = this.options$.getValue()) !== null && _a !== void 0 ? _a : [];
40
40
  if (position === undefined) {
@@ -44,22 +44,22 @@ class BaseSelectController {
44
44
  }
45
45
  this.options$.notify([...options.slice(0, position - 1), option, ...options.slice(position - 1)]);
46
46
  }
47
- replace(options) {
47
+ replaceOptions(options) {
48
48
  this.options$.notify(options);
49
49
  }
50
- deselectAll() {
50
+ deselectOptions() {
51
51
  var _a;
52
52
  (_a = this.options$.getValue()) === null || _a === void 0 ? void 0 : _a.forEach((option) => (option.selected = false));
53
53
  this.selectedOptions$.notify([]);
54
- this.requestUpdate();
54
+ this.requestOptionsUpdate();
55
55
  }
56
- deselect(option) {
56
+ deselectOption(option) {
57
57
  var _a;
58
58
  (_a = this.options$.getValue()) === null || _a === void 0 ? void 0 : _a.forEach((option) => (option.selected = false));
59
59
  this.selectedOptions$.notify([]);
60
- this.requestUpdate();
60
+ this.requestOptionsUpdate();
61
61
  }
62
- filter(value) {
62
+ filterOptions(value) {
63
63
  const selectOptions = this.options$.getValue();
64
64
  if (!selectOptions)
65
65
  return;
@@ -68,16 +68,16 @@ class BaseSelectController {
68
68
  filtered.forEach((option) => {
69
69
  option.hidden = false;
70
70
  });
71
- this.requestUpdate();
71
+ this.requestOptionsUpdate();
72
72
  }
73
- requestUpdate() {
73
+ requestOptionsUpdate() {
74
74
  const selectOptions = this.options$.getValue();
75
75
  if (!selectOptions)
76
76
  return;
77
77
  this.options$.notify([...selectOptions]);
78
78
  this.host.requestUpdate();
79
79
  }
80
- getOption(selectValue) {
80
+ getSelectOption(selectValue) {
81
81
  var _a;
82
82
  return (_a = this.options$.getValue()) === null || _a === void 0 ? void 0 : _a.find((option) => option.value === selectValue);
83
83
  }
@@ -1,7 +1,7 @@
1
1
  import { SelectOption } from "../model/select_option";
2
2
  import { BaseSelectController } from "./base_select_controller";
3
3
  export declare class MultiSelectController extends BaseSelectController {
4
- toggle(option: SelectOption): void;
5
- select(option: SelectOption): void;
6
- deselect(option: SelectOption): void;
4
+ toggleOption(option: SelectOption): void;
5
+ selectOption(option: SelectOption): void;
6
+ deselectOption(option: SelectOption): void;
7
7
  }
@@ -1,18 +1,18 @@
1
1
  import { BaseSelectController } from './base_select_controller.js';
2
2
 
3
3
  class MultiSelectController extends BaseSelectController {
4
- toggle(option) {
5
- option.selected ? this.deselect(option) : this.select(option);
4
+ toggleOption(option) {
5
+ option.selected ? this.deselectOption(option) : this.selectOption(option);
6
6
  }
7
- select(option) {
7
+ selectOption(option) {
8
8
  option.selected = true;
9
9
  this.selectedOptions$.notify((selectedOptions) => [...selectedOptions, option]);
10
- this.requestUpdate();
10
+ this.requestOptionsUpdate();
11
11
  }
12
- deselect(option) {
12
+ deselectOption(option) {
13
13
  option.selected = false;
14
14
  this.selectedOptions$.notify((selectedOptions) => selectedOptions.filter((currOption) => currOption.value !== option.value));
15
- this.requestUpdate();
15
+ this.requestOptionsUpdate();
16
16
  }
17
17
  }
18
18
 
@@ -1,5 +1,5 @@
1
1
  import { SelectOption } from "../model/select_option";
2
2
  import { BaseSelectController } from "./base_select_controller";
3
3
  export declare class SelectController extends BaseSelectController {
4
- select(option: SelectOption): void;
4
+ selectOption(option: SelectOption): void;
5
5
  }
@@ -1,13 +1,13 @@
1
1
  import { BaseSelectController } from './base_select_controller.js';
2
2
 
3
3
  class SelectController extends BaseSelectController {
4
- select(option) {
4
+ selectOption(option) {
5
5
  var _a;
6
6
  const selectedOptions = (_a = this.options$.getValue()) !== null && _a !== void 0 ? _a : [];
7
7
  selectedOptions.forEach((option) => (option.selected = false));
8
8
  option.selected = true;
9
9
  this.selectedOptions$.notify([option]);
10
- this.requestUpdate();
10
+ this.requestOptionsUpdate();
11
11
  }
12
12
  }
13
13
 
@@ -10,13 +10,13 @@ export interface ISelectController {
10
10
  options$: BehaviorSubject<SelectOption[]>;
11
11
  visibleOptionsCount: number;
12
12
  selectedOptionsCount: number;
13
- deselectAll(): void;
14
- deselect(option: SelectOption): void;
15
- filter(value: string): void;
16
- toggle(option: SelectOption): void;
17
- select(option: SelectOption): void;
18
- getOption(selectValue: string): SelectOption | undefined;
19
- remove(optionValue: string): void;
20
- add(option: SelectOption, position?: number): void;
21
- replace(options: SelectOption[]): void;
13
+ deselectOptions(): void;
14
+ deselectOption(option: SelectOption): void;
15
+ filterOptions(value: string): void;
16
+ toggleOption(option: SelectOption): void;
17
+ selectOption(option: SelectOption): void;
18
+ getSelectOption(selectValue: string): SelectOption | undefined;
19
+ removeOption(optionValue: string): void;
20
+ addOption(option: SelectOption, position?: number): void;
21
+ replaceOptions(options: SelectOption[]): void;
22
22
  }
@@ -1,25 +1,14 @@
1
1
  import { PhoenixLightLitElement } from "../../../core/phoenix_light_lit_element/phoenix_light_lit_element";
2
- import { HOption } from "./components/option/select_option";
3
2
  import { TemplateResult, PropertyValues } from 'lit';
4
3
  import { SelectOption } from "./model/select_option";
5
- import type { TSelectType } from "./select_types";
6
4
  export declare class HSelect extends PhoenixLightLitElement {
7
5
  private static _components;
8
6
  controlName: string;
9
- controlId: string;
10
- multiple: boolean;
7
+ multiselect: boolean;
11
8
  opened: boolean;
12
9
  offset: number;
13
10
  error: boolean;
14
11
  disabled: boolean;
15
- type: TSelectType;
16
- required: boolean;
17
- get selectedIndex(): number;
18
- set selectedIndex(index: number);
19
- get selectedOptions(): HOption[];
20
- get name(): string;
21
- get id(): string;
22
- get options(): HOption[];
23
12
  private _searchValue;
24
13
  private _selectController;
25
14
  private _$options;
@@ -44,16 +33,14 @@ export declare class HSelect extends PhoenixLightLitElement {
44
33
  private _appendNewHTMLOption;
45
34
  private _removeHTMLOptions;
46
35
  private _handleOptionClicked;
47
- private _selectOption;
48
36
  private _handleSearch;
49
37
  private _handleDropdownHidden;
50
38
  private _closeSelect;
51
39
  private _clearOptions;
52
- private _dispatchChangeEvent;
53
40
  protected update(changedProperties: PropertyValues): void;
54
- add(option: SelectOption, position?: number): void;
41
+ addOption(option: SelectOption, position?: number): void;
55
42
  removeOption(optionValue: string): void;
56
- replace(options: SelectOption[]): void;
43
+ replaceOptions(options: SelectOption[]): void;
57
44
  disconnectedCallback(): void;
58
45
  private _handleResize;
59
46
  private _getDropdownContentWidth;
@@ -7,7 +7,7 @@ import { property } from '@lit/reactive-element/decorators.js';
7
7
  import { SELECT_RELATED_COMPONENTS_NAMES, SELECT_INPUT_PLACEHOLDER_SLOT_NAME, SELECT_CLOSE_BTN_EVENT_NAMES, SELECT_CLOSE_BUTTON_CONTENT_SLOT_NAME } from './components/select_components_constatns.js';
8
8
  import { Observer } from '../../../core/classes/observer/observer.js';
9
9
  import { HIcon } from '../../icon/icon.js';
10
- import { SELECT_TYPES, SELECT_SLOT_NAMES, SELECT_CSS_CLASSES, SELECT_CONTEXTS, SELECT_EVENT_NAMES, MIN_NUMBER_OF_OPTIONS_TO_SHOW_SEARCH, SELECT_RESIZE_DEBOUNCE_TIME } from './select_constants.js';
10
+ import { SELECT_SLOT_NAMES, SELECT_CSS_CLASSES, SELECT_CONTEXTS, SELECT_EVENT_NAMES, MIN_NUMBER_OF_OPTIONS_TO_SHOW_SEARCH, SELECT_RESIZE_DEBOUNCE_TIME } from './select_constants.js';
11
11
  import { observe } from '../../../directives/observable_directive.js';
12
12
  import { HSelectToggler } from './components/toggler/select_toggler.js';
13
13
  import { ContextProviderController } from '../../../core/context/context_provider_controller.js';
@@ -26,10 +26,9 @@ let HSelect = class HSelect extends PhoenixLightLitElement {
26
26
  constructor() {
27
27
  var _a;
28
28
  super();
29
- this.multiple = false;
29
+ this.multiselect = false;
30
30
  this.opened = false;
31
31
  this.offset = 2;
32
- this.type = SELECT_TYPES.select;
33
32
  this._searchValue = '';
34
33
  this._$options = {};
35
34
  this._$dropdown = createRef();
@@ -42,11 +41,10 @@ let HSelect = class HSelect extends PhoenixLightLitElement {
42
41
  this._$dropdownContent.value.style.width = `${width !== null && width !== void 0 ? width : ''}px`;
43
42
  };
44
43
  this._handleOptionDeselect = (event) => {
45
- const selectedOption = this._selectController.getOption(event.detail);
44
+ const selectedOption = this._selectController.getSelectOption(event.detail);
46
45
  if (!selectedOption)
47
46
  return;
48
- this._selectController.deselect(selectedOption);
49
- this._dispatchChangeEvent();
47
+ this._selectController.deselectOption(selectedOption);
50
48
  };
51
49
  this._updateOptionsView = (options) => {
52
50
  if (options.length < Object.keys(this._$options).length)
@@ -61,11 +59,16 @@ let HSelect = class HSelect extends PhoenixLightLitElement {
61
59
  SelectControlUtils.syncHTMLOptionWithModel(option, $option);
62
60
  if (!selected)
63
61
  return;
64
- $option.setAttribute(this.multiple ? 'aria-checked' : 'aria-selected', 'true');
62
+ $option.setAttribute(this.multiselect ? 'aria-checked' : 'aria-selected', 'true');
65
63
  });
66
64
  };
67
65
  this._handleOptionClicked = (event) => {
68
- this._selectOption(event.detail.$option.value);
66
+ const selectedOption = this._selectController.getSelectOption(event.detail.$option.value);
67
+ if (!selectedOption)
68
+ return;
69
+ this._selectController.toggleOption(selectedOption);
70
+ if (!this.multiselect)
71
+ this._closeSelect();
69
72
  };
70
73
  this._handleDropdownHidden = () => {
71
74
  this._searchValue = '';
@@ -78,11 +81,7 @@ let HSelect = class HSelect extends PhoenixLightLitElement {
78
81
  (_a = this._$dropdown.value) === null || _a === void 0 ? void 0 : _a.hide();
79
82
  };
80
83
  this._clearOptions = () => {
81
- this._selectController.deselectAll();
82
- this._dispatchChangeEvent();
83
- };
84
- this._dispatchChangeEvent = () => {
85
- this.dispatchEvent(new Event('change'));
84
+ this._selectController.deselectOptions();
86
85
  };
87
86
  this._handleResize = debounce_1(() => {
88
87
  this._closeSelect();
@@ -91,39 +90,6 @@ let HSelect = class HSelect extends PhoenixLightLitElement {
91
90
  const $options = Array.from(this.querySelectorAll(SELECT_RELATED_COMPONENTS_NAMES.option));
92
91
  $options.forEach(($option) => $option.setAttribute('slot', SELECT_SLOT_NAMES.content));
93
92
  this.$placeholder = (_a = this.querySelector(`[slot="${SELECT_INPUT_PLACEHOLDER_SLOT_NAME}"]`)) !== null && _a !== void 0 ? _a : 'Select';
94
- if (this.multiple)
95
- this.type = SELECT_TYPES.multiple;
96
- }
97
- get selectedIndex() {
98
- const selectedOptions = this._selectController.selectedOptions$.getValue();
99
- if (!selectedOptions || selectedOptions.length === 0)
100
- return -1;
101
- const htmlOptions = Object.values(this._$options);
102
- return this.multiple
103
- ? SelectControlUtils.getFirstIndexSelectedOption(htmlOptions)
104
- : SelectControlUtils.getLastIndexOfSelectedOption(htmlOptions);
105
- }
106
- set selectedIndex(index) {
107
- const option = Object.values(this._$options)[index];
108
- if (!option) {
109
- this._selectController.deselectAll();
110
- return;
111
- }
112
- this._selectOption(option.value);
113
- }
114
- get selectedOptions() {
115
- var _a;
116
- const selectedOptions = (_a = this._selectController.selectedOptions$.getValue()) !== null && _a !== void 0 ? _a : [];
117
- return selectedOptions.filter((option) => option.selected).map((option) => this._$options[option.value]);
118
- }
119
- get name() {
120
- return this.controlName;
121
- }
122
- get id() {
123
- return this.controlId;
124
- }
125
- get options() {
126
- return Object.values(this._$options);
127
93
  }
128
94
  updated(changedProperties) {
129
95
  super.updated(changedProperties);
@@ -150,9 +116,9 @@ let HSelect = class HSelect extends PhoenixLightLitElement {
150
116
  connectedCallback() {
151
117
  super.connectedCallback();
152
118
  this.classList.add(SELECT_CSS_CLASSES.select);
153
- this._selectController = this.multiple ? new MultiSelectController({ host: this }) : new SelectController({ host: this });
119
+ this._selectController = this.multiselect ? new MultiSelectController({ host: this }) : new SelectController({ host: this });
154
120
  this._selectContext.provide(SELECT_CONTEXTS.selectedOptions$, this._selectController.selectedOptions$);
155
- this._selectContext.provide(SELECT_CONTEXTS.isMultiselect, this.multiple);
121
+ this._selectContext.provide(SELECT_CONTEXTS.isMultiselect, this.multiselect);
156
122
  const $options = Array.from(this.querySelectorAll(SELECT_RELATED_COMPONENTS_NAMES.option));
157
123
  this._optionsObserver = new Observer((selectedOptions) => this._updateOptionsView(selectedOptions));
158
124
  this._selectController.options$.subscribe(this._optionsObserver);
@@ -196,38 +162,29 @@ let HSelect = class HSelect extends PhoenixLightLitElement {
196
162
  const { value, selected } = option;
197
163
  const $option = SelectControlUtils.createHTMLOption(option);
198
164
  if (selected)
199
- $option.setAttribute(this.multiple ? 'aria-checked' : 'aria-selected', 'true');
165
+ $option.setAttribute(this.multiselect ? 'aria-checked' : 'aria-selected', 'true');
200
166
  this._$options[value] = $option;
201
167
  SelectControlUtils.appendHTMLOption($option, $list, position);
202
168
  }
203
169
  _removeHTMLOptions(optionsValues) {
204
170
  this._$options = SelectControlUtils.removeHTMLOptions(Object.values(this._$options), optionsValues);
205
171
  }
206
- _selectOption(value) {
207
- const option = this._selectController.getOption(value);
208
- if (!option)
209
- return;
210
- this._selectController.toggle(option);
211
- if (!this.multiple)
212
- this._closeSelect();
213
- this._dispatchChangeEvent();
214
- }
215
172
  _handleSearch({ detail }) {
216
173
  this._searchValue = detail;
217
174
  }
218
175
  update(changedProperties) {
219
176
  super.update(changedProperties);
220
177
  if (changedProperties.has('_searchValue'))
221
- this._selectController.filter(this._searchValue);
178
+ this._selectController.filterOptions(this._searchValue);
222
179
  }
223
- add(option, position) {
224
- this._selectController.add(option, position);
180
+ addOption(option, position) {
181
+ this._selectController.addOption(option, position);
225
182
  }
226
183
  removeOption(optionValue) {
227
- this._selectController.remove(optionValue);
184
+ this._selectController.removeOption(optionValue);
228
185
  }
229
- replace(options) {
230
- this._selectController.replace(options);
186
+ replaceOptions(options) {
187
+ this._selectController.replaceOptions(options);
231
188
  }
232
189
  disconnectedCallback() {
233
190
  super.disconnectedCallback();
@@ -257,7 +214,6 @@ let HSelect = class HSelect extends PhoenixLightLitElement {
257
214
  <h-dropdown-toggler name=${this.controlName}> ${this.getSlot(SELECT_SLOT_NAMES.toggler)} </h-dropdown-toggler>
258
215
 
259
216
  <h-dropdown-content
260
- @focusout=${this._dispatchChangeEvent}
261
217
  class="${SELECT_CSS_CLASSES.selectContent} ${this.error ? SELECT_CSS_CLASSES.selectContentError : ''}"
262
218
  ${ref(this._$dropdownContent)}
263
219
  name=${this.controlName}
@@ -297,7 +253,7 @@ let HSelect = class HSelect extends PhoenixLightLitElement {
297
253
  </p>
298
254
  </div>`
299
255
  : nothing}
300
- ${this.multiple && this._selectController.selectedOptionsCount >= 1
256
+ ${this.multiselect && this._selectController.selectedOptionsCount >= 1
301
257
  ? html `
302
258
  <section class=${SELECT_CSS_CLASSES.selectFooter}>
303
259
  <button class="${SELECT_CSS_CLASSES.selectClearButton}" @click=${this._clearOptions}>clear</button>
@@ -321,17 +277,13 @@ HSelect._components = {
321
277
  toggler: HSelectToggler
322
278
  };
323
279
  __decorate([
324
- property({ type: String, attribute: 'control-name' }),
280
+ property({ type: String }),
325
281
  __metadata("design:type", String)
326
282
  ], HSelect.prototype, "controlName", void 0);
327
- __decorate([
328
- property({ type: String, attribute: 'control-id' }),
329
- __metadata("design:type", String)
330
- ], HSelect.prototype, "controlId", void 0);
331
283
  __decorate([
332
284
  property({ type: Boolean }),
333
285
  __metadata("design:type", Boolean)
334
- ], HSelect.prototype, "multiple", void 0);
286
+ ], HSelect.prototype, "multiselect", void 0);
335
287
  __decorate([
336
288
  property({ type: Boolean }),
337
289
  __metadata("design:type", Boolean)
@@ -348,14 +300,6 @@ __decorate([
348
300
  property({ type: Boolean }),
349
301
  __metadata("design:type", Boolean)
350
302
  ], HSelect.prototype, "disabled", void 0);
351
- __decorate([
352
- property({ type: String }),
353
- __metadata("design:type", String)
354
- ], HSelect.prototype, "type", void 0);
355
- __decorate([
356
- property({ type: Boolean }),
357
- __metadata("design:type", Boolean)
358
- ], HSelect.prototype, "required", void 0);
359
303
  __decorate([
360
304
  state(),
361
305
  __metadata("design:type", String)
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,+CAAmD;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAmD;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,+CAAmD;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAmD;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}