ember-inspector 4.11.0-alpha.2024.3.9 → 4.11.0-alpha.2024.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. package/app/components/component-tree-arg.js +9 -0
  2. package/app/components/component-tree-item.hbs +18 -2
  3. package/app/components/object-inspector/properties-all.hbs +1 -0
  4. package/app/components/object-inspector/properties-base.js +10 -0
  5. package/app/components/object-inspector/properties-grouped.hbs +1 -0
  6. package/app/components/object-inspector/property.hbs +12 -1
  7. package/app/components/object-inspector/property.ts +4 -2
  8. package/app/components/object-inspector.hbs +16 -2
  9. package/app/components/object-inspector.js +14 -0
  10. package/app/controllers/component-tree.js +54 -3
  11. package/app/routes/component-tree.js +0 -6
  12. package/app/services/adapters/web-extension.js +3 -3
  13. package/app/services/port.js +4 -0
  14. package/app/styles/component_tree.scss +13 -0
  15. package/app/utils/parse-text.ts +1 -0
  16. package/dist/bookmarklet/panes-3-16-0/assets/{chunk.143.ac621af5331b75527946.js → chunk.143.9f3a22b07387ec438672.js} +4 -4
  17. package/dist/{firefox/panes-3-16-0/assets/chunk.178.e6b2f8bb19b9f072aa49.js → bookmarklet/panes-3-16-0/assets/chunk.178.4fe3df60bd7ba157b035.js} +3 -3
  18. package/dist/bookmarklet/panes-3-16-0/assets/ember-inspector.css +13 -0
  19. package/dist/bookmarklet/panes-3-16-0/assets/ember-inspector.js +27 -23
  20. package/dist/bookmarklet/panes-3-16-0/assets/svg/code-source.svg +9 -0
  21. package/dist/bookmarklet/panes-3-16-0/assets/vendor.css +33 -0
  22. package/dist/bookmarklet/panes-3-16-0/assets/vendor.js +12 -10
  23. package/dist/bookmarklet/panes-3-16-0/ember_debug.js +408 -538
  24. package/dist/bookmarklet/panes-3-16-0/index.html +2 -2
  25. package/dist/chrome/manifest.json +2 -2
  26. package/dist/{firefox/panes-3-16-0/assets/chunk.143.ac621af5331b75527946.js → chrome/panes-3-16-0/assets/chunk.143.9f3a22b07387ec438672.js} +4 -4
  27. package/dist/{bookmarklet/panes-3-16-0/assets/chunk.178.e6b2f8bb19b9f072aa49.js → chrome/panes-3-16-0/assets/chunk.178.4fe3df60bd7ba157b035.js} +3 -3
  28. package/dist/chrome/panes-3-16-0/assets/ember-inspector.css +13 -0
  29. package/dist/chrome/panes-3-16-0/assets/ember-inspector.js +27 -23
  30. package/dist/chrome/panes-3-16-0/assets/svg/code-source.svg +9 -0
  31. package/dist/chrome/panes-3-16-0/assets/vendor.css +33 -0
  32. package/dist/chrome/panes-3-16-0/assets/vendor.js +12 -10
  33. package/dist/chrome/panes-3-16-0/ember_debug.js +408 -538
  34. package/dist/chrome/panes-3-16-0/index.html +2 -2
  35. package/dist/firefox/manifest.json +2 -2
  36. package/dist/{chrome/panes-3-16-0/assets/chunk.143.ac621af5331b75527946.js → firefox/panes-3-16-0/assets/chunk.143.9f3a22b07387ec438672.js} +4 -4
  37. package/dist/{websocket/assets/chunk.178.e6b2f8bb19b9f072aa49.js → firefox/panes-3-16-0/assets/chunk.178.4fe3df60bd7ba157b035.js} +3 -3
  38. package/dist/firefox/panes-3-16-0/assets/ember-inspector.css +13 -0
  39. package/dist/firefox/panes-3-16-0/assets/ember-inspector.js +27 -23
  40. package/dist/firefox/panes-3-16-0/assets/svg/code-source.svg +9 -0
  41. package/dist/firefox/panes-3-16-0/assets/vendor.css +33 -0
  42. package/dist/firefox/panes-3-16-0/assets/vendor.js +12 -10
  43. package/dist/firefox/panes-3-16-0/ember_debug.js +408 -538
  44. package/dist/firefox/panes-3-16-0/index.html +2 -2
  45. package/dist/websocket/assets/{chunk.143.ac621af5331b75527946.js → chunk.143.9f3a22b07387ec438672.js} +4 -4
  46. package/dist/{chrome/panes-3-16-0/assets/chunk.178.e6b2f8bb19b9f072aa49.js → websocket/assets/chunk.178.4fe3df60bd7ba157b035.js} +3 -3
  47. package/dist/websocket/assets/ember-inspector.css +13 -0
  48. package/dist/websocket/assets/ember-inspector.js +27 -23
  49. package/dist/websocket/assets/svg/code-source.svg +9 -0
  50. package/dist/websocket/assets/vendor.css +33 -0
  51. package/dist/websocket/assets/vendor.js +12 -10
  52. package/dist/websocket/ember_debug.js +408 -538
  53. package/dist/websocket/index.html +2 -2
  54. package/ember-cli-build.js +3 -4
  55. package/ember_debug/adapters/basic.js +4 -4
  56. package/ember_debug/adapters/web-extension.js +9 -5
  57. package/ember_debug/general-debug.js +3 -1
  58. package/ember_debug/libs/capture-render-tree.js +7 -426
  59. package/ember_debug/libs/render-tree.js +210 -31
  60. package/ember_debug/libs/view-inspection.js +28 -0
  61. package/ember_debug/object-inspector.js +49 -88
  62. package/ember_debug/route-debug.js +2 -3
  63. package/ember_debug/utils/ember.js +16 -0
  64. package/ember_debug/utils/get-object-name.js +4 -0
  65. package/ember_debug/utils/name-functions.js +1 -1
  66. package/ember_debug/utils/type-check.js +82 -12
  67. package/ember_debug/utils/version.js +37 -0
  68. package/ember_debug/view-debug.js +1 -1
  69. package/lib/ui/addon/styles/_goto-source.scss +30 -0
  70. package/lib/ui/addon/styles/addon.scss +1 -0
  71. package/lib/ui/addon/styles/toolbar/_index.scss +4 -0
  72. package/package.json +1 -1
  73. package/public/assets/svg/code-source.svg +9 -0
  74. package/skeletons/web-extension/manifest.json +2 -2
  75. package/tests/acceptance/object-inspector-test.js +68 -0
  76. package/tests/ember_debug/view-debug-test.js +211 -69
  77. package/tests/index.html +1 -0
