@genexus/genexus-ide-ui 1.0.43 → 1.0.45

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 (57) hide show
  1. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  2. package/dist/cjs/gx-ide-design-import.cjs.entry.js +39 -6
  3. package/dist/cjs/gx-ide-design-import.cjs.entry.js.map +1 -1
  4. package/dist/cjs/gx-ide-entity-selector.cjs.entry.js +3 -1
  5. package/dist/cjs/gx-ide-entity-selector.cjs.entry.js.map +1 -1
  6. package/dist/cjs/gx-ide-ww-attributes.cjs.entry.js +244 -0
  7. package/dist/cjs/gx-ide-ww-attributes.cjs.entry.js.map +1 -0
  8. package/dist/cjs/loader.cjs.js +1 -1
  9. package/dist/collection/collection-manifest.json +1 -0
  10. package/dist/collection/components/_helpers/entity-selector/entity-selector.js +4 -2
  11. package/dist/collection/components/_helpers/entity-selector/entity-selector.js.map +1 -1
  12. package/dist/collection/components/design-import/design-import.js +39 -6
  13. package/dist/collection/components/design-import/design-import.js.map +1 -1
  14. package/dist/collection/components/ww-attributes/gx-ide-assets/ww-attributes/langs/ww-attributes.lang.en.json +30 -0
  15. package/dist/collection/components/ww-attributes/gx-ide-assets/ww-attributes/langs/ww-attributes.lang.ja.json +30 -0
  16. package/dist/collection/components/ww-attributes/gx-ide-assets/ww-attributes/langs/ww-attributes.lang.zh.json +30 -0
  17. package/dist/collection/components/ww-attributes/helpers.js +11 -0
  18. package/dist/collection/components/ww-attributes/helpers.js.map +1 -0
  19. package/dist/collection/components/ww-attributes/ww-attributes.css +70 -0
  20. package/dist/collection/components/ww-attributes/ww-attributes.js +468 -0
  21. package/dist/collection/components/ww-attributes/ww-attributes.js.map +1 -0
  22. package/dist/collection/testing/locale.e2e.js +1 -0
  23. package/dist/collection/testing/locale.e2e.js.map +1 -1
  24. package/dist/components/entity-selector.js +3 -1
  25. package/dist/components/entity-selector.js.map +1 -1
  26. package/dist/components/gx-ide-design-import.js +39 -6
  27. package/dist/components/gx-ide-design-import.js.map +1 -1
  28. package/dist/components/gx-ide-ww-attributes.d.ts +11 -0
  29. package/dist/components/gx-ide-ww-attributes.js +294 -0
  30. package/dist/components/gx-ide-ww-attributes.js.map +1 -0
  31. package/dist/esm/genexus-ide-ui.js +1 -1
  32. package/dist/esm/gx-ide-design-import.entry.js +39 -6
  33. package/dist/esm/gx-ide-design-import.entry.js.map +1 -1
  34. package/dist/esm/gx-ide-entity-selector.entry.js +3 -1
  35. package/dist/esm/gx-ide-entity-selector.entry.js.map +1 -1
  36. package/dist/esm/gx-ide-ww-attributes.entry.js +240 -0
  37. package/dist/esm/gx-ide-ww-attributes.entry.js.map +1 -0
  38. package/dist/esm/loader.js +1 -1
  39. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  40. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  41. package/dist/genexus-ide-ui/gx-ide-assets/ww-attributes/langs/ww-attributes.lang.en.json +30 -0
  42. package/dist/genexus-ide-ui/gx-ide-assets/ww-attributes/langs/ww-attributes.lang.ja.json +30 -0
  43. package/dist/genexus-ide-ui/gx-ide-assets/ww-attributes/langs/ww-attributes.lang.zh.json +30 -0
  44. package/dist/genexus-ide-ui/{p-04d7f44c.entry.js → p-1693a2d1.entry.js} +4 -2
  45. package/dist/genexus-ide-ui/p-1693a2d1.entry.js.map +1 -0
  46. package/dist/genexus-ide-ui/{p-512147a8.entry.js → p-2b4b1dfc.entry.js} +225 -192
  47. package/dist/genexus-ide-ui/p-2b4b1dfc.entry.js.map +1 -0
  48. package/dist/genexus-ide-ui/p-5619120d.entry.js +341 -0
  49. package/dist/genexus-ide-ui/p-5619120d.entry.js.map +1 -0
  50. package/dist/types/components/_helpers/entity-selector/entity-selector.d.ts +1 -1
  51. package/dist/types/components/design-import/design-import.d.ts +5 -1
  52. package/dist/types/components/ww-attributes/helpers.d.ts +3 -0
  53. package/dist/types/components/ww-attributes/ww-attributes.d.ts +95 -0
  54. package/dist/types/components.d.ts +99 -12
  55. package/package.json +1 -1
  56. package/dist/genexus-ide-ui/p-04d7f44c.entry.js.map +0 -1
  57. package/dist/genexus-ide-ui/p-512147a8.entry.js.map +0 -1
