@nhtio/lucid-resourceful-vue-components 0.1.0-master-92cf468a → 0.1.0-master-4212d8b5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/{VChip-cvRAefVz.mjs → VChip-BDyK2TcI.mjs} +2 -2
  2. package/{VChip-cvRAefVz.mjs.map → VChip-BDyK2TcI.mjs.map} +1 -1
  3. package/{VDatePicker-BIguCVc-.mjs → VDatePicker-DQIK8Y9D.mjs} +4 -4
  4. package/{VDatePicker-BIguCVc-.mjs.map → VDatePicker-DQIK8Y9D.mjs.map} +1 -1
  5. package/{VDialog-B3zmrWE3.mjs → VDialog-BgbYLU4T.mjs} +3 -3
  6. package/{VDialog-B3zmrWE3.mjs.map → VDialog-BgbYLU4T.mjs.map} +1 -1
  7. package/{VEmptyState-xSkyGTvh.mjs → VEmptyState-BPx3OaCS.mjs} +2 -2
  8. package/{VEmptyState-xSkyGTvh.mjs.map → VEmptyState-BPx3OaCS.mjs.map} +1 -1
  9. package/{VHover-9B6zOfMl.mjs → VHover-DFxPLX5O.mjs} +3 -3
  10. package/{VHover-9B6zOfMl.mjs.map → VHover-DFxPLX5O.mjs.map} +1 -1
  11. package/{VListItem-Db3fin2X.mjs → VListItem-Bm6UEqPQ.mjs} +3 -3
  12. package/{VListItem-Db3fin2X.mjs.map → VListItem-Bm6UEqPQ.mjs.map} +1 -1
  13. package/{VMenu-CJJRgsgx.mjs → VMenu-BsiZ61Ef.mjs} +3 -3
  14. package/{VMenu-CJJRgsgx.mjs.map → VMenu-BsiZ61Ef.mjs.map} +1 -1
  15. package/{VPicker-BMIzQQeC.mjs → VPicker-BVs5uDku.mjs} +4 -4
  16. package/{VPicker-BMIzQQeC.mjs.map → VPicker-BVs5uDku.mjs.map} +1 -1
  17. package/{VRadioGroup-CiJi3SA5.mjs → VRadioGroup-D3SiTdVL.mjs} +4 -4
  18. package/{VRadioGroup-CiJi3SA5.mjs.map → VRadioGroup-D3SiTdVL.mjs.map} +1 -1
  19. package/{VRow-DY9jxlUT.mjs → VRow-2uWyKH1m.mjs} +2 -2
  20. package/{VRow-DY9jxlUT.mjs.map → VRow-2uWyKH1m.mjs.map} +1 -1
  21. package/{VSheet-DMm59Y3v.mjs → VSheet-Be4VY_Mp.mjs} +2 -2
  22. package/{VSheet-DMm59Y3v.mjs.map → VSheet-Be4VY_Mp.mjs.map} +1 -1
  23. package/{actions-DRtd5rpe.mjs → actions-BEwmoQjX.mjs} +12 -12
  24. package/{actions-DRtd5rpe.mjs.map → actions-BEwmoQjX.mjs.map} +1 -1
  25. package/{alert-BXserbWZ.mjs → alert-CoXST_AQ.mjs} +11 -11
  26. package/{alert-BXserbWZ.mjs.map → alert-CoXST_AQ.mjs.map} +1 -1
  27. package/{bigint-DTkus69Q.mjs → bigint-D0uhiche.mjs} +7 -7
  28. package/{bigint-DTkus69Q.mjs.map → bigint-D0uhiche.mjs.map} +1 -1
  29. package/{boolean-DC5WviWG.mjs → boolean-CTCdgV-D.mjs} +10 -10
  30. package/{boolean-DC5WviWG.mjs.map → boolean-CTCdgV-D.mjs.map} +1 -1
  31. package/{clipboard-GzUF8F1H.mjs → clipboard-DpDxswGb.mjs} +7 -7
  32. package/{clipboard-GzUF8F1H.mjs.map → clipboard-DpDxswGb.mjs.map} +1 -1
  33. package/{common-y26hBhM2.mjs → common-CLTkmLpt.mjs} +15 -15
  34. package/{common-y26hBhM2.mjs.map → common-CLTkmLpt.mjs.map} +1 -1
  35. package/components/autorefresh_controller.mjs +1 -1
  36. package/components/control_button.mjs +1 -1
  37. package/components/control_button_bar.mjs +2 -2
  38. package/components/control_menu.mjs +1 -1
  39. package/components/custom_field.mjs +1 -1
  40. package/components/exporter.mjs +1 -1
  41. package/components/fields/bigint.mjs +1 -1
  42. package/components/fields/boolean.mjs +1 -1
  43. package/components/fields/date.mjs +1 -1
  44. package/components/fields/date_time.mjs +1 -1
  45. package/components/fields/enum.mjs +1 -1
  46. package/components/fields/integer.mjs +1 -1
  47. package/components/fields/number.mjs +1 -1
  48. package/components/fields/string.mjs +1 -1
  49. package/components/fields/unsigned_integer.mjs +1 -1
  50. package/components/fields.mjs +9 -9
  51. package/components/form_with_validation.mjs +1 -1
  52. package/components/resourceful_alerter.mjs +1 -1
  53. package/components/resourceful_index.mjs +1 -1
  54. package/components/resourceful_record.mjs +2 -2
  55. package/components/resourceful_record_default_form.mjs +1 -1
  56. package/components/resourceful_record_form.mjs +1 -1
  57. package/components/sortable.mjs +1 -1
  58. package/components/svg_icon.mjs +1 -1
  59. package/components/timezone_picker.mjs +1 -1
  60. package/components.mjs +23 -23
  61. package/composables.mjs +11 -11
  62. package/{custom-D0tUJjUR.mjs → custom-L63bag5r.mjs} +7 -7
  63. package/{custom-D0tUJjUR.mjs.map → custom-L63bag5r.mjs.map} +1 -1
  64. package/{date-3y6HlkRS.mjs → date-Bu_GWv3J.mjs} +10 -10
  65. package/{date-3y6HlkRS.mjs.map → date-Bu_GWv3J.mjs.map} +1 -1
  66. package/{date_time-Dok0C-ky.mjs → date_time-XbWpsj-a.mjs} +18 -18
  67. package/{date_time-Dok0C-ky.mjs.map → date_time-XbWpsj-a.mjs.map} +1 -1
  68. package/{display-C7AHwUDP.mjs → display-BgFCfUhw.mjs} +4 -4
  69. package/{display-C7AHwUDP.mjs.map → display-BgFCfUhw.mjs.map} +1 -1
  70. package/{display-8m6WLbhM.mjs → display-DSFGrK61.mjs} +29 -29
  71. package/{display-8m6WLbhM.mjs.map → display-DSFGrK61.mjs.map} +1 -1
  72. package/{enum-Y_vMbRQU.mjs → enum-CNS1LcyE.mjs} +9 -9
  73. package/{enum-Y_vMbRQU.mjs.map → enum-CNS1LcyE.mjs.map} +1 -1
  74. package/{exceptions-BzaXvPKn.mjs → exceptions-CSGrOAdA.mjs} +2 -2
  75. package/{exceptions-BzaXvPKn.mjs.map → exceptions-CSGrOAdA.mjs.map} +1 -1
  76. package/exceptions.mjs +2 -2
  77. package/factories.mjs +2 -2
  78. package/{field_composer-BGsudu0f.mjs → field_composer-CqDUYus4.mjs} +3 -3
  79. package/{field_composer-BGsudu0f.mjs.map → field_composer-CqDUYus4.mjs.map} +1 -1
  80. package/{form-Zz9ovJUk.mjs → form-xWfoyo_J.mjs} +15 -15
  81. package/{form-Zz9ovJUk.mjs.map → form-xWfoyo_J.mjs.map} +1 -1
  82. package/{guards-DkKUpPFY.mjs → guards-DUfveiTB.mjs} +2 -2
  83. package/{guards-DkKUpPFY.mjs.map → guards-DUfveiTB.mjs.map} +1 -1
  84. package/guards.mjs +4 -4
  85. package/helpers.mjs +12 -12
  86. package/{http-DDqKp3_h.mjs → http-C6gl85rL.mjs} +2 -2
  87. package/{http-DDqKp3_h.mjs.map → http-C6gl85rL.mjs.map} +1 -1
  88. package/{http-C_Q-oPS8.mjs → http-DBeWvRRv.mjs} +2 -2
  89. package/{http-C_Q-oPS8.mjs.map → http-DBeWvRRv.mjs.map} +1 -1
  90. package/http.mjs +1 -1
  91. package/{index-BGXumd5X.mjs → index-BttGLFbV.mjs} +3 -3
  92. package/{index-BGXumd5X.mjs.map → index-BttGLFbV.mjs.map} +1 -1
  93. package/{index-CKsAcMGI.mjs → index-BuANv93B.mjs} +4 -4
  94. package/{index-CKsAcMGI.mjs.map → index-BuANv93B.mjs.map} +1 -1
  95. package/{index-BMbQH0ri.mjs → index-BuM2Non6.mjs} +43 -43
  96. package/{index-BMbQH0ri.mjs.map → index-BuM2Non6.mjs.map} +1 -1
  97. package/{index-gEAkqNVM.mjs → index-C-69XC46.mjs} +2 -2
  98. package/{index-gEAkqNVM.mjs.map → index-C-69XC46.mjs.map} +1 -1
  99. package/{index-C53bXEIe.mjs → index-C83PbHSi.mjs} +6 -6
  100. package/{index-C53bXEIe.mjs.map → index-C83PbHSi.mjs.map} +1 -1
  101. package/{index-5y76H-oT.mjs → index-Cf51NF_C.mjs} +3 -3
  102. package/{index-5y76H-oT.mjs.map → index-Cf51NF_C.mjs.map} +1 -1
  103. package/{index-CFXxepQ0.mjs → index-CnRNmJnf.mjs} +8 -8
  104. package/{index-CFXxepQ0.mjs.map → index-CnRNmJnf.mjs.map} +1 -1
  105. package/{index-DrvODG-6.mjs → index-D-pRjfro.mjs} +8 -8
  106. package/{index-DrvODG-6.mjs.map → index-D-pRjfro.mjs.map} +1 -1
  107. package/{index-Dak2Iq66.mjs → index-DFHFiM3G.mjs} +8 -8
  108. package/{index-Dak2Iq66.mjs.map → index-DFHFiM3G.mjs.map} +1 -1
  109. package/{index-BQSLJOMM.mjs → index-xiL4gRps.mjs} +15 -15
  110. package/{index-BQSLJOMM.mjs.map → index-xiL4gRps.mjs.map} +1 -1
  111. package/index.mjs +37 -37
  112. package/{integer-CCFl1__b.mjs → integer-D08s3du-.mjs} +3 -3
  113. package/{integer-CCFl1__b.mjs.map → integer-D08s3du-.mjs.map} +1 -1
  114. package/{ioc-VpXEFTA_.mjs → ioc-XSkiYED4.mjs} +2 -2
  115. package/{ioc-VpXEFTA_.mjs.map → ioc-XSkiYED4.mjs.map} +1 -1
  116. package/ioc.mjs +1 -1
  117. package/{mdi-BNDL0Fmp.mjs → mdi-Sfb04KxJ.mjs} +15 -15
  118. package/{mdi-BNDL0Fmp.mjs.map → mdi-Sfb04KxJ.mjs.map} +1 -1
  119. package/{number-iw3XUChR.mjs → number-M3fatRCC.mjs} +8 -8
  120. package/{number-iw3XUChR.mjs.map → number-M3fatRCC.mjs.map} +1 -1
  121. package/package.json +1 -1
  122. package/{props-BzOIfizB.mjs → props-CmKs0tOi.mjs} +6 -6
  123. package/{props-BzOIfizB.mjs.map → props-CmKs0tOi.mjs.map} +1 -1
  124. package/{props-d2vGsoV2.mjs → props-T2-chZAO.mjs} +4 -4
  125. package/{props-d2vGsoV2.mjs.map → props-T2-chZAO.mjs.map} +1 -1
  126. package/{renderers-DzeB-7t5.mjs → renderers-DVerxUh1.mjs} +14 -14
  127. package/{renderers-DzeB-7t5.mjs.map → renderers-DVerxUh1.mjs.map} +1 -1
  128. package/{string-CYZ4HJOE.mjs → string-BegCdRUf.mjs} +13 -13
  129. package/{string-CYZ4HJOE.mjs.map → string-BegCdRUf.mjs.map} +1 -1
  130. package/{unsigned_integer-CtzLbU9B.mjs → unsigned_integer-JAzC2D19.mjs} +4 -4
  131. package/{unsigned_integer-CtzLbU9B.mjs.map → unsigned_integer-JAzC2D19.mjs.map} +1 -1
  132. package/{utils-bmb0VKX5.mjs → utils-DPixZO5a.mjs} +13 -6
  133. package/utils-DPixZO5a.mjs.map +1 -0
  134. package/{validation-D9xMBA0E.mjs → validation-CpCLjEty.mjs} +6 -6
  135. package/{validation-D9xMBA0E.mjs.map → validation-CpCLjEty.mjs.map} +1 -1
  136. package/{vendor-nhtio-vuetifiable-ZisC21Mr.mjs → vendor-nhtio-vuetifiable--NpO78cs.mjs} +17 -17
  137. package/{vendor-nhtio-vuetifiable-ZisC21Mr.mjs.map → vendor-nhtio-vuetifiable--NpO78cs.mjs.map} +1 -1
  138. package/{vendor-xlsx-B6rmmoFO.mjs → vendor-xlsx-Cm0x3txX.mjs} +2 -2
  139. package/{vendor-xlsx-B6rmmoFO.mjs.map → vendor-xlsx-Cm0x3txX.mjs.map} +1 -1
  140. package/utils-bmb0VKX5.mjs.map +0 -1
@@ -1,11 +1,11 @@
1
- import { a as useI18n, e as useCron } from "./ioc-VpXEFTA_.mjs";
2
- import { S as SvgIcon } from "./index-BGXumd5X.mjs";
3
- import { l as mdiRefreshAuto } from "./mdi-BNDL0Fmp.mjs";
4
- import { C as ControlMenu } from "./index-DrvODG-6.mjs";
5
- import { p as printfExports } from "./http-C_Q-oPS8.mjs";
6
- import { a as makeControlMenuControlButtonProps } from "./props-BzOIfizB.mjs";
1
+ import { a as useI18n, e as useCron } from "./ioc-XSkiYED4.mjs";
2
+ import { S as SvgIcon } from "./index-BttGLFbV.mjs";
3
+ import { m as mdiRefreshAuto } from "./mdi-Sfb04KxJ.mjs";
4
+ import { C as ControlMenu } from "./index-D-pRjfro.mjs";
5
+ import { p as printfExports } from "./http-DBeWvRRv.mjs";
6
+ import { m as makeControlMenuControlButtonProps } from "./props-CmKs0tOi.mjs";
7
7
  import { defineComponent, toRefs, ref, computed, watch, onBeforeUnmount, h } from "vue";