@@ -12,6 +12,15 @@ export default class ComponentTreeArg extends Component {
12
12
 
13
13
  get displayValue() {
14
14
  if (this.isObject) {
15
+ if (this.args.value.inspect) {
16
+ if (this.args.value.type === 'function') {
17
+ return this.args.value.inspect
18
+ .replace(/"/g, '\\"')
19
+ .replace('bound ', '')
20
+ .replace('{ ... }', '');
21
+ }
22
+ return truncate(this.args.value.inspect.replace(/"/g, '\\"'));
23
+ }
15
24
  return '...';
16
25
  } else if (typeof this.args.value === 'string') {
17
26
  // Escape any interior quotes – we will add the surrounding quotes in the template
@@ -23,8 +23,10 @@
23
23
 
24
24
  <code
25
25
  class="component-tree-item__tag flex whitespace-no-wrap
26
+ {{if @item.isClosingTag 'component-tree-item__closing'}}
27
+ {{if @item.hasModifiers 'component-tree-item__has_modifier'}}
26
28
  {{if
27
- @item.isComponent
29
+ (or @item.isComponent @item.isModifier @item.isHtmlTag)
28
30
  (if
29
31
  @item.isCurlyInvocation
30
32
  "component-tree-item-classic__bracket"
@@ -37,7 +39,7 @@
37
39
  }}"
38
40
  >
39
41
  {{!-- template-lint-disable no-unbalanced-curlies --}}
40
- {{#if @item.isComponent}}
42
+ {{#if (or @item.isComponent @item.isModifier)}}
41
43
  {{#if @item.isCurlyInvocation}}
42
44
  <span class="component-name">
43
45
  {{@item.name}}
@@ -83,6 +85,20 @@
83
85
  \{{mount "{{@item.name}}"}}
84
86
  {{else if @item.isRouteTemplate}}
85
87
  {{@item.name}} route
88
+ {{else if @item.isHtmlTag}}
89
+ <span class="component-name">
90
+ {{@item.name}}
91
+ </span>
92
+ {{#each-in @item.args.named as |name value|}}
93
+ <div class="arg-token flex ml-2">
94
+ <span class="key-token">
95
+ {{name}}
96
+ </span>
97
+ ={{if (is-string value) "\""}}
98
+ <ComponentTreeArg @value={{value}} />
99
+ {{if (is-string value) "\""}}
100
+ </div>
101
+ {{/each-in}}
86
102
  {{/if}}
87
103
  </code>
88
104
  </div>
@@ -11,6 +11,7 @@
11
11
  @model={{prop}}
12
12
  @saveProperty={{this.saveProperty}}
13
13
  @sendToConsole={{fn this.sendToConsole prop}}
14
+ @gotoSource={{fn this.gotoSource prop}}
14
15
  />
15
16
  {{/each}}
16
17
  </ObjectInspector::SortProperties>
@@ -15,6 +15,16 @@ export default class PropertiesBase extends Component {
15
15
  this.port.send('objectInspector:sendToConsole', data);
16
16
  }
17
17
 
18
+ @action gotoSource({ name }) {
19
+ const data = {
20
+ objectId: this.args.model.objectId,
21
+ };
22
+ if (name !== '...') {
23
+ data.property = name;
24
+ }
25
+ this.port.send('objectInspector:gotoSource', data);
26
+ }
27
+
18
28
  @action digDeeper({ name }) {
19
29
  this.port.send('objectInspector:digDeeper', {
20
30
  objectId: this.args.model.objectId,
@@ -33,6 +33,7 @@
33
33
  @digDeeper={{fn this.digDeeper prop}}
34
34
  @saveProperty={{this.saveProperty}}
35
35
  @sendToConsole={{fn this.sendToConsole prop}}
36
+ @gotoSource={{fn this.gotoSource prop}}
36
37
  />
37
38
  {{else}}
38
39
  <li class="mixin__property flex relative flex-row items-center truncate">No Properties</li>
@@ -119,12 +119,23 @@
119
119
  <button
120
120
  data-test-send-to-console-btn
121
121
  class="mixin__send-btn flex-shrink-0 send-to-console"
122
- title="Send to console"
122
+ title="Send To Console"
123
123
  type="button"
124
124
  {{on "click" @sendToConsole}}
125
125
  >
126
126
  {{svg-jar "send-with-text" width="20px" height="10px"}}
127
127
  </button>
128
+ {{#if this.isFunction}}
129
+ <button
130
+ data-test-goto-source-btn
131
+ class="mixin__send-btn flex-shrink-0 goto-source"
132
+ title="Goto Source"
133
+ type="button"
134
+ {{on "click" @gotoSource}}
135
+ >
136
+ {{svg-jar "code-source" width="20px" height="10px"}}
137
+ </button>
138
+ {{/if}}
128
139
  </li>
129
140
 
130
141
  {{#if this.showDependentKeys}}
@@ -8,6 +8,8 @@ import parseText from 'ember-inspector/utils/parse-text';
8
8
  interface ObjectInspectorPropertyArgs {
9
9
  model: any;
10
10
  digDeeper: () => unknown;
11
+ gotoSource: () => void;
12
+ sendToConsole: () => void;
11
13
  saveProperty: (
12
14
  property: unknown,
13
15
  value: unknown,
@@ -119,8 +121,8 @@ export default class ObjectInspectorProperty extends Component<ObjectInspectorPr
119
121
  }
120
122
 
121
123
  get cannotEdit() {
122
- if (this.args.model.name === '...' || !this.isCalculated) return true;
123
- return this.isFunction || this.isOverridden || this.readOnly;
124
+ if (this.args.model.name === '...' || !this.isCalculated || this.readOnly) return true;
125
+ return this.args.model?.value?.type !== 'type-string' && this.args.model?.value?.type !== 'type-number';
124
126
  }
125
127
 
126
128
  @action
@@ -21,11 +21,25 @@
21
21
  type="button"
22
22
  {{on
23
23
  "click"
24
- (fn this.sendObjectToConsole (get @model (sub @model.length 1)))
24
+ (fn this.sendObjectToConsole this.current)
25
25
  }}
26
26
  >
27
27
  {{svg-jar "send-with-text" width="20px" height="10px"}}
28
28
  </button>
29
+ {{#if this.isClass}}
30
+ <button
31
+ data-test-goto-class-source-btn
32
+ class="goto-source"
33
+ title="Goto Source"
34
+ type="button"
35
+ {{on
36
+ "click"
37
+ (fn this.gotoSource this.current)
38
+ }}
39
+ >
40
+ {{svg-jar "code-source" width="20px" height="10px"}}
41
+ </button>
42
+ {{/if}}
29
43
  </div>
30
44
 
31
45
  {{#if this.trail}}
@@ -103,4 +117,4 @@
103
117
  No object selected
104
118
  </Ui::EmptyMessage>
105
119
  </div>
106
- {{/if}}
120
+ {{/if}}
@@ -14,6 +14,13 @@ export default class ObjectInspector extends Component {
14
14
  this.searchInputId = 'custom-filter-input';
15
15
  }
16
16
 
17
+ get isClass() {
18
+ return this.current.mixins.length > 1;
19
+ }
20
+
21
+ get current() {
22
+ return this.args.model[this.args.model.length - 1];
23
+ }
17
24
  get trail() {
18
25
  let nested = this.args.model.slice(1);
19
26
  if (nested.length === 0) {
@@ -55,6 +62,13 @@ export default class ObjectInspector extends Component {
55
62
  });
56
63
  }
57
64
 
65
+ @action gotoSource(obj) {
66
+ let objectId = obj.objectId;
67
+ this.port.send('objectInspector:gotoSource', {
68
+ objectId,
69
+ });
70
+ }
71
+
58
72
  @action popStack() {
59
73
  if (this.isNested) {
60
74
  this.args.popMixinDetails();
@@ -48,6 +48,21 @@ export default class ComponentTreeController extends Controller {
48
48
 
49
49
  renderItems.push(item);
50
50
 
51
+ if (
52
+ item.isHtmlTag &&
53
+ renderNode.children.some((c) => c.type === 'modifier')
54
+ ) {
55
+ const idx = renderNode.children.findLastIndex(
56
+ (c) => c.type === 'modifier'
57
+ );
58
+ renderNode.children.splice(idx + 1, 0, {
59
+ type: 'placeholder-closing-tag',
60
+ id: renderNode.id + '-closing-tag',
61
+ name: '',
62
+ children: [],
63
+ });
64
+ }
65
+
51
66
  renderNode.children.forEach((node) => flatten(item, node));
52
67
  }
53
68
  };
@@ -301,7 +316,32 @@ class RenderItem {
301
316
  }
302
317
 
303
318
  get isComponent() {
304
- return this.renderNode.type === 'component';
319
+ return (
320
+ this.renderNode.type === 'component' ||
321
+ this.renderNode.type === 'remote-element'
322
+ );
323
+ }
324
+
325
+ get isModifier() {
326
+ return this.renderNode.type === 'modifier';
327
+ }
328
+
329
+ get hasModifiers() {
330
+ return this.childItems.some((item) => item.isModifier);
331
+ }
332
+
333
+ get isLastModifier() {
334
+ return (
335
+ this.parentItem.childItems.findLast((item) => item.isModifier) === this
336
+ );
337
+ }
338
+
339
+ get isHtmlTag() {
340
+ return this.renderNode.type === 'html-element';
341
+ }
342
+
343
+ get isClosingTag() {
344
+ return this.renderNode.type === 'placeholder-closing-tag';
305
345
  }
306
346
 
307
347
  get name() {
@@ -313,12 +353,15 @@ class RenderItem {
313
353
  }
314
354
 
315
355
  get isCurlyInvocation() {
356
+ if (this.isModifier) {
357
+ return true;
358
+ }
316
359
  return this.renderNode.args && this.renderNode.args.positional;
317
360
  }
318
361
 
319
362
  get hasInstance() {
320
363
  let { instance } = this.renderNode;
321
- return typeof instance === 'object' && instance !== null;
364
+ return typeof instance === 'object' && instance;
322
365
  }
323
366
 
324
367
  get instance() {
@@ -330,7 +373,7 @@ class RenderItem {
330
373
  }
331
374
 
332
375
  get hasBounds() {
333
- return this.renderNode.bounds !== null;
376
+ return this.renderNode.bounds;
334
377
  }
335
378
 
336
379
  get isRoot() {
@@ -400,6 +443,7 @@ class RenderItem {
400
443
  }
401
444
 
402
445
  @action showPreview() {
446
+ if (this.isClosingTag) return;
403
447
  this.controller.previewing = this.id;
404
448
  }
405
449
 
@@ -410,6 +454,7 @@ class RenderItem {
410
454
  }
411
455
 
412
456
  @action toggleInspection() {
457
+ if (this.isClosingTag) return;
413
458
  if (this.isPinned) {
414
459
  this.controller.pinned = undefined;
415
460
  } else {
@@ -439,6 +484,12 @@ class RenderItem {
439
484
  this.send('view:inspectElement', { id: this.id });
440
485
  }
441
486
 
487
+ @action inspectValue(event) {
488
+ event.stopPropagation();
489
+
490
+ this.send('view:inspectValue', { id: this.id });
491
+ }
492
+
442
493
  show() {
443
494
  let item = this.parentItem;
444
495
 
@@ -31,7 +31,6 @@ export default class ComponentTreeRoute extends TabRoute {
31
31
  this.port.on('view:cancelSelection', this, this.cancelSelection);
32
32
  this.port.on('view:startInspecting', this, this.startInspecting);
33
33
  this.port.on('view:stopInspecting', this, this.stopInspecting);
34
- this.port.on('view:inspectDOMNode', this, this.inspectDOMNode);
35
34
  }
36
35
 
37
36
  deactivate() {
@@ -41,7 +40,6 @@ export default class ComponentTreeRoute extends TabRoute {
41
40
  this.port.off('view:cancelSelection', this, this.cancelSelection);
42
41
  this.port.off('view:startInspecting', this, this.startInspecting);
43
42
  this.port.off('view:stopInspecting', this, this.stopInspecting);
44
- this.port.off('view:inspectDOMNode', this, this.inspectDOMNode);
45
43
  }
46
44
 
47
45
  setRenderTree({ tree }) {
@@ -59,8 +57,4 @@ export default class ComponentTreeRoute extends TabRoute {
59
57
  stopInspecting() {
60
58
  this.controller.isInspecting = false;
61
59
  }
62
-
63
- inspectDOMNode({ name }) {
64
- this.port.adapter.inspectDOMNode(name);
65
- }
66
60
  }
@@ -107,12 +107,12 @@ export default class WebExtension extends BasicAdapter {
107
107
  }
108
108
 
109
109
  /**
110
- * Open the devtools "Elements" tab and select a specific DOM node.
110
+ * Open the devtools "Elements" or "Sources" tab and select a specific DOM node or function.
111
111
  *
112
- * @method inspectDOMNode
112
+ * @method inspectJSValue
113
113
  * @param {String} name
114
114
  */
115
- inspectDOMNode(name) {
115
+ inspectJSValue(name) {
116
116
  chrome.devtools.inspectedWindow.eval(`
117
117
  inspect(window[${JSON.stringify(name)}]);
118
118
  delete window[${JSON.stringify(name)}];
@@ -49,6 +49,10 @@ export default class PortService extends Service.extend(Evented) {
49
49
  this.trigger(message.type, message, applicationId);
50
50
  }
51
51
  });
52
+
53
+ this.on('view:inspectJSValue', this, ({ name }) =>
54
+ this.adapter.inspectJSValue(name)
55
+ );
52
56
  }
53
57
 
54
58
  selectApplication(applicationId) {
@@ -141,6 +141,19 @@
141
141
  color: var(--base09);
142
142
  }
143
143
 
144
+ .component-tree-item__has_modifier:after {
145
+ content: '' !important;
146
+ }
147
+
148
+ .component-tree-item__closing:before {
149
+ content: '>';
150
+ margin-left: -13px;
151
+ }
152
+
153
+ .component-tree-item__self-closing:before {
154
+ content: '/>';
155
+ }
156
+
144
157
  .component-tree-item__bracket:before {
145
158
  content: '<';
146
159
  }
@@ -18,3 +18,4 @@ export default function parseText(value: string): string {
18
18
  }
19
19
  return parsedValue;
20
20
  }
21
+
@@ -5,8 +5,8 @@ e.exports=require("@ember/debug")},7219:e=>{"use strict"
5
5
  e.exports=require("@ember/object")},5550:e=>{"use strict"
6
6
  e.exports=require("@ember/test-helpers")},5521:e=>{"use strict"
7
7
  e.exports=require("@glimmer/tracking")},6173:e=>{"use strict"
8
- e.exports=require("@glimmer/tracking/primitives/cache")},3932:()=>{},6660:(e,r,n)=>{var t,o
9
- e.exports=(t=_eai_d,o=_eai_r,window.emberAutoImportDynamic=function(e){return 1===arguments.length?o("_eai_dyn_"+e):o("_eai_dynt_"+e)(Array.prototype.slice.call(arguments,1))},window.emberAutoImportSync=function(e){return o("_eai_sync_"+e)(Array.prototype.slice.call(arguments,1))},t("ember-cli-page-object",["@ember/test-helpers"],(function(){return n(1457)})),t("ember-cli-page-object/extend",["@ember/test-helpers"],(function(){return n(3342)})),t("ember-cli-page-object/macros",[],(function(){return n(3428)})),t("ember-math-helpers/helpers/abs",["@ember/component/helper"],(function(){return n(9041)})),t("ember-math-helpers/helpers/acos",["@ember/component/helper"],(function(){return n(9748)})),t("ember-math-helpers/helpers/acosh",["@ember/component/helper"],(function(){return n(4838)})),t("ember-math-helpers/helpers/add",["@ember/component/helper"],(function(){return n(6181)})),t("ember-math-helpers/helpers/asin",["@ember/component/helper"],(function(){return n(364)})),t("ember-math-helpers/helpers/asinh",["@ember/component/helper"],(function(){return n(8471)})),t("ember-math-helpers/helpers/atan",["@ember/component/helper"],(function(){return n(25)})),t("ember-math-helpers/helpers/atan2",["@ember/component/helper"],(function(){return n(2512)})),t("ember-math-helpers/helpers/atanh",["@ember/component/helper"],(function(){return n(9101)})),t("ember-math-helpers/helpers/cbrt",["@ember/component/helper"],(function(){return n(1473)})),t("ember-math-helpers/helpers/ceil",["@ember/component/helper"],(function(){return n(627)})),t("ember-math-helpers/helpers/clz32",["@ember/component/helper"],(function(){return n(1025)})),t("ember-math-helpers/helpers/cos",["@ember/component/helper"],(function(){return n(1346)})),t("ember-math-helpers/helpers/cosh",["@ember/component/helper"],(function(){return n(9964)})),t("ember-math-helpers/helpers/div",["@ember/component/helper"],(function(){return n(3014)})),t("ember-math-helpers/helpers/exp",["@ember/component/helper"],(function(){return n(3343)})),t("ember-math-helpers/helpers/expm1",["@ember/component/helper"],(function(){return n(6078)})),t("ember-math-helpers/helpers/floor",["@ember/component/helper"],(function(){return n(2777)})),t("ember-math-helpers/helpers/fround",["@ember/component/helper"],(function(){return n(2923)})),t("ember-math-helpers/helpers/gcd",["@ember/component/helper"],(function(){return n(5179)})),t("ember-math-helpers/helpers/hypot",["@ember/component/helper"],(function(){return n(7132)})),t("ember-math-helpers/helpers/imul",["@ember/component/helper"],(function(){return n(3587)})),t("ember-math-helpers/helpers/lcm",["@ember/component/helper"],(function(){return n(4913)})),t("ember-math-helpers/helpers/log-e",["@ember/component/helper"],(function(){return n(7506)})),t("ember-math-helpers/helpers/log10",["@ember/component/helper"],(function(){return n(1508)})),t("ember-math-helpers/helpers/log1p",["@ember/component/helper"],(function(){return n(5379)})),t("ember-math-helpers/helpers/log2",["@ember/component/helper"],(function(){return n(1467)})),t("ember-math-helpers/helpers/max",["@ember/component/helper"],(function(){return n(1957)})),t("ember-math-helpers/helpers/min",["@ember/component/helper"],(function(){return n(6442)})),t("ember-math-helpers/helpers/mod",["@ember/component/helper"],(function(){return n(1648)})),t("ember-math-helpers/helpers/mult",["@ember/component/helper"],(function(){return n(3645)})),t("ember-math-helpers/helpers/pow",["@ember/component/helper"],(function(){return n(2300)})),t("ember-math-helpers/helpers/random",["@ember/array","@ember/component/helper"],(function(){return n(2642)})),t("ember-math-helpers/helpers/round",["@ember/component/helper"],(function(){return n(3354)})),t("ember-math-helpers/helpers/sign",["@ember/component/helper"],(function(){return n(7181)})),t("ember-math-helpers/helpers/sin",["@ember/component/helper"],(function(){return n(5348)})),t("ember-math-helpers/helpers/sqrt",["@ember/component/helper"],(function(){return n(227)})),t("ember-math-helpers/helpers/sub",["@ember/component/helper"],(function(){return n(3335)})),t("ember-math-helpers/helpers/sum",["@ember/component/helper"],(function(){return n(6316)})),t("ember-math-helpers/helpers/tan",["@ember/component/helper"],(function(){return n(9943)})),t("ember-math-helpers/helpers/tanh",["@ember/component/helper"],(function(){return n(5539)})),t("ember-math-helpers/helpers/trunc",["@ember/component/helper"],(function(){return n(8879)})),t("qunit",[],(function(){return n(3211)})),t("sinon",[],(function(){return n(8739)})),void t("tracked-toolbox",["@ember/debug","@ember/object","@glimmer/tracking","@glimmer/tracking/primitives/cache"],(function(){return n(1475)})))},733:function(e,r){window._eai_r=require,window._eai_d=define}},n={}
8
+ e.exports=require("@glimmer/tracking/primitives/cache")},3932:()=>{},6846:(e,r,n)=>{var t,o
9
+ e.exports=(t=_eai_d,o=_eai_r,window.emberAutoImportDynamic=function(e){return 1===arguments.length?o("_eai_dyn_"+e):o("_eai_dynt_"+e)(Array.prototype.slice.call(arguments,1))},window.emberAutoImportSync=function(e){return o("_eai_sync_"+e)(Array.prototype.slice.call(arguments,1))},t("ember-cli-page-object",["@ember/test-helpers"],(function(){return n(1457)})),t("ember-cli-page-object/extend",["@ember/test-helpers"],(function(){return n(3342)})),t("ember-cli-page-object/macros",[],(function(){return n(3428)})),t("ember-math-helpers/helpers/abs",["@ember/component/helper"],(function(){return n(9041)})),t("ember-math-helpers/helpers/acos",["@ember/component/helper"],(function(){return n(9748)})),t("ember-math-helpers/helpers/acosh",["@ember/component/helper"],(function(){return n(4838)})),t("ember-math-helpers/helpers/add",["@ember/component/helper"],(function(){return n(6181)})),t("ember-math-helpers/helpers/asin",["@ember/component/helper"],(function(){return n(364)})),t("ember-math-helpers/helpers/asinh",["@ember/component/helper"],(function(){return n(8471)})),t("ember-math-helpers/helpers/atan",["@ember/component/helper"],(function(){return n(25)})),t("ember-math-helpers/helpers/atan2",["@ember/component/helper"],(function(){return n(2512)})),t("ember-math-helpers/helpers/atanh",["@ember/component/helper"],(function(){return n(9101)})),t("ember-math-helpers/helpers/cbrt",["@ember/component/helper"],(function(){return n(1473)})),t("ember-math-helpers/helpers/ceil",["@ember/component/helper"],(function(){return n(627)})),t("ember-math-helpers/helpers/clz32",["@ember/component/helper"],(function(){return n(1025)})),t("ember-math-helpers/helpers/cos",["@ember/component/helper"],(function(){return n(1346)})),t("ember-math-helpers/helpers/cosh",["@ember/component/helper"],(function(){return n(9964)})),t("ember-math-helpers/helpers/div",["@ember/component/helper"],(function(){return n(3014)})),t("ember-math-helpers/helpers/exp",["@ember/component/helper"],(function(){return n(3343)})),t("ember-math-helpers/helpers/expm1",["@ember/component/helper"],(function(){return n(6078)})),t("ember-math-helpers/helpers/floor",["@ember/component/helper"],(function(){return n(2777)})),t("ember-math-helpers/helpers/fround",["@ember/component/helper"],(function(){return n(2923)})),t("ember-math-helpers/helpers/gcd",["@ember/component/helper"],(function(){return n(5179)})),t("ember-math-helpers/helpers/hypot",["@ember/component/helper"],(function(){return n(7132)})),t("ember-math-helpers/helpers/imul",["@ember/component/helper"],(function(){return n(3587)})),t("ember-math-helpers/helpers/lcm",["@ember/component/helper"],(function(){return n(4913)})),t("ember-math-helpers/helpers/log-e",["@ember/component/helper"],(function(){return n(7506)})),t("ember-math-helpers/helpers/log10",["@ember/component/helper"],(function(){return n(1508)})),t("ember-math-helpers/helpers/log1p",["@ember/component/helper"],(function(){return n(5379)})),t("ember-math-helpers/helpers/log2",["@ember/component/helper"],(function(){return n(1467)})),t("ember-math-helpers/helpers/max",["@ember/component/helper"],(function(){return n(1957)})),t("ember-math-helpers/helpers/min",["@ember/component/helper"],(function(){return n(6442)})),t("ember-math-helpers/helpers/mod",["@ember/component/helper"],(function(){return n(1648)})),t("ember-math-helpers/helpers/mult",["@ember/component/helper"],(function(){return n(3645)})),t("ember-math-helpers/helpers/pow",["@ember/component/helper"],(function(){return n(2300)})),t("ember-math-helpers/helpers/random",["@ember/array","@ember/component/helper"],(function(){return n(2642)})),t("ember-math-helpers/helpers/round",["@ember/component/helper"],(function(){return n(3354)})),t("ember-math-helpers/helpers/sign",["@ember/component/helper"],(function(){return n(7181)})),t("ember-math-helpers/helpers/sin",["@ember/component/helper"],(function(){return n(5348)})),t("ember-math-helpers/helpers/sqrt",["@ember/component/helper"],(function(){return n(227)})),t("ember-math-helpers/helpers/sub",["@ember/component/helper"],(function(){return n(3335)})),t("ember-math-helpers/helpers/sum",["@ember/component/helper"],(function(){return n(6316)})),t("ember-math-helpers/helpers/tan",["@ember/component/helper"],(function(){return n(9943)})),t("ember-math-helpers/helpers/tanh",["@ember/component/helper"],(function(){return n(5539)})),t("ember-math-helpers/helpers/trunc",["@ember/component/helper"],(function(){return n(8879)})),t("qunit",[],(function(){return n(3211)})),t("sinon",[],(function(){return n(8739)})),void t("tracked-toolbox",["@ember/debug","@ember/object","@glimmer/tracking","@glimmer/tracking/primitives/cache"],(function(){return n(1475)})))},7066:function(e,r){window._eai_r=require,window._eai_d=define}},n={}
10
10
  function t(e){var o=n[e]
11
11
  if(void 0!==o)return o.exports
12
12
  var m=n[e]={id:e,loaded:!1,exports:{}}
@@ -23,6 +23,6 @@ var r=(r,n)=>{var o,m,[p,h,l]=n,u=0
23
23
  if(p.some((r=>0!==e[r]))){for(o in h)t.o(h,o)&&(t.m[o]=h[o])
24
24
  if(l)var c=l(t)}for(r&&r(n);u<p.length;u++)m=p[u],t.o(e,m)&&e[m]&&e[m][0](),e[m]=0
25
25
  return t.O(c)},n=globalThis.webpackChunk_ember_auto_import_=globalThis.webpackChunk_ember_auto_import_||[]
26
- n.forEach(r.bind(null,0)),n.push=r.bind(null,n.push.bind(n))})(),t.O(void 0,[359],(()=>t(733)))
27
- var o=t.O(void 0,[359],(()=>t(6660)))
26
+ n.forEach(r.bind(null,0)),n.push=r.bind(null,n.push.bind(n))})(),t.O(void 0,[359],(()=>t(7066)))
27
+ var o=t.O(void 0,[359],(()=>t(6846)))
28
28
  o=t.O(o),__ember_auto_import__=o})()
@@ -1,9 +1,9 @@
1
- var __ember_auto_import__;(()=>{var r={733:function(r,e){window._eai_r=require,window._eai_d=define},2009:r=>{r.exports=function(){_eai_d
1
+ var __ember_auto_import__;(()=>{var r={7066:function(r,e){window._eai_r=require,window._eai_d=define},2802:r=>{r.exports=function(){_eai_d
2
2
  var r=_eai_r
3
3
  window.emberAutoImportDynamic=function(e){return 1===arguments.length?r("_eai_dyn_"+e):r("_eai_dynt_"+e)(Array.prototype.slice.call(arguments,1))},window.emberAutoImportSync=function(e){return r("_eai_sync_"+e)(Array.prototype.slice.call(arguments,1))}}()}},e={}
4
4
  function t(_){var o=e[_]
5
5
  if(void 0!==o)return o.exports
6
6
  var i=e[_]={exports:{}}
7
- return r[_].call(i.exports,i,i.exports,t),i.exports}t(733)
8
- var _=t(2009)
7
+ return r[_].call(i.exports,i,i.exports,t),i.exports}t(7066)
8
+ var _=t(2802)
9
9
  __ember_auto_import__=_})()
@@ -1161,6 +1161,19 @@ code {
1161
1161
  color: var(--base09);
1162
1162
  }
1163
1163
 
1164
+ .component-tree-item__has_modifier:after {
1165
+ content: "" !important;
1166
+ }
1167
+
1168
+ .component-tree-item__closing:before {
1169
+ content: ">";
1170
+ margin-left: -13px;
1171
+ }
1172
+
1173
+ .component-tree-item__self-closing:before {
1174
+ content: "/>";
1175
+ }
1176
+
1164
1177
  .component-tree-item__bracket:before {
1165
1178
  content: "<";
1166
1179
  }