ember-inspector 4.13.1-alpha.2025.8.9 → 4.13.1-alpha.2025.9.2

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 (79) hide show
  1. package/app/components/object-inspector/properties-base.js +2 -0
  2. package/app/components/object-inspector/property.hbs +22 -20
  3. package/app/components/object-inspector/property.ts +8 -0
  4. package/app/components/object-inspector/toggle.hbs +9 -0
  5. package/app/components/object-inspector/toggle.js +6 -0
  6. package/app/controllers/application.js +5 -41
  7. package/app/controllers/component-tree.js +4 -4
  8. package/app/index.html +0 -18
  9. package/app/routes/application.js +2 -1
  10. package/app/services/layout.ts +36 -0
  11. package/app/styles/base.scss +6 -4
  12. package/app/styles/object_inspector.scss +8 -0
  13. package/app/styles/ui/_object-inspector-toggle.scss +1 -9
  14. package/app/styles/ui/_split.scss +9 -0
  15. package/app/templates/application.hbs +10 -10
  16. package/dist/bookmarklet/panes-3-16-0/assets/{chunk.524.46c2524da6c95db907ed.js → chunk.524.c1bfb56c055e7d0fc46c.js} +4 -4
  17. package/dist/{firefox/panes-3-16-0/assets/chunk.582.283a670cfc26725677e5.js → bookmarklet/panes-3-16-0/assets/chunk.582.5c3ead834de4d1a345b0.js} +5 -5
  18. package/dist/bookmarklet/panes-3-16-0/assets/ember-inspector.css +22 -11
  19. package/dist/bookmarklet/panes-3-16-0/assets/ember-inspector.js +46 -42
  20. package/dist/bookmarklet/panes-3-16-0/assets/svg/sidebar-toggle-trailing.svg +9 -0
  21. package/dist/bookmarklet/panes-3-16-0/assets/vendor.js +9 -7
  22. package/dist/bookmarklet/panes-3-16-0/ember.js +9 -2
  23. package/dist/bookmarklet/panes-3-16-0/index.html +2 -20
  24. package/dist/bookmarklet/panes-3-16-0/main.js +22 -1
  25. package/dist/chrome/manifest.json +2 -2
  26. package/dist/{firefox/panes-3-16-0/assets/chunk.524.46c2524da6c95db907ed.js → chrome/panes-3-16-0/assets/chunk.524.c1bfb56c055e7d0fc46c.js} +4 -4
  27. package/dist/{bookmarklet/panes-3-16-0/assets/chunk.582.283a670cfc26725677e5.js → chrome/panes-3-16-0/assets/chunk.582.5c3ead834de4d1a345b0.js} +5 -5
  28. package/dist/chrome/panes-3-16-0/assets/ember-inspector.css +22 -11
  29. package/dist/chrome/panes-3-16-0/assets/ember-inspector.js +46 -42
  30. package/dist/chrome/panes-3-16-0/assets/svg/sidebar-toggle-trailing.svg +9 -0
  31. package/dist/chrome/panes-3-16-0/assets/vendor.js +9 -7
  32. package/dist/chrome/panes-3-16-0/ember.js +9 -2
  33. package/dist/chrome/panes-3-16-0/index.html +2 -20
  34. package/dist/chrome/panes-3-16-0/main.js +22 -1
  35. package/dist/firefox/manifest.json +2 -2
  36. package/dist/{chrome/panes-3-16-0/assets/chunk.524.46c2524da6c95db907ed.js → firefox/panes-3-16-0/assets/chunk.524.c1bfb56c055e7d0fc46c.js} +4 -4
  37. package/dist/{websocket/assets/chunk.582.283a670cfc26725677e5.js → firefox/panes-3-16-0/assets/chunk.582.5c3ead834de4d1a345b0.js} +5 -5
  38. package/dist/firefox/panes-3-16-0/assets/ember-inspector.css +22 -11
  39. package/dist/firefox/panes-3-16-0/assets/ember-inspector.js +46 -42
  40. package/dist/firefox/panes-3-16-0/assets/svg/sidebar-toggle-trailing.svg +9 -0
  41. package/dist/firefox/panes-3-16-0/assets/vendor.js +9 -7
  42. package/dist/firefox/panes-3-16-0/ember.js +9 -2
  43. package/dist/firefox/panes-3-16-0/index.html +2 -20
  44. package/dist/firefox/panes-3-16-0/main.js +22 -1
  45. package/dist/websocket/assets/{chunk.524.46c2524da6c95db907ed.js → chunk.524.c1bfb56c055e7d0fc46c.js} +4 -4
  46. package/dist/{chrome/panes-3-16-0/assets/chunk.582.283a670cfc26725677e5.js → websocket/assets/chunk.582.5c3ead834de4d1a345b0.js} +5 -5
  47. package/dist/websocket/assets/ember-inspector.css +22 -11
  48. package/dist/websocket/assets/ember-inspector.js +46 -42
  49. package/dist/websocket/assets/svg/sidebar-toggle-trailing.svg +9 -0
  50. package/dist/websocket/assets/vendor.js +9 -7
  51. package/dist/websocket/ember.js +9 -2
  52. package/dist/websocket/index.html +2 -20
  53. package/dist/websocket/main.js +22 -1
  54. package/ember_debug/object-inspector.js +28 -0
  55. package/ember_debug/utils/ember.js +11 -1
  56. package/package.json +1 -1
  57. package/public/assets/svg/sidebar-toggle-trailing.svg +9 -0
  58. package/skeletons/web-extension/manifest.json +2 -2
  59. package/tests/ember_debug/object-inspector-test.js +54 -0
  60. package/dist/bookmarklet/panes-3-16-0/assets/fonts/Inter-Bold.woff +0 -0
  61. package/dist/bookmarklet/panes-3-16-0/assets/fonts/Inter-Bold.woff2 +0 -0
  62. package/dist/bookmarklet/panes-3-16-0/assets/fonts/Inter-Regular.woff +0 -0
  63. package/dist/bookmarklet/panes-3-16-0/assets/fonts/Inter-Regular.woff2 +0 -0
  64. package/dist/chrome/panes-3-16-0/assets/fonts/Inter-Bold.woff +0 -0
  65. package/dist/chrome/panes-3-16-0/assets/fonts/Inter-Bold.woff2 +0 -0
  66. package/dist/chrome/panes-3-16-0/assets/fonts/Inter-Regular.woff +0 -0
  67. package/dist/chrome/panes-3-16-0/assets/fonts/Inter-Regular.woff2 +0 -0
  68. package/dist/firefox/panes-3-16-0/assets/fonts/Inter-Bold.woff +0 -0
  69. package/dist/firefox/panes-3-16-0/assets/fonts/Inter-Bold.woff2 +0 -0
  70. package/dist/firefox/panes-3-16-0/assets/fonts/Inter-Regular.woff +0 -0
  71. package/dist/firefox/panes-3-16-0/assets/fonts/Inter-Regular.woff2 +0 -0
  72. package/dist/websocket/assets/fonts/Inter-Bold.woff +0 -0
  73. package/dist/websocket/assets/fonts/Inter-Bold.woff2 +0 -0
  74. package/dist/websocket/assets/fonts/Inter-Regular.woff +0 -0
  75. package/dist/websocket/assets/fonts/Inter-Regular.woff2 +0 -0
  76. package/public/assets/fonts/Inter-Bold.woff +0 -0
  77. package/public/assets/fonts/Inter-Bold.woff2 +0 -0
  78. package/public/assets/fonts/Inter-Regular.woff +0 -0
  79. package/public/assets/fonts/Inter-Regular.woff2 +0 -0
