vite-plugin-vue-devtools 1.0.0-beta.2 → 1.0.0-beta.4

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 (45) hide show
  1. package/README.md +6 -0
  2. package/dist/client/assets/{Icon.vue_vue_type_script_setup_true_lang-5b8e75b9.js → Icon.vue_vue_type_script_setup_true_lang-4a8fe583.js} +1 -1
  3. package/dist/client/assets/{IconButton.vue_vue_type_script_setup_true_lang-1af9c374.js → IconButton.vue_vue_type_script_setup_true_lang-7533112d.js} +2 -2
  4. package/dist/client/assets/{IconTitle.vue_vue_type_script_setup_true_lang-4fc5b6ac.js → IconTitle.vue_vue_type_script_setup_true_lang-bdc080e4.js} +1 -1
  5. package/dist/client/assets/{IframeView.vue_vue_type_script_setup_true_lang-297e573e.js → IframeView.vue_vue_type_script_setup_true_lang-77dbdc62.js} +1 -1
  6. package/dist/client/assets/{PanelGrids-15f9a979.js → PanelGrids-3cdf73ad.js} +1 -1
  7. package/dist/client/assets/{SectionBlock-22f38034.js → SectionBlock-0fb75671.js} +3 -3
  8. package/dist/client/assets/{StateFields.vue_vue_type_script_setup_true_lang-eaba3733.js → StateFields.vue_vue_type_script_setup_true_lang-65d71ce4.js} +4 -4
  9. package/dist/client/assets/{Switch.vue_vue_type_script_setup_true_lang-a9a3bfb2.js → Switch.vue_vue_type_script_setup_true_lang-3983cd12.js} +2 -2
  10. package/dist/client/assets/{TextInput.vue_vue_type_script_setup_true_lang-9ca4104f.js → TextInput.vue_vue_type_script_setup_true_lang-40607e18.js} +2 -2
  11. package/dist/client/assets/{__eyedropper-e3f5ba7f.js → __eyedropper-ba9a76be.js} +4 -4
  12. package/dist/client/assets/{_commonjsHelpers-d60b99f1.js → _commonjsHelpers-7e83dbf2.js} +1 -4
  13. package/dist/client/assets/{assets-cef4559f.js → assets-1c2e5083.js} +94 -42
  14. package/dist/client/assets/{component-docs-9c6b3cc7.js → component-docs-57fca81e.js} +4 -4
  15. package/dist/client/assets/{components-50e17a38.js → components-b8f121d9.js} +8 -8
  16. package/dist/client/assets/{data-1539e705.js → data-4774a5dd.js} +2 -2
  17. package/dist/client/assets/{dayjs.min-3c1187ae.js → dayjs.min-ff0bd3aa.js} +1 -1
  18. package/dist/client/assets/{documentations-795a4925.js → documentations-f47e8527.js} +2 -2
  19. package/dist/client/assets/{graph-f6be4c87.js → graph-128136c1.js} +4 -4
  20. package/dist/client/assets/{index-ef144caa.js → index-5266a399.js} +1 -1
  21. package/dist/client/assets/{index-55dde797.js → index-6b2b8b6a.js} +19 -15
  22. package/dist/client/assets/index-f4f0a93b.css +480 -0
  23. package/dist/client/assets/{inspect-02ab40c2.js → inspect-d185c0d8.js} +2 -2
  24. package/dist/client/assets/{npm-729d97d0.js → npm-760dcb8c.js} +9 -8
  25. package/dist/client/assets/{overview-6ed55b17.js → overview-8f06d8d8.js} +4 -4
  26. package/dist/client/assets/{pages-2efdff81.js → pages-2ad456d4.js} +5 -5
  27. package/dist/client/assets/{pinia-99843507.js → pinia-1f4baab5.js} +6 -6
  28. package/dist/client/assets/rerender-trace-a8d6a8df.css +14 -0
  29. package/dist/client/assets/{rerender-trace-a1fc81e7.js → rerender-trace-e2a70cde.js} +102 -37
  30. package/dist/client/assets/{routes-56bbe197.js → routes-cc654c70.js} +7 -7
  31. package/dist/client/assets/{settings-6ac3fbc1.js → settings-0c6c179d.js} +7 -7
  32. package/dist/client/assets/{splitpanes.es-ca653775.js → splitpanes.es-16f3d333.js} +1 -1
  33. package/dist/client/assets/{timeline-d5f5f884.js → timeline-252da334.js} +9 -9
  34. package/dist/client/index.html +2 -2
  35. package/dist/vite.cjs +16 -10
  36. package/dist/vite.d.ts +5 -0
  37. package/dist/vite.mjs +15 -9
  38. package/package.json +5 -5
  39. package/src/views/ComponentInspector.vue +1 -0
  40. package/src/views/Main.vue +7 -1
  41. package/src/views/RerenderIndicator.vue +37 -0
  42. package/src/views/composables.ts +43 -1
  43. package/src/views/utils.ts +13 -0
  44. package/dist/client/assets/index-b16c49d4.css +0 -475
  45. package/dist/client/assets/rerender-trace-6c5229c1.css +0 -14
