@ng-formworks/daisyui 17.2.7 → 18.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/LICENSE +21 -0
  2. package/esm2022/lib/daisui-cssframework.mjs +223 -0
  3. package/esm2022/lib/daisyui-framework.component.mjs +53 -0
  4. package/esm2022/lib/daisyui-framework.module.mjs +59 -0
  5. package/esm2022/lib/daisyui-framework.prefixed.component.mjs +53 -0
  6. package/esm2022/lib/daisyui-framework.service.mjs +14 -0
  7. package/esm2022/lib/daisyui.framework.mjs +39 -0
  8. package/esm2022/lib/tokens.defs.mjs +7 -0
  9. package/esm2022/lib/widgets/daisyui-tabs.component.mjs +123 -0
  10. package/esm2022/ng-formworks-daisyui.mjs +5 -0
  11. package/esm2022/public-api.mjs +11 -0
  12. package/fesm2022/ng-formworks-daisyui.mjs +557 -0
  13. package/fesm2022/ng-formworks-daisyui.mjs.map +1 -0
  14. package/index.d.ts +5 -0
  15. package/lib/daisui-cssframework.d.ts +3 -0
  16. package/lib/daisyui-framework.component.d.ts +28 -0
  17. package/lib/daisyui-framework.module.d.ts +12 -0
  18. package/lib/daisyui-framework.prefixed.component.d.ts +28 -0
  19. package/lib/daisyui-framework.service.d.ts +6 -0
  20. package/lib/daisyui.framework.d.ts +11 -0
  21. package/{src/lib/tokens.defs.ts → lib/tokens.defs.d.ts} +6 -10
  22. package/lib/widgets/daisyui-tabs.component.d.ts +20 -0
  23. package/package.json +67 -58
  24. package/{src/public-api.ts → public-api.d.ts} +7 -12
  25. package/css_names_extractor.js +0 -133
  26. package/ng-package.json +0 -14
  27. package/src/daisyui_class_names.css +0 -1
  28. package/src/daisyui_class_names_prefixed_tw.css +0 -1
  29. package/src/daisyui_class_names_prefixed_tw_dui.css +0 -1
  30. package/src/lib/daisui-cssframework.ts +0 -237
  31. package/src/lib/daisyui-framework.component.scss +0 -48
  32. package/src/lib/daisyui-framework.component.spec.ts +0 -21
  33. package/src/lib/daisyui-framework.component.ts +0 -70
  34. package/src/lib/daisyui-framework.module.ts +0 -39
  35. package/src/lib/daisyui-framework.prefixed.component.scss +0 -48
  36. package/src/lib/daisyui-framework.prefixed.component.ts +0 -70
  37. package/src/lib/daisyui-framework.service.spec.ts +0 -16
  38. package/src/lib/daisyui-framework.service.ts +0 -9
  39. package/src/lib/daisyui-ng-formworks-themes-prefixed.scss +0 -61
  40. package/src/lib/daisyui-ng-formworks-themes.scss +0 -61
  41. package/src/lib/daisyui.framework.ts +0 -36
  42. package/src/lib/tailwind-output-prefixed.scss +0 -11772
  43. package/src/lib/tailwind-output.scss +0 -11402
  44. package/src/lib/widgets/daisyui-tabs.component.ts +0 -92
  45. package/tailwind-input.css +0 -3
  46. package/tailwind.config.js +0 -24
  47. package/tailwind.prefixed.config.js +0 -26
  48. package/tsconfig.lib.json +0 -21
  49. package/tsconfig.lib.prod.json +0 -10
  50. package/tsconfig.spec.json +0 -14
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2014-2016 David Schnell-Davis 2018 Hamza Hamidi 2023 Zaheer M
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,223 @@
1
+ export const cssFrameworkCfgDaisyUI = {
2
+ "name": "daisyui",
3
+ "text": "DaisyUI",
4
+ "scripts": [],
5
+ "stylesheets": [
6
+ //"/assets/cssframework/daisyui-framework.css"
7
+ ],
8
+ "widgetstyles": {
9
+ "__themes__": [
10
+ { "name": "daisyui_default", "text": "default" },
11
+ { "name": "light", "text": "light" },
12
+ { "name": "dark", "text": "dark" },
13
+ { "name": "cupcake", "text": "cupcake" },
14
+ { "name": "cmyk", "text": "cmyk" },
15
+ { "name": "pastel", "text": "pastel" },
16
+ { "name": "daisyui_leaf", "text": "leaf" }
17
+ ],
18
+ "$ref": {
19
+ "fieldHtmlClass": "btn btn-sm btn-accent float-right"
20
+ },
21
+ "__array_item_nonref__": {
22
+ "htmlClass": "border shadow-md p-1"
23
+ },
24
+ "__form_group__": {
25
+ "htmlClass": "mb-1"
26
+ },
27
+ "__control_label__": {
28
+ "labelHtmlClass": "control-label"
29
+ },
30
+ "__active__": {
31
+ "activeClass": "active"
32
+ },
33
+ "__required_asterisk__": "text-danger",
34
+ "__screen_reader__": "sr-only",
35
+ "__remove_item__": "float-right text-2xl opacity-50",
36
+ "__help_block__": "help-block",
37
+ "__field_addon_left__": "input-group-addon",
38
+ "__field_addon_right__": "input-group-addon",
39
+ "alt-date": {
40
+ "fieldHtmlClass": "input input-md input-bordered w-full"
41
+ },
42
+ "alt-datetime": {
43
+ "fieldHtmlClass": "input input-md input-bordered w-full"
44
+ },
45
+ "__array__": {
46
+ "htmlClass": "border shadow-md p-1"
47
+ },
48
+ "array": {},
49
+ "authfieldset": {},
50
+ "advancedfieldset": {},
51
+ "button": {
52
+ "fieldHtmlClass": "btn btn-sm btn-info"
53
+ },
54
+ "checkbox": {
55
+ "fieldHtmlClass": "checkbox"
56
+ },
57
+ "checkboxes": {
58
+ "fieldHtmlClass": "checkbox"
59
+ },
60
+ "checkboxbuttons": {
61
+ "fieldHtmlClass": "w-px",
62
+ "labelHtmlClass": "tabs tabs-boxed",
63
+ "htmlClass": "btn-group",
64
+ "itemLabelHtmlClass": "btn",
65
+ "activeClass": "btn-info"
66
+ },
67
+ "checkboxes-inline": {
68
+ "fieldHtmlClass": "checkbox",
69
+ "htmlClass": "inline-flex",
70
+ "itemLabelHtmlClass": "checkbox-inline"
71
+ },
72
+ "date": {
73
+ "fieldHtmlClass": "input input-md input-bordered w-full"
74
+ },
75
+ "datetime-local": {
76
+ "fieldHtmlClass": "input input-md input-bordered w-full"
77
+ },
78
+ "fieldset": {},
79
+ "integer": {
80
+ "fieldHtmlClass": "input input-md input-bordered w-full max-w-xs"
81
+ },
82
+ "number": {
83
+ "fieldHtmlClass": "input input-md input-bordered w-full max-w-xs"
84
+ },
85
+ "optionfieldset": {},
86
+ "password": {
87
+ "fieldHtmlClass": "input input-md input-bordered w-full"
88
+ },
89
+ "radiobuttons": {
90
+ "fieldHtmlClass": "w-px",
91
+ "labelHtmlClass": "tabs tabs-boxed",
92
+ "htmlClass": "btn-group",
93
+ "itemLabelHtmlClass": "btn",
94
+ "activeClass": "btn-info"
95
+ },
96
+ "radio": {
97
+ "fieldHtmlClass": "radio"
98
+ },
99
+ "radios": {
100
+ "fieldHtmlClass": "radio"
101
+ },
102
+ "radios-inline": {
103
+ "htmlClass": "inline-flex",
104
+ "fieldHtmlClass": "radio",
105
+ "itemLabelHtmlClass": "radio-inline"
106
+ },
107
+ "range": {
108
+ "fieldHtmlClass": "range range-info"
109
+ },
110
+ "section": {},
111
+ "selectfieldset": {},
112
+ "select": {
113
+ "fieldHtmlClass": "select select-md select-bordered w-full"
114
+ },
115
+ "submit": {
116
+ "fieldHtmlClass": "btn btn-sm btn-info rounded-full"
117
+ },
118
+ "text": {
119
+ "fieldHtmlClass": "input input-md input-bordered w-full"
120
+ },
121
+ "tabs": {
122
+ "labelHtmlClass": "tabs-md tabs-boxed",
123
+ "htmlClass": "",
124
+ "itemLabelHtmlClass": "tab",
125
+ "activeClass": "tab-active"
126
+ },
127
+ "tabarray": {
128
+ "labelHtmlClass": "tabs tabs-boxed",
129
+ "htmlClass": "",
130
+ "itemLabelHtmlClass": "tab",
131
+ "activeClass": "tab-active"
132
+ },
133
+ "textarea": {
134
+ "fieldHtmlClass": "textarea textarea-bordered w-full"
135
+ },
136
+ "default": {
137
+ "fieldHtmlClass": "form-control"
138
+ }
139
+ }
140
+ };
141
+ //need to classify which classnames are controlled by DaisyU and which
142
+ //are controlled by tailwind
143
+ //-ones controlled by tailwind will have prefix tw-{{class name}}
144
+ //-ones controlled by daisyui will have prefix tw-dui-{{class name}}
145
+ export function getCssFrameworkCfgPrefixed(cssFrameworkCfg, prefixDUI = "tw-dui", prefixTW = "tw") {
146
+ let classNamesIgnored = [
147
+ 'control-label',
148
+ 'help-block', 'input-group-addon', 'checkbox-inline'
149
+ ];
150
+ //TODO use regexs
151
+ //-regex won't work the actual prefix classname needs to be
152
+ //available as string literals as tailwind seems to scans for the
153
+ //actual names so for ex: 'tw-' + 'bg-primary' wont be picked up,
154
+ //has to be 'tw-bg-primary'
155
+ //NB this is not used in code, but need during the taiwind scanning
156
+ //to output the class names
157
+ let classNamesTW = [
158
+ 'w-full', 'mb-1', 'shadow-md', 'p-1',
159
+ 'sr-only', 'text-2xl', 'opacity-50',
160
+ 'float-right',
161
+ 'w-px',
162
+ 'border',
163
+ 'max-w-xs', 'rounded-full', 'form-control', 'inline-flex',
164
+ 'tw-w-full', 'tw-mb-1', 'tw-shadow-md', 'tw-p-1',
165
+ 'tw-sr-only', 'tw-text-2xl', 'tw-opacity-50',
166
+ 'tw-float-right',
167
+ 'tw-w-px',
168
+ 'tw-max-w-xs', 'tw-rounded-full', 'tw-form-control', 'tw-inline-flex',
169
+ 'tw-border'
170
+ ];
171
+ let classNamesDUI = [
172
+ 'btn', 'btn-sm', 'btn-accent', 'btn-info', 'btn-group',
173
+ 'input', 'input-md', 'input-bordered',
174
+ 'checkbox', 'tab', 'tabs', 'tabs-boxed', 'tabs-md', "tab-active",
175
+ 'radio', 'radio-inline',
176
+ 'range', 'range-info',
177
+ 'select', 'select-md', 'select-bordered',
178
+ 'textarea', 'textarea-bordered'
179
+ ];
180
+ let replaceClasses = (classList, prefDUI, prefTW, ignoredClasses) => {
181
+ if (!Array.isArray(classList)) {
182
+ classList = classList.split(" ");
183
+ }
184
+ return classList.map(cname => {
185
+ if (ignoredClasses.indexOf(cname) >= 0) {
186
+ return cname;
187
+ }
188
+ if (classNamesDUI.indexOf(cname) >= 0) {
189
+ return prefDUI + "-" + cname;
190
+ }
191
+ return prefTW + "-" + cname;
192
+ });
193
+ };
194
+ let cssFrameworkCfgPrefixed = JSON.parse(JSON.stringify(cssFrameworkCfg));
195
+ let widgetNamesIgnore = ["__themes__"];
196
+ let widgetNamesNoSubLevel = [
197
+ "__required_asterisk__",
198
+ "__screen_reader__",
199
+ "__remove_item__",
200
+ "__help_block__",
201
+ "__field_addon_left__",
202
+ "__field_addon_right__",
203
+ ];
204
+ Object.keys(cssFrameworkCfgPrefixed.widgetstyles).forEach(widgetName => {
205
+ if (widgetNamesIgnore.indexOf(widgetName) >= 0) {
206
+ return;
207
+ }
208
+ if (widgetNamesNoSubLevel.indexOf(widgetName) >= 0) {
209
+ let cnames = cssFrameworkCfgPrefixed.widgetstyles[widgetName];
210
+ cnames = replaceClasses(cnames, prefixDUI, prefixTW, classNamesIgnored);
211
+ cssFrameworkCfgPrefixed.widgetstyles[widgetName] = cnames;
212
+ return;
213
+ }
214
+ let widgetClassMap = cssFrameworkCfgPrefixed.widgetstyles[widgetName];
215
+ Object.keys(widgetClassMap).forEach(classListName => {
216
+ let classListAsArr = widgetClassMap[classListName];
217
+ classListAsArr = replaceClasses(classListAsArr, prefixDUI, prefixTW, classNamesIgnored);
218
+ widgetClassMap[classListName] = classListAsArr;
219
+ });
220
+ });
221
+ return cssFrameworkCfgPrefixed;
222
+ }
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFpc3VpLWNzc2ZyYW1ld29yay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZvcm13b3Jrcy1kYWlzeXVpL3NyYy9saWIvZGFpc3VpLWNzc2ZyYW1ld29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBcUI7SUFDcEQsTUFBTSxFQUFFLFNBQVM7SUFDakIsTUFBTSxFQUFDLFNBQVM7SUFDaEIsU0FBUyxFQUFFLEVBQUU7SUFDYixhQUFhLEVBQUU7SUFDWCw4Q0FBOEM7S0FDakQ7SUFDRCxjQUFjLEVBQUU7UUFDWixZQUFZLEVBQUU7WUFDVixFQUFDLE1BQU0sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLEVBQUMsU0FBUyxFQUFDO1lBQzNDLEVBQUMsTUFBTSxFQUFDLE9BQU8sRUFBQyxNQUFNLEVBQUMsT0FBTyxFQUFDO1lBQy9CLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDO1lBQzdCLEVBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxNQUFNLEVBQUMsU0FBUyxFQUFDO1lBQ25DLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDO1lBQzdCLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDO1lBQ2pDLEVBQUMsTUFBTSxFQUFDLGNBQWMsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDO1NBRXhDO1FBQ0QsTUFBTSxFQUFFO1lBQ0osZ0JBQWdCLEVBQUUsbUNBQW1DO1NBQ3hEO1FBQ0QsdUJBQXVCLEVBQUU7WUFDckIsV0FBVyxFQUFFLHNCQUFzQjtTQUN0QztRQUNELGdCQUFnQixFQUFFO1lBQ2QsV0FBVyxFQUFFLE1BQU07U0FDdEI7UUFDRCxtQkFBbUIsRUFBRTtZQUNqQixnQkFBZ0IsRUFBRSxlQUFlO1NBQ3BDO1FBQ0QsWUFBWSxFQUFFO1lBQ1YsYUFB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Q0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDO1lBQ3pDLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBRyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUUsQ0FBQyxFQUFDLENBQUM7WUFDOUMsSUFBSSxNQUFNLEdBQUUsdUJBQXVCLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzdELE1BQU0sR0FBQyxjQUFjLENBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNuRSx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUMsTUFBTSxDQUFDO1lBQ3hELE9BQU87UUFDVixDQUFDO1FBQ0QsSUFBSSxjQUFjLEdBQUMsdUJBQXVCLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQSxFQUFFO1lBQy9DLElBQUksY0FBYyxHQUFpQixjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDakUsY0FBYyxHQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ25GLGNBQWMsQ0FBQyxhQUFhLENBQUMsR0FBQyxjQUFjLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUE7SUFFTixDQUFDLENBQUMsQ0FBQTtJQUNGLE9BQU8sdUJBQXVCLENBQUM7QUFFbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNzc19mdyB9IGZyb20gXCJAbmctZm9ybXdvcmtzL2Nzc2ZyYW1ld29ya1wiO1xyXG5cclxuZXhwb3J0IGNvbnN0IGNzc0ZyYW1ld29ya0NmZ0RhaXN5VUk6Y3NzX2Z3LmZyYW1ld29ya2NmZz17XHJcbiAgICBcIm5hbWVcIjogXCJkYWlzeXVpXCIsXHJcbiAgICBcInRleHRcIjpcIkRhaXN5VUlcIixcclxuICAgIFwic2NyaXB0c1wiOiBbXSxcclxuICAgIFwic3R5bGVzaGVldHNcIjogW1xyXG4gICAgICAgIC8vXCIvYXNzZXRzL2Nzc2ZyYW1ld29yay9kYWlzeXVpLWZyYW1ld29yay5jc3NcIlxyXG4gICAgXSxcclxuICAgIFwid2lkZ2V0c3R5bGVzXCI6IHtcclxuICAgICAgICBcIl9fdGhlbWVzX19cIjogW1xyXG4gICAgICAgICAgICB7XCJuYW1lXCI6XCJkYWlzeXVpX2RlZmF1bHRcIixcInRleHRcIjpcImRlZmF1bHRcIn0sXHJcbiAgICAgICAgICAgIHtcIm5hbWVcIjpcImxpZ2h0XCIsXCJ0ZXh0XCI6XCJsaWdodFwifSwgXHJcbiAgICAgICAgICAgIHtcIm5hbWVcIjpcImRhcmtcIixcInRleHRcIjpcImRhcmtcIn0sIFxyXG4gICAgICAgICAgICB7XCJuYW1lXCI6XCJjdXBjYWtlXCIsXCJ0ZXh0XCI6XCJjdXBjYWtlXCJ9LCBcclxuICAgICAgICAgICAge1wibmFtZVwiOlwiY215a1wiLFwidGV4dFwiOlwiY215a1wifSwgXHJcbiAgICAgICAgICAgIHtcIm5hbWVcIjpcInBhc3RlbFwiLFwidGV4dFwiOlwicGFzdGVsXCJ9LFxyXG4gICAgICAgICAgICB7XCJuYW1lXCI6XCJkYWlzeXVpX2xlYWZcIixcInRleHRcIjpcImxlYWZcIn1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgXSxcclxuICAgICAgICBcIiRyZWZcIjoge1xyXG4gICAgICAgICAgICBcImZpZWxkSHRtbENsYXNzXCI6IFwiYnRuIGJ0bi1zbSBidG4tYWNjZW50IGZsb2F0LXJpZ2h0XCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiX19hcnJheV9pdGVtX25vbnJlZl9fXCI6IHtcclxuICAgICAgICAgICAgXCJodG1sQ2xhc3NcIjogXCJib3JkZXIgc2hhZG93LW1kIHAtMVwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcIl9fZm9ybV9ncm91cF9fXCI6IHtcclxuICAgICAgICAgICAgXCJodG1sQ2xhc3NcIjogXCJtYi0xXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiX19jb250cm9sX2xhYmVsX19cIjoge1xyXG4gICAgICAgICAgICBcImxhYmVsSHRtbENsYXNzXCI6IFwiY29udHJvbC1sYWJlbFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcIl9fYWN0aXZlX19cIjoge1xyXG4gICAgICAgICAgICBcImFjdGl2ZUNsYXNzXCI6IFwiYWN0aXZlXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiX19yZXF1aXJlZF9hc3Rlcmlza19fXCI6IFwidGV4dC1kYW5nZXJcIixcclxuICAgICAgICBcIl9fc2NyZWVuX3JlYWRlcl9fXCI6IFwic3Itb25seVwiLFxyXG4gICAgICAgIFwiX19yZW1vdmVfaXRlbV9fXCI6IFwiZmxvYXQtcmlnaHQgdGV4dC0yeGwgb3BhY2l0eS01MFwiLFxyXG4gICAgICAgIFwiX19oZWxwX2Jsb2NrX19cIjogXCJoZWxwLWJsb2NrXCIsXHJcbiAgICAgICAgXCJfX2ZpZWxkX2FkZG9uX2xlZnRfX1wiOiBcImlucHV0LWdyb3VwLWFkZG9uXCIsXHJcbiAgICAgICAgXCJfX2ZpZWxkX2FkZG9uX3JpZ2h0X19cIjogXCJpbnB1dC1ncm91cC1hZGRvblwiLFxyXG4gICAgICAgIFwiYWx0LWRhdGVcIjoge1xyXG4gICAgICAgICAgICBcImZpZWxkSHRtbENsYXNzXCI6IFwiaW5wdXQgaW5wdXQtbWQgaW5wdXQtYm9yZGVyZWQgdy1mdWxsXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWx0LWRhdGV0aW1lXCI6IHtcclxuICAgICAgICAgICAgXCJmaWVsZEh0bWxDbGFzc1wiOiBcImlucHV0IGlucHV0LW1kIGlucHV0LWJvcmRlcmVkIHctZnVsbFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcIl9fYXJyYXlfX1wiOiB7XHJcbiAgICAgICAgICAgIFwiaHRtbENsYXNzXCI6IFwiYm9yZGVyIHNoYWRvdy1tZCBwLTFcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhcnJheVwiOiB7fSxcclxuICAgICAgICBcImF1dGhmaWVsZHNldFwiOiB7fSxcclxuICAgICAgICBcImFkdmFuY2VkZmllbGRzZXRcIjoge30sXHJcbiAgICAgICAgXCJidXR0b25cIjoge1xyXG4gICAgICAgICAgICBcImZpZWxkSHRtbENsYXNzXCI6IFwiYnRuIGJ0bi1zbSBidG4taW5mb1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImNoZWNrYm94XCI6IHtcclxuICAgICAgICAgICAgXCJmaWVsZEh0bWxDbGFzc1wiOiBcImNoZWNrYm94XCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiY2hlY2tib3hlc1wiOiB7XHJcbiAgICAgICAgICAgIFwiZmllbGRIdG1sQ2xhc3NcIjogXCJjaGVja2JveFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImNoZWNrYm94YnV0dG9uc1wiOiB7XHJcbiAgICAgICAgICAgIFwiZmllbGRIdG1sQ2xhc3NcIjogXCJ3LXB4XCIsXHJcbiAgICAgICAgICAgIFwibGFiZWxIdG1sQ2xhc3NcIjogXCJ0YWJzIHRhYnMtYm94ZWRcIixcclxuICAgICAgICAgICAgXCJodG1sQ2xhc3NcIjogXCJidG4tZ3JvdXBcIixcclxuICAgICAgICAgICAgXCJpdGVtTGFiZWxIdG1sQ2xhc3NcIjogXCJidG5cIixcclxuICAgICAgICAgICAgXCJhY3RpdmVDbGFzc1wiOiBcImJ0bi1pbmZvXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiY2hlY2tib3hlcy1pbmxpbmVcIjoge1xyXG4gICAgICAgICAgICBcImZpZWxkSHRtbENsYXNzXCI6IFwiY2hlY2tib3hcIixcclxuICAgICAgICAgICAgXCJodG1sQ2xhc3NcIjogXCJpbmxpbmUtZmxleFwiLFxyXG4gICAgICAgICAgICBcIml0ZW1MYWJlbEh0bWxDbGFzc1wiOiBcImNoZWNrYm94LWlubGluZVwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImRhdGVcIjoge1xyXG4gICAgICAgICAgICBcImZpZWxkSHRtbENsYXNzXCI6IFwiaW5wdXQgaW5wdXQtbWQgaW5wdXQtYm9yZGVyZWQgdy1mdWxsXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiZGF0ZXRpbWUtbG9jYWxcIjoge1xyXG4gICAgICAgICAgICBcImZpZWxkSHRtbENsYXNzXCI6IFwiaW5wdXQgaW5wdXQtbWQgaW5wdXQtYm9yZGVyZWQgdy1mdWxsXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiZmllbGRzZXRcIjoge30sXHJcbiAgICAgICAgXCJpbnRlZ2VyXCI6IHtcclxuICAgICAgICAgICAgXCJmaWVsZEh0bWxDbGFzc1wiOiBcImlucHV0IGlucHV0LW1kIGlucHV0LWJvcmRlcmVkIHctZnVsbCBtYXgtdy14c1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcIm51bWJlclwiOiB7XHJcbiAgICAgICAgICAgIFwiZmllbGRIdG1sQ2xhc3NcIjogXCJpbnB1dCBpbnB1dC1tZCBpbnB1dC1ib3JkZXJlZCB3LWZ1bGwgbWF4LXcteHNcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJvcHRpb25maWVsZHNldFwiOiB7fSxcclxuICAgICAgICBcInBhc3N3b3JkXCI6IHtcclxuICAgICAgICAgICAgXCJmaWVsZEh0bWxDbGFzc1wiOiBcImlucHV0IGlucHV0LW1kIGlucHV0LWJvcmRlcmVkIHctZnVsbFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcInJhZGlvYnV0dG9uc1wiOiB7XHJcbiAgICAgICAgICAgIFwiZmllbGRIdG1sQ2xhc3NcIjogXCJ3LXB4XCIsXHJcbiAgICAgICAgICAgIFwibGFiZWxIdG1sQ2xhc3NcIjogXCJ0YWJzIHRhYnMtYm94ZWRcIixcclxuICAgICAgICAgICAgXCJodG1sQ2xhc3NcIjogXCJidG4tZ3JvdXBcIixcclxuICAgICAgICAgICAgXCJpdGVtTGFiZWxIdG1sQ2xhc3NcIjogXCJidG5cIixcclxuICAgICAgICAgICAgXCJhY3RpdmVDbGFzc1wiOiBcImJ0bi1pbmZvXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwicmFkaW9cIjoge1xyXG4gICAgICAgICAgICBcImZpZWxkSHRtbENsYXNzXCI6IFwicmFkaW9cIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJyYWRpb3NcIjoge1xyXG4gICAgICAgICAgICBcImZpZWxkSHRtbENsYXNzXCI6IFwicmFkaW9cIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJyYWRpb3MtaW5saW5lXCI6IHtcclxuICAgICAgICAgICAgXCJodG1sQ2xhc3NcIjogXCJpbmxpbmUtZmxleFwiLFxyXG4gICAgICAgICAgICBcImZpZWxkSHRtbENsYXNzXCI6IFwicmFkaW9cIixcclxuICAgICAgICAgICAgXCJpdGVtTGFiZWxIdG1sQ2xhc3NcIjogXCJyYWRpby1pbmxpbmVcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJyYW5nZVwiOiB7XHJcbiAgICAgICAgICAgIFwiZmllbGRIdG1sQ2xhc3NcIjogXCJyYW5nZSByYW5nZS1pbmZvXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwic2VjdGlvblwiOiB7fSxcclxuICAgICAgICBcInNlbGVjdGZpZWxkc2V0XCI6IHt9LFxyXG4gICAgICAgIFwic2VsZWN0XCI6IHtcclxuICAgICAgICAgICAgXCJmaWVsZEh0bWxDbGFzc1wiOiBcInNlbGVjdCBzZWxlY3QtbWQgc2VsZWN0LWJvcmRlcmVkIHctZnVsbFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcInN1Ym1pdFwiOiB7XHJcbiAgICAgICAgICAgIFwiZmllbGRIdG1sQ2xhc3NcIjogXCJidG4gYnRuLXNtIGJ0bi1pbmZvIHJvdW5kZWQtZnVsbFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcInRleHRcIjoge1xyXG4gICAgICAgICAgICBcImZpZWxkSHRtbENsYXNzXCI6IFwiaW5wdXQgaW5wdXQtbWQgaW5wdXQtYm9yZGVyZWQgdy1mdWxsXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwidGFic1wiOiB7XHJcbiAgICAgICAgICAgIFwibGFiZWxIdG1sQ2xhc3NcIjogXCJ0YWJzLW1kIHRhYnMtYm94ZWRcIixcclxuICAgICAgICAgICAgXCJodG1sQ2xhc3NcIjogXCJcIixcclxuICAgICAgICAgICAgXCJpdGVtTGFiZWxIdG1sQ2xhc3NcIjogXCJ0YWJcIixcclxuICAgICAgICAgICAgXCJhY3RpdmVDbGFzc1wiOiBcInRhYi1hY3RpdmVcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJ0YWJhcnJheVwiOiB7XHJcbiAgICAgICAgICAgIFwibGFiZWxIdG1sQ2xhc3NcIjogXCJ0YWJzIHRhYnMtYm94ZWRcIixcclxuICAgICAgICAgICAgXCJodG1sQ2xhc3NcIjogXCJcIixcclxuICAgICAgICAgICAgXCJpdGVtTGFiZWxIdG1sQ2xhc3NcIjogXCJ0YWJcIixcclxuICAgICAgICAgICAgXCJhY3RpdmVDbGFzc1wiOiBcInRhYi1hY3RpdmVcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJ0ZXh0YXJlYVwiOiB7XHJcbiAgICAgICAgICAgIFwiZmllbGRIdG1sQ2xhc3NcIjogXCJ0ZXh0YXJlYSB0ZXh0YXJlYS1ib3JkZXJlZCB3LWZ1bGxcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJkZWZhdWx0XCI6IHtcclxuICAgICAgICAgICAgXCJmaWVsZEh0bWxDbGFzc1wiOiBcImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8vbmVlZCB0byBjbGFzc2lmeSB3aGljaCBjbGFzc25hbWVzIGFyZSBjb250cm9sbGVkIGJ5IERhaXN5VSBhbmQgd2hpY2hcclxuLy9hcmUgY29udHJvbGxlZCBieSB0YWlsd2luZFxyXG4vLy1vbmVzIGNvbnRyb2xsZWQgYnkgdGFpbHdpbmQgd2lsbCBoYXZlIHByZWZpeCB0dy17e2NsYXNzIG5hbWV9fVxyXG4vLy1vbmVzIGNvbnRyb2xsZWQgYnkgZGFpc3l1aSB3aWxsIGhhdmUgcHJlZml4IHR3LWR1aS17e2NsYXNzIG5hbWV9fVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3NzRnJhbWV3b3JrQ2ZnUHJlZml4ZWQoY3NzRnJhbWV3b3JrQ2ZnOmNzc19mdy5mcmFtZXdvcmtjZmcscHJlZml4RFVJPVwidHctZHVpXCIscHJlZml4VFc9XCJ0d1wiKTpjc3NfZncuZnJhbWV3b3JrY2Zne1xyXG4gICAgXHJcbiAgICBsZXQgY2xhc3NOYW1lc0lnbm9yZWQ9W1xyXG4gICAgICAgIFxyXG4gICAgICAgICdjb250cm9sLWxhYmVsJyxcclxuICAgICAgICAnaGVscC1ibG9jaycsJ2lucHV0LWdyb3VwLWFkZG9uJywnY2hlY2tib3gtaW5saW5lJ1xyXG4gICAgICAgIFxyXG4gICAgXTtcclxuXHJcbiAgICAvL1RPRE8gdXNlIHJlZ2V4c1xyXG4gICAgLy8tcmVnZXggd29uJ3Qgd29yayB0aGUgYWN0dWFsIHByZWZpeCBjbGFzc25hbWUgbmVlZHMgdG8gYmUgXHJcbiAgICAvL2F2YWlsYWJsZSBhcyBzdHJpbmcgbGl0ZXJhbHMgYXMgdGFpbHdpbmQgc2VlbXMgdG8gc2NhbnMgZm9yIHRoZVxyXG4gICAgLy9hY3R1YWwgbmFtZXMgc28gZm9yIGV4OiAndHctJyArICdiZy1wcmltYXJ5JyB3b250IGJlIHBpY2tlZCB1cCxcclxuICAgIC8vaGFzIHRvIGJlICd0dy1iZy1wcmltYXJ5J1xyXG5cclxuICAgIC8vTkIgdGhpcyBpcyBub3QgdXNlZCBpbiBjb2RlLCBidXQgbmVlZCBkdXJpbmcgdGhlIHRhaXdpbmQgc2Nhbm5pbmcgXHJcbiAgICAvL3RvIG91dHB1dCB0aGUgY2xhc3MgbmFtZXNcclxuICAgIGxldCBjbGFzc05hbWVzVFc9W1xyXG4gICAgICAgICd3LWZ1bGwnLCdtYi0xJywnc2hhZG93LW1kJywncC0xJyxcclxuICAgICAgICAnc3Itb25seScsJ3RleHQtMnhsJywgJ29wYWNpdHktNTAnLFxyXG4gICAgICAgICdmbG9hdC1yaWdodCcsXHJcbiAgICAgICAgJ3ctcHgnLFxyXG4gICAgICAgICdib3JkZXInLFxyXG4gICAgICAgICdtYXgtdy14cycsJ3JvdW5kZWQtZnVsbCcsJ2Zvcm0tY29udHJvbCcsJ2lubGluZS1mbGV4JyxcclxuICAgICAgICAndHctdy1mdWxsJywndHctbWItMScsJ3R3LXNoYWRvdy1tZCcsJ3R3LXAtMScsXHJcbiAgICAgICAgJ3R3LXNyLW9ubHknLCd0dy10ZXh0LTJ4bCcsICd0dy1vcGFjaXR5LTUwJyxcclxuICAgICAgICAndHctZmxvYXQtcmlnaHQnLFxyXG4gICAgICAgICd0dy13LXB4JyxcclxuICAgICAgICAndHctbWF4LXcteHMnLCd0dy1yb3VuZGVkLWZ1bGwnLCd0dy1mb3JtLWNvbnRyb2wnLCd0dy1pbmxpbmUtZmxleCcsXHJcbiAgICAgICAgJ3R3LWJvcmRlcidcclxuICAgICAgICBcclxuICAgIF07XHJcblxyXG4gICAgbGV0IGNsYXNzTmFtZXNEVUk9W1xyXG4gICAgICAgICdidG4nLCAnYnRuLXNtJywgJ2J0bi1hY2NlbnQnLCdidG4taW5mbycsJ2J0bi1ncm91cCcsXHJcbiAgICAgICAgJ2lucHV0JywgJ2lucHV0LW1kJyAsJ2lucHV0LWJvcmRlcmVkJyxcclxuICAgICAgICAnY2hlY2tib3gnLCd0YWInLCd0YWJzJywgJ3RhYnMtYm94ZWQnLCd0YWJzLW1kJyxcInRhYi1hY3RpdmVcIixcclxuICAgICAgICAncmFkaW8nLCdyYWRpby1pbmxpbmUnLFxyXG4gICAgICAgICdyYW5nZScsICdyYW5nZS1pbmZvJyxcclxuICAgICAgICAnc2VsZWN0JywgJ3NlbGVjdC1tZCcsICdzZWxlY3QtYm9yZGVyZWQnLFxyXG4gICAgICAgICd0ZXh0YXJlYScsJ3RleHRhcmVhLWJvcmRlcmVkJ1xyXG4gICAgICAgIFxyXG4gICAgXTtcclxuICAgIGxldCByZXBsYWNlQ2xhc3Nlcz0oY2xhc3NMaXN0OnN0cmluZ1tdfHN0cmluZyxwcmVmRFVJOnN0cmluZyxwcmVmVFc6c3RyaW5nLGlnbm9yZWRDbGFzc2VzOnN0cmluZ1tdKT0+e1xyXG4gICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGNsYXNzTGlzdCkpe1xyXG4gICAgICAgICAgICBjbGFzc0xpc3Q9Y2xhc3NMaXN0LnNwbGl0KFwiIFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNsYXNzTGlzdC5tYXAoY25hbWU9PntcclxuICAgICAgICAgICAgaWYoaWdub3JlZENsYXNzZXMuaW5kZXhPZihjbmFtZSk+PTApe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNuYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKGNsYXNzTmFtZXNEVUkuaW5kZXhPZihjbmFtZSk+PTApe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZWZEVUkrXCItXCIrY25hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHByZWZUVytcIi1cIitjbmFtZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgbGV0IGNzc0ZyYW1ld29ya0NmZ1ByZWZpeGVkPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY3NzRnJhbWV3b3JrQ2ZnKSk7XHJcbiAgICBsZXQgd2lkZ2V0TmFtZXNJZ25vcmU9W1wiX190aGVtZXNfX1wiXTtcclxuICAgIGxldCB3aWRnZXROYW1lc05vU3ViTGV2ZWw9W1xyXG4gICAgICAgIFwiX19yZXF1aXJlZF9hc3Rlcmlza19fXCIsXHJcbiAgICAgICAgXCJfX3NjcmVlbl9yZWFkZXJfX1wiLFxyXG4gICAgICAgIFwiX19yZW1vdmVfaXRlbV9fXCIsXHJcbiAgICAgICAgXCJfX2hlbHBfYmxvY2tfX1wiLFxyXG4gICAgICAgIFwiX19maWVsZF9hZGRvbl9sZWZ0X19cIixcclxuICAgICAgICBcIl9fZmllbGRfYWRkb25fcmlnaHRfX1wiLFxyXG4gICAgXTtcclxuICAgIE9iamVjdC5rZXlzKGNzc0ZyYW1ld29ya0NmZ1ByZWZpeGVkLndpZGdldHN0eWxlcykuZm9yRWFjaCh3aWRnZXROYW1lPT57XHJcbiAgICAgICAgaWYod2lkZ2V0TmFtZXNJZ25vcmUuaW5kZXhPZih3aWRnZXROYW1lKT49MCl7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYod2lkZ2V0TmFtZXNOb1N1YkxldmVsLmluZGV4T2Yod2lkZ2V0TmFtZSk+PTApe1xyXG4gICAgICAgICAgIGxldCBjbmFtZXM9IGNzc0ZyYW1ld29ya0NmZ1ByZWZpeGVkLndpZGdldHN0eWxlc1t3aWRnZXROYW1lXTtcclxuICAgICAgICAgICBjbmFtZXM9cmVwbGFjZUNsYXNzZXMoY25hbWVzLHByZWZpeERVSSxwcmVmaXhUVyxjbGFzc05hbWVzSWdub3JlZCk7XHJcbiAgICAgICAgICAgY3NzRnJhbWV3b3JrQ2ZnUHJlZml4ZWQud2lkZ2V0c3R5bGVzW3dpZGdldE5hbWVdPWNuYW1lcztcclxuICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB3aWRnZXRDbGFzc01hcD1jc3NGcmFtZXdvcmtDZmdQcmVmaXhlZC53aWRnZXRzdHlsZXNbd2lkZ2V0TmFtZV07XHJcbiAgICAgICAgT2JqZWN0LmtleXMod2lkZ2V0Q2xhc3NNYXApLmZvckVhY2goY2xhc3NMaXN0TmFtZT0+e1xyXG4gICAgICAgICAgICBsZXQgY2xhc3NMaXN0QXNBcnI6c3RyaW5nW118c3RyaW5nPXdpZGdldENsYXNzTWFwW2NsYXNzTGlzdE5hbWVdO1xyXG4gICAgICAgICAgICBjbGFzc0xpc3RBc0Fycj1yZXBsYWNlQ2xhc3NlcyhjbGFzc0xpc3RBc0FycixwcmVmaXhEVUkscHJlZml4VFcsY2xhc3NOYW1lc0lnbm9yZWQpO1xyXG4gICAgICAgICAgICB3aWRnZXRDbGFzc01hcFtjbGFzc0xpc3ROYW1lXT1jbGFzc0xpc3RBc0FycjtcclxuICAgICAgICB9KVxyXG4gICAgICAgIFxyXG4gICAgfSlcclxuICAgIHJldHVybiBjc3NGcmFtZXdvcmtDZmdQcmVmaXhlZDtcclxuXHJcbn1cclxuXHJcbiJdfQ==