@@ -5224,7 +5224,9 @@ define("ember-svg-jar/inlined/send-with-chevron",["exports"],(function(e){"use s
5224
5224
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
5225
5225
  e.default={content:'<path class="send-chevron" fill="#2C7FB3" d="M0 4l4-4 11.9 12L4.2 24 .1 20l8-8z"/>',attrs:{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"24",viewBox:"0 0 16 24"}}})),define("ember-svg-jar/inlined/send-with-text",["exports"],(function(e){"use strict"
5226
5226
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
5227
- e.default={content:'<g fill="none"><path class="send-chevron" fill="#2C7FB3" d="M0 7l4-4 11.9 12L4.2 27 .1 23l8-8z"/><path class="send-text" fill="#555" d="M36.5 13.7c4.8 1.2 6.8 3.1 6.8 6.7 0 4-2.9 6.7-7.4 7.1v1.9h-2v-1.8c-4.5-.3-7.5-2.9-7.7-6.9h3c.2 2.3 2 3.8 4.7 4.1v-8.6l-.7-.2c-4.5-1.1-6.6-3.2-6.6-6.7 0-3.8 2.8-6.4 7.1-6.8V.7h2v1.9c4.1.4 6.8 2.9 7 6.6h-3c-.3-2.1-1.8-3.5-4-3.9v8.2l.8.2zm-2.8-8.4c-2.5.3-4 1.7-4 3.9 0 1.9 1.1 3 4 3.8V5.3zm2.1 19.4c2.6-.3 4.3-1.9 4.3-4.1 0-2-1.3-3.2-4.3-4v8.1zM63.1 27H48.7V3h14.4v3.1H52.2v7.3h10.3v2.9H52.2V24h10.9z"/></g>',attrs:{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 64 30",width:"64",height:"30"}}})),define("ember-svg-jar/inlined/sidebar-toggle",["exports"],(function(e){"use strict"
5227
+ e.default={content:'<g fill="none"><path class="send-chevron" fill="#2C7FB3" d="M0 7l4-4 11.9 12L4.2 27 .1 23l8-8z"/><path class="send-text" fill="#555" d="M36.5 13.7c4.8 1.2 6.8 3.1 6.8 6.7 0 4-2.9 6.7-7.4 7.1v1.9h-2v-1.8c-4.5-.3-7.5-2.9-7.7-6.9h3c.2 2.3 2 3.8 4.7 4.1v-8.6l-.7-.2c-4.5-1.1-6.6-3.2-6.6-6.7 0-3.8 2.8-6.4 7.1-6.8V.7h2v1.9c4.1.4 6.8 2.9 7 6.6h-3c-.3-2.1-1.8-3.5-4-3.9v8.2l.8.2zm-2.8-8.4c-2.5.3-4 1.7-4 3.9 0 1.9 1.1 3 4 3.8V5.3zm2.1 19.4c2.6-.3 4.3-1.9 4.3-4.1 0-2-1.3-3.2-4.3-4v8.1zM63.1 27H48.7V3h14.4v3.1H52.2v7.3h10.3v2.9H52.2V24h10.9z"/></g>',attrs:{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 64 30",width:"64",height:"30"}}})),define("ember-svg-jar/inlined/sidebar-toggle-trailing",["exports"],(function(e){"use strict"
5228
+ Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
5229
+ e.default={content:'<path class="svg-stroke" d="M14.5 1.5h-13a1 1 0 00-1 1v11a1 1 0 001 1h13a1 1 0 001-1v-11a1 1 0 00-1-1zM9.5 2v12M11 4h3M11 6h3M11 8h3"/>',attrs:{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"}}})),define("ember-svg-jar/inlined/sidebar-toggle",["exports"],(function(e){"use strict"
5228
5230
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
5229
5231
  e.default={content:'<path class="svg-stroke" d="M14.5 1.5h-13a1 1 0 00-1 1v11a1 1 0 001 1h13a1 1 0 001-1v-11a1 1 0 00-1-1zM6.5 2v12M5 4H2M5 6H2M5 8H2"/>',attrs:{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"}}})),define("ember-svg-jar/inlined/warning",["exports"],(function(e){"use strict"
5230
5232
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
@@ -5559,10 +5561,10 @@ e.default=(0,t.createTemplateFactory)({id:"6zi+CHFZ",block:'[[[41,[30,0,["isFirs
5559
5561
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
5560
5562
  e.default=t.default.extend({layout:i.default,tagName:"tfoot",wrappedRowArray:(0,n.computed)("wrappedRows.[]",(function(){let e=this.get("wrappedRows"),t=e.get("length"),n=[]
5561
5563
  for(let r=0;r<t;r++)n.push(e.objectAt(r))
5562
- return(0,r.A)(n)}))})})),define("ember-table/components/ember-tfoot/template",["exports","@ember/template-factory"],(function(e,t){"use strict"
5564
+ return(0,r.A)(n)}))})}))
5565
+ define("ember-table/components/ember-tfoot/template",["exports","@ember/template-factory"],(function(e,t){"use strict"
5563
5566
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
5564
- e.default=(0,t.createTemplateFactory)({id:"/IEu90BH",block:'[[[42,[28,[37,1],[[28,[37,1],[[30,0,["wrappedRowArray"]]],null]],null],null,[[[1," "],[8,[39,2],null,[["@rowValue","@columns","@columnMetaCache","@rowMetaCache","@canSelect","@rowSelectionMode","@checkboxSelectionMode","@rowsCount"],[[30,1],[30,0,["columns"]],[30,0,["columnMetaCache"]],[30,0,["rowMetaCache"]],[30,0,["canSelect"]],[30,0,["rowSelectionMode"]],[30,0,["checkboxSelectionMode"]],[30,0,["wrappedRowArray","length"]]]],[["default"],[[[[1,"\\n"],[41,[48,[30,3]],[[[1," "],[18,3,[[28,[37,6],null,[["rowValue","rowMeta","cells","rowSelectionMode","rowsCount","row"],[[30,2,["rowValue"]],[30,2,["rowMeta"]],[30,2,["cells"]],[30,2,["rowSelectionMode"]],[30,2,["rowsCount"]],[50,"ember-tr",0,null,[["api"],[[30,2]]]]]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,8],null,[["@api"],[[30,2]]],null],[1,"\\n"]],[]]],[1," "]],[2]]]]],[1,"\\n"]],[1]],null]],["rowValue","api","&default"],false,["each","-track-array","ember-table-private/row-wrapper","if","has-block","yield","hash","component","ember-tr"]]',moduleName:"ember-table/components/ember-tfoot/template.hbs",isStrictMode:!1})}))
5565
- define("ember-table/components/ember-th/component",["exports","ember-table/components/-private/base-table-cell","@ember/runloop","@ember/object/computed","ember-table/-private/utils/element","ember-table/components/ember-th/template","@ember/object"],(function(e,t,r,n,i,o,s){"use strict"
5567
+ e.default=(0,t.createTemplateFactory)({id:"/IEu90BH",block:'[[[42,[28,[37,1],[[28,[37,1],[[30,0,["wrappedRowArray"]]],null]],null],null,[[[1," "],[8,[39,2],null,[["@rowValue","@columns","@columnMetaCache","@rowMetaCache","@canSelect","@rowSelectionMode","@checkboxSelectionMode","@rowsCount"],[[30,1],[30,0,["columns"]],[30,0,["columnMetaCache"]],[30,0,["rowMetaCache"]],[30,0,["canSelect"]],[30,0,["rowSelectionMode"]],[30,0,["checkboxSelectionMode"]],[30,0,["wrappedRowArray","length"]]]],[["default"],[[[[1,"\\n"],[41,[48,[30,3]],[[[1," "],[18,3,[[28,[37,6],null,[["rowValue","rowMeta","cells","rowSelectionMode","rowsCount","row"],[[30,2,["rowValue"]],[30,2,["rowMeta"]],[30,2,["cells"]],[30,2,["rowSelectionMode"]],[30,2,["rowsCount"]],[50,"ember-tr",0,null,[["api"],[[30,2]]]]]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,8],null,[["@api"],[[30,2]]],null],[1,"\\n"]],[]]],[1," "]],[2]]]]],[1,"\\n"]],[1]],null]],["rowValue","api","&default"],false,["each","-track-array","ember-table-private/row-wrapper","if","has-block","yield","hash","component","ember-tr"]]',moduleName:"ember-table/components/ember-tfoot/template.hbs",isStrictMode:!1})})),define("ember-table/components/ember-th/component",["exports","ember-table/components/-private/base-table-cell","@ember/runloop","@ember/object/computed","ember-table/-private/utils/element","ember-table/components/ember-th/template","@ember/object"],(function(e,t,r,n,i,o,s){"use strict"
5566
5568
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
5567
5569
  e.default=t.default.extend({layout:o.default,tagName:"th",attributeBindings:["columnSpan:colspan","rowSpan:rowspan"],classNameBindings:["isSortable","isResizable","isReorderable"],api:null,onContextMenu:null,columnValue:(0,n.readOnly)("api.columnValue"),columnMeta:(0,n.readOnly)("api.columnMeta"),rowMeta:(0,n.readOnly)("api.rowMeta"),sorts:(0,n.readOnly)("api.sorts"),isSortable:(0,n.readOnly)("columnMeta.isSortable"),isResizable:(0,n.readOnly)("columnMeta.isResizable"),isReorderable:(0,n.readOnly)("columnMeta.isReorderable"),columnSpan:(0,n.readOnly)("columnMeta.columnSpan"),rowSpan:(0,n.readOnly)("columnMeta.rowSpan"),_columnState:0,_hammer:null,didInsertElement(){this._super(...arguments),this.get("columnMeta").registerElement(this.element)
5568
5570
  let e=new Hammer(this.element)
@@ -5672,10 +5674,10 @@ let n=(0,s.getActiveElement)()
5672
5674
  r&&n!==r&&r.focus()},_appendRange(e,t,r){for(;t;)e.insertBefore(t,null),t=t!==r?r.parentNode.firstChild:null},_removeRange(e,t){var r=t
5673
5675
  do{var n=r.previousSibling
5674
5676
  if(r.parentNode&&(r.parentNode.removeChild(r),r===e))break
5675
- r=n}while(r)}})})),define("ember-wormhole/templates/components/ember-wormhole",["exports","@ember/template-factory"],(function(e,t){"use strict"
5677
+ r=n}while(r)}})}))
5678
+ define("ember-wormhole/templates/components/ember-wormhole",["exports","@ember/template-factory"],(function(e,t){"use strict"
5676
5679
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
5677
- e.default=(0,t.createTemplateFactory)({id:"AZTawDXE",block:'[[[1,[28,[35,0],[[30,0,["_wormholeHeadNode"]]],null]],[18,1,null],[1,[28,[35,0],[[30,0,["_wormholeTailNode"]]],null]]],["&default"],false,["unbound","yield"]]',moduleName:"ember-wormhole/templates/components/ember-wormhole.hbs",isStrictMode:!1})}))
5678
- define("ember-wormhole/utils/dom",["exports","@ember/application"],(function(e,t){"use strict"
5680
+ e.default=(0,t.createTemplateFactory)({id:"AZTawDXE",block:'[[[1,[28,[35,0],[[30,0,["_wormholeHeadNode"]]],null]],[18,1,null],[1,[28,[35,0],[[30,0,["_wormholeTailNode"]]],null]]],["&default"],false,["unbound","yield"]]',moduleName:"ember-wormhole/templates/components/ember-wormhole.hbs",isStrictMode:!1})})),define("ember-wormhole/utils/dom",["exports","@ember/application"],(function(e,t){"use strict"
5679
5681
  function r(e){let t=[],r=e.firstChild
5680
5682
  for(;r;)t.push(r),r=r.nextSibling
5681
5683
  return t}Object.defineProperty(e,"__esModule",{value:!0}),e.findElementById=function(e,t){if(e.getElementById)return e.getElementById(t)
@@ -24,7 +24,7 @@ function emberSafeRequire(id) {
24
24
  return undefined;
25
25
  }
26
26
  }
27
- let ArrayProxy, Namespace, ActionHandler, ControllerMixin, CoreObject, Application, MutableArray, MutableEnumerable, NativeArray, Component, Observable, Evented, PromiseProxyMixin, Service, ObjectProxy, VERSION, ComputedProperty, meta, get, set, computed, EmberObject, captureRenderTree, getEnv;
27
+ let ArrayProxy, Namespace, ActionHandler, ControllerMixin, CoreObject, Application, MutableArray, MutableEnumerable, NativeArray, Component, Observable, Evented, PromiseProxyMixin, Service, ObjectProxy, VERSION, ComputedProperty, meta, get, set, computed, EmberObject, captureRenderTree, getEnv, getOwner;
28
28
  let Debug = emberSafeRequire('@ember/debug');
29
29
  let InternalsMetal = emberSafeRequire('@ember/-internals/metal');
30
30
  let InternalsRuntime = emberSafeRequire('@ember/-internals/runtime');
@@ -41,6 +41,8 @@ let GlimmerReference = emberSafeRequire('@glimmer/reference');
41
41
  let GlimmerRuntime = emberSafeRequire('@glimmer/runtime');
42
42
  let GlimmerUtil = emberSafeRequire('@glimmer/util');
43
43
  let GlimmerValidator = emberSafeRequire('@glimmer/validator');
44
+ let EmberOwner = emberSafeRequire('@ember/owner');
45
+ let EmberApplication = emberSafeRequire('@ember/application');
44
46
  let inspect = Debug?.inspect || InternalsUtils?.inspect;
45
47
  let subscribe = Instrumentation?.subscribe;
46
48
  let cacheFor = ObjectInternals?.cacheFor;
@@ -104,5 +106,10 @@ if (Ember) {
104
106
  set = emberSafeRequire('@ember/object')?.set;
105
107
  get = emberSafeRequire('@ember/object')?.get;
106
108
  }
109
+ if (EmberOwner) {
110
+ getOwner = EmberOwner.getOwner;
111
+ } else {
112
+ getOwner = EmberApplication.getOwner;
113
+ }
107
114
 
108
- export { ActionHandler, Application, ArrayProxy, Component, ComputedProperty, ControllerMixin, CoreObject, Debug, EmberDestroyable, EmberObject, Evented, GlimmerComponent, GlimmerManager, GlimmerReference, GlimmerRuntime, GlimmerUtil, GlimmerValidator, Instrumentation, InternalsMetal, InternalsRuntime, InternalsUtils, InternalsViews, MutableArray, MutableEnumerable, Namespace, NativeArray, ObjectInternals, ObjectProxy, Observable, PromiseProxyMixin, RSVP, Runloop, Service, VERSION, cacheFor, captureRenderTree, computed, emberSafeRequire, get, getEnv, guidFor, inspect, libraries, meta, set, subscribe };
115
+ export { ActionHandler, Application, ArrayProxy, Component, ComputedProperty, ControllerMixin, CoreObject, Debug, EmberDestroyable, EmberObject, Evented, GlimmerComponent, GlimmerManager, GlimmerReference, GlimmerRuntime, GlimmerUtil, GlimmerValidator, Instrumentation, InternalsMetal, InternalsRuntime, InternalsUtils, InternalsViews, MutableArray, MutableEnumerable, Namespace, NativeArray, ObjectInternals, ObjectProxy, Observable, PromiseProxyMixin, RSVP, Runloop, Service, VERSION, cacheFor, captureRenderTree, computed, emberSafeRequire, get, getEnv, getOwner, guidFor, inspect, libraries, meta, set, subscribe };
@@ -8,25 +8,7 @@
8
8
  <meta name="description" content="">
9
9
  <meta name="viewport" content="width=device-width, initial-scale=1">
10
10
 
11
- <meta name="ember-inspector/config/environment" content="%7B%22modulePrefix%22%3A%22ember-inspector%22%2C%22environment%22%3A%22production%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22hash%22%2C%22version%22%3A%224.13.1-alpha.2025.8.9%2B821b9fb%22%2C%22emberVersionsSupported%22%3A%5B%223.16.0%22%2C%22%22%5D%2C%22previousEmberVersionsSupported%22%3A%5B%220.0.0%22%2C%222.7.0%22%2C%223.4.0%22%5D%2C%22EmberENV%22%3A%7B%22EXTEND_PROTOTYPES%22%3Afalse%2C%22FEATURES%22%3A%7B%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_DEFAULT_ASYNC_OBSERVERS%22%3Atrue%2C%22_JQUERY_INTEGRATION%22%3Afalse%2C%22_NO_IMPLICIT_ROUTE_MODEL%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22name%22%3A%22ember-inspector%22%2C%22version%22%3A%224.13.1-alpha.2025.8.9%2B821b9fb%2B821b9fba%22%7D%7D" />
12
-
13
- <style type="text/css">
14
- @font-face {
15
- font-display: swap;
16
- font-family: 'Inter';
17
- font-style: normal;
18
- font-weight: 400;
19
- src: url("assets/fonts/Inter-Regular.woff2?v=3.12") format("woff2"), url("assets/fonts/Inter-Regular.woff?v=3.12") format("woff");
20
- }
21
-
22
- @font-face {
23
- font-display: swap;
24
- font-family: 'Inter';
25
- font-style: normal;
26
- font-weight: 700;
27
- src: url("assets/fonts/Inter-Bold.woff2?v=3.12") format("woff2"), url("assets/fonts/Inter-Bold.woff?v=3.12") format("woff");
28
- }
29
- </style>
11
+ <meta name="ember-inspector/config/environment" content="%7B%22modulePrefix%22%3A%22ember-inspector%22%2C%22environment%22%3A%22production%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22hash%22%2C%22version%22%3A%224.13.1-alpha.2025.9.2%2B81c8dfd%22%2C%22emberVersionsSupported%22%3A%5B%223.16.0%22%2C%22%22%5D%2C%22previousEmberVersionsSupported%22%3A%5B%220.0.0%22%2C%222.7.0%22%2C%223.4.0%22%5D%2C%22EmberENV%22%3A%7B%22EXTEND_PROTOTYPES%22%3Afalse%2C%22FEATURES%22%3A%7B%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_DEFAULT_ASYNC_OBSERVERS%22%3Atrue%2C%22_JQUERY_INTEGRATION%22%3Afalse%2C%22_NO_IMPLICIT_ROUTE_MODEL%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22name%22%3A%22ember-inspector%22%2C%22version%22%3A%224.13.1-alpha.2025.9.2%2B81c8dfd%2B81c8dfd1%22%7D%7D" />
30
12
 
31
13
  <link integrity="" rel="stylesheet" href="assets/vendor.css">
32
14
  <link integrity="" rel="stylesheet" href="assets/ember-inspector.css">
@@ -38,7 +20,7 @@
38
20
 
39
21
  <script src="assets/vendor.js"></script>
40
22
  <script src="assets/chunk.443.86a005e528b587663b78.js"></script>
41
- <script src="assets/chunk.524.46c2524da6c95db907ed.js"></script>
23
+ <script src="assets/chunk.524.c1bfb56c055e7d0fc46c.js"></script>
42
24
  <script src="assets/ember-inspector.js"></script>
43
25
 
44
26
 
@@ -3,7 +3,7 @@ import { B as BasicAdapter } from './basic-DfbgtngO.js';
3
3
  import Port from './port.js';
4
4
  import { inspect, typeOf, isComputed, getDescriptorFor } from './type-check.js';
5
5
  import { compareVersion, isInVersionSpecifier } from './version.js';
6
- import { InternalsRuntime, InternalsViews, Evented, PromiseProxyMixin, MutableArray, MutableEnumerable, NativeArray, Observable, ControllerMixin, ActionHandler, CoreObject, EmberObject, Component, VERSION, GlimmerComponent, GlimmerValidator, GlimmerReference, InternalsMetal, cacheFor, meta, ObjectProxy, ArrayProxy, Service, libraries, subscribe, captureRenderTree as captureRenderTree$1, getEnv, GlimmerRuntime, GlimmerManager, GlimmerUtil, EmberDestroyable, RSVP, Debug, Namespace, Application } from './ember.js';
6
+ import { InternalsRuntime, InternalsViews, Evented, PromiseProxyMixin, MutableArray, MutableEnumerable, NativeArray, Observable, ControllerMixin, ActionHandler, CoreObject, EmberObject, Component, VERSION, GlimmerComponent, GlimmerValidator, GlimmerReference, InternalsMetal, cacheFor, getOwner as getOwner$1, meta, ObjectProxy, ArrayProxy, Service, libraries, subscribe, captureRenderTree as captureRenderTree$1, getEnv, GlimmerRuntime, GlimmerManager, GlimmerUtil, EmberDestroyable, RSVP, Debug, Namespace, Application } from './ember.js';
7
7
  import { g as guidFor, s as setGuidPrefix } from './internals-CRmXMEzb.js';
8
8
  import { _ as _backburner, j as join, s as scheduleOnce, l as later, c as cancel, d as debounce, r as run } from './runloop-CF-Qpqgy.js';
9
9
  import ProfileNode from './profile-node.js';
@@ -157,6 +157,7 @@ function getObjectName(object) {
157
157
 
158
158
  let tagValue, tagValidate, track, tagForProperty;
159
159
  const GlimmerDebugComponent = (() => GlimmerComponent?.default)();
160
+ const OWNER_SYMBOL = '__owner__'; // can't use actual symbol because it can't be cloned
160
161
 
161
162
  // Try to use the most recent library (GlimmerValidator), else
162
163
  // fallback on the previous implementation (GlimmerReference).
@@ -492,6 +493,8 @@ let _Class$7 = class _Class extends DebugPort {
492
493
  let value;
493
494
  if (prop === null || prop === undefined) {
494
495
  value = this.sentObjects[objectId];
496
+ } else if (prop === OWNER_SYMBOL) {
497
+ value = getOwner$1(this.sentObjects[objectId]);
495
498
  } else {
496
499
  value = calculateCP(object, {
497
500
  name: prop
@@ -604,6 +607,7 @@ let _Class$7 = class _Class extends DebugPort {
604
607
  * - Bar
605
608
  * - Foo
606
609
  * - EmberObject
610
+ * - Owner (Container)
607
611
  * ```
608
612
  *
609
613
  * The "mixins" returned by this function directly represent these things too.
@@ -683,6 +687,23 @@ let _Class$7 = class _Class extends DebugPort {
683
687
  let errorsForObject = this._errorsFor[objectId] = {};
684
688
  const tracked = this.trackedTags[objectId] = this.trackedTags[objectId] || {};
685
689
  calculateCPs(object, mixinDetails, errorsForObject, expensiveProperties, tracked);
690
+ const owner = getOwner$1(object);
691
+ const ownerId = guidFor(owner);
692
+ if (owner && !mixinDetails.find(mixin => mixin.id === ownerId)) {
693
+ mixinDetails.push({
694
+ name: 'Container',
695
+ id: ownerId,
696
+ expand: false,
697
+ properties: [{
698
+ name: OWNER_SYMBOL,
699
+ value: {
700
+ inspect: `<Owner:${ownerId}>`,
701
+ type: 'type-owner',
702
+ objectId: ownerId
703
+ }
704
+ }]
705
+ });
706
+ }
686
707
  this.currentObject = {
687
708
  object,
688
709
  mixinDetails,
@@ -21,6 +21,7 @@ import {
21
21
  GlimmerComponent,
22
22
  GlimmerReference,
23
23
  GlimmerValidator,
24
+ getOwner,
24
25
  } from './utils/ember';
25
26
  import { cacheFor, guidFor } from './utils/ember/object/internals';
26
27
  import { _backburner, join } from './utils/ember/runloop';
@@ -31,6 +32,8 @@ let tagValue, tagValidate, track, tagForProperty;
31
32
 
32
33
  const GlimmerDebugComponent = (() => GlimmerComponent?.default)();
33
34
 
35
+ const OWNER_SYMBOL = '__owner__'; // can't use actual symbol because it can't be cloned
36
+
34
37
  // Try to use the most recent library (GlimmerValidator), else
35
38
  // fallback on the previous implementation (GlimmerReference).
36
39
  if (GlimmerValidator) {
@@ -491,6 +494,8 @@ export default class extends DebugPort {
491
494
 
492
495
  if (prop === null || prop === undefined) {
493
496
  value = this.sentObjects[objectId];
497
+ } else if (prop === OWNER_SYMBOL) {
498
+ value = getOwner(this.sentObjects[objectId]);
494
499
  } else {
495
500
  value = calculateCP(object, { name: prop }, {});
496
501
  }
@@ -615,6 +620,7 @@ export default class extends DebugPort {
615
620
  * - Bar
616
621
  * - Foo
617
622
  * - EmberObject
623
+ * - Owner (Container)
618
624
  * ```
619
625
  *
620
626
  * The "mixins" returned by this function directly represent these things too.
@@ -734,6 +740,27 @@ export default class extends DebugPort {
734
740
  tracked,
735
741
  );
736
742
 
743
+ const owner = getOwner(object);
744
+ const ownerId = guidFor(owner);
745
+
746
+ if (owner && !mixinDetails.find((mixin) => mixin.id === ownerId)) {
747
+ mixinDetails.push({
748
+ name: 'Container',
749
+ id: ownerId,
750
+ expand: false,
751
+ properties: [
752
+ {
753
+ name: OWNER_SYMBOL,
754
+ value: {
755
+ inspect: `<Owner:${ownerId}>`,
756
+ type: 'type-owner',
757
+ objectId: ownerId,
758
+ },
759
+ },
760
+ ],
761
+ });
762
+ }
763
+
737
764
  this.currentObject = { object, mixinDetails, objectId };
738
765
 
739
766
  let errors = errorsToSend(errorsForObject);
@@ -1284,6 +1311,7 @@ function calculateCP(object, item, errorsForObject) {
1284
1311
  if (object instanceof ArrayProxy && property == parseInt(property)) {
1285
1312
  return object.at(property);
1286
1313
  }
1314
+
1287
1315
  return item.isGetter || property.includes?.('.')
1288
1316
  ? object[property]
1289
1317
  : object.get?.(property) || object[property]; // need to use `get` to be able to detect tracked props
@@ -52,7 +52,8 @@ let ArrayProxy,
52
52
  computed,
53
53
  EmberObject,
54
54
  captureRenderTree,
55
- getEnv;
55
+ getEnv,
56
+ getOwner;
56
57
 
57
58
  let Debug = emberSafeRequire('@ember/debug');
58
59
  let InternalsMetal = emberSafeRequire('@ember/-internals/metal');
@@ -72,6 +73,8 @@ let GlimmerReference = emberSafeRequire('@glimmer/reference');
72
73
  let GlimmerRuntime = emberSafeRequire('@glimmer/runtime');
73
74
  let GlimmerUtil = emberSafeRequire('@glimmer/util');
74
75
  let GlimmerValidator = emberSafeRequire('@glimmer/validator');
76
+ let EmberOwner = emberSafeRequire('@ember/owner');
77
+ let EmberApplication = emberSafeRequire('@ember/application');
75
78
 
76
79
  let inspect = Debug?.inspect || InternalsUtils?.inspect;
77
80
  let subscribe = Instrumentation?.subscribe;
@@ -142,6 +145,12 @@ if (Ember) {
142
145
  get = emberSafeRequire('@ember/object')?.get;
143
146
  }
144
147
 
148
+ if (EmberOwner) {
149
+ getOwner = EmberOwner.getOwner;
150
+ } else {
151
+ getOwner = EmberApplication.getOwner;
152
+ }
153
+
145
154
  export {
146
155
  Runloop,
147
156
  Debug,
@@ -188,4 +197,5 @@ export {
188
197
  GlimmerRuntime,
189
198
  GlimmerUtil,
190
199
  GlimmerValidator,
200
+ getOwner,
191
201
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ember-inspector",
3
- "version": "4.13.1-alpha.2025.8.9+821b9fb",
3
+ "version": "4.13.1-alpha.2025.9.2+81c8dfd",
4
4
  "description": "Extends developer tools to allow you to better inspect your Ember.js apps.",
5
5
  "repository": "https://github.com/emberjs/ember-inspector",
6
6
  "license": "MIT",
@@ -0,0 +1,9 @@
1
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path class="svg-stroke" d="M14.5 1.5H1.5C0.947715 1.5 0.5 1.94772 0.5 2.5V13.5C0.5 14.0523 0.947715 14.5 1.5 14.5H14.5C15.0523 14.5 15.5 14.0523 15.5 13.5V2.5C15.5 1.94772 15.0523 1.5 14.5 1.5Z" />
3
+ <g transform="matrix(-1,0,0,1,16,0)">
4
+ <path class="svg-stroke" d="M6.5 2V14" />
5
+ <path class="svg-stroke" d="M5 4L2 4" />
6
+ <path class="svg-stroke" d="M5 6L2 6" />
7
+ <path class="svg-stroke" d="M5 8L2 8" />
8
+ </g>
9
+ </svg>
@@ -2,7 +2,7 @@
2
2
  "manifest_version": 3,
3
3
  "name": "Ember Inspector (Nightly)",
4
4
  "description": "Tool for debugging Ember applications.",
5
- "version": "2025.8.9",
5
+ "version": "2025.9.2",
6
6
  "icons": {
7
7
  "16": "{{PANE_ROOT}}/assets/images/icon16.png",
8
8
  "38": "{{PANE_ROOT}}/assets/images/icon38.png",
@@ -74,5 +74,5 @@
74
74
  ]
75
75
  }
76
76
  ],
77
- "version_name": "4.13.1 (nightly build 2025.8.9 / 821b9fb)"
77
+ "version_name": "4.13.1 (nightly build 2025.9.2 / 81c8dfd)"
78
78
  }
@@ -23,6 +23,7 @@ import EmberDebug from 'ember-debug/main';
23
23
  import setupEmberDebugTest from '../helpers/setup-ember-debug-test';
24
24
  import EmberRoute from '@ember/routing/route';
25
25
  import Controller from '@ember/controller';
26
+ import { setOwner } from '@ember/application';
26
27
 
27
28
  const GlimmerComponent = (function () {
28
29
  try {
@@ -1224,6 +1225,59 @@ module('Ember Debug - Object Inspector', function (hooks) {
1224
1225
  'inspector: updateProperty',
1225
1226
  ]);
1226
1227
  });
1228
+
1229
+ test('Inspected objects pass along their owner they have one', async function (assert) {
1230
+ class Owner {}
1231
+ class Foo {
1232
+ bar = 'baz';
1233
+ }
1234
+
1235
+ let owner = new Owner();
1236
+ let inspected = new Foo();
1237
+ let message = await inspectObject(inspected);
1238
+ let ownerId = guidFor(owner);
1239
+
1240
+ assert.false(
1241
+ message.details.some(({ name }) => name === 'Container'),
1242
+ "Objects without an owner don't report an undefined owner in their last details object",
1243
+ );
1244
+ assert.strictEqual(message.details.length, 2);
1245
+
1246
+ setOwner(inspected, owner);
1247
+
1248
+ message = await inspectObject(inspected);
1249
+
1250
+ assert.strictEqual(
1251
+ message.details.length,
1252
+ 3,
1253
+ 'Object with owner have an additional details object',
1254
+ );
1255
+
1256
+ assert.strictEqual(
1257
+ message.details.filter(({ name }) => name === 'Container').length,
1258
+ 1,
1259
+ 'Objects with an owner have exactly one container item in their details',
1260
+ );
1261
+ assert.deepEqual(
1262
+ message.details.at(-1),
1263
+ {
1264
+ id: ownerId,
1265
+ name: 'Container',
1266
+ expand: false,
1267
+ properties: [
1268
+ {
1269
+ name: '__owner__',
1270
+ value: {
1271
+ inspect: `<Owner:${ownerId}>`,
1272
+ objectId: ownerId,
1273
+ type: 'type-owner',
1274
+ },
1275
+ },
1276
+ ],
1277
+ },
1278
+ 'the container is the last mixin in the list',
1279
+ );
1280
+ });
1227
1281
  }
1228
1282
 
1229
1283
  // @glimmer/component 1.0 doesn't seem to support 3.4, even though it has the manager API
Binary file