package/README.md CHANGED
@@ -140,6 +140,12 @@ interface VitePluginVueDevToolsOptions {
140
140
  * }
141
141
  */
142
142
  analyze?: Partial<AnalyzeOptions>
143
+
144
+ /**
145
+ * Customize openInEditor host (e.g. http://localhost:3000)
146
+ * @default false
147
+ */
148
+ openInEditorHost?: string | false
143
149
  }
144
150
  ```
145
151
 
@@ -1,4 +1,4 @@
1
- import { v as defineComponent, o as openBlock, e as createElementBlock, q as normalizeClass } from './index-55dde797.js';
1
+ import { v as defineComponent, o as openBlock, e as createElementBlock, q as normalizeClass } from './index-6b2b8b6a.js';
2
2
 
3
3
  const _sfc_main = /* @__PURE__ */ defineComponent({
4
4
  __name: "Icon",
@@ -1,5 +1,5 @@
1
- import { _ as _sfc_main$1 } from './Icon.vue_vue_type_script_setup_true_lang-5b8e75b9.js';
2
- import { v as defineComponent, o as openBlock, c as createBlock, h as withCtx, u as createVNode, k as mergeProps, j as resolveDynamicComponent } from './index-55dde797.js';
1
+ import { _ as _sfc_main$1 } from './Icon.vue_vue_type_script_setup_true_lang-4a8fe583.js';
2
+ import { v as defineComponent, o as openBlock, c as createBlock, h as withCtx, u as createVNode, k as mergeProps, j as resolveDynamicComponent } from './index-6b2b8b6a.js';
3
3
 
4
4
  const _sfc_main = /* @__PURE__ */ defineComponent({
5
5
  __name: "IconButton",
@@ -1,4 +1,4 @@
1
- import { v as defineComponent, o as openBlock, e as createElementBlock, q as normalizeClass, g as createCommentVNode, f as renderSlot, x as createBaseVNode, y as toDisplayString } from './index-55dde797.js';
1
+ import { v as defineComponent, o as openBlock, e as createElementBlock, q as normalizeClass, g as createCommentVNode, f as renderSlot, x as createBaseVNode, y as toDisplayString } from './index-6b2b8b6a.js';
2
2
 
3
3
  const _hoisted_1 = {
4
4
  flex: "~ gap-3",
@@ -1,4 +1,4 @@
1
- import { v as defineComponent, cp as useColorMode, a$ as ref, a1 as computed, aZ as reactive, cq as useElementBounding, aP as onMounted, n as nextTick, bz as watchEffect, aU as onUnmounted, o as openBlock, e as createElementBlock, z as unref, g as createCommentVNode, x as createBaseVNode } from './index-55dde797.js';
1
+ import { v as defineComponent, cp as useColorMode, a$ as ref, a1 as computed, aZ as reactive, cq as useElementBounding, aP as onMounted, n as nextTick, bz as watchEffect, aU as onUnmounted, o as openBlock, e as createElementBlock, z as unref, g as createCommentVNode, x as createBaseVNode } from './index-6b2b8b6a.js';
2
2
 
3
3
  const _hoisted_1 = {
4
4
  key: 0,
@@ -1,4 +1,4 @@
1
- import { bJ as _export_sfc, o as openBlock, e as createElementBlock, f as renderSlot } from './index-55dde797.js';
1
+ import { bJ as _export_sfc, o as openBlock, e as createElementBlock, f as renderSlot } from './index-6b2b8b6a.js';
2
2
 
3
3
  /* unplugin-vue-components disabled */const _sfc_main = {};
4
4
 
@@ -1,6 +1,6 @@
1
- import { _ as _sfc_main$1 } from './IconTitle.vue_vue_type_script_setup_true_lang-4fc5b6ac.js';
2
- import { _ as _sfc_main$2 } from './Icon.vue_vue_type_script_setup_true_lang-5b8e75b9.js';
3
- import { v as defineComponent, bK as useVModel, b as resolveDirective, o as openBlock, e as createElementBlock, x as createBaseVNode, q as normalizeClass, u as createVNode, h as withCtx, f as renderSlot, g as createCommentVNode, c as createBlock, z as unref, d as withDirectives, F as Fragment, a9 as createTextVNode, y as toDisplayString, p as pushScopeId, a as popScopeId, bJ as _export_sfc } from './index-55dde797.js';
1
+ import { _ as _sfc_main$1 } from './IconTitle.vue_vue_type_script_setup_true_lang-bdc080e4.js';
2
+ import { _ as _sfc_main$2 } from './Icon.vue_vue_type_script_setup_true_lang-4a8fe583.js';
3
+ import { v as defineComponent, bK as useVModel, b as resolveDirective, o as openBlock, e as createElementBlock, x as createBaseVNode, q as normalizeClass, u as createVNode, h as withCtx, f as renderSlot, g as createCommentVNode, c as createBlock, z as unref, d as withDirectives, F as Fragment, a9 as createTextVNode, y as toDisplayString, p as pushScopeId, a as popScopeId, bJ as _export_sfc } from './index-6b2b8b6a.js';
4
4
 
5
5
  const _withScopeId = (n) => (pushScopeId("data-v-e966339e"), n = n(), popScopeId(), n);
6
6
  const _hoisted_1 = ["open"];
@@ -1,7 +1,7 @@
1
- import { _ as _sfc_main$3 } from './Icon.vue_vue_type_script_setup_true_lang-5b8e75b9.js';
2
- import { v as defineComponent, o as openBlock, c as createBlock, q as normalizeClass, aC as isRef, bd as toRaw, a1 as computed, cu as useCopy, r as resolveComponent, e as createElementBlock, i as renderList, z as unref, cv as nanoid, x as createBaseVNode, y as toDisplayString, g as createCommentVNode, F as Fragment, a$ as ref, cw as useNotification, u as createVNode, bG as withModifiers, d as withDirectives, bv as vShow } from './index-55dde797.js';
3
- import { a as isComputed, b as isArray, c as isMap, d as isSet, e as isRegExp, t as toRawType, f as isPlainObject, g as escape } from './index-ef144caa.js';
4
- import { _ as _sfc_main$4 } from './IconButton.vue_vue_type_script_setup_true_lang-1af9c374.js';
1
+ import { _ as _sfc_main$3 } from './Icon.vue_vue_type_script_setup_true_lang-4a8fe583.js';
2
+ import { v as defineComponent, o as openBlock, c as createBlock, q as normalizeClass, aC as isRef, bd as toRaw, a1 as computed, cu as useCopy, r as resolveComponent, e as createElementBlock, i as renderList, z as unref, cv as nanoid, x as createBaseVNode, y as toDisplayString, g as createCommentVNode, F as Fragment, a$ as ref, cw as useNotification, u as createVNode, bG as withModifiers, d as withDirectives, bv as vShow } from './index-6b2b8b6a.js';
3
+ import { a as isComputed, b as isArray, c as isMap, d as isSet, e as isRegExp, t as toRawType, f as isPlainObject, g as escape } from './index-5266a399.js';
4
+ import { _ as _sfc_main$4 } from './IconButton.vue_vue_type_script_setup_true_lang-7533112d.js';
5
5
 
6
6
  const _sfc_main$2 = /* @__PURE__ */ defineComponent({
7
7
  __name: "ExpandIcon",
@@ -1,5 +1,5 @@
1
- import { _ as _sfc_main$2 } from './Icon.vue_vue_type_script_setup_true_lang-5b8e75b9.js';
2
- import { v as defineComponent, bK as useVModel, o as openBlock, e as createElementBlock, f as renderSlot, d as withDirectives, bt as vModelSelect, z as unref, x as createBaseVNode, y as toDisplayString, g as createCommentVNode, aC as isRef, c as createBlock, bq as vModelCheckbox, bE as withKeys } from './index-55dde797.js';
1
+ import { _ as _sfc_main$2 } from './Icon.vue_vue_type_script_setup_true_lang-4a8fe583.js';
2
+ import { v as defineComponent, bK as useVModel, o as openBlock, e as createElementBlock, f as renderSlot, d as withDirectives, bt as vModelSelect, z as unref, x as createBaseVNode, y as toDisplayString, g as createCommentVNode, aC as isRef, c as createBlock, bq as vModelCheckbox, bE as withKeys } from './index-6b2b8b6a.js';
3
3
 
4
4
  const _hoisted_1$1 = { class: "n-text-input flex flex items-center border n-border-base rounded px-2 py-1 focus-within:n-focus-base focus-within:border-context n-bg-base" };
5
5
  const _hoisted_2$1 = ["disabled"];
@@ -1,5 +1,5 @@
1
- import { _ as _sfc_main$1 } from './Icon.vue_vue_type_script_setup_true_lang-5b8e75b9.js';
2
- import { v as defineComponent, bK as useVModel, o as openBlock, e as createElementBlock, f as renderSlot, d as withDirectives, br as vModelDynamic, z as unref, x as createBaseVNode, k as mergeProps, aC as isRef, c as createBlock, g as createCommentVNode } from './index-55dde797.js';
1
+ import { _ as _sfc_main$1 } from './Icon.vue_vue_type_script_setup_true_lang-4a8fe583.js';
2
+ import { v as defineComponent, bK as useVModel, o as openBlock, e as createElementBlock, f as renderSlot, d as withDirectives, br as vModelDynamic, z as unref, x as createBaseVNode, k as mergeProps, aC as isRef, c as createBlock, g as createCommentVNode } from './index-6b2b8b6a.js';
3
3
 
4
4
  const _hoisted_1 = { class: "n-text-input flex flex items-center border n-border-base rounded py-1 pl-1 pr-2 focus-within:n-focus-base focus-within:border-context n-bg-base" };
5
5
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -1,6 +1,6 @@
1
- import { _ as __unplugin_components_0 } from './PanelGrids-15f9a979.js';
2
- import { v as defineComponent, cD as useRouter, a$ as ref, a1 as computed, cu as useCopy, cf as useEventListener, aP as onMounted, o as openBlock, c as createBlock, h as withCtx, x as createBaseVNode, z as unref, e as createElementBlock, l as normalizeStyle, a9 as createTextVNode, y as toDisplayString, c5 as useDevToolsClient, bX as useFrameState, u as createVNode } from './index-55dde797.js';
3
- import { h as checkIsSecurityContext } from './index-ef144caa.js';
1
+ import { _ as __unplugin_components_0 } from './PanelGrids-3cdf73ad.js';
2
+ import { v as defineComponent, cD as useRouter, a$ as ref, a1 as computed, cu as useCopy, cf as useEventListener, aP as onMounted, o as openBlock, c as createBlock, h as withCtx, x as createBaseVNode, z as unref, e as createElementBlock, l as normalizeStyle, a9 as createTextVNode, y as toDisplayString, c5 as useDevToolsClient, bX as useFrameState, u as createVNode } from './index-6b2b8b6a.js';
3
+ import { h as checkIsSecurityContext } from './index-5266a399.js';
4
4
 
5
5
  const _hoisted_1 = {
6
6
  key: 0
@@ -50,7 +50,7 @@ const _sfc_main = /*#__PURE__*/defineComponent({
50
50
  const supportEyeDropper = !!window.EyeDropper;
51
51
  const isSupported = inSecurityContext && supportEyeDropper;
52
52
  async function open() {
53
- if (!isSupported) return;
53
+ if (!isSupported) return {};
54
54
  // @ts-expect-error missing types?
55
55
  const eyeDropper = new EyeDropper();
56
56
  return eyeDropper.open();
@@ -10,10 +10,7 @@ function getAugmentedNamespace(n) {
10
10
  if (typeof f == "function") {
11
11
  var a = function a () {
12
12
  if (this instanceof a) {
13
- var args = [null];
14
- args.push.apply(args, arguments);
15
- var Ctor = Function.bind.apply(f, args);
16
- return new Ctor();
13
+ return Reflect.construct(f, arguments, this.constructor);
17
14
  }
18
15
  return f.apply(this, arguments);
19
16
  };
@@ -1,11 +1,11 @@
1
- import { _ as __unplugin_components_0 } from './PanelGrids-15f9a979.js';
2
- import { v as defineComponent, a$ as ref, cx as useElementSize, cy as onClickOutside, o as openBlock, c as createBlock, h as withCtx, e as createElementBlock, u as createVNode, x as createBaseVNode, f as renderSlot, k as mergeProps, z as unref, g as createCommentVNode, P as Transition, a1 as computed, y as toDisplayString, q as normalizeClass, cz as useStyleTag, l as normalizeStyle, cA as computedAsync, cu as useCopy, cB as useTimeAgo, F as Fragment, a9 as createTextVNode, cc as rpc, c5 as useDevToolsClient, bL as _sfc_main$a, cC as onKeyDown, aC as isRef, i as renderList, _ as __unplugin_components_7 } from './index-55dde797.js';
3
- import { _ as _sfc_main$9 } from './IconButton.vue_vue_type_script_setup_true_lang-1af9c374.js';
4
- import { _ as __unplugin_components_3 } from './SectionBlock-22f38034.js';
5
- import { _ as _sfc_main$b } from './TextInput.vue_vue_type_script_setup_true_lang-9ca4104f.js';
6
- import { _ as _sfc_main$c } from './Icon.vue_vue_type_script_setup_true_lang-5b8e75b9.js';
1
+ import { _ as __unplugin_components_0 } from './PanelGrids-3cdf73ad.js';
2
+ import { v as defineComponent, a$ as ref, cx as useElementSize, cy as onClickOutside, o as openBlock, c as createBlock, h as withCtx, e as createElementBlock, u as createVNode, x as createBaseVNode, f as renderSlot, k as mergeProps, z as unref, g as createCommentVNode, P as Transition, a1 as computed, y as toDisplayString, q as normalizeClass, cz as useStyleTag, l as normalizeStyle, cA as computedAsync, cu as useCopy, cB as useTimeAgo, F as Fragment, a9 as createTextVNode, cc as rpc, c5 as useDevToolsClient, bL as _sfc_main$a, bK as useVModel, r as resolveComponent, i as renderList, aC as isRef, cC as onKeyDown, _ as __unplugin_components_7 } from './index-6b2b8b6a.js';
3
+ import { _ as _sfc_main$9 } from './IconButton.vue_vue_type_script_setup_true_lang-7533112d.js';
4
+ import { _ as _sfc_main$b } from './Icon.vue_vue_type_script_setup_true_lang-4a8fe583.js';
5
+ import { _ as __unplugin_components_3 } from './SectionBlock-0fb75671.js';
6
+ import { _ as _sfc_main$c } from './TextInput.vue_vue_type_script_setup_true_lang-40607e18.js';
7
7
  import { F as Fuse } from './fuse.esm-c317b696.js';
8
- import './IconTitle.vue_vue_type_script_setup_true_lang-4fc5b6ac.js';
8
+ import './IconTitle.vue_vue_type_script_setup_true_lang-bdc080e4.js';
9
9
 
10
10
  const _hoisted_1$7 = {
11
11
  relative: "",
@@ -719,7 +719,7 @@ const _hoisted_1$5 = {
719
719
  "object-cover": "",
720
720
  p1: ""
721
721
  };
722
- const _hoisted_2$4 = ["src"];
722
+ const _hoisted_2$3 = ["src"];
723
723
  const _hoisted_3$2 = {
724
724
  key: 2,
725
725
  "i-carbon-document": "",
@@ -752,7 +752,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
752
752
  _ctx.asset.type === "image" ? (openBlock(), createElementBlock("img", {
753
753
  key: 0,
754
754
  src: _ctx.asset.publicPath
755
- }, null, 8, _hoisted_2$4)) : _ctx.asset.type === "font" ? (openBlock(), createBlock(_component_AssetFontPreview, {
755
+ }, null, 8, _hoisted_2$3)) : _ctx.asset.type === "font" ? (openBlock(), createBlock(_component_AssetFontPreview, {
756
756
  key: _ctx.asset.publicPath,
757
757
  asset: _ctx.asset,
758
758
  "self-stretch": "",
@@ -781,7 +781,7 @@ const _hoisted_1$4 = {
781
781
  "of-hidden": "",
782
782
  p4: ""
783
783
  };
784
- const _hoisted_2$3 = /* @__PURE__ */ createBaseVNode("div", {
784
+ const _hoisted_2$2 = /* @__PURE__ */ createBaseVNode("div", {
785
785
  flex: "~ gap2",
786
786
  "mb--2": "",
787
787
  "items-center": "",
@@ -950,7 +950,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
950
950
  const _component_VDButton = _sfc_main$a;
951
951
  return openBlock(), createElementBlock("div", _hoisted_1$4, [
952
952
  unref(supportsPreview) ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
953
- _hoisted_2$3,
953
+ _hoisted_2$2,
954
954
  createBaseVNode("div", _hoisted_3$1, [
955
955
  createVNode(_component_AssetPreview, {
956
956
  "max-h-80": "",
@@ -1054,29 +1054,22 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
1054
1054
 
1055
1055
  /* Injected with object hook! */
1056
1056
 
1057
- const _hoisted_1$3 = {
1058
- flex: "~ gap-1",
1059
- "w-full": "",
1060
- "items-center": "",
1061
- hover: "bg-active",
1062
- rounded: "",
1063
- px4: "",
1064
- py2: ""
1065
- };
1066
- const _hoisted_2$2 = {
1067
- "of-hidden": "",
1068
- truncate: "",
1069
- "ws-nowrap": "",
1070
- "text-center": ""
1071
- };
1057
+ const _hoisted_1$3 = /* @__PURE__ */ createBaseVNode("div", { "x-divider": "" }, null, -1);
1072
1058
  const _sfc_main$3 = /* @__PURE__ */ defineComponent({
1073
1059
  __name: "AssetListItem",
1074
1060
  props: {
1075
- asset: {}
1061
+ item: {},
1062
+ index: { default: 0 },
1063
+ modelValue: {}
1076
1064
  },
1077
- setup(__props) {
1065
+ setup(__props, { emit }) {
1078
1066
  const props = __props;
1067
+ const model = useVModel(props, "modelValue", emit, { passive: true });
1068
+ const isCollection = computed(() => props.item?.children?.length);
1069
+ const open = ref(true);
1079
1070
  const icon = computed(() => {
1071
+ if (isCollection.value)
1072
+ return "i-carbon-folder";
1080
1073
  const assets = {
1081
1074
  image: "i-carbon-image",
1082
1075
  video: "i-carbon-video",
@@ -1085,14 +1078,52 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
1085
1078
  text: "i-carbon-document",
1086
1079
  json: "i-carbon-json"
1087
1080
  };
1088
- return assets[props.asset.type] ?? "i-carbon-document-blank";
1081
+ return assets[props.item.type] ?? "i-carbon-document-blank";
1089
1082
  });
1090
1083
  return (_ctx, _cache) => {
1091
- return openBlock(), createElementBlock("button", _hoisted_1$3, [
1092
- createBaseVNode("div", {
1093
- class: normalizeClass(unref(icon))
1094
- }, null, 2),
1095
- createBaseVNode("div", _hoisted_2$2, toDisplayString(_ctx.asset.path), 1)
1084
+ const _component_VDIcon = _sfc_main$b;
1085
+ const _component_AssetListItem = resolveComponent("AssetListItem", true);
1086
+ return openBlock(), createElementBlock("div", null, [
1087
+ createBaseVNode("button", {
1088
+ flex: "~ gap-2",
1089
+ "w-full": "",
1090
+ "items-center": "",
1091
+ hover: "bg-active",
1092
+ px4: "",
1093
+ py1: "",
1094
+ style: normalizeStyle({ paddingLeft: `calc(1rem + ${_ctx.index * 1.5}em)` }),
1095
+ class: normalizeClass({ "bg-active": !unref(isCollection) && unref(model)?.filePath === _ctx.item?.filePath }),
1096
+ onClick: _cache[0] || (_cache[0] = ($event) => unref(isCollection) ? open.value = !unref(open) : model.value = _ctx.item)
1097
+ }, [
1098
+ createBaseVNode("div", {
1099
+ class: normalizeClass(unref(icon))
1100
+ }, null, 2),
1101
+ createBaseVNode("span", {
1102
+ class: normalizeClass({ "flex items-center": unref(isCollection) }),
1103
+ "flex-auto": "",
1104
+ "text-start": "",
1105
+ "text-sm": "",
1106
+ "font-mono": ""
1107
+ }, toDisplayString(_ctx.item.path), 3),
1108
+ unref(isCollection) ? (openBlock(), createBlock(_component_VDIcon, {
1109
+ key: 0,
1110
+ icon: "carbon:chevron-right",
1111
+ "transform-rotate": unref(open) ? 90 : 0,
1112
+ transition: ""
1113
+ }, null, 8, ["transform-rotate"])) : createCommentVNode("", true)
1114
+ ], 6),
1115
+ _hoisted_1$3,
1116
+ unref(open) ? renderSlot(_ctx.$slots, "default", { key: 0 }, () => [
1117
+ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.item?.children, (subItem) => {
1118
+ return openBlock(), createBlock(_component_AssetListItem, {
1119
+ key: subItem.filepath,
1120
+ modelValue: unref(model),
1121
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => isRef(model) ? model.value = $event : null),
1122
+ item: subItem,
1123
+ index: _ctx.index + 1
1124
+ }, null, 8, ["modelValue", "item", "index"]);
1125
+ }), 128))
1126
+ ]) : createCommentVNode("", true)
1096
1127
  ]);
1097
1128
  };
1098
1129
  }
@@ -1166,7 +1197,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
1166
1197
  emit("update:search", event.target.value);
1167
1198
  }
1168
1199
  return (_ctx, _cache) => {
1169
- const _component_VDTextInput = _sfc_main$b;
1200
+ const _component_VDTextInput = _sfc_main$c;
1170
1201
  return openBlock(), createElementBlock("div", {
1171
1202
  flex: "~ col gap2",
1172
1203
  border: "b base",
@@ -1252,6 +1283,26 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1252
1283
  }
1253
1284
  return Object.entries(result).sort(([a], [b]) => a.localeCompare(b));
1254
1285
  });
1286
+ const byTree = computed(() => {
1287
+ const root = { path: "public", children: [] };
1288
+ const addToTree = (node, pathParts, file) => {
1289
+ const [currentPart, ...remainingParts] = pathParts;
1290
+ let child = node.children.find((child2) => child2.path === currentPart);
1291
+ if (!child) {
1292
+ child = { ...file, path: currentPart, children: [] };
1293
+ node.children.push(child);
1294
+ }
1295
+ if (remainingParts.length > 1)
1296
+ addToTree(child, remainingParts, file);
1297
+ else if (remainingParts.length === 1)
1298
+ child.children.push({ ...file, path: remainingParts[0] });
1299
+ };
1300
+ filtered.value.forEach((file) => {
1301
+ const pathParts = file.path.split("/").filter((part) => part !== "");
1302
+ addToTree(root, pathParts, file);
1303
+ });
1304
+ return root.children;
1305
+ });
1255
1306
  const selected = ref();
1256
1307
  const view = ref("grid");
1257
1308
  function toggleView() {
@@ -1262,7 +1313,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1262
1313
  });
1263
1314
  const navbar = ref();
1264
1315
  return (_ctx, _cache) => {
1265
- const _component_VDIcon = _sfc_main$c;
1316
+ const _component_VDIcon = _sfc_main$b;
1266
1317
  const _component_Navbar = _sfc_main$1;
1267
1318
  const _component_AssetGridItem = _sfc_main$2;
1268
1319
  const _component_VDSectionBlock = __unplugin_components_3;
@@ -1336,12 +1387,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1336
1387
  }), 128))
1337
1388
  ]))
1338
1389
  ], 64)) : (openBlock(), createElementBlock("div", _hoisted_7, [
1339
- (openBlock(true), createElementBlock(Fragment, null, renderList(unref(filtered), (a) => {
1390
+ (openBlock(true), createElementBlock(Fragment, null, renderList(unref(byTree), (item, key) => {
1340
1391
  return openBlock(), createBlock(_component_AssetListItem, {
1341
- key: a.path,
1342
- asset: a,
1343
- onClick: ($event) => selected.value = a
1344
- }, null, 8, ["asset", "onClick"]);
1392
+ key,
1393
+ modelValue: unref(selected),
1394
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => isRef(selected) ? selected.value = $event : null),
1395
+ item
1396
+ }, null, 8, ["modelValue", "item"]);
1345
1397
  }), 128))
1346
1398
  ])),
1347
1399
  createVNode(_component_DrawerRight, {
@@ -1349,7 +1401,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1349
1401
  "auto-close": "",
1350
1402
  "w-120": "",
1351
1403
  navbar: unref(navbar),
1352
- onClose: _cache[1] || (_cache[1] = ($event) => selected.value = void 0)
1404
+ onClose: _cache[2] || (_cache[2] = ($event) => selected.value = void 0)
1353
1405
  }, {
1354
1406
  default: withCtx(() => [
1355
1407
  unref(selected) ? (openBlock(), createBlock(_component_AssetDetails, {