xmlui 0.9.86 → 0.9.88

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 (28) hide show
  1. package/dist/lib/{index-Bm0sNu3Q.mjs → index-Bp_BDtXG.mjs} +3631 -3624
  2. package/dist/lib/index.css +1 -1
  3. package/dist/lib/{initMock-BJWFwa64.mjs → initMock-sQ134eLj.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-Bes0jMw3.mjs → metadata-utils-DJhOKFL6.mjs} +1 -1
  7. package/dist/lib/{server-common-CfdMYx46.mjs → server-common-BORb4y7v.mjs} +5142 -4745
  8. package/dist/lib/{transform-C_5kSXBN.mjs → transform-bUuxPyao.mjs} +419 -388
  9. package/dist/lib/xmlui-parser.d.ts +24 -6
  10. package/dist/lib/xmlui-parser.mjs +2 -2
  11. package/dist/lib/{xmlui-serializer-jEIItW8v.mjs → xmlui-serializer-BLFl30t9.mjs} +1 -1
  12. package/dist/lib/xmlui.d.ts +3 -0
  13. package/dist/lib/xmlui.mjs +2 -2
  14. package/dist/metadata/{collectedComponentMetadata-BLxDndi5.mjs → collectedComponentMetadata-BhZTLaIe.mjs} +5052 -5016
  15. package/dist/metadata/{initMock-DRxSMFJz.mjs → initMock-C1rf5mFV.mjs} +1 -1
  16. package/dist/metadata/style.css +1 -1
  17. package/dist/metadata/xmlui-metadata.mjs +1 -1
  18. package/dist/metadata/xmlui-metadata.umd.js +74 -74
  19. package/dist/scripts/package.json +1 -1
  20. package/dist/scripts/src/components/Backdrop/Backdrop.js +5 -3
  21. package/dist/scripts/src/components/Backdrop/BackdropNative.js +2 -6
  22. package/dist/scripts/src/components/Markdown/parse-binding-expr.js +27 -15
  23. package/dist/scripts/src/components/Switch/Switch.js +1 -2
  24. package/dist/scripts/src/parsers/xmlui-parser/diagnostics.js +29 -7
  25. package/dist/scripts/src/parsers/xmlui-parser/parser.js +17 -10
  26. package/dist/standalone/xmlui-standalone.es.d.ts +3 -0
  27. package/dist/standalone/xmlui-standalone.umd.js +204 -204
  28. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xmlui",
3
- "version": "0.9.86",
3
+ "version": "0.9.88",
4
4
  "sideEffects": false,
5
5
  "scripts": {
6
6
  "start-test-bed": "cd src/testing/infrastructure && xmlui start",
@@ -22,17 +22,19 @@ exports.BackdropMd = (0, metadata_helpers_1.createMetadata)({
22
22
  backgroundColor: {
23
23
  description: "The background color of the backdrop.",
24
24
  valueType: "string",
25
- defaultValue: BackdropNative_1.defaultProps.backgroundColor,
26
25
  },
27
26
  opacity: {
28
27
  description: "The opacity of the backdrop.",
29
28
  valueType: "string",
30
- defaultValue: BackdropNative_1.defaultProps.opacity,
31
29
  },
32
30
  },
33
31
  themeVars: (0, themeVars_1.parseScssVar)(Backdrop_module_scss_1.default.themeVars),
32
+ defaultThemeVars: {
33
+ [`backgroundColor-${COMP}`]: "black",
34
+ [`opacity-${COMP}`]: "0.1",
35
+ }
34
36
  });
35
37
  exports.backdropComponentRenderer = (0, renderers_1.createComponentRenderer)(COMP, exports.BackdropMd, ({ node, extractValue, renderChild, layoutCss }) => {
36
38
  var _a;
37
- return ((0, jsx_runtime_1.jsx)(BackdropNative_1.Backdrop, { style: layoutCss, overlayTemplate: renderChild((_a = node.props) === null || _a === void 0 ? void 0 : _a.overlayTemplate), backgroundColor: extractValue.asOptionalString(node.props.backgroundColor), opacity: extractValue.asString(node.props.opacity), children: renderChild(node.children) }));
39
+ return ((0, jsx_runtime_1.jsx)(BackdropNative_1.Backdrop, { style: layoutCss, overlayTemplate: renderChild((_a = node.props) === null || _a === void 0 ? void 0 : _a.overlayTemplate), backgroundColor: extractValue.asOptionalString(node.props.backgroundColor, undefined), opacity: extractValue.asOptionalString(node.props.opacity, undefined), children: renderChild(node.children) }));
38
40
  });
