@iankibetsh/shframework 5.3.9 → 5.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/library.mjs CHANGED
@@ -3,7 +3,7 @@ import moment from 'moment';
3
3
  import Swal from 'sweetalert2';
4
4
  import { Modal, Offcanvas } from 'bootstrap';
5
5
  import NProgress from 'nprogress';
6
- import { openBlock, createElementBlock, createElementVNode, createTextVNode, toDisplayString, createCommentVNode, withDirectives, Fragment, renderList, vModelSelect, vModelText, ref, onMounted, watch, unref, normalizeClass, createBlock, resolveDynamicComponent, resolveComponent, inject, mergeProps, renderSlot, normalizeStyle, computed, Teleport, createVNode, withCtx, vModelCheckbox, shallowRef, normalizeProps, markRaw, isRef } from 'vue';
6
+ import { openBlock, createElementBlock, createElementVNode, createTextVNode, toDisplayString, createCommentVNode, withDirectives, Fragment, renderList, vModelSelect, vModelText, ref, onMounted, watch, unref, normalizeClass, createBlock, resolveDynamicComponent, resolveComponent, inject, mergeProps, renderSlot, normalizeStyle, computed, Teleport, createVNode, withCtx, vModelCheckbox, resolveDirective, shallowRef, normalizeProps, markRaw, isRef } from 'vue';
7
7
  import _ from 'lodash';
8
8
  import { defineStore, storeToRefs } from 'pinia';
9
9
  import { useRoute, useRouter } from 'vue-router';
@@ -2090,23 +2090,23 @@ var script$A = {
2090
2090
  }
2091
2091
  };
2092
2092
 