@@ -188,7 +188,7 @@ export interface DesignData {
188
188
  export interface DesignItemData {
189
189
  id: string;
190
190
  name: string;
191
- warning: string;
191
+ warning?: string;
192
192
  variants?: DesignItemData[];
193
193
  }
194
194
  export interface DesignPanelData {
@@ -235,6 +235,10 @@ export type ReactiveSettings = {
235
235
  module: boolean;
236
236
  importAsWebPanels: boolean;
237
237
  };
238
+ export type ObjectTreeCheckedStatus = {
239
+ all: [];
240
+ none: ["-"];
241
+ };
238
242
  type ReactiveSettingsValues = {
239
243
  path: string;
240
244
  style: string;
@@ -0,0 +1,3 @@
1
+ import { ComboBoxModel } from "@genexus/chameleon-controls-library";
2
+ import { GxOption } from "../..";
3
+ export declare const mapOptionsToComboBoxItemModel: (options: GxOption[]) => ComboBoxModel;
@@ -0,0 +1,95 @@
1
+ import { ContextMenuInfo, EntityData, GxOption } from "../../common/types";
2
+ export declare class GxIdeWWAttributes {
3
+ #private;
4
+ el: HTMLGxIdeWwAttributesElement;
5
+ /**
6
+ * Attributes rendered in the table
7
+ */
8
+ attributes: AttributeData[];
9
+ /**
10
+ * Selected attributes in the table of attributes
11
+ */
12
+ selectedAttributesIds: string[];
13
+ /**
14
+ * Show or hide advanced filters
15
+ */
16
+ filterMore: boolean;
17
+ /**
18
+ * The attribute filter name
19
+ */
20
+ name: string;
21
+ /**
22
+ * True if loadCallback hasn't been resolved yet
23
+ */
24
+ loading: boolean;
25
+ /**
26
+ * The attribute object value
27
+ */
28
+ object: EntityData;
29
+ /**
30
+ * The attribute filter type value
31
+ */
32
+ type: string;
33
+ /**
34
+ * Callback invoked when user right-clicks on the grid
35
+ */
36
+ readonly contextMenuCallback: ContextMenuCallback;
37
+ /**
38
+ * Callback invoked when user deletes an object
39
+ */
40
+ readonly deleteSelectionCallback: DeleteSelectionCallback;
41
+ /**
42
+ * Callback invoked when user filters the objects
43
+ */
44
+ readonly loadCallback: LoadCallback;
45
+ /**
46
+ * Callback invoked when user executes filter action
47
+ */
48
+ readonly objectActionCallback: ObjectActionCallback;
49
+ /**
50
+ * Objects rendered in the object selector
51
+ */
52
+ readonly objects: GxOption[];
53
+ /**
54
+ * Callback invoked when user opens the selection dialog
55
+ */
56
+ readonly openSelectionCallback: OpenSelectionCallback;
57
+ /**
58
+ * Callback invoked when user selects or deselects an object
59
+ */
60
+ readonly selectionChangeCallback: SelectionChangeCallback;
61
+ /**
62
+ * Types rendered in the filter type selector
63
+ */
64
+ readonly types: GxOption[];
65
+ componentWillLoad(): Promise<void>;
66
+ componentDidLoad(): void;
67
+ keyDownHandler(eventInfo: KeyboardEvent): void;
68
+ /**
69
+ * Reloads the view, refreshing the filters and attributes table.
70
+ */
71
+ reload(): Promise<void>;
72
+ /**
73
+ * Validate necessary data input
74
+ */
75
+ validate(): Promise<boolean>;
76
+ render(): void;
77
+ }
78
+ export type ContextMenuCallback = (contextMenuInfo: ContextMenuInfo) => Promise<void>;
79
+ export type DeleteSelectionCallback = (ids: string[]) => Promise<void>;
80
+ export type LoadCallback = (filters: AttributeFiltersData) => Promise<AttributeData[]>;
81
+ export type ObjectActionCallback = () => Promise<EntityData | undefined>;
82
+ export type OpenSelectionCallback = (ids: string[]) => Promise<void>;
83
+ export type SelectionChangeCallback = (ids: string[]) => Promise<void>;
84
+ export interface AttributeData {
85
+ id: string;
86
+ icon: string;
87
+ name: string;
88
+ type: string;
89
+ description: string;
90
+ }
91
+ export interface AttributeFiltersData {
92
+ name?: string;
93
+ type?: string;
94
+ object?: string;
95
+ }
@@ -58,7 +58,8 @@ import { cancelCallbackFn, confirmCallbackFn } from "./components/team-dev/updat
58
58
  import { TitleAlignment as TitleAlignment1, TitleType as TitleType1 } from "./components/_helpers/title/title";
59
59
  import { CloseCallback as CloseCallback1, SlideInfo, TransitionType } from "./components/welcome-page/welcome-page";
60
60
  import { WFConfigData } from "./components/wf-settings/wf-settings";
61
- import { ContextMenuCallback, DeleteSelectionCallback, LoadCallback as LoadCallback5, LoadImageItemsCallback, NewObjectCallback as NewObjectCallback1, OpenSelectionCallback as OpenSelectionCallback1, SelectionObjectCallback, SelectModuleCallback as SelectModuleCallback3 } from "./components/ww-images/ww-images";
61
+ import { ContextMenuCallback, DeleteSelectionCallback, LoadCallback as LoadCallback5, ObjectActionCallback, OpenSelectionCallback as OpenSelectionCallback1, SelectionChangeCallback } from "./components/ww-attributes/ww-attributes";
62
+ import { ContextMenuCallback as ContextMenuCallback1, DeleteSelectionCallback as DeleteSelectionCallback1, LoadCallback as LoadCallback6, LoadImageItemsCallback, NewObjectCallback as NewObjectCallback1, OpenSelectionCallback as OpenSelectionCallback2, SelectionObjectCallback, SelectModuleCallback as SelectModuleCallback3 } from "./components/ww-images/ww-images";
62
63
  export { AiStatus, Message, UserMessageCallback } from "./components/ai-assistant/ai-assistant";
63
64
  export { MessageType } from "./components/ai-assistant/ai-assistant";
64
65
  export { Translations } from "./components/ai-assistant/ai-message";
@@ -112,7 +113,8 @@ export { cancelCallbackFn, confirmCallbackFn } from "./components/team-dev/updat
112
113
  export { TitleAlignment as TitleAlignment1, TitleType as TitleType1 } from "./components/_helpers/title/title";
113
114
  export { CloseCallback as CloseCallback1, SlideInfo, TransitionType } from "./components/welcome-page/welcome-page";
114
115
  export { WFConfigData } from "./components/wf-settings/wf-settings";
115
- export { ContextMenuCallback, DeleteSelectionCallback, LoadCallback as LoadCallback5, LoadImageItemsCallback, NewObjectCallback as NewObjectCallback1, OpenSelectionCallback as OpenSelectionCallback1, SelectionObjectCallback, SelectModuleCallback as SelectModuleCallback3 } from "./components/ww-images/ww-images";
116
+ export { ContextMenuCallback, DeleteSelectionCallback, LoadCallback as LoadCallback5, ObjectActionCallback, OpenSelectionCallback as OpenSelectionCallback1, SelectionChangeCallback } from "./components/ww-attributes/ww-attributes";
117
+ export { ContextMenuCallback as ContextMenuCallback1, DeleteSelectionCallback as DeleteSelectionCallback1, LoadCallback as LoadCallback6, LoadImageItemsCallback, NewObjectCallback as NewObjectCallback1, OpenSelectionCallback as OpenSelectionCallback2, SelectionObjectCallback, SelectModuleCallback as SelectModuleCallback3 } from "./components/ww-images/ww-images";
116
118
  export namespace Components {
117
119
  interface GxIdeAiAssistant {
118
120
  /**
@@ -858,7 +860,7 @@ export namespace Components {
858
860
  /**
859
861
  * Callback invoked when the action button is pressed. Returns the new value.
860
862
  */
861
- "selectEntityCallback": () => Promise<EntityData>;
863
+ "selectEntityCallback": () => Promise<EntityData> | null;
862
864
  /**
863
865
  * Value currently assigned.
864
866
  */
@@ -1869,6 +1871,48 @@ export namespace Components {
1869
1871
  */
1870
1872
  "saveCallback": (config: WFConfigData) => Promise<void>;
1871
1873
  }
1874
+ interface GxIdeWwAttributes {
1875
+ /**
1876
+ * Callback invoked when user right-clicks on the grid
1877
+ */
1878
+ "contextMenuCallback": ContextMenuCallback;
1879
+ /**
1880
+ * Callback invoked when user deletes an object
1881
+ */
1882
+ "deleteSelectionCallback": DeleteSelectionCallback;
1883
+ /**
1884
+ * Callback invoked when user filters the objects
1885
+ */
1886
+ "loadCallback": LoadCallback5;
1887
+ /**
1888
+ * Callback invoked when user executes filter action
1889
+ */
1890
+ "objectActionCallback": ObjectActionCallback;
1891
+ /**
1892
+ * Objects rendered in the object selector
1893
+ */
1894
+ "objects": GxOption[];
1895
+ /**
1896
+ * Callback invoked when user opens the selection dialog
1897
+ */
1898
+ "openSelectionCallback": OpenSelectionCallback1;
1899
+ /**
1900
+ * Reloads the view, refreshing the filters and attributes table.
1901
+ */
1902
+ "reload": () => Promise<void>;
1903
+ /**
1904
+ * Callback invoked when user selects or deselects an object
1905
+ */
1906
+ "selectionChangeCallback": SelectionChangeCallback;
1907
+ /**
1908
+ * Types rendered in the filter type selector
1909
+ */
1910
+ "types": GxOption[];
1911
+ /**
1912
+ * Validate necessary data input
1913
+ */
1914
+ "validate": () => Promise<boolean>;
1915
+ }
1872
1916
  interface GxIdeWwImages {
1873
1917
  /**
1874
1918
  * The categories render in the filter category selector
@@ -1877,7 +1921,7 @@ export namespace Components {
1877
1921
  /**
1878
1922
  * This is a function provided by the developer for expanded the data of images that is double-clicked or entered.
1879
1923
  */
1880
- "contextMenuCallback": ContextMenuCallback;
1924
+ "contextMenuCallback": ContextMenuCallback1;
1881
1925
  /**
1882
1926
  * The default value for the 'categories' filter
1883
1927
  */
@@ -1893,7 +1937,7 @@ export namespace Components {
1893
1937
  /**
1894
1938
  * This is a function provided by the developer for expanded the data of images that is double-clicked or entered.
1895
1939
  */
1896
- "deleteSelectionCallback": DeleteSelectionCallback;
1940
+ "deleteSelectionCallback": DeleteSelectionCallback1;
1897
1941
  /**
1898
1942
  * The densities render in the filter density selector
1899
1943
  */
@@ -1917,7 +1961,7 @@ export namespace Components {
1917
1961
  /**
1918
1962
  * This is a function provided by the developer that return a list of images to populate the table of images.
1919
1963
  */
1920
- "loadCallback": LoadCallback5;
1964
+ "loadCallback": LoadCallback6;
1921
1965
  /**
1922
1966
  * This is a function provided by the developer that return a list of items of the image selected.
1923
1967
  */
@@ -1929,7 +1973,7 @@ export namespace Components {
1929
1973
  /**
1930
1974
  * This is a function provided by the developer for expanded the data of images that is double-clicked or entered.
1931
1975
  */
1932
- "openSelectionCallback": OpenSelectionCallback1;
1976
+ "openSelectionCallback": OpenSelectionCallback2;
1933
1977
  /**
1934
1978
  * This method reload the view, refreshing the filters and the table of images.
1935
1979
  */
@@ -2765,6 +2809,12 @@ declare global {
2765
2809
  prototype: HTMLGxIdeWfSettingsElement;
2766
2810
  new (): HTMLGxIdeWfSettingsElement;
2767
2811
  };
2812
+ interface HTMLGxIdeWwAttributesElement extends Components.GxIdeWwAttributes, HTMLStencilElement {
2813
+ }
2814
+ var HTMLGxIdeWwAttributesElement: {
2815
+ prototype: HTMLGxIdeWwAttributesElement;
2816
+ new (): HTMLGxIdeWwAttributesElement;
2817
+ };
2768
2818
  interface HTMLGxIdeWwImagesElementEventMap {
2769
2819
  "componentDidLoadEvent": boolean;
2770
2820
  "componentDidRenderFirstTime": string;
@@ -2840,6 +2890,7 @@ declare global {
2840
2890
  "gx-ide-top-bar": HTMLGxIdeTopBarElement;
2841
2891
  "gx-ide-welcome-page": HTMLGxIdeWelcomePageElement;
2842
2892
  "gx-ide-wf-settings": HTMLGxIdeWfSettingsElement;
2893
+ "gx-ide-ww-attributes": HTMLGxIdeWwAttributesElement;
2843
2894
  "gx-ide-ww-images": HTMLGxIdeWwImagesElement;
2844
2895
  }
2845
2896
  }
@@ -3624,7 +3675,7 @@ declare namespace LocalJSX {
3624
3675
  /**
3625
3676
  * Callback invoked when the action button is pressed. Returns the new value.
3626
3677
  */
3627
- "selectEntityCallback": () => Promise<EntityData>;
3678
+ "selectEntityCallback": () => Promise<EntityData> | null;
3628
3679
  /**
3629
3680
  * Value currently assigned.
3630
3681
  */
@@ -4691,6 +4742,40 @@ declare namespace LocalJSX {
4691
4742
  */
4692
4743
  "saveCallback"?: (config: WFConfigData) => Promise<void>;
4693
4744
  }
4745
+ interface GxIdeWwAttributes {
4746
+ /**
4747
+ * Callback invoked when user right-clicks on the grid
4748
+ */
4749
+ "contextMenuCallback": ContextMenuCallback;
4750
+ /**
4751
+ * Callback invoked when user deletes an object
4752
+ */
4753
+ "deleteSelectionCallback": DeleteSelectionCallback;
4754
+ /**
4755
+ * Callback invoked when user filters the objects
4756
+ */
4757
+ "loadCallback": LoadCallback5;
4758
+ /**
4759
+ * Callback invoked when user executes filter action
4760
+ */
4761
+ "objectActionCallback": ObjectActionCallback;
4762
+ /**
4763
+ * Objects rendered in the object selector
4764
+ */
4765
+ "objects": GxOption[];
4766
+ /**
4767
+ * Callback invoked when user opens the selection dialog
4768
+ */
4769
+ "openSelectionCallback": OpenSelectionCallback1;
4770
+ /**
4771
+ * Callback invoked when user selects or deselects an object
4772
+ */
4773
+ "selectionChangeCallback": SelectionChangeCallback;
4774
+ /**
4775
+ * Types rendered in the filter type selector
4776
+ */
4777
+ "types": GxOption[];
4778
+ }
4694
4779
  interface GxIdeWwImages {
4695
4780
  /**
4696
4781
  * The categories render in the filter category selector
@@ -4699,7 +4784,7 @@ declare namespace LocalJSX {
4699
4784
  /**
4700
4785
  * This is a function provided by the developer for expanded the data of images that is double-clicked or entered.
4701
4786
  */
4702
- "contextMenuCallback": ContextMenuCallback;
4787
+ "contextMenuCallback": ContextMenuCallback1;
4703
4788
  /**
4704
4789
  * The default value for the 'categories' filter
4705
4790
  */
@@ -4715,7 +4800,7 @@ declare namespace LocalJSX {
4715
4800
  /**
4716
4801
  * This is a function provided by the developer for expanded the data of images that is double-clicked or entered.
4717
4802
  */
4718
- "deleteSelectionCallback": DeleteSelectionCallback;
4803
+ "deleteSelectionCallback": DeleteSelectionCallback1;
4719
4804
  /**
4720
4805
  * The densities render in the filter density selector
4721
4806
  */
@@ -4739,7 +4824,7 @@ declare namespace LocalJSX {
4739
4824
  /**
4740
4825
  * This is a function provided by the developer that return a list of images to populate the table of images.
4741
4826
  */
4742
- "loadCallback": LoadCallback5;
4827
+ "loadCallback": LoadCallback6;
4743
4828
  /**
4744
4829
  * This is a function provided by the developer that return a list of items of the image selected.
4745
4830
  */
@@ -4759,7 +4844,7 @@ declare namespace LocalJSX {
4759
4844
  /**
4760
4845
  * This is a function provided by the developer for expanded the data of images that is double-clicked or entered.
4761
4846
  */
4762
- "openSelectionCallback": OpenSelectionCallback1;
4847
+ "openSelectionCallback": OpenSelectionCallback2;
4763
4848
  /**
4764
4849
  * Displays a secondary filter, used to filter over the filtered images
4765
4850
  */
@@ -4842,6 +4927,7 @@ declare namespace LocalJSX {
4842
4927
  "gx-ide-top-bar": GxIdeTopBar;
4843
4928
  "gx-ide-welcome-page": GxIdeWelcomePage;
4844
4929
  "gx-ide-wf-settings": GxIdeWfSettings;
4930
+ "gx-ide-ww-attributes": GxIdeWwAttributes;
4845
4931
  "gx-ide-ww-images": GxIdeWwImages;
4846
4932
  }
4847
4933
  }
@@ -4905,6 +4991,7 @@ declare module "@stencil/core" {
4905
4991
  "gx-ide-top-bar": LocalJSX.GxIdeTopBar & JSXBase.HTMLAttributes<HTMLGxIdeTopBarElement>;
4906
4992
  "gx-ide-welcome-page": LocalJSX.GxIdeWelcomePage & JSXBase.HTMLAttributes<HTMLGxIdeWelcomePageElement>;
4907
4993
  "gx-ide-wf-settings": LocalJSX.GxIdeWfSettings & JSXBase.HTMLAttributes<HTMLGxIdeWfSettingsElement>;
4994
+ "gx-ide-ww-attributes": LocalJSX.GxIdeWwAttributes & JSXBase.HTMLAttributes<HTMLGxIdeWwAttributesElement>;
4908
4995
  "gx-ide-ww-images": LocalJSX.GxIdeWwImages & JSXBase.HTMLAttributes<HTMLGxIdeWwImagesElement>;
4909
4996
  }
4910
4997
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@genexus/genexus-ide-ui",
3
3
  "license": "Apache-2.0",
4
- "version": "1.0.43",
4
+ "version": "1.0.45",
5
5
  "description": "GeneXus IDE UI components",
6
6
  "main": "dist/index.cjs.js",
7
7
  "module": "dist/index.js",
@@ -1 +0,0 @@
1
- {"version":3,"names":["entitySelectorCss","CSS_BUNDLES","SELECT_DEFAULT_ICON","getIconPath","category","name","colorType","CLEAR_ICON","GxIdeEntitySelector","_GxIdeEntitySelector_componentLocale","set","this","_GxIdeEntitySelector_btnClearClickHandler","value","defaultValue","iconSrc","_a","_GxIdeEntitySelector_btnSelectClickHandler","selectEntityCallback","then","result","_GxIdeEntitySelector_buttonFocusHandler","e","type","buttonHasFocus","_GxIdeEntitySelector_renderControl","h","part","class","accessibleName","labelPosition","__classPrivateFieldGet","entitySelectorInputAccessibleName","disabled","entitySelectorNameAttribute","startImgSrc","readonly","_b","id","clearButtonLabel","title","onClick","onFocus","undefined","onBlur","src","selectButtonLabel","_GxIdeEntitySelector_updateIconSrc","valueChangedHandler","valueChanged","emit","call","componentWillLoad","__classPrivateFieldSet","Locale","getComponentStrings","el","connectedCallback","render","Host","model","field","htmlFor","labelCaption"],"sources":["src/components/_helpers/entity-selector/entity-selector.scss?tag=gx-ide-entity-selector&encapsulation=shadow","src/components/_helpers/entity-selector/entity-selector.tsx"],"sourcesContent":["/*wrapper*/\n.wrapper {\n display: grid;\n grid-template-columns: 1fr max-content max-content;\n gap: var(--mer-spacing--xs);\n border-radius: var(--control__border-radius);\n border: var(--control__border-width) var(--control__border-style)\n var(--control__border-color);\n padding: var(--control__padding-block) var(--control__padding-inline);\n\n &:hover {\n --control__border-color: var(--control__border-color--hover);\n }\n &:focus {\n }\n}\n/*input*/\n.input {\n --control__padding-block: 0;\n --control__padding-inline: 0;\n // Remove control border. We want to simulate a input that includes two buttons at the end.\n --control__border-width: 0;\n --focus__outline-width: 0;\n}\n:host(:focus-within) {\n .wrapper {\n --control__border-color: var(--focus__outline-color);\n }\n}\n:host(.entity-selector--button-has-focus) {\n .wrapper {\n outline: none;\n }\n}\n\n:host([disabled]) {\n pointer-events: none;\n .wrapper {\n background-color: var(--control__background-color--disabled);\n border-color: var(--control__border-color--disabled);\n }\n}\n/*custom button icon*/\n","import {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n Event,\n EventEmitter,\n Watch\n} from \"@stencil/core\";\n\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../../common/locale\";\nimport { LabelPosition } from \"../../../common/types\";\nimport { EntityData } from \"../../../common/types\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/edit\",\n \"components/button\",\n \"components/icon\",\n \"utils/form\"\n];\nconst SELECT_DEFAULT_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"show-more-horizontal\",\n colorType: \"primary\"\n});\nconst CLEAR_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"reset\",\n colorType: \"primary\"\n});\n\n@Component({\n tag: \"gx-ide-entity-selector\",\n styleUrl: \"entity-selector.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/entity-selector\"]\n})\nexport class GxIdeEntitySelector {\n #componentLocale: any;\n\n @Element() el: HTMLGxIdeEntitySelectorElement;\n\n /**\n * Adds/removes a CSS class on the host. It removes focus-within styles when\n * focus is on a button.\n */\n @State() buttonHasFocus = false;\n\n @State() iconSrc: string = null;\n\n /**\n * Default value for the component. Used when the 'X' button is pressed.\n */\n @Prop() readonly defaultValue?: EntityData | null | undefined;\n\n /**\n * This attribute lets you specify if the element is disabled.\n */\n @Prop({ reflect: true }) readonly disabled: boolean = false;\n\n /**\n * The label caption. Only visible if \"labelPosition\" is not \"none\".\n * I no \"labelCaption\" is provided, a generic caption \"Select Entity\" will be provided\n */\n @Prop() readonly labelCaption?: string;\n\n /**\n * The label position\n */\n @Prop({ reflect: true }) readonly labelPosition?: LabelPosition =\n \"block-start\";\n\n /**\n * This property specifies the `name` of the control when used in a form.\n */\n @Prop({ reflect: true }) readonly name?: string;\n\n /**\n * Callback invoked when the action button is pressed. Returns the new value.\n */\n @Prop() readonly selectEntityCallback!: () => Promise<EntityData>;\n\n /**\n * Value currently assigned.\n */\n @Prop({ mutable: true }) value: EntityData | null | undefined;\n @Watch(\"value\")\n valueChangedHandler() {\n this.valueChanged.emit(this.value);\n this.#updateIconSrc();\n }\n\n /**\n * Emits the input value every time it changes\n */\n @Event() valueChanged: EventEmitter<EntityData>;\n\n // 6.Component Lifecycle Events\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n connectedCallback() {\n this.#updateIconSrc();\n }\n\n #btnClearClickHandler = () => {\n this.value = this.defaultValue;\n this.iconSrc = this.defaultValue?.iconSrc;\n };\n\n #btnSelectClickHandler = () => {\n this.selectEntityCallback().then(result => {\n this.value = result;\n });\n };\n\n #buttonFocusHandler = (e: FocusEvent) => {\n if (e.type === \"focus\") {\n this.buttonHasFocus = true;\n } else if (e.type === \"blur\") {\n this.buttonHasFocus = false;\n }\n };\n\n #renderControl = (): HTMLDivElement => {\n return (\n <div part=\"wrapper\" class=\"wrapper\">\n <ch-edit\n accessibleName={\n this.labelPosition === \"none\" &&\n this.#componentLocale.entitySelectorInputAccessibleName\n }\n class=\"input\"\n disabled={this.disabled}\n name={this.name || this.#componentLocale.entitySelectorNameAttribute}\n startImgSrc={this.iconSrc}\n readonly\n value={this.value?.name || this.defaultValue?.name}\n id=\"entity-input\"\n ></ch-edit>\n\n <button\n part=\"button-clear\"\n class=\"icon-button\"\n aria-label={this.#componentLocale.clearButtonLabel}\n title={this.#componentLocale.clearButtonLabel}\n type=\"button\"\n disabled={this.disabled}\n onClick={this.#btnClearClickHandler}\n onFocus={this.buttonHasFocus ? this.#buttonFocusHandler : undefined}\n onBlur={!this.buttonHasFocus ? this.#buttonFocusHandler : undefined}\n >\n <ch-image\n class=\"icon-md\"\n src={CLEAR_ICON}\n disabled={this.disabled}\n ></ch-image>\n </button>\n\n <button\n class=\"icon-button\"\n aria-label={this.#componentLocale.selectButtonLabel}\n title={this.#componentLocale.selectButtonLabel}\n type=\"button\"\n disabled={!this.selectEntityCallback || this.disabled}\n onClick={this.#btnSelectClickHandler}\n onBlur={!this.buttonHasFocus ? this.#buttonFocusHandler : undefined}\n onFocus={this.buttonHasFocus ? this.#buttonFocusHandler : undefined}\n >\n <ch-image\n class=\"icon-md\"\n src={SELECT_DEFAULT_ICON}\n disabled={this.disabled}\n ></ch-image>\n </button>\n </div>\n );\n };\n\n #updateIconSrc = () => {\n if (this.value && this.value.iconSrc) {\n this.iconSrc = this.value.iconSrc;\n }\n };\n\n render() {\n return (\n <Host\n class={{\n \"entity-selector--button-has-focus\": this.buttonHasFocus\n }}\n >\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n {this.labelPosition !== \"none\" ? (\n <div\n class={{\n \"field\": true,\n \"field-block\": this.labelPosition === \"block-start\",\n \"field-inline\": this.labelPosition === \"inline-start\"\n }}\n >\n <label class=\"label\" htmlFor=\"entity-input\">\n {this.labelCaption ||\n this.#componentLocale.entitySelectorInputAccessibleName}\n </label>\n {this.#renderControl()}\n </div>\n ) : (\n this.#renderControl()\n )}\n </Host>\n );\n }\n}\n\nexport type EntitySelectorLabels = {\n buttonClearLabel: string;\n buttonSelectLabel: string;\n};\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["mapStylesToComboBoxItemModel","styles","map","style","value","id","caption","label","name","TAB_DATA","layout","slot","code","tokens","composition","TAB_MODEL","panels","stencils","images","fonts","designSystem","DESIGN_TYPE_TO_TAB_MODEL_MAP","Map","designImportCss","DESIGN_DATA_TYPE_PANELS","DESIGN_DATA_TYPE_STENCILS","DESIGN_DATA_TYPE_IMAGES","DESIGN_DATA_TYPE_DESIGN_SYSTEM","DESIGN_DATA_TYPE_FONTS","ITEM_COMPOSE_ID_SEPARATOR","CHECKED_VALUE","MENU_DELETE","getIconPath","category","colorType","DESIGN","FILE_UPLOAD","WEBPANEL_ICON","PANEL_FOR_SD_ICON","CSS_BUNDLES","GxIdeImportFromDesign","_GxIdeImportFromDesign_componentLocale","set","this","_GxIdeImportFromDesign_loadedItems","_GxIdeImportFromDesign_emptyStateAnimated","_GxIdeImportFromDesign_formattedExtensions","_GxIdeImportFromDesign_accessTokenEl","_GxIdeImportFromDesign_importAsWebPanelsEl","_GxIdeImportFromDesign_moduleEl","_GxIdeImportFromDesign_messagesList","_GxIdeImportFromDesign_panelsSelected","_GxIdeImportFromDesign_stencilsSelected","_GxIdeImportFromDesign_imagesSelected","_GxIdeImportFromDesign_fontsSelected","_GxIdeImportFromDesign_fileInputHiddenEl","_GxIdeImportFromDesign_pathEl","_GxIdeImportFromDesign_warningTreeItem","leaf","startImgSrc","order","checkbox","disabled","_GxIdeImportFromDesign_initializeActiveTabs","activeTabs","_GxIdeImportFromDesign_evaluateAccessTokenRender","async","requiresAccessToken","requiresAccessTokenCallback","path","accessToken","length","accessTokenHasError","_GxIdeImportFromDesign_pathURLBlurHandler","loadDataCondition1","isLoaded","reactiveSettings","pathIsValid","lastLoadCallbackSettingValues","loadDataCondition2","__classPrivateFieldGet","_GxIdeImportFromDesign_loadData","call","_GxIdeImportFromDesign_objectsTreeSelectedItemsChangedHandler","event","detail","item","_a","itemComposedId","idList","split","itemId","itemDesignType","isChildNode","isDesignSystem","tabsModel","get","selectedDesignType","loadedItem","_GxIdeImportFromDesign_getLoadedItem","designDataDetail","_GxIdeImportFromDesign_getDesignDataDetail","designType","selectedDesignItem","_GxIdeImportFromDesign_instances","_GxIdeImportFromDesign_getCodeFactory","_GxIdeImportFromDesign_renderDetailDataTree","renderedTabs","clear","add","_GxIdeImportFromDesign_validatePath","validPathRegex","figmaURLRegex","urlWithExtensionRegex","test","_GxIdeImportFromDesign_objectsTreeCheckedItemsChangedHandler","items","Array","from","values","currentParentId","result","startsWith","checked","parentId","push","__classPrivateFieldSet","_GxIdeImportFromDesign_selectFileHandler","click","_GxIdeImportFromDesign_styleComboBoxInputHandler","styleValue","target","_GxIdeImportFromDesign_moduleInputHandler","module","defaultModule","isLoading","source","selectedFile","token","undefined","importAsWebPanels","designData","loadCallback","_GxIdeImportFromDesign_messageCallback","messages","success","firstDesignSystemName","_b","moduleId","message","loadFn","loadImageCallback","loadDesignSystemCallback","loadFontCallback","loadPanelDataCallback","returnedData","then","data","_GxIdeImportFromDesign_confirm","confirmCallback","styleName","_GxIdeImportFromDesign_cancel","cancelCallback","_GxIdeImportFromDesign_fitImagesHandler","fitImages","_GxIdeImportFromDesign_getPanelsSelectedItem","reduce","minIndex","index","_GxIdeImportFromDesign_importAsWebPanelsChangedHandler","loadData","_GxIdeImportFromDesign_removeFileSelection","_GxIdeImportFromDesign_selectFileInputChangedHandler","files","_GxIdeImportFromDesign_accessFocusHandler","element","type","_GxIdeImportFromDesign_accessBlurHandler","accessTokenChanged","_GxIdeImportFromDesign_pathUrlInputHandler","_GxIdeImportFromDesign_renderHeader","primaryButtonDisabled","clearFileButtonDisabled","stylesComboDisabled","moduleDisabled","pathWithErrorStyles","displayPathErrorTooltip","fitImagesIsDisabled","designDataTreeDataModel","primaryButtonCaption","header","btnReload","btnLoad","selectFileButton","h","class","input","debounce","config","inputDebounce","part","onInput","onBlur","placeholder","pathPlaceholder","ref","el","actionElement","blockAlign","tooltipSettings","inlineAlign","delay","pathErrorMessage","hidden","accept","onChange","removeFileSelection","title","onClick","src","accessTokenPlaceholder","onFocus","accessTokenErrorMessage","suggest","suggestOptions","alreadyProcessed","model","stylesAsComboBoxModel","labelPosition","defaultValue","selectEntityCallback","selectModuleCallback","onValueChanged","importAs","checkedValue","_GxIdeImportFromDesign_renderMessages","text","_GxIdeImportFromDesign_renderMain","_GxIdeImportFromDesign_renderDesignTree","_GxIdeImportFromDesign_renderDesignTabsCh","stateIconSrc","isAnimated","stateTitle","noDesignSelected","key","selectDesign","showLines","dragDisabled","dropDisabled","expandableButton","expandOnClick","toggleCheckboxes","onCheckedItemsChange","onSelectedItemsChange","_GxIdeImportFromDesign_renderFooter","buttonOkDisabled","footer","btnCancel","btnOk","_GxIdeImportFromDesign_evaluatePanelPreview","preview","alt","noPanelPreviewAvailable","_GxIdeImportFromDesign_renderPanelTab","renderControlsTree","detailTreeModel","_GxIdeImportFromDesign_renderImageTab","height","_GxIdeImportFromDesign_tabSelectionChangedHandler","newSelectedId","reRenderCounter","tab","scrollable","tabListPosition","selectedId","overflow","contain","onSelectedItemChange","display","has","Set","pathIsValidChanged","designDataChanged","newDesignData","panelsSelectedItem","isForWeb","panelsIconSrc","imagesIconSrc","tree","webPanels","expanded","_GxIdeImportFromDesign_recursiveDesignTreeItems","warning","pathChanged","newPath","fileIsLoaded","size","validatePathResult","newAccessToken","trim","stylesChanged","newStyles","componentWillLoad","Locale","getComponentStrings","extensions","ext","join","watchMessagesHandler","newValue","oldValue","scrollTop","scrollHeight","render","Host","iconSrc","selectedIndex","i","hasVariants","variants","itemWithWarning","isLeaf","selected","_GxIdeImportFromDesign_loadTreeItemCompositionModel","controls","modelList","control","Object","assign","textEditorFactoryCallback"],"sources":["src/components/design-import/helpers.ts","src/components/design-import/models.ts","src/components/design-import/design-import.scss?tag=gx-ide-design-import&encapsulation=shadow","src/components/design-import/design-import.tsx"],"sourcesContent":["import { ComboBoxModel } from \"@genexus/chameleon-controls-library\";\nimport { GxOption } from \"../../common/types\";\n\nexport const mapStylesToComboBoxItemModel = (\n styles: GxOption[]\n): ComboBoxModel =>\n styles?.map(style => ({\n value: style.id,\n caption: style.label || style.name\n }));\n","import { TabModel } from \"@genexus/chameleon-controls-library\";\nimport { DesignType } from \"./design-import\";\n\nexport const TAB_DATA: { [key in TAB_SELECTOR]: TabData } = {\n layout: { id: \"layout\", caption: \"Layout\", slot: \"layout\" },\n code: { id: \"code\", caption: \"Code\", slot: \"code\" },\n tokens: { id: \"tokens\", caption: \"Tokens\", slot: \"tokens\" },\n styles: { id: \"styles\", caption: \"Styles\", slot: \"styles\" },\n composition: {\n id: \"composition\",\n caption: \"Composition\",\n slot: \"composition\"\n }\n};\n\nexport const TAB_MODEL: TabDataModel = {\n panels: [\n {\n id: TAB_DATA.composition.id,\n name: TAB_DATA.composition.caption\n },\n {\n id: TAB_DATA.layout.id,\n name: TAB_DATA.layout.caption\n },\n {\n id: TAB_DATA.code.id,\n name: TAB_DATA.code.caption\n }\n ],\n stencils: [\n {\n id: TAB_DATA.composition.id,\n name: TAB_DATA.composition.caption\n },\n {\n id: TAB_DATA.layout.id,\n name: TAB_DATA.layout.caption\n },\n {\n id: TAB_DATA.code.id,\n name: TAB_DATA.code.caption\n }\n ],\n images: [\n {\n id: TAB_DATA.composition.id,\n name: TAB_DATA.composition.caption\n }\n ],\n fonts: [\n {\n id: TAB_DATA.composition.id,\n name: TAB_DATA.composition.caption\n }\n ],\n designSystem: [\n {\n id: TAB_DATA.tokens.id,\n name: TAB_DATA.tokens.caption\n },\n {\n id: TAB_DATA.styles.id,\n name: TAB_DATA.styles.caption\n }\n ]\n};\n\nexport type TabDataModel = {\n panels: TabModel;\n stencils: TabModel;\n images: TabModel;\n fonts: TabModel;\n designSystem: TabModel;\n};\n\ntype TabData = {\n id: TAB_SELECTOR;\n caption: string;\n slot: TAB_SELECTOR;\n};\n\nexport type TAB_SELECTOR =\n | \"layout\"\n | \"code\"\n | \"tokens\"\n | \"styles\"\n | \"composition\";\n\nexport const DESIGN_TYPE_TO_TAB_MODEL_MAP = new Map<DesignType, TabModel>([\n [\"panels\", TAB_MODEL.panels],\n [\"stencils\", TAB_MODEL.stencils],\n [\"images\", TAB_MODEL.images],\n [\"design_system\", TAB_MODEL.designSystem],\n [\"fonts\", TAB_MODEL.fonts]\n]);\n","@import \"../../global/gx-ide-mixins.scss\";\n@import \"../../../node_modules/@genexus/mercury/dist/mercury.scss\";\n\n:host {\n display: grid;\n block-size: 100%;\n overflow: auto;\n grid-template-rows: max-content 1fr max-content;\n}\n\n.section {\n display: contents;\n}\n\n// - - - - - - - - - - - - -\n// Header\n// - - - - - - - - - - - - -\n\n.header {\n display: grid;\n grid-auto-rows: max-content;\n // 88px is the inline-size of the largest label (Access Token) that is not always visible.\n // Setting 88px as the minimum inline size prevents an undesired difference when Access Token\n // is visible. This fix has been made for english only. The value should work with .ja and .zh also.\n grid-template-columns: minmax(88px, max-content) 1fr !important;\n\n &--show-access-token {\n grid-template-areas:\n \"path-url-label path-url-wrapper\"\n \"access-token-label access-token\"\n \"style-label style\"\n \"module-label module\"\n \"checkboxes-options checkboxes-options\";\n }\n &--hide-access-token {\n grid-template-areas:\n \"path-url-label path-url-wrapper\"\n \"style-label style\"\n \"module-label module\"\n \"checkboxes-options checkboxes-options\";\n }\n}\n// path url\n.path-url-wrapper {\n grid-template-columns: 1fr max-content;\n}\n.path-url-label {\n grid-area: path-url-label;\n}\n.path-url-control {\n flex-grow: 1;\n}\n.select-load-button {\n min-inline-size: 80px;\n}\n// access token\n.access-token-label {\n grid-area: access-token-label;\n}\n.access-token {\n grid-area: access-token;\n}\n// style\n.style-label {\n grid-area: style-label;\n}\n.style {\n grid-area: style;\n}\n// module\n.module-label {\n grid-area: module-label;\n}\n.module {\n grid-area: module;\n}\n// checkboxes options\n.checkboxes-options {\n grid-area: checkboxes-options;\n grid-template-columns: max-content max-content;\n justify-content: space-between;\n}\n\n// - - - - - - - - - - - - -\n// Main\n// - - - - - - - - - - - - -\n\n.main {\n display: grid;\n grid-template-columns: 250px 1fr;\n block-size: 100%;\n overflow: auto;\n\n &--loading {\n grid-template-columns: 1fr;\n }\n}\n\n.panel-tab {\n block-size: 100%;\n display: grid;\n grid-template-columns: 1fr 300px;\n\n .panel-item {\n overflow: auto;\n }\n}\n.panel-tab:has(> :only-child) {\n grid-template-columns: 1fr;\n}\n\n.tree-view {\n padding-block: var(--mer-spacing--2xs);\n}\n\n.tree-view-panel-item {\n border-inline-start: var(--section-common-border);\n}\n\n.checker-board {\n --white-square-color: #fff1;\n --black-square-color: #0000;\n background: linear-gradient(\n 45deg,\n var(--white-square-color) 25%,\n var(--black-square-color) 25%\n ),\n linear-gradient(\n -45deg,\n var(--white-square-color) 25%,\n var(--black-square-color) 25%\n ),\n linear-gradient(\n 45deg,\n var(--black-square-color) 75%,\n var(--white-square-color) 75%\n ),\n linear-gradient(\n -45deg,\n var(--black-square-color) 75%,\n var(--white-square-color) 75%\n );\n background-size: 20px 20px;\n background-position: 0 0, 0 10px, 10px -10px, -10px 0px;\n}\n\n/*--- Tabs ---*/\n.tab {\n border-width: 0 !important; // WA/TODO this should be a class on mercury\n}\n.tab.fit-images .composition-tab-slot {\n font-size: 0; // WA to prevent scroll\n}\n.tab.fit-images img {\n object-fit: scale-down;\n object-position: left top;\n max-height: 100%;\n}\n.tab--hidden {\n display: none;\n}\n\n// - - - - - - - - - - - - -\n// Footer\n// - - - - - - - - - - - - -\n\n.button-cancel,\n.button-ok {\n min-inline-size: var(--mer-spacing--4xl);\n}\n\n// - - - - - - - - - - - - -\n// Other\n// - - - - - - - - - - - - -\n\n.messages-slot-container {\n block-size: 100%;\n}\n\n.composition-tab-slot {\n block-size: 100%;\n overflow: auto;\n}\n\n.empty-state {\n overflow: auto;\n}\n.empty-state-button {\n // WA (It looks more pleasing with a little bit less of gap)\n transform: translateY(-12px);\n}\n\n// Messages Styles\n.messages-container {\n}\n.message {\n animation: fadeIn var(--mer-timing--fast) ease-in-out forwards;\n\n &--info {\n color: var(--mer-text__on-surface);\n }\n &--warning {\n color: var(--mer-text__warning);\n }\n &--error {\n color: var(--mer-text__error);\n }\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n// WA's\n.combo-box.ch-disabled {\n --control__bg-color: var(--control__background-color--disabled);\n --control__border-color: var(--control__border-color--disabled);\n --control__color: var(--control__color--disabled);\n --ch-placeholder-color: var(--control-placeholder__color--disabled);\n}\n\n.tree-view::part(item__header) {\n // TODO: Remove this when Mercury is updated to >= 0.12.8\n min-inline-size: var(--tree-view__min-inline-size);\n}\n","// Stencil\nimport { Component, Host, h, Prop, Element, State, Watch } from \"@stencil/core\";\n\n// Other Libraries\nimport {\n ChCheckboxCustomEvent,\n ChEditCustomEvent,\n ComboBoxModel,\n TabModel,\n TreeViewItemModel\n} from \"@genexus/chameleon-controls-library\";\nimport { TreeViewItemModelExtended } from \"@genexus/chameleon-controls-library\";\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\n\n// Custom Imports\nimport { config } from \"../../common/config\";\nimport { mapStylesToComboBoxItemModel } from \"./helpers\";\nimport { Locale } from \"../../common/locale\";\nimport { EntityData, GxOption } from \"../../common/types\";\nimport { TAB_DATA, DESIGN_TYPE_TO_TAB_MODEL_MAP, TAB_MODEL } from \"./models\";\n\nconst DESIGN_DATA_TYPE_PANELS = \"panels\";\nconst DESIGN_DATA_TYPE_STENCILS = \"stencils\";\nconst DESIGN_DATA_TYPE_IMAGES = \"images\";\nconst DESIGN_DATA_TYPE_DESIGN_SYSTEM = \"design_system\";\nconst DESIGN_DATA_TYPE_FONTS = \"fonts\";\n\nconst ITEM_COMPOSE_ID_SEPARATOR = \"@@@\";\n\n// ch-checkbox\nconst CHECKED_VALUE = \"on\";\n\n// Icons\nconst MENU_DELETE = getIconPath({\n category: \"menus\",\n name: \"delete\",\n colorType: \"primary\"\n});\nconst DESIGN = getIconPath({\n category: \"objects\",\n name: \"design\"\n});\nconst FILE_UPLOAD = getIconPath({\n category: \"controls\",\n name: \"file-upload\"\n});\n// For empty states\nconst WEBPANEL_ICON = getIconPath({\n category: \"objects\",\n name: \"webpanel\"\n});\nconst PANEL_FOR_SD_ICON = getIconPath({\n category: \"objects\",\n name: \"panel-for-sd\"\n});\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"components/button\",\n \"components/checkbox\",\n \"components/edit\",\n \"components/tree-view\",\n \"components/combo-box\",\n \"components/tab\",\n \"components/tooltip\",\n \"chameleon/scrollbar\"\n];\n\n@Component({\n tag: \"gx-ide-design-import\",\n styleUrl: \"design-import.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/design-import\"]\n})\nexport class GxIdeImportFromDesign {\n /**\n * The component hard-coded strings translations.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #componentLocale: any;\n\n /**\n * An array that keeps track of the tree items id's (design system data type\n * + item id) along with the content, that will be used to save and retrieve\n * items information, in order to avoid using a callback to get items\n * information that was already get. loadedItemsArray will be reset every time\n * a new design is loaded.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #loadedItems: Map<string, ItemLoadedInfo> = new Map();\n\n #emptyStateAnimated: boolean = false;\n #formattedExtensions: string;\n\n // 2. REFERENCE TO ELEMENTS //\n\n @Element() el: HTMLGxIdeDesignImportElement;\n\n /* References needed to collect data */\n #accessTokenEl!: HTMLChEditElement;\n #importAsWebPanelsEl!: HTMLChCheckboxElement;\n #moduleEl!: HTMLGxIdeEntitySelectorElement;\n #messagesList: HTMLElement;\n #panelsSelected: string[] = [];\n #stencilsSelected: string[] = [];\n #imagesSelected: string[] = [];\n #fontsSelected: string[] = [];\n #fileInputHiddenEl: HTMLInputElement;\n #pathEl: HTMLChEditElement;\n\n // Use to force a re-render\n @State() reRenderCounter: number = 0;\n\n // Maps to Chameleon Models:\n @State() stylesAsComboBoxModel: ComboBoxModel;\n\n // The current style value\n @State() styleValue: string = \"\";\n\n @State() accessTokenHasError: boolean = false;\n\n @State() pathIsValid: boolean;\n @Watch(\"pathIsValid\")\n pathIsValidChanged(pathIsValid: boolean) {\n if (pathIsValid) {\n this.#evaluateAccessTokenRender();\n } else {\n // hide access token input if path is not valid\n this.requiresAccessToken = false;\n }\n }\n\n @State() tabsModel: TabModel = [];\n\n @State() activeTabs: Map<DesignType, string> = new Map();\n\n @State() renderedTabs: Set<string> = new Set();\n\n /**\n * The design data loaded from file\n */\n @State() designData: DesignData = null;\n @Watch(\"designData\")\n designDataChanged(newDesignData: DesignData) {\n if (newDesignData) {\n // panels\n const panelsSelectedItem = this.#getPanelsSelectedItem(\n this.designData.panels\n );\n const isForWeb = this.#importAsWebPanelsEl.value === CHECKED_VALUE;\n const panelsIconSrc = isForWeb\n ? \"objects/webpanel\"\n : \"objects/panel-for-sd\";\n\n // images\n const imagesIconSrc = \"objects/image\";\n\n this.designDataTreeDataModel = [\n {\n order: 0,\n id: `parent${ITEM_COMPOSE_ID_SEPARATOR}${DESIGN_DATA_TYPE_PANELS}`,\n leaf: false,\n caption: isForWeb\n ? this.#componentLocale.tree.webPanels\n : this.#componentLocale.tree.panels,\n startImgSrc: panelsIconSrc,\n checkbox: true,\n checked: true,\n expanded: true,\n items: this.#recursiveDesignTreeItems(\n this.designData.panels,\n DESIGN_DATA_TYPE_PANELS,\n panelsIconSrc,\n panelsSelectedItem\n )\n },\n {\n order: 1,\n id: `parent${ITEM_COMPOSE_ID_SEPARATOR}${DESIGN_DATA_TYPE_STENCILS}`,\n leaf: false,\n caption: this.#componentLocale.tree.stencils,\n startImgSrc: \"objects/stencil\",\n checkbox: true,\n checked: true,\n expanded: true,\n items: this.designData.stencils.map(item => ({\n id: `${item.id}${ITEM_COMPOSE_ID_SEPARATOR}${DESIGN_DATA_TYPE_STENCILS}`,\n class: \"object tree-view-item\",\n leaf: !item.warning,\n caption: item.name,\n startImgSrc: \"objects/stencil\",\n checkbox: true,\n checked: true,\n expanded: true,\n items: item.warning && this.#warningTreeItem(item.warning)\n }))\n },\n {\n order: 2,\n id: `parent${ITEM_COMPOSE_ID_SEPARATOR}${DESIGN_DATA_TYPE_IMAGES}`,\n leaf: false,\n caption: this.#componentLocale.tree.images,\n startImgSrc: imagesIconSrc,\n checkbox: true,\n checked: true,\n expanded: true,\n items: this.#recursiveDesignTreeItems(\n this.designData.images,\n DESIGN_DATA_TYPE_IMAGES,\n imagesIconSrc\n )\n },\n {\n order: 3,\n id: `parent${ITEM_COMPOSE_ID_SEPARATOR}${DESIGN_DATA_TYPE_FONTS}`,\n leaf: false,\n caption: this.#componentLocale.tree.fonts,\n startImgSrc: \"controls/font\",\n checkbox: true,\n checked: true,\n expanded: true,\n items: this.designData.fonts.map(item => ({\n id: `${item.id}${ITEM_COMPOSE_ID_SEPARATOR}${DESIGN_DATA_TYPE_FONTS}`,\n leaf: !item.warning,\n caption: item.name,\n startImgSrc: \"controls/font\",\n checkbox: true,\n checked: true,\n expanded: true,\n items: item.warning && this.#warningTreeItem(item.warning)\n }))\n },\n {\n order: 4,\n id: `${\n this.designData.designSystem.length > 0\n ? this.designData.designSystem[0].id\n : \"parent\"\n }${ITEM_COMPOSE_ID_SEPARATOR}${DESIGN_DATA_TYPE_DESIGN_SYSTEM}`,\n leaf: true,\n caption: this.#componentLocale.tree.designSystem,\n startImgSrc: \"objects/dso\",\n checkbox: true,\n checked: true\n }\n ];\n }\n }\n\n /**\n * The model data loaded into the detail tree\n */\n @State() detailTreeModel: TreeViewItemModel[] = [];\n\n /**\n * If the design data is loading or not, for disabled actions\n */\n @State() isLoading = false;\n\n /**\n * If the design data is loaded or not, for conditioning input file\n */\n @State() isLoaded = false;\n\n /**\n * The messages receive when the file is loading\n */\n @State() messages: MessageData[] = [];\n\n /**\n * The file selected for load the design data\n */\n @State() selectedFile: File;\n\n /**\n * The type of the design data selected for show it visual tabs\n */\n @State() selectedDesignType: DesignType;\n\n /**\n * The item of the design data selected for show its contents on visual tabs\n */\n @State() selectedDesignItem: any;\n\n /**\n * Whether to show or not the access token input field\n */\n @State() requiresAccessToken: boolean;\n\n /**\n * the design data tree view data model\n */\n @State() designDataTreeDataModel: TreeViewItemModel[] = [];\n\n /**\n * Used to trigger a re-render after an item has been selected on\n * renderDesignTree, in order to set the first tab as the active tab\n * (setFirstActiveTab()), since calling this method inside\n * objectsTreeSelectedItemsChangedHandler does not always work without a\n * setTimeOut.\n */\n @State() updateTabsActiveTab: boolean = false;\n\n /**\n * If true, images will be fitted in the container\n */\n @State() fitImages = false;\n\n /**\n * Represents a collection of settings where each key is a specific option. Its\n * boolean value determines whether changes to that option are listened to and\n * trigger the loadCallback callback.\n */\n @Prop() readonly reactiveSettings: ReactiveSettings = {\n path: true,\n style: false,\n module: false,\n importAsWebPanels: true\n };\n\n /**\n * Used to keep track of the settings values since the last loadCallback.\n * Used to know if loadCallback is required to be called again, when any\n * of these values are changed.\n */\n @State() lastLoadCallbackSettingValues: ReactiveSettingsValues = {\n path: undefined,\n style: undefined,\n moduleId: undefined,\n importAsWebPanels: undefined\n };\n\n /**\n * The valid extensions for the files that will be loaded in Path/URL\n * (ie.: \".fig, .sketch\")\n */\n @Prop() readonly extensions!: string[];\n\n /**\n * Default value for the 'Module' field.\n */\n @Prop() readonly defaultModule: EntityData;\n\n /**\n * The path/URL for load the design data\n */\n @Prop({ mutable: true }) path: string = \"\";\n @Watch(\"path\")\n pathChanged(newPath: string) {\n const fileIsLoaded = this.selectedFile?.size > 0;\n const validatePathResult = this.#validatePath(newPath) || fileIsLoaded;\n this.pathIsValid = validatePathResult;\n }\n\n /**\n * The access token for the given path, which is not always required\n */\n @Prop({ mutable: true }) accessToken: string = \"\";\n @Watch(\"accessToken\")\n accessTokenChanged(newAccessToken: string) {\n if (!newAccessToken.trim().length) {\n this.accessTokenHasError = true;\n return;\n }\n this.accessTokenHasError = false;\n this.accessToken = newAccessToken;\n }\n\n /**\n * The value for \"Import as Web Panels\" checkbox.\n */\n @Prop() readonly importAsWebPanels: boolean = false;\n\n /**\n * Callback invoked when the action is executed in the Module/Folder filter.\n * It returns the information of the selected object (id and name) or\n * 'undefined' if it was canceled.\n */\n @Prop() readonly selectModuleCallback: SelectModuleCallback;\n\n /**\n * This is a function provided by the developer that cancel the load operation.\n */\n @Prop() readonly cancelCallback!: CancelCallback;\n\n /**\n * This is a function provided by the developer that initiates the process\n * of importing a design.\n */\n @Prop() readonly confirmCallback!: ConfirmCallback;\n\n /**\n * This is a function provided by the developer that returns the list of\n * data types loaded from a file or URL.\n */\n @Prop() readonly loadCallback!: LoadCallback;\n\n /**\n * This is a function provided by the developer that returns the information\n * of a Design System type of data.\n */\n // eslint-disable-next-line prettier/prettier\n @Prop() readonly loadDesignSystemCallback!: LoadDesignSystemCallback;\n\n /**\n * This is a function provided by the developer that returns the information\n * of a Font type of data.\n */\n @Prop() readonly loadFontCallback!: LoadFontCallback;\n\n /**\n * This is a function provided by the developer that returns the information\n * of an Image System type of data.\n */\n @Prop() readonly loadImageCallback!: LoadImageCallback;\n\n /**\n * This is a function provided by the developer that returns the information\n * of a Panel type of data.\n */\n @Prop() readonly loadPanelDataCallback!: LoadPanelDataCallback;\n\n /**\n * Callback invoked to determine if accessing a design requires an authentication token.\n */\n @Prop() readonly requiresAccessTokenCallback!: RequiresAccessTokenCallback;\n\n /**\n * The styles render in the option style selector\n */\n @Prop() readonly styles!: GxOption[];\n @Watch(\"styles\")\n stylesChanged(newStyles: GxOption[]) {\n this.stylesAsComboBoxModel = mapStylesToComboBoxItemModel(newStyles);\n }\n\n /**\n * This is a function provided by the developer for create an instance of a text editor.\n */\n // eslint-disable-next-line prettier/prettier\n @Prop() readonly textEditorFactoryCallback!: TextEditorFactoryCallback;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n this.#formattedExtensions = this.extensions\n .map(ext => `.${ext}`)\n .join(\", \");\n this.stylesChanged(this.styles);\n this.#initializeActiveTabs();\n this.pathChanged(this.path);\n this.styleValue =\n this.stylesAsComboBoxModel?.length > 0\n ? this.stylesAsComboBoxModel[0]?.value\n : \"\";\n }\n\n @Watch(\"messages\")\n watchMessagesHandler(newValue: boolean, oldValue: boolean) {\n if (newValue !== oldValue) {\n if (this.#messagesList) {\n this.#messagesList.scrollTop = this.#messagesList.scrollHeight;\n }\n }\n }\n\n #warningTreeItem = (caption: string) => {\n return [\n {\n leaf: true,\n caption: `Warning: ${caption}`,\n startImgSrc: getIconPath({\n category: \"system\",\n name: \"warning\",\n colorType: \"warning\"\n }),\n order: -1,\n checkbox: false,\n disabled: true\n } as TreeViewItemModel\n ];\n };\n\n #recursiveDesignTreeItems(\n items: DesignItemData[],\n designType: DesignType,\n iconSrc: string,\n selectedIndex: number = undefined\n ): TreeViewItemModel[] {\n return items.map((item, i) => {\n const id = `${item.id}${ITEM_COMPOSE_ID_SEPARATOR}${designType}`;\n const hasVariants = item.variants?.length > 0;\n const itemWithWarning = item.warning\n ? this.#warningTreeItem(item.warning)\n : [];\n const isLeaf = !hasVariants && !item.warning;\n\n return {\n id: id,\n leaf: isLeaf,\n caption: item.name,\n startImgSrc: iconSrc,\n checkbox: true,\n checked: true,\n expanded: !isLeaf,\n selected: selectedIndex === i,\n order: i,\n items: [\n ...itemWithWarning,\n ...(hasVariants\n ? this.#recursiveDesignTreeItems(item.variants, designType, iconSrc)\n : [])\n ]\n };\n });\n }\n\n #initializeActiveTabs = () => {\n this.activeTabs.set(\"panels\", TAB_MODEL.panels[0].id);\n this.activeTabs.set(\"stencils\", TAB_MODEL.stencils[0].id);\n this.activeTabs.set(\"images\", TAB_MODEL.images[0].id);\n this.activeTabs.set(\"fonts\", TAB_MODEL.fonts[0].id);\n this.activeTabs.set(\"design_system\", TAB_MODEL.designSystem[0].id);\n };\n\n #evaluateAccessTokenRender = async () => {\n this.requiresAccessToken = await this.requiresAccessTokenCallback(\n this.path\n );\n // evaluate access token error\n if (this.accessToken.length) {\n this.accessTokenHasError = false;\n }\n };\n\n #pathURLBlurHandler = async () => {\n const loadDataCondition1 =\n this.isLoaded &&\n this.reactiveSettings.path &&\n this.pathIsValid &&\n this.path !== this.lastLoadCallbackSettingValues.path;\n const loadDataCondition2 =\n !this.requiresAccessToken ||\n (this.requiresAccessToken && this.accessToken.length > 0);\n if (loadDataCondition1 && loadDataCondition2) {\n this.#loadData();\n }\n };\n\n #loadTreeItemCompositionModel(\n controls: DesignPanelControlData[]\n ): TreeViewItemModel[] {\n const modelList: TreeViewItemModel[] = [];\n for (const control of controls) {\n let model: TreeViewItemModel = {\n id: control.name,\n caption: control.name,\n startImgSrc: control.type,\n checkbox: false,\n expanded: true,\n leaf: control.leaf\n };\n if (control.controls) {\n model = {\n ...model,\n items: this.#loadTreeItemCompositionModel(control.controls)\n };\n }\n modelList.push(model);\n }\n return modelList;\n }\n\n #objectsTreeSelectedItemsChangedHandler = async (\n event: CustomEvent<TreeViewItemModelExtended[]>\n ) => {\n if (event.detail.length) {\n const item = event.detail[0]?.item;\n const itemComposedId = item.id;\n const idList = itemComposedId.split(ITEM_COMPOSE_ID_SEPARATOR);\n const itemId = idList[0];\n const itemDesignType: DesignType = idList[1] as DesignType;\n const isChildNode = itemId && itemId !== \"parent\";\n const isDesignSystem = itemDesignType === \"design_system\";\n if (isChildNode || isDesignSystem) {\n this.tabsModel = DESIGN_TYPE_TO_TAB_MODEL_MAP.get(itemDesignType);\n this.selectedDesignType = itemDesignType;\n const loadedItem = this.#getLoadedItem(itemComposedId);\n if (!loadedItem) {\n const designDataDetail: DesignItemDataDetail =\n await this.#getDesignDataDetail(itemId, this.selectedDesignType);\n this.#loadedItems.set(itemComposedId, {\n designType: this.selectedDesignType,\n designDataDetail: designDataDetail\n });\n } else {\n // Item has been queried already. The item content exists already.\n this.selectedDesignType = loadedItem.designType;\n this.selectedDesignItem = loadedItem.designDataDetail;\n this.#getCodeFactory(loadedItem.designType);\n this.#renderDetailDataTree(loadedItem.designType);\n }\n this.renderedTabs.clear();\n this.renderedTabs.add(this.activeTabs.get(this.selectedDesignType));\n }\n }\n };\n\n #getLoadedItem = (id: string): ItemLoadedInfo | undefined => {\n return this.#loadedItems?.get(id);\n };\n\n #validatePath = (path: string): boolean => {\n const validPathRegex = /^(\\/|\\.\\/|(\\w:))[^:*?\"<>|]*\\.(sketch|gxsketch)$/i; // Match valid file paths\n const figmaURLRegex = /^https?:\\/\\/(www\\.)?figma\\.com/; // Match URLs containing \"www.figma.com\"\n const urlWithExtensionRegex =\n /^https?:\\/\\/[^\\s/$.?#].[^\\s]*\\.(sketch|gxsketch)$/i; // Match URLs ending with .sketch or .gxsketch\n const pathIsValid =\n validPathRegex.test(path) ||\n figmaURLRegex.test(path) ||\n urlWithExtensionRegex.test(path);\n return pathIsValid;\n };\n\n #objectsTreeCheckedItemsChangedHandler = (\n event: CustomEvent<Map<string, TreeViewItemModelExtended>>\n ) => {\n const items = Array.from(event.detail.values());\n let currentParentId = null;\n const result: { [key: string]: string[] } = {};\n\n for (const item of items) {\n if (item.item.id.startsWith(`parent${ITEM_COMPOSE_ID_SEPARATOR}`)) {\n currentParentId = item.item.id.split(ITEM_COMPOSE_ID_SEPARATOR)[1];\n result[currentParentId] = [];\n } else if (item.item.checked && currentParentId) {\n const parentId = item.item.id.split(ITEM_COMPOSE_ID_SEPARATOR)[1];\n if (parentId === currentParentId) {\n const id = item.item.id.split(ITEM_COMPOSE_ID_SEPARATOR)[0];\n result[currentParentId].push(id);\n }\n }\n }\n // const { designSystem, fonts, images, panels, stencils } = result;\n const { fonts, panels, stencils, images } = result;\n\n // this.designSystemSelected = designSystem;\n this.#panelsSelected = panels;\n this.#stencilsSelected = stencils;\n this.#imagesSelected = images;\n this.#fontsSelected = fonts;\n };\n\n #selectFileHandler = (): void => {\n this.#fileInputHiddenEl.click();\n };\n\n #styleComboBoxInputHandler = (event: CustomEvent<string> | InputEvent) => {\n this.styleValue = (event.target as HTMLChComboBoxRenderElement).value;\n if (\n this.reactiveSettings.style &&\n this.styleValue !== this.lastLoadCallbackSettingValues.style\n ) {\n this.#loadData();\n }\n };\n\n #moduleInputHandler = (event: CustomEvent<EntityData>) => {\n if (\n this.reactiveSettings.module &&\n this.defaultModule.id !== event.detail.id &&\n this.pathIsValid\n ) {\n this.#loadData();\n }\n };\n\n #loadData = async (): Promise<void> => {\n this.isLoading = true;\n const source = this.selectedFile ? this.selectedFile : this.path;\n const token = this.#accessTokenEl ? this.#accessTokenEl.value : undefined;\n const style = this.styleValue;\n const importAsWebPanels = this.#importAsWebPanelsEl.value === CHECKED_VALUE;\n const designData: DesignData = await this.loadCallback(\n source,\n style,\n importAsWebPanels,\n token,\n this.#messageCallback\n );\n\n // clear\n this.#panelsSelected = [];\n this.#stencilsSelected = [];\n this.#fontsSelected = [];\n this.selectedDesignType = undefined;\n this.selectedDesignItem = undefined;\n this.messages = [];\n\n this.designData = designData;\n this.isLoaded = designData?.success ?? false;\n this.isLoading = false;\n\n const firstDesignSystemName = designData.designSystem[0]?.name;\n if (firstDesignSystemName && !this.styleValue) {\n this.styleValue = firstDesignSystemName;\n }\n\n // update the settings that were used for the last load\n if (this.reactiveSettings.path && this.pathIsValid) {\n this.lastLoadCallbackSettingValues.path = this.path;\n }\n if (this.reactiveSettings.style) {\n this.lastLoadCallbackSettingValues.style = style;\n }\n if (this.reactiveSettings.module) {\n this.lastLoadCallbackSettingValues.moduleId = this.#moduleEl.value.id;\n }\n if (this.reactiveSettings.importAsWebPanels) {\n this.lastLoadCallbackSettingValues.importAsWebPanels = importAsWebPanels;\n }\n };\n\n #messageCallback: LoadMessageCallback = message => {\n this.messages = [...this.messages, message];\n };\n\n #getDesignDataDetail = async (\n id: string,\n designType: DesignType\n ): Promise<DesignItemDataDetail> => {\n let loadFn:\n | LoadPanelDataCallback\n | LoadImageCallback\n | LoadFontCallback\n | LoadDesignSystemCallback;\n\n switch (designType) {\n case DESIGN_DATA_TYPE_IMAGES:\n loadFn = this.loadImageCallback;\n break;\n case DESIGN_DATA_TYPE_DESIGN_SYSTEM:\n loadFn = this.loadDesignSystemCallback;\n break;\n case DESIGN_DATA_TYPE_FONTS:\n loadFn = this.loadFontCallback;\n break;\n case DESIGN_DATA_TYPE_PANELS:\n case DESIGN_DATA_TYPE_STENCILS:\n loadFn = this.loadPanelDataCallback;\n break;\n }\n\n let returnedData: DesignItemDataDetail;\n await loadFn(id).then((data: DesignItemDataDetail) => {\n this.selectedDesignType = designType;\n this.selectedDesignItem = data;\n this.#getCodeFactory(designType);\n this.#renderDetailDataTree(designType);\n returnedData = data;\n });\n\n return returnedData;\n };\n\n #getCodeFactory(designType: string) {\n switch (designType) {\n case DESIGN_DATA_TYPE_PANELS:\n case DESIGN_DATA_TYPE_STENCILS:\n this.textEditorFactoryCallback(\n \"code\",\n TAB_DATA.code.slot,\n this.selectedDesignItem.code\n );\n this.textEditorFactoryCallback(\n \"html\",\n TAB_DATA.layout.slot,\n this.selectedDesignItem.layout\n );\n break;\n case DESIGN_DATA_TYPE_DESIGN_SYSTEM:\n this.textEditorFactoryCallback(\n \"tokens\",\n TAB_DATA.tokens.slot,\n this.selectedDesignItem.tokens\n );\n this.textEditorFactoryCallback(\n \"styles\",\n TAB_DATA.styles.slot,\n this.selectedDesignItem.styles\n );\n break;\n }\n }\n\n #confirm = (): void => {\n this.confirmCallback({\n panels: this.#panelsSelected,\n stencils: this.#stencilsSelected,\n fonts: this.#fontsSelected,\n images: this.#imagesSelected,\n moduleId: this.#moduleEl?.value?.id,\n styleName: this.styleValue,\n importAsWebPanels: this.#importAsWebPanelsEl.value === CHECKED_VALUE\n });\n };\n\n #cancel = (): void => {\n this.cancelCallback();\n this.isLoading = false;\n };\n\n #fitImagesHandler = (event: ChCheckboxCustomEvent<any> | InputEvent) => {\n this.fitImages = event.detail === CHECKED_VALUE;\n };\n\n #getPanelsSelectedItem = (panels: DesignItemData[]): number => {\n return panels.reduce((minIndex, item, index, panels) => {\n return panels[minIndex].name <= item.name ? minIndex : index;\n }, 0);\n };\n\n #importAsWebPanelsChangedHandler = () => {\n const loadData =\n this.reactiveSettings.importAsWebPanels && this.pathIsValid;\n if (loadData) {\n this.#loadData();\n }\n };\n\n #removeFileSelection = () => {\n this.selectedFile = null;\n this.path = \"\";\n this.accessToken = \"\";\n this.selectedFile = null;\n this.#fileInputHiddenEl.value = null;\n };\n\n #selectFileInputChangedHandler = (event: InputEvent) => {\n const target = event.target as HTMLInputElement;\n if (target.files?.length > 0) {\n this.selectedFile = target.files[0];\n this.path = this.selectedFile.name;\n // we know the path is valid because the extensions are restricted by \"extensions\" Prop.\n }\n };\n\n #accessFocusHandler = (event: ChEditCustomEvent<string> | FocusEvent) => {\n const element = event.target as HTMLChEditElement;\n element.type = \"text\"; // display token on focus\n };\n\n #accessBlurHandler = (event: ChEditCustomEvent<string> | FocusEvent) => {\n const element = event.target as HTMLChEditElement;\n element.type = \"password\"; // hide token on blur\n\n this.accessTokenChanged(element.value);\n };\n\n #pathUrlInputHandler = async (\n event: ChEditCustomEvent<string> | InputEvent\n ) => {\n this.path = event.detail as string;\n this.#evaluateAccessTokenRender();\n this.selectedFile = null;\n if (!this.path.length) {\n this.designData = null;\n }\n };\n\n #renderHeader = (): Element => {\n const primaryButtonDisabled =\n this.isLoading ||\n (this.pathIsValid &&\n this.requiresAccessToken &&\n this.accessToken.length === 0);\n const clearFileButtonDisabled = this.isLoading || this.path.length === 0;\n const stylesComboDisabled = this.isLoading;\n const moduleDisabled = this.isLoading;\n const pathWithErrorStyles = !this.pathIsValid && this.path.length > 0;\n const displayPathErrorTooltip = !this.pathIsValid && this.path.length > 0;\n const fitImagesIsDisabled =\n this.isLoading ||\n !this.designDataTreeDataModel.length ||\n this.selectedDesignType === \"stencils\" ||\n this.selectedDesignType === \"design_system\";\n\n let primaryButtonCaption;\n if (\n this.pathIsValid &&\n this.path === this.lastLoadCallbackSettingValues.path\n ) {\n primaryButtonCaption = this.#componentLocale.header.btnReload;\n } else if (this.pathIsValid) {\n primaryButtonCaption = this.#componentLocale.header.btnLoad;\n } else {\n primaryButtonCaption = this.#componentLocale.header.selectFileButton;\n }\n\n return (\n <header\n class={{\n \"header\": true,\n \"control-header-with-border\": true,\n \"spacing-body-inline\": true,\n \"spacing-body-block-start\": true,\n \"header--show-access-token\": this.requiresAccessToken,\n \"header--hide-access-token\": !this.requiresAccessToken,\n \"field-group-cols-2\": true\n }}\n >\n <label\n // path/url label\n class=\"label path-url-label\"\n >\n {this.#componentLocale.header.path}\n </label>\n <div class=\"path-url-wrapper buttons-spacer\">\n <ch-edit\n // path/url/file input\n id=\"path-url\"\n class={{\n \"input\": true,\n \"input-error\": pathWithErrorStyles,\n \"path-url-control\": true\n }}\n debounce={config.inputDebounce}\n part=\"option-path\"\n type=\"text\"\n value={this.path}\n onInput={this.#pathUrlInputHandler}\n onBlur={this.reactiveSettings.path && this.#pathURLBlurHandler}\n disabled={this.isLoading}\n placeholder={`${this.#componentLocale.header.pathPlaceholder}`}\n startImgSrc={FILE_UPLOAD}\n ref={(el: HTMLChEditElement) =>\n (this.#pathEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n {displayPathErrorTooltip && (\n <ch-tooltip\n class=\"tooltip\"\n actionElement={this.#pathEl as unknown as HTMLButtonElement}\n blockAlign={config.tooltipSettings.blockAlign}\n inlineAlign={config.tooltipSettings.inlineAlign}\n delay={config.tooltipSettings.delay}\n >\n {this.#componentLocale.header.pathErrorMessage}{\" \"}\n {this.#formattedExtensions}\n </ch-tooltip>\n )}\n\n <input\n hidden\n type=\"file\"\n accept={this.#formattedExtensions}\n onChange={this.#selectFileInputChangedHandler}\n ref={(el: HTMLInputElement) =>\n (this.#fileInputHiddenEl = el as HTMLInputElement)\n }\n />\n\n <div class=\"buttons-spacer\">\n <button\n // remove file selection\n aria-label={this.#componentLocale.header.removeFileSelection}\n title={this.#componentLocale.header.removeFileSelection}\n id=\"reset-all-button\"\n class=\"button-tertiary button-icon-only\"\n part=\"reset-all-button\"\n disabled={clearFileButtonDisabled}\n onClick={!clearFileButtonDisabled && this.#removeFileSelection}\n >\n <ch-image\n class=\"icon-md\"\n src={MENU_DELETE}\n disabled={clearFileButtonDisabled}\n ></ch-image>\n </button>\n <button\n // load file button\n id=\"button-load\"\n type=\"primary-text-only\"\n onClick={\n this.pathIsValid ? this.#loadData : this.#selectFileHandler\n }\n part=\"button button--load\"\n disabled={primaryButtonDisabled}\n class={{\n \"button-primary\": this.pathIsValid,\n \"button-secondary\": !this.pathIsValid,\n \"select-load-button\": true\n }}\n >\n {primaryButtonCaption}\n </button>\n </div>\n </div>\n\n {this.requiresAccessToken && [\n <label\n // access token label\n class=\"label access-token-label\"\n >\n {this.#componentLocale.header.accessToken}\n </label>,\n <div>\n <ch-edit\n class={{\n \"input\": true,\n \"access-token\": true,\n \"input-error\": this.accessTokenHasError\n }}\n ref={(el: HTMLChEditElement) =>\n (this.#accessTokenEl = el as HTMLChEditElement)\n }\n value={this.accessToken}\n placeholder={this.#componentLocale.header.accessTokenPlaceholder}\n onFocus={this.#accessFocusHandler}\n onBlur={this.#accessBlurHandler}\n part=\"access-token\"\n disabled={this.isLoading}\n type=\"password\"\n ></ch-edit>\n {this.accessTokenHasError && (\n <ch-tooltip\n class=\"tooltip\"\n actionElement={\n this.#accessTokenEl as unknown as HTMLButtonElement\n }\n blockAlign={config.tooltipSettings.blockAlign}\n inlineAlign={config.tooltipSettings.inlineAlign}\n delay={config.tooltipSettings.delay}\n >\n {this.#componentLocale.header.accessTokenErrorMessage}\n </ch-tooltip>\n )}\n </div>\n ]}\n <label\n // style label\n class=\"label style-label\"\n >\n {this.#componentLocale.header.style}\n </label>\n <ch-combo-box-render\n // style combo box\n suggest={true}\n suggestOptions={{\n alreadyProcessed: true\n }}\n disabled={stylesComboDisabled}\n model={this.stylesAsComboBoxModel}\n value={this.styleValue}\n onInput={this.#styleComboBoxInputHandler}\n part=\"option-style\"\n class=\"combo-box style\"\n ></ch-combo-box-render>\n\n <label\n // module label\n class=\"label module-label\"\n >\n {this.#componentLocale.header.module}\n </label>\n <gx-ide-entity-selector\n // module entity selector\n labelPosition=\"none\"\n value={this.defaultModule}\n defaultValue={this.defaultModule}\n selectEntityCallback={this.selectModuleCallback}\n ref={(el: HTMLGxIdeEntitySelectorElement) =>\n (this.#moduleEl = el as HTMLGxIdeEntitySelectorElement)\n }\n onValueChanged={\n this.reactiveSettings.module && this.#moduleInputHandler\n }\n disabled={moduleDisabled}\n class=\"module\"\n ></gx-ide-entity-selector>\n\n <div\n // import as web panels\n class=\"checkboxes-options field-group\"\n >\n <ch-checkbox\n caption={this.#componentLocale.header.importAs}\n checkedValue={CHECKED_VALUE}\n class=\"checkbox import-as-web-panels\"\n ref={(el: HTMLChCheckboxElement) =>\n (this.#importAsWebPanelsEl = el as HTMLChCheckboxElement)\n }\n value={this.importAsWebPanels ? CHECKED_VALUE : undefined}\n part=\"option-import-as-web-panels\"\n disabled={this.isLoading}\n onInput={this.#importAsWebPanelsChangedHandler}\n ></ch-checkbox>\n\n <div\n class={{\n \"field-group-inline\": true,\n \"checkboxes-options__col-right\": true\n }}\n >\n <ch-checkbox\n // fit images\n caption={this.#componentLocale.header.fitImages}\n checkedValue={CHECKED_VALUE}\n class=\"checkbox\"\n part=\"fit-images-checkbox\"\n disabled={fitImagesIsDisabled}\n onInput={this.#fitImagesHandler}\n ></ch-checkbox>\n </div>\n </div>\n </header>\n );\n };\n\n #renderMessages = (): HTMLParagraphElement[] => {\n return (\n this.messages.length > 0 &&\n this.messages.map(message => (\n <p\n class={{\n \"text-body-regular-m\": true,\n \"message\": true,\n [`message--${message.type}`]: true\n }}\n >\n {message.type}: {message.text}\n </p>\n ))\n );\n };\n\n #renderDetailDataTree(designType: string) {\n switch (designType) {\n case DESIGN_DATA_TYPE_PANELS:\n case DESIGN_DATA_TYPE_STENCILS:\n this.detailTreeModel = this.#loadTreeItemCompositionModel(\n this.selectedDesignItem.composition.controls\n );\n break;\n }\n }\n\n #renderMain = () => {\n if (this.isLoading || this.designData?.success === false) {\n return (\n <div\n class=\"main main--loading scrollable\"\n ref={(el: HTMLElement) => (this.#messagesList = el as HTMLElement)}\n >\n {this.#renderMessages()}\n <div class=\"text-body-regular-m spacing-body\">\n <slot name=\"messages\"></slot>\n </div>\n </div>\n );\n } else if (this.designData?.success) {\n return (\n /* #main*/\n <div class=\"main\">\n {[this.#renderDesignTree(), this.#renderDesignTabsCh()]}\n </div>\n );\n } else {\n return (\n <gx-ide-empty-state\n class=\"empty-state scrollable\"\n stateIconSrc={DESIGN}\n isAnimated={this.#emptyStateAnimated}\n stateTitle={this.#componentLocale.messages.noDesignSelected}\n key=\"no-objects-empty-state\"\n >\n <button\n // begin by selecting a file\n class=\"button-tertiary empty-state-button\"\n onClick={this.#selectFileHandler}\n >\n {this.#componentLocale.messages.selectDesign}\n </button>\n </gx-ide-empty-state>\n );\n }\n };\n\n #renderDesignTree = (): HTMLChTreeViewElement => {\n return (\n <ch-tree-view-render\n part=\"data-tree\"\n class=\"tree-view\"\n id=\"data-tree\"\n showLines=\"last\"\n model={this.designDataTreeDataModel}\n dragDisabled={true}\n dropDisabled={true}\n expandableButton=\"action\"\n expandOnClick={false}\n toggleCheckboxes={true}\n checkbox={true}\n checked={true}\n onCheckedItemsChange={this.#objectsTreeCheckedItemsChangedHandler}\n onSelectedItemsChange={this.#objectsTreeSelectedItemsChangedHandler}\n ></ch-tree-view-render>\n );\n };\n\n #renderFooter = () => {\n const buttonOkDisabled =\n this.designData?.success !== true || this.isLoading;\n return (\n <footer class=\"control-footer-with-border spacing-body-block-end spacing-body-inline\">\n <div class=\"buttons-spacer\">\n <button\n // button cancel\n id=\"button-cancel\"\n class=\"button-secondary button-cancel\"\n type=\"outlined\"\n onClick={this.#cancel}\n part=\"button button--cancel\"\n slot=\"footer-end\"\n >\n {this.#componentLocale.footer.btnCancel}\n </button>\n <button\n // button ok\n id=\"button-ok\"\n class=\"button-primary button-ok\"\n type=\"primary-text-only\"\n onClick={!buttonOkDisabled && this.#confirm}\n part=\"button button--ok\"\n disabled={buttonOkDisabled}\n slot=\"footer-end\"\n >\n {this.#componentLocale.footer.btnOk}\n </button>\n </div>\n </footer>\n );\n };\n\n #evaluatePanelPreview = () => {\n if (this.selectedDesignType === \"panels\") {\n return this.selectedDesignItem?.composition?.preview ? (\n <div\n part=\"data-panel-composition-preview\"\n class=\"panel-item scrollable\"\n >\n <img\n src={this.selectedDesignItem.composition.preview}\n alt=\"Preview\"\n />\n </div>\n ) : (\n <gx-ide-empty-state\n class=\"panel-tab__empty-state\"\n stateTitle={this.#componentLocale.messages.noPanelPreviewAvailable}\n stateIconSrc={\n this.#importAsWebPanelsEl.value === CHECKED_VALUE\n ? WEBPANEL_ICON\n : PANEL_FOR_SD_ICON\n }\n ></gx-ide-empty-state>\n );\n }\n return null;\n };\n\n #renderPanelTab = (): Element => {\n const renderControlsTree =\n (this.selectedDesignType === DESIGN_DATA_TYPE_PANELS ||\n this.selectedDesignType === DESIGN_DATA_TYPE_STENCILS) &&\n this.detailTreeModel.length > 0;\n\n return (\n <div\n class={{\n \"panel-tab\": true,\n \"panel-tab--controls-tree\": renderControlsTree\n }}\n part=\"data-panel-composition-container\"\n >\n {this.#evaluatePanelPreview()}\n\n {renderControlsTree ? (\n <ch-tree-view-render\n part=\"data-panel-composition-tree\"\n class=\"tree-view tree-view-panel-item scrollable\"\n showLines=\"last\"\n model={this.detailTreeModel}\n dragDisabled={true}\n dropDisabled={true}\n ></ch-tree-view-render>\n ) : null}\n </div>\n );\n };\n\n #renderImageTab = () => {\n return (\n <div\n part=\"data-panel-composition-preview\"\n class=\"data-preview\"\n style={{ height: \"100%\" }}\n >\n <img\n src={this.selectedDesignItem ? this.selectedDesignItem : undefined}\n alt=\"Preview\"\n class={\n this.selectedDesignType === DESIGN_DATA_TYPE_IMAGES\n ? \"checker-board\"\n : undefined\n }\n />\n </div>\n );\n };\n\n #tabSelectionChangedHandler = (\n event: CustomEvent<{\n lastSelectedIndex: number;\n newSelectedId: string;\n newSelectedIndex: number;\n }>\n ): void => {\n this.renderedTabs.clear();\n this.renderedTabs.add(event.detail.newSelectedId);\n this.reRenderCounter++;\n this.activeTabs.set(this.selectedDesignType, event.detail.newSelectedId);\n };\n\n #renderDesignTabsCh = (): HTMLChTabRenderElement => {\n return (\n <ch-tab-render\n // main section\n class={{\n \"tab\": true,\n \"scrollable\": true,\n \"fit-images\": this.fitImages\n }}\n tabListPosition=\"block-start\"\n model={this.tabsModel}\n selectedId={this.activeTabs.get(this.selectedDesignType)}\n overflow=\"auto\"\n contain=\"size\"\n onSelectedItemChange={this.#tabSelectionChangedHandler}\n >\n <div\n slot={TAB_DATA.tokens.slot}\n class=\"spacing-body\"\n style={{\n display: this.renderedTabs.has(TAB_DATA.tokens.id) ? \"\" : \"none\"\n }}\n >\n <slot name={TAB_DATA.tokens.slot}></slot>\n </div>\n\n <div\n slot={TAB_DATA.styles.slot}\n class=\"spacing-body\"\n style={{\n display: this.renderedTabs.has(TAB_DATA.styles.id) ? \"\" : \"none\"\n }}\n >\n <slot name={TAB_DATA.styles.slot}></slot>\n </div>\n\n <div\n class=\"composition-tab-slot scrollable\"\n slot={TAB_DATA.composition.slot}\n style={{\n display: this.renderedTabs.has(TAB_DATA.composition.id)\n ? \"\"\n : \"none\"\n }}\n >\n {this.selectedDesignType === DESIGN_DATA_TYPE_IMAGES ||\n this.selectedDesignType === DESIGN_DATA_TYPE_FONTS\n ? this.#renderImageTab()\n : this.#renderPanelTab()}\n </div>\n\n <div\n slot={TAB_DATA.layout.slot}\n class=\"spacing-body\"\n style={{\n display: this.renderedTabs.has(TAB_DATA.layout.id) ? \"\" : \"none\"\n }}\n >\n <slot name={TAB_DATA.layout.slot}></slot>\n </div>\n\n <div\n slot={TAB_DATA.code.slot}\n class=\"spacing-body\"\n style={{\n display: this.renderedTabs.has(TAB_DATA.code.id) ? \"\" : \"none\"\n }}\n >\n <slot name={TAB_DATA.code.slot}></slot>\n </div>\n </ch-tab-render>\n );\n };\n\n render(): void {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <section class=\"section\">\n {this.#renderHeader()}\n {this.#renderMain()}\n {this.#renderFooter()}\n </section>\n </Host>\n );\n }\n}\n\nexport type LoadMessageCallback = (message: MessageData) => void;\nexport type LoadCallback = (\n source: string | File,\n designSystem: string,\n importAsWebPanels: boolean,\n token: string | undefined,\n onMessage: LoadMessageCallback\n) => Promise<DesignData | undefined>;\nexport type LoadPanelDataCallback = (id: string) => Promise<DesignPanelData>;\nexport type LoadImageCallback = (id: string) => Promise<string>;\nexport type LoadFontCallback = (id: string) => Promise<string>;\nexport type LoadDesignSystemCallback = (\n id: string\n) => Promise<DesignSystemData>;\nexport type TextEditorFactoryCallback = (\n type: TextEditorType,\n parent: string,\n text: string\n) => Promise<void>;\nexport type SelectModuleCallback = () => Promise<EntityData | undefined>;\n\nexport type RequiresAccessTokenCallback = (source: string) => Promise<boolean>;\nexport type ConfirmCallback = (data: DesignImportData) => Promise<boolean>;\nexport type CancelCallback = () => Promise<void>;\n\nexport interface MessageData {\n type: \"error\" | \"warning\" | \"info\";\n text: string;\n}\n\nexport interface DesignData {\n panels: DesignItemData[];\n stencils: DesignItemData[];\n images: DesignItemData[];\n designSystem: DesignItemData[];\n fonts: DesignItemData[];\n success: boolean;\n}\n\nexport interface DesignItemData {\n id: string;\n name: string;\n warning: string;\n variants?: DesignItemData[];\n}\n\nexport interface DesignPanelData {\n composition: DesignPanelCompositionData;\n code?: string;\n layout?: string;\n}\n\nexport interface DesignPanelCompositionData {\n preview?: string;\n controls: DesignPanelControlData[];\n}\n\nexport interface DesignPanelControlData {\n name: string;\n type: string;\n leaf?: boolean;\n controls: DesignPanelControlData[];\n}\n\nexport interface DesignSystemData {\n tokens: string;\n styles: string;\n}\n\ntype DesignItemDataDetail = DesignPanelData | DesignSystemData | string;\n\nexport interface DesignImportData {\n panels: string[];\n stencils: string[];\n fonts: string[];\n moduleId: string;\n images: string[];\n styleName: string;\n importAsWebPanels: boolean;\n}\n\nexport type DesignType =\n | typeof DESIGN_DATA_TYPE_PANELS\n | typeof DESIGN_DATA_TYPE_STENCILS\n | typeof DESIGN_DATA_TYPE_IMAGES\n | typeof DESIGN_DATA_TYPE_DESIGN_SYSTEM\n | typeof DESIGN_DATA_TYPE_FONTS;\n\nexport type DesignObjectType = {\n [Key in DesignType]: string;\n};\n\nexport type ItemLoadedInfo = {\n designType: DesignType;\n designDataDetail: DesignItemDataDetail;\n};\n\nexport type TextEditorType = \"code\" | \"html\" | \"styles\" | \"tokens\";\n\nexport type ReactiveSettings = {\n path: boolean;\n style: boolean;\n module: boolean;\n importAsWebPanels: boolean;\n};\n\ntype ReactiveSettingsValues = {\n path: string;\n style: string;\n moduleId: string;\n importAsWebPanels: boolean;\n};\n"],"mappings":"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"}