ember-inspector 4.13.1-alpha.2025.8.2 → 4.13.1-alpha.2025.8.21

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 (82) hide show
  1. package/app/components/object-inspector/component-parents.hbs +33 -0
  2. package/app/components/object-inspector/component-parents.js +43 -0
  3. package/app/components/object-inspector/properties-base.js +2 -0
  4. package/app/components/object-inspector/property.hbs +22 -20
  5. package/app/components/object-inspector/property.ts +8 -0
  6. package/app/components/object-inspector/toggle.hbs +9 -0
  7. package/app/components/object-inspector/toggle.js +6 -0
  8. package/app/components/object-inspector.hbs +3 -1
  9. package/app/controllers/application.js +8 -42
  10. package/app/controllers/component-tree.js +5 -5
  11. package/app/index.html +0 -18
  12. package/app/routes/application.js +3 -1
  13. package/app/services/layout.ts +36 -0
  14. package/app/styles/base.scss +6 -4
  15. package/app/styles/object_inspector.scss +8 -0
  16. package/app/styles/ui/_object-inspector-toggle.scss +1 -9
  17. package/app/styles/ui/_split.scss +9 -0
  18. package/app/templates/application.hbs +12 -10
  19. package/dist/bookmarklet/panes-3-16-0/assets/{chunk.524.8fa2f652e1d638cb866d.js → chunk.524.8e6d77e713e1b07529e2.js} +4 -4
  20. package/dist/{firefox/panes-3-16-0/assets/chunk.582.325d02fae0e9f262a1ae.js → bookmarklet/panes-3-16-0/assets/chunk.582.f4fc5976edf1459d7e60.js} +5 -5
  21. package/dist/bookmarklet/panes-3-16-0/assets/ember-inspector.css +22 -11
  22. package/dist/bookmarklet/panes-3-16-0/assets/ember-inspector.js +58 -44
  23. package/dist/bookmarklet/panes-3-16-0/assets/svg/sidebar-toggle-trailing.svg +9 -0
  24. package/dist/bookmarklet/panes-3-16-0/assets/vendor.js +9 -7
  25. package/dist/bookmarklet/panes-3-16-0/ember.js +9 -2
  26. package/dist/bookmarklet/panes-3-16-0/index.html +2 -20
  27. package/dist/bookmarklet/panes-3-16-0/main.js +22 -1
  28. package/dist/chrome/manifest.json +2 -2
  29. package/dist/{firefox/panes-3-16-0/assets/chunk.524.8fa2f652e1d638cb866d.js → chrome/panes-3-16-0/assets/chunk.524.8e6d77e713e1b07529e2.js} +4 -4
  30. package/dist/{bookmarklet/panes-3-16-0/assets/chunk.582.325d02fae0e9f262a1ae.js → chrome/panes-3-16-0/assets/chunk.582.f4fc5976edf1459d7e60.js} +5 -5
  31. package/dist/chrome/panes-3-16-0/assets/ember-inspector.css +22 -11
  32. package/dist/chrome/panes-3-16-0/assets/ember-inspector.js +58 -44
  33. package/dist/chrome/panes-3-16-0/assets/svg/sidebar-toggle-trailing.svg +9 -0
  34. package/dist/chrome/panes-3-16-0/assets/vendor.js +9 -7
  35. package/dist/chrome/panes-3-16-0/ember.js +9 -2
  36. package/dist/chrome/panes-3-16-0/index.html +2 -20
  37. package/dist/chrome/panes-3-16-0/main.js +22 -1
  38. package/dist/firefox/manifest.json +2 -2
  39. package/dist/{chrome/panes-3-16-0/assets/chunk.524.8fa2f652e1d638cb866d.js → firefox/panes-3-16-0/assets/chunk.524.8e6d77e713e1b07529e2.js} +4 -4
  40. package/dist/{websocket/assets/chunk.582.325d02fae0e9f262a1ae.js → firefox/panes-3-16-0/assets/chunk.582.f4fc5976edf1459d7e60.js} +5 -5
  41. package/dist/firefox/panes-3-16-0/assets/ember-inspector.css +22 -11
  42. package/dist/firefox/panes-3-16-0/assets/ember-inspector.js +58 -44
  43. package/dist/firefox/panes-3-16-0/assets/svg/sidebar-toggle-trailing.svg +9 -0
  44. package/dist/firefox/panes-3-16-0/assets/vendor.js +9 -7
  45. package/dist/firefox/panes-3-16-0/ember.js +9 -2
  46. package/dist/firefox/panes-3-16-0/index.html +2 -20
  47. package/dist/firefox/panes-3-16-0/main.js +22 -1
  48. package/dist/websocket/assets/{chunk.524.8fa2f652e1d638cb866d.js → chunk.524.8e6d77e713e1b07529e2.js} +4 -4
  49. package/dist/{chrome/panes-3-16-0/assets/chunk.582.325d02fae0e9f262a1ae.js → websocket/assets/chunk.582.f4fc5976edf1459d7e60.js} +5 -5
  50. package/dist/websocket/assets/ember-inspector.css +22 -11
  51. package/dist/websocket/assets/ember-inspector.js +58 -44
  52. package/dist/websocket/assets/svg/sidebar-toggle-trailing.svg +9 -0
  53. package/dist/websocket/assets/vendor.js +9 -7
  54. package/dist/websocket/ember.js +9 -2
  55. package/dist/websocket/index.html +2 -20
  56. package/dist/websocket/main.js +22 -1
  57. package/ember_debug/object-inspector.js +28 -0
  58. package/ember_debug/utils/ember.js +11 -1
  59. package/package.json +1 -1
  60. package/public/assets/svg/sidebar-toggle-trailing.svg +9 -0
  61. package/skeletons/web-extension/manifest.json +2 -2
  62. package/tests/ember_debug/object-inspector-test.js +54 -0
  63. package/dist/bookmarklet/panes-3-16-0/assets/fonts/Inter-Bold.woff +0 -0
  64. package/dist/bookmarklet/panes-3-16-0/assets/fonts/Inter-Bold.woff2 +0 -0
  65. package/dist/bookmarklet/panes-3-16-0/assets/fonts/Inter-Regular.woff +0 -0
  66. package/dist/bookmarklet/panes-3-16-0/assets/fonts/Inter-Regular.woff2 +0 -0
  67. package/dist/chrome/panes-3-16-0/assets/fonts/Inter-Bold.woff +0 -0
  68. package/dist/chrome/panes-3-16-0/assets/fonts/Inter-Bold.woff2 +0 -0
  69. package/dist/chrome/panes-3-16-0/assets/fonts/Inter-Regular.woff +0 -0
  70. package/dist/chrome/panes-3-16-0/assets/fonts/Inter-Regular.woff2 +0 -0
  71. package/dist/firefox/panes-3-16-0/assets/fonts/Inter-Bold.woff +0 -0
  72. package/dist/firefox/panes-3-16-0/assets/fonts/Inter-Bold.woff2 +0 -0
  73. package/dist/firefox/panes-3-16-0/assets/fonts/Inter-Regular.woff +0 -0
  74. package/dist/firefox/panes-3-16-0/assets/fonts/Inter-Regular.woff2 +0 -0
  75. package/dist/websocket/assets/fonts/Inter-Bold.woff +0 -0
  76. package/dist/websocket/assets/fonts/Inter-Bold.woff2 +0 -0
  77. package/dist/websocket/assets/fonts/Inter-Regular.woff +0 -0
  78. package/dist/websocket/assets/fonts/Inter-Regular.woff2 +0 -0
  79. package/public/assets/fonts/Inter-Bold.woff +0 -0
  80. package/public/assets/fonts/Inter-Bold.woff2 +0 -0
  81. package/public/assets/fonts/Inter-Regular.woff +0 -0
  82. package/public/assets/fonts/Inter-Regular.woff2 +0 -0