2093
- const _hoisted_1$q = {
2093
+ const _hoisted_1$r = {
2094
2094
  class: "sh-phone mb-3",
2095
2095
  style: {"display":"flex"}
2096
2096
  };
2097
- const _hoisted_2$i = {
2097
+ const _hoisted_2$j = {
2098
2098
  key: 0,
2099
2099
  style: {"display":"contents"}
2100
2100
  };
2101
- const _hoisted_3$f = ["src"];
2101
+ const _hoisted_3$g = ["src"];
2102
2102
  const _hoisted_4$e = ["value"];
2103
2103
  const _hoisted_5$c = ["disabled"];
2104
2104
 
2105
2105
  function render$4(_ctx, _cache, $props, $setup, $data, $options) {
2106
- return (openBlock(), createElementBlock("div", _hoisted_1$q, [
2106
+ return (openBlock(), createElementBlock("div", _hoisted_1$r, [
2107
2107
  ($data.selectedCountry)
2108
- ? (openBlock(), createElementBlock("div", _hoisted_2$i, [
2109
- createElementVNode("img", { src: $data.flag }, null, 8 /* PROPS */, _hoisted_3$f),
2108
+ ? (openBlock(), createElementBlock("div", _hoisted_2$j, [
2109
+ createElementVNode("img", { src: $data.flag }, null, 8 /* PROPS */, _hoisted_3$g),
2110
2110
  createTextVNode(" " + toDisplayString($data.selectedCountry.dialCode), 1 /* TEXT */)
2111
2111
  ]))
2112
2112
  : createCommentVNode("v-if", true),
@@ -2141,12 +2141,12 @@ function render$4(_ctx, _cache, $props, $setup, $data, $options) {
2141
2141
  script$A.render = render$4;
2142
2142
  script$A.__file = "src/lib/components/form-components/PhoneInput.vue";
2143
2143
 
2144
- const _hoisted_1$p = {
2144
+ const _hoisted_1$q = {
2145
2145
  key: 0,
2146
2146
  class: "dropdown sh-suggest"
2147
2147
  };
2148
- const _hoisted_2$h = ["id"];
2149
- const _hoisted_3$e = { class: "sh-suggestions-holder" };
2148
+ const _hoisted_2$i = ["id"];
2149
+ const _hoisted_3$f = { class: "sh-suggestions-holder" };
2150
2150
  const _hoisted_4$d = { class: "badge bg-secondary m-1 sh-selected-item" };
2151
2151
  const _hoisted_5$b = ["onClick"];
2152
2152
  const _hoisted_6$9 = ["id"];
@@ -2307,14 +2307,14 @@ watch(()=>props.modelValue, (newValue)=>{
2307
2307
 
2308
2308
  return (_ctx, _cache) => {
2309
2309
  return (unref(id))
2310
- ? (openBlock(), createElementBlock("div", _hoisted_1$p, [
2310
+ ? (openBlock(), createElementBlock("div", _hoisted_1$q, [
2311
2311
  createElementVNode("div", {
2312
2312
  id: unref(id),
2313
2313
  "data-bs-toggle": "dropdown",
2314
2314
  class: "p-0 d-flex sh-suggest-control dropdown-toggle",
2315
2315
  "aria-expanded": "false"
2316
2316
  }, [
2317
- createElementVNode("div", _hoisted_3$e, [
2317
+ createElementVNode("div", _hoisted_3$f, [
2318
2318
  (openBlock(true), createElementBlock(Fragment, null, renderList(unref(selectedSuggestions), (sgt) => {
2319
2319
  return (openBlock(), createElementBlock("h5", _hoisted_4$d, [
2320
2320
  createTextVNode(toDisplayString(sgt.name) + " ", 1 /* TEXT */),
@@ -2334,7 +2334,7 @@ return (_ctx, _cache) => {
2334
2334
  onChange: filterData,
2335
2335
  class: "flex-fill h-100 sh-suggestion-input"
2336
2336
  }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_6$9)
2337
- ], 8 /* PROPS */, _hoisted_2$h),
2337
+ ], 8 /* PROPS */, _hoisted_2$i),
2338
2338
  createElementVNode("ul", {
2339
2339
  class: normalizeClass([(!unref(suggestions) || unref(suggestions).length === 0) ? 'no-sh-suggestions':'sh-found-suggestions', "dropdown-menu w-100"]),
2340
2340
  id: 'dropwdown_section' + unref(id),
@@ -2733,16 +2733,16 @@ var script$y = {
2733
2733
  }
2734
2734
  };
2735
2735
 
2736
- const _hoisted_1$o = {
2736
+ const _hoisted_1$p = {
2737
2737
  ref: "ShAutoForm",
2738
2738
  class: "sh-form"
2739
2739
  };
2740
- const _hoisted_2$g = {
2740
+ const _hoisted_2$h = {
2741
2741
  key: 0,
2742
2742
  class: "alert alert-danger alert-dismissible fade show sh-form-submission-error",
2743
2743
  role: "alert"
2744
2744
  };
2745
- const _hoisted_3$d = { key: 0 };
2745
+ const _hoisted_3$e = { key: 0 };
2746
2746
  const _hoisted_4$c = { key: 1 };
2747
2747
  const _hoisted_5$a = { class: "row" };
2748
2748
  const _hoisted_6$8 = { class: "fg-label control-label text-capitalize control-bel col-md-12 request-form-label mb-2" };
@@ -2777,14 +2777,14 @@ function render$3(_ctx, _cache, $props, $setup, $data, $options) {
2777
2777
 
2778
2778
  return (openBlock(), createElementBlock(Fragment, null, [
2779
2779
  _cache[5] || (_cache[5] = createElementVNode("h5", { class: "d-none" }, null, -1 /* HOISTED */)),
2780
- createElementVNode("form", _hoisted_1$o, [
2780
+ createElementVNode("form", _hoisted_1$p, [
2781
2781
  createCommentVNode(" <div v-if=\"form_status == 1\" class=\"alert alert-info\">Processing...</div>"),
2782
2782
  createCommentVNode(" <div v-if=\"form_status == 2\" class=\"alert alert-success\">Success</div>"),
2783
2783
  (_ctx.form_status == 3)
2784
- ? (openBlock(), createElementBlock("div", _hoisted_2$g, [
2784
+ ? (openBlock(), createElementBlock("div", _hoisted_2$h, [
2785
2785
  _cache[2] || (_cache[2] = createElementVNode("i", { class: "bi-exclamation-triangle-fill me-1" }, null, -1 /* HOISTED */)),
2786
2786
  (_ctx.errorText)
2787
- ? (openBlock(), createElementBlock("span", _hoisted_3$d, toDisplayString(_ctx.errorText), 1 /* TEXT */))
2787
+ ? (openBlock(), createElementBlock("span", _hoisted_3$e, toDisplayString(_ctx.errorText), 1 /* TEXT */))
2788
2788
  : (openBlock(), createElementBlock("span", _hoisted_4$c, "Unexpected Error Occurred")),
2789
2789
  createCommentVNode(" <button @click=\"hideError\" type=\"button\" class=\"btn-close\" aria-label=\"Close\"></button>")
2790
2790
  ]))
@@ -3076,7 +3076,7 @@ return (_ctx, _cache) => {
3076
3076
 
3077
3077
  script$x.__file = "src/lib/components/form-components/EmailInput.vue";
3078
3078
 
3079
- const _hoisted_1$n = ["min", "max"];
3079
+ const _hoisted_1$o = ["min", "max"];
3080
3080
 
3081
3081
 
3082
3082
  var script$w = {
@@ -3111,7 +3111,7 @@ return (_ctx, _cache) => {
3111
3111
  onChange: modelValueUpdated,
3112
3112
  onKeydown: modelValueUpdated,
3113
3113
  onUpdated: modelValueUpdated
3114
- }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_1$n)), [
3114
+ }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_1$o)), [
3115
3115
  [vModelText, inputModel.value]
3116
3116
  ])
3117
3117
  }
@@ -3203,7 +3203,7 @@ return (_ctx, _cache) => {
3203
3203
 
3204
3204
  script$u.__file = "src/lib/components/form-components/TextAreaInput.vue";
3205
3205
 
3206
- const _hoisted_1$m = ["value"];
3206
+ const _hoisted_1$n = ["value"];
3207
3207
 
3208
3208
 
3209
3209
  var script$t = {
@@ -3260,7 +3260,7 @@ return (_ctx, _cache) => {
3260
3260
  return (openBlock(), createElementBlock("option", {
3261
3261
  key: option.id,
3262
3262
  value: option.id
3263
- }, toDisplayString(option.name), 9 /* TEXT, PROPS */, _hoisted_1$m))
3263
+ }, toDisplayString(option.name), 9 /* TEXT, PROPS */, _hoisted_1$n))
3264
3264
  }), 128 /* KEYED_FRAGMENT */))
3265
3265
  ], 544 /* NEED_HYDRATION, NEED_PATCH */)), [
3266
3266
  [vModelSelect, inputModel.value]
@@ -3350,9 +3350,9 @@ return (_ctx, _cache) => {
3350
3350
 
3351
3351
  script$r.__file = "src/lib/components/form-components/DateInput.vue";
3352
3352
 
3353
- const _hoisted_1$l = ["name", "onUpdate:modelValue"];
3354
- const _hoisted_2$f = ["innerHTML"];
3355
- const _hoisted_3$c = {
3353
+ const _hoisted_1$m = ["name", "onUpdate:modelValue"];
3354
+ const _hoisted_2$g = ["innerHTML"];
3355
+ const _hoisted_3$d = {
3356
3356
  key: 0,
3357
3357
  class: "text-danger sh-required"
3358
3358
  };
@@ -3633,7 +3633,7 @@ return (_ctx, _cache) => {
3633
3633
  type: "hidden",
3634
3634
  name: field.field,
3635
3635
  "onUpdate:modelValue": $event => ((formFields.value[index].value) = $event)
3636
- }, null, 8 /* PROPS */, _hoisted_1$l)), [
3636
+ }, null, 8 /* PROPS */, _hoisted_1$m)), [
3637
3637
  [vModelText, formFields.value[index].value]
3638
3638
  ])
3639
3639
  : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
@@ -3645,9 +3645,9 @@ return (_ctx, _cache) => {
3645
3645
  createElementVNode("span", {
3646
3646
  innerHTML: field.label,
3647
3647
  class: "sh-label"
3648
- }, null, 8 /* PROPS */, _hoisted_2$f),
3648
+ }, null, 8 /* PROPS */, _hoisted_2$g),
3649
3649
  (field.required)
3650
- ? (openBlock(), createElementBlock("span", _hoisted_3$c, "*"))
3650
+ ? (openBlock(), createElementBlock("span", _hoisted_3$d, "*"))
3651
3651
  : createCommentVNode("v-if", true)
3652
3652
  ], 2 /* CLASS */))
3653
3653
  : createCommentVNode("v-if", true),
@@ -3716,9 +3716,9 @@ return (_ctx, _cache) => {
3716
3716
 
3717
3717
  script$q.__file = "src/lib/components/ShAutoForm.vue";
3718
3718
 
3719
- const _hoisted_1$k = ["id", "data-bs-backdrop"];
3720
- const _hoisted_2$e = { class: "modal-content" };
3721
- const _hoisted_3$b = { class: "modal-header" };
3719
+ const _hoisted_1$l = ["id", "data-bs-backdrop"];
3720
+ const _hoisted_2$f = { class: "modal-content" };
3721
+ const _hoisted_3$c = { class: "modal-header" };
3722
3722
  const _hoisted_4$a = { class: "modal-title flex-fill" };
3723
3723
  const _hoisted_5$8 = { class: "modal-body" };
3724
3724
  const _hoisted_6$6 = { class: "section" };
@@ -3782,8 +3782,8 @@ return (_ctx, _cache) => {
3782
3782
  createElementVNode("div", {
3783
3783
  class: normalizeClass(["modal-dialog", modalClasses.value])
3784
3784
  }, [
3785
- createElementVNode("div", _hoisted_2$e, [
3786
- createElementVNode("div", _hoisted_3$b, [
3785
+ createElementVNode("div", _hoisted_2$f, [
3786
+ createElementVNode("div", _hoisted_3$c, [
3787
3787
  createElementVNode("h3", _hoisted_4$a, toDisplayString(__props.modalTitle), 1 /* TEXT */),
3788
3788
  _cache[0] || (_cache[0] = createElementVNode("button", {
3789
3789
  type: "button",
@@ -3799,7 +3799,7 @@ return (_ctx, _cache) => {
3799
3799
  ])
3800
3800
  ])
3801
3801
  ], 2 /* CLASS */)
3802
- ], 8 /* PROPS */, _hoisted_1$k))
3802
+ ], 8 /* PROPS */, _hoisted_1$l))
3803
3803
  }
3804
3804
  }
3805
3805
 
@@ -3807,9 +3807,9 @@ return (_ctx, _cache) => {
3807
3807
 
3808
3808
  script$p.__file = "src/lib/components/ShModal.vue";
3809
3809
 
3810
- const _hoisted_1$j = { class: "dropdown sh-dropdown-form" };
3811
- const _hoisted_2$d = ["id"];
3812
- const _hoisted_3$a = ["aria-labelledby"];
3810
+ const _hoisted_1$k = { class: "dropdown sh-dropdown-form" };
3811
+ const _hoisted_2$e = ["id"];
3812
+ const _hoisted_3$b = ["aria-labelledby"];
3813
3813
 
3814
3814
  var script$o = {
3815
3815
  __name: 'ShDropDownForm',
@@ -3860,7 +3860,7 @@ const formError = (res)=>{
3860
3860
  return (_ctx, _cache) => {
3861
3861
  return (openBlock(), createElementBlock(Fragment, null, [
3862
3862
  _cache[0] || (_cache[0] = createElementVNode("h5", { class: "d-none" }, "To prevent default class", -1 /* HOISTED */)),
3863
- createElementVNode("div", _hoisted_1$j, [
3863
+ createElementVNode("div", _hoisted_1$k, [
3864
3864
  createElementVNode("a", {
3865
3865
  class: normalizeClass(unref(btnClass)),
3866
3866
  href: "#",
@@ -3871,7 +3871,7 @@ return (_ctx, _cache) => {
3871
3871
  "aria-expanded": "false"
3872
3872
  }, [
3873
3873
  renderSlot(_ctx.$slots, "default")
3874
- ], 10 /* CLASS, PROPS */, _hoisted_2$d),
3874
+ ], 10 /* CLASS, PROPS */, _hoisted_2$e),
3875
3875
  createElementVNode("div", {
3876
3876
  class: "dropdown-menu px-2 py-1",
3877
3877
  "aria-labelledby": _ctx.dropdownId
@@ -3883,7 +3883,7 @@ return (_ctx, _cache) => {
3883
3883
  onFormError: formError,
3884
3884
  key: JSON.stringify(__props.currentData ?? {})
3885
3885
  }, props), null, 16 /* FULL_PROPS */))
3886
- ], 8 /* PROPS */, _hoisted_3$a)
3886
+ ], 8 /* PROPS */, _hoisted_3$b)
3887
3887
  ])
3888
3888
  ], 64 /* STABLE_FRAGMENT */))
3889
3889
  }
@@ -3893,7 +3893,7 @@ return (_ctx, _cache) => {
3893
3893
 
3894
3894
  script$o.__file = "src/lib/components/ShDropDownForm.vue";
3895
3895
 
3896
- const _hoisted_1$i = ["href"];
3896
+ const _hoisted_1$j = ["href"];
3897
3897
 
3898
3898
  var script$n = {
3899
3899
  __name: 'ShModalForm',
@@ -3955,7 +3955,7 @@ return (_ctx, _cache) => {
3955
3955
  onClick: emitClick
3956
3956
  }, [
3957
3957
  renderSlot(_ctx.$slots, "default")
3958
- ], 10 /* CLASS, PROPS */, _hoisted_1$i),
3958
+ ], 10 /* CLASS, PROPS */, _hoisted_1$j),
3959
3959
  (openBlock(), createBlock(Teleport, { to: "body" }, [
3960
3960
  createVNode(script$p, {
3961
3961
  "modal-size": __props.modalSize,
@@ -3982,7 +3982,7 @@ return (_ctx, _cache) => {
3982
3982
 
3983
3983
  script$n.__file = "src/lib/components/ShModalForm.vue";
3984
3984
 
3985
- const _hoisted_1$h = ["href"];
3985
+ const _hoisted_1$i = ["href"];
3986
3986
 
3987
3987
  var script$m = {
3988
3988
  __name: 'ShModalFormAuto',
@@ -4023,7 +4023,7 @@ return (_ctx, _cache) => {
4023
4023
  "data-bs-toggle": "modal"
4024
4024
  }, [
4025
4025
  renderSlot(_ctx.$slots, "default")
4026
- ], 10 /* CLASS, PROPS */, _hoisted_1$h),
4026
+ ], 10 /* CLASS, PROPS */, _hoisted_1$i),
4027
4027
  createVNode(script$p, {
4028
4028
  "modal-id": modalId,
4029
4029
  "modal-title": __props.modalTitle,
@@ -4042,9 +4042,9 @@ return (_ctx, _cache) => {
4042
4042
 
4043
4043
  script$m.__file = "src/lib/components/ShModalFormAuto.vue";
4044
4044
 
4045
- const _hoisted_1$g = ["data-bs-scroll", "id"];
4046
- const _hoisted_2$c = { class: "offcanvas-header" };
4047
- const _hoisted_3$9 = {
4045
+ const _hoisted_1$h = ["data-bs-scroll", "id"];
4046
+ const _hoisted_2$d = { class: "offcanvas-header" };
4047
+ const _hoisted_3$a = {
4048
4048
  class: "offcanvas-title",
4049
4049
  id: "offcanvasScrollingLabel"
4050
4050
  };
@@ -4103,14 +4103,14 @@ return (_ctx, _cache) => {
4103
4103
  id: __props.canvasId,
4104
4104
  "aria-labelledby": "offcanvasScrollingLabel"
4105
4105
  }, [
4106
- createElementVNode("div", _hoisted_2$c, [
4107
- createElementVNode("h5", _hoisted_3$9, toDisplayString(__props.canvasTitle), 1 /* TEXT */),
4106
+ createElementVNode("div", _hoisted_2$d, [
4107
+ createElementVNode("h5", _hoisted_3$a, toDisplayString(__props.canvasTitle), 1 /* TEXT */),
4108
4108
  createElementVNode("button", _hoisted_4$9, null, 512 /* NEED_PATCH */)
4109
4109
  ]),
4110
4110
  createElementVNode("div", _hoisted_5$7, [
4111
4111
  renderSlot(_ctx.$slots, "default")
4112
4112
  ])
4113
- ], 10 /* CLASS, PROPS */, _hoisted_1$g))
4113
+ ], 10 /* CLASS, PROPS */, _hoisted_1$h))
4114
4114
  }
4115
4115
  }
4116
4116
 
@@ -4118,10 +4118,10 @@ return (_ctx, _cache) => {
4118
4118
 
4119
4119
  script$l.__file = "src/lib/components/ShCanvas.vue";
4120
4120
 
4121
- const _hoisted_1$f = { class: "callout callout-info" };
4121
+ const _hoisted_1$g = { class: "callout callout-info" };
4122
4122
 
4123
4123
  function render$2(_ctx, _cache) {
4124
- return (openBlock(), createElementBlock("div", _hoisted_1$f, [
4124
+ return (openBlock(), createElementBlock("div", _hoisted_1$g, [
4125
4125
  renderSlot(_ctx.$slots, "default", {}, () => [
4126
4126
  _cache[0] || (_cache[0] = createTextVNode(" No records found "))
4127
4127
  ])
@@ -4426,8 +4426,8 @@ return (_ctx, _cache) => {
4426
4426
 
4427
4427
  script$i.__file = "src/lib/components/ShSilentAction.vue";
4428
4428
 
4429
- const _hoisted_1$e = ["href"];
4430
- const _hoisted_2$b = ["title"];
4429
+ const _hoisted_1$f = ["href"];
4430
+ const _hoisted_2$c = ["title"];
4431
4431
 
4432
4432
 
4433
4433
  var script$h = {
@@ -4533,7 +4533,7 @@ return (_ctx, _cache) => {
4533
4533
  }, null, 2 /* CLASS */))
4534
4534
  : createCommentVNode("v-if", true),
4535
4535
  createTextVNode(" " + toDisplayString(__props.action.label), 1 /* TEXT */)
4536
- ], 10 /* CLASS, PROPS */, _hoisted_1$e))
4536
+ ], 10 /* CLASS, PROPS */, _hoisted_1$f))
4537
4537
  : (__props.action.emits)
4538
4538
  ? (openBlock(), createElementBlock("button", {
4539
4539
  key: 3,
@@ -4548,7 +4548,7 @@ return (_ctx, _cache) => {
4548
4548
  }, null, 2 /* CLASS */))
4549
4549
  : createCommentVNode("v-if", true),
4550
4550
  createTextVNode(" " + toDisplayString(__props.action.label), 1 /* TEXT */)
4551
- ], 10 /* CLASS, PROPS */, _hoisted_2$b))
4551
+ ], 10 /* CLASS, PROPS */, _hoisted_2$c))
4552
4552
  : (!__props.action.emits)
4553
4553
  ? (openBlock(), createBlock(_component_router_link, {
4554
4554
  key: 4,
@@ -4579,17 +4579,17 @@ return (_ctx, _cache) => {
4579
4579
 
4580
4580
  script$h.__file = "src/lib/components/table/SingleAction.vue";
4581
4581
 
4582
- const _hoisted_1$d = {
4582
+ const _hoisted_1$e = {
4583
4583
  key: 0,
4584
4584
  class: "dropdown sh-table-dropdown"
4585
4585
  };
4586
- const _hoisted_2$a = {
4586
+ const _hoisted_2$b = {
4587
4587
  class: "sh-table-dropdown-btn",
4588
4588
  type: "button",
4589
4589
  "data-bs-toggle": "dropdown",
4590
4590
  "aria-expanded": "false"
4591
4591
  };
4592
- const _hoisted_3$8 = {
4592
+ const _hoisted_3$9 = {
4593
4593
  key: 1,
4594
4594
  class: "bi bi-three-dots"
4595
4595
  };
@@ -4613,15 +4613,15 @@ const icon = props.actions.icon;
4613
4613
 
4614
4614
  return (_ctx, _cache) => {
4615
4615
  return (unref(type) && unref(type).includes('dropdown'))
4616
- ? (openBlock(), createElementBlock("div", _hoisted_1$d, [
4617
- createElementVNode("strong", _hoisted_2$a, [
4616
+ ? (openBlock(), createElementBlock("div", _hoisted_1$e, [
4617
+ createElementVNode("strong", _hoisted_2$b, [
4618
4618
  (unref(icon))
4619
4619
  ? (openBlock(), createElementBlock("span", {
4620
4620
  key: 0,
4621
4621
  class: normalizeClass(unref(icon))
4622
4622
  }, null, 2 /* CLASS */))
4623
4623
  : (unref(type) === 'dropdown-horizontal')
4624
- ? (openBlock(), createElementBlock("i", _hoisted_3$8))
4624
+ ? (openBlock(), createElementBlock("i", _hoisted_3$9))
4625
4625
  : (openBlock(), createElementBlock("i", _hoisted_4$8))
4626
4626
  ]),
4627
4627
  createElementVNode("ul", _hoisted_5$6, [
@@ -4735,9 +4735,9 @@ var script$f = {
4735
4735
  }
4736
4736
  };
4737
4737
 
4738
- const _hoisted_1$c = { key: 0 };
4739
- const _hoisted_2$9 = { class: "record_count_body mb-3" };
4740
- const _hoisted_3$7 = ["value"];
4738
+ const _hoisted_1$d = { key: 0 };
4739
+ const _hoisted_2$a = { class: "record_count_body mb-3" };
4740
+ const _hoisted_3$8 = ["value"];
4741
4741
  const _hoisted_4$7 = { class: "record_counts" };
4742
4742
  const _hoisted_5$5 = {
4743
4743
  key: 0,
@@ -4774,8 +4774,8 @@ const _hoisted_15$2 = {
4774
4774
 
4775
4775
  function render$1(_ctx, _cache, $props, $setup, $data, $options) {
4776
4776
  return ($props.paginationStyle !== 'loadMore')
4777
- ? (openBlock(), createElementBlock("div", _hoisted_1$c, [
4778
- createElementVNode("div", _hoisted_2$9, [
4777
+ ? (openBlock(), createElementBlock("div", _hoisted_1$d, [
4778
+ createElementVNode("div", _hoisted_2$a, [
4779
4779
  _cache[5] || (_cache[5] = createElementVNode("span", { class: "per_page_show" }, "Showing", -1 /* HOISTED */)),
4780
4780
  _cache[6] || (_cache[6] = createTextVNode("  ")),
4781
4781
  withDirectives(createElementVNode("select", {
@@ -4784,7 +4784,7 @@ function render$1(_ctx, _cache, $props, $setup, $data, $options) {
4784
4784
  "onUpdate:modelValue": _cache[1] || (_cache[1] = $event => (($data.per_page) = $event))
4785
4785
  }, [
4786
4786
  (openBlock(true), createElementBlock(Fragment, null, renderList($data.pageOptions, (option) => {
4787
- return (openBlock(), createElementBlock("option", { value: option }, toDisplayString(option), 9 /* TEXT, PROPS */, _hoisted_3$7))
4787
+ return (openBlock(), createElementBlock("option", { value: option }, toDisplayString(option), 9 /* TEXT, PROPS */, _hoisted_3$8))
4788
4788
  }), 256 /* UNKEYED_FRAGMENT */))
4789
4789
  ], 544 /* NEED_HYDRATION, NEED_PATCH */), [
4790
4790
  [vModelSelect, $data.per_page]
@@ -4861,9 +4861,9 @@ function render$1(_ctx, _cache, $props, $setup, $data, $options) {
4861
4861
  script$f.render = render$1;
4862
4862
  script$f.__file = "src/lib/components/list_templates/Pagination.vue";
4863
4863
 
4864
- const _hoisted_1$b = { class: "sh-range" };
4865
- const _hoisted_2$8 = { class: "dropdown" };
4866
- const _hoisted_3$6 = {
4864
+ const _hoisted_1$c = { class: "sh-range" };
4865
+ const _hoisted_2$9 = { class: "dropdown" };
4866
+ const _hoisted_3$7 = {
4867
4867
  class: "form-control dropdown-toggle",
4868
4868
  href: "#",
4869
4869
  role: "button",
@@ -4992,9 +4992,9 @@ onMounted(() => {
4992
4992
  });
4993
4993
 
4994
4994
  return (_ctx, _cache) => {
4995
- return (openBlock(), createElementBlock("div", _hoisted_1$b, [
4996
- createElementVNode("div", _hoisted_2$8, [
4997
- createElementVNode("div", _hoisted_3$6, [
4995
+ return (openBlock(), createElementBlock("div", _hoisted_1$c, [
4996
+ createElementVNode("div", _hoisted_2$9, [
4997
+ createElementVNode("div", _hoisted_3$7, [
4998
4998
  _cache[2] || (_cache[2] = createElementVNode("i", { class: "bi-calendar text-dark" }, null, -1 /* HOISTED */)),
4999
4999
  _cache[3] || (_cache[3] = createTextVNode()),
5000
5000
  createElementVNode("span", { innerHTML: rangeLabel.value }, null, 8 /* PROPS */, _hoisted_4$6)
@@ -5051,12 +5051,12 @@ return (_ctx, _cache) => {
5051
5051
 
5052
5052
  script$e.__file = "src/lib/components/ShRange.vue";
5053
5053
 
5054
- const _hoisted_1$a = { class: "auto-table mt-2" };
5055
- const _hoisted_2$7 = {
5054
+ const _hoisted_1$b = { class: "auto-table mt-2" };
5055
+ const _hoisted_2$8 = {
5056
5056
  key: 0,
5057
5057
  class: "col-md-4 mb-2"
5058
5058
  };
5059
- const _hoisted_3$5 = ["disabled"];
5059
+ const _hoisted_3$6 = ["disabled"];
5060
5060
  const _hoisted_4$5 = {
5061
5061
  key: 1,
5062
5062
  class: "row"
@@ -5534,9 +5534,9 @@ const showColumn = header=>{
5534
5534
  return (_ctx, _cache) => {
5535
5535
  const _component_router_link = resolveComponent("router-link");
5536
5536
 
5537
- return (openBlock(), createElementBlock("div", _hoisted_1$a, [
5537
+ return (openBlock(), createElementBlock("div", _hoisted_1$b, [
5538
5538
  (__props.hasDownload)
5539
- ? (openBlock(), createElementBlock("div", _hoisted_2$7, [
5539
+ ? (openBlock(), createElementBlock("div", _hoisted_2$8, [
5540
5540
  createElementVNode("button", {
5541
5541
  disabled: _ctx.downloading,
5542
5542
  class: "btn btn-warning btn-sm",
@@ -5555,7 +5555,7 @@ return (_ctx, _cache) => {
5555
5555
  }, null, -1 /* HOISTED */)),
5556
5556
  _cache[10] || (_cache[10] = createElementVNode("span", { class: "visually-hidden" }, "Loading...", -1 /* HOISTED */))
5557
5557
  ], 64 /* STABLE_FRAGMENT */))
5558
- ], 8 /* PROPS */, _hoisted_3$5)
5558
+ ], 8 /* PROPS */, _hoisted_3$6)
5559
5559
  ]))
5560
5560
  : createCommentVNode("v-if", true),
5561
5561
  (!__props.hideSearch)
@@ -5967,6 +5967,14 @@ return (_ctx, _cache) => {
5967
5967
 
5968
5968
  script$d.__file = "src/lib/components/ShTable.vue";
5969
5969
 
5970
+ const _hoisted_1$a = {
5971
+ key: 1,
5972
+ class: "alert alert-warning"
5973
+ };
5974
+ const _hoisted_2$7 = { key: 0 };
5975
+ const _hoisted_3$5 = { key: 1 };
5976
+
5977
+
5970
5978
  var script$c = {
5971
5979
  __name: 'ShTabs',
5972
5980
  props: {
@@ -6007,10 +6015,25 @@ const route = useRoute();
6007
6015
  const router = useRouter();
6008
6016
  const currentTab = ref('');
6009
6017
  const path = ref(route.path);
6010
-
6018
+ const allowedTabs = ref([]);
6019
+ const {user} = storeToRefs(useUserStore());
6011
6020
  onMounted(()=>{
6012
- resetTabCounts();
6013
- setTab(props.tabs[0]);
6021
+ if(props.tabs.length === 0){
6022
+ return;
6023
+ }
6024
+ allowedTabs.value = props.tabs.filter(tab=>{
6025
+ if(typeof tab === 'object' && tab.permission){
6026
+ if(user.value && user.value.isAllowedTo(tab.permission)){
6027
+ return tab
6028
+ }
6029
+ return false
6030
+ }
6031
+ return tab
6032
+ });
6033
+ if(allowedTabs.value.length > 0){
6034
+ resetTabCounts();
6035
+ setTab(allowedTabs.value[0]);
6036
+ }
6014
6037
  });
6015
6038
 
6016
6039
  watch(()=>props.tabCounts, () => {
@@ -6030,8 +6053,10 @@ watch(()=>route.path,(newPath)=>{
6030
6053
  });
6031
6054
 
6032
6055
  const setTab = (tab) => {
6056
+
6033
6057
  if (tab) {
6034
- currentTab.value = tab.replace(/_/g, ' ');
6058
+ const label = getTabLabel(tab);
6059
+ currentTab.value = label.replace(/_/g, ' ');
6035
6060
  }
6036
6061
  };
6037
6062
  const setTabCounts = (tabCounts) => {
@@ -6046,9 +6071,9 @@ const setTabCounts = (tabCounts) => {
6046
6071
  const resetTabCounts = () => {
6047
6072
  const arr = route.fullPath.split('/');
6048
6073
  if (!tabExistsInUrl()) {
6049
- router.replace(route.fullPath + '/tab/' + props.tabs[0]);
6074
+ router.replace(route.fullPath + '/tab/' + getTabKey(allowedTabs.value[0]));
6050
6075
  } else {
6051
- currentTab.value = arr[arr.length - 1];
6076
+ setTab(arr[arr.length - 1]);
6052
6077
  }
6053
6078
  if (props.tabCounts) {
6054
6079
  setTabCounts(props.tabCounts);
@@ -6057,7 +6082,8 @@ const resetTabCounts = () => {
6057
6082
  const tabExistsInUrl = () => {
6058
6083
  let exists = false;
6059
6084
  props.tabs.forEach(tab => {
6060
- if (route.fullPath.includes(`/${tab}`)) {
6085
+ const tabKey = getTabKey(tab);
6086
+ if (route.fullPath.includes(`/${tabKey}`)) {
6061
6087
  exists = true;
6062
6088
  }
6063
6089
  });
@@ -6077,45 +6103,78 @@ const setCounts = (res) => {
6077
6103
  });
6078
6104
  };
6079
6105
 
6106
+ const getTabKey = (tab)=>{
6107
+ if(typeof tab === 'string') {
6108
+ return tab
6109
+ }
6110
+ return tab.name || tab.key
6111
+ };
6112
+
6113
+ const getTabPermission = tab=>{
6114
+ if (typeof tab === 'string') {
6115
+ return ''
6116
+ }
6117
+ return tab.permission
6118
+ };
6119
+
6120
+ const getTabLabel = tab=>{
6121
+ let label = '';
6122
+ if (typeof tab === 'string') {
6123
+ label = tab;
6124
+ } else {
6125
+ label = tab.label || tab.name || tab.key;
6126
+ }
6127
+ return label.replace(/_/g, ' ')
6128
+ };
6129
+
6080
6130
  return (_ctx, _cache) => {
6081
6131
  const _component_router_link = resolveComponent("router-link");
6082
6132
  const _component_router_view = resolveComponent("router-view");
6133
+ const _directive_if_user_can = resolveDirective("if-user-can");
6083
6134
 
6084
- return (openBlock(), createElementBlock(Fragment, null, [
6085
- createElementVNode("ul", {
6086
- class: normalizeClass(["nav nav-tabs sh-tabs", __props.classes ?? unref(shRepo).getShConfig('tabsClass','sh-tabs nav-tabs-bordered')])
6087
- }, [
6088
- (openBlock(true), createElementBlock(Fragment, null, renderList(__props.tabs, (tab) => {
6089
- return (openBlock(), createElementBlock("li", {
6090
- class: "nav-item",
6091
- key: tab
6135
+ return (allowedTabs.value.length > 0)
6136
+ ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
6137
+ createElementVNode("ul", {
6138
+ class: normalizeClass(["nav nav-tabs sh-tabs", __props.classes ?? unref(shRepo).getShConfig('tabsClass','sh-tabs nav-tabs-bordered')])
6092
6139
  }, [
6093
- createVNode(_component_router_link, {
6094
- onClick: $event => (setTab(tab)),
6095
- "active-class": 'active',
6096
- class: normalizeClass(["nav-link text-capitalize", 'sh_tab_' + tab]),
6097
- to: __props.baseUrl+'/tab/'+tab,
6098
- role: "tab"
6099
- }, {
6100
- default: withCtx(() => [
6101
- createTextVNode(toDisplayString(tab.replace(/_/g, ' ')), 1 /* TEXT */)
6102
- ]),
6103
- _: 2 /* DYNAMIC */
6104
- }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["onClick", "to", "class"])
6105
- ]))
6106
- }), 128 /* KEYED_FRAGMENT */))
6107
- ], 2 /* CLASS */),
6108
- createElementVNode("div", {
6109
- class: normalizeClass(["tab-content", __props.classTwo])
6110
- }, [
6111
- (openBlock(), createBlock(_component_router_view, mergeProps(_ctx.$attrs, {
6112
- currentTab: currentTab.value,
6113
- key: path.value,
6114
- sharedData: __props.sharedData,
6115
- tabCounts: __props.tabCounts
6116
- }), null, 16 /* FULL_PROPS */, ["currentTab", "sharedData", "tabCounts"]))
6117
- ], 2 /* CLASS */)
6118
- ], 64 /* STABLE_FRAGMENT */))
6140
+ (openBlock(true), createElementBlock(Fragment, null, renderList(allowedTabs.value, (tab) => {
6141
+ return withDirectives((openBlock(), createElementBlock("li", {
6142
+ class: "nav-item",
6143
+ key: getTabKey(tab)
6144
+ }, [
6145
+ createVNode(_component_router_link, {
6146
+ onClick: $event => (setTab(tab)),
6147
+ "active-class": 'active',
6148
+ class: normalizeClass(["nav-link text-capitalize", 'sh_tab_' + getTabKey(tab)]),
6149
+ to: __props.baseUrl+'/tab/'+getTabKey(tab),
6150
+ role: "tab"
6151
+ }, {
6152
+ default: withCtx(() => [
6153
+ createTextVNode(toDisplayString(getTabLabel(tab)), 1 /* TEXT */)
6154
+ ]),
6155
+ _: 2 /* DYNAMIC */
6156
+ }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["onClick", "to", "class"])
6157
+ ])), [
6158
+ [_directive_if_user_can, getTabPermission(tab)]
6159
+ ])
6160
+ }), 128 /* KEYED_FRAGMENT */))
6161
+ ], 2 /* CLASS */),
6162
+ createElementVNode("div", {
6163
+ class: normalizeClass(["tab-content", __props.classTwo])
6164
+ }, [
6165
+ (openBlock(), createBlock(_component_router_view, mergeProps(_ctx.$attrs, {
6166
+ currentTab: currentTab.value,
6167
+ key: path.value,
6168
+ sharedData: __props.sharedData,
6169
+ tabCounts: __props.tabCounts
6170
+ }), null, 16 /* FULL_PROPS */, ["currentTab", "sharedData", "tabCounts"]))
6171
+ ], 2 /* CLASS */)
6172
+ ], 64 /* STABLE_FRAGMENT */))
6173
+ : (openBlock(), createElementBlock("div", _hoisted_1$a, [
6174
+ (__props.tabs.length)
6175
+ ? (openBlock(), createElementBlock("div", _hoisted_2$7, " 403 Not Allowed "))
6176
+ : (openBlock(), createElementBlock("div", _hoisted_3$5, " No tabs found "))
6177
+ ]))
6119
6178
  }
6120
6179
  }
6121
6180