@@ -3,15 +3,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Backdrop = exports.defaultProps = void 0;
6
+ exports.Backdrop = void 0;
7
7
  const jsx_runtime_1 = require("react/jsx-runtime");
8
8
  const react_1 = require("react");
9
9
  const Backdrop_module_scss_1 = __importDefault(require("./Backdrop.module.scss"));
10
- exports.defaultProps = {
11
- backgroundColor: "black",
12
- opacity: "0.1",
13
- };
14
- exports.Backdrop = (0, react_1.forwardRef)(function Backdrop({ style, children, overlayTemplate, backgroundColor = exports.defaultProps.backgroundColor, opacity = exports.defaultProps.opacity, }, forwardedRef) {
10
+ exports.Backdrop = (0, react_1.forwardRef)(function Backdrop({ style, children, overlayTemplate, backgroundColor, opacity, }, forwardedRef) {
15
11
  var _a;
16
12
  const styleWithoutDims = Object.assign(Object.assign({}, style), { width: undefined });
17
13
  return ((0, jsx_runtime_1.jsxs)("div", { className: Backdrop_module_scss_1.default.backdropContainer, style: { width: (_a = style.width) !== null && _a !== void 0 ? _a : "fit-content" }, ref: forwardedRef, children: [children, (0, jsx_runtime_1.jsx)("div", { className: Backdrop_module_scss_1.default.backdrop, style: Object.assign(Object.assign({}, styleWithoutDims), { backgroundColor, opacity }) }), overlayTemplate && (0, jsx_runtime_1.jsx)("div", { className: Backdrop_module_scss_1.default.overlay, children: overlayTemplate })] }));
@@ -10,21 +10,33 @@ const ScriptingSourceTree_1 = require("../../components-core/script-runner/Scrip
10
10
  * @returns the parsed text with resolved binding expressions
11
11
  */
12
12
  function parseBindingExpression(text, extractValue) {
13
- // Remove empty @{} expressions first
14
- text = text.replaceAll(/(?<!\\)\@\{\s*\}/g, "");
15
- // The (?<!\\) is a "negative lookbehind" in regex that ensures that
16
- // if escaping the @{...} expression like this: \@{...}, we don't match it
17
- const regex = /(?<!\\)\@\{((?:[^{}]|\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\})*)\}/g;
18
- const result = text.replace(regex, (_, expr) => {
19
- const extracted = extractValue(`{${expr}}`);
20
- const resultExpr = mapByType(extracted);
21
- // The result expression might be an object, in that case we stringify it here,
22
- // at the last step, so that there are no unnecessary apostrophes
23
- return typeof resultExpr === "object" && resultExpr !== null
24
- ? JSON.stringify(resultExpr)
25
- : resultExpr;
26
- });
27
- return result;
13
+ // Remove empty @{} expressions first - Safari/Edge compatible version
14
+ text = text.replaceAll(/(^|[^\\])\@\{\s*\}/g, "$1");
15
+ // Safari/Edge compatible iterative processing to handle adjacent bindings
16
+ // Process content bindings one at a time to avoid position conflicts
17
+ let previousText = "";
18
+ let iterations = 0;
19
+ while (text !== previousText && iterations < 100) { // Safety limit
20
+ previousText = text;
21
+ iterations++;
22
+ // Match first non-escaped @{...} with nested braces support
23
+ const match = text.match(/(^|[^\\])(\@\{((?:[^{}]|\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\})*)\})/);
24
+ if (match) {
25
+ const fullMatch = match[0];
26
+ const prefix = match[1];
27
+ const expr = match[3];
28
+ const extracted = extractValue(`{${expr}}`);
29
+ const resultExpr = mapByType(extracted);
30
+ const replacement = typeof resultExpr === "object" && resultExpr !== null
31
+ ? JSON.stringify(resultExpr)
32
+ : resultExpr;
33
+ text = text.replace(fullMatch, prefix + replacement);
34
+ }
35
+ else {
36
+ break; // No more matches
37
+ }
38
+ }
39
+ return text;
28
40
  // ---
29
41
  function mapByType(extracted) {
30
42
  if (extracted === null) {
@@ -15,7 +15,6 @@ exports.SwitchMd = (0, metadata_helpers_1.createMetadata)({
15
15
  status: "stable",
16
16
  description: "`Switch` enables users to toggle between two states: on and off.",
17
17
  props: {
18
- indeterminate: (0, metadata_helpers_1.dIndeterminate)(Toggle_1.defaultProps.indeterminate),
19
18
  label: (0, metadata_helpers_1.dLabel)(),
20
19
  labelPosition: (0, metadata_helpers_1.dLabelPosition)("end"),
21
20
  labelWidth: (0, metadata_helpers_1.dLabelWidth)(COMP),
@@ -72,5 +71,5 @@ exports.SwitchMd = (0, metadata_helpers_1.createMetadata)({
72
71
  },
73
72
  });
74
73
  exports.switchComponentRenderer = (0, renderers_1.createComponentRenderer)(COMP, exports.SwitchMd, ({ node, extractValue, layoutCss, updateState, state, lookupEventHandler, registerComponentApi, }) => {
75
- return ((0, jsx_runtime_1.jsx)(Toggle_1.Toggle, { enabled: extractValue.asOptionalBoolean(node.props.enabled), style: layoutCss, initialValue: extractValue.asOptionalBoolean(node.props.initialValue, Toggle_1.defaultProps.initialValue), value: state === null || state === void 0 ? void 0 : state.value, readOnly: extractValue.asOptionalBoolean(node.props.readOnly), validationStatus: extractValue(node.props.validationStatus), updateState: updateState, onDidChange: lookupEventHandler("didChange"), onFocus: lookupEventHandler("gotFocus"), onBlur: lookupEventHandler("lostFocus"), label: extractValue(node.props.label), labelPosition: extractValue(node.props.labelPosition), labelWidth: extractValue(node.props.labelWidth), labelBreak: extractValue.asOptionalBoolean(node.props.labelBreak), required: extractValue.asOptionalBoolean(node.props.required), variant: "switch", registerComponentApi: registerComponentApi }));
74
+ return ((0, jsx_runtime_1.jsx)(Toggle_1.Toggle, { enabled: extractValue.asOptionalBoolean(node.props.enabled), style: layoutCss, initialValue: extractValue.asOptionalBoolean(node.props.initialValue, Toggle_1.defaultProps.initialValue), value: state === null || state === void 0 ? void 0 : state.value, readOnly: extractValue.asOptionalBoolean(node.props.readOnly), validationStatus: extractValue(node.props.validationStatus), updateState: updateState, autoFocus: extractValue.asOptionalBoolean(node.props.autoFocus), onDidChange: lookupEventHandler("didChange"), onFocus: lookupEventHandler("gotFocus"), onBlur: lookupEventHandler("lostFocus"), label: extractValue(node.props.label), labelPosition: extractValue(node.props.labelPosition), labelWidth: extractValue(node.props.labelWidth), labelBreak: extractValue.asOptionalBoolean(node.props.labelBreak), required: extractValue.asOptionalBoolean(node.props.required), variant: "switch", registerComponentApi: registerComponentApi }));
76
75
  });
@@ -26,6 +26,9 @@ var ErrCodes;
26
26
  ErrCodes["expTagNameAfterNamespace"] = "U014";
27
27
  ErrCodes["expCloseStartWithName"] = "U015";
28
28
  ErrCodes["expAttrNameAfterNamespace"] = "U016";
29
+ ErrCodes["unexpectedCloseTag"] = "U017";
30
+ ErrCodes["expTagNameAfterCloseStart"] = "U019";
31
+ ErrCodes["expAttrNameBeforeEq"] = "U020";
29
32
  ErrCodes["invalidChar"] = "W001";
30
33
  ErrCodes["untermStr"] = "W002";
31
34
  ErrCodes["untermComment"] = "W007";
@@ -33,6 +36,11 @@ var ErrCodes;
33
36
  ErrCodes["untermScript"] = "W009";
34
37
  })(ErrCodes || (exports.ErrCodes = ErrCodes = {}));
35
38
  exports.DIAGS = {
39
+ unexpectedCloseTag: {
40
+ category: DiagnosticCategory.Error,
41
+ code: ErrCodes.unexpectedCloseTag,
42
+ message: "Read '</', but there's no opening tag to close. You have too many closing tags.",
43
+ },
36
44
  expCloseStartWithName: function (openTagName) {
37
45
  return {
38
46
  category: DiagnosticCategory.Error,
@@ -108,16 +116,30 @@ exports.DIAGS = {
108
116
  code: ErrCodes.expAttrName,
109
117
  message: `An attribute name expected.`,
110
118
  },
111
- expAttrNameAfterNamespace: {
119
+ expAttrNameAfterNamespace: function (namespaceName) {
120
+ return {
121
+ category: DiagnosticCategory.Error,
122
+ code: ErrCodes.expAttrNameAfterNamespace,
123
+ message: `An attribute name expected after namespace '${namespaceName}'.`,
124
+ };
125
+ },
126
+ expTagNameAfterNamespace: function (namespaceName) {
127
+ return {
128
+ category: DiagnosticCategory.Error,
129
+ code: ErrCodes.expTagNameAfterNamespace,
130
+ message: `A tag name expected after namespace '${namespaceName}'.`,
131
+ };
132
+ },
133
+ expTagNameAfterCloseStart: {
112
134
  category: DiagnosticCategory.Error,
113
- code: ErrCodes.expAttrNameAfterNamespace,
114
- message: `An attribute name expected after a namespaces.`,
135
+ code: ErrCodes.expTagNameAfterCloseStart,
136
+ message: "Expected tag name after '</'.",
115
137
  },
116
- expTagNameAfterNamespace: {
138
+ expAttrNameBeforeEq: {
117
139
  category: DiagnosticCategory.Error,
118
- code: ErrCodes.expTagNameAfterNamespace,
119
- message: `A tag name expected after a namespaces.`,
120
- }
140
+ code: ErrCodes.expAttrNameBeforeEq,
141
+ message: "Expected attribute name before '='.",
142
+ },
121
143
  };
122
144
  function diagnosticCategoryName(d, lowerCase = true) {
123
145
  const name = DiagnosticCategory[d.category];
@@ -73,7 +73,7 @@ function parseXmlUiMarkup(text) {
73
73
  break;
74
74
  default:
75
75
  const errNode = errNodeUntil(RECOVER_FILE);
76
- errorAt(diagnostics_1.DIAGS.expTagOpen, errNode.pos, errNode.end);
76
+ errorAt(diagnostics_1.DIAGS.unexpectedCloseTag, errNode.pos, errNode.end);
77
77
  break;
78
78
  }
79
79
  }
@@ -152,10 +152,11 @@ function parseXmlUiMarkup(text) {
152
152
  }
153
153
  function parseOpeningTagName() {
154
154
  startNode();
155
- bump(syntax_kind_1.SyntaxKind.Identifier);
155
+ const identNode = bump(syntax_kind_1.SyntaxKind.Identifier);
156
156
  if (eat(syntax_kind_1.SyntaxKind.Colon) && !eat(syntax_kind_1.SyntaxKind.Identifier)) {
157
157
  const nameNodeWithColon = completeNode(syntax_kind_1.SyntaxKind.TagNameNode);
158
- errorAt(diagnostics_1.DIAGS.expTagNameAfterNamespace, nameNodeWithColon.pos, nameNodeWithColon.end);
158
+ const namespaceName = getText(identNode);
159
+ errorAt(diagnostics_1.DIAGS.expTagNameAfterNamespace(namespaceName), nameNodeWithColon.pos, nameNodeWithColon.end);
159
160
  errNodeUntil([syntax_kind_1.SyntaxKind.Identifier, ...RECOVER_OPEN_TAG]);
160
161
  return { node: nameNodeWithColon, errInName: true };
161
162
  }
@@ -196,7 +197,12 @@ function parseXmlUiMarkup(text) {
196
197
  else {
197
198
  const errNode = errNodeUntil(RECOVER_ATTR);
198
199
  if (errNode) {
199
- errorAt(diagnostics_1.DIAGS.expAttrName, errNode.pos, errNode.end);
200
+ if (at(syntax_kind_1.SyntaxKind.Equal)) {
201
+ errorAt(diagnostics_1.DIAGS.expAttrNameBeforeEq, errNode.pos, errNode.end);
202
+ }
203
+ else {
204
+ errorAt(diagnostics_1.DIAGS.expAttrName, errNode.pos, errNode.end);
205
+ }
200
206
  completeNode(syntax_kind_1.SyntaxKind.AttributeNode);
201
207
  }
202
208
  else {
@@ -229,16 +235,17 @@ function parseXmlUiMarkup(text) {
229
235
  nameIdent = bump(syntax_kind_1.SyntaxKind.Identifier);
230
236
  }
231
237
  else {
238
+ const namespaceName = getText(nameIdent);
232
239
  const errNode = errNodeUntil([
233
240
  syntax_kind_1.SyntaxKind.Equal,
234
241
  syntax_kind_1.SyntaxKind.Identifier,
235
242
  ...RECOVER_OPEN_TAG,
236
243
  ]);
237
244
  if (errNode) {
238
- errorAt(diagnostics_1.DIAGS.expAttrNameAfterNamespace, errNode.pos, errNode.end);
245
+ errorAt(diagnostics_1.DIAGS.expAttrNameAfterNamespace(namespaceName), errNode.pos, errNode.end);
239
246
  }
240
247
  else {
241
- error(diagnostics_1.DIAGS.expAttrNameAfterNamespace);
248
+ error(diagnostics_1.DIAGS.expAttrNameAfterNamespace(namespaceName));
242
249
  }
243
250
  }
244
251
  }
@@ -261,10 +268,10 @@ function parseXmlUiMarkup(text) {
261
268
  else {
262
269
  const errNode = errNodeUntil(RECOVER_CLOSE_TAG);
263
270
  if (errNode) {
264
- errorAt(diagnostics_1.DIAGS.expTagName, errNode.pos, errNode.end);
271
+ errorAt(diagnostics_1.DIAGS.expTagNameAfterCloseStart, errNode.pos, errNode.end);
265
272
  }
266
273
  else {
267
- error(diagnostics_1.DIAGS.expTagName);
274
+ error(diagnostics_1.DIAGS.expTagNameAfterCloseStart);
268
275
  }
269
276
  }
270
277
  if (!eat(syntax_kind_1.SyntaxKind.NodeEnd)) {
@@ -282,10 +289,10 @@ function parseXmlUiMarkup(text) {
282
289
  }
283
290
  function parseClosingTagName() {
284
291
  startNode();
285
- bump(syntax_kind_1.SyntaxKind.Identifier);
292
+ const identNode = bump(syntax_kind_1.SyntaxKind.Identifier);
286
293
  if (eat(syntax_kind_1.SyntaxKind.Colon) && !eat(syntax_kind_1.SyntaxKind.Identifier)) {
287
294
  const nameNodeWithColon = completeNode(syntax_kind_1.SyntaxKind.TagNameNode);
288
- errorAt(diagnostics_1.DIAGS.expTagNameAfterNamespace, nameNodeWithColon.pos, nameNodeWithColon.end);
295
+ errorAt(diagnostics_1.DIAGS.expTagNameAfterNamespace(getText(identNode)), nameNodeWithColon.pos, nameNodeWithColon.end);
289
296
  errNodeUntil(RECOVER_OPEN_TAG);
290
297
  return nameNodeWithColon;
291
298
  }
@@ -621,6 +621,9 @@ declare enum ErrCodes {
621
621
  expTagNameAfterNamespace = "U014",
622
622
  expCloseStartWithName = "U015",
623
623
  expAttrNameAfterNamespace = "U016",
624
+ unexpectedCloseTag = "U017",
625
+ expTagNameAfterCloseStart = "U019",
626
+ expAttrNameBeforeEq = "U020",
624
627
  invalidChar = "W001",
625
628
  untermStr = "W002",
626
629
  untermComment = "W007",