xmlui 0.10.13 → 0.10.15

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 (217) hide show
  1. package/dist/lib/{index-Db5iQkFp.mjs → index-axjeT2uJ.mjs} +1626 -1080
  2. package/dist/lib/index.css +1 -1
  3. package/dist/lib/{initMock-B9LtmFJG.mjs → initMock-BoTWMs19.mjs} +1 -1
  4. package/dist/lib/language-server-web-worker.mjs +1 -1
  5. package/dist/lib/language-server.mjs +1 -1
  6. package/dist/lib/{metadata-utils-D90qqMGc.mjs → metadata-utils-CtY0QcvH.mjs} +2 -1
  7. package/dist/lib/{server-common-lmBDLpUh.mjs → server-common-Cine5nRR.mjs} +1 -1
  8. package/dist/lib/xmlui.d.ts +99 -6
  9. package/dist/lib/xmlui.mjs +78 -42
  10. package/dist/metadata/{collectedComponentMetadata-BN8eg9Gr.mjs → collectedComponentMetadata-CQywuPDB.mjs} +17448 -16984
  11. package/dist/metadata/{initMock-J7pN8owj.mjs → initMock-Bi5kF5Af.mjs} +1 -1
  12. package/dist/metadata/style.css +1 -1
  13. package/dist/metadata/xmlui-metadata.mjs +1 -1
  14. package/dist/metadata/xmlui-metadata.umd.js +3 -3
  15. package/dist/scripts/bin/build-lib.js +21 -13
  16. package/dist/scripts/bin/viteConfig.js +3 -1
  17. package/dist/scripts/package.json +2 -3
  18. package/dist/scripts/src/abstractions/scripting/Token.js +2 -0
  19. package/dist/scripts/src/abstractions/scripting/TryScope.js +2 -0
  20. package/dist/scripts/src/abstractions/scripting/modules.js +2 -0
  21. package/dist/scripts/src/components/APICall/APICall.spec.js +910 -0
  22. package/dist/scripts/src/components/Accordion/Accordion.spec.js +969 -0
  23. package/dist/scripts/src/components/Animation/Animation.js +50 -0
  24. package/dist/scripts/src/components/App/App.spec.js +219 -0
  25. package/dist/scripts/src/components/AppHeader/AppHeader.spec.js +169 -0
  26. package/dist/scripts/src/components/AppState/AppState.js +32 -2
  27. package/dist/scripts/src/components/AppState/AppState.spec.js +268 -0
  28. package/dist/scripts/src/components/AppState/AppStateNative.js +27 -3
  29. package/dist/scripts/src/components/AutoComplete/AutoComplete.spec.js +383 -0
  30. package/dist/scripts/src/components/Avatar/Avatar.spec.js +1543 -0
  31. package/dist/scripts/src/components/Backdrop/Backdrop.spec.js +131 -0
  32. package/dist/scripts/src/components/Badge/Badge.spec.js +2214 -0
  33. package/dist/scripts/src/components/Bookmark/Bookmark.spec.js +230 -0
  34. package/dist/scripts/src/components/Breakout/Breakout.spec.js +56 -0
  35. package/dist/scripts/src/components/Button/Button-style.spec.js +274 -0
  36. package/dist/scripts/src/components/Button/Button.js +5 -1
  37. package/dist/scripts/src/components/Button/Button.spec.js +454 -0
  38. package/dist/scripts/src/components/Card/Card.spec.js +150 -0
  39. package/dist/scripts/src/components/Carousel/Carousel.spec.js +343 -0
  40. package/dist/scripts/src/components/Carousel/CarouselNative.js +2 -2
  41. package/dist/scripts/src/components/ChangeListener/ChangeListener.spec.js +169 -0
  42. package/dist/scripts/src/components/Charts/AreaChart/AreaChart.spec.js +999 -0
  43. package/dist/scripts/src/components/Charts/BarChart/BarChart.spec.js +597 -0
  44. package/dist/scripts/src/components/Charts/DonutChart/DonutChart.spec.js +608 -0
  45. package/dist/scripts/src/components/Charts/LabelList/LabelList.spec.js +539 -0
  46. package/dist/scripts/src/components/Charts/Legend/Legend.spec.js +558 -0
  47. package/dist/scripts/src/components/Charts/LineChart/LineChart.spec.js +450 -0
  48. package/dist/scripts/src/components/Charts/PieChart/PieChart.spec.js +584 -0
  49. package/dist/scripts/src/components/Charts/PieChart/PieChartNative.js +41 -2
  50. package/dist/scripts/src/components/Charts/RadarChart/RadarChart.spec.js +571 -0
  51. package/dist/scripts/src/components/Charts/Tooltip/TooltipContent.spec.js +449 -0
  52. package/dist/scripts/src/components/Checkbox/Checkbox.spec.js +964 -0
  53. package/dist/scripts/src/components/CodeBlock/CodeBlock.spec.js +196 -0
  54. package/dist/scripts/src/components/ColorPicker/ColorPicker.spec.js +283 -0
  55. package/dist/scripts/src/components/ColorPicker/ColorPickerNative.js +9 -26
  56. package/dist/scripts/src/components/Column/doc-resources/list-component-data.js +53 -0
  57. package/dist/scripts/src/components/ComponentProvider.js +6 -2
  58. package/dist/scripts/src/components/ContentSeparator/ContentSeparator.spec.js +338 -0
  59. package/dist/scripts/src/components/DateInput/DateInput.spec.js +918 -0
  60. package/dist/scripts/src/components/DatePicker/DatePicker.spec.js +362 -0
  61. package/dist/scripts/src/components/DatePicker/DatePickerNative.js +3 -3
  62. package/dist/scripts/src/components/DropdownMenu/DropdownMenu.spec.js +331 -0
  63. package/dist/scripts/src/components/DropdownMenu/DropdownMenuNative.js +7 -9
  64. package/dist/scripts/src/components/EmojiSelector/EmojiSelector.spec.js +29 -0
  65. package/dist/scripts/src/components/ExpandableItem/ExpandableItem.spec.js +435 -0
  66. package/dist/scripts/src/components/FileInput/FileInput.spec.js +249 -0
  67. package/dist/scripts/src/components/FileUploadDropZone/FileUploadDropZone.spec.js +296 -0
  68. package/dist/scripts/src/components/FlowLayout/FlowLayout.spec.js +518 -0
  69. package/dist/scripts/src/components/Footer/Footer.spec.js +991 -0
  70. package/dist/scripts/src/components/Form/Form.spec.js +1257 -0
  71. package/dist/scripts/src/components/FormItem/FormItem.spec.js +723 -0
  72. package/dist/scripts/src/components/FormItem/ItemWithLabel.js +3 -3
  73. package/dist/scripts/src/components/FormSection/FormSection.js +6 -31
  74. package/dist/scripts/src/components/Fragment/Fragment.spec.js +50 -0
  75. package/dist/scripts/src/components/Heading/H1.spec.js +66 -0
  76. package/dist/scripts/src/components/Heading/H2.spec.js +66 -0
  77. package/dist/scripts/src/components/Heading/H3.spec.js +66 -0
  78. package/dist/scripts/src/components/Heading/H4.spec.js +66 -0
  79. package/dist/scripts/src/components/Heading/H5.spec.js +66 -0
  80. package/dist/scripts/src/components/Heading/H6.spec.js +66 -0
  81. package/dist/scripts/src/components/Heading/Heading.spec.js +897 -0
  82. package/dist/scripts/src/components/HtmlTags/HtmlTags.spec.js +69 -0
  83. package/dist/scripts/src/components/IFrame/IFrame.spec.js +527 -0
  84. package/dist/scripts/src/components/Icon/ArrowDropDown.js +11 -0
  85. package/dist/scripts/src/components/Icon/ArrowDropUp.js +11 -0
  86. package/dist/scripts/src/components/Icon/ArrowLeft.js +11 -0
  87. package/dist/scripts/src/components/Icon/ArrowRight.js +11 -0
  88. package/dist/scripts/src/components/Icon/ChevronDownIcon.js +7 -0
  89. package/dist/scripts/src/components/Icon/ChevronUpIcon.js +7 -0
  90. package/dist/scripts/src/components/Icon/Icon.spec.js +527 -0
  91. package/dist/scripts/src/components/Icon/SunIcon.js +10 -0
  92. package/dist/scripts/src/components/Image/Image.js +2 -1
  93. package/dist/scripts/src/components/Image/Image.spec.js +198 -0
  94. package/dist/scripts/src/components/Image/ImageNative.js +30 -2
  95. package/dist/scripts/src/components/Input/InputLabel.js +25 -0
  96. package/dist/scripts/src/components/Input/index.js +5 -0
  97. package/dist/scripts/src/components/Items/Items.spec.js +397 -0
  98. package/dist/scripts/src/components/Link/Link.spec.js +894 -0
  99. package/dist/scripts/src/components/List/List.spec.js +927 -0
  100. package/dist/scripts/src/components/List/doc-resources/list-component-data.js +53 -0
  101. package/dist/scripts/src/components/Markdown/Markdown.spec.js +188 -0
  102. package/dist/scripts/src/components/ModalDialog/ModalDialog.spec.js +162 -0
  103. package/dist/scripts/src/components/NavGroup/NavGroup.spec.js +212 -0
  104. package/dist/scripts/src/components/NavGroup/NavGroupNative.js +15 -7
  105. package/dist/scripts/src/components/NavLink/NavLink.spec.js +864 -0
  106. package/dist/scripts/src/components/NavPanel/NavPanel.spec.js +864 -0
  107. package/dist/scripts/src/components/NoResult/NoResult.spec.js +863 -0
  108. package/dist/scripts/src/components/NumberBox/NumberBox.spec.js +1237 -0
  109. package/dist/scripts/src/components/Option/Option.spec.js +472 -0
  110. package/dist/scripts/src/components/PageMetaTitle/PageMetaTitle.spec.js +80 -0
  111. package/dist/scripts/src/components/Pagination/Pagination.spec.js +1003 -0
  112. package/dist/scripts/src/components/ProfileMenu/ProfileMenu.js +20 -0
  113. package/dist/scripts/src/components/ProgressBar/ProgressBar.spec.js +166 -0
  114. package/dist/scripts/src/components/Queue/Queue.spec.js +626 -0
  115. package/dist/scripts/src/components/RadioGroup/RadioGroup.spec.js +479 -0
  116. package/dist/scripts/src/components/Redirect/Redirect.spec.js +527 -0
  117. package/dist/scripts/src/components/ResponsiveBar/ResponsiveBar.spec.js +76 -0
  118. package/dist/scripts/src/components/Select/Select.spec.js +527 -0
  119. package/dist/scripts/src/components/SelectionStore/SelectionStoreNative.js +3 -1
  120. package/dist/scripts/src/components/Slider/Slider.js +2 -0
  121. package/dist/scripts/src/components/Slider/Slider.spec.js +574 -0
  122. package/dist/scripts/src/components/Slider/SliderNative.js +63 -26
  123. package/dist/scripts/src/components/Slot/Slot.spec.js +368 -0
  124. package/dist/scripts/src/components/SpaceFiller/SpaceFiller.spec.js +184 -0
  125. package/dist/scripts/src/components/Spinner/Spinner.spec.js +161 -0
  126. package/dist/scripts/src/components/Splitter/HSplitter.spec.js +104 -0
  127. package/dist/scripts/src/components/Splitter/Splitter.spec.js +543 -0
  128. package/dist/scripts/src/components/Splitter/VSplitter.spec.js +104 -0
  129. package/dist/scripts/src/components/Stack/CHStack.spec.js +86 -0
  130. package/dist/scripts/src/components/Stack/CVStack.spec.js +86 -0
  131. package/dist/scripts/src/components/Stack/HStack.spec.js +67 -0
  132. package/dist/scripts/src/components/Stack/Stack.spec.js +654 -0
  133. package/dist/scripts/src/components/Stack/VStack.spec.js +67 -0
  134. package/dist/scripts/src/components/Switch/Switch.spec.js +829 -0
  135. package/dist/scripts/src/components/Table/Table.js +7 -1
  136. package/dist/scripts/src/components/Table/Table.spec.js +555 -0
  137. package/dist/scripts/src/components/Table/TableNative.js +4 -1
  138. package/dist/scripts/src/components/Table/doc-resources/list-component-data.js +53 -0
  139. package/dist/scripts/src/components/Table/useRowSelection.js +215 -1
  140. package/dist/scripts/src/components/TableOfContents/TableOfContents.spec.js +838 -0
  141. package/dist/scripts/src/components/Tabs/Tabs.spec.js +875 -0
  142. package/dist/scripts/src/components/Text/Text.spec.js +1075 -0
  143. package/dist/scripts/src/components/TextArea/TextArea.spec.js +714 -0
  144. package/dist/scripts/src/components/TextBox/TextBox.js +1 -5
  145. package/dist/scripts/src/components/TextBox/TextBox.spec.js +687 -0
  146. package/dist/scripts/src/components/TextBox/TextBoxNative.js +10 -15
  147. package/dist/scripts/src/components/Theme/Theme.spec.js +124 -0
  148. package/dist/scripts/src/components/Theme/ThemeNative.js +2 -6
  149. package/dist/scripts/src/components/TimeInput/TimeInput.js +1 -5
  150. package/dist/scripts/src/components/TimeInput/TimeInput.spec.js +1122 -0
  151. package/dist/scripts/src/components/TimeInput/TimeInputNative.js +2 -9
  152. package/dist/scripts/src/components/Timer/Timer.spec.js +358 -0
  153. package/dist/scripts/src/components/ToneChangerButton/ToneChangerButton.spec.js +414 -0
  154. package/dist/scripts/src/components/ToneSwitch/ToneSwitch.spec.js +89 -0
  155. package/dist/scripts/src/components/Tooltip/Tooltip.spec.js +418 -0
  156. package/dist/scripts/src/components/chart-color-schemes.js +43 -0
  157. package/dist/scripts/src/components-core/ApiBoundComponent.js +38 -24
  158. package/dist/scripts/src/components-core/CompoundComponent.js +1 -1
  159. package/dist/scripts/src/components-core/RestApiProxy.js +84 -8
  160. package/dist/scripts/src/components-core/behaviors/BehaviorContext.js +54 -0
  161. package/dist/scripts/src/components-core/behaviors/CoreBehaviors.js +80 -0
  162. package/dist/scripts/src/components-core/descriptorHelper.js +1 -0
  163. package/dist/scripts/src/components-core/devtools/InspectorDialogVisibilityContext.js +8 -0
  164. package/dist/scripts/src/components-core/parts.js +4 -1
  165. package/dist/scripts/src/components-core/renderers.js +31 -0
  166. package/dist/scripts/src/components-core/rendering/AppRoot.js +2 -1
  167. package/dist/scripts/src/components-core/rendering/ComponentAdapter.js +31 -46
  168. package/dist/scripts/src/components-core/rendering/nodeUtils.js +6 -0
  169. package/dist/scripts/src/components-core/script-runner/simplify-expression.js +386 -0
  170. package/dist/scripts/src/components-core/theming/component-layout-resolver.js +153 -0
  171. package/dist/scripts/src/components-core/theming/layout-resolver.js +2 -0
  172. package/dist/scripts/src/components-core/theming/parse-layout-props.js +98 -0
  173. package/dist/scripts/src/components-core/theming/themes/solid.js +16 -0
  174. package/dist/scripts/src/components-core/utils/audio-utils.js +83 -0
  175. package/dist/scripts/src/index-standalone.js +61 -0
  176. package/dist/scripts/src/index.js +39 -1
  177. package/dist/scripts/src/language-server/server-common.js +151 -0
  178. package/dist/scripts/src/language-server/server-web-worker.js +47 -0
  179. package/dist/scripts/src/language-server/server.js +42 -0
  180. package/dist/scripts/src/language-server/services/common/docs-generation.js +73 -0
  181. package/dist/scripts/src/language-server/services/common/lsp-utils.js +9 -0
  182. package/dist/scripts/src/language-server/services/common/syntax-node-utilities.js +135 -0
  183. package/dist/scripts/src/language-server/services/completion.js +270 -0
  184. package/dist/scripts/src/language-server/services/diagnostic.js +19 -0
  185. package/dist/scripts/src/language-server/services/format.js +430 -0
  186. package/dist/scripts/src/language-server/services/hover.js +164 -0
  187. package/dist/scripts/src/language-server/xmlui-metadata-generated.mjs +16266 -0
  188. package/dist/scripts/src/logging/xmlui.js +21 -0
  189. package/dist/scripts/src/parsers/common/utils.js +19 -0
  190. package/dist/scripts/src/syntax/monaco/grammar.monacoLanguage.js +286 -0
  191. package/dist/scripts/src/syntax/monaco/index.js +14 -0
  192. package/dist/scripts/src/syntax/monaco/xmlui-dark.js +25 -0
  193. package/dist/scripts/src/syntax/monaco/xmlui-light.js +25 -0
  194. package/dist/scripts/src/syntax/monaco/xmluiscript.monacoLanguage.js +310 -0
  195. package/dist/scripts/src/syntax/textMate/index.js +14 -0
  196. package/dist/scripts/src/syntax/textMate/xmlui-dark.json +631 -0
  197. package/dist/scripts/src/syntax/textMate/xmlui-light.json +565 -0
  198. package/dist/scripts/src/syntax/textMate/xmlui.json +564 -0
  199. package/dist/scripts/src/syntax/textMate/xmlui.tmLanguage.json +341 -0
  200. package/dist/scripts/src/testing/ComponentDrivers.js +1327 -0
  201. package/dist/scripts/src/testing/assertions.js +444 -0
  202. package/dist/scripts/src/testing/component-test-helpers.js +389 -0
  203. package/dist/scripts/src/testing/drivers/DateInputDriver.js +19 -0
  204. package/dist/scripts/src/testing/drivers/ModalDialogDriver.js +10 -0
  205. package/dist/scripts/src/testing/drivers/NumberBoxDriver.js +44 -0
  206. package/dist/scripts/src/testing/drivers/SliderDriver.js +20 -0
  207. package/dist/scripts/src/testing/drivers/TextBoxDriver.js +20 -0
  208. package/dist/scripts/src/testing/drivers/TimeInputDriver.js +22 -0
  209. package/dist/scripts/src/testing/drivers/TimerDriver.js +64 -0
  210. package/dist/scripts/src/testing/fixtures.js +513 -0
  211. package/dist/scripts/src/testing/infrastructure/TestBed.js +17 -0
  212. package/dist/scripts/src/testing/infrastructure/main.js +9 -0
  213. package/dist/scripts/src/testing/infrastructure/public/mockServiceWorker.js +266 -0
  214. package/dist/scripts/src/testing/themed-app-test-helpers.js +139 -0
  215. package/dist/standalone/xmlui-standalone.es.d.ts +172 -10
  216. package/dist/standalone/xmlui-standalone.umd.js +36 -36
  217. package/package.json +2 -3