8
- import { V as VListItem } from "./VListItem-Db3fin2X.mjs";
8
+ import { V as VListItem } from "./VListItem-Bm6UEqPQ.mjs";
9
9
  const AutoRefeshController = defineComponent({
10
10
  name: "AutoRefeshController",
11
11
  props: makeControlMenuControlButtonProps(),
@@ -85,4 +85,4 @@ const AutoRefeshController = defineComponent({
85
85
  export {
86
86
  AutoRefeshController as A
87
87
  };
88
- //# sourceMappingURL=index-CFXxepQ0.mjs.map
88
+ //# sourceMappingURL=index-CnRNmJnf.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-CFXxepQ0.mjs","sources":["../src/private/autorefresh-controller/index.ts"],"sourcesContent":["import { useI18n } from '../ioc'\nimport { useCron } from '../ioc'\nimport { SvgIcon } from '../svg-icon'\nimport { mdiRefreshAuto } from '@mdi/js'\nimport { ControlMenu } from '../control-menu'\nimport { printf as format } from 'fast-printf'\nimport { VListItem } from 'vuetify/components/VList'\nimport { makeControlMenuControlButtonProps } from '../control-menu/props'\nimport { defineComponent, h, toRefs, ref, watch, computed, onBeforeUnmount } from 'vue'\nimport type { ControlMenuProps } from '../control-menu/props'\n\nexport const AutoRefeshController = defineComponent({\n name: 'AutoRefeshController',\n props: makeControlMenuControlButtonProps(),\n emits: ['triggered'],\n setup(props, { emit }) {\n const { color, density, size } = toRefs(props)\n const t = useI18n()\n const cron = useCron()\n const crontab = ref<string | null>(null)\n const options = [\n { crontab: null, label: t('general.off') },\n { crontab: '*/5 * * * * *', label: format('5%s', t('abbreviations.seconds')) },\n { crontab: '*/10 * * * * *', label: format('10%s', t('abbreviations.seconds')) },\n { crontab: '*/30 * * * * *', label: format('30%s', t('abbreviations.seconds')) },\n { crontab: '* * * * *', label: format('1%s', t('abbreviations.minutes')) },\n { crontab: '*/5 * * * *', label: format('5%s', t('abbreviations.minutes')) },\n { crontab: '*/15 * * * *', label: format('15%s', t('abbreviations.minutes')) },\n { crontab: '*/30 * * * *', label: format('30%s', t('abbreviations.minutes')) },\n { crontab: '0 * * * *', label: format('1%s', t('abbreviations.hours')) },\n { crontab: '0 */2 * * *', label: format('2%s', t('abbreviations.hours')) },\n { crontab: '0 */3 * * *', label: format('3%s', t('abbreviations.hours')) },\n { crontab: '0 */4 * * *', label: format('4%s', t('abbreviations.hours')) },\n { crontab: '0 */6 * * *', label: format('6%s', t('abbreviations.hours')) },\n { crontab: '0 */8 * * *', label: format('8%s', t('abbreviations.hours')) },\n { crontab: '0 */12 * * *', label: format('12%s', t('abbreviations.hours')) },\n ]\n const currentOption = computed(() => {\n return options.find((opt) => opt.crontab === crontab.value) || options[0]\n })\n const doTrigger = () => {\n emit('triggered')\n }\n watch(\n crontab,\n (is, was) => {\n if (cron) {\n if (was) {\n cron.$off(was, doTrigger)\n }\n if (is) {\n cron.$on(is, doTrigger)\n }\n }\n },\n { immediate: true }\n )\n onBeforeUnmount(() => {\n if (cron && crontab.value) {\n cron.$off(crontab.value, doTrigger)\n }\n })\n const controlMenuBindings = computed<ControlMenuProps>(() => ({\n icon: h(SvgIcon, { d: mdiRefreshAuto }),\n cta: currentOption.value.label,\n activator: {\n color: color.value,\n density: density.value,\n size: size.value,\n // dividePrependIcon: true,\n },\n }))\n return () =>\n h(ControlMenu, controlMenuBindings.value, () =>\n options.map((o) =>\n h(VListItem, {\n title: o.label,\n onClick: () => {\n crontab.value = o.crontab\n },\n active: o.crontab === crontab.value,\n })\n )\n )\n },\n})\n"],"names":["format"],"mappings":"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"}
1
+ {"version":3,"file":"index-CnRNmJnf.mjs","sources":["../src/private/autorefresh-controller/index.ts"],"sourcesContent":["import { useI18n } from '../ioc'\nimport { useCron } from '../ioc'\nimport { SvgIcon } from '../svg-icon'\nimport { mdiRefreshAuto } from '@mdi/js'\nimport { ControlMenu } from '../control-menu'\nimport { printf as format } from 'fast-printf'\nimport { VListItem } from 'vuetify/components/VList'\nimport { makeControlMenuControlButtonProps } from '../control-menu/props'\nimport { defineComponent, h, toRefs, ref, watch, computed, onBeforeUnmount } from 'vue'\nimport type { ControlMenuProps } from '../control-menu/props'\n\nexport const AutoRefeshController = defineComponent({\n name: 'AutoRefeshController',\n props: makeControlMenuControlButtonProps(),\n emits: ['triggered'],\n setup(props, { emit }) {\n const { color, density, size } = toRefs(props)\n const t = useI18n()\n const cron = useCron()\n const crontab = ref<string | null>(null)\n const options = [\n { crontab: null, label: t('general.off') },\n { crontab: '*/5 * * * * *', label: format('5%s', t('abbreviations.seconds')) },\n { crontab: '*/10 * * * * *', label: format('10%s', t('abbreviations.seconds')) },\n { crontab: '*/30 * * * * *', label: format('30%s', t('abbreviations.seconds')) },\n { crontab: '* * * * *', label: format('1%s', t('abbreviations.minutes')) },\n { crontab: '*/5 * * * *', label: format('5%s', t('abbreviations.minutes')) },\n { crontab: '*/15 * * * *', label: format('15%s', t('abbreviations.minutes')) },\n { crontab: '*/30 * * * *', label: format('30%s', t('abbreviations.minutes')) },\n { crontab: '0 * * * *', label: format('1%s', t('abbreviations.hours')) },\n { crontab: '0 */2 * * *', label: format('2%s', t('abbreviations.hours')) },\n { crontab: '0 */3 * * *', label: format('3%s', t('abbreviations.hours')) },\n { crontab: '0 */4 * * *', label: format('4%s', t('abbreviations.hours')) },\n { crontab: '0 */6 * * *', label: format('6%s', t('abbreviations.hours')) },\n { crontab: '0 */8 * * *', label: format('8%s', t('abbreviations.hours')) },\n { crontab: '0 */12 * * *', label: format('12%s', t('abbreviations.hours')) },\n ]\n const currentOption = computed(() => {\n return options.find((opt) => opt.crontab === crontab.value) || options[0]\n })\n const doTrigger = () => {\n emit('triggered')\n }\n watch(\n crontab,\n (is, was) => {\n if (cron) {\n if (was) {\n cron.$off(was, doTrigger)\n }\n if (is) {\n cron.$on(is, doTrigger)\n }\n }\n },\n { immediate: true }\n )\n onBeforeUnmount(() => {\n if (cron && crontab.value) {\n cron.$off(crontab.value, doTrigger)\n }\n })\n const controlMenuBindings = computed<ControlMenuProps>(() => ({\n icon: h(SvgIcon, { d: mdiRefreshAuto }),\n cta: currentOption.value.label,\n activator: {\n color: color.value,\n density: density.value,\n size: size.value,\n // dividePrependIcon: true,\n },\n }))\n return () =>\n h(ControlMenu, controlMenuBindings.value, () =>\n options.map((o) =>\n h(VListItem, {\n title: o.label,\n onClick: () => {\n crontab.value = o.crontab\n },\n active: o.crontab === crontab.value,\n })\n )\n )\n },\n})\n"],"names":["format"],"mappings":"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"}
@@ -1,14 +1,14 @@
1
1
  import { useDisplay } from "vuetify";
2
- import { S as SvgIcon } from "./index-BGXumd5X.mjs";
2
+ import { S as SvgIcon } from "./index-BttGLFbV.mjs";
3
3
  import { d as deepmerge } from "./index-B2cQuM3q.mjs";
4
- import { a as useSlot } from "./utils-bmb0VKX5.mjs";
4
+ import { a as useSlot } from "./utils-DPixZO5a.mjs";
5
5
  import { n as numeral } from "./numeral-DmC5bR5g.mjs";
6
- import { k as mdiMenuUp, g as mdiMenuDown, V as VCard } from "./mdi-BNDL0Fmp.mjs";
7
- import { C as ControlButton } from "./index-C53bXEIe.mjs";
8
- import { u as useRender } from "./vendor-nhtio-vuetifiable-ZisC21Mr.mjs";
9
- import { m as makeControlMenuProps, d as defaultActivatorValues } from "./props-BzOIfizB.mjs";
6
+ import { a as mdiMenuUp, b as mdiMenuDown, V as VCard } from "./mdi-Sfb04KxJ.mjs";
7
+ import { C as ControlButton } from "./index-C83PbHSi.mjs";
8
+ import { u as useRender } from "./vendor-nhtio-vuetifiable--NpO78cs.mjs";
9
+ import { a as makeControlMenuProps, d as defaultActivatorValues } from "./props-CmKs0tOi.mjs";
10
10
  import { defineComponent, toRefs, ref, computed, h } from "vue";
11
- import { V as VMenu } from "./VMenu-CJJRgsgx.mjs";
11
+ import { V as VMenu } from "./VMenu-BsiZ61Ef.mjs";
12
12
  const ControlMenu = defineComponent({
13
13
  name: "ControlMenu",
14
14
  props: makeControlMenuProps(),
@@ -123,4 +123,4 @@ const ControlMenu = defineComponent({
123
123
  export {
124
124
  ControlMenu as C
125
125
  };
126
- //# sourceMappingURL=index-DrvODG-6.mjs.map
126
+ //# sourceMappingURL=index-D-pRjfro.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-DrvODG-6.mjs","sources":["../src/private/control-menu/index.ts"],"sourcesContent":["import { useDisplay } from 'vuetify'\nimport { SvgIcon } from '../svg-icon'\nimport { deepmerge } from 'deepmerge-ts'\nimport { useSlot } from '../common/utils'\nimport { default as numeral } from 'numeral'\nimport { VMenu } from 'vuetify/components/VMenu'\nimport { VCard } from 'vuetify/components/VCard'\nimport { mdiMenuUp, mdiMenuDown } from '@mdi/js'\nimport { ControlButton } from '../control-button'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { makeControlMenuProps, defaultActivatorValues } from './props'\nimport { defineComponent, h, computed, toRefs, ref, SlotsType } from 'vue'\nimport type { ControlButtonProps, ControlButtonState } from '../control-button/props'\n\ntype ControMenuButtonSlots = {\n prepend: (state: ControlButtonState) => any\n cta: (state: ControlButtonState) => any\n append: (state: ControlButtonState) => any\n default: (args: { close: () => void }) => any\n}\n\nexport const ControlMenu = defineComponent({\n name: 'ControlMenu',\n props: makeControlMenuProps(),\n slots: Object as SlotsType<ControMenuButtonSlots>,\n setup(props, { slots }) {\n const {\n icon,\n cta,\n count,\n countFormat,\n activator,\n color,\n badgeColor,\n inOverflowMenu,\n disabled,\n noPadding,\n } = toRefs(props)\n const prependSlot = useSlot<ControMenuButtonSlots>('prepend', slots)\n const ctaSlot = useSlot<ControMenuButtonSlots>('cta', slots)\n const appendSlot = useSlot<ControMenuButtonSlots>('append', slots)\n const defaultSlot = useSlot<ControMenuButtonSlots>('default', slots)\n const { height } = useDisplay()\n const open = ref(false)\n const anchor = ref<ControlButton | null>(null)\n const vMenuBindings = computed(() => ({\n 'modelValue': open.value,\n 'onUpdate:modelValue': (value: boolean) => (open.value = value),\n 'closeOnBack': false,\n 'closeOnContentClick': false,\n 'contentClass': 'resourceful-option-menu-content',\n 'minWidth': 300,\n 'location': 'bottom start' as const,\n 'target': anchor.value ? anchor.value.$el : undefined,\n 'submenu': inOverflowMenu.value,\n }))\n const formattedCount = computed(() => numeral(count.value).format(countFormat.value))\n const showCount = computed(() => {\n const num = Number(count.value)\n return !Number.isNaN(num) && Math.abs(num) > 0\n })\n const menuPanelCardBindings = computed(() => ({\n color: color.value,\n minWidth: 300,\n minHeight: 20,\n maxHeight: Math.min(height.value - 200, 400),\n }))\n const doOpenMenu = () => (open.value = true)\n const close = () => (open.value = false)\n const controlButtonBindings = computed<ControlButtonProps>(() =>\n deepmerge(defaultActivatorValues, activator.value, {\n ref: anchor,\n prependIcon: icon.value,\n cta: cta.value,\n appendIcon: () => h(SvgIcon, { d: open.value ? mdiMenuUp : mdiMenuDown }),\n divideAppendIcon: true,\n badge: {\n color: badgeColor.value,\n content: showCount.value ? formattedCount.value : undefined,\n },\n class: inOverflowMenu.value ? [] : noPadding.value ? ['my-2', 'me-2'] : ['ma-2'],\n inOverflowMenu: inOverflowMenu.value,\n state: {\n disabled: disabled.value,\n },\n })\n )\n useRender(() =>\n h(\n 'div',\n {\n class: [{ 'w-100': inOverflowMenu.value }],\n },\n h(VMenu, vMenuBindings.value, {\n activator: ({ props: activatorProps }: { props: Record<string, any> }) =>\n h(\n ControlButton,\n {\n ...controlButtonBindings.value,\n ...activatorProps,\n inOverflowMenu: inOverflowMenu.value,\n },\n // eslint-disable-next-line @nht/require-function-slots-for-programmatic-components\n {\n cta: ctaSlot\n ? (state: ControlButtonState) =>\n ctaSlot({\n ...state,\n close,\n })\n : null,\n prepend: prependSlot\n ? (state: ControlButtonState) =>\n prependSlot({\n ...state,\n close,\n })\n : null,\n append: appendSlot\n ? (state: ControlButtonState) =>\n appendSlot({\n ...state,\n close,\n })\n : null,\n }\n ),\n default: () =>\n h(VCard, menuPanelCardBindings.value, () =>\n defaultSlot ? defaultSlot({ close }) : null\n ),\n })\n )\n )\n return {\n isOpen: open,\n open: doOpenMenu,\n close,\n }\n },\n})\n\nexport type ControlMenu = InstanceType<typeof ControlMenu>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index-D-pRjfro.mjs","sources":["../src/private/control-menu/index.ts"],"sourcesContent":["import { useDisplay } from 'vuetify'\nimport { SvgIcon } from '../svg-icon'\nimport { deepmerge } from 'deepmerge-ts'\nimport { useSlot } from '../common/utils'\nimport { default as numeral } from 'numeral'\nimport { VMenu } from 'vuetify/components/VMenu'\nimport { VCard } from 'vuetify/components/VCard'\nimport { mdiMenuUp, mdiMenuDown } from '@mdi/js'\nimport { ControlButton } from '../control-button'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { makeControlMenuProps, defaultActivatorValues } from './props'\nimport { defineComponent, h, computed, toRefs, ref, SlotsType } from 'vue'\nimport type { ControlButtonProps, ControlButtonState } from '../control-button/props'\n\ntype ControMenuButtonSlots = {\n prepend: (state: ControlButtonState) => any\n cta: (state: ControlButtonState) => any\n append: (state: ControlButtonState) => any\n default: (args: { close: () => void }) => any\n}\n\nexport const ControlMenu = defineComponent({\n name: 'ControlMenu',\n props: makeControlMenuProps(),\n slots: Object as SlotsType<ControMenuButtonSlots>,\n setup(props, { slots }) {\n const {\n icon,\n cta,\n count,\n countFormat,\n activator,\n color,\n badgeColor,\n inOverflowMenu,\n disabled,\n noPadding,\n } = toRefs(props)\n const prependSlot = useSlot<ControMenuButtonSlots>('prepend', slots)\n const ctaSlot = useSlot<ControMenuButtonSlots>('cta', slots)\n const appendSlot = useSlot<ControMenuButtonSlots>('append', slots)\n const defaultSlot = useSlot<ControMenuButtonSlots>('default', slots)\n const { height } = useDisplay()\n const open = ref(false)\n const anchor = ref<ControlButton | null>(null)\n const vMenuBindings = computed(() => ({\n 'modelValue': open.value,\n 'onUpdate:modelValue': (value: boolean) => (open.value = value),\n 'closeOnBack': false,\n 'closeOnContentClick': false,\n 'contentClass': 'resourceful-option-menu-content',\n 'minWidth': 300,\n 'location': 'bottom start' as const,\n 'target': anchor.value ? anchor.value.$el : undefined,\n 'submenu': inOverflowMenu.value,\n }))\n const formattedCount = computed(() => numeral(count.value).format(countFormat.value))\n const showCount = computed(() => {\n const num = Number(count.value)\n return !Number.isNaN(num) && Math.abs(num) > 0\n })\n const menuPanelCardBindings = computed(() => ({\n color: color.value,\n minWidth: 300,\n minHeight: 20,\n maxHeight: Math.min(height.value - 200, 400),\n }))\n const doOpenMenu = () => (open.value = true)\n const close = () => (open.value = false)\n const controlButtonBindings = computed<ControlButtonProps>(() =>\n deepmerge(defaultActivatorValues, activator.value, {\n ref: anchor,\n prependIcon: icon.value,\n cta: cta.value,\n appendIcon: () => h(SvgIcon, { d: open.value ? mdiMenuUp : mdiMenuDown }),\n divideAppendIcon: true,\n badge: {\n color: badgeColor.value,\n content: showCount.value ? formattedCount.value : undefined,\n },\n class: inOverflowMenu.value ? [] : noPadding.value ? ['my-2', 'me-2'] : ['ma-2'],\n inOverflowMenu: inOverflowMenu.value,\n state: {\n disabled: disabled.value,\n },\n })\n )\n useRender(() =>\n h(\n 'div',\n {\n class: [{ 'w-100': inOverflowMenu.value }],\n },\n h(VMenu, vMenuBindings.value, {\n activator: ({ props: activatorProps }: { props: Record<string, any> }) =>\n h(\n ControlButton,\n {\n ...controlButtonBindings.value,\n ...activatorProps,\n inOverflowMenu: inOverflowMenu.value,\n },\n // eslint-disable-next-line @nht/require-function-slots-for-programmatic-components\n {\n cta: ctaSlot\n ? (state: ControlButtonState) =>\n ctaSlot({\n ...state,\n close,\n })\n : null,\n prepend: prependSlot\n ? (state: ControlButtonState) =>\n prependSlot({\n ...state,\n close,\n })\n : null,\n append: appendSlot\n ? (state: ControlButtonState) =>\n appendSlot({\n ...state,\n close,\n })\n : null,\n }\n ),\n default: () =>\n h(VCard, menuPanelCardBindings.value, () =>\n defaultSlot ? defaultSlot({ close }) : null\n ),\n })\n )\n )\n return {\n isOpen: open,\n open: doOpenMenu,\n close,\n }\n },\n})\n\nexport type ControlMenu = InstanceType<typeof ControlMenu>\n"],"names":[],"mappings":"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"}
@@ -1,13 +1,13 @@
1
- import { a as useI18n } from "./ioc-VpXEFTA_.mjs";
1
+ import { a as useI18n } from "./ioc-XSkiYED4.mjs";
2
2
  import { useLocale } from "vuetify";
3
3
  import { d as deepmerge } from "./index-B2cQuM3q.mjs";
4
- import { a as useSlot, s as stripUndefinedValuesFromObject, j as asAbsInt } from "./utils-bmb0VKX5.mjs";
5
- import { C as ControlMenu } from "./index-DrvODG-6.mjs";
6
- import { u as useScopedDisplay } from "./display-C7AHwUDP.mjs";
7
- import { d as debounce, k as convertToUnit, u as useRender, j as forwardRefs, I as IN_BROWSER } from "./vendor-nhtio-vuetifiable-ZisC21Mr.mjs";
8
- import { c as controlButtonBarEmits, m as makeControlButtonBarProps } from "./props-d2vGsoV2.mjs";
4
+ import { a as useSlot, s as stripUndefinedValuesFromObject, j as asAbsInt } from "./utils-DPixZO5a.mjs";
5
+ import { C as ControlMenu } from "./index-D-pRjfro.mjs";
6
+ import { u as useScopedDisplay } from "./display-BgFCfUhw.mjs";
7
+ import { d as debounce, c as convertToUnit, u as useRender, f as forwardRefs, I as IN_BROWSER } from "./vendor-nhtio-vuetifiable--NpO78cs.mjs";
8
+ import { c as controlButtonBarEmits, m as makeControlButtonBarProps } from "./props-T2-chZAO.mjs";
9
9
  import { defineComponent, toRefs, computed, ref, cloneVNode, mergeProps, h, onMounted, watch, onUnmounted } from "vue";
10
- import { V as VListItem } from "./VListItem-Db3fin2X.mjs";
10
+ import { V as VListItem } from "./VListItem-Bm6UEqPQ.mjs";
11
11
  const SUPPORTS_MUTATION_OBSERVER = IN_BROWSER && "MutationObserver" in window;
12
12
  const cloneForMenu = (vnode) => {
13
13
  const updatedProps = stripUndefinedValuesFromObject({
@@ -347,4 +347,4 @@ const ControlButtonBar = defineComponent({
347
347
  export {
348
348
  ControlButtonBar as C
349
349
  };
350
- //# sourceMappingURL=index-Dak2Iq66.mjs.map
350
+ //# sourceMappingURL=index-DFHFiM3G.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-Dak2Iq66.mjs","sources":["../src/private/control-button-bar/index.ts"],"sourcesContent":["/*\n|--------------------------------------------------------------------------\n| Control Button Bar Component\n|--------------------------------------------------------------------------\n|\n| An intelligent, responsive toolbar component that automatically handles\n| button overflow with dropdown menus. Uses container-aware responsive\n| breakpoints to adapt to any layout constraint, providing seamless UX\n| across devices and contexts.\n|\n*/\n\nimport { useI18n } from '../ioc'\nimport { useLocale } from 'vuetify'\nimport { deepmerge } from 'deepmerge-ts'\nimport { useSlot } from '../common/utils'\nimport { ControlMenu } from '../control-menu'\nimport { useScopedDisplay } from '../ux/display'\nimport { VListItem } from 'vuetify/components/VList'\nimport { debounce } from '@nhtio/vuetifiable/util/helpers'\nimport { IN_BROWSER } from '@nhtio/vuetifiable/util/globals'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { convertToUnit } from '@nhtio/vuetifiable/util/helpers'\nimport { forwardRefs } from '@nhtio/vuetifiable/composables/forwardRefs'\nimport { makeControlButtonBarProps, controlButtonBarEmits } from './props'\nimport { stripUndefinedValuesFromObject, asAbsInt } from '../common/utils'\nimport {\n computed,\n ref,\n h,\n defineComponent,\n onMounted,\n onUnmounted,\n toRefs,\n mergeProps,\n cloneVNode,\n watch,\n} from 'vue'\nimport type { WatchStopHandle, SlotsType, VNode } from 'vue'\nimport type { ControlButtonBarOverflowMenuButtonProps } from './props'\n\nexport type { ControlButtonBarProps } from './props'\n\nconst SUPPORTS_MUTATION_OBSERVER = IN_BROWSER && 'MutationObserver' in window\n\nconst cloneForMenu = (vnode: VNode) => {\n const updatedProps = stripUndefinedValuesFromObject({\n ...vnode.props,\n 'id': undefined,\n 'aria-controls': undefined,\n ...mergeProps(\n {\n class: vnode.props?.class ? vnode.props.class : undefined,\n },\n {\n class: ['mx-0'],\n }\n ),\n // we are adding a custom prop to identify that this button is rendered in the menu\n // if the component supports it, it can use this prop to adjust its styling/behavior\n 'inOverflowMenu': true,\n })\n return cloneVNode(vnode, updatedProps)\n}\n\n/**\n * Slot types for the ControlButtonBar component.\n *\n * @public\n */\nexport type ControlButtonBarSlots = {\n /** Content to prepend to the overflow menu */\n 'prepend-menu'?: () => any\n /** Content to append to the overflow menu */\n 'append-menu'?: () => any\n}\n\n/**\n * A responsive toolbar component that automatically handles button overflow with dropdown menus.\n *\n * Features:\n * - Container-aware responsive behavior using useScopedDisplay\n * - Automatic overflow detection with visual jumping reduction\n * - RTL support with intelligent menu positioning\n * - MutationObserver for dynamic content changes\n * - Customizable gap spacing and justification\n * - Performance-optimized with debounced calculations\n *\n * @example\n * ```vue\n * <ControlButtonBar\n * :buttons=\"[\n * h(VBtn, { text: 'Columns' }),\n * h(VBtn, { text: 'Filters' }),\n * h(VBtn, { text: 'Sorting' })\n * ]\"\n * justification=\"center\"\n * :gap=\"2\"\n * />\n * ```\n *\n * @public\n */\nexport const ControlButtonBar = defineComponent({\n name: 'ControlButtonBar',\n inheritAttrs: false,\n props: makeControlButtonBarProps(),\n emits: controlButtonBarEmits,\n slots: Object as SlotsType<ControlButtonBarSlots>,\n setup(props, { attrs, slots }) {\n const t = useI18n()\n const { isRtl } = useLocale()\n const {\n buttons,\n justification,\n gap,\n overflowMenuButtonOptions,\n class: className,\n style,\n } = toRefs(props)\n const prependMenuSlot = useSlot<ControlButtonBarSlots>('prepend-menu', slots)\n const appendMenuSlot = useSlot<ControlButtonBarSlots>('append-menu', slots)\n const normalizedOverflowMenuButtonOptions = computed<ControlButtonBarOverflowMenuButtonProps>(\n () =>\n deepmerge(\n {\n cta: t('general.more'),\n },\n stripUndefinedValuesFromObject({\n cta: overflowMenuButtonOptions.value.cta,\n }),\n {\n activator: stripUndefinedValuesFromObject({\n color: overflowMenuButtonOptions.value.color,\n density: overflowMenuButtonOptions.value.density,\n size: overflowMenuButtonOptions.value.size,\n }),\n }\n )\n )\n const containerRef = ref<HTMLDivElement | null>(null)\n const wrapperRef = ref<HTMLDivElement | null>(null)\n const overflowMenuWrapperRef = ref<HTMLElement | null>(null)\n const overflowMenuButtonRef = ref<ControlMenu | null>(null)\n const overflowMenuButtonIsOpen = computed(() => {\n if (!overflowMenuButtonRef.value) return false\n return overflowMenuButtonRef.value.isOpen\n })\n const usableButtons = computed(() => Array.from(buttons.value).map((btn) => cloneVNode(btn)))\n const clonedButtons = computed(() =>\n !overflowMenuButtonIsOpen.value\n ? []\n : Array.from(buttons.value).map((btn) => cloneForMenu(btn))\n )\n const { width: containerWidth, intersecting, xs } = useScopedDisplay(containerRef)\n const { width: wrapperWidth } = useScopedDisplay(wrapperRef)\n const { width: overflowMenuWrapperWidth, height: overflowMenuWrapperHeight } =\n useScopedDisplay(overflowMenuWrapperRef)\n const containerProps = computed(() =>\n mergeProps(\n {\n class: attrs.class || {},\n style: attrs.style || {},\n },\n {\n class: className.value,\n style: style.value,\n },\n {\n class: ['w-100', 'position-relative', 'r-control-button-bar'],\n role: 'toolbar',\n style: {\n transition: 'opacity 0.2s ease, transform 0.2s ease',\n },\n }\n )\n )\n const overflowedButtonIndexes = ref<number[]>([])\n const lastVisibleButtonEndOffset = ref<number | null>(null)\n const showOverflowMenu = computed(\n () => buttons.value.length > 1 && overflowedButtonIndexes.value.length > 0\n )\n const overflowMenuPosition = computed<'right' | 'left'>(() =>\n isRtl.value\n ? justification.value === 'start'\n ? 'left'\n : 'right'\n : justification.value === 'start'\n ? 'right'\n : 'left'\n )\n const computeOverflowedButtonIndexes = debounce(() => {\n // if there is no container, wrapper, or overflow menu wrapper, we cannot compute overflow\n if (!containerRef.value || !wrapperRef.value || !overflowMenuWrapperRef.value) return\n // if the container is not intersecting (visible), do not compute overflow\n if (!intersecting.value) return\n // if there are less than 2 buttons, then there cannot be any overflow\n if (buttons.value.length < 2) {\n overflowedButtonIndexes.value = []\n return\n }\n // we have 2 values to compare against\n // if none of the buttons extend beyond the wrapper's total width, then there is no overflow\n // otherwise anything that is beyond the wrapper's width minus the overflow button's width\n // is considered overflowed and will be set to 0 opacity + pointer-events: none and then\n // duplicated into the overflow menu\n const wrapperEl = wrapperRef.value\n const buttonWrappers = Array.from(wrapperEl.children) as HTMLDivElement[]\n const currentWrapperWidth = containerWidth.value\n const availableWidthWithOverflowMenu = containerWidth.value - overflowMenuWrapperWidth.value\n\n const buttonWrapperIndexAndOffsets = buttonWrappers.map((wrapper, index) => ({\n index,\n left: wrapper.offsetLeft,\n right: wrapper.offsetLeft + wrapper.offsetWidth,\n }))\n\n // Check if any buttons overflow the wrapper when the menu is visible\n const buttonsOverflowingWrapperIfMenuVisisble = buttonWrapperIndexAndOffsets.filter(\n ({ left, right }) =>\n 'left' === overflowMenuPosition.value\n ? left < overflowMenuWrapperWidth.value\n : right > availableWidthWithOverflowMenu\n )\n\n // if no buttons overflow the wrapper when the menu is visible, exit early\n if (buttonsOverflowingWrapperIfMenuVisisble.length === 0) {\n overflowedButtonIndexes.value = []\n lastVisibleButtonEndOffset.value = null\n return\n }\n\n // check if any of the buttons overflow the wrapper if the menu is not visible\n const someOutsideContainer = buttonsOverflowingWrapperIfMenuVisisble.some(\n ({ left, right }) =>\n 'left' === overflowMenuPosition.value ? left < 0 : right > currentWrapperWidth\n )\n // if none of the buttons overflow the wrapper if the menu is not visible, exit early\n if (!someOutsideContainer) {\n overflowedButtonIndexes.value = []\n lastVisibleButtonEndOffset.value = null\n return\n }\n\n // otherwise, the buttons that overflow the wrapper when the menu is visible are the ones that are overflowed\n overflowedButtonIndexes.value = buttonsOverflowingWrapperIfMenuVisisble.map(\n ({ index }) => index\n )\n\n // in order to make the overflow menu button flow more naturally,\n // we're going to reposition it based on the position of the first hidden button\n const computedHiddenButtons = buttonsOverflowingWrapperIfMenuVisisble.sort((a, b) => {\n if ('left' === overflowMenuPosition.value) {\n return b.right - a.right\n } else {\n return a.left - b.left\n }\n })\n\n const firstHiddenButton = computedHiddenButtons[0]\n if (!firstHiddenButton) {\n lastVisibleButtonEndOffset.value = null\n return\n }\n lastVisibleButtonEndOffset.value =\n 'left' === overflowMenuPosition.value ? firstHiddenButton.right : firstHiddenButton.left\n }, 50)\n const wrapperMutationObserverHandler = (entries: MutationRecord[]) => {\n if (entries.some((e) => e.type === 'childList')) {\n queueMicrotask(() => computeOverflowedButtonIndexes())\n }\n }\n const wrapperObserver = (is: HTMLDivElement | null, was: HTMLDivElement | null | undefined) => {\n if (was && wrapperMutationObserver) {\n wrapperMutationObserver.disconnect()\n }\n if (is && wrapperMutationObserver) {\n wrapperMutationObserver.observe(is, {\n childList: true,\n subtree: false,\n attributes: false,\n characterData: false,\n })\n }\n }\n const closeOverflowMenu = () => {\n if (overflowMenuButtonRef.value) {\n overflowMenuButtonRef.value.close()\n }\n }\n const wrapperProps = computed(() => ({\n class: [\n 'd-flex',\n 'overflow-x-hidden',\n 'w-100',\n 'r-control-button-bar__wrapper',\n {\n 'justify-start': justification.value === 'start',\n 'justify-end': justification.value === 'end',\n },\n ],\n }))\n const overflowMenuWrapperOffsets = computed(() => {\n if (lastVisibleButtonEndOffset.value === null || xs.value) {\n return stripUndefinedValuesFromObject({\n left: 'left' === overflowMenuPosition.value ? 0 : undefined,\n right: 'right' === overflowMenuPosition.value ? 0 : undefined,\n })\n } else {\n return stripUndefinedValuesFromObject({\n left:\n 'left' === overflowMenuPosition.value\n ? // add 8px to account for the 8px gap on the left side of the button\n convertToUnit(\n lastVisibleButtonEndOffset.value - overflowMenuWrapperWidth.value + 8,\n 'px'\n )\n : // remove 8px to account for the 8px gap on the right side of the button\n convertToUnit(lastVisibleButtonEndOffset.value - 8, 'px'),\n })\n }\n })\n const overflowMenuWrapperProps = computed(() => ({\n class: [\n 'd-flex',\n 'align-center',\n 'r-control-button-bar__overflow-menu',\n 'position-absolute',\n {\n [`ps-${gap.value}`]:\n lastVisibleButtonEndOffset.value === null &&\n asAbsInt(gap.value) > 0 &&\n 'end' !== justification.value,\n [`pe-${gap.value}`]:\n lastVisibleButtonEndOffset.value === null &&\n asAbsInt(gap.value) > 0 &&\n 'end' === justification.value,\n },\n ],\n style: {\n ...overflowMenuWrapperOffsets.value,\n ...stripUndefinedValuesFromObject({\n top: `calc(50% - ${convertToUnit(overflowMenuWrapperHeight.value / 2)})`,\n opacity: showOverflowMenu.value ? 1 : 0,\n pointerEvents: showOverflowMenu.value ? undefined : 'none',\n zIndex: showOverflowMenu.value ? 1 : undefined,\n }),\n },\n }))\n const watchStopHandles: WatchStopHandle[] = []\n let wrapperMutationObserver: MutationObserver | undefined\n useRender(() =>\n h(\n 'div',\n {\n ref: containerRef,\n ...containerProps.value,\n },\n [\n h(\n 'div',\n {\n ref: wrapperRef,\n ...wrapperProps.value,\n },\n Array.from(usableButtons.value).map((btnVNode, btnIndex) =>\n h(\n 'div',\n {\n key: `button-wrapper-${btnIndex}`,\n dataBtnIndex: btnIndex,\n class: {\n [`me-${gap.value}`]:\n btnIndex < buttons.value.length - 1 &&\n asAbsInt(gap.value) > 0 &&\n 'end' !== justification.value,\n [`ms-${gap.value}`]:\n btnIndex < buttons.value.length - 1 &&\n asAbsInt(gap.value) > 0 &&\n 'end' === justification.value,\n },\n style: stripUndefinedValuesFromObject({\n opacity: overflowedButtonIndexes.value.includes(btnIndex) ? 0 : 1,\n pointerEvents: overflowedButtonIndexes.value.includes(btnIndex)\n ? 'none'\n : undefined,\n }),\n },\n btnVNode\n )\n )\n ),\n h(\n 'div',\n { ref: overflowMenuWrapperRef, ...overflowMenuWrapperProps.value },\n h(\n ControlMenu,\n { ref: overflowMenuButtonRef, ...normalizedOverflowMenuButtonOptions.value },\n () => [\n prependMenuSlot ? prependMenuSlot() : null,\n ...Array.from(overflowedButtonIndexes.value).map((btnIndex) =>\n h(VListItem, { key: `overflowed-button-${btnIndex}` }, () =>\n h(\n 'div',\n { class: ['w-100', 'd-flex', 'justify-center'] },\n clonedButtons.value[btnIndex] || null\n )\n )\n ),\n appendMenuSlot ? appendMenuSlot() : null,\n ]\n )\n ),\n ]\n )\n )\n onMounted(() => {\n watchStopHandles.push(\n watch(containerWidth, computeOverflowedButtonIndexes, { immediate: true })\n )\n watchStopHandles.push(\n watch(justification, computeOverflowedButtonIndexes, { immediate: true })\n )\n watchStopHandles.push(\n watch(intersecting, computeOverflowedButtonIndexes, { immediate: true })\n )\n watchStopHandles.push(\n watch(wrapperWidth, computeOverflowedButtonIndexes, { immediate: true })\n )\n watchStopHandles.push(\n watch(overflowMenuWrapperWidth, computeOverflowedButtonIndexes, { immediate: true })\n )\n watchStopHandles.push(\n watch(overflowMenuPosition, computeOverflowedButtonIndexes, { immediate: true })\n )\n if (SUPPORTS_MUTATION_OBSERVER) {\n wrapperMutationObserver = new MutationObserver(wrapperMutationObserverHandler)\n }\n watchStopHandles.push(watch(wrapperRef, wrapperObserver, { immediate: true }))\n computeOverflowedButtonIndexes.immediate()\n })\n onUnmounted(() => {\n // close the menu if it is open\n closeOverflowMenu()\n // clear all of the watch stop handles\n watchStopHandles.forEach((stopHandle) => stopHandle())\n watchStopHandles.splice(0, watchStopHandles.length)\n // disconnect & cleanup the mutation observer\n if (wrapperMutationObserver) {\n wrapperMutationObserver.disconnect()\n wrapperMutationObserver = undefined\n }\n })\n return forwardRefs(\n {\n overflowMenuPosition,\n lastVisibleButtonEndOffset,\n overflowed: showOverflowMenu,\n reflow: computeOverflowedButtonIndexes,\n close: closeOverflowMenu,\n buttons: buttons,\n usableButtons: usableButtons,\n clonedButtons: clonedButtons,\n },\n containerRef,\n wrapperRef,\n overflowMenuWrapperRef\n )\n },\n})\n\n/**\n * Component instance type for ControlButtonBar.\n *\n * @public\n */\nexport type ControlButtonBar = InstanceType<typeof ControlButtonBar>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index-DFHFiM3G.mjs","sources":["../src/private/control-button-bar/index.ts"],"sourcesContent":["/*\n|--------------------------------------------------------------------------\n| Control Button Bar Component\n|--------------------------------------------------------------------------\n|\n| An intelligent, responsive toolbar component that automatically handles\n| button overflow with dropdown menus. Uses container-aware responsive\n| breakpoints to adapt to any layout constraint, providing seamless UX\n| across devices and contexts.\n|\n*/\n\nimport { useI18n } from '../ioc'\nimport { useLocale } from 'vuetify'\nimport { deepmerge } from 'deepmerge-ts'\nimport { useSlot } from '../common/utils'\nimport { ControlMenu } from '../control-menu'\nimport { useScopedDisplay } from '../ux/display'\nimport { VListItem } from 'vuetify/components/VList'\nimport { debounce } from '@nhtio/vuetifiable/util/helpers'\nimport { IN_BROWSER } from '@nhtio/vuetifiable/util/globals'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { convertToUnit } from '@nhtio/vuetifiable/util/helpers'\nimport { forwardRefs } from '@nhtio/vuetifiable/composables/forwardRefs'\nimport { makeControlButtonBarProps, controlButtonBarEmits } from './props'\nimport { stripUndefinedValuesFromObject, asAbsInt } from '../common/utils'\nimport {\n computed,\n ref,\n h,\n defineComponent,\n onMounted,\n onUnmounted,\n toRefs,\n mergeProps,\n cloneVNode,\n watch,\n} from 'vue'\nimport type { WatchStopHandle, SlotsType, VNode } from 'vue'\nimport type { ControlButtonBarOverflowMenuButtonProps } from './props'\n\nexport type { ControlButtonBarProps } from './props'\n\nconst SUPPORTS_MUTATION_OBSERVER = IN_BROWSER && 'MutationObserver' in window\n\nconst cloneForMenu = (vnode: VNode) => {\n const updatedProps = stripUndefinedValuesFromObject({\n ...vnode.props,\n 'id': undefined,\n 'aria-controls': undefined,\n ...mergeProps(\n {\n class: vnode.props?.class ? vnode.props.class : undefined,\n },\n {\n class: ['mx-0'],\n }\n ),\n // we are adding a custom prop to identify that this button is rendered in the menu\n // if the component supports it, it can use this prop to adjust its styling/behavior\n 'inOverflowMenu': true,\n })\n return cloneVNode(vnode, updatedProps)\n}\n\n/**\n * Slot types for the ControlButtonBar component.\n *\n * @public\n */\nexport type ControlButtonBarSlots = {\n /** Content to prepend to the overflow menu */\n 'prepend-menu'?: () => any\n /** Content to append to the overflow menu */\n 'append-menu'?: () => any\n}\n\n/**\n * A responsive toolbar component that automatically handles button overflow with dropdown menus.\n *\n * Features:\n * - Container-aware responsive behavior using useScopedDisplay\n * - Automatic overflow detection with visual jumping reduction\n * - RTL support with intelligent menu positioning\n * - MutationObserver for dynamic content changes\n * - Customizable gap spacing and justification\n * - Performance-optimized with debounced calculations\n *\n * @example\n * ```vue\n * <ControlButtonBar\n * :buttons=\"[\n * h(VBtn, { text: 'Columns' }),\n * h(VBtn, { text: 'Filters' }),\n * h(VBtn, { text: 'Sorting' })\n * ]\"\n * justification=\"center\"\n * :gap=\"2\"\n * />\n * ```\n *\n * @public\n */\nexport const ControlButtonBar = defineComponent({\n name: 'ControlButtonBar',\n inheritAttrs: false,\n props: makeControlButtonBarProps(),\n emits: controlButtonBarEmits,\n slots: Object as SlotsType<ControlButtonBarSlots>,\n setup(props, { attrs, slots }) {\n const t = useI18n()\n const { isRtl } = useLocale()\n const {\n buttons,\n justification,\n gap,\n overflowMenuButtonOptions,\n class: className,\n style,\n } = toRefs(props)\n const prependMenuSlot = useSlot<ControlButtonBarSlots>('prepend-menu', slots)\n const appendMenuSlot = useSlot<ControlButtonBarSlots>('append-menu', slots)\n const normalizedOverflowMenuButtonOptions = computed<ControlButtonBarOverflowMenuButtonProps>(\n () =>\n deepmerge(\n {\n cta: t('general.more'),\n },\n stripUndefinedValuesFromObject({\n cta: overflowMenuButtonOptions.value.cta,\n }),\n {\n activator: stripUndefinedValuesFromObject({\n color: overflowMenuButtonOptions.value.color,\n density: overflowMenuButtonOptions.value.density,\n size: overflowMenuButtonOptions.value.size,\n }),\n }\n )\n )\n const containerRef = ref<HTMLDivElement | null>(null)\n const wrapperRef = ref<HTMLDivElement | null>(null)\n const overflowMenuWrapperRef = ref<HTMLElement | null>(null)\n const overflowMenuButtonRef = ref<ControlMenu | null>(null)\n const overflowMenuButtonIsOpen = computed(() => {\n if (!overflowMenuButtonRef.value) return false\n return overflowMenuButtonRef.value.isOpen\n })\n const usableButtons = computed(() => Array.from(buttons.value).map((btn) => cloneVNode(btn)))\n const clonedButtons = computed(() =>\n !overflowMenuButtonIsOpen.value\n ? []\n : Array.from(buttons.value).map((btn) => cloneForMenu(btn))\n )\n const { width: containerWidth, intersecting, xs } = useScopedDisplay(containerRef)\n const { width: wrapperWidth } = useScopedDisplay(wrapperRef)\n const { width: overflowMenuWrapperWidth, height: overflowMenuWrapperHeight } =\n useScopedDisplay(overflowMenuWrapperRef)\n const containerProps = computed(() =>\n mergeProps(\n {\n class: attrs.class || {},\n style: attrs.style || {},\n },\n {\n class: className.value,\n style: style.value,\n },\n {\n class: ['w-100', 'position-relative', 'r-control-button-bar'],\n role: 'toolbar',\n style: {\n transition: 'opacity 0.2s ease, transform 0.2s ease',\n },\n }\n )\n )\n const overflowedButtonIndexes = ref<number[]>([])\n const lastVisibleButtonEndOffset = ref<number | null>(null)\n const showOverflowMenu = computed(\n () => buttons.value.length > 1 && overflowedButtonIndexes.value.length > 0\n )\n const overflowMenuPosition = computed<'right' | 'left'>(() =>\n isRtl.value\n ? justification.value === 'start'\n ? 'left'\n : 'right'\n : justification.value === 'start'\n ? 'right'\n : 'left'\n )\n const computeOverflowedButtonIndexes = debounce(() => {\n // if there is no container, wrapper, or overflow menu wrapper, we cannot compute overflow\n if (!containerRef.value || !wrapperRef.value || !overflowMenuWrapperRef.value) return\n // if the container is not intersecting (visible), do not compute overflow\n if (!intersecting.value) return\n // if there are less than 2 buttons, then there cannot be any overflow\n if (buttons.value.length < 2) {\n overflowedButtonIndexes.value = []\n return\n }\n // we have 2 values to compare against\n // if none of the buttons extend beyond the wrapper's total width, then there is no overflow\n // otherwise anything that is beyond the wrapper's width minus the overflow button's width\n // is considered overflowed and will be set to 0 opacity + pointer-events: none and then\n // duplicated into the overflow menu\n const wrapperEl = wrapperRef.value\n const buttonWrappers = Array.from(wrapperEl.children) as HTMLDivElement[]\n const currentWrapperWidth = containerWidth.value\n const availableWidthWithOverflowMenu = containerWidth.value - overflowMenuWrapperWidth.value\n\n const buttonWrapperIndexAndOffsets = buttonWrappers.map((wrapper, index) => ({\n index,\n left: wrapper.offsetLeft,\n right: wrapper.offsetLeft + wrapper.offsetWidth,\n }))\n\n // Check if any buttons overflow the wrapper when the menu is visible\n const buttonsOverflowingWrapperIfMenuVisisble = buttonWrapperIndexAndOffsets.filter(\n ({ left, right }) =>\n 'left' === overflowMenuPosition.value\n ? left < overflowMenuWrapperWidth.value\n : right > availableWidthWithOverflowMenu\n )\n\n // if no buttons overflow the wrapper when the menu is visible, exit early\n if (buttonsOverflowingWrapperIfMenuVisisble.length === 0) {\n overflowedButtonIndexes.value = []\n lastVisibleButtonEndOffset.value = null\n return\n }\n\n // check if any of the buttons overflow the wrapper if the menu is not visible\n const someOutsideContainer = buttonsOverflowingWrapperIfMenuVisisble.some(\n ({ left, right }) =>\n 'left' === overflowMenuPosition.value ? left < 0 : right > currentWrapperWidth\n )\n // if none of the buttons overflow the wrapper if the menu is not visible, exit early\n if (!someOutsideContainer) {\n overflowedButtonIndexes.value = []\n lastVisibleButtonEndOffset.value = null\n return\n }\n\n // otherwise, the buttons that overflow the wrapper when the menu is visible are the ones that are overflowed\n overflowedButtonIndexes.value = buttonsOverflowingWrapperIfMenuVisisble.map(\n ({ index }) => index\n )\n\n // in order to make the overflow menu button flow more naturally,\n // we're going to reposition it based on the position of the first hidden button\n const computedHiddenButtons = buttonsOverflowingWrapperIfMenuVisisble.sort((a, b) => {\n if ('left' === overflowMenuPosition.value) {\n return b.right - a.right\n } else {\n return a.left - b.left\n }\n })\n\n const firstHiddenButton = computedHiddenButtons[0]\n if (!firstHiddenButton) {\n lastVisibleButtonEndOffset.value = null\n return\n }\n lastVisibleButtonEndOffset.value =\n 'left' === overflowMenuPosition.value ? firstHiddenButton.right : firstHiddenButton.left\n }, 50)\n const wrapperMutationObserverHandler = (entries: MutationRecord[]) => {\n if (entries.some((e) => e.type === 'childList')) {\n queueMicrotask(() => computeOverflowedButtonIndexes())\n }\n }\n const wrapperObserver = (is: HTMLDivElement | null, was: HTMLDivElement | null | undefined) => {\n if (was && wrapperMutationObserver) {\n wrapperMutationObserver.disconnect()\n }\n if (is && wrapperMutationObserver) {\n wrapperMutationObserver.observe(is, {\n childList: true,\n subtree: false,\n attributes: false,\n characterData: false,\n })\n }\n }\n const closeOverflowMenu = () => {\n if (overflowMenuButtonRef.value) {\n overflowMenuButtonRef.value.close()\n }\n }\n const wrapperProps = computed(() => ({\n class: [\n 'd-flex',\n 'overflow-x-hidden',\n 'w-100',\n 'r-control-button-bar__wrapper',\n {\n 'justify-start': justification.value === 'start',\n 'justify-end': justification.value === 'end',\n },\n ],\n }))\n const overflowMenuWrapperOffsets = computed(() => {\n if (lastVisibleButtonEndOffset.value === null || xs.value) {\n return stripUndefinedValuesFromObject({\n left: 'left' === overflowMenuPosition.value ? 0 : undefined,\n right: 'right' === overflowMenuPosition.value ? 0 : undefined,\n })\n } else {\n return stripUndefinedValuesFromObject({\n left:\n 'left' === overflowMenuPosition.value\n ? // add 8px to account for the 8px gap on the left side of the button\n convertToUnit(\n lastVisibleButtonEndOffset.value - overflowMenuWrapperWidth.value + 8,\n 'px'\n )\n : // remove 8px to account for the 8px gap on the right side of the button\n convertToUnit(lastVisibleButtonEndOffset.value - 8, 'px'),\n })\n }\n })\n const overflowMenuWrapperProps = computed(() => ({\n class: [\n 'd-flex',\n 'align-center',\n 'r-control-button-bar__overflow-menu',\n 'position-absolute',\n {\n [`ps-${gap.value}`]:\n lastVisibleButtonEndOffset.value === null &&\n asAbsInt(gap.value) > 0 &&\n 'end' !== justification.value,\n [`pe-${gap.value}`]:\n lastVisibleButtonEndOffset.value === null &&\n asAbsInt(gap.value) > 0 &&\n 'end' === justification.value,\n },\n ],\n style: {\n ...overflowMenuWrapperOffsets.value,\n ...stripUndefinedValuesFromObject({\n top: `calc(50% - ${convertToUnit(overflowMenuWrapperHeight.value / 2)})`,\n opacity: showOverflowMenu.value ? 1 : 0,\n pointerEvents: showOverflowMenu.value ? undefined : 'none',\n zIndex: showOverflowMenu.value ? 1 : undefined,\n }),\n },\n }))\n const watchStopHandles: WatchStopHandle[] = []\n let wrapperMutationObserver: MutationObserver | undefined\n useRender(() =>\n h(\n 'div',\n {\n ref: containerRef,\n ...containerProps.value,\n },\n [\n h(\n 'div',\n {\n ref: wrapperRef,\n ...wrapperProps.value,\n },\n Array.from(usableButtons.value).map((btnVNode, btnIndex) =>\n h(\n 'div',\n {\n key: `button-wrapper-${btnIndex}`,\n dataBtnIndex: btnIndex,\n class: {\n [`me-${gap.value}`]:\n btnIndex < buttons.value.length - 1 &&\n asAbsInt(gap.value) > 0 &&\n 'end' !== justification.value,\n [`ms-${gap.value}`]:\n btnIndex < buttons.value.length - 1 &&\n asAbsInt(gap.value) > 0 &&\n 'end' === justification.value,\n },\n style: stripUndefinedValuesFromObject({\n opacity: overflowedButtonIndexes.value.includes(btnIndex) ? 0 : 1,\n pointerEvents: overflowedButtonIndexes.value.includes(btnIndex)\n ? 'none'\n : undefined,\n }),\n },\n btnVNode\n )\n )\n ),\n h(\n 'div',\n { ref: overflowMenuWrapperRef, ...overflowMenuWrapperProps.value },\n h(\n ControlMenu,\n { ref: overflowMenuButtonRef, ...normalizedOverflowMenuButtonOptions.value },\n () => [\n prependMenuSlot ? prependMenuSlot() : null,\n ...Array.from(overflowedButtonIndexes.value).map((btnIndex) =>\n h(VListItem, { key: `overflowed-button-${btnIndex}` }, () =>\n h(\n 'div',\n { class: ['w-100', 'd-flex', 'justify-center'] },\n clonedButtons.value[btnIndex] || null\n )\n )\n ),\n appendMenuSlot ? appendMenuSlot() : null,\n ]\n )\n ),\n ]\n )\n )\n onMounted(() => {\n watchStopHandles.push(\n watch(containerWidth, computeOverflowedButtonIndexes, { immediate: true })\n )\n watchStopHandles.push(\n watch(justification, computeOverflowedButtonIndexes, { immediate: true })\n )\n watchStopHandles.push(\n watch(intersecting, computeOverflowedButtonIndexes, { immediate: true })\n )\n watchStopHandles.push(\n watch(wrapperWidth, computeOverflowedButtonIndexes, { immediate: true })\n )\n watchStopHandles.push(\n watch(overflowMenuWrapperWidth, computeOverflowedButtonIndexes, { immediate: true })\n )\n watchStopHandles.push(\n watch(overflowMenuPosition, computeOverflowedButtonIndexes, { immediate: true })\n )\n if (SUPPORTS_MUTATION_OBSERVER) {\n wrapperMutationObserver = new MutationObserver(wrapperMutationObserverHandler)\n }\n watchStopHandles.push(watch(wrapperRef, wrapperObserver, { immediate: true }))\n computeOverflowedButtonIndexes.immediate()\n })\n onUnmounted(() => {\n // close the menu if it is open\n closeOverflowMenu()\n // clear all of the watch stop handles\n watchStopHandles.forEach((stopHandle) => stopHandle())\n watchStopHandles.splice(0, watchStopHandles.length)\n // disconnect & cleanup the mutation observer\n if (wrapperMutationObserver) {\n wrapperMutationObserver.disconnect()\n wrapperMutationObserver = undefined\n }\n })\n return forwardRefs(\n {\n overflowMenuPosition,\n lastVisibleButtonEndOffset,\n overflowed: showOverflowMenu,\n reflow: computeOverflowedButtonIndexes,\n close: closeOverflowMenu,\n buttons: buttons,\n usableButtons: usableButtons,\n clonedButtons: clonedButtons,\n },\n containerRef,\n wrapperRef,\n overflowMenuWrapperRef\n )\n },\n})\n\n/**\n * Component instance type for ControlButtonBar.\n *\n * @public\n */\nexport type ControlButtonBar = InstanceType<typeof ControlButtonBar>\n"],"names":[],"mappings":"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"}
@@ -1,23 +1,23 @@
1
1
  import { useDefaults } from "vuetify";
2
- import { u as useAlert } from "./alert-BXserbWZ.mjs";
3
- import { a as useI18n, c as useHttp } from "./ioc-VpXEFTA_.mjs";
2
+ import { u as useAlert } from "./alert-CoXST_AQ.mjs";
3
+ import { a as useI18n, c as useHttp } from "./ioc-XSkiYED4.mjs";
4
4
  import { n as numeral } from "./numeral-DmC5bR5g.mjs";
5
- import { p as printfExports } from "./http-C_Q-oPS8.mjs";
6
- import { r as resourcefulRecordEmits, m as makeResourcefulRecordProps, b as ResourcefulRecordBusEmitter, u as useResourcefulPassthroughHook, i as isResourcefulRecordBusConsumer, c as useControlButtonBaseBindings, d as useCrudActionButtonBindings, e as useAdditionalActionButtonBindings, f as useControlBarButtonBindings, g as useControlBarBaseBindings, h as useResourcefulRecordFloatingControls, a as ResourcefulRecordForm } from "./form-Zz9ovJUk.mjs";
7
- import { u as useScopedDisplay } from "./display-C7AHwUDP.mjs";
8
- import { C as ControlButtonBar } from "./index-Dak2Iq66.mjs";
5
+ import { p as printfExports } from "./http-DBeWvRRv.mjs";
6
+ import { r as resourcefulRecordEmits, m as makeResourcefulRecordProps, b as ResourcefulRecordBusEmitter, u as useResourcefulPassthroughHook, i as isResourcefulRecordBusConsumer, c as useControlButtonBaseBindings, d as useCrudActionButtonBindings, e as useAdditionalActionButtonBindings, f as useControlBarButtonBindings, g as useControlBarBaseBindings, h as useResourcefulRecordFloatingControls, a as ResourcefulRecordForm } from "./form-xWfoyo_J.mjs";
7
+ import { u as useScopedDisplay } from "./display-BgFCfUhw.mjs";
8
+ import { C as ControlButtonBar } from "./index-DFHFiM3G.mjs";
9
9
  import { e as errorSvg } from "./question-CpfZrjl2.mjs";
10
- import { u as useRender } from "./vendor-nhtio-vuetifiable-ZisC21Mr.mjs";
11
- import { u as useHttpElements, e as extractErrorCode } from "./http-DDqKp3_h.mjs";
12
- import { r as renderDefaultResourcefulRecordForm } from "./renderers-DzeB-7t5.mjs";
13
- import { s as stripUndefinedValuesFromObject } from "./utils-bmb0VKX5.mjs";
10
+ import { u as useRender } from "./vendor-nhtio-vuetifiable--NpO78cs.mjs";
11
+ import { u as useHttpElements, e as extractErrorCode } from "./http-C6gl85rL.mjs";
12
+ import { r as renderDefaultResourcefulRecordForm } from "./renderers-DVerxUh1.mjs";
13
+ import { s as stripUndefinedValuesFromObject } from "./utils-DPixZO5a.mjs";
14
14
  import { v as validator, d as decode } from "./vendor-nhtio-validation-DaQySBno.mjs";
15
15
  import { ResourcefulRecordScopedDisplaySymbol, ResourcefulRecordScopedBusConsumerSymbol } from "./symbols.mjs";
16
16
  import { defineComponent, ref, provide, toRefs, computed, shallowRef, watch, mergeProps, h, warn, triggerRef, nextTick } from "vue";
17
- import { V as VCard } from "./mdi-BNDL0Fmp.mjs";
18
- import { V as VContainer, a as VRow, b as VCol } from "./VRow-DY9jxlUT.mjs";
19
- import { V as VProgressLinear, a as VImg, b as VProgressCircular } from "./display-8m6WLbhM.mjs";
20
- import { V as VEmptyState } from "./VEmptyState-xSkyGTvh.mjs";
17
+ import { V as VCard } from "./mdi-Sfb04KxJ.mjs";
18
+ import { V as VContainer, a as VRow, b as VCol } from "./VRow-2uWyKH1m.mjs";
19
+ import { V as VProgressLinear, a as VImg, b as VProgressCircular } from "./display-DSFGrK61.mjs";
20
+ import { V as VEmptyState } from "./VEmptyState-BPx3OaCS.mjs";
21
21
  import { s as stringify } from "./stringify-Bfbvixfq.mjs";
22
22
  const ResourcefulRecord = defineComponent({
23
23
  name: "ResourcefulRecord",
@@ -793,4 +793,4 @@ const ResourcefulRecord = defineComponent({
793
793
  export {
794
794
  ResourcefulRecord as R
795
795
  };
796
- //# sourceMappingURL=index-BQSLJOMM.mjs.map
796
+ //# sourceMappingURL=index-xiL4gRps.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-BQSLJOMM.mjs","sources":["../src/private/resourceful-record/index.ts"],"sourcesContent":["import * as qs from 'qs-esm'\nimport { useDefaults } from 'vuetify'\nimport { useAlert } from '../ux/alert'\nimport { useI18n, useHttp } from '../ioc'\nimport { default as numeral } from 'numeral'\nimport { printf as format } from 'fast-printf'\nimport { VImg } from 'vuetify/components/VImg'\nimport { ResourcefulRecordForm } from './form'\nimport { useScopedDisplay } from '../ux/display'\nimport { VCard } from 'vuetify/components/VCard'\nimport { ControlButtonBar } from '../control-button-bar'\nimport { VEmptyState } from 'vuetify/components/VEmptyState'\nimport { default as errorSvg } from '../icons/error.svg?url'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { useHttpElements, extractErrorCode } from '../ux/http'\nimport { renderDefaultResourcefulRecordForm } from './renderers'\nimport { stripUndefinedValuesFromObject } from '../common/utils'\nimport { VContainer, VRow, VCol } from 'vuetify/components/VGrid'\nimport { VProgressLinear } from 'vuetify/components/VProgressLinear'\nimport { VProgressCircular } from 'vuetify/components/VProgressCircular'\nimport { validator as joi, decode as decodeJoi } from '@nhtio/validation'\nimport { makeResourcefulRecordProps, resourcefulRecordEmits } from './props'\nimport { ResourcefulRecordBusEmitter, isResourcefulRecordBusConsumer } from './types'\nimport {\n ResourcefulRecordScopedDisplaySymbol,\n ResourcefulRecordScopedBusConsumerSymbol,\n} from '../symbols'\nimport {\n defineComponent,\n h,\n toRefs,\n computed,\n ref,\n watch,\n warn,\n shallowRef,\n provide,\n triggerRef,\n nextTick,\n mergeProps,\n} from 'vue'\nimport {\n useControlBarBaseBindings,\n useControlBarButtonBindings,\n useAdditionalActionButtonBindings,\n useCrudActionButtonBindings,\n useControlButtonBaseBindings,\n useResourcefulRecordFloatingControls,\n useResourcefulPassthroughHook,\n} from './utils'\nimport type { FireAlertFn } from '../ux/alert'\nimport type { ComponentPublicInstance } from 'vue'\nimport type { ValidationProps } from '../ux/validation'\nimport type { REnumFieldLoadedChoice } from '../fields/enum'\nimport type { ControlButtonBarProps } from '../control-button-bar/props'\nimport type { ResourcefulRecordVCardProps, BaseResourcefulRecordProps } from './props'\nimport type { ResourcefulHttpProgress, ResourcefulHttpResponse } from '../services/http'\nimport type { Schema, ObjectSchema, ValidationError } from '@nhtio/lucid-resourceful/joi'\nimport type {\n ResourcefulRecordModelSchema,\n ResourceResourcefulRecordResponse,\n ResourcefulRecordComponentSlots,\n ResourcefulSubmissionHandler,\n ResourcefulRecordFormDefaultSlotArgs,\n} from './types'\n\nexport const ResourcefulRecord = defineComponent({\n name: 'ResourcefulRecord',\n props: makeResourcefulRecordProps(),\n emits: resourcefulRecordEmits,\n slots: Object as ResourcefulRecordComponentSlots,\n setup(props, { slots, emit, attrs }) {\n const t = useI18n()\n const http = useHttp()\n const containerVCardRef = ref<VCard | null>(null)\n const scopedDisplay = useScopedDisplay(containerVCardRef)\n provide(ResourcefulRecordScopedDisplaySymbol, scopedDisplay)\n const bus = new ResourcefulRecordBusEmitter()\n const consumer = bus.spawn()\n\n const doFormSubmit = (...args: Parameters<ValidationProps['doFormSubmit']>) => {\n bus.emit('doFormSubmit', ...args)\n }\n const doResetForm = (...args: Parameters<ValidationProps['doResetForm']>) => {\n bus.emit('doResetForm', ...args)\n }\n const setFieldValue = (...args: Parameters<ValidationProps['setFieldValue']>) => {\n bus.emit('setFieldValue', ...args)\n }\n const setValues = (...args: Parameters<ValidationProps['setValues']>) => {\n bus.emit('setValues', ...args)\n }\n const setFieldTouched = (...args: Parameters<ValidationProps['setFieldTouched']>) => {\n bus.emit('setFieldTouched', ...args)\n }\n const setTouched = (...args: Parameters<ValidationProps['setTouched']>) => {\n bus.emit('setTouched', ...args)\n }\n const validate = (...args: Parameters<ValidationProps['validate']>) => {\n bus.emit('validate', ...args)\n }\n const validateField = (...args: Parameters<ValidationProps['validateField']>) => {\n bus.emit('validateField', ...args)\n }\n const forceUpdateSchema = (...args: Parameters<ValidationProps['forceUpdateSchema']>) => {\n bus.emit('forceUpdateSchema', ...args)\n }\n const forceUpdateInitialValues = (\n ...args: Parameters<ValidationProps['forceUpdateInitialValues']>\n ) => {\n bus.emit('forceUpdateInitialValues', ...args)\n }\n provide(ResourcefulRecordScopedBusConsumerSymbol, consumer)\n const {\n baseUrl,\n metaProgressColor,\n uid,\n container,\n controlButtonOptions,\n controlButtonBarOptions,\n routeToIndex,\n callbackToIndex,\n indexButtonOverrides,\n canIndex,\n routeToCreate,\n callbackToCreate,\n createButtonOverrides,\n canCreate,\n routeToRead,\n callbackToRead,\n readButtonOverrides,\n canRead,\n routeToUpdate,\n callbackToUpdate,\n updateButtonOverrides,\n canUpdate,\n routeToDelete,\n callbackToDelete,\n deleteButtonOverrides,\n canDelete,\n actions,\n state,\n mode,\n initialValues,\n additionalMessages,\n overrideMessages,\n callOnPrevented,\n callOnSubmitted,\n callOnSuccess,\n callOnFailure,\n callOnException,\n callOnSubmittingStateChange,\n callOnValidatingStateChange,\n callOnTouchedStateChange,\n callOnDirtyStateChange,\n callOnValidStateChange,\n callOnPendingStateChange,\n callOnErrorsStateChange,\n callOnErrorBagStateChange,\n callOnSubmitCountStateChange,\n fieldLabels,\n advanced,\n specificFieldOptions,\n commitButtonOverrides,\n resetButtonOverrides,\n refreshButtonOverrides,\n bus: commandBus,\n fireAlertFn,\n } = toRefs(props)\n const defaultCommonFieldOptions = useDefaults(\n props.commonFieldOptions,\n 'ResourcefulRecordFormField'\n )\n const commonFieldOptions = computed(() => ({\n ...defaultCommonFieldOptions,\n density: scopedDisplay.xs\n ? ('compact' as const)\n : scopedDisplay.lgAndUp\n ? ('default' as const)\n : ('comfortable' as const),\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 metaEndpoint = computed(() => ('create' === mode.value ? '$meta.create' : '$meta.update'))\n const { renderDialogs, fire: doFire } = useAlert(containerVCardRef, true, true)\n const fire: FireAlertFn = (...args) =>\n fireAlertFn.value ? fireAlertFn.value(...args) : doFire(...args)\n const onPrevented = useResourcefulPassthroughHook<'prevented'>(\n 'prevented',\n 'callOnPrevented',\n emit,\n props,\n attrs,\n {\n fallback: (values: Record<string, any>, error: ValidationError) => {\n // show a dialog\n warn('Prevented submission with values:', values, 'and error:', error)\n fire({\n icon: 'error',\n title: t('resourcefulRecord.alerts.prevented.title'),\n text: t('resourcefulRecord.alerts.prevented.text'),\n })\n },\n }\n )\n const onSubmitted = useResourcefulPassthroughHook<'submitted'>(\n 'submitted',\n 'callOnSubmitted',\n emit,\n props,\n attrs,\n {}\n )\n const onSuccess = useResourcefulPassthroughHook<'success'>(\n 'success',\n 'callOnSuccess',\n emit,\n props,\n attrs,\n {\n fallback: async (response, values) => {\n console.debug('Form committed with values:', response, values)\n await fire({\n icon: 'success',\n title: t('resourcefulRecord.alerts.success.title'),\n text: t('resourcefulRecord.alerts.success.text'),\n })\n if ('create' === mode.value) {\n // clear the form for a new entry\n doResetForm()\n }\n },\n }\n )\n const onFailure = useResourcefulPassthroughHook<'failure'>(\n 'failure',\n 'callOnFailure',\n emit,\n props,\n attrs,\n {\n fallback: (response, values) => {\n console.debug('Form failed to commit with values:', response, values)\n // TODO: parse the response and try to give a bit more\n // context based on the response. For example, if it's a standard\n // resourceful response, we can use the error code, message and details\n // to provide better feedback.\n fire({\n icon: 'error',\n title: t('resourcefulRecord.alerts.failure.title'),\n text: t('resourcefulRecord.alerts.failure.text'),\n })\n },\n }\n )\n const onException = useResourcefulPassthroughHook<'exception'>(\n 'exception',\n 'callOnException',\n emit,\n props,\n attrs,\n {\n immediate: true,\n fallback: (exception: unknown) => {\n warn('Form submission exception:', exception)\n fire({\n icon: 'error',\n title: t('resourcefulRecord.alerts.exception.title'),\n text: t('resourcefulRecord.alerts.exception.text'),\n })\n },\n }\n )\n const onSubmittingStateChange = useResourcefulPassthroughHook<'state:submitting'>(\n 'state:submitting',\n 'callOnSubmittingStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onValidatingStateChange = useResourcefulPassthroughHook<'state:validating'>(\n 'state:validating',\n 'callOnValidatingStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onTouchedStateChange = useResourcefulPassthroughHook<'state:touched'>(\n 'state:touched',\n 'callOnTouchedStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onDirtyStateChange = useResourcefulPassthroughHook<'state:dirty'>(\n 'state:dirty',\n 'callOnDirtyStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onValidStateChange = useResourcefulPassthroughHook<'state:valid'>(\n 'state:valid',\n 'callOnValidStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onPendingStateChange = useResourcefulPassthroughHook<'state:pending'>(\n 'state:pending',\n 'callOnPendingStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onErrorsStateChange = useResourcefulPassthroughHook<'state:errors'>(\n 'state:errors',\n 'callOnErrorsStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onErrorBagStateChange = useResourcefulPassthroughHook<'state:errorBag'>(\n 'state:errorBag',\n 'callOnErrorBagStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onSubmitCountStateChange = useResourcefulPassthroughHook<'state:submitCount'>(\n 'state:submitCount',\n 'callOnSubmitCountStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onProcessing = useResourcefulPassthroughHook<'processing'>(\n 'processing',\n 'callOnProcessing',\n emit,\n props,\n attrs,\n {}\n )\n\n const schema = shallowRef<Schema>(joi.any().forbidden())\n const model = shallowRef<ResourcefulRecordModelSchema>({})\n const record = shallowRef<ResourceResourcefulRecordResponse | Record<string, any>>({})\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: uid.value || '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 {\n exec: execMeta,\n percent: metaPercent,\n loading: metaLoading,\n loaded: metaLoaded,\n abort: abortMeta,\n } = useHttpElements(() => `${normalizedBaseUrl.value}/${metaEndpoint.value}`)\n const {\n exec: execRecord,\n percent: recordPercent,\n loading: recordLoading,\n loaded: recordLoaded,\n abort: abortRecord,\n } = useHttpElements(\n () => `${normalizedBaseUrl.value}/${uid.value}`,\n () => 'get',\n () => ({}),\n () => undefined,\n () => 5000,\n () => null\n )\n const commitPayload = shallowRef<Record<string, any>>({})\n const {\n exec: execCommit,\n loading: commitLoading,\n abort: abortCommit,\n } = useHttpElements(\n () =>\n mode.value === 'create'\n ? `${normalizedBaseUrl.value}/`\n : `${normalizedBaseUrl.value}/${uid.value}`,\n () => (mode.value === 'create' ? 'post' : 'patch'),\n () => ({}),\n () => commitPayload.value,\n () => 5000,\n () => null,\n () => {},\n (progress: ResourcefulHttpProgress) => onProcessing(progress, commitPayload.value)\n )\n const isErrored = ref(false)\n const loadMeta = async () => {\n abortMeta()\n const res = await execMeta<{\n schema: ResourcefulRecordModelSchema\n joiSchema: string\n }>()\n if (200 === res.status) {\n try {\n const decoded = decodeJoi(res.data.joiSchema) as ObjectSchema\n schema.value = decoded\n } catch (error) {\n warn('Failed to decode joiSchema:', error)\n schema.value = joi.any().forbidden()\n }\n model.value = res.data.schema as ResourcefulRecordModelSchema\n isErrored.value = false\n } else {\n warn('Error loading meta information for ResourcefulRecord', res)\n schema.value = joi.any().forbidden()\n model.value = {} as ResourcefulRecordModelSchema\n const errorCode = extractErrorCode(res)\n isErrored.value = true\n fire({\n icon: 'error',\n headline: t('resourcefulRecord.meta.badRequest.title'),\n text: format(t('resourcefulRecord.meta.badRequest.text'), errorCode),\n })\n }\n triggerRef(schema)\n triggerRef(model)\n nextTick(() => forceUpdateSchema())\n }\n const loadRecord = async () => {\n abortRecord()\n if ('create' === mode.value || !uid.value) {\n record.value = {}\n } else {\n const res = await execRecord<Record<string, any>>()\n if (200 === res.status) {\n record.value = res.data\n isErrored.value = false\n } else {\n record.value = {}\n warn('Error loading record for ResourcefulRecord', res)\n const errorCode = extractErrorCode(res)\n isErrored.value = true\n fire({\n icon: 'error',\n headline: t('resourcefulRecord.record.badRequest.title'),\n text: format(t('resourcefulRecord.record.badRequest.text'), errorCode),\n })\n }\n }\n triggerRef(record)\n nextTick(() => forceUpdateInitialValues())\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 if ('read' === mode.value) return\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 doReset = async () => {\n await loadMeta()\n await loadRecord()\n nextTick(() => doResetForm())\n }\n watch(normalizedBaseUrl, () => loadMeta(), { immediate: true })\n watch(metaEndpoint, () => loadMeta(), {})\n watch(uid, () => loadRecord(), { immediate: true })\n watch(\n commandBus,\n (is: unknown, was: unknown) => {\n if (isResourcefulRecordBusConsumer(was)) {\n was.off('doFormSubmit', doFormSubmit)\n was.off('doResetForm', doResetForm)\n was.off('setFieldValue', setFieldValue)\n was.off('setValues', setValues)\n was.off('setFieldTouched', setFieldTouched)\n was.off('setTouched', setTouched)\n was.off('validate', validate)\n was.off('validateField', validateField)\n was.off('forceUpdateSchema', forceUpdateSchema)\n was.off('forceUpdateInitialValues', forceUpdateInitialValues)\n }\n if (isResourcefulRecordBusConsumer(is)) {\n is.on('doFormSubmit', doFormSubmit)\n is.on('doResetForm', doResetForm)\n is.on('setFieldValue', setFieldValue)\n is.on('setValues', setValues)\n is.on('setFieldTouched', setFieldTouched)\n is.on('setTouched', setTouched)\n is.on('validate', validate)\n is.on('validateField', validateField)\n is.on('forceUpdateSchema', forceUpdateSchema)\n is.on('forceUpdateInitialValues', forceUpdateInitialValues)\n }\n },\n { immediate: true }\n )\n const { smAndUp } = scopedDisplay\n const containerBindings = computed<ResourcefulRecordVCardProps>(() => ({\n ...container.value,\n tag: 'section',\n ...mergeProps(\n {\n class: ['resourceful-record'],\n },\n {\n class: container.value.class || [],\n }\n ),\n }))\n const submissionHandler: ResourcefulSubmissionHandler = async (\n values,\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 ) => await doCommit(values, onSubmissionHandlerSuccess, onSubmissionHandlerFailure)\n const computedInitialValues = computed(() => ({\n ...(initialValues.value || {}),\n ...(record.value || {}),\n }))\n const controlButtonsAreInactionable = computed(\n () => metaLoading.value || recordLoading.value || commitLoading.value\n )\n const controlButtonBaseBindings = useControlButtonBaseBindings(\n controlButtonBarOptions,\n controlButtonOptions,\n controlButtonsAreInactionable\n )\n const indexButtonBindings = useCrudActionButtonBindings(\n record,\n mode,\n routeToIndex,\n callbackToIndex,\n canIndex,\n {\n prependIcon: undefined,\n cta: t('resourcefulRecord.buttons.index.cta'),\n },\n indexButtonOverrides,\n controlButtonBaseBindings\n )\n const createButtonBindings = useCrudActionButtonBindings(\n record,\n mode,\n routeToCreate,\n callbackToCreate,\n canCreate,\n {\n prependIcon: undefined,\n cta: t('resourcefulRecord.buttons.create.cta'),\n },\n createButtonOverrides,\n controlButtonBaseBindings\n )\n const readButtonBindings = useCrudActionButtonBindings(\n record,\n mode,\n routeToRead,\n callbackToRead,\n canRead,\n {\n prependIcon: undefined,\n cta: t('resourcefulRecord.buttons.read.cta'),\n },\n readButtonOverrides,\n controlButtonBaseBindings\n )\n const updateButtonBindings = useCrudActionButtonBindings(\n record,\n mode,\n routeToUpdate,\n callbackToUpdate,\n canUpdate,\n {\n prependIcon: undefined,\n cta: t('resourcefulRecord.buttons.update.cta'),\n },\n updateButtonOverrides,\n controlButtonBaseBindings\n )\n const deleteButtonBindings = useCrudActionButtonBindings(\n record,\n mode,\n routeToDelete,\n callbackToDelete,\n canDelete,\n {\n prependIcon: undefined,\n cta: t('resourcefulRecord.buttons.delete.cta'),\n },\n deleteButtonOverrides,\n controlButtonBaseBindings\n )\n const additionalButtonBindings = useAdditionalActionButtonBindings(\n record,\n mode,\n controlButtonBaseBindings,\n actions\n )\n const controlBarButtons = useControlBarButtonBindings(\n indexButtonBindings,\n createButtonBindings,\n readButtonBindings,\n updateButtonBindings,\n deleteButtonBindings,\n additionalButtonBindings\n )\n const controlBarBaseBindings = useControlBarBaseBindings(\n controlButtonBarOptions,\n controlButtonOptions\n )\n const controlBarBindings = computed<ControlButtonBarProps>(() => ({\n ...controlBarBaseBindings.value,\n buttons: controlBarButtons.value,\n }))\n const controlButtonBarRef = ref<ControlButtonBar | null>(null)\n const initialLoadingStatePercent = computed(() =>\n 'create' === mode.value ? metaPercent.value : (metaPercent.value + recordPercent.value) / 2\n )\n const showInitialLoadingState = computed(() =>\n 'create' === mode.value ? !metaLoaded.value : !metaLoaded.value || !recordLoaded.value\n )\n const showingErrorState = computed(() => isErrored.value && !showInitialLoadingState.value)\n const floatingControls = useResourcefulRecordFloatingControls(\n mode,\n controlButtonBaseBindings,\n commitButtonOverrides,\n resetButtonOverrides,\n refreshButtonOverrides,\n metaLoading,\n recordLoading,\n commitLoading,\n showingErrorState,\n () => doReset(),\n () => loadRecord(),\n () => doFormSubmit()\n )\n const baseFormBindings = computed<BaseResourcefulRecordProps>(\n () =>\n ({\n state: state.value,\n mode: mode.value,\n initialValues: computedInitialValues.value,\n additionalMessages: additionalMessages.value,\n overrideMessages: overrideMessages.value,\n callOnPrevented: callOnPrevented.value,\n callOnSubmitted: callOnSubmitted.value,\n callOnSuccess: callOnSuccess.value,\n callOnFailure: callOnFailure.value,\n callOnException: callOnException.value,\n callOnSubmittingStateChange: callOnSubmittingStateChange.value,\n callOnValidatingStateChange: callOnValidatingStateChange.value,\n callOnTouchedStateChange: callOnTouchedStateChange.value,\n callOnDirtyStateChange: callOnDirtyStateChange.value,\n callOnValidStateChange: callOnValidStateChange.value,\n callOnPendingStateChange: callOnPendingStateChange.value,\n callOnErrorsStateChange: callOnErrorsStateChange.value,\n callOnErrorBagStateChange: callOnErrorBagStateChange.value,\n callOnSubmitCountStateChange: callOnSubmitCountStateChange.value,\n fieldLabels: fieldLabels.value,\n advanced: advanced.value,\n commonFieldOptions: commonFieldOptions.value,\n specificFieldOptions: specificFieldOptions.value,\n bus: consumer,\n schema: schema.value,\n model: model.value,\n submissionHandler,\n fireAlertFn: fire,\n doRefreshChoices: doRefreshChoices.value,\n ...{\n 'onState': (formState: string | null | undefined) => emit('state', formState),\n 'onUpdate:state': (formState: string | null | undefined) =>\n emit('update:state', formState),\n 'onError': (error: unknown) => emit('error', error),\n 'onPrevented': onPrevented,\n 'onSubmitted': onSubmitted,\n 'onSuccess': onSuccess,\n 'onFailure': onFailure,\n // NOTE: onException handles errors during submission middleware chain processing\n 'onException': onException,\n 'onState:submitting': onSubmittingStateChange,\n 'onState:validating': onValidatingStateChange,\n 'onState:touched': onTouchedStateChange,\n 'onState:dirty': onDirtyStateChange,\n 'onState:valid': onValidStateChange,\n 'onState:pending': onPendingStateChange,\n 'onState:errors': onErrorsStateChange,\n 'onState:errorBag': onErrorBagStateChange,\n 'onState:submitCount': onSubmitCountStateChange,\n },\n }) satisfies BaseResourcefulRecordProps\n )\n const formRef = ref<ResourcefulRecordForm | null>(null)\n useRender(() =>\n h(\n VCard,\n {\n ref: containerVCardRef,\n ...containerBindings.value,\n },\n () => [\n h(VContainer, { fluid: true }, () => [\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':\n !smAndUp.value &&\n (!Array.isArray(controlBarBindings.value.buttons) ||\n controlBarBindings.value.buttons.length === 0),\n 'pt-0':\n !smAndUp.value &&\n Array.isArray(controlBarBindings.value.buttons) &&\n controlBarBindings.value.buttons.length > 0,\n },\n ],\n },\n () => [\n h(ControlButtonBar, {\n ref: controlButtonBarRef,\n ...controlBarBindings.value,\n }),\n ]\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 () => [h('div', { class: ['d-flex', 'align-center'] }, floatingControls.value)]\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 showingErrorState.value\n ? h(\n VEmptyState,\n {\n headline: t('resourcefulRecord.form.badRequest.title'),\n text: t('resourcefulRecord.form.badRequest.text'),\n class: ['my-7'],\n height: 320,\n },\n {\n media: () =>\n slots['error-media'] ? slots['error-media']!() : h(VImg, { src: errorSvg }),\n }\n )\n : null,\n showInitialLoadingState.value\n ? h(\n VEmptyState,\n {\n headline: numeral(initialLoadingStatePercent.value / 100).format('0%'),\n text: t('resourcefulRecord.form.loading.text'),\n class: ['my-7'],\n height: 320,\n },\n {\n media: () =>\n slots['loading-media']\n ? slots['loading-media']({ percent: initialLoadingStatePercent.value })\n : h(VProgressCircular, {\n modelValue: initialLoadingStatePercent.value,\n color: props.metaProgressColor,\n size: 96,\n width: 10,\n }),\n }\n )\n : null,\n !showInitialLoadingState.value && !showingErrorState.value\n ? h(VContainer, { fluid: true }, () =>\n h(VRow, {}, () => [\n h(VCol, { cols: 12 }, () =>\n h(\n ResourcefulRecordForm,\n {\n ref: formRef,\n ...baseFormBindings.value,\n },\n {\n default: (...args: ResourcefulRecordFormDefaultSlotArgs) =>\n slots['form']\n ? slots['form'](...args, record.value)\n : renderDefaultResourcefulRecordForm(...args),\n }\n )\n ),\n ])\n )\n : null,\n renderDialogs(),\n ]\n )\n )\n const formValues = computed(() => (formRef.value ? formRef.value.formValues : {}))\n return {\n refresh: () => loadRecord(),\n doFormSubmit,\n doResetForm,\n setFieldValue,\n setValues,\n setFieldTouched,\n setTouched,\n validate,\n validateField,\n forceUpdateSchema,\n forceUpdateInitialValues,\n formValues,\n record,\n }\n },\n})\n\nexport type ResourcefulRecord = InstanceType<typeof ResourcefulRecord> & ComponentPublicInstance\n"],"names":["joi","qs.stringify","decodeJoi","format"],"mappings":"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"}
1
+ {"version":3,"file":"index-xiL4gRps.mjs","sources":["../src/private/resourceful-record/index.ts"],"sourcesContent":["import * as qs from 'qs-esm'\nimport { useDefaults } from 'vuetify'\nimport { useAlert } from '../ux/alert'\nimport { useI18n, useHttp } from '../ioc'\nimport { default as numeral } from 'numeral'\nimport { printf as format } from 'fast-printf'\nimport { VImg } from 'vuetify/components/VImg'\nimport { ResourcefulRecordForm } from './form'\nimport { useScopedDisplay } from '../ux/display'\nimport { VCard } from 'vuetify/components/VCard'\nimport { ControlButtonBar } from '../control-button-bar'\nimport { VEmptyState } from 'vuetify/components/VEmptyState'\nimport { default as errorSvg } from '../icons/error.svg?url'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { useHttpElements, extractErrorCode } from '../ux/http'\nimport { renderDefaultResourcefulRecordForm } from './renderers'\nimport { stripUndefinedValuesFromObject } from '../common/utils'\nimport { VContainer, VRow, VCol } from 'vuetify/components/VGrid'\nimport { VProgressLinear } from 'vuetify/components/VProgressLinear'\nimport { VProgressCircular } from 'vuetify/components/VProgressCircular'\nimport { validator as joi, decode as decodeJoi } from '@nhtio/validation'\nimport { makeResourcefulRecordProps, resourcefulRecordEmits } from './props'\nimport { ResourcefulRecordBusEmitter, isResourcefulRecordBusConsumer } from './types'\nimport {\n ResourcefulRecordScopedDisplaySymbol,\n ResourcefulRecordScopedBusConsumerSymbol,\n} from '../symbols'\nimport {\n defineComponent,\n h,\n toRefs,\n computed,\n ref,\n watch,\n warn,\n shallowRef,\n provide,\n triggerRef,\n nextTick,\n mergeProps,\n} from 'vue'\nimport {\n useControlBarBaseBindings,\n useControlBarButtonBindings,\n useAdditionalActionButtonBindings,\n useCrudActionButtonBindings,\n useControlButtonBaseBindings,\n useResourcefulRecordFloatingControls,\n useResourcefulPassthroughHook,\n} from './utils'\nimport type { FireAlertFn } from '../ux/alert'\nimport type { ComponentPublicInstance } from 'vue'\nimport type { ValidationProps } from '../ux/validation'\nimport type { REnumFieldLoadedChoice } from '../fields/enum'\nimport type { ControlButtonBarProps } from '../control-button-bar/props'\nimport type { ResourcefulRecordVCardProps, BaseResourcefulRecordProps } from './props'\nimport type { ResourcefulHttpProgress, ResourcefulHttpResponse } from '../services/http'\nimport type { Schema, ObjectSchema, ValidationError } from '@nhtio/lucid-resourceful/joi'\nimport type {\n ResourcefulRecordModelSchema,\n ResourceResourcefulRecordResponse,\n ResourcefulRecordComponentSlots,\n ResourcefulSubmissionHandler,\n ResourcefulRecordFormDefaultSlotArgs,\n} from './types'\n\nexport const ResourcefulRecord = defineComponent({\n name: 'ResourcefulRecord',\n props: makeResourcefulRecordProps(),\n emits: resourcefulRecordEmits,\n slots: Object as ResourcefulRecordComponentSlots,\n setup(props, { slots, emit, attrs }) {\n const t = useI18n()\n const http = useHttp()\n const containerVCardRef = ref<VCard | null>(null)\n const scopedDisplay = useScopedDisplay(containerVCardRef)\n provide(ResourcefulRecordScopedDisplaySymbol, scopedDisplay)\n const bus = new ResourcefulRecordBusEmitter()\n const consumer = bus.spawn()\n\n const doFormSubmit = (...args: Parameters<ValidationProps['doFormSubmit']>) => {\n bus.emit('doFormSubmit', ...args)\n }\n const doResetForm = (...args: Parameters<ValidationProps['doResetForm']>) => {\n bus.emit('doResetForm', ...args)\n }\n const setFieldValue = (...args: Parameters<ValidationProps['setFieldValue']>) => {\n bus.emit('setFieldValue', ...args)\n }\n const setValues = (...args: Parameters<ValidationProps['setValues']>) => {\n bus.emit('setValues', ...args)\n }\n const setFieldTouched = (...args: Parameters<ValidationProps['setFieldTouched']>) => {\n bus.emit('setFieldTouched', ...args)\n }\n const setTouched = (...args: Parameters<ValidationProps['setTouched']>) => {\n bus.emit('setTouched', ...args)\n }\n const validate = (...args: Parameters<ValidationProps['validate']>) => {\n bus.emit('validate', ...args)\n }\n const validateField = (...args: Parameters<ValidationProps['validateField']>) => {\n bus.emit('validateField', ...args)\n }\n const forceUpdateSchema = (...args: Parameters<ValidationProps['forceUpdateSchema']>) => {\n bus.emit('forceUpdateSchema', ...args)\n }\n const forceUpdateInitialValues = (\n ...args: Parameters<ValidationProps['forceUpdateInitialValues']>\n ) => {\n bus.emit('forceUpdateInitialValues', ...args)\n }\n provide(ResourcefulRecordScopedBusConsumerSymbol, consumer)\n const {\n baseUrl,\n metaProgressColor,\n uid,\n container,\n controlButtonOptions,\n controlButtonBarOptions,\n routeToIndex,\n callbackToIndex,\n indexButtonOverrides,\n canIndex,\n routeToCreate,\n callbackToCreate,\n createButtonOverrides,\n canCreate,\n routeToRead,\n callbackToRead,\n readButtonOverrides,\n canRead,\n routeToUpdate,\n callbackToUpdate,\n updateButtonOverrides,\n canUpdate,\n routeToDelete,\n callbackToDelete,\n deleteButtonOverrides,\n canDelete,\n actions,\n state,\n mode,\n initialValues,\n additionalMessages,\n overrideMessages,\n callOnPrevented,\n callOnSubmitted,\n callOnSuccess,\n callOnFailure,\n callOnException,\n callOnSubmittingStateChange,\n callOnValidatingStateChange,\n callOnTouchedStateChange,\n callOnDirtyStateChange,\n callOnValidStateChange,\n callOnPendingStateChange,\n callOnErrorsStateChange,\n callOnErrorBagStateChange,\n callOnSubmitCountStateChange,\n fieldLabels,\n advanced,\n specificFieldOptions,\n commitButtonOverrides,\n resetButtonOverrides,\n refreshButtonOverrides,\n bus: commandBus,\n fireAlertFn,\n } = toRefs(props)\n const defaultCommonFieldOptions = useDefaults(\n props.commonFieldOptions,\n 'ResourcefulRecordFormField'\n )\n const commonFieldOptions = computed(() => ({\n ...defaultCommonFieldOptions,\n density: scopedDisplay.xs\n ? ('compact' as const)\n : scopedDisplay.lgAndUp\n ? ('default' as const)\n : ('comfortable' as const),\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 metaEndpoint = computed(() => ('create' === mode.value ? '$meta.create' : '$meta.update'))\n const { renderDialogs, fire: doFire } = useAlert(containerVCardRef, true, true)\n const fire: FireAlertFn = (...args) =>\n fireAlertFn.value ? fireAlertFn.value(...args) : doFire(...args)\n const onPrevented = useResourcefulPassthroughHook<'prevented'>(\n 'prevented',\n 'callOnPrevented',\n emit,\n props,\n attrs,\n {\n fallback: (values: Record<string, any>, error: ValidationError) => {\n // show a dialog\n warn('Prevented submission with values:', values, 'and error:', error)\n fire({\n icon: 'error',\n title: t('resourcefulRecord.alerts.prevented.title'),\n text: t('resourcefulRecord.alerts.prevented.text'),\n })\n },\n }\n )\n const onSubmitted = useResourcefulPassthroughHook<'submitted'>(\n 'submitted',\n 'callOnSubmitted',\n emit,\n props,\n attrs,\n {}\n )\n const onSuccess = useResourcefulPassthroughHook<'success'>(\n 'success',\n 'callOnSuccess',\n emit,\n props,\n attrs,\n {\n fallback: async (response, values) => {\n console.debug('Form committed with values:', response, values)\n await fire({\n icon: 'success',\n title: t('resourcefulRecord.alerts.success.title'),\n text: t('resourcefulRecord.alerts.success.text'),\n })\n if ('create' === mode.value) {\n // clear the form for a new entry\n doResetForm()\n }\n },\n }\n )\n const onFailure = useResourcefulPassthroughHook<'failure'>(\n 'failure',\n 'callOnFailure',\n emit,\n props,\n attrs,\n {\n fallback: (response, values) => {\n console.debug('Form failed to commit with values:', response, values)\n // TODO: parse the response and try to give a bit more\n // context based on the response. For example, if it's a standard\n // resourceful response, we can use the error code, message and details\n // to provide better feedback.\n fire({\n icon: 'error',\n title: t('resourcefulRecord.alerts.failure.title'),\n text: t('resourcefulRecord.alerts.failure.text'),\n })\n },\n }\n )\n const onException = useResourcefulPassthroughHook<'exception'>(\n 'exception',\n 'callOnException',\n emit,\n props,\n attrs,\n {\n immediate: true,\n fallback: (exception: unknown) => {\n warn('Form submission exception:', exception)\n fire({\n icon: 'error',\n title: t('resourcefulRecord.alerts.exception.title'),\n text: t('resourcefulRecord.alerts.exception.text'),\n })\n },\n }\n )\n const onSubmittingStateChange = useResourcefulPassthroughHook<'state:submitting'>(\n 'state:submitting',\n 'callOnSubmittingStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onValidatingStateChange = useResourcefulPassthroughHook<'state:validating'>(\n 'state:validating',\n 'callOnValidatingStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onTouchedStateChange = useResourcefulPassthroughHook<'state:touched'>(\n 'state:touched',\n 'callOnTouchedStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onDirtyStateChange = useResourcefulPassthroughHook<'state:dirty'>(\n 'state:dirty',\n 'callOnDirtyStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onValidStateChange = useResourcefulPassthroughHook<'state:valid'>(\n 'state:valid',\n 'callOnValidStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onPendingStateChange = useResourcefulPassthroughHook<'state:pending'>(\n 'state:pending',\n 'callOnPendingStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onErrorsStateChange = useResourcefulPassthroughHook<'state:errors'>(\n 'state:errors',\n 'callOnErrorsStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onErrorBagStateChange = useResourcefulPassthroughHook<'state:errorBag'>(\n 'state:errorBag',\n 'callOnErrorBagStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onSubmitCountStateChange = useResourcefulPassthroughHook<'state:submitCount'>(\n 'state:submitCount',\n 'callOnSubmitCountStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onProcessing = useResourcefulPassthroughHook<'processing'>(\n 'processing',\n 'callOnProcessing',\n emit,\n props,\n attrs,\n {}\n )\n\n const schema = shallowRef<Schema>(joi.any().forbidden())\n const model = shallowRef<ResourcefulRecordModelSchema>({})\n const record = shallowRef<ResourceResourcefulRecordResponse | Record<string, any>>({})\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: uid.value || '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 {\n exec: execMeta,\n percent: metaPercent,\n loading: metaLoading,\n loaded: metaLoaded,\n abort: abortMeta,\n } = useHttpElements(() => `${normalizedBaseUrl.value}/${metaEndpoint.value}`)\n const {\n exec: execRecord,\n percent: recordPercent,\n loading: recordLoading,\n loaded: recordLoaded,\n abort: abortRecord,\n } = useHttpElements(\n () => `${normalizedBaseUrl.value}/${uid.value}`,\n () => 'get',\n () => ({}),\n () => undefined,\n () => 5000,\n () => null\n )\n const commitPayload = shallowRef<Record<string, any>>({})\n const {\n exec: execCommit,\n loading: commitLoading,\n abort: abortCommit,\n } = useHttpElements(\n () =>\n mode.value === 'create'\n ? `${normalizedBaseUrl.value}/`\n : `${normalizedBaseUrl.value}/${uid.value}`,\n () => (mode.value === 'create' ? 'post' : 'patch'),\n () => ({}),\n () => commitPayload.value,\n () => 5000,\n () => null,\n () => {},\n (progress: ResourcefulHttpProgress) => onProcessing(progress, commitPayload.value)\n )\n const isErrored = ref(false)\n const loadMeta = async () => {\n abortMeta()\n const res = await execMeta<{\n schema: ResourcefulRecordModelSchema\n joiSchema: string\n }>()\n if (200 === res.status) {\n try {\n const decoded = decodeJoi(res.data.joiSchema) as ObjectSchema\n schema.value = decoded\n } catch (error) {\n warn('Failed to decode joiSchema:', error)\n schema.value = joi.any().forbidden()\n }\n model.value = res.data.schema as ResourcefulRecordModelSchema\n isErrored.value = false\n } else {\n warn('Error loading meta information for ResourcefulRecord', res)\n schema.value = joi.any().forbidden()\n model.value = {} as ResourcefulRecordModelSchema\n const errorCode = extractErrorCode(res)\n isErrored.value = true\n fire({\n icon: 'error',\n headline: t('resourcefulRecord.meta.badRequest.title'),\n text: format(t('resourcefulRecord.meta.badRequest.text'), errorCode),\n })\n }\n triggerRef(schema)\n triggerRef(model)\n nextTick(() => forceUpdateSchema())\n }\n const loadRecord = async () => {\n abortRecord()\n if ('create' === mode.value || !uid.value) {\n record.value = {}\n } else {\n const res = await execRecord<Record<string, any>>()\n if (200 === res.status) {\n record.value = res.data\n isErrored.value = false\n } else {\n record.value = {}\n warn('Error loading record for ResourcefulRecord', res)\n const errorCode = extractErrorCode(res)\n isErrored.value = true\n fire({\n icon: 'error',\n headline: t('resourcefulRecord.record.badRequest.title'),\n text: format(t('resourcefulRecord.record.badRequest.text'), errorCode),\n })\n }\n }\n triggerRef(record)\n nextTick(() => forceUpdateInitialValues())\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 if ('read' === mode.value) return\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 doReset = async () => {\n await loadMeta()\n await loadRecord()\n nextTick(() => doResetForm())\n }\n watch(normalizedBaseUrl, () => loadMeta(), { immediate: true })\n watch(metaEndpoint, () => loadMeta(), {})\n watch(uid, () => loadRecord(), { immediate: true })\n watch(\n commandBus,\n (is: unknown, was: unknown) => {\n if (isResourcefulRecordBusConsumer(was)) {\n was.off('doFormSubmit', doFormSubmit)\n was.off('doResetForm', doResetForm)\n was.off('setFieldValue', setFieldValue)\n was.off('setValues', setValues)\n was.off('setFieldTouched', setFieldTouched)\n was.off('setTouched', setTouched)\n was.off('validate', validate)\n was.off('validateField', validateField)\n was.off('forceUpdateSchema', forceUpdateSchema)\n was.off('forceUpdateInitialValues', forceUpdateInitialValues)\n }\n if (isResourcefulRecordBusConsumer(is)) {\n is.on('doFormSubmit', doFormSubmit)\n is.on('doResetForm', doResetForm)\n is.on('setFieldValue', setFieldValue)\n is.on('setValues', setValues)\n is.on('setFieldTouched', setFieldTouched)\n is.on('setTouched', setTouched)\n is.on('validate', validate)\n is.on('validateField', validateField)\n is.on('forceUpdateSchema', forceUpdateSchema)\n is.on('forceUpdateInitialValues', forceUpdateInitialValues)\n }\n },\n { immediate: true }\n )\n const { smAndUp } = scopedDisplay\n const containerBindings = computed<ResourcefulRecordVCardProps>(() => ({\n ...container.value,\n tag: 'section',\n ...mergeProps(\n {\n class: ['resourceful-record'],\n },\n {\n class: container.value.class || [],\n }\n ),\n }))\n const submissionHandler: ResourcefulSubmissionHandler = async (\n values,\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 ) => await doCommit(values, onSubmissionHandlerSuccess, onSubmissionHandlerFailure)\n const computedInitialValues = computed(() => ({\n ...(initialValues.value || {}),\n ...(record.value || {}),\n }))\n const controlButtonsAreInactionable = computed(\n () => metaLoading.value || recordLoading.value || commitLoading.value\n )\n const controlButtonBaseBindings = useControlButtonBaseBindings(\n controlButtonBarOptions,\n controlButtonOptions,\n controlButtonsAreInactionable\n )\n const indexButtonBindings = useCrudActionButtonBindings(\n record,\n mode,\n routeToIndex,\n callbackToIndex,\n canIndex,\n {\n prependIcon: undefined,\n cta: t('resourcefulRecord.buttons.index.cta'),\n },\n indexButtonOverrides,\n controlButtonBaseBindings\n )\n const createButtonBindings = useCrudActionButtonBindings(\n record,\n mode,\n routeToCreate,\n callbackToCreate,\n canCreate,\n {\n prependIcon: undefined,\n cta: t('resourcefulRecord.buttons.create.cta'),\n },\n createButtonOverrides,\n controlButtonBaseBindings\n )\n const readButtonBindings = useCrudActionButtonBindings(\n record,\n mode,\n routeToRead,\n callbackToRead,\n canRead,\n {\n prependIcon: undefined,\n cta: t('resourcefulRecord.buttons.read.cta'),\n },\n readButtonOverrides,\n controlButtonBaseBindings\n )\n const updateButtonBindings = useCrudActionButtonBindings(\n record,\n mode,\n routeToUpdate,\n callbackToUpdate,\n canUpdate,\n {\n prependIcon: undefined,\n cta: t('resourcefulRecord.buttons.update.cta'),\n },\n updateButtonOverrides,\n controlButtonBaseBindings\n )\n const deleteButtonBindings = useCrudActionButtonBindings(\n record,\n mode,\n routeToDelete,\n callbackToDelete,\n canDelete,\n {\n prependIcon: undefined,\n cta: t('resourcefulRecord.buttons.delete.cta'),\n },\n deleteButtonOverrides,\n controlButtonBaseBindings\n )\n const additionalButtonBindings = useAdditionalActionButtonBindings(\n record,\n mode,\n controlButtonBaseBindings,\n actions\n )\n const controlBarButtons = useControlBarButtonBindings(\n indexButtonBindings,\n createButtonBindings,\n readButtonBindings,\n updateButtonBindings,\n deleteButtonBindings,\n additionalButtonBindings\n )\n const controlBarBaseBindings = useControlBarBaseBindings(\n controlButtonBarOptions,\n controlButtonOptions\n )\n const controlBarBindings = computed<ControlButtonBarProps>(() => ({\n ...controlBarBaseBindings.value,\n buttons: controlBarButtons.value,\n }))\n const controlButtonBarRef = ref<ControlButtonBar | null>(null)\n const initialLoadingStatePercent = computed(() =>\n 'create' === mode.value ? metaPercent.value : (metaPercent.value + recordPercent.value) / 2\n )\n const showInitialLoadingState = computed(() =>\n 'create' === mode.value ? !metaLoaded.value : !metaLoaded.value || !recordLoaded.value\n )\n const showingErrorState = computed(() => isErrored.value && !showInitialLoadingState.value)\n const floatingControls = useResourcefulRecordFloatingControls(\n mode,\n controlButtonBaseBindings,\n commitButtonOverrides,\n resetButtonOverrides,\n refreshButtonOverrides,\n metaLoading,\n recordLoading,\n commitLoading,\n showingErrorState,\n () => doReset(),\n () => loadRecord(),\n () => doFormSubmit()\n )\n const baseFormBindings = computed<BaseResourcefulRecordProps>(\n () =>\n ({\n state: state.value,\n mode: mode.value,\n initialValues: computedInitialValues.value,\n additionalMessages: additionalMessages.value,\n overrideMessages: overrideMessages.value,\n callOnPrevented: callOnPrevented.value,\n callOnSubmitted: callOnSubmitted.value,\n callOnSuccess: callOnSuccess.value,\n callOnFailure: callOnFailure.value,\n callOnException: callOnException.value,\n callOnSubmittingStateChange: callOnSubmittingStateChange.value,\n callOnValidatingStateChange: callOnValidatingStateChange.value,\n callOnTouchedStateChange: callOnTouchedStateChange.value,\n callOnDirtyStateChange: callOnDirtyStateChange.value,\n callOnValidStateChange: callOnValidStateChange.value,\n callOnPendingStateChange: callOnPendingStateChange.value,\n callOnErrorsStateChange: callOnErrorsStateChange.value,\n callOnErrorBagStateChange: callOnErrorBagStateChange.value,\n callOnSubmitCountStateChange: callOnSubmitCountStateChange.value,\n fieldLabels: fieldLabels.value,\n advanced: advanced.value,\n commonFieldOptions: commonFieldOptions.value,\n specificFieldOptions: specificFieldOptions.value,\n bus: consumer,\n schema: schema.value,\n model: model.value,\n submissionHandler,\n fireAlertFn: fire,\n doRefreshChoices: doRefreshChoices.value,\n ...{\n 'onState': (formState: string | null | undefined) => emit('state', formState),\n 'onUpdate:state': (formState: string | null | undefined) =>\n emit('update:state', formState),\n 'onError': (error: unknown) => emit('error', error),\n 'onPrevented': onPrevented,\n 'onSubmitted': onSubmitted,\n 'onSuccess': onSuccess,\n 'onFailure': onFailure,\n // NOTE: onException handles errors during submission middleware chain processing\n 'onException': onException,\n 'onState:submitting': onSubmittingStateChange,\n 'onState:validating': onValidatingStateChange,\n 'onState:touched': onTouchedStateChange,\n 'onState:dirty': onDirtyStateChange,\n 'onState:valid': onValidStateChange,\n 'onState:pending': onPendingStateChange,\n 'onState:errors': onErrorsStateChange,\n 'onState:errorBag': onErrorBagStateChange,\n 'onState:submitCount': onSubmitCountStateChange,\n },\n }) satisfies BaseResourcefulRecordProps\n )\n const formRef = ref<ResourcefulRecordForm | null>(null)\n useRender(() =>\n h(\n VCard,\n {\n ref: containerVCardRef,\n ...containerBindings.value,\n },\n () => [\n h(VContainer, { fluid: true }, () => [\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':\n !smAndUp.value &&\n (!Array.isArray(controlBarBindings.value.buttons) ||\n controlBarBindings.value.buttons.length === 0),\n 'pt-0':\n !smAndUp.value &&\n Array.isArray(controlBarBindings.value.buttons) &&\n controlBarBindings.value.buttons.length > 0,\n },\n ],\n },\n () => [\n h(ControlButtonBar, {\n ref: controlButtonBarRef,\n ...controlBarBindings.value,\n }),\n ]\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 () => [h('div', { class: ['d-flex', 'align-center'] }, floatingControls.value)]\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 showingErrorState.value\n ? h(\n VEmptyState,\n {\n headline: t('resourcefulRecord.form.badRequest.title'),\n text: t('resourcefulRecord.form.badRequest.text'),\n class: ['my-7'],\n height: 320,\n },\n {\n media: () =>\n slots['error-media'] ? slots['error-media']!() : h(VImg, { src: errorSvg }),\n }\n )\n : null,\n showInitialLoadingState.value\n ? h(\n VEmptyState,\n {\n headline: numeral(initialLoadingStatePercent.value / 100).format('0%'),\n text: t('resourcefulRecord.form.loading.text'),\n class: ['my-7'],\n height: 320,\n },\n {\n media: () =>\n slots['loading-media']\n ? slots['loading-media']({ percent: initialLoadingStatePercent.value })\n : h(VProgressCircular, {\n modelValue: initialLoadingStatePercent.value,\n color: props.metaProgressColor,\n size: 96,\n width: 10,\n }),\n }\n )\n : null,\n !showInitialLoadingState.value && !showingErrorState.value\n ? h(VContainer, { fluid: true }, () =>\n h(VRow, {}, () => [\n h(VCol, { cols: 12 }, () =>\n h(\n ResourcefulRecordForm,\n {\n ref: formRef,\n ...baseFormBindings.value,\n },\n {\n default: (...args: ResourcefulRecordFormDefaultSlotArgs) =>\n slots['form']\n ? slots['form'](...args, record.value)\n : renderDefaultResourcefulRecordForm(...args),\n }\n )\n ),\n ])\n )\n : null,\n renderDialogs(),\n ]\n )\n )\n const formValues = computed(() => (formRef.value ? formRef.value.formValues : {}))\n return {\n refresh: () => loadRecord(),\n doFormSubmit,\n doResetForm,\n setFieldValue,\n setValues,\n setFieldTouched,\n setTouched,\n validate,\n validateField,\n forceUpdateSchema,\n forceUpdateInitialValues,\n formValues,\n record,\n }\n },\n})\n\nexport type ResourcefulRecord = InstanceType<typeof ResourcefulRecord> & ComponentPublicInstance\n"],"names":["joi","qs.stringify","decodeJoi","format"],"mappings":"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"}