{"version":3,"file":"VDataTableGroupHeaderRow.mjs","names":["VBtn","VCheckboxBtn","VDataTableColumn","useHeaders","useSelection","useGroupBy","computed","genericComponent","VDataTableGroupHeaderRow","name","props","item","type","Object","required","setup","slots","isGroupOpen","toggleGroup","extractRows","isSelected","isSomeSelected","select","columns","rows","depth","value","map","column","key","icon","onClick","count","length","modelValue","indeterminate","selectGroup","v"],"sources":["../../../src/labs/VDataTable/VDataTableGroupHeaderRow.tsx"],"sourcesContent":["// Components\nimport { VBtn } from '@/components/VBtn'\nimport { VCheckboxBtn } from '@/components/VCheckbox'\nimport { VDataTableColumn } from './VDataTableColumn'\n\n// Composables\nimport { useHeaders } from './composables/headers'\nimport { useSelection } from './composables/select'\nimport { useGroupBy } from './composables/group'\n\n// Utilities\nimport { computed } from 'vue'\nimport { genericComponent } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { GroupHeaderItem } from './types'\n\ntype VDataTableGroupHeaderRowSlots = {\n  'data-table-group': [{ item: GroupHeaderItem, count: number, props: Record<string, unknown> }]\n  'data-table-select': [{ props: Record<string, unknown> }]\n}\n\nexport const VDataTableGroupHeaderRow = genericComponent<VDataTableGroupHeaderRowSlots>()({\n  name: 'VDataTableGroupHeaderRow',\n\n  props: {\n    item: {\n      type: Object as PropType<GroupHeaderItem>,\n      required: true,\n    },\n  },\n\n  setup (props, { slots }) {\n    const { isGroupOpen, toggleGroup, extractRows } = useGroupBy()\n    const { isSelected, isSomeSelected, select } = useSelection()\n    const { columns } = useHeaders()\n\n    const rows = computed(() => {\n      return extractRows([props.item])\n    })\n\n    return () => (\n      <tr\n        class=\"v-data-table-group-header-row\"\n        style={{\n          '--v-data-table-group-header-row-depth': props.item.depth,\n        }}\n      >\n        { columns.value.map(column => {\n          if (column.key === 'data-table-group') {\n            const icon = isGroupOpen(props.item) ? '$expand' : '$next'\n            const onClick = () => toggleGroup(props.item)\n\n            return slots['data-table-group']?.({ item: props.item, count: rows.value.length, props: { icon, onClick } }) ?? (\n              <VDataTableColumn class=\"v-data-table-group-header-row__column\">\n                <VBtn\n                  size=\"small\"\n                  variant=\"text\"\n                  icon={ icon }\n                  onClick={ onClick }\n                />\n                <span>{ props.item.value }</span>\n                <span>({ rows.value.length })</span>\n              </VDataTableColumn>\n            )\n          }\n\n          if (column.key === 'data-table-select') {\n            const modelValue = isSelected(rows.value)\n            const indeterminate = isSomeSelected(rows.value) && !modelValue\n            const selectGroup = (v: boolean) => select(rows.value, v)\n            return slots['data-table-select']?.({ props: { modelValue, indeterminate, 'onUpdate:modelValue': selectGroup } }) ?? (\n              <td>\n                <VCheckboxBtn\n                  modelValue={ modelValue }\n                  indeterminate={ indeterminate }\n                  onUpdate:modelValue={ selectGroup }\n                />\n              </td>\n            )\n          }\n\n          return <td />\n        })}\n      </tr>\n    )\n  },\n})\n"],"mappings":";AAAA;AAAA,SACSA,IAAI;AAAA,SACJC,YAAY;AAAA,SACZC,gBAAgB,kCAEzB;AAAA,SACSC,UAAU;AAAA,SACVC,YAAY;AAAA,SACZC,UAAU,mCAEnB;AACA,SAASC,QAAQ,QAAQ,KAAK;AAAA,SACrBC,gBAAgB,gCAEzB;AASA,OAAO,MAAMC,wBAAwB,GAAGD,gBAAgB,EAAiC,CAAC;EACxFE,IAAI,EAAE,0BAA0B;EAEhCC,KAAK,EAAE;IACLC,IAAI,EAAE;MACJC,IAAI,EAAEC,MAAmC;MACzCC,QAAQ,EAAE;IACZ;EACF,CAAC;EAEDC,KAAK,CAAEL,KAAK,QAAa;IAAA,IAAX;MAAEM;IAAM,CAAC;IACrB,MAAM;MAAEC,WAAW;MAAEC,WAAW;MAAEC;IAAY,CAAC,GAAGd,UAAU,EAAE;IAC9D,MAAM;MAAEe,UAAU;MAAEC,cAAc;MAAEC;IAAO,CAAC,GAAGlB,YAAY,EAAE;IAC7D,MAAM;MAAEmB;IAAQ,CAAC,GAAGpB,UAAU,EAAE;IAEhC,MAAMqB,IAAI,GAAGlB,QAAQ,CAAC,MAAM;MAC1B,OAAOa,WAAW,CAAC,CAACT,KAAK,CAACC,IAAI,CAAC,CAAC;IAClC,CAAC,CAAC;IAEF,OAAO;MAAA,SAEG,+BAA+B;MAAA,SAC9B;QACL,uCAAuC,EAAED,KAAK,CAACC,IAAI,CAACc;MACtD;IAAC,IAECF,OAAO,CAACG,KAAK,CAACC,GAAG,CAACC,MAAM,IAAI;MAC5B,IAAIA,MAAM,CAACC,GAAG,KAAK,kBAAkB,EAAE;QACrC,MAAMC,IAAI,GAAGb,WAAW,CAACP,KAAK,CAACC,IAAI,CAAC,GAAG,SAAS,GAAG,OAAO;QAC1D,MAAMoB,OAAO,GAAG,MAAMb,WAAW,CAACR,KAAK,CAACC,IAAI,CAAC;QAE7C,OAAOK,KAAK,CAAC,kBAAkB,CAAC,GAAG;UAAEL,IAAI,EAAED,KAAK,CAACC,IAAI;UAAEqB,KAAK,EAAER,IAAI,CAACE,KAAK,CAACO,MAAM;UAAEvB,KAAK,EAAE;YAAEoB,IAAI;YAAEC;UAAQ;QAAE,CAAC,CAAC;UAAA,SAClF;QAAuC;UAAA;YAAA,QAEtD,OAAO;YAAA,WACJ,MAAM;YAAA,QACPD,IAAI;YAAA,WACDC;UAAO,sCAEXrB,KAAK,CAACC,IAAI,CAACe,KAAK,uDACfF,IAAI,CAACE,KAAK,CAACO,MAAM;QAAA,EAE7B;MACH;MAEA,IAAIL,MAAM,CAACC,GAAG,KAAK,mBAAmB,EAAE;QACtC,MAAMK,UAAU,GAAGd,UAAU,CAACI,IAAI,CAACE,KAAK,CAAC;QACzC,MAAMS,aAAa,GAAGd,cAAc,CAACG,IAAI,CAACE,KAAK,CAAC,IAAI,CAACQ,UAAU;QAC/D,MAAME,WAAW,GAAIC,CAAU,IAAKf,MAAM,CAACE,IAAI,CAACE,KAAK,EAAEW,CAAC,CAAC;QACzD,OAAOrB,KAAK,CAAC,mBAAmB,CAAC,GAAG;UAAEN,KAAK,EAAE;YAAEwB,UAAU;YAAEC,aAAa;YAAE,qBAAqB,EAAEC;UAAY;QAAE,CAAC,CAAC;UAAA,cAG9FF,UAAU;UAAA,iBACPC,aAAa;UAAA,uBACPC;QAAW,UAGtC;MACH;MAEA;IACF,CAAC,CAAC,EAEL;EACH;AACF,CAAC,CAAC"}