@@ -52,23 +52,99 @@ const process_statement_sync_1 = require("./script-runner/process-statement-sync
52
52
  function isAxiosResponse(response) {
53
53
  return "data" in response;
54
54
  }
55
- function parseResponseJson(response_1) {
55
+ function getContentType(response) {
56
+ if (isAxiosResponse(response)) {
57
+ return response.headers['content-type'] || response.headers['Content-Type'] || '';
58
+ }
59
+ else {
60
+ return response.headers.get('content-type') || '';
61
+ }
62
+ }
63
+ // --- Tests for the most common binary types
64
+ function isBinaryContentType(contentType) {
65
+ const binaryTypes = [
66
+ // Images
67
+ 'image/',
68
+ // Audio
69
+ 'audio/',
70
+ // Video
71
+ 'video/',
72
+ // Documents
73
+ 'application/pdf',
74
+ 'application/msword',
75
+ 'application/vnd.openxmlformats-officedocument.',
76
+ 'application/vnd.ms-excel',
77
+ 'application/vnd.ms-powerpoint',
78
+ // Archives
79
+ 'application/zip',
80
+ 'application/x-rar-compressed',
81
+ 'application/x-tar',
82
+ 'application/gzip',
83
+ 'application/x-7z-compressed',
84
+ // Other binary
85
+ 'application/octet-stream',
86
+ 'application/x-binary',
87
+ ];
88
+ return binaryTypes.some(type => contentType.toLowerCase().includes(type.toLowerCase()));
89
+ }
90
+ // --- Tests if a particular content type returns an ArrayBuffer
91
+ function shouldReturnAsArrayBuffer(contentType) {
92
+ const arrayBufferTypes = [
93
+ 'application/zip',
94
+ 'application/x-rar-compressed',
95
+ 'application/x-tar',
96
+ 'application/gzip',
97
+ 'application/x-7z-compressed',
98
+ 'application/x-binary',
99
+ ];
100
+ return arrayBufferTypes.some(type => contentType.toLowerCase().includes(type.toLowerCase()));
101
+ }
102
+ function parseResponseBody(response_1) {
56
103
  return __awaiter(this, arguments, void 0, function* (response, logError = false) {
57
104
  let resp;
58
105
  if (isAxiosResponse(response)) {
59
106
  resp = response.data;
60
107
  }
61
108
  else {
62
- try {
63
- resp = yield response.clone().json();
64
- }
65
- catch (e) {
109
+ const contentType = getContentType(response);
110
+ // Handle binary content types
111
+ if (isBinaryContentType(contentType)) {
66
112
  try {
67
- resp = yield response.clone().text();
113
+ if (shouldReturnAsArrayBuffer(contentType)) {
114
+ resp = yield response.clone().arrayBuffer();
115
+ }
116
+ else {
117
+ resp = yield response.clone().blob();
118
+ }
68
119
  }
69
120
  catch (e) {
70
121
  if (logError) {
71
- console.error("Failed to parse response as text or JSON", response.body);
122
+ console.error("Failed to parse binary response", e, contentType);
123
+ }
124
+ // Fallback to text if binary parsing fails
125
+ try {
126
+ resp = yield response.clone().text();
127
+ }
128
+ catch (textError) {
129
+ if (logError) {
130
+ console.error("Failed to parse response as text after binary parsing failed", textError);
131
+ }
132
+ }
133
+ }
134
+ }
135
+ else {
136
+ // Handle text-based content types (JSON, text, etc.)
137
+ try {
138
+ resp = yield response.clone().json();
139
+ }
140
+ catch (e) {
141
+ try {
142
+ resp = yield response.clone().text();
143
+ }
144
+ catch (e) {
145
+ if (logError) {
146
+ console.error("Failed to parse response as text or JSON", response.body);
147
+ }
72
148
  }
73
149
  }
74
150
  }
@@ -325,7 +401,7 @@ class RestApiProxy {
325
401
  }
326
402
  });
327
403
  this.tryParseResponse = (response_1, ...args_1) => __awaiter(this, [response_1, ...args_1], void 0, function* (response, logError = false) {
328
- return yield parseResponseJson(response, logError);
404
+ return yield parseResponseBody(response, logError);
329
405
  });
330
406
  this.raiseError = (response) => __awaiter(this, void 0, void 0, function* () {
331
407
  if ("config" in response) {
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useBehaviors = exports.BehaviorsProvider = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const CoreBehaviors_1 = require("./CoreBehaviors");
7
+ // --- Create the context with a default value
8
+ const BehaviorContext = (0, react_1.createContext)(undefined);
9
+ /**
10
+ * A provider component that makes the behavior management system available to
11
+ * its children.
12
+ */
13
+ const BehaviorsProvider = ({ children }) => {
14
+ const behaviors = (0, react_1.useMemo)(() => new Map(), []);
15
+ const getBehaviors = () => {
16
+ return Array.from(behaviors.values());
17
+ };
18
+ const registerBehavior = (behavior) => {
19
+ behaviors.set(behavior.name, behavior);
20
+ };
21
+ const unregisterBehavior = (name) => {
22
+ behaviors.delete(name);
23
+ };
24
+ (0, react_1.useMemo)(() => {
25
+ if (process.env.VITE_USED_BEHAVIORS_Animation !== "false") {
26
+ registerBehavior(CoreBehaviors_1.animationBehavior);
27
+ }
28
+ if (process.env.VITE_USED_BEHAVIORS_Tooltip !== "false") {
29
+ registerBehavior(CoreBehaviors_1.tooltipBehavior);
30
+ }
31
+ if (process.env.VITE_USED_BEHAVIORS_Label !== "false") {
32
+ registerBehavior(CoreBehaviors_1.labelBehavior);
33
+ }
34
+ }, []);
35
+ const contextValue = (0, react_1.useMemo)(() => ({
36
+ behaviors,
37
+ registerBehavior,
38
+ unregisterBehavior,
39
+ getBehaviors,
40
+ }), [behaviors]);
41
+ return ((0, jsx_runtime_1.jsx)(BehaviorContext.Provider, { value: contextValue, children: children }));
42
+ };
43
+ exports.BehaviorsProvider = BehaviorsProvider;
44
+ /**
45
+ * A custom hook to access the behavior context.
46
+ */
47
+ const useBehaviors = () => {
48
+ const context = (0, react_1.useContext)(BehaviorContext);
49
+ if (!context) {
50
+ throw new Error("useBehaviors must be used within a BehaviorsProvider");
51
+ }
52
+ return context;
53
+ };
54
+ exports.useBehaviors = useBehaviors;
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.labelBehavior = exports.animationBehavior = exports.tooltipBehavior = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const AnimationNative_1 = require("../../components/Animation/AnimationNative");
7
+ const ItemWithLabel_1 = require("../../components/FormItem/ItemWithLabel");
8
+ const TooltipNative_1 = require("../../components/Tooltip/TooltipNative");
9
+ /**
10
+ * Behavior for applying tooltips to components.
11
+ */
12
+ exports.tooltipBehavior = {
13
+ name: "tooltip",
14
+ canAttach: (node) => {
15
+ var _a, _b;
16
+ const tooltipText = (_a = node.props) === null || _a === void 0 ? void 0 : _a.tooltip;
17
+ const tooltipMarkdown = (_b = node.props) === null || _b === void 0 ? void 0 : _b.tooltipMarkdown;
18
+ return !!tooltipText || !!tooltipMarkdown;
19
+ },
20
+ attach: (context, node) => {
21
+ var _a, _b, _c;
22
+ const { extractValue } = context;
23
+ const tooltipText = extractValue((_a = context.node.props) === null || _a === void 0 ? void 0 : _a.tooltip, true);
24
+ const tooltipMarkdown = extractValue((_b = context.node.props) === null || _b === void 0 ? void 0 : _b.tooltipMarkdown, true);
25
+ const tooltipOptions = extractValue((_c = context.node.props) === null || _c === void 0 ? void 0 : _c.tooltipOptions, true);
26
+ const parsedOptions = (0, TooltipNative_1.parseTooltipOptions)(tooltipOptions);
27
+ return ((0, jsx_runtime_1.jsx)(TooltipNative_1.Tooltip, Object.assign({ text: tooltipText, markdown: tooltipMarkdown }, parsedOptions, { children: node })));
28
+ },
29
+ };
30
+ /**
31
+ * Behavior for applying animations to components.
32
+ */
33
+ exports.animationBehavior = {
34
+ name: "animation",
35
+ canAttach: (node) => {
36
+ var _a;
37
+ return !!((_a = node.props) === null || _a === void 0 ? void 0 : _a.animation);
38
+ },
39
+ attach: (context, node) => {
40
+ var _a, _b;
41
+ const { extractValue } = context;
42
+ const animation = extractValue((_a = context.node.props) === null || _a === void 0 ? void 0 : _a.animation, true);
43
+ const animationOptions = extractValue((_b = context.node.props) === null || _b === void 0 ? void 0 : _b.animationOptions, true);
44
+ const parsedOptions = (0, AnimationNative_1.parseAnimationOptions)(animationOptions);
45
+ return ((0, jsx_runtime_1.jsx)(AnimationNative_1.Animation, Object.assign({ animation: (0, AnimationNative_1.parseAnimation)(animation) }, parsedOptions, { children: node })));
46
+ },
47
+ };
48
+ /**
49
+ * Behavior for applying a label to form components using ItemWithLabel.
50
+ */
51
+ exports.labelBehavior = {
52
+ name: "label",
53
+ canAttach: (node, metadata) => {
54
+ var _a, _b;
55
+ /**
56
+ * This behavior can be attached if the component has a 'label' prop
57
+ * and is not a component that handles its own labeling.
58
+ */
59
+ if ((_a = metadata === null || metadata === void 0 ? void 0 : metadata.props) === null || _a === void 0 ? void 0 : _a.label) {
60
+ return false;
61
+ }
62
+ else if (!((_b = node.props) === null || _b === void 0 ? void 0 : _b.label)) {
63
+ return false;
64
+ }
65
+ return true;
66
+ },
67
+ attach: (context, node) => {
68
+ const { extractValue, node: componentNode, className } = context;
69
+ const label = extractValue.asOptionalString(componentNode.props.label);
70
+ const labelPosition = extractValue(componentNode.props.labelPosition);
71
+ const labelWidth = extractValue.asOptionalString(componentNode.props.labelWidth);
72
+ const labelBreak = extractValue.asOptionalBoolean(componentNode.props.labelBreak);
73
+ const required = extractValue.asOptionalBoolean(componentNode.props.required);
74
+ const enabled = extractValue.asOptionalBoolean(componentNode.props.enabled, true);
75
+ const shrinkToLabel = extractValue.asOptionalBoolean(componentNode.props.shrinkToLabel);
76
+ const style = extractValue(componentNode.props.style);
77
+ const generatedId = (0, react_1.useId)();
78
+ return ((0, jsx_runtime_1.jsx)(ItemWithLabel_1.ItemWithLabel, { id: componentNode.uid || generatedId, labelPosition: labelPosition, label: label, labelWidth: labelWidth, labelBreak: labelBreak, required: required, enabled: enabled, style: style, className: className, shrinkToLabel: shrinkToLabel, testId: componentNode.testId, children: node }));
79
+ },
80
+ };
@@ -92,4 +92,5 @@ exports.layoutOptionKeys = [
92
92
  "wordWrap",
93
93
  "writingMode",
94
94
  "transition",
95
+ "transform",
95
96
  ];
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.InspectorDialogVisibilityContext = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ exports.InspectorDialogVisibilityContext = react_1.default.createContext(null);
@@ -1,8 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PART_END_ADORNMENT = exports.PART_START_ADORNMENT = exports.PART_INPUT = exports.PART_LABELED_ITEM = exports.PART_LABEL = void 0;
3
+ exports.PART_THUMB = exports.PART_RANGE = exports.PART_TRACK = exports.PART_END_ADORNMENT = exports.PART_START_ADORNMENT = exports.PART_INPUT = exports.PART_LABELED_ITEM = exports.PART_LABEL = void 0;
4
4
  exports.PART_LABEL = "label";
5
5
  exports.PART_LABELED_ITEM = "labeledItem";
6
6
  exports.PART_INPUT = "input";
7
7
  exports.PART_START_ADORNMENT = "startAdornment";
8
8
  exports.PART_END_ADORNMENT = "endAdornment";
9
+ exports.PART_TRACK = "track";
10
+ exports.PART_RANGE = "range";
11
+ exports.PART_THUMB = "thumb";
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createComponentRenderer = createComponentRenderer;
4
4
  exports.createPropHolderComponent = createPropHolderComponent;
5
5
  exports.createLoaderRenderer = createLoaderRenderer;
6
+ exports.createUserDefinedComponentRenderer = createUserDefinedComponentRenderer;
6
7
  /**
7
8
  * This helper function creates a component renderer definition from its arguments.
8
9
  * @param type The unique identifier of the component definition
@@ -43,3 +44,33 @@ function createLoaderRenderer(type, renderer, hints) {
43
44
  hints,
44
45
  };
45
46
  }
47
+ /**
48
+ * This helper function creates a user defined component renderer definition from its arguments.
49
+ * @param metadata The metadata of the user-defined component
50
+ * @param componentMarkup The XMLUI markup that defines the user-defined component
51
+ * @param codeBehind Optional code-behind script that contains variable and function definitions
52
+ * used by the component
53
+ * @returns The view renderer definition composed of the arguments
54
+ */
55
+ function createUserDefinedComponentRenderer(metadata, def, codeBehind) {
56
+ var _a, _b;
57
+ // --- Parse the component definition from the markup
58
+ // --- Parse the optional code-behind script
59
+ const component = def.component.component;
60
+ ;
61
+ if (codeBehind) {
62
+ if (codeBehind.vars) {
63
+ (_a = component.vars) !== null && _a !== void 0 ? _a : (component.vars = {});
64
+ component.vars = Object.assign(Object.assign({}, component.vars), codeBehind.vars);
65
+ }
66
+ if (codeBehind.functions) {
67
+ (_b = component.functions) !== null && _b !== void 0 ? _b : (component.functions = {});
68
+ component.functions = Object.assign(Object.assign({}, component.functions), codeBehind.functions);
69
+ }
70
+ }
71
+ // --- Done.
72
+ return {
73
+ compoundComponentDef: def.component,
74
+ metadata,
75
+ };
76
+ }
@@ -11,6 +11,7 @@ const ComponentProvider_1 = require("../../components/ComponentProvider");
11
11
  const DebugViewProvider_1 = require("../DebugViewProvider");
12
12
  const AppWrapper_1 = require("./AppWrapper");
13
13
  const StyleContext_1 = require("../theming/StyleContext");
14
+ const BehaviorContext_1 = require("../behaviors/BehaviorContext");
14
15
  // --- We want to enable the produce method of `immer` on Map objects
15
16
  (0, immer_1.enableMapSet)();
16
17
  // --- We use this object in the app context to represent the `QlientQuery`
@@ -59,7 +60,7 @@ function AppRoot({ apiInterceptor, contributes, node, decorateComponentsWithTest
59
60
  const enhancedGlobalProps = (0, react_1.useMemo)(() => (Object.assign(Object.assign({}, globalProps), { isNested })), [globalProps, isNested]);
60
61
  // --- Render the app providing a component registry (in which the engine finds a
61
62
  // --- component definition by its name). Ensure the app has a context for debugging.
62
- return ((0, jsx_runtime_1.jsx)(ComponentProvider_1.ComponentProvider, { contributes: contributes, extensionManager: extensionManager, children: (0, jsx_runtime_1.jsx)(StyleContext_1.StyleProvider, { children: (0, jsx_runtime_1.jsx)(DebugViewProvider_1.DebugViewProvider, { debugConfig: globalProps === null || globalProps === void 0 ? void 0 : globalProps.debug, children: (0, jsx_runtime_1.jsx)(AppWrapper_1.AppWrapper, { projectCompilation: projectCompilation, resourceMap: resourceMap, apiInterceptor: apiInterceptor, node: rootNode, contributes: contributes, resources: resources, routerBaseName: routerBaseName, decorateComponentsWithTestId: decorateComponentsWithTestId, debugEnabled: debugEnabled, defaultTheme: defaultTheme, defaultTone: defaultTone, globalProps: enhancedGlobalProps, standalone: standalone, trackContainerHeight: trackContainerHeight, previewMode: previewMode, sources: sources, onInit: onInit, children: children }) }) }) }));
63
+ return ((0, jsx_runtime_1.jsx)(ComponentProvider_1.ComponentProvider, { contributes: contributes, extensionManager: extensionManager, children: (0, jsx_runtime_1.jsx)(StyleContext_1.StyleProvider, { children: (0, jsx_runtime_1.jsx)(BehaviorContext_1.BehaviorsProvider, { children: (0, jsx_runtime_1.jsx)(DebugViewProvider_1.DebugViewProvider, { debugConfig: globalProps === null || globalProps === void 0 ? void 0 : globalProps.debug, children: (0, jsx_runtime_1.jsx)(AppWrapper_1.AppWrapper, { projectCompilation: projectCompilation, resourceMap: resourceMap, apiInterceptor: apiInterceptor, node: rootNode, contributes: contributes, resources: resources, routerBaseName: routerBaseName, decorateComponentsWithTestId: decorateComponentsWithTestId, debugEnabled: debugEnabled, defaultTheme: defaultTheme, defaultTone: defaultTone, globalProps: enhancedGlobalProps, standalone: standalone, trackContainerHeight: trackContainerHeight, previewMode: previewMode, sources: sources, onInit: onInit, children: children }) }) }) }) }));
63
64
  }
64
65
  /**
65
66
  *
@@ -53,6 +53,7 @@ const lodash_es_1 = require("lodash-es");
53
53
  const react_compose_refs_1 = require("@radix-ui/react-compose-refs");
54
54
  const extractParam_1 = require("../utils/extractParam");
55
55
  const ThemeContext_1 = require("../theming/ThemeContext");
56
+ const StyleContext_1 = require("../theming/StyleContext");
56
57
  const mergeProps_1 = require("../utils/mergeProps");
57
58
  const ComponentDecorator_1 = __importDefault(require("../ComponentDecorator"));
58
59
  const valueExtractor_1 = require("../rendering/valueExtractor");
@@ -68,9 +69,7 @@ const event_handlers_1 = require("../event-handlers");
68
69
  const UnknownComponent_1 = __importDefault(require("./UnknownComponent"));
69
70
  const InvalidComponent_1 = __importDefault(require("./InvalidComponent"));
70
71
  const layout_resolver_1 = require("../theming/layout-resolver");
71
- const TooltipNative_1 = require("../../components/Tooltip/TooltipNative");
72
- const StyleContext_1 = require("../theming/StyleContext");
73
- const AnimationNative_1 = require("../../components/Animation/AnimationNative");
72
+ const BehaviorContext_1 = require("../behaviors/BehaviorContext");
74
73
  /**
75
74
  * This component's primary responsibility is to transform a particular component definition
76
75
  * into its React representation using the current rendering context.
@@ -176,39 +175,32 @@ const ComponentAdapter = (0, react_1.forwardRef)(function ComponentAdapter(_a, r
176
175
  // });
177
176
  }, [appContext.mediaSize, layoutContextRef, safeNode.props, valueExtractor]);
178
177
  // const className = useComponentStyle(cssProps);
179
- // --- Check if the component has a tooltip property
180
- const tooltipText = (0, react_1.useMemo)(() => { var _a; return valueExtractor((_a = safeNode.props) === null || _a === void 0 ? void 0 : _a.tooltip, true); }, [safeNode.props, valueExtractor]);
181
- // --- Check if the component has a tooltip property
182
- const tooltipMarkdown = (0, react_1.useMemo)(() => { var _a; return valueExtractor((_a = safeNode.props) === null || _a === void 0 ? void 0 : _a.tooltipMarkdown, true); }, [safeNode.props, valueExtractor]);
183
- const tooltipOptions = (0, react_1.useMemo)(() => { var _a; return valueExtractor((_a = safeNode.props) === null || _a === void 0 ? void 0 : _a.tooltipOptions, true); }, [safeNode.props, valueExtractor]);
184
- const animation = (0, react_1.useMemo)(() => { var _a; return valueExtractor((_a = safeNode.props) === null || _a === void 0 ? void 0 : _a.animation, true); }, [safeNode.props, valueExtractor]);
185
- const animationOptions = (0, react_1.useMemo)(() => { var _a; return valueExtractor((_a = safeNode.props) === null || _a === void 0 ? void 0 : _a.animationOptions, true); }, [safeNode.props, valueExtractor]);
186
178
  // --- As compileLayout generates new cssProps and nonCssProps objects every time, we need to
187
179
  // --- memoize them using shallow comparison to avoid unnecessary re-renders.
188
180
  const stableLayoutCss = (0, hooks_1.useShallowCompareMemoize)(cssProps);
189
181
  const className = (0, StyleContext_1.useComponentStyle)(stableLayoutCss);
190
182
  const { inspectId, refreshInspection } = (0, InspectorContext_1.useInspector)(safeNode, uid);
183
+ // --- Assemble the renderer context we pass down the rendering chain
184
+ const rendererContext = {
185
+ node: safeNode,
186
+ state: state[uid] || constants_1.EMPTY_OBJECT,
187
+ updateState: memoedUpdateState,
188
+ appContext,
189
+ extractValue: valueExtractor,
190
+ lookupEventHandler: memoedLookupEventHandler,
191
+ lookupAction: memoedLookupAction,
192
+ lookupSyncCallback: memoedLookupSyncCallback,
193
+ extractResourceUrl,
194
+ renderChild: memoedRenderChild,
195
+ registerComponentApi: memoedRegisterComponentApi,
196
+ className,
197
+ layoutContext: layoutContextRef === null || layoutContextRef === void 0 ? void 0 : layoutContextRef.current,
198
+ uid,
199
+ };
191
200
  // --- No special behavior, let's render the component according to its definition.
192
201
  let renderedNode = null;
193
202
  let renderingError = null;
194
203
  try {
195
- // --- Assemble the renderer context we pass down the rendering chain
196
- const rendererContext = {
197
- node: safeNode,
198
- state: state[uid] || constants_1.EMPTY_OBJECT,
199
- updateState: memoedUpdateState,
200
- appContext,
201
- extractValue: valueExtractor,
202
- lookupEventHandler: memoedLookupEventHandler,
203
- lookupAction: memoedLookupAction,
204
- lookupSyncCallback: memoedLookupSyncCallback,
205
- extractResourceUrl,
206
- renderChild: memoedRenderChild,
207
- registerComponentApi: memoedRegisterComponentApi,
208
- className,
209
- layoutContext: layoutContextRef === null || layoutContextRef === void 0 ? void 0 : layoutContextRef.current,
210
- uid,
211
- };
212
204
  if (safeNode.type === "Slot") {
213
205
  // --- Transpose the children from the parent component to the slot in
214
206
  // --- the compound component
@@ -280,27 +272,20 @@ const ComponentAdapter = (0, react_1.forwardRef)(function ComponentAdapter(_a, r
280
272
  ? (0, react_1.cloneElement)(renderedNode, null, children)
281
273
  : renderedNode;
282
274
  }
283
- const applyWrappers = (node) => {
284
- // --- Handle animations and tooltips together
285
- if (animation && (tooltipMarkdown || tooltipText)) {
286
- const parsedOptions = (0, TooltipNative_1.parseTooltipOptions)(tooltipOptions);
287
- const parsedAnimationOptions = (0, AnimationNative_1.parseAnimationOptions)(animationOptions);
288
- return ((0, jsx_runtime_1.jsx)(TooltipNative_1.Tooltip, Object.assign({ text: tooltipText, markdown: tooltipMarkdown }, parsedOptions, { children: (0, jsx_runtime_1.jsx)(AnimationNative_1.Animation, Object.assign({ animation: (0, AnimationNative_1.parseAnimation)(animation) }, parsedAnimationOptions, { children: node })) })));
289
- }
290
- // --- Handle animation
291
- if (animation) {
292
- const parsedAnimationOptions = (0, AnimationNative_1.parseAnimationOptions)(animationOptions);
293
- return ((0, jsx_runtime_1.jsx)(AnimationNative_1.Animation, Object.assign({ animation: (0, AnimationNative_1.parseAnimation)(animation) }, parsedAnimationOptions, { children: node })));
294
- }
295
- // --- Handle tooltip
296
- if (tooltipMarkdown || tooltipText) {
297
- const parsedOptions = (0, TooltipNative_1.parseTooltipOptions)(tooltipOptions);
298
- return ((0, jsx_runtime_1.jsx)(TooltipNative_1.Tooltip, Object.assign({ text: tooltipText, markdown: tooltipMarkdown }, parsedOptions, { children: node })));
275
+ const { getBehaviors } = (0, BehaviorContext_1.useBehaviors)();
276
+ const applyBehaviors = (node) => {
277
+ const behaviors = getBehaviors();
278
+ let wrappedNode = node;
279
+ if (!isCompoundComponent) {
280
+ for (const behavior of behaviors) {
281
+ if (behavior.canAttach(rendererContext.node, descriptor)) {
282
+ wrappedNode = behavior.attach(rendererContext, wrappedNode);
283
+ }
284
+ }
299
285
  }
300
- // --- No wrappers needed
301
- return node;
286
+ return wrappedNode;
302
287
  };
303
- return applyWrappers(nodeToRender);
288
+ return applyBehaviors(nodeToRender);
304
289
  });
305
290
  /**
306
291
  * This function renders the content of a slot. If the slot is named, it looks for a template
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hasRenderableChildren = hasRenderableChildren;
4
+ function hasRenderableChildren(children) {
5
+ return !!(children === null || children === void 0 ? void 0 : children.some((child) => (child === null || child === void 0 ? void 0 : child.type) !== "Slot"));
6
+ }