@nhtio/lucid-resourceful-vue-components 0.1.0-master-36a05f8e → 0.1.0-master-0d659775
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.
- package/{VRadioGroup-4EZRfNoO.mjs → VRadioGroup-lC_c6Ath.mjs} +2 -2
- package/{VRadioGroup-4EZRfNoO.mjs.map → VRadioGroup-lC_c6Ath.mjs.map} +1 -1
- package/{actions-Cl683OMq.mjs → actions-CXhEUJp6.mjs} +6 -6
- package/{actions-Cl683OMq.mjs.map → actions-CXhEUJp6.mjs.map} +1 -1
- package/{alert-BX9BkYd9.mjs → alert-B0j6GH3V.mjs} +6 -6
- package/{alert-BX9BkYd9.mjs.map → alert-B0j6GH3V.mjs.map} +1 -1
- package/{bigint-Cutiv42Q.mjs → bigint-DXS_rVbG.mjs} +5 -5
- package/{bigint-Cutiv42Q.mjs.map → bigint-DXS_rVbG.mjs.map} +1 -1
- package/{boolean-D6WyXCcY.mjs → boolean-J55jiDD7.mjs} +7 -7
- package/{boolean-D6WyXCcY.mjs.map → boolean-J55jiDD7.mjs.map} +1 -1
- package/{clipboard-C0t7KXsZ.mjs → clipboard-C6YTX8YB.mjs} +4 -4
- package/{clipboard-C0t7KXsZ.mjs.map → clipboard-C6YTX8YB.mjs.map} +1 -1
- package/{common-CCR70s0E.mjs → common-a_cd4SQg.mjs} +9 -9
- package/{common-CCR70s0E.mjs.map → common-a_cd4SQg.mjs.map} +1 -1
- package/components/autorefresh_controller.mjs +1 -1
- package/components/control_button.mjs +1 -1
- package/components/control_button_bar.mjs +2 -2
- package/components/control_menu.mjs +1 -1
- package/components/custom_field.mjs +1 -1
- package/components/exporter.mjs +1 -1
- package/components/fields/bigint.mjs +1 -1
- package/components/fields/boolean.mjs +1 -1
- package/components/fields/date.mjs +1 -1
- package/components/fields/date_time.mjs +1 -1
- package/components/fields/enum.mjs +1 -1
- package/components/fields/integer.mjs +1 -1
- package/components/fields/number.mjs +1 -1
- package/components/fields/string.mjs +1 -1
- package/components/fields/unsigned_integer.mjs +1 -1
- package/components/fields.mjs +9 -9
- package/components/form_with_validation.mjs +1 -1
- package/components/resourceful_alerter.mjs +1 -1
- package/components/resourceful_index.mjs +1 -1
- package/components/resourceful_record.mjs +2 -2
- package/components/resourceful_record_default_form.mjs +1 -1
- package/components/resourceful_record_form.mjs +1 -1
- package/components/sortable.mjs +1 -1
- package/components/svg_icon.mjs +1 -1
- package/components/timezone_picker.mjs +1 -1
- package/components.mjs +23 -23
- package/composables.mjs +11 -11
- package/{custom-B9c_7nfV.mjs → custom-CgyU3A_B.mjs} +4 -4
- package/{custom-B9c_7nfV.mjs.map → custom-CgyU3A_B.mjs.map} +1 -1
- package/{date-B2SWnGCI.mjs → date-B8edF8kU.mjs} +119 -72
- package/date-B8edF8kU.mjs.map +1 -0
- package/{date_time-CDwBSOoF.mjs → date_time-BNsYnH-e.mjs} +272 -187
- package/date_time-BNsYnH-e.mjs.map +1 -0
- package/{display-C5mRsn7Z.mjs → display-pfXaBUr6.mjs} +3 -3
- package/{display-C5mRsn7Z.mjs.map → display-pfXaBUr6.mjs.map} +1 -1
- package/{enum-DWYdxtym.mjs → enum-DoxJn16e.mjs} +6 -6
- package/{enum-DWYdxtym.mjs.map → enum-DoxJn16e.mjs.map} +1 -1
- package/{exceptions-Cc9ucZ7k.mjs → exceptions-BeFuVcrH.mjs} +2 -2
- package/{exceptions-Cc9ucZ7k.mjs.map → exceptions-BeFuVcrH.mjs.map} +1 -1
- package/exceptions.mjs +2 -2
- package/factories.mjs +1 -1
- package/{field_composer-BKt9bYLY.mjs → field_composer-CPqM1aSV.mjs} +3 -3
- package/{field_composer-BKt9bYLY.mjs.map → field_composer-CPqM1aSV.mjs.map} +1 -1
- package/{form-UkVPEtmH.mjs → form-BkQlevYR.mjs} +13 -13
- package/{form-UkVPEtmH.mjs.map → form-BkQlevYR.mjs.map} +1 -1
- package/{guards-DH0cjg4V.mjs → guards-D0G8CU2m.mjs} +2 -2
- package/{guards-DH0cjg4V.mjs.map → guards-D0G8CU2m.mjs.map} +1 -1
- package/guards.mjs +4 -4
- package/helpers.mjs +12 -12
- package/{http-DF04z-RO.mjs → http-C15bx-Gn.mjs} +2 -2
- package/{http-DF04z-RO.mjs.map → http-C15bx-Gn.mjs.map} +1 -1
- package/{http-I0AHP1E0.mjs → http-ChBUYgv8.mjs} +2 -2
- package/{http-I0AHP1E0.mjs.map → http-ChBUYgv8.mjs.map} +1 -1
- package/http.mjs +1 -1
- package/{index-qrLo5NeU.mjs → index-BEXQjukb.mjs} +2 -1
- package/{index-qrLo5NeU.mjs.map → index-BEXQjukb.mjs.map} +1 -1
- package/{index-CdM957SL.mjs → index-BcDX9w4T.mjs} +6 -6
- package/{index-CdM957SL.mjs.map → index-BcDX9w4T.mjs.map} +1 -1
- package/{index-DrnPA6Ix.mjs → index-CHELe70a.mjs} +5 -5
- package/{index-DrnPA6Ix.mjs.map → index-CHELe70a.mjs.map} +1 -1
- package/{index-CPEwoqSn.mjs → index-CduefDwU.mjs} +3 -3
- package/{index-CPEwoqSn.mjs.map → index-CduefDwU.mjs.map} +1 -1
- package/{index-BYW_4VLZ.mjs → index-CvhhGjZn.mjs} +3 -3
- package/{index-BYW_4VLZ.mjs.map → index-CvhhGjZn.mjs.map} +1 -1
- package/{index-BDy60Kot.mjs → index-DGWcBN5e.mjs} +10 -10
- package/{index-BDy60Kot.mjs.map → index-DGWcBN5e.mjs.map} +1 -1
- package/{index-BLHeTLWJ.mjs → index-DHoLuRuJ.mjs} +3 -3
- package/{index-BLHeTLWJ.mjs.map → index-DHoLuRuJ.mjs.map} +1 -1
- package/{index-Bv_WlNae.mjs → index-DLzoBhUb.mjs} +3 -3
- package/{index-Bv_WlNae.mjs.map → index-DLzoBhUb.mjs.map} +1 -1
- package/{index-CQL3B-1I.mjs → index-DcCK7tW-.mjs} +31 -31
- package/{index-CQL3B-1I.mjs.map → index-DcCK7tW-.mjs.map} +1 -1
- package/{index-DocX_tDZ.mjs → index-De0W4KPF.mjs} +6 -6
- package/{index-DocX_tDZ.mjs.map → index-De0W4KPF.mjs.map} +1 -1
- package/{index-CHv5OSeQ.mjs → index-M6jQfE3a.mjs} +2 -2
- package/{index-CHv5OSeQ.mjs.map → index-M6jQfE3a.mjs.map} +1 -1
- package/index.mjs +37 -37
- package/{integer-Bt_AlHXh.mjs → integer-BWdmDp7S.mjs} +2 -2
- package/{integer-Bt_AlHXh.mjs.map → integer-BWdmDp7S.mjs.map} +1 -1
- package/{ioc-kp39kvzE.mjs → ioc-Q-KAX6x1.mjs} +2 -2
- package/{ioc-kp39kvzE.mjs.map → ioc-Q-KAX6x1.mjs.map} +1 -1
- package/ioc.mjs +1 -1
- package/{number-Dm-VOsTt.mjs → number-Chf-qQs7.mjs} +6 -6
- package/number-Chf-qQs7.mjs.map +1 -0
- package/package.json +1 -1
- package/private/fields/date_time.d.ts +46 -46
- package/{props-BD6dI7C6.mjs → props-eYGYq1uo.mjs} +3 -3
- package/{props-BD6dI7C6.mjs.map → props-eYGYq1uo.mjs.map} +1 -1
- package/{props-CLREBMsk.mjs → props-fFnbtBgH.mjs} +3 -3
- package/{props-CLREBMsk.mjs.map → props-fFnbtBgH.mjs.map} +1 -1
- package/{renderers-52Fmk2vb.mjs → renderers-bwWUs06k.mjs} +13 -13
- package/{renderers-52Fmk2vb.mjs.map → renderers-bwWUs06k.mjs.map} +1 -1
- package/{string-CLObNFFq.mjs → string-D-UsgMTx.mjs} +5 -5
- package/{string-CLObNFFq.mjs.map → string-D-UsgMTx.mjs.map} +1 -1
- package/{unsigned_integer-BE8JsE5A.mjs → unsigned_integer-7R2vw_Qn.mjs} +3 -3
- package/{unsigned_integer-BE8JsE5A.mjs.map → unsigned_integer-7R2vw_Qn.mjs.map} +1 -1
- package/{utils-CtD3mjq0.mjs → utils-DehfJ8pT.mjs} +2 -2
- package/{utils-CtD3mjq0.mjs.map → utils-DehfJ8pT.mjs.map} +1 -1
- package/{validation-AYuAZgi0.mjs → validation-41gHTtyY.mjs} +6 -6
- package/{validation-AYuAZgi0.mjs.map → validation-41gHTtyY.mjs.map} +1 -1
- package/date-B2SWnGCI.mjs.map +0 -1
- package/date_time-CDwBSOoF.mjs.map +0 -1
- package/number-Dm-VOsTt.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-CQL3B-1I.mjs","sources":["../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/util/events.js","../node_modules/.pnpm/p-map@7.0.4/node_modules/p-map/index.js","../src/private/exporter/constants.ts","../node_modules/.pnpm/truncate-utf8-bytes@1.0.2/node_modules/truncate-utf8-bytes/lib/truncate.js","../node_modules/.pnpm/truncate-utf8-bytes@1.0.2/node_modules/truncate-utf8-bytes/index.js","../node_modules/.pnpm/sanitize-filename@1.6.3/node_modules/sanitize-filename/index.js","../src/private/exporter/utils.ts","../src/private/exporter/schemas.ts","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VNavigationDrawer/sticky.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/composables/touch.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VNavigationDrawer/touch.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VNavigationDrawer/VNavigationDrawer.js","../src/private/resourceful-index/partials/_columns_controls.ts","../src/private/exporter/index.ts","../src/private/resourceful-index/partials/_download.ts","../src/private/resourceful-index/partials/_bulk_edit.ts","../src/private/resourceful-index/partials/_tooltip.ts","../src/private/resourceful-index/partials/_record_totals.ts","../src/private/resourceful-index/partials/_sorts_controls.ts","../src/private/resourceful-index/partials/_bulk_action_progress.ts","../src/private/filtration/common.ts","../src/private/filtration/empty_state.ts","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VFab/VFab.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VSpeedDial/VSpeedDial.js","../src/private/filtration/schema.ts","../src/private/filtration/filter_group_condition_element.ts","../src/private/resourceful-index/partials/_filters_controls.ts","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/composables/refs.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VPagination/VPagination.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/composables/paginate.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/VDataTableFooter.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/VDataTableColumn.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/composables/headers.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/composables/select.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/composables/sort.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/VDataTableHeaders.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/composables/group.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/VDataTableGroupHeaderRow.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/composables/expand.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/VDataTableRow.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/VDataTableRows.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VTable/VTable.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/composables/items.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/composables/options.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/VDataTable.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/VDataTableServer.js","../src/private/resourceful-index/partials/_per_page_selector.ts","../src/private/resourceful-index/partials/_pagination_controls.ts","../src/private/resourceful-index/partials/_table.ts","../src/private/resourceful-index/partials/_controls.ts","../src/private/resourceful-index/props.ts","../src/private/resourceful-index/index.ts"],"sourcesContent":["// Utilities\nimport { callEvent, isOn } from \"./helpers.js\";\nexport function getPrefixedEventHandlers(attrs, suffix, getData) {\n return Object.keys(attrs).filter(key => isOn(key) && key.endsWith(suffix)).reduce((acc, key) => {\n acc[key.slice(0, -suffix.length)] = event => callEvent(attrs[key], event, getData(event));\n return acc;\n }, {});\n}\n//# sourceMappingURL=events.js.map","export default async function pMap(\n\titerable,\n\tmapper,\n\t{\n\t\tconcurrency = Number.POSITIVE_INFINITY,\n\t\tstopOnError = true,\n\t\tsignal,\n\t} = {},\n) {\n\treturn new Promise((resolve_, reject_) => {\n\t\tif (iterable[Symbol.iterator] === undefined && iterable[Symbol.asyncIterator] === undefined) {\n\t\t\tthrow new TypeError(`Expected \\`input\\` to be either an \\`Iterable\\` or \\`AsyncIterable\\`, got (${typeof iterable})`);\n\t\t}\n\n\t\tif (typeof mapper !== 'function') {\n\t\t\tthrow new TypeError('Mapper function is required');\n\t\t}\n\n\t\tif (!((Number.isSafeInteger(concurrency) && concurrency >= 1) || concurrency === Number.POSITIVE_INFINITY)) {\n\t\t\tthrow new TypeError(`Expected \\`concurrency\\` to be an integer from 1 and up or \\`Infinity\\`, got \\`${concurrency}\\` (${typeof concurrency})`);\n\t\t}\n\n\t\tconst result = [];\n\t\tconst errors = [];\n\t\tconst skippedIndexesMap = new Map();\n\t\tlet isRejected = false;\n\t\tlet isResolved = false;\n\t\tlet isIterableDone = false;\n\t\tlet resolvingCount = 0;\n\t\tlet currentIndex = 0;\n\t\tconst iterator = iterable[Symbol.iterator] === undefined ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n\n\t\tconst signalListener = () => {\n\t\t\treject(signal.reason);\n\t\t};\n\n\t\tconst cleanup = () => {\n\t\t\tsignal?.removeEventListener('abort', signalListener);\n\t\t};\n\n\t\tconst resolve = value => {\n\t\t\tresolve_(value);\n\t\t\tcleanup();\n\t\t};\n\n\t\tconst reject = reason => {\n\t\t\tisRejected = true;\n\t\t\tisResolved = true;\n\t\t\treject_(reason);\n\t\t\tcleanup();\n\t\t};\n\n\t\tif (signal) {\n\t\t\tif (signal.aborted) {\n\t\t\t\treject(signal.reason);\n\t\t\t}\n\n\t\t\tsignal.addEventListener('abort', signalListener, {once: true});\n\t\t}\n\n\t\tconst next = async () => {\n\t\t\tif (isResolved) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst nextItem = await iterator.next();\n\n\t\t\tconst index = currentIndex;\n\t\t\tcurrentIndex++;\n\n\t\t\t// Note: `iterator.next()` can be called many times in parallel.\n\t\t\t// This can cause multiple calls to this `next()` function to\n\t\t\t// receive a `nextItem` with `done === true`.\n\t\t\t// The shutdown logic that rejects/resolves must be protected\n\t\t\t// so it runs only one time as the `skippedIndex` logic is\n\t\t\t// non-idempotent.\n\t\t\tif (nextItem.done) {\n\t\t\t\tisIterableDone = true;\n\n\t\t\t\tif (resolvingCount === 0 && !isResolved) {\n\t\t\t\t\tif (!stopOnError && errors.length > 0) {\n\t\t\t\t\t\treject(new AggregateError(errors)); // eslint-disable-line unicorn/error-message\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tisResolved = true;\n\n\t\t\t\t\tif (skippedIndexesMap.size === 0) {\n\t\t\t\t\t\tresolve(result);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst pureResult = [];\n\n\t\t\t\t\t// Support multiple `pMapSkip`'s.\n\t\t\t\t\tfor (const [index, value] of result.entries()) {\n\t\t\t\t\t\tif (skippedIndexesMap.get(index) === pMapSkip) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpureResult.push(value);\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(pureResult);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresolvingCount++;\n\n\t\t\t// Intentionally detached\n\t\t\t(async () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst element = await nextItem.value;\n\n\t\t\t\t\tif (isResolved) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst value = await mapper(element, index);\n\n\t\t\t\t\t// Use Map to stage the index of the element.\n\t\t\t\t\tif (value === pMapSkip) {\n\t\t\t\t\t\tskippedIndexesMap.set(index, value);\n\t\t\t\t\t}\n\n\t\t\t\t\tresult[index] = value;\n\n\t\t\t\t\tresolvingCount--;\n\t\t\t\t\tawait next();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (stopOnError) {\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors.push(error);\n\t\t\t\t\t\tresolvingCount--;\n\n\t\t\t\t\t\t// In that case we can't really continue regardless of `stopOnError` state\n\t\t\t\t\t\t// since an iterable is likely to continue throwing after it throws once.\n\t\t\t\t\t\t// If we continue calling `next()` indefinitely we will likely end up\n\t\t\t\t\t\t// in an infinite loop of failed iteration.\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait next();\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\treject(error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})();\n\t\t};\n\n\t\t// Create the concurrent runners in a detached (non-awaited)\n\t\t// promise. We need this so we can await the `next()` calls\n\t\t// to stop creating runners before hitting the concurrency limit\n\t\t// if the iterable has already been marked as done.\n\t\t// NOTE: We *must* do this for async iterators otherwise we'll spin up\n\t\t// infinite `next()` calls by default and never start the event loop.\n\t\t(async () => {\n\t\t\tfor (let index = 0; index < concurrency; index++) {\n\t\t\t\ttry {\n\t\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\t\tawait next();\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (isIterableDone || isRejected) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t})();\n\t});\n}\n\nexport function pMapIterable(\n\titerable,\n\tmapper,\n\t{\n\t\tconcurrency = Number.POSITIVE_INFINITY,\n\t\tbackpressure = concurrency,\n\t} = {},\n) {\n\tif (iterable[Symbol.iterator] === undefined && iterable[Symbol.asyncIterator] === undefined) {\n\t\tthrow new TypeError(`Expected \\`input\\` to be either an \\`Iterable\\` or \\`AsyncIterable\\`, got (${typeof iterable})`);\n\t}\n\n\tif (typeof mapper !== 'function') {\n\t\tthrow new TypeError('Mapper function is required');\n\t}\n\n\tif (!((Number.isSafeInteger(concurrency) && concurrency >= 1) || concurrency === Number.POSITIVE_INFINITY)) {\n\t\tthrow new TypeError(`Expected \\`concurrency\\` to be an integer from 1 and up or \\`Infinity\\`, got \\`${concurrency}\\` (${typeof concurrency})`);\n\t}\n\n\tif (!((Number.isSafeInteger(backpressure) && backpressure >= concurrency) || backpressure === Number.POSITIVE_INFINITY)) {\n\t\tthrow new TypeError(`Expected \\`backpressure\\` to be an integer from \\`concurrency\\` (${concurrency}) and up or \\`Infinity\\`, got \\`${backpressure}\\` (${typeof backpressure})`);\n\t}\n\n\treturn {\n\t\tasync * [Symbol.asyncIterator]() {\n\t\t\tconst iterator = iterable[Symbol.asyncIterator] === undefined ? iterable[Symbol.iterator]() : iterable[Symbol.asyncIterator]();\n\n\t\t\tconst promises = [];\n\t\t\tlet pendingPromisesCount = 0;\n\t\t\tlet isDone = false;\n\t\t\tlet index = 0;\n\n\t\t\tfunction trySpawn() {\n\t\t\t\tif (isDone || !(pendingPromisesCount < concurrency && promises.length < backpressure)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tpendingPromisesCount++;\n\n\t\t\t\tconst promise = (async () => {\n\t\t\t\t\tconst {done, value} = await iterator.next();\n\n\t\t\t\t\tif (done) {\n\t\t\t\t\t\tpendingPromisesCount--;\n\t\t\t\t\t\treturn {done: true};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Spawn if still below concurrency and backpressure limit\n\t\t\t\t\ttrySpawn();\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst returnValue = await mapper(await value, index++);\n\n\t\t\t\t\t\tpendingPromisesCount--;\n\n\t\t\t\t\t\tif (returnValue === pMapSkip) {\n\t\t\t\t\t\t\tconst index = promises.indexOf(promise);\n\n\t\t\t\t\t\t\tif (index > 0) {\n\t\t\t\t\t\t\t\tpromises.splice(index, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Spawn if still below backpressure limit and just dropped below concurrency limit\n\t\t\t\t\t\ttrySpawn();\n\n\t\t\t\t\t\treturn {done: false, value: returnValue};\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tpendingPromisesCount--;\n\t\t\t\t\t\tisDone = true;\n\t\t\t\t\t\treturn {error};\n\t\t\t\t\t}\n\t\t\t\t})();\n\n\t\t\t\tpromises.push(promise);\n\t\t\t}\n\n\t\t\ttrySpawn();\n\n\t\t\twhile (promises.length > 0) {\n\t\t\t\tconst {error, done, value} = await promises[0]; // eslint-disable-line no-await-in-loop\n\n\t\t\t\tpromises.shift();\n\n\t\t\t\tif (error) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\tif (done) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Spawn if just dropped below backpressure limit and below the concurrency limit\n\t\t\t\ttrySpawn();\n\n\t\t\t\tif (value === pMapSkip) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tyield value;\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport const pMapSkip = Symbol('skip');\n","export const formats = [\n // Most popular formats\n { value: 'xlsx', extension: '.xlsx', multi: true, label: 'Excel 2007+ XML Format', options: {} },\n {\n value: 'csv',\n extension: '.csv',\n multi: false,\n label: 'Comma Separated Values',\n options: {\n FS: ',',\n RS: '\\n',\n },\n },\n\n // Other popular formats\n { value: 'ods', extension: '.ods', multi: true, label: 'OpenDocument Spreadsheet', options: {} },\n {\n value: 'txt',\n extension: '.txt',\n multi: false,\n label: 'UTF-16 Unicode Text (TXT)',\n options: {\n FS: ',',\n RS: '\\n',\n },\n },\n { value: 'html', extension: '.html', multi: false, label: 'HTML Document', options: {} },\n\n // Platform-specific formats\n // Disabled due to the requirement of including an additional dependency (zahl)\n // {\n // value: 'numbers',\n // extension: '.numbers',\n // multi: true,\n // label: 'Numbers 3.0+ Spreadsheet',\n // options: {},\n // },\n\n // Common Excel formats\n {\n value: 'biff8',\n extension: '.xls',\n multi: true,\n label: 'Excel 97-2004 Workbook Format',\n options: {},\n },\n {\n value: 'xlsm',\n extension: '.xlsm',\n multi: true,\n label: 'Excel 2007+ Macro XML Format',\n options: {},\n },\n {\n value: 'xlsb',\n extension: '.xlsb',\n multi: true,\n label: 'Excel 2007+ Binary Format',\n options: {},\n },\n\n // Legacy Excel formats\n {\n value: 'xlml',\n extension: '.xls',\n multi: true,\n label: 'Excel 2003-2004 (SpreadsheetML)',\n options: {},\n },\n {\n value: 'biff5',\n extension: '.xls',\n multi: true,\n label: 'Excel 5.0/95 Workbook Format',\n options: {},\n },\n\n // Specialized formats\n {\n value: 'fods',\n extension: '.fods',\n multi: true,\n label: 'Flat OpenDocument Spreadsheet',\n options: {},\n },\n { value: 'rtf', extension: '.rtf', multi: false, label: 'Rich Text Format (RTF)', options: {} },\n {\n value: 'dbf',\n extension: '.dbf',\n multi: false,\n label: 'dBASE II + VFP Extensions (DBF)',\n options: {},\n },\n\n // Legacy/specialized formats\n { value: 'sylk', extension: '.sylk', multi: false, label: 'Symbolic Link (SYLK)', options: {} },\n {\n value: 'dif',\n extension: '.dif',\n multi: false,\n label: 'Data Interchange Format (DIF)',\n options: {},\n },\n { value: 'prn', extension: '.prn', multi: false, label: 'Lotus Formatted Text', options: {} },\n {\n value: 'eth',\n extension: '.eth',\n multi: false,\n label: 'Ethercalc Record Format (ETH)',\n options: {},\n },\n] as const\n\nexport const ExportFormat = formats.map((f) => f.value)\nexport type ExportFormat = (typeof formats)[number]['value']\n","'use strict';\n\nfunction isHighSurrogate(codePoint) {\n return codePoint >= 0xd800 && codePoint <= 0xdbff;\n}\n\nfunction isLowSurrogate(codePoint) {\n return codePoint >= 0xdc00 && codePoint <= 0xdfff;\n}\n\n// Truncate string by size in bytes\nmodule.exports = function truncate(getLength, string, byteLength) {\n if (typeof string !== \"string\") {\n throw new Error(\"Input must be string\");\n }\n\n var charLength = string.length;\n var curByteLength = 0;\n var codePoint;\n var segment;\n\n for (var i = 0; i < charLength; i += 1) {\n codePoint = string.charCodeAt(i);\n segment = string[i];\n\n if (isHighSurrogate(codePoint) && isLowSurrogate(string.charCodeAt(i + 1))) {\n i += 1;\n segment += string[i];\n }\n\n curByteLength += getLength(segment);\n\n if (curByteLength === byteLength) {\n return string.slice(0, i + 1);\n }\n else if (curByteLength > byteLength) {\n return string.slice(0, i - segment.length + 1);\n }\n }\n\n return string;\n};\n\n","'use strict';\n\nvar truncate = require(\"./lib/truncate\");\nvar getLength = Buffer.byteLength.bind(Buffer);\nmodule.exports = truncate.bind(null, getLength);\n","/*jshint node:true*/\n'use strict';\n\n/**\n * Replaces characters in strings that are illegal/unsafe for filenames.\n * Unsafe characters are either removed or replaced by a substitute set\n * in the optional `options` object.\n *\n * Illegal Characters on Various Operating Systems\n * / ? < > \\ : * | \"\n * https://kb.acronis.com/content/39790\n *\n * Unicode Control codes\n * C0 0x00-0x1f & C1 (0x80-0x9f)\n * http://en.wikipedia.org/wiki/C0_and_C1_control_codes\n *\n * Reserved filenames on Unix-based systems (\".\", \"..\")\n * Reserved filenames in Windows (\"CON\", \"PRN\", \"AUX\", \"NUL\", \"COM1\",\n * \"COM2\", \"COM3\", \"COM4\", \"COM5\", \"COM6\", \"COM7\", \"COM8\", \"COM9\",\n * \"LPT1\", \"LPT2\", \"LPT3\", \"LPT4\", \"LPT5\", \"LPT6\", \"LPT7\", \"LPT8\", and\n * \"LPT9\") case-insesitively and with or without filename extensions.\n *\n * Capped at 255 characters in length.\n * http://unix.stackexchange.com/questions/32795/what-is-the-maximum-allowed-filename-and-folder-size-with-ecryptfs\n *\n * @param {String} input Original filename\n * @param {Object} options {replacement: String | Function }\n * @return {String} Sanitized filename\n */\n\nvar truncate = require(\"truncate-utf8-bytes\");\n\nvar illegalRe = /[\\/\\?<>\\\\:\\*\\|\"]/g;\nvar controlRe = /[\\x00-\\x1f\\x80-\\x9f]/g;\nvar reservedRe = /^\\.+$/;\nvar windowsReservedRe = /^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\\..*)?$/i;\nvar windowsTrailingRe = /[\\. ]+$/;\n\nfunction sanitize(input, replacement) {\n if (typeof input !== 'string') {\n throw new Error('Input must be string');\n }\n var sanitized = input\n .replace(illegalRe, replacement)\n .replace(controlRe, replacement)\n .replace(reservedRe, replacement)\n .replace(windowsReservedRe, replacement)\n .replace(windowsTrailingRe, replacement);\n return truncate(sanitized, 255);\n}\n\nmodule.exports = function (input, options) {\n var replacement = (options && options.replacement) || '';\n var output = sanitize(input, replacement);\n if (replacement === '') {\n return output;\n }\n return sanitize(output, '');\n};\n","import { default as filenameSanitizer } from 'sanitize-filename'\n\nexport const isUnsafeFilename = (filename: string) => {\n return filename !== filenameSanitizer(filename)\n}\n","import { isUnsafeFilename } from './utils'\nimport { ExportFormat } from './constants'\nimport { validator as joi } from '@nhtio/validation'\nimport type { I18nTranslator } from '../ioc'\nimport type { CustomHelpers } from '@nhtio/validation'\n\nexport const filenameSchema = joi.string().custom((value: any, helpers: CustomHelpers) => {\n if (isUnsafeFilename(value)) {\n return helpers.error('any.invalid')\n }\n return value\n})\n\nexport const exportFormatSchema = joi.string().valid(...ExportFormat)\n\nexport const ExportScope = ['selected', 'page', 'all'] as const\nexport type ExportScope = (typeof ExportScope)[number]\n\nexport type ExportOptions = {\n format: ExportFormat\n filename: string\n scope: ExportScope\n includeAllColumns?: boolean\n humanizeNames?: boolean\n humanizeData?: boolean\n}\n\nexport const exportOptionsSchema = joi.object({\n // the format to export as\n format: exportFormatSchema.required(),\n // the name of the file to be exported\n filename: filenameSchema.required(),\n // the scope of data to export\n scope: joi\n .string()\n .valid(...ExportScope)\n .required(),\n // if all columns should be included, even if hidden (except for browser-computed virtual columns)\n includeAllColumns: joi.boolean(),\n // if human-friendly names should be used for column names\n humanizeNames: joi.boolean(),\n // if data should be humanized (e.g. dates formatted as strings)\n humanizeData: joi.boolean(),\n})\n\nexport const exportOptionsSchemaFactory = (t: I18nTranslator) =>\n joi.object({\n // the format to export as\n format: exportFormatSchema.required().label(t('exporter.form.fields.format.label')),\n // the name of the file to be exported\n filename: filenameSchema.required().label(t('exporter.form.fields.filename.label')),\n // the scope of data to export\n scope: joi\n .string()\n .valid(...ExportScope)\n .required()\n .label(t('exporter.form.fields.scope.label')),\n // if all columns should be included, even if hidden (except for browser-computed virtual columns)\n includeAllColumns: joi.boolean().label(t('exporter.form.fields.includeAllColumns.label')),\n // if human-friendly names should be used for column names\n humanizeNames: joi.boolean().label(t('exporter.form.fields.humanizeNames.label')),\n // if data should be humanized (e.g. dates formatted as strings)\n humanizeData: joi.boolean().label(t('exporter.form.fields.humanizeData.label')),\n })\n","// Utilities\nimport { computed, onBeforeUnmount, onMounted, shallowRef, watch } from 'vue';\nimport { convertToUnit } from \"../../util/index.js\"; // Types\nexport function useSticky(_ref) {\n let {\n rootEl,\n isSticky,\n layoutItemStyles\n } = _ref;\n const isStuck = shallowRef(false);\n const stuckPosition = shallowRef(0);\n const stickyStyles = computed(() => {\n const side = typeof isStuck.value === 'boolean' ? 'top' : isStuck.value;\n return [isSticky.value ? {\n top: 'auto',\n bottom: 'auto',\n height: undefined\n } : undefined, isStuck.value ? {\n [side]: convertToUnit(stuckPosition.value)\n } : {\n top: layoutItemStyles.value.top\n }];\n });\n onMounted(() => {\n watch(isSticky, val => {\n if (val) {\n window.addEventListener('scroll', onScroll, {\n passive: true\n });\n } else {\n window.removeEventListener('scroll', onScroll);\n }\n }, {\n immediate: true\n });\n });\n onBeforeUnmount(() => {\n window.removeEventListener('scroll', onScroll);\n });\n let lastScrollTop = 0;\n function onScroll() {\n const direction = lastScrollTop > window.scrollY ? 'up' : 'down';\n const rect = rootEl.value.getBoundingClientRect();\n const layoutTop = parseFloat(layoutItemStyles.value.top ?? 0);\n const top = window.scrollY - Math.max(0, stuckPosition.value - layoutTop);\n const bottom = rect.height + Math.max(stuckPosition.value, layoutTop) - window.scrollY - window.innerHeight;\n const bodyScroll = parseFloat(getComputedStyle(rootEl.value).getPropertyValue('--v-body-scroll-y')) || 0;\n if (rect.height < window.innerHeight - layoutTop) {\n isStuck.value = 'top';\n stuckPosition.value = layoutTop;\n } else if (direction === 'up' && isStuck.value === 'bottom' || direction === 'down' && isStuck.value === 'top') {\n stuckPosition.value = window.scrollY + rect.top - bodyScroll;\n isStuck.value = true;\n } else if (direction === 'down' && bottom <= 0) {\n stuckPosition.value = 0;\n isStuck.value = 'bottom';\n } else if (direction === 'up' && top <= 0) {\n if (!bodyScroll) {\n stuckPosition.value = rect.top + top;\n isStuck.value = 'top';\n } else if (isStuck.value !== 'top') {\n stuckPosition.value = -top + bodyScroll + layoutTop;\n isStuck.value = 'top';\n }\n }\n lastScrollTop = window.scrollY;\n }\n return {\n isStuck,\n stickyStyles\n };\n}\n//# sourceMappingURL=sticky.js.map","// Utilities\nimport { CircularBuffer } from \"../util/index.js\";\nconst HORIZON = 100; // ms\nconst HISTORY = 20; // number of samples to keep\n\n/** @see https://android.googlesource.com/platform/frameworks/native/+/master/libs/input/VelocityTracker.cpp */\nfunction kineticEnergyToVelocity(work) {\n const sqrt2 = 1.41421356237;\n return (work < 0 ? -1.0 : 1.0) * Math.sqrt(Math.abs(work)) * sqrt2;\n}\n\n/**\n * Returns pointer velocity in px/s\n */\nexport function calculateImpulseVelocity(samples) {\n // The input should be in reversed time order (most recent sample at index i=0)\n if (samples.length < 2) {\n // if 0 or 1 points, velocity is zero\n return 0;\n }\n // if (samples[1].t > samples[0].t) {\n // // Algorithm will still work, but not perfectly\n // consoleWarn('Samples provided to calculateImpulseVelocity in the wrong order')\n // }\n if (samples.length === 2) {\n // if 2 points, basic linear calculation\n if (samples[1].t === samples[0].t) {\n // consoleWarn(`Events have identical time stamps t=${samples[0].t}, setting velocity = 0`)\n return 0;\n }\n return (samples[1].d - samples[0].d) / (samples[1].t - samples[0].t);\n }\n // Guaranteed to have at least 3 points here\n // start with the oldest sample and go forward in time\n let work = 0;\n for (let i = samples.length - 1; i > 0; i--) {\n if (samples[i].t === samples[i - 1].t) {\n // consoleWarn(`Events have identical time stamps t=${samples[i].t}, skipping sample`)\n continue;\n }\n const vprev = kineticEnergyToVelocity(work); // v[i-1]\n const vcurr = (samples[i].d - samples[i - 1].d) / (samples[i].t - samples[i - 1].t); // v[i]\n work += (vcurr - vprev) * Math.abs(vcurr);\n if (i === samples.length - 1) {\n work *= 0.5;\n }\n }\n return kineticEnergyToVelocity(work) * 1000;\n}\nexport function useVelocity() {\n const touches = {};\n function addMovement(e) {\n Array.from(e.changedTouches).forEach(touch => {\n const samples = touches[touch.identifier] ?? (touches[touch.identifier] = new CircularBuffer(HISTORY));\n samples.push([e.timeStamp, touch]);\n });\n }\n function endTouch(e) {\n Array.from(e.changedTouches).forEach(touch => {\n delete touches[touch.identifier];\n });\n }\n function getVelocity(id) {\n const samples = touches[id]?.values().reverse();\n if (!samples) {\n throw new Error(`No samples for touch id ${id}`);\n }\n const newest = samples[0];\n const x = [];\n const y = [];\n for (const val of samples) {\n if (newest[0] - val[0] > HORIZON) break;\n x.push({\n t: val[0],\n d: val[1].clientX\n });\n y.push({\n t: val[0],\n d: val[1].clientY\n });\n }\n return {\n x: calculateImpulseVelocity(x),\n y: calculateImpulseVelocity(y),\n get direction() {\n const {\n x,\n y\n } = this;\n const [absX, absY] = [Math.abs(x), Math.abs(y)];\n return absX > absY && x >= 0 ? 'right' : absX > absY && x <= 0 ? 'left' : absY > absX && y >= 0 ? 'down' : absY > absX && y <= 0 ? 'up' : oops();\n }\n };\n }\n return {\n addMovement,\n endTouch,\n getVelocity\n };\n}\nfunction oops() {\n throw new Error();\n}\n//# sourceMappingURL=touch.js.map","// Composables\nimport { useToggleScope } from \"../../composables/toggleScope.js\";\nimport { useVelocity } from \"../../composables/touch.js\"; // Utilities\nimport { computed, onBeforeUnmount, onMounted, onScopeDispose, shallowRef, watchEffect } from 'vue';\nimport { clamp } from \"../../util/index.js\"; // Types\nexport function useTouch(_ref) {\n let {\n el,\n isActive,\n isTemporary,\n width,\n touchless,\n position\n } = _ref;\n onMounted(() => {\n window.addEventListener('touchstart', onTouchstart, {\n passive: true\n });\n window.addEventListener('touchmove', onTouchmove, {\n passive: false\n });\n window.addEventListener('touchend', onTouchend, {\n passive: true\n });\n });\n onBeforeUnmount(() => {\n window.removeEventListener('touchstart', onTouchstart);\n window.removeEventListener('touchmove', onTouchmove);\n window.removeEventListener('touchend', onTouchend);\n });\n const isHorizontal = computed(() => ['left', 'right'].includes(position.value));\n const {\n addMovement,\n endTouch,\n getVelocity\n } = useVelocity();\n let maybeDragging = false;\n const isDragging = shallowRef(false);\n const dragProgress = shallowRef(0);\n const offset = shallowRef(0);\n let start;\n function getOffset(pos, active) {\n return (position.value === 'left' ? pos : position.value === 'right' ? document.documentElement.clientWidth - pos : position.value === 'top' ? pos : position.value === 'bottom' ? document.documentElement.clientHeight - pos : oops()) - (active ? width.value : 0);\n }\n function getProgress(pos) {\n let limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n const progress = position.value === 'left' ? (pos - offset.value) / width.value : position.value === 'right' ? (document.documentElement.clientWidth - pos - offset.value) / width.value : position.value === 'top' ? (pos - offset.value) / width.value : position.value === 'bottom' ? (document.documentElement.clientHeight - pos - offset.value) / width.value : oops();\n return limit ? clamp(progress) : progress;\n }\n function onTouchstart(e) {\n if (touchless.value) return;\n const touchX = e.changedTouches[0].clientX;\n const touchY = e.changedTouches[0].clientY;\n const touchZone = 25;\n const inTouchZone = position.value === 'left' ? touchX < touchZone : position.value === 'right' ? touchX > document.documentElement.clientWidth - touchZone : position.value === 'top' ? touchY < touchZone : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - touchZone : oops();\n const inElement = isActive.value && (position.value === 'left' ? touchX < width.value : position.value === 'right' ? touchX > document.documentElement.clientWidth - width.value : position.value === 'top' ? touchY < width.value : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - width.value : oops());\n if (inTouchZone || inElement || isActive.value && isTemporary.value) {\n start = [touchX, touchY];\n offset.value = getOffset(isHorizontal.value ? touchX : touchY, isActive.value);\n dragProgress.value = getProgress(isHorizontal.value ? touchX : touchY);\n maybeDragging = offset.value > -20 && offset.value < 80;\n endTouch(e);\n addMovement(e);\n }\n }\n function onTouchmove(e) {\n const touchX = e.changedTouches[0].clientX;\n const touchY = e.changedTouches[0].clientY;\n if (maybeDragging) {\n if (!e.cancelable) {\n maybeDragging = false;\n return;\n }\n const dx = Math.abs(touchX - start[0]);\n const dy = Math.abs(touchY - start[1]);\n const thresholdMet = isHorizontal.value ? dx > dy && dx > 3 : dy > dx && dy > 3;\n if (thresholdMet) {\n isDragging.value = true;\n maybeDragging = false;\n } else if ((isHorizontal.value ? dy : dx) > 3) {\n maybeDragging = false;\n }\n }\n if (!isDragging.value) return;\n e.preventDefault();\n addMovement(e);\n const progress = getProgress(isHorizontal.value ? touchX : touchY, false);\n dragProgress.value = Math.max(0, Math.min(1, progress));\n if (progress > 1) {\n offset.value = getOffset(isHorizontal.value ? touchX : touchY, true);\n } else if (progress < 0) {\n offset.value = getOffset(isHorizontal.value ? touchX : touchY, false);\n }\n }\n function onTouchend(e) {\n maybeDragging = false;\n if (!isDragging.value) return;\n addMovement(e);\n isDragging.value = false;\n const velocity = getVelocity(e.changedTouches[0].identifier);\n const vx = Math.abs(velocity.x);\n const vy = Math.abs(velocity.y);\n const thresholdMet = isHorizontal.value ? vx > vy && vx > 400 : vy > vx && vy > 3;\n if (thresholdMet) {\n isActive.value = velocity.direction === ({\n left: 'right',\n right: 'left',\n top: 'down',\n bottom: 'up'\n }[position.value] || oops());\n } else {\n isActive.value = dragProgress.value > 0.5;\n }\n }\n const dragStyles = computed(() => {\n return isDragging.value ? {\n transform: position.value === 'left' ? `translateX(calc(-100% + ${dragProgress.value * width.value}px))` : position.value === 'right' ? `translateX(calc(100% - ${dragProgress.value * width.value}px))` : position.value === 'top' ? `translateY(calc(-100% + ${dragProgress.value * width.value}px))` : position.value === 'bottom' ? `translateY(calc(100% - ${dragProgress.value * width.value}px))` : oops(),\n transition: 'none'\n } : undefined;\n });\n useToggleScope(isDragging, () => {\n const transform = el.value?.style.transform ?? null;\n const transition = el.value?.style.transition ?? null;\n watchEffect(() => {\n el.value?.style.setProperty('transform', dragStyles.value?.transform || 'none');\n el.value?.style.setProperty('transition', dragStyles.value?.transition || null);\n });\n onScopeDispose(() => {\n el.value?.style.setProperty('transform', transform);\n el.value?.style.setProperty('transition', transition);\n });\n });\n return {\n isDragging,\n dragProgress,\n dragStyles\n };\n}\nfunction oops() {\n throw new Error();\n}\n//# sourceMappingURL=touch.js.map","import { Fragment as _Fragment, createVNode as _createVNode, createElementVNode as _createElementVNode, mergeProps as _mergeProps } from \"vue\";\n// Styles\nimport \"./VNavigationDrawer.css\";\n\n// Components\nimport { VDefaultsProvider } from \"../VDefaultsProvider/index.js\";\nimport { VImg } from \"../VImg/index.js\"; // Composables\nimport { useSticky } from \"./sticky.js\";\nimport { useTouch } from \"./touch.js\";\nimport { useRtl } from \"../../composables/index.js\";\nimport { makeBorderProps, useBorder } from \"../../composables/border.js\";\nimport { useBackgroundColor } from \"../../composables/color.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { provideDefaults } from \"../../composables/defaults.js\";\nimport { makeDelayProps, useDelay } from \"../../composables/delay.js\";\nimport { makeDisplayProps, useDisplay } from \"../../composables/display.js\";\nimport { makeElevationProps, useElevation } from \"../../composables/elevation.js\";\nimport { makeFocusTrapProps, useFocusTrap } from \"../../composables/focusTrap.js\";\nimport { makeLayoutItemProps, useLayoutItem } from \"../../composables/layout.js\";\nimport { useProxiedModel } from \"../../composables/proxiedModel.js\";\nimport { makeRoundedProps, useRounded } from \"../../composables/rounded.js\";\nimport { useRouter } from \"../../composables/router.js\";\nimport { useScopeId } from \"../../composables/scopeId.js\";\nimport { useSsrBoot } from \"../../composables/ssrBoot.js\";\nimport { makeTagProps } from \"../../composables/tag.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\";\nimport { useToggleScope } from \"../../composables/toggleScope.js\"; // Utilities\nimport { computed, nextTick, readonly, ref, shallowRef, toRef, Transition, watch } from 'vue';\nimport { genericComponent, omit, propsFactory, toPhysical, useRender } from \"../../util/index.js\"; // Types\nconst locations = ['start', 'end', 'left', 'right', 'top', 'bottom'];\nexport const makeVNavigationDrawerProps = propsFactory({\n color: String,\n disableResizeWatcher: Boolean,\n disableRouteWatcher: Boolean,\n expandOnHover: Boolean,\n floating: Boolean,\n modelValue: {\n type: Boolean,\n default: null\n },\n permanent: Boolean,\n rail: {\n type: Boolean,\n default: null\n },\n railWidth: {\n type: [Number, String],\n default: 56\n },\n scrim: {\n type: [Boolean, String],\n default: true\n },\n image: String,\n temporary: Boolean,\n persistent: Boolean,\n touchless: Boolean,\n width: {\n type: [Number, String],\n default: 256\n },\n location: {\n type: String,\n default: 'start',\n validator: value => locations.includes(value)\n },\n sticky: Boolean,\n ...makeBorderProps(),\n ...makeComponentProps(),\n ...makeDelayProps(),\n ...makeDisplayProps({\n mobile: null\n }),\n ...makeElevationProps(),\n ...makeLayoutItemProps(),\n ...makeRoundedProps(),\n ...omit(makeFocusTrapProps(), ['disableInitialFocus']),\n ...makeTagProps({\n tag: 'nav'\n }),\n ...makeThemeProps()\n}, 'VNavigationDrawer');\nexport const VNavigationDrawer = genericComponent()({\n name: 'VNavigationDrawer',\n props: makeVNavigationDrawerProps(),\n emits: {\n 'update:modelValue': val => true,\n 'update:rail': val => true\n },\n setup(props, _ref) {\n let {\n attrs,\n emit,\n slots\n } = _ref;\n const {\n isRtl\n } = useRtl();\n const {\n themeClasses\n } = provideTheme(props);\n const {\n borderClasses\n } = useBorder(props);\n const {\n backgroundColorClasses,\n backgroundColorStyles\n } = useBackgroundColor(() => props.color);\n const {\n elevationClasses\n } = useElevation(props);\n const {\n displayClasses,\n mobile\n } = useDisplay(props);\n const {\n roundedClasses\n } = useRounded(props);\n const router = useRouter();\n const isActive = useProxiedModel(props, 'modelValue', null, v => !!v);\n const {\n ssrBootStyles\n } = useSsrBoot();\n const {\n scopeId\n } = useScopeId();\n const rootEl = ref();\n const isHovering = shallowRef(false);\n const {\n runOpenDelay,\n runCloseDelay\n } = useDelay(props, value => {\n isHovering.value = value;\n });\n const width = computed(() => {\n return props.rail && props.expandOnHover && isHovering.value ? Number(props.width) : Number(props.rail ? props.railWidth : props.width);\n });\n const location = computed(() => {\n return toPhysical(props.location, isRtl.value);\n });\n const isPersistent = toRef(() => props.persistent);\n const isTemporary = computed(() => !props.permanent && (mobile.value || props.temporary));\n const isSticky = computed(() => props.sticky && !isTemporary.value && location.value !== 'bottom');\n useFocusTrap(props, {\n isActive,\n localTop: isTemporary,\n contentEl: rootEl\n });\n useToggleScope(() => props.expandOnHover && props.rail != null, () => {\n watch(isHovering, val => emit('update:rail', !val));\n });\n useToggleScope(() => !props.disableResizeWatcher, () => {\n watch(isTemporary, val => !props.permanent && nextTick(() => isActive.value = !val));\n });\n useToggleScope(() => !props.disableRouteWatcher && !!router, () => {\n watch(router.currentRoute, () => isTemporary.value && (isActive.value = false));\n });\n watch(() => props.permanent, val => {\n if (val) isActive.value = true;\n });\n if (props.modelValue == null && !isTemporary.value) {\n isActive.value = props.permanent || !mobile.value;\n }\n const {\n isDragging,\n dragProgress\n } = useTouch({\n el: rootEl,\n isActive,\n isTemporary,\n width,\n touchless: toRef(() => props.touchless),\n position: location\n });\n const layoutSize = computed(() => {\n const size = isTemporary.value ? 0 : props.rail && props.expandOnHover ? Number(props.railWidth) : width.value;\n return isDragging.value ? size * dragProgress.value : size;\n });\n const {\n layoutItemStyles,\n layoutItemScrimStyles\n } = useLayoutItem({\n id: props.name,\n order: computed(() => parseInt(props.order, 10)),\n position: location,\n layoutSize,\n elementSize: width,\n active: readonly(isActive),\n disableTransitions: toRef(() => isDragging.value),\n absolute: computed(() =>\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n props.absolute || isSticky.value && typeof isStuck.value !== 'string')\n });\n const {\n isStuck,\n stickyStyles\n } = useSticky({\n rootEl,\n isSticky,\n layoutItemStyles\n });\n const scrimColor = useBackgroundColor(() => {\n return typeof props.scrim === 'string' ? props.scrim : null;\n });\n const scrimStyles = computed(() => ({\n ...(isDragging.value ? {\n opacity: dragProgress.value * 0.2,\n transition: 'none'\n } : undefined),\n ...layoutItemScrimStyles.value\n }));\n provideDefaults({\n VList: {\n bgColor: 'transparent'\n }\n });\n useRender(() => {\n const hasImage = slots.image || props.image;\n return _createElementVNode(_Fragment, null, [_createVNode(props.tag, _mergeProps({\n \"ref\": rootEl,\n \"onMouseenter\": runOpenDelay,\n \"onMouseleave\": runCloseDelay,\n \"class\": ['v-navigation-drawer', `v-navigation-drawer--${location.value}`, {\n 'v-navigation-drawer--expand-on-hover': props.expandOnHover,\n 'v-navigation-drawer--floating': props.floating,\n 'v-navigation-drawer--is-hovering': isHovering.value,\n 'v-navigation-drawer--rail': props.rail,\n 'v-navigation-drawer--temporary': isTemporary.value,\n 'v-navigation-drawer--persistent': isPersistent.value,\n 'v-navigation-drawer--active': isActive.value,\n 'v-navigation-drawer--sticky': isSticky.value\n }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, displayClasses.value, elevationClasses.value, roundedClasses.value, props.class],\n \"style\": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value, stickyStyles.value, props.style],\n \"inert\": !isActive.value\n }, scopeId, attrs), {\n default: () => [hasImage && _createElementVNode(\"div\", {\n \"key\": \"image\",\n \"class\": \"v-navigation-drawer__img\"\n }, [!slots.image ? _createVNode(VImg, {\n \"key\": \"image-img\",\n \"alt\": \"\",\n \"cover\": true,\n \"height\": \"inherit\",\n \"src\": props.image\n }, null) : _createVNode(VDefaultsProvider, {\n \"key\": \"image-defaults\",\n \"disabled\": !props.image,\n \"defaults\": {\n VImg: {\n alt: '',\n cover: true,\n height: 'inherit',\n src: props.image\n }\n }\n }, slots.image)]), slots.prepend && _createElementVNode(\"div\", {\n \"class\": \"v-navigation-drawer__prepend\"\n }, [slots.prepend?.()]), _createElementVNode(\"div\", {\n \"class\": \"v-navigation-drawer__content\"\n }, [slots.default?.()]), slots.append && _createElementVNode(\"div\", {\n \"class\": \"v-navigation-drawer__append\"\n }, [slots.append?.()])]\n }), _createVNode(Transition, {\n \"name\": \"fade-transition\"\n }, {\n default: () => [isTemporary.value && (isDragging.value || isActive.value) && !!props.scrim && _createElementVNode(\"div\", _mergeProps({\n \"class\": ['v-navigation-drawer__scrim', scrimColor.backgroundColorClasses.value],\n \"style\": [scrimStyles.value, scrimColor.backgroundColorStyles.value],\n \"onClick\": () => {\n if (isPersistent.value) return;\n isActive.value = false;\n }\n }, scopeId), null)]\n })]);\n });\n return {\n isStuck\n };\n }\n});\n//# sourceMappingURL=VNavigationDrawer.js.map","import { useI18n } from '../../ioc'\nimport { encode } from '@nhtio/encoder'\nimport { SvgIcon } from '../../svg-icon'\nimport { deepmerge } from 'deepmerge-ts'\nimport { Sortable } from '../../sortable'\nimport { VBtn } from 'vuetify/components/VBtn'\nimport { VCard } from 'vuetify/components/VCard'\nimport { VIcon } from 'vuetify/components/VIcon'\nimport { VBadge } from 'vuetify/components/VBadge'\nimport { VSpacer } from 'vuetify/components/VGrid'\nimport { VSheet } from 'vuetify/components/VSheet'\nimport { ControlButton } from '../../control-button'\nimport { VDialog } from 'vuetify/components/VDialog'\nimport { emitsFactory } from '../../common/factories'\nimport { VDivider } from 'vuetify/components/VDivider'\nimport { pick } from '@nhtio/vuetifiable/util/helpers'\nimport { VTextField } from 'vuetify/components/VTextField'\nimport { debounce } from '@nhtio/vuetifiable/util/helpers'\nimport { useResourcefulIndexScopedDisplay } from '../index'\nimport { VList, VListItem } from 'vuetify/components/VList'\nimport { VEmptyState } from 'vuetify/components/VEmptyState'\nimport { TypedEventEmitter } from '@nhtio/tiny-typed-emitter'\nimport { makeControlButtonProps } from '../../control-button/props'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { default as warningSvg } from '../../icons/warning.svg?url'\nimport { VToolbar, VToolbarItems } from 'vuetify/components/VToolbar'\nimport { VNavigationDrawer } from 'vuetify/components/VNavigationDrawer'\nimport { makeVDialogProps } from '@nhtio/vuetifiable/components/VDialog/VDialog'\nimport { defineComponent, h, toRefs, toRaw, computed, watch, ref, nextTick } from 'vue'\nimport { makeVTextFieldProps } from '@nhtio/vuetifiable/components/VTextField/VTextField'\nimport { makeVEmptyStateProps } from '@nhtio/vuetifiable/components/VEmptyState/VEmptyState'\nimport { getDefaultsForPropFactory, stripUndefinedValuesFromObject } from '../../common/utils'\nimport {\n mdiClose,\n mdiContentSave,\n mdiContentSaveCheck,\n mdiMagnify,\n mdiDrag,\n mdiMouseOff,\n mdiMenuUp,\n mdiMenuDown,\n mdiEyeOff,\n mdiEye,\n} from '@mdi/js'\nimport type { EventMap } from '@nhtio/tiny-typed-emitter'\nimport type { SortableProps } from '../../sortable/props'\nimport type { ResourcefulFieldLabelTerms } from '../props'\nimport type { ResourcefulSchemaDefinition } from '../types'\nimport type { PropType, ExtractPublicPropTypes } from 'vue'\nimport type { SortableItemSlotBindings } from '../../sortable'\nimport type { ControlButtonProps } from '../../control-button/props'\n\nconst makeResourcefulIndexColumnsControlsDispositionButtonProps = propsFactory(\n {\n ...pick(makeControlButtonProps(), [\n 'density',\n 'dividePrependIcon',\n 'elevation',\n 'height',\n 'size',\n ]),\n },\n 'ResourceIndexColumnsControlsDispositionButton'\n)\n\nconst makeResourcefulIndexColumnsControlsSaveButtonProps = propsFactory(\n {\n ...pick(\n makeControlButtonProps({\n color: 'surface-light',\n prependIcon: () => h(SvgIcon, { d: mdiContentSave }),\n }),\n ['prependIcon', 'color']\n ),\n },\n 'ResourceIndexColumnsControlsSaveButton'\n)\n\nconst makeResourcefulIndexColumnsControlsDiscardButtonProps = propsFactory(\n {\n ...pick(\n makeControlButtonProps({\n color: 'surface-light',\n prependIcon: () => h(SvgIcon, { d: mdiClose }),\n }),\n ['prependIcon', 'color']\n ),\n },\n 'ResourceIndexColumnsControlsDiscardButton'\n)\n\nexport const defaultsForResourcefulIndexColumnsControlsDispositionButtonProps =\n getDefaultsForPropFactory(makeResourcefulIndexColumnsControlsDispositionButtonProps)\n\nexport const defaultsForResourcefulIndexColumnsControlsSaveButtonProps = getDefaultsForPropFactory(\n makeResourcefulIndexColumnsControlsSaveButtonProps\n)\n\nexport const defaultsForResourcefulIndexColumnsControlsDiscardButtonProps =\n getDefaultsForPropFactory(makeResourcefulIndexColumnsControlsDiscardButtonProps)\n\nexport type DispositionButtonProps = ExtractPublicPropTypes<\n ReturnType<typeof makeResourcefulIndexColumnsControlsDispositionButtonProps>\n>\n\nexport type SaveButtonProps = ExtractPublicPropTypes<\n ReturnType<typeof makeResourcefulIndexColumnsControlsSaveButtonProps>\n>\n\nexport type DiscardButtonProps = ExtractPublicPropTypes<\n ReturnType<typeof makeResourcefulIndexColumnsControlsDiscardButtonProps>\n>\n\nexport const makeResourcefulIndexColumnsControlsProps = propsFactory(\n {\n modelValue: {\n type: Boolean,\n default: false,\n },\n color: {\n type: String as PropType<string | undefined>,\n default: undefined,\n },\n labels: {\n type: Object as PropType<ResourcefulFieldLabelTerms>,\n default: () => ({}),\n },\n possibleFields: {\n type: Object as PropType<ResourcefulSchemaDefinition>,\n default: () => ({}),\n },\n showingFields: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n dispositionButtons: {\n type: Object as PropType<DispositionButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n },\n saveButton: {\n type: Object as PropType<SaveButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n },\n discardButton: {\n type: Object as PropType<DiscardButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n },\n },\n 'ResourcefulIndexColumnsControls'\n)\n\ntype ConfirmDialogEvents = EventMap<{\n show: []\n hide: []\n dispositioned: [disposition: boolean]\n}>\n\ntype VTextFieldPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVTextFieldProps>>\ntype VDialogPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVDialogProps>>\ntype VEmptyStatePublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVEmptyStateProps>>\n\nexport const ResourcefulIndexColumnsControls = defineComponent({\n name: 'ResourcefulIndexColumnsControls',\n props: makeResourcefulIndexColumnsControlsProps(),\n emits: emitsFactory({\n 'update:modelValue': (val: boolean) => typeof val === 'boolean',\n 'update:showingFields': (val: Array<string>) =>\n Array.isArray(val) && val.every((v) => 'string' === typeof v),\n // alias for v-model compatibility\n 'update:model-value': (val: boolean) => typeof val === 'boolean',\n 'update:showing-fields': (val: Array<string>) =>\n Array.isArray(val) && val.every((v) => 'string' === typeof v),\n }),\n setup(props, { emit }) {\n const confirmationBus = new TypedEventEmitter<ConfirmDialogEvents>()\n const {\n modelValue,\n color,\n possibleFields,\n showingFields,\n labels,\n dispositionButtons,\n saveButton,\n discardButton,\n } = toRefs(props)\n const { width: screenWidth, xs } = useResourcefulIndexScopedDisplay()\n const showDispositionDialog = ref(false)\n const visibility = computed({\n get: () => modelValue.value,\n set: (val: boolean) => {\n // plumbing to support confirmation dialog\n // if the user is trying to close the dialog and there are unsaved changes\n confirmationBus.off('dispositioned')\n if (!val && isDirty.value) {\n confirmationBus.once('dispositioned', (disposition: boolean) => {\n if (disposition && isDirty.value) {\n emit('update:showingFields', updatedShowingFields.value)\n }\n nextTick(() => {\n emit('update:modelValue', val)\n emit('update:model-value', val)\n confirmationBus.emit('hide')\n isDirty.value = false\n })\n })\n confirmationBus.emit('show')\n } else {\n emit('update:modelValue', val)\n emit('update:model-value', val)\n }\n },\n })\n const updatedShowingFields = ref<string[]>(['id'])\n watch(\n showingFields,\n (is) => {\n updatedShowingFields.value = toRaw(is)\n if (updatedShowingFields.value.length === 0) {\n updatedShowingFields.value.push('id')\n }\n },\n {\n immediate: true,\n deep: true,\n }\n )\n const isDirty = ref(false)\n const updateIsDirty = debounce(() => {\n const rawShowingFields = toRaw(showingFields.value)\n const rawUpdatedShowingFields = toRaw(updatedShowingFields.value)\n const is = encode(rawShowingFields) !== encode(rawUpdatedShowingFields)\n isDirty.value = is\n }, 100)\n watch(showingFields, () => updateIsDirty, { immediate: true, deep: true })\n watch(updatedShowingFields, () => updateIsDirty, { immediate: true, deep: true })\n watch(modelValue, (is, was) => {\n if (is && is !== was) {\n updatedShowingFields.value = toRaw(showingFields.value)\n if (updatedShowingFields.value.length === 0) {\n updatedShowingFields.value.push('id')\n }\n }\n })\n const unshownFields = computed(() =>\n Object.keys(possibleFields.value).filter(\n (field) => !updatedShowingFields.value.includes(field) && 'id' !== field\n )\n )\n const t = useI18n()\n const resultFilter = ref<string | null>(null)\n const resultFilderFieldBindings = computed<VTextFieldPublicProps>(() => ({\n 'modelValue': resultFilter.value,\n 'onUpdate:modelValue': (val: string) => {\n resultFilter.value = val\n },\n 'label': t('lucid.resourceful.index.columnsControls.filter.label'),\n 'variant': 'outlined',\n 'density': 'compact',\n 'clearable': true,\n 'clearIcon': () => h(SvgIcon, { d: mdiClose }),\n 'prependInnerIcon': () => h(SvgIcon, { d: mdiMagnify }),\n 'hideDetails': true,\n // prevent accidentally submitting the form\n // since we are in the context of a form tag\n // but there's also no need for line breaks in this field anyway\n 'onKeydown': (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n e.stopPropagation()\n }\n },\n 'onKeyup': (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n e.stopPropagation()\n }\n },\n }))\n const isFiltering = computed(\n () => 'string' === typeof resultFilter.value && resultFilter.value.length > 0\n )\n const dragBindings = computed<SortableProps>(() => ({\n modelValue: updatedShowingFields.value,\n tag: VList,\n tagProps: {\n class: ['transparent', { 'pb-0': unshownFields.value.length > 0 }],\n nav: true,\n selectable: !isFiltering.value,\n },\n animation: 300,\n disabled: isFiltering.value,\n ghostClass: 'resourceful-index__column-controls__sortable-ghost',\n chosenClass: 'resourceful-index__column-controls__sortable-chosen',\n dragClass: 'resourceful-index__column-controls__sortable-drag',\n ...{\n 'onUpdate:modelValue': (val: Array<string>) => {\n updatedShowingFields.value = val\n if (updatedShowingFields.value.length === 0) {\n updatedShowingFields.value.push('id')\n }\n nextTick(() => {\n updateIsDirty()\n })\n },\n },\n }))\n confirmationBus.on('show', () => {\n showDispositionDialog.value = true\n })\n confirmationBus.on('hide', () => {\n showDispositionDialog.value = false\n })\n const confirmationDialogBindings = computed<VDialogPublicProps>(() => ({\n modelValue: showDispositionDialog.value,\n persistent: true,\n fullscreen: xs.value,\n contained: !xs.value,\n maxWidth: 500,\n scrim: true,\n }))\n const confirmationEmptyStateBindings = computed<VEmptyStatePublicProps>(() => ({\n image: warningSvg,\n title: t('lucid.resourceful.index.columnsControls.dispositionDialog.headline'),\n text: t('lucid.resourceful.index.columnsControls.dispositionDialog.title'),\n }))\n const saveDispositionButtonBindings = computed<ControlButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value),\n defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n stripUndefinedValuesFromObject(saveButton.value),\n { cta: t('general.save') },\n { onClick: () => confirmationBus.emit('dispositioned', true) }\n )\n )\n const discardDispositionButtonBindings = computed<ControlButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value),\n defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n stripUndefinedValuesFromObject(discardButton.value),\n { cta: t('general.discard') },\n { onClick: () => confirmationBus.emit('dispositioned', false) }\n )\n )\n return () => [\n h(\n VNavigationDrawer,\n {\n 'modelValue': visibility.value,\n 'onUpdate:modelValue': (val: boolean) => {\n visibility.value = val\n },\n 'permanent': false,\n 'persistent': false,\n 'temporary': true,\n 'absolute': true,\n 'width': screenWidth.value < 500 ? screenWidth.value : 500,\n 'color': color.value,\n },\n () =>\n h('div', { class: ['d-flex', 'flex-column', 'h-100'] }, [\n h(\n VToolbar,\n { color: color.value || 'transparent', class: ['flex-grow-0'], density: 'compact' },\n () => [\n h('div', { class: ['d-flex', 'align-center', 'px-2', 'flex-grow-1'] }, [\n h(VTextField, resultFilderFieldBindings.value),\n ]),\n h(VToolbarItems, {}, () => [\n h(VBtn, {\n icon: () => h(SvgIcon, { d: mdiContentSave }),\n variant: 'text',\n onClick: () => {\n if (isDirty.value) {\n emit('update:showingFields', updatedShowingFields.value)\n nextTick(() => updateIsDirty())\n }\n },\n }),\n h(VBtn, {\n icon: () => h(SvgIcon, { d: mdiClose }),\n variant: 'text',\n onClick: () => (visibility.value = false),\n }),\n ]),\n ]\n ),\n h(VDivider, { class: ['flex-grow-0'] }),\n h(VSheet, { color: 'transparent', class: ['flex-grow-1', 'overflow-y-auto'] }, () => [\n h(\n Sortable,\n {\n ...dragBindings.value,\n },\n {\n item: ({\n item,\n props: sortableItemProps,\n ordinal,\n disabled,\n sortingDisabled,\n first,\n last,\n remove,\n moveUp,\n moveDown,\n }: SortableItemSlotBindings<string>) => {\n const definition = possibleFields.value[item]\n const title = definition\n ? 'computed' === definition.type\n ? definition['x-table-header-definition']!.title\n : t(labels.value[item] || item)\n : t(labels.value[item] || item)\n return h(\n VListItem,\n {\n title,\n ripple: false,\n ...sortableItemProps,\n class: [\n {\n 'd-none':\n isFiltering.value &&\n !title.toLowerCase().includes(resultFilter.value!.toLowerCase()),\n },\n ],\n },\n {\n prepend: () =>\n h('div', { class: ['d-flex', 'align-center', 'justify-start', 'me-2'] }, [\n h(VIcon, {\n icon: () =>\n h(SvgIcon, { d: isFiltering.value ? mdiMouseOff : mdiDrag }),\n }),\n h(VBadge, {\n content: ordinal,\n class: ['ms-2'],\n size: 'x-small',\n inline: true,\n }),\n ]),\n append: () =>\n h('div', { class: ['d-flex', 'align-center', 'justify-end'] }, [\n h(VBtn, {\n size: 'x-small',\n icon: () => h(SvgIcon, { d: mdiMenuUp }),\n class: ['me-1'],\n disabled: isFiltering.value || sortingDisabled || disabled || first,\n variant: 'text',\n onClick: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n moveUp()\n },\n }),\n h(VBtn, {\n size: 'x-small',\n icon: () => h(SvgIcon, { d: mdiMenuDown }),\n class: ['me-1'],\n disabled: isFiltering.value || sortingDisabled || disabled || last,\n variant: 'text',\n onClick: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n moveDown()\n },\n }),\n h(VBtn, {\n size: 'x-small',\n icon: () => h(SvgIcon, { d: mdiEyeOff }),\n disabled: 'id' === item,\n class: [],\n variant: 'text',\n onClick: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n remove()\n },\n }),\n ]),\n }\n )\n },\n }\n ),\n unshownFields.value.length > 0\n ? h(\n VList,\n { class: ['transparent', 'pt-0'], nav: true, selectable: !isFiltering.value },\n () =>\n Array.from(unshownFields.value).map((f) => {\n const definition = possibleFields.value[f]\n const title = definition\n ? 'computed' === definition.type\n ? definition['x-table-header-definition']!.title\n : t(labels.value[f] || f)\n : t(labels.value[f] || f)\n return h(\n VListItem,\n {\n title,\n ripple: false,\n class: [\n {\n 'd-none':\n isFiltering.value &&\n !title.toLowerCase().includes(resultFilter.value!.toLowerCase()),\n },\n ],\n },\n {\n prepend: () =>\n h(\n 'div',\n { class: ['d-flex', 'align-center', 'justify-start', 'me-2'] },\n [\n h(VIcon, {\n icon: () => h(SvgIcon, { d: mdiMouseOff }),\n }),\n h(VBadge, {\n icon: () => h(SvgIcon, { d: mdiEyeOff }),\n class: ['ms-2'],\n size: 'x-small',\n inline: true,\n }),\n ]\n ),\n append: () =>\n h('div', { class: ['d-flex', 'align-center', 'justify-end'] }, [\n h(VBtn, {\n size: 'x-small',\n icon: () => h(SvgIcon, { d: mdiEye }),\n class: [],\n variant: 'text',\n onClick: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n const updatable = Array.from(updatedShowingFields.value)\n updatable.push(f)\n updatedShowingFields.value = updatable\n nextTick(() => {\n updateIsDirty()\n })\n },\n }),\n ]),\n }\n )\n })\n )\n : null,\n ]),\n h(VDivider, { class: ['flex-grow-0'] }),\n h(\n VToolbar,\n { color: color.value || 'transparent', class: ['flex-grow-0'], density: 'compact' },\n () => [\n h(VSpacer),\n h(VToolbarItems, {}, () => [\n h(VBtn, {\n icon: () => h(SvgIcon, { d: mdiContentSaveCheck }),\n variant: 'text',\n onClick: () => {\n if (isDirty.value) {\n emit('update:showingFields', updatedShowingFields.value)\n nextTick(() => {\n isDirty.value = false\n visibility.value = false\n })\n } else {\n nextTick(() => {\n visibility.value = false\n })\n }\n },\n }),\n ]),\n ]\n ),\n h(VDivider, { class: ['flex-grow-0'] }),\n ])\n ),\n h(VDialog, confirmationDialogBindings.value, () =>\n h(VCard, {}, () =>\n h(VEmptyState, confirmationEmptyStateBindings.value, {\n actions: () => [\n h(ControlButton, discardDispositionButtonBindings.value),\n h(ControlButton, saveDispositionButtonBindings.value),\n ],\n })\n )\n ),\n ]\n },\n})\n","import { DateTime } from 'luxon'\nimport { SvgIcon } from '../svg-icon'\nimport { formats } from './constants'\nimport { utils, writeFile } from 'xlsx'\nimport { useI18n, useBrowser } from '../ioc'\nimport { default as numeral } from 'numeral'\nimport { printf as format } from 'fast-printf'\nimport { isHTMLElement } from '../common/guards'\nimport { VCard } from 'vuetify/components/VCard'\nimport { ControlButton } from '../control-button'\nimport { VBadge } from 'vuetify/components/VBadge'\nimport { VLabel } from 'vuetify/components/VLabel'\nimport { VDialog } from 'vuetify/components/VDialog'\nimport { VListItem } from 'vuetify/components/VList'\nimport { VSelect } from 'vuetify/components/VSelect'\nimport { FormWithValidation } from '../ux/validation'\nimport { exportOptionsSchemaFactory } from './schemas'\nimport { VCheckbox } from 'vuetify/components/VCheckbox'\nimport { propsAndEmitsFactory } from '../common/factories'\nimport { VTextField } from 'vuetify/components/VTextField'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { formatBigNumber } from '../common/big_number_formatter'\nimport { VContainer, VRow, VCol } from 'vuetify/components/VGrid'\nimport { VProgressLinear } from 'vuetify/components/VProgressLinear'\nimport { typeAndFormatToResourcefulFieldType } from '../common/utils'\nimport { defineComponent, h, ref, computed, toRefs, watch, nextTick, warn } from 'vue'\nimport {\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n} from '../resourceful-index/partials/_columns_controls'\nimport {\n mdiFileQuestion,\n mdiMenuDown,\n mdiFileFind,\n mdiFileTable,\n mdiCheckboxBlankOutline,\n mdiCheckboxMarked,\n mdiFileDownload,\n mdiInformationSlabCircle,\n mdiFileCancel,\n mdiFileCheck,\n} from '@mdi/js'\nimport type { ExportOptions } from './schemas'\nimport type { FireAlertFn } from '../ux/alert'\nimport type { VSheet } from 'vuetify/components/VSheet'\nimport type { ControlButtonProps } from '../control-button/props'\nimport type { ResourcefulSchemaDefinition } from '../resourceful-index/types'\nimport type { makeVCardProps } from '@nhtio/vuetifiable/components/VCard/VCard'\nimport type { ExtractSlotDefinitions, NamedSlotParameters } from '../common/types'\nimport type { ExtractPublicPropTypes, PropType, ComponentPublicInstance } from 'vue'\nimport type { makeVSelectProps } from '@nhtio/vuetifiable/components/VSelect/VSelect'\nimport type { makeVDialogProps } from '@nhtio/vuetifiable/components/VDialog/VDialog'\nimport type { makeVCheckboxProps } from '@nhtio/vuetifiable/components/VCheckbox/VCheckbox'\nimport type { makeVTextFieldProps } from '@nhtio/vuetifiable/components/VTextField/VTextField'\nimport type { FormWithValidationProps, FormWithValidationDefaultSlotProps } from '../ux/validation'\nimport type { makeVProgressLinearProps } from '@nhtio/vuetifiable/components/VProgressLinear/VProgressLinear'\nimport type {\n DispositionButtonProps,\n SaveButtonProps,\n} from '../resourceful-index/partials/_columns_controls'\n\nexport type FetchViaAsyncIteratorFn = (\n cb: (records: any[], page: number, perPage: number, total: number) => void | Promise<void>,\n signal?: AbortSignal | undefined,\n allFields?: boolean,\n coolDownMs?: number,\n onlyIds?: Array<string | number>\n) => Promise<void>\n\nconst { makeProps: makeExporterProps, emits: exporterEmits } = propsAndEmitsFactory(\n {\n dispositionButtons: {\n type: Object as PropType<DispositionButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n },\n downloadButton: {\n type: Object as PropType<SaveButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n },\n selectedItemCount: {\n type: Number,\n required: true,\n },\n totalItemCount: {\n type: Number,\n required: true,\n },\n pageSize: {\n type: Number,\n required: true,\n },\n alertFn: {\n type: Function as PropType<FireAlertFn>,\n required: true,\n },\n fetchViaAsyncIteratorFn: {\n type: Function as PropType<FetchViaAsyncIteratorFn>,\n required: true,\n },\n safeRecordCountThreshold: {\n type: Number,\n default: 100,\n },\n panelRef: {\n type: [Object, null] as PropType<VSheet | null>,\n default: null,\n },\n selectedItems: {\n type: Array as PropType<Array<Record<string, any>>>,\n default: () => [],\n },\n possibleFields: {\n type: Object as PropType<ResourcefulSchemaDefinition>,\n required: true,\n },\n showingFields: {\n type: Array as PropType<string[]>,\n required: true,\n },\n labels: {\n type: Object as PropType<Record<string, string>>,\n default: () => ({}),\n },\n computedFields: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n },\n {\n close: () => true,\n },\n 'Exporter'\n)\n\ntype VTextFieldProps = ExtractPublicPropTypes<ReturnType<typeof makeVTextFieldProps>>\ntype VSelectProps = ExtractPublicPropTypes<ReturnType<typeof makeVSelectProps>>\ntype VCheckboxProps = ExtractPublicPropTypes<ReturnType<typeof makeVCheckboxProps>>\ntype VCardProps = ExtractPublicPropTypes<ReturnType<typeof makeVCardProps>>\ntype VDialogProps = ExtractPublicPropTypes<ReturnType<typeof makeVDialogProps>>\ntype VProgressLinearProps = ExtractPublicPropTypes<ReturnType<typeof makeVProgressLinearProps>>\ntype VSelectSlots = ExtractSlotDefinitions<typeof VSelect.slots>\n\ntype VSelectItemSlotParams = NamedSlotParameters<VSelectSlots, 'item'>[0]\ntype VSelectSelectionSlotParams = NamedSlotParameters<VSelectSlots, 'selection'>[0]\n\nenum ExportStep {\n FETCHING = 'fetching',\n GENERATING = 'generating',\n COMPLETED = 'completed',\n}\n\nexport const Exporter = defineComponent({\n name: 'ExporterForm',\n props: makeExporterProps(),\n emits: exporterEmits,\n setup(props, { emit }) {\n const {\n selectedItemCount,\n totalItemCount,\n pageSize,\n dispositionButtons,\n downloadButton,\n safeRecordCountThreshold,\n panelRef,\n selectedItems,\n possibleFields,\n showingFields,\n labels,\n } = toRefs(props)\n const browser = useBrowser()\n const getPanelHtmlElement = (): HTMLElement | null => {\n if (\n !browser.ssr &&\n panelRef.value &&\n '$el' in panelRef.value &&\n isHTMLElement(panelRef.value.$el)\n )\n return panelRef.value.$el\n return null\n }\n const fire: FireAlertFn = (...args: Parameters<FireAlertFn>) => props.alertFn(...args)\n const fetchViaAsyncIterator: FetchViaAsyncIteratorFn = (\n ...args: Parameters<FetchViaAsyncIteratorFn>\n ) => props.fetchViaAsyncIteratorFn(...args)\n const t = useI18n()\n const formRef = ref<FormWithValidation | null>(null)\n const fullSchema = computed(() => exportOptionsSchemaFactory(t))\n /**\n * Refs for displaying the current state of the download process\n */\n const exportAbortController = ref<AbortController | undefined>(undefined)\n const exportOptions = ref<ExportOptions | undefined>(undefined)\n const isExporting = computed(() => 'undefined' !== typeof exportOptions.value)\n const exportStep = ref<ExportStep | undefined>(undefined)\n const exportTotalCount = ref<number | undefined>(undefined)\n const exportFetchProgress = ref<number>(0)\n const exportFetchProgressPercent = computed(() => {\n if (!exportTotalCount.value || exportTotalCount.value <= 0) return 0\n return Math.min(100, Math.round((exportFetchProgress.value / exportTotalCount.value) * 100))\n })\n const exportOverallProgressPercent = computed(() => {\n if (!exportTotalCount.value || exportTotalCount.value <= 0) return 0\n const adjustedTotalCount = exportTotalCount.value * 1.1\n const adjustedProcessCount =\n exportStep.value === ExportStep.GENERATING || exportStep.value === ExportStep.COMPLETED\n ? exportFetchProgress.value * 1.1\n : exportFetchProgress.value\n return Math.min(100, Math.round((adjustedProcessCount / adjustedTotalCount) * 100))\n })\n const formattedExportOverallProgressPercent = computed(\n () => numeral(exportOverallProgressPercent.value).format('0,0') + '%'\n )\n const formattedFetchProgress = computed(() => numeral(exportFetchProgress.value).format('0,0'))\n const formattedTotalCount = computed(() =>\n exportTotalCount.value ? numeral(exportTotalCount.value).format('0,0') : '0'\n )\n const formattedStatusText = computed(() => {\n switch (exportStep.value) {\n case ExportStep.FETCHING:\n return format(\n t('exporter.status.fetching'),\n formattedFetchProgress.value,\n formattedTotalCount.value\n )\n case ExportStep.GENERATING:\n return t('exporter.status.generating')\n case ExportStep.COMPLETED:\n return t('exporter.status.completed')\n default:\n return t('exporter.status.pending')\n }\n })\n const reset = () => {\n if (isExporting.value) {\n warn('Exporter', 'Cannot reset the form while an export is in progress')\n return\n }\n if (formRef.value) {\n formRef.value.reset()\n }\n }\n const setFileNameTo = (name: string) => {\n if (isExporting.value) {\n warn('Exporter', 'Cannot set the filename while an export is in progress')\n return\n }\n if (formRef.value) {\n formRef.value.setFieldValue('filename', name)\n }\n }\n const resetAndClose = () => {\n if (isExporting.value) {\n warn('Exporter', 'Cannot reset the form while an export is in progress')\n return\n }\n reset()\n nextTick(() => emit('close'))\n }\n const cleanupExportState = (close: boolean = false) => {\n if (exportAbortController.value) {\n exportAbortController.value = undefined\n }\n exportOptions.value = undefined\n exportStep.value = undefined\n exportTotalCount.value = undefined\n exportFetchProgress.value = 0\n if (close) {\n nextTick(() => resetAndClose())\n }\n }\n const cancelExport = () => {\n if (exportAbortController.value) {\n exportAbortController.value.abort()\n }\n nextTick(() => cleanupExportState(true))\n }\n const requestCancel = async () => {\n const { isConfirmed } = await fire({\n icon: 'warning',\n title: t('exporter.alerts.cancelExport.title'),\n text: t('exporter.alerts.cancelExport.text'),\n confirmButtonCta: t('exporter.alerts.cancelExport.confirmButtonText'),\n denyButtonCta: t('exporter.alerts.cancelExport.denyButtonText'),\n showDenyButton: true,\n signal: exportAbortController.value?.signal,\n })\n if (!isConfirmed) return false\n cancelExport()\n fire({\n icon: 'info',\n title: t('exporter.alerts.cancelExport.cancelled.title'),\n text: t('exporter.alerts.cancelExport.cancelled.text'),\n })\n return true\n }\n /**\n * Bindings for the form and its fields\n */\n const formWithValidationProps: FormWithValidationProps = {\n fullSchema,\n formInitialValues: {\n filename: '',\n format: 'xlsx',\n scope: 'all',\n includeAllColumns: false,\n humanizeNames: true,\n humanizeData: true,\n },\n submissionHandler: async (values: ExportOptions) => {\n // Step 1: check if we are exceeding the safe record count threshold\n // If so, show a confirmation dialog\n const downloadableCount =\n 'all' === values.scope ? totalItemCount.value : selectedItemCount.value\n if (downloadableCount > safeRecordCountThreshold.value) {\n const { isConfirmed } = await fire({\n icon: 'warning',\n title: t('exporter.alerts.largeExport.title'),\n text: format(\n t('exporter.alerts.largeExport.text'),\n numeral(downloadableCount).format('0,0')\n ),\n confirmButtonCta: t('exporter.alerts.largeExport.confirmButtonText'),\n cancelButtonCta: t('exporter.alerts.largeExport.cancelButtonText'),\n showCancelButton: true,\n })\n if (!isConfirmed) {\n return\n }\n }\n // Step 2: set the export state which will kick off the export process\n // this will trigger the progress indicator to show\n exportOptions.value = values\n exportAbortController.value = new AbortController()\n exportAbortController.value.signal.addEventListener('abort', () => {\n cleanupExportState()\n })\n exportStep.value = ExportStep.FETCHING\n exportTotalCount.value = downloadableCount\n // Step 3: Initialize the worksheet and start fetching the data\n const worksheet = utils.aoa_to_sheet([[]])\n // Step 3.a: Add the header row\n const rawHeaderRow: string[] = []\n const headerRow: string[] = []\n if (values.includeAllColumns) {\n Object.keys(possibleFields.value).forEach((key) => {\n rawHeaderRow.push(key)\n headerRow.push(\n values.humanizeNames ? (labels.value[key] ? t(labels.value[key]) : t(key)) : key\n )\n })\n } else {\n showingFields.value\n .filter((f) => Object.keys(possibleFields.value).includes(f))\n .forEach((f) => {\n rawHeaderRow.push(f)\n headerRow.push(\n values.humanizeNames ? (labels.value[f] ? t(labels.value[f]) : t(f)) : f\n )\n })\n }\n utils.sheet_add_aoa(worksheet, [headerRow], { origin: 'A1' })\n // Step 3.b: Start fetching the data via the provided async iterator function\n await fetchViaAsyncIterator(\n async (records) => {\n if (exportAbortController.value!.signal.aborted) return\n records.forEach((record) => {\n const row: any[] = []\n rawHeaderRow.forEach((field) => {\n let rawValue = record[field]\n if (!values.humanizeData) {\n row.push(rawValue)\n return\n }\n const colDef = possibleFields.value[field]\n if (!colDef) {\n row.push(rawValue)\n return\n }\n if ('$ref' in colDef && 'string' === typeof colDef.$ref) {\n const key =\n 'x-resourceful-display-key' in colDef\n ? (colDef['x-resourceful-display-key'] as string)\n : 'id'\n const displayable = record[field]?.[key] || ''\n row.push(String(displayable))\n return\n }\n if ('computed' === colDef.type) {\n if ('x-table-header-definition' in colDef) {\n rawValue = colDef['x-table-header-definition'].compute(record)\n }\n }\n let type = typeAndFormatToResourcefulFieldType(colDef.type, colDef.format)\n if ('computed' === colDef.type) {\n if ('x-table-header-definition' in colDef) {\n type = colDef['x-table-header-definition'].kind || type\n }\n }\n switch (type) {\n case 'binary':\n row.push('')\n break\n\n case 'bigint':\n row.push(formatBigNumber(rawValue.toString(), '0,0'))\n break\n\n case 'boolean':\n if ('boolean' === typeof rawValue) {\n row.push(rawValue ? t('boolean.true') : t('boolean.false'))\n } else {\n row.push('boolean.undetermined')\n }\n break\n\n case 'dateTime':\n row.push(\n rawValue\n ? DateTime.fromISO(rawValue).toLocaleString(DateTime.DATETIME_MED)\n : ''\n )\n break\n\n case 'date':\n row.push(\n rawValue ? DateTime.fromISO(rawValue).toLocaleString(DateTime.DATE_MED) : ''\n )\n break\n\n case 'integer':\n case 'unsignedInteger':\n row.push(numeral(rawValue).format('0,0'))\n break\n\n case 'number':\n row.push(numeral(rawValue).format('0,0.00'))\n break\n\n case 'string':\n default:\n row.push(String(rawValue))\n break\n }\n })\n utils.sheet_add_aoa(worksheet, [row], { origin: -1 })\n exportFetchProgress.value = exportFetchProgress.value + 1\n })\n },\n exportAbortController.value.signal,\n true,\n 200,\n selectedItems.value.length > 0 ? selectedItems.value.map((r) => r.id) : undefined\n )\n if (exportAbortController.value.signal.aborted) return\n // Step 4 Generate the workbook and trigger the download\n exportStep.value = ExportStep.GENERATING\n const workbook = utils.book_new()\n utils.book_append_sheet(workbook, worksheet, values.filename || 'Data')\n const selectedFormat = formats.find((f) => f.value === values.format)!\n writeFile(workbook, [values.filename, selectedFormat.extension].join(''), {\n bookType: selectedFormat.value,\n sheet: values.filename || 'Data',\n })\n // Step 5: Mark as complete\n exportStep.value = ExportStep.COMPLETED\n },\n }\n const fileFormatBaseBindings = computed<VSelectProps>(\n () =>\n ({\n label: t('exporter.form.fields.format.label'),\n items: Array.from(formats),\n itemTitle: 'label',\n itemValue: 'value',\n returnObject: false,\n clearable: false,\n variant: 'outlined',\n hideDetails: 'auto',\n density: 'compact',\n menuIcon: h(SvgIcon, { d: mdiMenuDown }) as any,\n prependInnerIcon: h(SvgIcon, { d: mdiFileQuestion }) as any,\n }) satisfies VSelectProps\n )\n const fileNameBaseBindings = computed<VTextFieldProps>(() => {\n const selectedFormat = formRef.value?.formValues.format\n const fmt = formats.find((f) => f.value === selectedFormat)\n const extension = fmt?.extension ?? ''\n return {\n label: t('exporter.form.fields.filename.label'),\n variant: 'outlined',\n hideDetails: 'auto',\n density: 'compact',\n suffix: extension || undefined,\n prependInnerIcon: h(SvgIcon, { d: mdiFileFind }) as any,\n } satisfies VTextFieldProps\n })\n const scopeOptions = computed(() => [\n {\n value: 'all',\n label: format(\n t('exporter.form.fields.scope.options.all'),\n numeral(totalItemCount.value).format('0,0')\n ),\n badge: numeral(totalItemCount.value).format('0,0'),\n },\n {\n value: 'page',\n label: format(\n t('exporter.form.fields.scope.options.page'),\n numeral(pageSize.value).format('0,0')\n ),\n disabled: !(selectedItemCount.value === pageSize.value),\n badge: numeral(pageSize.value).format('0,0'),\n },\n {\n value: 'selected',\n label: format(\n t('exporter.form.fields.scope.options.selected'),\n numeral(selectedItemCount.value).format('0,0')\n ),\n disabled: selectedItemCount.value === 0 || selectedItemCount.value === pageSize.value,\n badge: numeral(selectedItemCount.value).format('0,0'),\n },\n ])\n watch(selectedItemCount, (is, was) => {\n if (!formRef.value) return\n const current = formRef.value.formValues.scope\n if (is > 0 && was === 0 && current === 'all') {\n formRef.value.setFieldValue('scope', 'selected')\n } else if (is === pageSize.value && was < pageSize.value && current === 'selected') {\n formRef.value.setFieldValue('scope', 'page')\n }\n })\n watch(scopeOptions, (is) => {\n nextTick(() => {\n if (!formRef.value) return\n const current = formRef.value.formValues.scope\n if (!is.find((i) => i.value === current && !i.disabled)) {\n formRef.value.setFieldValue('scope', 'all')\n }\n })\n })\n const scopeSelectionBadgeContent = computed(() => {\n const current = formRef.value?.formValues.scope\n switch (current) {\n case 'all':\n return numeral(totalItemCount.value).format('0,0')\n case 'page':\n return numeral(pageSize.value).format('0,0')\n case 'selected':\n return numeral(selectedItemCount.value).format('0,0')\n default:\n return undefined\n }\n })\n const scopeItems = computed(() => Array.from(scopeOptions.value).filter((i) => !i.disabled))\n const scopeBaseBindings = computed<VSelectProps>(\n () =>\n ({\n label: t('exporter.form.fields.scope.label'),\n items: scopeItems.value,\n itemTitle: 'label',\n itemValue: 'value',\n returnObject: false,\n clearable: false,\n variant: 'outlined',\n hideDetails: 'auto',\n density: 'compact',\n menuIcon:\n scopeItems.value.length <= 1\n ? (h(SvgIcon, { d: mdiInformationSlabCircle }) as any)\n : (h(SvgIcon, { d: mdiMenuDown }) as any),\n prependInnerIcon: h(SvgIcon, { d: mdiFileTable }) as any,\n readonly: scopeItems.value.length <= 1,\n }) satisfies VSelectProps\n )\n const checkboxFieldBaseBindings: VCheckboxProps = {\n falseIcon: h(SvgIcon, { d: mdiCheckboxBlankOutline }) as any,\n trueIcon: h(SvgIcon, { d: mdiCheckboxMarked }) as any,\n falseValue: false,\n trueValue: true,\n hideDetails: 'auto',\n }\n const includeAllColumnsBaseBindings = computed<VCheckboxProps>(() => ({\n ...checkboxFieldBaseBindings,\n label: t('exporter.form.fields.includeAllColumns.label'),\n }))\n const humanizeNamesBaseBindings = computed<VCheckboxProps>(() => ({\n ...checkboxFieldBaseBindings,\n label: t('exporter.form.fields.humanizeNames.label'),\n }))\n const humanizeDataBaseBindings = computed<VCheckboxProps>(() => ({\n ...checkboxFieldBaseBindings,\n label: t('exporter.form.fields.humanizeData.label'),\n }))\n const submitButtonBindings = computed<ControlButtonProps>(\n () =>\n ({\n ...dispositionButtons.value,\n ...downloadButton.value,\n cta: t('exporter.form.actions.download'),\n prependIcon: h(SvgIcon, { d: mdiFileDownload }) as any,\n type: 'submit',\n badge: {\n content: scopeSelectionBadgeContent.value,\n },\n }) satisfies ControlButtonProps\n )\n const progressDialogBindings = computed<VDialogProps>(() => ({\n attach: panelRef.value ? (getPanelHtmlElement() ?? 'body') : 'body',\n absolute: true,\n closeOnBack: false,\n closeOnContentClick: false,\n contained: true,\n modelValue: true,\n persistent: true,\n retainFocus: true,\n scrim: true,\n maxWidth: 500,\n }))\n const cardBindings = computed<VCardProps>(() => ({\n color: 'surface',\n }))\n const progressLinearBindings = computed<VProgressLinearProps>(() => ({\n color: 'success',\n height: 16,\n modelValue: exportOverallProgressPercent.value,\n bufferValue: exportFetchProgressPercent.value,\n stream: true,\n }))\n const cancelButtonBindings = computed<ControlButtonProps>(\n () =>\n ({\n ...dispositionButtons.value,\n ...downloadButton.value,\n cta: t('exporter.form.actions.cancel'),\n prependIcon: h(SvgIcon, { d: mdiFileCancel }) as any,\n onClick: () => requestCancel(),\n state: {\n disabled: exportStep.value === ExportStep.GENERATING,\n },\n }) satisfies ControlButtonProps\n )\n const closeButtonBindings = computed<ControlButtonProps>(\n () =>\n ({\n ...dispositionButtons.value,\n ...downloadButton.value,\n cta: t('exporter.form.actions.close'),\n prependIcon: h(SvgIcon, { d: mdiFileCheck }) as any,\n onClick: () => cleanupExportState(true),\n }) satisfies ControlButtonProps\n )\n useRender(() =>\n h(\n FormWithValidation,\n {\n ref: formRef,\n ...formWithValidationProps,\n },\n {\n default: ({ formFieldBindings }: FormWithValidationDefaultSlotProps) => {\n return [\n h(VContainer, { fluid: true }, () => [\n h(VRow, {}, () =>\n h(VCol, { cols: 12 }, () => [\n h(\n VSelect,\n {\n ...fileFormatBaseBindings.value,\n ...formFieldBindings.value.format,\n },\n {\n item: ({ props: slotProps, item }: VSelectItemSlotParams) =>\n h(\n VListItem,\n {\n ...slotProps,\n },\n {\n append: () =>\n h(VBadge, {\n color: 'surface-light',\n content: (item.raw as any).extension,\n inline: true,\n }),\n }\n ),\n selection: ({ item }: VSelectSelectionSlotParams) =>\n h(\n 'span',\n {\n class: ['v-autocomplete__selection-text', 'text-truncate'],\n },\n [\n item.title,\n h(VBadge, {\n color: 'currentColor',\n content: (item.raw as any).extension,\n inline: true,\n class: ['ms-2'],\n }),\n ]\n ),\n }\n ),\n ])\n ),\n h(VRow, {}, () =>\n h(VCol, { cols: 12 }, () => [\n h(VTextField, {\n ...fileNameBaseBindings.value,\n ...formFieldBindings.value.filename,\n }),\n ])\n ),\n h(VRow, {}, () =>\n h(VCol, { cols: 12 }, () => [\n h(\n VSelect,\n {\n ...scopeBaseBindings.value,\n ...formFieldBindings.value.scope,\n },\n {\n item: ({ props: slotProps, item }: VSelectItemSlotParams) =>\n h(\n VListItem,\n {\n ...slotProps,\n },\n {\n append: () =>\n h(VBadge, {\n color: 'surface-light',\n content: (item.raw as any).badge,\n inline: true,\n }),\n }\n ),\n selection: ({ item }: VSelectSelectionSlotParams) =>\n h(\n 'span',\n {\n class: ['v-autocomplete__selection-text', 'text-truncate'],\n },\n [\n item.title,\n h(VBadge, {\n color: 'currentColor',\n content: scopeSelectionBadgeContent.value,\n inline: true,\n class: ['ms-2'],\n }),\n ]\n ),\n }\n ),\n ])\n ),\n h(VRow, {}, () =>\n h(VCol, { cols: 12 }, () => [\n h(VCheckbox, {\n ...includeAllColumnsBaseBindings.value,\n ...formFieldBindings.value.includeAllColumns,\n }),\n h(VCheckbox, {\n ...humanizeNamesBaseBindings.value,\n ...formFieldBindings.value.humanizeNames,\n }),\n h(VCheckbox, {\n ...humanizeDataBaseBindings.value,\n ...formFieldBindings.value.humanizeData,\n }),\n ])\n ),\n h(VRow, {}, () =>\n h(VCol, { cols: 12, class: ['d-flex', 'justify-end'] }, () => [\n h(ControlButton, {\n ...submitButtonBindings.value,\n }),\n ])\n ),\n ]),\n isExporting.value\n ? h(\n VDialog,\n {\n ...progressDialogBindings.value,\n },\n () =>\n h(VCard, { ...cardBindings.value }, () =>\n h(VContainer, { fluid: true }, () => [\n h(VRow, { justify: 'center' }, () =>\n h(VCol, { cols: 12, class: ['text-center'] }, () => [\n h(VLabel, {\n class: ['text-button'],\n text: formattedStatusText.value,\n }),\n ])\n ),\n h(VRow, { justify: 'center' }, () =>\n h(VCol, { cols: 10, class: [] }, () => [\n h(VProgressLinear, { ...progressLinearBindings.value }),\n h(\n 'div',\n { class: ['text-caption', 'mt-2'] },\n () => formattedExportOverallProgressPercent.value\n ),\n ])\n ),\n h(VRow, { justify: 'center' }, () =>\n h(VCol, { cols: 12, class: ['d-flex', 'justify-end'] }, () => [\n exportStep.value === ExportStep.COMPLETED\n ? null\n : h(ControlButton, { ...cancelButtonBindings.value }),\n exportStep.value === ExportStep.COMPLETED\n ? h(ControlButton, { ...closeButtonBindings.value })\n : null,\n ])\n ),\n ])\n )\n )\n : null,\n ]\n },\n }\n )\n )\n return {\n reset: reset,\n cancel: cancelExport,\n setFileNameTo: setFileNameTo,\n }\n },\n})\n\nexport type Exporter = InstanceType<typeof Exporter> & ComponentPublicInstance\n","import { DateTime } from 'luxon'\nimport { mdiClose } from '@mdi/js'\nimport { useI18n } from '../../ioc'\nimport { SvgIcon } from '../../svg-icon'\nimport { Exporter } from '../../exporter'\nimport { VBtn } from 'vuetify/components/VBtn'\nimport { VSheet } from 'vuetify/components/VSheet'\nimport { VDivider } from 'vuetify/components/VDivider'\nimport { useResourcefulIndexScopedDisplay } from '../index'\nimport { propsAndEmitsFactory } from '../../common/factories'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { default as filenameSanitizer } from 'sanitize-filename'\nimport { defineComponent, h, toRefs, computed, ref, watch } from 'vue'\nimport { VNavigationDrawer } from 'vuetify/components/VNavigationDrawer'\nimport { VToolbar, VToolbarTitle, VToolbarItems } from 'vuetify/components/VToolbar'\nimport {\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n} from './_columns_controls'\nimport type { FireAlertFn } from '../../ux/alert'\nimport type { ComputedColumnDefinitions } from './_table'\nimport type { ResourcefulSchemaDefinition } from '../types'\nimport type { PropType, ComponentPublicInstance } from 'vue'\nimport type { FetchViaAsyncIteratorFn } from '../../exporter'\nimport type { DispositionButtonProps, SaveButtonProps } from './_columns_controls'\n\nconst { makeProps: makeDownloadDrawerProps, emits: downloadDrawerEmits } = propsAndEmitsFactory(\n {\n modelValue: {\n type: Boolean,\n default: false,\n },\n color: {\n type: String as PropType<string | undefined>,\n default: undefined,\n },\n dispositionButtons: {\n type: Object as PropType<DispositionButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n },\n downloadButton: {\n type: Object as PropType<SaveButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n },\n selectedItemCount: {\n type: Number,\n required: true,\n },\n totalItemCount: {\n type: Number,\n required: true,\n },\n pageSize: {\n type: Number,\n required: true,\n },\n alertFn: {\n type: Function as PropType<FireAlertFn>,\n required: true,\n },\n fetchViaAsyncIteratorFn: {\n type: Function as PropType<FetchViaAsyncIteratorFn>,\n required: true,\n },\n safeRecordCountThreshold: {\n type: Number,\n default: 100,\n },\n selectedItems: {\n type: Array as PropType<Array<Record<string, any>>>,\n default: () => [],\n },\n possibleFields: {\n type: Object as PropType<ResourcefulSchemaDefinition>,\n required: true,\n },\n showingFields: {\n type: Array as PropType<string[]>,\n required: true,\n },\n labels: {\n type: Object as PropType<Record<string, string>>,\n default: () => ({}),\n },\n computedColumns: {\n type: Array as PropType<ComputedColumnDefinitions>,\n default: () => [],\n },\n },\n {\n 'update:modelValue': (val: boolean) => 'boolean' === typeof val,\n },\n 'DownloadDrawer'\n)\n\nexport const DownloadDrawer = defineComponent({\n name: 'DownloadDrawer',\n props: makeDownloadDrawerProps(),\n emits: downloadDrawerEmits,\n setup(props, { emit }) {\n const t = useI18n()\n const makeDefaultFilename = () => {\n const timeInSeconds = Math.round(DateTime.now().toSeconds())\n const translated = t('resourcefulIndex.download.defaultFilename')\n const fallback = 'downloaded_records'\n if (filenameSanitizer(translated) !== translated) {\n return [fallback, timeInSeconds].join('_').replace(/__+/g, '_').replace(/\\s/g, '_')\n } else {\n return [translated, timeInSeconds].join('_').replace(/__+/g, '_').replace(/\\s/g, '_')\n }\n }\n const {\n modelValue,\n color,\n selectedItemCount,\n totalItemCount,\n pageSize,\n dispositionButtons,\n downloadButton,\n alertFn,\n fetchViaAsyncIteratorFn,\n safeRecordCountThreshold,\n selectedItems,\n possibleFields,\n showingFields,\n labels,\n computedColumns,\n } = toRefs(props)\n const value = computed({\n get: () => modelValue.value,\n set: (val: boolean) => emit('update:modelValue', val),\n })\n const { width: screenWidth } = useResourcefulIndexScopedDisplay()\n const panelRef = ref<VSheet | null>(null)\n const exporterRef = ref<Exporter | null>(null)\n watch(modelValue, (is) => {\n if (!exporterRef.value) return\n if (is) {\n // set a default value for the filename\n exporterRef.value.setFileNameTo(makeDefaultFilename())\n } else {\n exporterRef.value.cancel()\n }\n })\n useRender(() =>\n h(\n VNavigationDrawer,\n {\n 'modelValue': value.value,\n 'onUpdate:modelValue': (val: boolean) => {\n value.value = val\n },\n 'permanent': false,\n 'persistent': false,\n 'temporary': true,\n 'absolute': true,\n 'width': screenWidth.value < 400 ? screenWidth.value : 400,\n 'color': color.value,\n 'location': 'end',\n },\n () =>\n h(\n VSheet,\n {\n ref: panelRef,\n style: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n },\n color: 'transparent',\n },\n () => [\n h(VToolbar, { color: color.value || 'transparent' }, () => [\n h(VToolbarItems, {}, () => [\n h(VBtn, {\n icon: () => h(SvgIcon, { d: mdiClose }),\n variant: 'text',\n onClick: () => (value.value = false),\n }),\n ]),\n h(VToolbarTitle, {}, () => t('resourcefulIndex.download.title')),\n ]),\n h(VDivider, {}, () => []),\n h(Exporter, {\n ref: exporterRef,\n onClose: () => (value.value = false),\n selectedItemCount: selectedItemCount.value,\n totalItemCount: totalItemCount.value,\n pageSize: pageSize.value,\n dispositionButtons: dispositionButtons.value,\n downloadButton: downloadButton.value,\n alertFn: alertFn.value,\n fetchViaAsyncIteratorFn: fetchViaAsyncIteratorFn.value,\n safeRecordCountThreshold: safeRecordCountThreshold.value,\n panelRef: panelRef.value,\n selectedItems: selectedItems.value,\n possibleFields: possibleFields.value,\n showingFields: showingFields.value,\n labels: labels.value,\n computedColumns: computedColumns.value,\n }),\n ]\n )\n )\n )\n return {}\n },\n})\n\nexport type DownloadDrawer = InstanceType<typeof DownloadDrawer> & ComponentPublicInstance\n","/*\n |--------------------------------------------------------------------------\n | Bulk Edit Drawer\n |--------------------------------------------------------------------------\n | Component has 2 parts:\n | - Where the user \"enables\" fields to be edited in bulk\n | - Where the user puts the new values for those fields\n |\n | This is done for 2 reasons:\n | 1. So that the user doesn't accidentally overwrite fields they didn't\n | intend to edit\n | 2. To ensure that the form validation only runs on the fields\n | that the user intends to edit\n */\nimport * as qs from 'qs-esm'\nimport { useI18n, useHttp } from '../../ioc'\nimport { validator } from '@nhtio/validation'\nimport { VBtn } from 'vuetify/components/VBtn'\nimport { isObject } from '../../common/guards'\nimport { useHttpElements } from '../../ux/http'\nimport { VChip } from 'vuetify/components/VChip'\nimport { useScopedDisplay } from '../../ux/display'\nimport { svgPathToIconValue } from '../../svg-icon'\nimport { VListItem } from 'vuetify/components/VList'\nimport { VContainer } from 'vuetify/components/VGrid'\nimport { VDivider } from 'vuetify/components/VDivider'\nimport { VCheckbox } from 'vuetify/components/VCheckbox'\nimport { useResourcefulIndexScopedDisplay } from '../index'\nimport { propsAndEmitsFactory } from '../../common/factories'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { VAutocomplete } from 'vuetify/components/VAutocomplete'\nimport { stripUndefinedValuesFromObject } from '../../common/utils'\nimport { ResourcefulRecordForm } from '../../resourceful-record/form'\nimport { VNavigationDrawer } from 'vuetify/components/VNavigationDrawer'\nimport { ResourcefulRecordBusEmitter } from '../../resourceful-record/types'\nimport { defineComponent, h, toRefs, computed, ref, shallowRef, provide } from 'vue'\nimport { VToolbar, VToolbarTitle, VToolbarItems } from 'vuetify/components/VToolbar'\nimport { renderDefaultResourcefulRecordForm } from '../../resourceful-record/renderers'\nimport {\n ResourcefulRecordScopedDisplaySymbol,\n ResourcefulRecordScopedBusConsumerSymbol,\n} from '../../symbols'\nimport {\n mdiClose,\n mdiMenuDown,\n mdiCheckboxMarked,\n mdiCheckboxIntermediateVariant,\n mdiCheckboxBlankOutline,\n mdiContentSave,\n} from '@mdi/js'\nimport {\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n} from './_columns_controls'\nimport type { FireAlertFn } from '../..//ux/alert'\nimport type { ObjectSchema } from '@nhtio/validation'\nimport type { ValidationProps } from '../../ux/validation'\nimport type { PropType, ComponentPublicInstance } from 'vue'\nimport type { REnumFieldLoadedChoice } from '../../fields/enum'\nimport type { ResourcefulHttpResponse } from '../../services/http'\nimport type { makeVChipProps } from '@nhtio/vuetifiable/components/VChip/VChip'\nimport type { BaseResourcefulRecordProps } from '../../resourceful-record/props'\nimport type { ExtractPublicPropTypesFromUnknownFactory } from '../../common/factories'\nimport type { makeVListItemProps } from '@nhtio/vuetifiable/components/VList/VListItem'\nimport type { ResourceResourcefulRecordResponse } from '../../resourceful-record/types'\nimport type { makeVCheckboxProps } from '@nhtio/vuetifiable/components/VCheckbox/VCheckbox'\nimport type { makeVAutocompleteProps } from '@nhtio/vuetifiable/components/VAutocomplete/VAutocomplete'\nimport type {\n DispositionButtonProps,\n SaveButtonProps,\n DiscardButtonProps,\n} from './_columns_controls'\nimport type {\n ResourcefulRecordModelSchema,\n ResourcefulSubmissionHandler,\n ResourcefulRecordFormDefaultSlotArgs,\n} from '../../resourceful-record/types'\n\ntype VAutocompletePublicProps = ExtractPublicPropTypesFromUnknownFactory<\n typeof makeVAutocompleteProps\n> & {} & {\n 'onUpdate:modelValue': (val: any) => void\n}\ntype VChipPublicProps = ExtractPublicPropTypesFromUnknownFactory<typeof makeVChipProps>\ntype VListItemPublicProps = ExtractPublicPropTypesFromUnknownFactory<typeof makeVListItemProps>\ntype VCheckboxPublicProps = ExtractPublicPropTypesFromUnknownFactory<\n typeof makeVCheckboxProps\n> & {} & {\n 'onUpdate:modelValue': (val: any) => void\n}\n\nconst closeIcon = svgPathToIconValue(mdiClose)\nconst menuDownIcon = svgPathToIconValue(mdiMenuDown)\nconst checkboxMarkedIcon = svgPathToIconValue(mdiCheckboxMarked)\nconst checkboxIntermediateVariantIcon = svgPathToIconValue(mdiCheckboxIntermediateVariant)\nconst checkboxBlankOutlineIcon = svgPathToIconValue(mdiCheckboxBlankOutline)\nconst contentSaveIcon = svgPathToIconValue(mdiContentSave)\n\nconst { makeProps: makeBulkEditDrawerProps, emits: bulkEditDrawerEmits } = propsAndEmitsFactory(\n {\n baseUrl: {\n type: String as PropType<string>,\n required: true,\n },\n modelValue: {\n type: Boolean,\n default: false,\n },\n color: {\n type: String as PropType<string | undefined>,\n default: undefined,\n },\n dispositionButtons: {\n type: Object as PropType<DispositionButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n },\n saveButton: {\n type: Object as PropType<SaveButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n },\n discardButton: {\n type: Object as PropType<DiscardButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n },\n schema: {\n type: Object as PropType<ObjectSchema>,\n default: () => validator.object().unknown(true),\n },\n model: {\n type: Object as PropType<ResourcefulRecordModelSchema>,\n default: () => ({}),\n },\n uids: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n fireAlertFn: {\n type: Function as PropType<FireAlertFn>,\n required: true,\n },\n },\n {\n 'update:modelValue': (val: boolean) => 'boolean' === typeof val,\n 'success': () => true,\n },\n 'BulkEditDrawer'\n)\n\nexport const BulkEditDrawer = defineComponent({\n name: 'BulkEditDrawer',\n props: makeBulkEditDrawerProps(),\n emits: bulkEditDrawerEmits,\n setup(props, { emit }) {\n const t = useI18n()\n const http = useHttp()\n const containerVContainerRef = ref<VContainer | null>(null)\n const scopedDisplay = useScopedDisplay(containerVContainerRef)\n provide(ResourcefulRecordScopedDisplaySymbol, scopedDisplay)\n const { baseUrl, modelValue, color, schema, model, uids, fireAlertFn } = toRefs(props)\n const fire: FireAlertFn = (...args) => fireAlertFn.value(...args)\n const doRefreshChoices = computed<Record<string, () => Promise<REnumFieldLoadedChoice[]>>>(\n () =>\n stripUndefinedValuesFromObject(\n Object.fromEntries(\n Object.entries(model.value).map(([prop, propSchema]) => {\n if (\n propSchema['x-resourceful-relationship'] &&\n 'string' === typeof propSchema['x-resourceful-relationship'].choices\n ) {\n return [\n prop,\n async () => {\n if (\n !propSchema['x-resourceful-relationship'] ||\n 'string' !== typeof propSchema['x-resourceful-relationship'].choices\n )\n return\n const uri =\n propSchema['x-resourceful-relationship'].choices.replace(\n /^\\#/,\n baseUrl.value\n ) +\n qs.stringify(\n {\n uid: '0',\n },\n { addQueryPrefix: true }\n )\n try {\n const res = await http.get<{\n total: number\n choices: Array<{ title: string; value: string }>\n }>(uri)\n return res.data.choices\n } catch {\n return []\n }\n },\n ]\n }\n return [prop, undefined]\n })\n )\n ) as Record<string, () => Promise<REnumFieldLoadedChoice[]>>\n )\n const normalizedBaseUrl = computed(() => {\n let url = baseUrl.value || ''\n if (url.endsWith('/')) {\n url = url.slice(0, -1)\n }\n return url\n })\n const value = computed({\n get: () => modelValue.value,\n set: (val: boolean) => emit('update:modelValue', val),\n })\n const bulkEditableFieldItems = computed<{ value: string; label: string }[]>(() =>\n Object.entries(model.value).map(([key, propSchema]) => ({\n value: key,\n label:\n 'x-resourceful-relationship' in propSchema &&\n isObject(propSchema['x-resourceful-relationship']) &&\n propSchema['x-resourceful-relationship'].title\n ? propSchema['x-resourceful-relationship'].title\n : propSchema.title || key,\n }))\n )\n const selectedBulkEditableFields = ref<Array<keyof ResourcefulRecordModelSchema>>([])\n const bulkEditingModel = computed<ResourcefulRecordModelSchema>(() =>\n Object.fromEntries(\n Array.from(selectedBulkEditableFields.value).map((key) => [key, model.value[key]])\n )\n )\n const initialValues = computed<Record<string, any>>(() =>\n Object.fromEntries(Array.from(selectedBulkEditableFields.value).map((key) => [key, null]))\n )\n const { width: screenWidth } = useResourcefulIndexScopedDisplay()\n const bus = new ResourcefulRecordBusEmitter()\n const doFormSubmit = (...args: Parameters<ValidationProps['doFormSubmit']>) => {\n if (selectedBulkEditableFields.value.length === 0) return\n bus.emit('doFormSubmit', ...args)\n }\n const doResetForm = (...args: Parameters<ValidationProps['doResetForm']>) => {\n bus.emit('doResetForm', ...args)\n }\n const consumer = bus.spawn()\n provide(ResourcefulRecordScopedBusConsumerSymbol, consumer)\n const commitPayload = shallowRef<Record<string, any>>({})\n const {\n exec: execCommit,\n loading: commitLoading,\n abort: abortCommit,\n } = useHttpElements(\n () => `${normalizedBaseUrl.value}/$bulk/${uids.value.join(',')}`,\n () => 'patch',\n () => ({}),\n () => commitPayload.value,\n () => 5000,\n () => null\n )\n const doCommit = async (\n values: Record<string, any>,\n onSubmissionHandlerSuccess: (\n response: ResourceResourcefulRecordResponse,\n values: Record<string, any>\n ) => void | Promise<void>,\n onSubmissionHandlerFailure: (\n response: ResourcefulHttpResponse,\n values: Record<string, any>\n ) => void | Promise<void>\n ) => {\n abortCommit()\n commitPayload.value = values\n const res = await execCommit<ResourceResourcefulRecordResponse>()\n if (res.status >= 200 && res.status < 300) {\n await onSubmissionHandlerSuccess(res.data, values)\n } else {\n await onSubmissionHandlerFailure(res, values)\n }\n }\n const submissionHandler: ResourcefulSubmissionHandler = async (\n values,\n onSubmissionHandlerSuccess,\n onSubmissionHandlerFailure\n ) => await doCommit(values, onSubmissionHandlerSuccess, onSubmissionHandlerFailure)\n const controlButtonsAreInactionable = computed(() => commitLoading.value)\n const saveButtonsAreInactionable = computed(\n () => commitLoading.value || selectedBulkEditableFields.value.length === 0\n )\n const formBindings = computed<BaseResourcefulRecordProps>(\n () =>\n ({\n mode: 'create',\n schema: schema.value,\n initialValues: initialValues.value,\n model: bulkEditingModel.value,\n bus: consumer,\n submissionHandler,\n doRefreshChoices: doRefreshChoices.value,\n onSuccess: () => {\n fire({\n icon: 'success',\n title: t('resourcefulIndex.bulkUpdate.successTitle'),\n text: t('resourcefulIndex.bulkUpdate.successText'),\n })\n emit('success')\n doResetForm()\n selectedBulkEditableFields.value = []\n value.value = false\n },\n onPrevented: () => {\n fire({\n icon: 'warning',\n title: t('resourcefulIndex.bulkUpdate.validationErrorTitle'),\n text: t('resourcefulIndex.bulkUpdate.validationErrorText'),\n })\n },\n onFailure: () => {\n fire({\n icon: 'error',\n title: t('resourcefulIndex.bulkUpdate.failureTitle'),\n text: t('resourcefulIndex.bulkUpdate.failureText'),\n })\n },\n }) satisfies BaseResourcefulRecordProps\n )\n useRender(() =>\n h(\n VNavigationDrawer,\n {\n 'modelValue': value.value,\n 'onUpdate:modelValue': (val: boolean) => {\n value.value = val\n },\n 'permanent': false,\n 'persistent': false,\n 'temporary': true,\n 'absolute': true,\n 'width': screenWidth.value < 800 ? screenWidth.value : 800,\n 'color': color.value,\n 'location': 'end',\n },\n () =>\n h('div', { class: ['d-flex', 'flex-column', 'h-100'] }, [\n h(\n VToolbar,\n { color: color.value || 'transparent', class: ['flex-grow-0'], density: 'compact' },\n () => [\n h(VToolbarItems, {}, () => [\n h(VBtn, {\n icon: closeIcon,\n variant: 'text',\n disabled: controlButtonsAreInactionable.value,\n onClick: () => (value.value = false),\n }),\n h(VBtn, {\n icon: contentSaveIcon,\n variant: 'text',\n disabled: saveButtonsAreInactionable.value,\n loading: commitLoading.value,\n onClick: () => {\n doFormSubmit()\n },\n }),\n ]),\n h(VToolbarTitle, {}, () => t('resourcefulIndex.bulkUpdate.title')),\n ]\n ),\n h(VDivider, { class: ['flex-grow-0'] }),\n h('div', { class: ['flex-grow-1', 'overflow-y-auto'] }, [\n h(VContainer, { fluid: true, ref: containerVContainerRef }, () => [\n h(\n VAutocomplete,\n {\n modelValue: selectedBulkEditableFields.value,\n items: bulkEditableFieldItems.value,\n label: t('resourcefulIndex.bulkUpdate.selectFieldsLabel'),\n multiple: true,\n chips: true,\n clearable: true,\n itemTitle: 'label',\n itemValue: 'value',\n clearIcon: closeIcon,\n closableChips: true,\n menuIcon: menuDownIcon,\n hideDetails: true,\n variant: 'outlined' as const,\n density: 'compact' as const,\n ...({\n 'onUpdate:modelValue': (val: Array<keyof ResourcefulRecordModelSchema>) =>\n (selectedBulkEditableFields.value = val),\n } satisfies VAutocompletePublicProps),\n },\n {\n chip: ({ props: chipProps }: { item: any; props: any }) =>\n h(VChip, { ...chipProps, closeIcon: closeIcon } satisfies VChipPublicProps),\n item: ({ props: itemProps }: { item: any; props: any }) =>\n h(\n VListItem,\n {\n ...itemProps,\n } satisfies VListItemPublicProps,\n {\n prepend: ({\n isActive,\n isIndeterminate,\n select,\n }: {\n isActive: boolean\n isIndeterminate: boolean\n select: (value: boolean) => void\n }) =>\n h(VCheckbox as any, {\n modelValue: isActive,\n indeterminate: isIndeterminate,\n ripple: false,\n hideDetails: true,\n falseIcon: checkboxBlankOutlineIcon,\n indeterminateIcon: checkboxIntermediateVariantIcon,\n trueIcon: checkboxMarkedIcon,\n class: ['me-3'],\n ...{\n 'onUpdate:modelValue': (val: boolean) => select(val),\n },\n } satisfies VCheckboxPublicProps),\n }\n ),\n }\n ),\n ]),\n h(VDivider),\n h(\n ResourcefulRecordForm,\n {\n ...formBindings.value,\n },\n {\n default: (...args: ResourcefulRecordFormDefaultSlotArgs) =>\n renderDefaultResourcefulRecordForm(...args),\n }\n ),\n ]),\n h(VDivider, { class: ['flex-grow-0'] }),\n h(\n VToolbar,\n { color: color.value || 'transparent', class: ['flex-grow-0'], density: 'compact' },\n () => [\n h(VToolbarItems, {}, () => [\n h(VBtn, {\n icon: contentSaveIcon,\n variant: 'text',\n onClick: () => {\n doFormSubmit()\n },\n disabled: saveButtonsAreInactionable.value,\n loading: commitLoading.value,\n }),\n ]),\n ]\n ),\n h(VDivider, { class: ['flex-grow-0'] }),\n ])\n )\n )\n return {}\n },\n})\n\nexport type BulkEditDrawer = InstanceType<typeof BulkEditDrawer> & ComponentPublicInstance\n","import { mdiClose } from '@mdi/js'\nimport { useI18n } from '../../ioc'\nimport { SvgIcon } from '../../svg-icon'\nimport { VBtn } from 'vuetify/components/VBtn'\nimport { VContainer } from 'vuetify/components/VGrid'\nimport { VDivider } from 'vuetify/components/VDivider'\nimport { defineComponent, h, toRefs, computed } from 'vue'\nimport { useResourcefulIndexScopedDisplay } from '../index'\nimport { VNavigationDrawer } from 'vuetify/components/VNavigationDrawer'\nimport { VToolbar, VToolbarTitle, VToolbarItems } from 'vuetify/components/VToolbar'\nimport type { PropType } from 'vue'\n\nexport const ResourcefulIndexTooltip = defineComponent({\n name: 'ResourcefulIndexTooltip',\n props: {\n modelValue: {\n type: Boolean,\n default: false,\n },\n color: {\n type: String as PropType<string | undefined>,\n default: undefined,\n },\n },\n emits: ['update:modelValue'],\n setup(props, { emit }) {\n const { modelValue, color } = toRefs(props)\n const value = computed({\n get: () => modelValue.value,\n set: (val: boolean) => emit('update:modelValue', val),\n })\n const { width: screenWidth } = useResourcefulIndexScopedDisplay()\n const t = useI18n()\n return () =>\n h(\n VNavigationDrawer,\n {\n 'modelValue': value.value,\n 'onUpdate:modelValue': (val: boolean) => {\n value.value = val\n },\n 'permanent': false,\n 'persistent': false,\n 'temporary': true,\n 'absolute': true,\n 'width': screenWidth.value < 500 ? screenWidth.value * 0.85 : 500,\n 'color': color.value,\n },\n () => [\n h(VToolbar, { color: color.value || 'transparent' }, () => [\n h(VToolbarTitle, {}, () => t('resourcefulIndex.searchField.tooltip.title')),\n h(VToolbarItems, {}, () => [\n h(VBtn, {\n icon: () => h(SvgIcon, { d: mdiClose }),\n variant: 'text',\n onClick: () => (value.value = false),\n }),\n ]),\n ]),\n h(VDivider),\n h(VContainer, { fluid: true }, () =>\n h('div', {}, [\n h('p', { class: ['text-h6'] }),\n h(\n 'p',\n { class: ['text-subtitle-1'] },\n t('resourcefulIndex.searchField.tooltip.searchForTermInsensitive')\n ),\n h('ul', { class: ['ps-4'] }, [h('li', {}, h('code', {}, 'foo'))]),\n h(\n 'p',\n { class: ['text-subtitle-1'] },\n t('resourcefulIndex.searchField.tooltip.searchForTermSensitive')\n ),\n h('ul', { class: ['ps-4'] }, [\n h('li', {}, h('code', {}, \"'foo'\")),\n h('li', {}, h('code', {}, '\"foo\"')),\n ]),\n h(\n 'p',\n { class: ['text-subtitle-1'] },\n t('resourcefulIndex.searchField.tooltip.searchForTerminField')\n ),\n h('ul', { class: ['ps-4'] }, [\n h('li', {}, h('code', {}, 'name:foo')),\n h('li', {}, h('code', {}, \"'full name':foo\")),\n h('li', {}, h('code', {}, 'name.first:foo')),\n ]),\n h(\n 'p',\n { class: ['text-subtitle-1'] },\n t('resourcefulIndex.searchField.tooltip.searchForTermWithWildcards')\n ),\n h('ul', { class: ['ps-4'] }, [\n h('li', {}, h('code', {}, 'name:foo*bar')),\n h('li', {}, h('code', {}, 'name:foo?bar')),\n ]),\n h(\n 'p',\n { class: ['text-subtitle-1'] },\n t('resourcefulIndex.searchField.tooltip.searchForWithBoolean')\n ),\n h('ul', { class: ['ps-4'] }, [\n h('li', {}, h('code', {}, 'member:true')),\n h('li', {}, h('code', {}, 'member:false')),\n ]),\n h(\n 'p',\n { class: ['text-subtitle-1'] },\n t('resourcefulIndex.searchField.tooltip.searchForWithNull')\n ),\n h('ul', { class: ['ps-4'] }, [h('li', {}, h('code', {}, 'member:null'))]),\n h(\n 'p',\n { class: ['text-subtitle-1'] },\n t('resourcefulIndex.searchField.tooltip.searchForNumericComparisons')\n ),\n h('ul', { class: ['ps-4'] }, [\n h('li', {}, h('code', {}, 'height:=100')),\n h('li', {}, h('code', {}, 'createdAt:=2020-01-01T00:00:00Z')),\n h('li', {}, h('code', {}, 'height:>100')),\n h('li', {}, h('code', {}, 'createdAt:>2020-01-01T00:00:00Z')),\n h('li', {}, h('code', {}, 'height:>=100')),\n h('li', {}, h('code', {}, 'createdAt:>=2020-01-01T00:00:00Z')),\n h('li', {}, h('code', {}, 'height:<100')),\n h('li', {}, h('code', {}, 'createdAt:<2020-01-01T00:00:00Z')),\n h('li', {}, h('code', {}, 'height:<=100')),\n h('li', {}, h('code', {}, 'createdAt:<=2020-01-01T00:00:00Z')),\n ]),\n h(\n 'p',\n { class: ['text-subtitle-1'] },\n t('resourcefulIndex.searchField.tooltip.searchForNumericRanges')\n ),\n h('ul', { class: ['ps-4'] }, [\n h('li', {}, [\n h(\n 'strong',\n {},\n t('resourcefulIndex.searchField.tooltip.searchForNumericRanges.inclusive')\n ),\n ' ',\n h('code', {}, 'height:[100 TO 200]'),\n ]),\n h('li', {}, [\n h(\n 'strong',\n {},\n t('resourcefulIndex.searchField.tooltip.searchForNumericRanges.inclusive')\n ),\n ' ',\n h('code', {}, 'createdAt:[2020-01-01T00:00:00Z TO 2020-12-31T23:59:59Z]'),\n ]),\n h('li', {}, [\n h(\n 'strong',\n {},\n t('resourcefulIndex.searchField.tooltip.searchForNumericRanges.exclusive')\n ),\n ' ',\n h('code', {}, 'height:{100 TO 200}'),\n ]),\n h('li', {}, [\n h(\n 'strong',\n {},\n t('resourcefulIndex.searchField.tooltip.searchForNumericRanges.exclusive')\n ),\n ' ',\n h('code', {}, 'createdAt:{2020-01-01T00:00:00Z TO 2020-12-31T23:59:59Z}'),\n ]),\n ]),\n h(\n 'p',\n { class: ['text-subtitle-1'] },\n t('resourcefulIndex.searchField.tooltip.searchWithBooleanOperators')\n ),\n h('ul', { class: ['ps-4'] }, [\n h('li', {}, h('code', {}, 'name:foo AND height:=100')),\n h('li', {}, h('code', {}, 'name:foo OR name:bar')),\n ]),\n h(\n 'p',\n { class: ['text-subtitle-1'] },\n t('resourcefulIndex.searchField.tooltip.searchWithUnaryOperators')\n ),\n h('ul', { class: ['ps-4'] }, [\n h('li', {}, h('code', {}, 'NOT foo')),\n h('li', {}, h('code', {}, '-foo')),\n h('li', {}, h('code', {}, 'NOT foo:bar')),\n h('li', {}, h('code', {}, '-foo:bar')),\n h('li', {}, h('code', {}, 'name:foo AND NOT (bio:bar OR bio:baz)')),\n ]),\n h(\n 'p',\n { class: ['text-subtitle-1'] },\n t('resourcefulIndex.searchField.tooltip.searchWithImplicitAnd')\n ),\n h('ul', { class: ['ps-4'] }, [h('li', {}, h('code', {}, 'name:foo height:=100'))]),\n h(\n 'p',\n { class: ['text-subtitle-1'] },\n t('resourcefulIndex.searchField.tooltip.searchWithGrouping')\n ),\n h('ul', { class: ['ps-4'] }, [\n h('li', {}, h('code', {}, 'name:foo AND (bio:bar OR bio:baz)')),\n ]),\n ])\n ),\n ]\n )\n },\n})\n","import { useI18n } from '../../ioc'\nimport { deepmerge } from 'deepmerge-ts'\nimport { default as numeral } from 'numeral'\nimport { printf as format } from 'fast-printf'\nimport { h, defineComponent, computed, toRefs } from 'vue'\nimport { stripUndefinedValuesFromObject } from '../../common/utils'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { makeComponentProps } from '@nhtio/vuetifiable/composables/component'\nimport type { ExtractPublicPropTypes } from 'vue'\n\nexport const makeRecordsTotalProps = propsFactory(\n {\n page: {\n type: [String, Number],\n default: 1,\n },\n perPage: {\n type: [String, Number],\n default: 20,\n },\n total: {\n type: [String, Number],\n default: 0,\n },\n numeralFormat: {\n type: String,\n default: '0,0',\n },\n ...makeComponentProps(),\n },\n 'ResourcefulIndexRecordsTotal'\n)\n\nexport type RecordsTotalProps = ExtractPublicPropTypes<ReturnType<typeof makeRecordsTotalProps>>\n\nexport const ResourcefulIndexRecordsTotal = defineComponent({\n name: 'ResourcefulIndexRecordsTotal',\n props: makeRecordsTotalProps(),\n setup(props) {\n const { page, perPage, total, numeralFormat, class: componentClasses, style } = toRefs(props)\n const t = useI18n()\n const pageNumber = computed(() => {\n let ret: number = Number(page.value)\n if (Number.isNaN(ret)) {\n ret = 0\n }\n if (ret < 1) {\n ret = Math.abs(ret)\n }\n return ret\n })\n const perPageNumber = computed(() => {\n let ret: number = Number(perPage.value)\n if (Number.isNaN(ret)) {\n ret = 0\n }\n if (ret < 1) {\n ret = Math.abs(ret)\n }\n return ret\n })\n const totalNumber = computed(() => {\n let ret: number = Number(total.value)\n if (Number.isNaN(ret)) {\n ret = 0\n }\n if (ret < 0) {\n ret = Math.abs(ret)\n }\n return ret\n })\n const firstRecord = computed(() =>\n (pageNumber.value - 1) * perPageNumber.value + 1 > totalNumber.value\n ? totalNumber.value\n : (pageNumber.value - 1) * perPageNumber.value + 1\n )\n const lastRecord = computed(() =>\n firstRecord.value + (perPageNumber.value - 1) > totalNumber.value\n ? total.value\n : firstRecord.value + (perPageNumber.value - 1)\n )\n const args = computed(() => [\n numeral(firstRecord.value).format(numeralFormat.value),\n numeral(lastRecord.value).format(numeralFormat.value),\n numeral(totalNumber.value).format(numeralFormat.value),\n ])\n return () =>\n h(\n 'span',\n {\n class: componentClasses.value,\n style: deepmerge(\n style.value,\n stripUndefinedValuesFromObject({\n display: totalNumber.value === 0 ? 'none' : undefined,\n })\n ),\n },\n format(t('resourcefulIndex.recordsTotal'), ...args.value)\n )\n },\n})\n","import { useI18n } from '../../ioc'\nimport { encode } from '@nhtio/encoder'\nimport { SvgIcon } from '../../svg-icon'\nimport { deepmerge } from 'deepmerge-ts'\nimport { Sortable } from '../../sortable'\nimport { VBtn } from 'vuetify/components/VBtn'\nimport { isObject } from '../../common/guards'\nimport { VCard } from 'vuetify/components/VCard'\nimport { VIcon } from 'vuetify/components/VIcon'\nimport { VBadge } from 'vuetify/components/VBadge'\nimport { VSpacer } from 'vuetify/components/VGrid'\nimport { VSheet } from 'vuetify/components/VSheet'\nimport { ControlButton } from '../../control-button'\nimport { VDialog } from 'vuetify/components/VDialog'\nimport { emitsFactory } from '../../common/factories'\nimport { VDivider } from 'vuetify/components/VDivider'\nimport { VTextField } from 'vuetify/components/VTextField'\nimport { debounce } from '@nhtio/vuetifiable/util/helpers'\nimport { useResourcefulIndexScopedDisplay } from '../index'\nimport { VList, VListItem } from 'vuetify/components/VList'\nimport { VEmptyState } from 'vuetify/components/VEmptyState'\nimport { TypedEventEmitter } from '@nhtio/tiny-typed-emitter'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { default as warningSvg } from '../../icons/warning.svg?url'\nimport { stripUndefinedValuesFromObject } from '../../common/utils'\nimport { VToolbar, VToolbarItems } from 'vuetify/components/VToolbar'\nimport { VNavigationDrawer } from 'vuetify/components/VNavigationDrawer'\nimport { makeVDialogProps } from '@nhtio/vuetifiable/components/VDialog/VDialog'\nimport { defineComponent, h, toRefs, toRaw, computed, watch, ref, nextTick } from 'vue'\nimport { makeVTextFieldProps } from '@nhtio/vuetifiable/components/VTextField/VTextField'\nimport { makeVEmptyStateProps } from '@nhtio/vuetifiable/components/VEmptyState/VEmptyState'\nimport {\n mdiClose,\n mdiContentSave,\n mdiContentSaveCheck,\n mdiMagnify,\n mdiDrag,\n mdiMouseOff,\n mdiMenuUp,\n mdiMenuDown,\n mdiCloseThick,\n mdiSortAscending,\n mdiSortDescending,\n mdiCancel,\n} from '@mdi/js'\nimport {\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n} from './_columns_controls'\nimport type { EventMap } from '@nhtio/tiny-typed-emitter'\nimport type { SortableProps } from '../../sortable/props'\nimport type { ResourcefulFieldLabelTerms } from '../props'\nimport type { PropType, ExtractPublicPropTypes } from 'vue'\nimport type { SortableItemSlotBindings } from '../../sortable'\nimport type { ControlButtonProps } from '../../control-button/props'\nimport type { ResourcefulSchemaDefinition, ResourcefulSortPayload } from '../types'\nimport type {\n DispositionButtonProps,\n SaveButtonProps,\n DiscardButtonProps,\n} from './_columns_controls'\n\nexport const makeResourcefulIndexSortsControlsProps = propsFactory(\n {\n modelValue: {\n type: Boolean,\n default: false,\n },\n color: {\n type: String as PropType<string | undefined>,\n default: undefined,\n },\n labels: {\n type: Object as PropType<ResourcefulFieldLabelTerms>,\n default: () => ({}),\n },\n possibleFields: {\n type: Object as PropType<ResourcefulSchemaDefinition>,\n default: () => ({}),\n },\n sortableFields: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n sorting: {\n type: Object as PropType<ResourcefulSortPayload>,\n default: () => ({}),\n },\n dispositionButtons: {\n type: Object as PropType<DispositionButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n },\n saveButton: {\n type: Object as PropType<SaveButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n },\n discardButton: {\n type: Object as PropType<DiscardButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n },\n },\n 'ResourcefulIndexSortsControls'\n)\n\ntype ConfirmDialogEvents = EventMap<{\n show: []\n hide: []\n dispositioned: [disposition: boolean]\n}>\ntype VTextFieldPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVTextFieldProps>>\ntype VDialogPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVDialogProps>>\ntype VEmptyStatePublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVEmptyStateProps>>\n\nexport const isResourcefulSortPayload = (value: unknown): value is ResourcefulSortPayload => {\n if (!isObject(value)) return false\n if (Object.keys(value).some((k) => 'string' !== typeof k)) return false\n if (Object.values(value).some((v) => 'string' === typeof v && !['asc', 'desc'].includes(v)))\n return false\n return true\n}\n\nexport const ResourcefulIndexSortsControls = defineComponent({\n name: 'ResourcefulIndexSortsControls',\n props: makeResourcefulIndexSortsControlsProps(),\n emits: emitsFactory({\n 'update:modelValue': (val: boolean) => typeof val === 'boolean',\n 'update:model-value': (val: boolean) => typeof val === 'boolean',\n 'update:sorting': (val: ResourcefulSortPayload) => isResourcefulSortPayload(val),\n }),\n setup(props, { emit }) {\n const confirmationBus = new TypedEventEmitter<ConfirmDialogEvents>()\n const {\n modelValue,\n color,\n possibleFields,\n sortableFields,\n sorting,\n labels,\n dispositionButtons,\n saveButton,\n discardButton,\n } = toRefs(props)\n const { width: screenWidth, xs } = useResourcefulIndexScopedDisplay()\n const showDispositionDialog = ref(false)\n const isDirty = ref(false)\n const updatedSorting = ref<ResourcefulSortPayload>({})\n const updateIsDirty = debounce(() => {\n const rawShowingFields = toRaw(sorting.value)\n const rawUpdatedShowingFields = toRaw(updatedSorting.value)\n const is = encode(rawShowingFields) !== encode(rawUpdatedShowingFields)\n isDirty.value = is\n }, 100)\n const visibility = computed({\n get: () => modelValue.value,\n set: (val: boolean) => {\n // plumbing to support confirmation dialog\n // if the user is trying to close the dialog and there are unsaved changes\n confirmationBus.off('dispositioned')\n if (!val && isDirty.value) {\n confirmationBus.once('dispositioned', (disposition: boolean) => {\n if (disposition && isDirty.value) {\n emit('update:sorting', updatedSorting.value)\n }\n emit('update:modelValue', val)\n emit('update:model-value', val)\n confirmationBus.emit('hide')\n isDirty.value = false\n })\n confirmationBus.emit('show')\n } else {\n emit('update:modelValue', val)\n emit('update:model-value', val)\n }\n },\n })\n watch(sorting, () => updateIsDirty, { immediate: true, deep: true })\n watch(updatedSorting, () => updateIsDirty, { immediate: true, deep: true })\n watch(modelValue, (is, was) => {\n if (is && is !== was) {\n updatedSorting.value = Object.assign({}, toRaw(sorting.value))\n }\n })\n const sortingEntries = computed<Array<string>>({\n get: () =>\n Object.entries(updatedSorting.value)\n .map(([field]) => field)\n .filter((key) => sortableFields.value.includes(key)),\n set: (val: Array<string>) => {\n const toMerge = val\n .filter((v) => sortableFields.value.includes(v))\n .map((k) => ({\n [k]: updatedSorting.value[k] || 'asc',\n }))\n const merged = deepmerge(...toMerge)\n updatedSorting.value = Object.assign({}, merged)\n nextTick(() => {\n updateIsDirty()\n })\n },\n })\n const unsortedEntries = computed(() =>\n Array.from(sortableFields.value).filter((f) => !(f in updatedSorting.value))\n )\n const t = useI18n()\n const resultFilter = ref<string | null>(null)\n const resultFilderFieldBindings = computed<VTextFieldPublicProps>(() => ({\n 'modelValue': resultFilter.value,\n 'onUpdate:modelValue': (val: string) => {\n resultFilter.value = val\n },\n 'label': t('lucid.resourceful.index.sortsControls.filter.label'),\n 'variant': 'outlined',\n 'density': 'compact',\n 'clearable': true,\n 'clearIcon': () => h(SvgIcon, { d: mdiClose }),\n 'prependInnerIcon': () => h(SvgIcon, { d: mdiMagnify }),\n 'hideDetails': true,\n // prevent accidentally submitting the form\n // since we are in the context of a form tag\n // but there's also no need for line breaks in this field anyway\n 'onKeydown': (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n e.stopPropagation()\n }\n },\n 'onKeyup': (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n e.stopPropagation()\n }\n },\n }))\n const isFiltering = computed(\n () => 'string' === typeof resultFilter.value && resultFilter.value.length > 0\n )\n const dragBindings = computed<SortableProps>(() => ({\n modelValue: sortingEntries.value,\n tag: VList,\n tagProps: {\n class: ['transparent', { 'pb-0': unsortedEntries.value.length > 0 }],\n nav: true,\n selectable: !isFiltering.value,\n },\n animation: 300,\n disabled: isFiltering.value,\n ghostClass: 'resourceful-index__sorts-controls__sortable-ghost',\n chosenClass: 'resourceful-index__sorts-controls__sortable-chosen',\n dragClass: 'resourceful-index__sorts-controls__sortable-drag',\n ...{\n 'onUpdate:modelValue': (val: Array<string>) => {\n sortingEntries.value = val\n },\n },\n }))\n confirmationBus.on('show', () => {\n showDispositionDialog.value = true\n })\n confirmationBus.on('hide', () => {\n showDispositionDialog.value = false\n })\n const confirmationDialogBindings = computed<VDialogPublicProps>(() => ({\n modelValue: showDispositionDialog.value,\n persistent: true,\n fullscreen: xs.value,\n contained: !xs.value,\n maxWidth: 500,\n scrim: true,\n }))\n const confirmationEmptyStateBindings = computed<VEmptyStatePublicProps>(() => ({\n image: warningSvg,\n title: t('lucid.resourceful.index.sortsControls.dispositionDialog.headline'),\n text: t('lucid.resourceful.index.sortsControls.dispositionDialog.title'),\n }))\n const saveDispositionButtonBindings = computed<ControlButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value),\n defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n stripUndefinedValuesFromObject(saveButton.value),\n { cta: t('general.save') },\n { onClick: () => confirmationBus.emit('dispositioned', true) }\n )\n )\n const discardDispositionButtonBindings = computed<ControlButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value),\n defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n stripUndefinedValuesFromObject(discardButton.value),\n { cta: t('general.discard') },\n { onClick: () => confirmationBus.emit('dispositioned', false) }\n )\n )\n return () => [\n h(\n VNavigationDrawer,\n {\n 'modelValue': visibility.value,\n 'onUpdate:modelValue': (val: boolean) => {\n visibility.value = val\n },\n 'permanent': false,\n 'persistent': false,\n 'temporary': true,\n 'absolute': true,\n 'width': screenWidth.value < 500 ? screenWidth.value : 500,\n 'color': color.value,\n },\n () =>\n h('div', { class: ['d-flex', 'flex-column', 'h-100'] }, [\n h(\n VToolbar,\n { color: color.value || 'transparent', class: ['flex-grow-0'], density: 'compact' },\n () => [\n h('div', { class: ['d-flex', 'align-center', 'px-2', 'flex-grow-1'] }, [\n h(VTextField, resultFilderFieldBindings.value),\n ]),\n h(VToolbarItems, {}, () => [\n h(VBtn, {\n icon: () => h(SvgIcon, { d: mdiContentSave }),\n variant: 'text',\n onClick: () => {\n if (isDirty.value) {\n emit('update:sorting', updatedSorting.value)\n nextTick(() => updateIsDirty())\n }\n },\n }),\n h(VBtn, {\n icon: () => h(SvgIcon, { d: mdiClose }),\n variant: 'text',\n onClick: () => (visibility.value = false),\n }),\n ]),\n ]\n ),\n h(VDivider, { class: ['flex-grow-0'] }),\n h(VSheet, { color: 'transparent', class: ['flex-grow-1', 'overflow-y-auto'] }, () => [\n h(\n Sortable,\n {\n ...dragBindings.value,\n },\n {\n item: ({\n item,\n props: sortableItemProps,\n ordinal,\n disabled,\n sortingDisabled,\n first,\n last,\n moveUp,\n moveDown,\n }: SortableItemSlotBindings<string>) => {\n const definition = possibleFields.value[item]\n const title = definition\n ? 'computed' === definition.type\n ? definition['x-table-header-definition']!.title\n : t(labels.value[item] || item)\n : t(labels.value[item] || item)\n const direction = updatedSorting.value[item]\n return h(\n VListItem,\n {\n title,\n ripple: false,\n ...sortableItemProps,\n class: [\n {\n 'd-none':\n isFiltering.value &&\n !title.toLowerCase().includes(resultFilter.value!.toLowerCase()),\n },\n ],\n },\n {\n prepend: () =>\n h('div', { class: ['d-flex', 'align-center', 'justify-start', 'me-2'] }, [\n h(VIcon, {\n icon: () =>\n h(SvgIcon, { d: isFiltering.value ? mdiMouseOff : mdiDrag }),\n }),\n h(VBadge, {\n content: ordinal,\n class: ['ms-2'],\n size: 'x-small',\n inline: true,\n }),\n ]),\n append: () =>\n h('div', { class: ['d-flex', 'align-center', 'justify-end'] }, [\n h(VBtn, {\n size: 'x-small',\n icon: () => h(SvgIcon, { d: mdiMenuUp }),\n class: ['me-1'],\n disabled: isFiltering.value || sortingDisabled || disabled || first,\n variant: 'text',\n onClick: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n moveUp()\n },\n }),\n h(VBtn, {\n size: 'x-small',\n icon: () => h(SvgIcon, { d: mdiMenuDown }),\n class: ['me-1'],\n disabled: isFiltering.value || sortingDisabled || disabled || last,\n variant: 'text',\n onClick: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n moveDown()\n },\n }),\n h(VBtn, {\n size: 'x-small',\n icon: () => h(SvgIcon, { d: mdiSortAscending }),\n class: ['me-1'],\n active: 'asc' === direction,\n variant: 'text',\n onClick: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n updatedSorting.value[item] = 'asc'\n nextTick(() => {\n updateIsDirty()\n })\n },\n }),\n h(VBtn, {\n size: 'x-small',\n icon: () => h(SvgIcon, { d: mdiSortDescending }),\n class: ['me-1'],\n active: 'desc' === direction,\n variant: 'text',\n onClick: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n updatedSorting.value[item] = 'desc'\n nextTick(() => {\n updateIsDirty()\n })\n },\n }),\n h(VBtn, {\n size: 'x-small',\n icon: () => h(SvgIcon, { d: mdiCancel }),\n class: [],\n variant: 'text',\n onClick: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n const update = stripUndefinedValuesFromObject({\n ...updatedSorting.value,\n [item]: undefined,\n }) as ResourcefulSortPayload\n updatedSorting.value = update\n nextTick(() => {\n updateIsDirty()\n })\n },\n }),\n ]),\n }\n )\n },\n }\n ),\n unsortedEntries.value.length > 0\n ? h(\n VList,\n { class: ['transparent', 'pt-0'], nav: true, selectable: !isFiltering.value },\n () =>\n Array.from(unsortedEntries.value).map((f) => {\n const definition = possibleFields.value[f]\n const title = definition\n ? 'computed' === definition.type\n ? definition['x-table-header-definition']!.title\n : t(labels.value[f] || f)\n : t(labels.value[f] || f)\n return h(\n VListItem,\n {\n title,\n ripple: false,\n class: [\n {\n 'd-none':\n isFiltering.value &&\n !title.toLowerCase().includes(resultFilter.value!.toLowerCase()),\n },\n ],\n },\n {\n prepend: () =>\n h(\n 'div',\n { class: ['d-flex', 'align-center', 'justify-start', 'me-2'] },\n [\n h(VIcon, {\n icon: () => h(SvgIcon, { d: mdiMouseOff }),\n }),\n h(VBadge, {\n icon: () => h(SvgIcon, { d: mdiCloseThick }),\n class: ['ms-2'],\n size: 'x-small',\n inline: true,\n }),\n ]\n ),\n append: () =>\n h('div', { class: ['d-flex', 'align-center', 'justify-end'] }, [\n h(VBtn, {\n size: 'x-small',\n icon: () => h(SvgIcon, { d: mdiSortAscending }),\n class: ['me-1'],\n variant: 'text',\n onClick: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n updatedSorting.value[f] = 'asc'\n nextTick(() => {\n updateIsDirty()\n })\n },\n }),\n h(VBtn, {\n size: 'x-small',\n icon: () => h(SvgIcon, { d: mdiSortDescending }),\n class: ['me-1'],\n variant: 'text',\n onClick: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n updatedSorting.value[f] = 'desc'\n nextTick(() => {\n updateIsDirty()\n })\n },\n }),\n h(VBtn, {\n size: 'x-small',\n icon: () => h(SvgIcon, { d: mdiCancel }),\n class: [],\n active: true,\n variant: 'text',\n }),\n ]),\n }\n )\n })\n )\n : null,\n ]),\n h(VDivider, { class: ['flex-grow-0'] }),\n h(\n VToolbar,\n { color: color.value || 'transparent', class: ['flex-grow-0'], density: 'compact' },\n () => [\n h(VSpacer),\n h(VToolbarItems, {}, () => [\n h(VBtn, {\n icon: () => h(SvgIcon, { d: mdiContentSaveCheck }),\n variant: 'text',\n onClick: () => {\n if (isDirty.value) {\n emit('update:sorting', updatedSorting.value)\n nextTick(() => {\n isDirty.value = false\n visibility.value = false\n })\n } else {\n nextTick(() => {\n visibility.value = false\n })\n }\n },\n }),\n ]),\n ]\n ),\n h(VDivider, { class: ['flex-grow-0'] }),\n ])\n ),\n h(VDialog, confirmationDialogBindings.value, () =>\n h(VCard, {}, () =>\n h(VEmptyState, confirmationEmptyStateBindings.value, {\n actions: () => [\n h(ControlButton, discardDispositionButtonBindings.value),\n h(ControlButton, saveDispositionButtonBindings.value),\n ],\n })\n )\n ),\n ]\n },\n})\n","import { SvgIcon } from '../../svg-icon'\nimport { default as numeral } from 'numeral'\nimport { printf as format } from 'fast-printf'\nimport { VBtn } from 'vuetify/components/VBtn'\nimport { useI18n, useBrowser } from '../../ioc'\nimport { VCard } from 'vuetify/components/VCard'\nimport { isHTMLElement } from '../../common/guards'\nimport { useScopedDisplay } from '../../ux/display'\nimport { ControlButton } from '../../control-button'\nimport { VDialog } from 'vuetify/components/VDialog'\nimport { VDivider } from 'vuetify/components/VDivider'\nimport { defineComponent, h, toRefs, computed } from 'vue'\nimport { VList, VListItem } from 'vuetify/components/VList'\nimport { propsAndEmitsFactory } from '../../common/factories'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { VContainer, VRow, VCol } from 'vuetify/components/VGrid'\nimport { VProgressCircular } from 'vuetify/components/VProgressCircular'\nimport { VToolbar, VToolbarTitle, VToolbarItems } from 'vuetify/components/VToolbar'\nimport { mdiClose, mdiPlaylistPlay, mdiCheckCircle, mdiCloseCircle, mdiHelpCircle } from '@mdi/js'\nimport type { makeVRowProps } from '@nhtio/vuetifiable/components/VGrid/VRow'\nimport type { makeVCardProps } from '@nhtio/vuetifiable/components/VCard/VCard'\nimport type { PropType, ExtractPublicPropTypes, ComponentPublicInstance } from 'vue'\nimport type { makeVDialogProps } from '@nhtio/vuetifiable/components/VDialog/VDialog'\nimport type { makeVContainerProps } from '@nhtio/vuetifiable/components/VGrid/VContainer'\nimport type { makeVProgressCircularProps } from '@nhtio/vuetifiable/components/VProgressCircular/VProgressCircular'\n\nconst { makeProps: makeBulkActionsProgressDialogProps, emits: bulkActionsProgressDialogEmits } =\n propsAndEmitsFactory(\n {\n container: {\n type: [Object, null] as PropType<HTMLElement | ComponentPublicInstance | null>,\n default: null,\n required: true,\n },\n bulkActionName: {\n type: [String, null] as PropType<string | null>,\n default: null,\n required: true,\n },\n bulkActionProcessing: {\n type: Boolean,\n default: false,\n required: true,\n },\n bulkActionProcessingComplete: {\n type: Boolean,\n default: false,\n required: true,\n },\n bulkActionProgress: {\n type: Number,\n default: 0,\n required: true,\n },\n bulkActionTotal: {\n type: Number,\n default: 0,\n required: true,\n },\n bulkActionSuccesses: {\n type: Number,\n default: 0,\n required: true,\n },\n bulkActionFailures: {\n type: Number,\n default: 0,\n required: true,\n },\n bulkActionUndetermined: {\n type: Number,\n default: 0,\n required: true,\n },\n },\n {\n 'click:close': () => true,\n },\n 'BulkActionsProgressDialog'\n )\n\nexport type BulkActionsProgressDialogProps = ExtractPublicPropTypes<\n ReturnType<typeof makeBulkActionsProgressDialogProps>\n>\n\ntype VProgressCircularPublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makeVProgressCircularProps>\n>\ntype VDialogPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVDialogProps>>\ntype VCardPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVCardProps>>\ntype VContainerPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVContainerProps>>\ntype VRowPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVRowProps>>\n\nconst closeButtonIcon = h(SvgIcon, { d: mdiClose })\nconst successfulIcon = h(SvgIcon, { d: mdiCheckCircle, class: ['text-success'] })\nconst errorIcon = h(SvgIcon, { d: mdiCloseCircle, class: ['text-error'] })\nconst questionIcon = h(SvgIcon, { d: mdiHelpCircle, class: ['text-indigo'] })\nconst processedActionIcon = h(SvgIcon, { d: mdiPlaylistPlay, class: ['text-info'] })\n\nexport const BulkActionsProgressDialog = defineComponent({\n name: 'BulkActionsProgressDialog',\n props: makeBulkActionsProgressDialogProps(),\n emits: bulkActionsProgressDialogEmits,\n setup(props, { emit }) {\n const {\n container,\n bulkActionName,\n bulkActionProcessing,\n bulkActionProcessingComplete,\n bulkActionProgress,\n bulkActionTotal,\n bulkActionSuccesses,\n bulkActionFailures,\n bulkActionUndetermined,\n } = toRefs(props)\n const { orientation: containerOrientation, width } = useScopedDisplay(container)\n const t = useI18n()\n const computedProgressRate = computed(() => {\n if (bulkActionTotal.value === 0) return bulkActionProcessingComplete.value ? 100 : 0\n return (bulkActionProgress.value / bulkActionTotal.value) * 100\n })\n const formattedProgressRate = computed(\n () => numeral(computedProgressRate.value).format('0,0') + '%'\n )\n const formattedTitle = computed(() =>\n format(t('resourcefulIndex.bulkActionProcessing.title'), bulkActionName.value || '...')\n )\n const formattedBulkActionSuccesses = computed(() =>\n numeral(bulkActionSuccesses.value).format('0,0')\n )\n const formattedBulkActionFailures = computed(() =>\n numeral(bulkActionFailures.value).format('0,0')\n )\n const formattedBulkActionUndetermined = computed(() =>\n numeral(bulkActionUndetermined.value).format('0,0')\n )\n const formattedProcessed = computed(() =>\n [\n numeral(bulkActionProgress.value).format('0,0'),\n numeral(bulkActionTotal.value).format('0,0'),\n ].join(' / ')\n )\n const getContainerHtmlElement = (): HTMLElement | null => {\n const browser = useBrowser()\n if (!browser.ssr && isHTMLElement(container.value)) return container.value\n if (\n !browser.ssr &&\n container.value &&\n '$el' in container.value &&\n isHTMLElement(container.value.$el)\n )\n return container.value.$el\n return null\n }\n const computedDialogWidth = computed(() => (width.value > 500 ? 500 : width.value))\n const dialogBindings = computed<VDialogPublicProps>(() => ({\n attach: container.value ? (getContainerHtmlElement() ?? 'body') : 'body',\n absolute: container.value !== null,\n closeOnBack: false,\n closeOnContentClick: false,\n contained: container.value !== null,\n modelValue: true,\n persistent: true,\n retainFocus: true,\n scrim: true,\n width: computedDialogWidth.value,\n }))\n const cardBindings = computed<VCardPublicProps>(() => ({\n color: 'surface',\n }))\n const containerBindings = computed<VContainerPublicProps>(() => ({\n fluid: true,\n }))\n const rowBindings = computed<VRowPublicProps>(() => ({\n align: 'center',\n }))\n const progressCircleBindings = computed<VProgressCircularPublicProps>(() => ({\n color: 'success',\n modelValue: computedProgressRate.value,\n size: 'landscape' !== containerOrientation.value ? 100 : 150,\n width: 'landscape' !== containerOrientation.value ? 7.5 : 15,\n }))\n useRender(() =>\n !bulkActionProcessing.value\n ? h('span')\n : h(VDialog, { ...dialogBindings.value }, () =>\n h(VCard, { ...cardBindings.value }, () => [\n h(VToolbar, { flat: true, color: 'transparent', density: 'compact' }, () => [\n h(VToolbarTitle, {}, () => formattedTitle.value),\n h(VToolbarItems, {}, () => [\n bulkActionProcessingComplete.value\n ? h(VBtn, {\n icon: () => closeButtonIcon,\n onClick: () => emit('click:close'),\n })\n : null,\n ]),\n ]),\n h(VDivider),\n h(VContainer, { ...containerBindings.value }, () => [\n h(VRow, { ...rowBindings.value }, () =>\n h(\n VCol,\n {\n cols: 12,\n class: [\n 'd-flex',\n 'align-center',\n 'justify-center',\n {\n 'flex-column': 'landscape' !== containerOrientation.value,\n },\n ],\n },\n () => [\n h('div', { class: ['flex-grow-0'] }, [\n h(VProgressCircular, { ...progressCircleBindings.value }, () =>\n h(\n 'span',\n {\n class: [\n 'text-h5',\n 'text-button',\n 'font-weight-bold',\n { 'text-success': bulkActionProcessingComplete.value },\n ],\n },\n formattedProgressRate.value\n )\n ),\n ]),\n h(\n VList,\n {\n class: [\n 'flex-grow-1',\n 'w-100',\n {\n 'py-0': 'landscape' === containerOrientation.value,\n },\n ],\n },\n () => [\n h(VListItem, {\n prependIcon: () => successfulIcon,\n title: t('resourcefulIndex.bulkActionProcessing.successes'),\n subtitle: formattedBulkActionSuccesses.value,\n lines: 'two',\n density: 'compact',\n }),\n h(VListItem, {\n prependIcon: () => errorIcon,\n title: t('resourcefulIndex.bulkActionProcessing.errors'),\n subtitle: formattedBulkActionFailures.value,\n lines: 'two',\n density: 'compact',\n }),\n h(VListItem, {\n prependIcon: () => questionIcon,\n title: t('resourcefulIndex.bulkActionProcessing.undetermined'),\n subtitle: formattedBulkActionUndetermined.value,\n lines: 'two',\n density: 'compact',\n }),\n h(VListItem, {\n prependIcon: () => processedActionIcon,\n title: t('resourcefulIndex.bulkActionProcessing.processed'),\n subtitle: formattedProcessed.value,\n lines: 'two',\n density: 'compact',\n }),\n ]\n ),\n ]\n )\n ),\n bulkActionProcessingComplete.value\n ? h(\n VRow,\n {\n ...rowBindings.value,\n },\n () =>\n h(VCol, { cols: 12, class: ['d-flex', 'justify-end'] }, () =>\n h(ControlButton, {\n prependIcon: () => closeButtonIcon,\n dividePrependIcon: true,\n cta: t('resourcefulIndex.bulkActionProcessing.completeButton'),\n onClick: () => emit('click:close'),\n color: 'surface-light',\n })\n )\n )\n : null,\n ]),\n ])\n )\n )\n return {}\n },\n})\n","/*\n|--------------------------------------------------------------------------\n| Filters Common Functionality\n|--------------------------------------------------------------------------\n|\n| Types, classes and constants common to multiple filtration components.\n|\n*/\n\nimport { encode } from '@nhtio/encoder'\nimport { debounce } from '@nhtio/vuetifiable/util/helpers'\nimport { TypedEventEmitter } from '@nhtio/tiny-typed-emitter'\nimport type { ExtractPublicPropTypes } from 'vue'\nimport type { AnyFilterCondition } from './schema'\nimport type { ValidationError } from '@nhtio/validation'\nimport type { EventMap } from '@nhtio/tiny-typed-emitter'\nimport type { makeVBtnProps } from '@nhtio/vuetifiable/components/VBtn/VBtn'\nimport type { makeVFabProps } from '@nhtio/vuetifiable/components/VFab/VFab'\nimport type { makeVMenuProps } from '@nhtio/vuetifiable/components/VMenu/VMenu'\nimport type { makeVCardProps } from '@nhtio/vuetifiable/components/VCard/VCard'\nimport type { makeVIconProps } from '@nhtio/vuetifiable/components/VIcon/VIcon'\nimport type { makeVAlertProps } from '@nhtio/vuetifiable/components/VAlert/VAlert'\nimport type { makeVLabelProps } from '@nhtio/vuetifiable/components/VLabel/VLabel'\nimport type { makeVInputProps } from '@nhtio/vuetifiable/components/VInput/VInput'\nimport type { makeVDialogProps } from '@nhtio/vuetifiable/components/VDialog/VDialog'\nimport type { makeVListItemProps } from '@nhtio/vuetifiable/components/VList/VListItem'\nimport type { makeVBtnToggleProps } from '@nhtio/vuetifiable/components/VBtnToggle/VBtnToggle'\nimport type { makeVTextFieldProps } from '@nhtio/vuetifiable/components/VTextField/VTextField'\nimport type { makeVSpeedDialProps } from '@nhtio/vuetifiable/components/VSpeedDial/VSpeedDial'\nimport type { makeVEmptyStateProps } from '@nhtio/vuetifiable/components/VEmptyState/VEmptyState'\nimport type { makeVAutocompleteProps } from '@nhtio/vuetifiable/components/VAutocomplete/VAutocomplete'\n\nexport type ReactivityBusEvents = EventMap<{\n updated: []\n}>\n\nexport type VInputBusEvents = EventMap<{\n focused: []\n blurred: []\n}>\n\nexport type FilterConditionElementBusEvents = EventMap<{\n 'change:field': []\n 'change:type': []\n 'change:operator': []\n 'change:arguments': []\n}>\n\nexport type FilterConditionElementToFilterConditionArgumentCellBusEvents = EventMap<{\n 'needs:reset:arguments': []\n}>\n\nexport type ValidationDetails = ValidationError['details']\n\nexport type VTextFieldPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVTextFieldProps>>\nexport type VDialogPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVDialogProps>>\nexport type VEmptyStatePublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVEmptyStateProps>>\nexport type VBtnTogglePublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVBtnToggleProps>>\nexport type VBtnPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVBtnProps>>\nexport type VMenuPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVMenuProps>>\nexport type VListItemPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVListItemProps>>\nexport type VCardPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVCardProps>>\nexport type VSpeedDialPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVSpeedDialProps>>\nexport type VFabPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVFabProps>>\nexport type VAlertPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVAlertProps>>\nexport type VIconPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVIconProps>>\nexport type VLabelPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVLabelProps>>\nexport type VAutocompletePublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makeVAutocompleteProps>\n>\nexport type VInputPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVInputProps>>\n\nexport { defaultsForResourcefulIndexColumnsControlsDispositionButtonProps } from '../resourceful-index/partials/_columns_controls'\nexport type { DispositionButtonProps } from '../resourceful-index/partials/_columns_controls'\nexport type { ResourcefulSchemaDefinition } from '../resourceful-index/types'\nexport type { ResourcefulFieldLabelTerms } from '../resourceful-index/props'\n\n/**\n * The Reactivity Bus is a workaround to assist with the recursive nature of the filter UI.\n * An instance of the ReactivityBus will be passed from each parent component to its children.\n *\n * When an update occurs in a child component, it should inform the parent component\n * which will trigger a `triggerRef` on the next tick for the parent component's local state,\n * which should in turn trigger any cascading updates to the parent component's own parent component\n */\nexport class ReactivityBus extends TypedEventEmitter<ReactivityBusEvents> {\n constructor() {\n super()\n const notifyCallback = debounce(() => {\n this.emit('updated')\n }, 100)\n Object.defineProperty(this, 'notify', {\n value: () => notifyCallback(),\n enumerable: true,\n configurable: false,\n })\n }\n\n declare notify: () => void\n}\n\n/**\n * The VInputEventBus is a specialized event bus for handling shared states between multiple\n * sub-components of a VInput component.\n *\n * The goal is that when an event such as a change in focus state or error state occurs in\n * one of the children, the parent can be notified so that it can update the relevant states\n * for the rest.\n */\nexport class VInputEventBus extends TypedEventEmitter<VInputBusEvents> {\n readonly #focusRegister: Set<string>\n readonly #stateRegister: Map<string, boolean>\n readonly #computedChangeAndUpdate: () => void\n\n constructor() {\n super()\n this.#focusRegister = new Set<string>()\n this.#stateRegister = new Map<string, boolean>()\n this.#computedChangeAndUpdate = debounce(() => {\n // focus state\n if (this.isFocused !== this.#stateRegister.get('focused')) {\n const isFocused = this.isFocused\n this.#stateRegister.set('focused', isFocused)\n this.emit(isFocused ? 'focused' : 'blurred')\n }\n }, 100)\n }\n\n get isFocused() {\n return this.#focusRegister.size > 0\n }\n\n notifyFocus(uid: string) {\n this.#focusRegister.add(uid)\n this.#computedChangeAndUpdate()\n }\n\n notifyBlur(uid: string) {\n this.#focusRegister.delete(uid)\n this.#computedChangeAndUpdate()\n }\n}\n\nexport class FilterConditionElementBus extends TypedEventEmitter<FilterConditionElementBusEvents> {\n #firstWas: AnyFilterCondition | undefined\n #lastIs: AnyFilterCondition | undefined\n constructor() {\n super()\n const compareCallback = debounce(() => {\n const cleanup = () => {\n this.#firstWas = undefined\n this.#lastIs = undefined\n return\n }\n // return early if both values are the same - no change here\n if (encode(this.#firstWas) === encode(this.#lastIs)) {\n return cleanup()\n }\n // if first was is undefined (and we know that last is is defined because === already escaped)\n // trigger all\n if (!this.#firstWas) {\n this.emit('change:field')\n this.emit('change:type')\n this.emit('change:operator')\n this.emit('change:arguments')\n return cleanup()\n }\n // compare each property to see if there are changes\n // we know that both this.#firstWas is not undefined and this.#lastIs is not\n // undefined because of the previous early exits\n if (encode(this.#firstWas!.field) !== encode(this.#lastIs!.field)) {\n this.emit('change:field')\n }\n if (encode(this.#firstWas!.type) !== encode(this.#lastIs!.type)) {\n this.emit('change:type')\n }\n if (encode(this.#firstWas!.operator) !== encode(this.#lastIs!.operator)) {\n this.emit('change:operator')\n }\n if (encode(this.#firstWas!.arguments) !== encode(this.#lastIs!.arguments)) {\n this.emit('change:arguments')\n }\n return cleanup()\n }, 100)\n const notifyCallback = (is: AnyFilterCondition, was: AnyFilterCondition | undefined) => {\n if (!this.#firstWas) {\n this.#firstWas = was\n }\n this.#lastIs = is\n compareCallback()\n }\n Object.defineProperty(this, 'notify', {\n value: (is: AnyFilterCondition, was: AnyFilterCondition | undefined) =>\n notifyCallback(is, was),\n enumerable: true,\n configurable: false,\n })\n }\n\n declare notify: (is: AnyFilterCondition, was?: AnyFilterCondition | undefined) => void\n}\n\nexport class FilterConditionElementToFilterConditionArgumentCellBus extends TypedEventEmitter<FilterConditionElementToFilterConditionArgumentCellBusEvents> {}\n","import { useI18n } from '../ioc'\nimport { SvgIcon } from '../svg-icon'\nimport { ControlButton } from '../control-button'\nimport { emitsFactory } from '../common/factories'\nimport { defineComponent, toRefs, computed, h } from 'vue'\nimport { mdiCardPlusOutline, mdiFilterPlus } from '@mdi/js'\nimport { VEmptyState } from 'vuetify/components/VEmptyState'\nimport { default as warningSvg } from '../icons/warning.svg?url'\nimport { stripUndefinedValuesFromObject } from '../common/utils'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { defaultsForResourcefulIndexColumnsControlsDispositionButtonProps } from './common'\nimport type { PropType } from 'vue'\nimport type { VEmptyStatePublicProps } from './common'\nimport type { ControlButtonProps } from '../control-button/props'\n\nconst makeFilterGroupEmptyStateProps = propsFactory(\n {\n buttonStyles: {\n type: Object as PropType<ControlButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n },\n },\n 'FilterGroupEmptyState'\n)\n\nexport const FilterGroupEmptyState = defineComponent({\n name: 'FilterGroupEmptyState',\n props: makeFilterGroupEmptyStateProps(),\n emits: emitsFactory({\n 'click:add:group': () => true,\n 'click:add:condition': () => true,\n }),\n setup(props, { emit }) {\n const t = useI18n()\n const { buttonStyles } = toRefs(props)\n const confirmationEmptyStateBindings = computed<VEmptyStatePublicProps>(() => ({\n image: warningSvg,\n title: t('lucid.resourceful.index.filtersControls.groupEmpty.headline'),\n text: t('lucid.resourceful.index.filtersControls.groupEmpty.title'),\n }))\n const addGroupButtonBindings = computed<ControlButtonProps>(\n () =>\n ({\n ...defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n ...stripUndefinedValuesFromObject(buttonStyles.value),\n ...{\n cta: t('lucid.resourceful.index.filtersControls.addGroup'),\n prependIcon: () => h(SvgIcon, { d: mdiCardPlusOutline }),\n color: 'surface-light',\n },\n ...{ onClick: () => emit('click:add:group') },\n }) satisfies ControlButtonProps\n )\n const addConditionButtonBindings = computed<ControlButtonProps>(() => ({\n ...defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n ...stripUndefinedValuesFromObject(buttonStyles.value),\n ...{\n cta: t('lucid.resourceful.index.filtersControls.addCondition'),\n prependIcon: () => h(SvgIcon, { d: mdiFilterPlus }),\n color: 'surface-light',\n },\n ...{ onClick: () => emit('click:add:condition') },\n }))\n return () =>\n h(VEmptyState, confirmationEmptyStateBindings.value, {\n actions: () => [\n h(ControlButton, addGroupButtonBindings.value),\n h(ControlButton, addConditionButtonBindings.value),\n ],\n })\n },\n})\n","import { vShow as _vShow, mergeProps as _mergeProps, createVNode as _createVNode, withDirectives as _withDirectives, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from \"vue\";\n// Styles\nimport \"./VFab.css\";\n\n// Components\nimport { makeVBtnProps, VBtn } from \"../VBtn/VBtn.js\"; // Composables\nimport { makeLayoutItemProps, useLayoutItem } from \"../../composables/layout.js\";\nimport { makeLocationProps } from \"../../composables/location.js\";\nimport { useProxiedModel } from \"../../composables/proxiedModel.js\";\nimport { useResizeObserver } from \"../../composables/resizeObserver.js\";\nimport { useToggleScope } from \"../../composables/toggleScope.js\";\nimport { makeTransitionProps, MaybeTransition } from \"../../composables/transition.js\"; // Utilities\nimport { computed, ref, shallowRef, toRef, watchEffect } from 'vue';\nimport { genericComponent, omit, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVFabProps = propsFactory({\n app: Boolean,\n appear: Boolean,\n extended: Boolean,\n layout: Boolean,\n offset: Boolean,\n modelValue: {\n type: Boolean,\n default: true\n },\n ...omit(makeVBtnProps({\n active: true\n }), ['location', 'spaced']),\n ...makeLayoutItemProps(),\n ...makeLocationProps(),\n ...makeTransitionProps({\n transition: 'fab-transition'\n })\n}, 'VFab');\nexport const VFab = genericComponent()({\n name: 'VFab',\n props: makeVFabProps(),\n emits: {\n 'update:modelValue': value => true\n },\n setup(props, _ref) {\n let {\n slots\n } = _ref;\n const model = useProxiedModel(props, 'modelValue');\n const height = shallowRef(56);\n const layoutItemStyles = ref();\n const {\n resizeRef\n } = useResizeObserver(entries => {\n if (!entries.length) return;\n height.value = entries[0].target.clientHeight;\n });\n const hasPosition = toRef(() => props.app || props.absolute);\n const position = computed(() => {\n if (!hasPosition.value) return false;\n return props.location?.split(' ').shift() ?? 'bottom';\n });\n const orientation = computed(() => {\n if (!hasPosition.value) return false;\n return props.location?.split(' ')[1] ?? 'end';\n });\n useToggleScope(() => props.app, () => {\n const layout = useLayoutItem({\n id: props.name,\n order: computed(() => parseInt(props.order, 10)),\n position,\n layoutSize: computed(() => props.layout ? height.value + 24 : 0),\n elementSize: computed(() => height.value + 24),\n active: computed(() => props.app && model.value),\n absolute: toRef(() => props.absolute)\n });\n watchEffect(() => {\n layoutItemStyles.value = layout.layoutItemStyles.value;\n });\n });\n const vFabRef = ref();\n useRender(() => {\n const btnProps = VBtn.filterProps(props);\n return _createElementVNode(\"div\", {\n \"ref\": vFabRef,\n \"class\": _normalizeClass(['v-fab', {\n 'v-fab--absolute': props.absolute,\n 'v-fab--app': !!props.app,\n 'v-fab--extended': props.extended,\n 'v-fab--offset': props.offset,\n [`v-fab--${position.value}`]: hasPosition.value,\n [`v-fab--${orientation.value}`]: hasPosition.value\n }, props.class]),\n \"style\": _normalizeStyle([props.app ? {\n ...layoutItemStyles.value\n } : {\n height: props.absolute ? '100%' : 'inherit'\n }, props.style])\n }, [_createElementVNode(\"div\", {\n \"class\": \"v-fab__container\"\n }, [_createVNode(MaybeTransition, {\n \"appear\": props.appear,\n \"transition\": props.transition\n }, {\n default: () => [_withDirectives(_createVNode(VBtn, _mergeProps({\n \"ref\": resizeRef\n }, btnProps, {\n \"active\": undefined,\n \"location\": undefined\n }), slots), [[_vShow, props.active]])]\n })])]);\n });\n return {};\n }\n});\n//# sourceMappingURL=VFab.js.map","import { createVNode as _createVNode, mergeProps as _mergeProps } from \"vue\";\n// Styles\nimport \"./VSpeedDial.css\";\n\n// Components\nimport { VDefaultsProvider } from \"../VDefaultsProvider/index.js\";\nimport { makeVMenuProps, VMenu } from \"../VMenu/VMenu.js\"; // Composables\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { useProxiedModel } from \"../../composables/proxiedModel.js\";\nimport { MaybeTransition } from \"../../composables/transition.js\"; // Utilities\nimport { computed, ref } from 'vue';\nimport { genericComponent, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVSpeedDialProps = propsFactory({\n ...makeComponentProps(),\n ...makeVMenuProps({\n offset: 8,\n minWidth: 0,\n openDelay: 0,\n closeDelay: 100,\n location: 'top center',\n transition: 'scale-transition'\n })\n}, 'VSpeedDial');\nexport const VSpeedDial = genericComponent()({\n name: 'VSpeedDial',\n props: makeVSpeedDialProps(),\n emits: {\n 'update:modelValue': value => true\n },\n setup(props, _ref) {\n let {\n slots\n } = _ref;\n const model = useProxiedModel(props, 'modelValue');\n const menuRef = ref();\n const location = computed(() => {\n const [y, x = 'center'] = props.location?.split(' ') ?? [];\n return `${y} ${x}`;\n });\n const locationClasses = computed(() => ({\n [`v-speed-dial__content--${location.value.replace(' ', '-')}`]: true\n }));\n useRender(() => {\n const menuProps = VMenu.filterProps(props);\n return _createVNode(VMenu, _mergeProps(menuProps, {\n \"modelValue\": model.value,\n \"onUpdate:modelValue\": $event => model.value = $event,\n \"class\": props.class,\n \"style\": props.style,\n \"contentClass\": ['v-speed-dial__content', locationClasses.value, props.contentClass],\n \"location\": location.value,\n \"ref\": menuRef,\n \"transition\": \"fade-transition\"\n }), {\n ...slots,\n default: slotProps => _createVNode(VDefaultsProvider, {\n \"defaults\": {\n VBtn: {\n size: 'small'\n }\n }\n }, {\n default: () => [_createVNode(MaybeTransition, {\n \"appear\": true,\n \"group\": true,\n \"transition\": props.transition\n }, {\n default: () => [slots.default?.(slotProps)]\n })]\n })\n });\n });\n return {};\n }\n});\n//# sourceMappingURL=VSpeedDial.js.map","/*\n|--------------------------------------------------------------------------\n| Filters Schema Functionality\n|--------------------------------------------------------------------------\n|\n| Types, Guards and Utilities for the GUI based query builder's filtration\n| functionality.\n|\n*/\n\nimport { DateTime } from 'luxon'\nimport { validator as joi } from '@nhtio/validation'\nimport { ResourcefulFieldType } from '../common/utils'\nimport type { ObjectSchema, StringSchema, AlternativesSchema, ArraySchema } from '@nhtio/validation'\n\nconst CAST_OPTIONS = { abortEarly: false, convert: true } as const\nconst GUARD_OPTIONS = { abortEarly: true } as const\n\nexport enum FilterOperators {\n // Basic operators\n EQUALS = '=',\n NOT_EQUALS = '!=',\n IS_SET = '*',\n IS_NOT_SET = '!*',\n\n // String operators (using wildcards)\n CONTAINS = '~',\n NOT_CONTAINS = '!~',\n STARTS_WITH = '^',\n ENDS_WITH = '$',\n CONTAINS_ANY = '*~',\n NOT = '!',\n\n // Comparison operators\n GREATER_THAN = '>',\n LESS_THAN = '<',\n GREATER_THAN_OR_EQUAL = '>=',\n LESS_THAN_OR_EQUAL = '<=',\n BETWEEN = '><',\n NOT_BETWEEN = '!><',\n\n // List operators\n IN = 'in',\n NOT_IN = '!in',\n\n // Relative date operators (past)\n TODAY = 't',\n YESTERDAY = 'yd',\n THIS_WEEK = 'w',\n LAST_WEEK = 'lw',\n LAST_2_WEEKS = 'l2w',\n THIS_MONTH = 'm',\n LAST_MONTH = 'lm',\n THIS_QUARTER = 'q',\n LAST_QUARTER = 'lq',\n THIS_YEAR = 'y',\n LAST_YEAR = 'ly',\n\n // Relative date operators (future)\n TOMORROW = 'tm',\n NEXT_WEEK = 'nw',\n NEXT_MONTH = 'nm',\n NEXT_QUARTER = 'nq',\n NEXT_YEAR = 'ny',\n\n // Dynamic date operators (with numeric parameter)\n LAST_N_DAYS = '><t+', // Last N days: now-Nd to now\n NEXT_N_DAYS = '><t-', // Next N days: now to now+Nd\n MORE_THAN_DAYS_AGO = '>t+', // More than N days ago: before now-Nd\n LESS_THAN_DAYS_AGO = '<t+', // Less than N days ago: now-Nd to now\n MORE_THAN_DAYS_FROM_NOW = '>t-', // More than N days from now: after now+Nd\n LESS_THAN_DAYS_FROM_NOW = '<t-', // Less than N days from now: now to now+Nd\n EXACTLY_DAYS_AGO = 't+', // Exactly N days ago (that day)\n EXACTLY_DAYS_FROM_NOW = 't-', // Exactly N days from now (that day)\n\n // Additional useful date operators with Luxon\n THIS_WEEK_TO_DATE = 'wtd', // Start of week to now\n THIS_MONTH_TO_DATE = 'mtd', // Start of month to now\n THIS_QUARTER_TO_DATE = 'qtd', // Start of quarter to now\n THIS_YEAR_TO_DATE = 'ytd', // Start of year to now\n LAST_N_HOURS = 'h+', // Last N hours\n NEXT_N_HOURS = 'h-', // Next N hours\n LAST_N_WEEKS = 'w+', // Last N weeks\n NEXT_N_WEEKS = 'w-', // Next N weeks\n LAST_N_MONTHS = 'm+', // Last N months\n NEXT_N_MONTHS = 'm-', // Next N months\n LAST_N_QUARTERS = 'q+', // Last N quarters\n NEXT_N_QUARTERS = 'q-', // Next N quarters\n LAST_N_YEARS = 'y+', // Last N years\n NEXT_N_YEARS = 'y-', // Next N years\n\n // Time-specific operators\n THIS_HOUR = 'hr', // Current hour\n LAST_HOUR = 'lhr', // Previous hour\n NEXT_HOUR = 'nhr', // Next hour\n\n // Special operators\n IS_EMPTY = 'empty', // For empty strings/arrays\n IS_NOT_EMPTY = '!empty', // For non-empty strings/arrays\n IS_NULL = 'null', // Explicitly null\n IS_NOT_NULL = '!null', // Explicitly not null\n}\n\nexport type FilterOperator = `${FilterOperators}`\n\nexport const StringFilterOperators = [\n FilterOperators.CONTAINS,\n FilterOperators.NOT_CONTAINS,\n FilterOperators.STARTS_WITH,\n FilterOperators.ENDS_WITH,\n FilterOperators.NOT,\n FilterOperators.EQUALS,\n FilterOperators.NOT_EQUALS,\n FilterOperators.IS_SET,\n FilterOperators.IS_NOT_SET,\n FilterOperators.IS_NULL,\n FilterOperators.IS_NOT_NULL,\n FilterOperators.IN,\n FilterOperators.NOT_IN,\n] as const\nexport type StringFilterOperator = (typeof StringFilterOperators)[number]\n\nexport const DateFilterOperators = [\n FilterOperators.EQUALS,\n FilterOperators.NOT_EQUALS,\n FilterOperators.GREATER_THAN,\n FilterOperators.LESS_THAN,\n FilterOperators.GREATER_THAN_OR_EQUAL,\n FilterOperators.LESS_THAN_OR_EQUAL,\n FilterOperators.BETWEEN,\n FilterOperators.NOT_BETWEEN,\n FilterOperators.IS_SET,\n FilterOperators.IS_NOT_SET,\n FilterOperators.IS_NULL,\n FilterOperators.IS_NOT_NULL,\n FilterOperators.TODAY,\n FilterOperators.YESTERDAY,\n FilterOperators.TOMORROW,\n FilterOperators.THIS_WEEK,\n FilterOperators.LAST_WEEK,\n FilterOperators.LAST_2_WEEKS,\n FilterOperators.NEXT_WEEK,\n FilterOperators.THIS_MONTH,\n FilterOperators.LAST_MONTH,\n FilterOperators.NEXT_MONTH,\n FilterOperators.THIS_QUARTER,\n FilterOperators.LAST_QUARTER,\n FilterOperators.NEXT_QUARTER,\n FilterOperators.THIS_YEAR,\n FilterOperators.LAST_YEAR,\n FilterOperators.NEXT_YEAR,\n FilterOperators.LAST_N_DAYS,\n FilterOperators.NEXT_N_DAYS,\n FilterOperators.MORE_THAN_DAYS_AGO,\n FilterOperators.LESS_THAN_DAYS_AGO,\n FilterOperators.MORE_THAN_DAYS_FROM_NOW,\n FilterOperators.LESS_THAN_DAYS_FROM_NOW,\n FilterOperators.EXACTLY_DAYS_AGO,\n FilterOperators.EXACTLY_DAYS_FROM_NOW,\n FilterOperators.THIS_WEEK_TO_DATE,\n FilterOperators.THIS_MONTH_TO_DATE,\n FilterOperators.THIS_QUARTER_TO_DATE,\n FilterOperators.THIS_YEAR_TO_DATE,\n FilterOperators.LAST_N_WEEKS,\n FilterOperators.NEXT_N_WEEKS,\n FilterOperators.LAST_N_MONTHS,\n FilterOperators.NEXT_N_MONTHS,\n FilterOperators.LAST_N_QUARTERS,\n FilterOperators.NEXT_N_QUARTERS,\n FilterOperators.LAST_N_YEARS,\n FilterOperators.NEXT_N_YEARS,\n] as const\nexport type DateFilterOperator = (typeof DateFilterOperators)[number]\n\nexport const DateTimeFilterOperators = [\n ...DateFilterOperators,\n FilterOperators.THIS_HOUR,\n FilterOperators.LAST_HOUR,\n FilterOperators.NEXT_HOUR,\n FilterOperators.LAST_N_HOURS,\n FilterOperators.NEXT_N_HOURS,\n] as const\nexport type DateTimeFilterOperator = (typeof DateTimeFilterOperators)[number]\n\nexport const NumberFilterOperators = [\n FilterOperators.EQUALS,\n FilterOperators.NOT_EQUALS,\n FilterOperators.GREATER_THAN,\n FilterOperators.LESS_THAN,\n FilterOperators.GREATER_THAN_OR_EQUAL,\n FilterOperators.LESS_THAN_OR_EQUAL,\n FilterOperators.BETWEEN,\n FilterOperators.NOT_BETWEEN,\n FilterOperators.IS_SET,\n FilterOperators.IS_NOT_SET,\n FilterOperators.IS_NULL,\n FilterOperators.IS_NOT_NULL,\n FilterOperators.IN,\n FilterOperators.NOT_IN,\n] as const\nexport type NumberFilterOperator = (typeof NumberFilterOperators)[number]\n\nexport const IntegerFilterOperators = [...NumberFilterOperators] as const\nexport type IntegerFilterOperator = (typeof IntegerFilterOperators)[number]\n\nexport const BigIntFilterOperators = [...NumberFilterOperators] as const\nexport type BigIntFilterOperator = (typeof BigIntFilterOperators)[number]\n\nexport const UnsignedIntegerFilterOperators = [...NumberFilterOperators] as const\nexport type UnsignedIntegerFilterOperator = (typeof UnsignedIntegerFilterOperators)[number]\n\nexport const BooleanFilterOperators = [\n FilterOperators.EQUALS,\n FilterOperators.NOT_EQUALS,\n FilterOperators.IS_SET,\n FilterOperators.IS_NOT_SET,\n FilterOperators.IS_NULL,\n FilterOperators.IS_NOT_NULL,\n] as const\nexport type BooleanFilterOperator = (typeof BooleanFilterOperators)[number]\n\nexport const BinaryFilterOperators = [\n FilterOperators.EQUALS,\n FilterOperators.NOT_EQUALS,\n FilterOperators.IS_SET,\n FilterOperators.IS_NOT_SET,\n FilterOperators.IS_NULL,\n FilterOperators.IS_NOT_NULL,\n FilterOperators.IS_EMPTY,\n FilterOperators.IS_NOT_EMPTY,\n] as const\nexport type BinaryFilterOperator = (typeof BinaryFilterOperators)[number]\n\nexport type OperatorsForFieldType<T extends string> = T extends 'string'\n ? StringFilterOperator\n : T extends 'date'\n ? DateFilterOperator\n : T extends 'dateTime'\n ? DateTimeFilterOperator\n : T extends 'number'\n ? NumberFilterOperator\n : T extends 'integer'\n ? IntegerFilterOperator\n : T extends 'bigint'\n ? BigIntFilterOperator\n : T extends 'unsignedInteger'\n ? UnsignedIntegerFilterOperator\n : T extends 'boolean'\n ? BooleanFilterOperator\n : T extends 'binary'\n ? BinaryFilterOperator\n : never\n\n// Define argument count types\nexport type ArgumentCount = 0 | 1 | 2 | 'multiple'\n\n// Operators that require no arguments (just checking existence/state)\nexport const NoArgumentOperators = [\n FilterOperators.IS_SET,\n FilterOperators.IS_NOT_SET,\n FilterOperators.IS_EMPTY,\n FilterOperators.IS_NOT_EMPTY,\n FilterOperators.IS_NULL,\n FilterOperators.IS_NOT_NULL,\n FilterOperators.TODAY,\n FilterOperators.YESTERDAY,\n FilterOperators.TOMORROW,\n FilterOperators.THIS_WEEK,\n FilterOperators.LAST_WEEK,\n FilterOperators.NEXT_WEEK,\n FilterOperators.THIS_MONTH,\n FilterOperators.LAST_MONTH,\n FilterOperators.NEXT_MONTH,\n FilterOperators.THIS_QUARTER,\n FilterOperators.LAST_QUARTER,\n FilterOperators.NEXT_QUARTER,\n FilterOperators.THIS_YEAR,\n FilterOperators.LAST_YEAR,\n FilterOperators.NEXT_YEAR,\n FilterOperators.THIS_WEEK_TO_DATE,\n FilterOperators.THIS_MONTH_TO_DATE,\n FilterOperators.THIS_QUARTER_TO_DATE,\n FilterOperators.THIS_YEAR_TO_DATE,\n FilterOperators.THIS_HOUR,\n FilterOperators.LAST_HOUR,\n FilterOperators.NEXT_HOUR,\n FilterOperators.LAST_2_WEEKS,\n] as const\nexport type NoArgumentOperator = (typeof NoArgumentOperators)[number]\n\n// Operators that require exactly 1 argument\nexport const SingleArgumentOperators = [\n FilterOperators.EQUALS,\n FilterOperators.NOT_EQUALS,\n FilterOperators.CONTAINS,\n FilterOperators.NOT_CONTAINS,\n FilterOperators.STARTS_WITH,\n FilterOperators.ENDS_WITH,\n FilterOperators.NOT,\n FilterOperators.GREATER_THAN,\n FilterOperators.LESS_THAN,\n FilterOperators.GREATER_THAN_OR_EQUAL,\n FilterOperators.LESS_THAN_OR_EQUAL,\n FilterOperators.LAST_N_DAYS,\n FilterOperators.NEXT_N_DAYS,\n FilterOperators.MORE_THAN_DAYS_AGO,\n FilterOperators.LESS_THAN_DAYS_AGO,\n FilterOperators.MORE_THAN_DAYS_FROM_NOW,\n FilterOperators.LESS_THAN_DAYS_FROM_NOW,\n FilterOperators.EXACTLY_DAYS_AGO,\n FilterOperators.EXACTLY_DAYS_FROM_NOW,\n FilterOperators.LAST_N_HOURS,\n FilterOperators.NEXT_N_HOURS,\n FilterOperators.LAST_N_WEEKS,\n FilterOperators.NEXT_N_WEEKS,\n FilterOperators.LAST_N_MONTHS,\n FilterOperators.NEXT_N_MONTHS,\n FilterOperators.LAST_N_QUARTERS,\n FilterOperators.NEXT_N_QUARTERS,\n FilterOperators.LAST_N_YEARS,\n FilterOperators.NEXT_N_YEARS,\n] as const\nexport type SingleArgumentOperator = (typeof SingleArgumentOperators)[number]\n\n// Operators that require exactly 2 arguments (ranges)\nexport const TwoArgumentOperators = [FilterOperators.BETWEEN, FilterOperators.NOT_BETWEEN] as const\nexport type TwoArgumentOperator = (typeof TwoArgumentOperators)[number]\n\n// Operators that require at least 1 argument (can have multiple)\nexport const MultipleArgumentOperators = [FilterOperators.IN, FilterOperators.NOT_IN] as const\nexport type MultipleArgumentOperator = (typeof MultipleArgumentOperators)[number]\n\n// Type guards\nexport const isNoArgumentOperator = (op: FilterOperator): op is NoArgumentOperator =>\n (NoArgumentOperators as readonly FilterOperator[]).includes(op)\n\nexport const isSingleArgumentOperator = (op: FilterOperator): op is SingleArgumentOperator =>\n (SingleArgumentOperators as readonly FilterOperator[]).includes(op)\n\nexport const isTwoArgumentOperator = (op: FilterOperator): op is TwoArgumentOperator =>\n (TwoArgumentOperators as readonly FilterOperator[]).includes(op)\n\nexport const isMultipleArgumentOperator = (op: FilterOperator): op is MultipleArgumentOperator =>\n (MultipleArgumentOperators as readonly FilterOperator[]).includes(op)\n\n// Runtime function to get argument count\nexport function getOperatorArgumentCount(operator: FilterOperator): ArgumentCount {\n if (isNoArgumentOperator(operator)) return 0\n if (isSingleArgumentOperator(operator)) return 1\n if (isTwoArgumentOperator(operator)) return 2\n if (isMultipleArgumentOperator(operator)) return 'multiple'\n\n // This should never happen if all operators are covered\n return 0 as ArgumentCount // Fallback, should never hit\n}\n\nexport type ArgumentsForOperator<T extends FilterOperator> = T extends NoArgumentOperator\n ? []\n : T extends SingleArgumentOperator\n ? [value: any]\n : T extends TwoArgumentOperator\n ? [min: any, max: any]\n : T extends MultipleArgumentOperator\n ? any[]\n : never\n\n// Helper type to check if operator requires arguments\nexport type RequiresArguments<T extends FilterOperator> = T extends NoArgumentOperator\n ? false\n : true\n\n// Helper type to infer the value type based on field type\nexport type ValueTypeForFieldType<T extends ResourcefulFieldType> = T extends 'string'\n ? string\n : T extends 'date'\n ? DateTime // ISO string, timestamp, or DateTime\n : T extends 'dateTime'\n ? DateTime // ISO string, timestamp, or DateTime\n : T extends 'number'\n ? number\n : T extends 'integer'\n ? number\n : T extends 'bigint'\n ? bigint | number\n : T extends 'unsignedInteger'\n ? number\n : T extends 'boolean'\n ? boolean\n : T extends 'binary'\n ? Uint8Array | Buffer | string\n : never\nexport type TypedArgumentsForOperator<\n TOperator extends FilterOperator,\n TFieldType extends ResourcefulFieldType,\n> = TOperator extends NoArgumentOperator\n ? []\n : TOperator extends SingleArgumentOperator\n ? TOperator extends\n | typeof FilterOperators.LAST_N_DAYS\n | typeof FilterOperators.NEXT_N_DAYS\n | typeof FilterOperators.MORE_THAN_DAYS_AGO\n | typeof FilterOperators.LESS_THAN_DAYS_AGO\n | typeof FilterOperators.MORE_THAN_DAYS_FROM_NOW\n | typeof FilterOperators.LESS_THAN_DAYS_FROM_NOW\n | typeof FilterOperators.EXACTLY_DAYS_AGO\n | typeof FilterOperators.EXACTLY_DAYS_FROM_NOW\n | typeof FilterOperators.LAST_N_HOURS\n | typeof FilterOperators.NEXT_N_HOURS\n | typeof FilterOperators.LAST_N_WEEKS\n | typeof FilterOperators.NEXT_N_WEEKS\n | typeof FilterOperators.LAST_N_MONTHS\n | typeof FilterOperators.NEXT_N_MONTHS\n | typeof FilterOperators.LAST_N_QUARTERS\n | typeof FilterOperators.NEXT_N_QUARTERS\n | typeof FilterOperators.LAST_N_YEARS\n | typeof FilterOperators.NEXT_N_YEARS\n ? [value: number] // These operators take a number for the N value\n : [value: ValueTypeForFieldType<TFieldType>]\n : TOperator extends TwoArgumentOperator\n ? [min: ValueTypeForFieldType<TFieldType>, max: ValueTypeForFieldType<TFieldType>]\n : TOperator extends MultipleArgumentOperator\n ? ValueTypeForFieldType<TFieldType>[]\n : never\n\n// Base filter condition with proper type constraints\nexport type FilterCondition<\n TFieldType extends ResourcefulFieldType = ResourcefulFieldType,\n TOperator extends OperatorsForFieldType<TFieldType> = OperatorsForFieldType<TFieldType>,\n> = {\n field: string\n type: TFieldType\n operator: TOperator\n arguments: TypedArgumentsForOperator<TOperator, TFieldType>\n}\n\n// Union type for all possible filter conditions\nexport type AnyFilterCondition = {\n [K in ResourcefulFieldType]: FilterCondition<K, OperatorsForFieldType<K>>\n}[ResourcefulFieldType]\n\nexport const FilterGroupOperator = ['AND', 'OR'] as const\nexport type FilterGroupOperator = (typeof FilterGroupOperator)[number]\nexport type FilterGroupCondition = AnyFilterCondition | FilterGroup\n\n// Recursive filter group for nested conditions\nexport type FilterGroup = {\n operator: FilterGroupOperator\n conditions: Array<FilterGroupCondition>\n}\n\nexport const FilterConditionSchema = joi.object<AnyFilterCondition>({\n field: joi.string().required().label('%1$s'),\n type: joi\n .string<ResourcefulFieldType>()\n .required()\n .valid(...ResourcefulFieldType),\n operator: joi\n .string<FilterOperator>()\n .when('type', {\n switch: [\n { is: 'string', then: joi.valid(...StringFilterOperators) },\n { is: 'date', then: joi.valid(...DateFilterOperators) },\n { is: 'dateTime', then: joi.valid(...DateTimeFilterOperators) },\n { is: 'binary', then: joi.valid(...BinaryFilterOperators) },\n { is: 'number', then: joi.valid(...NumberFilterOperators) },\n { is: 'integer', then: joi.valid(...IntegerFilterOperators) },\n { is: 'bigint', then: joi.valid(...BigIntFilterOperators) },\n { is: 'unsignedInteger', then: joi.valid(...UnsignedIntegerFilterOperators) },\n { is: 'boolean', then: joi.valid(...BooleanFilterOperators) },\n ],\n otherwise: joi.forbidden(),\n })\n .required()\n .label('%2$s'),\n arguments: joi\n .array()\n .when('operator', {\n switch: [\n { is: joi.string().valid(...NoArgumentOperators), then: joi.array().length(0) },\n { is: joi.string().valid(...SingleArgumentOperators), then: joi.array().length(1) },\n { is: joi.string().valid(...TwoArgumentOperators), then: joi.array().length(2) },\n { is: joi.string().valid(...MultipleArgumentOperators), then: joi.array().min(1) },\n ],\n otherwise: joi.forbidden(),\n })\n .when('operator', {\n is: joi\n .string()\n .valid(\n FilterOperators.LAST_N_DAYS,\n FilterOperators.NEXT_N_DAYS,\n FilterOperators.MORE_THAN_DAYS_AGO,\n FilterOperators.LESS_THAN_DAYS_AGO,\n FilterOperators.MORE_THAN_DAYS_FROM_NOW,\n FilterOperators.LESS_THAN_DAYS_FROM_NOW,\n FilterOperators.EXACTLY_DAYS_AGO,\n FilterOperators.EXACTLY_DAYS_FROM_NOW,\n FilterOperators.LAST_N_HOURS,\n FilterOperators.NEXT_N_HOURS,\n FilterOperators.LAST_N_WEEKS,\n FilterOperators.NEXT_N_WEEKS,\n FilterOperators.LAST_N_MONTHS,\n FilterOperators.NEXT_N_MONTHS,\n FilterOperators.LAST_N_QUARTERS,\n FilterOperators.NEXT_N_QUARTERS,\n FilterOperators.LAST_N_YEARS,\n FilterOperators.NEXT_N_YEARS\n ),\n then: joi.array().items(joi.number().min(0).integer()),\n otherwise: joi.when('type', {\n switch: [\n { is: 'string', then: joi.array().items(joi.string()) },\n {\n is: 'date',\n then: joi.array().items(\n joi.datetime().toISO((dt) => ({\n suppressMilliseconds: true,\n precision: 'seconds',\n extendedZone: dt.year > 1970 && dt.zone.type !== 'fixed',\n }))\n ),\n },\n {\n is: 'dateTime',\n then: joi.array().items(\n joi.datetime().toISO((dt) => ({\n suppressMilliseconds: true,\n precision: 'seconds',\n extendedZone: dt.year > 1970 && dt.zone.type !== 'fixed',\n }))\n ),\n },\n { is: 'binary', then: joi.array().items(joi.string(), joi.binary()) },\n { is: 'number', then: joi.array().items(joi.number()) },\n { is: 'integer', then: joi.array().items(joi.number().integer()) },\n { is: 'bigint', then: joi.array().items(joi.number().integer(), joi.bigint()) },\n {\n is: 'unsignedInteger',\n then: joi.array().items(joi.number().integer().min(0), joi.bigint().min(0n)),\n },\n { is: 'boolean', then: joi.array().items(joi.boolean()) },\n ],\n otherwise: joi.array().items(joi.any()),\n }),\n })\n .required()\n .label('%3$s'),\n})\n\nexport const FilterGroupOperatorSchema = joi\n .string<FilterGroupOperator>()\n .valid(...FilterGroupOperator)\n .insensitive()\n .uppercase()\n .required()\n\nexport const FilterGroupSchema = joi\n .object<FilterGroup>({\n operator: FilterGroupOperatorSchema,\n conditions: joi\n .array()\n .items(joi.alternatives().try(FilterConditionSchema, joi.link('#FilterGroupSchema')))\n .min(0)\n .required(),\n })\n .id('FilterGroupSchema')\n\nexport const FilterGroupConditionSchema = joi\n .alternatives()\n .try(FilterConditionSchema, FilterGroupSchema)\n\nexport const FilterGroupConditionsSchema = joi\n .array()\n .items(FilterGroupConditionSchema)\n .min(0)\n .required()\n\nexport const asFilterCondition = <\n TFieldType extends ResourcefulFieldType = ResourcefulFieldType,\n TOperator extends OperatorsForFieldType<TFieldType> = OperatorsForFieldType<TFieldType>,\n>(\n value: unknown,\n concat?: ObjectSchema<AnyFilterCondition>\n): FilterCondition<TFieldType, TOperator> => {\n const usable = concat ? FilterConditionSchema.concat(concat) : FilterConditionSchema\n const { error, value: validated } = usable.validate(value, CAST_OPTIONS)\n if (error) {\n throw error\n }\n return validated as FilterCondition<TFieldType, TOperator>\n}\n\nexport const asFilterGroup = (value: unknown, concat?: ObjectSchema<FilterGroup>): FilterGroup => {\n const usable = concat ? FilterGroupSchema.concat(concat) : FilterGroupSchema\n const { error, value: validated } = usable.validate(value, CAST_OPTIONS)\n if (error) {\n throw error\n }\n return validated as FilterGroup\n}\n\nexport const asFilterGroupOperator = (\n value: unknown,\n concat?: StringSchema<FilterGroupOperator>\n): FilterGroupOperator => {\n const usable = concat ? FilterGroupOperatorSchema.concat(concat) : FilterGroupOperatorSchema\n const { error, value: validated } = usable.validate(value, CAST_OPTIONS)\n if (error) {\n throw error\n }\n return validated as FilterGroupOperator\n}\n\nexport const asFilterGroupCondition = (\n value: unknown,\n concat?: AlternativesSchema<any>\n): FilterGroupCondition => {\n const usable = concat ? FilterGroupConditionSchema.concat(concat) : FilterGroupConditionSchema\n const { error, value: validated } = usable.validate(value, CAST_OPTIONS)\n if (error) {\n throw error\n }\n return validated as FilterGroupCondition\n}\n\nexport const asFilterGroupConditions = (\n value: unknown,\n concat?: ArraySchema<any[]>\n): FilterGroup['conditions'] => {\n const usable = concat ? FilterGroupConditionsSchema.concat(concat) : FilterGroupConditionsSchema\n const { error, value: validated } = usable.validate(value, CAST_OPTIONS)\n if (error) {\n throw error\n }\n return validated as FilterGroup['conditions']\n}\n\nexport const isFilterCondition = (value: unknown): value is FilterCondition => {\n const { error } = FilterConditionSchema.validate(value, GUARD_OPTIONS)\n return !error\n}\n\nexport const isFilterGroup = (value: unknown): value is FilterGroup => {\n const { error } = FilterGroupSchema.validate(value, GUARD_OPTIONS)\n return !error\n}\n\nexport const isFilterGroupOperator = (value: unknown): value is FilterGroupOperator => {\n const { error } = FilterGroupOperatorSchema.validate(value, GUARD_OPTIONS)\n return !error\n}\n\nexport const isFilterGroupCondition = (value: unknown): value is FilterGroupCondition => {\n const { error } = FilterGroupConditionSchema.validate(value, GUARD_OPTIONS)\n return !error\n}\n\nexport const isFilterGroupConditions = (value: unknown): value is FilterGroup['conditions'] => {\n const { error } = FilterGroupConditionsSchema.validate(value, GUARD_OPTIONS)\n return !error\n}\n\nexport const FilterGroupLikeSchema = joi.object<FilterGroup>({\n operator: FilterGroupOperatorSchema,\n conditions: joi.array().items(joi.any()).min(0).required(),\n})\n\nexport const FilterConditionLikeSchema = joi.object<FilterCondition>({\n field: joi.string().required().allow(''),\n type: joi.string().required().allow(''),\n operator: joi.string().required().allow(''),\n arguments: joi.array().items(joi.any()).sparse().required(),\n})\n\nexport const isFilterGroupLike = (value: unknown): boolean => {\n const { error } = FilterGroupLikeSchema.validate(value, GUARD_OPTIONS)\n return !error\n}\n\nexport const isFilterConditionLike = (value: unknown): boolean => {\n const { error } = FilterConditionLikeSchema.validate(value, GUARD_OPTIONS)\n return !error\n}\n\nexport const isFilterGroupConditionLike = (value: unknown): boolean => {\n return isFilterGroupLike(value) || isFilterConditionLike(value)\n}\n\nexport const FilterOperatorSchema = joi\n .string<FilterOperator>()\n .valid(...Object.values(FilterOperators))\n\nexport const isFilterOperator = (value: unknown): value is FilterOperator => {\n const { error } = FilterOperatorSchema.validate(value, GUARD_OPTIONS)\n return !error\n}\n\nexport const isFilterMemberOfFilterOperators = (\n value: unknown\n): value is FilterOperators[keyof FilterOperators] => {\n const { error } = FilterOperatorSchema.validate(value, GUARD_OPTIONS)\n return !error\n}\n\nexport const asFilterOperator = (\n value: unknown,\n concat?: StringSchema<FilterOperator>\n): FilterOperator => {\n const usable = concat ? FilterOperatorSchema.concat(concat) : FilterOperatorSchema\n const { error, value: validated } = usable.validate(value, CAST_OPTIONS)\n if (error) {\n throw error\n }\n return validated as FilterOperator\n}\n\nexport const filterGroupToLucene = (group: FilterGroup): string => {\n const glue = group.operator.toUpperCase() === 'AND' ? ' AND ' : ' OR '\n const conditions = group.conditions.map((condition) => {\n if (isFilterGroup(condition)) {\n return `(${filterGroupToLucene(condition)})`\n } else if (isFilterCondition(condition)) {\n const { type, operator } = condition\n let { field, arguments: args } = condition\n\n // if the field has spaces or special characters, quote it\n if (/[^a-zA-Z0-9_]/.test(field)) {\n field = `\"${field.replace(/\"/g, '\\\\\"')}\"`\n }\n\n // Helper function to format DateTime based on field type\n const formatDateTime = (dt: DateTime) => {\n return type === 'date' ? `\"${dt.toISODate()}\"` : `\"${dt.toISO()}\"`\n }\n\n // normalize datetime values to not include the extended zone\n // because lucene doesn't like that\n if (type === 'dateTime') {\n // @ts-ignore\n args = args.map((arg) => {\n if ('string' !== typeof arg) {\n return arg\n }\n const dt = DateTime.fromISO(arg, {\n setZone: true,\n })\n if (!dt.isValid) {\n return arg\n }\n return `\"${dt.toISO()}\"`\n })\n }\n\n switch (operator) {\n case FilterOperators.EQUALS: {\n switch (type) {\n case 'number':\n case 'integer':\n case 'bigint':\n case 'unsignedInteger':\n case 'boolean':\n case 'date':\n case 'dateTime':\n return `${field}:=${args[0]}`\n default:\n return `${field}:${args[0]}`\n }\n }\n case FilterOperators.NOT_EQUALS:\n return `NOT ${field}:${args[0]}`\n case FilterOperators.IS_SET:\n return `NOT ${field}:null`\n case FilterOperators.IS_NOT_SET:\n return `${field}:null`\n case FilterOperators.CONTAINS:\n return `${field}:*${args[0]}*`\n case FilterOperators.NOT_CONTAINS:\n return `NOT ${field}:*${args[0]}*`\n case FilterOperators.STARTS_WITH:\n return `${field}:${args[0]}*`\n case FilterOperators.ENDS_WITH:\n return `${field}:*${args[0]}`\n case FilterOperators.NOT:\n return `NOT ${field}:${args[0]}`\n case FilterOperators.GREATER_THAN:\n return `${field}:>${args[0]}`\n case FilterOperators.LESS_THAN:\n return `${field}:<${args[0]}`\n case FilterOperators.GREATER_THAN_OR_EQUAL:\n return `${field}:>=${args[0]}`\n case FilterOperators.LESS_THAN_OR_EQUAL:\n return `${field}:<=${args[0]}`\n case FilterOperators.BETWEEN: {\n switch (type) {\n case 'date':\n case 'dateTime':\n return `(${field}:>=${args[0]} AND ${field}:<=${args[1]})`\n default:\n return `${field}:[${args[0]} TO ${args[1]}]`\n }\n }\n case FilterOperators.NOT_BETWEEN: {\n switch (type) {\n case 'date':\n case 'dateTime':\n return `NOT (${field}:>=${args[0]} AND ${field}:<=${args[1]})`\n default:\n return `NOT ${field}:[${args[0]} TO ${args[1]}]`\n }\n }\n case FilterOperators.IN:\n return `(${args.map((v) => `${field}:${v}`).join(' OR ')})`\n case FilterOperators.NOT_IN:\n return `NOT (${args.map((v) => `${field}:${v}`).join(' OR ')})`\n case FilterOperators.TODAY:\n return `${field}:=${formatDateTime(DateTime.now())}`\n case FilterOperators.YESTERDAY:\n return `${field}:=${formatDateTime(DateTime.now().minus({ days: 1 }))}`\n case FilterOperators.THIS_WEEK:\n return `${field}:>=${formatDateTime(DateTime.now().startOf('week'))}`\n case FilterOperators.LAST_WEEK:\n return `(${field}:>=${formatDateTime(DateTime.now().minus({ weeks: 1 }).startOf('week'))} AND ${field}:<=${formatDateTime(\n DateTime.now().minus({ weeks: 1 }).endOf('week')\n )})`\n case FilterOperators.LAST_2_WEEKS:\n return `${field}:>=${formatDateTime(DateTime.now().minus({ weeks: 2 }).startOf('week'))}`\n case FilterOperators.THIS_MONTH:\n return `${field}:>=${formatDateTime(DateTime.now().startOf('month'))}`\n case FilterOperators.LAST_MONTH:\n return `(${field}:>=${formatDateTime(DateTime.now().minus({ months: 1 }).startOf('month'))} AND ${field}:<=${formatDateTime(\n DateTime.now().minus({ months: 1 }).endOf('month')\n )})`\n case FilterOperators.THIS_QUARTER:\n return `${field}:>=${formatDateTime(DateTime.now().startOf('quarter'))}`\n case FilterOperators.LAST_QUARTER:\n return `(${field}:>=${formatDateTime(\n DateTime.now().minus({ quarters: 1 }).startOf('quarter')\n )} AND ${field}:<=${formatDateTime(DateTime.now().minus({ quarters: 1 }).endOf('quarter'))})`\n case FilterOperators.THIS_YEAR:\n return `${field}:>=${formatDateTime(DateTime.now().startOf('year'))}`\n case FilterOperators.LAST_YEAR:\n return `(${field}:>=${formatDateTime(DateTime.now().minus({ years: 1 }).startOf('year'))} AND ${field}:<=${formatDateTime(\n DateTime.now().minus({ years: 1 }).endOf('year')\n )})`\n case FilterOperators.TOMORROW:\n return `${field}:=${formatDateTime(DateTime.now().plus({ days: 1 }))}`\n case FilterOperators.NEXT_WEEK:\n return `${field}:>=${formatDateTime(DateTime.now().plus({ weeks: 1 }).startOf('week'))}`\n case FilterOperators.NEXT_MONTH:\n return `${field}:>=${formatDateTime(DateTime.now().plus({ months: 1 }).startOf('month'))}`\n case FilterOperators.NEXT_QUARTER:\n return `${field}:>=${formatDateTime(DateTime.now().plus({ quarters: 1 }).startOf('quarter'))}`\n case FilterOperators.NEXT_YEAR:\n return `${field}:>=${formatDateTime(DateTime.now().plus({ years: 1 }).startOf('year'))}`\n case FilterOperators.LAST_N_DAYS:\n return `${field}:>=${formatDateTime(\n DateTime.now().minus({ days: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.NEXT_N_DAYS:\n return `${field}:<=${formatDateTime(\n DateTime.now().plus({ days: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.MORE_THAN_DAYS_AGO:\n return `${field}:<${formatDateTime(\n DateTime.now().minus({ days: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.LESS_THAN_DAYS_AGO:\n return `${field}:>=${formatDateTime(\n DateTime.now().minus({ days: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.MORE_THAN_DAYS_FROM_NOW:\n return `${field}:>${formatDateTime(\n DateTime.now().plus({ days: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.LESS_THAN_DAYS_FROM_NOW:\n return `${field}:<=${formatDateTime(\n DateTime.now().plus({ days: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.EXACTLY_DAYS_AGO:\n return `${field}:=${formatDateTime(\n DateTime.now().minus({ days: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.EXACTLY_DAYS_FROM_NOW:\n return `${field}:=${formatDateTime(\n DateTime.now().plus({ days: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.THIS_WEEK_TO_DATE:\n return `(${field}:>=${formatDateTime(DateTime.now().startOf('week'))} AND ${field}:<=${formatDateTime(DateTime.now())})`\n case FilterOperators.THIS_MONTH_TO_DATE:\n return `(${field}:>=${formatDateTime(DateTime.now().startOf('month'))} AND ${field}:<=${formatDateTime(DateTime.now())})`\n case FilterOperators.THIS_QUARTER_TO_DATE:\n return `(${field}:>=${formatDateTime(DateTime.now().startOf('quarter'))} AND ${field}:<=${formatDateTime(DateTime.now())})`\n case FilterOperators.THIS_YEAR_TO_DATE:\n return `(${field}:>=${formatDateTime(DateTime.now().startOf('year'))} AND ${field}:<=${formatDateTime(DateTime.now())})`\n case FilterOperators.LAST_N_HOURS:\n return `${field}:>=\"${DateTime.now()\n .minus({ hours: Number.parseInt(args[0]!.toString()) as number })\n .toISO()}\"`\n case FilterOperators.NEXT_N_HOURS:\n return `${field}:<=\"${DateTime.now()\n .plus({ hours: Number.parseInt(args[0]!.toString()) as number })\n .toISO()}\"`\n case FilterOperators.LAST_N_WEEKS:\n return `${field}:>=${formatDateTime(\n DateTime.now().minus({ weeks: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.NEXT_N_WEEKS:\n return `${field}:<=${formatDateTime(\n DateTime.now().plus({ weeks: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.LAST_N_MONTHS:\n return `${field}:>=${formatDateTime(\n DateTime.now().minus({ months: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.NEXT_N_MONTHS:\n return `${field}:<=${formatDateTime(\n DateTime.now().plus({ months: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.LAST_N_QUARTERS:\n return `${field}:>=${formatDateTime(\n DateTime.now().minus({ quarters: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.NEXT_N_QUARTERS:\n return `${field}:<=${formatDateTime(\n DateTime.now().plus({ quarters: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.LAST_N_YEARS:\n return `${field}:>=${formatDateTime(\n DateTime.now().minus({ years: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.NEXT_N_YEARS:\n return `${field}:<=${formatDateTime(\n DateTime.now().plus({ years: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.THIS_HOUR:\n return `${field}:>=\"${DateTime.now().startOf('hour').toISO()}\"`\n case FilterOperators.LAST_HOUR:\n return `(${field}:>=\"${DateTime.now()\n .minus({ hours: 1 })\n .startOf('hour')\n .toISO()}\" AND ${field}:<=\"${DateTime.now().minus({ hours: 1 }).endOf('hour').toISO()}\")`\n case FilterOperators.NEXT_HOUR:\n return `${field}:>=\"${DateTime.now().plus({ hours: 1 }).startOf('hour').toISO()}\"`\n case FilterOperators.IS_EMPTY:\n return `(${field}:\"\" OR ${field}:null)`\n case FilterOperators.IS_NOT_EMPTY:\n return `NOT (${field}:\"\" OR ${field}:null)`\n case FilterOperators.IS_NULL:\n return `${field}:null`\n case FilterOperators.IS_NOT_NULL:\n return `NOT ${field}:null`\n default:\n return undefined\n }\n } else {\n return undefined\n }\n })\n return conditions.filter((v) => 'string' === typeof v).join(glue)\n}\n","/* eslint-disable vue/one-component-per-file */\nimport { useI18n } from '../ioc'\nimport { useLocale } from 'vuetify'\nimport { SvgIcon } from '../svg-icon'\nimport { encode } from '@nhtio/encoder'\nimport { deepmerge } from 'deepmerge-ts'\nimport { default as ordinal } from 'ordinal'\nimport { printf as format } from 'fast-printf'\nimport { VFab } from 'vuetify/components/VFab'\nimport { VBtn } from 'vuetify/components/VBtn'\nimport { useScopedDisplay } from '../ux/display'\nimport { VCard } from 'vuetify/components/VCard'\nimport { VIcon } from 'vuetify/components/VIcon'\nimport { DevErrorAlert } from '../fields/common'\nimport { ControlButton } from '../control-button'\nimport { VInput } from 'vuetify/components/VInput'\nimport { VLabel } from 'vuetify/components/VLabel'\nimport { VSheet } from 'vuetify/components/VSheet'\nimport { emitsFactory } from '../common/factories'\nimport { VAlert } from 'vuetify/components/VAlert'\nimport { FilterGroupEmptyState } from './empty_state'\nimport { omit } from '@nhtio/vuetifiable/util/helpers'\nimport { debounce } from '@nhtio/vuetifiable/util/helpers'\nimport { VSpeedDial } from 'vuetify/components/VSpeedDial'\nimport { propsAndEmitsFactory } from '../common/factories'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { VAutocomplete } from 'vuetify/components/VAutocomplete'\nimport { IconValue } from '@nhtio/vuetifiable/composables/icons'\nimport { VContainer, VRow, VCol } from 'vuetify/components/VGrid'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { validator as joi, ValidationError } from '@nhtio/validation'\nimport { makeVInputProps } from '@nhtio/vuetifiable/components/VInput/VInput'\nimport {\n h,\n defineComponent,\n watch,\n shallowRef,\n triggerRef,\n toRefs,\n computed,\n ref,\n onMounted,\n onBeforeUnmount,\n nextTick,\n} from 'vue'\nimport {\n asAbsInt,\n stripUndefinedValuesFromObject,\n typeAndFormatToResourcefulFieldType,\n getOxfordizedListParts,\n toUnreactive,\n} from '../common/utils'\nimport {\n RBigIntField,\n RBooleanField,\n RDateTimeField,\n RDateField,\n RIntegerField,\n RNumberField,\n RStringField,\n RUnsignedIntegerField,\n} from '../fields'\nimport {\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n ReactivityBus,\n VInputEventBus,\n FilterConditionElementBus,\n FilterConditionElementToFilterConditionArgumentCellBus,\n} from './common'\nimport {\n mdiVectorLink,\n mdiSetNone,\n mdiClose,\n mdiUnfoldLessVertical,\n mdiDotsHorizontal,\n mdiDelete,\n mdiAlertCircle,\n mdiNotificationClearAll,\n mdiCardPlusOutline,\n mdiFilterPlus,\n mdiMenuDown,\n mdiMenuUp,\n} from '@mdi/js'\nimport {\n asFilterGroup,\n asFilterCondition,\n isFilterGroupOperator,\n isFilterGroupLike,\n isFilterConditionLike,\n isFilterGroupConditionLike,\n isFilterOperator,\n getOperatorArgumentCount,\n StringFilterOperators,\n DateFilterOperators,\n DateTimeFilterOperators,\n BinaryFilterOperators,\n NumberFilterOperators,\n IntegerFilterOperators,\n BigIntFilterOperators,\n UnsignedIntegerFilterOperators,\n BooleanFilterOperators,\n FilterOperators,\n} from './schema'\nimport type { ControlButtonProps } from '../control-button/props'\nimport type { PropType, ExtractPublicPropTypes, Ref, ComputedRef, SlotsType } from 'vue'\nimport type {\n FilterGroupCondition,\n FilterGroup,\n AnyFilterCondition,\n FilterGroupOperator,\n FilterOperator,\n ArgumentCount,\n} from './schema'\nimport type {\n RBigIntFieldProps,\n RBooleanFieldProps,\n RDateTimeFieldProps,\n RDateFieldProps,\n RIntegerFieldProps,\n RNumberFieldProps,\n RStringFieldProps,\n RUnsignedIntegerFieldProps,\n} from '../fields/'\nimport type {\n DispositionButtonProps,\n ResourcefulFieldLabelTerms,\n ResourcefulSchemaDefinition,\n VAlertPublicProps,\n VSpeedDialPublicProps,\n VFabPublicProps,\n VBtnPublicProps,\n VCardPublicProps,\n VIconPublicProps,\n VLabelPublicProps,\n ValidationDetails,\n VAutocompletePublicProps,\n VInputPublicProps,\n} from './common'\n\nconst { makeProps: makeFilterGroupConditionElementProps, emits: filterGroupConditionElementEmits } =\n propsAndEmitsFactory(\n {\n modelValue: {\n type: Object as PropType<FilterGroupCondition>,\n required: true,\n },\n reactivityBus: {\n type: ReactivityBus as PropType<ReactivityBus>,\n required: true,\n },\n labels: {\n type: Object as PropType<ResourcefulFieldLabelTerms>,\n default: () => ({}),\n },\n filterableFields: {\n type: Object as PropType<ResourcefulSchemaDefinition>,\n default: () => ({}),\n },\n dispositionButtons: {\n type: Object as PropType<DispositionButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n },\n iconAnd: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiVectorLink }),\n },\n iconOr: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiSetNone }),\n },\n },\n {\n 'update:modelValue': (val: FilterGroupCondition) => isFilterGroupConditionLike(val),\n 'update:model-value': (val: FilterGroupCondition) => isFilterGroupConditionLike(val),\n 'click:delete': () => true,\n },\n 'FilterGroupConditionElement'\n )\n\nexport type FilterGroupConditionElementPublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makeFilterGroupConditionElementProps>\n>\n\nconst makeFilterGroupElementProps = propsFactory(\n {\n ...omit(makeFilterGroupConditionElementProps(), ['modelValue']),\n modelValue: {\n type: Object as PropType<FilterGroup>,\n required: true,\n },\n },\n 'FilterGroupElement'\n)\n\nexport type FilterGroupElementPublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makeFilterGroupElementProps>\n>\n\nconst makeFilterConditionElementProps = propsFactory(\n {\n ...omit(makeFilterGroupConditionElementProps(), ['modelValue']),\n modelValue: {\n type: Object as PropType<AnyFilterCondition>,\n required: true,\n },\n },\n 'FilterConditionElement'\n)\n\nexport type FilterConditionElementPublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makeFilterConditionElementProps>\n>\n\nconst { makeProps: makeFilterConditionArgumentCellProps, emits: filterConditionArgumentCellEmits } =\n propsAndEmitsFactory(\n {\n modelValue: {\n type: Array as PropType<AnyFilterCondition['arguments']>,\n default: () => [] as AnyFilterCondition['arguments'],\n },\n field: {\n type: String as PropType<AnyFilterCondition['field']>,\n default: '',\n },\n operator: {\n type: String as PropType<AnyFilterCondition['operator']>,\n default: '',\n },\n argumentCount: {\n type: [Number, String] as PropType<ArgumentCount>,\n default: () => 0,\n },\n reactivityBus: {\n type: ReactivityBus as PropType<ReactivityBus>,\n required: true,\n },\n filterConditionElementToFilterConditionArgumentCellBus: {\n type: FilterConditionElementToFilterConditionArgumentCellBus as PropType<FilterConditionElementToFilterConditionArgumentCellBus>,\n required: true,\n },\n ...omit(makeVInputProps(), ['modelValue']),\n },\n {\n 'update:modelValue': (val: AnyFilterCondition['arguments']) => Array.isArray(val),\n 'update:model-value': (val: AnyFilterCondition['arguments']) => Array.isArray(val),\n },\n 'FilterConditionArgumentCell'\n )\n\nexport type FilterConditionArgumentCellPublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makeFilterConditionArgumentCellProps>\n>\n\nconst {\n makeProps: makeFilterConditionArgumentFieldProps,\n emits: filterConditionArgumentFieldEmits,\n} = propsAndEmitsFactory(\n {\n filterableFields: {\n type: Object as PropType<ResourcefulSchemaDefinition>,\n default: () => ({}),\n },\n field: {\n type: String as PropType<AnyFilterCondition['field']>,\n required: true,\n },\n type: {\n type: String as PropType<AnyFilterCondition['type']>,\n required: true,\n },\n operator: {\n type: String as PropType<AnyFilterCondition['operator']>,\n required: true,\n },\n argumentCount: {\n type: [Number, String] as PropType<ArgumentCount>,\n default: () => 0,\n },\n modelValue: {\n type: [String, Number, Boolean, Date, null, Object, Array] as PropType<any>,\n default: null,\n },\n label: {\n type: [String, null] as PropType<string | null | undefined>,\n default: undefined,\n },\n reactivityBus: {\n type: Object as PropType<ReactivityBus>,\n required: true,\n },\n filterConditionElementBus: {\n type: Object as PropType<FilterConditionElementBus>,\n required: true,\n },\n ...omit(makeVInputProps(), ['modelValue', 'label']),\n },\n {\n 'update:modelValue': (val: any) => 'undefined' !== typeof val,\n 'update:model-value': (val: any) => 'undefined' !== typeof val,\n 'focus': () => true,\n 'blur': () => true,\n },\n 'FilterConditionArgumentField'\n)\n\nexport type FilterConditionArgumentFieldPublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makeFilterConditionArgumentFieldProps>\n>\n\nexport interface EmitWithUpdateModelValue<T = FilterGroupCondition> {\n (e: 'update:modelValue', val: T): void\n (e: 'update:model-value', val: T): void\n}\n\nexport const useReactiveLocalState = <\n T = FilterGroupCondition,\n E extends EmitWithUpdateModelValue<T> = EmitWithUpdateModelValue<T>,\n>(\n emit: E,\n modelValueRef: Ref<T>,\n modelValueProp: T,\n parentReactivityBusRef: Ref<ReactivityBus>,\n onChange: (is: T, was?: T | undefined) => void = () => {}\n) => {\n const localReactiveBus = new ReactivityBus()\n const localState = shallowRef<T>(modelValueProp)\n const setLocalState = (val: T) => {\n const encodedIncoming = encode(val as any)\n const encodedCurrent = encode(toUnreactive(localState))\n // break early to prevent update loops caused\n // by the parent updating the value of modelValue\n if (encodedIncoming === encodedCurrent) return\n const boundOnChange = onChange.bind(null, toUnreactive(localState), toUnreactive(val))\n localState.value = val\n triggerRef(localState)\n boundOnChange()\n }\n watch(modelValueRef, (is: T) => setLocalState(is), {\n deep: true,\n immediate: true,\n })\n watch(\n localState,\n (is: T) => {\n // notify from child to parent that there's been an update\n emit('update:modelValue', is)\n emit('update:model-value', is)\n parentReactivityBusRef.value.notify()\n },\n { deep: true }\n )\n localReactiveBus.on('updated', () => {\n triggerRef(localState)\n })\n return { localReactiveBus, localState, setLocalState }\n}\n\nconst useValidationErrorMessageGetter = () => {\n const t = useI18n()\n const getValidationErrorMessage = (error: unknown): string => {\n // @ts-ignore\n if (error instanceof ValidationError) {\n // @ts-ignore\n return error.message\n } else if (error instanceof Error) {\n return error.message\n } else if (typeof error === 'string') {\n return error\n }\n console.error(error)\n return t('filterGroupConditionElement.unknownValidationError')\n }\n const getValidationDetails = (error: unknown): ValidationDetails => {\n // @ts-ignore\n if (error instanceof ValidationError) {\n // @ts-ignore\n return error.details\n } else {\n return [] as ValidationDetails\n }\n }\n return { getValidationErrorMessage, getValidationDetails }\n}\n\nexport const FilterGroupConditionElement = defineComponent({\n name: 'FilterGroupConditionElement',\n props: makeFilterGroupConditionElementProps(),\n emits: filterGroupConditionElementEmits,\n setup(props, { emit }) {\n const {\n modelValue,\n reactivityBus,\n labels,\n filterableFields,\n dispositionButtons,\n iconAnd,\n iconOr,\n } = toRefs(props)\n const { localReactiveBus, localState, setLocalState } =\n useReactiveLocalState<FilterGroupCondition>(emit, modelValue, props.modelValue, reactivityBus)\n const childBindings = computed<Partial<FilterGroupConditionElementPublicProps>>(() =>\n deepmerge(\n stripUndefinedValuesFromObject({\n modelValue: localState.value,\n reactivityBus: localReactiveBus,\n labels: labels.value,\n filterableFields: filterableFields.value,\n dispositionButtons: dispositionButtons.value,\n iconAnd: iconAnd.value,\n iconOr: iconOr.value,\n }),\n {\n 'onUpdate:modelValue': (val: FilterGroupCondition) => setLocalState(val),\n 'onUpdate:model-value': (val: FilterGroupCondition) => setLocalState(val),\n 'onClick:delete': () => emit('click:delete'),\n }\n )\n )\n const t = useI18n()\n return () =>\n isFilterConditionLike(modelValue.value)\n ? h(FilterConditionElement, childBindings.value as FilterConditionElementPublicProps)\n : isFilterGroupLike(modelValue.value)\n ? h(FilterGroupElement, childBindings.value as FilterGroupElementPublicProps)\n : h(VAlert, {\n closable: true,\n closeIcon: () => h(SvgIcon, { d: mdiClose }),\n icon: () => h(SvgIcon, { d: mdiAlertCircle }),\n color: 'error',\n density: 'compact' as const,\n title: t('filterGroupConditionElement.notValid'),\n type: 'error',\n variant: 'elevated' as const,\n class: ['ma-3'],\n ...{\n 'onClick:close': () => emit('click:delete'),\n },\n } satisfies VAlertPublicProps)\n },\n})\n\nexport interface FilterGroupConditionCardSlotBindings {\n isValid: Readonly<boolean>\n validationErrorDetails: Readonly<ValidationDetails>\n errorMessage: Readonly<string | null>\n actionBaseBindings: Readonly<\n Pick<VBtnPublicProps, 'elevation' | 'density' | 'color' | 'size' | 'border'>\n >\n}\n\nexport type FilterGroupConditionCardPrependControlsActivatorSlotBindings = Pick<\n VFabPublicProps,\n | 'icon'\n | 'elevation'\n | 'density'\n | 'color'\n | 'size'\n | 'border'\n | 'absolute'\n | 'ripple'\n | 'location'\n | 'style'\n>\n\nexport type FilterGroupConditionCardPrependControlsActivatorIconSlotBindings = Pick<\n VIconPublicProps,\n 'icon' | 'size'\n>\n\nexport type FilterGroupConditionCardSlots = {\n prependedControlsActivatorIcon: (\n iconProps: FilterGroupConditionCardPrependControlsActivatorIconSlotBindings\n ) => any\n prependedControls: (props: FilterGroupConditionCardSlotBindings) => any\n appendedControls: (props: FilterGroupConditionCardSlotBindings) => any\n default: (props: FilterGroupConditionCardSlotBindings) => any\n errors: (props: FilterGroupConditionCardSlotBindings) => any\n}\n\nconst useFilterGroupConditionCardSpeedDialBindings = (\n isRtl: Ref<boolean>,\n openValue: Ref<boolean>,\n normalizedDispositionButtons: ComputedRef<DispositionButtonProps>,\n from: 'start' | 'end',\n speedDialAlignment: string = 'center',\n activatorAlignment: string = 'top',\n speedDialButtonSize: number = 24\n) => {\n const ltrStartSide = 'end' === from ? 'left' : 'right'\n const ltrEndSide = 'end' === from ? 'right' : 'left'\n const rtlStartSide = 'end' === from ? 'right' : 'left'\n const rtlEndSide = 'end' === from ? 'left' : 'right'\n const ltrSpeedDialOffset =\n 'start' === from\n ? stripUndefinedValuesFromObject({\n left: `18px`,\n })\n : stripUndefinedValuesFromObject({\n right: `18px`,\n })\n const rtlSpeedDialOffset =\n 'start' === from\n ? stripUndefinedValuesFromObject({\n right: `18px`,\n })\n : stripUndefinedValuesFromObject({\n left: `18px`,\n })\n const speedDialBindings = computed<VSpeedDialPublicProps>(\n () =>\n ({\n ...stripUndefinedValuesFromObject({\n location: isRtl.value\n ? ([rtlStartSide, speedDialAlignment].join(' ') as any)\n : ([ltrStartSide, speedDialAlignment].join(' ') as any),\n transition: 'fade-transition',\n activator: 'parent',\n modelValue: openValue.value,\n }),\n ...{\n 'onUpdate:modelValue': (val: boolean) => {\n openValue.value = val\n },\n },\n }) satisfies VSpeedDialPublicProps\n )\n const speedDialActivatorBindings = computed<VFabPublicProps>(\n () =>\n stripUndefinedValuesFromObject({\n icon: true,\n elevation: normalizedDispositionButtons.value.elevation,\n density: normalizedDispositionButtons.value.density,\n color: 'surface-light',\n size: speedDialButtonSize,\n border: 'sm opacity-100',\n absolute: true,\n ripple: false,\n location: isRtl.value\n ? ([rtlEndSide, activatorAlignment].join(' ') as any)\n : ([ltrEndSide, activatorAlignment].join(' ') as any),\n style: deepmerge(\n {\n top: `-${Math.round(speedDialButtonSize / 2)}px`,\n },\n isRtl.value ? rtlSpeedDialOffset : ltrSpeedDialOffset\n ),\n }) satisfies VFabPublicProps\n )\n const speedDialActivatorIconBindings = computed<VIconPublicProps>(() =>\n stripUndefinedValuesFromObject({\n size: 'x-small',\n icon: openValue.value\n ? () => h(SvgIcon, { d: mdiUnfoldLessVertical })\n : () => h(SvgIcon, { d: mdiDotsHorizontal }),\n })\n )\n return {\n speedDialBindings,\n speedDialActivatorBindings,\n speedDialActivatorIconBindings,\n }\n}\n\nexport const FilterGroupConditionCard = defineComponent({\n name: 'FilterGroupConditionCard',\n props: makeFilterGroupConditionElementProps(),\n emits: emitsFactory({\n 'click:delete': () => true,\n }),\n slots: Object as SlotsType<FilterGroupConditionCardSlots>,\n setup(props, { emit, slots }) {\n const { dispositionButtons, modelValue, reactivityBus } = toRefs(props)\n const t = useI18n()\n const { getValidationErrorMessage, getValidationDetails } = useValidationErrorMessageGetter()\n const validationState = ref<boolean>(true)\n const validationError = ref<string | null>(null)\n const validationDetails = ref<ValidationDetails>([])\n const fieldMessages = computed(() => ({\n 'any.required': t('filterConditionElement.validation.field.string.empty'),\n 'string.empty': t('filterConditionElement.validation.field.string.empty'),\n }))\n const operatorMessages = computed(() => ({\n 'any.required': t('filterConditionElement.validation.operator.string.empty'),\n 'string.empty': t('filterConditionElement.validation.operator.string.empty'),\n 'any.only': t('filterConditionElement.validation.operator.any.only'),\n }))\n const argumentsMessages = computed(() => ({\n 'array.sparse': t('filterConditionElement.validation.arguments.array.sparse'),\n 'array.length': t('filterConditionElement.validation.arguments.array.length'),\n }))\n const updateValidationStates = () => {\n const currentValue = toUnreactive(modelValue)\n if (isFilterGroupLike(currentValue)) {\n try {\n asFilterGroup(currentValue)\n validationState.value = true\n validationError.value = null\n validationDetails.value = []\n } catch (error) {\n validationState.value = false\n validationError.value = getValidationErrorMessage(error)\n validationDetails.value = getValidationDetails(error)\n }\n } else if (isFilterConditionLike(currentValue)) {\n try {\n asFilterCondition(\n currentValue,\n joi.object<AnyFilterCondition>({\n field: joi.string().messages(fieldMessages.value),\n operator: joi.string<FilterOperator>().messages(operatorMessages.value),\n arguments: joi.array().messages(argumentsMessages.value),\n })\n )\n validationState.value = true\n validationError.value = null\n validationDetails.value = []\n } catch (error) {\n validationState.value = false\n validationError.value = getValidationErrorMessage(error)\n validationDetails.value = getValidationDetails(error)\n }\n } else {\n validationState.value = false\n validationError.value = t('filterGroupConditionElement.notValid')\n }\n }\n const doUpdateValidationStates = debounce(updateValidationStates, 100)\n watch(\n reactivityBus,\n (is, was) => {\n if ('undefined' !== typeof was) {\n was.off('updated', doUpdateValidationStates)\n }\n is.on('updated', doUpdateValidationStates)\n },\n { immediate: true }\n )\n watch(modelValue, doUpdateValidationStates, { deep: true, immediate: true })\n const speedDialActionBaseBindings = computed<VBtnPublicProps>(() => ({\n elevation: normalizedDispositionButtons.value.elevation,\n density: normalizedDispositionButtons.value.density,\n color: 'surface-light',\n size: 'x-small',\n border: 'sm opacity-100',\n }))\n const controlSlotBindings = computed<FilterGroupConditionCardSlotBindings>(() => ({\n isValid: validationState.value,\n validationErrorDetails: validationDetails.value,\n errorMessage: validationError.value,\n actionBaseBindings: speedDialActionBaseBindings.value,\n }))\n const { isRtl } = useLocale()\n const prependedSpeedDialOpen = ref<boolean>(false)\n const appendedSpeedDialOpen = ref<boolean>(false)\n const normalizedDispositionButtons = computed(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value)\n )\n )\n const {\n speedDialBindings: prependedSpeedDialBindings,\n speedDialActivatorBindings: prependedSpeedDialActivatorBindings,\n speedDialActivatorIconBindings: prependedSpeedDialActivatorIconBindings,\n } = useFilterGroupConditionCardSpeedDialBindings(\n isRtl,\n prependedSpeedDialOpen,\n normalizedDispositionButtons,\n 'start'\n )\n const {\n speedDialBindings: appendedSpeedDialBindings,\n speedDialActivatorBindings: appendedSpeedDialActivatorBindings,\n speedDialActivatorIconBindings: appendedSpeedDialActivatorIconBindings,\n } = useFilterGroupConditionCardSpeedDialBindings(\n isRtl,\n appendedSpeedDialOpen,\n normalizedDispositionButtons,\n 'end'\n )\n const elementCardBindings = computed<VCardPublicProps>(\n () =>\n stripUndefinedValuesFromObject({\n variant: 'outlined' as const,\n minHeight: 40,\n color: !validationState.value ? 'warning' : undefined,\n class: ['mt-6', 'mb-3'],\n }) satisfies VCardPublicProps\n )\n useRender(() =>\n h(\n 'div',\n {\n class: [\n 'w-100',\n 'position-relative',\n 'px-3',\n 'resourceful__filter-group-condition-card',\n {\n 'is-valid': validationState.value,\n 'is-invalid': !validationState.value,\n 'with-error': !validationState.value && validationError.value,\n },\n ],\n },\n [\n !slots.prependedControls\n ? null\n : h(VFab, prependedSpeedDialActivatorBindings.value, () => [\n slots.prependedControlsActivatorIcon\n ? slots.prependedControlsActivatorIcon(\n prependedSpeedDialActivatorIconBindings.value\n )\n : h(VIcon, prependedSpeedDialActivatorIconBindings.value),\n h(VSpeedDial, prependedSpeedDialBindings.value, {\n default: () => slots.prependedControls(controlSlotBindings.value),\n }),\n ]),\n h(VFab, appendedSpeedDialActivatorBindings.value, () => [\n h(VIcon, appendedSpeedDialActivatorIconBindings.value),\n h(VSpeedDial, appendedSpeedDialBindings.value, {\n default: () => [\n h(VBtn, {\n ...speedDialActionBaseBindings.value,\n key: '1',\n icon: () => h(SvgIcon, { d: mdiDelete }),\n onClick: () => {\n emit('click:delete')\n },\n }),\n slots.appendedControls ? slots.appendedControls(controlSlotBindings.value) : null,\n ],\n }),\n ]),\n h(VCard, elementCardBindings.value, () => [\n slots.default\n ? slots.default(controlSlotBindings.value)\n : h(VAlert, {\n closable: true,\n closeIcon: () => h(SvgIcon, { d: mdiClose }),\n icon: () => h(SvgIcon, { d: mdiAlertCircle }),\n color: '#B71C1C',\n density: 'compact' as const,\n title: 'Component Misconfigured. Please contact Developer.',\n type: 'error',\n variant: 'outlined' as const,\n ...{\n 'onClick:close': () => emit('click:delete'),\n },\n border: 'start',\n } satisfies VAlertPublicProps),\n validationError.value\n ? h(VSheet, { color: 'transparent', class: ['py-1', 'px-2'] }, () => [\n slots.errors\n ? slots.errors(controlSlotBindings.value)\n : h(VLabel, {\n text: validationError.value!,\n class: ['text-warning', 'text-caption'],\n } satisfies VLabelPublicProps),\n ])\n : null,\n ]),\n ]\n )\n )\n return {\n validationDetails,\n }\n },\n})\n\nexport type FilterGroupConditionCard = typeof FilterGroupConditionCard\n\nexport const FilterGroupElement = defineComponent({\n name: 'FilterGroupElement',\n props: makeFilterGroupElementProps(),\n emits: emitsFactory({\n 'update:modelValue': (val: FilterGroup) => isFilterGroupLike(val),\n 'update:model-value': (val: FilterGroup) => isFilterGroupLike(val),\n 'click:delete': () => true,\n }),\n setup(props, { emit }) {\n const {\n modelValue,\n reactivityBus,\n labels,\n filterableFields,\n dispositionButtons,\n iconAnd,\n iconOr,\n } = toRefs(props)\n const t = useI18n()\n const { localReactiveBus, localState, setLocalState } = useReactiveLocalState<FilterGroup>(\n emit,\n modelValue,\n props.modelValue,\n reactivityBus\n )\n const operator = computed<FilterGroupOperator>({\n get: () => localState.value.operator,\n set: (val: FilterGroupOperator) => {\n if (isFilterGroupOperator(val)) {\n // used to completely break reactivity\n const currentLocalState = toUnreactive(localState)\n currentLocalState.operator = val\n setLocalState(currentLocalState)\n }\n },\n })\n const conditions = computed<Array<FilterGroupCondition>>({\n get: () => localState.value.conditions,\n set: (val: FilterGroupCondition[]) => {\n const valid = val.every((v) => isFilterGroupConditionLike(v))\n if (!valid) return\n const currentLocalState = toUnreactive(localState)\n currentLocalState.conditions = val\n setLocalState(currentLocalState)\n },\n })\n const operatorIcon = computed<IconValue | undefined>(() => {\n switch (operator.value) {\n case 'AND':\n return iconAnd.value\n case 'OR':\n return iconOr.value\n default:\n return undefined\n }\n })\n const doAddGroup = () => {\n const currentConditions = Array.from(toUnreactive(conditions))\n currentConditions.push({\n operator: 'AND',\n conditions: [],\n })\n conditions.value = currentConditions\n }\n const doAddCondition = () => {\n const currentConditions = Array.from(toUnreactive(conditions))\n currentConditions.push({\n field: '',\n type: '',\n operator: '',\n arguments: [],\n } as any)\n conditions.value = currentConditions\n }\n const addGroupButtonBindings = computed<ControlButtonProps>(\n () =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value),\n {\n cta: t('lucid.resourceful.index.filtersControls.addGroup'),\n prependIcon: () => h(SvgIcon, { d: mdiCardPlusOutline }),\n color: 'surface-light',\n class: ['me-2'],\n },\n { onClick: () => doAddGroup() }\n ) as ControlButtonProps\n )\n const addConditionButtonBindings = computed<ControlButtonProps>(\n () =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value),\n {\n cta: t('lucid.resourceful.index.filtersControls.addCondition'),\n prependIcon: () => h(SvgIcon, { d: mdiFilterPlus }),\n color: 'surface-light',\n },\n { onClick: () => doAddCondition() }\n ) as ControlButtonProps\n )\n return () =>\n h(\n FilterGroupConditionCard,\n {\n ...stripUndefinedValuesFromObject({\n modelValue: localState.value,\n reactivityBus: localReactiveBus,\n labels: labels.value,\n filterableFields: filterableFields.value,\n dispositionButtons: dispositionButtons.value,\n iconAnd: iconAnd.value,\n iconOr: iconOr.value,\n }),\n ...{\n 'onClick:delete': () => emit('click:delete'),\n },\n },\n {\n prependedControlsActivatorIcon: (\n iconProps: FilterGroupConditionCardPrependControlsActivatorIconSlotBindings\n ) =>\n h(\n VIcon,\n deepmerge(iconProps, {\n icon: operatorIcon.value,\n size: '12px',\n }) as FilterGroupConditionCardPrependControlsActivatorIconSlotBindings\n ),\n prependedControls: ({ actionBaseBindings }: FilterGroupConditionCardSlotBindings) => [\n h(VBtn, {\n ...actionBaseBindings,\n key: '1',\n icon: iconAnd.value,\n active: 'AND' === operator.value,\n onClick: () => {\n operator.value = 'AND'\n },\n }),\n h(VBtn, {\n ...actionBaseBindings,\n key: '2',\n icon: iconOr.value,\n active: 'OR' === operator.value,\n onClick: () => {\n operator.value = 'OR'\n },\n }),\n ],\n default: () => [\n conditions.value.length === 0\n ? h(FilterGroupEmptyState, {\n 'buttonStyles': dispositionButtons.value,\n 'onClick:add:condition': () => doAddCondition(),\n 'onClick:add:group': () => doAddGroup(),\n })\n : null,\n ...Array.from(toUnreactive(conditions)).map((item, index) =>\n h(\n FilterGroupConditionElement,\n deepmerge(\n {\n modelValue: toUnreactive(item),\n reactivityBus: localReactiveBus,\n labels: labels.value,\n filterableFields: filterableFields.value,\n dispositionButtons: dispositionButtons.value,\n iconAnd: iconAnd.value,\n iconOr: iconOr.value,\n },\n {\n 'onUpdate:modelValue': (val: FilterGroupCondition) => {\n const currentConditions = Array.from(toUnreactive(conditions))\n currentConditions.splice(index, 1, val)\n conditions.value = currentConditions\n },\n 'onClick:delete': () => {\n const currentConditions = Array.from(toUnreactive(conditions))\n currentConditions.splice(index, 1)\n conditions.value = currentConditions\n },\n }\n )\n )\n ),\n conditions.value.length > 0\n ? h(\n VSheet,\n { color: 'transparent', class: ['d-flex', 'justify-end', 'px-3', 'mb-3'] },\n () => [\n h(ControlButton, addGroupButtonBindings.value),\n h(ControlButton, addConditionButtonBindings.value),\n ]\n )\n : null,\n ],\n appendedControls: ({ actionBaseBindings }: FilterGroupConditionCardSlotBindings) => [\n h(VBtn, {\n ...actionBaseBindings,\n key: '2',\n icon: () => h(SvgIcon, { d: mdiNotificationClearAll }),\n disabled: conditions.value.length === 0,\n onClick: () => {\n conditions.value = []\n },\n }),\n ],\n errors: ({\n isValid,\n errorMessage,\n validationErrorDetails,\n }: FilterGroupConditionCardSlotBindings) => {\n if (isValid) {\n return null\n }\n if (validationErrorDetails.length === 0) {\n return h(VLabel, {\n text: errorMessage!,\n class: ['text-warning', 'text-caption'],\n } satisfies VLabelPublicProps)\n } else {\n const conditionErrors = validationErrorDetails.filter(\n (c) => c.path[0] === 'conditions'\n )\n if (conditionErrors.length === 0) {\n return h(VLabel, {\n text: t('filterGroupElement.notValid'),\n class: ['text-warning', 'text-caption'],\n } satisfies VLabelPublicProps)\n }\n const conditionErrorOrdinals = conditionErrors.map((c) =>\n ordinal(asAbsInt(c.path[1]) + 1)\n )\n const { head, tail } = getOxfordizedListParts(conditionErrorOrdinals)\n const listArgs = [head, tail].filter((v) => v.trim().length > 0)\n const listOfOrdinals =\n listArgs.length === 2 ? format(t('grammar.and'), ...listArgs) : listArgs[0]\n const modelTerm =\n conditionErrorOrdinals.length === 1\n ? t('filterGroupElement.model.condition.singular')\n : t('filterGroupElement.model.condition.plural')\n const areOrIs =\n conditionErrorOrdinals.length === 1 ? t('grammar.is') : t('grammar.are')\n const message = format(\n t('filterGroupElement.conditions.invalid'),\n listOfOrdinals,\n modelTerm,\n areOrIs\n )\n return h(VLabel, {\n text: message,\n class: ['text-warning', 'text-caption'],\n } satisfies VLabelPublicProps)\n }\n },\n }\n )\n },\n})\n\nexport type FilterConditionArgumentCellSlotProps = {\n modelValue: any\n color: VInputPublicProps['color']\n density: VInputPublicProps['density']\n name: VInputPublicProps['name']\n error: VInputPublicProps['error']\n focused: VInputPublicProps['focused']\n disabled: VInputPublicProps['disabled']\n readonly: VInputPublicProps['readonly']\n theme: VInputPublicProps['theme']\n baseColor: VInputPublicProps['baseColor']\n centerAffix: VInputPublicProps['centerAffix']\n glow: VInputPublicProps['glow']\n iconColor: VInputPublicProps['iconColor']\n hideDetails: true\n direction: VInputPublicProps['direction']\n notifyFocus: () => void\n notifyBlur: () => void\n}\n\nexport type FilterConditionArgumentCellSlots = {\n default: (props: FilterConditionArgumentCellSlotProps, bus: ReactivityBus) => any\n}\n\nconst memoizedMisconfiguredComponentAlert = h(VAlert, {\n height: 40,\n type: 'error',\n variant: 'outlined',\n text: 'Misconfigured',\n density: 'compact',\n icon: () => h(SvgIcon, { d: mdiAlertCircle }),\n})\n\nexport const FilterConditionArgumentCell = defineComponent({\n name: 'FilterConditionArgumentCell',\n props: makeFilterConditionArgumentCellProps(),\n emits: filterConditionArgumentCellEmits,\n slots: Object as SlotsType<FilterConditionArgumentCellSlots>,\n setup(props, { emit, slots }) {\n const {\n modelValue,\n color,\n prependIcon,\n appendIcon,\n density,\n name,\n label,\n style,\n error,\n class: className,\n // field,\n // operator,\n argumentCount,\n reactivityBus,\n filterConditionElementToFilterConditionArgumentCellBus: argCellBus,\n focused,\n disabled,\n errorMessages: rawErrorMessages,\n maxErrors,\n readonly,\n rules,\n validateOn,\n validationValue,\n theme,\n width,\n minWidth,\n maxWidth,\n id,\n baseColor,\n centerAffix,\n glow,\n iconColor,\n hideDetails,\n hideSpinButtons,\n hint,\n persistentHint,\n messages,\n direction,\n } = toRefs(props)\n const errorMessages = computed<string[]>(() =>\n Array.from(rawErrorMessages.value || []).map((v) =>\n v.replace(/\"?arguments\\[(\\d{1,})\\]\"?/gm, (match, g1) => {\n const asNumericIndex = Number.parseInt(g1, 10)\n const quotes = match.startsWith('\"') && match.endsWith('\"') ? '\"' : ''\n if (argumentCount.value === 1) {\n return [quotes, t('filterConditionElement.field.arguments'), quotes]\n .filter((x) => x.trim().length > 0)\n .join('')\n }\n if (Number.isNaN(asNumericIndex) || asNumericIndex < 0) {\n return t('filterConditionArgumentCell.badIndex')\n } else {\n const asOrdinal = ordinal(asNumericIndex + 1)\n return format(t('filterConditionArgumentCell.nthArgument'), asOrdinal)\n }\n })\n )\n )\n const vInputEventBus = new VInputEventBus()\n const childFocused = ref(false)\n vInputEventBus.on('focused', () => {\n childFocused.value = true\n })\n vInputEventBus.on('blurred', () => {\n childFocused.value = false\n })\n const compositeFocused = computed(() => toUnreactive(focused) || toUnreactive(childFocused))\n const vInputBindings = computed<VInputPublicProps>(() =>\n stripUndefinedValuesFromObject({\n modelValue: toUnreactive(modelValue),\n color: toUnreactive(color),\n prependIcon: toUnreactive(prependIcon),\n appendIcon: toUnreactive(appendIcon),\n density: toUnreactive(density),\n name: toUnreactive(name),\n label: toUnreactive(label),\n style: toUnreactive(style),\n error: toUnreactive(error),\n class: toUnreactive(className),\n focused: toUnreactive(compositeFocused),\n disabled: toUnreactive(disabled),\n errorMessages: toUnreactive(errorMessages),\n maxErrors: toUnreactive(maxErrors),\n readonly: toUnreactive(readonly),\n rules: toUnreactive(rules),\n validateOn: toUnreactive(validateOn),\n validationValue: toUnreactive(validationValue),\n theme: toUnreactive(theme),\n width: toUnreactive(width),\n minWidth: toUnreactive(minWidth),\n maxWidth: toUnreactive(maxWidth),\n id: toUnreactive(id),\n baseColor: toUnreactive(baseColor),\n centerAffix: toUnreactive(centerAffix),\n glow: toUnreactive(glow),\n iconColor: toUnreactive(iconColor),\n hideDetails: toUnreactive(hideDetails),\n hideSpinButtons: toUnreactive(hideSpinButtons),\n hint: toUnreactive(hint),\n persistentHint: toUnreactive(persistentHint),\n messages: toUnreactive(messages),\n direction: toUnreactive(direction),\n })\n )\n const { localReactiveBus, localState, setLocalState } = useReactiveLocalState<\n AnyFilterCondition['arguments']\n >(emit, modelValue, props.modelValue, reactivityBus)\n const partialFilterConditionArgumentCellSlotProps = computed<\n Omit<FilterConditionArgumentCellSlotProps, 'modelValue' | 'notifyFocus' | 'notifyBlur'>\n >(() => ({\n color: toUnreactive(color),\n density: toUnreactive(density),\n name: toUnreactive(name),\n error: toUnreactive(error),\n focused: toUnreactive(focused),\n disabled: toUnreactive(disabled),\n readonly: toUnreactive(readonly),\n theme: toUnreactive(theme),\n baseColor: toUnreactive(baseColor),\n centerAffix: toUnreactive(centerAffix),\n glow: toUnreactive(glow),\n iconColor: toUnreactive(iconColor),\n hideDetails: true as const,\n direction: toUnreactive(direction),\n label: toUnreactive(label),\n }))\n const resetArguments = () => {\n const is = toUnreactive(argumentCount)\n let updateTo: AnyFilterCondition['arguments'] = []\n switch (is) {\n case 1:\n updateTo = [undefined] as any\n break\n case 2:\n updateTo = [undefined, undefined] as any\n break\n\n default:\n updateTo = []\n break\n }\n setLocalState(updateTo)\n }\n watch(\n argCellBus,\n (is, was) => {\n is.on('needs:reset:arguments', resetArguments)\n if (was && was instanceof FilterConditionElementToFilterConditionArgumentCellBus) {\n was.off('needs:reset:arguments', resetArguments)\n }\n },\n { immediate: true }\n )\n const { isRtl } = useLocale()\n const t = useI18n()\n return () =>\n h(VInput, vInputBindings.value, () =>\n h(VContainer, { fluid: true, class: ['pa-0'] }, () =>\n h(VRow, {}, () => {\n switch (argumentCount.value) {\n case 1:\n return [\n h(VCol, { cols: 12 }, () =>\n slots.default\n ? slots.default(\n deepmerge(\n partialFilterConditionArgumentCellSlotProps.value,\n { modelValue: localState.value[0] },\n {\n 'onUpdate:modelValue': (val: any) => {\n const currentState = toUnreactive(localState)\n currentState[0] = val\n setLocalState(currentState)\n },\n },\n {\n notifyFocus: () => vInputEventBus.notifyFocus('a1'),\n notifyBlur: () => vInputEventBus.notifyBlur('a1'),\n }\n ),\n localReactiveBus\n )\n : memoizedMisconfiguredComponentAlert\n ),\n ]\n case 2:\n return [\n h(VCol, { cols: 6, class: 'position-relative' }, () => [\n slots.default\n ? slots.default(\n deepmerge(\n partialFilterConditionArgumentCellSlotProps.value,\n {\n modelValue: localState.value[0],\n label: [label.value, t('general.start')]\n .filter((v) => 'string' === typeof v && v.trim().length > 0)\n .map((v) => v!.trim())\n .join(' '),\n },\n {\n 'onUpdate:modelValue': (val: any) => {\n const currentState = toUnreactive(localState)\n currentState[0] = val\n setLocalState(currentState)\n },\n },\n {\n notifyFocus: () => vInputEventBus.notifyFocus('a1'),\n notifyBlur: () => vInputEventBus.notifyBlur('a1'),\n }\n ),\n localReactiveBus\n )\n : memoizedMisconfiguredComponentAlert,\n h(\n 'div',\n {\n class: ['d-flex', 'justify-center', 'align-center'],\n style: {\n position: 'absolute',\n left: isRtl.value ? '-8px' : undefined,\n right: isRtl.value ? undefined : '-8px',\n width: '16px',\n top: 0,\n bottom: 0,\n },\n },\n '&'\n ),\n ]),\n h(VCol, { cols: 6 }, () =>\n slots.default\n ? slots.default(\n deepmerge(\n partialFilterConditionArgumentCellSlotProps.value,\n {\n modelValue: localState.value[1],\n label: [label.value, t('general.end')]\n .filter((v) => 'string' === typeof v && v.trim().length > 0)\n .map((v) => v!.trim())\n .join(' '),\n },\n {\n 'onUpdate:modelValue': (val: any) => {\n const currentState = toUnreactive(localState)\n currentState[1] = val\n setLocalState(currentState)\n },\n },\n {\n notifyFocus: () => vInputEventBus.notifyFocus('a2'),\n notifyBlur: () => vInputEventBus.notifyBlur('a2'),\n }\n ),\n localReactiveBus\n )\n : memoizedMisconfiguredComponentAlert\n ),\n ]\n case 'multiple':\n return [\n h(VCol, { cols: 12 }, () =>\n slots.default\n ? slots.default(\n deepmerge(\n partialFilterConditionArgumentCellSlotProps.value,\n { modelValue: localState.value },\n {\n 'onUpdate:modelValue': (val: any) => {\n setLocalState(val)\n },\n },\n {\n notifyFocus: () => vInputEventBus.notifyFocus('a1'),\n notifyBlur: () => vInputEventBus.notifyBlur('a1'),\n }\n ),\n localReactiveBus\n )\n : h(VAlert, {\n height: 40,\n type: 'error',\n variant: 'outlined',\n text: 'Component Misconfigured',\n density: 'compact',\n icon: () => h(SvgIcon, { d: mdiAlertCircle }),\n })\n ),\n ]\n default:\n return []\n }\n })\n )\n )\n },\n})\n\nexport const FilterConditionArgumentField = defineComponent({\n name: 'FilterConditionArgumentField',\n props: makeFilterConditionArgumentFieldProps(),\n emits: filterConditionArgumentFieldEmits,\n setup(props, { emit }) {\n const {\n filterableFields,\n modelValue,\n color,\n prependIcon,\n appendIcon,\n name,\n label,\n error,\n class: className,\n field,\n type,\n operator,\n argumentCount,\n reactivityBus,\n focused,\n disabled,\n errorMessages,\n maxErrors,\n readonly,\n validateOn,\n theme,\n id,\n centerAffix,\n hideDetails,\n filterConditionElementBus,\n } = toRefs(props)\n const { localState, setLocalState } = useReactiveLocalState<any>(\n emit as unknown as EmitWithUpdateModelValue<any>,\n modelValue,\n props.modelValue,\n reactivityBus\n )\n const onArgumentsChanged = (is: any, was: any) => {\n if (!is && !was) return\n }\n watch(\n filterConditionElementBus,\n (is, was) => {\n is.on('change:arguments', onArgumentsChanged)\n if (was && was instanceof FilterConditionElementBus) {\n was.off('change:arguments', onArgumentsChanged)\n }\n },\n { immediate: true }\n )\n onBeforeUnmount(() => {\n filterConditionElementBus.value.off('change:arguments', onArgumentsChanged)\n })\n const conditionFieldDefinition = computed<ResourcefulSchemaDefinition | undefined>(() => {\n if (!field.value || !filterableFields.value[field.value]) {\n return undefined\n }\n return toUnreactive(filterableFields.value[field.value])\n })\n const conditionFieldDefinitionStringFormat = computed<RStringFieldProps['format']>(() => {\n if ('string' !== type.value) return undefined\n if (!conditionFieldDefinition.value) return undefined\n switch (conditionFieldDefinition.value.format?.type) {\n case 'color':\n case 'email':\n case 'password':\n case 'url':\n case 'tel':\n case 'search':\n return conditionFieldDefinition.value.format.type\n default:\n return undefined\n }\n })\n const commonFieldProps = computed(() => ({\n // VInput props to pass through\n color: color.value,\n prependIcon: prependIcon.value,\n appendIcon: appendIcon.value,\n variant: 'outlined' as const, // not definable for UI consistency\n density: 'compact' as const, // not definable for UI consistency\n name: name.value,\n label: label.value ?? undefined,\n error: error.value,\n class: className.value,\n focused: focused.value,\n disabled: disabled.value ?? undefined,\n errorMessages: errorMessages.value,\n maxErrors: maxErrors.value,\n readonly: readonly.value,\n hideDetails: hideDetails.value,\n validateOn: validateOn.value,\n theme: theme.value,\n centerAffix: centerAffix.value,\n id: id.value,\n // R{type}Field props to pass through\n multiple: 'multiple' === argumentCount.value,\n onBlur: () => emit('blur'),\n onFocus: () => emit('focus'),\n // v-model integration\n modelValue: localState.value,\n ...{\n 'onUpdate:modelValue': (val: any) => setLocalState(val),\n },\n }))\n // Used to override in cases where the field type should be different that the field's type\n // for a given operator, such as when we're dealing with date +/- intervals operators\n const neededFieldType = computed(() => {\n switch (operator.value) {\n case FilterOperators.LAST_N_DAYS:\n case FilterOperators.NEXT_N_DAYS:\n case FilterOperators.MORE_THAN_DAYS_AGO:\n case FilterOperators.LESS_THAN_DAYS_AGO:\n case FilterOperators.MORE_THAN_DAYS_FROM_NOW:\n case FilterOperators.LESS_THAN_DAYS_FROM_NOW:\n case FilterOperators.EXACTLY_DAYS_AGO:\n case FilterOperators.EXACTLY_DAYS_FROM_NOW:\n case FilterOperators.LAST_N_HOURS:\n case FilterOperators.NEXT_N_HOURS:\n case FilterOperators.LAST_N_WEEKS:\n case FilterOperators.NEXT_N_WEEKS:\n case FilterOperators.LAST_N_MONTHS:\n case FilterOperators.NEXT_N_MONTHS:\n case FilterOperators.LAST_N_QUARTERS:\n case FilterOperators.NEXT_N_QUARTERS:\n case FilterOperators.LAST_N_YEARS:\n case FilterOperators.NEXT_N_YEARS:\n return {\n type: 'integer' as const,\n args: { min: 0 } satisfies Partial<RNumberFieldProps>,\n }\n default:\n return {\n type: type.value,\n args: undefined,\n }\n }\n })\n return () => {\n switch (neededFieldType.value.type) {\n case 'string':\n return h(RStringField, {\n // Field specifics\n ...(neededFieldType.value.args ?? {\n format: conditionFieldDefinitionStringFormat.value,\n }),\n // Common props\n ...commonFieldProps.value,\n } satisfies Partial<RStringFieldProps>)\n case 'date':\n return h(RDateField, {\n // Field specifics\n ...(neededFieldType.value.args ?? {}),\n // Common props\n ...commonFieldProps.value,\n } satisfies Partial<RDateFieldProps>)\n case 'dateTime':\n return h(RDateTimeField, {\n // Field specifics\n ...(neededFieldType.value.args ?? {}),\n // Common props\n ...commonFieldProps.value,\n } satisfies Partial<RDateTimeFieldProps>)\n case 'binary':\n return h(DevErrorAlert, {})\n case 'number':\n return h(RNumberField, {\n // Field specifics\n ...(neededFieldType.value.args ?? {\n min: (conditionFieldDefinition.value as any | undefined)?.minimum,\n max: (conditionFieldDefinition.value as any | undefined)?.maximum,\n step: (conditionFieldDefinition.value as any | undefined)?.multipleOf,\n }),\n // Common props\n ...commonFieldProps.value,\n } satisfies Partial<RNumberFieldProps>)\n case 'integer':\n return h(RIntegerField, {\n // Field specifics\n ...(neededFieldType.value.args ?? {\n min: (conditionFieldDefinition.value as any | undefined)?.minimum,\n max: (conditionFieldDefinition.value as any | undefined)?.maximum,\n step: (conditionFieldDefinition.value as any | undefined)?.multipleOf,\n }),\n // Common props\n ...commonFieldProps.value,\n } satisfies Partial<RIntegerFieldProps>)\n case 'bigint':\n return h(RBigIntField, {\n // Field specifics\n ...(neededFieldType.value.args ?? {\n min: (conditionFieldDefinition.value as any | undefined)?.minimum,\n max: (conditionFieldDefinition.value as any | undefined)?.maximum,\n step: (conditionFieldDefinition.value as any | undefined)?.multipleOf,\n }),\n // Common props\n ...commonFieldProps.value,\n } satisfies Partial<RBigIntFieldProps>)\n case 'unsignedInteger':\n return h(RUnsignedIntegerField, {\n // Field specifics\n ...(neededFieldType.value.args ?? {\n min: (conditionFieldDefinition.value as any | undefined)?.minimum,\n max: (conditionFieldDefinition.value as any | undefined)?.maximum,\n step: (conditionFieldDefinition.value as any | undefined)?.multipleOf,\n }),\n // Common props\n ...commonFieldProps.value,\n } satisfies Partial<RUnsignedIntegerFieldProps>)\n case 'boolean':\n return h(RBooleanField, {\n // Field specifics\n ...(neededFieldType.value.args ?? {\n choices: [true, false],\n }),\n // Common props\n ...commonFieldProps.value,\n } satisfies Partial<RBooleanFieldProps>)\n default:\n return h(DevErrorAlert, {})\n }\n }\n },\n})\n\nexport const FilterConditionElement = defineComponent({\n name: 'FilterConditionElement',\n props: makeFilterConditionElementProps(),\n emits: emitsFactory({\n 'update:modelValue': (val: AnyFilterCondition) => isFilterConditionLike(val),\n 'update:model-value': (val: AnyFilterCondition) => isFilterConditionLike(val),\n 'click:delete': () => true,\n }),\n setup(props, { emit }) {\n const {\n modelValue,\n reactivityBus,\n labels,\n filterableFields,\n dispositionButtons,\n iconAnd,\n iconOr,\n } = toRefs(props)\n const filterGroupConditionCardRef = ref<FilterGroupConditionCard | null>(null)\n const { width, xs } = useScopedDisplay(filterGroupConditionCardRef as any)\n const t = useI18n()\n const bus = new FilterConditionElementBus()\n const argCellBus = new FilterConditionElementToFilterConditionArgumentCellBus()\n const { localReactiveBus, localState, setLocalState } =\n useReactiveLocalState<AnyFilterCondition>(\n emit,\n modelValue,\n props.modelValue,\n reactivityBus,\n bus.notify\n )\n const conditionField = computed({\n get: () => localState.value.field,\n set: (val: string) => {\n const currentLocalState = toUnreactive(localState)\n if (!filterableFields.value[val]) {\n currentLocalState.field = ''\n currentLocalState.type = '' as any\n currentLocalState.operator = '' as any\n currentLocalState.arguments = [] as any\n } else {\n const definition = toUnreactive(filterableFields.value[val])\n currentLocalState.field = val\n currentLocalState.type = typeAndFormatToResourcefulFieldType(\n definition.type,\n definition.format\n )\n currentLocalState.operator = '' as any\n currentLocalState.arguments = [] as any\n }\n const prevLocalState = toUnreactive(localState)\n setLocalState(currentLocalState as unknown as AnyFilterCondition)\n if (prevLocalState.field !== currentLocalState.field) {\n nextTick(() => argCellBus.emit('needs:reset:arguments'))\n }\n },\n })\n const conditionFieldMenuState = ref<boolean>(false)\n const conditionFieldMenuIcon = computed(() =>\n conditionFieldMenuState.value\n ? () => h(SvgIcon, { d: mdiMenuUp })\n : () => h(SvgIcon, { d: mdiMenuDown })\n )\n const conditionType = computed(() => localState.value.type)\n const conditionTypeOperators = computed(() => {\n switch (conditionType.value) {\n case 'string':\n return StringFilterOperators\n case 'date':\n return DateFilterOperators\n case 'dateTime':\n return DateTimeFilterOperators\n case 'binary':\n return BinaryFilterOperators\n case 'number':\n return NumberFilterOperators\n case 'integer':\n return IntegerFilterOperators\n case 'bigint':\n return BigIntFilterOperators\n case 'unsignedInteger':\n return UnsignedIntegerFilterOperators\n case 'boolean':\n return BooleanFilterOperators\n default:\n return [] as FilterOperator[]\n }\n })\n const conditionOperatorField = ref<VAutocomplete | null>(null)\n const conditionOperator = computed({\n get: () => localState.value.operator,\n set: (val: FilterOperator) => {\n // @ts-ignore\n if (!isFilterOperator(val) || !conditionTypeOperators.value.includes(val)) return\n const currentLocalState = toUnreactive(localState)\n // @ts-ignore\n currentLocalState.operator = val as unknown as AnyFilterCondition['operator']\n currentLocalState.arguments = [] as any\n const prevLocalState = toUnreactive(localState)\n setLocalState(currentLocalState as unknown as AnyFilterCondition)\n if (prevLocalState.operator !== currentLocalState.operator) {\n nextTick(() => argCellBus.emit('needs:reset:arguments'))\n }\n },\n })\n // when the field type changes, make sure\n // that the condition's operator is a valid value\n watch(\n conditionType,\n () => {\n const currentConditionTypeOperators = toUnreactive(conditionTypeOperators)\n const currentConditionOperator = toUnreactive(conditionOperator)\n if (\n // @ts-ignore\n currentConditionOperator !== '' &&\n // @ts-ignore\n !currentConditionTypeOperators.includes(currentConditionOperator)\n ) {\n conditionOperator.value = '' as any\n const field = toUnreactive(conditionOperatorField)\n if (field) {\n field.reset()\n }\n }\n },\n { immediate: true }\n )\n const conditionOperatorOptions = computed(() =>\n Array.from(toUnreactive(conditionTypeOperators)).map((op) => ({\n value: op,\n label: t(`filterConditionElement.operator.${toUnreactive(conditionType)}.${op}`),\n }))\n )\n const conditionOperatorMenuState = ref<boolean>(false)\n const conditionOperatorMenuIcon = computed(() =>\n conditionOperatorMenuState.value\n ? () => h(SvgIcon, { d: mdiMenuUp })\n : () => h(SvgIcon, { d: mdiMenuDown })\n )\n const conditionArguments = computed({\n get: () => localState.value.arguments,\n set: (val: any[]) => {\n const currentLocalState = toUnreactive(localState)\n currentLocalState.arguments = val as unknown as AnyFilterCondition['arguments']\n setLocalState(currentLocalState as unknown as AnyFilterCondition)\n },\n })\n const conditionFieldOptions = computed(() =>\n Object.entries(toUnreactive(filterableFields)).map(([field, def]) => {\n const definition = toUnreactive(def)\n let title: string\n if (definition.type === 'computed') {\n title = definition['x-table-header-definition']!.title\n } else {\n title = t(labels.value[field] || field)\n }\n return {\n value: field,\n label: title,\n type: definition.type,\n }\n })\n )\n const desiredFilterArgumentCount = computed(() =>\n getOperatorArgumentCount(conditionOperator.value)\n )\n const fieldAndOperatorCellWidth = computed(() => {\n if (xs.value) return 12\n // if we have a condition operator, we should have 2 - 4 cells depending on the\n // number of arguments desired.\n if (conditionOperator.value.length) {\n // when there are no desired arguments\n // we should have 2 cells, which does not require\n // any special consideration of < 800px wide\n if (0 === desiredFilterArgumentCount.value) {\n return 6\n }\n // when there is only 1 argument\n // or there are \"multiple\" i.e. 1 field with multiple values\n // we should have 3 cells\n if (\n ('number' === typeof desiredFilterArgumentCount.value &&\n desiredFilterArgumentCount.value > 0) ||\n 'multiple' === desiredFilterArgumentCount.value\n ) {\n if (width.value < 600) {\n return 6\n }\n if (2 === desiredFilterArgumentCount.value) {\n return 3\n }\n return 4\n }\n }\n if (conditionField.value.length) {\n return 6\n }\n return 12\n })\n const argumentCellWidth = computed(() => {\n if (xs.value) return 12\n // if we have a condition operator, we should have 2 - 4 cells depending on the\n // number of arguments desired.\n if (conditionOperator.value.length) {\n // when there are no desired arguments\n // we should have 2 cells, which does not require\n // any special consideration of < 800px wide\n if (0 === desiredFilterArgumentCount.value) {\n return 6\n }\n // when there is only 1 argument\n // or there are \"multiple\" i.e. 1 field with multiple values\n // we should have 3 cells\n if (\n ('number' === typeof desiredFilterArgumentCount.value &&\n desiredFilterArgumentCount.value > 0) ||\n 'multiple' === desiredFilterArgumentCount.value\n ) {\n if (width.value < 600) {\n return 12\n }\n if (2 === desiredFilterArgumentCount.value) {\n return 6\n }\n return 4\n }\n }\n return 12\n })\n const showOperatorField = computed(() => conditionField.value.length > 0)\n const showArgumentsField = computed(\n () => conditionOperator.value.length > 0 && desiredFilterArgumentCount.value !== 0\n )\n const fieldTerm = computed(() => t('filterConditionElement.field.field'))\n const fieldHintTerm = computed(() => t('filterConditionElement.field.field.hint'))\n const operatorTerm = computed(() => t('filterConditionElement.field.operator'))\n const operatorHintTerm = computed(() => t('filterConditionElement.field.operator.hint'))\n const argumentsTerm = computed(() => t('filterConditionElement.field.arguments'))\n const argumentsHintTerm = computed(() => t('filterConditionElement.field.arguments.hint'))\n const formatArguments = computed(() => [\n fieldTerm.value,\n operatorTerm.value,\n argumentsTerm.value,\n ])\n const resetArgumentsIfNotShowingArgumentsField = () => {\n if (showArgumentsField.value) return\n const is = toUnreactive(desiredFilterArgumentCount.value)\n let updateTo: AnyFilterCondition['arguments'] = []\n switch (is) {\n case 1:\n updateTo = [undefined] as any\n break\n case 2:\n updateTo = [undefined, undefined] as any\n break\n\n default:\n updateTo = []\n break\n }\n const currentLocalState = toUnreactive(localState)\n currentLocalState.arguments = updateTo\n setLocalState(currentLocalState as unknown as AnyFilterCondition)\n }\n onMounted(() => {\n argCellBus.on('needs:reset:arguments', resetArgumentsIfNotShowingArgumentsField)\n })\n onBeforeUnmount(() => {\n argCellBus.off('needs:reset:arguments')\n })\n return () =>\n h(\n FilterGroupConditionCard,\n {\n ref: filterGroupConditionCardRef,\n ...stripUndefinedValuesFromObject({\n modelValue: localState.value,\n reactivityBus: localReactiveBus,\n labels: labels.value,\n filterableFields: filterableFields.value,\n dispositionButtons: dispositionButtons.value,\n iconAnd: iconAnd.value,\n iconOr: iconOr.value,\n }),\n ...{\n 'onClick:delete': () => emit('click:delete'),\n },\n },\n {\n default: ({ validationErrorDetails }: FilterGroupConditionCardSlotBindings) => {\n const fieldErrorMessages = validationErrorDetails\n .filter((e) => e.path[0] === 'field')\n .map((e) => format(e.message, ...formatArguments.value))\n const operatorErrorMessages = validationErrorDetails\n .filter((e) => e.path[0] === 'operator')\n .map((e) => format(e.message, ...formatArguments.value))\n const argumentsErrorMessages = validationErrorDetails\n .filter((e) => e.path[0] === 'arguments')\n .map((e) => format(e.message, ...formatArguments.value))\n return h(VContainer, { fluid: true }, () =>\n h(VRow, {}, () => [\n h(VCol, { cols: 12, sm: fieldAndOperatorCellWidth.value }, () => [\n h(\n VAutocomplete,\n deepmerge(\n {\n modelValue: conditionField.value,\n items: conditionFieldOptions.value,\n errorMessages: fieldErrorMessages,\n hideDetails: 'auto' as const,\n hideSpinButtons: true,\n hint: fieldHintTerm.value,\n itemTitle: 'label',\n itemValue: 'value',\n label: fieldTerm.value,\n variant: 'outlined' as const,\n density: 'compact' as const,\n menuIcon: conditionFieldMenuIcon.value,\n },\n {\n 'onUpdate:modelValue': (value: string) => {\n conditionField.value = value\n },\n 'onUpdate:menu': (value: boolean) => {\n conditionFieldMenuState.value = value\n },\n }\n ) satisfies VAutocompletePublicProps\n ),\n ]),\n showOperatorField.value\n ? h(VCol, { cols: 12, sm: fieldAndOperatorCellWidth.value }, () => [\n h(\n VAutocomplete,\n deepmerge(\n {\n modelValue: conditionOperator.value,\n items: conditionOperatorOptions.value,\n errorMessages: operatorErrorMessages,\n hideDetails: 'auto' as const,\n hideSpinButtons: true,\n hint: operatorHintTerm.value,\n itemTitle: 'label',\n itemValue: 'value',\n label: operatorTerm.value,\n variant: 'outlined' as const,\n density: 'compact' as const,\n menuIcon: conditionOperatorMenuIcon.value,\n ref: conditionOperatorField,\n },\n {\n 'onUpdate:modelValue': (value: any) => {\n conditionOperator.value = value\n },\n 'onUpdate:menu': (value: boolean) => {\n conditionOperatorMenuState.value = value\n },\n }\n ) satisfies VAutocompletePublicProps\n ),\n ])\n : null,\n showArgumentsField.value\n ? h(VCol, { cols: 12, sm: argumentCellWidth.value }, () => {\n return [\n h(\n FilterConditionArgumentCell,\n deepmerge(\n {\n modelValue: conditionArguments.value,\n field: conditionField.value,\n operator: conditionOperator.value,\n argumentCount: desiredFilterArgumentCount.value,\n reactivityBus: localReactiveBus,\n filterConditionElementToFilterConditionArgumentCellBus: argCellBus,\n errorMessages: argumentsErrorMessages,\n hideDetails: 'auto' as const,\n hideSpinButtons: true,\n hint: argumentsHintTerm.value,\n label: argumentsTerm.value,\n variant: 'outlined' as const,\n density: 'compact' as const,\n },\n {\n 'onUpdate:modelValue': (value: any) => {\n conditionArguments.value = value\n },\n }\n ) satisfies FilterConditionArgumentCellPublicProps,\n {\n default: (\n slotProps: FilterConditionArgumentCellSlotProps,\n slotBus: FilterConditionElementBus\n ) =>\n h(FilterConditionArgumentField, {\n filterableFields: filterableFields.value,\n field: conditionField.value,\n type: conditionType.value,\n operator: conditionOperator.value,\n argumentCount: desiredFilterArgumentCount.value,\n reactivityBus: localReactiveBus,\n filterConditionElementBus: slotBus,\n ...stripUndefinedValuesFromObject({\n ...slotProps,\n notifyFocus: undefined,\n notifyBlur: undefined,\n }),\n onFocus: slotProps.notifyFocus,\n onBlur: slotProps.notifyBlur,\n } satisfies FilterConditionArgumentFieldPublicProps),\n }\n ),\n ]\n })\n : null,\n ])\n )\n },\n errors: () => null,\n }\n )\n },\n})\n","/* eslint-disable vue/one-component-per-file */\nimport { useI18n } from '../../ioc'\nimport { encode } from '@nhtio/encoder'\nimport { SvgIcon } from '../../svg-icon'\nimport { deepmerge } from 'deepmerge-ts'\nimport { VBtn } from 'vuetify/components/VBtn'\nimport { VImg } from 'vuetify/components/VImg'\nimport { VIcon } from 'vuetify/components/VIcon'\nimport { VMenu } from 'vuetify/components/VMenu'\nimport { VCard } from 'vuetify/components/VCard'\nimport { VSpacer } from 'vuetify/components/VGrid'\nimport { VSheet } from 'vuetify/components/VSheet'\nimport { ControlButton } from '../../control-button'\nimport { VDialog } from 'vuetify/components/VDialog'\nimport { emitsFactory } from '../../common/factories'\nimport { VDivider } from 'vuetify/components/VDivider'\nimport { pick } from '@nhtio/vuetifiable/util/helpers'\nimport { ReactivityBus } from '../../filtration/common'\nimport { VBtnToggle } from 'vuetify/components/VBtnToggle'\nimport { debounce } from '@nhtio/vuetifiable/util/helpers'\nimport { useResourcefulIndexScopedDisplay } from '../index'\nimport { VList, VListItem } from 'vuetify/components/VList'\nimport { VEmptyState } from 'vuetify/components/VEmptyState'\nimport { TypedEventEmitter } from '@nhtio/tiny-typed-emitter'\nimport { default as errorSvg } from '../../icons/error.svg?url'\nimport { IconValue } from '@nhtio/vuetifiable/composables/icons'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { default as warningSvg } from '../../icons/warning.svg?url'\nimport { FilterGroupEmptyState } from '../../filtration/empty_state'\nimport { VToolbar, VToolbarItems } from 'vuetify/components/VToolbar'\nimport { makeVBtnProps } from '@nhtio/vuetifiable/components/VBtn/VBtn'\nimport { VNavigationDrawer } from 'vuetify/components/VNavigationDrawer'\nimport { makeVMenuProps } from '@nhtio/vuetifiable/components/VMenu/VMenu'\nimport { makeVDialogProps } from '@nhtio/vuetifiable/components/VDialog/VDialog'\nimport { makeVListItemProps } from '@nhtio/vuetifiable/components/VList/VListItem'\nimport { defineComponent, h, toRefs, toRaw, computed, watch, ref, nextTick } from 'vue'\nimport { makeVBtnToggleProps } from '@nhtio/vuetifiable/components/VBtnToggle/VBtnToggle'\nimport { makeVEmptyStateProps } from '@nhtio/vuetifiable/components/VEmptyState/VEmptyState'\nimport { FilterGroupConditionElement } from '../../filtration/filter_group_condition_element'\nimport { stripUndefinedValuesFromObject, getDefaultsForPropFactory } from '../../common/utils'\nimport {\n FilterGroupOperator,\n isFilterGroup,\n isFilterGroupConditions,\n isFilterGroupOperator,\n} from '../../filtration/schema'\nimport {\n mdiClose,\n mdiContentSave,\n mdiContentSaveCheck,\n mdiVectorLink,\n mdiSetNone,\n mdiPlus,\n mdiCardPlusOutline,\n mdiFilterPlus,\n mdiThumbUp,\n mdiBackupRestore,\n mdiNotificationClearAll,\n} from '@mdi/js'\nimport {\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n} from './_columns_controls'\nimport type { EventMap } from '@nhtio/tiny-typed-emitter'\nimport type { ResourcefulFieldLabelTerms } from '../props'\nimport type { FilterGroup } from '../../filtration/schema'\nimport type { PropType, ExtractPublicPropTypes } from 'vue'\nimport type { ResourcefulSchemaDefinition } from '../types'\nimport type { ControlButtonProps } from '../../control-button/props'\nimport type {\n DispositionButtonProps,\n SaveButtonProps,\n DiscardButtonProps,\n} from './_columns_controls'\n\nexport const makeResourcefulIndexFiltersControlsProps = propsFactory(\n {\n modelValue: {\n type: Boolean,\n default: false,\n },\n color: {\n type: String as PropType<string | undefined>,\n default: undefined,\n },\n labels: {\n type: Object as PropType<ResourcefulFieldLabelTerms>,\n default: () => ({}),\n },\n filterableFields: {\n type: Object as PropType<ResourcefulSchemaDefinition>,\n default: () => ({}),\n },\n conditions: {\n type: Array as PropType<FilterGroup['conditions']>,\n default: () => [],\n },\n operator: {\n type: String as PropType<FilterGroup['operator']>,\n default: 'AND',\n },\n dispositionButtons: {\n type: Object as PropType<DispositionButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n },\n saveButton: {\n type: Object as PropType<SaveButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n },\n discardButton: {\n type: Object as PropType<DiscardButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n },\n iconAnd: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiVectorLink }),\n },\n iconOr: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiSetNone }),\n },\n },\n 'ResourcefulIndexFiltersControls'\n)\n\nconst makeResourcefulIndexFiltersControlsPublicProps = propsFactory(\n {\n ...pick(makeResourcefulIndexFiltersControlsProps(), ['iconAnd', 'iconOr']),\n },\n 'ResourcefulIndexFiltersControls'\n)\n\nexport type ResourcefulIndexFiltersControlsPublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makeResourcefulIndexFiltersControlsPublicProps>\n>\n\nexport const defaultsForResourcefulIndexControlsPublicProps = getDefaultsForPropFactory(\n makeResourcefulIndexFiltersControlsPublicProps\n)\n\ntype ConfirmDialogEvents = EventMap<{\n show: []\n hide: []\n dispositioned: [disposition: boolean]\n}>\ntype VDialogPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVDialogProps>>\ntype VEmptyStatePublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVEmptyStateProps>>\ntype VBtnTogglePublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVBtnToggleProps>>\ntype VBtnPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVBtnProps>>\ntype VMenuPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVMenuProps>>\ntype VListItemPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVListItemProps>>\n\nconst makeFilterGroupOperatorButtonToggleProps = propsFactory(\n {\n ...makeResourcefulIndexFiltersControlsPublicProps(),\n ...pick(makeVBtnToggleProps(), ['color', 'density', 'elevation', 'rounded']),\n modelValue: {\n type: String as PropType<FilterGroupOperator>,\n default: 'AND',\n },\n size: {\n type: [String, Number] as PropType<string | number | undefined>,\n default: undefined,\n },\n },\n 'FilterGroupOperatorButtonToggle'\n)\n\ntype FilterGroupOperatorButtonTogglePublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makeFilterGroupOperatorButtonToggleProps>\n>\n\nconst FilterGroupOperatorButtonToggle = defineComponent({\n name: 'FilterGroupOperatorButtonToggle',\n props: makeFilterGroupOperatorButtonToggleProps(),\n emits: emitsFactory({\n 'update:modelValue': (val: FilterGroupOperator) => isFilterGroupOperator(val),\n 'update:model-value': (val: FilterGroupOperator) => isFilterGroupOperator(val),\n }),\n setup(props, { emit }) {\n const { iconAnd, iconOr, modelValue, color, density, elevation, size, rounded } = toRefs(props)\n const state = computed({\n get: () => modelValue.value,\n set: (val: FilterGroupOperator) => {\n if (isFilterGroupOperator(val) && val !== modelValue.value) {\n emit('update:modelValue', val)\n emit('update:model-value', val)\n }\n },\n })\n const t = useI18n()\n const btnToggleBindings = computed<VBtnTogglePublicProps>(() =>\n stripUndefinedValuesFromObject({\n activeColor: color.value,\n density: density.value,\n elevation: elevation.value,\n size: size.value,\n rounded: rounded.value,\n modelValue: state.value,\n ...{\n 'onUpdate:modelValue': (val: FilterGroupOperator) => (state.value = val),\n 'onUpdate:model-value': (val: FilterGroupOperator) => (state.value = val),\n },\n })\n )\n const btnToggleButtons = computed<Array<ReturnType<typeof h>>>(() =>\n FilterGroupOperator.map((o) => {\n const text = t(`filters.groups.operators.${o}`)\n const icon = 'AND' === o ? iconAnd.value : 'OR' === o ? iconOr.value : undefined\n const opts: VBtnPublicProps = stripUndefinedValuesFromObject({\n value: o,\n variant: 'text' as const,\n ripple: false,\n })\n return h(VBtn, opts, () => [icon ? h(VIcon, { icon, class: ['me-2'] }) : null, text])\n })\n )\n return () => h(VBtnToggle, btnToggleBindings.value, () => btnToggleButtons.value)\n },\n})\n\nconst FilterGroupOperatorMenu = defineComponent({\n name: 'FilterGroupOperatorMenu',\n props: makeFilterGroupOperatorButtonToggleProps(),\n emits: emitsFactory({\n 'update:modelValue': (val: FilterGroupOperator) => isFilterGroupOperator(val),\n 'update:model-value': (val: FilterGroupOperator) => isFilterGroupOperator(val),\n }),\n setup(props, { emit }) {\n const { iconAnd, iconOr, modelValue, color, density, elevation, size, rounded } = toRefs(props)\n const state = computed({\n get: () => modelValue.value,\n set: (val: FilterGroupOperator) => {\n if (isFilterGroupOperator(val) && val !== modelValue.value) {\n emit('update:modelValue', val)\n emit('update:model-value', val)\n }\n },\n })\n const t = useI18n()\n const activatorBtnBaseBindings = computed<VBtnTogglePublicProps>(() =>\n stripUndefinedValuesFromObject({\n activeColor: color.value,\n density: density.value,\n elevation: elevation.value,\n size: size.value,\n rounded: rounded.value,\n variant: 'text' as const,\n })\n )\n const currentText = computed(() => t(`filters.groups.operators.${state.value}`))\n return () =>\n h(\n VMenu,\n {},\n {\n activator: ({ props: menuActivatorProps }: { props: { [key: string]: any } }) =>\n h(\n VBtn,\n {\n ...menuActivatorProps,\n ...activatorBtnBaseBindings.value,\n },\n () => [currentText.value]\n ),\n default: () =>\n h(VList, { class: ['py-0'] }, () =>\n FilterGroupOperator.map((o) => {\n const text = t(`filters.groups.operators.${o}`)\n const icon = 'AND' === o ? iconAnd.value : 'OR' === o ? iconOr.value : undefined\n const opts: VListItemPublicProps = stripUndefinedValuesFromObject({\n active: state.value === o,\n prependIcon: icon,\n title: text,\n onClick: () => (state.value = o),\n })\n return h(VListItem, opts)\n })\n ),\n }\n )\n },\n})\n\nconst FilterGroupOperatorControl = defineComponent({\n name: 'FilterGroupOperator',\n props: makeFilterGroupOperatorButtonToggleProps(),\n emits: emitsFactory({\n 'update:modelValue': (val: FilterGroupOperator) => isFilterGroupOperator(val),\n 'update:model-value': (val: FilterGroupOperator) => isFilterGroupOperator(val),\n }),\n setup(props, { emit }) {\n const { iconAnd, iconOr, modelValue, color, density, elevation, size, rounded } = toRefs(props)\n const state = computed({\n get: () => modelValue.value,\n set: (val: FilterGroupOperator) => {\n if (isFilterGroupOperator(val) && val !== modelValue.value) {\n emit('update:modelValue', val)\n emit('update:model-value', val)\n }\n },\n })\n const bindings = computed<FilterGroupOperatorButtonTogglePublicProps>(() =>\n stripUndefinedValuesFromObject({\n iconAnd: iconAnd.value,\n iconOr: iconOr.value,\n modelValue: modelValue.value,\n color: color.value,\n density: density.value,\n elevation: elevation.value,\n size: size.value,\n rounded: rounded.value,\n ...{\n 'onUpdate:modelValue': (val: FilterGroupOperator) => (state.value = val),\n },\n })\n )\n const { smAndUp } = useResourcefulIndexScopedDisplay()\n return () =>\n smAndUp.value\n ? h(FilterGroupOperatorButtonToggle, bindings.value)\n : h(FilterGroupOperatorMenu, bindings.value)\n },\n})\n\nexport const ResourcefulIndexFiltersControls = defineComponent({\n name: 'ResourcefulIndexFiltersControls',\n props: makeResourcefulIndexFiltersControlsProps(),\n emits: emitsFactory({\n 'update:modelValue': (val: boolean) => typeof val === 'boolean',\n 'update:model-value': (val: boolean) => typeof val === 'boolean',\n 'update:filters': (val: FilterGroup) => isFilterGroup(val),\n 'update:filters:operator': (val: FilterGroupOperator) => isFilterGroupOperator(val),\n 'update:filters:conditions': (val: FilterGroup['conditions']) => isFilterGroupConditions(val),\n }),\n setup(props, { emit }) {\n const confirmationBus = new TypedEventEmitter<ConfirmDialogEvents>()\n const reactivityBus = new ReactivityBus()\n const {\n modelValue,\n color,\n labels,\n filterableFields,\n conditions,\n operator,\n dispositionButtons,\n saveButton,\n discardButton,\n iconAnd,\n iconOr,\n } = toRefs(props)\n const { width: screenWidth, xs, smAndUp } = useResourcefulIndexScopedDisplay()\n const showDispositionDialog = ref(false)\n const showInvalidStateDialog = ref(false)\n const isDirty = ref(false)\n const isValid = ref(true)\n // using `String` constructor to break any possible reactivity\n const updatedOperator = ref<FilterGroupOperator>(String(operator.value) as FilterGroupOperator)\n // using both `Array.from` and `toRaw` to ensure that reactivity links are broken\n const updatedConditions = ref<FilterGroup['conditions']>(Array.from(toRaw(conditions.value)))\n const updatedFilterGroup = computed<FilterGroup>(() => ({\n operator: updatedOperator.value,\n conditions: updatedConditions.value,\n }))\n const updateIsValid = () => {\n const updatedOperatorIsValid = isFilterGroupOperator(updatedOperator.value)\n const updatedConditionsIsValid = isFilterGroupConditions(updatedConditions.value)\n isValid.value = updatedOperatorIsValid && updatedConditionsIsValid\n }\n const updateIsDirty = debounce(() => {\n const combinedOriginalFilterGroup: FilterGroup = {\n operator: String(operator.value) as FilterGroupOperator,\n conditions: Array.from(toRaw(conditions.value)),\n }\n const combinedUpdatedFilterGroup = toRaw(updatedFilterGroup.value)\n const is = encode(combinedOriginalFilterGroup) !== encode(combinedUpdatedFilterGroup)\n isDirty.value = is\n updateIsValid()\n }, 100)\n const doEmit = (what: 'operator' | 'conditions' | 'both' = 'both') => {\n updateIsValid()\n if (!isValid.value) {\n showInvalidStateDialog.value = true\n return\n }\n emit('update:filters', updatedFilterGroup.value)\n if (what === 'operator' || what === 'both') {\n emit('update:filters:operator', updatedOperator.value)\n }\n if (what === 'conditions' || what === 'both') {\n emit('update:filters:conditions', updatedConditions.value)\n }\n }\n const visibility = computed({\n get: () => modelValue.value,\n set: (val: boolean) => {\n // plumbing to support confirmation dialog\n // if the user is trying to close the dialog and there are unsaved changes\n confirmationBus.off('dispositioned')\n if (!val && isDirty.value) {\n confirmationBus.once('dispositioned', (disposition: boolean) => {\n if (disposition && isDirty.value) {\n doEmit()\n } else if (!disposition && isDirty.value) {\n emit('update:modelValue', val)\n emit('update:model-value', val)\n confirmationBus.emit('hide')\n isDirty.value = false\n }\n if (!isValid.value) {\n confirmationBus.emit('hide')\n } else {\n emit('update:modelValue', val)\n emit('update:model-value', val)\n confirmationBus.emit('hide')\n isDirty.value = false\n }\n })\n confirmationBus.emit('show')\n } else {\n emit('update:modelValue', val)\n emit('update:model-value', val)\n }\n },\n })\n watch(conditions, () => updateIsDirty(), { immediate: true, deep: true })\n watch(operator, () => updateIsDirty(), { immediate: true, deep: true })\n watch(updatedOperator, () => updateIsDirty(), { immediate: true, deep: true })\n watch(updatedConditions, () => updateIsDirty(), { immediate: true, deep: true })\n watch(updatedFilterGroup, () => updateIsDirty(), { immediate: true, deep: true })\n watch(modelValue, (is, was) => {\n if (is && is !== was) {\n updatedOperator.value = String(operator.value) as FilterGroupOperator\n updatedConditions.value = Array.from(toRaw(conditions.value))\n }\n })\n const doReset = () => {\n updatedOperator.value = String(operator.value) as FilterGroupOperator\n updatedConditions.value = Array.from(toRaw(conditions.value))\n nextTick(() => updateIsDirty())\n }\n const doClear = () => {\n updatedConditions.value = []\n nextTick(() => updateIsDirty())\n }\n const t = useI18n()\n confirmationBus.on('show', () => {\n showDispositionDialog.value = true\n })\n confirmationBus.on('hide', () => {\n showDispositionDialog.value = false\n })\n const confirmationDialogBindings = computed<VDialogPublicProps>(() => ({\n modelValue: showDispositionDialog.value,\n persistent: true,\n fullscreen: xs.value,\n contained: !xs.value,\n maxWidth: 500,\n scrim: true,\n }))\n const confirmationEmptyStateBindings = computed<VEmptyStatePublicProps>(() => ({\n image: warningSvg,\n title: t('lucid.resourceful.index.filtersControls.dispositionDialog.headline'),\n text: t('lucid.resourceful.index.filtersControls.dispositionDialog.title'),\n }))\n const saveDispositionButtonBindings = computed<ControlButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value),\n defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n stripUndefinedValuesFromObject(saveButton.value),\n { cta: t('general.save') },\n { onClick: () => confirmationBus.emit('dispositioned', true) }\n )\n )\n const discardDispositionButtonBindings = computed<ControlButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value),\n defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n stripUndefinedValuesFromObject(discardButton.value),\n { cta: t('general.discard') },\n { onClick: () => confirmationBus.emit('dispositioned', false) }\n )\n )\n const invalidDialogBindings = computed<VDialogPublicProps>(() => ({\n modelValue: showInvalidStateDialog.value,\n persistent: false,\n fullscreen: xs.value,\n contained: !xs.value,\n maxWidth: 500,\n scrim: true,\n ...{\n 'onUpdate:modelValue': (val: boolean) => {\n showInvalidStateDialog.value = val\n },\n 'onUpdate:model-value': (val: boolean) => {\n showInvalidStateDialog.value = val\n },\n },\n }))\n const invalidEmptyStateBindings = computed<VEmptyStatePublicProps>(() => ({\n title: t('lucid.resourceful.index.filtersControls.invalidDialog.headline'),\n text: t('lucid.resourceful.index.filtersControls.invalidDialog.title'),\n class: ['pt-5', 'pb-0'],\n }))\n const invalidAckButtonBindings = computed<ControlButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value),\n {\n color: 'surface-light',\n cta: t('general.ok'),\n prependIcon: () => h(SvgIcon, { d: mdiThumbUp }),\n },\n {\n onClick: () => {\n showInvalidStateDialog.value = false\n updateIsDirty()\n },\n }\n )\n )\n const FilterGroupOperatorButtonToggleBaseBindings = computed<\n Omit<FilterGroupOperatorButtonTogglePublicProps, 'modelValue'>\n >(() =>\n stripUndefinedValuesFromObject({\n color: saveDispositionButtonBindings.value.color,\n size: dispositionButtons.value.size,\n elevation: dispositionButtons.value.elevation,\n density: dispositionButtons.value.density,\n iconAnd: iconAnd.value,\n iconOr: iconOr.value,\n })\n )\n const areaWidth = computed(() => (screenWidth.value < 800 ? screenWidth.value : 800))\n const addGroupButtonBindings = computed<ControlButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value),\n {\n cta: t('lucid.resourceful.index.filtersControls.addGroup'),\n prependIcon: () => h(SvgIcon, { d: mdiCardPlusOutline }),\n color: 'surface-light',\n },\n {\n onClick: () => {\n updatedConditions.value.push({\n operator: 'AND',\n conditions: [],\n })\n },\n class: ['me-2'],\n }\n )\n )\n const addConditionButtonBindings = computed<ControlButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value),\n {\n cta: t('lucid.resourceful.index.filtersControls.addCondition'),\n prependIcon: () => h(SvgIcon, { d: mdiFilterPlus }),\n color: 'surface-light',\n },\n {\n onClick: () => {\n updatedConditions.value.push({\n field: '',\n type: '',\n operator: '',\n arguments: [],\n } as any)\n },\n }\n )\n )\n reactivityBus.on('updated', () => {\n nextTick(() => {\n updateIsDirty()\n updateIsValid()\n })\n })\n return () => [\n h(\n VNavigationDrawer,\n {\n 'modelValue': visibility.value,\n 'onUpdate:modelValue': (val: boolean) => {\n visibility.value = val\n },\n 'permanent': false,\n 'persistent': false,\n 'temporary': true,\n 'absolute': true,\n 'width': areaWidth.value,\n 'color': color.value,\n },\n () =>\n h('div', { class: ['d-flex', 'flex-column', 'h-100'] }, [\n h(\n VToolbar,\n { color: color.value || 'transparent', class: ['flex-grow-0'], density: 'compact' },\n () => [\n h(VToolbarItems, { class: ['flex-grow-1'] }, () => [\n h(\n FilterGroupOperatorControl,\n deepmerge(FilterGroupOperatorButtonToggleBaseBindings.value, {\n 'modelValue': updatedOperator.value,\n 'onUpdate:modelValue': (val: FilterGroupOperator) =>\n (updatedOperator.value = val),\n 'onUpdate:model-value': (val: FilterGroupOperator) =>\n (updatedOperator.value = val),\n 'elevation': 0,\n 'rounded': 0,\n })\n ),\n h(VMenu, {} satisfies VMenuPublicProps, {\n activator: ({ props: menuButtonProps }: { props: { [key: string]: any } }) =>\n h(\n VBtn,\n {\n ...menuButtonProps,\n variant: 'text',\n },\n () => [\n h(VIcon, {\n icon: () => h(SvgIcon, { d: mdiPlus }),\n class: [\n {\n 'me-2': smAndUp.value,\n },\n ],\n }),\n smAndUp.value ? t('general.add') : null,\n ]\n ),\n default: () =>\n h(VList, { class: ['py-0'] }, () => [\n h(VListItem, {\n prependIcon: () => h(SvgIcon, { d: mdiCardPlusOutline }),\n title: t('lucid.resourceful.index.filtersControls.addGroup'),\n onClick: () => {\n updatedConditions.value.push({\n operator: 'AND',\n conditions: [],\n })\n },\n }),\n h(VListItem, {\n prependIcon: () => h(SvgIcon, { d: mdiFilterPlus }),\n title: t('lucid.resourceful.index.filtersControls.addCondition'),\n onClick: () => {\n updatedConditions.value.push({\n field: '',\n type: '',\n operator: '',\n arguments: [],\n } as any)\n },\n }),\n ]),\n }),\n ]),\n h(VToolbarItems, {}, () => [\n h(VBtn, {\n icon: () => h(SvgIcon, { d: mdiNotificationClearAll }),\n variant: 'text',\n disabled: updatedConditions.value.length === 0,\n onClick: () => {\n doClear()\n },\n }),\n h(VBtn, {\n icon: () => h(SvgIcon, { d: mdiBackupRestore }),\n variant: 'text',\n disabled: !isDirty.value,\n onClick: () => {\n doReset()\n },\n }),\n h(VBtn, {\n icon: () =>\n !isValid.value\n ? h(VImg, { src: warningSvg })\n : h(SvgIcon, { d: mdiContentSave }),\n variant: 'text',\n onClick: () => {\n if (isDirty.value) {\n doEmit()\n isDirty.value = false\n }\n },\n }),\n h(VBtn, {\n icon: () => h(SvgIcon, { d: mdiClose }),\n variant: 'text',\n onClick: () => (visibility.value = false),\n }),\n ]),\n ]\n ),\n h(VDivider, { class: ['flex-grow-0'] }),\n h(\n VSheet,\n { color: 'transparent', class: ['flex-grow-1', 'overflow-y-auto', 'py-1'] },\n () => [\n updatedConditions.value.length === 0\n ? h(FilterGroupEmptyState, {\n 'buttonStyles': dispositionButtons.value,\n 'onClick:add:condition': () => {\n updatedConditions.value.push({\n field: '',\n type: '',\n operator: '',\n arguments: [],\n } as any)\n },\n 'onClick:add:group': () => {\n updatedConditions.value.push({\n operator: 'AND',\n conditions: [],\n })\n },\n })\n : null,\n ...Array.from(updatedConditions.value).map((c, i) =>\n h(FilterGroupConditionElement, {\n modelValue: c,\n reactivityBus,\n labels: labels.value,\n filterableFields: filterableFields.value,\n dispositionButtons: dispositionButtons.value,\n iconAnd: iconAnd.value,\n iconOr: iconOr.value,\n ...{\n 'onUpdate:modelValue': (val: any) => {\n updatedConditions.value[i] = val\n },\n 'onClick:delete': () => {\n const updated = Array.from(toRaw(updatedConditions.value))\n updated.splice(i, 1)\n updatedConditions.value = updated\n },\n },\n })\n ),\n updatedConditions.value.length > 0\n ? h(\n VSheet,\n { color: 'transparent', class: ['d-flex', 'justify-end', 'px-3'] },\n () => [\n h(ControlButton, addGroupButtonBindings.value),\n h(ControlButton, addConditionButtonBindings.value),\n ]\n )\n : null,\n ]\n ),\n h(VDivider, { class: ['flex-grow-0'] }),\n h(\n VToolbar,\n { color: color.value || 'transparent', class: ['flex-grow-0'], density: 'compact' },\n () => [\n h(VSpacer),\n h(VToolbarItems, {}, () => [\n h(VBtn, {\n icon: () =>\n !isValid.value\n ? h(VImg, { src: warningSvg })\n : h(SvgIcon, { d: mdiContentSaveCheck }),\n variant: 'text',\n onClick: () => {\n if (isDirty.value) {\n doEmit()\n nextTick(() => {\n isDirty.value = false\n visibility.value = false\n })\n } else {\n nextTick(() => {\n visibility.value = false\n })\n }\n },\n }),\n ]),\n ]\n ),\n h(VDivider, { class: ['flex-grow-0'] }),\n ])\n ),\n h(VDialog, confirmationDialogBindings.value, () =>\n h(VCard, {}, () =>\n h(VEmptyState, confirmationEmptyStateBindings.value, {\n actions: () => [\n h(ControlButton, discardDispositionButtonBindings.value),\n h(ControlButton, saveDispositionButtonBindings.value),\n ],\n })\n )\n ),\n h(VDialog, invalidDialogBindings.value, () =>\n h(VCard, {}, () =>\n h(VEmptyState, invalidEmptyStateBindings.value, {\n actions: () => [h(ControlButton, invalidAckButtonBindings.value)],\n media: () => h(VImg, { src: errorSvg, class: ['mb-3'] }),\n })\n )\n ),\n ]\n },\n})\n","// Utilities\nimport { onBeforeUpdate, ref } from 'vue';\n\n// Types\n\nexport function useRefs() {\n const refs = ref([]);\n onBeforeUpdate(() => refs.value = []);\n function updateRef(e, i) {\n refs.value[i] = e;\n }\n return {\n refs,\n updateRef\n };\n}\n//# sourceMappingURL=refs.js.map","import { mergeProps as _mergeProps, createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from \"vue\";\n// Styles\nimport \"./VPagination.css\";\n\n// Components\nimport { VBtn } from \"../VBtn/index.js\"; // Composables\nimport { useDisplay } from \"../../composables/index.js\";\nimport { makeBorderProps } from \"../../composables/border.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { provideDefaults } from \"../../composables/defaults.js\";\nimport { makeDensityProps } from \"../../composables/density.js\";\nimport { makeElevationProps } from \"../../composables/elevation.js\";\nimport { IconValue } from \"../../composables/icons.js\";\nimport { useLocale, useRtl } from \"../../composables/locale.js\";\nimport { useProxiedModel } from \"../../composables/proxiedModel.js\";\nimport { useRefs } from \"../../composables/refs.js\";\nimport { useResizeObserver } from \"../../composables/resizeObserver.js\";\nimport { makeRoundedProps } from \"../../composables/rounded.js\";\nimport { makeSizeProps } from \"../../composables/size.js\";\nimport { makeTagProps } from \"../../composables/tag.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\";\nimport { makeVariantProps } from \"../../composables/variant.js\"; // Utilities\nimport { computed, nextTick, shallowRef, toRef } from 'vue';\nimport { createRange, genericComponent, keyValues, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVPaginationProps = propsFactory({\n activeColor: String,\n start: {\n type: [Number, String],\n default: 1\n },\n modelValue: {\n type: Number,\n default: props => props.start\n },\n disabled: Boolean,\n length: {\n type: [Number, String],\n default: 1,\n validator: val => val % 1 === 0\n },\n totalVisible: [Number, String],\n firstIcon: {\n type: IconValue,\n default: '$first'\n },\n prevIcon: {\n type: IconValue,\n default: '$prev'\n },\n nextIcon: {\n type: IconValue,\n default: '$next'\n },\n lastIcon: {\n type: IconValue,\n default: '$last'\n },\n ariaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.root'\n },\n pageAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.page'\n },\n currentPageAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.currentPage'\n },\n firstAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.first'\n },\n previousAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.previous'\n },\n nextAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.next'\n },\n lastAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.last'\n },\n ellipsis: {\n type: String,\n default: '...'\n },\n showFirstLastPage: Boolean,\n ...makeBorderProps(),\n ...makeComponentProps(),\n ...makeDensityProps(),\n ...makeElevationProps(),\n ...makeRoundedProps(),\n ...makeSizeProps(),\n ...makeTagProps({\n tag: 'nav'\n }),\n ...makeThemeProps(),\n ...makeVariantProps({\n variant: 'text'\n })\n}, 'VPagination');\nexport const VPagination = genericComponent()({\n name: 'VPagination',\n props: makeVPaginationProps(),\n emits: {\n 'update:modelValue': value => true,\n first: value => true,\n prev: value => true,\n next: value => true,\n last: value => true\n },\n setup(props, _ref) {\n let {\n slots,\n emit\n } = _ref;\n const page = useProxiedModel(props, 'modelValue');\n const {\n t,\n n\n } = useLocale();\n const {\n isRtl\n } = useRtl();\n const {\n themeClasses\n } = provideTheme(props);\n const {\n width\n } = useDisplay();\n const maxButtons = shallowRef(-1);\n provideDefaults(undefined, {\n scoped: true\n });\n const {\n resizeRef\n } = useResizeObserver(entries => {\n if (!entries.length) return;\n const {\n target,\n contentRect\n } = entries[0];\n const firstItem = target.querySelector('.v-pagination__list > *');\n if (!firstItem) return;\n const totalWidth = contentRect.width;\n const itemWidth = firstItem.offsetWidth + parseFloat(getComputedStyle(firstItem).marginRight) * 2;\n maxButtons.value = getMax(totalWidth, itemWidth);\n });\n const length = computed(() => parseInt(props.length, 10));\n const start = computed(() => parseInt(props.start, 10));\n const totalVisible = computed(() => {\n if (props.totalVisible != null) return parseInt(props.totalVisible, 10);else if (maxButtons.value >= 0) return maxButtons.value;\n return getMax(width.value, 58);\n });\n function getMax(totalWidth, itemWidth) {\n const minButtons = props.showFirstLastPage ? 5 : 3;\n return Math.max(0, Math.floor(\n // Round to two decimal places to avoid floating point errors\n Number(((totalWidth - itemWidth * minButtons) / itemWidth).toFixed(2))));\n }\n const range = computed(() => {\n if (length.value <= 0 || isNaN(length.value) || length.value > Number.MAX_SAFE_INTEGER) return [];\n if (totalVisible.value <= 0) return [];else if (totalVisible.value === 1) return [page.value];\n if (length.value <= totalVisible.value) {\n return createRange(length.value, start.value);\n }\n const even = totalVisible.value % 2 === 0;\n const middle = even ? totalVisible.value / 2 : Math.floor(totalVisible.value / 2);\n const left = even ? middle : middle + 1;\n const right = length.value - middle;\n if (left - page.value >= 0) {\n return [...createRange(Math.max(1, totalVisible.value - 1), start.value), props.ellipsis, length.value];\n } else if (page.value - right >= (even ? 1 : 0)) {\n const rangeLength = totalVisible.value - 1;\n const rangeStart = length.value - rangeLength + start.value;\n return [start.value, props.ellipsis, ...createRange(rangeLength, rangeStart)];\n } else {\n const rangeLength = Math.max(1, totalVisible.value - 2);\n const rangeStart = rangeLength === 1 ? page.value : page.value - Math.ceil(rangeLength / 2) + start.value;\n return [start.value, props.ellipsis, ...createRange(rangeLength, rangeStart), props.ellipsis, length.value];\n }\n });\n\n // TODO: 'first' | 'prev' | 'next' | 'last' does not work here?\n function setValue(e, value, event) {\n e.preventDefault();\n page.value = value;\n event && emit(event, value);\n }\n const {\n refs,\n updateRef\n } = useRefs();\n provideDefaults({\n VPaginationBtn: {\n color: toRef(() => props.color),\n border: toRef(() => props.border),\n density: toRef(() => props.density),\n size: toRef(() => props.size),\n variant: toRef(() => props.variant),\n rounded: toRef(() => props.rounded),\n elevation: toRef(() => props.elevation)\n }\n });\n const items = computed(() => {\n return range.value.map((item, index) => {\n const ref = e => updateRef(e, index);\n if (typeof item === 'string') {\n return {\n isActive: false,\n key: `ellipsis-${index}`,\n page: item,\n props: {\n ref,\n ellipsis: true,\n icon: true,\n disabled: true\n }\n };\n } else {\n const isActive = item === page.value;\n return {\n isActive,\n key: item,\n page: n(item),\n props: {\n ref,\n ellipsis: false,\n icon: true,\n disabled: !!props.disabled || Number(props.length) < 2,\n color: isActive ? props.activeColor : props.color,\n 'aria-current': isActive,\n 'aria-label': t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, item),\n onClick: e => setValue(e, item)\n }\n };\n }\n });\n });\n const controls = computed(() => {\n const prevDisabled = !!props.disabled || page.value <= start.value;\n const nextDisabled = !!props.disabled || page.value >= start.value + length.value - 1;\n return {\n first: props.showFirstLastPage ? {\n icon: isRtl.value ? props.lastIcon : props.firstIcon,\n onClick: e => setValue(e, start.value, 'first'),\n disabled: prevDisabled,\n 'aria-label': t(props.firstAriaLabel),\n 'aria-disabled': prevDisabled\n } : undefined,\n prev: {\n icon: isRtl.value ? props.nextIcon : props.prevIcon,\n onClick: e => setValue(e, page.value - 1, 'prev'),\n disabled: prevDisabled,\n 'aria-label': t(props.previousAriaLabel),\n 'aria-disabled': prevDisabled\n },\n next: {\n icon: isRtl.value ? props.prevIcon : props.nextIcon,\n onClick: e => setValue(e, page.value + 1, 'next'),\n disabled: nextDisabled,\n 'aria-label': t(props.nextAriaLabel),\n 'aria-disabled': nextDisabled\n },\n last: props.showFirstLastPage ? {\n icon: isRtl.value ? props.firstIcon : props.lastIcon,\n onClick: e => setValue(e, start.value + length.value - 1, 'last'),\n disabled: nextDisabled,\n 'aria-label': t(props.lastAriaLabel),\n 'aria-disabled': nextDisabled\n } : undefined\n };\n });\n function updateFocus() {\n const currentIndex = page.value - start.value;\n refs.value[currentIndex]?.$el.focus();\n }\n function onKeydown(e) {\n if (e.key === keyValues.left && !props.disabled && page.value > Number(props.start)) {\n page.value = page.value - 1;\n nextTick(updateFocus);\n } else if (e.key === keyValues.right && !props.disabled && page.value < start.value + length.value - 1) {\n page.value = page.value + 1;\n nextTick(updateFocus);\n }\n }\n useRender(() => _createVNode(props.tag, {\n \"ref\": resizeRef,\n \"class\": _normalizeClass(['v-pagination', themeClasses.value, props.class]),\n \"style\": _normalizeStyle(props.style),\n \"role\": \"navigation\",\n \"aria-label\": t(props.ariaLabel),\n \"onKeydown\": onKeydown,\n \"data-test\": \"v-pagination-root\"\n }, {\n default: () => [_createElementVNode(\"ul\", {\n \"class\": \"v-pagination__list\"\n }, [props.showFirstLastPage && _createElementVNode(\"li\", {\n \"key\": \"first\",\n \"class\": \"v-pagination__first\",\n \"data-test\": \"v-pagination-first\"\n }, [slots.first ? slots.first(controls.value.first) : _createVNode(VBtn, _mergeProps({\n \"_as\": \"VPaginationBtn\"\n }, controls.value.first), null)]), _createElementVNode(\"li\", {\n \"key\": \"prev\",\n \"class\": \"v-pagination__prev\",\n \"data-test\": \"v-pagination-prev\"\n }, [slots.prev ? slots.prev(controls.value.prev) : _createVNode(VBtn, _mergeProps({\n \"_as\": \"VPaginationBtn\"\n }, controls.value.prev), null)]), items.value.map((item, index) => _createElementVNode(\"li\", {\n \"key\": item.key,\n \"class\": _normalizeClass(['v-pagination__item', {\n 'v-pagination__item--is-active': item.isActive\n }]),\n \"data-test\": \"v-pagination-item\"\n }, [slots.item ? slots.item(item) : _createVNode(VBtn, _mergeProps({\n \"_as\": \"VPaginationBtn\"\n }, item.props), {\n default: () => [item.page]\n })])), _createElementVNode(\"li\", {\n \"key\": \"next\",\n \"class\": \"v-pagination__next\",\n \"data-test\": \"v-pagination-next\"\n }, [slots.next ? slots.next(controls.value.next) : _createVNode(VBtn, _mergeProps({\n \"_as\": \"VPaginationBtn\"\n }, controls.value.next), null)]), props.showFirstLastPage && _createElementVNode(\"li\", {\n \"key\": \"last\",\n \"class\": \"v-pagination__last\",\n \"data-test\": \"v-pagination-last\"\n }, [slots.last ? slots.last(controls.value.last) : _createVNode(VBtn, _mergeProps({\n \"_as\": \"VPaginationBtn\"\n }, controls.value.last), null)])])]\n }));\n return {};\n }\n});\n//# sourceMappingURL=VPagination.js.map","// Composables\nimport { useProxiedModel } from \"../../../composables/proxiedModel.js\"; // Utilities\nimport { computed, inject, provide, watch } from 'vue';\nimport { clamp, getCurrentInstance, propsFactory } from \"../../../util/index.js\"; // Types\nexport const makeDataTablePaginateProps = propsFactory({\n page: {\n type: [Number, String],\n default: 1\n },\n itemsPerPage: {\n type: [Number, String],\n default: 10\n }\n}, 'DataTable-paginate');\nconst VDataTablePaginationSymbol = Symbol.for('vuetify:data-table-pagination');\nexport function createPagination(props) {\n const page = useProxiedModel(props, 'page', undefined, value => Number(value ?? 1));\n const itemsPerPage = useProxiedModel(props, 'itemsPerPage', undefined, value => Number(value ?? 10));\n return {\n page,\n itemsPerPage\n };\n}\nexport function providePagination(options) {\n const {\n page,\n itemsPerPage,\n itemsLength\n } = options;\n const startIndex = computed(() => {\n if (itemsPerPage.value === -1) return 0;\n return itemsPerPage.value * (page.value - 1);\n });\n const stopIndex = computed(() => {\n if (itemsPerPage.value === -1) return itemsLength.value;\n return Math.min(itemsLength.value, startIndex.value + itemsPerPage.value);\n });\n const pageCount = computed(() => {\n if (itemsPerPage.value === -1 || itemsLength.value === 0) return 1;\n return Math.ceil(itemsLength.value / itemsPerPage.value);\n });\n\n // Don't run immediately, items may not have been loaded yet: #17966\n watch([page, pageCount], () => {\n if (page.value > pageCount.value) {\n page.value = pageCount.value;\n }\n });\n function setItemsPerPage(value) {\n itemsPerPage.value = value;\n page.value = 1;\n }\n function nextPage() {\n page.value = clamp(page.value + 1, 1, pageCount.value);\n }\n function prevPage() {\n page.value = clamp(page.value - 1, 1, pageCount.value);\n }\n function setPage(value) {\n page.value = clamp(value, 1, pageCount.value);\n }\n const data = {\n page,\n itemsPerPage,\n startIndex,\n stopIndex,\n pageCount,\n itemsLength,\n nextPage,\n prevPage,\n setPage,\n setItemsPerPage\n };\n provide(VDataTablePaginationSymbol, data);\n return data;\n}\nexport function usePagination() {\n const data = inject(VDataTablePaginationSymbol);\n if (!data) throw new Error('Missing pagination!');\n return data;\n}\nexport function usePaginatedItems(options) {\n const vm = getCurrentInstance('usePaginatedItems');\n const {\n items,\n startIndex,\n stopIndex,\n itemsPerPage\n } = options;\n const paginatedItems = computed(() => {\n if (itemsPerPage.value <= 0) return items.value;\n return items.value.slice(startIndex.value, stopIndex.value);\n });\n watch(paginatedItems, val => {\n vm.emit('update:currentItems', val);\n }, {\n immediate: true\n });\n return {\n paginatedItems\n };\n}\n//# sourceMappingURL=paginate.js.map","import { createElementVNode as _createElementVNode, createVNode as _createVNode, mergeProps as _mergeProps } from \"vue\";\n// Styles\nimport \"./VDataTableFooter.css\";\n\n// Components\nimport { VPagination } from \"../VPagination/index.js\";\nimport { VSelect } from \"../VSelect/index.js\"; // Composables\nimport { usePagination } from \"./composables/paginate.js\";\nimport { IconValue } from \"../../composables/icons.js\";\nimport { useLocale } from \"../../composables/locale.js\"; // Utilities\nimport { computed } from 'vue';\nimport { genericComponent, omit, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVDataTableFooterProps = propsFactory({\n color: String,\n prevIcon: {\n type: IconValue,\n default: '$prev'\n },\n nextIcon: {\n type: IconValue,\n default: '$next'\n },\n firstIcon: {\n type: IconValue,\n default: '$first'\n },\n lastIcon: {\n type: IconValue,\n default: '$last'\n },\n itemsPerPageText: {\n type: String,\n default: '$vuetify.dataFooter.itemsPerPageText'\n },\n pageText: {\n type: String,\n default: '$vuetify.dataFooter.pageText'\n },\n firstPageLabel: {\n type: String,\n default: '$vuetify.dataFooter.firstPage'\n },\n prevPageLabel: {\n type: String,\n default: '$vuetify.dataFooter.prevPage'\n },\n nextPageLabel: {\n type: String,\n default: '$vuetify.dataFooter.nextPage'\n },\n lastPageLabel: {\n type: String,\n default: '$vuetify.dataFooter.lastPage'\n },\n itemsPerPageOptions: {\n type: Array,\n default: () => [{\n value: 10,\n title: '10'\n }, {\n value: 25,\n title: '25'\n }, {\n value: 50,\n title: '50'\n }, {\n value: 100,\n title: '100'\n }, {\n value: -1,\n title: '$vuetify.dataFooter.itemsPerPageAll'\n }]\n },\n showCurrentPage: Boolean\n}, 'VDataTableFooter');\nexport const VDataTableFooter = genericComponent()({\n name: 'VDataTableFooter',\n props: makeVDataTableFooterProps(),\n setup(props, _ref) {\n let {\n slots\n } = _ref;\n const {\n t\n } = useLocale();\n const {\n page,\n pageCount,\n startIndex,\n stopIndex,\n itemsLength,\n itemsPerPage,\n setItemsPerPage\n } = usePagination();\n const itemsPerPageOptions = computed(() => props.itemsPerPageOptions.map(option => {\n if (typeof option === 'number') {\n return {\n value: option,\n title: option === -1 ? t('$vuetify.dataFooter.itemsPerPageAll') : String(option)\n };\n }\n return {\n ...option,\n title: !isNaN(Number(option.title)) ? option.title : t(option.title)\n };\n }));\n useRender(() => {\n const paginationProps = VPagination.filterProps(props);\n return _createElementVNode(\"div\", {\n \"class\": \"v-data-table-footer\"\n }, [slots.prepend?.(), _createElementVNode(\"div\", {\n \"class\": \"v-data-table-footer__items-per-page\"\n }, [_createElementVNode(\"span\", null, [t(props.itemsPerPageText)]), _createVNode(VSelect, {\n \"items\": itemsPerPageOptions.value,\n \"itemColor\": props.color,\n \"modelValue\": itemsPerPage.value,\n \"onUpdate:modelValue\": v => setItemsPerPage(Number(v)),\n \"density\": \"compact\",\n \"variant\": \"outlined\",\n \"aria-label\": t(props.itemsPerPageText),\n \"hideDetails\": true\n }, null)]), _createElementVNode(\"div\", {\n \"class\": \"v-data-table-footer__info\"\n }, [_createElementVNode(\"div\", null, [t(props.pageText, !itemsLength.value ? 0 : startIndex.value + 1, stopIndex.value, itemsLength.value)])]), _createElementVNode(\"div\", {\n \"class\": \"v-data-table-footer__pagination\"\n }, [_createVNode(VPagination, _mergeProps({\n \"modelValue\": page.value,\n \"onUpdate:modelValue\": $event => page.value = $event,\n \"density\": \"comfortable\",\n \"firstAriaLabel\": props.firstPageLabel,\n \"lastAriaLabel\": props.lastPageLabel,\n \"length\": pageCount.value,\n \"nextAriaLabel\": props.nextPageLabel,\n \"previousAriaLabel\": props.prevPageLabel,\n \"rounded\": true,\n \"showFirstLastPage\": true,\n \"totalVisible\": props.showCurrentPage ? 1 : 0,\n \"variant\": \"plain\"\n }, omit(paginationProps, ['color'])), null)])]);\n });\n return {};\n }\n});\n//# sourceMappingURL=VDataTableFooter.js.map","import { normalizeClass as _normalizeClass, createVNode as _createVNode } from \"vue\";\n// Utilities\nimport { convertToUnit, defineFunctionalComponent } from \"../../util/index.js\"; // Types\nexport const VDataTableColumn = defineFunctionalComponent({\n align: {\n type: String,\n default: 'start'\n },\n fixed: {\n type: [Boolean, String],\n default: false\n },\n fixedOffset: [Number, String],\n fixedEndOffset: [Number, String],\n height: [Number, String],\n lastFixed: Boolean,\n firstFixedEnd: Boolean,\n noPadding: Boolean,\n indent: [Number, String],\n empty: Boolean,\n tag: String,\n width: [Number, String],\n maxWidth: [Number, String],\n nowrap: Boolean\n}, (props, _ref) => {\n let {\n slots\n } = _ref;\n const Tag = props.tag ?? 'td';\n const fixedSide = typeof props.fixed === 'string' ? props.fixed : props.fixed ? 'start' : 'none';\n return _createVNode(Tag, {\n \"class\": _normalizeClass(['v-data-table__td', {\n 'v-data-table-column--fixed': fixedSide === 'start',\n 'v-data-table-column--fixed-end': fixedSide === 'end',\n 'v-data-table-column--last-fixed': props.lastFixed,\n 'v-data-table-column--first-fixed-end': props.firstFixedEnd,\n 'v-data-table-column--no-padding': props.noPadding,\n 'v-data-table-column--nowrap': props.nowrap,\n 'v-data-table-column--empty': props.empty\n }, `v-data-table-column--align-${props.align}`]),\n \"style\": {\n height: convertToUnit(props.height),\n width: convertToUnit(props.width),\n maxWidth: convertToUnit(props.maxWidth),\n left: fixedSide === 'start' ? convertToUnit(props.fixedOffset || null) : undefined,\n right: fixedSide === 'end' ? convertToUnit(props.fixedEndOffset || null) : undefined,\n paddingInlineStart: props.indent ? convertToUnit(props.indent) : undefined\n }\n }, {\n default: () => [slots.default?.()]\n });\n});\n//# sourceMappingURL=VDataTableColumn.js.map","// Utilities\nimport { capitalize, inject, provide, ref, watchEffect } from 'vue';\nimport { consoleError, propsFactory } from \"../../../util/index.js\"; // Types\nexport const makeDataTableHeaderProps = propsFactory({\n headers: Array\n}, 'DataTable-header');\nexport const VDataTableHeadersSymbol = Symbol.for('vuetify:data-table-headers');\nconst defaultHeader = {\n title: '',\n sortable: false\n};\nconst defaultActionHeader = {\n ...defaultHeader,\n width: 48\n};\nfunction priorityQueue() {\n let arr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n const queue = arr.map(element => ({\n element,\n priority: 0\n }));\n return {\n enqueue: (element, priority) => {\n let added = false;\n for (let i = 0; i < queue.length; i++) {\n const item = queue[i];\n if (item.priority > priority) {\n queue.splice(i, 0, {\n element,\n priority\n });\n added = true;\n break;\n }\n }\n if (!added) queue.push({\n element,\n priority\n });\n },\n size: () => queue.length,\n count: () => {\n let count = 0;\n if (!queue.length) return 0;\n const whole = Math.floor(queue[0].priority);\n for (let i = 0; i < queue.length; i++) {\n if (Math.floor(queue[i].priority) === whole) count += 1;\n }\n return count;\n },\n dequeue: () => {\n return queue.shift();\n }\n };\n}\nfunction extractLeaves(item) {\n let columns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n if (!item.children) {\n columns.push(item);\n } else {\n for (const child of item.children) {\n extractLeaves(child, columns);\n }\n }\n return columns;\n}\nfunction extractKeys(headers) {\n let keys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Set();\n for (const item of headers) {\n if (item.key) keys.add(item.key);\n if (item.children) {\n extractKeys(item.children, keys);\n }\n }\n return keys;\n}\nfunction getDefaultItem(item) {\n if (!item.key) return undefined;\n if (item.key === 'data-table-group') return defaultHeader;\n if (['data-table-expand', 'data-table-select'].includes(item.key)) return defaultActionHeader;\n return undefined;\n}\nfunction getDepth(item) {\n let depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n if (!item.children) return depth;\n return Math.max(depth, ...item.children.map(child => getDepth(child, depth + 1)));\n}\nfunction parseFixedColumns(items) {\n let seenFixed = false;\n function setFixed(item, side) {\n let parentFixedSide = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'none';\n if (!item) return;\n if (parentFixedSide !== 'none') {\n item.fixed = parentFixedSide;\n }\n\n // normalize to simplify logic below\n if (item.fixed === true) {\n item.fixed = 'start';\n }\n if (item.fixed === side) {\n if (item.children) {\n if (side === 'start') {\n for (let i = item.children.length - 1; i >= 0; i--) {\n setFixed(item.children[i], side, side);\n }\n } else {\n for (let i = 0; i < item.children.length; i++) {\n setFixed(item.children[i], side, side);\n }\n }\n } else {\n if (!seenFixed && side === 'start') {\n item.lastFixed = true;\n } else if (!seenFixed && side === 'end') {\n item.firstFixedEnd = true;\n } else if (isNaN(Number(item.width))) {\n consoleError(`Multiple fixed columns should have a static width (key: ${item.key})`);\n } else {\n item.minWidth = Math.max(Number(item.width) || 0, Number(item.minWidth) || 0);\n }\n seenFixed = true;\n }\n } else {\n if (item.children) {\n if (side === 'start') {\n for (let i = item.children.length - 1; i >= 0; i--) {\n setFixed(item.children[i], side);\n }\n } else {\n for (let i = 0; i < item.children.length; i++) {\n setFixed(item.children[i], side);\n }\n }\n } else {\n seenFixed = false;\n }\n }\n }\n for (let i = items.length - 1; i >= 0; i--) {\n setFixed(items[i], 'start');\n }\n for (let i = 0; i < items.length; i++) {\n setFixed(items[i], 'end');\n }\n let fixedOffset = 0;\n for (let i = 0; i < items.length; i++) {\n fixedOffset = setFixedOffset(items[i], fixedOffset);\n }\n let fixedEndOffset = 0;\n for (let i = items.length - 1; i >= 0; i--) {\n fixedEndOffset = setFixedEndOffset(items[i], fixedEndOffset);\n }\n}\nfunction setFixedOffset(item) {\n let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n if (!item) return offset;\n if (item.children) {\n item.fixedOffset = offset;\n for (const child of item.children) {\n offset = setFixedOffset(child, offset);\n }\n } else if (item.fixed && item.fixed !== 'end') {\n item.fixedOffset = offset;\n offset += parseFloat(item.width || '0') || 0;\n }\n return offset;\n}\nfunction setFixedEndOffset(item) {\n let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n if (!item) return offset;\n if (item.children) {\n item.fixedEndOffset = offset;\n for (const child of item.children) {\n offset = setFixedEndOffset(child, offset);\n }\n } else if (item.fixed === 'end') {\n item.fixedEndOffset = offset;\n offset += parseFloat(item.width || '0') || 0;\n }\n return offset;\n}\nfunction parse(items, maxDepth) {\n const headers = [];\n let currentDepth = 0;\n const queue = priorityQueue(items);\n while (queue.size() > 0) {\n let rowSize = queue.count();\n const row = [];\n let fraction = 1;\n while (rowSize > 0) {\n const {\n element: item,\n priority\n } = queue.dequeue();\n const diff = maxDepth - currentDepth - getDepth(item);\n row.push({\n ...item,\n rowspan: diff ?? 1,\n colspan: item.children ? extractLeaves(item).length : 1\n });\n if (item.children) {\n for (const child of item.children) {\n // This internally sorts items that are on the same priority \"row\"\n const sort = priority % 1 + fraction / Math.pow(10, currentDepth + 2);\n queue.enqueue(child, currentDepth + diff + sort);\n }\n }\n fraction += 1;\n rowSize -= 1;\n }\n currentDepth += 1;\n headers.push(row);\n }\n const columns = items.map(item => extractLeaves(item)).flat();\n return {\n columns,\n headers\n };\n}\nfunction convertToInternalHeaders(items) {\n const internalHeaders = [];\n for (const item of items) {\n const defaultItem = {\n ...getDefaultItem(item),\n ...item\n };\n const key = defaultItem.key ?? (typeof defaultItem.value === 'string' ? defaultItem.value : null);\n const value = defaultItem.value ?? key ?? null;\n const internalItem = {\n ...defaultItem,\n key,\n value,\n sortable: defaultItem.sortable ?? (defaultItem.key != null || !!defaultItem.sort),\n children: defaultItem.children ? convertToInternalHeaders(defaultItem.children) : undefined\n };\n internalHeaders.push(internalItem);\n }\n return internalHeaders;\n}\nexport function createHeaders(props, options) {\n const headers = ref([]);\n const columns = ref([]);\n const sortFunctions = ref({});\n const sortRawFunctions = ref({});\n const filterFunctions = ref({});\n watchEffect(() => {\n const _headers = props.headers || Object.keys(props.items[0] ?? {}).map(key => ({\n key,\n title: capitalize(key)\n }));\n const items = _headers.slice();\n const keys = extractKeys(items);\n if (options?.groupBy?.value.length && !keys.has('data-table-group')) {\n items.unshift({\n key: 'data-table-group',\n title: 'Group'\n });\n }\n if (options?.showSelect?.value && !keys.has('data-table-select')) {\n items.unshift({\n key: 'data-table-select'\n });\n }\n if (options?.showExpand?.value && !keys.has('data-table-expand')) {\n items.push({\n key: 'data-table-expand'\n });\n }\n const internalHeaders = convertToInternalHeaders(items);\n parseFixedColumns(internalHeaders);\n const maxDepth = Math.max(...internalHeaders.map(item => getDepth(item))) + 1;\n const parsed = parse(internalHeaders, maxDepth);\n headers.value = parsed.headers;\n columns.value = parsed.columns;\n const flatHeaders = parsed.headers.flat(1);\n for (const header of flatHeaders) {\n if (!header.key) continue;\n if (header.sortable) {\n if (header.sort) {\n sortFunctions.value[header.key] = header.sort;\n }\n if (header.sortRaw) {\n sortRawFunctions.value[header.key] = header.sortRaw;\n }\n }\n if (header.filter) {\n filterFunctions.value[header.key] = header.filter;\n }\n }\n });\n const data = {\n headers,\n columns,\n sortFunctions,\n sortRawFunctions,\n filterFunctions\n };\n provide(VDataTableHeadersSymbol, data);\n return data;\n}\nexport function useHeaders() {\n const data = inject(VDataTableHeadersSymbol);\n if (!data) throw new Error('Missing headers!');\n return data;\n}\n//# sourceMappingURL=headers.js.map","// Composables\nimport { useProxiedModel } from \"../../../composables/proxiedModel.js\"; // Utilities\nimport { computed, inject, provide, shallowRef, toRef } from 'vue';\nimport { deepEqual, isPrimitive, propsFactory, wrapInArray } from \"../../../util/index.js\"; // Types\nconst singleSelectStrategy = {\n showSelectAll: false,\n allSelected: () => [],\n select: _ref => {\n let {\n items,\n value\n } = _ref;\n return new Set(value ? [items[0]?.value] : []);\n },\n selectAll: _ref2 => {\n let {\n selected\n } = _ref2;\n return selected;\n }\n};\nconst pageSelectStrategy = {\n showSelectAll: true,\n allSelected: _ref3 => {\n let {\n currentPage\n } = _ref3;\n return currentPage;\n },\n select: _ref4 => {\n let {\n items,\n value,\n selected\n } = _ref4;\n for (const item of items) {\n if (value) selected.add(item.value);else selected.delete(item.value);\n }\n return selected;\n },\n selectAll: _ref5 => {\n let {\n value,\n currentPage,\n selected\n } = _ref5;\n return pageSelectStrategy.select({\n items: currentPage,\n value,\n selected\n });\n }\n};\nconst allSelectStrategy = {\n showSelectAll: true,\n allSelected: _ref6 => {\n let {\n allItems\n } = _ref6;\n return allItems;\n },\n select: _ref7 => {\n let {\n items,\n value,\n selected\n } = _ref7;\n for (const item of items) {\n if (value) selected.add(item.value);else selected.delete(item.value);\n }\n return selected;\n },\n selectAll: _ref8 => {\n let {\n value,\n allItems\n } = _ref8;\n return new Set(value ? allItems.map(item => item.value) : []);\n }\n};\nexport const makeDataTableSelectProps = propsFactory({\n showSelect: Boolean,\n selectStrategy: {\n type: [String, Object],\n default: 'page'\n },\n modelValue: {\n type: Array,\n default: () => []\n },\n valueComparator: Function\n}, 'DataTable-select');\nexport const VDataTableSelectionSymbol = Symbol.for('vuetify:data-table-selection');\nexport function provideSelection(props, _ref9) {\n let {\n allItems,\n currentPage\n } = _ref9;\n const selected = useProxiedModel(props, 'modelValue', props.modelValue, v => {\n const customComparator = props.valueComparator;\n if (customComparator) {\n return new Set(wrapInArray(v).map(v => {\n return allItems.value.find(item => customComparator(v, item.value))?.value ?? v;\n }));\n }\n return new Set(wrapInArray(v).map(v => {\n return isPrimitive(v) ? allItems.value.find(item => v === item.value)?.value ?? v : allItems.value.find(item => deepEqual(v, item.value))?.value ?? v;\n }));\n }, v => {\n return [...v.values()];\n });\n const allSelectable = computed(() => allItems.value.filter(item => item.selectable));\n const currentPageSelectable = computed(() => currentPage.value.filter(item => item.selectable));\n const selectStrategy = computed(() => {\n if (typeof props.selectStrategy === 'object') return props.selectStrategy;\n switch (props.selectStrategy) {\n case 'single':\n return singleSelectStrategy;\n case 'all':\n return allSelectStrategy;\n case 'page':\n default:\n return pageSelectStrategy;\n }\n });\n const lastSelectedIndex = shallowRef(null);\n function isSelected(items) {\n return wrapInArray(items).every(item => selected.value.has(item.value));\n }\n function isSomeSelected(items) {\n return wrapInArray(items).some(item => selected.value.has(item.value));\n }\n function select(items, value) {\n const newSelected = selectStrategy.value.select({\n items,\n value,\n selected: new Set(selected.value)\n });\n selected.value = newSelected;\n }\n function toggleSelect(item, index, event) {\n const items = [];\n index = index ?? currentPage.value.findIndex(i => i.value === item.value);\n if (props.selectStrategy !== 'single' && event?.shiftKey && lastSelectedIndex.value !== null) {\n const [start, end] = [lastSelectedIndex.value, index].sort((a, b) => a - b);\n items.push(...currentPage.value.slice(start, end + 1).filter(item => item.selectable));\n } else {\n items.push(item);\n lastSelectedIndex.value = index;\n }\n select(items, !isSelected([item]));\n }\n function selectAll(value) {\n const newSelected = selectStrategy.value.selectAll({\n value,\n allItems: allSelectable.value,\n currentPage: currentPageSelectable.value,\n selected: new Set(selected.value)\n });\n selected.value = newSelected;\n }\n const someSelected = computed(() => selected.value.size > 0);\n const allSelected = computed(() => {\n const items = selectStrategy.value.allSelected({\n allItems: allSelectable.value,\n currentPage: currentPageSelectable.value\n });\n return !!items.length && isSelected(items);\n });\n const showSelectAll = toRef(() => selectStrategy.value.showSelectAll);\n const data = {\n toggleSelect,\n select,\n selectAll,\n isSelected,\n isSomeSelected,\n someSelected,\n allSelected,\n showSelectAll,\n lastSelectedIndex,\n selectStrategy\n };\n provide(VDataTableSelectionSymbol, data);\n return data;\n}\nexport function useSelection() {\n const data = inject(VDataTableSelectionSymbol);\n if (!data) throw new Error('Missing selection!');\n return data;\n}\n//# sourceMappingURL=select.js.map","// Composables\nimport { useLocale } from \"../../../composables/locale.js\";\nimport { useProxiedModel } from \"../../../composables/proxiedModel.js\"; // Utilities\nimport { computed, inject, provide, toRef } from 'vue';\nimport { getObjectValueByPath, isEmpty, isObject, propsFactory } from \"../../../util/index.js\"; // Types\nexport const makeDataTableSortProps = propsFactory({\n initialSortOrder: {\n type: String,\n default: 'asc',\n validator: v => !v || ['asc', 'desc'].includes(v)\n },\n sortBy: {\n type: Array,\n default: () => []\n },\n customKeySort: Object,\n multiSort: {\n type: [Boolean, Object],\n default: false\n },\n mustSort: Boolean\n}, 'DataTable-sort');\nconst VDataTableSortSymbol = Symbol.for('vuetify:data-table-sort');\nexport function createSort(props) {\n const initialSortOrder = toRef(() => props.initialSortOrder);\n const sortBy = useProxiedModel(props, 'sortBy');\n const mustSort = toRef(() => props.mustSort);\n const multiSort = toRef(() => props.multiSort);\n return {\n initialSortOrder,\n sortBy,\n multiSort,\n mustSort\n };\n}\nfunction resolveMultiSort(multiSort, event) {\n if (!isObject(multiSort)) {\n return {\n active: !!multiSort\n };\n }\n const {\n key,\n mode,\n modifier\n } = multiSort;\n const reverseMode = modifier === 'alt' && event?.altKey || modifier === 'shift' && event?.shiftKey;\n return {\n active: !key || event?.ctrlKey || event?.metaKey || false,\n mode: reverseMode ? mode === 'append' ? 'prepend' : 'append' : mode\n };\n}\nexport function provideSort(options) {\n const {\n initialSortOrder,\n sortBy,\n mustSort,\n multiSort,\n page\n } = options;\n const toggleSort = (column, event) => {\n if (column.key == null) return;\n let newSortBy = sortBy.value.map(x => ({\n ...x\n })) ?? [];\n const item = newSortBy.find(x => x.key === column.key);\n const initialOrder = initialSortOrder.value;\n const secondaryOrder = initialSortOrder.value === 'desc' ? 'asc' : 'desc';\n if (!item) {\n const {\n active,\n mode\n } = resolveMultiSort(multiSort.value, event);\n if (active) {\n if (mode === 'prepend') {\n newSortBy.unshift({\n key: column.key,\n order: initialOrder\n });\n } else {\n newSortBy.push({\n key: column.key,\n order: initialOrder\n });\n }\n } else {\n newSortBy = [{\n key: column.key,\n order: initialOrder\n }];\n }\n } else if (item.order === secondaryOrder) {\n if (mustSort.value && newSortBy.length === 1) {\n item.order = initialSortOrder.value;\n } else {\n newSortBy = newSortBy.filter(x => x.key !== column.key);\n }\n } else {\n item.order = secondaryOrder;\n }\n sortBy.value = newSortBy;\n if (page) page.value = 1;\n };\n function isSorted(column) {\n return !!sortBy.value.find(item => item.key === column.key);\n }\n const data = {\n sortBy,\n toggleSort,\n isSorted\n };\n provide(VDataTableSortSymbol, data);\n return data;\n}\nexport function useSort() {\n const data = inject(VDataTableSortSymbol);\n if (!data) throw new Error('Missing sort!');\n return data;\n}\n\n// TODO: abstract into project composable\nexport function useSortedItems(props, items, sortBy, options) {\n const locale = useLocale();\n const sortedItems = computed(() => {\n if (!sortBy.value.length) return items.value;\n return sortItems(items.value, sortBy.value, locale.current.value, {\n transform: options?.transform,\n sortFunctions: {\n ...props.customKeySort,\n ...options?.sortFunctions?.value\n },\n sortRawFunctions: options?.sortRawFunctions?.value\n });\n });\n return {\n sortedItems\n };\n}\nexport function sortItems(items, sortByItems, locale, options) {\n const stringCollator = new Intl.Collator(locale, {\n sensitivity: 'accent',\n usage: 'sort'\n });\n const transformedItems = items.map(item => [item, options?.transform ? options.transform(item) : item]);\n return transformedItems.sort((a, b) => {\n for (let i = 0; i < sortByItems.length; i++) {\n let hasCustomResult = false;\n const sortKey = sortByItems[i].key;\n const sortOrder = sortByItems[i].order ?? 'asc';\n if (sortOrder === false) continue;\n let sortA = getObjectValueByPath(a[1], sortKey);\n let sortB = getObjectValueByPath(b[1], sortKey);\n let sortARaw = a[0].raw;\n let sortBRaw = b[0].raw;\n if (sortOrder === 'desc') {\n [sortA, sortB] = [sortB, sortA];\n [sortARaw, sortBRaw] = [sortBRaw, sortARaw];\n }\n if (options?.sortRawFunctions?.[sortKey]) {\n const customResult = options.sortRawFunctions[sortKey](sortARaw, sortBRaw);\n if (customResult == null) continue;\n hasCustomResult = true;\n if (customResult) return customResult;\n }\n if (options?.sortFunctions?.[sortKey]) {\n const customResult = options.sortFunctions[sortKey](sortA, sortB);\n if (customResult == null) continue;\n hasCustomResult = true;\n if (customResult) return customResult;\n }\n if (hasCustomResult) continue;\n\n // Dates should be compared numerically\n if (sortA instanceof Date && sortB instanceof Date) {\n sortA = sortA.getTime();\n sortB = sortB.getTime();\n }\n [sortA, sortB] = [sortA, sortB].map(s => s != null ? s.toString().toLocaleLowerCase() : s);\n if (sortA !== sortB) {\n if (isEmpty(sortA) && isEmpty(sortB)) return 0;\n if (isEmpty(sortA)) return -1;\n if (isEmpty(sortB)) return 1;\n if (!isNaN(sortA) && !isNaN(sortB)) return Number(sortA) - Number(sortB);\n return stringCollator.compare(sortA, sortB);\n }\n }\n return 0;\n }).map(_ref => {\n let [item] = _ref;\n return item;\n });\n}\n//# sourceMappingURL=sort.js.map","import { createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, mergeProps as _mergeProps, Fragment as _Fragment } from \"vue\";\n// Components\nimport { VDataTableColumn } from \"./VDataTableColumn.js\";\nimport { VCheckboxBtn } from \"../VCheckbox/index.js\";\nimport { VChip } from \"../VChip/index.js\";\nimport { VIcon } from \"../VIcon/index.js\";\nimport { VSelect } from \"../VSelect/index.js\"; // Composables\nimport { useHeaders } from \"./composables/headers.js\";\nimport { useSelection } from \"./composables/select.js\";\nimport { useSort } from \"./composables/sort.js\";\nimport { useBackgroundColor } from \"../../composables/color.js\";\nimport { makeDensityProps } from \"../../composables/density.js\";\nimport { makeDisplayProps, useDisplay } from \"../../composables/display.js\";\nimport { IconValue } from \"../../composables/icons.js\";\nimport { LoaderSlot, makeLoaderProps, useLoader } from \"../../composables/loader.js\";\nimport { useLocale } from \"../../composables/locale.js\"; // Utilities\nimport { computed, mergeProps } from 'vue';\nimport { convertToUnit, genericComponent, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVDataTableHeadersProps = propsFactory({\n color: String,\n disableSort: Boolean,\n fixedHeader: Boolean,\n multiSort: Boolean,\n initialSortOrder: String,\n sortAscIcon: {\n type: IconValue,\n default: '$sortAsc'\n },\n sortDescIcon: {\n type: IconValue,\n default: '$sortDesc'\n },\n headerProps: {\n type: Object\n },\n /** @deprecated */\n sticky: Boolean,\n ...makeDensityProps(),\n ...makeDisplayProps(),\n ...makeLoaderProps()\n}, 'VDataTableHeaders');\nexport const VDataTableHeaders = genericComponent()({\n name: 'VDataTableHeaders',\n props: makeVDataTableHeadersProps(),\n setup(props, _ref) {\n let {\n slots\n } = _ref;\n const {\n t\n } = useLocale();\n const {\n toggleSort,\n sortBy,\n isSorted\n } = useSort();\n const {\n someSelected,\n allSelected,\n selectAll,\n showSelectAll\n } = useSelection();\n const {\n columns,\n headers\n } = useHeaders();\n const {\n loaderClasses\n } = useLoader(props);\n function getFixedStyles(column, y) {\n if (!(props.sticky || props.fixedHeader) && !column.fixed) return undefined;\n const fixedSide = typeof column.fixed === 'string' ? column.fixed : column.fixed ? 'start' : 'none';\n return {\n position: 'sticky',\n left: fixedSide === 'start' ? convertToUnit(column.fixedOffset) : undefined,\n right: fixedSide === 'end' ? convertToUnit(column.fixedEndOffset) : undefined,\n top: props.sticky || props.fixedHeader ? `calc(var(--v-table-header-height) * ${y})` : undefined\n };\n }\n function handleEnterKeyPress(event, column) {\n if (event.key === 'Enter' && !props.disableSort) {\n toggleSort(column, event);\n }\n }\n function getSortIcon(column) {\n const item = sortBy.value.find(item => item.key === column.key);\n return !item && props.initialSortOrder === 'asc' || item?.order === 'asc' ? props.sortAscIcon : props.sortDescIcon;\n }\n const {\n backgroundColorClasses,\n backgroundColorStyles\n } = useBackgroundColor(() => props.color);\n const {\n displayClasses,\n mobile\n } = useDisplay(props);\n const slotProps = computed(() => ({\n headers: headers.value,\n columns: columns.value,\n toggleSort,\n isSorted,\n sortBy: sortBy.value,\n someSelected: someSelected.value,\n allSelected: allSelected.value,\n selectAll,\n getSortIcon\n }));\n const headerCellClasses = computed(() => ['v-data-table__th', {\n 'v-data-table__th--sticky': props.sticky || props.fixedHeader\n }, displayClasses.value, loaderClasses.value]);\n const VDataTableHeaderCell = _ref2 => {\n let {\n column,\n x,\n y\n } = _ref2;\n const noPadding = column.key === 'data-table-select' || column.key === 'data-table-expand';\n const isEmpty = column.key === 'data-table-group' && column.width === 0 && !column.title;\n const headerProps = mergeProps(props.headerProps ?? {}, column.headerProps ?? {});\n return _createVNode(VDataTableColumn, _mergeProps({\n \"tag\": \"th\",\n \"align\": column.align,\n \"class\": [{\n 'v-data-table__th--sortable': column.sortable && !props.disableSort,\n 'v-data-table__th--sorted': isSorted(column),\n 'v-data-table__th--fixed': column.fixed\n }, ...headerCellClasses.value],\n \"style\": {\n width: convertToUnit(column.width),\n minWidth: convertToUnit(column.minWidth),\n maxWidth: convertToUnit(column.maxWidth),\n ...getFixedStyles(column, y)\n },\n \"colspan\": column.colspan,\n \"rowspan\": column.rowspan,\n \"fixed\": column.fixed,\n \"nowrap\": column.nowrap,\n \"lastFixed\": column.lastFixed,\n \"firstFixedEnd\": column.firstFixedEnd,\n \"noPadding\": noPadding,\n \"empty\": isEmpty,\n \"tabindex\": column.sortable ? 0 : undefined,\n \"onClick\": column.sortable ? event => toggleSort(column, event) : undefined,\n \"onKeydown\": column.sortable ? event => handleEnterKeyPress(event, column) : undefined\n }, headerProps), {\n default: () => {\n const columnSlotName = `header.${column.key}`;\n const columnSlotProps = {\n column,\n selectAll,\n isSorted,\n toggleSort,\n sortBy: sortBy.value,\n someSelected: someSelected.value,\n allSelected: allSelected.value,\n getSortIcon\n };\n if (slots[columnSlotName]) return slots[columnSlotName](columnSlotProps);\n if (isEmpty) return '';\n if (column.key === 'data-table-select') {\n return slots['header.data-table-select']?.(columnSlotProps) ?? (showSelectAll.value && _createVNode(VCheckboxBtn, {\n \"color\": props.color,\n \"density\": props.density,\n \"modelValue\": allSelected.value,\n \"indeterminate\": someSelected.value && !allSelected.value,\n \"onUpdate:modelValue\": selectAll\n }, null));\n }\n return _createElementVNode(\"div\", {\n \"class\": \"v-data-table-header__content\"\n }, [_createElementVNode(\"span\", null, [column.title]), column.sortable && !props.disableSort && _createVNode(VIcon, {\n \"key\": \"icon\",\n \"class\": \"v-data-table-header__sort-icon\",\n \"icon\": getSortIcon(column)\n }, null), props.multiSort && isSorted(column) && _createElementVNode(\"div\", {\n \"key\": \"badge\",\n \"class\": _normalizeClass(['v-data-table-header__sort-badge', ...backgroundColorClasses.value]),\n \"style\": _normalizeStyle(backgroundColorStyles.value)\n }, [sortBy.value.findIndex(x => x.key === column.key) + 1])]);\n }\n });\n };\n const VDataTableMobileHeaderCell = () => {\n const displayItems = computed(() => {\n return columns.value.filter(column => column?.sortable && !props.disableSort);\n });\n const showSelectColumn = columns.value.find(column => column.key === 'data-table-select');\n return _createVNode(VDataTableColumn, _mergeProps({\n \"tag\": \"th\",\n \"class\": [...headerCellClasses.value],\n \"colspan\": headers.value.length + 1\n }, props.headerProps), {\n default: () => [_createElementVNode(\"div\", {\n \"class\": \"v-data-table-header__content\"\n }, [_createVNode(VSelect, {\n \"chips\": true,\n \"color\": props.color,\n \"class\": \"v-data-table__td-sort-select\",\n \"clearable\": true,\n \"density\": \"default\",\n \"items\": displayItems.value,\n \"label\": t('$vuetify.dataTable.sortBy'),\n \"multiple\": props.multiSort,\n \"variant\": \"underlined\",\n \"onClick:clear\": () => sortBy.value = []\n }, {\n append: showSelectColumn ? () => _createVNode(VCheckboxBtn, {\n \"color\": props.color,\n \"density\": \"compact\",\n \"modelValue\": allSelected.value,\n \"indeterminate\": someSelected.value && !allSelected.value,\n \"onUpdate:modelValue\": () => selectAll(!allSelected.value)\n }, null) : undefined,\n chip: props => _createVNode(VChip, {\n \"onClick\": props.item.raw?.sortable ? () => toggleSort(props.item.raw) : undefined,\n \"onMousedown\": e => {\n e.preventDefault();\n e.stopPropagation();\n }\n }, {\n default: () => [props.item.title, _createVNode(VIcon, {\n \"class\": _normalizeClass(['v-data-table__td-sort-icon', isSorted(props.item.raw) && 'v-data-table__td-sort-icon-active']),\n \"icon\": getSortIcon(props.item.raw),\n \"size\": \"small\"\n }, null)]\n })\n })])]\n });\n };\n useRender(() => {\n return mobile.value ? _createElementVNode(\"tr\", null, [_createVNode(VDataTableMobileHeaderCell, null, null)]) : _createElementVNode(_Fragment, null, [slots.headers ? slots.headers(slotProps.value) : headers.value.map((row, y) => _createElementVNode(\"tr\", null, [row.map((column, x) => _createVNode(VDataTableHeaderCell, {\n \"column\": column,\n \"x\": x,\n \"y\": y\n }, null))])), props.loading && _createElementVNode(\"tr\", {\n \"class\": \"v-data-table-progress\"\n }, [_createElementVNode(\"th\", {\n \"colspan\": columns.value.length\n }, [_createVNode(LoaderSlot, {\n \"name\": \"v-data-table-progress\",\n \"absolute\": true,\n \"active\": true,\n \"color\": typeof props.loading === 'boolean' || props.loading === 'true' ? props.color : props.loading,\n \"indeterminate\": true\n }, {\n default: slots.loader\n })])])]);\n });\n }\n});\n//# sourceMappingURL=VDataTableHeaders.js.map","// Composables\nimport { useProxiedModel } from \"../../../composables/proxiedModel.js\"; // Utilities\nimport { computed, inject, provide, ref, toValue } from 'vue';\nimport { getObjectValueByPath, propsFactory } from \"../../../util/index.js\"; // Types\nexport const makeDataTableGroupProps = propsFactory({\n groupBy: {\n type: Array,\n default: () => []\n }\n}, 'DataTable-group');\nconst VDataTableGroupSymbol = Symbol.for('vuetify:data-table-group');\nexport function createGroupBy(props) {\n const groupBy = useProxiedModel(props, 'groupBy');\n return {\n groupBy\n };\n}\nexport function provideGroupBy(options) {\n const {\n disableSort,\n groupBy,\n sortBy\n } = options;\n const opened = ref(new Set());\n const sortByWithGroups = computed(() => {\n return groupBy.value.map(val => ({\n ...val,\n order: val.order ?? false\n })).concat(disableSort?.value ? [] : sortBy.value);\n });\n function isGroupOpen(group) {\n return opened.value.has(group.id);\n }\n function toggleGroup(group) {\n const newOpened = new Set(opened.value);\n if (!isGroupOpen(group)) newOpened.add(group.id);else newOpened.delete(group.id);\n opened.value = newOpened;\n }\n function extractRows(items) {\n function dive(group) {\n const arr = [];\n for (const item of group.items) {\n if ('type' in item && item.type === 'group') {\n arr.push(...dive(item));\n } else {\n arr.push(item);\n }\n }\n return [...new Set(arr)];\n }\n return dive({\n type: 'group',\n items,\n id: 'dummy',\n key: 'dummy',\n value: 'dummy',\n depth: 0\n });\n }\n\n // onBeforeMount(() => {\n // for (const key of groupedItems.value.keys()) {\n // opened.value.add(key)\n // }\n // })\n\n const data = {\n sortByWithGroups,\n toggleGroup,\n opened,\n groupBy,\n extractRows,\n isGroupOpen\n };\n provide(VDataTableGroupSymbol, data);\n return data;\n}\nexport function useGroupBy() {\n const data = inject(VDataTableGroupSymbol);\n if (!data) throw new Error('Missing group!');\n return data;\n}\nfunction groupItemsByProperty(items, groupBy) {\n if (!items.length) return [];\n const groups = new Map();\n for (const item of items) {\n const value = getObjectValueByPath(item.raw, groupBy);\n if (!groups.has(value)) {\n groups.set(value, []);\n }\n groups.get(value).push(item);\n }\n return groups;\n}\nfunction groupItems(items, groupBy) {\n let depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n let prefix = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'root';\n if (!groupBy.length) return [];\n const groupedItems = groupItemsByProperty(items, groupBy[0]);\n const groups = [];\n const rest = groupBy.slice(1);\n groupedItems.forEach((items, value) => {\n const key = groupBy[0];\n const id = `${prefix}_${key}_${value}`;\n groups.push({\n depth,\n id,\n key,\n value,\n items: rest.length ? groupItems(items, rest, depth + 1, id) : items,\n type: 'group'\n });\n });\n return groups;\n}\nfunction flattenItems(items, opened, hasSummary) {\n const flatItems = [];\n for (const item of items) {\n // TODO: make this better\n if ('type' in item && item.type === 'group') {\n if (item.value != null) {\n flatItems.push(item);\n }\n if (opened.has(item.id) || item.value == null) {\n flatItems.push(...flattenItems(item.items, opened, hasSummary));\n if (hasSummary) {\n flatItems.push({\n ...item,\n type: 'group-summary'\n });\n }\n }\n } else {\n flatItems.push(item);\n }\n }\n return flatItems;\n}\nexport function useGroupedItems(items, groupBy, opened, hasSummary) {\n const flatItems = computed(() => {\n if (!groupBy.value.length) return items.value;\n const groupedItems = groupItems(items.value, groupBy.value.map(item => item.key));\n return flattenItems(groupedItems, opened.value, toValue(hasSummary));\n });\n return {\n flatItems\n };\n}\n//# sourceMappingURL=group.js.map","import { createVNode as _createVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode } from \"vue\";\n// Components\nimport { VDataTableColumn } from \"./VDataTableColumn.js\";\nimport { VBtn } from \"../VBtn/index.js\";\nimport { VCheckboxBtn } from \"../VCheckbox/index.js\"; // Composables\nimport { useGroupBy } from \"./composables/group.js\";\nimport { useHeaders } from \"./composables/headers.js\";\nimport { useSelection } from \"./composables/select.js\";\nimport { makeDensityProps } from \"../../composables/density.js\";\nimport { IconValue } from \"../../composables/icons.js\"; // Utilities\nimport { computed, toRef } from 'vue';\nimport { genericComponent, propsFactory } from \"../../util/index.js\"; // Types\nexport const makeVDataTableGroupHeaderRowProps = propsFactory({\n item: {\n type: Object,\n required: true\n },\n groupCollapseIcon: {\n type: IconValue,\n default: '$tableGroupCollapse'\n },\n groupExpandIcon: {\n type: IconValue,\n default: '$tableGroupExpand'\n },\n ...makeDensityProps()\n}, 'VDataTableGroupHeaderRow');\nexport const VDataTableGroupHeaderRow = genericComponent()({\n name: 'VDataTableGroupHeaderRow',\n props: makeVDataTableGroupHeaderRowProps(),\n setup(props, _ref) {\n let {\n slots\n } = _ref;\n const {\n isGroupOpen,\n toggleGroup,\n extractRows\n } = useGroupBy();\n const {\n isSelected,\n isSomeSelected,\n select\n } = useSelection();\n const {\n columns\n } = useHeaders();\n const rows = computed(() => {\n return extractRows([props.item]);\n });\n const colspan = toRef(() => columns.value.length - (columns.value.some(c => c.key === 'data-table-select') ? 1 : 0));\n return () => _createElementVNode(\"tr\", {\n \"class\": \"v-data-table-group-header-row\",\n \"style\": {\n '--v-data-table-group-header-row-depth': props.item.depth\n }\n }, [columns.value.map(column => {\n if (column.key === 'data-table-group') {\n const icon = isGroupOpen(props.item) ? props.groupCollapseIcon : props.groupExpandIcon;\n const onClick = () => toggleGroup(props.item);\n return slots['data-table-group']?.({\n item: props.item,\n count: rows.value.length,\n props: {\n icon,\n onClick\n }\n }) ?? _createVNode(VDataTableColumn, {\n \"class\": \"v-data-table-group-header-row__column\",\n \"colspan\": colspan.value\n }, {\n default: () => [_createVNode(VBtn, {\n \"size\": \"small\",\n \"variant\": \"text\",\n \"icon\": icon,\n \"onClick\": onClick\n }, null), _createElementVNode(\"span\", null, [props.item.value]), _createElementVNode(\"span\", null, [_createTextVNode(\"(\"), rows.value.length, _createTextVNode(\")\")])]\n });\n } else if (column.key === 'data-table-select') {\n const selectableRows = rows.value.filter(x => x.selectable);\n const modelValue = selectableRows.length > 0 && isSelected(selectableRows);\n const indeterminate = isSomeSelected(selectableRows) && !modelValue;\n const selectGroup = v => select(selectableRows, v);\n return slots['data-table-select']?.({\n props: {\n modelValue,\n indeterminate,\n 'onUpdate:modelValue': selectGroup\n }\n }) ?? _createVNode(VDataTableColumn, {\n \"class\": \"v-data-table__td--select-row\",\n \"noPadding\": true\n }, {\n default: () => [_createVNode(VCheckboxBtn, {\n \"density\": props.density,\n \"disabled\": selectableRows.length === 0,\n \"modelValue\": modelValue,\n \"indeterminate\": indeterminate,\n \"onUpdate:modelValue\": selectGroup\n }, null)]\n });\n }\n return '';\n })]);\n }\n});\n//# sourceMappingURL=VDataTableGroupHeaderRow.js.map","// Composables\nimport { useProxiedModel } from \"../../../composables/proxiedModel.js\"; // Utilities\nimport { inject, provide, toRaw, toRef } from 'vue';\nimport { propsFactory } from \"../../../util/index.js\"; // Types\nexport const makeDataTableExpandProps = propsFactory({\n expandOnClick: Boolean,\n showExpand: Boolean,\n expanded: {\n type: Array,\n default: () => []\n }\n}, 'DataTable-expand');\nexport const VDataTableExpandedKey = Symbol.for('vuetify:datatable:expanded');\nexport function provideExpanded(props) {\n const expandOnClick = toRef(() => props.expandOnClick);\n const expanded = useProxiedModel(props, 'expanded', props.expanded, v => {\n return new Set(v);\n }, v => {\n return [...v.values()];\n });\n function expand(item, value) {\n const newExpanded = new Set(expanded.value);\n const rawValue = toRaw(item.value);\n if (!value) {\n const item = [...expanded.value].find(x => toRaw(x) === rawValue);\n newExpanded.delete(item);\n } else {\n newExpanded.add(rawValue);\n }\n expanded.value = newExpanded;\n }\n function isExpanded(item) {\n const rawValue = toRaw(item.value);\n return [...expanded.value].some(x => toRaw(x) === rawValue);\n }\n function toggleExpand(item) {\n expand(item, !isExpanded(item));\n }\n const data = {\n expand,\n expanded,\n expandOnClick,\n isExpanded,\n toggleExpand\n };\n provide(VDataTableExpandedKey, data);\n return data;\n}\nexport function useExpanded() {\n const data = inject(VDataTableExpandedKey);\n if (!data) throw new Error('foo');\n return data;\n}\n//# sourceMappingURL=expand.js.map","import { createVNode as _createVNode, Fragment as _Fragment, createElementVNode as _createElementVNode, mergeProps as _mergeProps, normalizeClass as _normalizeClass } from \"vue\";\n// Components\nimport { VDataTableColumn } from \"./VDataTableColumn.js\";\nimport { VBtn } from \"../VBtn/index.js\";\nimport { VCheckboxBtn } from \"../VCheckbox/index.js\"; // Composables\nimport { useExpanded } from \"./composables/expand.js\";\nimport { useHeaders } from \"./composables/headers.js\";\nimport { useSelection } from \"./composables/select.js\";\nimport { useSort } from \"./composables/sort.js\";\nimport { makeDensityProps } from \"../../composables/density.js\";\nimport { makeDisplayProps, useDisplay } from \"../../composables/display.js\";\nimport { IconValue } from \"../../composables/icons.js\"; // Utilities\nimport { toDisplayString, withModifiers } from 'vue';\nimport { EventProp, genericComponent, getObjectValueByPath, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVDataTableRowProps = propsFactory({\n color: String,\n index: Number,\n item: Object,\n cellProps: [Object, Function],\n collapseIcon: {\n type: IconValue,\n default: '$collapse'\n },\n expandIcon: {\n type: IconValue,\n default: '$expand'\n },\n onClick: EventProp(),\n onContextmenu: EventProp(),\n onDblclick: EventProp(),\n ...makeDensityProps(),\n ...makeDisplayProps()\n}, 'VDataTableRow');\nexport const VDataTableRow = genericComponent()({\n name: 'VDataTableRow',\n props: makeVDataTableRowProps(),\n setup(props, _ref) {\n let {\n slots\n } = _ref;\n const {\n displayClasses,\n mobile\n } = useDisplay(props, 'v-data-table__tr');\n const {\n isSelected,\n toggleSelect,\n someSelected,\n allSelected,\n selectAll\n } = useSelection();\n const {\n isExpanded,\n toggleExpand\n } = useExpanded();\n const {\n toggleSort,\n sortBy,\n isSorted\n } = useSort();\n const {\n columns\n } = useHeaders();\n useRender(() => _createElementVNode(\"tr\", {\n \"class\": _normalizeClass(['v-data-table__tr', {\n 'v-data-table__tr--clickable': !!(props.onClick || props.onContextmenu || props.onDblclick)\n }, displayClasses.value]),\n \"onClick\": props.onClick,\n \"onContextmenu\": props.onContextmenu,\n \"onDblclick\": props.onDblclick\n }, [props.item && columns.value.map((column, i) => {\n const item = props.item;\n const slotName = `item.${column.key}`;\n const headerSlotName = `header.${column.key}`;\n const slotProps = {\n index: props.index,\n item: item.raw,\n internalItem: item,\n value: getObjectValueByPath(item.columns, column.key),\n column,\n isSelected,\n toggleSelect,\n isExpanded,\n toggleExpand\n };\n const columnSlotProps = {\n column,\n selectAll,\n isSorted,\n toggleSort,\n sortBy: sortBy.value,\n someSelected: someSelected.value,\n allSelected: allSelected.value,\n getSortIcon: () => ''\n };\n const cellProps = typeof props.cellProps === 'function' ? props.cellProps({\n index: slotProps.index,\n item: slotProps.item,\n internalItem: slotProps.internalItem,\n value: slotProps.value,\n column\n }) : props.cellProps;\n const columnCellProps = typeof column.cellProps === 'function' ? column.cellProps({\n index: slotProps.index,\n item: slotProps.item,\n internalItem: slotProps.internalItem,\n value: slotProps.value\n }) : column.cellProps;\n const noPadding = column.key === 'data-table-select' || column.key === 'data-table-expand';\n const isEmpty = column.key === 'data-table-group' && column.width === 0 && !column.title;\n return _createVNode(VDataTableColumn, _mergeProps({\n \"align\": column.align,\n \"indent\": column.indent,\n \"class\": {\n 'v-data-table__td--expanded-row': column.key === 'data-table-expand',\n 'v-data-table__td--select-row': column.key === 'data-table-select'\n },\n \"fixed\": column.fixed,\n \"fixedOffset\": column.fixedOffset,\n \"fixedEndOffset\": column.fixedEndOffset,\n \"lastFixed\": column.lastFixed,\n \"firstFixedEnd\": column.firstFixedEnd,\n \"maxWidth\": !mobile.value ? column.maxWidth : undefined,\n \"noPadding\": noPadding,\n \"empty\": isEmpty,\n \"nowrap\": column.nowrap,\n \"width\": !mobile.value ? column.width : undefined\n }, cellProps, columnCellProps), {\n default: () => {\n if (column.key === 'data-table-select') {\n return slots['item.data-table-select']?.({\n ...slotProps,\n props: {\n color: props.color,\n disabled: !item.selectable,\n modelValue: isSelected([item]),\n onClick: withModifiers(() => toggleSelect(item), ['stop'])\n }\n }) ?? _createVNode(VCheckboxBtn, {\n \"color\": props.color,\n \"disabled\": !item.selectable,\n \"density\": props.density,\n \"modelValue\": isSelected([item]),\n \"onClick\": withModifiers(event => toggleSelect(item, props.index, event), ['stop'])\n }, null);\n }\n if (column.key === 'data-table-expand') {\n return slots['item.data-table-expand']?.({\n ...slotProps,\n props: {\n icon: isExpanded(item) ? props.collapseIcon : props.expandIcon,\n size: 'small',\n variant: 'text',\n onClick: withModifiers(() => toggleExpand(item), ['stop'])\n }\n }) ?? _createVNode(VBtn, {\n \"icon\": isExpanded(item) ? props.collapseIcon : props.expandIcon,\n \"size\": \"small\",\n \"variant\": \"text\",\n \"onClick\": withModifiers(() => toggleExpand(item), ['stop'])\n }, null);\n }\n if (slots[slotName] && !mobile.value) return slots[slotName](slotProps);\n const displayValue = toDisplayString(slotProps.value);\n return !mobile.value ? displayValue : _createElementVNode(_Fragment, null, [_createElementVNode(\"div\", {\n \"class\": \"v-data-table__td-title\"\n }, [slots[headerSlotName]?.(columnSlotProps) ?? column.title]), _createElementVNode(\"div\", {\n \"class\": \"v-data-table__td-value\"\n }, [slots[slotName]?.(slotProps) ?? displayValue])]);\n }\n });\n })]));\n }\n});\n//# sourceMappingURL=VDataTableRow.js.map","import { createElementVNode as _createElementVNode, Fragment as _Fragment, mergeProps as _mergeProps, createVNode as _createVNode } from \"vue\";\n// Components\nimport { makeVDataTableGroupHeaderRowProps, VDataTableGroupHeaderRow } from \"./VDataTableGroupHeaderRow.js\";\nimport { makeVDataTableRowProps, VDataTableRow } from \"./VDataTableRow.js\"; // Composables\nimport { useExpanded } from \"./composables/expand.js\";\nimport { useGroupBy } from \"./composables/group.js\";\nimport { useHeaders } from \"./composables/headers.js\";\nimport { useSelection } from \"./composables/select.js\";\nimport { makeDisplayProps, useDisplay } from \"../../composables/display.js\";\nimport { useLocale } from \"../../composables/locale.js\"; // Utilities\nimport { Fragment, mergeProps } from 'vue';\nimport { genericComponent, getPrefixedEventHandlers, pick, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVDataTableRowsProps = propsFactory({\n color: String,\n loading: [Boolean, String],\n loadingText: {\n type: String,\n default: '$vuetify.dataIterator.loadingText'\n },\n hideNoData: Boolean,\n items: {\n type: Array,\n default: () => []\n },\n noDataText: {\n type: String,\n default: '$vuetify.noDataText'\n },\n rowProps: [Object, Function],\n cellProps: [Object, Function],\n ...pick(makeVDataTableRowProps(), ['collapseIcon', 'expandIcon', 'density']),\n ...pick(makeVDataTableGroupHeaderRowProps(), ['groupCollapseIcon', 'groupExpandIcon', 'density']),\n ...makeDisplayProps()\n}, 'VDataTableRows');\nexport const VDataTableRows = genericComponent()({\n name: 'VDataTableRows',\n inheritAttrs: false,\n props: makeVDataTableRowsProps(),\n setup(props, _ref) {\n let {\n attrs,\n slots\n } = _ref;\n const {\n columns\n } = useHeaders();\n const {\n expandOnClick,\n toggleExpand,\n isExpanded\n } = useExpanded();\n const {\n isSelected,\n toggleSelect\n } = useSelection();\n const {\n toggleGroup,\n isGroupOpen\n } = useGroupBy();\n const {\n t\n } = useLocale();\n const {\n mobile\n } = useDisplay(props);\n useRender(() => {\n const groupHeaderRowProps = pick(props, ['groupCollapseIcon', 'groupExpandIcon', 'density']);\n if (props.loading && (!props.items.length || slots.loading)) {\n return _createElementVNode(\"tr\", {\n \"class\": \"v-data-table-rows-loading\",\n \"key\": \"loading\"\n }, [_createElementVNode(\"td\", {\n \"colspan\": columns.value.length\n }, [slots.loading?.() ?? t(props.loadingText)])]);\n }\n if (!props.loading && !props.items.length && !props.hideNoData) {\n return _createElementVNode(\"tr\", {\n \"class\": \"v-data-table-rows-no-data\",\n \"key\": \"no-data\"\n }, [_createElementVNode(\"td\", {\n \"colspan\": columns.value.length\n }, [slots['no-data']?.() ?? t(props.noDataText)])]);\n }\n return _createElementVNode(_Fragment, null, [props.items.map((item, index) => {\n if (item.type === 'group') {\n const slotProps = {\n index,\n item,\n columns: columns.value,\n isExpanded,\n toggleExpand,\n isSelected,\n toggleSelect,\n toggleGroup,\n isGroupOpen\n };\n return slots['group-header'] ? slots['group-header'](slotProps) : _createVNode(VDataTableGroupHeaderRow, _mergeProps({\n \"key\": `group-header_${item.id}`,\n \"item\": item\n }, getPrefixedEventHandlers(attrs, ':groupHeader', () => slotProps), groupHeaderRowProps), slots);\n }\n if (item.type === 'group-summary') {\n const slotProps = {\n index,\n item,\n columns: columns.value,\n toggleGroup\n };\n return slots['group-summary']?.(slotProps) ?? '';\n }\n const slotProps = {\n index: item.virtualIndex ?? index,\n item: item.raw,\n internalItem: item,\n columns: columns.value,\n isExpanded,\n toggleExpand,\n isSelected,\n toggleSelect\n };\n const itemSlotProps = {\n ...slotProps,\n props: mergeProps({\n key: `item_${item.key ?? item.index}`,\n onClick: expandOnClick.value ? () => {\n toggleExpand(item);\n } : undefined,\n index,\n item,\n color: props.color,\n cellProps: props.cellProps,\n collapseIcon: props.collapseIcon,\n expandIcon: props.expandIcon,\n density: props.density,\n mobile: mobile.value\n }, getPrefixedEventHandlers(attrs, ':row', () => slotProps), typeof props.rowProps === 'function' ? props.rowProps({\n item: slotProps.item,\n index: slotProps.index,\n internalItem: slotProps.internalItem\n }) : props.rowProps)\n };\n return _createElementVNode(_Fragment, {\n \"key\": itemSlotProps.props.key\n }, [slots.item ? slots.item(itemSlotProps) : _createVNode(VDataTableRow, itemSlotProps.props, slots), isExpanded(item) && slots['expanded-row']?.(slotProps)]);\n })]);\n });\n return {};\n }\n});\n//# sourceMappingURL=VDataTableRows.js.map","import { createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createVNode as _createVNode } from \"vue\";\n// Styles\nimport \"./VTable.css\";\n\n// Composables\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeDensityProps, useDensity } from \"../../composables/density.js\";\nimport { makeTagProps } from \"../../composables/tag.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\"; // Utilities\nimport { convertToUnit, genericComponent, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVTableProps = propsFactory({\n fixedHeader: Boolean,\n fixedFooter: Boolean,\n height: [Number, String],\n hover: Boolean,\n striped: {\n type: String,\n default: null,\n validator: v => ['even', 'odd'].includes(v)\n },\n ...makeComponentProps(),\n ...makeDensityProps(),\n ...makeTagProps(),\n ...makeThemeProps()\n}, 'VTable');\nexport const VTable = genericComponent()({\n name: 'VTable',\n props: makeVTableProps(),\n setup(props, _ref) {\n let {\n slots,\n emit\n } = _ref;\n const {\n themeClasses\n } = provideTheme(props);\n const {\n densityClasses\n } = useDensity(props);\n useRender(() => _createVNode(props.tag, {\n \"class\": _normalizeClass(['v-table', {\n 'v-table--fixed-height': !!props.height,\n 'v-table--fixed-header': props.fixedHeader,\n 'v-table--fixed-footer': props.fixedFooter,\n 'v-table--has-top': !!slots.top,\n 'v-table--has-bottom': !!slots.bottom,\n 'v-table--hover': props.hover,\n 'v-table--striped-even': props.striped === 'even',\n 'v-table--striped-odd': props.striped === 'odd'\n }, themeClasses.value, densityClasses.value, props.class]),\n \"style\": _normalizeStyle(props.style)\n }, {\n default: () => [slots.top?.(), slots.default ? _createElementVNode(\"div\", {\n \"class\": \"v-table__wrapper\",\n \"style\": {\n height: convertToUnit(props.height)\n }\n }, [_createElementVNode(\"table\", null, [slots.default()])]) : slots.wrapper?.(), slots.bottom?.()]\n }));\n return {};\n }\n});\n//# sourceMappingURL=VTable.js.map","// Utilities\nimport { computed } from 'vue';\nimport { getPropertyFromItem, propsFactory } from \"../../../util/index.js\"; // Types\n// Composables\nexport const makeDataTableItemsProps = propsFactory({\n items: {\n type: Array,\n default: () => []\n },\n itemValue: {\n type: [String, Array, Function],\n default: 'id'\n },\n itemSelectable: {\n type: [String, Array, Function],\n default: null\n },\n rowProps: [Object, Function],\n cellProps: [Object, Function],\n returnObject: Boolean\n}, 'DataTable-items');\nexport function transformItem(props, item, index, columns) {\n const value = props.returnObject ? item : getPropertyFromItem(item, props.itemValue);\n const selectable = getPropertyFromItem(item, props.itemSelectable, true);\n const itemColumns = columns.reduce((obj, column) => {\n if (column.key != null) obj[column.key] = getPropertyFromItem(item, column.value);\n return obj;\n }, {});\n return {\n type: 'item',\n key: props.returnObject ? getPropertyFromItem(item, props.itemValue) : value,\n index,\n value,\n selectable,\n columns: itemColumns,\n raw: item\n };\n}\nexport function transformItems(props, items, columns) {\n return items.map((item, index) => transformItem(props, item, index, columns));\n}\nexport function useDataTableItems(props, columns) {\n const items = computed(() => transformItems(props, props.items, columns.value));\n return {\n items\n };\n}\n//# sourceMappingURL=items.js.map","// Utilities\nimport { watch } from 'vue';\nimport { deepEqual, getCurrentInstance } from \"../../../util/index.js\"; // Types\nexport function useOptions(_ref) {\n let {\n page,\n itemsPerPage,\n sortBy,\n groupBy,\n search\n } = _ref;\n const vm = getCurrentInstance('VDataTable');\n const options = () => ({\n page: page.value,\n itemsPerPage: itemsPerPage.value,\n sortBy: sortBy.value,\n groupBy: groupBy.value,\n search: search.value\n });\n let oldOptions = null;\n watch(options, value => {\n if (deepEqual(oldOptions, value)) return;\n\n // Reset page when searching\n if (oldOptions && oldOptions.search !== value.search) {\n page.value = 1;\n }\n vm.emit('update:options', value);\n oldOptions = value;\n }, {\n deep: true,\n immediate: true\n });\n}\n//# sourceMappingURL=options.js.map","import { Fragment as _Fragment, mergeProps as _mergeProps, createVNode as _createVNode, createElementVNode as _createElementVNode } from \"vue\";\n// Styles\nimport \"./VDataTable.css\";\n\n// Components\nimport { makeVDataTableFooterProps, VDataTableFooter } from \"./VDataTableFooter.js\";\nimport { makeVDataTableHeadersProps, VDataTableHeaders } from \"./VDataTableHeaders.js\";\nimport { makeVDataTableRowsProps, VDataTableRows } from \"./VDataTableRows.js\";\nimport { VDivider } from \"../VDivider/index.js\";\nimport { makeVTableProps, VTable } from \"../VTable/VTable.js\"; // Composables\nimport { makeDataTableExpandProps, provideExpanded } from \"./composables/expand.js\";\nimport { createGroupBy, makeDataTableGroupProps, provideGroupBy, useGroupedItems } from \"./composables/group.js\";\nimport { createHeaders, makeDataTableHeaderProps } from \"./composables/headers.js\";\nimport { makeDataTableItemsProps, useDataTableItems } from \"./composables/items.js\";\nimport { useOptions } from \"./composables/options.js\";\nimport { createPagination, makeDataTablePaginateProps, providePagination, usePaginatedItems } from \"./composables/paginate.js\";\nimport { makeDataTableSelectProps, provideSelection } from \"./composables/select.js\";\nimport { createSort, makeDataTableSortProps, provideSort, useSortedItems } from \"./composables/sort.js\";\nimport { provideDefaults } from \"../../composables/defaults.js\";\nimport { makeFilterProps, useFilter } from \"../../composables/filter.js\"; // Utilities\nimport { computed, toRef, toRefs } from 'vue';\nimport { genericComponent, omit, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeDataTableProps = propsFactory({\n ...makeVDataTableRowsProps(),\n hideDefaultBody: Boolean,\n hideDefaultFooter: Boolean,\n hideDefaultHeader: Boolean,\n width: [String, Number],\n search: String,\n ...makeDataTableExpandProps(),\n ...makeDataTableGroupProps(),\n ...makeDataTableHeaderProps(),\n ...makeDataTableItemsProps(),\n ...makeDataTableSelectProps(),\n ...makeDataTableSortProps(),\n ...omit(makeVDataTableHeadersProps(), ['multiSort', 'initialSortOrder']),\n ...makeVTableProps()\n}, 'DataTable');\nexport const makeVDataTableProps = propsFactory({\n ...makeDataTablePaginateProps(),\n ...makeDataTableProps(),\n ...makeFilterProps(),\n ...makeVDataTableFooterProps()\n}, 'VDataTable');\nexport const VDataTable = genericComponent()({\n name: 'VDataTable',\n props: makeVDataTableProps(),\n emits: {\n 'update:modelValue': value => true,\n 'update:page': value => true,\n 'update:itemsPerPage': value => true,\n 'update:sortBy': value => true,\n 'update:options': value => true,\n 'update:groupBy': value => true,\n 'update:expanded': value => true,\n 'update:currentItems': value => true\n },\n setup(props, _ref) {\n let {\n attrs,\n slots\n } = _ref;\n const {\n groupBy\n } = createGroupBy(props);\n const {\n initialSortOrder,\n sortBy,\n multiSort,\n mustSort\n } = createSort(props);\n const {\n page,\n itemsPerPage\n } = createPagination(props);\n const {\n disableSort\n } = toRefs(props);\n const {\n columns,\n headers,\n sortFunctions,\n sortRawFunctions,\n filterFunctions\n } = createHeaders(props, {\n groupBy,\n showSelect: toRef(() => props.showSelect),\n showExpand: toRef(() => props.showExpand)\n });\n const {\n items\n } = useDataTableItems(props, columns);\n const search = toRef(() => props.search);\n const {\n filteredItems\n } = useFilter(props, items, search, {\n transform: item => item.columns,\n customKeyFilter: filterFunctions\n });\n const {\n toggleSort\n } = provideSort({\n initialSortOrder,\n sortBy,\n multiSort,\n mustSort,\n page\n });\n const {\n sortByWithGroups,\n opened,\n extractRows,\n isGroupOpen,\n toggleGroup\n } = provideGroupBy({\n groupBy,\n sortBy,\n disableSort\n });\n const {\n sortedItems\n } = useSortedItems(props, filteredItems, sortByWithGroups, {\n transform: item => ({\n ...item.raw,\n ...item.columns\n }),\n sortFunctions,\n sortRawFunctions\n });\n const {\n flatItems\n } = useGroupedItems(sortedItems, groupBy, opened, () => !!slots['group-summary']);\n const itemsLength = computed(() => flatItems.value.length);\n const {\n startIndex,\n stopIndex,\n pageCount,\n setItemsPerPage\n } = providePagination({\n page,\n itemsPerPage,\n itemsLength\n });\n const {\n paginatedItems\n } = usePaginatedItems({\n items: flatItems,\n startIndex,\n stopIndex,\n itemsPerPage\n });\n const paginatedItemsWithoutGroups = computed(() => extractRows(paginatedItems.value));\n const {\n isSelected,\n select,\n selectAll,\n toggleSelect,\n someSelected,\n allSelected\n } = provideSelection(props, {\n allItems: items,\n currentPage: paginatedItemsWithoutGroups\n });\n const {\n isExpanded,\n toggleExpand\n } = provideExpanded(props);\n useOptions({\n page,\n itemsPerPage,\n sortBy,\n groupBy,\n search\n });\n provideDefaults({\n VDataTableRows: {\n hideNoData: toRef(() => props.hideNoData),\n noDataText: toRef(() => props.noDataText),\n loading: toRef(() => props.loading),\n loadingText: toRef(() => props.loadingText)\n }\n });\n const slotProps = computed(() => ({\n page: page.value,\n itemsPerPage: itemsPerPage.value,\n sortBy: sortBy.value,\n pageCount: pageCount.value,\n toggleSort,\n setItemsPerPage,\n someSelected: someSelected.value,\n allSelected: allSelected.value,\n isSelected,\n select,\n selectAll,\n toggleSelect,\n isExpanded,\n toggleExpand,\n isGroupOpen,\n toggleGroup,\n items: paginatedItemsWithoutGroups.value.map(item => item.raw),\n internalItems: paginatedItemsWithoutGroups.value,\n groupedItems: paginatedItems.value,\n columns: columns.value,\n headers: headers.value\n }));\n useRender(() => {\n const dataTableFooterProps = VDataTableFooter.filterProps(props);\n const dataTableHeadersProps = VDataTableHeaders.filterProps(omit(props, ['multiSort']));\n const dataTableRowsProps = VDataTableRows.filterProps(props);\n const tableProps = VTable.filterProps(props);\n return _createVNode(VTable, _mergeProps({\n \"class\": ['v-data-table', {\n 'v-data-table--show-select': props.showSelect,\n 'v-data-table--loading': props.loading\n }, props.class],\n \"style\": props.style\n }, tableProps, {\n \"fixedHeader\": props.fixedHeader || props.sticky\n }), {\n top: () => slots.top?.(slotProps.value),\n default: () => slots.default ? slots.default(slotProps.value) : _createElementVNode(_Fragment, null, [slots.colgroup?.(slotProps.value), !props.hideDefaultHeader && _createElementVNode(\"thead\", {\n \"key\": \"thead\"\n }, [_createVNode(VDataTableHeaders, _mergeProps(dataTableHeadersProps, {\n \"multiSort\": !!props.multiSort\n }), slots)]), slots.thead?.(slotProps.value), !props.hideDefaultBody && _createElementVNode(\"tbody\", null, [slots['body.prepend']?.(slotProps.value), slots.body ? slots.body(slotProps.value) : _createVNode(VDataTableRows, _mergeProps(attrs, dataTableRowsProps, {\n \"items\": paginatedItems.value\n }), slots), slots['body.append']?.(slotProps.value)]), slots.tbody?.(slotProps.value), slots.tfoot?.(slotProps.value)]),\n bottom: () => slots.bottom ? slots.bottom(slotProps.value) : !props.hideDefaultFooter && _createElementVNode(_Fragment, null, [_createVNode(VDivider, null, null), _createVNode(VDataTableFooter, dataTableFooterProps, {\n prepend: slots['footer.prepend']\n })])\n });\n });\n return {};\n }\n});\n//# sourceMappingURL=VDataTable.js.map","import { Fragment as _Fragment, mergeProps as _mergeProps, createVNode as _createVNode, createElementVNode as _createElementVNode } from \"vue\";\n// Components\nimport { makeDataTableProps } from \"./VDataTable.js\";\nimport { makeVDataTableFooterProps, VDataTableFooter } from \"./VDataTableFooter.js\";\nimport { VDataTableHeaders } from \"./VDataTableHeaders.js\";\nimport { VDataTableRows } from \"./VDataTableRows.js\";\nimport { VDivider } from \"../VDivider/index.js\";\nimport { VTable } from \"../VTable/index.js\"; // Composables\nimport { provideExpanded } from \"./composables/expand.js\";\nimport { createGroupBy, provideGroupBy, useGroupedItems } from \"./composables/group.js\";\nimport { createHeaders } from \"./composables/headers.js\";\nimport { useDataTableItems } from \"./composables/items.js\";\nimport { useOptions } from \"./composables/options.js\";\nimport { createPagination, makeDataTablePaginateProps, providePagination } from \"./composables/paginate.js\";\nimport { provideSelection } from \"./composables/select.js\";\nimport { createSort, provideSort } from \"./composables/sort.js\";\nimport { provideDefaults } from \"../../composables/defaults.js\"; // Utilities\nimport { computed, provide, toRef, toRefs } from 'vue';\nimport { genericComponent, omit, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVDataTableServerProps = propsFactory({\n itemsLength: {\n type: [Number, String],\n required: true\n },\n ...makeDataTablePaginateProps(),\n ...makeDataTableProps(),\n ...makeVDataTableFooterProps()\n}, 'VDataTableServer');\nexport const VDataTableServer = genericComponent()({\n name: 'VDataTableServer',\n props: makeVDataTableServerProps(),\n emits: {\n 'update:modelValue': value => true,\n 'update:page': page => true,\n 'update:itemsPerPage': page => true,\n 'update:sortBy': sortBy => true,\n 'update:options': options => true,\n 'update:expanded': options => true,\n 'update:groupBy': value => true\n },\n setup(props, _ref) {\n let {\n attrs,\n slots\n } = _ref;\n const {\n groupBy\n } = createGroupBy(props);\n const {\n initialSortOrder,\n sortBy,\n multiSort,\n mustSort\n } = createSort(props);\n const {\n page,\n itemsPerPage\n } = createPagination(props);\n const {\n disableSort\n } = toRefs(props);\n const itemsLength = computed(() => parseInt(props.itemsLength, 10));\n const {\n columns,\n headers\n } = createHeaders(props, {\n groupBy,\n showSelect: toRef(() => props.showSelect),\n showExpand: toRef(() => props.showExpand)\n });\n const {\n items\n } = useDataTableItems(props, columns);\n const {\n toggleSort\n } = provideSort({\n initialSortOrder,\n sortBy,\n multiSort,\n mustSort,\n page\n });\n const {\n opened,\n isGroupOpen,\n toggleGroup,\n extractRows\n } = provideGroupBy({\n groupBy,\n sortBy,\n disableSort\n });\n const {\n pageCount,\n setItemsPerPage\n } = providePagination({\n page,\n itemsPerPage,\n itemsLength\n });\n const {\n flatItems\n } = useGroupedItems(items, groupBy, opened, () => !!slots['group-summary']);\n const {\n isSelected,\n select,\n selectAll,\n toggleSelect,\n someSelected,\n allSelected\n } = provideSelection(props, {\n allItems: items,\n currentPage: items\n });\n const {\n isExpanded,\n toggleExpand\n } = provideExpanded(props);\n const itemsWithoutGroups = computed(() => extractRows(items.value));\n useOptions({\n page,\n itemsPerPage,\n sortBy,\n groupBy,\n search: toRef(() => props.search)\n });\n provide('v-data-table', {\n toggleSort,\n sortBy\n });\n provideDefaults({\n VDataTableRows: {\n hideNoData: toRef(() => props.hideNoData),\n noDataText: toRef(() => props.noDataText),\n loading: toRef(() => props.loading),\n loadingText: toRef(() => props.loadingText)\n }\n });\n const slotProps = computed(() => ({\n page: page.value,\n itemsPerPage: itemsPerPage.value,\n sortBy: sortBy.value,\n pageCount: pageCount.value,\n toggleSort,\n setItemsPerPage,\n someSelected: someSelected.value,\n allSelected: allSelected.value,\n isSelected,\n select,\n selectAll,\n toggleSelect,\n isExpanded,\n toggleExpand,\n isGroupOpen,\n toggleGroup,\n items: itemsWithoutGroups.value.map(item => item.raw),\n internalItems: itemsWithoutGroups.value,\n groupedItems: flatItems.value,\n columns: columns.value,\n headers: headers.value\n }));\n useRender(() => {\n const dataTableFooterProps = VDataTableFooter.filterProps(props);\n const dataTableHeadersProps = VDataTableHeaders.filterProps(omit(props, ['multiSort']));\n const dataTableRowsProps = VDataTableRows.filterProps(props);\n const tableProps = VTable.filterProps(props);\n return _createVNode(VTable, _mergeProps({\n \"class\": ['v-data-table', {\n 'v-data-table--loading': props.loading\n }, props.class],\n \"style\": props.style\n }, tableProps, {\n \"fixedHeader\": props.fixedHeader || props.sticky\n }), {\n top: () => slots.top?.(slotProps.value),\n default: () => slots.default ? slots.default(slotProps.value) : _createElementVNode(_Fragment, null, [slots.colgroup?.(slotProps.value), !props.hideDefaultHeader && _createElementVNode(\"thead\", {\n \"key\": \"thead\",\n \"class\": \"v-data-table__thead\",\n \"role\": \"rowgroup\"\n }, [_createVNode(VDataTableHeaders, _mergeProps(dataTableHeadersProps, {\n \"multiSort\": !!props.multiSort\n }), slots)]), slots.thead?.(slotProps.value), !props.hideDefaultBody && _createElementVNode(\"tbody\", {\n \"class\": \"v-data-table__tbody\",\n \"role\": \"rowgroup\"\n }, [slots['body.prepend']?.(slotProps.value), slots.body ? slots.body(slotProps.value) : _createVNode(VDataTableRows, _mergeProps(attrs, dataTableRowsProps, {\n \"items\": flatItems.value\n }), slots), slots['body.append']?.(slotProps.value)]), slots.tbody?.(slotProps.value), slots.tfoot?.(slotProps.value)]),\n bottom: () => slots.bottom ? slots.bottom(slotProps.value) : !props.hideDefaultFooter && _createElementVNode(_Fragment, null, [_createVNode(VDivider, null, null), _createVNode(VDataTableFooter, dataTableFooterProps, {\n prepend: slots['footer.prepend']\n })])\n });\n });\n }\n});\n//# sourceMappingURL=VDataTableServer.js.map","import { mdiPound } from '@mdi/js'\nimport { useI18n } from '../../ioc'\nimport { SvgIcon } from '../../svg-icon'\nimport { default as numeral } from 'numeral'\nimport { h, defineComponent, toRefs } from 'vue'\nimport { ControlMenu } from '../../control-menu'\nimport { VListItem } from 'vuetify/components/VList'\nimport { getDefaultsForPropFactory } from '../../common/utils'\nimport { IconValue } from '@nhtio/vuetifiable/composables/icons'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { makeControlMenuControlButtonProps } from '../../control-menu/props'\nimport { makeComponentProps } from '@nhtio/vuetifiable/composables/component'\nimport type { PropType, ExtractPublicPropTypes } from 'vue'\n\nconst makePublicPerPageSelectorProps = propsFactory(\n {\n icon: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiPound }),\n },\n ...makeControlMenuControlButtonProps({\n color: 'surface-light',\n }),\n numeralFormat: {\n type: String,\n default: '0,0',\n },\n },\n 'ResourcefulIndexPerPageSelectorProps'\n)\n\nexport type PerPageSelectorPublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makePublicPerPageSelectorProps>\n>\n\nexport const defaultsForPerPageSelectorPublicProps = getDefaultsForPropFactory(\n makePublicPerPageSelectorProps\n)\n\nexport const makePerPageSelectorProps = propsFactory(\n {\n perPage: {\n type: [String, Number],\n default: 20,\n },\n ...makePublicPerPageSelectorProps(),\n ...makeComponentProps(),\n },\n 'ResourcefulIndexPerPageSelector'\n)\n\nexport type PerPageSelectorProps = ExtractPublicPropTypes<\n ReturnType<typeof makePerPageSelectorProps>\n>\n\nexport const PerPageSelector = defineComponent({\n name: 'ResourcefulIndexPerPageSelector',\n props: makePerPageSelectorProps(),\n emits: ['changed'],\n setup(props, { emit }) {\n const t = useI18n()\n const options = [10, 20, 50, 100]\n const {\n perPage,\n numeralFormat,\n class: componentClass,\n style,\n icon,\n color,\n density,\n size,\n height,\n dividePrependIcon,\n elevation,\n } = toRefs(props)\n return () =>\n h(\n ControlMenu,\n {\n class: componentClass.value,\n style: style.value,\n icon: icon.value,\n activator: {\n color: color.value,\n density: density.value,\n size: size.value,\n height: height.value,\n dividePrependIcon: dividePrependIcon.value,\n elevation: elevation.value,\n },\n },\n {\n cta: () =>\n h('div', { class: 'd-flex align-center' }, [\n h('span', { class: 'me-2' }, [t('resourcefulIndex.perPage'), ':']),\n h('span', {}, [numeral(perPage.value).format(numeralFormat.value)]),\n ]),\n default: ({ close }: { close: () => void }) =>\n options.map((o) =>\n h(VListItem, {\n title: o,\n onClick: () => {\n emit('changed', o)\n close()\n },\n active: o === perPage.value,\n })\n ),\n }\n )\n },\n})\n","import { useI18n } from '../../ioc'\nimport { useLocale } from 'vuetify'\nimport { SvgIcon } from '../../svg-icon'\nimport { deepmerge } from 'deepmerge-ts'\nimport { default as numeral } from 'numeral'\nimport { printf as format } from 'fast-printf'\nimport { ControlMenu } from '../../control-menu'\nimport { ControlButton } from '../../control-button'\nimport { VListItem } from 'vuetify/components/VList'\nimport { omit } from '@nhtio/vuetifiable/util/helpers'\nimport { h, defineComponent, computed, toRefs } from 'vue'\nimport { useMountedInBrowser } from '../../common/composables'\nimport { IconValue } from '@nhtio/vuetifiable/composables/icons'\nimport { VVirtualScroll } from 'vuetify/components/VVirtualScroll'\nimport { makeControlButtonProps } from '../../control-button/props'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { getDefaultsForPropFactory, asAbsInt } from '../../common/utils'\nimport { mdiPageFirst, mdiPageLast, mdiChevronLeft, mdiChevronRight } from '@mdi/js'\nimport type { PropType, ExtractPublicPropTypes } from 'vue'\nimport type { ControlMenuProps } from '../../control-menu/props'\nimport type { ControlButtonProps } from '../../control-button/props'\n\nconst makeCommonPaginationControlButtonProps = propsFactory(\n {\n ...omit(\n makeControlButtonProps({\n color: 'surface-light',\n elevation: 2,\n }),\n [\n 'state',\n 'badge',\n 'type',\n 'to',\n 'size',\n 'height',\n 'appendIcon',\n 'dividePrependIcon',\n 'divideAppendIcon',\n 'cta',\n ]\n ),\n },\n 'ResourcefulIndexCommonControlButton'\n)\n\nconst defaultCommonControlButtonProps = getDefaultsForPropFactory(\n makeCommonPaginationControlButtonProps\n)\n\nexport type PaginationControlButtonProps = ExtractPublicPropTypes<\n ReturnType<typeof makeCommonPaginationControlButtonProps>\n>\n\nexport const makeResourcefulIndexPaginationControlsPublicProps = propsFactory(\n {\n appearance: {\n type: Object as PropType<PaginationControlButtonProps>,\n default: () => defaultCommonControlButtonProps,\n },\n iconLeftEnd: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiPageFirst }),\n },\n iconLeft: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiChevronLeft }),\n },\n iconRight: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiChevronRight }),\n },\n iconRightEnd: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiPageLast }),\n },\n numeralFormat: {\n type: String,\n default: '0,0',\n },\n },\n 'ResourcefulIndexPaginationControls'\n)\n\nexport const defaultsForResourcefulIndexPaginationControlsPublicProps = getDefaultsForPropFactory(\n makeResourcefulIndexPaginationControlsPublicProps\n)\n\nexport type ResourcefulIndexPaginationControlsPublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makeResourcefulIndexPaginationControlsPublicProps>\n>\n\nexport const makeResourcefulIndexPaginationControlsProps = propsFactory(\n {\n ...makeResourcefulIndexPaginationControlsPublicProps(),\n page: {\n type: [String, Number],\n default: 1,\n },\n perPage: {\n type: [String, Number],\n default: 20,\n },\n total: {\n type: [String, Number],\n default: 0,\n },\n },\n 'ResourcefulIndexPaginationControls'\n)\n\nexport type ResourcefulIndexPaginationControlsProps = ExtractPublicPropTypes<\n ReturnType<typeof makeResourcefulIndexPaginationControlsProps>\n>\n\nexport const ResourcefulIndexPaginationControls = defineComponent({\n name: 'ResourcefulIndexPaginationControls',\n props: makeResourcefulIndexPaginationControlsProps(),\n emits: ['changed'],\n setup(props, { emit }) {\n const t = useI18n()\n const { isRtl } = useLocale()\n const mountedInBrowser = useMountedInBrowser()\n const {\n appearance,\n iconLeftEnd,\n iconLeft,\n iconRight,\n iconRightEnd,\n numeralFormat,\n page,\n perPage,\n total,\n } = toRefs(props)\n const computedAppearance = computed(() =>\n deepmerge(defaultCommonControlButtonProps, appearance.value)\n )\n const iconFirst = computed(() => (isRtl.value ? iconRightEnd.value : iconLeftEnd.value))\n const iconPrev = computed(() => (isRtl.value ? iconRight.value : iconLeft.value))\n const iconNext = computed(() => (isRtl.value ? iconLeft.value : iconRight.value))\n const iconLast = computed(() => (isRtl.value ? iconLeftEnd.value : iconRightEnd.value))\n const pageNumber = computed(() => asAbsInt(page.value, 1))\n const perPageNumber = computed(() => asAbsInt(perPage.value, 20))\n const totalNumber = computed(() => asAbsInt(total.value, 0))\n const totalPages = computed(() =>\n totalNumber.value === 0 ? 1 : Math.ceil(totalNumber.value / perPageNumber.value)\n )\n const restrictedPageNumber = computed(() =>\n Math.min(Math.max(pageNumber.value, 1), totalPages.value)\n )\n const isFirstPage = computed(() => restrictedPageNumber.value <= 1)\n const isLastPage = computed(() => restrictedPageNumber.value >= totalPages.value)\n const hasPreviousPage = computed(() => !isFirstPage.value && totalPages.value > 0)\n const hasNextPage = computed(() => !isLastPage.value && totalPages.value > 0)\n\n const setPage = (newPage: number) => {\n let val = newPage\n if (val < 1) val = 1\n if (val > totalPages.value) val = totalPages.value\n if (val !== restrictedPageNumber.value) {\n emit('changed', val)\n }\n }\n\n const firstButtonBindings = computed<ControlButtonProps>(() => ({\n ...computedAppearance.value,\n prependIcon: iconFirst.value,\n state: {\n disabled: isFirstPage.value || totalPages.value === 0,\n },\n class: ['me-2'],\n onClick: () => setPage(1),\n }))\n const prevButtonBindings = computed<ControlButtonProps>(() => ({\n ...computedAppearance.value,\n prependIcon: iconPrev.value,\n state: {\n disabled: !hasPreviousPage.value,\n },\n onClick: () => setPage(restrictedPageNumber.value - 1),\n }))\n const nextButtonBindings = computed<ControlButtonProps>(() => ({\n ...computedAppearance.value,\n prependIcon: iconNext.value,\n state: {\n disabled: !hasNextPage.value,\n },\n onClick: () => setPage(restrictedPageNumber.value + 1),\n }))\n const lastButtonBindings = computed<ControlButtonProps>(() => ({\n ...computedAppearance.value,\n prependIcon: iconLast.value,\n state: {\n disabled: isLastPage.value || totalPages.value === 0,\n },\n class: ['ms-2'],\n onClick: () => setPage(totalPages.value),\n }))\n const jumperMenuBindings = computed<ControlMenuProps>(() => ({\n activator: {\n ...computedAppearance.value,\n state: {\n disabled: totalPages.value <= 1,\n },\n },\n cta: format(\n t('resourcefulIndex.pageOf'),\n numeral(restrictedPageNumber.value).format(numeralFormat.value),\n numeral(totalPages.value).format(numeralFormat.value)\n ),\n }))\n const pageOptions = computed(() => Array.from({ length: totalPages.value }, (_, i) => i + 1))\n\n return () =>\n h(\n 'div',\n { class: ['d-flex', 'align-center', 'justify-center'] },\n !mountedInBrowser.value\n ? []\n : [\n h(ControlButton, firstButtonBindings.value),\n h(ControlButton, prevButtonBindings.value),\n h(ControlMenu, jumperMenuBindings.value, {\n default: ({ close }: { close: () => void }) =>\n h(\n VVirtualScroll,\n {\n items: pageOptions.value,\n itemHeight: 40, // default height of a VListItem\n },\n {\n default: ({ item }: { item: number }) =>\n h(VListItem, {\n title: format(\n t('resourcefulIndex.jumpToPage'),\n numeral(item).format(numeralFormat.value)\n ),\n active: item === restrictedPageNumber.value,\n onClick: () => {\n setPage(item)\n close()\n },\n }),\n }\n ),\n }),\n h(ControlButton, nextButtonBindings.value),\n h(ControlButton, lastButtonBindings.value),\n ]\n )\n },\n})\n","import { useI18n } from '../../ioc'\nimport { useDisplay } from 'vuetify'\nimport { encode } from '@nhtio/encoder'\nimport { SvgIcon } from '../../svg-icon'\nimport { deepmerge } from 'deepmerge-ts'\nimport { default as numeral } from 'numeral'\nimport { default as ordinal } from 'ordinal'\nimport { printf as format } from 'fast-printf'\nimport { VImg } from 'vuetify/components/VImg'\nimport { VBtn } from 'vuetify/components/VBtn'\nimport { isObject } from '../../common/guards'\nimport { ControlMenu } from '../../control-menu'\nimport { VBadge } from 'vuetify/components/VBadge'\nimport { VHover } from 'vuetify/components/VHover'\nimport { VListItem } from 'vuetify/components/VList'\nimport { VDivider } from 'vuetify/components/VDivider'\nimport { VTooltip } from 'vuetify/components/VTooltip'\nimport { useResourcefulIndexScopedDisplay } from '../index'\nimport { pick, omit } from '@nhtio/vuetifiable/util/helpers'\nimport { VEmptyState } from 'vuetify/components/VEmptyState'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { propsAndEmitsFactory } from '../../common/factories'\nimport { makeControlMenuProps } from '../../control-menu/props'\nimport { default as errorSvg } from '../../icons/error.svg?url'\nimport { VDataTableServer } from 'vuetify/components/VDataTable'\nimport { IconValue } from '@nhtio/vuetifiable/composables/icons'\nimport { VContainer, VRow, VCol } from 'vuetify/components/VGrid'\nimport { default as warningSvg } from '../../icons/warning.svg?url'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { VProgressCircular } from 'vuetify/components/VProgressCircular'\nimport { makeResourcefulIndexActionsProps, useTableActions } from '../actions'\nimport { ExtractSlotDefinitions, NamedSlotParameters } from '../../common/types'\nimport { defaultsForPerPageSelectorPublicProps, PerPageSelector } from './_per_page_selector'\nimport { makeVDataTableServerProps } from '@nhtio/vuetifiable/components/VDataTable/VDataTableServer'\nimport {\n defaultsForResourcefulIndexPaginationControlsPublicProps,\n ResourcefulIndexPaginationControls,\n} from './_pagination_controls'\nimport {\n getDefaultsForPropFactory,\n stripUndefinedValuesFromObject,\n typeAndFormatToResourcefulFieldType,\n toUnreactive,\n} from '../../common/utils'\nimport {\n h,\n defineComponent,\n computed,\n toRefs,\n toDisplayString,\n warn as vueWarn,\n shallowRef,\n triggerRef,\n watch,\n cloneVNode,\n} from 'vue'\nimport {\n RBigIntField,\n RBooleanField,\n RDateTimeField,\n RDateField,\n RIntegerField,\n RNumberField,\n RStringField,\n RUnsignedIntegerField,\n} from '../../fields'\nimport {\n mdiSort,\n mdiEyeOffOutline,\n mdiPlus,\n mdiSortAscending,\n mdiSortDescending,\n mdiCheckboxBlankOutline,\n mdiCheckboxMultipleBlank,\n mdiCheckboxMultipleBlankOutline,\n mdiCheckboxMultipleOutline,\n mdiCheckboxOutline,\n} from '@mdi/js'\nimport type { ObjectSchema } from '@nhtio/validation'\nimport type { ResourcefulFieldLabelTerms } from '../props'\nimport type { ResourcefulFieldType } from '../../common/utils'\nimport type { ResourcefulSchemaDefinition, ResourcefulSortPayload } from '../types'\nimport type { PerPageSelectorPublicProps, PerPageSelectorProps } from './_per_page_selector'\nimport type { makeVEmptyStateProps } from '@nhtio/vuetifiable/components/VEmptyState/VEmptyState'\nimport type {\n PropType,\n ExtractPublicPropTypes,\n VNode,\n SlotsType,\n ComponentPublicInstance,\n} from 'vue'\nimport type {\n ResourcefulIndexPaginationControlsProps,\n ResourcefulIndexPaginationControlsPublicProps,\n} from './_pagination_controls'\nimport type {\n RBigIntFieldProps,\n RBooleanFieldProps,\n RDateTimeFieldProps,\n RDateFieldProps,\n RIntegerFieldProps,\n RNumberFieldProps,\n RStringFieldProps,\n RUnsignedIntegerFieldProps,\n} from '../../fields/'\n\ntype VDataTableServerSlots = ExtractSlotDefinitions<typeof VDataTableServer.slots>\ntype VDataTableServerNamedItemSlotParameters = NamedSlotParameters<\n VDataTableServerSlots,\n `item.${string}`\n>\ntype VDataTableServerHeaderDataTableSelectSlotParameters = NamedSlotParameters<\n VDataTableServerSlots,\n 'header.data-table-select'\n>\ntype VDataTableServerItemDataTableSelectSlotParameters = NamedSlotParameters<\n VDataTableServerSlots,\n 'item.data-table-select'\n>\n\ntype ColumnHeader = Omit<VDataTableServerHeader, 'value'> & { value: string }\n\nconst encoder = (_key: string, value: any) => {\n if (typeof value === 'bigint') {\n return value.toString()\n }\n if (typeof value === 'undefined') {\n return null\n }\n return value\n}\n\nconst makeSafeForJson = (val: any) => JSON.parse(JSON.stringify(val, encoder))\n\nexport type ResourcefulIndexTableSlots = {\n 'no-results-media': () => any\n 'no-data-media': () => any\n 'error-media': () => any\n 'loading-media': (args: { percent: number }) => any\n 'no-results-actions': () => any\n 'no-data-actions': () => any\n 'body-append': () => any\n 'aggregations'?: () => any\n} & {\n [slot: `item-${string}`]: (...args: VDataTableServerNamedItemSlotParameters) => any\n}\n\nexport const makeEmptyStateProps = propsFactory(\n {\n icon: {\n type: IconValue as PropType<IconValue>,\n default: () => h(VImg, { src: warningSvg }),\n },\n noDataTitleTerm: {\n type: String,\n default: 'resourcefulIndex.table.noData.title',\n },\n noDataTextTerm: {\n type: String,\n default: 'resourcefulIndex.table.noData.text',\n },\n noResultsTitleTerm: {\n type: String,\n default: 'resourcefulIndex.table.noResults.title',\n },\n noResultsTextTerm: {\n type: String,\n default: 'resourcefulIndex.table.noResults.text',\n },\n loadingTextTerm: {\n type: String,\n default: 'resourcefulIndex.table.loading.text',\n },\n },\n 'ResourcefulIndexEmptyState'\n)\n\nconst makeAddColumnButtonProps = propsFactory(\n {\n ...omit(makeControlMenuProps(), [\n 'icon',\n 'activator',\n 'cta',\n 'count',\n 'countFormat',\n 'badgeColor',\n ]),\n btnColor: {\n type: String as PropType<string>,\n default: 'surface-light',\n },\n },\n 'ResourcefulIndexAddColumnButton'\n)\n\nexport type AddColumnButtonProps = ExtractPublicPropTypes<\n ReturnType<typeof makeAddColumnButtonProps>\n>\n\nexport const defaultAddColumnButtonProps = getDefaultsForPropFactory(makeAddColumnButtonProps)\n\nexport type EmptyStateProps = ExtractPublicPropTypes<ReturnType<typeof makeEmptyStateProps>>\n\ntype VEmptyStatePublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVEmptyStateProps>>\n\nexport const defaultEmptyStateProps = getDefaultsForPropFactory(makeEmptyStateProps)\n\nexport type VDataTableServerProps = ExtractPublicPropTypes<\n ReturnType<typeof makeVDataTableServerProps>\n>\n\nexport type VDataTableServerHeaders = NonNullable<VDataTableServerProps['headers']>\nexport type VDataTableServerHeader = VDataTableServerHeaders[number]\n\nexport type ComputedColumnDefinition<T = any> = Omit<VDataTableServerHeader, 'value'> & {\n value: string\n compute: (row: Record<string, any>) => T\n kind: ResourcefulFieldType\n render?: (row: Record<string, any>) => string | VNode\n}\n\nexport type ComputedColumnDefinitions = Array<ComputedColumnDefinition>\n\nexport type FieldValueFormatter<T = any, O = any> = (\n value: T,\n row: Record<string, any>,\n overrides?: O\n) => string | VNode\nexport type FieldValueFormatters = Record<string, FieldValueFormatter>\n\ntype GeneralFieldOverrideProps = 'to' | 'href'\n\nexport type RBigIntFieldOverrideProps = Pick<RBigIntFieldProps, NumericFieldOverrideProps>\nexport type RBooleanFieldOverrideProps = Pick<\n RBooleanFieldProps,\n | GeneralFieldOverrideProps\n | 'renderAs'\n | 'textForTrue'\n | 'iconForTrue'\n | 'textForFalse'\n | 'iconForFalse'\n | 'textForUndetermined'\n | 'iconForUndetermined'\n | 'iconForSelectedRadio'\n | 'iconForUnselectedRadio'\n | 'selectMenuIcon'\n | 'ripple'\n>\nexport type RDateTimeFieldOverrideProps = Pick<\n RDateTimeFieldProps,\n GeneralFieldOverrideProps | 'displayFormat' | 'displayLocale' | 'displayTimezone'\n>\nexport type RDateFieldOverrideProps = Pick<\n RDateFieldProps,\n GeneralFieldOverrideProps | 'displayFormat' | 'displayLocale' | 'displayTimezone'\n>\ntype NumericFieldOverrideProps = GeneralFieldOverrideProps | 'format'\nexport type RIntegerFieldOverrideProps = Pick<RIntegerFieldProps, NumericFieldOverrideProps>\nexport type RNumberFieldOverrideProps = Pick<RNumberFieldProps, NumericFieldOverrideProps>\nexport type RStringFieldOverrideProps = Pick<\n RStringFieldProps,\n | GeneralFieldOverrideProps\n | 'autolink'\n | 'showPasswordIcon'\n | 'hidePasswordIcon'\n | 'passwordMaskIcon'\n | 'colorPickerIcon'\n | 'colorPickerModeIcon'\n>\nexport type RUnsignedIntegerFieldOverrideProps = Pick<\n RUnsignedIntegerFieldProps,\n NumericFieldOverrideProps\n>\n\nexport type FieldOverrideProps =\n | RBigIntFieldOverrideProps\n | RBooleanFieldOverrideProps\n | RDateTimeFieldOverrideProps\n | RDateFieldOverrideProps\n | RIntegerFieldOverrideProps\n | RNumberFieldOverrideProps\n | RStringFieldOverrideProps\n | RUnsignedIntegerFieldOverrideProps\n\nconst extractRBigIntFieldOverrideProps = (props: any): RBigIntFieldOverrideProps => {\n if (!isObject(props)) {\n return {} as RBigIntFieldOverrideProps\n }\n return stripUndefinedValuesFromObject({\n to: props.to,\n href: props.href,\n format: props.format,\n }) as RBigIntFieldOverrideProps\n}\nconst extractRBooleanFieldOverrideProps = (props: any): RBooleanFieldOverrideProps => {\n if (!isObject(props)) {\n return {} as RBooleanFieldOverrideProps\n }\n return stripUndefinedValuesFromObject({\n to: props.to,\n href: props.href,\n renderAs: props.renderAs,\n textForTrue: props.textForTrue,\n iconForTrue: props.iconForTrue,\n textForFalse: props.textForFalse,\n iconForFalse: props.iconForFalse,\n textForUndetermined: props.textForUndetermined,\n iconForUndetermined: props.iconForUndetermined,\n iconForSelectedRadio: props.iconForSelectedRadio,\n iconForUnselectedRadio: props.iconForUnselectedRadio,\n selectMenuIcon: props.selectMenuIcon,\n ripple: props.ripple,\n }) as RBooleanFieldOverrideProps\n}\nconst extractRDateTimeFieldOverrideProps = (props: any): RDateTimeFieldOverrideProps => {\n if (!isObject(props)) {\n return {} as RDateTimeFieldOverrideProps\n }\n return stripUndefinedValuesFromObject({\n to: props.to,\n href: props.href,\n displayFormat: props.displayFormat,\n displayLocale: props.displayLocale,\n displayTimezone: props.displayTimezone,\n }) as RDateTimeFieldOverrideProps\n}\nconst extractRDateFieldOverrideProps = (props: any): RDateFieldOverrideProps => {\n if (!isObject(props)) {\n return {} as RDateFieldOverrideProps\n }\n return stripUndefinedValuesFromObject({\n to: props.to,\n href: props.href,\n displayFormat: props.displayFormat,\n displayLocale: props.displayLocale,\n displayTimezone: props.displayTimezone,\n }) as RDateFieldOverrideProps\n}\nconst extractRIntegerFieldOverrideProps = (props: any): RIntegerFieldOverrideProps => {\n if (!isObject(props)) {\n return {} as RIntegerFieldOverrideProps\n }\n return stripUndefinedValuesFromObject({\n to: props.to,\n href: props.href,\n format: props.format,\n }) as RIntegerFieldOverrideProps\n}\nconst extractRNumberFieldOverrideProps = (props: any): RNumberFieldOverrideProps => {\n if (!isObject(props)) {\n return {} as RNumberFieldOverrideProps\n }\n return stripUndefinedValuesFromObject({\n to: props.to,\n href: props.href,\n format: props.format,\n }) as RNumberFieldOverrideProps\n}\nconst extractRStringFieldOverrideProps = (props: any): RStringFieldOverrideProps => {\n if (!isObject(props)) {\n return {} as RStringFieldOverrideProps\n }\n return stripUndefinedValuesFromObject({\n to: props.to,\n href: props.href,\n format: props.format,\n }) as RStringFieldOverrideProps\n}\nconst extractRUnsignedIntegerFieldOverrideProps = (\n props: any\n): RUnsignedIntegerFieldOverrideProps => {\n if (!isObject(props)) {\n return {} as RUnsignedIntegerFieldOverrideProps\n }\n return stripUndefinedValuesFromObject({\n to: props.to,\n href: props.href,\n format: props.format,\n }) as RUnsignedIntegerFieldOverrideProps\n}\n\nexport type GeneralFieldOverrideOptions = {\n bigint?: RBigIntFieldOverrideProps\n boolean?: RBooleanFieldOverrideProps\n integer?: RIntegerFieldOverrideProps\n number?: RNumberFieldOverrideProps\n dateTime?: RDateTimeFieldOverrideProps\n date?: RDateFieldOverrideProps\n string?: RStringFieldOverrideProps\n unsignedInteger?: RUnsignedIntegerFieldOverrideProps\n}\n\nexport type FieldSpecificOverrideOptions = Record<string, FieldOverrideProps>\n\nexport const renderAsBigint: FieldValueFormatter<\n RBigIntFieldProps['modelValue'],\n RBigIntFieldOverrideProps\n> = (\n value: RBigIntFieldProps['modelValue'],\n _row: Record<string, any>,\n overrides: RBigIntFieldOverrideProps = {}\n) =>\n h(RBigIntField, {\n modelValue: value,\n renderMode: 'read',\n ...overrides,\n } satisfies RBigIntFieldProps)\nexport const renderAsBoolean: FieldValueFormatter<\n RBooleanFieldProps['modelValue'],\n RBooleanFieldOverrideProps\n> = (\n value: RBooleanFieldProps['modelValue'],\n _row: Record<string, any>,\n overrides: RBooleanFieldOverrideProps = {}\n) =>\n h(RBooleanField, {\n modelValue: value,\n renderMode: 'read',\n ...overrides,\n } satisfies RBooleanFieldProps)\nexport const renderAsInteger: FieldValueFormatter<\n RIntegerFieldProps['modelValue'],\n RIntegerFieldOverrideProps\n> = (\n value: RIntegerFieldProps['modelValue'],\n _row: Record<string, any>,\n overrides: RIntegerFieldOverrideProps = {}\n) =>\n h(RIntegerField, {\n modelValue: value,\n renderMode: 'read',\n ...overrides,\n } satisfies RIntegerFieldProps)\nexport const renderAsNumber: FieldValueFormatter<\n RNumberFieldProps['modelValue'],\n RNumberFieldOverrideProps\n> = (\n value: RNumberFieldProps['modelValue'],\n _row: Record<string, any>,\n overrides: RNumberFieldOverrideProps = {}\n) =>\n h(RNumberField, {\n modelValue: value,\n renderMode: 'read',\n ...overrides,\n } satisfies RNumberFieldProps)\nexport const renderAsDateTime: FieldValueFormatter<\n RDateTimeFieldProps['modelValue'],\n RDateTimeFieldOverrideProps\n> = (\n value: RDateTimeFieldProps['modelValue'],\n _row: Record<string, any>,\n overrides: RDateTimeFieldOverrideProps = {}\n) =>\n h(RDateTimeField, {\n modelValue: value,\n renderMode: 'read',\n ...overrides,\n } satisfies RDateTimeFieldProps)\nexport const renderAsDate: FieldValueFormatter<\n RDateFieldProps['modelValue'],\n RDateFieldOverrideProps\n> = (\n value: RDateFieldProps['modelValue'],\n _row: Record<string, any>,\n overrides: RDateFieldOverrideProps = {}\n) =>\n h(RDateField, {\n modelValue: value,\n renderMode: 'read',\n ...overrides,\n } satisfies RDateFieldProps)\nexport const renderAsString: FieldValueFormatter<\n RStringFieldProps['modelValue'],\n RStringFieldOverrideProps\n> = (\n value: RStringFieldProps['modelValue'],\n _row: Record<string, any>,\n overrides: RStringFieldOverrideProps = {}\n) =>\n h(RStringField, {\n modelValue: value,\n renderMode: 'read',\n ...overrides,\n } satisfies RStringFieldProps)\nexport const renderAsUnsignedInteger: FieldValueFormatter<\n RUnsignedIntegerFieldProps['modelValue'],\n RUnsignedIntegerFieldOverrideProps\n> = (\n value: RUnsignedIntegerFieldProps['modelValue'],\n _row: Record<string, any>,\n overrides: RUnsignedIntegerFieldOverrideProps = {}\n) =>\n h(RUnsignedIntegerField, {\n modelValue: value,\n renderMode: 'read',\n ...overrides,\n } satisfies RUnsignedIntegerFieldProps)\n\nexport const { makeProps: makeResourcefulIndexTableProps, emits: resourcefulIndexTableEmits } =\n propsAndEmitsFactory(\n {\n ...pick(\n makeVDataTableServerProps({\n sortAscIcon: () => h(SvgIcon, { d: mdiSortAscending }),\n sortDescIcon: () => h(SvgIcon, { d: mdiSortDescending }),\n }),\n [\n 'cellProps',\n 'density',\n 'hover',\n 'items',\n 'rowProps',\n 'search',\n 'loading',\n 'sortAscIcon',\n 'sortDescIcon',\n ]\n ),\n errorCode: {\n type: [String, Number] as PropType<string | number | undefined>,\n default: undefined,\n },\n sortUnsortedIcon: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiSort }),\n },\n removeColumnIcon: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiEyeOffOutline }),\n },\n addColumnIcon: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiPlus }),\n },\n possibleFields: {\n type: Object as PropType<ResourcefulSchemaDefinition>,\n default: () => ({}),\n },\n showingFields: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n sortableFields: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n currentSorting: {\n type: Object as PropType<ResourcefulSortPayload>,\n default: () => ({}),\n },\n labels: {\n type: Object as PropType<ResourcefulFieldLabelTerms>,\n default: () => ({}),\n },\n page: {\n type: [String, Number],\n default: 0,\n },\n perPage: {\n type: [String, Number],\n default: 0,\n },\n total: {\n type: [String, Number],\n default: 0,\n },\n percent: {\n type: Number,\n default: 0,\n },\n emptyState: {\n type: Object as PropType<EmptyStateProps>,\n default: () => defaultEmptyStateProps,\n },\n progressColor: {\n type: String as PropType<string | undefined>,\n default: undefined,\n },\n addColumnButton: {\n type: Object as PropType<AddColumnButtonProps>,\n default: () => defaultAddColumnButtonProps,\n },\n perPageSelector: {\n type: Object as PropType<PerPageSelectorPublicProps>,\n default: () => defaultsForPerPageSelectorPublicProps,\n },\n pagination: {\n type: Object as PropType<ResourcefulIndexPaginationControlsPublicProps>,\n default: () => defaultsForResourcefulIndexPaginationControlsPublicProps,\n },\n computedColumns: {\n type: Array as PropType<ComputedColumnDefinitions>,\n default: () => [],\n },\n formatters: {\n type: Object as PropType<FieldValueFormatters>,\n default: () => ({}),\n },\n typedFieldOptions: {\n type: Object as PropType<GeneralFieldOverrideOptions | undefined>,\n default: undefined,\n },\n specificFieldOptions: {\n type: Object as PropType<FieldSpecificOverrideOptions | undefined>,\n default: undefined,\n },\n bulkEditingSchema: {\n type: Object as PropType<ObjectSchema | undefined>,\n default: undefined,\n },\n selectedItems: {\n type: Array as PropType<any[]>,\n default: () => [],\n },\n ...makeResourcefulIndexActionsProps(),\n },\n {\n 'toggle:sorting': (column: string) =>\n 'string' === typeof column && column.trim().length > 0 && column !== 'id',\n 'delete:column': (column: string) =>\n 'string' === typeof column && column.trim().length > 0 && column !== 'id',\n 'add:column': (column: string) =>\n 'string' === typeof column && column.trim().length > 0 && column !== 'id',\n 'update:perPage': (perPage: number) =>\n typeof perPage === 'number' &&\n !Number.isNaN(perPage) &&\n Number.isInteger(perPage) &&\n perPage > 0 &&\n perPage <= 100,\n 'update:page': (page: number) =>\n typeof page === 'number' && !Number.isNaN(page) && Number.isInteger(page) && page > 0,\n 'update:selectedItems': (selected: any[]) =>\n Array.isArray(selected) && selected.every((s) => isObject(s)),\n },\n 'ResourcefulIndexTable'\n )\n\nexport type ResourcefulIndexTableProps = ExtractPublicPropTypes<\n ReturnType<typeof makeResourcefulIndexTableProps>\n>\n\nexport const makeResourcefulIndexTablePublicProps = propsFactory(\n {\n ...omit(makeResourcefulIndexTableProps(), [\n 'search',\n 'loading',\n 'percent',\n 'items',\n 'possibleFields',\n 'showingFields',\n 'sortableFields',\n 'currentSorting',\n 'labels',\n 'total',\n 'perPage',\n 'progressColor',\n 'addColumnButton',\n ]),\n },\n 'ResourcefulIndexTablePublic'\n)\n\nexport type ResourcefulIndexTablePublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makeResourcefulIndexTablePublicProps>\n>\n\nexport interface OnVTableServerOptionsUpdateOptions {\n groupBy: VDataTableServerProps['groupBy']\n sortBy: VDataTableServerProps['sortBy']\n page: VDataTableServerProps['page']\n itemsPerPage: VDataTableServerProps['itemsPerPage']\n search: VDataTableServerProps['search']\n}\n\nconst memoizedEmptySingleCheckboxIcon = () => h(SvgIcon, { d: mdiCheckboxBlankOutline })\nconst memoizedEmptyMultipleCheckboxIcon = () => h(SvgIcon, { d: mdiCheckboxMultipleBlankOutline })\nconst memoizedPartialMultipleCheckboxIcon = () => h(SvgIcon, { d: mdiCheckboxMultipleBlank })\nconst memoizedFullSingleCheckboxIcon = () => h(SvgIcon, { d: mdiCheckboxOutline })\nconst memoizedFullMultipleCheckboxIcon = () => h(SvgIcon, { d: mdiCheckboxMultipleOutline })\n\nexport const ResourcefulIndexTable = defineComponent({\n name: 'ResourcefulIndexTable',\n props: makeResourcefulIndexTableProps(),\n emits: resourcefulIndexTableEmits,\n slots: Object as SlotsType<ResourcefulIndexTableSlots>,\n setup(props, { slots, emit }) {\n const t = useI18n()\n const { smAndDown, platform, xs } = useResourcefulIndexScopedDisplay()\n const { mdAndDown: mdAndDownDisplay } = useDisplay()\n const likelyTouchable = computed(\n () =>\n platform.value.touch ||\n platform.value.android ||\n platform.value.ios ||\n mdAndDownDisplay.value\n )\n const {\n cellProps,\n density,\n hover,\n items,\n rowProps,\n search,\n loading,\n percent,\n possibleFields,\n showingFields,\n sortableFields,\n currentSorting,\n labels,\n total,\n emptyState: customizedEmptyState,\n sortAscIcon,\n sortDescIcon,\n sortUnsortedIcon,\n removeColumnIcon,\n addColumnIcon,\n addColumnButton,\n perPageSelector,\n perPage,\n pagination,\n page,\n formatters,\n typedFieldOptions,\n specificFieldOptions,\n errorCode,\n bulkEditingSchema,\n selectedItems: externalSelectedItems,\n actions,\n } = toRefs(props)\n const {\n renderActionsForRecord,\n reactiveContextMenuRenderer,\n openContextMenuForRecord,\n renderClipboardFeedback: renderCopyUrlActionClipboardFeedback,\n isProcessing: recordActionsAreProcessing,\n } = useTableActions(actions, loading)\n const emptyState = computed(() => deepmerge(defaultEmptyStateProps, customizedEmptyState.value))\n const computedShowingFields = computed(() => {\n const ret = [...showingFields.value]\n return ret.includes('id') ? ret : ['id', ...ret]\n })\n const normalizedTypedFieldOptions = computed<Required<GeneralFieldOverrideOptions>>(() =>\n deepmerge(\n {\n bigint: {},\n boolean: {},\n integer: {},\n number: {},\n dateTime: {},\n date: {},\n string: {},\n unsignedInteger: {},\n },\n typedFieldOptions.value || {}\n )\n )\n const normalizedSpecificFieldOptions = computed(() =>\n deepmerge({}, specificFieldOptions.value || {})\n )\n const headers = computed<VDataTableServerHeaders>(() =>\n [...computedShowingFields.value].map((f) => {\n const asPossible = possibleFields.value[f] || {}\n if (asPossible.type === 'computed' && asPossible['x-table-header-definition']) {\n return asPossible['x-table-header-definition'] as VDataTableServerHeader\n }\n return {\n key: f,\n value: f,\n title: labels.value[f] ? t(labels.value[f]) : t(f),\n sortable: false,\n nowrap: true,\n }\n })\n )\n const addColumnButtonBindings = computed<AddColumnButtonProps>(\n () =>\n deepmerge(\n stripUndefinedValuesFromObject({\n ...defaultAddColumnButtonProps,\n btnColor: undefined,\n }),\n stripUndefinedValuesFromObject({\n ...addColumnButton.value,\n btnColor: undefined,\n }),\n {\n icon: addColumnIcon.value,\n activator: deepmerge(\n {\n size: 'x-small',\n },\n {\n color: (defaultAddColumnButtonProps as any).btnColor,\n },\n {\n color: addColumnButton.value.btnColor,\n }\n ),\n }\n ) as AddColumnButtonProps\n )\n const unshownFields = computed(() =>\n Object.entries(possibleFields.value)\n .filter(([k]) => !computedShowingFields.value.includes(k))\n .map(([k, v]) => ({ key: k, ...v, label: labels.value[k] ? t(labels.value[k]) : t(k) }))\n )\n const rowHeight = computed(() => {\n if (density.value === 'comfortable') return 48\n if (density.value === 'compact') return 40\n return 56 // default density\n })\n const computedTableHeight = computed(() => {\n const base = xs.value ? 162 : 82\n if (items.value.length === 0) {\n return base + 310\n }\n return base + items.value.length * rowHeight.value\n })\n const comparisonHeight = computed(() => (xs.value ? 512 : 432))\n const onCellContextMenu = (\n item: any,\n _column: VDataTableServerHeader,\n e: MouseEvent | TouchEvent\n ) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n openContextMenuForRecord(e, toUnreactive(item))\n }\n let longPressTimeout: ReturnType<typeof setTimeout> | undefined\n const onCellTouchStart = (\n item: any,\n column: VDataTableServerHeader,\n e: MouseEvent | TouchEvent\n ) => {\n if (!likelyTouchable.value) return\n if (e.type === 'click' && 'button' in e && e.button !== 0) return\n if (longPressTimeout) clearTimeout(longPressTimeout)\n longPressTimeout = setTimeout(() => {\n onCellContextMenu(item, column, e)\n }, 600)\n }\n const onCellTouchEnd = (\n _item: any,\n _column: VDataTableServerHeader,\n _e: MouseEvent | TouchEvent\n ) => {\n if (!likelyTouchable.value) return\n if (longPressTimeout) {\n clearTimeout(longPressTimeout)\n longPressTimeout = undefined\n }\n }\n const canBulkEdit = computed(() => 'object' === typeof bulkEditingSchema.value)\n const selectedItems = shallowRef<any[]>([])\n const showSelect = computed(() => items.value.length > 1 && canBulkEdit.value)\n watch(\n externalSelectedItems,\n (is) => {\n if (encode(selectedItems.value) === encode(is)) {\n return\n }\n selectedItems.value = is\n triggerRef(selectedItems)\n },\n { immediate: true, deep: true }\n )\n const dataTableBindings = computed<VDataTableServerProps>(() => ({\n 'headers':\n actions.value.length > 0\n ? [\n {\n key: '__data_table_actions',\n value: '__data_table_actions',\n sortable: false,\n nowrap: true,\n headerProps: { class: ['__resourceful_index_actions_header', 'px-0'] },\n cellProps: {\n class: ['__resourceful_index_actions_cell', 'px-0'],\n style: { padding: '0 !important', width: 0 },\n },\n },\n ...headers.value,\n ]\n : headers.value,\n 'density': density.value,\n 'hover': hover.value,\n 'items': items.value,\n 'rowProps': rowProps.value,\n 'search': search.value,\n 'itemsLength': total.value,\n 'hideDefaultFooter': true,\n 'style': {\n background: 'transparent',\n position: 'relative',\n },\n 'loading': loading.value,\n 'onUpdate:options': (_options: OnVTableServerOptionsUpdateOptions) => {},\n // workaround used to enforce minimum height\n // since vuetify's VDataTable* components do not have this option\n 'height':\n computedTableHeight.value < comparisonHeight.value ? comparisonHeight.value : undefined,\n // used to enable right-click & context menu on cells\n 'cellProps'({ item, column }: { item: any; column: VDataTableServerHeader }) {\n return {\n ...cellProps.value,\n onContextmenu: (e: MouseEvent) =>\n onCellContextMenu(toUnreactive(item), toUnreactive(column as any) as any, e),\n onMousedown: (e: MouseEvent) =>\n onCellTouchStart(toUnreactive(item), toUnreactive(column as any) as any, e),\n onTouchstart: (e: TouchEvent) =>\n onCellTouchStart(toUnreactive(item), toUnreactive(column as any) as any, e),\n onMouseup: (e: MouseEvent) =>\n onCellTouchEnd(toUnreactive(item), toUnreactive(column as any) as any, e),\n onTouchend: (e: TouchEvent) =>\n onCellTouchEnd(toUnreactive(item), toUnreactive(column as any) as any, e),\n onTouchcancel: (e: TouchEvent) =>\n onCellTouchEnd(toUnreactive(item), toUnreactive(column as any) as any, e),\n }\n },\n 'returnObject': true,\n 'modelValue': selectedItems.value,\n 'onUpdate:modelValue': (val: any[]) => {\n selectedItems.value = val\n triggerRef(selectedItems)\n emit('update:selectedItems', val)\n },\n 'showSelect': showSelect.value,\n }))\n const emptyStateBindings = computed<VEmptyStatePublicProps>(() =>\n stripUndefinedValuesFromObject({\n icon: emptyState.value.icon,\n headline: errorCode.value\n ? t('resourcefulIndex.table.badRequest.title')\n : search.value\n ? t(emptyState.value.noResultsTitleTerm || 'resourcefulIndex.table.noResults.title')\n : t(emptyState.value.noDataTitleTerm || 'resourcefulIndex.table.noData.title'),\n text: errorCode.value\n ? format(t('resourcefulIndex.table.badRequest.text'), errorCode.value)\n : search.value\n ? t(emptyState.value.noResultsTextTerm || 'resourcefulIndex.table.noResults.text')\n : t(emptyState.value.noDataTextTerm || 'resourcefulIndex.table.noData.text'),\n class: ['my-7'],\n height: 320,\n })\n )\n const perPageBindings = computed<PerPageSelectorProps>(() =>\n deepmerge(defaultsForPerPageSelectorPublicProps, perPageSelector.value, {\n perPage: perPage.value,\n onChanged: (newPerPage: number) => {\n emit('update:perPage', newPerPage)\n },\n })\n )\n const paginationBindings = computed<ResourcefulIndexPaginationControlsProps>(() =>\n deepmerge(defaultsForResourcefulIndexPaginationControlsPublicProps, pagination.value, {\n page: page.value,\n perPage: perPage.value,\n total: total.value,\n onChanged: (newPage: number) => {\n emit('update:page', newPage)\n },\n })\n )\n const paginationRow = computed(() =>\n h(VContainer, { fluid: true, class: ['py-0'] }, () => [\n h(VRow, {}, () => [\n h(\n VCol,\n {\n cols: 12,\n md: 6,\n class: [\n 'px-1',\n 'd-flex',\n {\n 'pb-0': smAndDown.value,\n 'justify-md-start': true,\n 'justify-center': true,\n },\n ],\n },\n () => h(PerPageSelector, perPageBindings.value)\n ),\n h(\n VCol,\n {\n cols: 12,\n md: 6,\n class: [\n 'px-1',\n 'd-flex',\n {\n 'pt-0': smAndDown.value,\n 'justify-md-end': true,\n 'justify-center': true,\n },\n ],\n },\n () => h(ResourcefulIndexPaginationControls, paginationBindings.value)\n ),\n ]),\n ])\n )\n useRender(() =>\n h(\n VDataTableServer,\n dataTableBindings.value,\n // eslint-disable-next-line @nht/require-function-slots-for-programmatic-components\n deepmerge(\n {\n 'no-data': () =>\n h(\n VEmptyState,\n emptyStateBindings.value,\n // eslint-disable-next-line @nht/require-function-slots-for-programmatic-components\n stripUndefinedValuesFromObject({\n media: errorCode.value\n ? () =>\n slots['error-media'] ? slots['error-media']!() : h(VImg, { src: errorSvg })\n : search.value && slots['no-results-media']\n ? () => slots['no-results-media']!()\n : !search.value && slots['no-data-media']\n ? () => slots['no-data-media']!()\n : undefined,\n actions: () =>\n errorCode.value\n ? undefined\n : search.value && slots['no-results-actions']\n ? slots['no-results-actions']!()\n : !search.value && slots['no-data-actions']\n ? slots['no-data-actions']!()\n : undefined,\n })\n ),\n 'loader': () => h('span'),\n 'loading': () =>\n h(\n VEmptyState,\n {\n headline: numeral(percent.value / 100).format('0%'),\n text: t(\n emptyState.value.loadingTextTerm || 'resourcefulIndex.table.loading.text'\n ),\n class: ['my-7'],\n height: 320,\n },\n {\n media: () =>\n slots['loading-media']\n ? slots['loading-media']({ percent: percent.value })\n : h(VProgressCircular, {\n modelValue: percent.value,\n color: props.progressColor,\n size: 96,\n width: 10,\n }),\n }\n ),\n 'top': () => [\n slots.aggregations ? slots.aggregations!() : null,\n slots.aggregations ? h(VDivider) : null,\n cloneVNode(paginationRow.value),\n h(VDivider),\n ],\n // 'body.prepend': ({ columns }: { columns: VDataTableServerHeaders }) =>\n // h('tr', {}, [\n // h('td', { colspan: columns.length }, [\n // h('div', { class: ['d-flex', 'justify-center'] }, 'Got to Before Body'),\n // ]),\n // ]),\n 'body.append': ({}: { columns: VDataTableServerHeaders }) => [\n // h('tr', {}, [\n // h('td', { colspan: columns.length }, [\n // h('div', { class: ['d-flex', 'justify-center'] }, 'Got to After Body'),\n // ]),\n // ]),\n slots['body-append'] ? slots['body-append']!() : undefined,\n ],\n 'bottom': () => [\n h(VDivider),\n cloneVNode(paginationRow.value),\n reactiveContextMenuRenderer(),\n renderCopyUrlActionClipboardFeedback(),\n ],\n 'header.data-table-select': (\n ...args: VDataTableServerHeaderDataTableSelectSlotParameters\n ) => {\n const { selectAll, someSelected, allSelected } = args[0]\n return h(VBtn, {\n icon: allSelected\n ? memoizedFullMultipleCheckboxIcon\n : someSelected\n ? memoizedPartialMultipleCheckboxIcon\n : memoizedEmptyMultipleCheckboxIcon,\n variant: 'text',\n size: 'small',\n onClick: (e: MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n selectAll(!allSelected)\n },\n onKeydown: (e: KeyboardEvent) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault()\n e.stopPropagation()\n selectAll(!allSelected)\n }\n },\n disabled: loading.value === true || recordActionsAreProcessing.value === true,\n })\n },\n 'item.data-table-select': (\n ...args: VDataTableServerItemDataTableSelectSlotParameters\n ) => {\n const { item, index, isSelected, toggleSelect } = args[0]\n const asSelectable = { value: item, selectable: true }\n return h(VBtn, {\n icon: isSelected(asSelectable)\n ? memoizedFullSingleCheckboxIcon\n : memoizedEmptySingleCheckboxIcon,\n variant: 'text',\n size: 'small',\n onClick: (e: MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n toggleSelect(asSelectable, index, e)\n },\n onKeydown: (e: KeyboardEvent) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault()\n e.stopPropagation()\n toggleSelect(asSelectable, index)\n }\n },\n disabled: loading.value === true || recordActionsAreProcessing.value === true,\n })\n },\n 'item.__data_table_actions': ({\n item: actionableRecord,\n }: VDataTableServerNamedItemSlotParameters[0]) => {\n return renderActionsForRecord(actionableRecord)\n },\n },\n Object.assign(\n {},\n ...[...headers.value].map((cr: VDataTableServerHeader, headerIndex) => {\n const c: ColumnHeader = cr as unknown as ColumnHeader\n const isSortable = sortableFields.value.includes(c.value)\n const currentSort = currentSorting.value[c.value]\n const currentSortIndex = Object.keys(currentSorting.value).indexOf(c.value) + 1\n const isRemovable = c.value !== 'id' && computedShowingFields.value.length > 1\n const isLast = headerIndex === headers.value.length - 1\n const definition = possibleFields.value[c.value] || {}\n const isComputed = definition.type === 'computed'\n return {\n [`header.${c.value}`]: () =>\n h('div', { class: ['w-100', 'd-flex', 'align-center'] }, [\n isComputed\n ? h('span', { class: ['font-weight-bold', 'me-2'] }, c.title)\n : h(\n VTooltip,\n {\n location: 'bottom start',\n },\n {\n activator: ({ props: tooltipProps }: any) =>\n h(\n 'span',\n {\n ...tooltipProps,\n class: ['font-weight-bold', 'me-2'],\n },\n c.title\n ),\n default: () => h('code', {}, c.value),\n }\n ),\n !isSortable\n ? undefined\n : h(\n VHover,\n {},\n {\n default: ({ isHovering, props: hoverProps }: any) =>\n h(VBtn, {\n ...hoverProps,\n style: stripUndefinedValuesFromObject({\n opacity:\n !likelyTouchable.value &&\n !isHovering &&\n !['asc', 'desc'].includes(currentSort)\n ? '0.1'\n : undefined,\n }),\n icon:\n currentSort === 'asc'\n ? sortAscIcon.value\n : currentSort === 'desc'\n ? sortDescIcon.value\n : sortUnsortedIcon.value,\n variant: 'text',\n size: 'x-small',\n class: ['ms-2'],\n onClick: () => {\n emit('toggle:sorting', c.value)\n },\n }),\n }\n ),\n !isSortable || currentSortIndex === 0\n ? undefined\n : h(VBadge, {\n content: ordinal(currentSortIndex),\n inline: true,\n class: ['ms-1'],\n }),\n !isRemovable\n ? undefined\n : h(\n VHover,\n {},\n {\n default: ({ isHovering, props: hoverProps }: any) =>\n h(VBtn, {\n ...hoverProps,\n style: stripUndefinedValuesFromObject({\n opacity:\n !likelyTouchable.value && !isHovering ? '0.1' : undefined,\n }),\n icon: removeColumnIcon.value,\n size: 'x-small',\n variant: 'text',\n class: ['ms-auto'],\n onClick: () => {\n emit('delete:column', c.value)\n },\n }),\n }\n ),\n !isLast || unshownFields.value.length === 0\n ? undefined\n : h(\n ControlMenu,\n {\n ...addColumnButtonBindings.value,\n class: [\n {\n 'ms-2': isRemovable,\n 'ms-auto': !isRemovable,\n },\n ],\n },\n {\n default: ({ close }: { close: () => void }) => [\n ...unshownFields.value.map((f) =>\n h(VListItem, {\n title: f.label,\n onClick: () => {\n emit('add:column', f.key)\n close()\n },\n })\n ),\n ],\n }\n ),\n ]),\n [`item.${c.value}`]: (...args: VDataTableServerNamedItemSlotParameters) => {\n // if a custom slot is provided, use it instead of the default\n if (slots[`item-${c.value}`]) {\n return slots[`item-${c.value}`]!(...args)\n }\n const [slotProps] = args\n const displayValue = toDisplayString(makeSafeForJson(slotProps.value))\n if (formatters.value[c.value]) {\n try {\n return formatters.value[c.value](slotProps.value, slotProps.item)\n } catch (e) {\n vueWarn(\n 'Error in field formatter for \"' +\n c.value +\n '\", falling back to default handling'\n )\n }\n }\n if (possibleFields.value[c.value]) {\n if ('$ref' in definition && 'string' === typeof definition.$ref) {\n /*\n |--------------------------------------------------------------------------\n | We are dealing with a referenced definition, i.e. a relationship.\n |--------------------------------------------------------------------------\n */\n const key =\n 'x-resourceful-display-key' in definition\n ? (definition['x-resourceful-display-key'] as string)\n : 'id'\n const value =\n slotProps.value && isObject(slotProps.value)\n ? (slotProps.value as Record<string, any>)[key]\n : ''\n const overrides: RStringFieldOverrideProps = deepmerge(\n normalizedTypedFieldOptions.value.string,\n {\n format: definition.format,\n },\n extractRStringFieldOverrideProps(\n normalizedSpecificFieldOptions.value[c.value]\n )\n )\n return renderAsString(value, slotProps.item, overrides)\n }\n if ('computed' === definition.type) {\n if ('x-table-header-definition' in definition) {\n /*\n |--------------------------------------------------------------------------\n | We are dealing with a computed field which has enough of a defintion to\n | render it properly.\n |--------------------------------------------------------------------------\n */\n if (\n 'render' in definition['x-table-header-definition'] &&\n typeof definition['x-table-header-definition']['render'] === 'function'\n ) {\n /*\n |--------------------------------------------------------------------------\n | If provided with a predefined render function, use it.\n |--------------------------------------------------------------------------\n */\n return definition['x-table-header-definition'].render(slotProps.item)\n } else {\n /*\n |--------------------------------------------------------------------------\n | Otherwise, update the definition to be the return type of the computed function.\n |--------------------------------------------------------------------------\n */\n slotProps.value = definition['x-table-header-definition'].compute(\n slotProps.item\n )\n }\n }\n }\n if (\n 'x-resourceful-choices' in definition &&\n Array.isArray(definition['x-resourceful-choices'])\n ) {\n /*\n |--------------------------------------------------------------------------\n | We are dealing with an enum/choices field.\n | These should be displayed as strings no matter their underlying type.\n |--------------------------------------------------------------------------\n */\n const value = definition['x-resourceful-choices'].find(\n (choice) => choice.value === slotProps.value\n )\n const displayable: string = isObject(value)\n ? (value.label as string) ||\n (value.title as string) ||\n toDisplayString(value.value)\n : toDisplayString(value)\n const overrides: RStringFieldOverrideProps = deepmerge(\n normalizedTypedFieldOptions.value.string,\n {\n format: definition.format,\n },\n extractRStringFieldOverrideProps(\n normalizedSpecificFieldOptions.value[c.value]\n )\n )\n return renderAsString(displayable, slotProps.item, overrides)\n }\n if (c.value === 'role') {\n console.log({ definition })\n }\n const definedType =\n 'computed' === definition.type\n ? 'x-table-header-definition' in definition\n ? (definition['x-table-header-definition'].kind as ResourcefulFieldType)\n : 'computed'\n : typeAndFormatToResourcefulFieldType(definition.type, definition.format)\n switch (definedType) {\n case 'bigint': {\n const value = slotProps.value as RBigIntFieldProps['modelValue']\n const overrides: RBigIntFieldOverrideProps = deepmerge(\n normalizedTypedFieldOptions.value.bigint,\n extractRBigIntFieldOverrideProps(\n normalizedSpecificFieldOptions.value[c.value]\n )\n )\n return renderAsBigint(value, slotProps.item, overrides)\n }\n case 'boolean': {\n const value = slotProps.value as RBooleanFieldProps['modelValue']\n const overrides: RBooleanFieldOverrideProps = deepmerge(\n normalizedTypedFieldOptions.value.boolean,\n extractRBooleanFieldOverrideProps(\n normalizedSpecificFieldOptions.value[c.value]\n )\n )\n return renderAsBoolean(value, slotProps.item, overrides)\n }\n case 'integer': {\n const value = slotProps.value as RIntegerFieldProps['modelValue']\n const overrides: RIntegerFieldOverrideProps = deepmerge(\n normalizedTypedFieldOptions.value.integer,\n extractRIntegerFieldOverrideProps(\n normalizedSpecificFieldOptions.value[c.value]\n )\n )\n return renderAsInteger(value, slotProps.item, overrides)\n }\n case 'number': {\n const value = slotProps.value as RNumberFieldProps['modelValue']\n const overrides: RNumberFieldOverrideProps = deepmerge(\n normalizedTypedFieldOptions.value.number,\n extractRNumberFieldOverrideProps(\n normalizedSpecificFieldOptions.value[c.value]\n )\n )\n return renderAsNumber(value, slotProps.item, overrides)\n }\n case 'dateTime': {\n const value = slotProps.value as RDateTimeFieldProps['modelValue']\n const overrides: RDateTimeFieldOverrideProps = deepmerge(\n {\n displayFormat: 'medWithWeekday',\n displayTimezone: 'local',\n },\n normalizedTypedFieldOptions.value.dateTime,\n extractRDateTimeFieldOverrideProps(\n normalizedSpecificFieldOptions.value[c.value]\n )\n )\n return renderAsDateTime(value, slotProps.item, overrides)\n }\n case 'date': {\n const value = slotProps.value as RDateFieldProps['modelValue']\n const overrides: RDateFieldOverrideProps = deepmerge(\n {\n displayFormat: 'med',\n displayTimezone: 'local',\n },\n normalizedTypedFieldOptions.value.date,\n extractRDateFieldOverrideProps(\n normalizedSpecificFieldOptions.value[c.value]\n )\n )\n return renderAsDate(value, slotProps.item, overrides)\n }\n case 'string': {\n const value = slotProps.value as RStringFieldProps['modelValue']\n const overrides: RStringFieldOverrideProps = deepmerge(\n normalizedTypedFieldOptions.value.string,\n {\n format: definition.format,\n },\n extractRStringFieldOverrideProps(\n normalizedSpecificFieldOptions.value[c.value]\n )\n )\n return renderAsString(value, slotProps.item, overrides)\n }\n case 'unsignedInteger': {\n const value = slotProps.value as RUnsignedIntegerFieldProps['modelValue']\n const overrides: RUnsignedIntegerFieldOverrideProps = deepmerge(\n normalizedTypedFieldOptions.value.unsignedInteger,\n extractRUnsignedIntegerFieldOverrideProps(\n normalizedSpecificFieldOptions.value[c.value]\n )\n )\n return renderAsUnsignedInteger(value, slotProps.item, overrides)\n }\n default:\n return toDisplayString(`This is a ${definition.type} field.`)\n }\n }\n return displayValue\n },\n }\n })\n )\n )\n )\n )\n return {}\n },\n})\n\nexport type ResourcefulIndexTable = InstanceType<typeof ResourcefulIndexTable> &\n ComponentPublicInstance\n","import { useI18n } from '../../ioc'\nimport { SvgIcon } from '../../svg-icon'\nimport { deepmerge } from 'deepmerge-ts'\nimport { default as numeral } from 'numeral'\nimport { ControlButton } from '../../control-button'\nimport { ControlMenu } from '@/private/control-menu'\nimport { omit } from '@nhtio/vuetifiable/util/helpers'\nimport { pick } from '@nhtio/vuetifiable/util/helpers'\nimport { ControlButtonBar } from '../../control-button-bar'\nimport { propsAndEmitsFactory } from '../../common/factories'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { makeControlButtonProps } from '../../control-button/props'\nimport { h, defineComponent, computed, toRefs, ref, warn } from 'vue'\nimport { makeDensityProps } from '@nhtio/vuetifiable/composables/density'\nimport { makeResourcefulIndexActionsProps, useBulkActions } from '../actions'\nimport { makeElevationProps } from '@nhtio/vuetifiable/composables/elevation'\nimport { getDefaultsForPropFactory, stripUndefinedValuesFromObject } from '../../common/utils'\nimport {\n makeControlButtonBarProps,\n defaultControlButtonBarOverflowMenuButtonProps,\n} from '../../control-button-bar/props'\nimport {\n mdiFilter,\n mdiViewColumnOutline,\n mdiSort,\n mdiPencilBoxMultipleOutline,\n mdiFileDownload,\n mdiPlaylistPlay,\n} from '@mdi/js'\nimport type { PropFactory } from '../../common/utils'\nimport type { ResourcefulSortPayload } from '../types'\nimport type { FilterGroup } from '../../filtration/schema'\nimport type { PropType, ExtractPublicPropTypes, VNode } from 'vue'\nimport type { ResourcefulIndexUrlAction, ResourcefulIndexFunctionAction } from '../actions'\n\nconst makeCommonControlButtonProps = propsFactory(\n {\n ...omit(\n makeControlButtonProps({\n color: 'surface-light',\n }),\n [\n 'state',\n 'badge',\n 'type',\n 'to',\n 'size',\n 'height',\n 'density',\n 'elevation',\n 'appendIcon',\n 'dividePrependIcon',\n 'divideAppendIcon',\n ]\n ),\n },\n 'ResourcefulIndexCommonControlButton'\n)\n\nconst makeColumnControlButtonProps = propsFactory(\n {\n ...makeCommonControlButtonProps({\n cta: 'resourcefulIndex.columnControlButton.cta',\n prependIcon: () => h(SvgIcon, { d: mdiViewColumnOutline }),\n }),\n },\n 'ResourcefulIndexColumnControlButton'\n)\n\nconst makeFilterControlButtonProps = propsFactory(\n {\n ...makeCommonControlButtonProps({\n cta: 'resourcefulIndex.filterControlButton.cta',\n prependIcon: () => h(SvgIcon, { d: mdiFilter }),\n }),\n },\n 'ResourcefulIndexFilterControlButton'\n)\n\nconst makeSortingControlButtonProps = propsFactory(\n {\n ...makeCommonControlButtonProps({\n cta: 'resourcefulIndex.sortingControlButton.cta',\n prependIcon: () => h(SvgIcon, { d: mdiSort }),\n }),\n },\n 'ResourcefulIndexSortingControlButton'\n)\n\nconst makeBulkActionsControlButtonProps = propsFactory(\n {\n ...makeCommonControlButtonProps({\n cta: 'resourcefulIndex.bulkActionsControlButton.cta',\n prependIcon: () => h(SvgIcon, { d: mdiPlaylistPlay }),\n }),\n },\n 'ResourcefulIndexBulkActionsControlButton'\n)\n\nconst makeBulkUpdateControlButtonProps = propsFactory(\n {\n ...makeCommonControlButtonProps({\n cta: 'resourcefulIndex.bulkUpdateControlButton.cta',\n prependIcon: () => h(SvgIcon, { d: mdiPencilBoxMultipleOutline }),\n }),\n },\n 'ResourcefulIndexBulkUpdateControlButton'\n)\n\nconst makeDownloadControlButtonProps = propsFactory(\n {\n ...makeCommonControlButtonProps({\n cta: 'resourcefulIndex.downloadControlButton.cta',\n prependIcon: () => h(SvgIcon, { d: mdiFileDownload }),\n }),\n },\n 'ResourcefulIndexDownloadControlButton'\n)\n\nexport type ColumnControlButtonProps = ExtractPublicPropTypes<\n ReturnType<typeof makeColumnControlButtonProps>\n>\n\nexport type FilterControlButtonProps = ExtractPublicPropTypes<\n ReturnType<typeof makeFilterControlButtonProps>\n>\n\nexport type SortingControlButtonProps = ExtractPublicPropTypes<\n ReturnType<typeof makeSortingControlButtonProps>\n>\n\nexport type BulkActionsControlButtonProps = ExtractPublicPropTypes<\n ReturnType<typeof makeBulkActionsControlButtonProps>\n>\n\nexport type BulkUpdateControlButtonProps = ExtractPublicPropTypes<\n ReturnType<typeof makeBulkUpdateControlButtonProps>\n>\n\nexport type DownloadControlButtonProps = ExtractPublicPropTypes<\n ReturnType<typeof makeDownloadControlButtonProps>\n>\n\nexport const defaultCommonControlButtonProps = getDefaultsForPropFactory(\n makeCommonControlButtonProps\n)\nexport const defaultColumnControlButtonProps = getDefaultsForPropFactory(\n makeColumnControlButtonProps\n)\nexport const defaultFilterControlButtonProps = getDefaultsForPropFactory(\n makeFilterControlButtonProps\n)\nexport const defaultSortingControlButtonProps = getDefaultsForPropFactory(\n makeSortingControlButtonProps\n)\n\nexport const defaultBulkActionsControlButtonProps = getDefaultsForPropFactory(\n makeBulkActionsControlButtonProps\n)\n\nexport const defaultBulkUpdateControlButtonProps = getDefaultsForPropFactory(\n makeBulkUpdateControlButtonProps\n)\n\nexport const defaultDownloadControlButtonProps = getDefaultsForPropFactory(\n makeDownloadControlButtonProps\n)\n\nexport const {\n makeProps: makeResourcefulIndexControlsProps,\n emits: resourcefulIndexControlsEmits,\n} = propsAndEmitsFactory(\n {\n columnControlButton: {\n type: Object as PropType<ColumnControlButtonProps>,\n default: () => defaultColumnControlButtonProps,\n },\n filterControlButton: {\n type: Object as PropType<FilterControlButtonProps>,\n default: () => defaultFilterControlButtonProps,\n },\n sortingControlButton: {\n type: Object as PropType<SortingControlButtonProps>,\n default: () => defaultSortingControlButtonProps,\n },\n bulkActionsControlButton: {\n type: Object as PropType<BulkActionsControlButtonProps>,\n default: () => defaultBulkActionsControlButtonProps,\n },\n bulkUpdateControlButton: {\n type: Object as PropType<BulkUpdateControlButtonProps>,\n default: () => defaultBulkUpdateControlButtonProps,\n },\n downloadControlButton: {\n type: Object as PropType<DownloadControlButtonProps>,\n default: () => defaultDownloadControlButtonProps,\n },\n ...pick(\n makeControlButtonBarProps({\n overflowMenuButtonOptions: {\n ...defaultControlButtonBarOverflowMenuButtonProps,\n color: 'surface-light',\n },\n }),\n ['overflowMenuButtonOptions']\n ),\n dividePrependIcon: {\n type: Boolean,\n default: false,\n },\n divideAppendIcon: {\n type: Boolean,\n default: false,\n },\n size: {\n type: String as PropType<'x-small' | 'small' | 'medium' | 'large' | 'x-large'>,\n default: 'x-small',\n },\n height: {\n type: [String, Number] as PropType<string | number | null>,\n default: '24',\n },\n ...makeDensityProps(),\n ...makeElevationProps({\n elevation: 2,\n }),\n disabled: {\n type: Boolean,\n default: false,\n },\n columns: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n filters: {\n type: Object as PropType<FilterGroup>,\n default: () => ({\n conditions: [],\n operator: 'AND',\n }),\n },\n sorts: {\n type: Object as PropType<ResourcefulSortPayload>,\n default: () => ({}),\n },\n canBulkUpdate: {\n type: Boolean,\n default: false,\n },\n selectedCount: {\n type: Number,\n default: 0,\n },\n pageCount: {\n type: Number,\n default: 0,\n },\n allCount: {\n type: Number,\n default: 0,\n },\n canDownload: {\n type: Boolean,\n default: false,\n },\n ...makeResourcefulIndexActionsProps(),\n columnsActive: {\n type: Boolean,\n default: false,\n },\n filtersActive: {\n type: Boolean,\n default: false,\n },\n sortingActive: {\n type: Boolean,\n default: false,\n },\n bulkUpdateActive: {\n type: Boolean,\n default: false,\n },\n downloadActive: {\n type: Boolean,\n default: false,\n },\n onBulkActionInvoked: {\n type: Function as PropType<\n | ((\n action: ResourcefulIndexUrlAction | ResourcefulIndexFunctionAction\n ) => void | Promise<void> | PromiseLike<void>)\n | undefined\n >,\n default: undefined,\n },\n },\n {\n 'click:filter': () => true,\n 'click:column': () => true,\n 'click:sorting': () => true,\n 'click:bulkUpdate': () => true,\n 'click:download': () => true,\n },\n 'ResourcefulIndexControls'\n)\n\nexport type ResourcefulIndexControlsProps = ExtractPublicPropTypes<\n ReturnType<typeof makeResourcefulIndexControlsProps>\n>\n\nexport const defaultResourcefulIndexControlsProps = getDefaultsForPropFactory(\n makeResourcefulIndexControlsProps as PropFactory\n)\n\nconst makePublicResourcefulIndexControlsProps = propsFactory(\n {\n ...omit(makeResourcefulIndexControlsProps(), [\n 'disabled',\n 'columns',\n 'filters',\n 'sorts',\n 'canBulkUpdate',\n 'selectedCount',\n 'pageCount',\n 'allCount',\n 'canDownload',\n 'actions',\n 'columnsActive',\n 'filtersActive',\n 'sortingActive',\n ]),\n },\n 'ResourcefulIndexControlsPublic'\n)\n\nexport type ResourcefulIndexControlsPublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makePublicResourcefulIndexControlsProps>\n>\n\nexport const defaultsForResourcefulIndexControlsProps = getDefaultsForPropFactory(\n makePublicResourcefulIndexControlsProps\n)\n\nexport const ResourcefulIndexControls = defineComponent({\n name: 'ResourcefulIndexControls',\n props: makeResourcefulIndexControlsProps(),\n emit: resourcefulIndexControlsEmits,\n setup(props, { emit, slots }) {\n const t = useI18n()\n const {\n columnControlButton,\n filterControlButton,\n sortingControlButton,\n bulkActionsControlButton,\n bulkUpdateControlButton,\n downloadControlButton,\n overflowMenuButtonOptions,\n dividePrependIcon,\n divideAppendIcon,\n size,\n height,\n disabled,\n density,\n elevation,\n columns,\n filters,\n sorts,\n actions,\n canBulkUpdate,\n selectedCount,\n pageCount,\n allCount,\n canDownload,\n columnsActive,\n filtersActive,\n sortingActive,\n bulkUpdateActive,\n downloadActive,\n } = toRefs(props)\n const getFilterCount = (group: FilterGroup) => {\n let count = 0\n group.conditions.forEach((condition) => {\n if ('operator' in condition && 'conditions' in condition) {\n count += getFilterCount(condition as FilterGroup)\n } else {\n count += 1\n }\n })\n return count\n }\n const controlButtonBarRef = ref<ControlButtonBar | null>(null)\n const closeControlButtonBarOverflowMenu = () => {\n if (controlButtonBarRef.value) {\n controlButtonBarRef.value.close()\n }\n }\n const filterCount = computed(() => getFilterCount(filters.value))\n const columnControlCommonProps = computed(() => ({\n dividePrependIcon: dividePrependIcon.value,\n divideAppendIcon: divideAppendIcon.value,\n size: size.value,\n height: height.value,\n density: density.value,\n elevation: elevation.value,\n state: {\n disabled:\n disabled.value ||\n columnsActive.value ||\n filtersActive.value ||\n sortingActive.value ||\n bulkUpdateActive.value ||\n downloadActive.value,\n },\n }))\n const commonControlButtonBindings = computed(() =>\n deepmerge(defaultCommonControlButtonProps, columnControlCommonProps.value)\n )\n const columnControlButtonBindings = computed(() =>\n deepmerge(\n defaultCommonControlButtonProps,\n defaultColumnControlButtonProps,\n columnControlCommonProps.value,\n columnControlButton.value,\n {\n onClick: () => {\n emit('click:column')\n closeControlButtonBarOverflowMenu()\n },\n badge: {\n content:\n columns.value.length <= 0 ? undefined : numeral(columns.value.length).format('0,0'),\n },\n }\n )\n )\n const filterControlButtonBindings = computed(() =>\n deepmerge(\n defaultCommonControlButtonProps,\n defaultFilterControlButtonProps,\n columnControlCommonProps.value,\n filterControlButton.value,\n {\n onClick: () => {\n emit('click:filter')\n closeControlButtonBarOverflowMenu()\n },\n badge: {\n content: filterCount.value <= 0 ? undefined : numeral(filterCount.value).format('0,0'),\n },\n }\n )\n )\n const sortingControlButtonBindings = computed(() =>\n deepmerge(\n defaultCommonControlButtonProps,\n defaultSortingControlButtonProps,\n columnControlCommonProps.value,\n sortingControlButton.value,\n {\n onClick: () => {\n emit('click:sorting')\n closeControlButtonBarOverflowMenu()\n },\n badge: {\n content:\n Object.keys(sorts.value).length <= 0\n ? undefined\n : numeral(Object.keys(sorts.value).length).format('0,0'),\n },\n }\n )\n )\n const actionableCount = computed(() =>\n selectedCount.value > 0 ? selectedCount.value : allCount.value\n )\n\n const bulkActionControlMenuRef = ref<ControlMenu | null>(null)\n const closeBulkActionControlMenu = () => {\n if (bulkActionControlMenuRef.value) {\n bulkActionControlMenuRef.value.close()\n }\n }\n\n const { bulkActionListItems, canShowBulkActionList, bulkActionListDisabled } = useBulkActions(\n actions,\n allCount,\n actionableCount,\n (action) => {\n if ('function' === typeof props.onBulkActionInvoked) {\n try {\n props.onBulkActionInvoked(action)\n } catch (e) {\n warn('Failed to invoke bulk action function', e)\n }\n } else {\n warn('Missing \"onBulkActionInvoked\" prop to invoke bulk action function')\n }\n closeControlButtonBarOverflowMenu()\n closeBulkActionControlMenu()\n }\n )\n const actionableBadgeContent = computed(() => {\n if (actionableCount.value <= 0) {\n return undefined\n }\n if (selectedCount.value > 0) {\n if (selectedCount.value === pageCount.value) {\n return [\n numeral(selectedCount.value).format('0,0'),\n numeral(allCount.value).format('0,0'),\n ].join(' / ')\n }\n return numeral(selectedCount.value).format('0,0')\n }\n return numeral(allCount.value).format('0,0')\n })\n\n const bulkActionsControlButtonBindings = computed(() => ({\n cta: t(bulkActionsControlButton.value.cta!),\n icon: bulkActionsControlButton.value.prependIcon,\n activator: stripUndefinedValuesFromObject({\n color: bulkActionsControlButton.value.color,\n density: columnControlCommonProps.value.density,\n size: columnControlCommonProps.value.size,\n height: columnControlCommonProps.value.height,\n elevation: columnControlCommonProps.value.elevation,\n dividePrependIcon: columnControlCommonProps.value.dividePrependIcon,\n }),\n disabled:\n bulkActionListDisabled.value ||\n disabled.value ||\n columnsActive.value ||\n filtersActive.value ||\n sortingActive.value ||\n bulkUpdateActive.value ||\n downloadActive.value,\n noPadding: true,\n }))\n\n const bulkUpdateControlButtonBindings = computed(() =>\n deepmerge(\n defaultCommonControlButtonProps,\n defaultBulkUpdateControlButtonProps,\n columnControlCommonProps.value,\n bulkUpdateControlButton.value,\n {\n onClick: () => {\n emit('click:bulkUpdate')\n closeControlButtonBarOverflowMenu()\n },\n badge: {\n content: actionableBadgeContent.value,\n },\n state: {\n disabled:\n actionableCount.value < 2 ||\n disabled.value ||\n columnsActive.value ||\n filtersActive.value ||\n sortingActive.value ||\n bulkUpdateActive.value ||\n downloadActive.value,\n },\n }\n )\n )\n const downloadControlButtonBindings = computed(() =>\n deepmerge(\n defaultCommonControlButtonProps,\n defaultDownloadControlButtonProps,\n columnControlCommonProps.value,\n downloadControlButton.value,\n {\n onClick: () => {\n emit('click:download')\n closeControlButtonBarOverflowMenu()\n },\n badge: {\n content: actionableBadgeContent.value,\n },\n state: {\n disabled:\n actionableCount.value <= 0 ||\n disabled.value ||\n columnsActive.value ||\n filtersActive.value ||\n sortingActive.value ||\n bulkUpdateActive.value ||\n downloadActive.value,\n },\n }\n )\n )\n const buttons = computed<Array<VNode>>(\n () =>\n [\n slots.before ? slots.before({ props: commonControlButtonBindings.value }) : null,\n h(ControlButton, {\n ...columnControlButtonBindings.value,\n cta: t(columnControlButtonBindings.value.cta!),\n class: ['ma-2', 'ms-0'],\n }),\n h(ControlButton, {\n ...filterControlButtonBindings.value,\n cta: t(filterControlButtonBindings.value.cta!),\n class: ['ma-2', 'ms-0'],\n }),\n h(ControlButton, {\n ...sortingControlButtonBindings.value,\n cta: t(sortingControlButtonBindings.value.cta!),\n class: ['ma-2', 'ms-0'],\n }),\n canShowBulkActionList.value\n ? h(\n ControlMenu,\n {\n ref: bulkActionControlMenuRef,\n ...bulkActionsControlButtonBindings.value,\n },\n () => bulkActionListItems.value\n )\n : null,\n canBulkUpdate.value\n ? h(ControlButton, {\n ...bulkUpdateControlButtonBindings.value,\n cta: t(bulkUpdateControlButtonBindings.value.cta!),\n class: ['ma-2', 'ms-0'],\n })\n : null,\n canDownload.value\n ? h(ControlButton, {\n ...downloadControlButtonBindings.value,\n cta: t(downloadControlButtonBindings.value.cta!),\n class: ['ma-2', 'ms-0'],\n })\n : null,\n slots.after ? slots.after({ props: commonControlButtonBindings.value }) : null,\n ].filter((b) => b !== null) as Array<VNode>\n )\n return () =>\n h(ControlButtonBar, {\n ref: controlButtonBarRef,\n buttons: buttons.value,\n overflowMenuButtonOptions: overflowMenuButtonOptions.value,\n })\n },\n})\n","import { h } from 'vue'\nimport { mdiMagnify } from '@mdi/js'\nimport { SvgIcon } from '../svg-icon'\nimport { getDefaultsForPropFactory } from '../common/utils'\nimport { pick, omit } from '@nhtio/vuetifiable/util/helpers'\nimport { makeResourcefulIndexActionsProps } from './actions'\nimport { makeControlButtonProps } from '../control-button/props'\nimport { makeRecordsTotalProps } from './partials/_record_totals'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { makeThemeProps } from '@nhtio/vuetifiable/composables/theme'\nimport { makeBorderProps } from '@nhtio/vuetifiable/composables/border'\nimport { makeRoundedProps } from '@nhtio/vuetifiable/composables/rounded'\nimport { makeVariantProps } from '@nhtio/vuetifiable/composables/variant'\nimport { makeDensityProps } from '@nhtio/vuetifiable/composables/density'\nimport { makeControlMenuControlButtonProps } from '../control-menu/props'\nimport { makeVCardProps } from '@nhtio/vuetifiable/components/VCard/VCard'\nimport { makePositionProps } from '@nhtio/vuetifiable/composables/position'\nimport { makeComponentProps } from '@nhtio/vuetifiable/composables/component'\nimport { makeElevationProps } from '@nhtio/vuetifiable/composables/elevation'\nimport { makeDimensionProps } from '@nhtio/vuetifiable/composables/dimensions'\nimport { defaultsForResourcefulIndexControlsProps } from './partials/_controls'\nimport { defaultsForPerPageSelectorPublicProps } from './partials/_per_page_selector'\nimport { makeVTextFieldProps } from '@nhtio/vuetifiable/components/VTextField/VTextField'\nimport { defaultsForResourcefulIndexControlsPublicProps } from './partials/_filters_controls'\nimport {\n makeResourcefulIndexTablePublicProps,\n defaultAddColumnButtonProps,\n} from './partials/_table'\nimport { defaultsForResourcefulIndexPaginationControlsPublicProps } from './partials/_pagination_controls'\nimport {\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n} from './partials/_columns_controls'\nimport type { PropType, ExtractPublicPropTypes } from 'vue'\nimport type { RecordsTotalProps } from './partials/_record_totals'\nimport type { ResourcefulSortPayload, ResourcefulIndexRequest } from './types'\nimport type { PerPageSelectorPublicProps } from './partials/_per_page_selector'\nimport type { ResourcefulIndexControlsPublicProps } from './partials/_controls'\nimport type { ResourcefulIndexFiltersControlsPublicProps } from './partials/_filters_controls'\nimport type { ResourcefulIndexPaginationControlsPublicProps } from './partials/_pagination_controls'\nimport type {\n DispositionButtonProps,\n SaveButtonProps,\n DiscardButtonProps,\n} from './partials/_columns_controls'\nimport type {\n ResourcefulIndexTablePublicProps,\n AddColumnButtonProps,\n FieldValueFormatters,\n ComputedColumnDefinitions,\n} from './partials/_table'\n\nexport const ResourcefulAggregateMethods = [\n 'avg',\n 'min',\n 'max',\n 'sum',\n 'countDistinct',\n 'sumDistinct',\n 'avgDistinct',\n] as const\nexport type ResourcefulAggregateMethods = (typeof ResourcefulAggregateMethods)[number]\nexport interface ResourcefulIndexAggregateOptions {\n [key: string]: ResourcefulAggregateMethods[]\n}\n\nexport interface ResourcefulIndexAggregateResults {\n [key: string]: Partial<Record<ResourcefulAggregateMethods, number>>\n}\n\nconst searchFieldProps = propsFactory(\n {\n ...pick(\n makeVTextFieldProps({\n type: 'search',\n variant: 'solo-filled',\n prependInnerIcon: () => h(SvgIcon, { d: mdiMagnify }),\n }),\n [\n 'type',\n 'placeholder',\n 'label',\n 'clearable',\n 'color',\n 'variant',\n 'prependInnerIcon',\n 'bgColor',\n 'baseColor',\n 'iconColor',\n ]\n ),\n ...makeComponentProps(),\n ...makeDensityProps({\n density: 'compact',\n }),\n ...makeThemeProps(),\n },\n 'ResourcefulIndexSearchField'\n)\n\nconst makeAutorefreshButtonProps = propsFactory(\n {\n ...makeControlMenuControlButtonProps(),\n },\n 'ResourcefulIndexAutoRefreshButton'\n)\n\nconst makeRefreshButtonProps = propsFactory(\n {\n ...pick(makeControlButtonProps(), ['color', 'density', 'size', 'height']),\n },\n 'ResourcefulIndexRefreshButton'\n)\n\nexport const defaultsForSearchFieldProps = getDefaultsForPropFactory(searchFieldProps)\nexport const defaultsForAutorefreshButtonProps = getDefaultsForPropFactory(\n makeAutorefreshButtonProps\n)\nexport const defaultsForRefreshButtonProps = getDefaultsForPropFactory(makeRefreshButtonProps)\n\nexport interface ResourcefulFieldLabelTerms {\n id: string\n [key: string]: string\n}\n\nconst makeFieldLabelTermsProps = propsFactory(\n {\n general: {\n type: Object as PropType<ResourcefulFieldLabelTerms>,\n default: () => ({\n id: 'fields.id',\n }),\n },\n headers: {\n type: Object as PropType<Partial<ResourcefulFieldLabelTerms>>,\n default: () => ({}),\n },\n filters: {\n type: Object as PropType<Partial<ResourcefulFieldLabelTerms>>,\n default: () => ({}),\n },\n },\n 'ResourcefulIndexLabels'\n)\n\nexport const defaultsForFieldLabelTermsProps = getDefaultsForPropFactory(makeFieldLabelTermsProps)\n\nconst makeACLProps = propsFactory(\n {\n canBulkUpdate: {\n type: Boolean as PropType<boolean>,\n default: false,\n },\n canDownload: {\n type: Boolean as PropType<boolean>,\n default: false,\n },\n },\n 'ResourcefulIndexACL'\n)\n\nexport const defaultsForACLProps = getDefaultsForPropFactory(makeACLProps)\n\nexport type SearchFieldProps = ExtractPublicPropTypes<ReturnType<typeof searchFieldProps>>\ntype AutoRefreshProps = ExtractPublicPropTypes<ReturnType<typeof makeAutorefreshButtonProps>>\ntype RefreshButtonProps = ExtractPublicPropTypes<ReturnType<typeof makeRefreshButtonProps>>\ntype FieldLabelTermsProps = ExtractPublicPropTypes<ReturnType<typeof makeFieldLabelTermsProps>>\ntype ACLProps = ExtractPublicPropTypes<ReturnType<typeof makeACLProps>>\n\nexport interface ResourcefulIndexTerms {\n refresh: string\n}\n\nexport const resourcefulIndexProps = propsFactory(\n {\n baseUrl: {\n type: String as PropType<string>,\n required: true,\n },\n state: {\n type: String as PropType<string | undefined | null>,\n default: undefined,\n },\n ...makeBorderProps(),\n ...makeComponentProps(),\n ...makeDimensionProps({\n width: '100%',\n }),\n ...makeElevationProps(),\n ...makePositionProps(),\n ...makeRoundedProps(),\n ...makeThemeProps(),\n ...makeVariantProps({ variant: 'elevated' } as const),\n metaProgressColor: {\n type: String as PropType<string>,\n default: 'success',\n },\n searchField: {\n type: Object as PropType<SearchFieldProps>,\n default: () => getDefaultsForPropFactory(searchFieldProps),\n },\n autoRefresh: {\n type: Object as PropType<AutoRefreshProps>,\n default: () => getDefaultsForPropFactory(makeAutorefreshButtonProps),\n },\n refreshButton: {\n type: Object as PropType<RefreshButtonProps>,\n default: () => getDefaultsForPropFactory(makeRefreshButtonProps),\n },\n addColumnButton: {\n type: Object as PropType<AddColumnButtonProps>,\n default: () => defaultAddColumnButtonProps,\n },\n totals: {\n type: Object as PropType<Pick<RecordsTotalProps, 'class' | 'style' | 'numeralFormat'>>,\n default: () => getDefaultsForPropFactory(makeRecordsTotalProps),\n },\n table: {\n type: Object as PropType<ResourcefulIndexTablePublicProps>,\n default: () => getDefaultsForPropFactory(makeResourcefulIndexTablePublicProps),\n },\n initialFields: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n excludeFields: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n initialSort: {\n type: Object as PropType<ResourcefulSortPayload>,\n default: () => ({}),\n },\n initialPerPage: {\n type: [String, Number] as PropType<string | number>,\n default: 10,\n },\n aggregations: {\n type: Object as PropType<ResourcefulIndexAggregateOptions>,\n default: () => ({}),\n },\n terms: {\n type: Object as PropType<ResourcefulIndexTerms>,\n default: () => ({\n refresh: 'general.refresh',\n }),\n },\n fieldLabelTerms: {\n type: Object as PropType<FieldLabelTermsProps>,\n default: () => getDefaultsForPropFactory(makeFieldLabelTermsProps),\n },\n acl: {\n type: Object as PropType<ACLProps>,\n default: () => defaultsForACLProps,\n },\n controls: {\n type: Object as PropType<ResourcefulIndexControlsPublicProps>,\n default: () => defaultsForResourcefulIndexControlsProps,\n },\n ...makeResourcefulIndexActionsProps(),\n perPageSelector: {\n type: Object as PropType<PerPageSelectorPublicProps>,\n default: () => defaultsForPerPageSelectorPublicProps,\n },\n pagination: {\n type: Object as PropType<ResourcefulIndexPaginationControlsPublicProps>,\n default: () => defaultsForResourcefulIndexPaginationControlsPublicProps,\n },\n computedColumns: {\n type: Array as PropType<ComputedColumnDefinitions>,\n default: () => [],\n },\n formatters: {\n type: Object as PropType<FieldValueFormatters>,\n default: () => ({}),\n },\n dispositionButtons: {\n type: Object as PropType<DispositionButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n },\n dispositionSaveButton: {\n type: Object as PropType<SaveButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n },\n dispositionDiscardButton: {\n type: Object as PropType<DiscardButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n },\n downloadButton: {\n type: Object as PropType<SaveButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n },\n downloadSafeRecordCountThreshold: {\n type: Number,\n default: 100,\n },\n filters: {\n type: Object as PropType<ResourcefulIndexFiltersControlsPublicProps>,\n default: () => defaultsForResourcefulIndexControlsPublicProps,\n },\n resourcefulIndexRequestPayloadModifier: {\n type: Function as PropType<(payload: ResourcefulIndexRequest) => ResourcefulIndexRequest>,\n default: (payload: ResourcefulIndexRequest) => payload,\n },\n },\n 'ResourcefulIndex'\n)\n\nexport type ResourcefulIndexProps = ExtractPublicPropTypes<ReturnType<typeof resourcefulIndexProps>>\nexport type ResourcefulVCardProps = Partial<\n ExtractPublicPropTypes<ReturnType<typeof makeVCardProps>>\n>\n\nconst vCardPropKeys = Object.keys(makeVCardProps())\nexport const resourcefulIndexCardPropKeys = Object.keys(\n omit(resourcefulIndexProps(), ['baseUrl'])\n).filter((k) => vCardPropKeys.includes(k))\n","import * as qs from 'qs-esm'\nimport { SvgIcon } from '../svg-icon'\nimport { useAlert } from '../ux/alert'\nimport { default as pMap } from 'p-map'\nimport { deepmerge } from 'deepmerge-ts'\nimport { isObject } from '../common/guards'\nimport { default as numeral } from 'numeral'\nimport { printf as format } from 'fast-printf'\nimport { encode, decode } from '@nhtio/encoder'\nimport { useScopedDisplay } from '../ux/display'\nimport { VCard } from 'vuetify/components/VCard'\nimport { ControlButton } from '../control-button'\nimport { emitsFactory } from '../common/factories'\nimport { useI18n, useHttp, useBrowser } from '../ioc'\nimport { DownloadDrawer } from './partials/_download'\nimport { BulkEditDrawer } from './partials/_bulk_edit'\nimport { decode as decodeJoi } from '@nhtio/validation'\nimport { VTextField } from 'vuetify/components/VTextField'\nimport { debounce } from '@nhtio/vuetifiable/util/helpers'\nimport { throttle } from '@nhtio/vuetifiable/util/throttle'\nimport { TypedEventEmitter } from '@nhtio/tiny-typed-emitter'\nimport { ResourcefulIndexTooltip } from './partials/_tooltip'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { useHttpElements, extractErrorCode } from '../ux/http'\nimport { ResourcefulIndexScopedDisplaySymbol } from '../symbols'\nimport { AutoRefeshController } from '../autorefresh-controller'\nimport { VContainer, VRow, VCol } from 'vuetify/components/VGrid'\nimport { VProgressLinear } from 'vuetify/components/VProgressLinear'\nimport { ResourcefulIndexRecordsTotal } from './partials/_record_totals'\nimport { ResourcefulIndexSortsControls } from './partials/_sorts_controls'\nimport { BulkActionsProgressDialog } from './partials/_bulk_action_progress'\nimport { stripUndefinedValuesFromObject, toUnreactive } from '../common/utils'\nimport { ResourcefulIndexFiltersControls } from './partials/_filters_controls'\nimport { ResourcefulIndexTable, defaultAddColumnButtonProps } from './partials/_table'\nimport {\n ResourcefulIndexControls,\n defaultResourcefulIndexControlsProps,\n} from './partials/_controls'\nimport {\n asFilterGroupOperator,\n asFilterGroupConditions,\n filterGroupToLucene,\n} from '../filtration/schema'\nimport {\n mdiInformationBox,\n mdiCloseCircle,\n mdiRefresh,\n mdiFormatListBulletedSquare,\n mdiDatabase,\n} from '@mdi/js'\nimport {\n isResourcefulIndexFunctionAction,\n isResourcefulIndexUrlAction,\n canPerformBulkActionForRecords,\n} from './actions'\nimport {\n resourcefulIndexProps,\n defaultsForSearchFieldProps,\n defaultsForFieldLabelTermsProps,\n defaultsForAutorefreshButtonProps,\n defaultsForRefreshButtonProps,\n} from './props'\nimport {\n defineComponent,\n h,\n toRefs,\n computed,\n ref,\n watch,\n toRaw,\n nextTick,\n warn,\n shallowRef,\n triggerRef,\n provide,\n inject,\n onMounted,\n onBeforeUnmount,\n} from 'vue'\nimport {\n ResourcefulIndexColumnsControls,\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n} from './partials/_columns_controls'\nimport type { Options as PMapOptions } from 'p-map'\nimport type { ObjectSchema } from '@nhtio/validation'\nimport type { SlotsType, Ref, ComputedRef } from 'vue'\nimport type { FilterGroup } from '../filtration/schema'\nimport type { EventMap } from '@nhtio/tiny-typed-emitter'\nimport type { RecordsTotalProps } from './partials/_record_totals'\nimport type { ResourcefulIndexControlsProps } from './partials/_controls'\nimport type { ResourcefulRecordModelSchema } from '../resourceful-record/types'\nimport type { ResourcefulVCardProps, ResourcefulIndexAggregateResults } from './props'\nimport type { ResourcefulIndexTableProps, ResourcefulIndexTableSlots } from './partials/_table'\nimport type {\n ResourcefulSchemaDefinition,\n ResourcefulSortPayload,\n ResourcefulIndexRequest,\n} from './types'\nimport type {\n DispositionButtonProps,\n SaveButtonProps,\n DiscardButtonProps,\n} from './partials/_columns_controls'\nimport type {\n ResourcefulIndexUrlAction,\n ResourcefulIndexFunctionAction,\n BulkActionResults,\n ActionableRecord,\n} from './actions'\n\ntype BusEventMap = EventMap<{\n 'resourcefulIndex:load': []\n}>\n\ninterface RawState {\n search: string\n requestFilterConditions: FilterGroup['conditions']\n requestFilterOperator: FilterGroup['operator']\n fields: string[]\n page: number\n perPage: number\n sort: ResourcefulSortPayload\n}\n\nexport const useResourcefulIndexScopedDisplay = () => {\n const scopedDisplay = inject(ResourcefulIndexScopedDisplaySymbol)\n if (!scopedDisplay) {\n throw new Error(\n '\"useResourcefulIndexScopedDisplay\" can only be called in children components of <ResourcefulIndex>'\n )\n }\n return scopedDisplay\n}\n\nexport type ResourcefulIndexSlots = Omit<ResourcefulIndexTableSlots, 'body-append'> & {\n 'aggregations': (\n aggs: Ref<ResourcefulIndexAggregateResults>,\n searching: ComputedRef<boolean>\n ) => any\n 'before-refresh-controls': (loading: boolean) => any\n 'after-refresh-controls': (loading: boolean) => any\n}\n\nexport interface ResourcefulIndexExposed {\n bulkEditingSchema: any\n selectable: ResourcefulSchemaDefinition\n filterable: ResourcefulSchemaDefinition\n sortable: string[]\n aggregatable: string[]\n refresh: () => void\n bulkActionProcessing: Ref<boolean>\n bulkActionProcessingComplete: Ref<boolean>\n}\n\nexport const ResourcefulIndex = defineComponent({\n name: 'ResourcefulIndex',\n props: resourcefulIndexProps(),\n emits: emitsFactory({\n 'state': (state: string | null | undefined) =>\n 'string' === typeof state || null === state || 'undefined' === typeof state,\n 'update:state': (state: string | null | undefined) =>\n 'string' === typeof state || null === state || 'undefined' === typeof state,\n 'error': (error: unknown) => error instanceof Error || true,\n 'booted': () => true,\n 'debug': (...args: any[]) => Array.isArray(args),\n }),\n slots: Object as SlotsType<ResourcefulIndexSlots>,\n setup(props, { slots, emit }): ResourcefulIndexExposed {\n const browser = useBrowser()\n const hasBeenMounted = ref<boolean>(false)\n const containerVCardRef = ref<VCard | null>(null)\n const containerResourcefulIndexTableRef = ref<ResourcefulIndexTable | null>(null)\n const scopedDisplay = useScopedDisplay(containerVCardRef)\n // provide access to the scoped display for the entire\n // resourceful index component down the tree\n provide(ResourcefulIndexScopedDisplaySymbol, scopedDisplay)\n const { smAndUp } = scopedDisplay\n const bus = new TypedEventEmitter<BusEventMap>()\n const t = useI18n()\n const http = useHttp()\n const rawSelectable = ref<ResourcefulSchemaDefinition>({})\n const rawFilterable = ref<ResourcefulSchemaDefinition>({})\n const rawSortable = ref<string[]>([])\n const rawAggregatable = ref<string[]>([])\n const bulkEditingModel = ref<ResourcefulRecordModelSchema>({})\n const bulkEditingSchema = ref<ObjectSchema | undefined>(undefined)\n const search = ref<string>('')\n const searchToolTip = ref<boolean>(false)\n const {\n baseUrl,\n state,\n border,\n style,\n width,\n rounded,\n tile,\n variant,\n class: cssClass,\n height,\n maxHeight,\n maxWidth,\n minHeight,\n minWidth,\n elevation,\n position,\n theme,\n color,\n metaProgressColor,\n searchField,\n aggregations,\n totals,\n terms,\n autoRefresh,\n refreshButton,\n table,\n fieldLabelTerms,\n addColumnButton,\n controls,\n initialFields,\n excludeFields,\n initialSort,\n initialPerPage,\n perPageSelector,\n pagination,\n computedColumns,\n dispositionButtons,\n dispositionSaveButton,\n dispositionDiscardButton,\n downloadButton,\n downloadSafeRecordCountThreshold,\n filters,\n formatters,\n acl,\n actions,\n resourcefulIndexRequestPayloadModifier,\n } = toRefs(props)\n const selectable = computed(() =>\n Object.fromEntries(\n Object.entries(rawSelectable.value).filter(([k]) => !excludeFields.value.includes(k))\n )\n )\n const filterable = computed(() =>\n Object.fromEntries(\n Object.entries(rawFilterable.value).filter(([k]) => !excludeFields.value.includes(k))\n )\n )\n const sortable = computed(() =>\n Array.from(rawSortable.value).filter((k) => !excludeFields.value.includes(k))\n )\n const aggregatable = computed(() =>\n Array.from(rawAggregatable.value).filter((k) => !excludeFields.value.includes(k))\n )\n const normalizedBaseUrl = computed(() => {\n let url = baseUrl.value || ''\n if (url.endsWith('/')) {\n url = url.slice(0, -1)\n }\n return url\n })\n const numericInitialPerPage = computed(() => {\n const ip = initialPerPage.value\n const ret = Math.abs(typeof ip === 'number' ? ip : Number.parseInt(ip, 10))\n return Number.isNaN(ret) ? 10 : ret\n })\n const requestFilterConditions = ref<FilterGroup['conditions']>([])\n const requestFilterOperator = ref<FilterGroup['operator']>('AND')\n const requestFilter = computed<string>(() => {\n let ret = filterGroupToLucene({\n operator: requestFilterOperator.value,\n conditions: requestFilterConditions.value,\n })\n if (search.value) {\n ret = [ret, `(${search.value})`]\n .filter((s) => 'string' === typeof s && s.trim().length > 0)\n .join(' AND ')\n }\n return ret\n })\n const requestFields = ref<string[]>([])\n const normalizedInitialFields = computed(() => {\n const ret = Array.from(initialFields.value)\n if (!ret.includes('id')) {\n ret.unshift('id')\n }\n return ret\n })\n watch(\n initialFields,\n (is, was) => {\n if (!was || encode(Array.from(is)) !== encode(Array.from(was))) {\n requestFields.value = Array.from(is)\n }\n },\n { immediate: true }\n )\n const requestPage = ref<number>(1)\n const requestPerPage = ref<number>(numericInitialPerPage.value)\n watch(numericInitialPerPage, (is) => (requestPerPage.value = is), { immediate: true })\n const requestSort = ref<ResourcefulSortPayload>(initialSort.value)\n const requestPayload = computed<ResourcefulIndexRequest>(() =>\n resourcefulIndexRequestPayloadModifier.value({\n filter: requestFilter.value,\n fields: Array.from(requestFields.value).filter((f) => selectable.value[f]),\n page: requestPage.value,\n perPage: requestPerPage.value,\n sort: requestSort.value,\n aggregations: aggregations.value,\n })\n )\n watch(requestPayload, (_is) => {})\n const selectableColumns = computed<ResourcefulSchemaDefinition>(\n () =>\n deepmerge(\n toRaw(selectable.value),\n Object.assign(\n {},\n ...toRaw(computedColumns.value)\n .filter(\n (c) =>\n (c.value || c.key) &&\n ((c.value && !selectable.value[c.value]) || (c.key && !selectable.value[c.key]))\n )\n .map((c) => {\n const key = c.value || c.key || ''\n return { [key]: { 'type': 'computed', 'x-table-header-definition': c } }\n })\n )\n ) as ResourcefulSchemaDefinition\n )\n const respondedToFilter = ref<string>('')\n const responseItems = ref<any[]>([])\n const responseTotal = ref<number>(0)\n const responseAggregations = ref<ResourcefulIndexAggregateResults>({})\n const responseHasError = ref<boolean>(false)\n const responseErrorCode = ref<string | number | undefined>(undefined)\n const requestedSearch = ref<boolean>(false)\n const showColumnsControls = ref<boolean>(false)\n const showSortsControls = ref<boolean>(false)\n const showFiltersControls = ref<boolean>(false)\n const showBulkUpdateForm = ref<boolean>(false)\n const showDownloadControls = ref<boolean>(false)\n\n // bulk update and actions functionality\n const { renderDialogs, fire } = useAlert(containerVCardRef, true, true)\n const canBulkUpdate = computed(\n () => 'object' === typeof bulkEditingSchema.value && acl.value.canBulkUpdate\n )\n const selectedItems = shallowRef<any[]>([])\n const selectedCount = computed(() => selectedItems.value.length)\n const pageCount = computed(() => responseItems.value.length)\n const allCount = computed(() => responseTotal.value)\n const canDownload = computed(() => acl.value.canDownload)\n watch(responseItems, (is, was) => {\n if (encode(is) !== encode(was)) {\n selectedItems.value = []\n triggerRef(selectedItems)\n }\n })\n\n const {\n exec: execMeta,\n percent: baseMetaPercent,\n loading: baseMetaLoading,\n loaded: baseMetaLoaded,\n } = useHttpElements(() => `${normalizedBaseUrl.value}/$meta.index`)\n const {\n exec: execBulkUpdateMeta,\n percent: bulkUpdateMetaPercent,\n loading: bulkUpdateMetaLoading,\n loaded: bulkUpdateMetaLoaded,\n } = useHttpElements(() => `${normalizedBaseUrl.value}/$meta.$bulk.update`)\n const metaPercent = computed(() => (baseMetaPercent.value + bulkUpdateMetaPercent.value) / 2)\n const metaLoading = computed(() => baseMetaLoading.value || bulkUpdateMetaLoading.value)\n const metaLoaded = computed(\n () => baseMetaLoaded.value && (bulkUpdateMetaLoaded.value || !canBulkUpdate.value)\n )\n const {\n exec: execSearch,\n percent: searchPercent,\n loading: searchLoading,\n loaded: searchLoaded,\n } = useHttpElements(\n () => `${normalizedBaseUrl.value}/?${qs.stringify(requestPayload.value)}`,\n () => 'get',\n () => ({}),\n () => undefined,\n () => 5000,\n () => null,\n () => {\n respondedToFilter.value = requestFilter.value\n requestedSearch.value = false\n }\n )\n const loadBaseMeta = async () => {\n const res = await execMeta<{\n selectable: ResourcefulSchemaDefinition\n filterable: ResourcefulSchemaDefinition\n sortable: string[]\n aggregatable: string[]\n }>()\n if (200 === res.status) {\n rawSelectable.value = res.data.selectable\n rawFilterable.value = res.data.filterable\n rawSortable.value = res.data.sortable\n rawAggregatable.value = res.data.aggregatable\n } else {\n warn('Error loading base meta:', res)\n }\n }\n const loadBulkUpdateMeta = async () => {\n if (!canBulkUpdate.value) return\n const res = await execBulkUpdateMeta<{\n filterable: ResourcefulSchemaDefinition\n schema: ResourcefulRecordModelSchema\n joiSchema: string\n joiSchemaDescription: any\n }>()\n if (200 === res.status) {\n try {\n const decoded = decodeJoi(res.data.joiSchema) as ObjectSchema\n bulkEditingSchema.value = decoded\n bulkEditingModel.value = res.data.schema\n } catch (error) {\n warn('Failed to decode joiSchema:', error)\n bulkEditingSchema.value = undefined\n bulkEditingModel.value = {}\n }\n } else {\n bulkEditingSchema.value = undefined\n bulkEditingModel.value = {}\n warn('Error loading bulk update meta:', res)\n }\n }\n const loadInitialState = async () => {\n const is = toRaw(state.value)\n emit('debug', 'Loading Initial State', is, {\n search: toRaw(search.value),\n requestFilterConditions: toRaw(requestFilterConditions.value),\n requestFilterOperator: toRaw(requestFilterOperator.value),\n fields: toRaw(requestFields.value),\n page: toRaw(requestPage.value),\n perPage: toRaw(requestPerPage.value),\n sort: toRaw(requestSort.value),\n })\n if (is) {\n try {\n const raw: RawState = decode<any>(is)\n emit('debug', { decodedState: raw })\n search.value = 'string' === typeof raw.search ? raw.search : ''\n const settableFields = Array.isArray(raw.fields)\n ? raw.fields.filter((f) => selectableColumns.value[f])\n : []\n requestFields.value = toRaw(settableFields)\n emit('debug', {\n decodedState: raw,\n requestFields: toRaw(requestFields.value),\n isArray: Array.isArray(raw.fields),\n settableFields,\n })\n try {\n requestFilterConditions.value = asFilterGroupConditions(raw.requestFilterConditions)\n } catch (e) {\n emit('error', e)\n requestFilterConditions.value = []\n }\n try {\n requestFilterOperator.value = asFilterGroupOperator(raw.requestFilterOperator)\n } catch (e) {\n emit('error', e)\n requestFilterOperator.value = 'AND'\n }\n requestPage.value = raw.page || 1\n requestPerPage.value = raw.perPage || toRaw(numericInitialPerPage.value)\n requestSort.value = Object.assign(\n {},\n ...Object.entries(raw.sort)\n .filter(([k, v]) => sortable.value.includes(k) && ['asc', 'desc'].includes(v))\n .map(([k, v]) => ({ [k]: v }))\n )\n } catch (e) {\n emit('error', e)\n emit('state', undefined)\n emit('update:state', undefined)\n search.value = ''\n requestFields.value = Array.from(initialFields.value)\n requestPage.value = 1\n requestPerPage.value = toRaw(numericInitialPerPage.value)\n requestSort.value = Object.assign(\n {},\n ...Object.entries(initialSort.value)\n .filter(([k, v]) => sortable.value.includes(k) && ['asc', 'desc'].includes(v))\n .map(([k, v]) => ({ [k]: v }))\n )\n }\n } else {\n search.value = ''\n requestFields.value = Array.from(initialFields.value)\n requestPage.value = 1\n requestPerPage.value = toRaw(numericInitialPerPage.value)\n requestSort.value = Object.assign(\n {},\n ...Object.entries(initialSort.value)\n .filter(([k, v]) => sortable.value.includes(k) && ['asc', 'desc'].includes(v))\n .map(([k, v]) => ({ [k]: v }))\n )\n }\n if (requestPage.value < 1) {\n requestPage.value = 1\n }\n if (requestPerPage.value < 1) {\n requestPerPage.value = 10\n } else if (requestPerPage.value > 100) {\n requestPerPage.value = 100\n }\n emit('debug', 'Loaded Initial State', is, {\n search: toRaw(search.value),\n requestFilterConditions: toRaw(requestFilterConditions.value),\n requestFilterOperator: toRaw(requestFilterOperator.value),\n fields: toRaw(requestFields.value),\n page: toRaw(requestPage.value),\n perPage: toRaw(requestPerPage.value),\n sort: toRaw(requestSort.value),\n })\n }\n const loadMeta = throttle(async () => {\n await Promise.all([loadBaseMeta(), loadBulkUpdateMeta()])\n // need to wait for the meta to load before loading initial state\n await loadInitialState()\n bus.emit('resourcefulIndex:load')\n emit('booted')\n }, 500)\n\n const loadSearch = async () => {\n const res = await execSearch<{\n records: any[]\n total: number\n page: number\n perPage: number\n aggregations: ResourcefulIndexAggregateResults\n }>()\n if (200 === res.status) {\n responseItems.value = res.data.records\n responseTotal.value = res.data.total\n responseAggregations.value = res.data.aggregations\n responseHasError.value = false\n responseErrorCode.value = undefined\n } else if (res.status >= 0) {\n responseItems.value = []\n responseTotal.value = 0\n responseAggregations.value = {}\n responseHasError.value = true\n responseErrorCode.value = extractErrorCode(res)\n warn('Error loading records:', res)\n }\n }\n const debouncedLoadSearch = debounce(loadSearch, 250)\n const loadDebouncedSearch = () => {\n requestedSearch.value = true\n debouncedLoadSearch()\n }\n const invalidStateSetCount = ref<number>(0)\n watch(searchLoading, (is, was) => {\n nextTick(() => {\n if (was && !is && !searchLoading.value) {\n // search is over\n emit('debug', {\n search: toRaw(search.value),\n requestFilterConditions: toRaw(requestFilterConditions.value),\n requestFilterOperator: toRaw(requestFilterOperator.value),\n fields: toRaw(requestFields.value),\n page: toRaw(requestPage.value),\n perPage: toRaw(requestPerPage.value),\n sort: toRaw(requestSort.value),\n })\n const rawState: RawState = {\n search: toRaw(search.value),\n requestFilterConditions: toRaw(requestFilterConditions.value),\n requestFilterOperator: toRaw(requestFilterOperator.value),\n fields: toRaw(requestFields.value),\n page: toRaw(requestPage.value),\n perPage: toRaw(requestPerPage.value),\n sort: toRaw(requestSort.value),\n }\n const initialState: RawState = {\n search: '',\n requestFilterConditions: [],\n requestFilterOperator: 'AND',\n fields: toRaw(initialFields.value),\n page: 1,\n perPage: toRaw(numericInitialPerPage.value),\n sort: Object.assign(\n {},\n ...Object.entries(initialSort.value)\n .filter(([k, v]) => sortable.value.includes(k) && ['asc', 'desc'].includes(v))\n .map(([k, v]) => ({ [k]: v }))\n ),\n }\n const normalizedInitialState = Object.assign({}, initialState, {\n fields: toRaw(normalizedInitialFields.value),\n })\n const encodedRawState = encode(rawState as any)\n const encodedInitialState = encode(initialState as any)\n const encodedNormalizedInitialState = encode(normalizedInitialState as any)\n const needsUpdate =\n encodedRawState !== encodedInitialState &&\n encodedRawState !== encodedNormalizedInitialState &&\n state.value !== encodedRawState\n emit('debug', {\n rawState,\n initialState,\n normalizedInitialState,\n encodedRawState,\n encodedInitialState,\n encodedNormalizedInitialState,\n needsUpdate,\n rawNotInitial: encodedRawState !== encodedInitialState,\n rawNotNormalizedInitial: encodedRawState !== encodedNormalizedInitialState,\n rawNotCurrent: state.value !== encodedRawState,\n })\n if (needsUpdate) {\n emit('state', encodedRawState)\n emit('update:state', encodedRawState)\n }\n }\n })\n })\n watch(state, (is, was) => {\n const getState = () => {\n return {\n search: toRaw(search.value),\n requestFilterConditions: toRaw(requestFilterConditions.value),\n requestFilterOperator: toRaw(requestFilterOperator.value),\n fields: toRaw(requestFields.value),\n page: toRaw(requestPage.value),\n perPage: toRaw(requestPerPage.value),\n sort: toRaw(requestSort.value),\n }\n }\n const original = getState()\n if (is) {\n try {\n const raw: RawState = decode<any>(is)\n emit('debug', { decodedState: raw })\n search.value = 'string' === typeof raw.search ? raw.search : ''\n const settableFields = Array.isArray(raw.fields)\n ? raw.fields.filter((f) => selectableColumns.value[f])\n : []\n requestFields.value = toRaw(settableFields)\n emit('debug', {\n decodedState: raw,\n requestFields: toRaw(requestFields.value),\n isArray: Array.isArray(raw.fields),\n settableFields,\n })\n try {\n requestFilterConditions.value = asFilterGroupConditions(raw.requestFilterConditions)\n } catch (e) {\n emit('error', e)\n requestFilterConditions.value = []\n }\n try {\n requestFilterOperator.value = asFilterGroupOperator(raw.requestFilterOperator)\n } catch (e) {\n emit('error', e)\n requestFilterOperator.value = 'AND'\n }\n requestPage.value = raw.page || 1\n requestPerPage.value = raw.perPage || toRaw(numericInitialPerPage.value)\n requestSort.value = Object.assign(\n {},\n ...Object.entries(raw.sort)\n .filter(([k, v]) => sortable.value.includes(k) && ['asc', 'desc'].includes(v))\n .map(([k, v]) => ({ [k]: v }))\n )\n invalidStateSetCount.value = 0\n } catch (e) {\n emit('error', e)\n invalidStateSetCount.value += 1\n if (invalidStateSetCount.value > 1) {\n emit('state', undefined)\n emit('update:state', undefined)\n } else {\n emit('state', toRaw(was))\n emit('update:state', toRaw(was))\n }\n }\n } else {\n search.value = ''\n requestFields.value = Array.from(initialFields.value)\n requestPage.value = 1\n requestPerPage.value = toRaw(numericInitialPerPage.value)\n requestSort.value = Object.assign(\n {},\n ...Object.entries(initialSort.value)\n .filter(([k, v]) => sortable.value.includes(k) && ['asc', 'desc'].includes(v))\n .map(([k, v]) => ({ [k]: v }))\n )\n invalidStateSetCount.value = 0\n }\n if (requestPage.value < 1) {\n requestPage.value = 1\n }\n if (requestPerPage.value < 1) {\n requestPerPage.value = 10\n } else if (requestPerPage.value > 100) {\n requestPerPage.value = 100\n }\n if (searchLoaded.value) {\n const current = getState()\n if (encode(current) !== encode(original)) {\n loadDebouncedSearch()\n }\n }\n })\n watch(canBulkUpdate, (is, was) => {\n if (is !== was && is && !was) {\n loadBulkUpdateMeta()\n }\n })\n const searching = computed(() => requestedSearch.value || searchLoading.value)\n bus.on('resourcefulIndex:load', loadSearch)\n watch(normalizedBaseUrl, () => loadMeta(), { immediate: true })\n\n // bulk action processing functionality\n const bulkActionName = ref<string | null>(null)\n const bulkActionProcessing = ref<boolean>(false)\n const bulkActionProcessingComplete = ref<boolean>(false)\n const bulkActionProgress = ref<number>(0)\n const bulkActionTotal = ref<number>(0)\n const bulkActionSuccesses = ref<number>(0)\n const bulkActionFailures = ref<number>(0)\n const bulkActionUndetermined = ref<number>(0)\n\n const fetchAllRecordsViaAsyncIterator = async (\n callback: (\n records: any[],\n page: number,\n perPage: number,\n total: number\n ) => Promise<void> | void,\n signal: AbortSignal | undefined = undefined,\n allFields: boolean = false,\n coolDownMs: number = 200,\n onlyIds?: Array<string | number>\n ) => {\n const basePayload = {\n filter: toUnreactive(requestFilter.value),\n fields: allFields ? Array.from(Object.keys(selectableColumns.value)) : ['id'],\n perPage: 100,\n sort: toUnreactive(requestSort.value),\n }\n basePayload.fields = basePayload.fields.filter(\n (f) =>\n selectableColumns.value[f] &&\n !computedColumns.value.find((c) => c.value === f || c.key === f)\n )\n if (onlyIds && Array.isArray(onlyIds) && onlyIds.length > 0) {\n const toAppend = `AND (${onlyIds.map((id) => `id:${id}`).join(' OR ')})`\n basePayload.filter = [basePayload.filter, toAppend].join(' ')\n }\n let total = 0\n const fetchResultsForPage = async (page: number) => {\n try {\n const res = await http.get<{\n records: any[]\n total: number\n page: number\n perPage: number\n aggregations: ResourcefulIndexAggregateResults\n }>(\n `${normalizedBaseUrl.value}/?${qs.stringify({\n ...basePayload,\n page,\n })}`,\n { signal }\n )\n if (200 === res.status) {\n total = res.data.total\n return res.data.records\n } else {\n return []\n }\n } catch (e) {\n warn('Error fetching records via async iterator:', e)\n return []\n }\n }\n let page = 1\n let gotEmpty = false\n while (!gotEmpty && (!signal || !signal.aborted)) {\n const records = await fetchResultsForPage(page)\n if (records.length === 0) {\n gotEmpty = true\n } else {\n await callback(records, page, basePayload.perPage, total)\n page++\n if (coolDownMs > 0) {\n await new Promise((resolve) => setTimeout(resolve, coolDownMs))\n }\n }\n }\n }\n\n const fetchAllRecordsAsArray = async (\n signal: AbortSignal | undefined = undefined,\n allFields: boolean = false\n ) => {\n const records: any[] = []\n await fetchAllRecordsViaAsyncIterator(\n async (pageRecords) => {\n records.push(...pageRecords)\n },\n signal,\n allFields\n )\n if (signal && signal.aborted) {\n return []\n }\n return records\n }\n\n const onBulkActionInvoked = async (\n action: ResourcefulIndexUrlAction | ResourcefulIndexFunctionAction\n ) => {\n const loadingDialogAbortController = new AbortController()\n fire({\n icon: 'info',\n title: t('resourcefulIndex.bulkActionProcessing.preparing.title'),\n text: t('resourcefulIndex.bulkActionProcessing.preparing.text'),\n showCancelButton: false,\n showConfirmButton: false,\n showDenyButton: false,\n signal: loadingDialogAbortController.signal,\n })\n const results: BulkActionResults = new Map()\n bulkActionName.value = action.title\n bulkActionProcessing.value = false\n bulkActionProgress.value = 0\n bulkActionTotal.value = 0\n let records: ActionableRecord[] = []\n // step 1: determine which records should processed\n if (selectedItems.value.length === 0) {\n // no selected items, so we are processing all items in the current filter\n } else if (\n selectedItems.value.length === responseItems.value.length &&\n responseItems.value.length < responseTotal.value &&\n (typeof action.maxBulkActionRecords !== 'number' ||\n responseTotal.value <= action.maxBulkActionRecords)\n ) {\n // if the number of selected items is the same as the number of items\n // being displayed, and there are more items available in the total,\n // and we aren't exceeding the maxBulkActionRecords (if set)\n // we need to request clarification if we should use\n // the local page or all records in the current filter\n const { isConfirmed, isDenied, isCanceled } = await fire({\n icon: 'question',\n title: t('resourcefulIndex.bulkActionProcessing.selection.title'),\n text: format(\n t('resourcefulIndex.bulkActionProcessing.selection.text'),\n numeral(responseItems.value.length).format('0,0'),\n numeral(selectedItems.value.length).format('0,0')\n ),\n showCancelButton: true,\n confirmButtonCta: t('resourcefulIndex.bulkActionProcessing.selection.confirmButtonText'),\n confirmButtonIcon: () => h(SvgIcon, { d: mdiFormatListBulletedSquare }),\n denyButtonCta: t('resourcefulIndex.bulkActionProcessing.selection.denyButtonText'),\n denyButtonIcon: () => h(SvgIcon, { d: mdiDatabase }),\n cancelButtonCta: t('resourcefulIndex.bulkActionProcessing.selection.cancelButtonText'),\n showDenyButton: true,\n showConfirmButton: true,\n })\n if (isDenied) {\n // use all records in the current filter\n } else if (isConfirmed) {\n // use only the selected records on the current page\n Array.from(selectedItems.value).forEach((item) => {\n records.push(item as ActionableRecord)\n })\n } else if (isCanceled) {\n // exit early, user canceled operation\n bulkActionProcessing.value = false\n loadingDialogAbortController.abort()\n return\n }\n } else {\n // we have a selection of items, so just use those\n Array.from(selectedItems.value).forEach((item) => {\n records.push(item as ActionableRecord)\n })\n }\n // step 2: confirm that we aren't processing too many records\n const processableRecordCount = records.length > 0 ? records.length : responseTotal.value\n if (\n typeof action.maxBulkActionRecords === 'number' &&\n processableRecordCount > action.maxBulkActionRecords\n ) {\n // exit early, too many records to process\n fire({\n icon: 'error',\n title: t('resourcefulIndex.bulkActionProcessing.tooManyRecords.title'),\n text: format(\n t('resourcefulIndex.bulkActionProcessing.tooManyRecords.text'),\n numeral(processableRecordCount).format('0,0'),\n numeral(action.maxBulkActionRecords).format('0,0')\n ),\n })\n bulkActionProcessing.value = false\n loadingDialogAbortController.abort()\n return\n }\n if (\n typeof action.maxSafeBulkActionRecords === 'number' &&\n processableRecordCount > action.maxSafeBulkActionRecords\n ) {\n // show confirmation to continue operation\n // on a large number of records\n const { isDenied } = await fire({\n icon: 'warning',\n title: t('resourcefulIndex.bulkActionProcessing.largeRecords.title'),\n text: format(\n t('resourcefulIndex.bulkActionProcessing.largeRecords.text'),\n numeral(processableRecordCount).format('0,0')\n ),\n showDenyButton: true,\n })\n if (isDenied) {\n bulkActionProcessing.value = false\n loadingDialogAbortController.abort()\n return\n }\n } else {\n // show a confirmation dialog to continue\n // with the selected number of records\n // because if there is no \"maxSafeBulkActionRecords\"\n // we want to make sure the user is aware of how many\n // records they are processing\n const { isDenied } = await fire({\n icon: 'question',\n title: t('resourcefulIndex.bulkActionProcessing.recordCountConfirmation.title'),\n text: format(\n t('resourcefulIndex.bulkActionProcessing.recordCountConfirmation.text'),\n numeral(processableRecordCount).format('0,0')\n ),\n showDenyButton: true,\n })\n if (isDenied) {\n bulkActionProcessing.value = false\n loadingDialogAbortController.abort()\n return\n }\n }\n // step 3: process\n bulkActionProgress.value = 0\n bulkActionTotal.value = processableRecordCount\n const recordFetchAbortController = new AbortController()\n // step 3.1: if we don't have any records yet\n // and the action uses `bulkAction`\n // we need to fetch all records first\n if (\n records.length === 0 &&\n isResourcefulIndexFunctionAction(action) &&\n 'function' === typeof action.bulkAction\n ) {\n fire({\n icon: 'info',\n title: t('resourcefulIndex.bulkActionProcessing.fetchingRecords.title'),\n text: t('resourcefulIndex.bulkActionProcessing.fetchingRecords.text'),\n showCancelButton: true,\n showConfirmButton: false,\n signal: recordFetchAbortController.signal,\n }).then(({ isCanceled }) => {\n if (isCanceled) {\n recordFetchAbortController.abort()\n }\n })\n records = await fetchAllRecordsAsArray(recordFetchAbortController.signal, false)\n if (recordFetchAbortController.signal.aborted) {\n bulkActionProcessing.value = false\n loadingDialogAbortController.abort()\n return\n }\n recordFetchAbortController.abort()\n }\n const pMapOpts: PMapOptions = {\n concurrency:\n 'number' === typeof action.singleAsBulkActionMaxConcurrency\n ? action.singleAsBulkActionMaxConcurrency\n : 1,\n stopOnError: Boolean(action.singleAsBulkActionStopOnError),\n }\n const onActionableRecord = async (record: ActionableRecord) => {\n try {\n if (isResourcefulIndexFunctionAction(action)) {\n const outcome: boolean | null = await action.action(record)\n results.set(record, outcome)\n } else if (isResourcefulIndexUrlAction(action)) {\n const href =\n typeof action.url === 'function' ? action.url(toUnreactive(record)) : action.url\n if (!href) {\n results.set(record, null)\n } else {\n if (isObject(href)) {\n warn('Failed to open vue router route for record:', href, record)\n return\n }\n try {\n window.open(href as string, '_blank', 'noopener')\n results.set(record, true)\n } catch (e) {\n warn('Failed to open url for record:', href, record, e)\n results.set(record, false)\n }\n }\n } else {\n results.set(record, null)\n }\n } catch (e) {\n warn('Failed to process bulk action for record:', record, e)\n results.set(record, null)\n }\n }\n // hide the \"preparing\" dialog since now we're actually processing\n // we should be showing the \"progress\" dialog\n loadingDialogAbortController.abort()\n bulkActionProcessing.value = true\n const onProgressActual = (updated: number, total: number) => {\n bulkActionProgress.value = updated\n bulkActionTotal.value = total\n let actionSuccesses = 0\n let actionFailures = 0\n let actionUndetermined = 0\n results.forEach((outcome) => {\n if (outcome === true) {\n actionSuccesses++\n } else if (outcome === false) {\n actionFailures++\n } else {\n actionUndetermined++\n }\n })\n bulkActionSuccesses.value = actionSuccesses\n bulkActionFailures.value = actionFailures\n bulkActionUndetermined.value = actionUndetermined\n }\n const onProgress = throttle(onProgressActual, 50)\n // step 3.2: if we still don't have any records\n // that means that we will need use an async iterator\n // to first fetch the results from the expected page\n // and then process the records as they are fetched\n if (records.length === 0) {\n const fetchAllViaAsyncIteratorAbortController = new AbortController()\n let abortedDueToError = false\n await fetchAllRecordsViaAsyncIterator(\n async (fetchedRecords, _page, _perPage, total) => {\n // if we have no fetched records, skip processing\n if (fetchedRecords.length === 0) {\n return\n }\n // if we can't perform the action\n // display an error and exit early\n if (!canPerformBulkActionForRecords(fetchedRecords, action)) {\n fetchAllViaAsyncIteratorAbortController.abort()\n fetchedRecords.forEach((r) => results.set(r, null))\n onProgress(results.size, total)\n return\n }\n // use pMap to process the records\n try {\n await pMap(\n fetchedRecords,\n async (record) => {\n await onActionableRecord(record)\n onProgress(results.size, total)\n },\n pMapOpts\n )\n } catch (e) {\n warn('Failed to process bulk action for some records:', e)\n fetchAllViaAsyncIteratorAbortController.abort()\n fetchedRecords.forEach((r) => results.set(r, null))\n onProgress(results.size, total)\n abortedDueToError = true\n return\n }\n },\n fetchAllViaAsyncIteratorAbortController.signal,\n false\n )\n if (fetchAllViaAsyncIteratorAbortController.signal.aborted) {\n bulkActionProcessing.value = false\n loadingDialogAbortController.abort()\n if (abortedDueToError) {\n // exited early due to an error during processing\n fire({\n icon: 'error',\n title: t('resourcefulIndex.bulkActionProcessing.unrecoverableError.title'),\n text: t('resourcefulIndex.bulkActionProcessing.unrecoverableError.text'),\n })\n } else {\n // exited early because some of the records could not be processed\n // by the action\n fire({\n icon: 'error',\n title: t('resourcefulIndex.bulkActionProcessing.unprocessableRecords.title'),\n text: t('resourcefulIndex.bulkActionProcessing.unprocessableRecords.text'),\n })\n }\n return\n }\n }\n // step 3.3: if we have records, confirm that we can run\n // the action against them\n else {\n // if we can't perform the action\n // display an error and exit early\n if (!canPerformBulkActionForRecords(records, action)) {\n fire({\n icon: 'error',\n title: t('resourcefulIndex.bulkActionProcessing.unprocessableRecords.title'),\n text: t('resourcefulIndex.bulkActionProcessing.unprocessableRecords.text'),\n })\n bulkActionProcessing.value = false\n return\n }\n // we can process the records\n if (isResourcefulIndexFunctionAction(action) && 'function' === typeof action.bulkAction) {\n // we are processing the results as a single function call\n try {\n const outcome = await action.bulkAction(records, onProgress)\n outcome.forEach((result, record) => {\n results.set(record, result)\n })\n } catch (e) {\n warn('Failed to process bulk action for all records:', e)\n records.forEach((r) => results.set(r, null))\n onProgress(results.size, records.length)\n // exited early due to an error during processing\n fire({\n icon: 'error',\n title: t('resourcefulIndex.bulkActionProcessing.unrecoverableError.title'),\n text: t('resourcefulIndex.bulkActionProcessing.unrecoverableError.text'),\n })\n }\n } else {\n // we are processing the results as individual calls\n try {\n await pMap(\n records,\n async (record) => {\n await onActionableRecord(record)\n onProgress(results.size, records.length)\n },\n pMapOpts\n )\n } catch (e) {\n warn('Failed to process bulk action for all records:', e)\n records.forEach((r) => results.set(r, null))\n onProgress(results.size, records.length)\n // exited early due to an error during processing\n fire({\n icon: 'error',\n title: t('resourcefulIndex.bulkActionProcessing.unrecoverableError.title'),\n text: t('resourcefulIndex.bulkActionProcessing.unrecoverableError.text'),\n })\n }\n }\n }\n // force a final update of the progress\n onProgressActual(results.size, processableRecordCount)\n // step 4: show results of processing\n // this is actually handled from the moment that\n // `bulkActionProcessing` is set to true because\n // the progress dialog shows automatically\n bulkActionProcessingComplete.value = true\n // step 5: (out of scope of function)\n // when the user closes the dialog window, reset all the bulk action states\n }\n\n const cardBindings = computed<ResourcefulVCardProps>(() => ({\n border: border.value,\n style: style.value,\n width: width.value,\n rounded: rounded.value,\n tile: tile.value,\n variant: variant.value,\n class: cssClass.value,\n height: height.value,\n maxHeight: maxHeight.value,\n maxWidth: maxWidth.value,\n minHeight: minHeight.value,\n minWidth: minWidth.value,\n elevation: elevation.value,\n position: position.value,\n theme: theme.value,\n color: color.value,\n tag: 'form',\n action: '#',\n method: 'get',\n onSubmit: (e: Event) => {\n e.preventDefault()\n bus.emit('resourcefulIndex:load')\n },\n }))\n const searchFieldBindings = computed(\n () =>\n deepmerge(\n {\n placeholder: t('resourcefulIndex.searchField.placeholder'),\n },\n deepmerge(defaultsForSearchFieldProps, stripUndefinedValuesFromObject(searchField.value)),\n {\n 'modelValue': search.value,\n 'onUpdate:modelValue': (val: string) => {\n if ('string' !== typeof val) {\n emit('debug', { invalidSearchType: val })\n return\n }\n search.value = val\n },\n 'hideDetails': true,\n 'onClick:appendInner': () => {\n searchToolTip.value = true\n },\n 'onClick:clear': (e: MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n search.value = ''\n },\n 'appendInnerIcon': () => h(SvgIcon, { d: mdiInformationBox }),\n },\n {\n readonly: !metaLoaded.value || searching.value,\n clearable: metaLoaded.value && !searching.value,\n clearIcon: () => h(SvgIcon, { d: mdiCloseCircle }),\n }\n ) as any\n )\n const recordsTotalBindings = computed<RecordsTotalProps>(() =>\n deepmerge(totals.value, {\n page: requestPage.value,\n perPage: requestPerPage.value,\n total: responseTotal.value,\n })\n )\n const controlsBindings = computed<ResourcefulIndexControlsProps>(() =>\n deepmerge(\n defaultResourcefulIndexControlsProps,\n stripUndefinedValuesFromObject(controls.value),\n {\n 'disabled': !metaLoaded.value,\n 'columns': requestFields.value,\n 'filters': {\n conditions: requestFilterConditions.value,\n operator: requestFilterOperator.value,\n },\n 'sorts': requestSort.value,\n 'canBulkUpdate': canBulkUpdate.value,\n 'selectedCount': selectedCount.value,\n 'pageCount': pageCount.value,\n 'allCount': allCount.value,\n 'canDownload': canDownload.value,\n 'onClick:column': () => {\n showColumnsControls.value = true\n },\n 'onClick:sorting': () => {\n showSortsControls.value = true\n },\n 'onClick:filter': () => {\n showFiltersControls.value = true\n },\n 'onClick:bulkUpdate': () => {\n showBulkUpdateForm.value = true\n },\n 'onClick:download': () => {\n showDownloadControls.value = true\n },\n 'columnsActive': showColumnsControls.value,\n 'filtersActive': showFiltersControls.value,\n 'sortingActive': showSortsControls.value,\n 'bulkUpdateActive': showBulkUpdateForm.value,\n 'downloadActive': showDownloadControls.value,\n 'actions': actions.value,\n 'onBulkActionInvoked': onBulkActionInvoked,\n }\n )\n )\n const tableBindings = computed<ResourcefulIndexTableProps>(\n () =>\n deepmerge(table.value, {\n 'items': responseItems.value,\n 'possibleFields': selectableColumns.value,\n 'showingFields': requestFields.value,\n 'search': respondedToFilter.value,\n 'loading': searching.value,\n 'percent': searchPercent.value,\n 'sortableFields': sortable.value,\n 'currentSorting': requestSort.value,\n 'labels': {\n id: fieldLabelTerms.value.general ? fieldLabelTerms.value.general.id : 'fields.id',\n ...stripUndefinedValuesFromObject(\n deepmerge(\n fieldLabelTerms.value.general\n ? stripUndefinedValuesFromObject(fieldLabelTerms.value.general)\n : (defaultsForFieldLabelTermsProps as any).general,\n fieldLabelTerms.value.headers\n ? stripUndefinedValuesFromObject(fieldLabelTerms.value.headers)\n : (defaultsForFieldLabelTermsProps as any).headers\n ) as Record<string, string>\n ),\n },\n 'page': requestPage.value,\n 'total': responseTotal.value,\n 'perPage': requestPerPage.value,\n 'progressColor': metaProgressColor.value,\n 'addColumnButton': deepmerge(\n defaultAddColumnButtonProps,\n stripUndefinedValuesFromObject(addColumnButton.value)\n ),\n 'onAdd:column': (f: string) => {\n requestFields.value.push(f)\n loadDebouncedSearch()\n },\n 'onDelete:column': (f: string) => {\n const index = requestFields.value.indexOf(f)\n if (index > -1) {\n requestFields.value.splice(index, 1)\n }\n loadDebouncedSearch()\n },\n 'onUpdate:perPage': (newPerPage: number) => {\n requestPerPage.value = newPerPage\n requestPage.value = 1\n loadDebouncedSearch()\n },\n 'onUpdate:page': (newPage: number) => {\n requestPage.value = newPage\n loadDebouncedSearch()\n },\n 'pagination': pagination.value,\n 'perPageSelector': perPageSelector.value,\n 'computedColumns': computedColumns.value,\n 'onToggle:sorting': (column: string) => {\n // if the column is not sortable, do nothing\n if (!sortable.value.includes(column)) return\n const current = requestSort.value[column]\n let next = current === undefined ? 'asc' : current === 'asc' ? 'desc' : undefined\n const update = stripUndefinedValuesFromObject({\n ...requestSort.value,\n [column]: next,\n }) as ResourcefulSortPayload\n requestSort.value = update\n nextTick(loadDebouncedSearch)\n },\n 'formatters': formatters.value,\n 'errorCode': responseErrorCode.value,\n 'bulkEditingSchema': bulkEditingSchema.value as any,\n 'selectedItems': selectedItems.value,\n 'onUpdate:selectedItems': (items: any[]) => {\n selectedItems.value = items\n triggerRef(selectedItems)\n },\n 'actions': actions.value,\n } satisfies ResourcefulIndexTableProps) as ResourcefulIndexTableProps\n )\n const dispositionButtonsBindings = computed<DispositionButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value)\n )\n )\n const dispositionSaveButtonBindings = computed<SaveButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n stripUndefinedValuesFromObject(dispositionSaveButton.value)\n )\n )\n const dispositionDiscardButtonBindings = computed<DiscardButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n stripUndefinedValuesFromObject(dispositionDiscardButton.value)\n )\n )\n const downloadButtonBindings = computed<SaveButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n stripUndefinedValuesFromObject(downloadButton.value)\n )\n )\n useRender(() =>\n h(\n VCard,\n {\n ref: containerVCardRef,\n ...cardBindings.value,\n },\n () => [\n h('input', { type: 'submit', style: { display: 'none' } }),\n h(ResourcefulIndexTooltip, {\n 'modelValue': searchToolTip.value,\n 'onUpdate:modelValue': (val: boolean) => {\n searchToolTip.value = val\n },\n 'color': color.value,\n }),\n h(VContainer, { fluid: true }, () => [\n h(VRow, {}, () => [\n h(VCol, { cols: 12, sm: 4, lg: 3 }, () => [h(VTextField, searchFieldBindings.value)]),\n h(\n VCol,\n {\n cols: 12,\n sm: 8,\n lg: 9,\n class: [\n 'd-flex',\n 'align-center',\n {\n 'justify-center': !smAndUp.value,\n 'justify-end': smAndUp.value,\n 'py-0': !smAndUp.value,\n },\n ],\n },\n () => [h(ResourcefulIndexRecordsTotal, recordsTotalBindings.value)]\n ),\n ]),\n h(VRow, {}, () => [\n h(\n VCol,\n {\n cols: 12,\n sm: 8,\n lg: 9,\n class: [\n 'd-flex',\n 'justify-center',\n {\n 'py-0': !smAndUp.value,\n },\n ],\n },\n () => [h(ResourcefulIndexControls, controlsBindings.value)]\n ),\n h(\n VCol,\n {\n cols: 12,\n sm: 4,\n lg: 3,\n class: [\n 'd-flex',\n 'align-center',\n {\n 'justify-center': !smAndUp.value,\n 'justify-end': smAndUp.value,\n 'py-0': !smAndUp.value,\n },\n ],\n },\n () => [\n h('div', { class: ['d-flex', 'align-center'] }, [\n slots['before-refresh-controls']\n ? slots['before-refresh-controls'](searching.value)\n : null,\n h(\n AutoRefeshController,\n deepmerge(\n {\n color: 'surface-light',\n },\n deepmerge(defaultsForAutorefreshButtonProps, autoRefresh.value),\n {\n onTriggered: loadSearch,\n }\n )\n ),\n h(\n ControlButton,\n deepmerge(\n {\n color: 'surface-light',\n },\n deepmerge(defaultsForRefreshButtonProps, refreshButton.value),\n {\n cta: t(terms.value.refresh),\n prependIcon: () => h(SvgIcon, { d: mdiRefresh }),\n dividePrependIcon: true,\n onClick: loadSearch,\n state: {\n loading: searching.value,\n },\n }\n )\n ),\n slots['after-refresh-controls']\n ? slots['after-refresh-controls'](searching.value)\n : null,\n ]),\n ]\n ),\n ]),\n ]),\n h(VProgressLinear, {\n color: metaLoading.value ? metaProgressColor.value : undefined,\n modelValue: metaLoading.value ? metaPercent.value : 0,\n height: '1px',\n }),\n !hasBeenMounted.value\n ? null\n : h(\n ResourcefulIndexTable,\n {\n ref: containerResourcefulIndexTableRef,\n ...tableBindings.value,\n },\n // eslint-disable-next-line @nht/require-function-slots-for-programmatic-components\n stripUndefinedValuesFromObject({\n ...slots,\n 'body-append': () => [\n h(ResourcefulIndexColumnsControls, {\n 'modelValue': showColumnsControls.value,\n 'color': color.value,\n 'onUpdate:modelValue': (val: boolean) => {\n showColumnsControls.value = val\n },\n 'possibleFields': selectableColumns.value,\n 'showingFields': requestFields.value,\n 'labels': {\n id: fieldLabelTerms.value.general\n ? fieldLabelTerms.value.general.id\n : 'fields.id',\n ...stripUndefinedValuesFromObject(\n deepmerge(\n fieldLabelTerms.value.general\n ? stripUndefinedValuesFromObject(fieldLabelTerms.value.general)\n : (defaultsForFieldLabelTermsProps as any).general,\n fieldLabelTerms.value.headers\n ? stripUndefinedValuesFromObject(fieldLabelTerms.value.headers)\n : (defaultsForFieldLabelTermsProps as any).headers\n ) as Record<string, string>\n ),\n },\n 'onUpdate:showingFields': (fields: string[]) => {\n requestFields.value = Array.from(fields)\n nextTick(() => loadDebouncedSearch())\n },\n 'dispositionButtons': dispositionButtonsBindings.value,\n 'saveButton': dispositionSaveButtonBindings.value,\n 'discardButton': dispositionDiscardButtonBindings.value,\n }),\n h(ResourcefulIndexSortsControls, {\n 'modelValue': showSortsControls.value,\n 'color': color.value,\n 'onUpdate:modelValue': (val: boolean) => {\n showSortsControls.value = val\n },\n 'sortableFields': sortable.value,\n 'sorting': requestSort.value,\n 'labels': {\n id: fieldLabelTerms.value.general\n ? fieldLabelTerms.value.general.id\n : 'fields.id',\n ...stripUndefinedValuesFromObject(\n deepmerge(\n fieldLabelTerms.value.general\n ? stripUndefinedValuesFromObject(fieldLabelTerms.value.general)\n : (defaultsForFieldLabelTermsProps as any).general,\n fieldLabelTerms.value.headers\n ? stripUndefinedValuesFromObject(fieldLabelTerms.value.headers)\n : (defaultsForFieldLabelTermsProps as any).headers\n ) as Record<string, string>\n ),\n },\n 'onUpdate:sorting': (sort: ResourcefulSortPayload) => {\n requestSort.value = sort\n loadDebouncedSearch()\n },\n 'dispositionButtons': dispositionButtonsBindings.value,\n 'saveButton': dispositionSaveButtonBindings.value,\n 'discardButton': dispositionDiscardButtonBindings.value,\n }),\n h(ResourcefulIndexFiltersControls, {\n 'modelValue': showFiltersControls.value,\n 'color': color.value,\n 'onUpdate:modelValue': (val: boolean) => {\n showFiltersControls.value = val\n },\n 'labels': {\n id: fieldLabelTerms.value.general\n ? fieldLabelTerms.value.general.id\n : 'fields.id',\n ...stripUndefinedValuesFromObject(\n deepmerge(\n fieldLabelTerms.value.general\n ? stripUndefinedValuesFromObject(fieldLabelTerms.value.general)\n : (defaultsForFieldLabelTermsProps as any).general,\n fieldLabelTerms.value.headers\n ? stripUndefinedValuesFromObject(fieldLabelTerms.value.headers)\n : (defaultsForFieldLabelTermsProps as any).headers\n ) as Record<string, string>\n ),\n },\n 'dispositionButtons': dispositionButtonsBindings.value,\n 'saveButton': dispositionSaveButtonBindings.value,\n 'discardButton': dispositionDiscardButtonBindings.value,\n 'filterableFields': filterable.value,\n 'conditions': requestFilterConditions.value,\n 'operator': requestFilterOperator.value,\n 'onUpdate:filters:operator': (val: FilterGroup['operator']) => {\n requestFilterOperator.value = val\n requestPage.value = 1\n loadDebouncedSearch()\n },\n 'onUpdate:filters:conditions': (val: FilterGroup['conditions']) => {\n requestFilterConditions.value = val\n requestPage.value = 1\n loadDebouncedSearch()\n },\n ...stripUndefinedValuesFromObject(filters.value),\n }),\n h(BulkEditDrawer, {\n 'modelValue': showBulkUpdateForm.value,\n 'color': color.value,\n 'onUpdate:modelValue': (val: boolean) => {\n showBulkUpdateForm.value = val\n },\n 'dispositionButtons': dispositionButtonsBindings.value,\n 'saveButton': dispositionSaveButtonBindings.value,\n 'discardButton': dispositionDiscardButtonBindings.value,\n 'schema': bulkEditingSchema.value as any,\n 'model': bulkEditingModel.value,\n 'baseUrl': baseUrl.value,\n 'uids':\n selectedItems.value.length > 0\n ? Array.from(selectedItems.value).map((i) => (i as any).id.toString())\n : Array.from(responseItems.value).map((i) => (i as any).id.toString()),\n 'fireAlertFn': fire,\n 'onSuccess': () => {\n loadDebouncedSearch()\n },\n }),\n h(DownloadDrawer, {\n 'modelValue': showDownloadControls.value,\n 'color': color.value,\n 'onUpdate:modelValue': (val: boolean) => {\n showDownloadControls.value = val\n },\n 'dispositionButtons': dispositionButtonsBindings.value,\n 'downloadButton': downloadButtonBindings.value,\n 'selectedItemCount': selectedCount.value,\n 'totalItemCount': responseTotal.value,\n 'pageSize': requestPerPage.value,\n 'safeRecordCountThreshold': downloadSafeRecordCountThreshold.value,\n 'alertFn': fire,\n 'fetchViaAsyncIteratorFn': fetchAllRecordsViaAsyncIterator,\n 'selectedItems': selectedItems.value,\n 'possibleFields': selectableColumns.value,\n 'showingFields': requestFields.value,\n 'computedColumns': computedColumns.value,\n 'labels': {\n id: fieldLabelTerms.value.general\n ? fieldLabelTerms.value.general.id\n : 'fields.id',\n ...stripUndefinedValuesFromObject(\n deepmerge(\n fieldLabelTerms.value.general\n ? stripUndefinedValuesFromObject(fieldLabelTerms.value.general)\n : (defaultsForFieldLabelTermsProps as any).general,\n fieldLabelTerms.value.headers\n ? stripUndefinedValuesFromObject(fieldLabelTerms.value.headers)\n : (defaultsForFieldLabelTermsProps as any).headers\n ) as Record<string, string>\n ),\n },\n }),\n ],\n 'aggregations': slots.aggregations\n ? () => slots.aggregations!(responseAggregations, searching)\n : undefined,\n })\n ),\n renderDialogs(),\n h(BulkActionsProgressDialog, {\n container: containerVCardRef.value,\n bulkActionName: bulkActionName.value,\n bulkActionProcessing: bulkActionProcessing.value,\n bulkActionProcessingComplete: bulkActionProcessingComplete.value,\n bulkActionProgress: bulkActionProgress.value,\n bulkActionTotal: bulkActionTotal.value,\n bulkActionSuccesses: bulkActionSuccesses.value,\n bulkActionFailures: bulkActionFailures.value,\n bulkActionUndetermined: bulkActionUndetermined.value,\n ...{\n 'onClick:close': () => {\n bulkActionProcessing.value = false\n bulkActionProcessingComplete.value = false\n bulkActionName.value = null\n bulkActionProgress.value = 0\n bulkActionTotal.value = 0\n bulkActionSuccesses.value = 0\n bulkActionFailures.value = 0\n bulkActionUndetermined.value = 0\n // @todo: reset selected items?\n },\n },\n }),\n // h('pre', {}, JSON.stringify(toRaw(requestFields.value), null, 2)),\n ]\n )\n )\n onMounted(() => {\n if (!browser.ssr) {\n // setStateFromEncoded(state.value)\n hasBeenMounted.value = true\n }\n })\n onBeforeUnmount(() => {\n hasBeenMounted.value = false\n })\n return {\n bulkEditingSchema: toUnreactive(bulkEditingSchema),\n selectable: toUnreactive(selectable),\n filterable: toUnreactive(filterable),\n sortable: toUnreactive(sortable),\n aggregatable: toUnreactive(aggregatable),\n refresh: () => loadDebouncedSearch(),\n bulkActionProcessing,\n bulkActionProcessingComplete,\n }\n },\n})\n\nexport type ResourcefulIndex = InstanceType<typeof ResourcefulIndex>\n\n// Re-export types from @nhtio/lucid-resourceful for portable declarations\nexport type { ObjectSchema } from '@nhtio/validation'\n"],"names":["index","error","truncate","require$$0","joi","x","y","oops","_createElementVNode","_Fragment","_createVNode","_mergeProps","propsFactory","TypedEventEmitter","ordinal","format","writeFile","useRender","qs.stringify","makeComponentProps","_normalizeClass","_normalizeStyle","_withDirectives","_vShow","FilterOperators","omit","readonly","o","IconValue","useLocale","ref","v","item","isObject","isEmpty","props","items","_createTextVNode","pick","slotProps","defaultCommonControlButtonProps","makeVDataTableServerProps","useDisplay","vueWarn","makeDensityProps","makeElevationProps","makeThemeProps","makeBorderProps","makeRoundedProps","makeVariantProps","decodeJoi","page"],"mappings":"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","x_google_ignoreList":[0,1,3,4,5,8,9,10,11,22,23,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45]}
|
|
1
|
+
{"version":3,"file":"index-DcCK7tW-.mjs","sources":["../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/util/events.js","../node_modules/.pnpm/p-map@7.0.4/node_modules/p-map/index.js","../src/private/exporter/constants.ts","../node_modules/.pnpm/truncate-utf8-bytes@1.0.2/node_modules/truncate-utf8-bytes/lib/truncate.js","../node_modules/.pnpm/truncate-utf8-bytes@1.0.2/node_modules/truncate-utf8-bytes/index.js","../node_modules/.pnpm/sanitize-filename@1.6.3/node_modules/sanitize-filename/index.js","../src/private/exporter/utils.ts","../src/private/exporter/schemas.ts","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VNavigationDrawer/sticky.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/composables/touch.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VNavigationDrawer/touch.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VNavigationDrawer/VNavigationDrawer.js","../src/private/resourceful-index/partials/_columns_controls.ts","../src/private/exporter/index.ts","../src/private/resourceful-index/partials/_download.ts","../src/private/resourceful-index/partials/_bulk_edit.ts","../src/private/resourceful-index/partials/_tooltip.ts","../src/private/resourceful-index/partials/_record_totals.ts","../src/private/resourceful-index/partials/_sorts_controls.ts","../src/private/resourceful-index/partials/_bulk_action_progress.ts","../src/private/filtration/common.ts","../src/private/filtration/empty_state.ts","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VFab/VFab.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VSpeedDial/VSpeedDial.js","../src/private/filtration/schema.ts","../src/private/filtration/filter_group_condition_element.ts","../src/private/resourceful-index/partials/_filters_controls.ts","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/composables/refs.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VPagination/VPagination.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/composables/paginate.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/VDataTableFooter.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/VDataTableColumn.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/composables/headers.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/composables/select.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/composables/sort.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/VDataTableHeaders.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/composables/group.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/VDataTableGroupHeaderRow.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/composables/expand.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/VDataTableRow.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/VDataTableRows.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VTable/VTable.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/composables/items.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/composables/options.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/VDataTable.js","../node_modules/.pnpm/vuetify@3.11.6_typescript@5.9.3_vue@3.5.26_typescript@5.9.3_/node_modules/vuetify/lib/components/VDataTable/VDataTableServer.js","../src/private/resourceful-index/partials/_per_page_selector.ts","../src/private/resourceful-index/partials/_pagination_controls.ts","../src/private/resourceful-index/partials/_table.ts","../src/private/resourceful-index/partials/_controls.ts","../src/private/resourceful-index/props.ts","../src/private/resourceful-index/index.ts"],"sourcesContent":["// Utilities\nimport { callEvent, isOn } from \"./helpers.js\";\nexport function getPrefixedEventHandlers(attrs, suffix, getData) {\n return Object.keys(attrs).filter(key => isOn(key) && key.endsWith(suffix)).reduce((acc, key) => {\n acc[key.slice(0, -suffix.length)] = event => callEvent(attrs[key], event, getData(event));\n return acc;\n }, {});\n}\n//# sourceMappingURL=events.js.map","export default async function pMap(\n\titerable,\n\tmapper,\n\t{\n\t\tconcurrency = Number.POSITIVE_INFINITY,\n\t\tstopOnError = true,\n\t\tsignal,\n\t} = {},\n) {\n\treturn new Promise((resolve_, reject_) => {\n\t\tif (iterable[Symbol.iterator] === undefined && iterable[Symbol.asyncIterator] === undefined) {\n\t\t\tthrow new TypeError(`Expected \\`input\\` to be either an \\`Iterable\\` or \\`AsyncIterable\\`, got (${typeof iterable})`);\n\t\t}\n\n\t\tif (typeof mapper !== 'function') {\n\t\t\tthrow new TypeError('Mapper function is required');\n\t\t}\n\n\t\tif (!((Number.isSafeInteger(concurrency) && concurrency >= 1) || concurrency === Number.POSITIVE_INFINITY)) {\n\t\t\tthrow new TypeError(`Expected \\`concurrency\\` to be an integer from 1 and up or \\`Infinity\\`, got \\`${concurrency}\\` (${typeof concurrency})`);\n\t\t}\n\n\t\tconst result = [];\n\t\tconst errors = [];\n\t\tconst skippedIndexesMap = new Map();\n\t\tlet isRejected = false;\n\t\tlet isResolved = false;\n\t\tlet isIterableDone = false;\n\t\tlet resolvingCount = 0;\n\t\tlet currentIndex = 0;\n\t\tconst iterator = iterable[Symbol.iterator] === undefined ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n\n\t\tconst signalListener = () => {\n\t\t\treject(signal.reason);\n\t\t};\n\n\t\tconst cleanup = () => {\n\t\t\tsignal?.removeEventListener('abort', signalListener);\n\t\t};\n\n\t\tconst resolve = value => {\n\t\t\tresolve_(value);\n\t\t\tcleanup();\n\t\t};\n\n\t\tconst reject = reason => {\n\t\t\tisRejected = true;\n\t\t\tisResolved = true;\n\t\t\treject_(reason);\n\t\t\tcleanup();\n\t\t};\n\n\t\tif (signal) {\n\t\t\tif (signal.aborted) {\n\t\t\t\treject(signal.reason);\n\t\t\t}\n\n\t\t\tsignal.addEventListener('abort', signalListener, {once: true});\n\t\t}\n\n\t\tconst next = async () => {\n\t\t\tif (isResolved) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst nextItem = await iterator.next();\n\n\t\t\tconst index = currentIndex;\n\t\t\tcurrentIndex++;\n\n\t\t\t// Note: `iterator.next()` can be called many times in parallel.\n\t\t\t// This can cause multiple calls to this `next()` function to\n\t\t\t// receive a `nextItem` with `done === true`.\n\t\t\t// The shutdown logic that rejects/resolves must be protected\n\t\t\t// so it runs only one time as the `skippedIndex` logic is\n\t\t\t// non-idempotent.\n\t\t\tif (nextItem.done) {\n\t\t\t\tisIterableDone = true;\n\n\t\t\t\tif (resolvingCount === 0 && !isResolved) {\n\t\t\t\t\tif (!stopOnError && errors.length > 0) {\n\t\t\t\t\t\treject(new AggregateError(errors)); // eslint-disable-line unicorn/error-message\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tisResolved = true;\n\n\t\t\t\t\tif (skippedIndexesMap.size === 0) {\n\t\t\t\t\t\tresolve(result);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst pureResult = [];\n\n\t\t\t\t\t// Support multiple `pMapSkip`'s.\n\t\t\t\t\tfor (const [index, value] of result.entries()) {\n\t\t\t\t\t\tif (skippedIndexesMap.get(index) === pMapSkip) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpureResult.push(value);\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(pureResult);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresolvingCount++;\n\n\t\t\t// Intentionally detached\n\t\t\t(async () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst element = await nextItem.value;\n\n\t\t\t\t\tif (isResolved) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst value = await mapper(element, index);\n\n\t\t\t\t\t// Use Map to stage the index of the element.\n\t\t\t\t\tif (value === pMapSkip) {\n\t\t\t\t\t\tskippedIndexesMap.set(index, value);\n\t\t\t\t\t}\n\n\t\t\t\t\tresult[index] = value;\n\n\t\t\t\t\tresolvingCount--;\n\t\t\t\t\tawait next();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (stopOnError) {\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors.push(error);\n\t\t\t\t\t\tresolvingCount--;\n\n\t\t\t\t\t\t// In that case we can't really continue regardless of `stopOnError` state\n\t\t\t\t\t\t// since an iterable is likely to continue throwing after it throws once.\n\t\t\t\t\t\t// If we continue calling `next()` indefinitely we will likely end up\n\t\t\t\t\t\t// in an infinite loop of failed iteration.\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait next();\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\treject(error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})();\n\t\t};\n\n\t\t// Create the concurrent runners in a detached (non-awaited)\n\t\t// promise. We need this so we can await the `next()` calls\n\t\t// to stop creating runners before hitting the concurrency limit\n\t\t// if the iterable has already been marked as done.\n\t\t// NOTE: We *must* do this for async iterators otherwise we'll spin up\n\t\t// infinite `next()` calls by default and never start the event loop.\n\t\t(async () => {\n\t\t\tfor (let index = 0; index < concurrency; index++) {\n\t\t\t\ttry {\n\t\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\t\tawait next();\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (isIterableDone || isRejected) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t})();\n\t});\n}\n\nexport function pMapIterable(\n\titerable,\n\tmapper,\n\t{\n\t\tconcurrency = Number.POSITIVE_INFINITY,\n\t\tbackpressure = concurrency,\n\t} = {},\n) {\n\tif (iterable[Symbol.iterator] === undefined && iterable[Symbol.asyncIterator] === undefined) {\n\t\tthrow new TypeError(`Expected \\`input\\` to be either an \\`Iterable\\` or \\`AsyncIterable\\`, got (${typeof iterable})`);\n\t}\n\n\tif (typeof mapper !== 'function') {\n\t\tthrow new TypeError('Mapper function is required');\n\t}\n\n\tif (!((Number.isSafeInteger(concurrency) && concurrency >= 1) || concurrency === Number.POSITIVE_INFINITY)) {\n\t\tthrow new TypeError(`Expected \\`concurrency\\` to be an integer from 1 and up or \\`Infinity\\`, got \\`${concurrency}\\` (${typeof concurrency})`);\n\t}\n\n\tif (!((Number.isSafeInteger(backpressure) && backpressure >= concurrency) || backpressure === Number.POSITIVE_INFINITY)) {\n\t\tthrow new TypeError(`Expected \\`backpressure\\` to be an integer from \\`concurrency\\` (${concurrency}) and up or \\`Infinity\\`, got \\`${backpressure}\\` (${typeof backpressure})`);\n\t}\n\n\treturn {\n\t\tasync * [Symbol.asyncIterator]() {\n\t\t\tconst iterator = iterable[Symbol.asyncIterator] === undefined ? iterable[Symbol.iterator]() : iterable[Symbol.asyncIterator]();\n\n\t\t\tconst promises = [];\n\t\t\tlet pendingPromisesCount = 0;\n\t\t\tlet isDone = false;\n\t\t\tlet index = 0;\n\n\t\t\tfunction trySpawn() {\n\t\t\t\tif (isDone || !(pendingPromisesCount < concurrency && promises.length < backpressure)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tpendingPromisesCount++;\n\n\t\t\t\tconst promise = (async () => {\n\t\t\t\t\tconst {done, value} = await iterator.next();\n\n\t\t\t\t\tif (done) {\n\t\t\t\t\t\tpendingPromisesCount--;\n\t\t\t\t\t\treturn {done: true};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Spawn if still below concurrency and backpressure limit\n\t\t\t\t\ttrySpawn();\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst returnValue = await mapper(await value, index++);\n\n\t\t\t\t\t\tpendingPromisesCount--;\n\n\t\t\t\t\t\tif (returnValue === pMapSkip) {\n\t\t\t\t\t\t\tconst index = promises.indexOf(promise);\n\n\t\t\t\t\t\t\tif (index > 0) {\n\t\t\t\t\t\t\t\tpromises.splice(index, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Spawn if still below backpressure limit and just dropped below concurrency limit\n\t\t\t\t\t\ttrySpawn();\n\n\t\t\t\t\t\treturn {done: false, value: returnValue};\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tpendingPromisesCount--;\n\t\t\t\t\t\tisDone = true;\n\t\t\t\t\t\treturn {error};\n\t\t\t\t\t}\n\t\t\t\t})();\n\n\t\t\t\tpromises.push(promise);\n\t\t\t}\n\n\t\t\ttrySpawn();\n\n\t\t\twhile (promises.length > 0) {\n\t\t\t\tconst {error, done, value} = await promises[0]; // eslint-disable-line no-await-in-loop\n\n\t\t\t\tpromises.shift();\n\n\t\t\t\tif (error) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\tif (done) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Spawn if just dropped below backpressure limit and below the concurrency limit\n\t\t\t\ttrySpawn();\n\n\t\t\t\tif (value === pMapSkip) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tyield value;\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport const pMapSkip = Symbol('skip');\n","export const formats = [\n // Most popular formats\n { value: 'xlsx', extension: '.xlsx', multi: true, label: 'Excel 2007+ XML Format', options: {} },\n {\n value: 'csv',\n extension: '.csv',\n multi: false,\n label: 'Comma Separated Values',\n options: {\n FS: ',',\n RS: '\\n',\n },\n },\n\n // Other popular formats\n { value: 'ods', extension: '.ods', multi: true, label: 'OpenDocument Spreadsheet', options: {} },\n {\n value: 'txt',\n extension: '.txt',\n multi: false,\n label: 'UTF-16 Unicode Text (TXT)',\n options: {\n FS: ',',\n RS: '\\n',\n },\n },\n { value: 'html', extension: '.html', multi: false, label: 'HTML Document', options: {} },\n\n // Platform-specific formats\n // Disabled due to the requirement of including an additional dependency (zahl)\n // {\n // value: 'numbers',\n // extension: '.numbers',\n // multi: true,\n // label: 'Numbers 3.0+ Spreadsheet',\n // options: {},\n // },\n\n // Common Excel formats\n {\n value: 'biff8',\n extension: '.xls',\n multi: true,\n label: 'Excel 97-2004 Workbook Format',\n options: {},\n },\n {\n value: 'xlsm',\n extension: '.xlsm',\n multi: true,\n label: 'Excel 2007+ Macro XML Format',\n options: {},\n },\n {\n value: 'xlsb',\n extension: '.xlsb',\n multi: true,\n label: 'Excel 2007+ Binary Format',\n options: {},\n },\n\n // Legacy Excel formats\n {\n value: 'xlml',\n extension: '.xls',\n multi: true,\n label: 'Excel 2003-2004 (SpreadsheetML)',\n options: {},\n },\n {\n value: 'biff5',\n extension: '.xls',\n multi: true,\n label: 'Excel 5.0/95 Workbook Format',\n options: {},\n },\n\n // Specialized formats\n {\n value: 'fods',\n extension: '.fods',\n multi: true,\n label: 'Flat OpenDocument Spreadsheet',\n options: {},\n },\n { value: 'rtf', extension: '.rtf', multi: false, label: 'Rich Text Format (RTF)', options: {} },\n {\n value: 'dbf',\n extension: '.dbf',\n multi: false,\n label: 'dBASE II + VFP Extensions (DBF)',\n options: {},\n },\n\n // Legacy/specialized formats\n { value: 'sylk', extension: '.sylk', multi: false, label: 'Symbolic Link (SYLK)', options: {} },\n {\n value: 'dif',\n extension: '.dif',\n multi: false,\n label: 'Data Interchange Format (DIF)',\n options: {},\n },\n { value: 'prn', extension: '.prn', multi: false, label: 'Lotus Formatted Text', options: {} },\n {\n value: 'eth',\n extension: '.eth',\n multi: false,\n label: 'Ethercalc Record Format (ETH)',\n options: {},\n },\n] as const\n\nexport const ExportFormat = formats.map((f) => f.value)\nexport type ExportFormat = (typeof formats)[number]['value']\n","'use strict';\n\nfunction isHighSurrogate(codePoint) {\n return codePoint >= 0xd800 && codePoint <= 0xdbff;\n}\n\nfunction isLowSurrogate(codePoint) {\n return codePoint >= 0xdc00 && codePoint <= 0xdfff;\n}\n\n// Truncate string by size in bytes\nmodule.exports = function truncate(getLength, string, byteLength) {\n if (typeof string !== \"string\") {\n throw new Error(\"Input must be string\");\n }\n\n var charLength = string.length;\n var curByteLength = 0;\n var codePoint;\n var segment;\n\n for (var i = 0; i < charLength; i += 1) {\n codePoint = string.charCodeAt(i);\n segment = string[i];\n\n if (isHighSurrogate(codePoint) && isLowSurrogate(string.charCodeAt(i + 1))) {\n i += 1;\n segment += string[i];\n }\n\n curByteLength += getLength(segment);\n\n if (curByteLength === byteLength) {\n return string.slice(0, i + 1);\n }\n else if (curByteLength > byteLength) {\n return string.slice(0, i - segment.length + 1);\n }\n }\n\n return string;\n};\n\n","'use strict';\n\nvar truncate = require(\"./lib/truncate\");\nvar getLength = Buffer.byteLength.bind(Buffer);\nmodule.exports = truncate.bind(null, getLength);\n","/*jshint node:true*/\n'use strict';\n\n/**\n * Replaces characters in strings that are illegal/unsafe for filenames.\n * Unsafe characters are either removed or replaced by a substitute set\n * in the optional `options` object.\n *\n * Illegal Characters on Various Operating Systems\n * / ? < > \\ : * | \"\n * https://kb.acronis.com/content/39790\n *\n * Unicode Control codes\n * C0 0x00-0x1f & C1 (0x80-0x9f)\n * http://en.wikipedia.org/wiki/C0_and_C1_control_codes\n *\n * Reserved filenames on Unix-based systems (\".\", \"..\")\n * Reserved filenames in Windows (\"CON\", \"PRN\", \"AUX\", \"NUL\", \"COM1\",\n * \"COM2\", \"COM3\", \"COM4\", \"COM5\", \"COM6\", \"COM7\", \"COM8\", \"COM9\",\n * \"LPT1\", \"LPT2\", \"LPT3\", \"LPT4\", \"LPT5\", \"LPT6\", \"LPT7\", \"LPT8\", and\n * \"LPT9\") case-insesitively and with or without filename extensions.\n *\n * Capped at 255 characters in length.\n * http://unix.stackexchange.com/questions/32795/what-is-the-maximum-allowed-filename-and-folder-size-with-ecryptfs\n *\n * @param {String} input Original filename\n * @param {Object} options {replacement: String | Function }\n * @return {String} Sanitized filename\n */\n\nvar truncate = require(\"truncate-utf8-bytes\");\n\nvar illegalRe = /[\\/\\?<>\\\\:\\*\\|\"]/g;\nvar controlRe = /[\\x00-\\x1f\\x80-\\x9f]/g;\nvar reservedRe = /^\\.+$/;\nvar windowsReservedRe = /^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\\..*)?$/i;\nvar windowsTrailingRe = /[\\. ]+$/;\n\nfunction sanitize(input, replacement) {\n if (typeof input !== 'string') {\n throw new Error('Input must be string');\n }\n var sanitized = input\n .replace(illegalRe, replacement)\n .replace(controlRe, replacement)\n .replace(reservedRe, replacement)\n .replace(windowsReservedRe, replacement)\n .replace(windowsTrailingRe, replacement);\n return truncate(sanitized, 255);\n}\n\nmodule.exports = function (input, options) {\n var replacement = (options && options.replacement) || '';\n var output = sanitize(input, replacement);\n if (replacement === '') {\n return output;\n }\n return sanitize(output, '');\n};\n","import { default as filenameSanitizer } from 'sanitize-filename'\n\nexport const isUnsafeFilename = (filename: string) => {\n return filename !== filenameSanitizer(filename)\n}\n","import { isUnsafeFilename } from './utils'\nimport { ExportFormat } from './constants'\nimport { validator as joi } from '@nhtio/validation'\nimport type { I18nTranslator } from '../ioc'\nimport type { CustomHelpers } from '@nhtio/validation'\n\nexport const filenameSchema = joi.string().custom((value: any, helpers: CustomHelpers) => {\n if (isUnsafeFilename(value)) {\n return helpers.error('any.invalid')\n }\n return value\n})\n\nexport const exportFormatSchema = joi.string().valid(...ExportFormat)\n\nexport const ExportScope = ['selected', 'page', 'all'] as const\nexport type ExportScope = (typeof ExportScope)[number]\n\nexport type ExportOptions = {\n format: ExportFormat\n filename: string\n scope: ExportScope\n includeAllColumns?: boolean\n humanizeNames?: boolean\n humanizeData?: boolean\n}\n\nexport const exportOptionsSchema = joi.object({\n // the format to export as\n format: exportFormatSchema.required(),\n // the name of the file to be exported\n filename: filenameSchema.required(),\n // the scope of data to export\n scope: joi\n .string()\n .valid(...ExportScope)\n .required(),\n // if all columns should be included, even if hidden (except for browser-computed virtual columns)\n includeAllColumns: joi.boolean(),\n // if human-friendly names should be used for column names\n humanizeNames: joi.boolean(),\n // if data should be humanized (e.g. dates formatted as strings)\n humanizeData: joi.boolean(),\n})\n\nexport const exportOptionsSchemaFactory = (t: I18nTranslator) =>\n joi.object({\n // the format to export as\n format: exportFormatSchema.required().label(t('exporter.form.fields.format.label')),\n // the name of the file to be exported\n filename: filenameSchema.required().label(t('exporter.form.fields.filename.label')),\n // the scope of data to export\n scope: joi\n .string()\n .valid(...ExportScope)\n .required()\n .label(t('exporter.form.fields.scope.label')),\n // if all columns should be included, even if hidden (except for browser-computed virtual columns)\n includeAllColumns: joi.boolean().label(t('exporter.form.fields.includeAllColumns.label')),\n // if human-friendly names should be used for column names\n humanizeNames: joi.boolean().label(t('exporter.form.fields.humanizeNames.label')),\n // if data should be humanized (e.g. dates formatted as strings)\n humanizeData: joi.boolean().label(t('exporter.form.fields.humanizeData.label')),\n })\n","// Utilities\nimport { computed, onBeforeUnmount, onMounted, shallowRef, watch } from 'vue';\nimport { convertToUnit } from \"../../util/index.js\"; // Types\nexport function useSticky(_ref) {\n let {\n rootEl,\n isSticky,\n layoutItemStyles\n } = _ref;\n const isStuck = shallowRef(false);\n const stuckPosition = shallowRef(0);\n const stickyStyles = computed(() => {\n const side = typeof isStuck.value === 'boolean' ? 'top' : isStuck.value;\n return [isSticky.value ? {\n top: 'auto',\n bottom: 'auto',\n height: undefined\n } : undefined, isStuck.value ? {\n [side]: convertToUnit(stuckPosition.value)\n } : {\n top: layoutItemStyles.value.top\n }];\n });\n onMounted(() => {\n watch(isSticky, val => {\n if (val) {\n window.addEventListener('scroll', onScroll, {\n passive: true\n });\n } else {\n window.removeEventListener('scroll', onScroll);\n }\n }, {\n immediate: true\n });\n });\n onBeforeUnmount(() => {\n window.removeEventListener('scroll', onScroll);\n });\n let lastScrollTop = 0;\n function onScroll() {\n const direction = lastScrollTop > window.scrollY ? 'up' : 'down';\n const rect = rootEl.value.getBoundingClientRect();\n const layoutTop = parseFloat(layoutItemStyles.value.top ?? 0);\n const top = window.scrollY - Math.max(0, stuckPosition.value - layoutTop);\n const bottom = rect.height + Math.max(stuckPosition.value, layoutTop) - window.scrollY - window.innerHeight;\n const bodyScroll = parseFloat(getComputedStyle(rootEl.value).getPropertyValue('--v-body-scroll-y')) || 0;\n if (rect.height < window.innerHeight - layoutTop) {\n isStuck.value = 'top';\n stuckPosition.value = layoutTop;\n } else if (direction === 'up' && isStuck.value === 'bottom' || direction === 'down' && isStuck.value === 'top') {\n stuckPosition.value = window.scrollY + rect.top - bodyScroll;\n isStuck.value = true;\n } else if (direction === 'down' && bottom <= 0) {\n stuckPosition.value = 0;\n isStuck.value = 'bottom';\n } else if (direction === 'up' && top <= 0) {\n if (!bodyScroll) {\n stuckPosition.value = rect.top + top;\n isStuck.value = 'top';\n } else if (isStuck.value !== 'top') {\n stuckPosition.value = -top + bodyScroll + layoutTop;\n isStuck.value = 'top';\n }\n }\n lastScrollTop = window.scrollY;\n }\n return {\n isStuck,\n stickyStyles\n };\n}\n//# sourceMappingURL=sticky.js.map","// Utilities\nimport { CircularBuffer } from \"../util/index.js\";\nconst HORIZON = 100; // ms\nconst HISTORY = 20; // number of samples to keep\n\n/** @see https://android.googlesource.com/platform/frameworks/native/+/master/libs/input/VelocityTracker.cpp */\nfunction kineticEnergyToVelocity(work) {\n const sqrt2 = 1.41421356237;\n return (work < 0 ? -1.0 : 1.0) * Math.sqrt(Math.abs(work)) * sqrt2;\n}\n\n/**\n * Returns pointer velocity in px/s\n */\nexport function calculateImpulseVelocity(samples) {\n // The input should be in reversed time order (most recent sample at index i=0)\n if (samples.length < 2) {\n // if 0 or 1 points, velocity is zero\n return 0;\n }\n // if (samples[1].t > samples[0].t) {\n // // Algorithm will still work, but not perfectly\n // consoleWarn('Samples provided to calculateImpulseVelocity in the wrong order')\n // }\n if (samples.length === 2) {\n // if 2 points, basic linear calculation\n if (samples[1].t === samples[0].t) {\n // consoleWarn(`Events have identical time stamps t=${samples[0].t}, setting velocity = 0`)\n return 0;\n }\n return (samples[1].d - samples[0].d) / (samples[1].t - samples[0].t);\n }\n // Guaranteed to have at least 3 points here\n // start with the oldest sample and go forward in time\n let work = 0;\n for (let i = samples.length - 1; i > 0; i--) {\n if (samples[i].t === samples[i - 1].t) {\n // consoleWarn(`Events have identical time stamps t=${samples[i].t}, skipping sample`)\n continue;\n }\n const vprev = kineticEnergyToVelocity(work); // v[i-1]\n const vcurr = (samples[i].d - samples[i - 1].d) / (samples[i].t - samples[i - 1].t); // v[i]\n work += (vcurr - vprev) * Math.abs(vcurr);\n if (i === samples.length - 1) {\n work *= 0.5;\n }\n }\n return kineticEnergyToVelocity(work) * 1000;\n}\nexport function useVelocity() {\n const touches = {};\n function addMovement(e) {\n Array.from(e.changedTouches).forEach(touch => {\n const samples = touches[touch.identifier] ?? (touches[touch.identifier] = new CircularBuffer(HISTORY));\n samples.push([e.timeStamp, touch]);\n });\n }\n function endTouch(e) {\n Array.from(e.changedTouches).forEach(touch => {\n delete touches[touch.identifier];\n });\n }\n function getVelocity(id) {\n const samples = touches[id]?.values().reverse();\n if (!samples) {\n throw new Error(`No samples for touch id ${id}`);\n }\n const newest = samples[0];\n const x = [];\n const y = [];\n for (const val of samples) {\n if (newest[0] - val[0] > HORIZON) break;\n x.push({\n t: val[0],\n d: val[1].clientX\n });\n y.push({\n t: val[0],\n d: val[1].clientY\n });\n }\n return {\n x: calculateImpulseVelocity(x),\n y: calculateImpulseVelocity(y),\n get direction() {\n const {\n x,\n y\n } = this;\n const [absX, absY] = [Math.abs(x), Math.abs(y)];\n return absX > absY && x >= 0 ? 'right' : absX > absY && x <= 0 ? 'left' : absY > absX && y >= 0 ? 'down' : absY > absX && y <= 0 ? 'up' : oops();\n }\n };\n }\n return {\n addMovement,\n endTouch,\n getVelocity\n };\n}\nfunction oops() {\n throw new Error();\n}\n//# sourceMappingURL=touch.js.map","// Composables\nimport { useToggleScope } from \"../../composables/toggleScope.js\";\nimport { useVelocity } from \"../../composables/touch.js\"; // Utilities\nimport { computed, onBeforeUnmount, onMounted, onScopeDispose, shallowRef, watchEffect } from 'vue';\nimport { clamp } from \"../../util/index.js\"; // Types\nexport function useTouch(_ref) {\n let {\n el,\n isActive,\n isTemporary,\n width,\n touchless,\n position\n } = _ref;\n onMounted(() => {\n window.addEventListener('touchstart', onTouchstart, {\n passive: true\n });\n window.addEventListener('touchmove', onTouchmove, {\n passive: false\n });\n window.addEventListener('touchend', onTouchend, {\n passive: true\n });\n });\n onBeforeUnmount(() => {\n window.removeEventListener('touchstart', onTouchstart);\n window.removeEventListener('touchmove', onTouchmove);\n window.removeEventListener('touchend', onTouchend);\n });\n const isHorizontal = computed(() => ['left', 'right'].includes(position.value));\n const {\n addMovement,\n endTouch,\n getVelocity\n } = useVelocity();\n let maybeDragging = false;\n const isDragging = shallowRef(false);\n const dragProgress = shallowRef(0);\n const offset = shallowRef(0);\n let start;\n function getOffset(pos, active) {\n return (position.value === 'left' ? pos : position.value === 'right' ? document.documentElement.clientWidth - pos : position.value === 'top' ? pos : position.value === 'bottom' ? document.documentElement.clientHeight - pos : oops()) - (active ? width.value : 0);\n }\n function getProgress(pos) {\n let limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n const progress = position.value === 'left' ? (pos - offset.value) / width.value : position.value === 'right' ? (document.documentElement.clientWidth - pos - offset.value) / width.value : position.value === 'top' ? (pos - offset.value) / width.value : position.value === 'bottom' ? (document.documentElement.clientHeight - pos - offset.value) / width.value : oops();\n return limit ? clamp(progress) : progress;\n }\n function onTouchstart(e) {\n if (touchless.value) return;\n const touchX = e.changedTouches[0].clientX;\n const touchY = e.changedTouches[0].clientY;\n const touchZone = 25;\n const inTouchZone = position.value === 'left' ? touchX < touchZone : position.value === 'right' ? touchX > document.documentElement.clientWidth - touchZone : position.value === 'top' ? touchY < touchZone : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - touchZone : oops();\n const inElement = isActive.value && (position.value === 'left' ? touchX < width.value : position.value === 'right' ? touchX > document.documentElement.clientWidth - width.value : position.value === 'top' ? touchY < width.value : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - width.value : oops());\n if (inTouchZone || inElement || isActive.value && isTemporary.value) {\n start = [touchX, touchY];\n offset.value = getOffset(isHorizontal.value ? touchX : touchY, isActive.value);\n dragProgress.value = getProgress(isHorizontal.value ? touchX : touchY);\n maybeDragging = offset.value > -20 && offset.value < 80;\n endTouch(e);\n addMovement(e);\n }\n }\n function onTouchmove(e) {\n const touchX = e.changedTouches[0].clientX;\n const touchY = e.changedTouches[0].clientY;\n if (maybeDragging) {\n if (!e.cancelable) {\n maybeDragging = false;\n return;\n }\n const dx = Math.abs(touchX - start[0]);\n const dy = Math.abs(touchY - start[1]);\n const thresholdMet = isHorizontal.value ? dx > dy && dx > 3 : dy > dx && dy > 3;\n if (thresholdMet) {\n isDragging.value = true;\n maybeDragging = false;\n } else if ((isHorizontal.value ? dy : dx) > 3) {\n maybeDragging = false;\n }\n }\n if (!isDragging.value) return;\n e.preventDefault();\n addMovement(e);\n const progress = getProgress(isHorizontal.value ? touchX : touchY, false);\n dragProgress.value = Math.max(0, Math.min(1, progress));\n if (progress > 1) {\n offset.value = getOffset(isHorizontal.value ? touchX : touchY, true);\n } else if (progress < 0) {\n offset.value = getOffset(isHorizontal.value ? touchX : touchY, false);\n }\n }\n function onTouchend(e) {\n maybeDragging = false;\n if (!isDragging.value) return;\n addMovement(e);\n isDragging.value = false;\n const velocity = getVelocity(e.changedTouches[0].identifier);\n const vx = Math.abs(velocity.x);\n const vy = Math.abs(velocity.y);\n const thresholdMet = isHorizontal.value ? vx > vy && vx > 400 : vy > vx && vy > 3;\n if (thresholdMet) {\n isActive.value = velocity.direction === ({\n left: 'right',\n right: 'left',\n top: 'down',\n bottom: 'up'\n }[position.value] || oops());\n } else {\n isActive.value = dragProgress.value > 0.5;\n }\n }\n const dragStyles = computed(() => {\n return isDragging.value ? {\n transform: position.value === 'left' ? `translateX(calc(-100% + ${dragProgress.value * width.value}px))` : position.value === 'right' ? `translateX(calc(100% - ${dragProgress.value * width.value}px))` : position.value === 'top' ? `translateY(calc(-100% + ${dragProgress.value * width.value}px))` : position.value === 'bottom' ? `translateY(calc(100% - ${dragProgress.value * width.value}px))` : oops(),\n transition: 'none'\n } : undefined;\n });\n useToggleScope(isDragging, () => {\n const transform = el.value?.style.transform ?? null;\n const transition = el.value?.style.transition ?? null;\n watchEffect(() => {\n el.value?.style.setProperty('transform', dragStyles.value?.transform || 'none');\n el.value?.style.setProperty('transition', dragStyles.value?.transition || null);\n });\n onScopeDispose(() => {\n el.value?.style.setProperty('transform', transform);\n el.value?.style.setProperty('transition', transition);\n });\n });\n return {\n isDragging,\n dragProgress,\n dragStyles\n };\n}\nfunction oops() {\n throw new Error();\n}\n//# sourceMappingURL=touch.js.map","import { Fragment as _Fragment, createVNode as _createVNode, createElementVNode as _createElementVNode, mergeProps as _mergeProps } from \"vue\";\n// Styles\nimport \"./VNavigationDrawer.css\";\n\n// Components\nimport { VDefaultsProvider } from \"../VDefaultsProvider/index.js\";\nimport { VImg } from \"../VImg/index.js\"; // Composables\nimport { useSticky } from \"./sticky.js\";\nimport { useTouch } from \"./touch.js\";\nimport { useRtl } from \"../../composables/index.js\";\nimport { makeBorderProps, useBorder } from \"../../composables/border.js\";\nimport { useBackgroundColor } from \"../../composables/color.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { provideDefaults } from \"../../composables/defaults.js\";\nimport { makeDelayProps, useDelay } from \"../../composables/delay.js\";\nimport { makeDisplayProps, useDisplay } from \"../../composables/display.js\";\nimport { makeElevationProps, useElevation } from \"../../composables/elevation.js\";\nimport { makeFocusTrapProps, useFocusTrap } from \"../../composables/focusTrap.js\";\nimport { makeLayoutItemProps, useLayoutItem } from \"../../composables/layout.js\";\nimport { useProxiedModel } from \"../../composables/proxiedModel.js\";\nimport { makeRoundedProps, useRounded } from \"../../composables/rounded.js\";\nimport { useRouter } from \"../../composables/router.js\";\nimport { useScopeId } from \"../../composables/scopeId.js\";\nimport { useSsrBoot } from \"../../composables/ssrBoot.js\";\nimport { makeTagProps } from \"../../composables/tag.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\";\nimport { useToggleScope } from \"../../composables/toggleScope.js\"; // Utilities\nimport { computed, nextTick, readonly, ref, shallowRef, toRef, Transition, watch } from 'vue';\nimport { genericComponent, omit, propsFactory, toPhysical, useRender } from \"../../util/index.js\"; // Types\nconst locations = ['start', 'end', 'left', 'right', 'top', 'bottom'];\nexport const makeVNavigationDrawerProps = propsFactory({\n color: String,\n disableResizeWatcher: Boolean,\n disableRouteWatcher: Boolean,\n expandOnHover: Boolean,\n floating: Boolean,\n modelValue: {\n type: Boolean,\n default: null\n },\n permanent: Boolean,\n rail: {\n type: Boolean,\n default: null\n },\n railWidth: {\n type: [Number, String],\n default: 56\n },\n scrim: {\n type: [Boolean, String],\n default: true\n },\n image: String,\n temporary: Boolean,\n persistent: Boolean,\n touchless: Boolean,\n width: {\n type: [Number, String],\n default: 256\n },\n location: {\n type: String,\n default: 'start',\n validator: value => locations.includes(value)\n },\n sticky: Boolean,\n ...makeBorderProps(),\n ...makeComponentProps(),\n ...makeDelayProps(),\n ...makeDisplayProps({\n mobile: null\n }),\n ...makeElevationProps(),\n ...makeLayoutItemProps(),\n ...makeRoundedProps(),\n ...omit(makeFocusTrapProps(), ['disableInitialFocus']),\n ...makeTagProps({\n tag: 'nav'\n }),\n ...makeThemeProps()\n}, 'VNavigationDrawer');\nexport const VNavigationDrawer = genericComponent()({\n name: 'VNavigationDrawer',\n props: makeVNavigationDrawerProps(),\n emits: {\n 'update:modelValue': val => true,\n 'update:rail': val => true\n },\n setup(props, _ref) {\n let {\n attrs,\n emit,\n slots\n } = _ref;\n const {\n isRtl\n } = useRtl();\n const {\n themeClasses\n } = provideTheme(props);\n const {\n borderClasses\n } = useBorder(props);\n const {\n backgroundColorClasses,\n backgroundColorStyles\n } = useBackgroundColor(() => props.color);\n const {\n elevationClasses\n } = useElevation(props);\n const {\n displayClasses,\n mobile\n } = useDisplay(props);\n const {\n roundedClasses\n } = useRounded(props);\n const router = useRouter();\n const isActive = useProxiedModel(props, 'modelValue', null, v => !!v);\n const {\n ssrBootStyles\n } = useSsrBoot();\n const {\n scopeId\n } = useScopeId();\n const rootEl = ref();\n const isHovering = shallowRef(false);\n const {\n runOpenDelay,\n runCloseDelay\n } = useDelay(props, value => {\n isHovering.value = value;\n });\n const width = computed(() => {\n return props.rail && props.expandOnHover && isHovering.value ? Number(props.width) : Number(props.rail ? props.railWidth : props.width);\n });\n const location = computed(() => {\n return toPhysical(props.location, isRtl.value);\n });\n const isPersistent = toRef(() => props.persistent);\n const isTemporary = computed(() => !props.permanent && (mobile.value || props.temporary));\n const isSticky = computed(() => props.sticky && !isTemporary.value && location.value !== 'bottom');\n useFocusTrap(props, {\n isActive,\n localTop: isTemporary,\n contentEl: rootEl\n });\n useToggleScope(() => props.expandOnHover && props.rail != null, () => {\n watch(isHovering, val => emit('update:rail', !val));\n });\n useToggleScope(() => !props.disableResizeWatcher, () => {\n watch(isTemporary, val => !props.permanent && nextTick(() => isActive.value = !val));\n });\n useToggleScope(() => !props.disableRouteWatcher && !!router, () => {\n watch(router.currentRoute, () => isTemporary.value && (isActive.value = false));\n });\n watch(() => props.permanent, val => {\n if (val) isActive.value = true;\n });\n if (props.modelValue == null && !isTemporary.value) {\n isActive.value = props.permanent || !mobile.value;\n }\n const {\n isDragging,\n dragProgress\n } = useTouch({\n el: rootEl,\n isActive,\n isTemporary,\n width,\n touchless: toRef(() => props.touchless),\n position: location\n });\n const layoutSize = computed(() => {\n const size = isTemporary.value ? 0 : props.rail && props.expandOnHover ? Number(props.railWidth) : width.value;\n return isDragging.value ? size * dragProgress.value : size;\n });\n const {\n layoutItemStyles,\n layoutItemScrimStyles\n } = useLayoutItem({\n id: props.name,\n order: computed(() => parseInt(props.order, 10)),\n position: location,\n layoutSize,\n elementSize: width,\n active: readonly(isActive),\n disableTransitions: toRef(() => isDragging.value),\n absolute: computed(() =>\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n props.absolute || isSticky.value && typeof isStuck.value !== 'string')\n });\n const {\n isStuck,\n stickyStyles\n } = useSticky({\n rootEl,\n isSticky,\n layoutItemStyles\n });\n const scrimColor = useBackgroundColor(() => {\n return typeof props.scrim === 'string' ? props.scrim : null;\n });\n const scrimStyles = computed(() => ({\n ...(isDragging.value ? {\n opacity: dragProgress.value * 0.2,\n transition: 'none'\n } : undefined),\n ...layoutItemScrimStyles.value\n }));\n provideDefaults({\n VList: {\n bgColor: 'transparent'\n }\n });\n useRender(() => {\n const hasImage = slots.image || props.image;\n return _createElementVNode(_Fragment, null, [_createVNode(props.tag, _mergeProps({\n \"ref\": rootEl,\n \"onMouseenter\": runOpenDelay,\n \"onMouseleave\": runCloseDelay,\n \"class\": ['v-navigation-drawer', `v-navigation-drawer--${location.value}`, {\n 'v-navigation-drawer--expand-on-hover': props.expandOnHover,\n 'v-navigation-drawer--floating': props.floating,\n 'v-navigation-drawer--is-hovering': isHovering.value,\n 'v-navigation-drawer--rail': props.rail,\n 'v-navigation-drawer--temporary': isTemporary.value,\n 'v-navigation-drawer--persistent': isPersistent.value,\n 'v-navigation-drawer--active': isActive.value,\n 'v-navigation-drawer--sticky': isSticky.value\n }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, displayClasses.value, elevationClasses.value, roundedClasses.value, props.class],\n \"style\": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value, stickyStyles.value, props.style],\n \"inert\": !isActive.value\n }, scopeId, attrs), {\n default: () => [hasImage && _createElementVNode(\"div\", {\n \"key\": \"image\",\n \"class\": \"v-navigation-drawer__img\"\n }, [!slots.image ? _createVNode(VImg, {\n \"key\": \"image-img\",\n \"alt\": \"\",\n \"cover\": true,\n \"height\": \"inherit\",\n \"src\": props.image\n }, null) : _createVNode(VDefaultsProvider, {\n \"key\": \"image-defaults\",\n \"disabled\": !props.image,\n \"defaults\": {\n VImg: {\n alt: '',\n cover: true,\n height: 'inherit',\n src: props.image\n }\n }\n }, slots.image)]), slots.prepend && _createElementVNode(\"div\", {\n \"class\": \"v-navigation-drawer__prepend\"\n }, [slots.prepend?.()]), _createElementVNode(\"div\", {\n \"class\": \"v-navigation-drawer__content\"\n }, [slots.default?.()]), slots.append && _createElementVNode(\"div\", {\n \"class\": \"v-navigation-drawer__append\"\n }, [slots.append?.()])]\n }), _createVNode(Transition, {\n \"name\": \"fade-transition\"\n }, {\n default: () => [isTemporary.value && (isDragging.value || isActive.value) && !!props.scrim && _createElementVNode(\"div\", _mergeProps({\n \"class\": ['v-navigation-drawer__scrim', scrimColor.backgroundColorClasses.value],\n \"style\": [scrimStyles.value, scrimColor.backgroundColorStyles.value],\n \"onClick\": () => {\n if (isPersistent.value) return;\n isActive.value = false;\n }\n }, scopeId), null)]\n })]);\n });\n return {\n isStuck\n };\n }\n});\n//# sourceMappingURL=VNavigationDrawer.js.map","import { useI18n } from '../../ioc'\nimport { encode } from '@nhtio/encoder'\nimport { SvgIcon } from '../../svg-icon'\nimport { deepmerge } from 'deepmerge-ts'\nimport { Sortable } from '../../sortable'\nimport { VBtn } from 'vuetify/components/VBtn'\nimport { VCard } from 'vuetify/components/VCard'\nimport { VIcon } from 'vuetify/components/VIcon'\nimport { VBadge } from 'vuetify/components/VBadge'\nimport { VSpacer } from 'vuetify/components/VGrid'\nimport { VSheet } from 'vuetify/components/VSheet'\nimport { ControlButton } from '../../control-button'\nimport { VDialog } from 'vuetify/components/VDialog'\nimport { emitsFactory } from '../../common/factories'\nimport { VDivider } from 'vuetify/components/VDivider'\nimport { pick } from '@nhtio/vuetifiable/util/helpers'\nimport { VTextField } from 'vuetify/components/VTextField'\nimport { debounce } from '@nhtio/vuetifiable/util/helpers'\nimport { useResourcefulIndexScopedDisplay } from '../index'\nimport { VList, VListItem } from 'vuetify/components/VList'\nimport { VEmptyState } from 'vuetify/components/VEmptyState'\nimport { TypedEventEmitter } from '@nhtio/tiny-typed-emitter'\nimport { makeControlButtonProps } from '../../control-button/props'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { default as warningSvg } from '../../icons/warning.svg?url'\nimport { VToolbar, VToolbarItems } from 'vuetify/components/VToolbar'\nimport { VNavigationDrawer } from 'vuetify/components/VNavigationDrawer'\nimport { makeVDialogProps } from '@nhtio/vuetifiable/components/VDialog/VDialog'\nimport { defineComponent, h, toRefs, toRaw, computed, watch, ref, nextTick } from 'vue'\nimport { makeVTextFieldProps } from '@nhtio/vuetifiable/components/VTextField/VTextField'\nimport { makeVEmptyStateProps } from '@nhtio/vuetifiable/components/VEmptyState/VEmptyState'\nimport { getDefaultsForPropFactory, stripUndefinedValuesFromObject } from '../../common/utils'\nimport {\n mdiClose,\n mdiContentSave,\n mdiContentSaveCheck,\n mdiMagnify,\n mdiDrag,\n mdiMouseOff,\n mdiMenuUp,\n mdiMenuDown,\n mdiEyeOff,\n mdiEye,\n} from '@mdi/js'\nimport type { EventMap } from '@nhtio/tiny-typed-emitter'\nimport type { SortableProps } from '../../sortable/props'\nimport type { ResourcefulFieldLabelTerms } from '../props'\nimport type { ResourcefulSchemaDefinition } from '../types'\nimport type { PropType, ExtractPublicPropTypes } from 'vue'\nimport type { SortableItemSlotBindings } from '../../sortable'\nimport type { ControlButtonProps } from '../../control-button/props'\n\nconst makeResourcefulIndexColumnsControlsDispositionButtonProps = propsFactory(\n {\n ...pick(makeControlButtonProps(), [\n 'density',\n 'dividePrependIcon',\n 'elevation',\n 'height',\n 'size',\n ]),\n },\n 'ResourceIndexColumnsControlsDispositionButton'\n)\n\nconst makeResourcefulIndexColumnsControlsSaveButtonProps = propsFactory(\n {\n ...pick(\n makeControlButtonProps({\n color: 'surface-light',\n prependIcon: () => h(SvgIcon, { d: mdiContentSave }),\n }),\n ['prependIcon', 'color']\n ),\n },\n 'ResourceIndexColumnsControlsSaveButton'\n)\n\nconst makeResourcefulIndexColumnsControlsDiscardButtonProps = propsFactory(\n {\n ...pick(\n makeControlButtonProps({\n color: 'surface-light',\n prependIcon: () => h(SvgIcon, { d: mdiClose }),\n }),\n ['prependIcon', 'color']\n ),\n },\n 'ResourceIndexColumnsControlsDiscardButton'\n)\n\nexport const defaultsForResourcefulIndexColumnsControlsDispositionButtonProps =\n getDefaultsForPropFactory(makeResourcefulIndexColumnsControlsDispositionButtonProps)\n\nexport const defaultsForResourcefulIndexColumnsControlsSaveButtonProps = getDefaultsForPropFactory(\n makeResourcefulIndexColumnsControlsSaveButtonProps\n)\n\nexport const defaultsForResourcefulIndexColumnsControlsDiscardButtonProps =\n getDefaultsForPropFactory(makeResourcefulIndexColumnsControlsDiscardButtonProps)\n\nexport type DispositionButtonProps = ExtractPublicPropTypes<\n ReturnType<typeof makeResourcefulIndexColumnsControlsDispositionButtonProps>\n>\n\nexport type SaveButtonProps = ExtractPublicPropTypes<\n ReturnType<typeof makeResourcefulIndexColumnsControlsSaveButtonProps>\n>\n\nexport type DiscardButtonProps = ExtractPublicPropTypes<\n ReturnType<typeof makeResourcefulIndexColumnsControlsDiscardButtonProps>\n>\n\nexport const makeResourcefulIndexColumnsControlsProps = propsFactory(\n {\n modelValue: {\n type: Boolean,\n default: false,\n },\n color: {\n type: String as PropType<string | undefined>,\n default: undefined,\n },\n labels: {\n type: Object as PropType<ResourcefulFieldLabelTerms>,\n default: () => ({}),\n },\n possibleFields: {\n type: Object as PropType<ResourcefulSchemaDefinition>,\n default: () => ({}),\n },\n showingFields: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n dispositionButtons: {\n type: Object as PropType<DispositionButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n },\n saveButton: {\n type: Object as PropType<SaveButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n },\n discardButton: {\n type: Object as PropType<DiscardButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n },\n },\n 'ResourcefulIndexColumnsControls'\n)\n\ntype ConfirmDialogEvents = EventMap<{\n show: []\n hide: []\n dispositioned: [disposition: boolean]\n}>\n\ntype VTextFieldPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVTextFieldProps>>\ntype VDialogPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVDialogProps>>\ntype VEmptyStatePublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVEmptyStateProps>>\n\nexport const ResourcefulIndexColumnsControls = defineComponent({\n name: 'ResourcefulIndexColumnsControls',\n props: makeResourcefulIndexColumnsControlsProps(),\n emits: emitsFactory({\n 'update:modelValue': (val: boolean) => typeof val === 'boolean',\n 'update:showingFields': (val: Array<string>) =>\n Array.isArray(val) && val.every((v) => 'string' === typeof v),\n // alias for v-model compatibility\n 'update:model-value': (val: boolean) => typeof val === 'boolean',\n 'update:showing-fields': (val: Array<string>) =>\n Array.isArray(val) && val.every((v) => 'string' === typeof v),\n }),\n setup(props, { emit }) {\n const confirmationBus = new TypedEventEmitter<ConfirmDialogEvents>()\n const {\n modelValue,\n color,\n possibleFields,\n showingFields,\n labels,\n dispositionButtons,\n saveButton,\n discardButton,\n } = toRefs(props)\n const { width: screenWidth, xs } = useResourcefulIndexScopedDisplay()\n const showDispositionDialog = ref(false)\n const visibility = computed({\n get: () => modelValue.value,\n set: (val: boolean) => {\n // plumbing to support confirmation dialog\n // if the user is trying to close the dialog and there are unsaved changes\n confirmationBus.off('dispositioned')\n if (!val && isDirty.value) {\n confirmationBus.once('dispositioned', (disposition: boolean) => {\n if (disposition && isDirty.value) {\n emit('update:showingFields', updatedShowingFields.value)\n }\n nextTick(() => {\n emit('update:modelValue', val)\n emit('update:model-value', val)\n confirmationBus.emit('hide')\n isDirty.value = false\n })\n })\n confirmationBus.emit('show')\n } else {\n emit('update:modelValue', val)\n emit('update:model-value', val)\n }\n },\n })\n const updatedShowingFields = ref<string[]>(['id'])\n watch(\n showingFields,\n (is) => {\n updatedShowingFields.value = toRaw(is)\n if (updatedShowingFields.value.length === 0) {\n updatedShowingFields.value.push('id')\n }\n },\n {\n immediate: true,\n deep: true,\n }\n )\n const isDirty = ref(false)\n const updateIsDirty = debounce(() => {\n const rawShowingFields = toRaw(showingFields.value)\n const rawUpdatedShowingFields = toRaw(updatedShowingFields.value)\n const is = encode(rawShowingFields) !== encode(rawUpdatedShowingFields)\n isDirty.value = is\n }, 100)\n watch(showingFields, () => updateIsDirty, { immediate: true, deep: true })\n watch(updatedShowingFields, () => updateIsDirty, { immediate: true, deep: true })\n watch(modelValue, (is, was) => {\n if (is && is !== was) {\n updatedShowingFields.value = toRaw(showingFields.value)\n if (updatedShowingFields.value.length === 0) {\n updatedShowingFields.value.push('id')\n }\n }\n })\n const unshownFields = computed(() =>\n Object.keys(possibleFields.value).filter(\n (field) => !updatedShowingFields.value.includes(field) && 'id' !== field\n )\n )\n const t = useI18n()\n const resultFilter = ref<string | null>(null)\n const resultFilderFieldBindings = computed<VTextFieldPublicProps>(() => ({\n 'modelValue': resultFilter.value,\n 'onUpdate:modelValue': (val: string) => {\n resultFilter.value = val\n },\n 'label': t('lucid.resourceful.index.columnsControls.filter.label'),\n 'variant': 'outlined',\n 'density': 'compact',\n 'clearable': true,\n 'clearIcon': () => h(SvgIcon, { d: mdiClose }),\n 'prependInnerIcon': () => h(SvgIcon, { d: mdiMagnify }),\n 'hideDetails': true,\n // prevent accidentally submitting the form\n // since we are in the context of a form tag\n // but there's also no need for line breaks in this field anyway\n 'onKeydown': (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n e.stopPropagation()\n }\n },\n 'onKeyup': (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n e.stopPropagation()\n }\n },\n }))\n const isFiltering = computed(\n () => 'string' === typeof resultFilter.value && resultFilter.value.length > 0\n )\n const dragBindings = computed<SortableProps>(() => ({\n modelValue: updatedShowingFields.value,\n tag: VList,\n tagProps: {\n class: ['transparent', { 'pb-0': unshownFields.value.length > 0 }],\n nav: true,\n selectable: !isFiltering.value,\n },\n animation: 300,\n disabled: isFiltering.value,\n ghostClass: 'resourceful-index__column-controls__sortable-ghost',\n chosenClass: 'resourceful-index__column-controls__sortable-chosen',\n dragClass: 'resourceful-index__column-controls__sortable-drag',\n ...{\n 'onUpdate:modelValue': (val: Array<string>) => {\n updatedShowingFields.value = val\n if (updatedShowingFields.value.length === 0) {\n updatedShowingFields.value.push('id')\n }\n nextTick(() => {\n updateIsDirty()\n })\n },\n },\n }))\n confirmationBus.on('show', () => {\n showDispositionDialog.value = true\n })\n confirmationBus.on('hide', () => {\n showDispositionDialog.value = false\n })\n const confirmationDialogBindings = computed<VDialogPublicProps>(() => ({\n modelValue: showDispositionDialog.value,\n persistent: true,\n fullscreen: xs.value,\n contained: !xs.value,\n maxWidth: 500,\n scrim: true,\n }))\n const confirmationEmptyStateBindings = computed<VEmptyStatePublicProps>(() => ({\n image: warningSvg,\n title: t('lucid.resourceful.index.columnsControls.dispositionDialog.headline'),\n text: t('lucid.resourceful.index.columnsControls.dispositionDialog.title'),\n }))\n const saveDispositionButtonBindings = computed<ControlButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value),\n defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n stripUndefinedValuesFromObject(saveButton.value),\n { cta: t('general.save') },\n { onClick: () => confirmationBus.emit('dispositioned', true) }\n )\n )\n const discardDispositionButtonBindings = computed<ControlButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value),\n defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n stripUndefinedValuesFromObject(discardButton.value),\n { cta: t('general.discard') },\n { onClick: () => confirmationBus.emit('dispositioned', false) }\n )\n )\n return () => [\n h(\n VNavigationDrawer,\n {\n 'modelValue': visibility.value,\n 'onUpdate:modelValue': (val: boolean) => {\n visibility.value = val\n },\n 'permanent': false,\n 'persistent': false,\n 'temporary': true,\n 'absolute': true,\n 'width': screenWidth.value < 500 ? screenWidth.value : 500,\n 'color': color.value,\n },\n () =>\n h('div', { class: ['d-flex', 'flex-column', 'h-100'] }, [\n h(\n VToolbar,\n { color: color.value || 'transparent', class: ['flex-grow-0'], density: 'compact' },\n () => [\n h('div', { class: ['d-flex', 'align-center', 'px-2', 'flex-grow-1'] }, [\n h(VTextField, resultFilderFieldBindings.value),\n ]),\n h(VToolbarItems, {}, () => [\n h(VBtn, {\n icon: () => h(SvgIcon, { d: mdiContentSave }),\n variant: 'text',\n onClick: () => {\n if (isDirty.value) {\n emit('update:showingFields', updatedShowingFields.value)\n nextTick(() => updateIsDirty())\n }\n },\n }),\n h(VBtn, {\n icon: () => h(SvgIcon, { d: mdiClose }),\n variant: 'text',\n onClick: () => (visibility.value = false),\n }),\n ]),\n ]\n ),\n h(VDivider, { class: ['flex-grow-0'] }),\n h(VSheet, { color: 'transparent', class: ['flex-grow-1', 'overflow-y-auto'] }, () => [\n h(\n Sortable,\n {\n ...dragBindings.value,\n },\n {\n item: ({\n item,\n props: sortableItemProps,\n ordinal,\n disabled,\n sortingDisabled,\n first,\n last,\n remove,\n moveUp,\n moveDown,\n }: SortableItemSlotBindings<string>) => {\n const definition = possibleFields.value[item]\n const title = definition\n ? 'computed' === definition.type\n ? definition['x-table-header-definition']!.title\n : t(labels.value[item] || item)\n : t(labels.value[item] || item)\n return h(\n VListItem,\n {\n title,\n ripple: false,\n ...sortableItemProps,\n class: [\n {\n 'd-none':\n isFiltering.value &&\n !title.toLowerCase().includes(resultFilter.value!.toLowerCase()),\n },\n ],\n },\n {\n prepend: () =>\n h('div', { class: ['d-flex', 'align-center', 'justify-start', 'me-2'] }, [\n h(VIcon, {\n icon: () =>\n h(SvgIcon, { d: isFiltering.value ? mdiMouseOff : mdiDrag }),\n }),\n h(VBadge, {\n content: ordinal,\n class: ['ms-2'],\n size: 'x-small',\n inline: true,\n }),\n ]),\n append: () =>\n h('div', { class: ['d-flex', 'align-center', 'justify-end'] }, [\n h(VBtn, {\n size: 'x-small',\n icon: () => h(SvgIcon, { d: mdiMenuUp }),\n class: ['me-1'],\n disabled: isFiltering.value || sortingDisabled || disabled || first,\n variant: 'text',\n onClick: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n moveUp()\n },\n }),\n h(VBtn, {\n size: 'x-small',\n icon: () => h(SvgIcon, { d: mdiMenuDown }),\n class: ['me-1'],\n disabled: isFiltering.value || sortingDisabled || disabled || last,\n variant: 'text',\n onClick: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n moveDown()\n },\n }),\n h(VBtn, {\n size: 'x-small',\n icon: () => h(SvgIcon, { d: mdiEyeOff }),\n disabled: 'id' === item,\n class: [],\n variant: 'text',\n onClick: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n remove()\n },\n }),\n ]),\n }\n )\n },\n }\n ),\n unshownFields.value.length > 0\n ? h(\n VList,\n { class: ['transparent', 'pt-0'], nav: true, selectable: !isFiltering.value },\n () =>\n Array.from(unshownFields.value).map((f) => {\n const definition = possibleFields.value[f]\n const title = definition\n ? 'computed' === definition.type\n ? definition['x-table-header-definition']!.title\n : t(labels.value[f] || f)\n : t(labels.value[f] || f)\n return h(\n VListItem,\n {\n title,\n ripple: false,\n class: [\n {\n 'd-none':\n isFiltering.value &&\n !title.toLowerCase().includes(resultFilter.value!.toLowerCase()),\n },\n ],\n },\n {\n prepend: () =>\n h(\n 'div',\n { class: ['d-flex', 'align-center', 'justify-start', 'me-2'] },\n [\n h(VIcon, {\n icon: () => h(SvgIcon, { d: mdiMouseOff }),\n }),\n h(VBadge, {\n icon: () => h(SvgIcon, { d: mdiEyeOff }),\n class: ['ms-2'],\n size: 'x-small',\n inline: true,\n }),\n ]\n ),\n append: () =>\n h('div', { class: ['d-flex', 'align-center', 'justify-end'] }, [\n h(VBtn, {\n size: 'x-small',\n icon: () => h(SvgIcon, { d: mdiEye }),\n class: [],\n variant: 'text',\n onClick: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n const updatable = Array.from(updatedShowingFields.value)\n updatable.push(f)\n updatedShowingFields.value = updatable\n nextTick(() => {\n updateIsDirty()\n })\n },\n }),\n ]),\n }\n )\n })\n )\n : null,\n ]),\n h(VDivider, { class: ['flex-grow-0'] }),\n h(\n VToolbar,\n { color: color.value || 'transparent', class: ['flex-grow-0'], density: 'compact' },\n () => [\n h(VSpacer),\n h(VToolbarItems, {}, () => [\n h(VBtn, {\n icon: () => h(SvgIcon, { d: mdiContentSaveCheck }),\n variant: 'text',\n onClick: () => {\n if (isDirty.value) {\n emit('update:showingFields', updatedShowingFields.value)\n nextTick(() => {\n isDirty.value = false\n visibility.value = false\n })\n } else {\n nextTick(() => {\n visibility.value = false\n })\n }\n },\n }),\n ]),\n ]\n ),\n h(VDivider, { class: ['flex-grow-0'] }),\n ])\n ),\n h(VDialog, confirmationDialogBindings.value, () =>\n h(VCard, {}, () =>\n h(VEmptyState, confirmationEmptyStateBindings.value, {\n actions: () => [\n h(ControlButton, discardDispositionButtonBindings.value),\n h(ControlButton, saveDispositionButtonBindings.value),\n ],\n })\n )\n ),\n ]\n },\n})\n","import { DateTime } from 'luxon'\nimport { SvgIcon } from '../svg-icon'\nimport { formats } from './constants'\nimport { utils, writeFile } from 'xlsx'\nimport { useI18n, useBrowser } from '../ioc'\nimport { default as numeral } from 'numeral'\nimport { printf as format } from 'fast-printf'\nimport { isHTMLElement } from '../common/guards'\nimport { VCard } from 'vuetify/components/VCard'\nimport { ControlButton } from '../control-button'\nimport { VBadge } from 'vuetify/components/VBadge'\nimport { VLabel } from 'vuetify/components/VLabel'\nimport { VDialog } from 'vuetify/components/VDialog'\nimport { VListItem } from 'vuetify/components/VList'\nimport { VSelect } from 'vuetify/components/VSelect'\nimport { FormWithValidation } from '../ux/validation'\nimport { exportOptionsSchemaFactory } from './schemas'\nimport { VCheckbox } from 'vuetify/components/VCheckbox'\nimport { propsAndEmitsFactory } from '../common/factories'\nimport { VTextField } from 'vuetify/components/VTextField'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { formatBigNumber } from '../common/big_number_formatter'\nimport { VContainer, VRow, VCol } from 'vuetify/components/VGrid'\nimport { VProgressLinear } from 'vuetify/components/VProgressLinear'\nimport { typeAndFormatToResourcefulFieldType } from '../common/utils'\nimport { defineComponent, h, ref, computed, toRefs, watch, nextTick, warn } from 'vue'\nimport {\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n} from '../resourceful-index/partials/_columns_controls'\nimport {\n mdiFileQuestion,\n mdiMenuDown,\n mdiFileFind,\n mdiFileTable,\n mdiCheckboxBlankOutline,\n mdiCheckboxMarked,\n mdiFileDownload,\n mdiInformationSlabCircle,\n mdiFileCancel,\n mdiFileCheck,\n} from '@mdi/js'\nimport type { ExportOptions } from './schemas'\nimport type { FireAlertFn } from '../ux/alert'\nimport type { VSheet } from 'vuetify/components/VSheet'\nimport type { ControlButtonProps } from '../control-button/props'\nimport type { ResourcefulSchemaDefinition } from '../resourceful-index/types'\nimport type { makeVCardProps } from '@nhtio/vuetifiable/components/VCard/VCard'\nimport type { ExtractSlotDefinitions, NamedSlotParameters } from '../common/types'\nimport type { ExtractPublicPropTypes, PropType, ComponentPublicInstance } from 'vue'\nimport type { makeVSelectProps } from '@nhtio/vuetifiable/components/VSelect/VSelect'\nimport type { makeVDialogProps } from '@nhtio/vuetifiable/components/VDialog/VDialog'\nimport type { makeVCheckboxProps } from '@nhtio/vuetifiable/components/VCheckbox/VCheckbox'\nimport type { makeVTextFieldProps } from '@nhtio/vuetifiable/components/VTextField/VTextField'\nimport type { FormWithValidationProps, FormWithValidationDefaultSlotProps } from '../ux/validation'\nimport type { makeVProgressLinearProps } from '@nhtio/vuetifiable/components/VProgressLinear/VProgressLinear'\nimport type {\n DispositionButtonProps,\n SaveButtonProps,\n} from '../resourceful-index/partials/_columns_controls'\n\nexport type FetchViaAsyncIteratorFn = (\n cb: (records: any[], page: number, perPage: number, total: number) => void | Promise<void>,\n signal?: AbortSignal | undefined,\n allFields?: boolean,\n coolDownMs?: number,\n onlyIds?: Array<string | number>\n) => Promise<void>\n\nconst { makeProps: makeExporterProps, emits: exporterEmits } = propsAndEmitsFactory(\n {\n dispositionButtons: {\n type: Object as PropType<DispositionButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n },\n downloadButton: {\n type: Object as PropType<SaveButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n },\n selectedItemCount: {\n type: Number,\n required: true,\n },\n totalItemCount: {\n type: Number,\n required: true,\n },\n pageSize: {\n type: Number,\n required: true,\n },\n alertFn: {\n type: Function as PropType<FireAlertFn>,\n required: true,\n },\n fetchViaAsyncIteratorFn: {\n type: Function as PropType<FetchViaAsyncIteratorFn>,\n required: true,\n },\n safeRecordCountThreshold: {\n type: Number,\n default: 100,\n },\n panelRef: {\n type: [Object, null] as PropType<VSheet | null>,\n default: null,\n },\n selectedItems: {\n type: Array as PropType<Array<Record<string, any>>>,\n default: () => [],\n },\n possibleFields: {\n type: Object as PropType<ResourcefulSchemaDefinition>,\n required: true,\n },\n showingFields: {\n type: Array as PropType<string[]>,\n required: true,\n },\n labels: {\n type: Object as PropType<Record<string, string>>,\n default: () => ({}),\n },\n computedFields: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n },\n {\n close: () => true,\n },\n 'Exporter'\n)\n\ntype VTextFieldProps = ExtractPublicPropTypes<ReturnType<typeof makeVTextFieldProps>>\ntype VSelectProps = ExtractPublicPropTypes<ReturnType<typeof makeVSelectProps>>\ntype VCheckboxProps = ExtractPublicPropTypes<ReturnType<typeof makeVCheckboxProps>>\ntype VCardProps = ExtractPublicPropTypes<ReturnType<typeof makeVCardProps>>\ntype VDialogProps = ExtractPublicPropTypes<ReturnType<typeof makeVDialogProps>>\ntype VProgressLinearProps = ExtractPublicPropTypes<ReturnType<typeof makeVProgressLinearProps>>\ntype VSelectSlots = ExtractSlotDefinitions<typeof VSelect.slots>\n\ntype VSelectItemSlotParams = NamedSlotParameters<VSelectSlots, 'item'>[0]\ntype VSelectSelectionSlotParams = NamedSlotParameters<VSelectSlots, 'selection'>[0]\n\nenum ExportStep {\n FETCHING = 'fetching',\n GENERATING = 'generating',\n COMPLETED = 'completed',\n}\n\nexport const Exporter = defineComponent({\n name: 'ExporterForm',\n props: makeExporterProps(),\n emits: exporterEmits,\n setup(props, { emit }) {\n const {\n selectedItemCount,\n totalItemCount,\n pageSize,\n dispositionButtons,\n downloadButton,\n safeRecordCountThreshold,\n panelRef,\n selectedItems,\n possibleFields,\n showingFields,\n labels,\n } = toRefs(props)\n const browser = useBrowser()\n const getPanelHtmlElement = (): HTMLElement | null => {\n if (\n !browser.ssr &&\n panelRef.value &&\n '$el' in panelRef.value &&\n isHTMLElement(panelRef.value.$el)\n )\n return panelRef.value.$el\n return null\n }\n const fire: FireAlertFn = (...args: Parameters<FireAlertFn>) => props.alertFn(...args)\n const fetchViaAsyncIterator: FetchViaAsyncIteratorFn = (\n ...args: Parameters<FetchViaAsyncIteratorFn>\n ) => props.fetchViaAsyncIteratorFn(...args)\n const t = useI18n()\n const formRef = ref<FormWithValidation | null>(null)\n const fullSchema = computed(() => exportOptionsSchemaFactory(t))\n /**\n * Refs for displaying the current state of the download process\n */\n const exportAbortController = ref<AbortController | undefined>(undefined)\n const exportOptions = ref<ExportOptions | undefined>(undefined)\n const isExporting = computed(() => 'undefined' !== typeof exportOptions.value)\n const exportStep = ref<ExportStep | undefined>(undefined)\n const exportTotalCount = ref<number | undefined>(undefined)\n const exportFetchProgress = ref<number>(0)\n const exportFetchProgressPercent = computed(() => {\n if (!exportTotalCount.value || exportTotalCount.value <= 0) return 0\n return Math.min(100, Math.round((exportFetchProgress.value / exportTotalCount.value) * 100))\n })\n const exportOverallProgressPercent = computed(() => {\n if (!exportTotalCount.value || exportTotalCount.value <= 0) return 0\n const adjustedTotalCount = exportTotalCount.value * 1.1\n const adjustedProcessCount =\n exportStep.value === ExportStep.GENERATING || exportStep.value === ExportStep.COMPLETED\n ? exportFetchProgress.value * 1.1\n : exportFetchProgress.value\n return Math.min(100, Math.round((adjustedProcessCount / adjustedTotalCount) * 100))\n })\n const formattedExportOverallProgressPercent = computed(\n () => numeral(exportOverallProgressPercent.value).format('0,0') + '%'\n )\n const formattedFetchProgress = computed(() => numeral(exportFetchProgress.value).format('0,0'))\n const formattedTotalCount = computed(() =>\n exportTotalCount.value ? numeral(exportTotalCount.value).format('0,0') : '0'\n )\n const formattedStatusText = computed(() => {\n switch (exportStep.value) {\n case ExportStep.FETCHING:\n return format(\n t('exporter.status.fetching'),\n formattedFetchProgress.value,\n formattedTotalCount.value\n )\n case ExportStep.GENERATING:\n return t('exporter.status.generating')\n case ExportStep.COMPLETED:\n return t('exporter.status.completed')\n default:\n return t('exporter.status.pending')\n }\n })\n const reset = () => {\n if (isExporting.value) {\n warn('Exporter', 'Cannot reset the form while an export is in progress')\n return\n }\n if (formRef.value) {\n formRef.value.reset()\n }\n }\n const setFileNameTo = (name: string) => {\n if (isExporting.value) {\n warn('Exporter', 'Cannot set the filename while an export is in progress')\n return\n }\n if (formRef.value) {\n formRef.value.setFieldValue('filename', name)\n }\n }\n const resetAndClose = () => {\n if (isExporting.value) {\n warn('Exporter', 'Cannot reset the form while an export is in progress')\n return\n }\n reset()\n nextTick(() => emit('close'))\n }\n const cleanupExportState = (close: boolean = false) => {\n if (exportAbortController.value) {\n exportAbortController.value = undefined\n }\n exportOptions.value = undefined\n exportStep.value = undefined\n exportTotalCount.value = undefined\n exportFetchProgress.value = 0\n if (close) {\n nextTick(() => resetAndClose())\n }\n }\n const cancelExport = () => {\n if (exportAbortController.value) {\n exportAbortController.value.abort()\n }\n nextTick(() => cleanupExportState(true))\n }\n const requestCancel = async () => {\n const { isConfirmed } = await fire({\n icon: 'warning',\n title: t('exporter.alerts.cancelExport.title'),\n text: t('exporter.alerts.cancelExport.text'),\n confirmButtonCta: t('exporter.alerts.cancelExport.confirmButtonText'),\n denyButtonCta: t('exporter.alerts.cancelExport.denyButtonText'),\n showDenyButton: true,\n signal: exportAbortController.value?.signal,\n })\n if (!isConfirmed) return false\n cancelExport()\n fire({\n icon: 'info',\n title: t('exporter.alerts.cancelExport.cancelled.title'),\n text: t('exporter.alerts.cancelExport.cancelled.text'),\n })\n return true\n }\n /**\n * Bindings for the form and its fields\n */\n const formWithValidationProps: FormWithValidationProps = {\n fullSchema,\n formInitialValues: {\n filename: '',\n format: 'xlsx',\n scope: 'all',\n includeAllColumns: false,\n humanizeNames: true,\n humanizeData: true,\n },\n submissionHandler: async (values: ExportOptions) => {\n // Step 1: check if we are exceeding the safe record count threshold\n // If so, show a confirmation dialog\n const downloadableCount =\n 'all' === values.scope ? totalItemCount.value : selectedItemCount.value\n if (downloadableCount > safeRecordCountThreshold.value) {\n const { isConfirmed } = await fire({\n icon: 'warning',\n title: t('exporter.alerts.largeExport.title'),\n text: format(\n t('exporter.alerts.largeExport.text'),\n numeral(downloadableCount).format('0,0')\n ),\n confirmButtonCta: t('exporter.alerts.largeExport.confirmButtonText'),\n cancelButtonCta: t('exporter.alerts.largeExport.cancelButtonText'),\n showCancelButton: true,\n })\n if (!isConfirmed) {\n return\n }\n }\n // Step 2: set the export state which will kick off the export process\n // this will trigger the progress indicator to show\n exportOptions.value = values\n exportAbortController.value = new AbortController()\n exportAbortController.value.signal.addEventListener('abort', () => {\n cleanupExportState()\n })\n exportStep.value = ExportStep.FETCHING\n exportTotalCount.value = downloadableCount\n // Step 3: Initialize the worksheet and start fetching the data\n const worksheet = utils.aoa_to_sheet([[]])\n // Step 3.a: Add the header row\n const rawHeaderRow: string[] = []\n const headerRow: string[] = []\n if (values.includeAllColumns) {\n Object.keys(possibleFields.value).forEach((key) => {\n rawHeaderRow.push(key)\n headerRow.push(\n values.humanizeNames ? (labels.value[key] ? t(labels.value[key]) : t(key)) : key\n )\n })\n } else {\n showingFields.value\n .filter((f) => Object.keys(possibleFields.value).includes(f))\n .forEach((f) => {\n rawHeaderRow.push(f)\n headerRow.push(\n values.humanizeNames ? (labels.value[f] ? t(labels.value[f]) : t(f)) : f\n )\n })\n }\n utils.sheet_add_aoa(worksheet, [headerRow], { origin: 'A1' })\n // Step 3.b: Start fetching the data via the provided async iterator function\n await fetchViaAsyncIterator(\n async (records) => {\n if (exportAbortController.value!.signal.aborted) return\n records.forEach((record) => {\n const row: any[] = []\n rawHeaderRow.forEach((field) => {\n let rawValue = record[field]\n if (!values.humanizeData) {\n row.push(rawValue)\n return\n }\n const colDef = possibleFields.value[field]\n if (!colDef) {\n row.push(rawValue)\n return\n }\n if ('$ref' in colDef && 'string' === typeof colDef.$ref) {\n const key =\n 'x-resourceful-display-key' in colDef\n ? (colDef['x-resourceful-display-key'] as string)\n : 'id'\n const displayable = record[field]?.[key] || ''\n row.push(String(displayable))\n return\n }\n if ('computed' === colDef.type) {\n if ('x-table-header-definition' in colDef) {\n rawValue = colDef['x-table-header-definition'].compute(record)\n }\n }\n let type = typeAndFormatToResourcefulFieldType(colDef.type, colDef.format)\n if ('computed' === colDef.type) {\n if ('x-table-header-definition' in colDef) {\n type = colDef['x-table-header-definition'].kind || type\n }\n }\n switch (type) {\n case 'binary':\n row.push('')\n break\n\n case 'bigint':\n row.push(formatBigNumber(rawValue.toString(), '0,0'))\n break\n\n case 'boolean':\n if ('boolean' === typeof rawValue) {\n row.push(rawValue ? t('boolean.true') : t('boolean.false'))\n } else {\n row.push('boolean.undetermined')\n }\n break\n\n case 'dateTime':\n row.push(\n rawValue\n ? DateTime.fromISO(rawValue).toLocaleString(DateTime.DATETIME_MED)\n : ''\n )\n break\n\n case 'date':\n row.push(\n rawValue ? DateTime.fromISO(rawValue).toLocaleString(DateTime.DATE_MED) : ''\n )\n break\n\n case 'integer':\n case 'unsignedInteger':\n row.push(numeral(rawValue).format('0,0'))\n break\n\n case 'number':\n row.push(numeral(rawValue).format('0,0.00'))\n break\n\n case 'string':\n default:\n row.push(String(rawValue))\n break\n }\n })\n utils.sheet_add_aoa(worksheet, [row], { origin: -1 })\n exportFetchProgress.value = exportFetchProgress.value + 1\n })\n },\n exportAbortController.value.signal,\n true,\n 200,\n selectedItems.value.length > 0 ? selectedItems.value.map((r) => r.id) : undefined\n )\n if (exportAbortController.value.signal.aborted) return\n // Step 4 Generate the workbook and trigger the download\n exportStep.value = ExportStep.GENERATING\n const workbook = utils.book_new()\n utils.book_append_sheet(workbook, worksheet, values.filename || 'Data')\n const selectedFormat = formats.find((f) => f.value === values.format)!\n writeFile(workbook, [values.filename, selectedFormat.extension].join(''), {\n bookType: selectedFormat.value,\n sheet: values.filename || 'Data',\n })\n // Step 5: Mark as complete\n exportStep.value = ExportStep.COMPLETED\n },\n }\n const fileFormatBaseBindings = computed<VSelectProps>(\n () =>\n ({\n label: t('exporter.form.fields.format.label'),\n items: Array.from(formats),\n itemTitle: 'label',\n itemValue: 'value',\n returnObject: false,\n clearable: false,\n variant: 'outlined',\n hideDetails: 'auto',\n density: 'compact',\n menuIcon: h(SvgIcon, { d: mdiMenuDown }) as any,\n prependInnerIcon: h(SvgIcon, { d: mdiFileQuestion }) as any,\n }) satisfies VSelectProps\n )\n const fileNameBaseBindings = computed<VTextFieldProps>(() => {\n const selectedFormat = formRef.value?.formValues.format\n const fmt = formats.find((f) => f.value === selectedFormat)\n const extension = fmt?.extension ?? ''\n return {\n label: t('exporter.form.fields.filename.label'),\n variant: 'outlined',\n hideDetails: 'auto',\n density: 'compact',\n suffix: extension || undefined,\n prependInnerIcon: h(SvgIcon, { d: mdiFileFind }) as any,\n } satisfies VTextFieldProps\n })\n const scopeOptions = computed(() => [\n {\n value: 'all',\n label: format(\n t('exporter.form.fields.scope.options.all'),\n numeral(totalItemCount.value).format('0,0')\n ),\n badge: numeral(totalItemCount.value).format('0,0'),\n },\n {\n value: 'page',\n label: format(\n t('exporter.form.fields.scope.options.page'),\n numeral(pageSize.value).format('0,0')\n ),\n disabled: !(selectedItemCount.value === pageSize.value),\n badge: numeral(pageSize.value).format('0,0'),\n },\n {\n value: 'selected',\n label: format(\n t('exporter.form.fields.scope.options.selected'),\n numeral(selectedItemCount.value).format('0,0')\n ),\n disabled: selectedItemCount.value === 0 || selectedItemCount.value === pageSize.value,\n badge: numeral(selectedItemCount.value).format('0,0'),\n },\n ])\n watch(selectedItemCount, (is, was) => {\n if (!formRef.value) return\n const current = formRef.value.formValues.scope\n if (is > 0 && was === 0 && current === 'all') {\n formRef.value.setFieldValue('scope', 'selected')\n } else if (is === pageSize.value && was < pageSize.value && current === 'selected') {\n formRef.value.setFieldValue('scope', 'page')\n }\n })\n watch(scopeOptions, (is) => {\n nextTick(() => {\n if (!formRef.value) return\n const current = formRef.value.formValues.scope\n if (!is.find((i) => i.value === current && !i.disabled)) {\n formRef.value.setFieldValue('scope', 'all')\n }\n })\n })\n const scopeSelectionBadgeContent = computed(() => {\n const current = formRef.value?.formValues.scope\n switch (current) {\n case 'all':\n return numeral(totalItemCount.value).format('0,0')\n case 'page':\n return numeral(pageSize.value).format('0,0')\n case 'selected':\n return numeral(selectedItemCount.value).format('0,0')\n default:\n return undefined\n }\n })\n const scopeItems = computed(() => Array.from(scopeOptions.value).filter((i) => !i.disabled))\n const scopeBaseBindings = computed<VSelectProps>(\n () =>\n ({\n label: t('exporter.form.fields.scope.label'),\n items: scopeItems.value,\n itemTitle: 'label',\n itemValue: 'value',\n returnObject: false,\n clearable: false,\n variant: 'outlined',\n hideDetails: 'auto',\n density: 'compact',\n menuIcon:\n scopeItems.value.length <= 1\n ? (h(SvgIcon, { d: mdiInformationSlabCircle }) as any)\n : (h(SvgIcon, { d: mdiMenuDown }) as any),\n prependInnerIcon: h(SvgIcon, { d: mdiFileTable }) as any,\n readonly: scopeItems.value.length <= 1,\n }) satisfies VSelectProps\n )\n const checkboxFieldBaseBindings: VCheckboxProps = {\n falseIcon: h(SvgIcon, { d: mdiCheckboxBlankOutline }) as any,\n trueIcon: h(SvgIcon, { d: mdiCheckboxMarked }) as any,\n falseValue: false,\n trueValue: true,\n hideDetails: 'auto',\n }\n const includeAllColumnsBaseBindings = computed<VCheckboxProps>(() => ({\n ...checkboxFieldBaseBindings,\n label: t('exporter.form.fields.includeAllColumns.label'),\n }))\n const humanizeNamesBaseBindings = computed<VCheckboxProps>(() => ({\n ...checkboxFieldBaseBindings,\n label: t('exporter.form.fields.humanizeNames.label'),\n }))\n const humanizeDataBaseBindings = computed<VCheckboxProps>(() => ({\n ...checkboxFieldBaseBindings,\n label: t('exporter.form.fields.humanizeData.label'),\n }))\n const submitButtonBindings = computed<ControlButtonProps>(\n () =>\n ({\n ...dispositionButtons.value,\n ...downloadButton.value,\n cta: t('exporter.form.actions.download'),\n prependIcon: h(SvgIcon, { d: mdiFileDownload }) as any,\n type: 'submit',\n badge: {\n content: scopeSelectionBadgeContent.value,\n },\n }) satisfies ControlButtonProps\n )\n const progressDialogBindings = computed<VDialogProps>(() => ({\n attach: panelRef.value ? (getPanelHtmlElement() ?? 'body') : 'body',\n absolute: true,\n closeOnBack: false,\n closeOnContentClick: false,\n contained: true,\n modelValue: true,\n persistent: true,\n retainFocus: true,\n scrim: true,\n maxWidth: 500,\n }))\n const cardBindings = computed<VCardProps>(() => ({\n color: 'surface',\n }))\n const progressLinearBindings = computed<VProgressLinearProps>(() => ({\n color: 'success',\n height: 16,\n modelValue: exportOverallProgressPercent.value,\n bufferValue: exportFetchProgressPercent.value,\n stream: true,\n }))\n const cancelButtonBindings = computed<ControlButtonProps>(\n () =>\n ({\n ...dispositionButtons.value,\n ...downloadButton.value,\n cta: t('exporter.form.actions.cancel'),\n prependIcon: h(SvgIcon, { d: mdiFileCancel }) as any,\n onClick: () => requestCancel(),\n state: {\n disabled: exportStep.value === ExportStep.GENERATING,\n },\n }) satisfies ControlButtonProps\n )\n const closeButtonBindings = computed<ControlButtonProps>(\n () =>\n ({\n ...dispositionButtons.value,\n ...downloadButton.value,\n cta: t('exporter.form.actions.close'),\n prependIcon: h(SvgIcon, { d: mdiFileCheck }) as any,\n onClick: () => cleanupExportState(true),\n }) satisfies ControlButtonProps\n )\n useRender(() =>\n h(\n FormWithValidation,\n {\n ref: formRef,\n ...formWithValidationProps,\n },\n {\n default: ({ formFieldBindings }: FormWithValidationDefaultSlotProps) => {\n return [\n h(VContainer, { fluid: true }, () => [\n h(VRow, {}, () =>\n h(VCol, { cols: 12 }, () => [\n h(\n VSelect,\n {\n ...fileFormatBaseBindings.value,\n ...formFieldBindings.value.format,\n },\n {\n item: ({ props: slotProps, item }: VSelectItemSlotParams) =>\n h(\n VListItem,\n {\n ...slotProps,\n },\n {\n append: () =>\n h(VBadge, {\n color: 'surface-light',\n content: (item.raw as any).extension,\n inline: true,\n }),\n }\n ),\n selection: ({ item }: VSelectSelectionSlotParams) =>\n h(\n 'span',\n {\n class: ['v-autocomplete__selection-text', 'text-truncate'],\n },\n [\n item.title,\n h(VBadge, {\n color: 'currentColor',\n content: (item.raw as any).extension,\n inline: true,\n class: ['ms-2'],\n }),\n ]\n ),\n }\n ),\n ])\n ),\n h(VRow, {}, () =>\n h(VCol, { cols: 12 }, () => [\n h(VTextField, {\n ...fileNameBaseBindings.value,\n ...formFieldBindings.value.filename,\n }),\n ])\n ),\n h(VRow, {}, () =>\n h(VCol, { cols: 12 }, () => [\n h(\n VSelect,\n {\n ...scopeBaseBindings.value,\n ...formFieldBindings.value.scope,\n },\n {\n item: ({ props: slotProps, item }: VSelectItemSlotParams) =>\n h(\n VListItem,\n {\n ...slotProps,\n },\n {\n append: () =>\n h(VBadge, {\n color: 'surface-light',\n content: (item.raw as any).badge,\n inline: true,\n }),\n }\n ),\n selection: ({ item }: VSelectSelectionSlotParams) =>\n h(\n 'span',\n {\n class: ['v-autocomplete__selection-text', 'text-truncate'],\n },\n [\n item.title,\n h(VBadge, {\n color: 'currentColor',\n content: scopeSelectionBadgeContent.value,\n inline: true,\n class: ['ms-2'],\n }),\n ]\n ),\n }\n ),\n ])\n ),\n h(VRow, {}, () =>\n h(VCol, { cols: 12 }, () => [\n h(VCheckbox, {\n ...includeAllColumnsBaseBindings.value,\n ...formFieldBindings.value.includeAllColumns,\n }),\n h(VCheckbox, {\n ...humanizeNamesBaseBindings.value,\n ...formFieldBindings.value.humanizeNames,\n }),\n h(VCheckbox, {\n ...humanizeDataBaseBindings.value,\n ...formFieldBindings.value.humanizeData,\n }),\n ])\n ),\n h(VRow, {}, () =>\n h(VCol, { cols: 12, class: ['d-flex', 'justify-end'] }, () => [\n h(ControlButton, {\n ...submitButtonBindings.value,\n }),\n ])\n ),\n ]),\n isExporting.value\n ? h(\n VDialog,\n {\n ...progressDialogBindings.value,\n },\n () =>\n h(VCard, { ...cardBindings.value }, () =>\n h(VContainer, { fluid: true }, () => [\n h(VRow, { justify: 'center' }, () =>\n h(VCol, { cols: 12, class: ['text-center'] }, () => [\n h(VLabel, {\n class: ['text-button'],\n text: formattedStatusText.value,\n }),\n ])\n ),\n h(VRow, { justify: 'center' }, () =>\n h(VCol, { cols: 10, class: [] }, () => [\n h(VProgressLinear, { ...progressLinearBindings.value }),\n h(\n 'div',\n { class: ['text-caption', 'mt-2'] },\n () => formattedExportOverallProgressPercent.value\n ),\n ])\n ),\n h(VRow, { justify: 'center' }, () =>\n h(VCol, { cols: 12, class: ['d-flex', 'justify-end'] }, () => [\n exportStep.value === ExportStep.COMPLETED\n ? null\n : h(ControlButton, { ...cancelButtonBindings.value }),\n exportStep.value === ExportStep.COMPLETED\n ? h(ControlButton, { ...closeButtonBindings.value })\n : null,\n ])\n ),\n ])\n )\n )\n : null,\n ]\n },\n }\n )\n )\n return {\n reset: reset,\n cancel: cancelExport,\n setFileNameTo: setFileNameTo,\n }\n },\n})\n\nexport type Exporter = InstanceType<typeof Exporter> & ComponentPublicInstance\n","import { DateTime } from 'luxon'\nimport { mdiClose } from '@mdi/js'\nimport { useI18n } from '../../ioc'\nimport { SvgIcon } from '../../svg-icon'\nimport { Exporter } from '../../exporter'\nimport { VBtn } from 'vuetify/components/VBtn'\nimport { VSheet } from 'vuetify/components/VSheet'\nimport { VDivider } from 'vuetify/components/VDivider'\nimport { useResourcefulIndexScopedDisplay } from '../index'\nimport { propsAndEmitsFactory } from '../../common/factories'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { default as filenameSanitizer } from 'sanitize-filename'\nimport { defineComponent, h, toRefs, computed, ref, watch } from 'vue'\nimport { VNavigationDrawer } from 'vuetify/components/VNavigationDrawer'\nimport { VToolbar, VToolbarTitle, VToolbarItems } from 'vuetify/components/VToolbar'\nimport {\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n} from './_columns_controls'\nimport type { FireAlertFn } from '../../ux/alert'\nimport type { ComputedColumnDefinitions } from './_table'\nimport type { ResourcefulSchemaDefinition } from '../types'\nimport type { PropType, ComponentPublicInstance } from 'vue'\nimport type { FetchViaAsyncIteratorFn } from '../../exporter'\nimport type { DispositionButtonProps, SaveButtonProps } from './_columns_controls'\n\nconst { makeProps: makeDownloadDrawerProps, emits: downloadDrawerEmits } = propsAndEmitsFactory(\n {\n modelValue: {\n type: Boolean,\n default: false,\n },\n color: {\n type: String as PropType<string | undefined>,\n default: undefined,\n },\n dispositionButtons: {\n type: Object as PropType<DispositionButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n },\n downloadButton: {\n type: Object as PropType<SaveButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n },\n selectedItemCount: {\n type: Number,\n required: true,\n },\n totalItemCount: {\n type: Number,\n required: true,\n },\n pageSize: {\n type: Number,\n required: true,\n },\n alertFn: {\n type: Function as PropType<FireAlertFn>,\n required: true,\n },\n fetchViaAsyncIteratorFn: {\n type: Function as PropType<FetchViaAsyncIteratorFn>,\n required: true,\n },\n safeRecordCountThreshold: {\n type: Number,\n default: 100,\n },\n selectedItems: {\n type: Array as PropType<Array<Record<string, any>>>,\n default: () => [],\n },\n possibleFields: {\n type: Object as PropType<ResourcefulSchemaDefinition>,\n required: true,\n },\n showingFields: {\n type: Array as PropType<string[]>,\n required: true,\n },\n labels: {\n type: Object as PropType<Record<string, string>>,\n default: () => ({}),\n },\n computedColumns: {\n type: Array as PropType<ComputedColumnDefinitions>,\n default: () => [],\n },\n },\n {\n 'update:modelValue': (val: boolean) => 'boolean' === typeof val,\n },\n 'DownloadDrawer'\n)\n\nexport const DownloadDrawer = defineComponent({\n name: 'DownloadDrawer',\n props: makeDownloadDrawerProps(),\n emits: downloadDrawerEmits,\n setup(props, { emit }) {\n const t = useI18n()\n const makeDefaultFilename = () => {\n const timeInSeconds = Math.round(DateTime.now().toSeconds())\n const translated = t('resourcefulIndex.download.defaultFilename')\n const fallback = 'downloaded_records'\n if (filenameSanitizer(translated) !== translated) {\n return [fallback, timeInSeconds].join('_').replace(/__+/g, '_').replace(/\\s/g, '_')\n } else {\n return [translated, timeInSeconds].join('_').replace(/__+/g, '_').replace(/\\s/g, '_')\n }\n }\n const {\n modelValue,\n color,\n selectedItemCount,\n totalItemCount,\n pageSize,\n dispositionButtons,\n downloadButton,\n alertFn,\n fetchViaAsyncIteratorFn,\n safeRecordCountThreshold,\n selectedItems,\n possibleFields,\n showingFields,\n labels,\n computedColumns,\n } = toRefs(props)\n const value = computed({\n get: () => modelValue.value,\n set: (val: boolean) => emit('update:modelValue', val),\n })\n const { width: screenWidth } = useResourcefulIndexScopedDisplay()\n const panelRef = ref<VSheet | null>(null)\n const exporterRef = ref<Exporter | null>(null)\n watch(modelValue, (is) => {\n if (!exporterRef.value) return\n if (is) {\n // set a default value for the filename\n exporterRef.value.setFileNameTo(makeDefaultFilename())\n } else {\n exporterRef.value.cancel()\n }\n })\n useRender(() =>\n h(\n VNavigationDrawer,\n {\n 'modelValue': value.value,\n 'onUpdate:modelValue': (val: boolean) => {\n value.value = val\n },\n 'permanent': false,\n 'persistent': false,\n 'temporary': true,\n 'absolute': true,\n 'width': screenWidth.value < 400 ? screenWidth.value : 400,\n 'color': color.value,\n 'location': 'end',\n },\n () =>\n h(\n VSheet,\n {\n ref: panelRef,\n style: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n },\n color: 'transparent',\n },\n () => [\n h(VToolbar, { color: color.value || 'transparent' }, () => [\n h(VToolbarItems, {}, () => [\n h(VBtn, {\n icon: () => h(SvgIcon, { d: mdiClose }),\n variant: 'text',\n onClick: () => (value.value = false),\n }),\n ]),\n h(VToolbarTitle, {}, () => t('resourcefulIndex.download.title')),\n ]),\n h(VDivider, {}, () => []),\n h(Exporter, {\n ref: exporterRef,\n onClose: () => (value.value = false),\n selectedItemCount: selectedItemCount.value,\n totalItemCount: totalItemCount.value,\n pageSize: pageSize.value,\n dispositionButtons: dispositionButtons.value,\n downloadButton: downloadButton.value,\n alertFn: alertFn.value,\n fetchViaAsyncIteratorFn: fetchViaAsyncIteratorFn.value,\n safeRecordCountThreshold: safeRecordCountThreshold.value,\n panelRef: panelRef.value,\n selectedItems: selectedItems.value,\n possibleFields: possibleFields.value,\n showingFields: showingFields.value,\n labels: labels.value,\n computedColumns: computedColumns.value,\n }),\n ]\n )\n )\n )\n return {}\n },\n})\n\nexport type DownloadDrawer = InstanceType<typeof DownloadDrawer> & ComponentPublicInstance\n","/*\n |--------------------------------------------------------------------------\n | Bulk Edit Drawer\n |--------------------------------------------------------------------------\n | Component has 2 parts:\n | - Where the user \"enables\" fields to be edited in bulk\n | - Where the user puts the new values for those fields\n |\n | This is done for 2 reasons:\n | 1. So that the user doesn't accidentally overwrite fields they didn't\n | intend to edit\n | 2. To ensure that the form validation only runs on the fields\n | that the user intends to edit\n */\nimport * as qs from 'qs-esm'\nimport { useI18n, useHttp } from '../../ioc'\nimport { validator } from '@nhtio/validation'\nimport { VBtn } from 'vuetify/components/VBtn'\nimport { isObject } from '../../common/guards'\nimport { useHttpElements } from '../../ux/http'\nimport { VChip } from 'vuetify/components/VChip'\nimport { useScopedDisplay } from '../../ux/display'\nimport { svgPathToIconValue } from '../../svg-icon'\nimport { VListItem } from 'vuetify/components/VList'\nimport { VContainer } from 'vuetify/components/VGrid'\nimport { VDivider } from 'vuetify/components/VDivider'\nimport { VCheckbox } from 'vuetify/components/VCheckbox'\nimport { useResourcefulIndexScopedDisplay } from '../index'\nimport { propsAndEmitsFactory } from '../../common/factories'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { VAutocomplete } from 'vuetify/components/VAutocomplete'\nimport { stripUndefinedValuesFromObject } from '../../common/utils'\nimport { ResourcefulRecordForm } from '../../resourceful-record/form'\nimport { VNavigationDrawer } from 'vuetify/components/VNavigationDrawer'\nimport { ResourcefulRecordBusEmitter } from '../../resourceful-record/types'\nimport { defineComponent, h, toRefs, computed, ref, shallowRef, provide } from 'vue'\nimport { VToolbar, VToolbarTitle, VToolbarItems } from 'vuetify/components/VToolbar'\nimport { renderDefaultResourcefulRecordForm } from '../../resourceful-record/renderers'\nimport {\n ResourcefulRecordScopedDisplaySymbol,\n ResourcefulRecordScopedBusConsumerSymbol,\n} from '../../symbols'\nimport {\n mdiClose,\n mdiMenuDown,\n mdiCheckboxMarked,\n mdiCheckboxIntermediateVariant,\n mdiCheckboxBlankOutline,\n mdiContentSave,\n} from '@mdi/js'\nimport {\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n} from './_columns_controls'\nimport type { FireAlertFn } from '../..//ux/alert'\nimport type { ObjectSchema } from '@nhtio/validation'\nimport type { ValidationProps } from '../../ux/validation'\nimport type { PropType, ComponentPublicInstance } from 'vue'\nimport type { REnumFieldLoadedChoice } from '../../fields/enum'\nimport type { ResourcefulHttpResponse } from '../../services/http'\nimport type { makeVChipProps } from '@nhtio/vuetifiable/components/VChip/VChip'\nimport type { BaseResourcefulRecordProps } from '../../resourceful-record/props'\nimport type { ExtractPublicPropTypesFromUnknownFactory } from '../../common/factories'\nimport type { makeVListItemProps } from '@nhtio/vuetifiable/components/VList/VListItem'\nimport type { ResourceResourcefulRecordResponse } from '../../resourceful-record/types'\nimport type { makeVCheckboxProps } from '@nhtio/vuetifiable/components/VCheckbox/VCheckbox'\nimport type { makeVAutocompleteProps } from '@nhtio/vuetifiable/components/VAutocomplete/VAutocomplete'\nimport type {\n DispositionButtonProps,\n SaveButtonProps,\n DiscardButtonProps,\n} from './_columns_controls'\nimport type {\n ResourcefulRecordModelSchema,\n ResourcefulSubmissionHandler,\n ResourcefulRecordFormDefaultSlotArgs,\n} from '../../resourceful-record/types'\n\ntype VAutocompletePublicProps = ExtractPublicPropTypesFromUnknownFactory<\n typeof makeVAutocompleteProps\n> & {} & {\n 'onUpdate:modelValue': (val: any) => void\n}\ntype VChipPublicProps = ExtractPublicPropTypesFromUnknownFactory<typeof makeVChipProps>\ntype VListItemPublicProps = ExtractPublicPropTypesFromUnknownFactory<typeof makeVListItemProps>\ntype VCheckboxPublicProps = ExtractPublicPropTypesFromUnknownFactory<\n typeof makeVCheckboxProps\n> & {} & {\n 'onUpdate:modelValue': (val: any) => void\n}\n\nconst closeIcon = svgPathToIconValue(mdiClose)\nconst menuDownIcon = svgPathToIconValue(mdiMenuDown)\nconst checkboxMarkedIcon = svgPathToIconValue(mdiCheckboxMarked)\nconst checkboxIntermediateVariantIcon = svgPathToIconValue(mdiCheckboxIntermediateVariant)\nconst checkboxBlankOutlineIcon = svgPathToIconValue(mdiCheckboxBlankOutline)\nconst contentSaveIcon = svgPathToIconValue(mdiContentSave)\n\nconst { makeProps: makeBulkEditDrawerProps, emits: bulkEditDrawerEmits } = propsAndEmitsFactory(\n {\n baseUrl: {\n type: String as PropType<string>,\n required: true,\n },\n modelValue: {\n type: Boolean,\n default: false,\n },\n color: {\n type: String as PropType<string | undefined>,\n default: undefined,\n },\n dispositionButtons: {\n type: Object as PropType<DispositionButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n },\n saveButton: {\n type: Object as PropType<SaveButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n },\n discardButton: {\n type: Object as PropType<DiscardButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n },\n schema: {\n type: Object as PropType<ObjectSchema>,\n default: () => validator.object().unknown(true),\n },\n model: {\n type: Object as PropType<ResourcefulRecordModelSchema>,\n default: () => ({}),\n },\n uids: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n fireAlertFn: {\n type: Function as PropType<FireAlertFn>,\n required: true,\n },\n },\n {\n 'update:modelValue': (val: boolean) => 'boolean' === typeof val,\n 'success': () => true,\n },\n 'BulkEditDrawer'\n)\n\nexport const BulkEditDrawer = defineComponent({\n name: 'BulkEditDrawer',\n props: makeBulkEditDrawerProps(),\n emits: bulkEditDrawerEmits,\n setup(props, { emit }) {\n const t = useI18n()\n const http = useHttp()\n const containerVContainerRef = ref<VContainer | null>(null)\n const scopedDisplay = useScopedDisplay(containerVContainerRef)\n provide(ResourcefulRecordScopedDisplaySymbol, scopedDisplay)\n const { baseUrl, modelValue, color, schema, model, uids, fireAlertFn } = toRefs(props)\n const fire: FireAlertFn = (...args) => fireAlertFn.value(...args)\n const doRefreshChoices = computed<Record<string, () => Promise<REnumFieldLoadedChoice[]>>>(\n () =>\n stripUndefinedValuesFromObject(\n Object.fromEntries(\n Object.entries(model.value).map(([prop, propSchema]) => {\n if (\n propSchema['x-resourceful-relationship'] &&\n 'string' === typeof propSchema['x-resourceful-relationship'].choices\n ) {\n return [\n prop,\n async () => {\n if (\n !propSchema['x-resourceful-relationship'] ||\n 'string' !== typeof propSchema['x-resourceful-relationship'].choices\n )\n return\n const uri =\n propSchema['x-resourceful-relationship'].choices.replace(\n /^\\#/,\n baseUrl.value\n ) +\n qs.stringify(\n {\n uid: '0',\n },\n { addQueryPrefix: true }\n )\n try {\n const res = await http.get<{\n total: number\n choices: Array<{ title: string; value: string }>\n }>(uri)\n return res.data.choices\n } catch {\n return []\n }\n },\n ]\n }\n return [prop, undefined]\n })\n )\n ) as Record<string, () => Promise<REnumFieldLoadedChoice[]>>\n )\n const normalizedBaseUrl = computed(() => {\n let url = baseUrl.value || ''\n if (url.endsWith('/')) {\n url = url.slice(0, -1)\n }\n return url\n })\n const value = computed({\n get: () => modelValue.value,\n set: (val: boolean) => emit('update:modelValue', val),\n })\n const bulkEditableFieldItems = computed<{ value: string; label: string }[]>(() =>\n Object.entries(model.value).map(([key, propSchema]) => ({\n value: key,\n label:\n 'x-resourceful-relationship' in propSchema &&\n isObject(propSchema['x-resourceful-relationship']) &&\n propSchema['x-resourceful-relationship'].title\n ? propSchema['x-resourceful-relationship'].title\n : propSchema.title || key,\n }))\n )\n const selectedBulkEditableFields = ref<Array<keyof ResourcefulRecordModelSchema>>([])\n const bulkEditingModel = computed<ResourcefulRecordModelSchema>(() =>\n Object.fromEntries(\n Array.from(selectedBulkEditableFields.value).map((key) => [key, model.value[key]])\n )\n )\n const initialValues = computed<Record<string, any>>(() =>\n Object.fromEntries(Array.from(selectedBulkEditableFields.value).map((key) => [key, null]))\n )\n const { width: screenWidth } = useResourcefulIndexScopedDisplay()\n const bus = new ResourcefulRecordBusEmitter()\n const doFormSubmit = (...args: Parameters<ValidationProps['doFormSubmit']>) => {\n if (selectedBulkEditableFields.value.length === 0) return\n bus.emit('doFormSubmit', ...args)\n }\n const doResetForm = (...args: Parameters<ValidationProps['doResetForm']>) => {\n bus.emit('doResetForm', ...args)\n }\n const consumer = bus.spawn()\n provide(ResourcefulRecordScopedBusConsumerSymbol, consumer)\n const commitPayload = shallowRef<Record<string, any>>({})\n const {\n exec: execCommit,\n loading: commitLoading,\n abort: abortCommit,\n } = useHttpElements(\n () => `${normalizedBaseUrl.value}/$bulk/${uids.value.join(',')}`,\n () => 'patch',\n () => ({}),\n () => commitPayload.value,\n () => 5000,\n () => null\n )\n const doCommit = async (\n values: Record<string, any>,\n onSubmissionHandlerSuccess: (\n response: ResourceResourcefulRecordResponse,\n values: Record<string, any>\n ) => void | Promise<void>,\n onSubmissionHandlerFailure: (\n response: ResourcefulHttpResponse,\n values: Record<string, any>\n ) => void | Promise<void>\n ) => {\n abortCommit()\n commitPayload.value = values\n const res = await execCommit<ResourceResourcefulRecordResponse>()\n if (res.status >= 200 && res.status < 300) {\n await onSubmissionHandlerSuccess(res.data, values)\n } else {\n await onSubmissionHandlerFailure(res, values)\n }\n }\n const submissionHandler: ResourcefulSubmissionHandler = async (\n values,\n onSubmissionHandlerSuccess,\n onSubmissionHandlerFailure\n ) => await doCommit(values, onSubmissionHandlerSuccess, onSubmissionHandlerFailure)\n const controlButtonsAreInactionable = computed(() => commitLoading.value)\n const saveButtonsAreInactionable = computed(\n () => commitLoading.value || selectedBulkEditableFields.value.length === 0\n )\n const formBindings = computed<BaseResourcefulRecordProps>(\n () =>\n ({\n mode: 'create',\n schema: schema.value,\n initialValues: initialValues.value,\n model: bulkEditingModel.value,\n bus: consumer,\n submissionHandler,\n doRefreshChoices: doRefreshChoices.value,\n onSuccess: () => {\n fire({\n icon: 'success',\n title: t('resourcefulIndex.bulkUpdate.successTitle'),\n text: t('resourcefulIndex.bulkUpdate.successText'),\n })\n emit('success')\n doResetForm()\n selectedBulkEditableFields.value = []\n value.value = false\n },\n onPrevented: () => {\n fire({\n icon: 'warning',\n title: t('resourcefulIndex.bulkUpdate.validationErrorTitle'),\n text: t('resourcefulIndex.bulkUpdate.validationErrorText'),\n })\n },\n onFailure: () => {\n fire({\n icon: 'error',\n title: t('resourcefulIndex.bulkUpdate.failureTitle'),\n text: t('resourcefulIndex.bulkUpdate.failureText'),\n })\n },\n }) satisfies BaseResourcefulRecordProps\n )\n useRender(() =>\n h(\n VNavigationDrawer,\n {\n 'modelValue': value.value,\n 'onUpdate:modelValue': (val: boolean) => {\n value.value = val\n },\n 'permanent': false,\n 'persistent': false,\n 'temporary': true,\n 'absolute': true,\n 'width': screenWidth.value < 800 ? screenWidth.value : 800,\n 'color': color.value,\n 'location': 'end',\n },\n () =>\n h('div', { class: ['d-flex', 'flex-column', 'h-100'] }, [\n h(\n VToolbar,\n { color: color.value || 'transparent', class: ['flex-grow-0'], density: 'compact' },\n () => [\n h(VToolbarItems, {}, () => [\n h(VBtn, {\n icon: closeIcon,\n variant: 'text',\n disabled: controlButtonsAreInactionable.value,\n onClick: () => (value.value = false),\n }),\n h(VBtn, {\n icon: contentSaveIcon,\n variant: 'text',\n disabled: saveButtonsAreInactionable.value,\n loading: commitLoading.value,\n onClick: () => {\n doFormSubmit()\n },\n }),\n ]),\n h(VToolbarTitle, {}, () => t('resourcefulIndex.bulkUpdate.title')),\n ]\n ),\n h(VDivider, { class: ['flex-grow-0'] }),\n h('div', { class: ['flex-grow-1', 'overflow-y-auto'] }, [\n h(VContainer, { fluid: true, ref: containerVContainerRef }, () => [\n h(\n VAutocomplete,\n {\n modelValue: selectedBulkEditableFields.value,\n items: bulkEditableFieldItems.value,\n label: t('resourcefulIndex.bulkUpdate.selectFieldsLabel'),\n multiple: true,\n chips: true,\n clearable: true,\n itemTitle: 'label',\n itemValue: 'value',\n clearIcon: closeIcon,\n closableChips: true,\n menuIcon: menuDownIcon,\n hideDetails: true,\n variant: 'outlined' as const,\n density: 'compact' as const,\n ...({\n 'onUpdate:modelValue': (val: Array<keyof ResourcefulRecordModelSchema>) =>\n (selectedBulkEditableFields.value = val),\n } satisfies VAutocompletePublicProps),\n },\n {\n chip: ({ props: chipProps }: { item: any; props: any }) =>\n h(VChip, { ...chipProps, closeIcon: closeIcon } satisfies VChipPublicProps),\n item: ({ props: itemProps }: { item: any; props: any }) =>\n h(\n VListItem,\n {\n ...itemProps,\n } satisfies VListItemPublicProps,\n {\n prepend: ({\n isActive,\n isIndeterminate,\n select,\n }: {\n isActive: boolean\n isIndeterminate: boolean\n select: (value: boolean) => void\n }) =>\n h(VCheckbox as any, {\n modelValue: isActive,\n indeterminate: isIndeterminate,\n ripple: false,\n hideDetails: true,\n falseIcon: checkboxBlankOutlineIcon,\n indeterminateIcon: checkboxIntermediateVariantIcon,\n trueIcon: checkboxMarkedIcon,\n class: ['me-3'],\n ...{\n 'onUpdate:modelValue': (val: boolean) => select(val),\n },\n } satisfies VCheckboxPublicProps),\n }\n ),\n }\n ),\n ]),\n h(VDivider),\n h(\n ResourcefulRecordForm,\n {\n ...formBindings.value,\n },\n {\n default: (...args: ResourcefulRecordFormDefaultSlotArgs) =>\n renderDefaultResourcefulRecordForm(...args),\n }\n ),\n ]),\n h(VDivider, { class: ['flex-grow-0'] }),\n h(\n VToolbar,\n { color: color.value || 'transparent', class: ['flex-grow-0'], density: 'compact' },\n () => [\n h(VToolbarItems, {}, () => [\n h(VBtn, {\n icon: contentSaveIcon,\n variant: 'text',\n onClick: () => {\n doFormSubmit()\n },\n disabled: saveButtonsAreInactionable.value,\n loading: commitLoading.value,\n }),\n ]),\n ]\n ),\n h(VDivider, { class: ['flex-grow-0'] }),\n ])\n )\n )\n return {}\n },\n})\n\nexport type BulkEditDrawer = InstanceType<typeof BulkEditDrawer> & ComponentPublicInstance\n","import { mdiClose } from '@mdi/js'\nimport { useI18n } from '../../ioc'\nimport { SvgIcon } from '../../svg-icon'\nimport { VBtn } from 'vuetify/components/VBtn'\nimport { VContainer } from 'vuetify/components/VGrid'\nimport { VDivider } from 'vuetify/components/VDivider'\nimport { defineComponent, h, toRefs, computed } from 'vue'\nimport { useResourcefulIndexScopedDisplay } from '../index'\nimport { VNavigationDrawer } from 'vuetify/components/VNavigationDrawer'\nimport { VToolbar, VToolbarTitle, VToolbarItems } from 'vuetify/components/VToolbar'\nimport type { PropType } from 'vue'\n\nexport const ResourcefulIndexTooltip = defineComponent({\n name: 'ResourcefulIndexTooltip',\n props: {\n modelValue: {\n type: Boolean,\n default: false,\n },\n color: {\n type: String as PropType<string | undefined>,\n default: undefined,\n },\n },\n emits: ['update:modelValue'],\n setup(props, { emit }) {\n const { modelValue, color } = toRefs(props)\n const value = computed({\n get: () => modelValue.value,\n set: (val: boolean) => emit('update:modelValue', val),\n })\n const { width: screenWidth } = useResourcefulIndexScopedDisplay()\n const t = useI18n()\n return () =>\n h(\n VNavigationDrawer,\n {\n 'modelValue': value.value,\n 'onUpdate:modelValue': (val: boolean) => {\n value.value = val\n },\n 'permanent': false,\n 'persistent': false,\n 'temporary': true,\n 'absolute': true,\n 'width': screenWidth.value < 500 ? screenWidth.value * 0.85 : 500,\n 'color': color.value,\n },\n () => [\n h(VToolbar, { color: color.value || 'transparent' }, () => [\n h(VToolbarTitle, {}, () => t('resourcefulIndex.searchField.tooltip.title')),\n h(VToolbarItems, {}, () => [\n h(VBtn, {\n icon: () => h(SvgIcon, { d: mdiClose }),\n variant: 'text',\n onClick: () => (value.value = false),\n }),\n ]),\n ]),\n h(VDivider),\n h(VContainer, { fluid: true }, () =>\n h('div', {}, [\n h('p', { class: ['text-h6'] }),\n h(\n 'p',\n { class: ['text-subtitle-1'] },\n t('resourcefulIndex.searchField.tooltip.searchForTermInsensitive')\n ),\n h('ul', { class: ['ps-4'] }, [h('li', {}, h('code', {}, 'foo'))]),\n h(\n 'p',\n { class: ['text-subtitle-1'] },\n t('resourcefulIndex.searchField.tooltip.searchForTermSensitive')\n ),\n h('ul', { class: ['ps-4'] }, [\n h('li', {}, h('code', {}, \"'foo'\")),\n h('li', {}, h('code', {}, '\"foo\"')),\n ]),\n h(\n 'p',\n { class: ['text-subtitle-1'] },\n t('resourcefulIndex.searchField.tooltip.searchForTerminField')\n ),\n h('ul', { class: ['ps-4'] }, [\n h('li', {}, h('code', {}, 'name:foo')),\n h('li', {}, h('code', {}, \"'full name':foo\")),\n h('li', {}, h('code', {}, 'name.first:foo')),\n ]),\n h(\n 'p',\n { class: ['text-subtitle-1'] },\n t('resourcefulIndex.searchField.tooltip.searchForTermWithWildcards')\n ),\n h('ul', { class: ['ps-4'] }, [\n h('li', {}, h('code', {}, 'name:foo*bar')),\n h('li', {}, h('code', {}, 'name:foo?bar')),\n ]),\n h(\n 'p',\n { class: ['text-subtitle-1'] },\n t('resourcefulIndex.searchField.tooltip.searchForWithBoolean')\n ),\n h('ul', { class: ['ps-4'] }, [\n h('li', {}, h('code', {}, 'member:true')),\n h('li', {}, h('code', {}, 'member:false')),\n ]),\n h(\n 'p',\n { class: ['text-subtitle-1'] },\n t('resourcefulIndex.searchField.tooltip.searchForWithNull')\n ),\n h('ul', { class: ['ps-4'] }, [h('li', {}, h('code', {}, 'member:null'))]),\n h(\n 'p',\n { class: ['text-subtitle-1'] },\n t('resourcefulIndex.searchField.tooltip.searchForNumericComparisons')\n ),\n h('ul', { class: ['ps-4'] }, [\n h('li', {}, h('code', {}, 'height:=100')),\n h('li', {}, h('code', {}, 'createdAt:=2020-01-01T00:00:00Z')),\n h('li', {}, h('code', {}, 'height:>100')),\n h('li', {}, h('code', {}, 'createdAt:>2020-01-01T00:00:00Z')),\n h('li', {}, h('code', {}, 'height:>=100')),\n h('li', {}, h('code', {}, 'createdAt:>=2020-01-01T00:00:00Z')),\n h('li', {}, h('code', {}, 'height:<100')),\n h('li', {}, h('code', {}, 'createdAt:<2020-01-01T00:00:00Z')),\n h('li', {}, h('code', {}, 'height:<=100')),\n h('li', {}, h('code', {}, 'createdAt:<=2020-01-01T00:00:00Z')),\n ]),\n h(\n 'p',\n { class: ['text-subtitle-1'] },\n t('resourcefulIndex.searchField.tooltip.searchForNumericRanges')\n ),\n h('ul', { class: ['ps-4'] }, [\n h('li', {}, [\n h(\n 'strong',\n {},\n t('resourcefulIndex.searchField.tooltip.searchForNumericRanges.inclusive')\n ),\n ' ',\n h('code', {}, 'height:[100 TO 200]'),\n ]),\n h('li', {}, [\n h(\n 'strong',\n {},\n t('resourcefulIndex.searchField.tooltip.searchForNumericRanges.inclusive')\n ),\n ' ',\n h('code', {}, 'createdAt:[2020-01-01T00:00:00Z TO 2020-12-31T23:59:59Z]'),\n ]),\n h('li', {}, [\n h(\n 'strong',\n {},\n t('resourcefulIndex.searchField.tooltip.searchForNumericRanges.exclusive')\n ),\n ' ',\n h('code', {}, 'height:{100 TO 200}'),\n ]),\n h('li', {}, [\n h(\n 'strong',\n {},\n t('resourcefulIndex.searchField.tooltip.searchForNumericRanges.exclusive')\n ),\n ' ',\n h('code', {}, 'createdAt:{2020-01-01T00:00:00Z TO 2020-12-31T23:59:59Z}'),\n ]),\n ]),\n h(\n 'p',\n { class: ['text-subtitle-1'] },\n t('resourcefulIndex.searchField.tooltip.searchWithBooleanOperators')\n ),\n h('ul', { class: ['ps-4'] }, [\n h('li', {}, h('code', {}, 'name:foo AND height:=100')),\n h('li', {}, h('code', {}, 'name:foo OR name:bar')),\n ]),\n h(\n 'p',\n { class: ['text-subtitle-1'] },\n t('resourcefulIndex.searchField.tooltip.searchWithUnaryOperators')\n ),\n h('ul', { class: ['ps-4'] }, [\n h('li', {}, h('code', {}, 'NOT foo')),\n h('li', {}, h('code', {}, '-foo')),\n h('li', {}, h('code', {}, 'NOT foo:bar')),\n h('li', {}, h('code', {}, '-foo:bar')),\n h('li', {}, h('code', {}, 'name:foo AND NOT (bio:bar OR bio:baz)')),\n ]),\n h(\n 'p',\n { class: ['text-subtitle-1'] },\n t('resourcefulIndex.searchField.tooltip.searchWithImplicitAnd')\n ),\n h('ul', { class: ['ps-4'] }, [h('li', {}, h('code', {}, 'name:foo height:=100'))]),\n h(\n 'p',\n { class: ['text-subtitle-1'] },\n t('resourcefulIndex.searchField.tooltip.searchWithGrouping')\n ),\n h('ul', { class: ['ps-4'] }, [\n h('li', {}, h('code', {}, 'name:foo AND (bio:bar OR bio:baz)')),\n ]),\n ])\n ),\n ]\n )\n },\n})\n","import { useI18n } from '../../ioc'\nimport { deepmerge } from 'deepmerge-ts'\nimport { default as numeral } from 'numeral'\nimport { printf as format } from 'fast-printf'\nimport { h, defineComponent, computed, toRefs } from 'vue'\nimport { stripUndefinedValuesFromObject } from '../../common/utils'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { makeComponentProps } from '@nhtio/vuetifiable/composables/component'\nimport type { ExtractPublicPropTypes } from 'vue'\n\nexport const makeRecordsTotalProps = propsFactory(\n {\n page: {\n type: [String, Number],\n default: 1,\n },\n perPage: {\n type: [String, Number],\n default: 20,\n },\n total: {\n type: [String, Number],\n default: 0,\n },\n numeralFormat: {\n type: String,\n default: '0,0',\n },\n ...makeComponentProps(),\n },\n 'ResourcefulIndexRecordsTotal'\n)\n\nexport type RecordsTotalProps = ExtractPublicPropTypes<ReturnType<typeof makeRecordsTotalProps>>\n\nexport const ResourcefulIndexRecordsTotal = defineComponent({\n name: 'ResourcefulIndexRecordsTotal',\n props: makeRecordsTotalProps(),\n setup(props) {\n const { page, perPage, total, numeralFormat, class: componentClasses, style } = toRefs(props)\n const t = useI18n()\n const pageNumber = computed(() => {\n let ret: number = Number(page.value)\n if (Number.isNaN(ret)) {\n ret = 0\n }\n if (ret < 1) {\n ret = Math.abs(ret)\n }\n return ret\n })\n const perPageNumber = computed(() => {\n let ret: number = Number(perPage.value)\n if (Number.isNaN(ret)) {\n ret = 0\n }\n if (ret < 1) {\n ret = Math.abs(ret)\n }\n return ret\n })\n const totalNumber = computed(() => {\n let ret: number = Number(total.value)\n if (Number.isNaN(ret)) {\n ret = 0\n }\n if (ret < 0) {\n ret = Math.abs(ret)\n }\n return ret\n })\n const firstRecord = computed(() =>\n (pageNumber.value - 1) * perPageNumber.value + 1 > totalNumber.value\n ? totalNumber.value\n : (pageNumber.value - 1) * perPageNumber.value + 1\n )\n const lastRecord = computed(() =>\n firstRecord.value + (perPageNumber.value - 1) > totalNumber.value\n ? total.value\n : firstRecord.value + (perPageNumber.value - 1)\n )\n const args = computed(() => [\n numeral(firstRecord.value).format(numeralFormat.value),\n numeral(lastRecord.value).format(numeralFormat.value),\n numeral(totalNumber.value).format(numeralFormat.value),\n ])\n return () =>\n h(\n 'span',\n {\n class: componentClasses.value,\n style: deepmerge(\n style.value,\n stripUndefinedValuesFromObject({\n display: totalNumber.value === 0 ? 'none' : undefined,\n })\n ),\n },\n format(t('resourcefulIndex.recordsTotal'), ...args.value)\n )\n },\n})\n","import { useI18n } from '../../ioc'\nimport { encode } from '@nhtio/encoder'\nimport { SvgIcon } from '../../svg-icon'\nimport { deepmerge } from 'deepmerge-ts'\nimport { Sortable } from '../../sortable'\nimport { VBtn } from 'vuetify/components/VBtn'\nimport { isObject } from '../../common/guards'\nimport { VCard } from 'vuetify/components/VCard'\nimport { VIcon } from 'vuetify/components/VIcon'\nimport { VBadge } from 'vuetify/components/VBadge'\nimport { VSpacer } from 'vuetify/components/VGrid'\nimport { VSheet } from 'vuetify/components/VSheet'\nimport { ControlButton } from '../../control-button'\nimport { VDialog } from 'vuetify/components/VDialog'\nimport { emitsFactory } from '../../common/factories'\nimport { VDivider } from 'vuetify/components/VDivider'\nimport { VTextField } from 'vuetify/components/VTextField'\nimport { debounce } from '@nhtio/vuetifiable/util/helpers'\nimport { useResourcefulIndexScopedDisplay } from '../index'\nimport { VList, VListItem } from 'vuetify/components/VList'\nimport { VEmptyState } from 'vuetify/components/VEmptyState'\nimport { TypedEventEmitter } from '@nhtio/tiny-typed-emitter'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { default as warningSvg } from '../../icons/warning.svg?url'\nimport { stripUndefinedValuesFromObject } from '../../common/utils'\nimport { VToolbar, VToolbarItems } from 'vuetify/components/VToolbar'\nimport { VNavigationDrawer } from 'vuetify/components/VNavigationDrawer'\nimport { makeVDialogProps } from '@nhtio/vuetifiable/components/VDialog/VDialog'\nimport { defineComponent, h, toRefs, toRaw, computed, watch, ref, nextTick } from 'vue'\nimport { makeVTextFieldProps } from '@nhtio/vuetifiable/components/VTextField/VTextField'\nimport { makeVEmptyStateProps } from '@nhtio/vuetifiable/components/VEmptyState/VEmptyState'\nimport {\n mdiClose,\n mdiContentSave,\n mdiContentSaveCheck,\n mdiMagnify,\n mdiDrag,\n mdiMouseOff,\n mdiMenuUp,\n mdiMenuDown,\n mdiCloseThick,\n mdiSortAscending,\n mdiSortDescending,\n mdiCancel,\n} from '@mdi/js'\nimport {\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n} from './_columns_controls'\nimport type { EventMap } from '@nhtio/tiny-typed-emitter'\nimport type { SortableProps } from '../../sortable/props'\nimport type { ResourcefulFieldLabelTerms } from '../props'\nimport type { PropType, ExtractPublicPropTypes } from 'vue'\nimport type { SortableItemSlotBindings } from '../../sortable'\nimport type { ControlButtonProps } from '../../control-button/props'\nimport type { ResourcefulSchemaDefinition, ResourcefulSortPayload } from '../types'\nimport type {\n DispositionButtonProps,\n SaveButtonProps,\n DiscardButtonProps,\n} from './_columns_controls'\n\nexport const makeResourcefulIndexSortsControlsProps = propsFactory(\n {\n modelValue: {\n type: Boolean,\n default: false,\n },\n color: {\n type: String as PropType<string | undefined>,\n default: undefined,\n },\n labels: {\n type: Object as PropType<ResourcefulFieldLabelTerms>,\n default: () => ({}),\n },\n possibleFields: {\n type: Object as PropType<ResourcefulSchemaDefinition>,\n default: () => ({}),\n },\n sortableFields: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n sorting: {\n type: Object as PropType<ResourcefulSortPayload>,\n default: () => ({}),\n },\n dispositionButtons: {\n type: Object as PropType<DispositionButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n },\n saveButton: {\n type: Object as PropType<SaveButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n },\n discardButton: {\n type: Object as PropType<DiscardButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n },\n },\n 'ResourcefulIndexSortsControls'\n)\n\ntype ConfirmDialogEvents = EventMap<{\n show: []\n hide: []\n dispositioned: [disposition: boolean]\n}>\ntype VTextFieldPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVTextFieldProps>>\ntype VDialogPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVDialogProps>>\ntype VEmptyStatePublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVEmptyStateProps>>\n\nexport const isResourcefulSortPayload = (value: unknown): value is ResourcefulSortPayload => {\n if (!isObject(value)) return false\n if (Object.keys(value).some((k) => 'string' !== typeof k)) return false\n if (Object.values(value).some((v) => 'string' === typeof v && !['asc', 'desc'].includes(v)))\n return false\n return true\n}\n\nexport const ResourcefulIndexSortsControls = defineComponent({\n name: 'ResourcefulIndexSortsControls',\n props: makeResourcefulIndexSortsControlsProps(),\n emits: emitsFactory({\n 'update:modelValue': (val: boolean) => typeof val === 'boolean',\n 'update:model-value': (val: boolean) => typeof val === 'boolean',\n 'update:sorting': (val: ResourcefulSortPayload) => isResourcefulSortPayload(val),\n }),\n setup(props, { emit }) {\n const confirmationBus = new TypedEventEmitter<ConfirmDialogEvents>()\n const {\n modelValue,\n color,\n possibleFields,\n sortableFields,\n sorting,\n labels,\n dispositionButtons,\n saveButton,\n discardButton,\n } = toRefs(props)\n const { width: screenWidth, xs } = useResourcefulIndexScopedDisplay()\n const showDispositionDialog = ref(false)\n const isDirty = ref(false)\n const updatedSorting = ref<ResourcefulSortPayload>({})\n const updateIsDirty = debounce(() => {\n const rawShowingFields = toRaw(sorting.value)\n const rawUpdatedShowingFields = toRaw(updatedSorting.value)\n const is = encode(rawShowingFields) !== encode(rawUpdatedShowingFields)\n isDirty.value = is\n }, 100)\n const visibility = computed({\n get: () => modelValue.value,\n set: (val: boolean) => {\n // plumbing to support confirmation dialog\n // if the user is trying to close the dialog and there are unsaved changes\n confirmationBus.off('dispositioned')\n if (!val && isDirty.value) {\n confirmationBus.once('dispositioned', (disposition: boolean) => {\n if (disposition && isDirty.value) {\n emit('update:sorting', updatedSorting.value)\n }\n emit('update:modelValue', val)\n emit('update:model-value', val)\n confirmationBus.emit('hide')\n isDirty.value = false\n })\n confirmationBus.emit('show')\n } else {\n emit('update:modelValue', val)\n emit('update:model-value', val)\n }\n },\n })\n watch(sorting, () => updateIsDirty, { immediate: true, deep: true })\n watch(updatedSorting, () => updateIsDirty, { immediate: true, deep: true })\n watch(modelValue, (is, was) => {\n if (is && is !== was) {\n updatedSorting.value = Object.assign({}, toRaw(sorting.value))\n }\n })\n const sortingEntries = computed<Array<string>>({\n get: () =>\n Object.entries(updatedSorting.value)\n .map(([field]) => field)\n .filter((key) => sortableFields.value.includes(key)),\n set: (val: Array<string>) => {\n const toMerge = val\n .filter((v) => sortableFields.value.includes(v))\n .map((k) => ({\n [k]: updatedSorting.value[k] || 'asc',\n }))\n const merged = deepmerge(...toMerge)\n updatedSorting.value = Object.assign({}, merged)\n nextTick(() => {\n updateIsDirty()\n })\n },\n })\n const unsortedEntries = computed(() =>\n Array.from(sortableFields.value).filter((f) => !(f in updatedSorting.value))\n )\n const t = useI18n()\n const resultFilter = ref<string | null>(null)\n const resultFilderFieldBindings = computed<VTextFieldPublicProps>(() => ({\n 'modelValue': resultFilter.value,\n 'onUpdate:modelValue': (val: string) => {\n resultFilter.value = val\n },\n 'label': t('lucid.resourceful.index.sortsControls.filter.label'),\n 'variant': 'outlined',\n 'density': 'compact',\n 'clearable': true,\n 'clearIcon': () => h(SvgIcon, { d: mdiClose }),\n 'prependInnerIcon': () => h(SvgIcon, { d: mdiMagnify }),\n 'hideDetails': true,\n // prevent accidentally submitting the form\n // since we are in the context of a form tag\n // but there's also no need for line breaks in this field anyway\n 'onKeydown': (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n e.stopPropagation()\n }\n },\n 'onKeyup': (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n e.stopPropagation()\n }\n },\n }))\n const isFiltering = computed(\n () => 'string' === typeof resultFilter.value && resultFilter.value.length > 0\n )\n const dragBindings = computed<SortableProps>(() => ({\n modelValue: sortingEntries.value,\n tag: VList,\n tagProps: {\n class: ['transparent', { 'pb-0': unsortedEntries.value.length > 0 }],\n nav: true,\n selectable: !isFiltering.value,\n },\n animation: 300,\n disabled: isFiltering.value,\n ghostClass: 'resourceful-index__sorts-controls__sortable-ghost',\n chosenClass: 'resourceful-index__sorts-controls__sortable-chosen',\n dragClass: 'resourceful-index__sorts-controls__sortable-drag',\n ...{\n 'onUpdate:modelValue': (val: Array<string>) => {\n sortingEntries.value = val\n },\n },\n }))\n confirmationBus.on('show', () => {\n showDispositionDialog.value = true\n })\n confirmationBus.on('hide', () => {\n showDispositionDialog.value = false\n })\n const confirmationDialogBindings = computed<VDialogPublicProps>(() => ({\n modelValue: showDispositionDialog.value,\n persistent: true,\n fullscreen: xs.value,\n contained: !xs.value,\n maxWidth: 500,\n scrim: true,\n }))\n const confirmationEmptyStateBindings = computed<VEmptyStatePublicProps>(() => ({\n image: warningSvg,\n title: t('lucid.resourceful.index.sortsControls.dispositionDialog.headline'),\n text: t('lucid.resourceful.index.sortsControls.dispositionDialog.title'),\n }))\n const saveDispositionButtonBindings = computed<ControlButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value),\n defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n stripUndefinedValuesFromObject(saveButton.value),\n { cta: t('general.save') },\n { onClick: () => confirmationBus.emit('dispositioned', true) }\n )\n )\n const discardDispositionButtonBindings = computed<ControlButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value),\n defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n stripUndefinedValuesFromObject(discardButton.value),\n { cta: t('general.discard') },\n { onClick: () => confirmationBus.emit('dispositioned', false) }\n )\n )\n return () => [\n h(\n VNavigationDrawer,\n {\n 'modelValue': visibility.value,\n 'onUpdate:modelValue': (val: boolean) => {\n visibility.value = val\n },\n 'permanent': false,\n 'persistent': false,\n 'temporary': true,\n 'absolute': true,\n 'width': screenWidth.value < 500 ? screenWidth.value : 500,\n 'color': color.value,\n },\n () =>\n h('div', { class: ['d-flex', 'flex-column', 'h-100'] }, [\n h(\n VToolbar,\n { color: color.value || 'transparent', class: ['flex-grow-0'], density: 'compact' },\n () => [\n h('div', { class: ['d-flex', 'align-center', 'px-2', 'flex-grow-1'] }, [\n h(VTextField, resultFilderFieldBindings.value),\n ]),\n h(VToolbarItems, {}, () => [\n h(VBtn, {\n icon: () => h(SvgIcon, { d: mdiContentSave }),\n variant: 'text',\n onClick: () => {\n if (isDirty.value) {\n emit('update:sorting', updatedSorting.value)\n nextTick(() => updateIsDirty())\n }\n },\n }),\n h(VBtn, {\n icon: () => h(SvgIcon, { d: mdiClose }),\n variant: 'text',\n onClick: () => (visibility.value = false),\n }),\n ]),\n ]\n ),\n h(VDivider, { class: ['flex-grow-0'] }),\n h(VSheet, { color: 'transparent', class: ['flex-grow-1', 'overflow-y-auto'] }, () => [\n h(\n Sortable,\n {\n ...dragBindings.value,\n },\n {\n item: ({\n item,\n props: sortableItemProps,\n ordinal,\n disabled,\n sortingDisabled,\n first,\n last,\n moveUp,\n moveDown,\n }: SortableItemSlotBindings<string>) => {\n const definition = possibleFields.value[item]\n const title = definition\n ? 'computed' === definition.type\n ? definition['x-table-header-definition']!.title\n : t(labels.value[item] || item)\n : t(labels.value[item] || item)\n const direction = updatedSorting.value[item]\n return h(\n VListItem,\n {\n title,\n ripple: false,\n ...sortableItemProps,\n class: [\n {\n 'd-none':\n isFiltering.value &&\n !title.toLowerCase().includes(resultFilter.value!.toLowerCase()),\n },\n ],\n },\n {\n prepend: () =>\n h('div', { class: ['d-flex', 'align-center', 'justify-start', 'me-2'] }, [\n h(VIcon, {\n icon: () =>\n h(SvgIcon, { d: isFiltering.value ? mdiMouseOff : mdiDrag }),\n }),\n h(VBadge, {\n content: ordinal,\n class: ['ms-2'],\n size: 'x-small',\n inline: true,\n }),\n ]),\n append: () =>\n h('div', { class: ['d-flex', 'align-center', 'justify-end'] }, [\n h(VBtn, {\n size: 'x-small',\n icon: () => h(SvgIcon, { d: mdiMenuUp }),\n class: ['me-1'],\n disabled: isFiltering.value || sortingDisabled || disabled || first,\n variant: 'text',\n onClick: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n moveUp()\n },\n }),\n h(VBtn, {\n size: 'x-small',\n icon: () => h(SvgIcon, { d: mdiMenuDown }),\n class: ['me-1'],\n disabled: isFiltering.value || sortingDisabled || disabled || last,\n variant: 'text',\n onClick: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n moveDown()\n },\n }),\n h(VBtn, {\n size: 'x-small',\n icon: () => h(SvgIcon, { d: mdiSortAscending }),\n class: ['me-1'],\n active: 'asc' === direction,\n variant: 'text',\n onClick: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n updatedSorting.value[item] = 'asc'\n nextTick(() => {\n updateIsDirty()\n })\n },\n }),\n h(VBtn, {\n size: 'x-small',\n icon: () => h(SvgIcon, { d: mdiSortDescending }),\n class: ['me-1'],\n active: 'desc' === direction,\n variant: 'text',\n onClick: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n updatedSorting.value[item] = 'desc'\n nextTick(() => {\n updateIsDirty()\n })\n },\n }),\n h(VBtn, {\n size: 'x-small',\n icon: () => h(SvgIcon, { d: mdiCancel }),\n class: [],\n variant: 'text',\n onClick: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n const update = stripUndefinedValuesFromObject({\n ...updatedSorting.value,\n [item]: undefined,\n }) as ResourcefulSortPayload\n updatedSorting.value = update\n nextTick(() => {\n updateIsDirty()\n })\n },\n }),\n ]),\n }\n )\n },\n }\n ),\n unsortedEntries.value.length > 0\n ? h(\n VList,\n { class: ['transparent', 'pt-0'], nav: true, selectable: !isFiltering.value },\n () =>\n Array.from(unsortedEntries.value).map((f) => {\n const definition = possibleFields.value[f]\n const title = definition\n ? 'computed' === definition.type\n ? definition['x-table-header-definition']!.title\n : t(labels.value[f] || f)\n : t(labels.value[f] || f)\n return h(\n VListItem,\n {\n title,\n ripple: false,\n class: [\n {\n 'd-none':\n isFiltering.value &&\n !title.toLowerCase().includes(resultFilter.value!.toLowerCase()),\n },\n ],\n },\n {\n prepend: () =>\n h(\n 'div',\n { class: ['d-flex', 'align-center', 'justify-start', 'me-2'] },\n [\n h(VIcon, {\n icon: () => h(SvgIcon, { d: mdiMouseOff }),\n }),\n h(VBadge, {\n icon: () => h(SvgIcon, { d: mdiCloseThick }),\n class: ['ms-2'],\n size: 'x-small',\n inline: true,\n }),\n ]\n ),\n append: () =>\n h('div', { class: ['d-flex', 'align-center', 'justify-end'] }, [\n h(VBtn, {\n size: 'x-small',\n icon: () => h(SvgIcon, { d: mdiSortAscending }),\n class: ['me-1'],\n variant: 'text',\n onClick: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n updatedSorting.value[f] = 'asc'\n nextTick(() => {\n updateIsDirty()\n })\n },\n }),\n h(VBtn, {\n size: 'x-small',\n icon: () => h(SvgIcon, { d: mdiSortDescending }),\n class: ['me-1'],\n variant: 'text',\n onClick: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n updatedSorting.value[f] = 'desc'\n nextTick(() => {\n updateIsDirty()\n })\n },\n }),\n h(VBtn, {\n size: 'x-small',\n icon: () => h(SvgIcon, { d: mdiCancel }),\n class: [],\n active: true,\n variant: 'text',\n }),\n ]),\n }\n )\n })\n )\n : null,\n ]),\n h(VDivider, { class: ['flex-grow-0'] }),\n h(\n VToolbar,\n { color: color.value || 'transparent', class: ['flex-grow-0'], density: 'compact' },\n () => [\n h(VSpacer),\n h(VToolbarItems, {}, () => [\n h(VBtn, {\n icon: () => h(SvgIcon, { d: mdiContentSaveCheck }),\n variant: 'text',\n onClick: () => {\n if (isDirty.value) {\n emit('update:sorting', updatedSorting.value)\n nextTick(() => {\n isDirty.value = false\n visibility.value = false\n })\n } else {\n nextTick(() => {\n visibility.value = false\n })\n }\n },\n }),\n ]),\n ]\n ),\n h(VDivider, { class: ['flex-grow-0'] }),\n ])\n ),\n h(VDialog, confirmationDialogBindings.value, () =>\n h(VCard, {}, () =>\n h(VEmptyState, confirmationEmptyStateBindings.value, {\n actions: () => [\n h(ControlButton, discardDispositionButtonBindings.value),\n h(ControlButton, saveDispositionButtonBindings.value),\n ],\n })\n )\n ),\n ]\n },\n})\n","import { SvgIcon } from '../../svg-icon'\nimport { default as numeral } from 'numeral'\nimport { printf as format } from 'fast-printf'\nimport { VBtn } from 'vuetify/components/VBtn'\nimport { useI18n, useBrowser } from '../../ioc'\nimport { VCard } from 'vuetify/components/VCard'\nimport { isHTMLElement } from '../../common/guards'\nimport { useScopedDisplay } from '../../ux/display'\nimport { ControlButton } from '../../control-button'\nimport { VDialog } from 'vuetify/components/VDialog'\nimport { VDivider } from 'vuetify/components/VDivider'\nimport { defineComponent, h, toRefs, computed } from 'vue'\nimport { VList, VListItem } from 'vuetify/components/VList'\nimport { propsAndEmitsFactory } from '../../common/factories'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { VContainer, VRow, VCol } from 'vuetify/components/VGrid'\nimport { VProgressCircular } from 'vuetify/components/VProgressCircular'\nimport { VToolbar, VToolbarTitle, VToolbarItems } from 'vuetify/components/VToolbar'\nimport { mdiClose, mdiPlaylistPlay, mdiCheckCircle, mdiCloseCircle, mdiHelpCircle } from '@mdi/js'\nimport type { makeVRowProps } from '@nhtio/vuetifiable/components/VGrid/VRow'\nimport type { makeVCardProps } from '@nhtio/vuetifiable/components/VCard/VCard'\nimport type { PropType, ExtractPublicPropTypes, ComponentPublicInstance } from 'vue'\nimport type { makeVDialogProps } from '@nhtio/vuetifiable/components/VDialog/VDialog'\nimport type { makeVContainerProps } from '@nhtio/vuetifiable/components/VGrid/VContainer'\nimport type { makeVProgressCircularProps } from '@nhtio/vuetifiable/components/VProgressCircular/VProgressCircular'\n\nconst { makeProps: makeBulkActionsProgressDialogProps, emits: bulkActionsProgressDialogEmits } =\n propsAndEmitsFactory(\n {\n container: {\n type: [Object, null] as PropType<HTMLElement | ComponentPublicInstance | null>,\n default: null,\n required: true,\n },\n bulkActionName: {\n type: [String, null] as PropType<string | null>,\n default: null,\n required: true,\n },\n bulkActionProcessing: {\n type: Boolean,\n default: false,\n required: true,\n },\n bulkActionProcessingComplete: {\n type: Boolean,\n default: false,\n required: true,\n },\n bulkActionProgress: {\n type: Number,\n default: 0,\n required: true,\n },\n bulkActionTotal: {\n type: Number,\n default: 0,\n required: true,\n },\n bulkActionSuccesses: {\n type: Number,\n default: 0,\n required: true,\n },\n bulkActionFailures: {\n type: Number,\n default: 0,\n required: true,\n },\n bulkActionUndetermined: {\n type: Number,\n default: 0,\n required: true,\n },\n },\n {\n 'click:close': () => true,\n },\n 'BulkActionsProgressDialog'\n )\n\nexport type BulkActionsProgressDialogProps = ExtractPublicPropTypes<\n ReturnType<typeof makeBulkActionsProgressDialogProps>\n>\n\ntype VProgressCircularPublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makeVProgressCircularProps>\n>\ntype VDialogPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVDialogProps>>\ntype VCardPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVCardProps>>\ntype VContainerPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVContainerProps>>\ntype VRowPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVRowProps>>\n\nconst closeButtonIcon = h(SvgIcon, { d: mdiClose })\nconst successfulIcon = h(SvgIcon, { d: mdiCheckCircle, class: ['text-success'] })\nconst errorIcon = h(SvgIcon, { d: mdiCloseCircle, class: ['text-error'] })\nconst questionIcon = h(SvgIcon, { d: mdiHelpCircle, class: ['text-indigo'] })\nconst processedActionIcon = h(SvgIcon, { d: mdiPlaylistPlay, class: ['text-info'] })\n\nexport const BulkActionsProgressDialog = defineComponent({\n name: 'BulkActionsProgressDialog',\n props: makeBulkActionsProgressDialogProps(),\n emits: bulkActionsProgressDialogEmits,\n setup(props, { emit }) {\n const {\n container,\n bulkActionName,\n bulkActionProcessing,\n bulkActionProcessingComplete,\n bulkActionProgress,\n bulkActionTotal,\n bulkActionSuccesses,\n bulkActionFailures,\n bulkActionUndetermined,\n } = toRefs(props)\n const { orientation: containerOrientation, width } = useScopedDisplay(container)\n const t = useI18n()\n const computedProgressRate = computed(() => {\n if (bulkActionTotal.value === 0) return bulkActionProcessingComplete.value ? 100 : 0\n return (bulkActionProgress.value / bulkActionTotal.value) * 100\n })\n const formattedProgressRate = computed(\n () => numeral(computedProgressRate.value).format('0,0') + '%'\n )\n const formattedTitle = computed(() =>\n format(t('resourcefulIndex.bulkActionProcessing.title'), bulkActionName.value || '...')\n )\n const formattedBulkActionSuccesses = computed(() =>\n numeral(bulkActionSuccesses.value).format('0,0')\n )\n const formattedBulkActionFailures = computed(() =>\n numeral(bulkActionFailures.value).format('0,0')\n )\n const formattedBulkActionUndetermined = computed(() =>\n numeral(bulkActionUndetermined.value).format('0,0')\n )\n const formattedProcessed = computed(() =>\n [\n numeral(bulkActionProgress.value).format('0,0'),\n numeral(bulkActionTotal.value).format('0,0'),\n ].join(' / ')\n )\n const getContainerHtmlElement = (): HTMLElement | null => {\n const browser = useBrowser()\n if (!browser.ssr && isHTMLElement(container.value)) return container.value\n if (\n !browser.ssr &&\n container.value &&\n '$el' in container.value &&\n isHTMLElement(container.value.$el)\n )\n return container.value.$el\n return null\n }\n const computedDialogWidth = computed(() => (width.value > 500 ? 500 : width.value))\n const dialogBindings = computed<VDialogPublicProps>(() => ({\n attach: container.value ? (getContainerHtmlElement() ?? 'body') : 'body',\n absolute: container.value !== null,\n closeOnBack: false,\n closeOnContentClick: false,\n contained: container.value !== null,\n modelValue: true,\n persistent: true,\n retainFocus: true,\n scrim: true,\n width: computedDialogWidth.value,\n }))\n const cardBindings = computed<VCardPublicProps>(() => ({\n color: 'surface',\n }))\n const containerBindings = computed<VContainerPublicProps>(() => ({\n fluid: true,\n }))\n const rowBindings = computed<VRowPublicProps>(() => ({\n align: 'center',\n }))\n const progressCircleBindings = computed<VProgressCircularPublicProps>(() => ({\n color: 'success',\n modelValue: computedProgressRate.value,\n size: 'landscape' !== containerOrientation.value ? 100 : 150,\n width: 'landscape' !== containerOrientation.value ? 7.5 : 15,\n }))\n useRender(() =>\n !bulkActionProcessing.value\n ? h('span')\n : h(VDialog, { ...dialogBindings.value }, () =>\n h(VCard, { ...cardBindings.value }, () => [\n h(VToolbar, { flat: true, color: 'transparent', density: 'compact' }, () => [\n h(VToolbarTitle, {}, () => formattedTitle.value),\n h(VToolbarItems, {}, () => [\n bulkActionProcessingComplete.value\n ? h(VBtn, {\n icon: () => closeButtonIcon,\n onClick: () => emit('click:close'),\n })\n : null,\n ]),\n ]),\n h(VDivider),\n h(VContainer, { ...containerBindings.value }, () => [\n h(VRow, { ...rowBindings.value }, () =>\n h(\n VCol,\n {\n cols: 12,\n class: [\n 'd-flex',\n 'align-center',\n 'justify-center',\n {\n 'flex-column': 'landscape' !== containerOrientation.value,\n },\n ],\n },\n () => [\n h('div', { class: ['flex-grow-0'] }, [\n h(VProgressCircular, { ...progressCircleBindings.value }, () =>\n h(\n 'span',\n {\n class: [\n 'text-h5',\n 'text-button',\n 'font-weight-bold',\n { 'text-success': bulkActionProcessingComplete.value },\n ],\n },\n formattedProgressRate.value\n )\n ),\n ]),\n h(\n VList,\n {\n class: [\n 'flex-grow-1',\n 'w-100',\n {\n 'py-0': 'landscape' === containerOrientation.value,\n },\n ],\n },\n () => [\n h(VListItem, {\n prependIcon: () => successfulIcon,\n title: t('resourcefulIndex.bulkActionProcessing.successes'),\n subtitle: formattedBulkActionSuccesses.value,\n lines: 'two',\n density: 'compact',\n }),\n h(VListItem, {\n prependIcon: () => errorIcon,\n title: t('resourcefulIndex.bulkActionProcessing.errors'),\n subtitle: formattedBulkActionFailures.value,\n lines: 'two',\n density: 'compact',\n }),\n h(VListItem, {\n prependIcon: () => questionIcon,\n title: t('resourcefulIndex.bulkActionProcessing.undetermined'),\n subtitle: formattedBulkActionUndetermined.value,\n lines: 'two',\n density: 'compact',\n }),\n h(VListItem, {\n prependIcon: () => processedActionIcon,\n title: t('resourcefulIndex.bulkActionProcessing.processed'),\n subtitle: formattedProcessed.value,\n lines: 'two',\n density: 'compact',\n }),\n ]\n ),\n ]\n )\n ),\n bulkActionProcessingComplete.value\n ? h(\n VRow,\n {\n ...rowBindings.value,\n },\n () =>\n h(VCol, { cols: 12, class: ['d-flex', 'justify-end'] }, () =>\n h(ControlButton, {\n prependIcon: () => closeButtonIcon,\n dividePrependIcon: true,\n cta: t('resourcefulIndex.bulkActionProcessing.completeButton'),\n onClick: () => emit('click:close'),\n color: 'surface-light',\n })\n )\n )\n : null,\n ]),\n ])\n )\n )\n return {}\n },\n})\n","/*\n|--------------------------------------------------------------------------\n| Filters Common Functionality\n|--------------------------------------------------------------------------\n|\n| Types, classes and constants common to multiple filtration components.\n|\n*/\n\nimport { encode } from '@nhtio/encoder'\nimport { debounce } from '@nhtio/vuetifiable/util/helpers'\nimport { TypedEventEmitter } from '@nhtio/tiny-typed-emitter'\nimport type { ExtractPublicPropTypes } from 'vue'\nimport type { AnyFilterCondition } from './schema'\nimport type { ValidationError } from '@nhtio/validation'\nimport type { EventMap } from '@nhtio/tiny-typed-emitter'\nimport type { makeVBtnProps } from '@nhtio/vuetifiable/components/VBtn/VBtn'\nimport type { makeVFabProps } from '@nhtio/vuetifiable/components/VFab/VFab'\nimport type { makeVMenuProps } from '@nhtio/vuetifiable/components/VMenu/VMenu'\nimport type { makeVCardProps } from '@nhtio/vuetifiable/components/VCard/VCard'\nimport type { makeVIconProps } from '@nhtio/vuetifiable/components/VIcon/VIcon'\nimport type { makeVAlertProps } from '@nhtio/vuetifiable/components/VAlert/VAlert'\nimport type { makeVLabelProps } from '@nhtio/vuetifiable/components/VLabel/VLabel'\nimport type { makeVInputProps } from '@nhtio/vuetifiable/components/VInput/VInput'\nimport type { makeVDialogProps } from '@nhtio/vuetifiable/components/VDialog/VDialog'\nimport type { makeVListItemProps } from '@nhtio/vuetifiable/components/VList/VListItem'\nimport type { makeVBtnToggleProps } from '@nhtio/vuetifiable/components/VBtnToggle/VBtnToggle'\nimport type { makeVTextFieldProps } from '@nhtio/vuetifiable/components/VTextField/VTextField'\nimport type { makeVSpeedDialProps } from '@nhtio/vuetifiable/components/VSpeedDial/VSpeedDial'\nimport type { makeVEmptyStateProps } from '@nhtio/vuetifiable/components/VEmptyState/VEmptyState'\nimport type { makeVAutocompleteProps } from '@nhtio/vuetifiable/components/VAutocomplete/VAutocomplete'\n\nexport type ReactivityBusEvents = EventMap<{\n updated: []\n}>\n\nexport type VInputBusEvents = EventMap<{\n focused: []\n blurred: []\n}>\n\nexport type FilterConditionElementBusEvents = EventMap<{\n 'change:field': []\n 'change:type': []\n 'change:operator': []\n 'change:arguments': []\n}>\n\nexport type FilterConditionElementToFilterConditionArgumentCellBusEvents = EventMap<{\n 'needs:reset:arguments': []\n}>\n\nexport type ValidationDetails = ValidationError['details']\n\nexport type VTextFieldPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVTextFieldProps>>\nexport type VDialogPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVDialogProps>>\nexport type VEmptyStatePublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVEmptyStateProps>>\nexport type VBtnTogglePublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVBtnToggleProps>>\nexport type VBtnPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVBtnProps>>\nexport type VMenuPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVMenuProps>>\nexport type VListItemPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVListItemProps>>\nexport type VCardPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVCardProps>>\nexport type VSpeedDialPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVSpeedDialProps>>\nexport type VFabPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVFabProps>>\nexport type VAlertPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVAlertProps>>\nexport type VIconPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVIconProps>>\nexport type VLabelPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVLabelProps>>\nexport type VAutocompletePublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makeVAutocompleteProps>\n>\nexport type VInputPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVInputProps>>\n\nexport { defaultsForResourcefulIndexColumnsControlsDispositionButtonProps } from '../resourceful-index/partials/_columns_controls'\nexport type { DispositionButtonProps } from '../resourceful-index/partials/_columns_controls'\nexport type { ResourcefulSchemaDefinition } from '../resourceful-index/types'\nexport type { ResourcefulFieldLabelTerms } from '../resourceful-index/props'\n\n/**\n * The Reactivity Bus is a workaround to assist with the recursive nature of the filter UI.\n * An instance of the ReactivityBus will be passed from each parent component to its children.\n *\n * When an update occurs in a child component, it should inform the parent component\n * which will trigger a `triggerRef` on the next tick for the parent component's local state,\n * which should in turn trigger any cascading updates to the parent component's own parent component\n */\nexport class ReactivityBus extends TypedEventEmitter<ReactivityBusEvents> {\n constructor() {\n super()\n const notifyCallback = debounce(() => {\n this.emit('updated')\n }, 100)\n Object.defineProperty(this, 'notify', {\n value: () => notifyCallback(),\n enumerable: true,\n configurable: false,\n })\n }\n\n declare notify: () => void\n}\n\n/**\n * The VInputEventBus is a specialized event bus for handling shared states between multiple\n * sub-components of a VInput component.\n *\n * The goal is that when an event such as a change in focus state or error state occurs in\n * one of the children, the parent can be notified so that it can update the relevant states\n * for the rest.\n */\nexport class VInputEventBus extends TypedEventEmitter<VInputBusEvents> {\n readonly #focusRegister: Set<string>\n readonly #stateRegister: Map<string, boolean>\n readonly #computedChangeAndUpdate: () => void\n\n constructor() {\n super()\n this.#focusRegister = new Set<string>()\n this.#stateRegister = new Map<string, boolean>()\n this.#computedChangeAndUpdate = debounce(() => {\n // focus state\n if (this.isFocused !== this.#stateRegister.get('focused')) {\n const isFocused = this.isFocused\n this.#stateRegister.set('focused', isFocused)\n this.emit(isFocused ? 'focused' : 'blurred')\n }\n }, 100)\n }\n\n get isFocused() {\n return this.#focusRegister.size > 0\n }\n\n notifyFocus(uid: string) {\n this.#focusRegister.add(uid)\n this.#computedChangeAndUpdate()\n }\n\n notifyBlur(uid: string) {\n this.#focusRegister.delete(uid)\n this.#computedChangeAndUpdate()\n }\n}\n\nexport class FilterConditionElementBus extends TypedEventEmitter<FilterConditionElementBusEvents> {\n #firstWas: AnyFilterCondition | undefined\n #lastIs: AnyFilterCondition | undefined\n constructor() {\n super()\n const compareCallback = debounce(() => {\n const cleanup = () => {\n this.#firstWas = undefined\n this.#lastIs = undefined\n return\n }\n // return early if both values are the same - no change here\n if (encode(this.#firstWas) === encode(this.#lastIs)) {\n return cleanup()\n }\n // if first was is undefined (and we know that last is is defined because === already escaped)\n // trigger all\n if (!this.#firstWas) {\n this.emit('change:field')\n this.emit('change:type')\n this.emit('change:operator')\n this.emit('change:arguments')\n return cleanup()\n }\n // compare each property to see if there are changes\n // we know that both this.#firstWas is not undefined and this.#lastIs is not\n // undefined because of the previous early exits\n if (encode(this.#firstWas!.field) !== encode(this.#lastIs!.field)) {\n this.emit('change:field')\n }\n if (encode(this.#firstWas!.type) !== encode(this.#lastIs!.type)) {\n this.emit('change:type')\n }\n if (encode(this.#firstWas!.operator) !== encode(this.#lastIs!.operator)) {\n this.emit('change:operator')\n }\n if (encode(this.#firstWas!.arguments) !== encode(this.#lastIs!.arguments)) {\n this.emit('change:arguments')\n }\n return cleanup()\n }, 100)\n const notifyCallback = (is: AnyFilterCondition, was: AnyFilterCondition | undefined) => {\n if (!this.#firstWas) {\n this.#firstWas = was\n }\n this.#lastIs = is\n compareCallback()\n }\n Object.defineProperty(this, 'notify', {\n value: (is: AnyFilterCondition, was: AnyFilterCondition | undefined) =>\n notifyCallback(is, was),\n enumerable: true,\n configurable: false,\n })\n }\n\n declare notify: (is: AnyFilterCondition, was?: AnyFilterCondition | undefined) => void\n}\n\nexport class FilterConditionElementToFilterConditionArgumentCellBus extends TypedEventEmitter<FilterConditionElementToFilterConditionArgumentCellBusEvents> {}\n","import { useI18n } from '../ioc'\nimport { SvgIcon } from '../svg-icon'\nimport { ControlButton } from '../control-button'\nimport { emitsFactory } from '../common/factories'\nimport { defineComponent, toRefs, computed, h } from 'vue'\nimport { mdiCardPlusOutline, mdiFilterPlus } from '@mdi/js'\nimport { VEmptyState } from 'vuetify/components/VEmptyState'\nimport { default as warningSvg } from '../icons/warning.svg?url'\nimport { stripUndefinedValuesFromObject } from '../common/utils'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { defaultsForResourcefulIndexColumnsControlsDispositionButtonProps } from './common'\nimport type { PropType } from 'vue'\nimport type { VEmptyStatePublicProps } from './common'\nimport type { ControlButtonProps } from '../control-button/props'\n\nconst makeFilterGroupEmptyStateProps = propsFactory(\n {\n buttonStyles: {\n type: Object as PropType<ControlButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n },\n },\n 'FilterGroupEmptyState'\n)\n\nexport const FilterGroupEmptyState = defineComponent({\n name: 'FilterGroupEmptyState',\n props: makeFilterGroupEmptyStateProps(),\n emits: emitsFactory({\n 'click:add:group': () => true,\n 'click:add:condition': () => true,\n }),\n setup(props, { emit }) {\n const t = useI18n()\n const { buttonStyles } = toRefs(props)\n const confirmationEmptyStateBindings = computed<VEmptyStatePublicProps>(() => ({\n image: warningSvg,\n title: t('lucid.resourceful.index.filtersControls.groupEmpty.headline'),\n text: t('lucid.resourceful.index.filtersControls.groupEmpty.title'),\n }))\n const addGroupButtonBindings = computed<ControlButtonProps>(\n () =>\n ({\n ...defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n ...stripUndefinedValuesFromObject(buttonStyles.value),\n ...{\n cta: t('lucid.resourceful.index.filtersControls.addGroup'),\n prependIcon: () => h(SvgIcon, { d: mdiCardPlusOutline }),\n color: 'surface-light',\n },\n ...{ onClick: () => emit('click:add:group') },\n }) satisfies ControlButtonProps\n )\n const addConditionButtonBindings = computed<ControlButtonProps>(() => ({\n ...defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n ...stripUndefinedValuesFromObject(buttonStyles.value),\n ...{\n cta: t('lucid.resourceful.index.filtersControls.addCondition'),\n prependIcon: () => h(SvgIcon, { d: mdiFilterPlus }),\n color: 'surface-light',\n },\n ...{ onClick: () => emit('click:add:condition') },\n }))\n return () =>\n h(VEmptyState, confirmationEmptyStateBindings.value, {\n actions: () => [\n h(ControlButton, addGroupButtonBindings.value),\n h(ControlButton, addConditionButtonBindings.value),\n ],\n })\n },\n})\n","import { vShow as _vShow, mergeProps as _mergeProps, createVNode as _createVNode, withDirectives as _withDirectives, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from \"vue\";\n// Styles\nimport \"./VFab.css\";\n\n// Components\nimport { makeVBtnProps, VBtn } from \"../VBtn/VBtn.js\"; // Composables\nimport { makeLayoutItemProps, useLayoutItem } from \"../../composables/layout.js\";\nimport { makeLocationProps } from \"../../composables/location.js\";\nimport { useProxiedModel } from \"../../composables/proxiedModel.js\";\nimport { useResizeObserver } from \"../../composables/resizeObserver.js\";\nimport { useToggleScope } from \"../../composables/toggleScope.js\";\nimport { makeTransitionProps, MaybeTransition } from \"../../composables/transition.js\"; // Utilities\nimport { computed, ref, shallowRef, toRef, watchEffect } from 'vue';\nimport { genericComponent, omit, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVFabProps = propsFactory({\n app: Boolean,\n appear: Boolean,\n extended: Boolean,\n layout: Boolean,\n offset: Boolean,\n modelValue: {\n type: Boolean,\n default: true\n },\n ...omit(makeVBtnProps({\n active: true\n }), ['location', 'spaced']),\n ...makeLayoutItemProps(),\n ...makeLocationProps(),\n ...makeTransitionProps({\n transition: 'fab-transition'\n })\n}, 'VFab');\nexport const VFab = genericComponent()({\n name: 'VFab',\n props: makeVFabProps(),\n emits: {\n 'update:modelValue': value => true\n },\n setup(props, _ref) {\n let {\n slots\n } = _ref;\n const model = useProxiedModel(props, 'modelValue');\n const height = shallowRef(56);\n const layoutItemStyles = ref();\n const {\n resizeRef\n } = useResizeObserver(entries => {\n if (!entries.length) return;\n height.value = entries[0].target.clientHeight;\n });\n const hasPosition = toRef(() => props.app || props.absolute);\n const position = computed(() => {\n if (!hasPosition.value) return false;\n return props.location?.split(' ').shift() ?? 'bottom';\n });\n const orientation = computed(() => {\n if (!hasPosition.value) return false;\n return props.location?.split(' ')[1] ?? 'end';\n });\n useToggleScope(() => props.app, () => {\n const layout = useLayoutItem({\n id: props.name,\n order: computed(() => parseInt(props.order, 10)),\n position,\n layoutSize: computed(() => props.layout ? height.value + 24 : 0),\n elementSize: computed(() => height.value + 24),\n active: computed(() => props.app && model.value),\n absolute: toRef(() => props.absolute)\n });\n watchEffect(() => {\n layoutItemStyles.value = layout.layoutItemStyles.value;\n });\n });\n const vFabRef = ref();\n useRender(() => {\n const btnProps = VBtn.filterProps(props);\n return _createElementVNode(\"div\", {\n \"ref\": vFabRef,\n \"class\": _normalizeClass(['v-fab', {\n 'v-fab--absolute': props.absolute,\n 'v-fab--app': !!props.app,\n 'v-fab--extended': props.extended,\n 'v-fab--offset': props.offset,\n [`v-fab--${position.value}`]: hasPosition.value,\n [`v-fab--${orientation.value}`]: hasPosition.value\n }, props.class]),\n \"style\": _normalizeStyle([props.app ? {\n ...layoutItemStyles.value\n } : {\n height: props.absolute ? '100%' : 'inherit'\n }, props.style])\n }, [_createElementVNode(\"div\", {\n \"class\": \"v-fab__container\"\n }, [_createVNode(MaybeTransition, {\n \"appear\": props.appear,\n \"transition\": props.transition\n }, {\n default: () => [_withDirectives(_createVNode(VBtn, _mergeProps({\n \"ref\": resizeRef\n }, btnProps, {\n \"active\": undefined,\n \"location\": undefined\n }), slots), [[_vShow, props.active]])]\n })])]);\n });\n return {};\n }\n});\n//# sourceMappingURL=VFab.js.map","import { createVNode as _createVNode, mergeProps as _mergeProps } from \"vue\";\n// Styles\nimport \"./VSpeedDial.css\";\n\n// Components\nimport { VDefaultsProvider } from \"../VDefaultsProvider/index.js\";\nimport { makeVMenuProps, VMenu } from \"../VMenu/VMenu.js\"; // Composables\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { useProxiedModel } from \"../../composables/proxiedModel.js\";\nimport { MaybeTransition } from \"../../composables/transition.js\"; // Utilities\nimport { computed, ref } from 'vue';\nimport { genericComponent, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVSpeedDialProps = propsFactory({\n ...makeComponentProps(),\n ...makeVMenuProps({\n offset: 8,\n minWidth: 0,\n openDelay: 0,\n closeDelay: 100,\n location: 'top center',\n transition: 'scale-transition'\n })\n}, 'VSpeedDial');\nexport const VSpeedDial = genericComponent()({\n name: 'VSpeedDial',\n props: makeVSpeedDialProps(),\n emits: {\n 'update:modelValue': value => true\n },\n setup(props, _ref) {\n let {\n slots\n } = _ref;\n const model = useProxiedModel(props, 'modelValue');\n const menuRef = ref();\n const location = computed(() => {\n const [y, x = 'center'] = props.location?.split(' ') ?? [];\n return `${y} ${x}`;\n });\n const locationClasses = computed(() => ({\n [`v-speed-dial__content--${location.value.replace(' ', '-')}`]: true\n }));\n useRender(() => {\n const menuProps = VMenu.filterProps(props);\n return _createVNode(VMenu, _mergeProps(menuProps, {\n \"modelValue\": model.value,\n \"onUpdate:modelValue\": $event => model.value = $event,\n \"class\": props.class,\n \"style\": props.style,\n \"contentClass\": ['v-speed-dial__content', locationClasses.value, props.contentClass],\n \"location\": location.value,\n \"ref\": menuRef,\n \"transition\": \"fade-transition\"\n }), {\n ...slots,\n default: slotProps => _createVNode(VDefaultsProvider, {\n \"defaults\": {\n VBtn: {\n size: 'small'\n }\n }\n }, {\n default: () => [_createVNode(MaybeTransition, {\n \"appear\": true,\n \"group\": true,\n \"transition\": props.transition\n }, {\n default: () => [slots.default?.(slotProps)]\n })]\n })\n });\n });\n return {};\n }\n});\n//# sourceMappingURL=VSpeedDial.js.map","/*\n|--------------------------------------------------------------------------\n| Filters Schema Functionality\n|--------------------------------------------------------------------------\n|\n| Types, Guards and Utilities for the GUI based query builder's filtration\n| functionality.\n|\n*/\n\nimport { DateTime } from 'luxon'\nimport { validator as joi } from '@nhtio/validation'\nimport { ResourcefulFieldType } from '../common/utils'\nimport type { ObjectSchema, StringSchema, AlternativesSchema, ArraySchema } from '@nhtio/validation'\n\nconst CAST_OPTIONS = { abortEarly: false, convert: true } as const\nconst GUARD_OPTIONS = { abortEarly: true } as const\n\nexport enum FilterOperators {\n // Basic operators\n EQUALS = '=',\n NOT_EQUALS = '!=',\n IS_SET = '*',\n IS_NOT_SET = '!*',\n\n // String operators (using wildcards)\n CONTAINS = '~',\n NOT_CONTAINS = '!~',\n STARTS_WITH = '^',\n ENDS_WITH = '$',\n CONTAINS_ANY = '*~',\n NOT = '!',\n\n // Comparison operators\n GREATER_THAN = '>',\n LESS_THAN = '<',\n GREATER_THAN_OR_EQUAL = '>=',\n LESS_THAN_OR_EQUAL = '<=',\n BETWEEN = '><',\n NOT_BETWEEN = '!><',\n\n // List operators\n IN = 'in',\n NOT_IN = '!in',\n\n // Relative date operators (past)\n TODAY = 't',\n YESTERDAY = 'yd',\n THIS_WEEK = 'w',\n LAST_WEEK = 'lw',\n LAST_2_WEEKS = 'l2w',\n THIS_MONTH = 'm',\n LAST_MONTH = 'lm',\n THIS_QUARTER = 'q',\n LAST_QUARTER = 'lq',\n THIS_YEAR = 'y',\n LAST_YEAR = 'ly',\n\n // Relative date operators (future)\n TOMORROW = 'tm',\n NEXT_WEEK = 'nw',\n NEXT_MONTH = 'nm',\n NEXT_QUARTER = 'nq',\n NEXT_YEAR = 'ny',\n\n // Dynamic date operators (with numeric parameter)\n LAST_N_DAYS = '><t+', // Last N days: now-Nd to now\n NEXT_N_DAYS = '><t-', // Next N days: now to now+Nd\n MORE_THAN_DAYS_AGO = '>t+', // More than N days ago: before now-Nd\n LESS_THAN_DAYS_AGO = '<t+', // Less than N days ago: now-Nd to now\n MORE_THAN_DAYS_FROM_NOW = '>t-', // More than N days from now: after now+Nd\n LESS_THAN_DAYS_FROM_NOW = '<t-', // Less than N days from now: now to now+Nd\n EXACTLY_DAYS_AGO = 't+', // Exactly N days ago (that day)\n EXACTLY_DAYS_FROM_NOW = 't-', // Exactly N days from now (that day)\n\n // Additional useful date operators with Luxon\n THIS_WEEK_TO_DATE = 'wtd', // Start of week to now\n THIS_MONTH_TO_DATE = 'mtd', // Start of month to now\n THIS_QUARTER_TO_DATE = 'qtd', // Start of quarter to now\n THIS_YEAR_TO_DATE = 'ytd', // Start of year to now\n LAST_N_HOURS = 'h+', // Last N hours\n NEXT_N_HOURS = 'h-', // Next N hours\n LAST_N_WEEKS = 'w+', // Last N weeks\n NEXT_N_WEEKS = 'w-', // Next N weeks\n LAST_N_MONTHS = 'm+', // Last N months\n NEXT_N_MONTHS = 'm-', // Next N months\n LAST_N_QUARTERS = 'q+', // Last N quarters\n NEXT_N_QUARTERS = 'q-', // Next N quarters\n LAST_N_YEARS = 'y+', // Last N years\n NEXT_N_YEARS = 'y-', // Next N years\n\n // Time-specific operators\n THIS_HOUR = 'hr', // Current hour\n LAST_HOUR = 'lhr', // Previous hour\n NEXT_HOUR = 'nhr', // Next hour\n\n // Special operators\n IS_EMPTY = 'empty', // For empty strings/arrays\n IS_NOT_EMPTY = '!empty', // For non-empty strings/arrays\n IS_NULL = 'null', // Explicitly null\n IS_NOT_NULL = '!null', // Explicitly not null\n}\n\nexport type FilterOperator = `${FilterOperators}`\n\nexport const StringFilterOperators = [\n FilterOperators.CONTAINS,\n FilterOperators.NOT_CONTAINS,\n FilterOperators.STARTS_WITH,\n FilterOperators.ENDS_WITH,\n FilterOperators.NOT,\n FilterOperators.EQUALS,\n FilterOperators.NOT_EQUALS,\n FilterOperators.IS_SET,\n FilterOperators.IS_NOT_SET,\n FilterOperators.IS_NULL,\n FilterOperators.IS_NOT_NULL,\n FilterOperators.IN,\n FilterOperators.NOT_IN,\n] as const\nexport type StringFilterOperator = (typeof StringFilterOperators)[number]\n\nexport const DateFilterOperators = [\n FilterOperators.EQUALS,\n FilterOperators.NOT_EQUALS,\n FilterOperators.GREATER_THAN,\n FilterOperators.LESS_THAN,\n FilterOperators.GREATER_THAN_OR_EQUAL,\n FilterOperators.LESS_THAN_OR_EQUAL,\n FilterOperators.BETWEEN,\n FilterOperators.NOT_BETWEEN,\n FilterOperators.IS_SET,\n FilterOperators.IS_NOT_SET,\n FilterOperators.IS_NULL,\n FilterOperators.IS_NOT_NULL,\n FilterOperators.TODAY,\n FilterOperators.YESTERDAY,\n FilterOperators.TOMORROW,\n FilterOperators.THIS_WEEK,\n FilterOperators.LAST_WEEK,\n FilterOperators.LAST_2_WEEKS,\n FilterOperators.NEXT_WEEK,\n FilterOperators.THIS_MONTH,\n FilterOperators.LAST_MONTH,\n FilterOperators.NEXT_MONTH,\n FilterOperators.THIS_QUARTER,\n FilterOperators.LAST_QUARTER,\n FilterOperators.NEXT_QUARTER,\n FilterOperators.THIS_YEAR,\n FilterOperators.LAST_YEAR,\n FilterOperators.NEXT_YEAR,\n FilterOperators.LAST_N_DAYS,\n FilterOperators.NEXT_N_DAYS,\n FilterOperators.MORE_THAN_DAYS_AGO,\n FilterOperators.LESS_THAN_DAYS_AGO,\n FilterOperators.MORE_THAN_DAYS_FROM_NOW,\n FilterOperators.LESS_THAN_DAYS_FROM_NOW,\n FilterOperators.EXACTLY_DAYS_AGO,\n FilterOperators.EXACTLY_DAYS_FROM_NOW,\n FilterOperators.THIS_WEEK_TO_DATE,\n FilterOperators.THIS_MONTH_TO_DATE,\n FilterOperators.THIS_QUARTER_TO_DATE,\n FilterOperators.THIS_YEAR_TO_DATE,\n FilterOperators.LAST_N_WEEKS,\n FilterOperators.NEXT_N_WEEKS,\n FilterOperators.LAST_N_MONTHS,\n FilterOperators.NEXT_N_MONTHS,\n FilterOperators.LAST_N_QUARTERS,\n FilterOperators.NEXT_N_QUARTERS,\n FilterOperators.LAST_N_YEARS,\n FilterOperators.NEXT_N_YEARS,\n] as const\nexport type DateFilterOperator = (typeof DateFilterOperators)[number]\n\nexport const DateTimeFilterOperators = [\n ...DateFilterOperators,\n FilterOperators.THIS_HOUR,\n FilterOperators.LAST_HOUR,\n FilterOperators.NEXT_HOUR,\n FilterOperators.LAST_N_HOURS,\n FilterOperators.NEXT_N_HOURS,\n] as const\nexport type DateTimeFilterOperator = (typeof DateTimeFilterOperators)[number]\n\nexport const NumberFilterOperators = [\n FilterOperators.EQUALS,\n FilterOperators.NOT_EQUALS,\n FilterOperators.GREATER_THAN,\n FilterOperators.LESS_THAN,\n FilterOperators.GREATER_THAN_OR_EQUAL,\n FilterOperators.LESS_THAN_OR_EQUAL,\n FilterOperators.BETWEEN,\n FilterOperators.NOT_BETWEEN,\n FilterOperators.IS_SET,\n FilterOperators.IS_NOT_SET,\n FilterOperators.IS_NULL,\n FilterOperators.IS_NOT_NULL,\n FilterOperators.IN,\n FilterOperators.NOT_IN,\n] as const\nexport type NumberFilterOperator = (typeof NumberFilterOperators)[number]\n\nexport const IntegerFilterOperators = [...NumberFilterOperators] as const\nexport type IntegerFilterOperator = (typeof IntegerFilterOperators)[number]\n\nexport const BigIntFilterOperators = [...NumberFilterOperators] as const\nexport type BigIntFilterOperator = (typeof BigIntFilterOperators)[number]\n\nexport const UnsignedIntegerFilterOperators = [...NumberFilterOperators] as const\nexport type UnsignedIntegerFilterOperator = (typeof UnsignedIntegerFilterOperators)[number]\n\nexport const BooleanFilterOperators = [\n FilterOperators.EQUALS,\n FilterOperators.NOT_EQUALS,\n FilterOperators.IS_SET,\n FilterOperators.IS_NOT_SET,\n FilterOperators.IS_NULL,\n FilterOperators.IS_NOT_NULL,\n] as const\nexport type BooleanFilterOperator = (typeof BooleanFilterOperators)[number]\n\nexport const BinaryFilterOperators = [\n FilterOperators.EQUALS,\n FilterOperators.NOT_EQUALS,\n FilterOperators.IS_SET,\n FilterOperators.IS_NOT_SET,\n FilterOperators.IS_NULL,\n FilterOperators.IS_NOT_NULL,\n FilterOperators.IS_EMPTY,\n FilterOperators.IS_NOT_EMPTY,\n] as const\nexport type BinaryFilterOperator = (typeof BinaryFilterOperators)[number]\n\nexport type OperatorsForFieldType<T extends string> = T extends 'string'\n ? StringFilterOperator\n : T extends 'date'\n ? DateFilterOperator\n : T extends 'dateTime'\n ? DateTimeFilterOperator\n : T extends 'number'\n ? NumberFilterOperator\n : T extends 'integer'\n ? IntegerFilterOperator\n : T extends 'bigint'\n ? BigIntFilterOperator\n : T extends 'unsignedInteger'\n ? UnsignedIntegerFilterOperator\n : T extends 'boolean'\n ? BooleanFilterOperator\n : T extends 'binary'\n ? BinaryFilterOperator\n : never\n\n// Define argument count types\nexport type ArgumentCount = 0 | 1 | 2 | 'multiple'\n\n// Operators that require no arguments (just checking existence/state)\nexport const NoArgumentOperators = [\n FilterOperators.IS_SET,\n FilterOperators.IS_NOT_SET,\n FilterOperators.IS_EMPTY,\n FilterOperators.IS_NOT_EMPTY,\n FilterOperators.IS_NULL,\n FilterOperators.IS_NOT_NULL,\n FilterOperators.TODAY,\n FilterOperators.YESTERDAY,\n FilterOperators.TOMORROW,\n FilterOperators.THIS_WEEK,\n FilterOperators.LAST_WEEK,\n FilterOperators.NEXT_WEEK,\n FilterOperators.THIS_MONTH,\n FilterOperators.LAST_MONTH,\n FilterOperators.NEXT_MONTH,\n FilterOperators.THIS_QUARTER,\n FilterOperators.LAST_QUARTER,\n FilterOperators.NEXT_QUARTER,\n FilterOperators.THIS_YEAR,\n FilterOperators.LAST_YEAR,\n FilterOperators.NEXT_YEAR,\n FilterOperators.THIS_WEEK_TO_DATE,\n FilterOperators.THIS_MONTH_TO_DATE,\n FilterOperators.THIS_QUARTER_TO_DATE,\n FilterOperators.THIS_YEAR_TO_DATE,\n FilterOperators.THIS_HOUR,\n FilterOperators.LAST_HOUR,\n FilterOperators.NEXT_HOUR,\n FilterOperators.LAST_2_WEEKS,\n] as const\nexport type NoArgumentOperator = (typeof NoArgumentOperators)[number]\n\n// Operators that require exactly 1 argument\nexport const SingleArgumentOperators = [\n FilterOperators.EQUALS,\n FilterOperators.NOT_EQUALS,\n FilterOperators.CONTAINS,\n FilterOperators.NOT_CONTAINS,\n FilterOperators.STARTS_WITH,\n FilterOperators.ENDS_WITH,\n FilterOperators.NOT,\n FilterOperators.GREATER_THAN,\n FilterOperators.LESS_THAN,\n FilterOperators.GREATER_THAN_OR_EQUAL,\n FilterOperators.LESS_THAN_OR_EQUAL,\n FilterOperators.LAST_N_DAYS,\n FilterOperators.NEXT_N_DAYS,\n FilterOperators.MORE_THAN_DAYS_AGO,\n FilterOperators.LESS_THAN_DAYS_AGO,\n FilterOperators.MORE_THAN_DAYS_FROM_NOW,\n FilterOperators.LESS_THAN_DAYS_FROM_NOW,\n FilterOperators.EXACTLY_DAYS_AGO,\n FilterOperators.EXACTLY_DAYS_FROM_NOW,\n FilterOperators.LAST_N_HOURS,\n FilterOperators.NEXT_N_HOURS,\n FilterOperators.LAST_N_WEEKS,\n FilterOperators.NEXT_N_WEEKS,\n FilterOperators.LAST_N_MONTHS,\n FilterOperators.NEXT_N_MONTHS,\n FilterOperators.LAST_N_QUARTERS,\n FilterOperators.NEXT_N_QUARTERS,\n FilterOperators.LAST_N_YEARS,\n FilterOperators.NEXT_N_YEARS,\n] as const\nexport type SingleArgumentOperator = (typeof SingleArgumentOperators)[number]\n\n// Operators that require exactly 2 arguments (ranges)\nexport const TwoArgumentOperators = [FilterOperators.BETWEEN, FilterOperators.NOT_BETWEEN] as const\nexport type TwoArgumentOperator = (typeof TwoArgumentOperators)[number]\n\n// Operators that require at least 1 argument (can have multiple)\nexport const MultipleArgumentOperators = [FilterOperators.IN, FilterOperators.NOT_IN] as const\nexport type MultipleArgumentOperator = (typeof MultipleArgumentOperators)[number]\n\n// Type guards\nexport const isNoArgumentOperator = (op: FilterOperator): op is NoArgumentOperator =>\n (NoArgumentOperators as readonly FilterOperator[]).includes(op)\n\nexport const isSingleArgumentOperator = (op: FilterOperator): op is SingleArgumentOperator =>\n (SingleArgumentOperators as readonly FilterOperator[]).includes(op)\n\nexport const isTwoArgumentOperator = (op: FilterOperator): op is TwoArgumentOperator =>\n (TwoArgumentOperators as readonly FilterOperator[]).includes(op)\n\nexport const isMultipleArgumentOperator = (op: FilterOperator): op is MultipleArgumentOperator =>\n (MultipleArgumentOperators as readonly FilterOperator[]).includes(op)\n\n// Runtime function to get argument count\nexport function getOperatorArgumentCount(operator: FilterOperator): ArgumentCount {\n if (isNoArgumentOperator(operator)) return 0\n if (isSingleArgumentOperator(operator)) return 1\n if (isTwoArgumentOperator(operator)) return 2\n if (isMultipleArgumentOperator(operator)) return 'multiple'\n\n // This should never happen if all operators are covered\n return 0 as ArgumentCount // Fallback, should never hit\n}\n\nexport type ArgumentsForOperator<T extends FilterOperator> = T extends NoArgumentOperator\n ? []\n : T extends SingleArgumentOperator\n ? [value: any]\n : T extends TwoArgumentOperator\n ? [min: any, max: any]\n : T extends MultipleArgumentOperator\n ? any[]\n : never\n\n// Helper type to check if operator requires arguments\nexport type RequiresArguments<T extends FilterOperator> = T extends NoArgumentOperator\n ? false\n : true\n\n// Helper type to infer the value type based on field type\nexport type ValueTypeForFieldType<T extends ResourcefulFieldType> = T extends 'string'\n ? string\n : T extends 'date'\n ? DateTime // ISO string, timestamp, or DateTime\n : T extends 'dateTime'\n ? DateTime // ISO string, timestamp, or DateTime\n : T extends 'number'\n ? number\n : T extends 'integer'\n ? number\n : T extends 'bigint'\n ? bigint | number\n : T extends 'unsignedInteger'\n ? number\n : T extends 'boolean'\n ? boolean\n : T extends 'binary'\n ? Uint8Array | Buffer | string\n : never\nexport type TypedArgumentsForOperator<\n TOperator extends FilterOperator,\n TFieldType extends ResourcefulFieldType,\n> = TOperator extends NoArgumentOperator\n ? []\n : TOperator extends SingleArgumentOperator\n ? TOperator extends\n | typeof FilterOperators.LAST_N_DAYS\n | typeof FilterOperators.NEXT_N_DAYS\n | typeof FilterOperators.MORE_THAN_DAYS_AGO\n | typeof FilterOperators.LESS_THAN_DAYS_AGO\n | typeof FilterOperators.MORE_THAN_DAYS_FROM_NOW\n | typeof FilterOperators.LESS_THAN_DAYS_FROM_NOW\n | typeof FilterOperators.EXACTLY_DAYS_AGO\n | typeof FilterOperators.EXACTLY_DAYS_FROM_NOW\n | typeof FilterOperators.LAST_N_HOURS\n | typeof FilterOperators.NEXT_N_HOURS\n | typeof FilterOperators.LAST_N_WEEKS\n | typeof FilterOperators.NEXT_N_WEEKS\n | typeof FilterOperators.LAST_N_MONTHS\n | typeof FilterOperators.NEXT_N_MONTHS\n | typeof FilterOperators.LAST_N_QUARTERS\n | typeof FilterOperators.NEXT_N_QUARTERS\n | typeof FilterOperators.LAST_N_YEARS\n | typeof FilterOperators.NEXT_N_YEARS\n ? [value: number] // These operators take a number for the N value\n : [value: ValueTypeForFieldType<TFieldType>]\n : TOperator extends TwoArgumentOperator\n ? [min: ValueTypeForFieldType<TFieldType>, max: ValueTypeForFieldType<TFieldType>]\n : TOperator extends MultipleArgumentOperator\n ? ValueTypeForFieldType<TFieldType>[]\n : never\n\n// Base filter condition with proper type constraints\nexport type FilterCondition<\n TFieldType extends ResourcefulFieldType = ResourcefulFieldType,\n TOperator extends OperatorsForFieldType<TFieldType> = OperatorsForFieldType<TFieldType>,\n> = {\n field: string\n type: TFieldType\n operator: TOperator\n arguments: TypedArgumentsForOperator<TOperator, TFieldType>\n}\n\n// Union type for all possible filter conditions\nexport type AnyFilterCondition = {\n [K in ResourcefulFieldType]: FilterCondition<K, OperatorsForFieldType<K>>\n}[ResourcefulFieldType]\n\nexport const FilterGroupOperator = ['AND', 'OR'] as const\nexport type FilterGroupOperator = (typeof FilterGroupOperator)[number]\nexport type FilterGroupCondition = AnyFilterCondition | FilterGroup\n\n// Recursive filter group for nested conditions\nexport type FilterGroup = {\n operator: FilterGroupOperator\n conditions: Array<FilterGroupCondition>\n}\n\nexport const FilterConditionSchema = joi.object<AnyFilterCondition>({\n field: joi.string().required().label('%1$s'),\n type: joi\n .string<ResourcefulFieldType>()\n .required()\n .valid(...ResourcefulFieldType),\n operator: joi\n .string<FilterOperator>()\n .when('type', {\n switch: [\n { is: 'string', then: joi.valid(...StringFilterOperators) },\n { is: 'date', then: joi.valid(...DateFilterOperators) },\n { is: 'dateTime', then: joi.valid(...DateTimeFilterOperators) },\n { is: 'binary', then: joi.valid(...BinaryFilterOperators) },\n { is: 'number', then: joi.valid(...NumberFilterOperators) },\n { is: 'integer', then: joi.valid(...IntegerFilterOperators) },\n { is: 'bigint', then: joi.valid(...BigIntFilterOperators) },\n { is: 'unsignedInteger', then: joi.valid(...UnsignedIntegerFilterOperators) },\n { is: 'boolean', then: joi.valid(...BooleanFilterOperators) },\n ],\n otherwise: joi.forbidden(),\n })\n .required()\n .label('%2$s'),\n arguments: joi\n .array()\n .when('operator', {\n switch: [\n { is: joi.string().valid(...NoArgumentOperators), then: joi.array().length(0) },\n { is: joi.string().valid(...SingleArgumentOperators), then: joi.array().length(1) },\n { is: joi.string().valid(...TwoArgumentOperators), then: joi.array().length(2) },\n { is: joi.string().valid(...MultipleArgumentOperators), then: joi.array().min(1) },\n ],\n otherwise: joi.forbidden(),\n })\n .when('operator', {\n is: joi\n .string()\n .valid(\n FilterOperators.LAST_N_DAYS,\n FilterOperators.NEXT_N_DAYS,\n FilterOperators.MORE_THAN_DAYS_AGO,\n FilterOperators.LESS_THAN_DAYS_AGO,\n FilterOperators.MORE_THAN_DAYS_FROM_NOW,\n FilterOperators.LESS_THAN_DAYS_FROM_NOW,\n FilterOperators.EXACTLY_DAYS_AGO,\n FilterOperators.EXACTLY_DAYS_FROM_NOW,\n FilterOperators.LAST_N_HOURS,\n FilterOperators.NEXT_N_HOURS,\n FilterOperators.LAST_N_WEEKS,\n FilterOperators.NEXT_N_WEEKS,\n FilterOperators.LAST_N_MONTHS,\n FilterOperators.NEXT_N_MONTHS,\n FilterOperators.LAST_N_QUARTERS,\n FilterOperators.NEXT_N_QUARTERS,\n FilterOperators.LAST_N_YEARS,\n FilterOperators.NEXT_N_YEARS\n ),\n then: joi.array().items(joi.number().min(0).integer()),\n otherwise: joi.when('type', {\n switch: [\n { is: 'string', then: joi.array().items(joi.string()) },\n {\n is: 'date',\n then: joi.array().items(\n joi.datetime().toISO((dt) => ({\n suppressMilliseconds: true,\n precision: 'seconds',\n extendedZone: dt.year > 1970 && dt.zone.type !== 'fixed',\n }))\n ),\n },\n {\n is: 'dateTime',\n then: joi.array().items(\n joi.datetime().toISO((dt) => ({\n suppressMilliseconds: true,\n precision: 'seconds',\n extendedZone: dt.year > 1970 && dt.zone.type !== 'fixed',\n }))\n ),\n },\n { is: 'binary', then: joi.array().items(joi.string(), joi.binary()) },\n { is: 'number', then: joi.array().items(joi.number()) },\n { is: 'integer', then: joi.array().items(joi.number().integer()) },\n { is: 'bigint', then: joi.array().items(joi.number().integer(), joi.bigint()) },\n {\n is: 'unsignedInteger',\n then: joi.array().items(joi.number().integer().min(0), joi.bigint().min(0n)),\n },\n { is: 'boolean', then: joi.array().items(joi.boolean()) },\n ],\n otherwise: joi.array().items(joi.any()),\n }),\n })\n .required()\n .label('%3$s'),\n})\n\nexport const FilterGroupOperatorSchema = joi\n .string<FilterGroupOperator>()\n .valid(...FilterGroupOperator)\n .insensitive()\n .uppercase()\n .required()\n\nexport const FilterGroupSchema = joi\n .object<FilterGroup>({\n operator: FilterGroupOperatorSchema,\n conditions: joi\n .array()\n .items(joi.alternatives().try(FilterConditionSchema, joi.link('#FilterGroupSchema')))\n .min(0)\n .required(),\n })\n .id('FilterGroupSchema')\n\nexport const FilterGroupConditionSchema = joi\n .alternatives()\n .try(FilterConditionSchema, FilterGroupSchema)\n\nexport const FilterGroupConditionsSchema = joi\n .array()\n .items(FilterGroupConditionSchema)\n .min(0)\n .required()\n\nexport const asFilterCondition = <\n TFieldType extends ResourcefulFieldType = ResourcefulFieldType,\n TOperator extends OperatorsForFieldType<TFieldType> = OperatorsForFieldType<TFieldType>,\n>(\n value: unknown,\n concat?: ObjectSchema<AnyFilterCondition>\n): FilterCondition<TFieldType, TOperator> => {\n const usable = concat ? FilterConditionSchema.concat(concat) : FilterConditionSchema\n const { error, value: validated } = usable.validate(value, CAST_OPTIONS)\n if (error) {\n throw error\n }\n return validated as FilterCondition<TFieldType, TOperator>\n}\n\nexport const asFilterGroup = (value: unknown, concat?: ObjectSchema<FilterGroup>): FilterGroup => {\n const usable = concat ? FilterGroupSchema.concat(concat) : FilterGroupSchema\n const { error, value: validated } = usable.validate(value, CAST_OPTIONS)\n if (error) {\n throw error\n }\n return validated as FilterGroup\n}\n\nexport const asFilterGroupOperator = (\n value: unknown,\n concat?: StringSchema<FilterGroupOperator>\n): FilterGroupOperator => {\n const usable = concat ? FilterGroupOperatorSchema.concat(concat) : FilterGroupOperatorSchema\n const { error, value: validated } = usable.validate(value, CAST_OPTIONS)\n if (error) {\n throw error\n }\n return validated as FilterGroupOperator\n}\n\nexport const asFilterGroupCondition = (\n value: unknown,\n concat?: AlternativesSchema<any>\n): FilterGroupCondition => {\n const usable = concat ? FilterGroupConditionSchema.concat(concat) : FilterGroupConditionSchema\n const { error, value: validated } = usable.validate(value, CAST_OPTIONS)\n if (error) {\n throw error\n }\n return validated as FilterGroupCondition\n}\n\nexport const asFilterGroupConditions = (\n value: unknown,\n concat?: ArraySchema<any[]>\n): FilterGroup['conditions'] => {\n const usable = concat ? FilterGroupConditionsSchema.concat(concat) : FilterGroupConditionsSchema\n const { error, value: validated } = usable.validate(value, CAST_OPTIONS)\n if (error) {\n throw error\n }\n return validated as FilterGroup['conditions']\n}\n\nexport const isFilterCondition = (value: unknown): value is FilterCondition => {\n const { error } = FilterConditionSchema.validate(value, GUARD_OPTIONS)\n return !error\n}\n\nexport const isFilterGroup = (value: unknown): value is FilterGroup => {\n const { error } = FilterGroupSchema.validate(value, GUARD_OPTIONS)\n return !error\n}\n\nexport const isFilterGroupOperator = (value: unknown): value is FilterGroupOperator => {\n const { error } = FilterGroupOperatorSchema.validate(value, GUARD_OPTIONS)\n return !error\n}\n\nexport const isFilterGroupCondition = (value: unknown): value is FilterGroupCondition => {\n const { error } = FilterGroupConditionSchema.validate(value, GUARD_OPTIONS)\n return !error\n}\n\nexport const isFilterGroupConditions = (value: unknown): value is FilterGroup['conditions'] => {\n const { error } = FilterGroupConditionsSchema.validate(value, GUARD_OPTIONS)\n return !error\n}\n\nexport const FilterGroupLikeSchema = joi.object<FilterGroup>({\n operator: FilterGroupOperatorSchema,\n conditions: joi.array().items(joi.any()).min(0).required(),\n})\n\nexport const FilterConditionLikeSchema = joi.object<FilterCondition>({\n field: joi.string().required().allow(''),\n type: joi.string().required().allow(''),\n operator: joi.string().required().allow(''),\n arguments: joi.array().items(joi.any()).sparse().required(),\n})\n\nexport const isFilterGroupLike = (value: unknown): boolean => {\n const { error } = FilterGroupLikeSchema.validate(value, GUARD_OPTIONS)\n return !error\n}\n\nexport const isFilterConditionLike = (value: unknown): boolean => {\n const { error } = FilterConditionLikeSchema.validate(value, GUARD_OPTIONS)\n return !error\n}\n\nexport const isFilterGroupConditionLike = (value: unknown): boolean => {\n return isFilterGroupLike(value) || isFilterConditionLike(value)\n}\n\nexport const FilterOperatorSchema = joi\n .string<FilterOperator>()\n .valid(...Object.values(FilterOperators))\n\nexport const isFilterOperator = (value: unknown): value is FilterOperator => {\n const { error } = FilterOperatorSchema.validate(value, GUARD_OPTIONS)\n return !error\n}\n\nexport const isFilterMemberOfFilterOperators = (\n value: unknown\n): value is FilterOperators[keyof FilterOperators] => {\n const { error } = FilterOperatorSchema.validate(value, GUARD_OPTIONS)\n return !error\n}\n\nexport const asFilterOperator = (\n value: unknown,\n concat?: StringSchema<FilterOperator>\n): FilterOperator => {\n const usable = concat ? FilterOperatorSchema.concat(concat) : FilterOperatorSchema\n const { error, value: validated } = usable.validate(value, CAST_OPTIONS)\n if (error) {\n throw error\n }\n return validated as FilterOperator\n}\n\nexport const filterGroupToLucene = (group: FilterGroup): string => {\n const glue = group.operator.toUpperCase() === 'AND' ? ' AND ' : ' OR '\n const conditions = group.conditions.map((condition) => {\n if (isFilterGroup(condition)) {\n return `(${filterGroupToLucene(condition)})`\n } else if (isFilterCondition(condition)) {\n const { type, operator } = condition\n let { field, arguments: args } = condition\n\n // if the field has spaces or special characters, quote it\n if (/[^a-zA-Z0-9_]/.test(field)) {\n field = `\"${field.replace(/\"/g, '\\\\\"')}\"`\n }\n\n // Helper function to format DateTime based on field type\n const formatDateTime = (dt: DateTime) => {\n return type === 'date' ? `\"${dt.toISODate()}\"` : `\"${dt.toISO()}\"`\n }\n\n // normalize datetime values to not include the extended zone\n // because lucene doesn't like that\n if (type === 'dateTime') {\n // @ts-ignore\n args = args.map((arg) => {\n if ('string' !== typeof arg) {\n return arg\n }\n const dt = DateTime.fromISO(arg, {\n setZone: true,\n })\n if (!dt.isValid) {\n return arg\n }\n return `\"${dt.toISO()}\"`\n })\n }\n\n switch (operator) {\n case FilterOperators.EQUALS: {\n switch (type) {\n case 'number':\n case 'integer':\n case 'bigint':\n case 'unsignedInteger':\n case 'boolean':\n case 'date':\n case 'dateTime':\n return `${field}:=${args[0]}`\n default:\n return `${field}:${args[0]}`\n }\n }\n case FilterOperators.NOT_EQUALS:\n return `NOT ${field}:${args[0]}`\n case FilterOperators.IS_SET:\n return `NOT ${field}:null`\n case FilterOperators.IS_NOT_SET:\n return `${field}:null`\n case FilterOperators.CONTAINS:\n return `${field}:*${args[0]}*`\n case FilterOperators.NOT_CONTAINS:\n return `NOT ${field}:*${args[0]}*`\n case FilterOperators.STARTS_WITH:\n return `${field}:${args[0]}*`\n case FilterOperators.ENDS_WITH:\n return `${field}:*${args[0]}`\n case FilterOperators.NOT:\n return `NOT ${field}:${args[0]}`\n case FilterOperators.GREATER_THAN:\n return `${field}:>${args[0]}`\n case FilterOperators.LESS_THAN:\n return `${field}:<${args[0]}`\n case FilterOperators.GREATER_THAN_OR_EQUAL:\n return `${field}:>=${args[0]}`\n case FilterOperators.LESS_THAN_OR_EQUAL:\n return `${field}:<=${args[0]}`\n case FilterOperators.BETWEEN: {\n switch (type) {\n case 'date':\n case 'dateTime':\n return `(${field}:>=${args[0]} AND ${field}:<=${args[1]})`\n default:\n return `${field}:[${args[0]} TO ${args[1]}]`\n }\n }\n case FilterOperators.NOT_BETWEEN: {\n switch (type) {\n case 'date':\n case 'dateTime':\n return `NOT (${field}:>=${args[0]} AND ${field}:<=${args[1]})`\n default:\n return `NOT ${field}:[${args[0]} TO ${args[1]}]`\n }\n }\n case FilterOperators.IN:\n return `(${args.map((v) => `${field}:${v}`).join(' OR ')})`\n case FilterOperators.NOT_IN:\n return `NOT (${args.map((v) => `${field}:${v}`).join(' OR ')})`\n case FilterOperators.TODAY:\n return `${field}:=${formatDateTime(DateTime.now())}`\n case FilterOperators.YESTERDAY:\n return `${field}:=${formatDateTime(DateTime.now().minus({ days: 1 }))}`\n case FilterOperators.THIS_WEEK:\n return `${field}:>=${formatDateTime(DateTime.now().startOf('week'))}`\n case FilterOperators.LAST_WEEK:\n return `(${field}:>=${formatDateTime(DateTime.now().minus({ weeks: 1 }).startOf('week'))} AND ${field}:<=${formatDateTime(\n DateTime.now().minus({ weeks: 1 }).endOf('week')\n )})`\n case FilterOperators.LAST_2_WEEKS:\n return `${field}:>=${formatDateTime(DateTime.now().minus({ weeks: 2 }).startOf('week'))}`\n case FilterOperators.THIS_MONTH:\n return `${field}:>=${formatDateTime(DateTime.now().startOf('month'))}`\n case FilterOperators.LAST_MONTH:\n return `(${field}:>=${formatDateTime(DateTime.now().minus({ months: 1 }).startOf('month'))} AND ${field}:<=${formatDateTime(\n DateTime.now().minus({ months: 1 }).endOf('month')\n )})`\n case FilterOperators.THIS_QUARTER:\n return `${field}:>=${formatDateTime(DateTime.now().startOf('quarter'))}`\n case FilterOperators.LAST_QUARTER:\n return `(${field}:>=${formatDateTime(\n DateTime.now().minus({ quarters: 1 }).startOf('quarter')\n )} AND ${field}:<=${formatDateTime(DateTime.now().minus({ quarters: 1 }).endOf('quarter'))})`\n case FilterOperators.THIS_YEAR:\n return `${field}:>=${formatDateTime(DateTime.now().startOf('year'))}`\n case FilterOperators.LAST_YEAR:\n return `(${field}:>=${formatDateTime(DateTime.now().minus({ years: 1 }).startOf('year'))} AND ${field}:<=${formatDateTime(\n DateTime.now().minus({ years: 1 }).endOf('year')\n )})`\n case FilterOperators.TOMORROW:\n return `${field}:=${formatDateTime(DateTime.now().plus({ days: 1 }))}`\n case FilterOperators.NEXT_WEEK:\n return `${field}:>=${formatDateTime(DateTime.now().plus({ weeks: 1 }).startOf('week'))}`\n case FilterOperators.NEXT_MONTH:\n return `${field}:>=${formatDateTime(DateTime.now().plus({ months: 1 }).startOf('month'))}`\n case FilterOperators.NEXT_QUARTER:\n return `${field}:>=${formatDateTime(DateTime.now().plus({ quarters: 1 }).startOf('quarter'))}`\n case FilterOperators.NEXT_YEAR:\n return `${field}:>=${formatDateTime(DateTime.now().plus({ years: 1 }).startOf('year'))}`\n case FilterOperators.LAST_N_DAYS:\n return `${field}:>=${formatDateTime(\n DateTime.now().minus({ days: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.NEXT_N_DAYS:\n return `${field}:<=${formatDateTime(\n DateTime.now().plus({ days: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.MORE_THAN_DAYS_AGO:\n return `${field}:<${formatDateTime(\n DateTime.now().minus({ days: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.LESS_THAN_DAYS_AGO:\n return `${field}:>=${formatDateTime(\n DateTime.now().minus({ days: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.MORE_THAN_DAYS_FROM_NOW:\n return `${field}:>${formatDateTime(\n DateTime.now().plus({ days: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.LESS_THAN_DAYS_FROM_NOW:\n return `${field}:<=${formatDateTime(\n DateTime.now().plus({ days: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.EXACTLY_DAYS_AGO:\n return `${field}:=${formatDateTime(\n DateTime.now().minus({ days: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.EXACTLY_DAYS_FROM_NOW:\n return `${field}:=${formatDateTime(\n DateTime.now().plus({ days: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.THIS_WEEK_TO_DATE:\n return `(${field}:>=${formatDateTime(DateTime.now().startOf('week'))} AND ${field}:<=${formatDateTime(DateTime.now())})`\n case FilterOperators.THIS_MONTH_TO_DATE:\n return `(${field}:>=${formatDateTime(DateTime.now().startOf('month'))} AND ${field}:<=${formatDateTime(DateTime.now())})`\n case FilterOperators.THIS_QUARTER_TO_DATE:\n return `(${field}:>=${formatDateTime(DateTime.now().startOf('quarter'))} AND ${field}:<=${formatDateTime(DateTime.now())})`\n case FilterOperators.THIS_YEAR_TO_DATE:\n return `(${field}:>=${formatDateTime(DateTime.now().startOf('year'))} AND ${field}:<=${formatDateTime(DateTime.now())})`\n case FilterOperators.LAST_N_HOURS:\n return `${field}:>=\"${DateTime.now()\n .minus({ hours: Number.parseInt(args[0]!.toString()) as number })\n .toISO()}\"`\n case FilterOperators.NEXT_N_HOURS:\n return `${field}:<=\"${DateTime.now()\n .plus({ hours: Number.parseInt(args[0]!.toString()) as number })\n .toISO()}\"`\n case FilterOperators.LAST_N_WEEKS:\n return `${field}:>=${formatDateTime(\n DateTime.now().minus({ weeks: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.NEXT_N_WEEKS:\n return `${field}:<=${formatDateTime(\n DateTime.now().plus({ weeks: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.LAST_N_MONTHS:\n return `${field}:>=${formatDateTime(\n DateTime.now().minus({ months: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.NEXT_N_MONTHS:\n return `${field}:<=${formatDateTime(\n DateTime.now().plus({ months: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.LAST_N_QUARTERS:\n return `${field}:>=${formatDateTime(\n DateTime.now().minus({ quarters: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.NEXT_N_QUARTERS:\n return `${field}:<=${formatDateTime(\n DateTime.now().plus({ quarters: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.LAST_N_YEARS:\n return `${field}:>=${formatDateTime(\n DateTime.now().minus({ years: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.NEXT_N_YEARS:\n return `${field}:<=${formatDateTime(\n DateTime.now().plus({ years: Number.parseInt(args[0]!.toString()) as number })\n )}`\n case FilterOperators.THIS_HOUR:\n return `${field}:>=\"${DateTime.now().startOf('hour').toISO()}\"`\n case FilterOperators.LAST_HOUR:\n return `(${field}:>=\"${DateTime.now()\n .minus({ hours: 1 })\n .startOf('hour')\n .toISO()}\" AND ${field}:<=\"${DateTime.now().minus({ hours: 1 }).endOf('hour').toISO()}\")`\n case FilterOperators.NEXT_HOUR:\n return `${field}:>=\"${DateTime.now().plus({ hours: 1 }).startOf('hour').toISO()}\"`\n case FilterOperators.IS_EMPTY:\n return `(${field}:\"\" OR ${field}:null)`\n case FilterOperators.IS_NOT_EMPTY:\n return `NOT (${field}:\"\" OR ${field}:null)`\n case FilterOperators.IS_NULL:\n return `${field}:null`\n case FilterOperators.IS_NOT_NULL:\n return `NOT ${field}:null`\n default:\n return undefined\n }\n } else {\n return undefined\n }\n })\n return conditions.filter((v) => 'string' === typeof v).join(glue)\n}\n","/* eslint-disable vue/one-component-per-file */\nimport { useI18n } from '../ioc'\nimport { useLocale } from 'vuetify'\nimport { SvgIcon } from '../svg-icon'\nimport { encode } from '@nhtio/encoder'\nimport { deepmerge } from 'deepmerge-ts'\nimport { default as ordinal } from 'ordinal'\nimport { printf as format } from 'fast-printf'\nimport { VFab } from 'vuetify/components/VFab'\nimport { VBtn } from 'vuetify/components/VBtn'\nimport { useScopedDisplay } from '../ux/display'\nimport { VCard } from 'vuetify/components/VCard'\nimport { VIcon } from 'vuetify/components/VIcon'\nimport { DevErrorAlert } from '../fields/common'\nimport { ControlButton } from '../control-button'\nimport { VInput } from 'vuetify/components/VInput'\nimport { VLabel } from 'vuetify/components/VLabel'\nimport { VSheet } from 'vuetify/components/VSheet'\nimport { emitsFactory } from '../common/factories'\nimport { VAlert } from 'vuetify/components/VAlert'\nimport { FilterGroupEmptyState } from './empty_state'\nimport { omit } from '@nhtio/vuetifiable/util/helpers'\nimport { debounce } from '@nhtio/vuetifiable/util/helpers'\nimport { VSpeedDial } from 'vuetify/components/VSpeedDial'\nimport { propsAndEmitsFactory } from '../common/factories'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { VAutocomplete } from 'vuetify/components/VAutocomplete'\nimport { IconValue } from '@nhtio/vuetifiable/composables/icons'\nimport { VContainer, VRow, VCol } from 'vuetify/components/VGrid'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { validator as joi, ValidationError } from '@nhtio/validation'\nimport { makeVInputProps } from '@nhtio/vuetifiable/components/VInput/VInput'\nimport {\n h,\n defineComponent,\n watch,\n shallowRef,\n triggerRef,\n toRefs,\n computed,\n ref,\n onMounted,\n onBeforeUnmount,\n nextTick,\n} from 'vue'\nimport {\n asAbsInt,\n stripUndefinedValuesFromObject,\n typeAndFormatToResourcefulFieldType,\n getOxfordizedListParts,\n toUnreactive,\n} from '../common/utils'\nimport {\n RBigIntField,\n RBooleanField,\n RDateTimeField,\n RDateField,\n RIntegerField,\n RNumberField,\n RStringField,\n RUnsignedIntegerField,\n} from '../fields'\nimport {\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n ReactivityBus,\n VInputEventBus,\n FilterConditionElementBus,\n FilterConditionElementToFilterConditionArgumentCellBus,\n} from './common'\nimport {\n mdiVectorLink,\n mdiSetNone,\n mdiClose,\n mdiUnfoldLessVertical,\n mdiDotsHorizontal,\n mdiDelete,\n mdiAlertCircle,\n mdiNotificationClearAll,\n mdiCardPlusOutline,\n mdiFilterPlus,\n mdiMenuDown,\n mdiMenuUp,\n} from '@mdi/js'\nimport {\n asFilterGroup,\n asFilterCondition,\n isFilterGroupOperator,\n isFilterGroupLike,\n isFilterConditionLike,\n isFilterGroupConditionLike,\n isFilterOperator,\n getOperatorArgumentCount,\n StringFilterOperators,\n DateFilterOperators,\n DateTimeFilterOperators,\n BinaryFilterOperators,\n NumberFilterOperators,\n IntegerFilterOperators,\n BigIntFilterOperators,\n UnsignedIntegerFilterOperators,\n BooleanFilterOperators,\n FilterOperators,\n} from './schema'\nimport type { ControlButtonProps } from '../control-button/props'\nimport type { PropType, ExtractPublicPropTypes, Ref, ComputedRef, SlotsType } from 'vue'\nimport type {\n FilterGroupCondition,\n FilterGroup,\n AnyFilterCondition,\n FilterGroupOperator,\n FilterOperator,\n ArgumentCount,\n} from './schema'\nimport type {\n RBigIntFieldProps,\n RBooleanFieldProps,\n RDateTimeFieldProps,\n RDateFieldProps,\n RIntegerFieldProps,\n RNumberFieldProps,\n RStringFieldProps,\n RUnsignedIntegerFieldProps,\n} from '../fields/'\nimport type {\n DispositionButtonProps,\n ResourcefulFieldLabelTerms,\n ResourcefulSchemaDefinition,\n VAlertPublicProps,\n VSpeedDialPublicProps,\n VFabPublicProps,\n VBtnPublicProps,\n VCardPublicProps,\n VIconPublicProps,\n VLabelPublicProps,\n ValidationDetails,\n VAutocompletePublicProps,\n VInputPublicProps,\n} from './common'\n\nconst { makeProps: makeFilterGroupConditionElementProps, emits: filterGroupConditionElementEmits } =\n propsAndEmitsFactory(\n {\n modelValue: {\n type: Object as PropType<FilterGroupCondition>,\n required: true,\n },\n reactivityBus: {\n type: ReactivityBus as PropType<ReactivityBus>,\n required: true,\n },\n labels: {\n type: Object as PropType<ResourcefulFieldLabelTerms>,\n default: () => ({}),\n },\n filterableFields: {\n type: Object as PropType<ResourcefulSchemaDefinition>,\n default: () => ({}),\n },\n dispositionButtons: {\n type: Object as PropType<DispositionButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n },\n iconAnd: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiVectorLink }),\n },\n iconOr: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiSetNone }),\n },\n },\n {\n 'update:modelValue': (val: FilterGroupCondition) => isFilterGroupConditionLike(val),\n 'update:model-value': (val: FilterGroupCondition) => isFilterGroupConditionLike(val),\n 'click:delete': () => true,\n },\n 'FilterGroupConditionElement'\n )\n\nexport type FilterGroupConditionElementPublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makeFilterGroupConditionElementProps>\n>\n\nconst makeFilterGroupElementProps = propsFactory(\n {\n ...omit(makeFilterGroupConditionElementProps(), ['modelValue']),\n modelValue: {\n type: Object as PropType<FilterGroup>,\n required: true,\n },\n },\n 'FilterGroupElement'\n)\n\nexport type FilterGroupElementPublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makeFilterGroupElementProps>\n>\n\nconst makeFilterConditionElementProps = propsFactory(\n {\n ...omit(makeFilterGroupConditionElementProps(), ['modelValue']),\n modelValue: {\n type: Object as PropType<AnyFilterCondition>,\n required: true,\n },\n },\n 'FilterConditionElement'\n)\n\nexport type FilterConditionElementPublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makeFilterConditionElementProps>\n>\n\nconst { makeProps: makeFilterConditionArgumentCellProps, emits: filterConditionArgumentCellEmits } =\n propsAndEmitsFactory(\n {\n modelValue: {\n type: Array as PropType<AnyFilterCondition['arguments']>,\n default: () => [] as AnyFilterCondition['arguments'],\n },\n field: {\n type: String as PropType<AnyFilterCondition['field']>,\n default: '',\n },\n operator: {\n type: String as PropType<AnyFilterCondition['operator']>,\n default: '',\n },\n argumentCount: {\n type: [Number, String] as PropType<ArgumentCount>,\n default: () => 0,\n },\n reactivityBus: {\n type: ReactivityBus as PropType<ReactivityBus>,\n required: true,\n },\n filterConditionElementToFilterConditionArgumentCellBus: {\n type: FilterConditionElementToFilterConditionArgumentCellBus as PropType<FilterConditionElementToFilterConditionArgumentCellBus>,\n required: true,\n },\n ...omit(makeVInputProps(), ['modelValue']),\n },\n {\n 'update:modelValue': (val: AnyFilterCondition['arguments']) => Array.isArray(val),\n 'update:model-value': (val: AnyFilterCondition['arguments']) => Array.isArray(val),\n },\n 'FilterConditionArgumentCell'\n )\n\nexport type FilterConditionArgumentCellPublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makeFilterConditionArgumentCellProps>\n>\n\nconst {\n makeProps: makeFilterConditionArgumentFieldProps,\n emits: filterConditionArgumentFieldEmits,\n} = propsAndEmitsFactory(\n {\n filterableFields: {\n type: Object as PropType<ResourcefulSchemaDefinition>,\n default: () => ({}),\n },\n field: {\n type: String as PropType<AnyFilterCondition['field']>,\n required: true,\n },\n type: {\n type: String as PropType<AnyFilterCondition['type']>,\n required: true,\n },\n operator: {\n type: String as PropType<AnyFilterCondition['operator']>,\n required: true,\n },\n argumentCount: {\n type: [Number, String] as PropType<ArgumentCount>,\n default: () => 0,\n },\n modelValue: {\n type: [String, Number, Boolean, Date, null, Object, Array] as PropType<any>,\n default: null,\n },\n label: {\n type: [String, null] as PropType<string | null | undefined>,\n default: undefined,\n },\n reactivityBus: {\n type: Object as PropType<ReactivityBus>,\n required: true,\n },\n filterConditionElementBus: {\n type: Object as PropType<FilterConditionElementBus>,\n required: true,\n },\n ...omit(makeVInputProps(), ['modelValue', 'label']),\n },\n {\n 'update:modelValue': (val: any) => 'undefined' !== typeof val,\n 'update:model-value': (val: any) => 'undefined' !== typeof val,\n 'focus': () => true,\n 'blur': () => true,\n },\n 'FilterConditionArgumentField'\n)\n\nexport type FilterConditionArgumentFieldPublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makeFilterConditionArgumentFieldProps>\n>\n\nexport interface EmitWithUpdateModelValue<T = FilterGroupCondition> {\n (e: 'update:modelValue', val: T): void\n (e: 'update:model-value', val: T): void\n}\n\nexport const useReactiveLocalState = <\n T = FilterGroupCondition,\n E extends EmitWithUpdateModelValue<T> = EmitWithUpdateModelValue<T>,\n>(\n emit: E,\n modelValueRef: Ref<T>,\n modelValueProp: T,\n parentReactivityBusRef: Ref<ReactivityBus>,\n onChange: (is: T, was?: T | undefined) => void = () => {}\n) => {\n const localReactiveBus = new ReactivityBus()\n const localState = shallowRef<T>(modelValueProp)\n const setLocalState = (val: T) => {\n const encodedIncoming = encode(val as any)\n const encodedCurrent = encode(toUnreactive(localState))\n // break early to prevent update loops caused\n // by the parent updating the value of modelValue\n if (encodedIncoming === encodedCurrent) return\n const boundOnChange = onChange.bind(null, toUnreactive(localState), toUnreactive(val))\n localState.value = val\n triggerRef(localState)\n boundOnChange()\n }\n watch(modelValueRef, (is: T) => setLocalState(is), {\n deep: true,\n immediate: true,\n })\n watch(\n localState,\n (is: T) => {\n // notify from child to parent that there's been an update\n emit('update:modelValue', is)\n emit('update:model-value', is)\n parentReactivityBusRef.value.notify()\n },\n { deep: true }\n )\n localReactiveBus.on('updated', () => {\n triggerRef(localState)\n })\n return { localReactiveBus, localState, setLocalState }\n}\n\nconst useValidationErrorMessageGetter = () => {\n const t = useI18n()\n const getValidationErrorMessage = (error: unknown): string => {\n // @ts-ignore\n if (error instanceof ValidationError) {\n // @ts-ignore\n return error.message\n } else if (error instanceof Error) {\n return error.message\n } else if (typeof error === 'string') {\n return error\n }\n console.error(error)\n return t('filterGroupConditionElement.unknownValidationError')\n }\n const getValidationDetails = (error: unknown): ValidationDetails => {\n // @ts-ignore\n if (error instanceof ValidationError) {\n // @ts-ignore\n return error.details\n } else {\n return [] as ValidationDetails\n }\n }\n return { getValidationErrorMessage, getValidationDetails }\n}\n\nexport const FilterGroupConditionElement = defineComponent({\n name: 'FilterGroupConditionElement',\n props: makeFilterGroupConditionElementProps(),\n emits: filterGroupConditionElementEmits,\n setup(props, { emit }) {\n const {\n modelValue,\n reactivityBus,\n labels,\n filterableFields,\n dispositionButtons,\n iconAnd,\n iconOr,\n } = toRefs(props)\n const { localReactiveBus, localState, setLocalState } =\n useReactiveLocalState<FilterGroupCondition>(emit, modelValue, props.modelValue, reactivityBus)\n const childBindings = computed<Partial<FilterGroupConditionElementPublicProps>>(() =>\n deepmerge(\n stripUndefinedValuesFromObject({\n modelValue: localState.value,\n reactivityBus: localReactiveBus,\n labels: labels.value,\n filterableFields: filterableFields.value,\n dispositionButtons: dispositionButtons.value,\n iconAnd: iconAnd.value,\n iconOr: iconOr.value,\n }),\n {\n 'onUpdate:modelValue': (val: FilterGroupCondition) => setLocalState(val),\n 'onUpdate:model-value': (val: FilterGroupCondition) => setLocalState(val),\n 'onClick:delete': () => emit('click:delete'),\n }\n )\n )\n const t = useI18n()\n return () =>\n isFilterConditionLike(modelValue.value)\n ? h(FilterConditionElement, childBindings.value as FilterConditionElementPublicProps)\n : isFilterGroupLike(modelValue.value)\n ? h(FilterGroupElement, childBindings.value as FilterGroupElementPublicProps)\n : h(VAlert, {\n closable: true,\n closeIcon: () => h(SvgIcon, { d: mdiClose }),\n icon: () => h(SvgIcon, { d: mdiAlertCircle }),\n color: 'error',\n density: 'compact' as const,\n title: t('filterGroupConditionElement.notValid'),\n type: 'error',\n variant: 'elevated' as const,\n class: ['ma-3'],\n ...{\n 'onClick:close': () => emit('click:delete'),\n },\n } satisfies VAlertPublicProps)\n },\n})\n\nexport interface FilterGroupConditionCardSlotBindings {\n isValid: Readonly<boolean>\n validationErrorDetails: Readonly<ValidationDetails>\n errorMessage: Readonly<string | null>\n actionBaseBindings: Readonly<\n Pick<VBtnPublicProps, 'elevation' | 'density' | 'color' | 'size' | 'border'>\n >\n}\n\nexport type FilterGroupConditionCardPrependControlsActivatorSlotBindings = Pick<\n VFabPublicProps,\n | 'icon'\n | 'elevation'\n | 'density'\n | 'color'\n | 'size'\n | 'border'\n | 'absolute'\n | 'ripple'\n | 'location'\n | 'style'\n>\n\nexport type FilterGroupConditionCardPrependControlsActivatorIconSlotBindings = Pick<\n VIconPublicProps,\n 'icon' | 'size'\n>\n\nexport type FilterGroupConditionCardSlots = {\n prependedControlsActivatorIcon: (\n iconProps: FilterGroupConditionCardPrependControlsActivatorIconSlotBindings\n ) => any\n prependedControls: (props: FilterGroupConditionCardSlotBindings) => any\n appendedControls: (props: FilterGroupConditionCardSlotBindings) => any\n default: (props: FilterGroupConditionCardSlotBindings) => any\n errors: (props: FilterGroupConditionCardSlotBindings) => any\n}\n\nconst useFilterGroupConditionCardSpeedDialBindings = (\n isRtl: Ref<boolean>,\n openValue: Ref<boolean>,\n normalizedDispositionButtons: ComputedRef<DispositionButtonProps>,\n from: 'start' | 'end',\n speedDialAlignment: string = 'center',\n activatorAlignment: string = 'top',\n speedDialButtonSize: number = 24\n) => {\n const ltrStartSide = 'end' === from ? 'left' : 'right'\n const ltrEndSide = 'end' === from ? 'right' : 'left'\n const rtlStartSide = 'end' === from ? 'right' : 'left'\n const rtlEndSide = 'end' === from ? 'left' : 'right'\n const ltrSpeedDialOffset =\n 'start' === from\n ? stripUndefinedValuesFromObject({\n left: `18px`,\n })\n : stripUndefinedValuesFromObject({\n right: `18px`,\n })\n const rtlSpeedDialOffset =\n 'start' === from\n ? stripUndefinedValuesFromObject({\n right: `18px`,\n })\n : stripUndefinedValuesFromObject({\n left: `18px`,\n })\n const speedDialBindings = computed<VSpeedDialPublicProps>(\n () =>\n ({\n ...stripUndefinedValuesFromObject({\n location: isRtl.value\n ? ([rtlStartSide, speedDialAlignment].join(' ') as any)\n : ([ltrStartSide, speedDialAlignment].join(' ') as any),\n transition: 'fade-transition',\n activator: 'parent',\n modelValue: openValue.value,\n }),\n ...{\n 'onUpdate:modelValue': (val: boolean) => {\n openValue.value = val\n },\n },\n }) satisfies VSpeedDialPublicProps\n )\n const speedDialActivatorBindings = computed<VFabPublicProps>(\n () =>\n stripUndefinedValuesFromObject({\n icon: true,\n elevation: normalizedDispositionButtons.value.elevation,\n density: normalizedDispositionButtons.value.density,\n color: 'surface-light',\n size: speedDialButtonSize,\n border: 'sm opacity-100',\n absolute: true,\n ripple: false,\n location: isRtl.value\n ? ([rtlEndSide, activatorAlignment].join(' ') as any)\n : ([ltrEndSide, activatorAlignment].join(' ') as any),\n style: deepmerge(\n {\n top: `-${Math.round(speedDialButtonSize / 2)}px`,\n },\n isRtl.value ? rtlSpeedDialOffset : ltrSpeedDialOffset\n ),\n }) satisfies VFabPublicProps\n )\n const speedDialActivatorIconBindings = computed<VIconPublicProps>(() =>\n stripUndefinedValuesFromObject({\n size: 'x-small',\n icon: openValue.value\n ? () => h(SvgIcon, { d: mdiUnfoldLessVertical })\n : () => h(SvgIcon, { d: mdiDotsHorizontal }),\n })\n )\n return {\n speedDialBindings,\n speedDialActivatorBindings,\n speedDialActivatorIconBindings,\n }\n}\n\nexport const FilterGroupConditionCard = defineComponent({\n name: 'FilterGroupConditionCard',\n props: makeFilterGroupConditionElementProps(),\n emits: emitsFactory({\n 'click:delete': () => true,\n }),\n slots: Object as SlotsType<FilterGroupConditionCardSlots>,\n setup(props, { emit, slots }) {\n const { dispositionButtons, modelValue, reactivityBus } = toRefs(props)\n const t = useI18n()\n const { getValidationErrorMessage, getValidationDetails } = useValidationErrorMessageGetter()\n const validationState = ref<boolean>(true)\n const validationError = ref<string | null>(null)\n const validationDetails = ref<ValidationDetails>([])\n const fieldMessages = computed(() => ({\n 'any.required': t('filterConditionElement.validation.field.string.empty'),\n 'string.empty': t('filterConditionElement.validation.field.string.empty'),\n }))\n const operatorMessages = computed(() => ({\n 'any.required': t('filterConditionElement.validation.operator.string.empty'),\n 'string.empty': t('filterConditionElement.validation.operator.string.empty'),\n 'any.only': t('filterConditionElement.validation.operator.any.only'),\n }))\n const argumentsMessages = computed(() => ({\n 'array.sparse': t('filterConditionElement.validation.arguments.array.sparse'),\n 'array.length': t('filterConditionElement.validation.arguments.array.length'),\n }))\n const updateValidationStates = () => {\n const currentValue = toUnreactive(modelValue)\n if (isFilterGroupLike(currentValue)) {\n try {\n asFilterGroup(currentValue)\n validationState.value = true\n validationError.value = null\n validationDetails.value = []\n } catch (error) {\n validationState.value = false\n validationError.value = getValidationErrorMessage(error)\n validationDetails.value = getValidationDetails(error)\n }\n } else if (isFilterConditionLike(currentValue)) {\n try {\n asFilterCondition(\n currentValue,\n joi.object<AnyFilterCondition>({\n field: joi.string().messages(fieldMessages.value),\n operator: joi.string<FilterOperator>().messages(operatorMessages.value),\n arguments: joi.array().messages(argumentsMessages.value),\n })\n )\n validationState.value = true\n validationError.value = null\n validationDetails.value = []\n } catch (error) {\n validationState.value = false\n validationError.value = getValidationErrorMessage(error)\n validationDetails.value = getValidationDetails(error)\n }\n } else {\n validationState.value = false\n validationError.value = t('filterGroupConditionElement.notValid')\n }\n }\n const doUpdateValidationStates = debounce(updateValidationStates, 100)\n watch(\n reactivityBus,\n (is, was) => {\n if ('undefined' !== typeof was) {\n was.off('updated', doUpdateValidationStates)\n }\n is.on('updated', doUpdateValidationStates)\n },\n { immediate: true }\n )\n watch(modelValue, doUpdateValidationStates, { deep: true, immediate: true })\n const speedDialActionBaseBindings = computed<VBtnPublicProps>(() => ({\n elevation: normalizedDispositionButtons.value.elevation,\n density: normalizedDispositionButtons.value.density,\n color: 'surface-light',\n size: 'x-small',\n border: 'sm opacity-100',\n }))\n const controlSlotBindings = computed<FilterGroupConditionCardSlotBindings>(() => ({\n isValid: validationState.value,\n validationErrorDetails: validationDetails.value,\n errorMessage: validationError.value,\n actionBaseBindings: speedDialActionBaseBindings.value,\n }))\n const { isRtl } = useLocale()\n const prependedSpeedDialOpen = ref<boolean>(false)\n const appendedSpeedDialOpen = ref<boolean>(false)\n const normalizedDispositionButtons = computed(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value)\n )\n )\n const {\n speedDialBindings: prependedSpeedDialBindings,\n speedDialActivatorBindings: prependedSpeedDialActivatorBindings,\n speedDialActivatorIconBindings: prependedSpeedDialActivatorIconBindings,\n } = useFilterGroupConditionCardSpeedDialBindings(\n isRtl,\n prependedSpeedDialOpen,\n normalizedDispositionButtons,\n 'start'\n )\n const {\n speedDialBindings: appendedSpeedDialBindings,\n speedDialActivatorBindings: appendedSpeedDialActivatorBindings,\n speedDialActivatorIconBindings: appendedSpeedDialActivatorIconBindings,\n } = useFilterGroupConditionCardSpeedDialBindings(\n isRtl,\n appendedSpeedDialOpen,\n normalizedDispositionButtons,\n 'end'\n )\n const elementCardBindings = computed<VCardPublicProps>(\n () =>\n stripUndefinedValuesFromObject({\n variant: 'outlined' as const,\n minHeight: 40,\n color: !validationState.value ? 'warning' : undefined,\n class: ['mt-6', 'mb-3'],\n }) satisfies VCardPublicProps\n )\n useRender(() =>\n h(\n 'div',\n {\n class: [\n 'w-100',\n 'position-relative',\n 'px-3',\n 'resourceful__filter-group-condition-card',\n {\n 'is-valid': validationState.value,\n 'is-invalid': !validationState.value,\n 'with-error': !validationState.value && validationError.value,\n },\n ],\n },\n [\n !slots.prependedControls\n ? null\n : h(VFab, prependedSpeedDialActivatorBindings.value, () => [\n slots.prependedControlsActivatorIcon\n ? slots.prependedControlsActivatorIcon(\n prependedSpeedDialActivatorIconBindings.value\n )\n : h(VIcon, prependedSpeedDialActivatorIconBindings.value),\n h(VSpeedDial, prependedSpeedDialBindings.value, {\n default: () => slots.prependedControls(controlSlotBindings.value),\n }),\n ]),\n h(VFab, appendedSpeedDialActivatorBindings.value, () => [\n h(VIcon, appendedSpeedDialActivatorIconBindings.value),\n h(VSpeedDial, appendedSpeedDialBindings.value, {\n default: () => [\n h(VBtn, {\n ...speedDialActionBaseBindings.value,\n key: '1',\n icon: () => h(SvgIcon, { d: mdiDelete }),\n onClick: () => {\n emit('click:delete')\n },\n }),\n slots.appendedControls ? slots.appendedControls(controlSlotBindings.value) : null,\n ],\n }),\n ]),\n h(VCard, elementCardBindings.value, () => [\n slots.default\n ? slots.default(controlSlotBindings.value)\n : h(VAlert, {\n closable: true,\n closeIcon: () => h(SvgIcon, { d: mdiClose }),\n icon: () => h(SvgIcon, { d: mdiAlertCircle }),\n color: '#B71C1C',\n density: 'compact' as const,\n title: 'Component Misconfigured. Please contact Developer.',\n type: 'error',\n variant: 'outlined' as const,\n ...{\n 'onClick:close': () => emit('click:delete'),\n },\n border: 'start',\n } satisfies VAlertPublicProps),\n validationError.value\n ? h(VSheet, { color: 'transparent', class: ['py-1', 'px-2'] }, () => [\n slots.errors\n ? slots.errors(controlSlotBindings.value)\n : h(VLabel, {\n text: validationError.value!,\n class: ['text-warning', 'text-caption'],\n } satisfies VLabelPublicProps),\n ])\n : null,\n ]),\n ]\n )\n )\n return {\n validationDetails,\n }\n },\n})\n\nexport type FilterGroupConditionCard = typeof FilterGroupConditionCard\n\nexport const FilterGroupElement = defineComponent({\n name: 'FilterGroupElement',\n props: makeFilterGroupElementProps(),\n emits: emitsFactory({\n 'update:modelValue': (val: FilterGroup) => isFilterGroupLike(val),\n 'update:model-value': (val: FilterGroup) => isFilterGroupLike(val),\n 'click:delete': () => true,\n }),\n setup(props, { emit }) {\n const {\n modelValue,\n reactivityBus,\n labels,\n filterableFields,\n dispositionButtons,\n iconAnd,\n iconOr,\n } = toRefs(props)\n const t = useI18n()\n const { localReactiveBus, localState, setLocalState } = useReactiveLocalState<FilterGroup>(\n emit,\n modelValue,\n props.modelValue,\n reactivityBus\n )\n const operator = computed<FilterGroupOperator>({\n get: () => localState.value.operator,\n set: (val: FilterGroupOperator) => {\n if (isFilterGroupOperator(val)) {\n // used to completely break reactivity\n const currentLocalState = toUnreactive(localState)\n currentLocalState.operator = val\n setLocalState(currentLocalState)\n }\n },\n })\n const conditions = computed<Array<FilterGroupCondition>>({\n get: () => localState.value.conditions,\n set: (val: FilterGroupCondition[]) => {\n const valid = val.every((v) => isFilterGroupConditionLike(v))\n if (!valid) return\n const currentLocalState = toUnreactive(localState)\n currentLocalState.conditions = val\n setLocalState(currentLocalState)\n },\n })\n const operatorIcon = computed<IconValue | undefined>(() => {\n switch (operator.value) {\n case 'AND':\n return iconAnd.value\n case 'OR':\n return iconOr.value\n default:\n return undefined\n }\n })\n const doAddGroup = () => {\n const currentConditions = Array.from(toUnreactive(conditions))\n currentConditions.push({\n operator: 'AND',\n conditions: [],\n })\n conditions.value = currentConditions\n }\n const doAddCondition = () => {\n const currentConditions = Array.from(toUnreactive(conditions))\n currentConditions.push({\n field: '',\n type: '',\n operator: '',\n arguments: [],\n } as any)\n conditions.value = currentConditions\n }\n const addGroupButtonBindings = computed<ControlButtonProps>(\n () =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value),\n {\n cta: t('lucid.resourceful.index.filtersControls.addGroup'),\n prependIcon: () => h(SvgIcon, { d: mdiCardPlusOutline }),\n color: 'surface-light',\n class: ['me-2'],\n },\n { onClick: () => doAddGroup() }\n ) as ControlButtonProps\n )\n const addConditionButtonBindings = computed<ControlButtonProps>(\n () =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value),\n {\n cta: t('lucid.resourceful.index.filtersControls.addCondition'),\n prependIcon: () => h(SvgIcon, { d: mdiFilterPlus }),\n color: 'surface-light',\n },\n { onClick: () => doAddCondition() }\n ) as ControlButtonProps\n )\n return () =>\n h(\n FilterGroupConditionCard,\n {\n ...stripUndefinedValuesFromObject({\n modelValue: localState.value,\n reactivityBus: localReactiveBus,\n labels: labels.value,\n filterableFields: filterableFields.value,\n dispositionButtons: dispositionButtons.value,\n iconAnd: iconAnd.value,\n iconOr: iconOr.value,\n }),\n ...{\n 'onClick:delete': () => emit('click:delete'),\n },\n },\n {\n prependedControlsActivatorIcon: (\n iconProps: FilterGroupConditionCardPrependControlsActivatorIconSlotBindings\n ) =>\n h(\n VIcon,\n deepmerge(iconProps, {\n icon: operatorIcon.value,\n size: '12px',\n }) as FilterGroupConditionCardPrependControlsActivatorIconSlotBindings\n ),\n prependedControls: ({ actionBaseBindings }: FilterGroupConditionCardSlotBindings) => [\n h(VBtn, {\n ...actionBaseBindings,\n key: '1',\n icon: iconAnd.value,\n active: 'AND' === operator.value,\n onClick: () => {\n operator.value = 'AND'\n },\n }),\n h(VBtn, {\n ...actionBaseBindings,\n key: '2',\n icon: iconOr.value,\n active: 'OR' === operator.value,\n onClick: () => {\n operator.value = 'OR'\n },\n }),\n ],\n default: () => [\n conditions.value.length === 0\n ? h(FilterGroupEmptyState, {\n 'buttonStyles': dispositionButtons.value,\n 'onClick:add:condition': () => doAddCondition(),\n 'onClick:add:group': () => doAddGroup(),\n })\n : null,\n ...Array.from(toUnreactive(conditions)).map((item, index) =>\n h(\n FilterGroupConditionElement,\n deepmerge(\n {\n modelValue: toUnreactive(item),\n reactivityBus: localReactiveBus,\n labels: labels.value,\n filterableFields: filterableFields.value,\n dispositionButtons: dispositionButtons.value,\n iconAnd: iconAnd.value,\n iconOr: iconOr.value,\n },\n {\n 'onUpdate:modelValue': (val: FilterGroupCondition) => {\n const currentConditions = Array.from(toUnreactive(conditions))\n currentConditions.splice(index, 1, val)\n conditions.value = currentConditions\n },\n 'onClick:delete': () => {\n const currentConditions = Array.from(toUnreactive(conditions))\n currentConditions.splice(index, 1)\n conditions.value = currentConditions\n },\n }\n )\n )\n ),\n conditions.value.length > 0\n ? h(\n VSheet,\n { color: 'transparent', class: ['d-flex', 'justify-end', 'px-3', 'mb-3'] },\n () => [\n h(ControlButton, addGroupButtonBindings.value),\n h(ControlButton, addConditionButtonBindings.value),\n ]\n )\n : null,\n ],\n appendedControls: ({ actionBaseBindings }: FilterGroupConditionCardSlotBindings) => [\n h(VBtn, {\n ...actionBaseBindings,\n key: '2',\n icon: () => h(SvgIcon, { d: mdiNotificationClearAll }),\n disabled: conditions.value.length === 0,\n onClick: () => {\n conditions.value = []\n },\n }),\n ],\n errors: ({\n isValid,\n errorMessage,\n validationErrorDetails,\n }: FilterGroupConditionCardSlotBindings) => {\n if (isValid) {\n return null\n }\n if (validationErrorDetails.length === 0) {\n return h(VLabel, {\n text: errorMessage!,\n class: ['text-warning', 'text-caption'],\n } satisfies VLabelPublicProps)\n } else {\n const conditionErrors = validationErrorDetails.filter(\n (c) => c.path[0] === 'conditions'\n )\n if (conditionErrors.length === 0) {\n return h(VLabel, {\n text: t('filterGroupElement.notValid'),\n class: ['text-warning', 'text-caption'],\n } satisfies VLabelPublicProps)\n }\n const conditionErrorOrdinals = conditionErrors.map((c) =>\n ordinal(asAbsInt(c.path[1]) + 1)\n )\n const { head, tail } = getOxfordizedListParts(conditionErrorOrdinals)\n const listArgs = [head, tail].filter((v) => v.trim().length > 0)\n const listOfOrdinals =\n listArgs.length === 2 ? format(t('grammar.and'), ...listArgs) : listArgs[0]\n const modelTerm =\n conditionErrorOrdinals.length === 1\n ? t('filterGroupElement.model.condition.singular')\n : t('filterGroupElement.model.condition.plural')\n const areOrIs =\n conditionErrorOrdinals.length === 1 ? t('grammar.is') : t('grammar.are')\n const message = format(\n t('filterGroupElement.conditions.invalid'),\n listOfOrdinals,\n modelTerm,\n areOrIs\n )\n return h(VLabel, {\n text: message,\n class: ['text-warning', 'text-caption'],\n } satisfies VLabelPublicProps)\n }\n },\n }\n )\n },\n})\n\nexport type FilterConditionArgumentCellSlotProps = {\n modelValue: any\n color: VInputPublicProps['color']\n density: VInputPublicProps['density']\n name: VInputPublicProps['name']\n error: VInputPublicProps['error']\n focused: VInputPublicProps['focused']\n disabled: VInputPublicProps['disabled']\n readonly: VInputPublicProps['readonly']\n theme: VInputPublicProps['theme']\n baseColor: VInputPublicProps['baseColor']\n centerAffix: VInputPublicProps['centerAffix']\n glow: VInputPublicProps['glow']\n iconColor: VInputPublicProps['iconColor']\n hideDetails: true\n direction: VInputPublicProps['direction']\n notifyFocus: () => void\n notifyBlur: () => void\n}\n\nexport type FilterConditionArgumentCellSlots = {\n default: (props: FilterConditionArgumentCellSlotProps, bus: ReactivityBus) => any\n}\n\nconst memoizedMisconfiguredComponentAlert = h(VAlert, {\n height: 40,\n type: 'error',\n variant: 'outlined',\n text: 'Misconfigured',\n density: 'compact',\n icon: () => h(SvgIcon, { d: mdiAlertCircle }),\n})\n\nexport const FilterConditionArgumentCell = defineComponent({\n name: 'FilterConditionArgumentCell',\n props: makeFilterConditionArgumentCellProps(),\n emits: filterConditionArgumentCellEmits,\n slots: Object as SlotsType<FilterConditionArgumentCellSlots>,\n setup(props, { emit, slots }) {\n const {\n modelValue,\n color,\n prependIcon,\n appendIcon,\n density,\n name,\n label,\n style,\n error,\n class: className,\n // field,\n // operator,\n argumentCount,\n reactivityBus,\n filterConditionElementToFilterConditionArgumentCellBus: argCellBus,\n focused,\n disabled,\n errorMessages: rawErrorMessages,\n maxErrors,\n readonly,\n rules,\n validateOn,\n validationValue,\n theme,\n width,\n minWidth,\n maxWidth,\n id,\n baseColor,\n centerAffix,\n glow,\n iconColor,\n hideDetails,\n hideSpinButtons,\n hint,\n persistentHint,\n messages,\n direction,\n } = toRefs(props)\n const errorMessages = computed<string[]>(() =>\n Array.from(rawErrorMessages.value || []).map((v) =>\n v.replace(/\"?arguments\\[(\\d{1,})\\]\"?/gm, (match, g1) => {\n const asNumericIndex = Number.parseInt(g1, 10)\n const quotes = match.startsWith('\"') && match.endsWith('\"') ? '\"' : ''\n if (argumentCount.value === 1) {\n return [quotes, t('filterConditionElement.field.arguments'), quotes]\n .filter((x) => x.trim().length > 0)\n .join('')\n }\n if (Number.isNaN(asNumericIndex) || asNumericIndex < 0) {\n return t('filterConditionArgumentCell.badIndex')\n } else {\n const asOrdinal = ordinal(asNumericIndex + 1)\n return format(t('filterConditionArgumentCell.nthArgument'), asOrdinal)\n }\n })\n )\n )\n const vInputEventBus = new VInputEventBus()\n const childFocused = ref(false)\n vInputEventBus.on('focused', () => {\n childFocused.value = true\n })\n vInputEventBus.on('blurred', () => {\n childFocused.value = false\n })\n const compositeFocused = computed(() => toUnreactive(focused) || toUnreactive(childFocused))\n const vInputBindings = computed<VInputPublicProps>(() =>\n stripUndefinedValuesFromObject({\n modelValue: toUnreactive(modelValue),\n color: toUnreactive(color),\n prependIcon: toUnreactive(prependIcon),\n appendIcon: toUnreactive(appendIcon),\n density: toUnreactive(density),\n name: toUnreactive(name),\n label: toUnreactive(label),\n style: toUnreactive(style),\n error: toUnreactive(error),\n class: toUnreactive(className),\n focused: toUnreactive(compositeFocused),\n disabled: toUnreactive(disabled),\n errorMessages: toUnreactive(errorMessages),\n maxErrors: toUnreactive(maxErrors),\n readonly: toUnreactive(readonly),\n rules: toUnreactive(rules),\n validateOn: toUnreactive(validateOn),\n validationValue: toUnreactive(validationValue),\n theme: toUnreactive(theme),\n width: toUnreactive(width),\n minWidth: toUnreactive(minWidth),\n maxWidth: toUnreactive(maxWidth),\n id: toUnreactive(id),\n baseColor: toUnreactive(baseColor),\n centerAffix: toUnreactive(centerAffix),\n glow: toUnreactive(glow),\n iconColor: toUnreactive(iconColor),\n hideDetails: toUnreactive(hideDetails),\n hideSpinButtons: toUnreactive(hideSpinButtons),\n hint: toUnreactive(hint),\n persistentHint: toUnreactive(persistentHint),\n messages: toUnreactive(messages),\n direction: toUnreactive(direction),\n })\n )\n const { localReactiveBus, localState, setLocalState } = useReactiveLocalState<\n AnyFilterCondition['arguments']\n >(emit, modelValue, props.modelValue, reactivityBus)\n const partialFilterConditionArgumentCellSlotProps = computed<\n Omit<FilterConditionArgumentCellSlotProps, 'modelValue' | 'notifyFocus' | 'notifyBlur'>\n >(() => ({\n color: toUnreactive(color),\n density: toUnreactive(density),\n name: toUnreactive(name),\n error: toUnreactive(error),\n focused: toUnreactive(focused),\n disabled: toUnreactive(disabled),\n readonly: toUnreactive(readonly),\n theme: toUnreactive(theme),\n baseColor: toUnreactive(baseColor),\n centerAffix: toUnreactive(centerAffix),\n glow: toUnreactive(glow),\n iconColor: toUnreactive(iconColor),\n hideDetails: true as const,\n direction: toUnreactive(direction),\n label: toUnreactive(label),\n }))\n const resetArguments = () => {\n const is = toUnreactive(argumentCount)\n let updateTo: AnyFilterCondition['arguments'] = []\n switch (is) {\n case 1:\n updateTo = [undefined] as any\n break\n case 2:\n updateTo = [undefined, undefined] as any\n break\n\n default:\n updateTo = []\n break\n }\n setLocalState(updateTo)\n }\n watch(\n argCellBus,\n (is, was) => {\n is.on('needs:reset:arguments', resetArguments)\n if (was && was instanceof FilterConditionElementToFilterConditionArgumentCellBus) {\n was.off('needs:reset:arguments', resetArguments)\n }\n },\n { immediate: true }\n )\n const { isRtl } = useLocale()\n const t = useI18n()\n return () =>\n h(VInput, vInputBindings.value, () =>\n h(VContainer, { fluid: true, class: ['pa-0'] }, () =>\n h(VRow, {}, () => {\n switch (argumentCount.value) {\n case 1:\n return [\n h(VCol, { cols: 12 }, () =>\n slots.default\n ? slots.default(\n deepmerge(\n partialFilterConditionArgumentCellSlotProps.value,\n { modelValue: localState.value[0] },\n {\n 'onUpdate:modelValue': (val: any) => {\n const currentState = toUnreactive(localState)\n currentState[0] = val\n setLocalState(currentState)\n },\n },\n {\n notifyFocus: () => vInputEventBus.notifyFocus('a1'),\n notifyBlur: () => vInputEventBus.notifyBlur('a1'),\n }\n ),\n localReactiveBus\n )\n : memoizedMisconfiguredComponentAlert\n ),\n ]\n case 2:\n return [\n h(VCol, { cols: 6, class: 'position-relative' }, () => [\n slots.default\n ? slots.default(\n deepmerge(\n partialFilterConditionArgumentCellSlotProps.value,\n {\n modelValue: localState.value[0],\n label: [label.value, t('general.start')]\n .filter((v) => 'string' === typeof v && v.trim().length > 0)\n .map((v) => v!.trim())\n .join(' '),\n },\n {\n 'onUpdate:modelValue': (val: any) => {\n const currentState = toUnreactive(localState)\n currentState[0] = val\n setLocalState(currentState)\n },\n },\n {\n notifyFocus: () => vInputEventBus.notifyFocus('a1'),\n notifyBlur: () => vInputEventBus.notifyBlur('a1'),\n }\n ),\n localReactiveBus\n )\n : memoizedMisconfiguredComponentAlert,\n h(\n 'div',\n {\n class: ['d-flex', 'justify-center', 'align-center'],\n style: {\n position: 'absolute',\n left: isRtl.value ? '-8px' : undefined,\n right: isRtl.value ? undefined : '-8px',\n width: '16px',\n top: 0,\n bottom: 0,\n },\n },\n '&'\n ),\n ]),\n h(VCol, { cols: 6 }, () =>\n slots.default\n ? slots.default(\n deepmerge(\n partialFilterConditionArgumentCellSlotProps.value,\n {\n modelValue: localState.value[1],\n label: [label.value, t('general.end')]\n .filter((v) => 'string' === typeof v && v.trim().length > 0)\n .map((v) => v!.trim())\n .join(' '),\n },\n {\n 'onUpdate:modelValue': (val: any) => {\n const currentState = toUnreactive(localState)\n currentState[1] = val\n setLocalState(currentState)\n },\n },\n {\n notifyFocus: () => vInputEventBus.notifyFocus('a2'),\n notifyBlur: () => vInputEventBus.notifyBlur('a2'),\n }\n ),\n localReactiveBus\n )\n : memoizedMisconfiguredComponentAlert\n ),\n ]\n case 'multiple':\n return [\n h(VCol, { cols: 12 }, () =>\n slots.default\n ? slots.default(\n deepmerge(\n partialFilterConditionArgumentCellSlotProps.value,\n { modelValue: localState.value },\n {\n 'onUpdate:modelValue': (val: any) => {\n setLocalState(val)\n },\n },\n {\n notifyFocus: () => vInputEventBus.notifyFocus('a1'),\n notifyBlur: () => vInputEventBus.notifyBlur('a1'),\n }\n ),\n localReactiveBus\n )\n : h(VAlert, {\n height: 40,\n type: 'error',\n variant: 'outlined',\n text: 'Component Misconfigured',\n density: 'compact',\n icon: () => h(SvgIcon, { d: mdiAlertCircle }),\n })\n ),\n ]\n default:\n return []\n }\n })\n )\n )\n },\n})\n\nexport const FilterConditionArgumentField = defineComponent({\n name: 'FilterConditionArgumentField',\n props: makeFilterConditionArgumentFieldProps(),\n emits: filterConditionArgumentFieldEmits,\n setup(props, { emit }) {\n const {\n filterableFields,\n modelValue,\n color,\n prependIcon,\n appendIcon,\n name,\n label,\n error,\n class: className,\n field,\n type,\n operator,\n argumentCount,\n reactivityBus,\n focused,\n disabled,\n errorMessages,\n maxErrors,\n readonly,\n validateOn,\n theme,\n id,\n centerAffix,\n hideDetails,\n filterConditionElementBus,\n } = toRefs(props)\n const { localState, setLocalState } = useReactiveLocalState<any>(\n emit as unknown as EmitWithUpdateModelValue<any>,\n modelValue,\n props.modelValue,\n reactivityBus\n )\n const onArgumentsChanged = (is: any, was: any) => {\n if (!is && !was) return\n }\n watch(\n filterConditionElementBus,\n (is, was) => {\n is.on('change:arguments', onArgumentsChanged)\n if (was && was instanceof FilterConditionElementBus) {\n was.off('change:arguments', onArgumentsChanged)\n }\n },\n { immediate: true }\n )\n onBeforeUnmount(() => {\n filterConditionElementBus.value.off('change:arguments', onArgumentsChanged)\n })\n const conditionFieldDefinition = computed<ResourcefulSchemaDefinition | undefined>(() => {\n if (!field.value || !filterableFields.value[field.value]) {\n return undefined\n }\n return toUnreactive(filterableFields.value[field.value])\n })\n const conditionFieldDefinitionStringFormat = computed<RStringFieldProps['format']>(() => {\n if ('string' !== type.value) return undefined\n if (!conditionFieldDefinition.value) return undefined\n switch (conditionFieldDefinition.value.format?.type) {\n case 'color':\n case 'email':\n case 'password':\n case 'url':\n case 'tel':\n case 'search':\n return conditionFieldDefinition.value.format.type\n default:\n return undefined\n }\n })\n const commonFieldProps = computed(() => ({\n // VInput props to pass through\n color: color.value,\n prependIcon: prependIcon.value,\n appendIcon: appendIcon.value,\n variant: 'outlined' as const, // not definable for UI consistency\n density: 'compact' as const, // not definable for UI consistency\n name: name.value,\n label: label.value ?? undefined,\n error: error.value,\n class: className.value,\n focused: focused.value,\n disabled: disabled.value ?? undefined,\n errorMessages: errorMessages.value,\n maxErrors: maxErrors.value,\n readonly: readonly.value,\n hideDetails: hideDetails.value,\n validateOn: validateOn.value,\n theme: theme.value,\n centerAffix: centerAffix.value,\n id: id.value,\n // R{type}Field props to pass through\n multiple: 'multiple' === argumentCount.value,\n onBlur: () => emit('blur'),\n onFocus: () => emit('focus'),\n // v-model integration\n modelValue: localState.value,\n ...{\n 'onUpdate:modelValue': (val: any) => setLocalState(val),\n },\n }))\n // Used to override in cases where the field type should be different that the field's type\n // for a given operator, such as when we're dealing with date +/- intervals operators\n const neededFieldType = computed(() => {\n switch (operator.value) {\n case FilterOperators.LAST_N_DAYS:\n case FilterOperators.NEXT_N_DAYS:\n case FilterOperators.MORE_THAN_DAYS_AGO:\n case FilterOperators.LESS_THAN_DAYS_AGO:\n case FilterOperators.MORE_THAN_DAYS_FROM_NOW:\n case FilterOperators.LESS_THAN_DAYS_FROM_NOW:\n case FilterOperators.EXACTLY_DAYS_AGO:\n case FilterOperators.EXACTLY_DAYS_FROM_NOW:\n case FilterOperators.LAST_N_HOURS:\n case FilterOperators.NEXT_N_HOURS:\n case FilterOperators.LAST_N_WEEKS:\n case FilterOperators.NEXT_N_WEEKS:\n case FilterOperators.LAST_N_MONTHS:\n case FilterOperators.NEXT_N_MONTHS:\n case FilterOperators.LAST_N_QUARTERS:\n case FilterOperators.NEXT_N_QUARTERS:\n case FilterOperators.LAST_N_YEARS:\n case FilterOperators.NEXT_N_YEARS:\n return {\n type: 'integer' as const,\n args: { min: 0 } satisfies Partial<RNumberFieldProps>,\n }\n default:\n return {\n type: type.value,\n args: undefined,\n }\n }\n })\n return () => {\n switch (neededFieldType.value.type) {\n case 'string':\n return h(RStringField, {\n // Field specifics\n ...(neededFieldType.value.args ?? {\n format: conditionFieldDefinitionStringFormat.value,\n }),\n // Common props\n ...commonFieldProps.value,\n } satisfies Partial<RStringFieldProps>)\n case 'date':\n return h(RDateField, {\n // Field specifics\n ...(neededFieldType.value.args ?? {}),\n // Common props\n ...commonFieldProps.value,\n } satisfies Partial<RDateFieldProps>)\n case 'dateTime':\n return h(RDateTimeField, {\n // Field specifics\n ...(neededFieldType.value.args ?? {}),\n // Common props\n ...commonFieldProps.value,\n } satisfies Partial<RDateTimeFieldProps>)\n case 'binary':\n return h(DevErrorAlert, {})\n case 'number':\n return h(RNumberField, {\n // Field specifics\n ...(neededFieldType.value.args ?? {\n min: (conditionFieldDefinition.value as any | undefined)?.minimum,\n max: (conditionFieldDefinition.value as any | undefined)?.maximum,\n step: (conditionFieldDefinition.value as any | undefined)?.multipleOf,\n }),\n // Common props\n ...commonFieldProps.value,\n } satisfies Partial<RNumberFieldProps>)\n case 'integer':\n return h(RIntegerField, {\n // Field specifics\n ...(neededFieldType.value.args ?? {\n min: (conditionFieldDefinition.value as any | undefined)?.minimum,\n max: (conditionFieldDefinition.value as any | undefined)?.maximum,\n step: (conditionFieldDefinition.value as any | undefined)?.multipleOf,\n }),\n // Common props\n ...commonFieldProps.value,\n } satisfies Partial<RIntegerFieldProps>)\n case 'bigint':\n return h(RBigIntField, {\n // Field specifics\n ...(neededFieldType.value.args ?? {\n min: (conditionFieldDefinition.value as any | undefined)?.minimum,\n max: (conditionFieldDefinition.value as any | undefined)?.maximum,\n step: (conditionFieldDefinition.value as any | undefined)?.multipleOf,\n }),\n // Common props\n ...commonFieldProps.value,\n } satisfies Partial<RBigIntFieldProps>)\n case 'unsignedInteger':\n return h(RUnsignedIntegerField, {\n // Field specifics\n ...(neededFieldType.value.args ?? {\n min: (conditionFieldDefinition.value as any | undefined)?.minimum,\n max: (conditionFieldDefinition.value as any | undefined)?.maximum,\n step: (conditionFieldDefinition.value as any | undefined)?.multipleOf,\n }),\n // Common props\n ...commonFieldProps.value,\n } satisfies Partial<RUnsignedIntegerFieldProps>)\n case 'boolean':\n return h(RBooleanField, {\n // Field specifics\n ...(neededFieldType.value.args ?? {\n choices: [true, false],\n }),\n // Common props\n ...commonFieldProps.value,\n } satisfies Partial<RBooleanFieldProps>)\n default:\n return h(DevErrorAlert, {})\n }\n }\n },\n})\n\nexport const FilterConditionElement = defineComponent({\n name: 'FilterConditionElement',\n props: makeFilterConditionElementProps(),\n emits: emitsFactory({\n 'update:modelValue': (val: AnyFilterCondition) => isFilterConditionLike(val),\n 'update:model-value': (val: AnyFilterCondition) => isFilterConditionLike(val),\n 'click:delete': () => true,\n }),\n setup(props, { emit }) {\n const {\n modelValue,\n reactivityBus,\n labels,\n filterableFields,\n dispositionButtons,\n iconAnd,\n iconOr,\n } = toRefs(props)\n const filterGroupConditionCardRef = ref<FilterGroupConditionCard | null>(null)\n const { width, xs } = useScopedDisplay(filterGroupConditionCardRef as any)\n const t = useI18n()\n const bus = new FilterConditionElementBus()\n const argCellBus = new FilterConditionElementToFilterConditionArgumentCellBus()\n const { localReactiveBus, localState, setLocalState } =\n useReactiveLocalState<AnyFilterCondition>(\n emit,\n modelValue,\n props.modelValue,\n reactivityBus,\n bus.notify\n )\n const conditionField = computed({\n get: () => localState.value.field,\n set: (val: string) => {\n const currentLocalState = toUnreactive(localState)\n if (!filterableFields.value[val]) {\n currentLocalState.field = ''\n currentLocalState.type = '' as any\n currentLocalState.operator = '' as any\n currentLocalState.arguments = [] as any\n } else {\n const definition = toUnreactive(filterableFields.value[val])\n currentLocalState.field = val\n currentLocalState.type = typeAndFormatToResourcefulFieldType(\n definition.type,\n definition.format\n )\n currentLocalState.operator = '' as any\n currentLocalState.arguments = [] as any\n }\n const prevLocalState = toUnreactive(localState)\n setLocalState(currentLocalState as unknown as AnyFilterCondition)\n if (prevLocalState.field !== currentLocalState.field) {\n nextTick(() => argCellBus.emit('needs:reset:arguments'))\n }\n },\n })\n const conditionFieldMenuState = ref<boolean>(false)\n const conditionFieldMenuIcon = computed(() =>\n conditionFieldMenuState.value\n ? () => h(SvgIcon, { d: mdiMenuUp })\n : () => h(SvgIcon, { d: mdiMenuDown })\n )\n const conditionType = computed(() => localState.value.type)\n const conditionTypeOperators = computed(() => {\n switch (conditionType.value) {\n case 'string':\n return StringFilterOperators\n case 'date':\n return DateFilterOperators\n case 'dateTime':\n return DateTimeFilterOperators\n case 'binary':\n return BinaryFilterOperators\n case 'number':\n return NumberFilterOperators\n case 'integer':\n return IntegerFilterOperators\n case 'bigint':\n return BigIntFilterOperators\n case 'unsignedInteger':\n return UnsignedIntegerFilterOperators\n case 'boolean':\n return BooleanFilterOperators\n default:\n return [] as FilterOperator[]\n }\n })\n const conditionOperatorField = ref<VAutocomplete | null>(null)\n const conditionOperator = computed({\n get: () => localState.value.operator,\n set: (val: FilterOperator) => {\n // @ts-ignore\n if (!isFilterOperator(val) || !conditionTypeOperators.value.includes(val)) return\n const currentLocalState = toUnreactive(localState)\n // @ts-ignore\n currentLocalState.operator = val as unknown as AnyFilterCondition['operator']\n currentLocalState.arguments = [] as any\n const prevLocalState = toUnreactive(localState)\n setLocalState(currentLocalState as unknown as AnyFilterCondition)\n if (prevLocalState.operator !== currentLocalState.operator) {\n nextTick(() => argCellBus.emit('needs:reset:arguments'))\n }\n },\n })\n // when the field type changes, make sure\n // that the condition's operator is a valid value\n watch(\n conditionType,\n () => {\n const currentConditionTypeOperators = toUnreactive(conditionTypeOperators)\n const currentConditionOperator = toUnreactive(conditionOperator)\n if (\n // @ts-ignore\n currentConditionOperator !== '' &&\n // @ts-ignore\n !currentConditionTypeOperators.includes(currentConditionOperator)\n ) {\n conditionOperator.value = '' as any\n const field = toUnreactive(conditionOperatorField)\n if (field) {\n field.reset()\n }\n }\n },\n { immediate: true }\n )\n const conditionOperatorOptions = computed(() =>\n Array.from(toUnreactive(conditionTypeOperators)).map((op) => ({\n value: op,\n label: t(`filterConditionElement.operator.${toUnreactive(conditionType)}.${op}`),\n }))\n )\n const conditionOperatorMenuState = ref<boolean>(false)\n const conditionOperatorMenuIcon = computed(() =>\n conditionOperatorMenuState.value\n ? () => h(SvgIcon, { d: mdiMenuUp })\n : () => h(SvgIcon, { d: mdiMenuDown })\n )\n const conditionArguments = computed({\n get: () => localState.value.arguments,\n set: (val: any[]) => {\n const currentLocalState = toUnreactive(localState)\n currentLocalState.arguments = val as unknown as AnyFilterCondition['arguments']\n setLocalState(currentLocalState as unknown as AnyFilterCondition)\n },\n })\n const conditionFieldOptions = computed(() =>\n Object.entries(toUnreactive(filterableFields)).map(([field, def]) => {\n const definition = toUnreactive(def)\n let title: string\n if (definition.type === 'computed') {\n title = definition['x-table-header-definition']!.title\n } else {\n title = t(labels.value[field] || field)\n }\n return {\n value: field,\n label: title,\n type: definition.type,\n }\n })\n )\n const desiredFilterArgumentCount = computed(() =>\n getOperatorArgumentCount(conditionOperator.value)\n )\n const fieldAndOperatorCellWidth = computed(() => {\n if (xs.value) return 12\n // if we have a condition operator, we should have 2 - 4 cells depending on the\n // number of arguments desired.\n if (conditionOperator.value.length) {\n // when there are no desired arguments\n // we should have 2 cells, which does not require\n // any special consideration of < 800px wide\n if (0 === desiredFilterArgumentCount.value) {\n return 6\n }\n // when there is only 1 argument\n // or there are \"multiple\" i.e. 1 field with multiple values\n // we should have 3 cells\n if (\n ('number' === typeof desiredFilterArgumentCount.value &&\n desiredFilterArgumentCount.value > 0) ||\n 'multiple' === desiredFilterArgumentCount.value\n ) {\n if (width.value < 600) {\n return 6\n }\n if (2 === desiredFilterArgumentCount.value) {\n return 3\n }\n return 4\n }\n }\n if (conditionField.value.length) {\n return 6\n }\n return 12\n })\n const argumentCellWidth = computed(() => {\n if (xs.value) return 12\n // if we have a condition operator, we should have 2 - 4 cells depending on the\n // number of arguments desired.\n if (conditionOperator.value.length) {\n // when there are no desired arguments\n // we should have 2 cells, which does not require\n // any special consideration of < 800px wide\n if (0 === desiredFilterArgumentCount.value) {\n return 6\n }\n // when there is only 1 argument\n // or there are \"multiple\" i.e. 1 field with multiple values\n // we should have 3 cells\n if (\n ('number' === typeof desiredFilterArgumentCount.value &&\n desiredFilterArgumentCount.value > 0) ||\n 'multiple' === desiredFilterArgumentCount.value\n ) {\n if (width.value < 600) {\n return 12\n }\n if (2 === desiredFilterArgumentCount.value) {\n return 6\n }\n return 4\n }\n }\n return 12\n })\n const showOperatorField = computed(() => conditionField.value.length > 0)\n const showArgumentsField = computed(\n () => conditionOperator.value.length > 0 && desiredFilterArgumentCount.value !== 0\n )\n const fieldTerm = computed(() => t('filterConditionElement.field.field'))\n const fieldHintTerm = computed(() => t('filterConditionElement.field.field.hint'))\n const operatorTerm = computed(() => t('filterConditionElement.field.operator'))\n const operatorHintTerm = computed(() => t('filterConditionElement.field.operator.hint'))\n const argumentsTerm = computed(() => t('filterConditionElement.field.arguments'))\n const argumentsHintTerm = computed(() => t('filterConditionElement.field.arguments.hint'))\n const formatArguments = computed(() => [\n fieldTerm.value,\n operatorTerm.value,\n argumentsTerm.value,\n ])\n const resetArgumentsIfNotShowingArgumentsField = () => {\n if (showArgumentsField.value) return\n const is = toUnreactive(desiredFilterArgumentCount.value)\n let updateTo: AnyFilterCondition['arguments'] = []\n switch (is) {\n case 1:\n updateTo = [undefined] as any\n break\n case 2:\n updateTo = [undefined, undefined] as any\n break\n\n default:\n updateTo = []\n break\n }\n const currentLocalState = toUnreactive(localState)\n currentLocalState.arguments = updateTo\n setLocalState(currentLocalState as unknown as AnyFilterCondition)\n }\n onMounted(() => {\n argCellBus.on('needs:reset:arguments', resetArgumentsIfNotShowingArgumentsField)\n })\n onBeforeUnmount(() => {\n argCellBus.off('needs:reset:arguments')\n })\n return () =>\n h(\n FilterGroupConditionCard,\n {\n ref: filterGroupConditionCardRef,\n ...stripUndefinedValuesFromObject({\n modelValue: localState.value,\n reactivityBus: localReactiveBus,\n labels: labels.value,\n filterableFields: filterableFields.value,\n dispositionButtons: dispositionButtons.value,\n iconAnd: iconAnd.value,\n iconOr: iconOr.value,\n }),\n ...{\n 'onClick:delete': () => emit('click:delete'),\n },\n },\n {\n default: ({ validationErrorDetails }: FilterGroupConditionCardSlotBindings) => {\n const fieldErrorMessages = validationErrorDetails\n .filter((e) => e.path[0] === 'field')\n .map((e) => format(e.message, ...formatArguments.value))\n const operatorErrorMessages = validationErrorDetails\n .filter((e) => e.path[0] === 'operator')\n .map((e) => format(e.message, ...formatArguments.value))\n const argumentsErrorMessages = validationErrorDetails\n .filter((e) => e.path[0] === 'arguments')\n .map((e) => format(e.message, ...formatArguments.value))\n return h(VContainer, { fluid: true }, () =>\n h(VRow, {}, () => [\n h(VCol, { cols: 12, sm: fieldAndOperatorCellWidth.value }, () => [\n h(\n VAutocomplete,\n deepmerge(\n {\n modelValue: conditionField.value,\n items: conditionFieldOptions.value,\n errorMessages: fieldErrorMessages,\n hideDetails: 'auto' as const,\n hideSpinButtons: true,\n hint: fieldHintTerm.value,\n itemTitle: 'label',\n itemValue: 'value',\n label: fieldTerm.value,\n variant: 'outlined' as const,\n density: 'compact' as const,\n menuIcon: conditionFieldMenuIcon.value,\n },\n {\n 'onUpdate:modelValue': (value: string) => {\n conditionField.value = value\n },\n 'onUpdate:menu': (value: boolean) => {\n conditionFieldMenuState.value = value\n },\n }\n ) satisfies VAutocompletePublicProps\n ),\n ]),\n showOperatorField.value\n ? h(VCol, { cols: 12, sm: fieldAndOperatorCellWidth.value }, () => [\n h(\n VAutocomplete,\n deepmerge(\n {\n modelValue: conditionOperator.value,\n items: conditionOperatorOptions.value,\n errorMessages: operatorErrorMessages,\n hideDetails: 'auto' as const,\n hideSpinButtons: true,\n hint: operatorHintTerm.value,\n itemTitle: 'label',\n itemValue: 'value',\n label: operatorTerm.value,\n variant: 'outlined' as const,\n density: 'compact' as const,\n menuIcon: conditionOperatorMenuIcon.value,\n ref: conditionOperatorField,\n },\n {\n 'onUpdate:modelValue': (value: any) => {\n conditionOperator.value = value\n },\n 'onUpdate:menu': (value: boolean) => {\n conditionOperatorMenuState.value = value\n },\n }\n ) satisfies VAutocompletePublicProps\n ),\n ])\n : null,\n showArgumentsField.value\n ? h(VCol, { cols: 12, sm: argumentCellWidth.value }, () => {\n return [\n h(\n FilterConditionArgumentCell,\n deepmerge(\n {\n modelValue: conditionArguments.value,\n field: conditionField.value,\n operator: conditionOperator.value,\n argumentCount: desiredFilterArgumentCount.value,\n reactivityBus: localReactiveBus,\n filterConditionElementToFilterConditionArgumentCellBus: argCellBus,\n errorMessages: argumentsErrorMessages,\n hideDetails: 'auto' as const,\n hideSpinButtons: true,\n hint: argumentsHintTerm.value,\n label: argumentsTerm.value,\n variant: 'outlined' as const,\n density: 'compact' as const,\n },\n {\n 'onUpdate:modelValue': (value: any) => {\n conditionArguments.value = value\n },\n }\n ) satisfies FilterConditionArgumentCellPublicProps,\n {\n default: (\n slotProps: FilterConditionArgumentCellSlotProps,\n slotBus: FilterConditionElementBus\n ) =>\n h(FilterConditionArgumentField, {\n filterableFields: filterableFields.value,\n field: conditionField.value,\n type: conditionType.value,\n operator: conditionOperator.value,\n argumentCount: desiredFilterArgumentCount.value,\n reactivityBus: localReactiveBus,\n filterConditionElementBus: slotBus,\n ...stripUndefinedValuesFromObject({\n ...slotProps,\n notifyFocus: undefined,\n notifyBlur: undefined,\n }),\n onFocus: slotProps.notifyFocus,\n onBlur: slotProps.notifyBlur,\n } satisfies FilterConditionArgumentFieldPublicProps),\n }\n ),\n ]\n })\n : null,\n ])\n )\n },\n errors: () => null,\n }\n )\n },\n})\n","/* eslint-disable vue/one-component-per-file */\nimport { useI18n } from '../../ioc'\nimport { encode } from '@nhtio/encoder'\nimport { SvgIcon } from '../../svg-icon'\nimport { deepmerge } from 'deepmerge-ts'\nimport { VBtn } from 'vuetify/components/VBtn'\nimport { VImg } from 'vuetify/components/VImg'\nimport { VIcon } from 'vuetify/components/VIcon'\nimport { VMenu } from 'vuetify/components/VMenu'\nimport { VCard } from 'vuetify/components/VCard'\nimport { VSpacer } from 'vuetify/components/VGrid'\nimport { VSheet } from 'vuetify/components/VSheet'\nimport { ControlButton } from '../../control-button'\nimport { VDialog } from 'vuetify/components/VDialog'\nimport { emitsFactory } from '../../common/factories'\nimport { VDivider } from 'vuetify/components/VDivider'\nimport { pick } from '@nhtio/vuetifiable/util/helpers'\nimport { ReactivityBus } from '../../filtration/common'\nimport { VBtnToggle } from 'vuetify/components/VBtnToggle'\nimport { debounce } from '@nhtio/vuetifiable/util/helpers'\nimport { useResourcefulIndexScopedDisplay } from '../index'\nimport { VList, VListItem } from 'vuetify/components/VList'\nimport { VEmptyState } from 'vuetify/components/VEmptyState'\nimport { TypedEventEmitter } from '@nhtio/tiny-typed-emitter'\nimport { default as errorSvg } from '../../icons/error.svg?url'\nimport { IconValue } from '@nhtio/vuetifiable/composables/icons'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { default as warningSvg } from '../../icons/warning.svg?url'\nimport { FilterGroupEmptyState } from '../../filtration/empty_state'\nimport { VToolbar, VToolbarItems } from 'vuetify/components/VToolbar'\nimport { makeVBtnProps } from '@nhtio/vuetifiable/components/VBtn/VBtn'\nimport { VNavigationDrawer } from 'vuetify/components/VNavigationDrawer'\nimport { makeVMenuProps } from '@nhtio/vuetifiable/components/VMenu/VMenu'\nimport { makeVDialogProps } from '@nhtio/vuetifiable/components/VDialog/VDialog'\nimport { makeVListItemProps } from '@nhtio/vuetifiable/components/VList/VListItem'\nimport { defineComponent, h, toRefs, toRaw, computed, watch, ref, nextTick } from 'vue'\nimport { makeVBtnToggleProps } from '@nhtio/vuetifiable/components/VBtnToggle/VBtnToggle'\nimport { makeVEmptyStateProps } from '@nhtio/vuetifiable/components/VEmptyState/VEmptyState'\nimport { FilterGroupConditionElement } from '../../filtration/filter_group_condition_element'\nimport { stripUndefinedValuesFromObject, getDefaultsForPropFactory } from '../../common/utils'\nimport {\n FilterGroupOperator,\n isFilterGroup,\n isFilterGroupConditions,\n isFilterGroupOperator,\n} from '../../filtration/schema'\nimport {\n mdiClose,\n mdiContentSave,\n mdiContentSaveCheck,\n mdiVectorLink,\n mdiSetNone,\n mdiPlus,\n mdiCardPlusOutline,\n mdiFilterPlus,\n mdiThumbUp,\n mdiBackupRestore,\n mdiNotificationClearAll,\n} from '@mdi/js'\nimport {\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n} from './_columns_controls'\nimport type { EventMap } from '@nhtio/tiny-typed-emitter'\nimport type { ResourcefulFieldLabelTerms } from '../props'\nimport type { FilterGroup } from '../../filtration/schema'\nimport type { PropType, ExtractPublicPropTypes } from 'vue'\nimport type { ResourcefulSchemaDefinition } from '../types'\nimport type { ControlButtonProps } from '../../control-button/props'\nimport type {\n DispositionButtonProps,\n SaveButtonProps,\n DiscardButtonProps,\n} from './_columns_controls'\n\nexport const makeResourcefulIndexFiltersControlsProps = propsFactory(\n {\n modelValue: {\n type: Boolean,\n default: false,\n },\n color: {\n type: String as PropType<string | undefined>,\n default: undefined,\n },\n labels: {\n type: Object as PropType<ResourcefulFieldLabelTerms>,\n default: () => ({}),\n },\n filterableFields: {\n type: Object as PropType<ResourcefulSchemaDefinition>,\n default: () => ({}),\n },\n conditions: {\n type: Array as PropType<FilterGroup['conditions']>,\n default: () => [],\n },\n operator: {\n type: String as PropType<FilterGroup['operator']>,\n default: 'AND',\n },\n dispositionButtons: {\n type: Object as PropType<DispositionButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n },\n saveButton: {\n type: Object as PropType<SaveButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n },\n discardButton: {\n type: Object as PropType<DiscardButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n },\n iconAnd: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiVectorLink }),\n },\n iconOr: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiSetNone }),\n },\n },\n 'ResourcefulIndexFiltersControls'\n)\n\nconst makeResourcefulIndexFiltersControlsPublicProps = propsFactory(\n {\n ...pick(makeResourcefulIndexFiltersControlsProps(), ['iconAnd', 'iconOr']),\n },\n 'ResourcefulIndexFiltersControls'\n)\n\nexport type ResourcefulIndexFiltersControlsPublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makeResourcefulIndexFiltersControlsPublicProps>\n>\n\nexport const defaultsForResourcefulIndexControlsPublicProps = getDefaultsForPropFactory(\n makeResourcefulIndexFiltersControlsPublicProps\n)\n\ntype ConfirmDialogEvents = EventMap<{\n show: []\n hide: []\n dispositioned: [disposition: boolean]\n}>\ntype VDialogPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVDialogProps>>\ntype VEmptyStatePublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVEmptyStateProps>>\ntype VBtnTogglePublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVBtnToggleProps>>\ntype VBtnPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVBtnProps>>\ntype VMenuPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVMenuProps>>\ntype VListItemPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVListItemProps>>\n\nconst makeFilterGroupOperatorButtonToggleProps = propsFactory(\n {\n ...makeResourcefulIndexFiltersControlsPublicProps(),\n ...pick(makeVBtnToggleProps(), ['color', 'density', 'elevation', 'rounded']),\n modelValue: {\n type: String as PropType<FilterGroupOperator>,\n default: 'AND',\n },\n size: {\n type: [String, Number] as PropType<string | number | undefined>,\n default: undefined,\n },\n },\n 'FilterGroupOperatorButtonToggle'\n)\n\ntype FilterGroupOperatorButtonTogglePublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makeFilterGroupOperatorButtonToggleProps>\n>\n\nconst FilterGroupOperatorButtonToggle = defineComponent({\n name: 'FilterGroupOperatorButtonToggle',\n props: makeFilterGroupOperatorButtonToggleProps(),\n emits: emitsFactory({\n 'update:modelValue': (val: FilterGroupOperator) => isFilterGroupOperator(val),\n 'update:model-value': (val: FilterGroupOperator) => isFilterGroupOperator(val),\n }),\n setup(props, { emit }) {\n const { iconAnd, iconOr, modelValue, color, density, elevation, size, rounded } = toRefs(props)\n const state = computed({\n get: () => modelValue.value,\n set: (val: FilterGroupOperator) => {\n if (isFilterGroupOperator(val) && val !== modelValue.value) {\n emit('update:modelValue', val)\n emit('update:model-value', val)\n }\n },\n })\n const t = useI18n()\n const btnToggleBindings = computed<VBtnTogglePublicProps>(() =>\n stripUndefinedValuesFromObject({\n activeColor: color.value,\n density: density.value,\n elevation: elevation.value,\n size: size.value,\n rounded: rounded.value,\n modelValue: state.value,\n ...{\n 'onUpdate:modelValue': (val: FilterGroupOperator) => (state.value = val),\n 'onUpdate:model-value': (val: FilterGroupOperator) => (state.value = val),\n },\n })\n )\n const btnToggleButtons = computed<Array<ReturnType<typeof h>>>(() =>\n FilterGroupOperator.map((o) => {\n const text = t(`filters.groups.operators.${o}`)\n const icon = 'AND' === o ? iconAnd.value : 'OR' === o ? iconOr.value : undefined\n const opts: VBtnPublicProps = stripUndefinedValuesFromObject({\n value: o,\n variant: 'text' as const,\n ripple: false,\n })\n return h(VBtn, opts, () => [icon ? h(VIcon, { icon, class: ['me-2'] }) : null, text])\n })\n )\n return () => h(VBtnToggle, btnToggleBindings.value, () => btnToggleButtons.value)\n },\n})\n\nconst FilterGroupOperatorMenu = defineComponent({\n name: 'FilterGroupOperatorMenu',\n props: makeFilterGroupOperatorButtonToggleProps(),\n emits: emitsFactory({\n 'update:modelValue': (val: FilterGroupOperator) => isFilterGroupOperator(val),\n 'update:model-value': (val: FilterGroupOperator) => isFilterGroupOperator(val),\n }),\n setup(props, { emit }) {\n const { iconAnd, iconOr, modelValue, color, density, elevation, size, rounded } = toRefs(props)\n const state = computed({\n get: () => modelValue.value,\n set: (val: FilterGroupOperator) => {\n if (isFilterGroupOperator(val) && val !== modelValue.value) {\n emit('update:modelValue', val)\n emit('update:model-value', val)\n }\n },\n })\n const t = useI18n()\n const activatorBtnBaseBindings = computed<VBtnTogglePublicProps>(() =>\n stripUndefinedValuesFromObject({\n activeColor: color.value,\n density: density.value,\n elevation: elevation.value,\n size: size.value,\n rounded: rounded.value,\n variant: 'text' as const,\n })\n )\n const currentText = computed(() => t(`filters.groups.operators.${state.value}`))\n return () =>\n h(\n VMenu,\n {},\n {\n activator: ({ props: menuActivatorProps }: { props: { [key: string]: any } }) =>\n h(\n VBtn,\n {\n ...menuActivatorProps,\n ...activatorBtnBaseBindings.value,\n },\n () => [currentText.value]\n ),\n default: () =>\n h(VList, { class: ['py-0'] }, () =>\n FilterGroupOperator.map((o) => {\n const text = t(`filters.groups.operators.${o}`)\n const icon = 'AND' === o ? iconAnd.value : 'OR' === o ? iconOr.value : undefined\n const opts: VListItemPublicProps = stripUndefinedValuesFromObject({\n active: state.value === o,\n prependIcon: icon,\n title: text,\n onClick: () => (state.value = o),\n })\n return h(VListItem, opts)\n })\n ),\n }\n )\n },\n})\n\nconst FilterGroupOperatorControl = defineComponent({\n name: 'FilterGroupOperator',\n props: makeFilterGroupOperatorButtonToggleProps(),\n emits: emitsFactory({\n 'update:modelValue': (val: FilterGroupOperator) => isFilterGroupOperator(val),\n 'update:model-value': (val: FilterGroupOperator) => isFilterGroupOperator(val),\n }),\n setup(props, { emit }) {\n const { iconAnd, iconOr, modelValue, color, density, elevation, size, rounded } = toRefs(props)\n const state = computed({\n get: () => modelValue.value,\n set: (val: FilterGroupOperator) => {\n if (isFilterGroupOperator(val) && val !== modelValue.value) {\n emit('update:modelValue', val)\n emit('update:model-value', val)\n }\n },\n })\n const bindings = computed<FilterGroupOperatorButtonTogglePublicProps>(() =>\n stripUndefinedValuesFromObject({\n iconAnd: iconAnd.value,\n iconOr: iconOr.value,\n modelValue: modelValue.value,\n color: color.value,\n density: density.value,\n elevation: elevation.value,\n size: size.value,\n rounded: rounded.value,\n ...{\n 'onUpdate:modelValue': (val: FilterGroupOperator) => (state.value = val),\n },\n })\n )\n const { smAndUp } = useResourcefulIndexScopedDisplay()\n return () =>\n smAndUp.value\n ? h(FilterGroupOperatorButtonToggle, bindings.value)\n : h(FilterGroupOperatorMenu, bindings.value)\n },\n})\n\nexport const ResourcefulIndexFiltersControls = defineComponent({\n name: 'ResourcefulIndexFiltersControls',\n props: makeResourcefulIndexFiltersControlsProps(),\n emits: emitsFactory({\n 'update:modelValue': (val: boolean) => typeof val === 'boolean',\n 'update:model-value': (val: boolean) => typeof val === 'boolean',\n 'update:filters': (val: FilterGroup) => isFilterGroup(val),\n 'update:filters:operator': (val: FilterGroupOperator) => isFilterGroupOperator(val),\n 'update:filters:conditions': (val: FilterGroup['conditions']) => isFilterGroupConditions(val),\n }),\n setup(props, { emit }) {\n const confirmationBus = new TypedEventEmitter<ConfirmDialogEvents>()\n const reactivityBus = new ReactivityBus()\n const {\n modelValue,\n color,\n labels,\n filterableFields,\n conditions,\n operator,\n dispositionButtons,\n saveButton,\n discardButton,\n iconAnd,\n iconOr,\n } = toRefs(props)\n const { width: screenWidth, xs, smAndUp } = useResourcefulIndexScopedDisplay()\n const showDispositionDialog = ref(false)\n const showInvalidStateDialog = ref(false)\n const isDirty = ref(false)\n const isValid = ref(true)\n // using `String` constructor to break any possible reactivity\n const updatedOperator = ref<FilterGroupOperator>(String(operator.value) as FilterGroupOperator)\n // using both `Array.from` and `toRaw` to ensure that reactivity links are broken\n const updatedConditions = ref<FilterGroup['conditions']>(Array.from(toRaw(conditions.value)))\n const updatedFilterGroup = computed<FilterGroup>(() => ({\n operator: updatedOperator.value,\n conditions: updatedConditions.value,\n }))\n const updateIsValid = () => {\n const updatedOperatorIsValid = isFilterGroupOperator(updatedOperator.value)\n const updatedConditionsIsValid = isFilterGroupConditions(updatedConditions.value)\n isValid.value = updatedOperatorIsValid && updatedConditionsIsValid\n }\n const updateIsDirty = debounce(() => {\n const combinedOriginalFilterGroup: FilterGroup = {\n operator: String(operator.value) as FilterGroupOperator,\n conditions: Array.from(toRaw(conditions.value)),\n }\n const combinedUpdatedFilterGroup = toRaw(updatedFilterGroup.value)\n const is = encode(combinedOriginalFilterGroup) !== encode(combinedUpdatedFilterGroup)\n isDirty.value = is\n updateIsValid()\n }, 100)\n const doEmit = (what: 'operator' | 'conditions' | 'both' = 'both') => {\n updateIsValid()\n if (!isValid.value) {\n showInvalidStateDialog.value = true\n return\n }\n emit('update:filters', updatedFilterGroup.value)\n if (what === 'operator' || what === 'both') {\n emit('update:filters:operator', updatedOperator.value)\n }\n if (what === 'conditions' || what === 'both') {\n emit('update:filters:conditions', updatedConditions.value)\n }\n }\n const visibility = computed({\n get: () => modelValue.value,\n set: (val: boolean) => {\n // plumbing to support confirmation dialog\n // if the user is trying to close the dialog and there are unsaved changes\n confirmationBus.off('dispositioned')\n if (!val && isDirty.value) {\n confirmationBus.once('dispositioned', (disposition: boolean) => {\n if (disposition && isDirty.value) {\n doEmit()\n } else if (!disposition && isDirty.value) {\n emit('update:modelValue', val)\n emit('update:model-value', val)\n confirmationBus.emit('hide')\n isDirty.value = false\n }\n if (!isValid.value) {\n confirmationBus.emit('hide')\n } else {\n emit('update:modelValue', val)\n emit('update:model-value', val)\n confirmationBus.emit('hide')\n isDirty.value = false\n }\n })\n confirmationBus.emit('show')\n } else {\n emit('update:modelValue', val)\n emit('update:model-value', val)\n }\n },\n })\n watch(conditions, () => updateIsDirty(), { immediate: true, deep: true })\n watch(operator, () => updateIsDirty(), { immediate: true, deep: true })\n watch(updatedOperator, () => updateIsDirty(), { immediate: true, deep: true })\n watch(updatedConditions, () => updateIsDirty(), { immediate: true, deep: true })\n watch(updatedFilterGroup, () => updateIsDirty(), { immediate: true, deep: true })\n watch(modelValue, (is, was) => {\n if (is && is !== was) {\n updatedOperator.value = String(operator.value) as FilterGroupOperator\n updatedConditions.value = Array.from(toRaw(conditions.value))\n }\n })\n const doReset = () => {\n updatedOperator.value = String(operator.value) as FilterGroupOperator\n updatedConditions.value = Array.from(toRaw(conditions.value))\n nextTick(() => updateIsDirty())\n }\n const doClear = () => {\n updatedConditions.value = []\n nextTick(() => updateIsDirty())\n }\n const t = useI18n()\n confirmationBus.on('show', () => {\n showDispositionDialog.value = true\n })\n confirmationBus.on('hide', () => {\n showDispositionDialog.value = false\n })\n const confirmationDialogBindings = computed<VDialogPublicProps>(() => ({\n modelValue: showDispositionDialog.value,\n persistent: true,\n fullscreen: xs.value,\n contained: !xs.value,\n maxWidth: 500,\n scrim: true,\n }))\n const confirmationEmptyStateBindings = computed<VEmptyStatePublicProps>(() => ({\n image: warningSvg,\n title: t('lucid.resourceful.index.filtersControls.dispositionDialog.headline'),\n text: t('lucid.resourceful.index.filtersControls.dispositionDialog.title'),\n }))\n const saveDispositionButtonBindings = computed<ControlButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value),\n defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n stripUndefinedValuesFromObject(saveButton.value),\n { cta: t('general.save') },\n { onClick: () => confirmationBus.emit('dispositioned', true) }\n )\n )\n const discardDispositionButtonBindings = computed<ControlButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value),\n defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n stripUndefinedValuesFromObject(discardButton.value),\n { cta: t('general.discard') },\n { onClick: () => confirmationBus.emit('dispositioned', false) }\n )\n )\n const invalidDialogBindings = computed<VDialogPublicProps>(() => ({\n modelValue: showInvalidStateDialog.value,\n persistent: false,\n fullscreen: xs.value,\n contained: !xs.value,\n maxWidth: 500,\n scrim: true,\n ...{\n 'onUpdate:modelValue': (val: boolean) => {\n showInvalidStateDialog.value = val\n },\n 'onUpdate:model-value': (val: boolean) => {\n showInvalidStateDialog.value = val\n },\n },\n }))\n const invalidEmptyStateBindings = computed<VEmptyStatePublicProps>(() => ({\n title: t('lucid.resourceful.index.filtersControls.invalidDialog.headline'),\n text: t('lucid.resourceful.index.filtersControls.invalidDialog.title'),\n class: ['pt-5', 'pb-0'],\n }))\n const invalidAckButtonBindings = computed<ControlButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value),\n {\n color: 'surface-light',\n cta: t('general.ok'),\n prependIcon: () => h(SvgIcon, { d: mdiThumbUp }),\n },\n {\n onClick: () => {\n showInvalidStateDialog.value = false\n updateIsDirty()\n },\n }\n )\n )\n const FilterGroupOperatorButtonToggleBaseBindings = computed<\n Omit<FilterGroupOperatorButtonTogglePublicProps, 'modelValue'>\n >(() =>\n stripUndefinedValuesFromObject({\n color: saveDispositionButtonBindings.value.color,\n size: dispositionButtons.value.size,\n elevation: dispositionButtons.value.elevation,\n density: dispositionButtons.value.density,\n iconAnd: iconAnd.value,\n iconOr: iconOr.value,\n })\n )\n const areaWidth = computed(() => (screenWidth.value < 800 ? screenWidth.value : 800))\n const addGroupButtonBindings = computed<ControlButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value),\n {\n cta: t('lucid.resourceful.index.filtersControls.addGroup'),\n prependIcon: () => h(SvgIcon, { d: mdiCardPlusOutline }),\n color: 'surface-light',\n },\n {\n onClick: () => {\n updatedConditions.value.push({\n operator: 'AND',\n conditions: [],\n })\n },\n class: ['me-2'],\n }\n )\n )\n const addConditionButtonBindings = computed<ControlButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value),\n {\n cta: t('lucid.resourceful.index.filtersControls.addCondition'),\n prependIcon: () => h(SvgIcon, { d: mdiFilterPlus }),\n color: 'surface-light',\n },\n {\n onClick: () => {\n updatedConditions.value.push({\n field: '',\n type: '',\n operator: '',\n arguments: [],\n } as any)\n },\n }\n )\n )\n reactivityBus.on('updated', () => {\n nextTick(() => {\n updateIsDirty()\n updateIsValid()\n })\n })\n return () => [\n h(\n VNavigationDrawer,\n {\n 'modelValue': visibility.value,\n 'onUpdate:modelValue': (val: boolean) => {\n visibility.value = val\n },\n 'permanent': false,\n 'persistent': false,\n 'temporary': true,\n 'absolute': true,\n 'width': areaWidth.value,\n 'color': color.value,\n },\n () =>\n h('div', { class: ['d-flex', 'flex-column', 'h-100'] }, [\n h(\n VToolbar,\n { color: color.value || 'transparent', class: ['flex-grow-0'], density: 'compact' },\n () => [\n h(VToolbarItems, { class: ['flex-grow-1'] }, () => [\n h(\n FilterGroupOperatorControl,\n deepmerge(FilterGroupOperatorButtonToggleBaseBindings.value, {\n 'modelValue': updatedOperator.value,\n 'onUpdate:modelValue': (val: FilterGroupOperator) =>\n (updatedOperator.value = val),\n 'onUpdate:model-value': (val: FilterGroupOperator) =>\n (updatedOperator.value = val),\n 'elevation': 0,\n 'rounded': 0,\n })\n ),\n h(VMenu, {} satisfies VMenuPublicProps, {\n activator: ({ props: menuButtonProps }: { props: { [key: string]: any } }) =>\n h(\n VBtn,\n {\n ...menuButtonProps,\n variant: 'text',\n },\n () => [\n h(VIcon, {\n icon: () => h(SvgIcon, { d: mdiPlus }),\n class: [\n {\n 'me-2': smAndUp.value,\n },\n ],\n }),\n smAndUp.value ? t('general.add') : null,\n ]\n ),\n default: () =>\n h(VList, { class: ['py-0'] }, () => [\n h(VListItem, {\n prependIcon: () => h(SvgIcon, { d: mdiCardPlusOutline }),\n title: t('lucid.resourceful.index.filtersControls.addGroup'),\n onClick: () => {\n updatedConditions.value.push({\n operator: 'AND',\n conditions: [],\n })\n },\n }),\n h(VListItem, {\n prependIcon: () => h(SvgIcon, { d: mdiFilterPlus }),\n title: t('lucid.resourceful.index.filtersControls.addCondition'),\n onClick: () => {\n updatedConditions.value.push({\n field: '',\n type: '',\n operator: '',\n arguments: [],\n } as any)\n },\n }),\n ]),\n }),\n ]),\n h(VToolbarItems, {}, () => [\n h(VBtn, {\n icon: () => h(SvgIcon, { d: mdiNotificationClearAll }),\n variant: 'text',\n disabled: updatedConditions.value.length === 0,\n onClick: () => {\n doClear()\n },\n }),\n h(VBtn, {\n icon: () => h(SvgIcon, { d: mdiBackupRestore }),\n variant: 'text',\n disabled: !isDirty.value,\n onClick: () => {\n doReset()\n },\n }),\n h(VBtn, {\n icon: () =>\n !isValid.value\n ? h(VImg, { src: warningSvg })\n : h(SvgIcon, { d: mdiContentSave }),\n variant: 'text',\n onClick: () => {\n if (isDirty.value) {\n doEmit()\n isDirty.value = false\n }\n },\n }),\n h(VBtn, {\n icon: () => h(SvgIcon, { d: mdiClose }),\n variant: 'text',\n onClick: () => (visibility.value = false),\n }),\n ]),\n ]\n ),\n h(VDivider, { class: ['flex-grow-0'] }),\n h(\n VSheet,\n { color: 'transparent', class: ['flex-grow-1', 'overflow-y-auto', 'py-1'] },\n () => [\n updatedConditions.value.length === 0\n ? h(FilterGroupEmptyState, {\n 'buttonStyles': dispositionButtons.value,\n 'onClick:add:condition': () => {\n updatedConditions.value.push({\n field: '',\n type: '',\n operator: '',\n arguments: [],\n } as any)\n },\n 'onClick:add:group': () => {\n updatedConditions.value.push({\n operator: 'AND',\n conditions: [],\n })\n },\n })\n : null,\n ...Array.from(updatedConditions.value).map((c, i) =>\n h(FilterGroupConditionElement, {\n modelValue: c,\n reactivityBus,\n labels: labels.value,\n filterableFields: filterableFields.value,\n dispositionButtons: dispositionButtons.value,\n iconAnd: iconAnd.value,\n iconOr: iconOr.value,\n ...{\n 'onUpdate:modelValue': (val: any) => {\n updatedConditions.value[i] = val\n },\n 'onClick:delete': () => {\n const updated = Array.from(toRaw(updatedConditions.value))\n updated.splice(i, 1)\n updatedConditions.value = updated\n },\n },\n })\n ),\n updatedConditions.value.length > 0\n ? h(\n VSheet,\n { color: 'transparent', class: ['d-flex', 'justify-end', 'px-3'] },\n () => [\n h(ControlButton, addGroupButtonBindings.value),\n h(ControlButton, addConditionButtonBindings.value),\n ]\n )\n : null,\n ]\n ),\n h(VDivider, { class: ['flex-grow-0'] }),\n h(\n VToolbar,\n { color: color.value || 'transparent', class: ['flex-grow-0'], density: 'compact' },\n () => [\n h(VSpacer),\n h(VToolbarItems, {}, () => [\n h(VBtn, {\n icon: () =>\n !isValid.value\n ? h(VImg, { src: warningSvg })\n : h(SvgIcon, { d: mdiContentSaveCheck }),\n variant: 'text',\n onClick: () => {\n if (isDirty.value) {\n doEmit()\n nextTick(() => {\n isDirty.value = false\n visibility.value = false\n })\n } else {\n nextTick(() => {\n visibility.value = false\n })\n }\n },\n }),\n ]),\n ]\n ),\n h(VDivider, { class: ['flex-grow-0'] }),\n ])\n ),\n h(VDialog, confirmationDialogBindings.value, () =>\n h(VCard, {}, () =>\n h(VEmptyState, confirmationEmptyStateBindings.value, {\n actions: () => [\n h(ControlButton, discardDispositionButtonBindings.value),\n h(ControlButton, saveDispositionButtonBindings.value),\n ],\n })\n )\n ),\n h(VDialog, invalidDialogBindings.value, () =>\n h(VCard, {}, () =>\n h(VEmptyState, invalidEmptyStateBindings.value, {\n actions: () => [h(ControlButton, invalidAckButtonBindings.value)],\n media: () => h(VImg, { src: errorSvg, class: ['mb-3'] }),\n })\n )\n ),\n ]\n },\n})\n","// Utilities\nimport { onBeforeUpdate, ref } from 'vue';\n\n// Types\n\nexport function useRefs() {\n const refs = ref([]);\n onBeforeUpdate(() => refs.value = []);\n function updateRef(e, i) {\n refs.value[i] = e;\n }\n return {\n refs,\n updateRef\n };\n}\n//# sourceMappingURL=refs.js.map","import { mergeProps as _mergeProps, createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from \"vue\";\n// Styles\nimport \"./VPagination.css\";\n\n// Components\nimport { VBtn } from \"../VBtn/index.js\"; // Composables\nimport { useDisplay } from \"../../composables/index.js\";\nimport { makeBorderProps } from \"../../composables/border.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { provideDefaults } from \"../../composables/defaults.js\";\nimport { makeDensityProps } from \"../../composables/density.js\";\nimport { makeElevationProps } from \"../../composables/elevation.js\";\nimport { IconValue } from \"../../composables/icons.js\";\nimport { useLocale, useRtl } from \"../../composables/locale.js\";\nimport { useProxiedModel } from \"../../composables/proxiedModel.js\";\nimport { useRefs } from \"../../composables/refs.js\";\nimport { useResizeObserver } from \"../../composables/resizeObserver.js\";\nimport { makeRoundedProps } from \"../../composables/rounded.js\";\nimport { makeSizeProps } from \"../../composables/size.js\";\nimport { makeTagProps } from \"../../composables/tag.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\";\nimport { makeVariantProps } from \"../../composables/variant.js\"; // Utilities\nimport { computed, nextTick, shallowRef, toRef } from 'vue';\nimport { createRange, genericComponent, keyValues, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVPaginationProps = propsFactory({\n activeColor: String,\n start: {\n type: [Number, String],\n default: 1\n },\n modelValue: {\n type: Number,\n default: props => props.start\n },\n disabled: Boolean,\n length: {\n type: [Number, String],\n default: 1,\n validator: val => val % 1 === 0\n },\n totalVisible: [Number, String],\n firstIcon: {\n type: IconValue,\n default: '$first'\n },\n prevIcon: {\n type: IconValue,\n default: '$prev'\n },\n nextIcon: {\n type: IconValue,\n default: '$next'\n },\n lastIcon: {\n type: IconValue,\n default: '$last'\n },\n ariaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.root'\n },\n pageAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.page'\n },\n currentPageAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.currentPage'\n },\n firstAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.first'\n },\n previousAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.previous'\n },\n nextAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.next'\n },\n lastAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.last'\n },\n ellipsis: {\n type: String,\n default: '...'\n },\n showFirstLastPage: Boolean,\n ...makeBorderProps(),\n ...makeComponentProps(),\n ...makeDensityProps(),\n ...makeElevationProps(),\n ...makeRoundedProps(),\n ...makeSizeProps(),\n ...makeTagProps({\n tag: 'nav'\n }),\n ...makeThemeProps(),\n ...makeVariantProps({\n variant: 'text'\n })\n}, 'VPagination');\nexport const VPagination = genericComponent()({\n name: 'VPagination',\n props: makeVPaginationProps(),\n emits: {\n 'update:modelValue': value => true,\n first: value => true,\n prev: value => true,\n next: value => true,\n last: value => true\n },\n setup(props, _ref) {\n let {\n slots,\n emit\n } = _ref;\n const page = useProxiedModel(props, 'modelValue');\n const {\n t,\n n\n } = useLocale();\n const {\n isRtl\n } = useRtl();\n const {\n themeClasses\n } = provideTheme(props);\n const {\n width\n } = useDisplay();\n const maxButtons = shallowRef(-1);\n provideDefaults(undefined, {\n scoped: true\n });\n const {\n resizeRef\n } = useResizeObserver(entries => {\n if (!entries.length) return;\n const {\n target,\n contentRect\n } = entries[0];\n const firstItem = target.querySelector('.v-pagination__list > *');\n if (!firstItem) return;\n const totalWidth = contentRect.width;\n const itemWidth = firstItem.offsetWidth + parseFloat(getComputedStyle(firstItem).marginRight) * 2;\n maxButtons.value = getMax(totalWidth, itemWidth);\n });\n const length = computed(() => parseInt(props.length, 10));\n const start = computed(() => parseInt(props.start, 10));\n const totalVisible = computed(() => {\n if (props.totalVisible != null) return parseInt(props.totalVisible, 10);else if (maxButtons.value >= 0) return maxButtons.value;\n return getMax(width.value, 58);\n });\n function getMax(totalWidth, itemWidth) {\n const minButtons = props.showFirstLastPage ? 5 : 3;\n return Math.max(0, Math.floor(\n // Round to two decimal places to avoid floating point errors\n Number(((totalWidth - itemWidth * minButtons) / itemWidth).toFixed(2))));\n }\n const range = computed(() => {\n if (length.value <= 0 || isNaN(length.value) || length.value > Number.MAX_SAFE_INTEGER) return [];\n if (totalVisible.value <= 0) return [];else if (totalVisible.value === 1) return [page.value];\n if (length.value <= totalVisible.value) {\n return createRange(length.value, start.value);\n }\n const even = totalVisible.value % 2 === 0;\n const middle = even ? totalVisible.value / 2 : Math.floor(totalVisible.value / 2);\n const left = even ? middle : middle + 1;\n const right = length.value - middle;\n if (left - page.value >= 0) {\n return [...createRange(Math.max(1, totalVisible.value - 1), start.value), props.ellipsis, length.value];\n } else if (page.value - right >= (even ? 1 : 0)) {\n const rangeLength = totalVisible.value - 1;\n const rangeStart = length.value - rangeLength + start.value;\n return [start.value, props.ellipsis, ...createRange(rangeLength, rangeStart)];\n } else {\n const rangeLength = Math.max(1, totalVisible.value - 2);\n const rangeStart = rangeLength === 1 ? page.value : page.value - Math.ceil(rangeLength / 2) + start.value;\n return [start.value, props.ellipsis, ...createRange(rangeLength, rangeStart), props.ellipsis, length.value];\n }\n });\n\n // TODO: 'first' | 'prev' | 'next' | 'last' does not work here?\n function setValue(e, value, event) {\n e.preventDefault();\n page.value = value;\n event && emit(event, value);\n }\n const {\n refs,\n updateRef\n } = useRefs();\n provideDefaults({\n VPaginationBtn: {\n color: toRef(() => props.color),\n border: toRef(() => props.border),\n density: toRef(() => props.density),\n size: toRef(() => props.size),\n variant: toRef(() => props.variant),\n rounded: toRef(() => props.rounded),\n elevation: toRef(() => props.elevation)\n }\n });\n const items = computed(() => {\n return range.value.map((item, index) => {\n const ref = e => updateRef(e, index);\n if (typeof item === 'string') {\n return {\n isActive: false,\n key: `ellipsis-${index}`,\n page: item,\n props: {\n ref,\n ellipsis: true,\n icon: true,\n disabled: true\n }\n };\n } else {\n const isActive = item === page.value;\n return {\n isActive,\n key: item,\n page: n(item),\n props: {\n ref,\n ellipsis: false,\n icon: true,\n disabled: !!props.disabled || Number(props.length) < 2,\n color: isActive ? props.activeColor : props.color,\n 'aria-current': isActive,\n 'aria-label': t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, item),\n onClick: e => setValue(e, item)\n }\n };\n }\n });\n });\n const controls = computed(() => {\n const prevDisabled = !!props.disabled || page.value <= start.value;\n const nextDisabled = !!props.disabled || page.value >= start.value + length.value - 1;\n return {\n first: props.showFirstLastPage ? {\n icon: isRtl.value ? props.lastIcon : props.firstIcon,\n onClick: e => setValue(e, start.value, 'first'),\n disabled: prevDisabled,\n 'aria-label': t(props.firstAriaLabel),\n 'aria-disabled': prevDisabled\n } : undefined,\n prev: {\n icon: isRtl.value ? props.nextIcon : props.prevIcon,\n onClick: e => setValue(e, page.value - 1, 'prev'),\n disabled: prevDisabled,\n 'aria-label': t(props.previousAriaLabel),\n 'aria-disabled': prevDisabled\n },\n next: {\n icon: isRtl.value ? props.prevIcon : props.nextIcon,\n onClick: e => setValue(e, page.value + 1, 'next'),\n disabled: nextDisabled,\n 'aria-label': t(props.nextAriaLabel),\n 'aria-disabled': nextDisabled\n },\n last: props.showFirstLastPage ? {\n icon: isRtl.value ? props.firstIcon : props.lastIcon,\n onClick: e => setValue(e, start.value + length.value - 1, 'last'),\n disabled: nextDisabled,\n 'aria-label': t(props.lastAriaLabel),\n 'aria-disabled': nextDisabled\n } : undefined\n };\n });\n function updateFocus() {\n const currentIndex = page.value - start.value;\n refs.value[currentIndex]?.$el.focus();\n }\n function onKeydown(e) {\n if (e.key === keyValues.left && !props.disabled && page.value > Number(props.start)) {\n page.value = page.value - 1;\n nextTick(updateFocus);\n } else if (e.key === keyValues.right && !props.disabled && page.value < start.value + length.value - 1) {\n page.value = page.value + 1;\n nextTick(updateFocus);\n }\n }\n useRender(() => _createVNode(props.tag, {\n \"ref\": resizeRef,\n \"class\": _normalizeClass(['v-pagination', themeClasses.value, props.class]),\n \"style\": _normalizeStyle(props.style),\n \"role\": \"navigation\",\n \"aria-label\": t(props.ariaLabel),\n \"onKeydown\": onKeydown,\n \"data-test\": \"v-pagination-root\"\n }, {\n default: () => [_createElementVNode(\"ul\", {\n \"class\": \"v-pagination__list\"\n }, [props.showFirstLastPage && _createElementVNode(\"li\", {\n \"key\": \"first\",\n \"class\": \"v-pagination__first\",\n \"data-test\": \"v-pagination-first\"\n }, [slots.first ? slots.first(controls.value.first) : _createVNode(VBtn, _mergeProps({\n \"_as\": \"VPaginationBtn\"\n }, controls.value.first), null)]), _createElementVNode(\"li\", {\n \"key\": \"prev\",\n \"class\": \"v-pagination__prev\",\n \"data-test\": \"v-pagination-prev\"\n }, [slots.prev ? slots.prev(controls.value.prev) : _createVNode(VBtn, _mergeProps({\n \"_as\": \"VPaginationBtn\"\n }, controls.value.prev), null)]), items.value.map((item, index) => _createElementVNode(\"li\", {\n \"key\": item.key,\n \"class\": _normalizeClass(['v-pagination__item', {\n 'v-pagination__item--is-active': item.isActive\n }]),\n \"data-test\": \"v-pagination-item\"\n }, [slots.item ? slots.item(item) : _createVNode(VBtn, _mergeProps({\n \"_as\": \"VPaginationBtn\"\n }, item.props), {\n default: () => [item.page]\n })])), _createElementVNode(\"li\", {\n \"key\": \"next\",\n \"class\": \"v-pagination__next\",\n \"data-test\": \"v-pagination-next\"\n }, [slots.next ? slots.next(controls.value.next) : _createVNode(VBtn, _mergeProps({\n \"_as\": \"VPaginationBtn\"\n }, controls.value.next), null)]), props.showFirstLastPage && _createElementVNode(\"li\", {\n \"key\": \"last\",\n \"class\": \"v-pagination__last\",\n \"data-test\": \"v-pagination-last\"\n }, [slots.last ? slots.last(controls.value.last) : _createVNode(VBtn, _mergeProps({\n \"_as\": \"VPaginationBtn\"\n }, controls.value.last), null)])])]\n }));\n return {};\n }\n});\n//# sourceMappingURL=VPagination.js.map","// Composables\nimport { useProxiedModel } from \"../../../composables/proxiedModel.js\"; // Utilities\nimport { computed, inject, provide, watch } from 'vue';\nimport { clamp, getCurrentInstance, propsFactory } from \"../../../util/index.js\"; // Types\nexport const makeDataTablePaginateProps = propsFactory({\n page: {\n type: [Number, String],\n default: 1\n },\n itemsPerPage: {\n type: [Number, String],\n default: 10\n }\n}, 'DataTable-paginate');\nconst VDataTablePaginationSymbol = Symbol.for('vuetify:data-table-pagination');\nexport function createPagination(props) {\n const page = useProxiedModel(props, 'page', undefined, value => Number(value ?? 1));\n const itemsPerPage = useProxiedModel(props, 'itemsPerPage', undefined, value => Number(value ?? 10));\n return {\n page,\n itemsPerPage\n };\n}\nexport function providePagination(options) {\n const {\n page,\n itemsPerPage,\n itemsLength\n } = options;\n const startIndex = computed(() => {\n if (itemsPerPage.value === -1) return 0;\n return itemsPerPage.value * (page.value - 1);\n });\n const stopIndex = computed(() => {\n if (itemsPerPage.value === -1) return itemsLength.value;\n return Math.min(itemsLength.value, startIndex.value + itemsPerPage.value);\n });\n const pageCount = computed(() => {\n if (itemsPerPage.value === -1 || itemsLength.value === 0) return 1;\n return Math.ceil(itemsLength.value / itemsPerPage.value);\n });\n\n // Don't run immediately, items may not have been loaded yet: #17966\n watch([page, pageCount], () => {\n if (page.value > pageCount.value) {\n page.value = pageCount.value;\n }\n });\n function setItemsPerPage(value) {\n itemsPerPage.value = value;\n page.value = 1;\n }\n function nextPage() {\n page.value = clamp(page.value + 1, 1, pageCount.value);\n }\n function prevPage() {\n page.value = clamp(page.value - 1, 1, pageCount.value);\n }\n function setPage(value) {\n page.value = clamp(value, 1, pageCount.value);\n }\n const data = {\n page,\n itemsPerPage,\n startIndex,\n stopIndex,\n pageCount,\n itemsLength,\n nextPage,\n prevPage,\n setPage,\n setItemsPerPage\n };\n provide(VDataTablePaginationSymbol, data);\n return data;\n}\nexport function usePagination() {\n const data = inject(VDataTablePaginationSymbol);\n if (!data) throw new Error('Missing pagination!');\n return data;\n}\nexport function usePaginatedItems(options) {\n const vm = getCurrentInstance('usePaginatedItems');\n const {\n items,\n startIndex,\n stopIndex,\n itemsPerPage\n } = options;\n const paginatedItems = computed(() => {\n if (itemsPerPage.value <= 0) return items.value;\n return items.value.slice(startIndex.value, stopIndex.value);\n });\n watch(paginatedItems, val => {\n vm.emit('update:currentItems', val);\n }, {\n immediate: true\n });\n return {\n paginatedItems\n };\n}\n//# sourceMappingURL=paginate.js.map","import { createElementVNode as _createElementVNode, createVNode as _createVNode, mergeProps as _mergeProps } from \"vue\";\n// Styles\nimport \"./VDataTableFooter.css\";\n\n// Components\nimport { VPagination } from \"../VPagination/index.js\";\nimport { VSelect } from \"../VSelect/index.js\"; // Composables\nimport { usePagination } from \"./composables/paginate.js\";\nimport { IconValue } from \"../../composables/icons.js\";\nimport { useLocale } from \"../../composables/locale.js\"; // Utilities\nimport { computed } from 'vue';\nimport { genericComponent, omit, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVDataTableFooterProps = propsFactory({\n color: String,\n prevIcon: {\n type: IconValue,\n default: '$prev'\n },\n nextIcon: {\n type: IconValue,\n default: '$next'\n },\n firstIcon: {\n type: IconValue,\n default: '$first'\n },\n lastIcon: {\n type: IconValue,\n default: '$last'\n },\n itemsPerPageText: {\n type: String,\n default: '$vuetify.dataFooter.itemsPerPageText'\n },\n pageText: {\n type: String,\n default: '$vuetify.dataFooter.pageText'\n },\n firstPageLabel: {\n type: String,\n default: '$vuetify.dataFooter.firstPage'\n },\n prevPageLabel: {\n type: String,\n default: '$vuetify.dataFooter.prevPage'\n },\n nextPageLabel: {\n type: String,\n default: '$vuetify.dataFooter.nextPage'\n },\n lastPageLabel: {\n type: String,\n default: '$vuetify.dataFooter.lastPage'\n },\n itemsPerPageOptions: {\n type: Array,\n default: () => [{\n value: 10,\n title: '10'\n }, {\n value: 25,\n title: '25'\n }, {\n value: 50,\n title: '50'\n }, {\n value: 100,\n title: '100'\n }, {\n value: -1,\n title: '$vuetify.dataFooter.itemsPerPageAll'\n }]\n },\n showCurrentPage: Boolean\n}, 'VDataTableFooter');\nexport const VDataTableFooter = genericComponent()({\n name: 'VDataTableFooter',\n props: makeVDataTableFooterProps(),\n setup(props, _ref) {\n let {\n slots\n } = _ref;\n const {\n t\n } = useLocale();\n const {\n page,\n pageCount,\n startIndex,\n stopIndex,\n itemsLength,\n itemsPerPage,\n setItemsPerPage\n } = usePagination();\n const itemsPerPageOptions = computed(() => props.itemsPerPageOptions.map(option => {\n if (typeof option === 'number') {\n return {\n value: option,\n title: option === -1 ? t('$vuetify.dataFooter.itemsPerPageAll') : String(option)\n };\n }\n return {\n ...option,\n title: !isNaN(Number(option.title)) ? option.title : t(option.title)\n };\n }));\n useRender(() => {\n const paginationProps = VPagination.filterProps(props);\n return _createElementVNode(\"div\", {\n \"class\": \"v-data-table-footer\"\n }, [slots.prepend?.(), _createElementVNode(\"div\", {\n \"class\": \"v-data-table-footer__items-per-page\"\n }, [_createElementVNode(\"span\", null, [t(props.itemsPerPageText)]), _createVNode(VSelect, {\n \"items\": itemsPerPageOptions.value,\n \"itemColor\": props.color,\n \"modelValue\": itemsPerPage.value,\n \"onUpdate:modelValue\": v => setItemsPerPage(Number(v)),\n \"density\": \"compact\",\n \"variant\": \"outlined\",\n \"aria-label\": t(props.itemsPerPageText),\n \"hideDetails\": true\n }, null)]), _createElementVNode(\"div\", {\n \"class\": \"v-data-table-footer__info\"\n }, [_createElementVNode(\"div\", null, [t(props.pageText, !itemsLength.value ? 0 : startIndex.value + 1, stopIndex.value, itemsLength.value)])]), _createElementVNode(\"div\", {\n \"class\": \"v-data-table-footer__pagination\"\n }, [_createVNode(VPagination, _mergeProps({\n \"modelValue\": page.value,\n \"onUpdate:modelValue\": $event => page.value = $event,\n \"density\": \"comfortable\",\n \"firstAriaLabel\": props.firstPageLabel,\n \"lastAriaLabel\": props.lastPageLabel,\n \"length\": pageCount.value,\n \"nextAriaLabel\": props.nextPageLabel,\n \"previousAriaLabel\": props.prevPageLabel,\n \"rounded\": true,\n \"showFirstLastPage\": true,\n \"totalVisible\": props.showCurrentPage ? 1 : 0,\n \"variant\": \"plain\"\n }, omit(paginationProps, ['color'])), null)])]);\n });\n return {};\n }\n});\n//# sourceMappingURL=VDataTableFooter.js.map","import { normalizeClass as _normalizeClass, createVNode as _createVNode } from \"vue\";\n// Utilities\nimport { convertToUnit, defineFunctionalComponent } from \"../../util/index.js\"; // Types\nexport const VDataTableColumn = defineFunctionalComponent({\n align: {\n type: String,\n default: 'start'\n },\n fixed: {\n type: [Boolean, String],\n default: false\n },\n fixedOffset: [Number, String],\n fixedEndOffset: [Number, String],\n height: [Number, String],\n lastFixed: Boolean,\n firstFixedEnd: Boolean,\n noPadding: Boolean,\n indent: [Number, String],\n empty: Boolean,\n tag: String,\n width: [Number, String],\n maxWidth: [Number, String],\n nowrap: Boolean\n}, (props, _ref) => {\n let {\n slots\n } = _ref;\n const Tag = props.tag ?? 'td';\n const fixedSide = typeof props.fixed === 'string' ? props.fixed : props.fixed ? 'start' : 'none';\n return _createVNode(Tag, {\n \"class\": _normalizeClass(['v-data-table__td', {\n 'v-data-table-column--fixed': fixedSide === 'start',\n 'v-data-table-column--fixed-end': fixedSide === 'end',\n 'v-data-table-column--last-fixed': props.lastFixed,\n 'v-data-table-column--first-fixed-end': props.firstFixedEnd,\n 'v-data-table-column--no-padding': props.noPadding,\n 'v-data-table-column--nowrap': props.nowrap,\n 'v-data-table-column--empty': props.empty\n }, `v-data-table-column--align-${props.align}`]),\n \"style\": {\n height: convertToUnit(props.height),\n width: convertToUnit(props.width),\n maxWidth: convertToUnit(props.maxWidth),\n left: fixedSide === 'start' ? convertToUnit(props.fixedOffset || null) : undefined,\n right: fixedSide === 'end' ? convertToUnit(props.fixedEndOffset || null) : undefined,\n paddingInlineStart: props.indent ? convertToUnit(props.indent) : undefined\n }\n }, {\n default: () => [slots.default?.()]\n });\n});\n//# sourceMappingURL=VDataTableColumn.js.map","// Utilities\nimport { capitalize, inject, provide, ref, watchEffect } from 'vue';\nimport { consoleError, propsFactory } from \"../../../util/index.js\"; // Types\nexport const makeDataTableHeaderProps = propsFactory({\n headers: Array\n}, 'DataTable-header');\nexport const VDataTableHeadersSymbol = Symbol.for('vuetify:data-table-headers');\nconst defaultHeader = {\n title: '',\n sortable: false\n};\nconst defaultActionHeader = {\n ...defaultHeader,\n width: 48\n};\nfunction priorityQueue() {\n let arr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n const queue = arr.map(element => ({\n element,\n priority: 0\n }));\n return {\n enqueue: (element, priority) => {\n let added = false;\n for (let i = 0; i < queue.length; i++) {\n const item = queue[i];\n if (item.priority > priority) {\n queue.splice(i, 0, {\n element,\n priority\n });\n added = true;\n break;\n }\n }\n if (!added) queue.push({\n element,\n priority\n });\n },\n size: () => queue.length,\n count: () => {\n let count = 0;\n if (!queue.length) return 0;\n const whole = Math.floor(queue[0].priority);\n for (let i = 0; i < queue.length; i++) {\n if (Math.floor(queue[i].priority) === whole) count += 1;\n }\n return count;\n },\n dequeue: () => {\n return queue.shift();\n }\n };\n}\nfunction extractLeaves(item) {\n let columns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n if (!item.children) {\n columns.push(item);\n } else {\n for (const child of item.children) {\n extractLeaves(child, columns);\n }\n }\n return columns;\n}\nfunction extractKeys(headers) {\n let keys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Set();\n for (const item of headers) {\n if (item.key) keys.add(item.key);\n if (item.children) {\n extractKeys(item.children, keys);\n }\n }\n return keys;\n}\nfunction getDefaultItem(item) {\n if (!item.key) return undefined;\n if (item.key === 'data-table-group') return defaultHeader;\n if (['data-table-expand', 'data-table-select'].includes(item.key)) return defaultActionHeader;\n return undefined;\n}\nfunction getDepth(item) {\n let depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n if (!item.children) return depth;\n return Math.max(depth, ...item.children.map(child => getDepth(child, depth + 1)));\n}\nfunction parseFixedColumns(items) {\n let seenFixed = false;\n function setFixed(item, side) {\n let parentFixedSide = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'none';\n if (!item) return;\n if (parentFixedSide !== 'none') {\n item.fixed = parentFixedSide;\n }\n\n // normalize to simplify logic below\n if (item.fixed === true) {\n item.fixed = 'start';\n }\n if (item.fixed === side) {\n if (item.children) {\n if (side === 'start') {\n for (let i = item.children.length - 1; i >= 0; i--) {\n setFixed(item.children[i], side, side);\n }\n } else {\n for (let i = 0; i < item.children.length; i++) {\n setFixed(item.children[i], side, side);\n }\n }\n } else {\n if (!seenFixed && side === 'start') {\n item.lastFixed = true;\n } else if (!seenFixed && side === 'end') {\n item.firstFixedEnd = true;\n } else if (isNaN(Number(item.width))) {\n consoleError(`Multiple fixed columns should have a static width (key: ${item.key})`);\n } else {\n item.minWidth = Math.max(Number(item.width) || 0, Number(item.minWidth) || 0);\n }\n seenFixed = true;\n }\n } else {\n if (item.children) {\n if (side === 'start') {\n for (let i = item.children.length - 1; i >= 0; i--) {\n setFixed(item.children[i], side);\n }\n } else {\n for (let i = 0; i < item.children.length; i++) {\n setFixed(item.children[i], side);\n }\n }\n } else {\n seenFixed = false;\n }\n }\n }\n for (let i = items.length - 1; i >= 0; i--) {\n setFixed(items[i], 'start');\n }\n for (let i = 0; i < items.length; i++) {\n setFixed(items[i], 'end');\n }\n let fixedOffset = 0;\n for (let i = 0; i < items.length; i++) {\n fixedOffset = setFixedOffset(items[i], fixedOffset);\n }\n let fixedEndOffset = 0;\n for (let i = items.length - 1; i >= 0; i--) {\n fixedEndOffset = setFixedEndOffset(items[i], fixedEndOffset);\n }\n}\nfunction setFixedOffset(item) {\n let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n if (!item) return offset;\n if (item.children) {\n item.fixedOffset = offset;\n for (const child of item.children) {\n offset = setFixedOffset(child, offset);\n }\n } else if (item.fixed && item.fixed !== 'end') {\n item.fixedOffset = offset;\n offset += parseFloat(item.width || '0') || 0;\n }\n return offset;\n}\nfunction setFixedEndOffset(item) {\n let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n if (!item) return offset;\n if (item.children) {\n item.fixedEndOffset = offset;\n for (const child of item.children) {\n offset = setFixedEndOffset(child, offset);\n }\n } else if (item.fixed === 'end') {\n item.fixedEndOffset = offset;\n offset += parseFloat(item.width || '0') || 0;\n }\n return offset;\n}\nfunction parse(items, maxDepth) {\n const headers = [];\n let currentDepth = 0;\n const queue = priorityQueue(items);\n while (queue.size() > 0) {\n let rowSize = queue.count();\n const row = [];\n let fraction = 1;\n while (rowSize > 0) {\n const {\n element: item,\n priority\n } = queue.dequeue();\n const diff = maxDepth - currentDepth - getDepth(item);\n row.push({\n ...item,\n rowspan: diff ?? 1,\n colspan: item.children ? extractLeaves(item).length : 1\n });\n if (item.children) {\n for (const child of item.children) {\n // This internally sorts items that are on the same priority \"row\"\n const sort = priority % 1 + fraction / Math.pow(10, currentDepth + 2);\n queue.enqueue(child, currentDepth + diff + sort);\n }\n }\n fraction += 1;\n rowSize -= 1;\n }\n currentDepth += 1;\n headers.push(row);\n }\n const columns = items.map(item => extractLeaves(item)).flat();\n return {\n columns,\n headers\n };\n}\nfunction convertToInternalHeaders(items) {\n const internalHeaders = [];\n for (const item of items) {\n const defaultItem = {\n ...getDefaultItem(item),\n ...item\n };\n const key = defaultItem.key ?? (typeof defaultItem.value === 'string' ? defaultItem.value : null);\n const value = defaultItem.value ?? key ?? null;\n const internalItem = {\n ...defaultItem,\n key,\n value,\n sortable: defaultItem.sortable ?? (defaultItem.key != null || !!defaultItem.sort),\n children: defaultItem.children ? convertToInternalHeaders(defaultItem.children) : undefined\n };\n internalHeaders.push(internalItem);\n }\n return internalHeaders;\n}\nexport function createHeaders(props, options) {\n const headers = ref([]);\n const columns = ref([]);\n const sortFunctions = ref({});\n const sortRawFunctions = ref({});\n const filterFunctions = ref({});\n watchEffect(() => {\n const _headers = props.headers || Object.keys(props.items[0] ?? {}).map(key => ({\n key,\n title: capitalize(key)\n }));\n const items = _headers.slice();\n const keys = extractKeys(items);\n if (options?.groupBy?.value.length && !keys.has('data-table-group')) {\n items.unshift({\n key: 'data-table-group',\n title: 'Group'\n });\n }\n if (options?.showSelect?.value && !keys.has('data-table-select')) {\n items.unshift({\n key: 'data-table-select'\n });\n }\n if (options?.showExpand?.value && !keys.has('data-table-expand')) {\n items.push({\n key: 'data-table-expand'\n });\n }\n const internalHeaders = convertToInternalHeaders(items);\n parseFixedColumns(internalHeaders);\n const maxDepth = Math.max(...internalHeaders.map(item => getDepth(item))) + 1;\n const parsed = parse(internalHeaders, maxDepth);\n headers.value = parsed.headers;\n columns.value = parsed.columns;\n const flatHeaders = parsed.headers.flat(1);\n for (const header of flatHeaders) {\n if (!header.key) continue;\n if (header.sortable) {\n if (header.sort) {\n sortFunctions.value[header.key] = header.sort;\n }\n if (header.sortRaw) {\n sortRawFunctions.value[header.key] = header.sortRaw;\n }\n }\n if (header.filter) {\n filterFunctions.value[header.key] = header.filter;\n }\n }\n });\n const data = {\n headers,\n columns,\n sortFunctions,\n sortRawFunctions,\n filterFunctions\n };\n provide(VDataTableHeadersSymbol, data);\n return data;\n}\nexport function useHeaders() {\n const data = inject(VDataTableHeadersSymbol);\n if (!data) throw new Error('Missing headers!');\n return data;\n}\n//# sourceMappingURL=headers.js.map","// Composables\nimport { useProxiedModel } from \"../../../composables/proxiedModel.js\"; // Utilities\nimport { computed, inject, provide, shallowRef, toRef } from 'vue';\nimport { deepEqual, isPrimitive, propsFactory, wrapInArray } from \"../../../util/index.js\"; // Types\nconst singleSelectStrategy = {\n showSelectAll: false,\n allSelected: () => [],\n select: _ref => {\n let {\n items,\n value\n } = _ref;\n return new Set(value ? [items[0]?.value] : []);\n },\n selectAll: _ref2 => {\n let {\n selected\n } = _ref2;\n return selected;\n }\n};\nconst pageSelectStrategy = {\n showSelectAll: true,\n allSelected: _ref3 => {\n let {\n currentPage\n } = _ref3;\n return currentPage;\n },\n select: _ref4 => {\n let {\n items,\n value,\n selected\n } = _ref4;\n for (const item of items) {\n if (value) selected.add(item.value);else selected.delete(item.value);\n }\n return selected;\n },\n selectAll: _ref5 => {\n let {\n value,\n currentPage,\n selected\n } = _ref5;\n return pageSelectStrategy.select({\n items: currentPage,\n value,\n selected\n });\n }\n};\nconst allSelectStrategy = {\n showSelectAll: true,\n allSelected: _ref6 => {\n let {\n allItems\n } = _ref6;\n return allItems;\n },\n select: _ref7 => {\n let {\n items,\n value,\n selected\n } = _ref7;\n for (const item of items) {\n if (value) selected.add(item.value);else selected.delete(item.value);\n }\n return selected;\n },\n selectAll: _ref8 => {\n let {\n value,\n allItems\n } = _ref8;\n return new Set(value ? allItems.map(item => item.value) : []);\n }\n};\nexport const makeDataTableSelectProps = propsFactory({\n showSelect: Boolean,\n selectStrategy: {\n type: [String, Object],\n default: 'page'\n },\n modelValue: {\n type: Array,\n default: () => []\n },\n valueComparator: Function\n}, 'DataTable-select');\nexport const VDataTableSelectionSymbol = Symbol.for('vuetify:data-table-selection');\nexport function provideSelection(props, _ref9) {\n let {\n allItems,\n currentPage\n } = _ref9;\n const selected = useProxiedModel(props, 'modelValue', props.modelValue, v => {\n const customComparator = props.valueComparator;\n if (customComparator) {\n return new Set(wrapInArray(v).map(v => {\n return allItems.value.find(item => customComparator(v, item.value))?.value ?? v;\n }));\n }\n return new Set(wrapInArray(v).map(v => {\n return isPrimitive(v) ? allItems.value.find(item => v === item.value)?.value ?? v : allItems.value.find(item => deepEqual(v, item.value))?.value ?? v;\n }));\n }, v => {\n return [...v.values()];\n });\n const allSelectable = computed(() => allItems.value.filter(item => item.selectable));\n const currentPageSelectable = computed(() => currentPage.value.filter(item => item.selectable));\n const selectStrategy = computed(() => {\n if (typeof props.selectStrategy === 'object') return props.selectStrategy;\n switch (props.selectStrategy) {\n case 'single':\n return singleSelectStrategy;\n case 'all':\n return allSelectStrategy;\n case 'page':\n default:\n return pageSelectStrategy;\n }\n });\n const lastSelectedIndex = shallowRef(null);\n function isSelected(items) {\n return wrapInArray(items).every(item => selected.value.has(item.value));\n }\n function isSomeSelected(items) {\n return wrapInArray(items).some(item => selected.value.has(item.value));\n }\n function select(items, value) {\n const newSelected = selectStrategy.value.select({\n items,\n value,\n selected: new Set(selected.value)\n });\n selected.value = newSelected;\n }\n function toggleSelect(item, index, event) {\n const items = [];\n index = index ?? currentPage.value.findIndex(i => i.value === item.value);\n if (props.selectStrategy !== 'single' && event?.shiftKey && lastSelectedIndex.value !== null) {\n const [start, end] = [lastSelectedIndex.value, index].sort((a, b) => a - b);\n items.push(...currentPage.value.slice(start, end + 1).filter(item => item.selectable));\n } else {\n items.push(item);\n lastSelectedIndex.value = index;\n }\n select(items, !isSelected([item]));\n }\n function selectAll(value) {\n const newSelected = selectStrategy.value.selectAll({\n value,\n allItems: allSelectable.value,\n currentPage: currentPageSelectable.value,\n selected: new Set(selected.value)\n });\n selected.value = newSelected;\n }\n const someSelected = computed(() => selected.value.size > 0);\n const allSelected = computed(() => {\n const items = selectStrategy.value.allSelected({\n allItems: allSelectable.value,\n currentPage: currentPageSelectable.value\n });\n return !!items.length && isSelected(items);\n });\n const showSelectAll = toRef(() => selectStrategy.value.showSelectAll);\n const data = {\n toggleSelect,\n select,\n selectAll,\n isSelected,\n isSomeSelected,\n someSelected,\n allSelected,\n showSelectAll,\n lastSelectedIndex,\n selectStrategy\n };\n provide(VDataTableSelectionSymbol, data);\n return data;\n}\nexport function useSelection() {\n const data = inject(VDataTableSelectionSymbol);\n if (!data) throw new Error('Missing selection!');\n return data;\n}\n//# sourceMappingURL=select.js.map","// Composables\nimport { useLocale } from \"../../../composables/locale.js\";\nimport { useProxiedModel } from \"../../../composables/proxiedModel.js\"; // Utilities\nimport { computed, inject, provide, toRef } from 'vue';\nimport { getObjectValueByPath, isEmpty, isObject, propsFactory } from \"../../../util/index.js\"; // Types\nexport const makeDataTableSortProps = propsFactory({\n initialSortOrder: {\n type: String,\n default: 'asc',\n validator: v => !v || ['asc', 'desc'].includes(v)\n },\n sortBy: {\n type: Array,\n default: () => []\n },\n customKeySort: Object,\n multiSort: {\n type: [Boolean, Object],\n default: false\n },\n mustSort: Boolean\n}, 'DataTable-sort');\nconst VDataTableSortSymbol = Symbol.for('vuetify:data-table-sort');\nexport function createSort(props) {\n const initialSortOrder = toRef(() => props.initialSortOrder);\n const sortBy = useProxiedModel(props, 'sortBy');\n const mustSort = toRef(() => props.mustSort);\n const multiSort = toRef(() => props.multiSort);\n return {\n initialSortOrder,\n sortBy,\n multiSort,\n mustSort\n };\n}\nfunction resolveMultiSort(multiSort, event) {\n if (!isObject(multiSort)) {\n return {\n active: !!multiSort\n };\n }\n const {\n key,\n mode,\n modifier\n } = multiSort;\n const reverseMode = modifier === 'alt' && event?.altKey || modifier === 'shift' && event?.shiftKey;\n return {\n active: !key || event?.ctrlKey || event?.metaKey || false,\n mode: reverseMode ? mode === 'append' ? 'prepend' : 'append' : mode\n };\n}\nexport function provideSort(options) {\n const {\n initialSortOrder,\n sortBy,\n mustSort,\n multiSort,\n page\n } = options;\n const toggleSort = (column, event) => {\n if (column.key == null) return;\n let newSortBy = sortBy.value.map(x => ({\n ...x\n })) ?? [];\n const item = newSortBy.find(x => x.key === column.key);\n const initialOrder = initialSortOrder.value;\n const secondaryOrder = initialSortOrder.value === 'desc' ? 'asc' : 'desc';\n if (!item) {\n const {\n active,\n mode\n } = resolveMultiSort(multiSort.value, event);\n if (active) {\n if (mode === 'prepend') {\n newSortBy.unshift({\n key: column.key,\n order: initialOrder\n });\n } else {\n newSortBy.push({\n key: column.key,\n order: initialOrder\n });\n }\n } else {\n newSortBy = [{\n key: column.key,\n order: initialOrder\n }];\n }\n } else if (item.order === secondaryOrder) {\n if (mustSort.value && newSortBy.length === 1) {\n item.order = initialSortOrder.value;\n } else {\n newSortBy = newSortBy.filter(x => x.key !== column.key);\n }\n } else {\n item.order = secondaryOrder;\n }\n sortBy.value = newSortBy;\n if (page) page.value = 1;\n };\n function isSorted(column) {\n return !!sortBy.value.find(item => item.key === column.key);\n }\n const data = {\n sortBy,\n toggleSort,\n isSorted\n };\n provide(VDataTableSortSymbol, data);\n return data;\n}\nexport function useSort() {\n const data = inject(VDataTableSortSymbol);\n if (!data) throw new Error('Missing sort!');\n return data;\n}\n\n// TODO: abstract into project composable\nexport function useSortedItems(props, items, sortBy, options) {\n const locale = useLocale();\n const sortedItems = computed(() => {\n if (!sortBy.value.length) return items.value;\n return sortItems(items.value, sortBy.value, locale.current.value, {\n transform: options?.transform,\n sortFunctions: {\n ...props.customKeySort,\n ...options?.sortFunctions?.value\n },\n sortRawFunctions: options?.sortRawFunctions?.value\n });\n });\n return {\n sortedItems\n };\n}\nexport function sortItems(items, sortByItems, locale, options) {\n const stringCollator = new Intl.Collator(locale, {\n sensitivity: 'accent',\n usage: 'sort'\n });\n const transformedItems = items.map(item => [item, options?.transform ? options.transform(item) : item]);\n return transformedItems.sort((a, b) => {\n for (let i = 0; i < sortByItems.length; i++) {\n let hasCustomResult = false;\n const sortKey = sortByItems[i].key;\n const sortOrder = sortByItems[i].order ?? 'asc';\n if (sortOrder === false) continue;\n let sortA = getObjectValueByPath(a[1], sortKey);\n let sortB = getObjectValueByPath(b[1], sortKey);\n let sortARaw = a[0].raw;\n let sortBRaw = b[0].raw;\n if (sortOrder === 'desc') {\n [sortA, sortB] = [sortB, sortA];\n [sortARaw, sortBRaw] = [sortBRaw, sortARaw];\n }\n if (options?.sortRawFunctions?.[sortKey]) {\n const customResult = options.sortRawFunctions[sortKey](sortARaw, sortBRaw);\n if (customResult == null) continue;\n hasCustomResult = true;\n if (customResult) return customResult;\n }\n if (options?.sortFunctions?.[sortKey]) {\n const customResult = options.sortFunctions[sortKey](sortA, sortB);\n if (customResult == null) continue;\n hasCustomResult = true;\n if (customResult) return customResult;\n }\n if (hasCustomResult) continue;\n\n // Dates should be compared numerically\n if (sortA instanceof Date && sortB instanceof Date) {\n sortA = sortA.getTime();\n sortB = sortB.getTime();\n }\n [sortA, sortB] = [sortA, sortB].map(s => s != null ? s.toString().toLocaleLowerCase() : s);\n if (sortA !== sortB) {\n if (isEmpty(sortA) && isEmpty(sortB)) return 0;\n if (isEmpty(sortA)) return -1;\n if (isEmpty(sortB)) return 1;\n if (!isNaN(sortA) && !isNaN(sortB)) return Number(sortA) - Number(sortB);\n return stringCollator.compare(sortA, sortB);\n }\n }\n return 0;\n }).map(_ref => {\n let [item] = _ref;\n return item;\n });\n}\n//# sourceMappingURL=sort.js.map","import { createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, mergeProps as _mergeProps, Fragment as _Fragment } from \"vue\";\n// Components\nimport { VDataTableColumn } from \"./VDataTableColumn.js\";\nimport { VCheckboxBtn } from \"../VCheckbox/index.js\";\nimport { VChip } from \"../VChip/index.js\";\nimport { VIcon } from \"../VIcon/index.js\";\nimport { VSelect } from \"../VSelect/index.js\"; // Composables\nimport { useHeaders } from \"./composables/headers.js\";\nimport { useSelection } from \"./composables/select.js\";\nimport { useSort } from \"./composables/sort.js\";\nimport { useBackgroundColor } from \"../../composables/color.js\";\nimport { makeDensityProps } from \"../../composables/density.js\";\nimport { makeDisplayProps, useDisplay } from \"../../composables/display.js\";\nimport { IconValue } from \"../../composables/icons.js\";\nimport { LoaderSlot, makeLoaderProps, useLoader } from \"../../composables/loader.js\";\nimport { useLocale } from \"../../composables/locale.js\"; // Utilities\nimport { computed, mergeProps } from 'vue';\nimport { convertToUnit, genericComponent, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVDataTableHeadersProps = propsFactory({\n color: String,\n disableSort: Boolean,\n fixedHeader: Boolean,\n multiSort: Boolean,\n initialSortOrder: String,\n sortAscIcon: {\n type: IconValue,\n default: '$sortAsc'\n },\n sortDescIcon: {\n type: IconValue,\n default: '$sortDesc'\n },\n headerProps: {\n type: Object\n },\n /** @deprecated */\n sticky: Boolean,\n ...makeDensityProps(),\n ...makeDisplayProps(),\n ...makeLoaderProps()\n}, 'VDataTableHeaders');\nexport const VDataTableHeaders = genericComponent()({\n name: 'VDataTableHeaders',\n props: makeVDataTableHeadersProps(),\n setup(props, _ref) {\n let {\n slots\n } = _ref;\n const {\n t\n } = useLocale();\n const {\n toggleSort,\n sortBy,\n isSorted\n } = useSort();\n const {\n someSelected,\n allSelected,\n selectAll,\n showSelectAll\n } = useSelection();\n const {\n columns,\n headers\n } = useHeaders();\n const {\n loaderClasses\n } = useLoader(props);\n function getFixedStyles(column, y) {\n if (!(props.sticky || props.fixedHeader) && !column.fixed) return undefined;\n const fixedSide = typeof column.fixed === 'string' ? column.fixed : column.fixed ? 'start' : 'none';\n return {\n position: 'sticky',\n left: fixedSide === 'start' ? convertToUnit(column.fixedOffset) : undefined,\n right: fixedSide === 'end' ? convertToUnit(column.fixedEndOffset) : undefined,\n top: props.sticky || props.fixedHeader ? `calc(var(--v-table-header-height) * ${y})` : undefined\n };\n }\n function handleEnterKeyPress(event, column) {\n if (event.key === 'Enter' && !props.disableSort) {\n toggleSort(column, event);\n }\n }\n function getSortIcon(column) {\n const item = sortBy.value.find(item => item.key === column.key);\n return !item && props.initialSortOrder === 'asc' || item?.order === 'asc' ? props.sortAscIcon : props.sortDescIcon;\n }\n const {\n backgroundColorClasses,\n backgroundColorStyles\n } = useBackgroundColor(() => props.color);\n const {\n displayClasses,\n mobile\n } = useDisplay(props);\n const slotProps = computed(() => ({\n headers: headers.value,\n columns: columns.value,\n toggleSort,\n isSorted,\n sortBy: sortBy.value,\n someSelected: someSelected.value,\n allSelected: allSelected.value,\n selectAll,\n getSortIcon\n }));\n const headerCellClasses = computed(() => ['v-data-table__th', {\n 'v-data-table__th--sticky': props.sticky || props.fixedHeader\n }, displayClasses.value, loaderClasses.value]);\n const VDataTableHeaderCell = _ref2 => {\n let {\n column,\n x,\n y\n } = _ref2;\n const noPadding = column.key === 'data-table-select' || column.key === 'data-table-expand';\n const isEmpty = column.key === 'data-table-group' && column.width === 0 && !column.title;\n const headerProps = mergeProps(props.headerProps ?? {}, column.headerProps ?? {});\n return _createVNode(VDataTableColumn, _mergeProps({\n \"tag\": \"th\",\n \"align\": column.align,\n \"class\": [{\n 'v-data-table__th--sortable': column.sortable && !props.disableSort,\n 'v-data-table__th--sorted': isSorted(column),\n 'v-data-table__th--fixed': column.fixed\n }, ...headerCellClasses.value],\n \"style\": {\n width: convertToUnit(column.width),\n minWidth: convertToUnit(column.minWidth),\n maxWidth: convertToUnit(column.maxWidth),\n ...getFixedStyles(column, y)\n },\n \"colspan\": column.colspan,\n \"rowspan\": column.rowspan,\n \"fixed\": column.fixed,\n \"nowrap\": column.nowrap,\n \"lastFixed\": column.lastFixed,\n \"firstFixedEnd\": column.firstFixedEnd,\n \"noPadding\": noPadding,\n \"empty\": isEmpty,\n \"tabindex\": column.sortable ? 0 : undefined,\n \"onClick\": column.sortable ? event => toggleSort(column, event) : undefined,\n \"onKeydown\": column.sortable ? event => handleEnterKeyPress(event, column) : undefined\n }, headerProps), {\n default: () => {\n const columnSlotName = `header.${column.key}`;\n const columnSlotProps = {\n column,\n selectAll,\n isSorted,\n toggleSort,\n sortBy: sortBy.value,\n someSelected: someSelected.value,\n allSelected: allSelected.value,\n getSortIcon\n };\n if (slots[columnSlotName]) return slots[columnSlotName](columnSlotProps);\n if (isEmpty) return '';\n if (column.key === 'data-table-select') {\n return slots['header.data-table-select']?.(columnSlotProps) ?? (showSelectAll.value && _createVNode(VCheckboxBtn, {\n \"color\": props.color,\n \"density\": props.density,\n \"modelValue\": allSelected.value,\n \"indeterminate\": someSelected.value && !allSelected.value,\n \"onUpdate:modelValue\": selectAll\n }, null));\n }\n return _createElementVNode(\"div\", {\n \"class\": \"v-data-table-header__content\"\n }, [_createElementVNode(\"span\", null, [column.title]), column.sortable && !props.disableSort && _createVNode(VIcon, {\n \"key\": \"icon\",\n \"class\": \"v-data-table-header__sort-icon\",\n \"icon\": getSortIcon(column)\n }, null), props.multiSort && isSorted(column) && _createElementVNode(\"div\", {\n \"key\": \"badge\",\n \"class\": _normalizeClass(['v-data-table-header__sort-badge', ...backgroundColorClasses.value]),\n \"style\": _normalizeStyle(backgroundColorStyles.value)\n }, [sortBy.value.findIndex(x => x.key === column.key) + 1])]);\n }\n });\n };\n const VDataTableMobileHeaderCell = () => {\n const displayItems = computed(() => {\n return columns.value.filter(column => column?.sortable && !props.disableSort);\n });\n const showSelectColumn = columns.value.find(column => column.key === 'data-table-select');\n return _createVNode(VDataTableColumn, _mergeProps({\n \"tag\": \"th\",\n \"class\": [...headerCellClasses.value],\n \"colspan\": headers.value.length + 1\n }, props.headerProps), {\n default: () => [_createElementVNode(\"div\", {\n \"class\": \"v-data-table-header__content\"\n }, [_createVNode(VSelect, {\n \"chips\": true,\n \"color\": props.color,\n \"class\": \"v-data-table__td-sort-select\",\n \"clearable\": true,\n \"density\": \"default\",\n \"items\": displayItems.value,\n \"label\": t('$vuetify.dataTable.sortBy'),\n \"multiple\": props.multiSort,\n \"variant\": \"underlined\",\n \"onClick:clear\": () => sortBy.value = []\n }, {\n append: showSelectColumn ? () => _createVNode(VCheckboxBtn, {\n \"color\": props.color,\n \"density\": \"compact\",\n \"modelValue\": allSelected.value,\n \"indeterminate\": someSelected.value && !allSelected.value,\n \"onUpdate:modelValue\": () => selectAll(!allSelected.value)\n }, null) : undefined,\n chip: props => _createVNode(VChip, {\n \"onClick\": props.item.raw?.sortable ? () => toggleSort(props.item.raw) : undefined,\n \"onMousedown\": e => {\n e.preventDefault();\n e.stopPropagation();\n }\n }, {\n default: () => [props.item.title, _createVNode(VIcon, {\n \"class\": _normalizeClass(['v-data-table__td-sort-icon', isSorted(props.item.raw) && 'v-data-table__td-sort-icon-active']),\n \"icon\": getSortIcon(props.item.raw),\n \"size\": \"small\"\n }, null)]\n })\n })])]\n });\n };\n useRender(() => {\n return mobile.value ? _createElementVNode(\"tr\", null, [_createVNode(VDataTableMobileHeaderCell, null, null)]) : _createElementVNode(_Fragment, null, [slots.headers ? slots.headers(slotProps.value) : headers.value.map((row, y) => _createElementVNode(\"tr\", null, [row.map((column, x) => _createVNode(VDataTableHeaderCell, {\n \"column\": column,\n \"x\": x,\n \"y\": y\n }, null))])), props.loading && _createElementVNode(\"tr\", {\n \"class\": \"v-data-table-progress\"\n }, [_createElementVNode(\"th\", {\n \"colspan\": columns.value.length\n }, [_createVNode(LoaderSlot, {\n \"name\": \"v-data-table-progress\",\n \"absolute\": true,\n \"active\": true,\n \"color\": typeof props.loading === 'boolean' || props.loading === 'true' ? props.color : props.loading,\n \"indeterminate\": true\n }, {\n default: slots.loader\n })])])]);\n });\n }\n});\n//# sourceMappingURL=VDataTableHeaders.js.map","// Composables\nimport { useProxiedModel } from \"../../../composables/proxiedModel.js\"; // Utilities\nimport { computed, inject, provide, ref, toValue } from 'vue';\nimport { getObjectValueByPath, propsFactory } from \"../../../util/index.js\"; // Types\nexport const makeDataTableGroupProps = propsFactory({\n groupBy: {\n type: Array,\n default: () => []\n }\n}, 'DataTable-group');\nconst VDataTableGroupSymbol = Symbol.for('vuetify:data-table-group');\nexport function createGroupBy(props) {\n const groupBy = useProxiedModel(props, 'groupBy');\n return {\n groupBy\n };\n}\nexport function provideGroupBy(options) {\n const {\n disableSort,\n groupBy,\n sortBy\n } = options;\n const opened = ref(new Set());\n const sortByWithGroups = computed(() => {\n return groupBy.value.map(val => ({\n ...val,\n order: val.order ?? false\n })).concat(disableSort?.value ? [] : sortBy.value);\n });\n function isGroupOpen(group) {\n return opened.value.has(group.id);\n }\n function toggleGroup(group) {\n const newOpened = new Set(opened.value);\n if (!isGroupOpen(group)) newOpened.add(group.id);else newOpened.delete(group.id);\n opened.value = newOpened;\n }\n function extractRows(items) {\n function dive(group) {\n const arr = [];\n for (const item of group.items) {\n if ('type' in item && item.type === 'group') {\n arr.push(...dive(item));\n } else {\n arr.push(item);\n }\n }\n return [...new Set(arr)];\n }\n return dive({\n type: 'group',\n items,\n id: 'dummy',\n key: 'dummy',\n value: 'dummy',\n depth: 0\n });\n }\n\n // onBeforeMount(() => {\n // for (const key of groupedItems.value.keys()) {\n // opened.value.add(key)\n // }\n // })\n\n const data = {\n sortByWithGroups,\n toggleGroup,\n opened,\n groupBy,\n extractRows,\n isGroupOpen\n };\n provide(VDataTableGroupSymbol, data);\n return data;\n}\nexport function useGroupBy() {\n const data = inject(VDataTableGroupSymbol);\n if (!data) throw new Error('Missing group!');\n return data;\n}\nfunction groupItemsByProperty(items, groupBy) {\n if (!items.length) return [];\n const groups = new Map();\n for (const item of items) {\n const value = getObjectValueByPath(item.raw, groupBy);\n if (!groups.has(value)) {\n groups.set(value, []);\n }\n groups.get(value).push(item);\n }\n return groups;\n}\nfunction groupItems(items, groupBy) {\n let depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n let prefix = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'root';\n if (!groupBy.length) return [];\n const groupedItems = groupItemsByProperty(items, groupBy[0]);\n const groups = [];\n const rest = groupBy.slice(1);\n groupedItems.forEach((items, value) => {\n const key = groupBy[0];\n const id = `${prefix}_${key}_${value}`;\n groups.push({\n depth,\n id,\n key,\n value,\n items: rest.length ? groupItems(items, rest, depth + 1, id) : items,\n type: 'group'\n });\n });\n return groups;\n}\nfunction flattenItems(items, opened, hasSummary) {\n const flatItems = [];\n for (const item of items) {\n // TODO: make this better\n if ('type' in item && item.type === 'group') {\n if (item.value != null) {\n flatItems.push(item);\n }\n if (opened.has(item.id) || item.value == null) {\n flatItems.push(...flattenItems(item.items, opened, hasSummary));\n if (hasSummary) {\n flatItems.push({\n ...item,\n type: 'group-summary'\n });\n }\n }\n } else {\n flatItems.push(item);\n }\n }\n return flatItems;\n}\nexport function useGroupedItems(items, groupBy, opened, hasSummary) {\n const flatItems = computed(() => {\n if (!groupBy.value.length) return items.value;\n const groupedItems = groupItems(items.value, groupBy.value.map(item => item.key));\n return flattenItems(groupedItems, opened.value, toValue(hasSummary));\n });\n return {\n flatItems\n };\n}\n//# sourceMappingURL=group.js.map","import { createVNode as _createVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode } from \"vue\";\n// Components\nimport { VDataTableColumn } from \"./VDataTableColumn.js\";\nimport { VBtn } from \"../VBtn/index.js\";\nimport { VCheckboxBtn } from \"../VCheckbox/index.js\"; // Composables\nimport { useGroupBy } from \"./composables/group.js\";\nimport { useHeaders } from \"./composables/headers.js\";\nimport { useSelection } from \"./composables/select.js\";\nimport { makeDensityProps } from \"../../composables/density.js\";\nimport { IconValue } from \"../../composables/icons.js\"; // Utilities\nimport { computed, toRef } from 'vue';\nimport { genericComponent, propsFactory } from \"../../util/index.js\"; // Types\nexport const makeVDataTableGroupHeaderRowProps = propsFactory({\n item: {\n type: Object,\n required: true\n },\n groupCollapseIcon: {\n type: IconValue,\n default: '$tableGroupCollapse'\n },\n groupExpandIcon: {\n type: IconValue,\n default: '$tableGroupExpand'\n },\n ...makeDensityProps()\n}, 'VDataTableGroupHeaderRow');\nexport const VDataTableGroupHeaderRow = genericComponent()({\n name: 'VDataTableGroupHeaderRow',\n props: makeVDataTableGroupHeaderRowProps(),\n setup(props, _ref) {\n let {\n slots\n } = _ref;\n const {\n isGroupOpen,\n toggleGroup,\n extractRows\n } = useGroupBy();\n const {\n isSelected,\n isSomeSelected,\n select\n } = useSelection();\n const {\n columns\n } = useHeaders();\n const rows = computed(() => {\n return extractRows([props.item]);\n });\n const colspan = toRef(() => columns.value.length - (columns.value.some(c => c.key === 'data-table-select') ? 1 : 0));\n return () => _createElementVNode(\"tr\", {\n \"class\": \"v-data-table-group-header-row\",\n \"style\": {\n '--v-data-table-group-header-row-depth': props.item.depth\n }\n }, [columns.value.map(column => {\n if (column.key === 'data-table-group') {\n const icon = isGroupOpen(props.item) ? props.groupCollapseIcon : props.groupExpandIcon;\n const onClick = () => toggleGroup(props.item);\n return slots['data-table-group']?.({\n item: props.item,\n count: rows.value.length,\n props: {\n icon,\n onClick\n }\n }) ?? _createVNode(VDataTableColumn, {\n \"class\": \"v-data-table-group-header-row__column\",\n \"colspan\": colspan.value\n }, {\n default: () => [_createVNode(VBtn, {\n \"size\": \"small\",\n \"variant\": \"text\",\n \"icon\": icon,\n \"onClick\": onClick\n }, null), _createElementVNode(\"span\", null, [props.item.value]), _createElementVNode(\"span\", null, [_createTextVNode(\"(\"), rows.value.length, _createTextVNode(\")\")])]\n });\n } else if (column.key === 'data-table-select') {\n const selectableRows = rows.value.filter(x => x.selectable);\n const modelValue = selectableRows.length > 0 && isSelected(selectableRows);\n const indeterminate = isSomeSelected(selectableRows) && !modelValue;\n const selectGroup = v => select(selectableRows, v);\n return slots['data-table-select']?.({\n props: {\n modelValue,\n indeterminate,\n 'onUpdate:modelValue': selectGroup\n }\n }) ?? _createVNode(VDataTableColumn, {\n \"class\": \"v-data-table__td--select-row\",\n \"noPadding\": true\n }, {\n default: () => [_createVNode(VCheckboxBtn, {\n \"density\": props.density,\n \"disabled\": selectableRows.length === 0,\n \"modelValue\": modelValue,\n \"indeterminate\": indeterminate,\n \"onUpdate:modelValue\": selectGroup\n }, null)]\n });\n }\n return '';\n })]);\n }\n});\n//# sourceMappingURL=VDataTableGroupHeaderRow.js.map","// Composables\nimport { useProxiedModel } from \"../../../composables/proxiedModel.js\"; // Utilities\nimport { inject, provide, toRaw, toRef } from 'vue';\nimport { propsFactory } from \"../../../util/index.js\"; // Types\nexport const makeDataTableExpandProps = propsFactory({\n expandOnClick: Boolean,\n showExpand: Boolean,\n expanded: {\n type: Array,\n default: () => []\n }\n}, 'DataTable-expand');\nexport const VDataTableExpandedKey = Symbol.for('vuetify:datatable:expanded');\nexport function provideExpanded(props) {\n const expandOnClick = toRef(() => props.expandOnClick);\n const expanded = useProxiedModel(props, 'expanded', props.expanded, v => {\n return new Set(v);\n }, v => {\n return [...v.values()];\n });\n function expand(item, value) {\n const newExpanded = new Set(expanded.value);\n const rawValue = toRaw(item.value);\n if (!value) {\n const item = [...expanded.value].find(x => toRaw(x) === rawValue);\n newExpanded.delete(item);\n } else {\n newExpanded.add(rawValue);\n }\n expanded.value = newExpanded;\n }\n function isExpanded(item) {\n const rawValue = toRaw(item.value);\n return [...expanded.value].some(x => toRaw(x) === rawValue);\n }\n function toggleExpand(item) {\n expand(item, !isExpanded(item));\n }\n const data = {\n expand,\n expanded,\n expandOnClick,\n isExpanded,\n toggleExpand\n };\n provide(VDataTableExpandedKey, data);\n return data;\n}\nexport function useExpanded() {\n const data = inject(VDataTableExpandedKey);\n if (!data) throw new Error('foo');\n return data;\n}\n//# sourceMappingURL=expand.js.map","import { createVNode as _createVNode, Fragment as _Fragment, createElementVNode as _createElementVNode, mergeProps as _mergeProps, normalizeClass as _normalizeClass } from \"vue\";\n// Components\nimport { VDataTableColumn } from \"./VDataTableColumn.js\";\nimport { VBtn } from \"../VBtn/index.js\";\nimport { VCheckboxBtn } from \"../VCheckbox/index.js\"; // Composables\nimport { useExpanded } from \"./composables/expand.js\";\nimport { useHeaders } from \"./composables/headers.js\";\nimport { useSelection } from \"./composables/select.js\";\nimport { useSort } from \"./composables/sort.js\";\nimport { makeDensityProps } from \"../../composables/density.js\";\nimport { makeDisplayProps, useDisplay } from \"../../composables/display.js\";\nimport { IconValue } from \"../../composables/icons.js\"; // Utilities\nimport { toDisplayString, withModifiers } from 'vue';\nimport { EventProp, genericComponent, getObjectValueByPath, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVDataTableRowProps = propsFactory({\n color: String,\n index: Number,\n item: Object,\n cellProps: [Object, Function],\n collapseIcon: {\n type: IconValue,\n default: '$collapse'\n },\n expandIcon: {\n type: IconValue,\n default: '$expand'\n },\n onClick: EventProp(),\n onContextmenu: EventProp(),\n onDblclick: EventProp(),\n ...makeDensityProps(),\n ...makeDisplayProps()\n}, 'VDataTableRow');\nexport const VDataTableRow = genericComponent()({\n name: 'VDataTableRow',\n props: makeVDataTableRowProps(),\n setup(props, _ref) {\n let {\n slots\n } = _ref;\n const {\n displayClasses,\n mobile\n } = useDisplay(props, 'v-data-table__tr');\n const {\n isSelected,\n toggleSelect,\n someSelected,\n allSelected,\n selectAll\n } = useSelection();\n const {\n isExpanded,\n toggleExpand\n } = useExpanded();\n const {\n toggleSort,\n sortBy,\n isSorted\n } = useSort();\n const {\n columns\n } = useHeaders();\n useRender(() => _createElementVNode(\"tr\", {\n \"class\": _normalizeClass(['v-data-table__tr', {\n 'v-data-table__tr--clickable': !!(props.onClick || props.onContextmenu || props.onDblclick)\n }, displayClasses.value]),\n \"onClick\": props.onClick,\n \"onContextmenu\": props.onContextmenu,\n \"onDblclick\": props.onDblclick\n }, [props.item && columns.value.map((column, i) => {\n const item = props.item;\n const slotName = `item.${column.key}`;\n const headerSlotName = `header.${column.key}`;\n const slotProps = {\n index: props.index,\n item: item.raw,\n internalItem: item,\n value: getObjectValueByPath(item.columns, column.key),\n column,\n isSelected,\n toggleSelect,\n isExpanded,\n toggleExpand\n };\n const columnSlotProps = {\n column,\n selectAll,\n isSorted,\n toggleSort,\n sortBy: sortBy.value,\n someSelected: someSelected.value,\n allSelected: allSelected.value,\n getSortIcon: () => ''\n };\n const cellProps = typeof props.cellProps === 'function' ? props.cellProps({\n index: slotProps.index,\n item: slotProps.item,\n internalItem: slotProps.internalItem,\n value: slotProps.value,\n column\n }) : props.cellProps;\n const columnCellProps = typeof column.cellProps === 'function' ? column.cellProps({\n index: slotProps.index,\n item: slotProps.item,\n internalItem: slotProps.internalItem,\n value: slotProps.value\n }) : column.cellProps;\n const noPadding = column.key === 'data-table-select' || column.key === 'data-table-expand';\n const isEmpty = column.key === 'data-table-group' && column.width === 0 && !column.title;\n return _createVNode(VDataTableColumn, _mergeProps({\n \"align\": column.align,\n \"indent\": column.indent,\n \"class\": {\n 'v-data-table__td--expanded-row': column.key === 'data-table-expand',\n 'v-data-table__td--select-row': column.key === 'data-table-select'\n },\n \"fixed\": column.fixed,\n \"fixedOffset\": column.fixedOffset,\n \"fixedEndOffset\": column.fixedEndOffset,\n \"lastFixed\": column.lastFixed,\n \"firstFixedEnd\": column.firstFixedEnd,\n \"maxWidth\": !mobile.value ? column.maxWidth : undefined,\n \"noPadding\": noPadding,\n \"empty\": isEmpty,\n \"nowrap\": column.nowrap,\n \"width\": !mobile.value ? column.width : undefined\n }, cellProps, columnCellProps), {\n default: () => {\n if (column.key === 'data-table-select') {\n return slots['item.data-table-select']?.({\n ...slotProps,\n props: {\n color: props.color,\n disabled: !item.selectable,\n modelValue: isSelected([item]),\n onClick: withModifiers(() => toggleSelect(item), ['stop'])\n }\n }) ?? _createVNode(VCheckboxBtn, {\n \"color\": props.color,\n \"disabled\": !item.selectable,\n \"density\": props.density,\n \"modelValue\": isSelected([item]),\n \"onClick\": withModifiers(event => toggleSelect(item, props.index, event), ['stop'])\n }, null);\n }\n if (column.key === 'data-table-expand') {\n return slots['item.data-table-expand']?.({\n ...slotProps,\n props: {\n icon: isExpanded(item) ? props.collapseIcon : props.expandIcon,\n size: 'small',\n variant: 'text',\n onClick: withModifiers(() => toggleExpand(item), ['stop'])\n }\n }) ?? _createVNode(VBtn, {\n \"icon\": isExpanded(item) ? props.collapseIcon : props.expandIcon,\n \"size\": \"small\",\n \"variant\": \"text\",\n \"onClick\": withModifiers(() => toggleExpand(item), ['stop'])\n }, null);\n }\n if (slots[slotName] && !mobile.value) return slots[slotName](slotProps);\n const displayValue = toDisplayString(slotProps.value);\n return !mobile.value ? displayValue : _createElementVNode(_Fragment, null, [_createElementVNode(\"div\", {\n \"class\": \"v-data-table__td-title\"\n }, [slots[headerSlotName]?.(columnSlotProps) ?? column.title]), _createElementVNode(\"div\", {\n \"class\": \"v-data-table__td-value\"\n }, [slots[slotName]?.(slotProps) ?? displayValue])]);\n }\n });\n })]));\n }\n});\n//# sourceMappingURL=VDataTableRow.js.map","import { createElementVNode as _createElementVNode, Fragment as _Fragment, mergeProps as _mergeProps, createVNode as _createVNode } from \"vue\";\n// Components\nimport { makeVDataTableGroupHeaderRowProps, VDataTableGroupHeaderRow } from \"./VDataTableGroupHeaderRow.js\";\nimport { makeVDataTableRowProps, VDataTableRow } from \"./VDataTableRow.js\"; // Composables\nimport { useExpanded } from \"./composables/expand.js\";\nimport { useGroupBy } from \"./composables/group.js\";\nimport { useHeaders } from \"./composables/headers.js\";\nimport { useSelection } from \"./composables/select.js\";\nimport { makeDisplayProps, useDisplay } from \"../../composables/display.js\";\nimport { useLocale } from \"../../composables/locale.js\"; // Utilities\nimport { Fragment, mergeProps } from 'vue';\nimport { genericComponent, getPrefixedEventHandlers, pick, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVDataTableRowsProps = propsFactory({\n color: String,\n loading: [Boolean, String],\n loadingText: {\n type: String,\n default: '$vuetify.dataIterator.loadingText'\n },\n hideNoData: Boolean,\n items: {\n type: Array,\n default: () => []\n },\n noDataText: {\n type: String,\n default: '$vuetify.noDataText'\n },\n rowProps: [Object, Function],\n cellProps: [Object, Function],\n ...pick(makeVDataTableRowProps(), ['collapseIcon', 'expandIcon', 'density']),\n ...pick(makeVDataTableGroupHeaderRowProps(), ['groupCollapseIcon', 'groupExpandIcon', 'density']),\n ...makeDisplayProps()\n}, 'VDataTableRows');\nexport const VDataTableRows = genericComponent()({\n name: 'VDataTableRows',\n inheritAttrs: false,\n props: makeVDataTableRowsProps(),\n setup(props, _ref) {\n let {\n attrs,\n slots\n } = _ref;\n const {\n columns\n } = useHeaders();\n const {\n expandOnClick,\n toggleExpand,\n isExpanded\n } = useExpanded();\n const {\n isSelected,\n toggleSelect\n } = useSelection();\n const {\n toggleGroup,\n isGroupOpen\n } = useGroupBy();\n const {\n t\n } = useLocale();\n const {\n mobile\n } = useDisplay(props);\n useRender(() => {\n const groupHeaderRowProps = pick(props, ['groupCollapseIcon', 'groupExpandIcon', 'density']);\n if (props.loading && (!props.items.length || slots.loading)) {\n return _createElementVNode(\"tr\", {\n \"class\": \"v-data-table-rows-loading\",\n \"key\": \"loading\"\n }, [_createElementVNode(\"td\", {\n \"colspan\": columns.value.length\n }, [slots.loading?.() ?? t(props.loadingText)])]);\n }\n if (!props.loading && !props.items.length && !props.hideNoData) {\n return _createElementVNode(\"tr\", {\n \"class\": \"v-data-table-rows-no-data\",\n \"key\": \"no-data\"\n }, [_createElementVNode(\"td\", {\n \"colspan\": columns.value.length\n }, [slots['no-data']?.() ?? t(props.noDataText)])]);\n }\n return _createElementVNode(_Fragment, null, [props.items.map((item, index) => {\n if (item.type === 'group') {\n const slotProps = {\n index,\n item,\n columns: columns.value,\n isExpanded,\n toggleExpand,\n isSelected,\n toggleSelect,\n toggleGroup,\n isGroupOpen\n };\n return slots['group-header'] ? slots['group-header'](slotProps) : _createVNode(VDataTableGroupHeaderRow, _mergeProps({\n \"key\": `group-header_${item.id}`,\n \"item\": item\n }, getPrefixedEventHandlers(attrs, ':groupHeader', () => slotProps), groupHeaderRowProps), slots);\n }\n if (item.type === 'group-summary') {\n const slotProps = {\n index,\n item,\n columns: columns.value,\n toggleGroup\n };\n return slots['group-summary']?.(slotProps) ?? '';\n }\n const slotProps = {\n index: item.virtualIndex ?? index,\n item: item.raw,\n internalItem: item,\n columns: columns.value,\n isExpanded,\n toggleExpand,\n isSelected,\n toggleSelect\n };\n const itemSlotProps = {\n ...slotProps,\n props: mergeProps({\n key: `item_${item.key ?? item.index}`,\n onClick: expandOnClick.value ? () => {\n toggleExpand(item);\n } : undefined,\n index,\n item,\n color: props.color,\n cellProps: props.cellProps,\n collapseIcon: props.collapseIcon,\n expandIcon: props.expandIcon,\n density: props.density,\n mobile: mobile.value\n }, getPrefixedEventHandlers(attrs, ':row', () => slotProps), typeof props.rowProps === 'function' ? props.rowProps({\n item: slotProps.item,\n index: slotProps.index,\n internalItem: slotProps.internalItem\n }) : props.rowProps)\n };\n return _createElementVNode(_Fragment, {\n \"key\": itemSlotProps.props.key\n }, [slots.item ? slots.item(itemSlotProps) : _createVNode(VDataTableRow, itemSlotProps.props, slots), isExpanded(item) && slots['expanded-row']?.(slotProps)]);\n })]);\n });\n return {};\n }\n});\n//# sourceMappingURL=VDataTableRows.js.map","import { createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createVNode as _createVNode } from \"vue\";\n// Styles\nimport \"./VTable.css\";\n\n// Composables\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeDensityProps, useDensity } from \"../../composables/density.js\";\nimport { makeTagProps } from \"../../composables/tag.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\"; // Utilities\nimport { convertToUnit, genericComponent, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVTableProps = propsFactory({\n fixedHeader: Boolean,\n fixedFooter: Boolean,\n height: [Number, String],\n hover: Boolean,\n striped: {\n type: String,\n default: null,\n validator: v => ['even', 'odd'].includes(v)\n },\n ...makeComponentProps(),\n ...makeDensityProps(),\n ...makeTagProps(),\n ...makeThemeProps()\n}, 'VTable');\nexport const VTable = genericComponent()({\n name: 'VTable',\n props: makeVTableProps(),\n setup(props, _ref) {\n let {\n slots,\n emit\n } = _ref;\n const {\n themeClasses\n } = provideTheme(props);\n const {\n densityClasses\n } = useDensity(props);\n useRender(() => _createVNode(props.tag, {\n \"class\": _normalizeClass(['v-table', {\n 'v-table--fixed-height': !!props.height,\n 'v-table--fixed-header': props.fixedHeader,\n 'v-table--fixed-footer': props.fixedFooter,\n 'v-table--has-top': !!slots.top,\n 'v-table--has-bottom': !!slots.bottom,\n 'v-table--hover': props.hover,\n 'v-table--striped-even': props.striped === 'even',\n 'v-table--striped-odd': props.striped === 'odd'\n }, themeClasses.value, densityClasses.value, props.class]),\n \"style\": _normalizeStyle(props.style)\n }, {\n default: () => [slots.top?.(), slots.default ? _createElementVNode(\"div\", {\n \"class\": \"v-table__wrapper\",\n \"style\": {\n height: convertToUnit(props.height)\n }\n }, [_createElementVNode(\"table\", null, [slots.default()])]) : slots.wrapper?.(), slots.bottom?.()]\n }));\n return {};\n }\n});\n//# sourceMappingURL=VTable.js.map","// Utilities\nimport { computed } from 'vue';\nimport { getPropertyFromItem, propsFactory } from \"../../../util/index.js\"; // Types\n// Composables\nexport const makeDataTableItemsProps = propsFactory({\n items: {\n type: Array,\n default: () => []\n },\n itemValue: {\n type: [String, Array, Function],\n default: 'id'\n },\n itemSelectable: {\n type: [String, Array, Function],\n default: null\n },\n rowProps: [Object, Function],\n cellProps: [Object, Function],\n returnObject: Boolean\n}, 'DataTable-items');\nexport function transformItem(props, item, index, columns) {\n const value = props.returnObject ? item : getPropertyFromItem(item, props.itemValue);\n const selectable = getPropertyFromItem(item, props.itemSelectable, true);\n const itemColumns = columns.reduce((obj, column) => {\n if (column.key != null) obj[column.key] = getPropertyFromItem(item, column.value);\n return obj;\n }, {});\n return {\n type: 'item',\n key: props.returnObject ? getPropertyFromItem(item, props.itemValue) : value,\n index,\n value,\n selectable,\n columns: itemColumns,\n raw: item\n };\n}\nexport function transformItems(props, items, columns) {\n return items.map((item, index) => transformItem(props, item, index, columns));\n}\nexport function useDataTableItems(props, columns) {\n const items = computed(() => transformItems(props, props.items, columns.value));\n return {\n items\n };\n}\n//# sourceMappingURL=items.js.map","// Utilities\nimport { watch } from 'vue';\nimport { deepEqual, getCurrentInstance } from \"../../../util/index.js\"; // Types\nexport function useOptions(_ref) {\n let {\n page,\n itemsPerPage,\n sortBy,\n groupBy,\n search\n } = _ref;\n const vm = getCurrentInstance('VDataTable');\n const options = () => ({\n page: page.value,\n itemsPerPage: itemsPerPage.value,\n sortBy: sortBy.value,\n groupBy: groupBy.value,\n search: search.value\n });\n let oldOptions = null;\n watch(options, value => {\n if (deepEqual(oldOptions, value)) return;\n\n // Reset page when searching\n if (oldOptions && oldOptions.search !== value.search) {\n page.value = 1;\n }\n vm.emit('update:options', value);\n oldOptions = value;\n }, {\n deep: true,\n immediate: true\n });\n}\n//# sourceMappingURL=options.js.map","import { Fragment as _Fragment, mergeProps as _mergeProps, createVNode as _createVNode, createElementVNode as _createElementVNode } from \"vue\";\n// Styles\nimport \"./VDataTable.css\";\n\n// Components\nimport { makeVDataTableFooterProps, VDataTableFooter } from \"./VDataTableFooter.js\";\nimport { makeVDataTableHeadersProps, VDataTableHeaders } from \"./VDataTableHeaders.js\";\nimport { makeVDataTableRowsProps, VDataTableRows } from \"./VDataTableRows.js\";\nimport { VDivider } from \"../VDivider/index.js\";\nimport { makeVTableProps, VTable } from \"../VTable/VTable.js\"; // Composables\nimport { makeDataTableExpandProps, provideExpanded } from \"./composables/expand.js\";\nimport { createGroupBy, makeDataTableGroupProps, provideGroupBy, useGroupedItems } from \"./composables/group.js\";\nimport { createHeaders, makeDataTableHeaderProps } from \"./composables/headers.js\";\nimport { makeDataTableItemsProps, useDataTableItems } from \"./composables/items.js\";\nimport { useOptions } from \"./composables/options.js\";\nimport { createPagination, makeDataTablePaginateProps, providePagination, usePaginatedItems } from \"./composables/paginate.js\";\nimport { makeDataTableSelectProps, provideSelection } from \"./composables/select.js\";\nimport { createSort, makeDataTableSortProps, provideSort, useSortedItems } from \"./composables/sort.js\";\nimport { provideDefaults } from \"../../composables/defaults.js\";\nimport { makeFilterProps, useFilter } from \"../../composables/filter.js\"; // Utilities\nimport { computed, toRef, toRefs } from 'vue';\nimport { genericComponent, omit, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeDataTableProps = propsFactory({\n ...makeVDataTableRowsProps(),\n hideDefaultBody: Boolean,\n hideDefaultFooter: Boolean,\n hideDefaultHeader: Boolean,\n width: [String, Number],\n search: String,\n ...makeDataTableExpandProps(),\n ...makeDataTableGroupProps(),\n ...makeDataTableHeaderProps(),\n ...makeDataTableItemsProps(),\n ...makeDataTableSelectProps(),\n ...makeDataTableSortProps(),\n ...omit(makeVDataTableHeadersProps(), ['multiSort', 'initialSortOrder']),\n ...makeVTableProps()\n}, 'DataTable');\nexport const makeVDataTableProps = propsFactory({\n ...makeDataTablePaginateProps(),\n ...makeDataTableProps(),\n ...makeFilterProps(),\n ...makeVDataTableFooterProps()\n}, 'VDataTable');\nexport const VDataTable = genericComponent()({\n name: 'VDataTable',\n props: makeVDataTableProps(),\n emits: {\n 'update:modelValue': value => true,\n 'update:page': value => true,\n 'update:itemsPerPage': value => true,\n 'update:sortBy': value => true,\n 'update:options': value => true,\n 'update:groupBy': value => true,\n 'update:expanded': value => true,\n 'update:currentItems': value => true\n },\n setup(props, _ref) {\n let {\n attrs,\n slots\n } = _ref;\n const {\n groupBy\n } = createGroupBy(props);\n const {\n initialSortOrder,\n sortBy,\n multiSort,\n mustSort\n } = createSort(props);\n const {\n page,\n itemsPerPage\n } = createPagination(props);\n const {\n disableSort\n } = toRefs(props);\n const {\n columns,\n headers,\n sortFunctions,\n sortRawFunctions,\n filterFunctions\n } = createHeaders(props, {\n groupBy,\n showSelect: toRef(() => props.showSelect),\n showExpand: toRef(() => props.showExpand)\n });\n const {\n items\n } = useDataTableItems(props, columns);\n const search = toRef(() => props.search);\n const {\n filteredItems\n } = useFilter(props, items, search, {\n transform: item => item.columns,\n customKeyFilter: filterFunctions\n });\n const {\n toggleSort\n } = provideSort({\n initialSortOrder,\n sortBy,\n multiSort,\n mustSort,\n page\n });\n const {\n sortByWithGroups,\n opened,\n extractRows,\n isGroupOpen,\n toggleGroup\n } = provideGroupBy({\n groupBy,\n sortBy,\n disableSort\n });\n const {\n sortedItems\n } = useSortedItems(props, filteredItems, sortByWithGroups, {\n transform: item => ({\n ...item.raw,\n ...item.columns\n }),\n sortFunctions,\n sortRawFunctions\n });\n const {\n flatItems\n } = useGroupedItems(sortedItems, groupBy, opened, () => !!slots['group-summary']);\n const itemsLength = computed(() => flatItems.value.length);\n const {\n startIndex,\n stopIndex,\n pageCount,\n setItemsPerPage\n } = providePagination({\n page,\n itemsPerPage,\n itemsLength\n });\n const {\n paginatedItems\n } = usePaginatedItems({\n items: flatItems,\n startIndex,\n stopIndex,\n itemsPerPage\n });\n const paginatedItemsWithoutGroups = computed(() => extractRows(paginatedItems.value));\n const {\n isSelected,\n select,\n selectAll,\n toggleSelect,\n someSelected,\n allSelected\n } = provideSelection(props, {\n allItems: items,\n currentPage: paginatedItemsWithoutGroups\n });\n const {\n isExpanded,\n toggleExpand\n } = provideExpanded(props);\n useOptions({\n page,\n itemsPerPage,\n sortBy,\n groupBy,\n search\n });\n provideDefaults({\n VDataTableRows: {\n hideNoData: toRef(() => props.hideNoData),\n noDataText: toRef(() => props.noDataText),\n loading: toRef(() => props.loading),\n loadingText: toRef(() => props.loadingText)\n }\n });\n const slotProps = computed(() => ({\n page: page.value,\n itemsPerPage: itemsPerPage.value,\n sortBy: sortBy.value,\n pageCount: pageCount.value,\n toggleSort,\n setItemsPerPage,\n someSelected: someSelected.value,\n allSelected: allSelected.value,\n isSelected,\n select,\n selectAll,\n toggleSelect,\n isExpanded,\n toggleExpand,\n isGroupOpen,\n toggleGroup,\n items: paginatedItemsWithoutGroups.value.map(item => item.raw),\n internalItems: paginatedItemsWithoutGroups.value,\n groupedItems: paginatedItems.value,\n columns: columns.value,\n headers: headers.value\n }));\n useRender(() => {\n const dataTableFooterProps = VDataTableFooter.filterProps(props);\n const dataTableHeadersProps = VDataTableHeaders.filterProps(omit(props, ['multiSort']));\n const dataTableRowsProps = VDataTableRows.filterProps(props);\n const tableProps = VTable.filterProps(props);\n return _createVNode(VTable, _mergeProps({\n \"class\": ['v-data-table', {\n 'v-data-table--show-select': props.showSelect,\n 'v-data-table--loading': props.loading\n }, props.class],\n \"style\": props.style\n }, tableProps, {\n \"fixedHeader\": props.fixedHeader || props.sticky\n }), {\n top: () => slots.top?.(slotProps.value),\n default: () => slots.default ? slots.default(slotProps.value) : _createElementVNode(_Fragment, null, [slots.colgroup?.(slotProps.value), !props.hideDefaultHeader && _createElementVNode(\"thead\", {\n \"key\": \"thead\"\n }, [_createVNode(VDataTableHeaders, _mergeProps(dataTableHeadersProps, {\n \"multiSort\": !!props.multiSort\n }), slots)]), slots.thead?.(slotProps.value), !props.hideDefaultBody && _createElementVNode(\"tbody\", null, [slots['body.prepend']?.(slotProps.value), slots.body ? slots.body(slotProps.value) : _createVNode(VDataTableRows, _mergeProps(attrs, dataTableRowsProps, {\n \"items\": paginatedItems.value\n }), slots), slots['body.append']?.(slotProps.value)]), slots.tbody?.(slotProps.value), slots.tfoot?.(slotProps.value)]),\n bottom: () => slots.bottom ? slots.bottom(slotProps.value) : !props.hideDefaultFooter && _createElementVNode(_Fragment, null, [_createVNode(VDivider, null, null), _createVNode(VDataTableFooter, dataTableFooterProps, {\n prepend: slots['footer.prepend']\n })])\n });\n });\n return {};\n }\n});\n//# sourceMappingURL=VDataTable.js.map","import { Fragment as _Fragment, mergeProps as _mergeProps, createVNode as _createVNode, createElementVNode as _createElementVNode } from \"vue\";\n// Components\nimport { makeDataTableProps } from \"./VDataTable.js\";\nimport { makeVDataTableFooterProps, VDataTableFooter } from \"./VDataTableFooter.js\";\nimport { VDataTableHeaders } from \"./VDataTableHeaders.js\";\nimport { VDataTableRows } from \"./VDataTableRows.js\";\nimport { VDivider } from \"../VDivider/index.js\";\nimport { VTable } from \"../VTable/index.js\"; // Composables\nimport { provideExpanded } from \"./composables/expand.js\";\nimport { createGroupBy, provideGroupBy, useGroupedItems } from \"./composables/group.js\";\nimport { createHeaders } from \"./composables/headers.js\";\nimport { useDataTableItems } from \"./composables/items.js\";\nimport { useOptions } from \"./composables/options.js\";\nimport { createPagination, makeDataTablePaginateProps, providePagination } from \"./composables/paginate.js\";\nimport { provideSelection } from \"./composables/select.js\";\nimport { createSort, provideSort } from \"./composables/sort.js\";\nimport { provideDefaults } from \"../../composables/defaults.js\"; // Utilities\nimport { computed, provide, toRef, toRefs } from 'vue';\nimport { genericComponent, omit, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVDataTableServerProps = propsFactory({\n itemsLength: {\n type: [Number, String],\n required: true\n },\n ...makeDataTablePaginateProps(),\n ...makeDataTableProps(),\n ...makeVDataTableFooterProps()\n}, 'VDataTableServer');\nexport const VDataTableServer = genericComponent()({\n name: 'VDataTableServer',\n props: makeVDataTableServerProps(),\n emits: {\n 'update:modelValue': value => true,\n 'update:page': page => true,\n 'update:itemsPerPage': page => true,\n 'update:sortBy': sortBy => true,\n 'update:options': options => true,\n 'update:expanded': options => true,\n 'update:groupBy': value => true\n },\n setup(props, _ref) {\n let {\n attrs,\n slots\n } = _ref;\n const {\n groupBy\n } = createGroupBy(props);\n const {\n initialSortOrder,\n sortBy,\n multiSort,\n mustSort\n } = createSort(props);\n const {\n page,\n itemsPerPage\n } = createPagination(props);\n const {\n disableSort\n } = toRefs(props);\n const itemsLength = computed(() => parseInt(props.itemsLength, 10));\n const {\n columns,\n headers\n } = createHeaders(props, {\n groupBy,\n showSelect: toRef(() => props.showSelect),\n showExpand: toRef(() => props.showExpand)\n });\n const {\n items\n } = useDataTableItems(props, columns);\n const {\n toggleSort\n } = provideSort({\n initialSortOrder,\n sortBy,\n multiSort,\n mustSort,\n page\n });\n const {\n opened,\n isGroupOpen,\n toggleGroup,\n extractRows\n } = provideGroupBy({\n groupBy,\n sortBy,\n disableSort\n });\n const {\n pageCount,\n setItemsPerPage\n } = providePagination({\n page,\n itemsPerPage,\n itemsLength\n });\n const {\n flatItems\n } = useGroupedItems(items, groupBy, opened, () => !!slots['group-summary']);\n const {\n isSelected,\n select,\n selectAll,\n toggleSelect,\n someSelected,\n allSelected\n } = provideSelection(props, {\n allItems: items,\n currentPage: items\n });\n const {\n isExpanded,\n toggleExpand\n } = provideExpanded(props);\n const itemsWithoutGroups = computed(() => extractRows(items.value));\n useOptions({\n page,\n itemsPerPage,\n sortBy,\n groupBy,\n search: toRef(() => props.search)\n });\n provide('v-data-table', {\n toggleSort,\n sortBy\n });\n provideDefaults({\n VDataTableRows: {\n hideNoData: toRef(() => props.hideNoData),\n noDataText: toRef(() => props.noDataText),\n loading: toRef(() => props.loading),\n loadingText: toRef(() => props.loadingText)\n }\n });\n const slotProps = computed(() => ({\n page: page.value,\n itemsPerPage: itemsPerPage.value,\n sortBy: sortBy.value,\n pageCount: pageCount.value,\n toggleSort,\n setItemsPerPage,\n someSelected: someSelected.value,\n allSelected: allSelected.value,\n isSelected,\n select,\n selectAll,\n toggleSelect,\n isExpanded,\n toggleExpand,\n isGroupOpen,\n toggleGroup,\n items: itemsWithoutGroups.value.map(item => item.raw),\n internalItems: itemsWithoutGroups.value,\n groupedItems: flatItems.value,\n columns: columns.value,\n headers: headers.value\n }));\n useRender(() => {\n const dataTableFooterProps = VDataTableFooter.filterProps(props);\n const dataTableHeadersProps = VDataTableHeaders.filterProps(omit(props, ['multiSort']));\n const dataTableRowsProps = VDataTableRows.filterProps(props);\n const tableProps = VTable.filterProps(props);\n return _createVNode(VTable, _mergeProps({\n \"class\": ['v-data-table', {\n 'v-data-table--loading': props.loading\n }, props.class],\n \"style\": props.style\n }, tableProps, {\n \"fixedHeader\": props.fixedHeader || props.sticky\n }), {\n top: () => slots.top?.(slotProps.value),\n default: () => slots.default ? slots.default(slotProps.value) : _createElementVNode(_Fragment, null, [slots.colgroup?.(slotProps.value), !props.hideDefaultHeader && _createElementVNode(\"thead\", {\n \"key\": \"thead\",\n \"class\": \"v-data-table__thead\",\n \"role\": \"rowgroup\"\n }, [_createVNode(VDataTableHeaders, _mergeProps(dataTableHeadersProps, {\n \"multiSort\": !!props.multiSort\n }), slots)]), slots.thead?.(slotProps.value), !props.hideDefaultBody && _createElementVNode(\"tbody\", {\n \"class\": \"v-data-table__tbody\",\n \"role\": \"rowgroup\"\n }, [slots['body.prepend']?.(slotProps.value), slots.body ? slots.body(slotProps.value) : _createVNode(VDataTableRows, _mergeProps(attrs, dataTableRowsProps, {\n \"items\": flatItems.value\n }), slots), slots['body.append']?.(slotProps.value)]), slots.tbody?.(slotProps.value), slots.tfoot?.(slotProps.value)]),\n bottom: () => slots.bottom ? slots.bottom(slotProps.value) : !props.hideDefaultFooter && _createElementVNode(_Fragment, null, [_createVNode(VDivider, null, null), _createVNode(VDataTableFooter, dataTableFooterProps, {\n prepend: slots['footer.prepend']\n })])\n });\n });\n }\n});\n//# sourceMappingURL=VDataTableServer.js.map","import { mdiPound } from '@mdi/js'\nimport { useI18n } from '../../ioc'\nimport { SvgIcon } from '../../svg-icon'\nimport { default as numeral } from 'numeral'\nimport { h, defineComponent, toRefs } from 'vue'\nimport { ControlMenu } from '../../control-menu'\nimport { VListItem } from 'vuetify/components/VList'\nimport { getDefaultsForPropFactory } from '../../common/utils'\nimport { IconValue } from '@nhtio/vuetifiable/composables/icons'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { makeControlMenuControlButtonProps } from '../../control-menu/props'\nimport { makeComponentProps } from '@nhtio/vuetifiable/composables/component'\nimport type { PropType, ExtractPublicPropTypes } from 'vue'\n\nconst makePublicPerPageSelectorProps = propsFactory(\n {\n icon: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiPound }),\n },\n ...makeControlMenuControlButtonProps({\n color: 'surface-light',\n }),\n numeralFormat: {\n type: String,\n default: '0,0',\n },\n },\n 'ResourcefulIndexPerPageSelectorProps'\n)\n\nexport type PerPageSelectorPublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makePublicPerPageSelectorProps>\n>\n\nexport const defaultsForPerPageSelectorPublicProps = getDefaultsForPropFactory(\n makePublicPerPageSelectorProps\n)\n\nexport const makePerPageSelectorProps = propsFactory(\n {\n perPage: {\n type: [String, Number],\n default: 20,\n },\n ...makePublicPerPageSelectorProps(),\n ...makeComponentProps(),\n },\n 'ResourcefulIndexPerPageSelector'\n)\n\nexport type PerPageSelectorProps = ExtractPublicPropTypes<\n ReturnType<typeof makePerPageSelectorProps>\n>\n\nexport const PerPageSelector = defineComponent({\n name: 'ResourcefulIndexPerPageSelector',\n props: makePerPageSelectorProps(),\n emits: ['changed'],\n setup(props, { emit }) {\n const t = useI18n()\n const options = [10, 20, 50, 100]\n const {\n perPage,\n numeralFormat,\n class: componentClass,\n style,\n icon,\n color,\n density,\n size,\n height,\n dividePrependIcon,\n elevation,\n } = toRefs(props)\n return () =>\n h(\n ControlMenu,\n {\n class: componentClass.value,\n style: style.value,\n icon: icon.value,\n activator: {\n color: color.value,\n density: density.value,\n size: size.value,\n height: height.value,\n dividePrependIcon: dividePrependIcon.value,\n elevation: elevation.value,\n },\n },\n {\n cta: () =>\n h('div', { class: 'd-flex align-center' }, [\n h('span', { class: 'me-2' }, [t('resourcefulIndex.perPage'), ':']),\n h('span', {}, [numeral(perPage.value).format(numeralFormat.value)]),\n ]),\n default: ({ close }: { close: () => void }) =>\n options.map((o) =>\n h(VListItem, {\n title: o,\n onClick: () => {\n emit('changed', o)\n close()\n },\n active: o === perPage.value,\n })\n ),\n }\n )\n },\n})\n","import { useI18n } from '../../ioc'\nimport { useLocale } from 'vuetify'\nimport { SvgIcon } from '../../svg-icon'\nimport { deepmerge } from 'deepmerge-ts'\nimport { default as numeral } from 'numeral'\nimport { printf as format } from 'fast-printf'\nimport { ControlMenu } from '../../control-menu'\nimport { ControlButton } from '../../control-button'\nimport { VListItem } from 'vuetify/components/VList'\nimport { omit } from '@nhtio/vuetifiable/util/helpers'\nimport { h, defineComponent, computed, toRefs } from 'vue'\nimport { useMountedInBrowser } from '../../common/composables'\nimport { IconValue } from '@nhtio/vuetifiable/composables/icons'\nimport { VVirtualScroll } from 'vuetify/components/VVirtualScroll'\nimport { makeControlButtonProps } from '../../control-button/props'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { getDefaultsForPropFactory, asAbsInt } from '../../common/utils'\nimport { mdiPageFirst, mdiPageLast, mdiChevronLeft, mdiChevronRight } from '@mdi/js'\nimport type { PropType, ExtractPublicPropTypes } from 'vue'\nimport type { ControlMenuProps } from '../../control-menu/props'\nimport type { ControlButtonProps } from '../../control-button/props'\n\nconst makeCommonPaginationControlButtonProps = propsFactory(\n {\n ...omit(\n makeControlButtonProps({\n color: 'surface-light',\n elevation: 2,\n }),\n [\n 'state',\n 'badge',\n 'type',\n 'to',\n 'size',\n 'height',\n 'appendIcon',\n 'dividePrependIcon',\n 'divideAppendIcon',\n 'cta',\n ]\n ),\n },\n 'ResourcefulIndexCommonControlButton'\n)\n\nconst defaultCommonControlButtonProps = getDefaultsForPropFactory(\n makeCommonPaginationControlButtonProps\n)\n\nexport type PaginationControlButtonProps = ExtractPublicPropTypes<\n ReturnType<typeof makeCommonPaginationControlButtonProps>\n>\n\nexport const makeResourcefulIndexPaginationControlsPublicProps = propsFactory(\n {\n appearance: {\n type: Object as PropType<PaginationControlButtonProps>,\n default: () => defaultCommonControlButtonProps,\n },\n iconLeftEnd: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiPageFirst }),\n },\n iconLeft: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiChevronLeft }),\n },\n iconRight: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiChevronRight }),\n },\n iconRightEnd: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiPageLast }),\n },\n numeralFormat: {\n type: String,\n default: '0,0',\n },\n },\n 'ResourcefulIndexPaginationControls'\n)\n\nexport const defaultsForResourcefulIndexPaginationControlsPublicProps = getDefaultsForPropFactory(\n makeResourcefulIndexPaginationControlsPublicProps\n)\n\nexport type ResourcefulIndexPaginationControlsPublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makeResourcefulIndexPaginationControlsPublicProps>\n>\n\nexport const makeResourcefulIndexPaginationControlsProps = propsFactory(\n {\n ...makeResourcefulIndexPaginationControlsPublicProps(),\n page: {\n type: [String, Number],\n default: 1,\n },\n perPage: {\n type: [String, Number],\n default: 20,\n },\n total: {\n type: [String, Number],\n default: 0,\n },\n },\n 'ResourcefulIndexPaginationControls'\n)\n\nexport type ResourcefulIndexPaginationControlsProps = ExtractPublicPropTypes<\n ReturnType<typeof makeResourcefulIndexPaginationControlsProps>\n>\n\nexport const ResourcefulIndexPaginationControls = defineComponent({\n name: 'ResourcefulIndexPaginationControls',\n props: makeResourcefulIndexPaginationControlsProps(),\n emits: ['changed'],\n setup(props, { emit }) {\n const t = useI18n()\n const { isRtl } = useLocale()\n const mountedInBrowser = useMountedInBrowser()\n const {\n appearance,\n iconLeftEnd,\n iconLeft,\n iconRight,\n iconRightEnd,\n numeralFormat,\n page,\n perPage,\n total,\n } = toRefs(props)\n const computedAppearance = computed(() =>\n deepmerge(defaultCommonControlButtonProps, appearance.value)\n )\n const iconFirst = computed(() => (isRtl.value ? iconRightEnd.value : iconLeftEnd.value))\n const iconPrev = computed(() => (isRtl.value ? iconRight.value : iconLeft.value))\n const iconNext = computed(() => (isRtl.value ? iconLeft.value : iconRight.value))\n const iconLast = computed(() => (isRtl.value ? iconLeftEnd.value : iconRightEnd.value))\n const pageNumber = computed(() => asAbsInt(page.value, 1))\n const perPageNumber = computed(() => asAbsInt(perPage.value, 20))\n const totalNumber = computed(() => asAbsInt(total.value, 0))\n const totalPages = computed(() =>\n totalNumber.value === 0 ? 1 : Math.ceil(totalNumber.value / perPageNumber.value)\n )\n const restrictedPageNumber = computed(() =>\n Math.min(Math.max(pageNumber.value, 1), totalPages.value)\n )\n const isFirstPage = computed(() => restrictedPageNumber.value <= 1)\n const isLastPage = computed(() => restrictedPageNumber.value >= totalPages.value)\n const hasPreviousPage = computed(() => !isFirstPage.value && totalPages.value > 0)\n const hasNextPage = computed(() => !isLastPage.value && totalPages.value > 0)\n\n const setPage = (newPage: number) => {\n let val = newPage\n if (val < 1) val = 1\n if (val > totalPages.value) val = totalPages.value\n if (val !== restrictedPageNumber.value) {\n emit('changed', val)\n }\n }\n\n const firstButtonBindings = computed<ControlButtonProps>(() => ({\n ...computedAppearance.value,\n prependIcon: iconFirst.value,\n state: {\n disabled: isFirstPage.value || totalPages.value === 0,\n },\n class: ['me-2'],\n onClick: () => setPage(1),\n }))\n const prevButtonBindings = computed<ControlButtonProps>(() => ({\n ...computedAppearance.value,\n prependIcon: iconPrev.value,\n state: {\n disabled: !hasPreviousPage.value,\n },\n onClick: () => setPage(restrictedPageNumber.value - 1),\n }))\n const nextButtonBindings = computed<ControlButtonProps>(() => ({\n ...computedAppearance.value,\n prependIcon: iconNext.value,\n state: {\n disabled: !hasNextPage.value,\n },\n onClick: () => setPage(restrictedPageNumber.value + 1),\n }))\n const lastButtonBindings = computed<ControlButtonProps>(() => ({\n ...computedAppearance.value,\n prependIcon: iconLast.value,\n state: {\n disabled: isLastPage.value || totalPages.value === 0,\n },\n class: ['ms-2'],\n onClick: () => setPage(totalPages.value),\n }))\n const jumperMenuBindings = computed<ControlMenuProps>(() => ({\n activator: {\n ...computedAppearance.value,\n state: {\n disabled: totalPages.value <= 1,\n },\n },\n cta: format(\n t('resourcefulIndex.pageOf'),\n numeral(restrictedPageNumber.value).format(numeralFormat.value),\n numeral(totalPages.value).format(numeralFormat.value)\n ),\n }))\n const pageOptions = computed(() => Array.from({ length: totalPages.value }, (_, i) => i + 1))\n\n return () =>\n h(\n 'div',\n { class: ['d-flex', 'align-center', 'justify-center'] },\n !mountedInBrowser.value\n ? []\n : [\n h(ControlButton, firstButtonBindings.value),\n h(ControlButton, prevButtonBindings.value),\n h(ControlMenu, jumperMenuBindings.value, {\n default: ({ close }: { close: () => void }) =>\n h(\n VVirtualScroll,\n {\n items: pageOptions.value,\n itemHeight: 40, // default height of a VListItem\n },\n {\n default: ({ item }: { item: number }) =>\n h(VListItem, {\n title: format(\n t('resourcefulIndex.jumpToPage'),\n numeral(item).format(numeralFormat.value)\n ),\n active: item === restrictedPageNumber.value,\n onClick: () => {\n setPage(item)\n close()\n },\n }),\n }\n ),\n }),\n h(ControlButton, nextButtonBindings.value),\n h(ControlButton, lastButtonBindings.value),\n ]\n )\n },\n})\n","import { useI18n } from '../../ioc'\nimport { useDisplay } from 'vuetify'\nimport { encode } from '@nhtio/encoder'\nimport { SvgIcon } from '../../svg-icon'\nimport { deepmerge } from 'deepmerge-ts'\nimport { default as numeral } from 'numeral'\nimport { default as ordinal } from 'ordinal'\nimport { printf as format } from 'fast-printf'\nimport { VImg } from 'vuetify/components/VImg'\nimport { VBtn } from 'vuetify/components/VBtn'\nimport { isObject } from '../../common/guards'\nimport { ControlMenu } from '../../control-menu'\nimport { VBadge } from 'vuetify/components/VBadge'\nimport { VHover } from 'vuetify/components/VHover'\nimport { VListItem } from 'vuetify/components/VList'\nimport { VDivider } from 'vuetify/components/VDivider'\nimport { VTooltip } from 'vuetify/components/VTooltip'\nimport { useResourcefulIndexScopedDisplay } from '../index'\nimport { pick, omit } from '@nhtio/vuetifiable/util/helpers'\nimport { VEmptyState } from 'vuetify/components/VEmptyState'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { propsAndEmitsFactory } from '../../common/factories'\nimport { makeControlMenuProps } from '../../control-menu/props'\nimport { default as errorSvg } from '../../icons/error.svg?url'\nimport { VDataTableServer } from 'vuetify/components/VDataTable'\nimport { IconValue } from '@nhtio/vuetifiable/composables/icons'\nimport { VContainer, VRow, VCol } from 'vuetify/components/VGrid'\nimport { default as warningSvg } from '../../icons/warning.svg?url'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { VProgressCircular } from 'vuetify/components/VProgressCircular'\nimport { makeResourcefulIndexActionsProps, useTableActions } from '../actions'\nimport { ExtractSlotDefinitions, NamedSlotParameters } from '../../common/types'\nimport { defaultsForPerPageSelectorPublicProps, PerPageSelector } from './_per_page_selector'\nimport { makeVDataTableServerProps } from '@nhtio/vuetifiable/components/VDataTable/VDataTableServer'\nimport {\n defaultsForResourcefulIndexPaginationControlsPublicProps,\n ResourcefulIndexPaginationControls,\n} from './_pagination_controls'\nimport {\n getDefaultsForPropFactory,\n stripUndefinedValuesFromObject,\n typeAndFormatToResourcefulFieldType,\n toUnreactive,\n} from '../../common/utils'\nimport {\n h,\n defineComponent,\n computed,\n toRefs,\n toDisplayString,\n warn as vueWarn,\n shallowRef,\n triggerRef,\n watch,\n cloneVNode,\n} from 'vue'\nimport {\n RBigIntField,\n RBooleanField,\n RDateTimeField,\n RDateField,\n RIntegerField,\n RNumberField,\n RStringField,\n RUnsignedIntegerField,\n} from '../../fields'\nimport {\n mdiSort,\n mdiEyeOffOutline,\n mdiPlus,\n mdiSortAscending,\n mdiSortDescending,\n mdiCheckboxBlankOutline,\n mdiCheckboxMultipleBlank,\n mdiCheckboxMultipleBlankOutline,\n mdiCheckboxMultipleOutline,\n mdiCheckboxOutline,\n} from '@mdi/js'\nimport type { ObjectSchema } from '@nhtio/validation'\nimport type { ResourcefulFieldLabelTerms } from '../props'\nimport type { ResourcefulFieldType } from '../../common/utils'\nimport type { ResourcefulSchemaDefinition, ResourcefulSortPayload } from '../types'\nimport type { PerPageSelectorPublicProps, PerPageSelectorProps } from './_per_page_selector'\nimport type { makeVEmptyStateProps } from '@nhtio/vuetifiable/components/VEmptyState/VEmptyState'\nimport type {\n PropType,\n ExtractPublicPropTypes,\n VNode,\n SlotsType,\n ComponentPublicInstance,\n} from 'vue'\nimport type {\n ResourcefulIndexPaginationControlsProps,\n ResourcefulIndexPaginationControlsPublicProps,\n} from './_pagination_controls'\nimport type {\n RBigIntFieldProps,\n RBooleanFieldProps,\n RDateTimeFieldProps,\n RDateFieldProps,\n RIntegerFieldProps,\n RNumberFieldProps,\n RStringFieldProps,\n RUnsignedIntegerFieldProps,\n} from '../../fields/'\n\ntype VDataTableServerSlots = ExtractSlotDefinitions<typeof VDataTableServer.slots>\ntype VDataTableServerNamedItemSlotParameters = NamedSlotParameters<\n VDataTableServerSlots,\n `item.${string}`\n>\ntype VDataTableServerHeaderDataTableSelectSlotParameters = NamedSlotParameters<\n VDataTableServerSlots,\n 'header.data-table-select'\n>\ntype VDataTableServerItemDataTableSelectSlotParameters = NamedSlotParameters<\n VDataTableServerSlots,\n 'item.data-table-select'\n>\n\ntype ColumnHeader = Omit<VDataTableServerHeader, 'value'> & { value: string }\n\nconst encoder = (_key: string, value: any) => {\n if (typeof value === 'bigint') {\n return value.toString()\n }\n if (typeof value === 'undefined') {\n return null\n }\n return value\n}\n\nconst makeSafeForJson = (val: any) => JSON.parse(JSON.stringify(val, encoder))\n\nexport type ResourcefulIndexTableSlots = {\n 'no-results-media': () => any\n 'no-data-media': () => any\n 'error-media': () => any\n 'loading-media': (args: { percent: number }) => any\n 'no-results-actions': () => any\n 'no-data-actions': () => any\n 'body-append': () => any\n 'aggregations'?: () => any\n} & {\n [slot: `item-${string}`]: (...args: VDataTableServerNamedItemSlotParameters) => any\n}\n\nexport const makeEmptyStateProps = propsFactory(\n {\n icon: {\n type: IconValue as PropType<IconValue>,\n default: () => h(VImg, { src: warningSvg }),\n },\n noDataTitleTerm: {\n type: String,\n default: 'resourcefulIndex.table.noData.title',\n },\n noDataTextTerm: {\n type: String,\n default: 'resourcefulIndex.table.noData.text',\n },\n noResultsTitleTerm: {\n type: String,\n default: 'resourcefulIndex.table.noResults.title',\n },\n noResultsTextTerm: {\n type: String,\n default: 'resourcefulIndex.table.noResults.text',\n },\n loadingTextTerm: {\n type: String,\n default: 'resourcefulIndex.table.loading.text',\n },\n },\n 'ResourcefulIndexEmptyState'\n)\n\nconst makeAddColumnButtonProps = propsFactory(\n {\n ...omit(makeControlMenuProps(), [\n 'icon',\n 'activator',\n 'cta',\n 'count',\n 'countFormat',\n 'badgeColor',\n ]),\n btnColor: {\n type: String as PropType<string>,\n default: 'surface-light',\n },\n },\n 'ResourcefulIndexAddColumnButton'\n)\n\nexport type AddColumnButtonProps = ExtractPublicPropTypes<\n ReturnType<typeof makeAddColumnButtonProps>\n>\n\nexport const defaultAddColumnButtonProps = getDefaultsForPropFactory(makeAddColumnButtonProps)\n\nexport type EmptyStateProps = ExtractPublicPropTypes<ReturnType<typeof makeEmptyStateProps>>\n\ntype VEmptyStatePublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVEmptyStateProps>>\n\nexport const defaultEmptyStateProps = getDefaultsForPropFactory(makeEmptyStateProps)\n\nexport type VDataTableServerProps = ExtractPublicPropTypes<\n ReturnType<typeof makeVDataTableServerProps>\n>\n\nexport type VDataTableServerHeaders = NonNullable<VDataTableServerProps['headers']>\nexport type VDataTableServerHeader = VDataTableServerHeaders[number]\n\nexport type ComputedColumnDefinition<T = any> = Omit<VDataTableServerHeader, 'value'> & {\n value: string\n compute: (row: Record<string, any>) => T\n kind: ResourcefulFieldType\n render?: (row: Record<string, any>) => string | VNode\n}\n\nexport type ComputedColumnDefinitions = Array<ComputedColumnDefinition>\n\nexport type FieldValueFormatter<T = any, O = any> = (\n value: T,\n row: Record<string, any>,\n overrides?: O\n) => string | VNode\nexport type FieldValueFormatters = Record<string, FieldValueFormatter>\n\ntype GeneralFieldOverrideProps = 'to' | 'href'\n\nexport type RBigIntFieldOverrideProps = Pick<RBigIntFieldProps, NumericFieldOverrideProps>\nexport type RBooleanFieldOverrideProps = Pick<\n RBooleanFieldProps,\n | GeneralFieldOverrideProps\n | 'renderAs'\n | 'textForTrue'\n | 'iconForTrue'\n | 'textForFalse'\n | 'iconForFalse'\n | 'textForUndetermined'\n | 'iconForUndetermined'\n | 'iconForSelectedRadio'\n | 'iconForUnselectedRadio'\n | 'selectMenuIcon'\n | 'ripple'\n>\nexport type RDateTimeFieldOverrideProps = Pick<\n RDateTimeFieldProps,\n GeneralFieldOverrideProps | 'displayFormat' | 'displayLocale' | 'displayTimezone'\n>\nexport type RDateFieldOverrideProps = Pick<\n RDateFieldProps,\n GeneralFieldOverrideProps | 'displayFormat' | 'displayLocale' | 'displayTimezone'\n>\ntype NumericFieldOverrideProps = GeneralFieldOverrideProps | 'format'\nexport type RIntegerFieldOverrideProps = Pick<RIntegerFieldProps, NumericFieldOverrideProps>\nexport type RNumberFieldOverrideProps = Pick<RNumberFieldProps, NumericFieldOverrideProps>\nexport type RStringFieldOverrideProps = Pick<\n RStringFieldProps,\n | GeneralFieldOverrideProps\n | 'autolink'\n | 'showPasswordIcon'\n | 'hidePasswordIcon'\n | 'passwordMaskIcon'\n | 'colorPickerIcon'\n | 'colorPickerModeIcon'\n>\nexport type RUnsignedIntegerFieldOverrideProps = Pick<\n RUnsignedIntegerFieldProps,\n NumericFieldOverrideProps\n>\n\nexport type FieldOverrideProps =\n | RBigIntFieldOverrideProps\n | RBooleanFieldOverrideProps\n | RDateTimeFieldOverrideProps\n | RDateFieldOverrideProps\n | RIntegerFieldOverrideProps\n | RNumberFieldOverrideProps\n | RStringFieldOverrideProps\n | RUnsignedIntegerFieldOverrideProps\n\nconst extractRBigIntFieldOverrideProps = (props: any): RBigIntFieldOverrideProps => {\n if (!isObject(props)) {\n return {} as RBigIntFieldOverrideProps\n }\n return stripUndefinedValuesFromObject({\n to: props.to,\n href: props.href,\n format: props.format,\n }) as RBigIntFieldOverrideProps\n}\nconst extractRBooleanFieldOverrideProps = (props: any): RBooleanFieldOverrideProps => {\n if (!isObject(props)) {\n return {} as RBooleanFieldOverrideProps\n }\n return stripUndefinedValuesFromObject({\n to: props.to,\n href: props.href,\n renderAs: props.renderAs,\n textForTrue: props.textForTrue,\n iconForTrue: props.iconForTrue,\n textForFalse: props.textForFalse,\n iconForFalse: props.iconForFalse,\n textForUndetermined: props.textForUndetermined,\n iconForUndetermined: props.iconForUndetermined,\n iconForSelectedRadio: props.iconForSelectedRadio,\n iconForUnselectedRadio: props.iconForUnselectedRadio,\n selectMenuIcon: props.selectMenuIcon,\n ripple: props.ripple,\n }) as RBooleanFieldOverrideProps\n}\nconst extractRDateTimeFieldOverrideProps = (props: any): RDateTimeFieldOverrideProps => {\n if (!isObject(props)) {\n return {} as RDateTimeFieldOverrideProps\n }\n return stripUndefinedValuesFromObject({\n to: props.to,\n href: props.href,\n displayFormat: props.displayFormat,\n displayLocale: props.displayLocale,\n displayTimezone: props.displayTimezone,\n }) as RDateTimeFieldOverrideProps\n}\nconst extractRDateFieldOverrideProps = (props: any): RDateFieldOverrideProps => {\n if (!isObject(props)) {\n return {} as RDateFieldOverrideProps\n }\n return stripUndefinedValuesFromObject({\n to: props.to,\n href: props.href,\n displayFormat: props.displayFormat,\n displayLocale: props.displayLocale,\n displayTimezone: props.displayTimezone,\n }) as RDateFieldOverrideProps\n}\nconst extractRIntegerFieldOverrideProps = (props: any): RIntegerFieldOverrideProps => {\n if (!isObject(props)) {\n return {} as RIntegerFieldOverrideProps\n }\n return stripUndefinedValuesFromObject({\n to: props.to,\n href: props.href,\n format: props.format,\n }) as RIntegerFieldOverrideProps\n}\nconst extractRNumberFieldOverrideProps = (props: any): RNumberFieldOverrideProps => {\n if (!isObject(props)) {\n return {} as RNumberFieldOverrideProps\n }\n return stripUndefinedValuesFromObject({\n to: props.to,\n href: props.href,\n format: props.format,\n }) as RNumberFieldOverrideProps\n}\nconst extractRStringFieldOverrideProps = (props: any): RStringFieldOverrideProps => {\n if (!isObject(props)) {\n return {} as RStringFieldOverrideProps\n }\n return stripUndefinedValuesFromObject({\n to: props.to,\n href: props.href,\n format: props.format,\n }) as RStringFieldOverrideProps\n}\nconst extractRUnsignedIntegerFieldOverrideProps = (\n props: any\n): RUnsignedIntegerFieldOverrideProps => {\n if (!isObject(props)) {\n return {} as RUnsignedIntegerFieldOverrideProps\n }\n return stripUndefinedValuesFromObject({\n to: props.to,\n href: props.href,\n format: props.format,\n }) as RUnsignedIntegerFieldOverrideProps\n}\n\nexport type GeneralFieldOverrideOptions = {\n bigint?: RBigIntFieldOverrideProps\n boolean?: RBooleanFieldOverrideProps\n integer?: RIntegerFieldOverrideProps\n number?: RNumberFieldOverrideProps\n dateTime?: RDateTimeFieldOverrideProps\n date?: RDateFieldOverrideProps\n string?: RStringFieldOverrideProps\n unsignedInteger?: RUnsignedIntegerFieldOverrideProps\n}\n\nexport type FieldSpecificOverrideOptions = Record<string, FieldOverrideProps>\n\nexport const renderAsBigint: FieldValueFormatter<\n RBigIntFieldProps['modelValue'],\n RBigIntFieldOverrideProps\n> = (\n value: RBigIntFieldProps['modelValue'],\n _row: Record<string, any>,\n overrides: RBigIntFieldOverrideProps = {}\n) =>\n h(RBigIntField, {\n modelValue: value,\n renderMode: 'read',\n ...overrides,\n } satisfies RBigIntFieldProps)\nexport const renderAsBoolean: FieldValueFormatter<\n RBooleanFieldProps['modelValue'],\n RBooleanFieldOverrideProps\n> = (\n value: RBooleanFieldProps['modelValue'],\n _row: Record<string, any>,\n overrides: RBooleanFieldOverrideProps = {}\n) =>\n h(RBooleanField, {\n modelValue: value,\n renderMode: 'read',\n ...overrides,\n } satisfies RBooleanFieldProps)\nexport const renderAsInteger: FieldValueFormatter<\n RIntegerFieldProps['modelValue'],\n RIntegerFieldOverrideProps\n> = (\n value: RIntegerFieldProps['modelValue'],\n _row: Record<string, any>,\n overrides: RIntegerFieldOverrideProps = {}\n) =>\n h(RIntegerField, {\n modelValue: value,\n renderMode: 'read',\n ...overrides,\n } satisfies RIntegerFieldProps)\nexport const renderAsNumber: FieldValueFormatter<\n RNumberFieldProps['modelValue'],\n RNumberFieldOverrideProps\n> = (\n value: RNumberFieldProps['modelValue'],\n _row: Record<string, any>,\n overrides: RNumberFieldOverrideProps = {}\n) =>\n h(RNumberField, {\n modelValue: value,\n renderMode: 'read',\n ...overrides,\n } satisfies RNumberFieldProps)\nexport const renderAsDateTime: FieldValueFormatter<\n RDateTimeFieldProps['modelValue'],\n RDateTimeFieldOverrideProps\n> = (\n value: RDateTimeFieldProps['modelValue'],\n _row: Record<string, any>,\n overrides: RDateTimeFieldOverrideProps = {}\n) =>\n h(RDateTimeField, {\n modelValue: value,\n renderMode: 'read',\n ...overrides,\n } satisfies RDateTimeFieldProps)\nexport const renderAsDate: FieldValueFormatter<\n RDateFieldProps['modelValue'],\n RDateFieldOverrideProps\n> = (\n value: RDateFieldProps['modelValue'],\n _row: Record<string, any>,\n overrides: RDateFieldOverrideProps = {}\n) =>\n h(RDateField, {\n modelValue: value,\n renderMode: 'read',\n ...overrides,\n } satisfies RDateFieldProps)\nexport const renderAsString: FieldValueFormatter<\n RStringFieldProps['modelValue'],\n RStringFieldOverrideProps\n> = (\n value: RStringFieldProps['modelValue'],\n _row: Record<string, any>,\n overrides: RStringFieldOverrideProps = {}\n) =>\n h(RStringField, {\n modelValue: value,\n renderMode: 'read',\n ...overrides,\n } satisfies RStringFieldProps)\nexport const renderAsUnsignedInteger: FieldValueFormatter<\n RUnsignedIntegerFieldProps['modelValue'],\n RUnsignedIntegerFieldOverrideProps\n> = (\n value: RUnsignedIntegerFieldProps['modelValue'],\n _row: Record<string, any>,\n overrides: RUnsignedIntegerFieldOverrideProps = {}\n) =>\n h(RUnsignedIntegerField, {\n modelValue: value,\n renderMode: 'read',\n ...overrides,\n } satisfies RUnsignedIntegerFieldProps)\n\nexport const { makeProps: makeResourcefulIndexTableProps, emits: resourcefulIndexTableEmits } =\n propsAndEmitsFactory(\n {\n ...pick(\n makeVDataTableServerProps({\n sortAscIcon: () => h(SvgIcon, { d: mdiSortAscending }),\n sortDescIcon: () => h(SvgIcon, { d: mdiSortDescending }),\n }),\n [\n 'cellProps',\n 'density',\n 'hover',\n 'items',\n 'rowProps',\n 'search',\n 'loading',\n 'sortAscIcon',\n 'sortDescIcon',\n ]\n ),\n errorCode: {\n type: [String, Number] as PropType<string | number | undefined>,\n default: undefined,\n },\n sortUnsortedIcon: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiSort }),\n },\n removeColumnIcon: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiEyeOffOutline }),\n },\n addColumnIcon: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiPlus }),\n },\n possibleFields: {\n type: Object as PropType<ResourcefulSchemaDefinition>,\n default: () => ({}),\n },\n showingFields: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n sortableFields: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n currentSorting: {\n type: Object as PropType<ResourcefulSortPayload>,\n default: () => ({}),\n },\n labels: {\n type: Object as PropType<ResourcefulFieldLabelTerms>,\n default: () => ({}),\n },\n page: {\n type: [String, Number],\n default: 0,\n },\n perPage: {\n type: [String, Number],\n default: 0,\n },\n total: {\n type: [String, Number],\n default: 0,\n },\n percent: {\n type: Number,\n default: 0,\n },\n emptyState: {\n type: Object as PropType<EmptyStateProps>,\n default: () => defaultEmptyStateProps,\n },\n progressColor: {\n type: String as PropType<string | undefined>,\n default: undefined,\n },\n addColumnButton: {\n type: Object as PropType<AddColumnButtonProps>,\n default: () => defaultAddColumnButtonProps,\n },\n perPageSelector: {\n type: Object as PropType<PerPageSelectorPublicProps>,\n default: () => defaultsForPerPageSelectorPublicProps,\n },\n pagination: {\n type: Object as PropType<ResourcefulIndexPaginationControlsPublicProps>,\n default: () => defaultsForResourcefulIndexPaginationControlsPublicProps,\n },\n computedColumns: {\n type: Array as PropType<ComputedColumnDefinitions>,\n default: () => [],\n },\n formatters: {\n type: Object as PropType<FieldValueFormatters>,\n default: () => ({}),\n },\n typedFieldOptions: {\n type: Object as PropType<GeneralFieldOverrideOptions | undefined>,\n default: undefined,\n },\n specificFieldOptions: {\n type: Object as PropType<FieldSpecificOverrideOptions | undefined>,\n default: undefined,\n },\n bulkEditingSchema: {\n type: Object as PropType<ObjectSchema | undefined>,\n default: undefined,\n },\n selectedItems: {\n type: Array as PropType<any[]>,\n default: () => [],\n },\n ...makeResourcefulIndexActionsProps(),\n },\n {\n 'toggle:sorting': (column: string) =>\n 'string' === typeof column && column.trim().length > 0 && column !== 'id',\n 'delete:column': (column: string) =>\n 'string' === typeof column && column.trim().length > 0 && column !== 'id',\n 'add:column': (column: string) =>\n 'string' === typeof column && column.trim().length > 0 && column !== 'id',\n 'update:perPage': (perPage: number) =>\n typeof perPage === 'number' &&\n !Number.isNaN(perPage) &&\n Number.isInteger(perPage) &&\n perPage > 0 &&\n perPage <= 100,\n 'update:page': (page: number) =>\n typeof page === 'number' && !Number.isNaN(page) && Number.isInteger(page) && page > 0,\n 'update:selectedItems': (selected: any[]) =>\n Array.isArray(selected) && selected.every((s) => isObject(s)),\n },\n 'ResourcefulIndexTable'\n )\n\nexport type ResourcefulIndexTableProps = ExtractPublicPropTypes<\n ReturnType<typeof makeResourcefulIndexTableProps>\n>\n\nexport const makeResourcefulIndexTablePublicProps = propsFactory(\n {\n ...omit(makeResourcefulIndexTableProps(), [\n 'search',\n 'loading',\n 'percent',\n 'items',\n 'possibleFields',\n 'showingFields',\n 'sortableFields',\n 'currentSorting',\n 'labels',\n 'total',\n 'perPage',\n 'progressColor',\n 'addColumnButton',\n ]),\n },\n 'ResourcefulIndexTablePublic'\n)\n\nexport type ResourcefulIndexTablePublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makeResourcefulIndexTablePublicProps>\n>\n\nexport interface OnVTableServerOptionsUpdateOptions {\n groupBy: VDataTableServerProps['groupBy']\n sortBy: VDataTableServerProps['sortBy']\n page: VDataTableServerProps['page']\n itemsPerPage: VDataTableServerProps['itemsPerPage']\n search: VDataTableServerProps['search']\n}\n\nconst memoizedEmptySingleCheckboxIcon = () => h(SvgIcon, { d: mdiCheckboxBlankOutline })\nconst memoizedEmptyMultipleCheckboxIcon = () => h(SvgIcon, { d: mdiCheckboxMultipleBlankOutline })\nconst memoizedPartialMultipleCheckboxIcon = () => h(SvgIcon, { d: mdiCheckboxMultipleBlank })\nconst memoizedFullSingleCheckboxIcon = () => h(SvgIcon, { d: mdiCheckboxOutline })\nconst memoizedFullMultipleCheckboxIcon = () => h(SvgIcon, { d: mdiCheckboxMultipleOutline })\n\nexport const ResourcefulIndexTable = defineComponent({\n name: 'ResourcefulIndexTable',\n props: makeResourcefulIndexTableProps(),\n emits: resourcefulIndexTableEmits,\n slots: Object as SlotsType<ResourcefulIndexTableSlots>,\n setup(props, { slots, emit }) {\n const t = useI18n()\n const { smAndDown, platform, xs } = useResourcefulIndexScopedDisplay()\n const { mdAndDown: mdAndDownDisplay } = useDisplay()\n const likelyTouchable = computed(\n () =>\n platform.value.touch ||\n platform.value.android ||\n platform.value.ios ||\n mdAndDownDisplay.value\n )\n const {\n cellProps,\n density,\n hover,\n items,\n rowProps,\n search,\n loading,\n percent,\n possibleFields,\n showingFields,\n sortableFields,\n currentSorting,\n labels,\n total,\n emptyState: customizedEmptyState,\n sortAscIcon,\n sortDescIcon,\n sortUnsortedIcon,\n removeColumnIcon,\n addColumnIcon,\n addColumnButton,\n perPageSelector,\n perPage,\n pagination,\n page,\n formatters,\n typedFieldOptions,\n specificFieldOptions,\n errorCode,\n bulkEditingSchema,\n selectedItems: externalSelectedItems,\n actions,\n } = toRefs(props)\n const {\n renderActionsForRecord,\n reactiveContextMenuRenderer,\n openContextMenuForRecord,\n renderClipboardFeedback: renderCopyUrlActionClipboardFeedback,\n isProcessing: recordActionsAreProcessing,\n } = useTableActions(actions, loading)\n const emptyState = computed(() => deepmerge(defaultEmptyStateProps, customizedEmptyState.value))\n const computedShowingFields = computed(() => {\n const ret = [...showingFields.value]\n return ret.includes('id') ? ret : ['id', ...ret]\n })\n const normalizedTypedFieldOptions = computed<Required<GeneralFieldOverrideOptions>>(() =>\n deepmerge(\n {\n bigint: {},\n boolean: {},\n integer: {},\n number: {},\n dateTime: {},\n date: {},\n string: {},\n unsignedInteger: {},\n },\n typedFieldOptions.value || {}\n )\n )\n const normalizedSpecificFieldOptions = computed(() =>\n deepmerge({}, specificFieldOptions.value || {})\n )\n const headers = computed<VDataTableServerHeaders>(() =>\n [...computedShowingFields.value].map((f) => {\n const asPossible = possibleFields.value[f] || {}\n if (asPossible.type === 'computed' && asPossible['x-table-header-definition']) {\n return asPossible['x-table-header-definition'] as VDataTableServerHeader\n }\n return {\n key: f,\n value: f,\n title: labels.value[f] ? t(labels.value[f]) : t(f),\n sortable: false,\n nowrap: true,\n }\n })\n )\n const addColumnButtonBindings = computed<AddColumnButtonProps>(\n () =>\n deepmerge(\n stripUndefinedValuesFromObject({\n ...defaultAddColumnButtonProps,\n btnColor: undefined,\n }),\n stripUndefinedValuesFromObject({\n ...addColumnButton.value,\n btnColor: undefined,\n }),\n {\n icon: addColumnIcon.value,\n activator: deepmerge(\n {\n size: 'x-small',\n },\n {\n color: (defaultAddColumnButtonProps as any).btnColor,\n },\n {\n color: addColumnButton.value.btnColor,\n }\n ),\n }\n ) as AddColumnButtonProps\n )\n const unshownFields = computed(() =>\n Object.entries(possibleFields.value)\n .filter(([k]) => !computedShowingFields.value.includes(k))\n .map(([k, v]) => ({ key: k, ...v, label: labels.value[k] ? t(labels.value[k]) : t(k) }))\n )\n const rowHeight = computed(() => {\n if (density.value === 'comfortable') return 48\n if (density.value === 'compact') return 40\n return 56 // default density\n })\n const computedTableHeight = computed(() => {\n const base = xs.value ? 162 : 82\n if (items.value.length === 0) {\n return base + 310\n }\n return base + items.value.length * rowHeight.value\n })\n const comparisonHeight = computed(() => (xs.value ? 512 : 432))\n const onCellContextMenu = (\n item: any,\n _column: VDataTableServerHeader,\n e: MouseEvent | TouchEvent\n ) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n openContextMenuForRecord(e, toUnreactive(item))\n }\n let longPressTimeout: ReturnType<typeof setTimeout> | undefined\n const onCellTouchStart = (\n item: any,\n column: VDataTableServerHeader,\n e: MouseEvent | TouchEvent\n ) => {\n if (!likelyTouchable.value) return\n if (e.type === 'click' && 'button' in e && e.button !== 0) return\n if (longPressTimeout) clearTimeout(longPressTimeout)\n longPressTimeout = setTimeout(() => {\n onCellContextMenu(item, column, e)\n }, 600)\n }\n const onCellTouchEnd = (\n _item: any,\n _column: VDataTableServerHeader,\n _e: MouseEvent | TouchEvent\n ) => {\n if (!likelyTouchable.value) return\n if (longPressTimeout) {\n clearTimeout(longPressTimeout)\n longPressTimeout = undefined\n }\n }\n const canBulkEdit = computed(() => 'object' === typeof bulkEditingSchema.value)\n const selectedItems = shallowRef<any[]>([])\n const showSelect = computed(() => items.value.length > 1 && canBulkEdit.value)\n watch(\n externalSelectedItems,\n (is) => {\n if (encode(selectedItems.value) === encode(is)) {\n return\n }\n selectedItems.value = is\n triggerRef(selectedItems)\n },\n { immediate: true, deep: true }\n )\n const dataTableBindings = computed<VDataTableServerProps>(() => ({\n 'headers':\n actions.value.length > 0\n ? [\n {\n key: '__data_table_actions',\n value: '__data_table_actions',\n sortable: false,\n nowrap: true,\n headerProps: { class: ['__resourceful_index_actions_header', 'px-0'] },\n cellProps: {\n class: ['__resourceful_index_actions_cell', 'px-0'],\n style: { padding: '0 !important', width: 0 },\n },\n },\n ...headers.value,\n ]\n : headers.value,\n 'density': density.value,\n 'hover': hover.value,\n 'items': items.value,\n 'rowProps': rowProps.value,\n 'search': search.value,\n 'itemsLength': total.value,\n 'hideDefaultFooter': true,\n 'style': {\n background: 'transparent',\n position: 'relative',\n },\n 'loading': loading.value,\n 'onUpdate:options': (_options: OnVTableServerOptionsUpdateOptions) => {},\n // workaround used to enforce minimum height\n // since vuetify's VDataTable* components do not have this option\n 'height':\n computedTableHeight.value < comparisonHeight.value ? comparisonHeight.value : undefined,\n // used to enable right-click & context menu on cells\n 'cellProps'({ item, column }: { item: any; column: VDataTableServerHeader }) {\n return {\n ...cellProps.value,\n onContextmenu: (e: MouseEvent) =>\n onCellContextMenu(toUnreactive(item), toUnreactive(column as any) as any, e),\n onMousedown: (e: MouseEvent) =>\n onCellTouchStart(toUnreactive(item), toUnreactive(column as any) as any, e),\n onTouchstart: (e: TouchEvent) =>\n onCellTouchStart(toUnreactive(item), toUnreactive(column as any) as any, e),\n onMouseup: (e: MouseEvent) =>\n onCellTouchEnd(toUnreactive(item), toUnreactive(column as any) as any, e),\n onTouchend: (e: TouchEvent) =>\n onCellTouchEnd(toUnreactive(item), toUnreactive(column as any) as any, e),\n onTouchcancel: (e: TouchEvent) =>\n onCellTouchEnd(toUnreactive(item), toUnreactive(column as any) as any, e),\n }\n },\n 'returnObject': true,\n 'modelValue': selectedItems.value,\n 'onUpdate:modelValue': (val: any[]) => {\n selectedItems.value = val\n triggerRef(selectedItems)\n emit('update:selectedItems', val)\n },\n 'showSelect': showSelect.value,\n }))\n const emptyStateBindings = computed<VEmptyStatePublicProps>(() =>\n stripUndefinedValuesFromObject({\n icon: emptyState.value.icon,\n headline: errorCode.value\n ? t('resourcefulIndex.table.badRequest.title')\n : search.value\n ? t(emptyState.value.noResultsTitleTerm || 'resourcefulIndex.table.noResults.title')\n : t(emptyState.value.noDataTitleTerm || 'resourcefulIndex.table.noData.title'),\n text: errorCode.value\n ? format(t('resourcefulIndex.table.badRequest.text'), errorCode.value)\n : search.value\n ? t(emptyState.value.noResultsTextTerm || 'resourcefulIndex.table.noResults.text')\n : t(emptyState.value.noDataTextTerm || 'resourcefulIndex.table.noData.text'),\n class: ['my-7'],\n height: 320,\n })\n )\n const perPageBindings = computed<PerPageSelectorProps>(() =>\n deepmerge(defaultsForPerPageSelectorPublicProps, perPageSelector.value, {\n perPage: perPage.value,\n onChanged: (newPerPage: number) => {\n emit('update:perPage', newPerPage)\n },\n })\n )\n const paginationBindings = computed<ResourcefulIndexPaginationControlsProps>(() =>\n deepmerge(defaultsForResourcefulIndexPaginationControlsPublicProps, pagination.value, {\n page: page.value,\n perPage: perPage.value,\n total: total.value,\n onChanged: (newPage: number) => {\n emit('update:page', newPage)\n },\n })\n )\n const paginationRow = computed(() =>\n h(VContainer, { fluid: true, class: ['py-0'] }, () => [\n h(VRow, {}, () => [\n h(\n VCol,\n {\n cols: 12,\n md: 6,\n class: [\n 'px-1',\n 'd-flex',\n {\n 'pb-0': smAndDown.value,\n 'justify-md-start': true,\n 'justify-center': true,\n },\n ],\n },\n () => h(PerPageSelector, perPageBindings.value)\n ),\n h(\n VCol,\n {\n cols: 12,\n md: 6,\n class: [\n 'px-1',\n 'd-flex',\n {\n 'pt-0': smAndDown.value,\n 'justify-md-end': true,\n 'justify-center': true,\n },\n ],\n },\n () => h(ResourcefulIndexPaginationControls, paginationBindings.value)\n ),\n ]),\n ])\n )\n useRender(() =>\n h(\n VDataTableServer,\n dataTableBindings.value,\n // eslint-disable-next-line @nht/require-function-slots-for-programmatic-components\n deepmerge(\n {\n 'no-data': () =>\n h(\n VEmptyState,\n emptyStateBindings.value,\n // eslint-disable-next-line @nht/require-function-slots-for-programmatic-components\n stripUndefinedValuesFromObject({\n media: errorCode.value\n ? () =>\n slots['error-media'] ? slots['error-media']!() : h(VImg, { src: errorSvg })\n : search.value && slots['no-results-media']\n ? () => slots['no-results-media']!()\n : !search.value && slots['no-data-media']\n ? () => slots['no-data-media']!()\n : undefined,\n actions: () =>\n errorCode.value\n ? undefined\n : search.value && slots['no-results-actions']\n ? slots['no-results-actions']!()\n : !search.value && slots['no-data-actions']\n ? slots['no-data-actions']!()\n : undefined,\n })\n ),\n 'loader': () => h('span'),\n 'loading': () =>\n h(\n VEmptyState,\n {\n headline: numeral(percent.value / 100).format('0%'),\n text: t(\n emptyState.value.loadingTextTerm || 'resourcefulIndex.table.loading.text'\n ),\n class: ['my-7'],\n height: 320,\n },\n {\n media: () =>\n slots['loading-media']\n ? slots['loading-media']({ percent: percent.value })\n : h(VProgressCircular, {\n modelValue: percent.value,\n color: props.progressColor,\n size: 96,\n width: 10,\n }),\n }\n ),\n 'top': () => [\n slots.aggregations ? slots.aggregations!() : null,\n slots.aggregations ? h(VDivider) : null,\n cloneVNode(paginationRow.value),\n h(VDivider),\n ],\n // 'body.prepend': ({ columns }: { columns: VDataTableServerHeaders }) =>\n // h('tr', {}, [\n // h('td', { colspan: columns.length }, [\n // h('div', { class: ['d-flex', 'justify-center'] }, 'Got to Before Body'),\n // ]),\n // ]),\n 'body.append': ({}: { columns: VDataTableServerHeaders }) => [\n // h('tr', {}, [\n // h('td', { colspan: columns.length }, [\n // h('div', { class: ['d-flex', 'justify-center'] }, 'Got to After Body'),\n // ]),\n // ]),\n slots['body-append'] ? slots['body-append']!() : undefined,\n ],\n 'bottom': () => [\n h(VDivider),\n cloneVNode(paginationRow.value),\n reactiveContextMenuRenderer(),\n renderCopyUrlActionClipboardFeedback(),\n ],\n 'header.data-table-select': (\n ...args: VDataTableServerHeaderDataTableSelectSlotParameters\n ) => {\n const { selectAll, someSelected, allSelected } = args[0]\n return h(VBtn, {\n icon: allSelected\n ? memoizedFullMultipleCheckboxIcon\n : someSelected\n ? memoizedPartialMultipleCheckboxIcon\n : memoizedEmptyMultipleCheckboxIcon,\n variant: 'text',\n size: 'small',\n onClick: (e: MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n selectAll(!allSelected)\n },\n onKeydown: (e: KeyboardEvent) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault()\n e.stopPropagation()\n selectAll(!allSelected)\n }\n },\n disabled: loading.value === true || recordActionsAreProcessing.value === true,\n })\n },\n 'item.data-table-select': (\n ...args: VDataTableServerItemDataTableSelectSlotParameters\n ) => {\n const { item, index, isSelected, toggleSelect } = args[0]\n const asSelectable = { value: item, selectable: true }\n return h(VBtn, {\n icon: isSelected(asSelectable)\n ? memoizedFullSingleCheckboxIcon\n : memoizedEmptySingleCheckboxIcon,\n variant: 'text',\n size: 'small',\n onClick: (e: MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n toggleSelect(asSelectable, index, e)\n },\n onKeydown: (e: KeyboardEvent) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault()\n e.stopPropagation()\n toggleSelect(asSelectable, index)\n }\n },\n disabled: loading.value === true || recordActionsAreProcessing.value === true,\n })\n },\n 'item.__data_table_actions': ({\n item: actionableRecord,\n }: VDataTableServerNamedItemSlotParameters[0]) => {\n return renderActionsForRecord(actionableRecord)\n },\n },\n Object.assign(\n {},\n ...[...headers.value].map((cr: VDataTableServerHeader, headerIndex) => {\n const c: ColumnHeader = cr as unknown as ColumnHeader\n const isSortable = sortableFields.value.includes(c.value)\n const currentSort = currentSorting.value[c.value]\n const currentSortIndex = Object.keys(currentSorting.value).indexOf(c.value) + 1\n const isRemovable = c.value !== 'id' && computedShowingFields.value.length > 1\n const isLast = headerIndex === headers.value.length - 1\n const definition = possibleFields.value[c.value] || {}\n const isComputed = definition.type === 'computed'\n return {\n [`header.${c.value}`]: () =>\n h('div', { class: ['w-100', 'd-flex', 'align-center'] }, [\n isComputed\n ? h('span', { class: ['font-weight-bold', 'me-2'] }, c.title)\n : h(\n VTooltip,\n {\n location: 'bottom start',\n },\n {\n activator: ({ props: tooltipProps }: any) =>\n h(\n 'span',\n {\n ...tooltipProps,\n class: ['font-weight-bold', 'me-2'],\n },\n c.title\n ),\n default: () => h('code', {}, c.value),\n }\n ),\n !isSortable\n ? undefined\n : h(\n VHover,\n {},\n {\n default: ({ isHovering, props: hoverProps }: any) =>\n h(VBtn, {\n ...hoverProps,\n style: stripUndefinedValuesFromObject({\n opacity:\n !likelyTouchable.value &&\n !isHovering &&\n !['asc', 'desc'].includes(currentSort)\n ? '0.1'\n : undefined,\n }),\n icon:\n currentSort === 'asc'\n ? sortAscIcon.value\n : currentSort === 'desc'\n ? sortDescIcon.value\n : sortUnsortedIcon.value,\n variant: 'text',\n size: 'x-small',\n class: ['ms-2'],\n onClick: () => {\n emit('toggle:sorting', c.value)\n },\n }),\n }\n ),\n !isSortable || currentSortIndex === 0\n ? undefined\n : h(VBadge, {\n content: ordinal(currentSortIndex),\n inline: true,\n class: ['ms-1'],\n }),\n !isRemovable\n ? undefined\n : h(\n VHover,\n {},\n {\n default: ({ isHovering, props: hoverProps }: any) =>\n h(VBtn, {\n ...hoverProps,\n style: stripUndefinedValuesFromObject({\n opacity:\n !likelyTouchable.value && !isHovering ? '0.1' : undefined,\n }),\n icon: removeColumnIcon.value,\n size: 'x-small',\n variant: 'text',\n class: ['ms-auto'],\n onClick: () => {\n emit('delete:column', c.value)\n },\n }),\n }\n ),\n !isLast || unshownFields.value.length === 0\n ? undefined\n : h(\n ControlMenu,\n {\n ...addColumnButtonBindings.value,\n class: [\n {\n 'ms-2': isRemovable,\n 'ms-auto': !isRemovable,\n },\n ],\n },\n {\n default: ({ close }: { close: () => void }) => [\n ...unshownFields.value.map((f) =>\n h(VListItem, {\n title: f.label,\n onClick: () => {\n emit('add:column', f.key)\n close()\n },\n })\n ),\n ],\n }\n ),\n ]),\n [`item.${c.value}`]: (...args: VDataTableServerNamedItemSlotParameters) => {\n // if a custom slot is provided, use it instead of the default\n if (slots[`item-${c.value}`]) {\n return slots[`item-${c.value}`]!(...args)\n }\n const [slotProps] = args\n const displayValue = toDisplayString(makeSafeForJson(slotProps.value))\n if (formatters.value[c.value]) {\n try {\n return formatters.value[c.value](slotProps.value, slotProps.item)\n } catch (e) {\n vueWarn(\n 'Error in field formatter for \"' +\n c.value +\n '\", falling back to default handling'\n )\n }\n }\n if (possibleFields.value[c.value]) {\n if ('$ref' in definition && 'string' === typeof definition.$ref) {\n /*\n |--------------------------------------------------------------------------\n | We are dealing with a referenced definition, i.e. a relationship.\n |--------------------------------------------------------------------------\n */\n const key =\n 'x-resourceful-display-key' in definition\n ? (definition['x-resourceful-display-key'] as string)\n : 'id'\n const value =\n slotProps.value && isObject(slotProps.value)\n ? (slotProps.value as Record<string, any>)[key]\n : ''\n const overrides: RStringFieldOverrideProps = deepmerge(\n normalizedTypedFieldOptions.value.string,\n {\n format: definition.format,\n },\n extractRStringFieldOverrideProps(\n normalizedSpecificFieldOptions.value[c.value]\n )\n )\n return renderAsString(value, slotProps.item, overrides)\n }\n if ('computed' === definition.type) {\n if ('x-table-header-definition' in definition) {\n /*\n |--------------------------------------------------------------------------\n | We are dealing with a computed field which has enough of a defintion to\n | render it properly.\n |--------------------------------------------------------------------------\n */\n if (\n 'render' in definition['x-table-header-definition'] &&\n typeof definition['x-table-header-definition']['render'] === 'function'\n ) {\n /*\n |--------------------------------------------------------------------------\n | If provided with a predefined render function, use it.\n |--------------------------------------------------------------------------\n */\n return definition['x-table-header-definition'].render(slotProps.item)\n } else {\n /*\n |--------------------------------------------------------------------------\n | Otherwise, update the definition to be the return type of the computed function.\n |--------------------------------------------------------------------------\n */\n slotProps.value = definition['x-table-header-definition'].compute(\n slotProps.item\n )\n }\n }\n }\n if (\n 'x-resourceful-choices' in definition &&\n Array.isArray(definition['x-resourceful-choices'])\n ) {\n /*\n |--------------------------------------------------------------------------\n | We are dealing with an enum/choices field.\n | These should be displayed as strings no matter their underlying type.\n |--------------------------------------------------------------------------\n */\n const value = definition['x-resourceful-choices'].find(\n (choice) => choice.value === slotProps.value\n )\n const displayable: string = isObject(value)\n ? (value.label as string) ||\n (value.title as string) ||\n toDisplayString(value.value)\n : toDisplayString(value)\n const overrides: RStringFieldOverrideProps = deepmerge(\n normalizedTypedFieldOptions.value.string,\n {\n format: definition.format,\n },\n extractRStringFieldOverrideProps(\n normalizedSpecificFieldOptions.value[c.value]\n )\n )\n return renderAsString(displayable, slotProps.item, overrides)\n }\n if (c.value === 'role') {\n console.log({ definition })\n }\n const definedType =\n 'computed' === definition.type\n ? 'x-table-header-definition' in definition\n ? (definition['x-table-header-definition'].kind as ResourcefulFieldType)\n : 'computed'\n : typeAndFormatToResourcefulFieldType(definition.type, definition.format)\n switch (definedType) {\n case 'bigint': {\n const value = slotProps.value as RBigIntFieldProps['modelValue']\n const overrides: RBigIntFieldOverrideProps = deepmerge(\n normalizedTypedFieldOptions.value.bigint,\n extractRBigIntFieldOverrideProps(\n normalizedSpecificFieldOptions.value[c.value]\n )\n )\n return renderAsBigint(value, slotProps.item, overrides)\n }\n case 'boolean': {\n const value = slotProps.value as RBooleanFieldProps['modelValue']\n const overrides: RBooleanFieldOverrideProps = deepmerge(\n normalizedTypedFieldOptions.value.boolean,\n extractRBooleanFieldOverrideProps(\n normalizedSpecificFieldOptions.value[c.value]\n )\n )\n return renderAsBoolean(value, slotProps.item, overrides)\n }\n case 'integer': {\n const value = slotProps.value as RIntegerFieldProps['modelValue']\n const overrides: RIntegerFieldOverrideProps = deepmerge(\n normalizedTypedFieldOptions.value.integer,\n extractRIntegerFieldOverrideProps(\n normalizedSpecificFieldOptions.value[c.value]\n )\n )\n return renderAsInteger(value, slotProps.item, overrides)\n }\n case 'number': {\n const value = slotProps.value as RNumberFieldProps['modelValue']\n const overrides: RNumberFieldOverrideProps = deepmerge(\n normalizedTypedFieldOptions.value.number,\n extractRNumberFieldOverrideProps(\n normalizedSpecificFieldOptions.value[c.value]\n )\n )\n return renderAsNumber(value, slotProps.item, overrides)\n }\n case 'dateTime': {\n const value = slotProps.value as RDateTimeFieldProps['modelValue']\n const overrides: RDateTimeFieldOverrideProps = deepmerge(\n {\n displayFormat: 'medWithWeekday',\n displayTimezone: 'local',\n },\n normalizedTypedFieldOptions.value.dateTime,\n extractRDateTimeFieldOverrideProps(\n normalizedSpecificFieldOptions.value[c.value]\n )\n )\n return renderAsDateTime(value, slotProps.item, overrides)\n }\n case 'date': {\n const value = slotProps.value as RDateFieldProps['modelValue']\n const overrides: RDateFieldOverrideProps = deepmerge(\n {\n displayFormat: 'med',\n displayTimezone: 'local',\n },\n normalizedTypedFieldOptions.value.date,\n extractRDateFieldOverrideProps(\n normalizedSpecificFieldOptions.value[c.value]\n )\n )\n return renderAsDate(value, slotProps.item, overrides)\n }\n case 'string': {\n const value = slotProps.value as RStringFieldProps['modelValue']\n const overrides: RStringFieldOverrideProps = deepmerge(\n normalizedTypedFieldOptions.value.string,\n {\n format: definition.format,\n },\n extractRStringFieldOverrideProps(\n normalizedSpecificFieldOptions.value[c.value]\n )\n )\n return renderAsString(value, slotProps.item, overrides)\n }\n case 'unsignedInteger': {\n const value = slotProps.value as RUnsignedIntegerFieldProps['modelValue']\n const overrides: RUnsignedIntegerFieldOverrideProps = deepmerge(\n normalizedTypedFieldOptions.value.unsignedInteger,\n extractRUnsignedIntegerFieldOverrideProps(\n normalizedSpecificFieldOptions.value[c.value]\n )\n )\n return renderAsUnsignedInteger(value, slotProps.item, overrides)\n }\n default:\n return toDisplayString(`This is a ${definition.type} field.`)\n }\n }\n return displayValue\n },\n }\n })\n )\n )\n )\n )\n return {}\n },\n})\n\nexport type ResourcefulIndexTable = InstanceType<typeof ResourcefulIndexTable> &\n ComponentPublicInstance\n","import { useI18n } from '../../ioc'\nimport { SvgIcon } from '../../svg-icon'\nimport { deepmerge } from 'deepmerge-ts'\nimport { default as numeral } from 'numeral'\nimport { ControlButton } from '../../control-button'\nimport { ControlMenu } from '@/private/control-menu'\nimport { omit } from '@nhtio/vuetifiable/util/helpers'\nimport { pick } from '@nhtio/vuetifiable/util/helpers'\nimport { ControlButtonBar } from '../../control-button-bar'\nimport { propsAndEmitsFactory } from '../../common/factories'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { makeControlButtonProps } from '../../control-button/props'\nimport { h, defineComponent, computed, toRefs, ref, warn } from 'vue'\nimport { makeDensityProps } from '@nhtio/vuetifiable/composables/density'\nimport { makeResourcefulIndexActionsProps, useBulkActions } from '../actions'\nimport { makeElevationProps } from '@nhtio/vuetifiable/composables/elevation'\nimport { getDefaultsForPropFactory, stripUndefinedValuesFromObject } from '../../common/utils'\nimport {\n makeControlButtonBarProps,\n defaultControlButtonBarOverflowMenuButtonProps,\n} from '../../control-button-bar/props'\nimport {\n mdiFilter,\n mdiViewColumnOutline,\n mdiSort,\n mdiPencilBoxMultipleOutline,\n mdiFileDownload,\n mdiPlaylistPlay,\n} from '@mdi/js'\nimport type { PropFactory } from '../../common/utils'\nimport type { ResourcefulSortPayload } from '../types'\nimport type { FilterGroup } from '../../filtration/schema'\nimport type { PropType, ExtractPublicPropTypes, VNode } from 'vue'\nimport type { ResourcefulIndexUrlAction, ResourcefulIndexFunctionAction } from '../actions'\n\nconst makeCommonControlButtonProps = propsFactory(\n {\n ...omit(\n makeControlButtonProps({\n color: 'surface-light',\n }),\n [\n 'state',\n 'badge',\n 'type',\n 'to',\n 'size',\n 'height',\n 'density',\n 'elevation',\n 'appendIcon',\n 'dividePrependIcon',\n 'divideAppendIcon',\n ]\n ),\n },\n 'ResourcefulIndexCommonControlButton'\n)\n\nconst makeColumnControlButtonProps = propsFactory(\n {\n ...makeCommonControlButtonProps({\n cta: 'resourcefulIndex.columnControlButton.cta',\n prependIcon: () => h(SvgIcon, { d: mdiViewColumnOutline }),\n }),\n },\n 'ResourcefulIndexColumnControlButton'\n)\n\nconst makeFilterControlButtonProps = propsFactory(\n {\n ...makeCommonControlButtonProps({\n cta: 'resourcefulIndex.filterControlButton.cta',\n prependIcon: () => h(SvgIcon, { d: mdiFilter }),\n }),\n },\n 'ResourcefulIndexFilterControlButton'\n)\n\nconst makeSortingControlButtonProps = propsFactory(\n {\n ...makeCommonControlButtonProps({\n cta: 'resourcefulIndex.sortingControlButton.cta',\n prependIcon: () => h(SvgIcon, { d: mdiSort }),\n }),\n },\n 'ResourcefulIndexSortingControlButton'\n)\n\nconst makeBulkActionsControlButtonProps = propsFactory(\n {\n ...makeCommonControlButtonProps({\n cta: 'resourcefulIndex.bulkActionsControlButton.cta',\n prependIcon: () => h(SvgIcon, { d: mdiPlaylistPlay }),\n }),\n },\n 'ResourcefulIndexBulkActionsControlButton'\n)\n\nconst makeBulkUpdateControlButtonProps = propsFactory(\n {\n ...makeCommonControlButtonProps({\n cta: 'resourcefulIndex.bulkUpdateControlButton.cta',\n prependIcon: () => h(SvgIcon, { d: mdiPencilBoxMultipleOutline }),\n }),\n },\n 'ResourcefulIndexBulkUpdateControlButton'\n)\n\nconst makeDownloadControlButtonProps = propsFactory(\n {\n ...makeCommonControlButtonProps({\n cta: 'resourcefulIndex.downloadControlButton.cta',\n prependIcon: () => h(SvgIcon, { d: mdiFileDownload }),\n }),\n },\n 'ResourcefulIndexDownloadControlButton'\n)\n\nexport type ColumnControlButtonProps = ExtractPublicPropTypes<\n ReturnType<typeof makeColumnControlButtonProps>\n>\n\nexport type FilterControlButtonProps = ExtractPublicPropTypes<\n ReturnType<typeof makeFilterControlButtonProps>\n>\n\nexport type SortingControlButtonProps = ExtractPublicPropTypes<\n ReturnType<typeof makeSortingControlButtonProps>\n>\n\nexport type BulkActionsControlButtonProps = ExtractPublicPropTypes<\n ReturnType<typeof makeBulkActionsControlButtonProps>\n>\n\nexport type BulkUpdateControlButtonProps = ExtractPublicPropTypes<\n ReturnType<typeof makeBulkUpdateControlButtonProps>\n>\n\nexport type DownloadControlButtonProps = ExtractPublicPropTypes<\n ReturnType<typeof makeDownloadControlButtonProps>\n>\n\nexport const defaultCommonControlButtonProps = getDefaultsForPropFactory(\n makeCommonControlButtonProps\n)\nexport const defaultColumnControlButtonProps = getDefaultsForPropFactory(\n makeColumnControlButtonProps\n)\nexport const defaultFilterControlButtonProps = getDefaultsForPropFactory(\n makeFilterControlButtonProps\n)\nexport const defaultSortingControlButtonProps = getDefaultsForPropFactory(\n makeSortingControlButtonProps\n)\n\nexport const defaultBulkActionsControlButtonProps = getDefaultsForPropFactory(\n makeBulkActionsControlButtonProps\n)\n\nexport const defaultBulkUpdateControlButtonProps = getDefaultsForPropFactory(\n makeBulkUpdateControlButtonProps\n)\n\nexport const defaultDownloadControlButtonProps = getDefaultsForPropFactory(\n makeDownloadControlButtonProps\n)\n\nexport const {\n makeProps: makeResourcefulIndexControlsProps,\n emits: resourcefulIndexControlsEmits,\n} = propsAndEmitsFactory(\n {\n columnControlButton: {\n type: Object as PropType<ColumnControlButtonProps>,\n default: () => defaultColumnControlButtonProps,\n },\n filterControlButton: {\n type: Object as PropType<FilterControlButtonProps>,\n default: () => defaultFilterControlButtonProps,\n },\n sortingControlButton: {\n type: Object as PropType<SortingControlButtonProps>,\n default: () => defaultSortingControlButtonProps,\n },\n bulkActionsControlButton: {\n type: Object as PropType<BulkActionsControlButtonProps>,\n default: () => defaultBulkActionsControlButtonProps,\n },\n bulkUpdateControlButton: {\n type: Object as PropType<BulkUpdateControlButtonProps>,\n default: () => defaultBulkUpdateControlButtonProps,\n },\n downloadControlButton: {\n type: Object as PropType<DownloadControlButtonProps>,\n default: () => defaultDownloadControlButtonProps,\n },\n ...pick(\n makeControlButtonBarProps({\n overflowMenuButtonOptions: {\n ...defaultControlButtonBarOverflowMenuButtonProps,\n color: 'surface-light',\n },\n }),\n ['overflowMenuButtonOptions']\n ),\n dividePrependIcon: {\n type: Boolean,\n default: false,\n },\n divideAppendIcon: {\n type: Boolean,\n default: false,\n },\n size: {\n type: String as PropType<'x-small' | 'small' | 'medium' | 'large' | 'x-large'>,\n default: 'x-small',\n },\n height: {\n type: [String, Number] as PropType<string | number | null>,\n default: '24',\n },\n ...makeDensityProps(),\n ...makeElevationProps({\n elevation: 2,\n }),\n disabled: {\n type: Boolean,\n default: false,\n },\n columns: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n filters: {\n type: Object as PropType<FilterGroup>,\n default: () => ({\n conditions: [],\n operator: 'AND',\n }),\n },\n sorts: {\n type: Object as PropType<ResourcefulSortPayload>,\n default: () => ({}),\n },\n canBulkUpdate: {\n type: Boolean,\n default: false,\n },\n selectedCount: {\n type: Number,\n default: 0,\n },\n pageCount: {\n type: Number,\n default: 0,\n },\n allCount: {\n type: Number,\n default: 0,\n },\n canDownload: {\n type: Boolean,\n default: false,\n },\n ...makeResourcefulIndexActionsProps(),\n columnsActive: {\n type: Boolean,\n default: false,\n },\n filtersActive: {\n type: Boolean,\n default: false,\n },\n sortingActive: {\n type: Boolean,\n default: false,\n },\n bulkUpdateActive: {\n type: Boolean,\n default: false,\n },\n downloadActive: {\n type: Boolean,\n default: false,\n },\n onBulkActionInvoked: {\n type: Function as PropType<\n | ((\n action: ResourcefulIndexUrlAction | ResourcefulIndexFunctionAction\n ) => void | Promise<void> | PromiseLike<void>)\n | undefined\n >,\n default: undefined,\n },\n },\n {\n 'click:filter': () => true,\n 'click:column': () => true,\n 'click:sorting': () => true,\n 'click:bulkUpdate': () => true,\n 'click:download': () => true,\n },\n 'ResourcefulIndexControls'\n)\n\nexport type ResourcefulIndexControlsProps = ExtractPublicPropTypes<\n ReturnType<typeof makeResourcefulIndexControlsProps>\n>\n\nexport const defaultResourcefulIndexControlsProps = getDefaultsForPropFactory(\n makeResourcefulIndexControlsProps as PropFactory\n)\n\nconst makePublicResourcefulIndexControlsProps = propsFactory(\n {\n ...omit(makeResourcefulIndexControlsProps(), [\n 'disabled',\n 'columns',\n 'filters',\n 'sorts',\n 'canBulkUpdate',\n 'selectedCount',\n 'pageCount',\n 'allCount',\n 'canDownload',\n 'actions',\n 'columnsActive',\n 'filtersActive',\n 'sortingActive',\n ]),\n },\n 'ResourcefulIndexControlsPublic'\n)\n\nexport type ResourcefulIndexControlsPublicProps = ExtractPublicPropTypes<\n ReturnType<typeof makePublicResourcefulIndexControlsProps>\n>\n\nexport const defaultsForResourcefulIndexControlsProps = getDefaultsForPropFactory(\n makePublicResourcefulIndexControlsProps\n)\n\nexport const ResourcefulIndexControls = defineComponent({\n name: 'ResourcefulIndexControls',\n props: makeResourcefulIndexControlsProps(),\n emit: resourcefulIndexControlsEmits,\n setup(props, { emit, slots }) {\n const t = useI18n()\n const {\n columnControlButton,\n filterControlButton,\n sortingControlButton,\n bulkActionsControlButton,\n bulkUpdateControlButton,\n downloadControlButton,\n overflowMenuButtonOptions,\n dividePrependIcon,\n divideAppendIcon,\n size,\n height,\n disabled,\n density,\n elevation,\n columns,\n filters,\n sorts,\n actions,\n canBulkUpdate,\n selectedCount,\n pageCount,\n allCount,\n canDownload,\n columnsActive,\n filtersActive,\n sortingActive,\n bulkUpdateActive,\n downloadActive,\n } = toRefs(props)\n const getFilterCount = (group: FilterGroup) => {\n let count = 0\n group.conditions.forEach((condition) => {\n if ('operator' in condition && 'conditions' in condition) {\n count += getFilterCount(condition as FilterGroup)\n } else {\n count += 1\n }\n })\n return count\n }\n const controlButtonBarRef = ref<ControlButtonBar | null>(null)\n const closeControlButtonBarOverflowMenu = () => {\n if (controlButtonBarRef.value) {\n controlButtonBarRef.value.close()\n }\n }\n const filterCount = computed(() => getFilterCount(filters.value))\n const columnControlCommonProps = computed(() => ({\n dividePrependIcon: dividePrependIcon.value,\n divideAppendIcon: divideAppendIcon.value,\n size: size.value,\n height: height.value,\n density: density.value,\n elevation: elevation.value,\n state: {\n disabled:\n disabled.value ||\n columnsActive.value ||\n filtersActive.value ||\n sortingActive.value ||\n bulkUpdateActive.value ||\n downloadActive.value,\n },\n }))\n const commonControlButtonBindings = computed(() =>\n deepmerge(defaultCommonControlButtonProps, columnControlCommonProps.value)\n )\n const columnControlButtonBindings = computed(() =>\n deepmerge(\n defaultCommonControlButtonProps,\n defaultColumnControlButtonProps,\n columnControlCommonProps.value,\n columnControlButton.value,\n {\n onClick: () => {\n emit('click:column')\n closeControlButtonBarOverflowMenu()\n },\n badge: {\n content:\n columns.value.length <= 0 ? undefined : numeral(columns.value.length).format('0,0'),\n },\n }\n )\n )\n const filterControlButtonBindings = computed(() =>\n deepmerge(\n defaultCommonControlButtonProps,\n defaultFilterControlButtonProps,\n columnControlCommonProps.value,\n filterControlButton.value,\n {\n onClick: () => {\n emit('click:filter')\n closeControlButtonBarOverflowMenu()\n },\n badge: {\n content: filterCount.value <= 0 ? undefined : numeral(filterCount.value).format('0,0'),\n },\n }\n )\n )\n const sortingControlButtonBindings = computed(() =>\n deepmerge(\n defaultCommonControlButtonProps,\n defaultSortingControlButtonProps,\n columnControlCommonProps.value,\n sortingControlButton.value,\n {\n onClick: () => {\n emit('click:sorting')\n closeControlButtonBarOverflowMenu()\n },\n badge: {\n content:\n Object.keys(sorts.value).length <= 0\n ? undefined\n : numeral(Object.keys(sorts.value).length).format('0,0'),\n },\n }\n )\n )\n const actionableCount = computed(() =>\n selectedCount.value > 0 ? selectedCount.value : allCount.value\n )\n\n const bulkActionControlMenuRef = ref<ControlMenu | null>(null)\n const closeBulkActionControlMenu = () => {\n if (bulkActionControlMenuRef.value) {\n bulkActionControlMenuRef.value.close()\n }\n }\n\n const { bulkActionListItems, canShowBulkActionList, bulkActionListDisabled } = useBulkActions(\n actions,\n allCount,\n actionableCount,\n (action) => {\n if ('function' === typeof props.onBulkActionInvoked) {\n try {\n props.onBulkActionInvoked(action)\n } catch (e) {\n warn('Failed to invoke bulk action function', e)\n }\n } else {\n warn('Missing \"onBulkActionInvoked\" prop to invoke bulk action function')\n }\n closeControlButtonBarOverflowMenu()\n closeBulkActionControlMenu()\n }\n )\n const actionableBadgeContent = computed(() => {\n if (actionableCount.value <= 0) {\n return undefined\n }\n if (selectedCount.value > 0) {\n if (selectedCount.value === pageCount.value) {\n return [\n numeral(selectedCount.value).format('0,0'),\n numeral(allCount.value).format('0,0'),\n ].join(' / ')\n }\n return numeral(selectedCount.value).format('0,0')\n }\n return numeral(allCount.value).format('0,0')\n })\n\n const bulkActionsControlButtonBindings = computed(() => ({\n cta: t(bulkActionsControlButton.value.cta!),\n icon: bulkActionsControlButton.value.prependIcon,\n activator: stripUndefinedValuesFromObject({\n color: bulkActionsControlButton.value.color,\n density: columnControlCommonProps.value.density,\n size: columnControlCommonProps.value.size,\n height: columnControlCommonProps.value.height,\n elevation: columnControlCommonProps.value.elevation,\n dividePrependIcon: columnControlCommonProps.value.dividePrependIcon,\n }),\n disabled:\n bulkActionListDisabled.value ||\n disabled.value ||\n columnsActive.value ||\n filtersActive.value ||\n sortingActive.value ||\n bulkUpdateActive.value ||\n downloadActive.value,\n noPadding: true,\n }))\n\n const bulkUpdateControlButtonBindings = computed(() =>\n deepmerge(\n defaultCommonControlButtonProps,\n defaultBulkUpdateControlButtonProps,\n columnControlCommonProps.value,\n bulkUpdateControlButton.value,\n {\n onClick: () => {\n emit('click:bulkUpdate')\n closeControlButtonBarOverflowMenu()\n },\n badge: {\n content: actionableBadgeContent.value,\n },\n state: {\n disabled:\n actionableCount.value < 2 ||\n disabled.value ||\n columnsActive.value ||\n filtersActive.value ||\n sortingActive.value ||\n bulkUpdateActive.value ||\n downloadActive.value,\n },\n }\n )\n )\n const downloadControlButtonBindings = computed(() =>\n deepmerge(\n defaultCommonControlButtonProps,\n defaultDownloadControlButtonProps,\n columnControlCommonProps.value,\n downloadControlButton.value,\n {\n onClick: () => {\n emit('click:download')\n closeControlButtonBarOverflowMenu()\n },\n badge: {\n content: actionableBadgeContent.value,\n },\n state: {\n disabled:\n actionableCount.value <= 0 ||\n disabled.value ||\n columnsActive.value ||\n filtersActive.value ||\n sortingActive.value ||\n bulkUpdateActive.value ||\n downloadActive.value,\n },\n }\n )\n )\n const buttons = computed<Array<VNode>>(\n () =>\n [\n slots.before ? slots.before({ props: commonControlButtonBindings.value }) : null,\n h(ControlButton, {\n ...columnControlButtonBindings.value,\n cta: t(columnControlButtonBindings.value.cta!),\n class: ['ma-2', 'ms-0'],\n }),\n h(ControlButton, {\n ...filterControlButtonBindings.value,\n cta: t(filterControlButtonBindings.value.cta!),\n class: ['ma-2', 'ms-0'],\n }),\n h(ControlButton, {\n ...sortingControlButtonBindings.value,\n cta: t(sortingControlButtonBindings.value.cta!),\n class: ['ma-2', 'ms-0'],\n }),\n canShowBulkActionList.value\n ? h(\n ControlMenu,\n {\n ref: bulkActionControlMenuRef,\n ...bulkActionsControlButtonBindings.value,\n },\n () => bulkActionListItems.value\n )\n : null,\n canBulkUpdate.value\n ? h(ControlButton, {\n ...bulkUpdateControlButtonBindings.value,\n cta: t(bulkUpdateControlButtonBindings.value.cta!),\n class: ['ma-2', 'ms-0'],\n })\n : null,\n canDownload.value\n ? h(ControlButton, {\n ...downloadControlButtonBindings.value,\n cta: t(downloadControlButtonBindings.value.cta!),\n class: ['ma-2', 'ms-0'],\n })\n : null,\n slots.after ? slots.after({ props: commonControlButtonBindings.value }) : null,\n ].filter((b) => b !== null) as Array<VNode>\n )\n return () =>\n h(ControlButtonBar, {\n ref: controlButtonBarRef,\n buttons: buttons.value,\n overflowMenuButtonOptions: overflowMenuButtonOptions.value,\n })\n },\n})\n","import { h } from 'vue'\nimport { mdiMagnify } from '@mdi/js'\nimport { SvgIcon } from '../svg-icon'\nimport { getDefaultsForPropFactory } from '../common/utils'\nimport { pick, omit } from '@nhtio/vuetifiable/util/helpers'\nimport { makeResourcefulIndexActionsProps } from './actions'\nimport { makeControlButtonProps } from '../control-button/props'\nimport { makeRecordsTotalProps } from './partials/_record_totals'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { makeThemeProps } from '@nhtio/vuetifiable/composables/theme'\nimport { makeBorderProps } from '@nhtio/vuetifiable/composables/border'\nimport { makeRoundedProps } from '@nhtio/vuetifiable/composables/rounded'\nimport { makeVariantProps } from '@nhtio/vuetifiable/composables/variant'\nimport { makeDensityProps } from '@nhtio/vuetifiable/composables/density'\nimport { makeControlMenuControlButtonProps } from '../control-menu/props'\nimport { makeVCardProps } from '@nhtio/vuetifiable/components/VCard/VCard'\nimport { makePositionProps } from '@nhtio/vuetifiable/composables/position'\nimport { makeComponentProps } from '@nhtio/vuetifiable/composables/component'\nimport { makeElevationProps } from '@nhtio/vuetifiable/composables/elevation'\nimport { makeDimensionProps } from '@nhtio/vuetifiable/composables/dimensions'\nimport { defaultsForResourcefulIndexControlsProps } from './partials/_controls'\nimport { defaultsForPerPageSelectorPublicProps } from './partials/_per_page_selector'\nimport { makeVTextFieldProps } from '@nhtio/vuetifiable/components/VTextField/VTextField'\nimport { defaultsForResourcefulIndexControlsPublicProps } from './partials/_filters_controls'\nimport {\n makeResourcefulIndexTablePublicProps,\n defaultAddColumnButtonProps,\n} from './partials/_table'\nimport { defaultsForResourcefulIndexPaginationControlsPublicProps } from './partials/_pagination_controls'\nimport {\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n} from './partials/_columns_controls'\nimport type { PropType, ExtractPublicPropTypes } from 'vue'\nimport type { RecordsTotalProps } from './partials/_record_totals'\nimport type { ResourcefulSortPayload, ResourcefulIndexRequest } from './types'\nimport type { PerPageSelectorPublicProps } from './partials/_per_page_selector'\nimport type { ResourcefulIndexControlsPublicProps } from './partials/_controls'\nimport type { ResourcefulIndexFiltersControlsPublicProps } from './partials/_filters_controls'\nimport type { ResourcefulIndexPaginationControlsPublicProps } from './partials/_pagination_controls'\nimport type {\n DispositionButtonProps,\n SaveButtonProps,\n DiscardButtonProps,\n} from './partials/_columns_controls'\nimport type {\n ResourcefulIndexTablePublicProps,\n AddColumnButtonProps,\n FieldValueFormatters,\n ComputedColumnDefinitions,\n} from './partials/_table'\n\nexport const ResourcefulAggregateMethods = [\n 'avg',\n 'min',\n 'max',\n 'sum',\n 'countDistinct',\n 'sumDistinct',\n 'avgDistinct',\n] as const\nexport type ResourcefulAggregateMethods = (typeof ResourcefulAggregateMethods)[number]\nexport interface ResourcefulIndexAggregateOptions {\n [key: string]: ResourcefulAggregateMethods[]\n}\n\nexport interface ResourcefulIndexAggregateResults {\n [key: string]: Partial<Record<ResourcefulAggregateMethods, number>>\n}\n\nconst searchFieldProps = propsFactory(\n {\n ...pick(\n makeVTextFieldProps({\n type: 'search',\n variant: 'solo-filled',\n prependInnerIcon: () => h(SvgIcon, { d: mdiMagnify }),\n }),\n [\n 'type',\n 'placeholder',\n 'label',\n 'clearable',\n 'color',\n 'variant',\n 'prependInnerIcon',\n 'bgColor',\n 'baseColor',\n 'iconColor',\n ]\n ),\n ...makeComponentProps(),\n ...makeDensityProps({\n density: 'compact',\n }),\n ...makeThemeProps(),\n },\n 'ResourcefulIndexSearchField'\n)\n\nconst makeAutorefreshButtonProps = propsFactory(\n {\n ...makeControlMenuControlButtonProps(),\n },\n 'ResourcefulIndexAutoRefreshButton'\n)\n\nconst makeRefreshButtonProps = propsFactory(\n {\n ...pick(makeControlButtonProps(), ['color', 'density', 'size', 'height']),\n },\n 'ResourcefulIndexRefreshButton'\n)\n\nexport const defaultsForSearchFieldProps = getDefaultsForPropFactory(searchFieldProps)\nexport const defaultsForAutorefreshButtonProps = getDefaultsForPropFactory(\n makeAutorefreshButtonProps\n)\nexport const defaultsForRefreshButtonProps = getDefaultsForPropFactory(makeRefreshButtonProps)\n\nexport interface ResourcefulFieldLabelTerms {\n id: string\n [key: string]: string\n}\n\nconst makeFieldLabelTermsProps = propsFactory(\n {\n general: {\n type: Object as PropType<ResourcefulFieldLabelTerms>,\n default: () => ({\n id: 'fields.id',\n }),\n },\n headers: {\n type: Object as PropType<Partial<ResourcefulFieldLabelTerms>>,\n default: () => ({}),\n },\n filters: {\n type: Object as PropType<Partial<ResourcefulFieldLabelTerms>>,\n default: () => ({}),\n },\n },\n 'ResourcefulIndexLabels'\n)\n\nexport const defaultsForFieldLabelTermsProps = getDefaultsForPropFactory(makeFieldLabelTermsProps)\n\nconst makeACLProps = propsFactory(\n {\n canBulkUpdate: {\n type: Boolean as PropType<boolean>,\n default: false,\n },\n canDownload: {\n type: Boolean as PropType<boolean>,\n default: false,\n },\n },\n 'ResourcefulIndexACL'\n)\n\nexport const defaultsForACLProps = getDefaultsForPropFactory(makeACLProps)\n\nexport type SearchFieldProps = ExtractPublicPropTypes<ReturnType<typeof searchFieldProps>>\ntype AutoRefreshProps = ExtractPublicPropTypes<ReturnType<typeof makeAutorefreshButtonProps>>\ntype RefreshButtonProps = ExtractPublicPropTypes<ReturnType<typeof makeRefreshButtonProps>>\ntype FieldLabelTermsProps = ExtractPublicPropTypes<ReturnType<typeof makeFieldLabelTermsProps>>\ntype ACLProps = ExtractPublicPropTypes<ReturnType<typeof makeACLProps>>\n\nexport interface ResourcefulIndexTerms {\n refresh: string\n}\n\nexport const resourcefulIndexProps = propsFactory(\n {\n baseUrl: {\n type: String as PropType<string>,\n required: true,\n },\n state: {\n type: String as PropType<string | undefined | null>,\n default: undefined,\n },\n ...makeBorderProps(),\n ...makeComponentProps(),\n ...makeDimensionProps({\n width: '100%',\n }),\n ...makeElevationProps(),\n ...makePositionProps(),\n ...makeRoundedProps(),\n ...makeThemeProps(),\n ...makeVariantProps({ variant: 'elevated' } as const),\n metaProgressColor: {\n type: String as PropType<string>,\n default: 'success',\n },\n searchField: {\n type: Object as PropType<SearchFieldProps>,\n default: () => getDefaultsForPropFactory(searchFieldProps),\n },\n autoRefresh: {\n type: Object as PropType<AutoRefreshProps>,\n default: () => getDefaultsForPropFactory(makeAutorefreshButtonProps),\n },\n refreshButton: {\n type: Object as PropType<RefreshButtonProps>,\n default: () => getDefaultsForPropFactory(makeRefreshButtonProps),\n },\n addColumnButton: {\n type: Object as PropType<AddColumnButtonProps>,\n default: () => defaultAddColumnButtonProps,\n },\n totals: {\n type: Object as PropType<Pick<RecordsTotalProps, 'class' | 'style' | 'numeralFormat'>>,\n default: () => getDefaultsForPropFactory(makeRecordsTotalProps),\n },\n table: {\n type: Object as PropType<ResourcefulIndexTablePublicProps>,\n default: () => getDefaultsForPropFactory(makeResourcefulIndexTablePublicProps),\n },\n initialFields: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n excludeFields: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n initialSort: {\n type: Object as PropType<ResourcefulSortPayload>,\n default: () => ({}),\n },\n initialPerPage: {\n type: [String, Number] as PropType<string | number>,\n default: 10,\n },\n aggregations: {\n type: Object as PropType<ResourcefulIndexAggregateOptions>,\n default: () => ({}),\n },\n terms: {\n type: Object as PropType<ResourcefulIndexTerms>,\n default: () => ({\n refresh: 'general.refresh',\n }),\n },\n fieldLabelTerms: {\n type: Object as PropType<FieldLabelTermsProps>,\n default: () => getDefaultsForPropFactory(makeFieldLabelTermsProps),\n },\n acl: {\n type: Object as PropType<ACLProps>,\n default: () => defaultsForACLProps,\n },\n controls: {\n type: Object as PropType<ResourcefulIndexControlsPublicProps>,\n default: () => defaultsForResourcefulIndexControlsProps,\n },\n ...makeResourcefulIndexActionsProps(),\n perPageSelector: {\n type: Object as PropType<PerPageSelectorPublicProps>,\n default: () => defaultsForPerPageSelectorPublicProps,\n },\n pagination: {\n type: Object as PropType<ResourcefulIndexPaginationControlsPublicProps>,\n default: () => defaultsForResourcefulIndexPaginationControlsPublicProps,\n },\n computedColumns: {\n type: Array as PropType<ComputedColumnDefinitions>,\n default: () => [],\n },\n formatters: {\n type: Object as PropType<FieldValueFormatters>,\n default: () => ({}),\n },\n dispositionButtons: {\n type: Object as PropType<DispositionButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n },\n dispositionSaveButton: {\n type: Object as PropType<SaveButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n },\n dispositionDiscardButton: {\n type: Object as PropType<DiscardButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n },\n downloadButton: {\n type: Object as PropType<SaveButtonProps>,\n default: () => defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n },\n downloadSafeRecordCountThreshold: {\n type: Number,\n default: 100,\n },\n filters: {\n type: Object as PropType<ResourcefulIndexFiltersControlsPublicProps>,\n default: () => defaultsForResourcefulIndexControlsPublicProps,\n },\n resourcefulIndexRequestPayloadModifier: {\n type: Function as PropType<(payload: ResourcefulIndexRequest) => ResourcefulIndexRequest>,\n default: (payload: ResourcefulIndexRequest) => payload,\n },\n },\n 'ResourcefulIndex'\n)\n\nexport type ResourcefulIndexProps = ExtractPublicPropTypes<ReturnType<typeof resourcefulIndexProps>>\nexport type ResourcefulVCardProps = Partial<\n ExtractPublicPropTypes<ReturnType<typeof makeVCardProps>>\n>\n\nconst vCardPropKeys = Object.keys(makeVCardProps())\nexport const resourcefulIndexCardPropKeys = Object.keys(\n omit(resourcefulIndexProps(), ['baseUrl'])\n).filter((k) => vCardPropKeys.includes(k))\n","import * as qs from 'qs-esm'\nimport { SvgIcon } from '../svg-icon'\nimport { useAlert } from '../ux/alert'\nimport { default as pMap } from 'p-map'\nimport { deepmerge } from 'deepmerge-ts'\nimport { isObject } from '../common/guards'\nimport { default as numeral } from 'numeral'\nimport { printf as format } from 'fast-printf'\nimport { encode, decode } from '@nhtio/encoder'\nimport { useScopedDisplay } from '../ux/display'\nimport { VCard } from 'vuetify/components/VCard'\nimport { ControlButton } from '../control-button'\nimport { emitsFactory } from '../common/factories'\nimport { useI18n, useHttp, useBrowser } from '../ioc'\nimport { DownloadDrawer } from './partials/_download'\nimport { BulkEditDrawer } from './partials/_bulk_edit'\nimport { decode as decodeJoi } from '@nhtio/validation'\nimport { VTextField } from 'vuetify/components/VTextField'\nimport { debounce } from '@nhtio/vuetifiable/util/helpers'\nimport { throttle } from '@nhtio/vuetifiable/util/throttle'\nimport { TypedEventEmitter } from '@nhtio/tiny-typed-emitter'\nimport { ResourcefulIndexTooltip } from './partials/_tooltip'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { useHttpElements, extractErrorCode } from '../ux/http'\nimport { ResourcefulIndexScopedDisplaySymbol } from '../symbols'\nimport { AutoRefeshController } from '../autorefresh-controller'\nimport { VContainer, VRow, VCol } from 'vuetify/components/VGrid'\nimport { VProgressLinear } from 'vuetify/components/VProgressLinear'\nimport { ResourcefulIndexRecordsTotal } from './partials/_record_totals'\nimport { ResourcefulIndexSortsControls } from './partials/_sorts_controls'\nimport { BulkActionsProgressDialog } from './partials/_bulk_action_progress'\nimport { stripUndefinedValuesFromObject, toUnreactive } from '../common/utils'\nimport { ResourcefulIndexFiltersControls } from './partials/_filters_controls'\nimport { ResourcefulIndexTable, defaultAddColumnButtonProps } from './partials/_table'\nimport {\n ResourcefulIndexControls,\n defaultResourcefulIndexControlsProps,\n} from './partials/_controls'\nimport {\n asFilterGroupOperator,\n asFilterGroupConditions,\n filterGroupToLucene,\n} from '../filtration/schema'\nimport {\n mdiInformationBox,\n mdiCloseCircle,\n mdiRefresh,\n mdiFormatListBulletedSquare,\n mdiDatabase,\n} from '@mdi/js'\nimport {\n isResourcefulIndexFunctionAction,\n isResourcefulIndexUrlAction,\n canPerformBulkActionForRecords,\n} from './actions'\nimport {\n resourcefulIndexProps,\n defaultsForSearchFieldProps,\n defaultsForFieldLabelTermsProps,\n defaultsForAutorefreshButtonProps,\n defaultsForRefreshButtonProps,\n} from './props'\nimport {\n defineComponent,\n h,\n toRefs,\n computed,\n ref,\n watch,\n toRaw,\n nextTick,\n warn,\n shallowRef,\n triggerRef,\n provide,\n inject,\n onMounted,\n onBeforeUnmount,\n} from 'vue'\nimport {\n ResourcefulIndexColumnsControls,\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n} from './partials/_columns_controls'\nimport type { Options as PMapOptions } from 'p-map'\nimport type { ObjectSchema } from '@nhtio/validation'\nimport type { SlotsType, Ref, ComputedRef } from 'vue'\nimport type { FilterGroup } from '../filtration/schema'\nimport type { EventMap } from '@nhtio/tiny-typed-emitter'\nimport type { RecordsTotalProps } from './partials/_record_totals'\nimport type { ResourcefulIndexControlsProps } from './partials/_controls'\nimport type { ResourcefulRecordModelSchema } from '../resourceful-record/types'\nimport type { ResourcefulVCardProps, ResourcefulIndexAggregateResults } from './props'\nimport type { ResourcefulIndexTableProps, ResourcefulIndexTableSlots } from './partials/_table'\nimport type {\n ResourcefulSchemaDefinition,\n ResourcefulSortPayload,\n ResourcefulIndexRequest,\n} from './types'\nimport type {\n DispositionButtonProps,\n SaveButtonProps,\n DiscardButtonProps,\n} from './partials/_columns_controls'\nimport type {\n ResourcefulIndexUrlAction,\n ResourcefulIndexFunctionAction,\n BulkActionResults,\n ActionableRecord,\n} from './actions'\n\ntype BusEventMap = EventMap<{\n 'resourcefulIndex:load': []\n}>\n\ninterface RawState {\n search: string\n requestFilterConditions: FilterGroup['conditions']\n requestFilterOperator: FilterGroup['operator']\n fields: string[]\n page: number\n perPage: number\n sort: ResourcefulSortPayload\n}\n\nexport const useResourcefulIndexScopedDisplay = () => {\n const scopedDisplay = inject(ResourcefulIndexScopedDisplaySymbol)\n if (!scopedDisplay) {\n throw new Error(\n '\"useResourcefulIndexScopedDisplay\" can only be called in children components of <ResourcefulIndex>'\n )\n }\n return scopedDisplay\n}\n\nexport type ResourcefulIndexSlots = Omit<ResourcefulIndexTableSlots, 'body-append'> & {\n 'aggregations': (\n aggs: Ref<ResourcefulIndexAggregateResults>,\n searching: ComputedRef<boolean>\n ) => any\n 'before-refresh-controls': (loading: boolean) => any\n 'after-refresh-controls': (loading: boolean) => any\n}\n\nexport interface ResourcefulIndexExposed {\n bulkEditingSchema: any\n selectable: ResourcefulSchemaDefinition\n filterable: ResourcefulSchemaDefinition\n sortable: string[]\n aggregatable: string[]\n refresh: () => void\n bulkActionProcessing: Ref<boolean>\n bulkActionProcessingComplete: Ref<boolean>\n}\n\nexport const ResourcefulIndex = defineComponent({\n name: 'ResourcefulIndex',\n props: resourcefulIndexProps(),\n emits: emitsFactory({\n 'state': (state: string | null | undefined) =>\n 'string' === typeof state || null === state || 'undefined' === typeof state,\n 'update:state': (state: string | null | undefined) =>\n 'string' === typeof state || null === state || 'undefined' === typeof state,\n 'error': (error: unknown) => error instanceof Error || true,\n 'booted': () => true,\n 'debug': (...args: any[]) => Array.isArray(args),\n }),\n slots: Object as SlotsType<ResourcefulIndexSlots>,\n setup(props, { slots, emit }): ResourcefulIndexExposed {\n const browser = useBrowser()\n const hasBeenMounted = ref<boolean>(false)\n const containerVCardRef = ref<VCard | null>(null)\n const containerResourcefulIndexTableRef = ref<ResourcefulIndexTable | null>(null)\n const scopedDisplay = useScopedDisplay(containerVCardRef)\n // provide access to the scoped display for the entire\n // resourceful index component down the tree\n provide(ResourcefulIndexScopedDisplaySymbol, scopedDisplay)\n const { smAndUp } = scopedDisplay\n const bus = new TypedEventEmitter<BusEventMap>()\n const t = useI18n()\n const http = useHttp()\n const rawSelectable = ref<ResourcefulSchemaDefinition>({})\n const rawFilterable = ref<ResourcefulSchemaDefinition>({})\n const rawSortable = ref<string[]>([])\n const rawAggregatable = ref<string[]>([])\n const bulkEditingModel = ref<ResourcefulRecordModelSchema>({})\n const bulkEditingSchema = ref<ObjectSchema | undefined>(undefined)\n const search = ref<string>('')\n const searchToolTip = ref<boolean>(false)\n const {\n baseUrl,\n state,\n border,\n style,\n width,\n rounded,\n tile,\n variant,\n class: cssClass,\n height,\n maxHeight,\n maxWidth,\n minHeight,\n minWidth,\n elevation,\n position,\n theme,\n color,\n metaProgressColor,\n searchField,\n aggregations,\n totals,\n terms,\n autoRefresh,\n refreshButton,\n table,\n fieldLabelTerms,\n addColumnButton,\n controls,\n initialFields,\n excludeFields,\n initialSort,\n initialPerPage,\n perPageSelector,\n pagination,\n computedColumns,\n dispositionButtons,\n dispositionSaveButton,\n dispositionDiscardButton,\n downloadButton,\n downloadSafeRecordCountThreshold,\n filters,\n formatters,\n acl,\n actions,\n resourcefulIndexRequestPayloadModifier,\n } = toRefs(props)\n const selectable = computed(() =>\n Object.fromEntries(\n Object.entries(rawSelectable.value).filter(([k]) => !excludeFields.value.includes(k))\n )\n )\n const filterable = computed(() =>\n Object.fromEntries(\n Object.entries(rawFilterable.value).filter(([k]) => !excludeFields.value.includes(k))\n )\n )\n const sortable = computed(() =>\n Array.from(rawSortable.value).filter((k) => !excludeFields.value.includes(k))\n )\n const aggregatable = computed(() =>\n Array.from(rawAggregatable.value).filter((k) => !excludeFields.value.includes(k))\n )\n const normalizedBaseUrl = computed(() => {\n let url = baseUrl.value || ''\n if (url.endsWith('/')) {\n url = url.slice(0, -1)\n }\n return url\n })\n const numericInitialPerPage = computed(() => {\n const ip = initialPerPage.value\n const ret = Math.abs(typeof ip === 'number' ? ip : Number.parseInt(ip, 10))\n return Number.isNaN(ret) ? 10 : ret\n })\n const requestFilterConditions = ref<FilterGroup['conditions']>([])\n const requestFilterOperator = ref<FilterGroup['operator']>('AND')\n const requestFilter = computed<string>(() => {\n let ret = filterGroupToLucene({\n operator: requestFilterOperator.value,\n conditions: requestFilterConditions.value,\n })\n if (search.value) {\n ret = [ret, `(${search.value})`]\n .filter((s) => 'string' === typeof s && s.trim().length > 0)\n .join(' AND ')\n }\n return ret\n })\n const requestFields = ref<string[]>([])\n const normalizedInitialFields = computed(() => {\n const ret = Array.from(initialFields.value)\n if (!ret.includes('id')) {\n ret.unshift('id')\n }\n return ret\n })\n watch(\n initialFields,\n (is, was) => {\n if (!was || encode(Array.from(is)) !== encode(Array.from(was))) {\n requestFields.value = Array.from(is)\n }\n },\n { immediate: true }\n )\n const requestPage = ref<number>(1)\n const requestPerPage = ref<number>(numericInitialPerPage.value)\n watch(numericInitialPerPage, (is) => (requestPerPage.value = is), { immediate: true })\n const requestSort = ref<ResourcefulSortPayload>(initialSort.value)\n const requestPayload = computed<ResourcefulIndexRequest>(() =>\n resourcefulIndexRequestPayloadModifier.value({\n filter: requestFilter.value,\n fields: Array.from(requestFields.value).filter((f) => selectable.value[f]),\n page: requestPage.value,\n perPage: requestPerPage.value,\n sort: requestSort.value,\n aggregations: aggregations.value,\n })\n )\n watch(requestPayload, (_is) => {})\n const selectableColumns = computed<ResourcefulSchemaDefinition>(\n () =>\n deepmerge(\n toRaw(selectable.value),\n Object.assign(\n {},\n ...toRaw(computedColumns.value)\n .filter(\n (c) =>\n (c.value || c.key) &&\n ((c.value && !selectable.value[c.value]) || (c.key && !selectable.value[c.key]))\n )\n .map((c) => {\n const key = c.value || c.key || ''\n return { [key]: { 'type': 'computed', 'x-table-header-definition': c } }\n })\n )\n ) as ResourcefulSchemaDefinition\n )\n const respondedToFilter = ref<string>('')\n const responseItems = ref<any[]>([])\n const responseTotal = ref<number>(0)\n const responseAggregations = ref<ResourcefulIndexAggregateResults>({})\n const responseHasError = ref<boolean>(false)\n const responseErrorCode = ref<string | number | undefined>(undefined)\n const requestedSearch = ref<boolean>(false)\n const showColumnsControls = ref<boolean>(false)\n const showSortsControls = ref<boolean>(false)\n const showFiltersControls = ref<boolean>(false)\n const showBulkUpdateForm = ref<boolean>(false)\n const showDownloadControls = ref<boolean>(false)\n\n // bulk update and actions functionality\n const { renderDialogs, fire } = useAlert(containerVCardRef, true, true)\n const canBulkUpdate = computed(\n () => 'object' === typeof bulkEditingSchema.value && acl.value.canBulkUpdate\n )\n const selectedItems = shallowRef<any[]>([])\n const selectedCount = computed(() => selectedItems.value.length)\n const pageCount = computed(() => responseItems.value.length)\n const allCount = computed(() => responseTotal.value)\n const canDownload = computed(() => acl.value.canDownload)\n watch(responseItems, (is, was) => {\n if (encode(is) !== encode(was)) {\n selectedItems.value = []\n triggerRef(selectedItems)\n }\n })\n\n const {\n exec: execMeta,\n percent: baseMetaPercent,\n loading: baseMetaLoading,\n loaded: baseMetaLoaded,\n } = useHttpElements(() => `${normalizedBaseUrl.value}/$meta.index`)\n const {\n exec: execBulkUpdateMeta,\n percent: bulkUpdateMetaPercent,\n loading: bulkUpdateMetaLoading,\n loaded: bulkUpdateMetaLoaded,\n } = useHttpElements(() => `${normalizedBaseUrl.value}/$meta.$bulk.update`)\n const metaPercent = computed(() => (baseMetaPercent.value + bulkUpdateMetaPercent.value) / 2)\n const metaLoading = computed(() => baseMetaLoading.value || bulkUpdateMetaLoading.value)\n const metaLoaded = computed(\n () => baseMetaLoaded.value && (bulkUpdateMetaLoaded.value || !canBulkUpdate.value)\n )\n const {\n exec: execSearch,\n percent: searchPercent,\n loading: searchLoading,\n loaded: searchLoaded,\n } = useHttpElements(\n () => `${normalizedBaseUrl.value}/?${qs.stringify(requestPayload.value)}`,\n () => 'get',\n () => ({}),\n () => undefined,\n () => 5000,\n () => null,\n () => {\n respondedToFilter.value = requestFilter.value\n requestedSearch.value = false\n }\n )\n const loadBaseMeta = async () => {\n const res = await execMeta<{\n selectable: ResourcefulSchemaDefinition\n filterable: ResourcefulSchemaDefinition\n sortable: string[]\n aggregatable: string[]\n }>()\n if (200 === res.status) {\n rawSelectable.value = res.data.selectable\n rawFilterable.value = res.data.filterable\n rawSortable.value = res.data.sortable\n rawAggregatable.value = res.data.aggregatable\n } else {\n warn('Error loading base meta:', res)\n }\n }\n const loadBulkUpdateMeta = async () => {\n if (!canBulkUpdate.value) return\n const res = await execBulkUpdateMeta<{\n filterable: ResourcefulSchemaDefinition\n schema: ResourcefulRecordModelSchema\n joiSchema: string\n joiSchemaDescription: any\n }>()\n if (200 === res.status) {\n try {\n const decoded = decodeJoi(res.data.joiSchema) as ObjectSchema\n bulkEditingSchema.value = decoded\n bulkEditingModel.value = res.data.schema\n } catch (error) {\n warn('Failed to decode joiSchema:', error)\n bulkEditingSchema.value = undefined\n bulkEditingModel.value = {}\n }\n } else {\n bulkEditingSchema.value = undefined\n bulkEditingModel.value = {}\n warn('Error loading bulk update meta:', res)\n }\n }\n const loadInitialState = async () => {\n const is = toRaw(state.value)\n emit('debug', 'Loading Initial State', is, {\n search: toRaw(search.value),\n requestFilterConditions: toRaw(requestFilterConditions.value),\n requestFilterOperator: toRaw(requestFilterOperator.value),\n fields: toRaw(requestFields.value),\n page: toRaw(requestPage.value),\n perPage: toRaw(requestPerPage.value),\n sort: toRaw(requestSort.value),\n })\n if (is) {\n try {\n const raw: RawState = decode<any>(is)\n emit('debug', { decodedState: raw })\n search.value = 'string' === typeof raw.search ? raw.search : ''\n const settableFields = Array.isArray(raw.fields)\n ? raw.fields.filter((f) => selectableColumns.value[f])\n : []\n requestFields.value = toRaw(settableFields)\n emit('debug', {\n decodedState: raw,\n requestFields: toRaw(requestFields.value),\n isArray: Array.isArray(raw.fields),\n settableFields,\n })\n try {\n requestFilterConditions.value = asFilterGroupConditions(raw.requestFilterConditions)\n } catch (e) {\n emit('error', e)\n requestFilterConditions.value = []\n }\n try {\n requestFilterOperator.value = asFilterGroupOperator(raw.requestFilterOperator)\n } catch (e) {\n emit('error', e)\n requestFilterOperator.value = 'AND'\n }\n requestPage.value = raw.page || 1\n requestPerPage.value = raw.perPage || toRaw(numericInitialPerPage.value)\n requestSort.value = Object.assign(\n {},\n ...Object.entries(raw.sort)\n .filter(([k, v]) => sortable.value.includes(k) && ['asc', 'desc'].includes(v))\n .map(([k, v]) => ({ [k]: v }))\n )\n } catch (e) {\n emit('error', e)\n emit('state', undefined)\n emit('update:state', undefined)\n search.value = ''\n requestFields.value = Array.from(initialFields.value)\n requestPage.value = 1\n requestPerPage.value = toRaw(numericInitialPerPage.value)\n requestSort.value = Object.assign(\n {},\n ...Object.entries(initialSort.value)\n .filter(([k, v]) => sortable.value.includes(k) && ['asc', 'desc'].includes(v))\n .map(([k, v]) => ({ [k]: v }))\n )\n }\n } else {\n search.value = ''\n requestFields.value = Array.from(initialFields.value)\n requestPage.value = 1\n requestPerPage.value = toRaw(numericInitialPerPage.value)\n requestSort.value = Object.assign(\n {},\n ...Object.entries(initialSort.value)\n .filter(([k, v]) => sortable.value.includes(k) && ['asc', 'desc'].includes(v))\n .map(([k, v]) => ({ [k]: v }))\n )\n }\n if (requestPage.value < 1) {\n requestPage.value = 1\n }\n if (requestPerPage.value < 1) {\n requestPerPage.value = 10\n } else if (requestPerPage.value > 100) {\n requestPerPage.value = 100\n }\n emit('debug', 'Loaded Initial State', is, {\n search: toRaw(search.value),\n requestFilterConditions: toRaw(requestFilterConditions.value),\n requestFilterOperator: toRaw(requestFilterOperator.value),\n fields: toRaw(requestFields.value),\n page: toRaw(requestPage.value),\n perPage: toRaw(requestPerPage.value),\n sort: toRaw(requestSort.value),\n })\n }\n const loadMeta = throttle(async () => {\n await Promise.all([loadBaseMeta(), loadBulkUpdateMeta()])\n // need to wait for the meta to load before loading initial state\n await loadInitialState()\n bus.emit('resourcefulIndex:load')\n emit('booted')\n }, 500)\n\n const loadSearch = async () => {\n const res = await execSearch<{\n records: any[]\n total: number\n page: number\n perPage: number\n aggregations: ResourcefulIndexAggregateResults\n }>()\n if (200 === res.status) {\n responseItems.value = res.data.records\n responseTotal.value = res.data.total\n responseAggregations.value = res.data.aggregations\n responseHasError.value = false\n responseErrorCode.value = undefined\n } else if (res.status >= 0) {\n responseItems.value = []\n responseTotal.value = 0\n responseAggregations.value = {}\n responseHasError.value = true\n responseErrorCode.value = extractErrorCode(res)\n warn('Error loading records:', res)\n }\n }\n const debouncedLoadSearch = debounce(loadSearch, 250)\n const loadDebouncedSearch = () => {\n requestedSearch.value = true\n debouncedLoadSearch()\n }\n const invalidStateSetCount = ref<number>(0)\n watch(searchLoading, (is, was) => {\n nextTick(() => {\n if (was && !is && !searchLoading.value) {\n // search is over\n emit('debug', {\n search: toRaw(search.value),\n requestFilterConditions: toRaw(requestFilterConditions.value),\n requestFilterOperator: toRaw(requestFilterOperator.value),\n fields: toRaw(requestFields.value),\n page: toRaw(requestPage.value),\n perPage: toRaw(requestPerPage.value),\n sort: toRaw(requestSort.value),\n })\n const rawState: RawState = {\n search: toRaw(search.value),\n requestFilterConditions: toRaw(requestFilterConditions.value),\n requestFilterOperator: toRaw(requestFilterOperator.value),\n fields: toRaw(requestFields.value),\n page: toRaw(requestPage.value),\n perPage: toRaw(requestPerPage.value),\n sort: toRaw(requestSort.value),\n }\n const initialState: RawState = {\n search: '',\n requestFilterConditions: [],\n requestFilterOperator: 'AND',\n fields: toRaw(initialFields.value),\n page: 1,\n perPage: toRaw(numericInitialPerPage.value),\n sort: Object.assign(\n {},\n ...Object.entries(initialSort.value)\n .filter(([k, v]) => sortable.value.includes(k) && ['asc', 'desc'].includes(v))\n .map(([k, v]) => ({ [k]: v }))\n ),\n }\n const normalizedInitialState = Object.assign({}, initialState, {\n fields: toRaw(normalizedInitialFields.value),\n })\n const encodedRawState = encode(rawState as any)\n const encodedInitialState = encode(initialState as any)\n const encodedNormalizedInitialState = encode(normalizedInitialState as any)\n const needsUpdate =\n encodedRawState !== encodedInitialState &&\n encodedRawState !== encodedNormalizedInitialState &&\n state.value !== encodedRawState\n emit('debug', {\n rawState,\n initialState,\n normalizedInitialState,\n encodedRawState,\n encodedInitialState,\n encodedNormalizedInitialState,\n needsUpdate,\n rawNotInitial: encodedRawState !== encodedInitialState,\n rawNotNormalizedInitial: encodedRawState !== encodedNormalizedInitialState,\n rawNotCurrent: state.value !== encodedRawState,\n })\n if (needsUpdate) {\n emit('state', encodedRawState)\n emit('update:state', encodedRawState)\n }\n }\n })\n })\n watch(state, (is, was) => {\n const getState = () => {\n return {\n search: toRaw(search.value),\n requestFilterConditions: toRaw(requestFilterConditions.value),\n requestFilterOperator: toRaw(requestFilterOperator.value),\n fields: toRaw(requestFields.value),\n page: toRaw(requestPage.value),\n perPage: toRaw(requestPerPage.value),\n sort: toRaw(requestSort.value),\n }\n }\n const original = getState()\n if (is) {\n try {\n const raw: RawState = decode<any>(is)\n emit('debug', { decodedState: raw })\n search.value = 'string' === typeof raw.search ? raw.search : ''\n const settableFields = Array.isArray(raw.fields)\n ? raw.fields.filter((f) => selectableColumns.value[f])\n : []\n requestFields.value = toRaw(settableFields)\n emit('debug', {\n decodedState: raw,\n requestFields: toRaw(requestFields.value),\n isArray: Array.isArray(raw.fields),\n settableFields,\n })\n try {\n requestFilterConditions.value = asFilterGroupConditions(raw.requestFilterConditions)\n } catch (e) {\n emit('error', e)\n requestFilterConditions.value = []\n }\n try {\n requestFilterOperator.value = asFilterGroupOperator(raw.requestFilterOperator)\n } catch (e) {\n emit('error', e)\n requestFilterOperator.value = 'AND'\n }\n requestPage.value = raw.page || 1\n requestPerPage.value = raw.perPage || toRaw(numericInitialPerPage.value)\n requestSort.value = Object.assign(\n {},\n ...Object.entries(raw.sort)\n .filter(([k, v]) => sortable.value.includes(k) && ['asc', 'desc'].includes(v))\n .map(([k, v]) => ({ [k]: v }))\n )\n invalidStateSetCount.value = 0\n } catch (e) {\n emit('error', e)\n invalidStateSetCount.value += 1\n if (invalidStateSetCount.value > 1) {\n emit('state', undefined)\n emit('update:state', undefined)\n } else {\n emit('state', toRaw(was))\n emit('update:state', toRaw(was))\n }\n }\n } else {\n search.value = ''\n requestFields.value = Array.from(initialFields.value)\n requestPage.value = 1\n requestPerPage.value = toRaw(numericInitialPerPage.value)\n requestSort.value = Object.assign(\n {},\n ...Object.entries(initialSort.value)\n .filter(([k, v]) => sortable.value.includes(k) && ['asc', 'desc'].includes(v))\n .map(([k, v]) => ({ [k]: v }))\n )\n invalidStateSetCount.value = 0\n }\n if (requestPage.value < 1) {\n requestPage.value = 1\n }\n if (requestPerPage.value < 1) {\n requestPerPage.value = 10\n } else if (requestPerPage.value > 100) {\n requestPerPage.value = 100\n }\n if (searchLoaded.value) {\n const current = getState()\n if (encode(current) !== encode(original)) {\n loadDebouncedSearch()\n }\n }\n })\n watch(canBulkUpdate, (is, was) => {\n if (is !== was && is && !was) {\n loadBulkUpdateMeta()\n }\n })\n const searching = computed(() => requestedSearch.value || searchLoading.value)\n bus.on('resourcefulIndex:load', loadSearch)\n watch(normalizedBaseUrl, () => loadMeta(), { immediate: true })\n\n // bulk action processing functionality\n const bulkActionName = ref<string | null>(null)\n const bulkActionProcessing = ref<boolean>(false)\n const bulkActionProcessingComplete = ref<boolean>(false)\n const bulkActionProgress = ref<number>(0)\n const bulkActionTotal = ref<number>(0)\n const bulkActionSuccesses = ref<number>(0)\n const bulkActionFailures = ref<number>(0)\n const bulkActionUndetermined = ref<number>(0)\n\n const fetchAllRecordsViaAsyncIterator = async (\n callback: (\n records: any[],\n page: number,\n perPage: number,\n total: number\n ) => Promise<void> | void,\n signal: AbortSignal | undefined = undefined,\n allFields: boolean = false,\n coolDownMs: number = 200,\n onlyIds?: Array<string | number>\n ) => {\n const basePayload = {\n filter: toUnreactive(requestFilter.value),\n fields: allFields ? Array.from(Object.keys(selectableColumns.value)) : ['id'],\n perPage: 100,\n sort: toUnreactive(requestSort.value),\n }\n basePayload.fields = basePayload.fields.filter(\n (f) =>\n selectableColumns.value[f] &&\n !computedColumns.value.find((c) => c.value === f || c.key === f)\n )\n if (onlyIds && Array.isArray(onlyIds) && onlyIds.length > 0) {\n const toAppend = `AND (${onlyIds.map((id) => `id:${id}`).join(' OR ')})`\n basePayload.filter = [basePayload.filter, toAppend].join(' ')\n }\n let total = 0\n const fetchResultsForPage = async (page: number) => {\n try {\n const res = await http.get<{\n records: any[]\n total: number\n page: number\n perPage: number\n aggregations: ResourcefulIndexAggregateResults\n }>(\n `${normalizedBaseUrl.value}/?${qs.stringify({\n ...basePayload,\n page,\n })}`,\n { signal }\n )\n if (200 === res.status) {\n total = res.data.total\n return res.data.records\n } else {\n return []\n }\n } catch (e) {\n warn('Error fetching records via async iterator:', e)\n return []\n }\n }\n let page = 1\n let gotEmpty = false\n while (!gotEmpty && (!signal || !signal.aborted)) {\n const records = await fetchResultsForPage(page)\n if (records.length === 0) {\n gotEmpty = true\n } else {\n await callback(records, page, basePayload.perPage, total)\n page++\n if (coolDownMs > 0) {\n await new Promise((resolve) => setTimeout(resolve, coolDownMs))\n }\n }\n }\n }\n\n const fetchAllRecordsAsArray = async (\n signal: AbortSignal | undefined = undefined,\n allFields: boolean = false\n ) => {\n const records: any[] = []\n await fetchAllRecordsViaAsyncIterator(\n async (pageRecords) => {\n records.push(...pageRecords)\n },\n signal,\n allFields\n )\n if (signal && signal.aborted) {\n return []\n }\n return records\n }\n\n const onBulkActionInvoked = async (\n action: ResourcefulIndexUrlAction | ResourcefulIndexFunctionAction\n ) => {\n const loadingDialogAbortController = new AbortController()\n fire({\n icon: 'info',\n title: t('resourcefulIndex.bulkActionProcessing.preparing.title'),\n text: t('resourcefulIndex.bulkActionProcessing.preparing.text'),\n showCancelButton: false,\n showConfirmButton: false,\n showDenyButton: false,\n signal: loadingDialogAbortController.signal,\n })\n const results: BulkActionResults = new Map()\n bulkActionName.value = action.title\n bulkActionProcessing.value = false\n bulkActionProgress.value = 0\n bulkActionTotal.value = 0\n let records: ActionableRecord[] = []\n // step 1: determine which records should processed\n if (selectedItems.value.length === 0) {\n // no selected items, so we are processing all items in the current filter\n } else if (\n selectedItems.value.length === responseItems.value.length &&\n responseItems.value.length < responseTotal.value &&\n (typeof action.maxBulkActionRecords !== 'number' ||\n responseTotal.value <= action.maxBulkActionRecords)\n ) {\n // if the number of selected items is the same as the number of items\n // being displayed, and there are more items available in the total,\n // and we aren't exceeding the maxBulkActionRecords (if set)\n // we need to request clarification if we should use\n // the local page or all records in the current filter\n const { isConfirmed, isDenied, isCanceled } = await fire({\n icon: 'question',\n title: t('resourcefulIndex.bulkActionProcessing.selection.title'),\n text: format(\n t('resourcefulIndex.bulkActionProcessing.selection.text'),\n numeral(responseItems.value.length).format('0,0'),\n numeral(selectedItems.value.length).format('0,0')\n ),\n showCancelButton: true,\n confirmButtonCta: t('resourcefulIndex.bulkActionProcessing.selection.confirmButtonText'),\n confirmButtonIcon: () => h(SvgIcon, { d: mdiFormatListBulletedSquare }),\n denyButtonCta: t('resourcefulIndex.bulkActionProcessing.selection.denyButtonText'),\n denyButtonIcon: () => h(SvgIcon, { d: mdiDatabase }),\n cancelButtonCta: t('resourcefulIndex.bulkActionProcessing.selection.cancelButtonText'),\n showDenyButton: true,\n showConfirmButton: true,\n })\n if (isDenied) {\n // use all records in the current filter\n } else if (isConfirmed) {\n // use only the selected records on the current page\n Array.from(selectedItems.value).forEach((item) => {\n records.push(item as ActionableRecord)\n })\n } else if (isCanceled) {\n // exit early, user canceled operation\n bulkActionProcessing.value = false\n loadingDialogAbortController.abort()\n return\n }\n } else {\n // we have a selection of items, so just use those\n Array.from(selectedItems.value).forEach((item) => {\n records.push(item as ActionableRecord)\n })\n }\n // step 2: confirm that we aren't processing too many records\n const processableRecordCount = records.length > 0 ? records.length : responseTotal.value\n if (\n typeof action.maxBulkActionRecords === 'number' &&\n processableRecordCount > action.maxBulkActionRecords\n ) {\n // exit early, too many records to process\n fire({\n icon: 'error',\n title: t('resourcefulIndex.bulkActionProcessing.tooManyRecords.title'),\n text: format(\n t('resourcefulIndex.bulkActionProcessing.tooManyRecords.text'),\n numeral(processableRecordCount).format('0,0'),\n numeral(action.maxBulkActionRecords).format('0,0')\n ),\n })\n bulkActionProcessing.value = false\n loadingDialogAbortController.abort()\n return\n }\n if (\n typeof action.maxSafeBulkActionRecords === 'number' &&\n processableRecordCount > action.maxSafeBulkActionRecords\n ) {\n // show confirmation to continue operation\n // on a large number of records\n const { isDenied } = await fire({\n icon: 'warning',\n title: t('resourcefulIndex.bulkActionProcessing.largeRecords.title'),\n text: format(\n t('resourcefulIndex.bulkActionProcessing.largeRecords.text'),\n numeral(processableRecordCount).format('0,0')\n ),\n showDenyButton: true,\n })\n if (isDenied) {\n bulkActionProcessing.value = false\n loadingDialogAbortController.abort()\n return\n }\n } else {\n // show a confirmation dialog to continue\n // with the selected number of records\n // because if there is no \"maxSafeBulkActionRecords\"\n // we want to make sure the user is aware of how many\n // records they are processing\n const { isDenied } = await fire({\n icon: 'question',\n title: t('resourcefulIndex.bulkActionProcessing.recordCountConfirmation.title'),\n text: format(\n t('resourcefulIndex.bulkActionProcessing.recordCountConfirmation.text'),\n numeral(processableRecordCount).format('0,0')\n ),\n showDenyButton: true,\n })\n if (isDenied) {\n bulkActionProcessing.value = false\n loadingDialogAbortController.abort()\n return\n }\n }\n // step 3: process\n bulkActionProgress.value = 0\n bulkActionTotal.value = processableRecordCount\n const recordFetchAbortController = new AbortController()\n // step 3.1: if we don't have any records yet\n // and the action uses `bulkAction`\n // we need to fetch all records first\n if (\n records.length === 0 &&\n isResourcefulIndexFunctionAction(action) &&\n 'function' === typeof action.bulkAction\n ) {\n fire({\n icon: 'info',\n title: t('resourcefulIndex.bulkActionProcessing.fetchingRecords.title'),\n text: t('resourcefulIndex.bulkActionProcessing.fetchingRecords.text'),\n showCancelButton: true,\n showConfirmButton: false,\n signal: recordFetchAbortController.signal,\n }).then(({ isCanceled }) => {\n if (isCanceled) {\n recordFetchAbortController.abort()\n }\n })\n records = await fetchAllRecordsAsArray(recordFetchAbortController.signal, false)\n if (recordFetchAbortController.signal.aborted) {\n bulkActionProcessing.value = false\n loadingDialogAbortController.abort()\n return\n }\n recordFetchAbortController.abort()\n }\n const pMapOpts: PMapOptions = {\n concurrency:\n 'number' === typeof action.singleAsBulkActionMaxConcurrency\n ? action.singleAsBulkActionMaxConcurrency\n : 1,\n stopOnError: Boolean(action.singleAsBulkActionStopOnError),\n }\n const onActionableRecord = async (record: ActionableRecord) => {\n try {\n if (isResourcefulIndexFunctionAction(action)) {\n const outcome: boolean | null = await action.action(record)\n results.set(record, outcome)\n } else if (isResourcefulIndexUrlAction(action)) {\n const href =\n typeof action.url === 'function' ? action.url(toUnreactive(record)) : action.url\n if (!href) {\n results.set(record, null)\n } else {\n if (isObject(href)) {\n warn('Failed to open vue router route for record:', href, record)\n return\n }\n try {\n window.open(href as string, '_blank', 'noopener')\n results.set(record, true)\n } catch (e) {\n warn('Failed to open url for record:', href, record, e)\n results.set(record, false)\n }\n }\n } else {\n results.set(record, null)\n }\n } catch (e) {\n warn('Failed to process bulk action for record:', record, e)\n results.set(record, null)\n }\n }\n // hide the \"preparing\" dialog since now we're actually processing\n // we should be showing the \"progress\" dialog\n loadingDialogAbortController.abort()\n bulkActionProcessing.value = true\n const onProgressActual = (updated: number, total: number) => {\n bulkActionProgress.value = updated\n bulkActionTotal.value = total\n let actionSuccesses = 0\n let actionFailures = 0\n let actionUndetermined = 0\n results.forEach((outcome) => {\n if (outcome === true) {\n actionSuccesses++\n } else if (outcome === false) {\n actionFailures++\n } else {\n actionUndetermined++\n }\n })\n bulkActionSuccesses.value = actionSuccesses\n bulkActionFailures.value = actionFailures\n bulkActionUndetermined.value = actionUndetermined\n }\n const onProgress = throttle(onProgressActual, 50)\n // step 3.2: if we still don't have any records\n // that means that we will need use an async iterator\n // to first fetch the results from the expected page\n // and then process the records as they are fetched\n if (records.length === 0) {\n const fetchAllViaAsyncIteratorAbortController = new AbortController()\n let abortedDueToError = false\n await fetchAllRecordsViaAsyncIterator(\n async (fetchedRecords, _page, _perPage, total) => {\n // if we have no fetched records, skip processing\n if (fetchedRecords.length === 0) {\n return\n }\n // if we can't perform the action\n // display an error and exit early\n if (!canPerformBulkActionForRecords(fetchedRecords, action)) {\n fetchAllViaAsyncIteratorAbortController.abort()\n fetchedRecords.forEach((r) => results.set(r, null))\n onProgress(results.size, total)\n return\n }\n // use pMap to process the records\n try {\n await pMap(\n fetchedRecords,\n async (record) => {\n await onActionableRecord(record)\n onProgress(results.size, total)\n },\n pMapOpts\n )\n } catch (e) {\n warn('Failed to process bulk action for some records:', e)\n fetchAllViaAsyncIteratorAbortController.abort()\n fetchedRecords.forEach((r) => results.set(r, null))\n onProgress(results.size, total)\n abortedDueToError = true\n return\n }\n },\n fetchAllViaAsyncIteratorAbortController.signal,\n false\n )\n if (fetchAllViaAsyncIteratorAbortController.signal.aborted) {\n bulkActionProcessing.value = false\n loadingDialogAbortController.abort()\n if (abortedDueToError) {\n // exited early due to an error during processing\n fire({\n icon: 'error',\n title: t('resourcefulIndex.bulkActionProcessing.unrecoverableError.title'),\n text: t('resourcefulIndex.bulkActionProcessing.unrecoverableError.text'),\n })\n } else {\n // exited early because some of the records could not be processed\n // by the action\n fire({\n icon: 'error',\n title: t('resourcefulIndex.bulkActionProcessing.unprocessableRecords.title'),\n text: t('resourcefulIndex.bulkActionProcessing.unprocessableRecords.text'),\n })\n }\n return\n }\n }\n // step 3.3: if we have records, confirm that we can run\n // the action against them\n else {\n // if we can't perform the action\n // display an error and exit early\n if (!canPerformBulkActionForRecords(records, action)) {\n fire({\n icon: 'error',\n title: t('resourcefulIndex.bulkActionProcessing.unprocessableRecords.title'),\n text: t('resourcefulIndex.bulkActionProcessing.unprocessableRecords.text'),\n })\n bulkActionProcessing.value = false\n return\n }\n // we can process the records\n if (isResourcefulIndexFunctionAction(action) && 'function' === typeof action.bulkAction) {\n // we are processing the results as a single function call\n try {\n const outcome = await action.bulkAction(records, onProgress)\n outcome.forEach((result, record) => {\n results.set(record, result)\n })\n } catch (e) {\n warn('Failed to process bulk action for all records:', e)\n records.forEach((r) => results.set(r, null))\n onProgress(results.size, records.length)\n // exited early due to an error during processing\n fire({\n icon: 'error',\n title: t('resourcefulIndex.bulkActionProcessing.unrecoverableError.title'),\n text: t('resourcefulIndex.bulkActionProcessing.unrecoverableError.text'),\n })\n }\n } else {\n // we are processing the results as individual calls\n try {\n await pMap(\n records,\n async (record) => {\n await onActionableRecord(record)\n onProgress(results.size, records.length)\n },\n pMapOpts\n )\n } catch (e) {\n warn('Failed to process bulk action for all records:', e)\n records.forEach((r) => results.set(r, null))\n onProgress(results.size, records.length)\n // exited early due to an error during processing\n fire({\n icon: 'error',\n title: t('resourcefulIndex.bulkActionProcessing.unrecoverableError.title'),\n text: t('resourcefulIndex.bulkActionProcessing.unrecoverableError.text'),\n })\n }\n }\n }\n // force a final update of the progress\n onProgressActual(results.size, processableRecordCount)\n // step 4: show results of processing\n // this is actually handled from the moment that\n // `bulkActionProcessing` is set to true because\n // the progress dialog shows automatically\n bulkActionProcessingComplete.value = true\n // step 5: (out of scope of function)\n // when the user closes the dialog window, reset all the bulk action states\n }\n\n const cardBindings = computed<ResourcefulVCardProps>(() => ({\n border: border.value,\n style: style.value,\n width: width.value,\n rounded: rounded.value,\n tile: tile.value,\n variant: variant.value,\n class: cssClass.value,\n height: height.value,\n maxHeight: maxHeight.value,\n maxWidth: maxWidth.value,\n minHeight: minHeight.value,\n minWidth: minWidth.value,\n elevation: elevation.value,\n position: position.value,\n theme: theme.value,\n color: color.value,\n tag: 'form',\n action: '#',\n method: 'get',\n onSubmit: (e: Event) => {\n e.preventDefault()\n bus.emit('resourcefulIndex:load')\n },\n }))\n const searchFieldBindings = computed(\n () =>\n deepmerge(\n {\n placeholder: t('resourcefulIndex.searchField.placeholder'),\n },\n deepmerge(defaultsForSearchFieldProps, stripUndefinedValuesFromObject(searchField.value)),\n {\n 'modelValue': search.value,\n 'onUpdate:modelValue': (val: string) => {\n if ('string' !== typeof val) {\n emit('debug', { invalidSearchType: val })\n return\n }\n search.value = val\n },\n 'hideDetails': true,\n 'onClick:appendInner': () => {\n searchToolTip.value = true\n },\n 'onClick:clear': (e: MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n search.value = ''\n },\n 'appendInnerIcon': () => h(SvgIcon, { d: mdiInformationBox }),\n },\n {\n readonly: !metaLoaded.value || searching.value,\n clearable: metaLoaded.value && !searching.value,\n clearIcon: () => h(SvgIcon, { d: mdiCloseCircle }),\n }\n ) as any\n )\n const recordsTotalBindings = computed<RecordsTotalProps>(() =>\n deepmerge(totals.value, {\n page: requestPage.value,\n perPage: requestPerPage.value,\n total: responseTotal.value,\n })\n )\n const controlsBindings = computed<ResourcefulIndexControlsProps>(() =>\n deepmerge(\n defaultResourcefulIndexControlsProps,\n stripUndefinedValuesFromObject(controls.value),\n {\n 'disabled': !metaLoaded.value,\n 'columns': requestFields.value,\n 'filters': {\n conditions: requestFilterConditions.value,\n operator: requestFilterOperator.value,\n },\n 'sorts': requestSort.value,\n 'canBulkUpdate': canBulkUpdate.value,\n 'selectedCount': selectedCount.value,\n 'pageCount': pageCount.value,\n 'allCount': allCount.value,\n 'canDownload': canDownload.value,\n 'onClick:column': () => {\n showColumnsControls.value = true\n },\n 'onClick:sorting': () => {\n showSortsControls.value = true\n },\n 'onClick:filter': () => {\n showFiltersControls.value = true\n },\n 'onClick:bulkUpdate': () => {\n showBulkUpdateForm.value = true\n },\n 'onClick:download': () => {\n showDownloadControls.value = true\n },\n 'columnsActive': showColumnsControls.value,\n 'filtersActive': showFiltersControls.value,\n 'sortingActive': showSortsControls.value,\n 'bulkUpdateActive': showBulkUpdateForm.value,\n 'downloadActive': showDownloadControls.value,\n 'actions': actions.value,\n 'onBulkActionInvoked': onBulkActionInvoked,\n }\n )\n )\n const tableBindings = computed<ResourcefulIndexTableProps>(\n () =>\n deepmerge(table.value, {\n 'items': responseItems.value,\n 'possibleFields': selectableColumns.value,\n 'showingFields': requestFields.value,\n 'search': respondedToFilter.value,\n 'loading': searching.value,\n 'percent': searchPercent.value,\n 'sortableFields': sortable.value,\n 'currentSorting': requestSort.value,\n 'labels': {\n id: fieldLabelTerms.value.general ? fieldLabelTerms.value.general.id : 'fields.id',\n ...stripUndefinedValuesFromObject(\n deepmerge(\n fieldLabelTerms.value.general\n ? stripUndefinedValuesFromObject(fieldLabelTerms.value.general)\n : (defaultsForFieldLabelTermsProps as any).general,\n fieldLabelTerms.value.headers\n ? stripUndefinedValuesFromObject(fieldLabelTerms.value.headers)\n : (defaultsForFieldLabelTermsProps as any).headers\n ) as Record<string, string>\n ),\n },\n 'page': requestPage.value,\n 'total': responseTotal.value,\n 'perPage': requestPerPage.value,\n 'progressColor': metaProgressColor.value,\n 'addColumnButton': deepmerge(\n defaultAddColumnButtonProps,\n stripUndefinedValuesFromObject(addColumnButton.value)\n ),\n 'onAdd:column': (f: string) => {\n requestFields.value.push(f)\n loadDebouncedSearch()\n },\n 'onDelete:column': (f: string) => {\n const index = requestFields.value.indexOf(f)\n if (index > -1) {\n requestFields.value.splice(index, 1)\n }\n loadDebouncedSearch()\n },\n 'onUpdate:perPage': (newPerPage: number) => {\n requestPerPage.value = newPerPage\n requestPage.value = 1\n loadDebouncedSearch()\n },\n 'onUpdate:page': (newPage: number) => {\n requestPage.value = newPage\n loadDebouncedSearch()\n },\n 'pagination': pagination.value,\n 'perPageSelector': perPageSelector.value,\n 'computedColumns': computedColumns.value,\n 'onToggle:sorting': (column: string) => {\n // if the column is not sortable, do nothing\n if (!sortable.value.includes(column)) return\n const current = requestSort.value[column]\n let next = current === undefined ? 'asc' : current === 'asc' ? 'desc' : undefined\n const update = stripUndefinedValuesFromObject({\n ...requestSort.value,\n [column]: next,\n }) as ResourcefulSortPayload\n requestSort.value = update\n nextTick(loadDebouncedSearch)\n },\n 'formatters': formatters.value,\n 'errorCode': responseErrorCode.value,\n 'bulkEditingSchema': bulkEditingSchema.value as any,\n 'selectedItems': selectedItems.value,\n 'onUpdate:selectedItems': (items: any[]) => {\n selectedItems.value = items\n triggerRef(selectedItems)\n },\n 'actions': actions.value,\n } satisfies ResourcefulIndexTableProps) as ResourcefulIndexTableProps\n )\n const dispositionButtonsBindings = computed<DispositionButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDispositionButtonProps,\n stripUndefinedValuesFromObject(dispositionButtons.value)\n )\n )\n const dispositionSaveButtonBindings = computed<SaveButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n stripUndefinedValuesFromObject(dispositionSaveButton.value)\n )\n )\n const dispositionDiscardButtonBindings = computed<DiscardButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsDiscardButtonProps,\n stripUndefinedValuesFromObject(dispositionDiscardButton.value)\n )\n )\n const downloadButtonBindings = computed<SaveButtonProps>(() =>\n deepmerge(\n defaultsForResourcefulIndexColumnsControlsSaveButtonProps,\n stripUndefinedValuesFromObject(downloadButton.value)\n )\n )\n useRender(() =>\n h(\n VCard,\n {\n ref: containerVCardRef,\n ...cardBindings.value,\n },\n () => [\n h('input', { type: 'submit', style: { display: 'none' } }),\n h(ResourcefulIndexTooltip, {\n 'modelValue': searchToolTip.value,\n 'onUpdate:modelValue': (val: boolean) => {\n searchToolTip.value = val\n },\n 'color': color.value,\n }),\n h(VContainer, { fluid: true }, () => [\n h(VRow, {}, () => [\n h(VCol, { cols: 12, sm: 4, lg: 3 }, () => [h(VTextField, searchFieldBindings.value)]),\n h(\n VCol,\n {\n cols: 12,\n sm: 8,\n lg: 9,\n class: [\n 'd-flex',\n 'align-center',\n {\n 'justify-center': !smAndUp.value,\n 'justify-end': smAndUp.value,\n 'py-0': !smAndUp.value,\n },\n ],\n },\n () => [h(ResourcefulIndexRecordsTotal, recordsTotalBindings.value)]\n ),\n ]),\n h(VRow, {}, () => [\n h(\n VCol,\n {\n cols: 12,\n sm: 8,\n lg: 9,\n class: [\n 'd-flex',\n 'justify-center',\n {\n 'py-0': !smAndUp.value,\n },\n ],\n },\n () => [h(ResourcefulIndexControls, controlsBindings.value)]\n ),\n h(\n VCol,\n {\n cols: 12,\n sm: 4,\n lg: 3,\n class: [\n 'd-flex',\n 'align-center',\n {\n 'justify-center': !smAndUp.value,\n 'justify-end': smAndUp.value,\n 'py-0': !smAndUp.value,\n },\n ],\n },\n () => [\n h('div', { class: ['d-flex', 'align-center'] }, [\n slots['before-refresh-controls']\n ? slots['before-refresh-controls'](searching.value)\n : null,\n h(\n AutoRefeshController,\n deepmerge(\n {\n color: 'surface-light',\n },\n deepmerge(defaultsForAutorefreshButtonProps, autoRefresh.value),\n {\n onTriggered: loadSearch,\n }\n )\n ),\n h(\n ControlButton,\n deepmerge(\n {\n color: 'surface-light',\n },\n deepmerge(defaultsForRefreshButtonProps, refreshButton.value),\n {\n cta: t(terms.value.refresh),\n prependIcon: () => h(SvgIcon, { d: mdiRefresh }),\n dividePrependIcon: true,\n onClick: loadSearch,\n state: {\n loading: searching.value,\n },\n }\n )\n ),\n slots['after-refresh-controls']\n ? slots['after-refresh-controls'](searching.value)\n : null,\n ]),\n ]\n ),\n ]),\n ]),\n h(VProgressLinear, {\n color: metaLoading.value ? metaProgressColor.value : undefined,\n modelValue: metaLoading.value ? metaPercent.value : 0,\n height: '1px',\n }),\n !hasBeenMounted.value\n ? null\n : h(\n ResourcefulIndexTable,\n {\n ref: containerResourcefulIndexTableRef,\n ...tableBindings.value,\n },\n // eslint-disable-next-line @nht/require-function-slots-for-programmatic-components\n stripUndefinedValuesFromObject({\n ...slots,\n 'body-append': () => [\n h(ResourcefulIndexColumnsControls, {\n 'modelValue': showColumnsControls.value,\n 'color': color.value,\n 'onUpdate:modelValue': (val: boolean) => {\n showColumnsControls.value = val\n },\n 'possibleFields': selectableColumns.value,\n 'showingFields': requestFields.value,\n 'labels': {\n id: fieldLabelTerms.value.general\n ? fieldLabelTerms.value.general.id\n : 'fields.id',\n ...stripUndefinedValuesFromObject(\n deepmerge(\n fieldLabelTerms.value.general\n ? stripUndefinedValuesFromObject(fieldLabelTerms.value.general)\n : (defaultsForFieldLabelTermsProps as any).general,\n fieldLabelTerms.value.headers\n ? stripUndefinedValuesFromObject(fieldLabelTerms.value.headers)\n : (defaultsForFieldLabelTermsProps as any).headers\n ) as Record<string, string>\n ),\n },\n 'onUpdate:showingFields': (fields: string[]) => {\n requestFields.value = Array.from(fields)\n nextTick(() => loadDebouncedSearch())\n },\n 'dispositionButtons': dispositionButtonsBindings.value,\n 'saveButton': dispositionSaveButtonBindings.value,\n 'discardButton': dispositionDiscardButtonBindings.value,\n }),\n h(ResourcefulIndexSortsControls, {\n 'modelValue': showSortsControls.value,\n 'color': color.value,\n 'onUpdate:modelValue': (val: boolean) => {\n showSortsControls.value = val\n },\n 'sortableFields': sortable.value,\n 'sorting': requestSort.value,\n 'labels': {\n id: fieldLabelTerms.value.general\n ? fieldLabelTerms.value.general.id\n : 'fields.id',\n ...stripUndefinedValuesFromObject(\n deepmerge(\n fieldLabelTerms.value.general\n ? stripUndefinedValuesFromObject(fieldLabelTerms.value.general)\n : (defaultsForFieldLabelTermsProps as any).general,\n fieldLabelTerms.value.headers\n ? stripUndefinedValuesFromObject(fieldLabelTerms.value.headers)\n : (defaultsForFieldLabelTermsProps as any).headers\n ) as Record<string, string>\n ),\n },\n 'onUpdate:sorting': (sort: ResourcefulSortPayload) => {\n requestSort.value = sort\n loadDebouncedSearch()\n },\n 'dispositionButtons': dispositionButtonsBindings.value,\n 'saveButton': dispositionSaveButtonBindings.value,\n 'discardButton': dispositionDiscardButtonBindings.value,\n }),\n h(ResourcefulIndexFiltersControls, {\n 'modelValue': showFiltersControls.value,\n 'color': color.value,\n 'onUpdate:modelValue': (val: boolean) => {\n showFiltersControls.value = val\n },\n 'labels': {\n id: fieldLabelTerms.value.general\n ? fieldLabelTerms.value.general.id\n : 'fields.id',\n ...stripUndefinedValuesFromObject(\n deepmerge(\n fieldLabelTerms.value.general\n ? stripUndefinedValuesFromObject(fieldLabelTerms.value.general)\n : (defaultsForFieldLabelTermsProps as any).general,\n fieldLabelTerms.value.headers\n ? stripUndefinedValuesFromObject(fieldLabelTerms.value.headers)\n : (defaultsForFieldLabelTermsProps as any).headers\n ) as Record<string, string>\n ),\n },\n 'dispositionButtons': dispositionButtonsBindings.value,\n 'saveButton': dispositionSaveButtonBindings.value,\n 'discardButton': dispositionDiscardButtonBindings.value,\n 'filterableFields': filterable.value,\n 'conditions': requestFilterConditions.value,\n 'operator': requestFilterOperator.value,\n 'onUpdate:filters:operator': (val: FilterGroup['operator']) => {\n requestFilterOperator.value = val\n requestPage.value = 1\n loadDebouncedSearch()\n },\n 'onUpdate:filters:conditions': (val: FilterGroup['conditions']) => {\n requestFilterConditions.value = val\n requestPage.value = 1\n loadDebouncedSearch()\n },\n ...stripUndefinedValuesFromObject(filters.value),\n }),\n h(BulkEditDrawer, {\n 'modelValue': showBulkUpdateForm.value,\n 'color': color.value,\n 'onUpdate:modelValue': (val: boolean) => {\n showBulkUpdateForm.value = val\n },\n 'dispositionButtons': dispositionButtonsBindings.value,\n 'saveButton': dispositionSaveButtonBindings.value,\n 'discardButton': dispositionDiscardButtonBindings.value,\n 'schema': bulkEditingSchema.value as any,\n 'model': bulkEditingModel.value,\n 'baseUrl': baseUrl.value,\n 'uids':\n selectedItems.value.length > 0\n ? Array.from(selectedItems.value).map((i) => (i as any).id.toString())\n : Array.from(responseItems.value).map((i) => (i as any).id.toString()),\n 'fireAlertFn': fire,\n 'onSuccess': () => {\n loadDebouncedSearch()\n },\n }),\n h(DownloadDrawer, {\n 'modelValue': showDownloadControls.value,\n 'color': color.value,\n 'onUpdate:modelValue': (val: boolean) => {\n showDownloadControls.value = val\n },\n 'dispositionButtons': dispositionButtonsBindings.value,\n 'downloadButton': downloadButtonBindings.value,\n 'selectedItemCount': selectedCount.value,\n 'totalItemCount': responseTotal.value,\n 'pageSize': requestPerPage.value,\n 'safeRecordCountThreshold': downloadSafeRecordCountThreshold.value,\n 'alertFn': fire,\n 'fetchViaAsyncIteratorFn': fetchAllRecordsViaAsyncIterator,\n 'selectedItems': selectedItems.value,\n 'possibleFields': selectableColumns.value,\n 'showingFields': requestFields.value,\n 'computedColumns': computedColumns.value,\n 'labels': {\n id: fieldLabelTerms.value.general\n ? fieldLabelTerms.value.general.id\n : 'fields.id',\n ...stripUndefinedValuesFromObject(\n deepmerge(\n fieldLabelTerms.value.general\n ? stripUndefinedValuesFromObject(fieldLabelTerms.value.general)\n : (defaultsForFieldLabelTermsProps as any).general,\n fieldLabelTerms.value.headers\n ? stripUndefinedValuesFromObject(fieldLabelTerms.value.headers)\n : (defaultsForFieldLabelTermsProps as any).headers\n ) as Record<string, string>\n ),\n },\n }),\n ],\n 'aggregations': slots.aggregations\n ? () => slots.aggregations!(responseAggregations, searching)\n : undefined,\n })\n ),\n renderDialogs(),\n h(BulkActionsProgressDialog, {\n container: containerVCardRef.value,\n bulkActionName: bulkActionName.value,\n bulkActionProcessing: bulkActionProcessing.value,\n bulkActionProcessingComplete: bulkActionProcessingComplete.value,\n bulkActionProgress: bulkActionProgress.value,\n bulkActionTotal: bulkActionTotal.value,\n bulkActionSuccesses: bulkActionSuccesses.value,\n bulkActionFailures: bulkActionFailures.value,\n bulkActionUndetermined: bulkActionUndetermined.value,\n ...{\n 'onClick:close': () => {\n bulkActionProcessing.value = false\n bulkActionProcessingComplete.value = false\n bulkActionName.value = null\n bulkActionProgress.value = 0\n bulkActionTotal.value = 0\n bulkActionSuccesses.value = 0\n bulkActionFailures.value = 0\n bulkActionUndetermined.value = 0\n // @todo: reset selected items?\n },\n },\n }),\n // h('pre', {}, JSON.stringify(toRaw(requestFields.value), null, 2)),\n ]\n )\n )\n onMounted(() => {\n if (!browser.ssr) {\n // setStateFromEncoded(state.value)\n hasBeenMounted.value = true\n }\n })\n onBeforeUnmount(() => {\n hasBeenMounted.value = false\n })\n return {\n bulkEditingSchema: toUnreactive(bulkEditingSchema),\n selectable: toUnreactive(selectable),\n filterable: toUnreactive(filterable),\n sortable: toUnreactive(sortable),\n aggregatable: toUnreactive(aggregatable),\n refresh: () => loadDebouncedSearch(),\n bulkActionProcessing,\n bulkActionProcessingComplete,\n }\n },\n})\n\nexport type ResourcefulIndex = InstanceType<typeof ResourcefulIndex>\n\n// Re-export types from @nhtio/lucid-resourceful for portable declarations\nexport type { ObjectSchema } from '@nhtio/validation'\n"],"names":["index","error","truncate","require$$0","joi","x","y","oops","_createElementVNode","_Fragment","_createVNode","_mergeProps","propsFactory","TypedEventEmitter","ordinal","format","writeFile","useRender","qs.stringify","makeComponentProps","_normalizeClass","_normalizeStyle","_withDirectives","_vShow","FilterOperators","omit","readonly","o","IconValue","useLocale","ref","v","item","isObject","isEmpty","props","items","_createTextVNode","pick","slotProps","defaultCommonControlButtonProps","makeVDataTableServerProps","useDisplay","vueWarn","makeDensityProps","makeElevationProps","makeThemeProps","makeBorderProps","makeRoundedProps","makeVariantProps","decodeJoi","page"],"mappings":"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","x_google_ignoreList":[0,1,3,4,5,8,9,10,11,22,23,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45]}
|