{"version":3,"file":"VTreeview.mjs","names":["makeVTreeviewChildrenProps","VTreeviewChildren","makeVListProps","useListItems","VList","provideDefaults","makeFilterProps","useFilter","useProxiedModel","computed","provide","ref","toRef","watch","genericComponent","omit","propsFactory","useRender","VTreeviewSymbol","flatten","items","flat","arguments","length","undefined","item","push","children","makeVTreeviewProps","openAll","Boolean","search","String","filterKeys","collapseIcon","expandIcon","selectStrategy","openStrategy","slim","VTreeview","name","props","emits","val","value","setup","_ref","slots","activeColor","baseColor","color","opened","activated","selected","vListRef","flatItems","filteredItems","visibleIds","Set","flatMap","getPath","getChildren","id","path","parent","unshift","parents","get","arr","queue","slice","child","shift","immediate","ids","i","concat","VTreeviewGroup","VTreeviewItem","activeClass","density","disabled","lines","variant","listProps","filterProps","treeviewChildrenProps","_createVNode","_mergeProps","class","style","$event","default","open"],"sources":["../../../src/labs/VTreeview/VTreeview.tsx"],"sourcesContent":["// Components\nimport { makeVTreeviewChildrenProps, VTreeviewChildren } from './VTreeviewChildren'\nimport { makeVListProps, useListItems, VList } from '@/components/VList/VList'\n\n// Composables\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeFilterProps, useFilter } from '@/composables/filter'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, provide, ref, toRef, watch } from 'vue'\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport { VTreeviewSymbol } from './shared'\nimport type { VListChildrenSlots } from '@/components/VList/VListChildren'\nimport type { ListItem } from '@/composables/list-items'\nimport type { GenericProps } from '@/util'\n\nfunction flatten (items: ListItem[], flat: ListItem[] = []) {\n  for (const item of items) {\n    flat.push(item)\n    if (item.children) flatten(item.children, flat)\n  }\n  return flat\n}\n\nexport const makeVTreeviewProps = propsFactory({\n  openAll: Boolean,\n  search: String,\n\n  ...makeFilterProps({ filterKeys: ['title'] }),\n  ...makeVTreeviewChildrenProps(),\n  ...omit(makeVListProps({\n    collapseIcon: '$treeviewCollapse',\n    expandIcon: '$treeviewExpand',\n    selectStrategy: 'independent' as const,\n    openStrategy: 'multiple' as const,\n    slim: true,\n  }), ['nav']),\n}, 'VTreeview')\n\nexport const VTreeview = genericComponent<new <T>(\n  props: {\n    items?: T[]\n  },\n  slots: VListChildrenSlots<T>\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VTreeview',\n\n  props: makeVTreeviewProps(),\n\n  emits: {\n    'update:opened': (val: unknown) => true,\n    'update:activated': (val: unknown) => true,\n    'update:selected': (val: unknown) => true,\n    'click:open': (value: { id: unknown, value: boolean, path: unknown[] }) => true,\n    'click:select': (value: { id: unknown, value: boolean, path: unknown[] }) => true,\n  },\n\n  setup (props, { slots }) {\n    const { items } = useListItems(props)\n    const activeColor = toRef(props, 'activeColor')\n    const baseColor = toRef(props, 'baseColor')\n    const color = toRef(props, 'color')\n    const opened = useProxiedModel(props, 'opened')\n    const activated = useProxiedModel(props, 'activated')\n    const selected = useProxiedModel(props, 'selected')\n\n    const vListRef = ref<VList>()\n\n    const flatItems = computed(() => flatten(items.value))\n    const search = toRef(props, 'search')\n    const { filteredItems } = useFilter(props, flatItems, search)\n    const visibleIds = computed(() => {\n      if (!search.value) {\n        return null\n      }\n      return new Set(filteredItems.value.flatMap(item => {\n        return [...getPath(item.props.value), ...getChildren(item.props.value)]\n      }))\n    })\n\n    function getPath (id: unknown) {\n      const path: unknown[] = []\n      let parent: unknown = id\n      while (parent != null) {\n        path.unshift(parent)\n        parent = vListRef.value?.parents.get(parent)\n      }\n      return path\n    }\n\n    function getChildren (id: unknown) {\n      const arr: unknown[] = []\n      const queue = ((vListRef.value?.children.get(id) ?? []).slice())\n      while (queue.length) {\n        const child = queue.shift()\n        if (!child) continue\n        arr.push(child)\n        queue.push(...((vListRef.value?.children.get(child) ?? []).slice()))\n      }\n      return arr\n    }\n\n    watch(() => props.openAll, val => {\n      opened.value = val ? openAll(items.value) : []\n    }, { immediate: true })\n\n    function openAll (item: any) {\n      let ids: number[] = []\n\n      for (const i of item) {\n        if (!i.children) continue\n\n        ids.push(i.value)\n\n        if (i.children) {\n          ids = ids.concat(openAll(i.children))\n        }\n      }\n\n      return ids\n    }\n\n    provide(VTreeviewSymbol, { visibleIds })\n\n    provideDefaults({\n      VTreeviewGroup: {\n        activeColor,\n        baseColor,\n        color,\n        collapseIcon: toRef(props, 'collapseIcon'),\n        expandIcon: toRef(props, 'expandIcon'),\n      },\n      VTreeviewItem: {\n        activeClass: toRef(props, 'activeClass'),\n        activeColor,\n        baseColor,\n        color,\n        density: toRef(props, 'density'),\n        disabled: toRef(props, 'disabled'),\n        lines: toRef(props, 'lines'),\n        variant: toRef(props, 'variant'),\n      },\n    })\n\n    useRender(() => {\n      const listProps = VList.filterProps(props)\n      const treeviewChildrenProps = VTreeviewChildren.filterProps(props)\n\n      return (\n        <VList\n          ref={ vListRef }\n          { ...listProps }\n          class={[\n            'v-treeview',\n            props.class,\n          ]}\n          style={ props.style }\n          v-model:opened={ opened.value }\n          v-model:activated={ activated.value }\n          v-model:selected={ selected.value }\n        >\n          <VTreeviewChildren\n            { ...treeviewChildrenProps }\n            items={ items.value }\n            v-slots={ slots }\n          ></VTreeviewChildren>\n        </VList>\n      )\n    })\n\n    return {\n      open,\n    }\n  },\n})\n\nexport type VTreeview = InstanceType<typeof VTreeview>\n"],"mappings":"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","ignoreList":[]}