@@ -0,0 +1,33 @@
1
+ <ObjectInspector::Accordion @mixin={{this.accordionMixin}} as |accordion|>
2
+ <div
3
+ class="mixin {{this.accordionMixin.type}} {{if accordion.isExpanded "mixin-state-expanded"}} {{if this.accordionMixin.properties.length "mixin-props-yes" "mixin-props-no"}}"
4
+ data-test-object-detail
5
+ >
6
+ {{#if this.accordionMixin.properties.length}}
7
+ <h2
8
+ data-test-object-detail-name
9
+ class="mixin-name sticky top-0 truncate select-none cursor-default text-base15 bg-base01"
10
+ role="button"
11
+ {{on "click" accordion.toggle}}
12
+ >
13
+ {{this.accordionMixin.name}}
14
+ </h2>
15
+ {{else}}
16
+ <h2
17
+ class="mixin-name mixin-name--no-props sticky top-0 truncate select-none text-base09 cursor-default bg-base01"
18
+ data-test-object-detail-name
19
+ >
20
+ {{this.accordionMixin.name}}
21
+ </h2>
22
+ {{/if}}
23
+ {{#if accordion.isExpanded}}
24
+ <ul class="mixin-properties m-0 text-base font-mono list-none">
25
+ {{#each this.parents as |parent|}}
26
+ <ComponentTreeItem @item={{parent}} />
27
+ {{else}}
28
+ <li class="mixin-property flex relative flex-row items-center truncate">No Properties</li>
29
+ {{/each}}
30
+ </ul>
31
+ {{/if}}
32
+ </div>
33
+ </ObjectInspector::Accordion>
@@ -0,0 +1,43 @@
1
+ import Component from '@glimmer/component';
2
+ import { RenderItem } from 'ember-inspector/controllers/component-tree';
3
+
4
+ class RenderItemNoParent extends RenderItem {
5
+ get level() {
6
+ return 0;
7
+ }
8
+
9
+ get hasChildren() {
10
+ return false;
11
+ }
12
+ }
13
+
14
+ export default class ComponentParents extends Component {
15
+ get accordionMixin() {
16
+ return {
17
+ name: 'rendered by',
18
+ expand: true,
19
+ properties: {
20
+ length: 1,
21
+ },
22
+ };
23
+ }
24
+ get parents() {
25
+ const parents = [];
26
+ let item = this.args.item?.parentItem;
27
+ while (item) {
28
+ parents.push(
29
+ new RenderItemNoParent(
30
+ item.controller,
31
+ item.parentItem,
32
+ item.renderNode,
33
+ ),
34
+ );
35
+ item = item.parentItem;
36
+ }
37
+ return parents;
38
+ }
39
+
40
+ selectComponent = (item) => {
41
+ this.args.select(item);
42
+ };
43
+ }
@@ -9,9 +9,11 @@ export default class PropertiesBase extends Component {
9
9
  const data = {
10
10
  objectId: this.args.model.objectId,
11
11
  };
12
+
12
13
  if (name !== '...') {
13
14
  data.property = name;
14
15
  }
16
+
15
17
  this.port.send('objectInspector:sendToConsole', data);
16
18
  }
17
19
 
@@ -30,34 +30,36 @@
30
30
  <span class="mixin-property-icon mixin-property-icon-{{this.iconInfo.type}} inline-block rounded font-mono text-md text-white text-center select-none"></span>
31
31
  </span>
32
32
 
33
- {{!-- Property Name --}}
34
- <span
35
- class="mixin-property-name text-base14 truncate"
36
- data-test-object-property-name
37
- >
38
- {{#if this.isService}}
39
- <span
40
- title="service"
41
- class="mixin-property--group"
42
- data-test-property-name-service
43
- >
44
- {{@model.name}}
45
- </span>
46
- {{else}}
47
- {{#if this.hasDependentKeys}}
33
+ {{#unless this.isOwner}}
34
+ {{!-- Property Name --}}
35
+ <span
36
+ class="mixin-property-name text-base14 truncate"
37
+ data-test-object-property-name
38
+ >
39
+ {{#if this.isService}}
48
40
  <span
49
- title="computed"
41
+ title="service"
50
42
  class="mixin-property--group"
43
+ data-test-property-name-service
51
44
  >
52
45
  {{@model.name}}
53
46
  </span>
54
47
  {{else}}
55
- {{@model.name}}
48
+ {{#if this.hasDependentKeys}}
49
+ <span
50
+ title="computed"
51
+ class="mixin-property--group"
52
+ >
53
+ {{@model.name}}
54
+ </span>
55
+ {{else}}
56
+ {{@model.name}}
57
+ {{/if}}
56
58
  {{/if}}
57
- {{/if}}
58
- </span>
59
+ </span>
59
60
 
60
- <span class="mr-1">: </span>
61
+ <span class="mr-1">: </span>
62
+ {{/unless}}
61
63
 
62
64
  {{#if this.isEdit}}
63
65
  {{#if this.isDate}}
@@ -47,6 +47,10 @@ export default class ObjectInspectorProperty extends Component<ObjectInspectorPr
47
47
  @equal('args.model.value.type', 'type-string')
48
48
  isString!: boolean;
49
49
 
50
+ get isOwner() {
51
+ return this.args.model?.value?.type === 'type-owner';
52
+ }
53
+
50
54
  get isService() {
51
55
  return this.args.model?.isService;
52
56
  }
@@ -116,6 +120,10 @@ export default class ObjectInspectorProperty extends Component<ObjectInspectorPr
116
120
  return { type: 'getter', title: 'Getter' };
117
121
  }
118
122
 
123
+ if (this.isOwner) {
124
+ return { type: 'owner', title: 'Owner' };
125
+ }
126
+
119
127
  return { type: 'n/a', title: 'N/A' };
120
128
  }
121
129
 
@@ -0,0 +1,9 @@
1
+ <button
2
+ class="object-inspector-toggle toolbar-icon-button"
3
+ type="button"
4
+ title="{{if this.layout.inspectorExpanded "hide" "show"}} object inspector"
5
+ ...attributes
6
+ {{on "click" this.layout.toggleInspector}}
7
+ >
8
+ {{svg-jar "sidebar-toggle-trailing" width="16" height="16"}}
9
+ </button>
@@ -0,0 +1,6 @@
1
+ import Component from '@glimmer/component';
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class PropertiesGrouped extends Component {
5
+ @service layout;
6
+ }
@@ -110,6 +110,8 @@
110
110
  {{else if (eq this.propDisplayType "grouped")}}
111
111
  <ObjectInspector::PropertiesGrouped @model={{@mixinDetails}} />
112
112
  {{/if}}
113
+ <Ui::ToolbarDivider />
114
+ <ObjectInspector::ComponentParents @select={{@selectComponent}} @item={{@item}}/>
113
115
  </div>
114
116
  {{else}}
115
117
  <div class="split-panel-bd">
@@ -117,4 +119,4 @@
117
119
  No object selected
118
120
  </Ui::EmptyMessage>
119
121
  </div>
120
- {{/if}}
122
+ {{/if}}
@@ -1,4 +1,4 @@
1
- import Controller from '@ember/controller';
1
+ import Controller, { inject as controller } from '@ember/controller';
2
2
  import { tracked } from '@glimmer/tracking';
3
3
  import { action } from '@ember/object';
4
4
  import { debounce, schedule } from '@ember/runloop';
@@ -7,11 +7,13 @@ import { inject as service } from '@ember/service';
7
7
  import { TrackedArray, TrackedObject } from 'tracked-built-ins';
8
8
 
9
9
  export default class ApplicationController extends Controller {
10
+ @controller('component-tree') componentTreeController;
11
+
10
12
  /**
11
13
  * Service used to broadcast changes to the application's layout
12
14
  * such as toggling of the object inspector.
13
15
  */
14
- @service('layout') layoutService;
16
+ @service layout;
15
17
  @service port;
16
18
 
17
19
  // Indicates that the extension window is focused,
@@ -19,7 +21,6 @@ export default class ApplicationController extends Controller {
19
21
  @tracked isDragging = false;
20
22
  @tracked contentHeight = null;
21
23
  @tracked deprecationCount = 0;
22
- @tracked inspectorExpanded = false;
23
24
  @tracked inspectorWidth = 360;
24
25
  /**
25
26
  * Indicates if the inspector has detected an ember app.
@@ -72,39 +73,6 @@ export default class ApplicationController extends Controller {
72
73
  });
73
74
  }
74
75
 
75
- @action
76
- showInspector() {
77
- if (this.inspectorExpanded === false) {
78
- this.inspectorExpanded = true;
79
- // Broadcast that tables have been resized (used by `x-list`).
80
- // eslint-disable-next-line ember/no-runloop
81
- schedule('afterRender', () => {
82
- this.layoutService.trigger('resize', { source: 'object-inspector' });
83
- });
84
- }
85
- }
86
-
87
- @action
88
- hideInspector() {
89
- if (this.inspectorExpanded === true) {
90
- this.inspectorExpanded = false;
91
- // Broadcast that tables have been resized (used by `x-list`).
92
- // eslint-disable-next-line ember/no-runloop
93
- schedule('afterRender', () => {
94
- this.layoutService.trigger('resize', { source: 'object-inspector' });
95
- });
96
- }
97
- }
98
-
99
- @action
100
- toggleInspector() {
101
- if (this.inspectorExpanded) {
102
- this.hideInspector();
103
- } else {
104
- this.showInspector();
105
- }
106
- }
107
-
108
76
  @action
109
77
  setActive(bool) {
110
78
  // eslint-disable-next-line ember/no-runloop
@@ -116,7 +84,7 @@ export default class ApplicationController extends Controller {
116
84
  @action
117
85
  setupContentElement(element) {
118
86
  this.contentElement = element;
119
- this.layoutService.updateContentHeight(this.contentElement.clientHeight);
87
+ this.layout.updateContentHeight(this.contentElement.clientHeight);
120
88
  }
121
89
 
122
90
  @action
@@ -124,14 +92,12 @@ export default class ApplicationController extends Controller {
124
92
  // eslint-disable-next-line ember/no-runloop
125
93
  schedule('afterRender', () => {
126
94
  if (!this.isDestroyed && !this.isDestroying) {
127
- this.layoutService.trigger('resize', {
95
+ this.layout.trigger('resize', {
128
96
  source: 'application-controller',
129
97
  });
130
98
 
131
99
  if (this.contentElement) {
132
- this.layoutService.updateContentHeight(
133
- this.contentElement.clientHeight,
134
- );
100
+ this.layout.updateContentHeight(this.contentElement.clientHeight);
135
101
  }
136
102
  }
137
103
  });
@@ -148,7 +114,7 @@ export default class ApplicationController extends Controller {
148
114
  this.navIsCollapsed = !this.navIsCollapsed;
149
115
  // eslint-disable-next-line ember/no-runloop
150
116
  schedule('afterRender', () => {
151
- this.layoutService.trigger('resize', { source: 'navigation' });
117
+ this.layout.trigger('resize', { source: 'navigation' });
152
118
  });
153
119
  }
154
120
 
@@ -1,4 +1,4 @@
1
- import Controller, { inject as controller } from '@ember/controller';
1
+ import Controller from '@ember/controller';
2
2
  import { action } from '@ember/object';
3
3
  import { debounce } from '@ember/runloop';
4
4
  import { inject as service } from '@ember/service';
@@ -14,8 +14,8 @@ export default class ComponentTreeController extends Controller {
14
14
  // Estimated height for each row
15
15
  itemHeight = 22;
16
16
 
17
- @controller application;
18
17
  @service port;
18
+ @service layout;
19
19
 
20
20
  @tracked query = '';
21
21
  @tracked isInspecting = false;
@@ -146,14 +146,14 @@ export default class ComponentTreeController extends Controller {
146
146
  objectId: item.instance,
147
147
  });
148
148
  } else {
149
- this.application.hideInspector();
149
+ this.layout.hideInspector();
150
150
  }
151
151
  } else {
152
152
  this._pinned = undefined;
153
153
  this._previewing = undefined;
154
154
 
155
155
  this.port.send('view:hideInspection');
156
- this.application.hideInspector();
156
+ this.layout.hideInspector();
157
157
  }
158
158
 
159
159
  this.syncInspection();
@@ -293,7 +293,7 @@ function arrowKeyPressed(keyCode) {
293
293
  return [KEYS.up, KEYS.right, KEYS.down, KEYS.left].includes(keyCode);
294
294
  }
295
295
 
296
- class RenderItem {
296
+ export class RenderItem {
297
297
  @tracked isExpanded;
298
298
  @tracked renderNode;
299
299
 
package/app/index.html CHANGED
@@ -8,24 +8,6 @@
8
8
 
9
9
  {{content-for "head"}}
10
10
 
11
- <style type="text/css">
12
- @font-face {
13
- font-display: swap;
14
- font-family: 'Inter';
15
- font-style: normal;
16
- font-weight: 400;
17
- src: url("{{rootURL}}assets/fonts/Inter-Regular.woff2?v=3.12") format("woff2"), url("{{rootURL}}assets/fonts/Inter-Regular.woff?v=3.12") format("woff");
18
- }
19
-
20
- @font-face {
21
- font-display: swap;
22
- font-family: 'Inter';
23
- font-style: normal;
24
- font-weight: 700;
25
- src: url("{{rootURL}}assets/fonts/Inter-Bold.woff2?v=3.12") format("woff2"), url("{{rootURL}}assets/fonts/Inter-Bold.woff?v=3.12") format("woff");
26
- }
27
- </style>
28
-
29
11
  <link integrity="" rel="stylesheet" href="{{rootURL}}assets/vendor.css">
30
12
  <link integrity="" rel="stylesheet" href="{{rootURL}}assets/ember-inspector.css">
31
13
 
@@ -9,9 +9,11 @@ export default class ApplicationRoute extends Route {
9
9
  @service adapter;
10
10
  @service port;
11
11
  @service router;
12
+ @service layout;
12
13
 
13
14
  setupController(controller) {
14
15
  controller.set('mixinStack', []);
16
+
15
17
  let port = this.port;
16
18
  port.on('objectInspector:updateObject', this, this.updateObject);
17
19
  port.on('objectInspector:updateProperty', this, this.updateProperty);
@@ -63,7 +65,7 @@ export default class ApplicationRoute extends Route {
63
65
  controller.activateMixinDetails(name, objectId, details, errors);
64
66
  }
65
67
 
66
- this.controller.showInspector();
68
+ this.layout.showInspector();
67
69
  }
68
70
 
69
71
  setDeprecationCount(message) {
@@ -12,8 +12,11 @@ import { action } from '@ember/object';
12
12
  import { tracked } from '@glimmer/tracking';
13
13
  import { addListener, removeListener, sendEvent } from '@ember/object/events';
14
14
  import type { AnyFn } from '@ember/-internals/utility-types';
15
+ import { schedule } from '@ember/runloop';
15
16
 
16
17
  export default class LayoutService extends Service {
18
+ @tracked inspectorExpanded = false;
19
+
17
20
  /**
18
21
  * Stores the app's content height. This property is kept up-to-date
19
22
  * by the `monitor-content-height` component.
@@ -85,4 +88,37 @@ export default class LayoutService extends Service {
85
88
  trigger(eventName: string, ...args: Array<any>) {
86
89
  sendEvent(this, eventName, args);
87
90
  }
91
+
92
+ @action
93
+ showInspector() {
94
+ if (this.inspectorExpanded === false) {
95
+ this.inspectorExpanded = true;
96
+ // Broadcast that tables have been resized (used by `x-list`).
97
+ // eslint-disable-next-line ember/no-runloop
98
+ schedule('afterRender', () => {
99
+ this.trigger('resize', { source: 'object-inspector' });
100
+ });
101
+ }
102
+ }
103
+
104
+ @action
105
+ hideInspector() {
106
+ if (this.inspectorExpanded === true) {
107
+ this.inspectorExpanded = false;
108
+ // Broadcast that tables have been resized (used by `x-list`).
109
+ // eslint-disable-next-line ember/no-runloop
110
+ schedule('afterRender', () => {
111
+ this.trigger('resize', { source: 'object-inspector' });
112
+ });
113
+ }
114
+ }
115
+
116
+ @action
117
+ toggleInspector() {
118
+ if (this.inspectorExpanded) {
119
+ this.hideInspector();
120
+ } else {
121
+ this.showInspector();
122
+ }
123
+ }
88
124
  }
@@ -1,10 +1,12 @@
1
1
  :root {
2
2
  /* stylelint-disable value-keyword-case */
3
- --font-sans-serif: "Inter", -apple-system, system-ui, BlinkMacSystemFont,
4
- "Segoe UI", "Roboto", "Cantarell", "Oxygen", "Ubuntu", "Helvetica Neue",
5
- helvetica, arial, sans-serif;
6
- --font-monospace: "SF Mono", Menlo, Monaco, monospace;
3
+ --font-sans-serif: system-ui, sans-serif, "Apple Color Emoji",
4
+ "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
5
+ --font-monospace: ui-monospace, "Cascadia Code", "Source Code Pro", Menlo,
6
+ Consolas, "DejaVu Sans Mono", monospace, "Apple Color Emoji",
7
+ "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
7
8
  /* stylelint-enable value-keyword-case */
9
+
8
10
  --inherit: inherit;
9
11
  --unit0: 0;
10
12
  --unit1: 4px;
@@ -120,3 +120,11 @@
120
120
  content: "T";
121
121
  }
122
122
  }
123
+
124
+ .mixin-property-icon-owner {
125
+ background-color: var(--spec02);
126
+
127
+ &::before {
128
+ content: "O";
129
+ }
130
+ }
@@ -1,12 +1,4 @@
1
1
  .object-inspector-toggle.toolbar-icon-button {
2
- margin-right: 0; // .toolbar-icon-button override
3
2
  max-height: var(--toolbar-height);
4
- padding-right: 6px; // .toolbar-icon-button override
5
- padding-left: 6px; // .toolbar-icon-button override
6
- transform: scaleX(-1);
7
-
8
- // use .toolbar-icon-button active style AND flip horizontally
9
- &:active {
10
- transform: translate(1px, 1px) scaleX(-1);
11
- }
3
+ padding-inline: 6px; // .toolbar-icon-button override
12
4
  }
@@ -69,6 +69,10 @@
69
69
 
70
70
  /* Custom panels */
71
71
 
72
+ .split-panel-hd-row {
73
+ flex-flow: row;
74
+ }
75
+
72
76
  .split-panel-sidebar-1 .split-panel-bd {
73
77
  background: var(--base01);
74
78
  }
@@ -85,3 +89,8 @@
85
89
  .split-main > .split-panel-sidebar-1 > .split-panel-bd {
86
90
  overflow-y: auto;
87
91
  }
92
+
93
+ /* There is better ways to do this, but they create more complicated CSS */
94
+ .split-panel-hd-row .spacer {
95
+ flex: 1 1 100%;
96
+ }
@@ -45,16 +45,12 @@
45
45
  </Ui::DraggableColumn>
46
46
 
47
47
  <div class="split-panel">
48
- <div class="split-panel-hd">
48
+ <div class="split-panel-hd split-panel-hd-row">
49
49
  <div id="toolbar"></div>
50
- <button
51
- class="object-inspector-toggle toolbar-icon-button absolute top-0 right-0"
52
- {{on "click" this.toggleInspector}}
53
- type="button"
54
- title="{{if this.inspectorExpanded "hide" "show"}} object inspector"
55
- >
56
- {{svg-jar "sidebar-toggle" width="16" height="16"}}
57
- </button>
50
+ {{#unless this.layout.inspectorExpanded}}
51
+ <span class="spacer">{{!-- Spacer to shift the toggle to the end of the header --}}</span>
52
+ <ObjectInspector::Toggle />
53
+ {{/unless}}
58
54
  </div>
59
55
 
60
56
  <div class="split-panel-bd" {{did-insert this.setupContentElement}}>
@@ -64,16 +60,22 @@
64
60
  </div>
65
61
  </div>
66
62
 
67
- {{#if this.inspectorExpanded}}
63
+ {{#if this.layout.inspectorExpanded}}
68
64
  <Ui::DraggableColumn
69
65
  @classes="split-panel"
70
66
  @side="right"
71
67
  @width={{this.inspectorWidth}}
72
68
  >
69
+ <div class="split-panel-hd split-panel-hd-row">
70
+ <span class="spacer"></span>
71
+ <ObjectInspector::Toggle />
72
+ </div>
73
73
  <ObjectInspector
74
74
  @popMixinDetails={{this.popMixinDetails}}
75
75
  @model={{this.mixinStack}}
76
76
  @mixinDetails={{this.mixinDetails}}
77
+ @selectComponent={{mut this.componentTreeController.pinned}}
78
+ @item={{this.componentTreeController.currentItem}}
77
79
  />
78
80
  </Ui::DraggableColumn>
79
81
  {{/if}}
@@ -17,8 +17,8 @@ e.exports=require("@glimmer/tracking/primitives/cache")},3211:e=>{"use strict"
17
17
  e.exports=require("ember")},8234:e=>{"use strict"
18
18
  e.exports=require("ember-testing")},2394:e=>{"use strict"
19
19
  e.exports=require("ember-testing/lib/test/pending_requests")},32:e=>{"use strict"
20
- e.exports=require("ember-tracked-storage-polyfill")},7326:()=>{},4665:(e,r,t)=>{e.exports=function(){var e=_eai_d,r=_eai_r
21
- function n(e){return e&&e.__esModule?e:Object.assign({default:e},e)}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("@ember/string",[],(function(){return n(t(2654))})),e("ember-cli-page-object",["@ember/application","@ember/runloop","@ember/object","ember-testing","ember-testing/lib/test/pending_requests","ember","@ember/debug","@ember/destroyable","@ember/test-waiters","@ember/template-factory","@ember/version","@glimmer/manager","@ember/renderer","@ember/application/instance"],(function(){return n(t(3201))})),e("ember-cli-page-object/extend",["@ember/application","@ember/runloop","@ember/object","ember-testing","ember-testing/lib/test/pending_requests","ember","@ember/debug","@ember/destroyable","@ember/test-waiters","@ember/template-factory","@ember/version","@glimmer/manager","@ember/renderer","@ember/application/instance"],(function(){return n(t(7057))})),e("ember-cli-page-object/macros",[],(function(){return n(t(821))})),e("ember-load-initializers",[],(function(){return n(t(4338))})),e("ember-math-helpers/helpers/abs",["@ember/component/helper"],(function(){return n(t(7423))})),e("ember-math-helpers/helpers/acos",["@ember/component/helper"],(function(){return n(t(9485))})),e("ember-math-helpers/helpers/acosh",["@ember/component/helper"],(function(){return n(t(4393))})),e("ember-math-helpers/helpers/add",["@ember/component/helper"],(function(){return n(t(1336))})),e("ember-math-helpers/helpers/asin",["@ember/component/helper"],(function(){return n(t(3388))})),e("ember-math-helpers/helpers/asinh",["@ember/component/helper"],(function(){return n(t(7598))})),e("ember-math-helpers/helpers/atan",["@ember/component/helper"],(function(){return n(t(2521))})),e("ember-math-helpers/helpers/atan2",["@ember/component/helper"],(function(){return n(t(9363))})),e("ember-math-helpers/helpers/atanh",["@ember/component/helper"],(function(){return n(t(3837))})),e("ember-math-helpers/helpers/cbrt",["@ember/component/helper"],(function(){return n(t(5348))})),e("ember-math-helpers/helpers/ceil",["@ember/component/helper"],(function(){return n(t(610))})),e("ember-math-helpers/helpers/clz32",["@ember/component/helper"],(function(){return n(t(109))})),e("ember-math-helpers/helpers/cos",["@ember/component/helper"],(function(){return n(t(5040))})),e("ember-math-helpers/helpers/cosh",["@ember/component/helper"],(function(){return n(t(3594))})),e("ember-math-helpers/helpers/div",["@ember/component/helper"],(function(){return n(t(5664))})),e("ember-math-helpers/helpers/exp",["@ember/component/helper"],(function(){return n(t(292))})),e("ember-math-helpers/helpers/expm1",["@ember/component/helper"],(function(){return n(t(486))})),e("ember-math-helpers/helpers/floor",["@ember/component/helper"],(function(){return n(t(6209))})),e("ember-math-helpers/helpers/fround",["@ember/component/helper"],(function(){return n(t(5605))})),e("ember-math-helpers/helpers/gcd",["@ember/component/helper"],(function(){return n(t(6053))})),e("ember-math-helpers/helpers/hypot",["@ember/component/helper"],(function(){return n(t(37))})),e("ember-math-helpers/helpers/imul",["@ember/component/helper"],(function(){return n(t(4912))})),e("ember-math-helpers/helpers/lcm",["@ember/component/helper"],(function(){return n(t(9447))})),e("ember-math-helpers/helpers/log-e",["@ember/component/helper"],(function(){return n(t(1567))})),e("ember-math-helpers/helpers/log10",["@ember/component/helper"],(function(){return n(t(6088))})),e("ember-math-helpers/helpers/log1p",["@ember/component/helper"],(function(){return n(t(9864))})),e("ember-math-helpers/helpers/log2",["@ember/component/helper"],(function(){return n(t(8303))})),e("ember-math-helpers/helpers/max",["@ember/component/helper"],(function(){return n(t(7425))})),e("ember-math-helpers/helpers/min",["@ember/component/helper"],(function(){return n(t(867))})),e("ember-math-helpers/helpers/mod",["@ember/component/helper"],(function(){return n(t(8275))})),e("ember-math-helpers/helpers/mult",["@ember/component/helper"],(function(){return n(t(4801))})),e("ember-math-helpers/helpers/pow",["@ember/component/helper"],(function(){return n(t(6665))})),e("ember-math-helpers/helpers/random",["@ember/array","@ember/component/helper"],(function(){return n(t(7772))})),e("ember-math-helpers/helpers/round",["@ember/component/helper"],(function(){return n(t(2231))})),e("ember-math-helpers/helpers/sign",["@ember/component/helper"],(function(){return n(t(6626))})),e("ember-math-helpers/helpers/sin",["@ember/component/helper"],(function(){return n(t(4821))})),e("ember-math-helpers/helpers/sqrt",["@ember/component/helper"],(function(){return n(t(2841))})),e("ember-math-helpers/helpers/sub",["@ember/component/helper"],(function(){return n(t(4173))})),e("ember-math-helpers/helpers/sum",["@ember/component/helper"],(function(){return n(t(7472))})),e("ember-math-helpers/helpers/tan",["@ember/component/helper"],(function(){return n(t(5184))})),e("ember-math-helpers/helpers/tanh",["@ember/component/helper"],(function(){return n(t(1338))})),e("ember-math-helpers/helpers/trunc",["@ember/component/helper"],(function(){return n(t(7553))})),e("ember-resolver",[],(function(){return n(t(710))})),e("tracked-built-ins",["@glimmer/tracking","@ember/debug","ember-tracked-storage-polyfill"],(function(){return n(t(9929))})),e("tracked-toolbox",["@ember/debug","@ember/object","@glimmer/tracking","@glimmer/tracking/primitives/cache"],(function(){return n(t(2419))}))}()},8044:function(e,r){window._eai_r=require,window._eai_d=define}},t={}
20
+ e.exports=require("ember-tracked-storage-polyfill")},7326:()=>{},885:(e,r,t)=>{e.exports=function(){var e=_eai_d,r=_eai_r
21
+ function n(e){return e&&e.__esModule?e:Object.assign({default:e},e)}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("@ember/string",[],(function(){return n(t(2654))})),e("ember-cli-page-object",["@ember/application","@ember/runloop","@ember/object","ember-testing","ember-testing/lib/test/pending_requests","ember","@ember/debug","@ember/destroyable","@ember/test-waiters","@ember/template-factory","@ember/version","@glimmer/manager","@ember/renderer","@ember/application/instance"],(function(){return n(t(3201))})),e("ember-cli-page-object/extend",["@ember/application","@ember/runloop","@ember/object","ember-testing","ember-testing/lib/test/pending_requests","ember","@ember/debug","@ember/destroyable","@ember/test-waiters","@ember/template-factory","@ember/version","@glimmer/manager","@ember/renderer","@ember/application/instance"],(function(){return n(t(7057))})),e("ember-cli-page-object/macros",[],(function(){return n(t(821))})),e("ember-load-initializers",[],(function(){return n(t(4338))})),e("ember-math-helpers/helpers/abs",["@ember/component/helper"],(function(){return n(t(7423))})),e("ember-math-helpers/helpers/acos",["@ember/component/helper"],(function(){return n(t(9485))})),e("ember-math-helpers/helpers/acosh",["@ember/component/helper"],(function(){return n(t(4393))})),e("ember-math-helpers/helpers/add",["@ember/component/helper"],(function(){return n(t(1336))})),e("ember-math-helpers/helpers/asin",["@ember/component/helper"],(function(){return n(t(3388))})),e("ember-math-helpers/helpers/asinh",["@ember/component/helper"],(function(){return n(t(7598))})),e("ember-math-helpers/helpers/atan",["@ember/component/helper"],(function(){return n(t(2521))})),e("ember-math-helpers/helpers/atan2",["@ember/component/helper"],(function(){return n(t(9363))})),e("ember-math-helpers/helpers/atanh",["@ember/component/helper"],(function(){return n(t(3837))})),e("ember-math-helpers/helpers/cbrt",["@ember/component/helper"],(function(){return n(t(5348))})),e("ember-math-helpers/helpers/ceil",["@ember/component/helper"],(function(){return n(t(610))})),e("ember-math-helpers/helpers/clz32",["@ember/component/helper"],(function(){return n(t(109))})),e("ember-math-helpers/helpers/cos",["@ember/component/helper"],(function(){return n(t(5040))})),e("ember-math-helpers/helpers/cosh",["@ember/component/helper"],(function(){return n(t(3594))})),e("ember-math-helpers/helpers/div",["@ember/component/helper"],(function(){return n(t(5664))})),e("ember-math-helpers/helpers/exp",["@ember/component/helper"],(function(){return n(t(292))})),e("ember-math-helpers/helpers/expm1",["@ember/component/helper"],(function(){return n(t(486))})),e("ember-math-helpers/helpers/floor",["@ember/component/helper"],(function(){return n(t(6209))})),e("ember-math-helpers/helpers/fround",["@ember/component/helper"],(function(){return n(t(5605))})),e("ember-math-helpers/helpers/gcd",["@ember/component/helper"],(function(){return n(t(6053))})),e("ember-math-helpers/helpers/hypot",["@ember/component/helper"],(function(){return n(t(37))})),e("ember-math-helpers/helpers/imul",["@ember/component/helper"],(function(){return n(t(4912))})),e("ember-math-helpers/helpers/lcm",["@ember/component/helper"],(function(){return n(t(9447))})),e("ember-math-helpers/helpers/log-e",["@ember/component/helper"],(function(){return n(t(1567))})),e("ember-math-helpers/helpers/log10",["@ember/component/helper"],(function(){return n(t(6088))})),e("ember-math-helpers/helpers/log1p",["@ember/component/helper"],(function(){return n(t(9864))})),e("ember-math-helpers/helpers/log2",["@ember/component/helper"],(function(){return n(t(8303))})),e("ember-math-helpers/helpers/max",["@ember/component/helper"],(function(){return n(t(7425))})),e("ember-math-helpers/helpers/min",["@ember/component/helper"],(function(){return n(t(867))})),e("ember-math-helpers/helpers/mod",["@ember/component/helper"],(function(){return n(t(8275))})),e("ember-math-helpers/helpers/mult",["@ember/component/helper"],(function(){return n(t(4801))})),e("ember-math-helpers/helpers/pow",["@ember/component/helper"],(function(){return n(t(6665))})),e("ember-math-helpers/helpers/random",["@ember/array","@ember/component/helper"],(function(){return n(t(7772))})),e("ember-math-helpers/helpers/round",["@ember/component/helper"],(function(){return n(t(2231))})),e("ember-math-helpers/helpers/sign",["@ember/component/helper"],(function(){return n(t(6626))})),e("ember-math-helpers/helpers/sin",["@ember/component/helper"],(function(){return n(t(4821))})),e("ember-math-helpers/helpers/sqrt",["@ember/component/helper"],(function(){return n(t(2841))})),e("ember-math-helpers/helpers/sub",["@ember/component/helper"],(function(){return n(t(4173))})),e("ember-math-helpers/helpers/sum",["@ember/component/helper"],(function(){return n(t(7472))})),e("ember-math-helpers/helpers/tan",["@ember/component/helper"],(function(){return n(t(5184))})),e("ember-math-helpers/helpers/tanh",["@ember/component/helper"],(function(){return n(t(1338))})),e("ember-math-helpers/helpers/trunc",["@ember/component/helper"],(function(){return n(t(7553))})),e("ember-resolver",[],(function(){return n(t(710))})),e("tracked-built-ins",["@glimmer/tracking","@ember/debug","ember-tracked-storage-polyfill"],(function(){return n(t(9929))})),e("tracked-toolbox",["@ember/debug","@ember/object","@glimmer/tracking","@glimmer/tracking/primitives/cache"],(function(){return n(t(2419))}))}()},2032:function(e,r){window._eai_r=require,window._eai_d=define}},t={}
22
22
  function n(e){var m=t[e]
23
23
  if(void 0!==m)return m.exports
24
24
  var o=t[e]={exports:{}}
@@ -35,6 +35,6 @@ var r=(r,t)=>{var m,o,[p,s,l]=t,i=0
35
35
  if(p.some((r=>0!==e[r]))){for(m in s)n.o(s,m)&&(n.m[m]=s[m])
36
36
  if(l)var u=l(n)}for(r&&r(t);i<p.length;i++)o=p[i],n.o(e,o)&&e[o]&&e[o][0](),e[o]=0
37
37
  return n.O(u)},t=globalThis.webpackChunk_ember_auto_import_=globalThis.webpackChunk_ember_auto_import_||[]
38
- t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),n.O(void 0,[443],(()=>n(8044)))
39
- var m=n.O(void 0,[443],(()=>n(4665)))
38
+ t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),n.O(void 0,[443],(()=>n(2032)))
39
+ var m=n.O(void 0,[443],(()=>n(885)))
40
40
  m=n.O(m),__ember_auto_import__=m})()