@neutron.co.id/operasional-interfaces 1.17.5 → 1.17.6

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 (30) hide show
  1. package/build/@office/config.mjs +3 -0
  2. package/build/@office/models/personalia/attendance/AttendanceManager.vue +5 -5
  3. package/build/@office/models/personalia/attendance/AttendanceSingle/AttendanceSingle.vue +2 -1
  4. package/build/@office/models/personalia/attendanceType/AttendanceTypeCollection/AttendanceTypeCollection.vue +23 -0
  5. package/build/@office/models/personalia/attendanceType/AttendanceTypeCollection/AttendanceTypeTypeCollection.stories.d.ts +7 -0
  6. package/build/@office/models/personalia/attendanceType/AttendanceTypeCollection/AttendanceTypeTypeCollection.stories.mjs +40 -0
  7. package/build/@office/models/personalia/attendanceType/AttendanceTypeCollection/index.d.ts +1 -0
  8. package/build/@office/models/personalia/attendanceType/AttendanceTypeCollection/index.mjs +1 -0
  9. package/build/@office/models/personalia/attendanceType/AttendanceTypeSingle/AttendanceTypeSingle.stories.d.ts +8 -0
  10. package/build/@office/models/personalia/attendanceType/AttendanceTypeSingle/AttendanceTypeSingle.stories.mjs +47 -0
  11. package/build/@office/models/personalia/attendanceType/AttendanceTypeSingle/AttendanceTypeSingle.vue +96 -0
  12. package/build/@office/models/personalia/attendanceType/AttendanceTypeSingle/index.d.ts +1 -0
  13. package/build/@office/models/personalia/attendanceType/AttendanceTypeSingle/index.mjs +1 -0
  14. package/build/@office/models/personalia/attendanceType/index.d.ts +2 -0
  15. package/build/@office/models/personalia/attendanceType/index.mjs +2 -0
  16. package/build/@office/models/personalia/index.d.ts +1 -0
  17. package/build/@office/models/personalia/index.mjs +1 -0
  18. package/build/@package/@office/models/personalia/attendanceType/AttendanceTypeCollection/AttendanceTypeCollection.vue.d.ts +2 -0
  19. package/build/@package/@office/models/personalia/attendanceType/AttendanceTypeCollection/index.d.ts +1 -0
  20. package/build/@package/@office/models/personalia/attendanceType/AttendanceTypeSingle/AttendanceTypeSingle.vue.d.ts +2 -0
  21. package/build/@package/@office/models/personalia/attendanceType/AttendanceTypeSingle/index.d.ts +1 -0
  22. package/build/@package/@office/models/personalia/attendanceType/index.d.ts +2 -0
  23. package/build/@package/@office/models/personalia/index.d.ts +1 -0
  24. package/build/mock/index.cjs +177 -31
  25. package/build/mock/index.mjs +179 -33
  26. package/build/mock/style.css +6 -2
  27. package/build/module.json +1 -1
  28. package/build/nuxt.json +1 -1
  29. package/build/nuxt.mjs +3 -0
  30. package/package.json +6 -6
@@ -13,6 +13,9 @@ export const config = OfficeInterfaces.define({
13
13
  "AttendanceManager",
14
14
  "AttendanceSupervisor",
15
15
  "AttendanceDelegate",
16
+ // Attendance Type
17
+ "AttendanceTypeCollection",
18
+ "AttendanceTypeSingle",
16
19
  // Check In
17
20
  "CheckInCollection",
18
21
  "CheckInSingle",
@@ -197,7 +197,7 @@ const rejectedAbsensi = async () => {
197
197
  />
198
198
 
199
199
  <OfficeRelation
200
- v-if="values.type == 'leave'"
200
+ v-if="values.type === 'leave'"
201
201
  v-model="values"
202
202
  :field="fields.delegateStaffs"
203
203
  :is-disabled="
@@ -215,10 +215,10 @@ const rejectedAbsensi = async () => {
215
215
 
216
216
  <NeonField
217
217
  v-if="
218
- values.type == 'dayOff' ||
219
- values.type == 'sick' ||
220
- values.type == 'permission' ||
221
- values.type == 'leave'
218
+ values.type === 'dayOff' ||
219
+ values.type === 'sick' ||
220
+ values.type === 'permission' ||
221
+ values.type === 'leave'
222
222
  "
223
223
  v-model="values.submittedAt"
224
224
  v-bind="fields.submittedAt"
@@ -10,6 +10,7 @@ import type {
10
10
  } from '@neutron.co.id/personalia-models'
11
11
  import { NeonTime } from '../../../../common'
12
12
  import { DateUtil } from '../../../../common/utils/util.date'
13
+ import { Query } from '@neon.id/query'
13
14
 
14
15
  const {
15
16
  fields,
@@ -90,7 +91,7 @@ function onStartedAtUpdate(date: any) {
90
91
  @update:model-value="onStartedAtUpdate"
91
92
  />
92
93
 
93
- <NeonField v-model="values.type" v-bind="fields.type" />
94
+ <OfficeRelation v-model="values" :field="fields.type" />
94
95
 
95
96
  <OfficeRelation v-model="values" :field="fields.decideStaff" />
96
97
 
@@ -0,0 +1,23 @@
1
+ <script setup lang="ts">
2
+ import { NeonCollection, useCollection } from '@neon.id/context'
3
+ import { OfficeCollectionTable } from '@neon.id/office'
4
+ import type {
5
+ Schema,
6
+ TPersonaliaAttendanceTypeModel,
7
+ } from '@neutron.co.id/personalia-models'
8
+
9
+ defineOptions({ name: 'AttendanceTypeCollection' })
10
+
11
+ const { resource, display, items, userQuery } = useCollection<
12
+ Schema.AttendanceType,
13
+ TPersonaliaAttendanceTypeModel
14
+ >()
15
+ </script>
16
+
17
+ <template>
18
+ <NeonCollection class="neu-attendance-type-collection">
19
+ <OfficeCollectionTable />
20
+ </NeonCollection>
21
+ </template>
22
+
23
+ <style scoped></style>
@@ -0,0 +1,7 @@
1
+ import type { Meta } from '@storybook/vue3';
2
+ import AttendanceTypeCollection from './AttendanceTypeCollection.vue';
3
+ declare const _default: Meta<typeof AttendanceTypeCollection>;
4
+ export default _default;
5
+ export declare const Main: import("@storybook/csf").StoryAnnotations<import("@storybook/vue3").VueRenderer, {}, {}>;
6
+ export declare const InsideContent: import("@storybook/csf").StoryAnnotations<import("@storybook/vue3").VueRenderer, {}, {}>;
7
+ export declare const $DefaultView: any;
@@ -0,0 +1,40 @@
1
+ import { decorateCollection, viewCollection, wrapCollection } from "@mock";
2
+ import { StoryUtil } from "@neon.id/story/helpers";
3
+ import { AttendanceTypeCollectionView } from "@neutron.co.id/operasional-modules";
4
+ import { AttendanceTypeModel } from "@neutron.co.id/personalia-models";
5
+ import { withOperasional } from "../../../../common/providers/index.mjs";
6
+ import AttendanceTypeCollection from "./AttendanceTypeCollection.vue";
7
+ export default {
8
+ title: "Office/AttendanceType/Collection",
9
+ tags: [],
10
+ component: AttendanceTypeCollection,
11
+ parameters: StoryUtil.parameters({
12
+ description: "`AttendanceTypeCollection`",
13
+ layout: "fullscreen",
14
+ controls: { exclude: ["colors"] },
15
+ backgrounds: { default: "light" }
16
+ })
17
+ };
18
+ export const Main = StoryUtil.story({
19
+ description: "Main.",
20
+ decorators: decorateCollection({
21
+ model: AttendanceTypeModel
22
+ })
23
+ });
24
+ export const InsideContent = StoryUtil.story({
25
+ description: "Inside content.",
26
+ render: wrapCollection(AttendanceTypeCollection),
27
+ decorators: decorateCollection({
28
+ model: AttendanceTypeModel
29
+ })
30
+ });
31
+ export const $DefaultView = viewCollection({
32
+ description: "Default view.",
33
+ component: AttendanceTypeCollectionView,
34
+ setup() {
35
+ withOperasional();
36
+ },
37
+ props: {
38
+ overrides: {}
39
+ }
40
+ });
@@ -0,0 +1 @@
1
+ export { default as AttendanceTypeCollection } from './AttendanceTypeCollection.vue';
@@ -0,0 +1 @@
1
+ export { default as AttendanceTypeCollection } from "./AttendanceTypeCollection.vue";
@@ -0,0 +1,8 @@
1
+ import type { Meta } from '@storybook/vue3';
2
+ import AttendanceTypeSingle from './AttendanceTypeSingle.vue';
3
+ declare const _default: Meta<typeof AttendanceTypeSingle>;
4
+ export default _default;
5
+ export declare const New: import("@storybook/csf").StoryAnnotations<import("@storybook/vue3").VueRenderer, {}, {}>;
6
+ export declare const Existing: import("@storybook/csf").StoryAnnotations<import("@storybook/vue3").VueRenderer, {}, {}>;
7
+ export declare const Content: import("@storybook/csf").StoryAnnotations<import("@storybook/vue3").VueRenderer, {}, {}>;
8
+ export declare const $DefaultView: any;
@@ -0,0 +1,47 @@
1
+ import { StoryUtil } from "@neon.id/story/helpers";
2
+ import { AttendanceTypeModel } from "@neutron.co.id/personalia-models";
3
+ import { AttendanceTypeSingleView } from "@neutron.co.id/operasional-modules";
4
+ import AttendanceTypeSingle from "./AttendanceTypeSingle.vue";
5
+ import { decorateSingle, viewSingle, wrapSingle } from "@mock";
6
+ export default {
7
+ title: "Office/AttendanceType/Single",
8
+ tags: [],
9
+ component: AttendanceTypeSingle,
10
+ parameters: StoryUtil.parameters({
11
+ description: "`AttendanceTypeSingle`",
12
+ layout: "fullscreen",
13
+ controls: { exclude: ["colors"] },
14
+ backgrounds: { default: "light" }
15
+ })
16
+ };
17
+ export const New = StoryUtil.story({
18
+ description: "New.",
19
+ decorators: decorateSingle({
20
+ model: AttendanceTypeModel
21
+ })
22
+ });
23
+ export const Existing = StoryUtil.story({
24
+ description: "Existing.",
25
+ args: { id: "" },
26
+ decorators: decorateSingle({
27
+ model: AttendanceTypeModel
28
+ // id: '___',
29
+ })
30
+ });
31
+ export const Content = StoryUtil.story({
32
+ description: "Inside content.",
33
+ render: wrapSingle(AttendanceTypeSingle),
34
+ args: { id: "" },
35
+ decorators: decorateSingle({
36
+ model: AttendanceTypeModel
37
+ // id: '___',
38
+ })
39
+ });
40
+ export const $DefaultView = viewSingle({
41
+ description: "Default view.",
42
+ component: AttendanceTypeSingleView,
43
+ props: {
44
+ // id: '___',
45
+ overrides: {}
46
+ }
47
+ });
@@ -0,0 +1,96 @@
1
+ <script setup lang="ts">
2
+ import { NeonSingle, useSingle } from '@neon.id/context'
3
+ import { NeonField, NeonForm, NeonCheck } from '@neon.id/form'
4
+ import { OfficeRelation, OfficeTab, OfficeTabs } from '@neon.id/office'
5
+ import { useToast } from '@neon.id/interfaces'
6
+ import type {
7
+ TPersonaliaAttendanceTypeModel,
8
+ Schema,
9
+ } from '@neutron.co.id/personalia-models'
10
+
11
+ const {
12
+ fields,
13
+ initialValues,
14
+ values,
15
+ isLoading,
16
+ isChanged,
17
+ isMain,
18
+ saveOne,
19
+ discardChanges,
20
+ } = useSingle<Schema.AttendanceType, TPersonaliaAttendanceTypeModel>()
21
+
22
+ const toast = useToast()
23
+
24
+ async function saveCheck() {
25
+ if (values.value.code === '') {
26
+ toast.push({
27
+ id: 'neu:attendance-type:code',
28
+ icon: 'warning',
29
+ content: 'Kode dari Tipe Absensi belum diisi!',
30
+ color: 'danger',
31
+ placement: 'bottom-right',
32
+ })
33
+ return
34
+ } else if (values.value.name !== '') {
35
+ await saveOne()
36
+ }
37
+ }
38
+ </script>
39
+
40
+ <template>
41
+ <NeonSingle class="neu-attendance-type-single">
42
+ <OfficeTabs :use-url="isMain">
43
+ <OfficeTab handle="info" icon="circle-info" title="Info">
44
+ <NeonForm
45
+ handle="info"
46
+ :initial-values="initialValues"
47
+ :is-loading="isLoading"
48
+ :is-changed="isChanged"
49
+ use-unsaved
50
+ @cancel="discardChanges"
51
+ @submit="saveCheck"
52
+ >
53
+ <NeonField v-model="values.name" v-bind="fields.name" />
54
+ <NeonField v-model="values.code" v-bind="fields.code" />
55
+ <NeonField v-model="values.leaveQuota" v-bind="fields.leaveQuota" />
56
+ <OfficeRelation v-model="values" :field="fields.branches" />
57
+ <NeonField
58
+ v-model="values.maxDurationDays"
59
+ v-bind="fields.maxDurationDays"
60
+ />
61
+ <NeonField
62
+ v-model="values.showLeaveQuota"
63
+ v-bind="fields.showLeaveQuota"
64
+ >
65
+ <template #input>
66
+ <NeonCheck
67
+ v-model="values.showLeaveQuota"
68
+ label="Tampilkan"
69
+ class="mt-2"
70
+ />
71
+ </template>
72
+ </NeonField>
73
+ <NeonField
74
+ v-model="values.showAttendanceType"
75
+ v-bind="fields.showAttendanceType"
76
+ >
77
+ <template #input>
78
+ <NeonCheck
79
+ v-model="values.showAttendanceType"
80
+ label="Tampilkan"
81
+ class="mt-2"
82
+ />
83
+ </template>
84
+ </NeonField>
85
+ <NeonField v-model="values.description" v-bind="fields.description" />
86
+ </NeonForm>
87
+ </OfficeTab>
88
+ </OfficeTabs>
89
+ </NeonSingle>
90
+ </template>
91
+
92
+ <style scoped>
93
+ .neu-AttendanceType-single {
94
+ @apply block;
95
+ }
96
+ </style>
@@ -0,0 +1 @@
1
+ export { default as AttendanceTypeSingle } from './AttendanceTypeSingle.vue';
@@ -0,0 +1 @@
1
+ export { default as AttendanceTypeSingle } from "./AttendanceTypeSingle.vue";
@@ -0,0 +1,2 @@
1
+ export * from './AttendanceTypeCollection';
2
+ export * from './AttendanceTypeSingle';
@@ -0,0 +1,2 @@
1
+ export * from "./AttendanceTypeCollection/index.mjs";
2
+ export * from "./AttendanceTypeSingle/index.mjs";
@@ -1,4 +1,5 @@
1
1
  export * from './attendance';
2
+ export * from './attendanceType';
2
3
  export * from './checkIn';
3
4
  export * from './plan';
4
5
  export * from './planType';
@@ -1,4 +1,5 @@
1
1
  export * from "./attendance/index.mjs";
2
+ export * from "./attendanceType/index.mjs";
2
3
  export * from "./checkIn/index.mjs";
3
4
  export * from "./plan/index.mjs";
4
5
  export * from "./planType/index.mjs";
@@ -0,0 +1,2 @@
1
+ declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
2
+ export default _default;
@@ -0,0 +1 @@
1
+ export { default as AttendanceTypeCollection } from './AttendanceTypeCollection.vue';
@@ -0,0 +1,2 @@
1
+ declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
2
+ export default _default;
@@ -0,0 +1 @@
1
+ export { default as AttendanceTypeSingle } from './AttendanceTypeSingle.vue';
@@ -0,0 +1,2 @@
1
+ export * from './AttendanceTypeCollection';
2
+ export * from './AttendanceTypeSingle';
@@ -1,4 +1,5 @@
1
1
  export * from './attendance';
2
+ export * from './attendanceType';
2
3
  export * from './checkIn';
3
4
  export * from './plan';
4
5
  export * from './planType';
@@ -1515,7 +1515,7 @@ const _hoisted_2$q = {
1515
1515
  key: 2,
1516
1516
  class: "section"
1517
1517
  };
1518
- const _sfc_main$1m = /* @__PURE__ */ vue.defineComponent({
1518
+ const _sfc_main$1o = /* @__PURE__ */ vue.defineComponent({
1519
1519
  ...{ name: "OperasionalIdentitas" },
1520
1520
  __name: "OperasionalIdentitas",
1521
1521
  props: {
@@ -1876,7 +1876,7 @@ const _export_sfc$1 = (sfc, props) => {
1876
1876
  }
1877
1877
  return target;
1878
1878
  };
1879
- const OperasionalIdentitas = /* @__PURE__ */ _export_sfc$1(_sfc_main$1m, [["__scopeId", "data-v-0befc683"]]);
1879
+ const OperasionalIdentitas = /* @__PURE__ */ _export_sfc$1(_sfc_main$1o, [["__scopeId", "data-v-0befc683"]]);
1880
1880
  var top = "top";
1881
1881
  var bottom = "bottom";
1882
1882
  var right = "right";
@@ -11434,7 +11434,7 @@ const _sfc_main$1$1 = /* @__PURE__ */ vue.defineComponent({
11434
11434
  };
11435
11435
  }
11436
11436
  });
11437
- const _sfc_main$1l = vue.defineComponent({
11437
+ const _sfc_main$1n = vue.defineComponent({
11438
11438
  inheritAttrs: false,
11439
11439
  emits,
11440
11440
  props: propsDef,
@@ -11453,7 +11453,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
11453
11453
  vue.createVNode(_component_DatePickerPopover, vue.normalizeProps(vue.guardReactiveProps(_ctx.$attrs)), null, 16)
11454
11454
  ], 64)) : (vue.openBlock(), vue.createBlock(_component_DatePickerBase, vue.normalizeProps(vue.mergeProps({ key: 1 }, _ctx.$attrs)), null, 16));
11455
11455
  }
11456
- const DatePicker = /* @__PURE__ */ _export_sfc(_sfc_main$1l, [["render", _sfc_render]]);
11456
+ const DatePicker = /* @__PURE__ */ _export_sfc(_sfc_main$1n, [["render", _sfc_render]]);
11457
11457
  dayjs.extend(durationPlugin);
11458
11458
  dayjs.extend(relativeTimePlugin);
11459
11459
  dayjs.extend(advancedFormat);
@@ -11481,7 +11481,7 @@ const _hoisted_2$o = /* @__PURE__ */ _withScopeId$4(() => /* @__PURE__ */ vue.cr
11481
11481
  const _hoisted_3$f = [
11482
11482
  _hoisted_2$o
11483
11483
  ];
11484
- const _sfc_main$1k = /* @__PURE__ */ vue.defineComponent({
11484
+ const _sfc_main$1m = /* @__PURE__ */ vue.defineComponent({
11485
11485
  __name: "NeonTime",
11486
11486
  props: {
11487
11487
  modelValue: {
@@ -11540,7 +11540,7 @@ const _sfc_main$1k = /* @__PURE__ */ vue.defineComponent({
11540
11540
  };
11541
11541
  }
11542
11542
  });
11543
- const NeonTime = /* @__PURE__ */ _export_sfc$1(_sfc_main$1k, [["__scopeId", "data-v-af42e627"]]);
11543
+ const NeonTime = /* @__PURE__ */ _export_sfc$1(_sfc_main$1m, [["__scopeId", "data-v-af42e627"]]);
11544
11544
  const useAttendanceStore = pinia.defineStore("neu:personalia:attendance", {
11545
11545
  state: () => ({
11546
11546
  isEntering: false,
@@ -12964,7 +12964,7 @@ const _hoisted_1$z = {
12964
12964
  key: 0,
12965
12965
  class: "office-single-sync"
12966
12966
  };
12967
- const _sfc_main$1j = /* @__PURE__ */ vue.defineComponent({
12967
+ const _sfc_main$1l = /* @__PURE__ */ vue.defineComponent({
12968
12968
  ...{ name: "OfficeSingleSync" },
12969
12969
  __name: "OfficeSingleSync",
12970
12970
  setup(__props) {
@@ -13004,9 +13004,9 @@ const _sfc_main$1j = /* @__PURE__ */ vue.defineComponent({
13004
13004
  };
13005
13005
  }
13006
13006
  });
13007
- const OfficeSingleSync = /* @__PURE__ */ _export_sfc$1(_sfc_main$1j, [["__scopeId", "data-v-3dbc6c7d"]]);
13007
+ const OfficeSingleSync = /* @__PURE__ */ _export_sfc$1(_sfc_main$1l, [["__scopeId", "data-v-3dbc6c7d"]]);
13008
13008
  const _hoisted_1$y = { class: "period-button" };
13009
- const _sfc_main$1i = /* @__PURE__ */ vue.defineComponent({
13009
+ const _sfc_main$1k = /* @__PURE__ */ vue.defineComponent({
13010
13010
  ...{ name: "PeriodButton" },
13011
13011
  __name: "PeriodButton",
13012
13012
  emits: ["update:period", "update:date", "sync"],
@@ -13054,9 +13054,9 @@ const _sfc_main$1i = /* @__PURE__ */ vue.defineComponent({
13054
13054
  };
13055
13055
  }
13056
13056
  });
13057
- const PeriodButton = /* @__PURE__ */ _export_sfc$1(_sfc_main$1i, [["__scopeId", "data-v-5f2c3308"]]);
13057
+ const PeriodButton = /* @__PURE__ */ _export_sfc$1(_sfc_main$1k, [["__scopeId", "data-v-5f2c3308"]]);
13058
13058
  const _hoisted_1$x = { id: "grading-actions" };
13059
- const _sfc_main$1h = /* @__PURE__ */ vue.defineComponent({
13059
+ const _sfc_main$1j = /* @__PURE__ */ vue.defineComponent({
13060
13060
  ...{ name: "NeutronImportButton" },
13061
13061
  __name: "NeutronImportButton",
13062
13062
  setup(__props) {
@@ -13083,7 +13083,7 @@ const _sfc_main$1h = /* @__PURE__ */ vue.defineComponent({
13083
13083
  };
13084
13084
  }
13085
13085
  });
13086
- const _sfc_main$1g = /* @__PURE__ */ vue.defineComponent({
13086
+ const _sfc_main$1i = /* @__PURE__ */ vue.defineComponent({
13087
13087
  ...{ name: "AttendanceCollection" },
13088
13088
  __name: "AttendanceCollection",
13089
13089
  props: {
@@ -13136,7 +13136,7 @@ const _sfc_main$1g = /* @__PURE__ */ vue.defineComponent({
13136
13136
  });
13137
13137
  const _hoisted_1$w = { class: "grid gap-2 sm:grid-cols-2" };
13138
13138
  const _hoisted_2$n = { class: "text-right text-fg-subdued text-sm" };
13139
- const _sfc_main$1f = /* @__PURE__ */ vue.defineComponent({
13139
+ const _sfc_main$1h = /* @__PURE__ */ vue.defineComponent({
13140
13140
  __name: "AttendanceSingle",
13141
13141
  setup(__props) {
13142
13142
  const {
@@ -13215,10 +13215,11 @@ const _sfc_main$1f = /* @__PURE__ */ vue.defineComponent({
13215
13215
  note: "Tanggal absensi."
13216
13216
  }
13217
13217
  }, { "onUpdate:modelValue": onStartedAtUpdate }), null, 16, ["model-value"])),
13218
- vue.createVNode(vue.unref(form.NeonField), vue.mergeProps({
13219
- modelValue: vue.unref(values).type,
13220
- "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => vue.unref(values).type = $event)
13221
- }, vue.unref(fields).type), null, 16, ["modelValue"]),
13218
+ vue.createVNode(vue.unref(office$1.OfficeRelation), {
13219
+ modelValue: vue.unref(values),
13220
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => vue.isRef(values) ? values.value = $event : null),
13221
+ field: vue.unref(fields).type
13222
+ }, null, 8, ["modelValue", "field"]),
13222
13223
  vue.createVNode(vue.unref(office$1.OfficeRelation), {
13223
13224
  modelValue: vue.unref(values),
13224
13225
  "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => vue.isRef(values) ? values.value = $event : null),
@@ -13313,7 +13314,7 @@ const _sfc_main$1f = /* @__PURE__ */ vue.defineComponent({
13313
13314
  };
13314
13315
  }
13315
13316
  });
13316
- const AttendanceSingle = /* @__PURE__ */ _export_sfc$1(_sfc_main$1f, [["__scopeId", "data-v-68aaccaa"]]);
13317
+ const AttendanceSingle = /* @__PURE__ */ _export_sfc$1(_sfc_main$1h, [["__scopeId", "data-v-0f0e0119"]]);
13317
13318
  const _hoisted_1$v = { class: "flex flex-wrap" };
13318
13319
  const _hoisted_2$m = { class: "mt-2" };
13319
13320
  const _hoisted_3$e = { class: "mt-2" };
@@ -13332,7 +13333,7 @@ const _hoisted_8$9 = {
13332
13333
  class: "grid gap-2 sm:grid-cols-2"
13333
13334
  };
13334
13335
  const _hoisted_9$9 = { class: "text-right text-fg-subdued text-sm" };
13335
- const _sfc_main$1e = /* @__PURE__ */ vue.defineComponent({
13336
+ const _sfc_main$1g = /* @__PURE__ */ vue.defineComponent({
13336
13337
  __name: "AttendanceManager",
13337
13338
  setup(__props) {
13338
13339
  var _a;
@@ -13498,7 +13499,7 @@ const _sfc_main$1e = /* @__PURE__ */ vue.defineComponent({
13498
13499
  field: vue.unref(fields).decideStaff,
13499
13500
  "is-disabled": vue.unref(values).status == "approved" || vue.unref(values).status == "rejected"
13500
13501
  }, null, 8, ["modelValue", "field", "is-disabled"]),
13501
- vue.unref(values).type == "leave" ? (vue.openBlock(), vue.createBlock(vue.unref(office$1.OfficeRelation), {
13502
+ vue.unref(values).type === "leave" ? (vue.openBlock(), vue.createBlock(vue.unref(office$1.OfficeRelation), {
13502
13503
  key: 0,
13503
13504
  modelValue: vue.unref(values),
13504
13505
  "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => vue.isRef(values) ? values.value = $event : null),
@@ -13515,7 +13516,7 @@ const _sfc_main$1e = /* @__PURE__ */ vue.defineComponent({
13515
13516
  "is-dashed": "",
13516
13517
  label: "Keterangan"
13517
13518
  })) : vue.createCommentVNode("v-if", true),
13518
- vue.unref(values).type == "dayOff" || vue.unref(values).type == "sick" || vue.unref(values).type == "permission" || vue.unref(values).type == "leave" ? (vue.openBlock(), vue.createBlock(vue.unref(form.NeonField), vue.mergeProps({
13519
+ vue.unref(values).type === "dayOff" || vue.unref(values).type === "sick" || vue.unref(values).type === "permission" || vue.unref(values).type === "leave" ? (vue.openBlock(), vue.createBlock(vue.unref(form.NeonField), vue.mergeProps({
13519
13520
  key: 3,
13520
13521
  modelValue: vue.unref(values).submittedAt,
13521
13522
  "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => vue.unref(values).submittedAt = $event)
@@ -13695,7 +13696,7 @@ const _sfc_main$1e = /* @__PURE__ */ vue.defineComponent({
13695
13696
  };
13696
13697
  }
13697
13698
  });
13698
- const AttendanceManager = /* @__PURE__ */ _export_sfc$1(_sfc_main$1e, [["__scopeId", "data-v-f59b58f4"]]);
13699
+ const AttendanceManager = /* @__PURE__ */ _export_sfc$1(_sfc_main$1g, [["__scopeId", "data-v-2957df27"]]);
13699
13700
  const _hoisted_1$u = {
13700
13701
  key: 1,
13701
13702
  class: "flex flex-wrap"
@@ -13718,7 +13719,7 @@ const _hoisted_9$8 = {
13718
13719
  class: "grid gap-2 sm:grid-cols-2"
13719
13720
  };
13720
13721
  const _hoisted_10$8 = { class: "text-right text-fg-subdued text-sm" };
13721
- const _sfc_main$1d = /* @__PURE__ */ vue.defineComponent({
13722
+ const _sfc_main$1f = /* @__PURE__ */ vue.defineComponent({
13722
13723
  __name: "AttendanceStaff",
13723
13724
  setup(__props) {
13724
13725
  var _a;
@@ -14252,7 +14253,7 @@ const _sfc_main$1d = /* @__PURE__ */ vue.defineComponent({
14252
14253
  };
14253
14254
  }
14254
14255
  });
14255
- const AttendanceStaff = /* @__PURE__ */ _export_sfc$1(_sfc_main$1d, [["__scopeId", "data-v-d413adf3"]]);
14256
+ const AttendanceStaff = /* @__PURE__ */ _export_sfc$1(_sfc_main$1f, [["__scopeId", "data-v-d413adf3"]]);
14256
14257
  const _hoisted_1$t = { class: "flex flex-wrap" };
14257
14258
  const _hoisted_2$k = { class: "mt-2" };
14258
14259
  const _hoisted_3$c = { class: "mt-2" };
@@ -14273,7 +14274,7 @@ const _hoisted_10$7 = {
14273
14274
  class: "grid gap-2 sm:grid-cols-2"
14274
14275
  };
14275
14276
  const _hoisted_11$7 = { class: "text-right text-fg-subdued text-sm" };
14276
- const _sfc_main$1c = /* @__PURE__ */ vue.defineComponent({
14277
+ const _sfc_main$1e = /* @__PURE__ */ vue.defineComponent({
14277
14278
  __name: "AttendanceSupervisor",
14278
14279
  setup(__props) {
14279
14280
  var _a;
@@ -14770,8 +14771,8 @@ const _sfc_main$1c = /* @__PURE__ */ vue.defineComponent({
14770
14771
  };
14771
14772
  }
14772
14773
  });
14773
- const AttendanceSupervisor = /* @__PURE__ */ _export_sfc$1(_sfc_main$1c, [["__scopeId", "data-v-07766872"]]);
14774
- const _sfc_main$1b = /* @__PURE__ */ vue.defineComponent({
14774
+ const AttendanceSupervisor = /* @__PURE__ */ _export_sfc$1(_sfc_main$1e, [["__scopeId", "data-v-07766872"]]);
14775
+ const _sfc_main$1d = /* @__PURE__ */ vue.defineComponent({
14775
14776
  __name: "AttendanceDelegate",
14776
14777
  setup(__props) {
14777
14778
  var _a;
@@ -14933,7 +14934,147 @@ const _sfc_main$1b = /* @__PURE__ */ vue.defineComponent({
14933
14934
  };
14934
14935
  }
14935
14936
  });
14936
- const AttendanceDelegate = /* @__PURE__ */ _export_sfc$1(_sfc_main$1b, [["__scopeId", "data-v-538fa6fb"]]);
14937
+ const AttendanceDelegate = /* @__PURE__ */ _export_sfc$1(_sfc_main$1d, [["__scopeId", "data-v-538fa6fb"]]);
14938
+ const _sfc_main$1c = /* @__PURE__ */ vue.defineComponent({
14939
+ ...{ name: "AttendanceTypeCollection" },
14940
+ __name: "AttendanceTypeCollection",
14941
+ setup(__props) {
14942
+ context.useCollection();
14943
+ return (_ctx, _cache) => {
14944
+ return vue.openBlock(), vue.createBlock(vue.unref(context.NeonCollection), { class: "neu-attendance-type-collection" }, {
14945
+ default: vue.withCtx(() => [
14946
+ vue.createVNode(vue.unref(office$1.OfficeCollectionTable))
14947
+ ]),
14948
+ _: 1
14949
+ /* STABLE */
14950
+ });
14951
+ };
14952
+ }
14953
+ });
14954
+ const _sfc_main$1b = /* @__PURE__ */ vue.defineComponent({
14955
+ __name: "AttendanceTypeSingle",
14956
+ setup(__props) {
14957
+ const {
14958
+ fields,
14959
+ initialValues,
14960
+ values,
14961
+ isLoading,
14962
+ isChanged,
14963
+ isMain,
14964
+ saveOne,
14965
+ discardChanges
14966
+ } = context.useSingle();
14967
+ const toast = interfaces.useToast();
14968
+ async function saveCheck() {
14969
+ if (values.value.code === "") {
14970
+ toast.push({
14971
+ id: "neu:attendance-type:code",
14972
+ icon: "warning",
14973
+ content: "Kode dari Tipe Absensi belum diisi!",
14974
+ color: "danger",
14975
+ placement: "bottom-right"
14976
+ });
14977
+ return;
14978
+ } else if (values.value.name !== "") {
14979
+ await saveOne();
14980
+ }
14981
+ }
14982
+ return (_ctx, _cache) => {
14983
+ return vue.openBlock(), vue.createBlock(vue.unref(context.NeonSingle), { class: "neu-attendance-type-single" }, {
14984
+ default: vue.withCtx(() => [
14985
+ vue.createVNode(vue.unref(office$1.OfficeTabs), { "use-url": vue.unref(isMain) }, {
14986
+ default: vue.withCtx(() => [
14987
+ vue.createVNode(vue.unref(office$1.OfficeTab), {
14988
+ handle: "info",
14989
+ icon: "circle-info",
14990
+ title: "Info"
14991
+ }, {
14992
+ default: vue.withCtx(() => [
14993
+ vue.createVNode(vue.unref(form.NeonForm), {
14994
+ handle: "info",
14995
+ "initial-values": vue.unref(initialValues),
14996
+ "is-loading": vue.unref(isLoading),
14997
+ "is-changed": vue.unref(isChanged),
14998
+ "use-unsaved": "",
14999
+ onCancel: vue.unref(discardChanges),
15000
+ onSubmit: saveCheck
15001
+ }, {
15002
+ default: vue.withCtx(() => [
15003
+ vue.createVNode(vue.unref(form.NeonField), vue.mergeProps({
15004
+ modelValue: vue.unref(values).name,
15005
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => vue.unref(values).name = $event)
15006
+ }, vue.unref(fields).name), null, 16, ["modelValue"]),
15007
+ vue.createVNode(vue.unref(form.NeonField), vue.mergeProps({
15008
+ modelValue: vue.unref(values).code,
15009
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => vue.unref(values).code = $event)
15010
+ }, vue.unref(fields).code), null, 16, ["modelValue"]),
15011
+ vue.createVNode(vue.unref(form.NeonField), vue.mergeProps({
15012
+ modelValue: vue.unref(values).leaveQuota,
15013
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => vue.unref(values).leaveQuota = $event)
15014
+ }, vue.unref(fields).leaveQuota), null, 16, ["modelValue"]),
15015
+ vue.createVNode(vue.unref(office$1.OfficeRelation), {
15016
+ modelValue: vue.unref(values),
15017
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => vue.isRef(values) ? values.value = $event : null),
15018
+ field: vue.unref(fields).branches
15019
+ }, null, 8, ["modelValue", "field"]),
15020
+ vue.createVNode(vue.unref(form.NeonField), vue.mergeProps({
15021
+ modelValue: vue.unref(values).maxDurationDays,
15022
+ "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => vue.unref(values).maxDurationDays = $event)
15023
+ }, vue.unref(fields).maxDurationDays), null, 16, ["modelValue"]),
15024
+ vue.createVNode(vue.unref(form.NeonField), vue.mergeProps({
15025
+ modelValue: vue.unref(values).showLeaveQuota,
15026
+ "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => vue.unref(values).showLeaveQuota = $event)
15027
+ }, vue.unref(fields).showLeaveQuota), {
15028
+ input: vue.withCtx(() => [
15029
+ vue.createVNode(vue.unref(form.NeonCheck), {
15030
+ modelValue: vue.unref(values).showLeaveQuota,
15031
+ "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => vue.unref(values).showLeaveQuota = $event),
15032
+ label: "Tampilkan",
15033
+ class: "mt-2"
15034
+ }, null, 8, ["modelValue"])
15035
+ ]),
15036
+ _: 1
15037
+ /* STABLE */
15038
+ }, 16, ["modelValue"]),
15039
+ vue.createVNode(vue.unref(form.NeonField), vue.mergeProps({
15040
+ modelValue: vue.unref(values).showAttendanceType,
15041
+ "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => vue.unref(values).showAttendanceType = $event)
15042
+ }, vue.unref(fields).showAttendanceType), {
15043
+ input: vue.withCtx(() => [
15044
+ vue.createVNode(vue.unref(form.NeonCheck), {
15045
+ modelValue: vue.unref(values).showAttendanceType,
15046
+ "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => vue.unref(values).showAttendanceType = $event),
15047
+ label: "Tampilkan",
15048
+ class: "mt-2"
15049
+ }, null, 8, ["modelValue"])
15050
+ ]),
15051
+ _: 1
15052
+ /* STABLE */
15053
+ }, 16, ["modelValue"]),
15054
+ vue.createVNode(vue.unref(form.NeonField), vue.mergeProps({
15055
+ modelValue: vue.unref(values).description,
15056
+ "onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => vue.unref(values).description = $event)
15057
+ }, vue.unref(fields).description), null, 16, ["modelValue"])
15058
+ ]),
15059
+ _: 1
15060
+ /* STABLE */
15061
+ }, 8, ["initial-values", "is-loading", "is-changed", "onCancel"])
15062
+ ]),
15063
+ _: 1
15064
+ /* STABLE */
15065
+ })
15066
+ ]),
15067
+ _: 1
15068
+ /* STABLE */
15069
+ }, 8, ["use-url"])
15070
+ ]),
15071
+ _: 1
15072
+ /* STABLE */
15073
+ });
15074
+ };
15075
+ }
15076
+ });
15077
+ const AttendanceTypeSingle = /* @__PURE__ */ _export_sfc$1(_sfc_main$1b, [["__scopeId", "data-v-776e6c14"]]);
14937
15078
  const _withScopeId$3 = (n) => (vue.pushScopeId("data-v-802b3ded"), n = n(), vue.popScopeId(), n);
14938
15079
  const _hoisted_1$s = { id: "view-checkIns" };
14939
15080
  const _hoisted_2$j = { class: "summary" };
@@ -25923,7 +26064,7 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
25923
26064
  vue.createElementVNode("div", _hoisted_6$1, [
25924
26065
  vue.createVNode(vue.unref(office$1.OfficeCollectionQuery), { displays: __props.displays }, {
25925
26066
  default: vue.withCtx(() => [
25926
- vue.unref(permit).isAny(["neu:shiftCabang", "neu:admin"]) ? (vue.openBlock(), vue.createBlock(vue.unref(_sfc_main$1h), { key: 0 })) : vue.createCommentVNode("v-if", true),
26067
+ vue.unref(permit).isAny(["neu:shiftCabang", "neu:admin"]) ? (vue.openBlock(), vue.createBlock(vue.unref(_sfc_main$1j), { key: 0 })) : vue.createCommentVNode("v-if", true),
25927
26068
  vue.createVNode(vue.unref(office$1.OfficeCollectionOperation), {
25928
26069
  "is-main": "",
25929
26070
  path: __props.path
@@ -26497,12 +26638,14 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
26497
26638
  const ShiftStaffImport = /* @__PURE__ */ _export_sfc$1(_sfc_main, [["__scopeId", "data-v-818a1e6a"]]);
26498
26639
  const all = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
26499
26640
  __proto__: null,
26500
- AttendanceCollection: _sfc_main$1g,
26641
+ AttendanceCollection: _sfc_main$1i,
26501
26642
  AttendanceDelegate,
26502
26643
  AttendanceManager,
26503
26644
  AttendanceSingle,
26504
26645
  AttendanceStaff,
26505
26646
  AttendanceSupervisor,
26647
+ AttendanceTypeCollection: _sfc_main$1c,
26648
+ AttendanceTypeSingle,
26506
26649
  CheckInAccess,
26507
26650
  CheckInCollection: _sfc_main$13,
26508
26651
  CheckInExternal,
@@ -26514,7 +26657,7 @@ const all = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty(
26514
26657
  CheckInSupervisor,
26515
26658
  NOperasional: operasional_types,
26516
26659
  NeonTime,
26517
- NeutronImportButton: _sfc_main$1h,
26660
+ NeutronImportButton: _sfc_main$1j,
26518
26661
  OfficeSingleSync,
26519
26662
  OperasionalIdentitas,
26520
26663
  PeriodButton,
@@ -26602,6 +26745,9 @@ const config = helpers.OfficeInterfaces.define({
26602
26745
  "AttendanceManager",
26603
26746
  "AttendanceSupervisor",
26604
26747
  "AttendanceDelegate",
26748
+ // Attendance Type
26749
+ "AttendanceTypeCollection",
26750
+ "AttendanceTypeSingle",
26605
26751
  // Check In
26606
26752
  "CheckInCollection",
26607
26753
  "CheckInSingle",
@@ -3,8 +3,8 @@ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { en
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
4
  import { NeonEditorPlugin } from "@neon.id/editor";
5
5
  import { NeonFieldPlugin } from "@neon.id/field";
6
- import { NeonField, NeonForm, NeonFields, NeonCheck, NeonFormPlugin } from "@neon.id/form";
7
- import { NeonAvatar, NeonDivider, NeonModal, NeonSheet, useToastStore, NeonButton, NeonAlert, NeonSlider, NeonSlide, NeonStat, NeonInfo, NeonCopy, NeonPart, registerDirectives, registerIconComponents } from "@neon.id/interfaces";
6
+ import { NeonField, NeonForm, NeonCheck, NeonFields, NeonFormPlugin } from "@neon.id/form";
7
+ import { NeonAvatar, NeonDivider, NeonModal, NeonSheet, useToastStore, NeonButton, NeonAlert, useToast, NeonSlider, NeonSlide, NeonStat, NeonInfo, NeonCopy, NeonPart, registerDirectives, registerIconComponents } from "@neon.id/interfaces";
8
8
  import { OfficeCollectionTable, OfficeCollectionCalendar, OfficeTabs, OfficeTab, OfficeRelation, OfficeContent, OfficePeekSingle, OfficeCollectionQuery, OfficeCollectionOperation, OfficeCollectionRelated, OfficeCollectionContent, NeonOfficePlugin } from "@neon.id/office";
9
9
  import { withRelation, NeonRelationSheet, NeonRelationPlugin } from "@neon.id/relation";
10
10
  import { defineComponent, ref, computed, h, watch, resolveComponent, openBlock, createElementBlock, createVNode, withCtx, createBlock, unref, mergeProps, createCommentVNode, reactive, onMounted, onUnmounted, toRefs, inject, watchEffect, provide, nextTick, resolveDynamicComponent, normalizeProps, renderSlot, normalizeClass, createElementVNode, toDisplayString, Fragment, renderList, normalizeStyle, withKeys, withDirectives, toRef, guardReactiveProps, createTextVNode, isRef, Transition, resolveDirective, toHandlers, withModifiers, pushScopeId, popScopeId, onBeforeUnmount, vShow } from "vue";
@@ -1496,7 +1496,7 @@ const _hoisted_2$q = {
1496
1496
  key: 2,
1497
1497
  class: "section"
1498
1498
  };
1499
- const _sfc_main$1m = /* @__PURE__ */ defineComponent({
1499
+ const _sfc_main$1o = /* @__PURE__ */ defineComponent({
1500
1500
  ...{ name: "OperasionalIdentitas" },
1501
1501
  __name: "OperasionalIdentitas",
1502
1502
  props: {
@@ -1857,7 +1857,7 @@ const _export_sfc$1 = (sfc, props) => {
1857
1857
  }
1858
1858
  return target;
1859
1859
  };
1860
- const OperasionalIdentitas = /* @__PURE__ */ _export_sfc$1(_sfc_main$1m, [["__scopeId", "data-v-0befc683"]]);
1860
+ const OperasionalIdentitas = /* @__PURE__ */ _export_sfc$1(_sfc_main$1o, [["__scopeId", "data-v-0befc683"]]);
1861
1861
  var top = "top";
1862
1862
  var bottom = "bottom";
1863
1863
  var right = "right";
@@ -11415,7 +11415,7 @@ const _sfc_main$1$1 = /* @__PURE__ */ defineComponent({
11415
11415
  };
11416
11416
  }
11417
11417
  });
11418
- const _sfc_main$1l = defineComponent({
11418
+ const _sfc_main$1n = defineComponent({
11419
11419
  inheritAttrs: false,
11420
11420
  emits,
11421
11421
  props: propsDef,
@@ -11434,7 +11434,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
11434
11434
  createVNode(_component_DatePickerPopover, normalizeProps(guardReactiveProps(_ctx.$attrs)), null, 16)
11435
11435
  ], 64)) : (openBlock(), createBlock(_component_DatePickerBase, normalizeProps(mergeProps({ key: 1 }, _ctx.$attrs)), null, 16));
11436
11436
  }
11437
- const DatePicker = /* @__PURE__ */ _export_sfc(_sfc_main$1l, [["render", _sfc_render]]);
11437
+ const DatePicker = /* @__PURE__ */ _export_sfc(_sfc_main$1n, [["render", _sfc_render]]);
11438
11438
  dayjs.extend(durationPlugin);
11439
11439
  dayjs.extend(relativeTimePlugin);
11440
11440
  dayjs.extend(advancedFormat);
@@ -11462,7 +11462,7 @@ const _hoisted_2$o = /* @__PURE__ */ _withScopeId$4(() => /* @__PURE__ */ create
11462
11462
  const _hoisted_3$f = [
11463
11463
  _hoisted_2$o
11464
11464
  ];
11465
- const _sfc_main$1k = /* @__PURE__ */ defineComponent({
11465
+ const _sfc_main$1m = /* @__PURE__ */ defineComponent({
11466
11466
  __name: "NeonTime",
11467
11467
  props: {
11468
11468
  modelValue: {
@@ -11521,7 +11521,7 @@ const _sfc_main$1k = /* @__PURE__ */ defineComponent({
11521
11521
  };
11522
11522
  }
11523
11523
  });
11524
- const NeonTime = /* @__PURE__ */ _export_sfc$1(_sfc_main$1k, [["__scopeId", "data-v-af42e627"]]);
11524
+ const NeonTime = /* @__PURE__ */ _export_sfc$1(_sfc_main$1m, [["__scopeId", "data-v-af42e627"]]);
11525
11525
  const useAttendanceStore = defineStore("neu:personalia:attendance", {
11526
11526
  state: () => ({
11527
11527
  isEntering: false,
@@ -12945,7 +12945,7 @@ const _hoisted_1$z = {
12945
12945
  key: 0,
12946
12946
  class: "office-single-sync"
12947
12947
  };
12948
- const _sfc_main$1j = /* @__PURE__ */ defineComponent({
12948
+ const _sfc_main$1l = /* @__PURE__ */ defineComponent({
12949
12949
  ...{ name: "OfficeSingleSync" },
12950
12950
  __name: "OfficeSingleSync",
12951
12951
  setup(__props) {
@@ -12985,9 +12985,9 @@ const _sfc_main$1j = /* @__PURE__ */ defineComponent({
12985
12985
  };
12986
12986
  }
12987
12987
  });
12988
- const OfficeSingleSync = /* @__PURE__ */ _export_sfc$1(_sfc_main$1j, [["__scopeId", "data-v-3dbc6c7d"]]);
12988
+ const OfficeSingleSync = /* @__PURE__ */ _export_sfc$1(_sfc_main$1l, [["__scopeId", "data-v-3dbc6c7d"]]);
12989
12989
  const _hoisted_1$y = { class: "period-button" };
12990
- const _sfc_main$1i = /* @__PURE__ */ defineComponent({
12990
+ const _sfc_main$1k = /* @__PURE__ */ defineComponent({
12991
12991
  ...{ name: "PeriodButton" },
12992
12992
  __name: "PeriodButton",
12993
12993
  emits: ["update:period", "update:date", "sync"],
@@ -13035,9 +13035,9 @@ const _sfc_main$1i = /* @__PURE__ */ defineComponent({
13035
13035
  };
13036
13036
  }
13037
13037
  });
13038
- const PeriodButton = /* @__PURE__ */ _export_sfc$1(_sfc_main$1i, [["__scopeId", "data-v-5f2c3308"]]);
13038
+ const PeriodButton = /* @__PURE__ */ _export_sfc$1(_sfc_main$1k, [["__scopeId", "data-v-5f2c3308"]]);
13039
13039
  const _hoisted_1$x = { id: "grading-actions" };
13040
- const _sfc_main$1h = /* @__PURE__ */ defineComponent({
13040
+ const _sfc_main$1j = /* @__PURE__ */ defineComponent({
13041
13041
  ...{ name: "NeutronImportButton" },
13042
13042
  __name: "NeutronImportButton",
13043
13043
  setup(__props) {
@@ -13064,7 +13064,7 @@ const _sfc_main$1h = /* @__PURE__ */ defineComponent({
13064
13064
  };
13065
13065
  }
13066
13066
  });
13067
- const _sfc_main$1g = /* @__PURE__ */ defineComponent({
13067
+ const _sfc_main$1i = /* @__PURE__ */ defineComponent({
13068
13068
  ...{ name: "AttendanceCollection" },
13069
13069
  __name: "AttendanceCollection",
13070
13070
  props: {
@@ -13117,7 +13117,7 @@ const _sfc_main$1g = /* @__PURE__ */ defineComponent({
13117
13117
  });
13118
13118
  const _hoisted_1$w = { class: "grid gap-2 sm:grid-cols-2" };
13119
13119
  const _hoisted_2$n = { class: "text-right text-fg-subdued text-sm" };
13120
- const _sfc_main$1f = /* @__PURE__ */ defineComponent({
13120
+ const _sfc_main$1h = /* @__PURE__ */ defineComponent({
13121
13121
  __name: "AttendanceSingle",
13122
13122
  setup(__props) {
13123
13123
  const {
@@ -13196,10 +13196,11 @@ const _sfc_main$1f = /* @__PURE__ */ defineComponent({
13196
13196
  note: "Tanggal absensi."
13197
13197
  }
13198
13198
  }, { "onUpdate:modelValue": onStartedAtUpdate }), null, 16, ["model-value"])),
13199
- createVNode(unref(NeonField), mergeProps({
13200
- modelValue: unref(values).type,
13201
- "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => unref(values).type = $event)
13202
- }, unref(fields).type), null, 16, ["modelValue"]),
13199
+ createVNode(unref(OfficeRelation), {
13200
+ modelValue: unref(values),
13201
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => isRef(values) ? values.value = $event : null),
13202
+ field: unref(fields).type
13203
+ }, null, 8, ["modelValue", "field"]),
13203
13204
  createVNode(unref(OfficeRelation), {
13204
13205
  modelValue: unref(values),
13205
13206
  "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => isRef(values) ? values.value = $event : null),
@@ -13294,7 +13295,7 @@ const _sfc_main$1f = /* @__PURE__ */ defineComponent({
13294
13295
  };
13295
13296
  }
13296
13297
  });
13297
- const AttendanceSingle = /* @__PURE__ */ _export_sfc$1(_sfc_main$1f, [["__scopeId", "data-v-68aaccaa"]]);
13298
+ const AttendanceSingle = /* @__PURE__ */ _export_sfc$1(_sfc_main$1h, [["__scopeId", "data-v-0f0e0119"]]);
13298
13299
  const _hoisted_1$v = { class: "flex flex-wrap" };
13299
13300
  const _hoisted_2$m = { class: "mt-2" };
13300
13301
  const _hoisted_3$e = { class: "mt-2" };
@@ -13313,7 +13314,7 @@ const _hoisted_8$9 = {
13313
13314
  class: "grid gap-2 sm:grid-cols-2"
13314
13315
  };
13315
13316
  const _hoisted_9$9 = { class: "text-right text-fg-subdued text-sm" };
13316
- const _sfc_main$1e = /* @__PURE__ */ defineComponent({
13317
+ const _sfc_main$1g = /* @__PURE__ */ defineComponent({
13317
13318
  __name: "AttendanceManager",
13318
13319
  setup(__props) {
13319
13320
  var _a;
@@ -13479,7 +13480,7 @@ const _sfc_main$1e = /* @__PURE__ */ defineComponent({
13479
13480
  field: unref(fields).decideStaff,
13480
13481
  "is-disabled": unref(values).status == "approved" || unref(values).status == "rejected"
13481
13482
  }, null, 8, ["modelValue", "field", "is-disabled"]),
13482
- unref(values).type == "leave" ? (openBlock(), createBlock(unref(OfficeRelation), {
13483
+ unref(values).type === "leave" ? (openBlock(), createBlock(unref(OfficeRelation), {
13483
13484
  key: 0,
13484
13485
  modelValue: unref(values),
13485
13486
  "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => isRef(values) ? values.value = $event : null),
@@ -13496,7 +13497,7 @@ const _sfc_main$1e = /* @__PURE__ */ defineComponent({
13496
13497
  "is-dashed": "",
13497
13498
  label: "Keterangan"
13498
13499
  })) : createCommentVNode("v-if", true),
13499
- unref(values).type == "dayOff" || unref(values).type == "sick" || unref(values).type == "permission" || unref(values).type == "leave" ? (openBlock(), createBlock(unref(NeonField), mergeProps({
13500
+ unref(values).type === "dayOff" || unref(values).type === "sick" || unref(values).type === "permission" || unref(values).type === "leave" ? (openBlock(), createBlock(unref(NeonField), mergeProps({
13500
13501
  key: 3,
13501
13502
  modelValue: unref(values).submittedAt,
13502
13503
  "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => unref(values).submittedAt = $event)
@@ -13676,7 +13677,7 @@ const _sfc_main$1e = /* @__PURE__ */ defineComponent({
13676
13677
  };
13677
13678
  }
13678
13679
  });
13679
- const AttendanceManager = /* @__PURE__ */ _export_sfc$1(_sfc_main$1e, [["__scopeId", "data-v-f59b58f4"]]);
13680
+ const AttendanceManager = /* @__PURE__ */ _export_sfc$1(_sfc_main$1g, [["__scopeId", "data-v-2957df27"]]);
13680
13681
  const _hoisted_1$u = {
13681
13682
  key: 1,
13682
13683
  class: "flex flex-wrap"
@@ -13699,7 +13700,7 @@ const _hoisted_9$8 = {
13699
13700
  class: "grid gap-2 sm:grid-cols-2"
13700
13701
  };
13701
13702
  const _hoisted_10$8 = { class: "text-right text-fg-subdued text-sm" };
13702
- const _sfc_main$1d = /* @__PURE__ */ defineComponent({
13703
+ const _sfc_main$1f = /* @__PURE__ */ defineComponent({
13703
13704
  __name: "AttendanceStaff",
13704
13705
  setup(__props) {
13705
13706
  var _a;
@@ -14233,7 +14234,7 @@ const _sfc_main$1d = /* @__PURE__ */ defineComponent({
14233
14234
  };
14234
14235
  }
14235
14236
  });
14236
- const AttendanceStaff = /* @__PURE__ */ _export_sfc$1(_sfc_main$1d, [["__scopeId", "data-v-d413adf3"]]);
14237
+ const AttendanceStaff = /* @__PURE__ */ _export_sfc$1(_sfc_main$1f, [["__scopeId", "data-v-d413adf3"]]);
14237
14238
  const _hoisted_1$t = { class: "flex flex-wrap" };
14238
14239
  const _hoisted_2$k = { class: "mt-2" };
14239
14240
  const _hoisted_3$c = { class: "mt-2" };
@@ -14254,7 +14255,7 @@ const _hoisted_10$7 = {
14254
14255
  class: "grid gap-2 sm:grid-cols-2"
14255
14256
  };
14256
14257
  const _hoisted_11$7 = { class: "text-right text-fg-subdued text-sm" };
14257
- const _sfc_main$1c = /* @__PURE__ */ defineComponent({
14258
+ const _sfc_main$1e = /* @__PURE__ */ defineComponent({
14258
14259
  __name: "AttendanceSupervisor",
14259
14260
  setup(__props) {
14260
14261
  var _a;
@@ -14751,8 +14752,8 @@ const _sfc_main$1c = /* @__PURE__ */ defineComponent({
14751
14752
  };
14752
14753
  }
14753
14754
  });
14754
- const AttendanceSupervisor = /* @__PURE__ */ _export_sfc$1(_sfc_main$1c, [["__scopeId", "data-v-07766872"]]);
14755
- const _sfc_main$1b = /* @__PURE__ */ defineComponent({
14755
+ const AttendanceSupervisor = /* @__PURE__ */ _export_sfc$1(_sfc_main$1e, [["__scopeId", "data-v-07766872"]]);
14756
+ const _sfc_main$1d = /* @__PURE__ */ defineComponent({
14756
14757
  __name: "AttendanceDelegate",
14757
14758
  setup(__props) {
14758
14759
  var _a;
@@ -14914,7 +14915,147 @@ const _sfc_main$1b = /* @__PURE__ */ defineComponent({
14914
14915
  };
14915
14916
  }
14916
14917
  });
14917
- const AttendanceDelegate = /* @__PURE__ */ _export_sfc$1(_sfc_main$1b, [["__scopeId", "data-v-538fa6fb"]]);
14918
+ const AttendanceDelegate = /* @__PURE__ */ _export_sfc$1(_sfc_main$1d, [["__scopeId", "data-v-538fa6fb"]]);
14919
+ const _sfc_main$1c = /* @__PURE__ */ defineComponent({
14920
+ ...{ name: "AttendanceTypeCollection" },
14921
+ __name: "AttendanceTypeCollection",
14922
+ setup(__props) {
14923
+ useCollection();
14924
+ return (_ctx, _cache) => {
14925
+ return openBlock(), createBlock(unref(NeonCollection), { class: "neu-attendance-type-collection" }, {
14926
+ default: withCtx(() => [
14927
+ createVNode(unref(OfficeCollectionTable))
14928
+ ]),
14929
+ _: 1
14930
+ /* STABLE */
14931
+ });
14932
+ };
14933
+ }
14934
+ });
14935
+ const _sfc_main$1b = /* @__PURE__ */ defineComponent({
14936
+ __name: "AttendanceTypeSingle",
14937
+ setup(__props) {
14938
+ const {
14939
+ fields,
14940
+ initialValues,
14941
+ values,
14942
+ isLoading,
14943
+ isChanged,
14944
+ isMain,
14945
+ saveOne,
14946
+ discardChanges
14947
+ } = useSingle();
14948
+ const toast = useToast();
14949
+ async function saveCheck() {
14950
+ if (values.value.code === "") {
14951
+ toast.push({
14952
+ id: "neu:attendance-type:code",
14953
+ icon: "warning",
14954
+ content: "Kode dari Tipe Absensi belum diisi!",
14955
+ color: "danger",
14956
+ placement: "bottom-right"
14957
+ });
14958
+ return;
14959
+ } else if (values.value.name !== "") {
14960
+ await saveOne();
14961
+ }
14962
+ }
14963
+ return (_ctx, _cache) => {
14964
+ return openBlock(), createBlock(unref(NeonSingle), { class: "neu-attendance-type-single" }, {
14965
+ default: withCtx(() => [
14966
+ createVNode(unref(OfficeTabs), { "use-url": unref(isMain) }, {
14967
+ default: withCtx(() => [
14968
+ createVNode(unref(OfficeTab), {
14969
+ handle: "info",
14970
+ icon: "circle-info",
14971
+ title: "Info"
14972
+ }, {
14973
+ default: withCtx(() => [
14974
+ createVNode(unref(NeonForm), {
14975
+ handle: "info",
14976
+ "initial-values": unref(initialValues),
14977
+ "is-loading": unref(isLoading),
14978
+ "is-changed": unref(isChanged),
14979
+ "use-unsaved": "",
14980
+ onCancel: unref(discardChanges),
14981
+ onSubmit: saveCheck
14982
+ }, {
14983
+ default: withCtx(() => [
14984
+ createVNode(unref(NeonField), mergeProps({
14985
+ modelValue: unref(values).name,
14986
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => unref(values).name = $event)
14987
+ }, unref(fields).name), null, 16, ["modelValue"]),
14988
+ createVNode(unref(NeonField), mergeProps({
14989
+ modelValue: unref(values).code,
14990
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => unref(values).code = $event)
14991
+ }, unref(fields).code), null, 16, ["modelValue"]),
14992
+ createVNode(unref(NeonField), mergeProps({
14993
+ modelValue: unref(values).leaveQuota,
14994
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => unref(values).leaveQuota = $event)
14995
+ }, unref(fields).leaveQuota), null, 16, ["modelValue"]),
14996
+ createVNode(unref(OfficeRelation), {
14997
+ modelValue: unref(values),
14998
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => isRef(values) ? values.value = $event : null),
14999
+ field: unref(fields).branches
15000
+ }, null, 8, ["modelValue", "field"]),
15001
+ createVNode(unref(NeonField), mergeProps({
15002
+ modelValue: unref(values).maxDurationDays,
15003
+ "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => unref(values).maxDurationDays = $event)
15004
+ }, unref(fields).maxDurationDays), null, 16, ["modelValue"]),
15005
+ createVNode(unref(NeonField), mergeProps({
15006
+ modelValue: unref(values).showLeaveQuota,
15007
+ "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => unref(values).showLeaveQuota = $event)
15008
+ }, unref(fields).showLeaveQuota), {
15009
+ input: withCtx(() => [
15010
+ createVNode(unref(NeonCheck), {
15011
+ modelValue: unref(values).showLeaveQuota,
15012
+ "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => unref(values).showLeaveQuota = $event),
15013
+ label: "Tampilkan",
15014
+ class: "mt-2"
15015
+ }, null, 8, ["modelValue"])
15016
+ ]),
15017
+ _: 1
15018
+ /* STABLE */
15019
+ }, 16, ["modelValue"]),
15020
+ createVNode(unref(NeonField), mergeProps({
15021
+ modelValue: unref(values).showAttendanceType,
15022
+ "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => unref(values).showAttendanceType = $event)
15023
+ }, unref(fields).showAttendanceType), {
15024
+ input: withCtx(() => [
15025
+ createVNode(unref(NeonCheck), {
15026
+ modelValue: unref(values).showAttendanceType,
15027
+ "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => unref(values).showAttendanceType = $event),
15028
+ label: "Tampilkan",
15029
+ class: "mt-2"
15030
+ }, null, 8, ["modelValue"])
15031
+ ]),
15032
+ _: 1
15033
+ /* STABLE */
15034
+ }, 16, ["modelValue"]),
15035
+ createVNode(unref(NeonField), mergeProps({
15036
+ modelValue: unref(values).description,
15037
+ "onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => unref(values).description = $event)
15038
+ }, unref(fields).description), null, 16, ["modelValue"])
15039
+ ]),
15040
+ _: 1
15041
+ /* STABLE */
15042
+ }, 8, ["initial-values", "is-loading", "is-changed", "onCancel"])
15043
+ ]),
15044
+ _: 1
15045
+ /* STABLE */
15046
+ })
15047
+ ]),
15048
+ _: 1
15049
+ /* STABLE */
15050
+ }, 8, ["use-url"])
15051
+ ]),
15052
+ _: 1
15053
+ /* STABLE */
15054
+ });
15055
+ };
15056
+ }
15057
+ });
15058
+ const AttendanceTypeSingle = /* @__PURE__ */ _export_sfc$1(_sfc_main$1b, [["__scopeId", "data-v-776e6c14"]]);
14918
15059
  const _withScopeId$3 = (n) => (pushScopeId("data-v-802b3ded"), n = n(), popScopeId(), n);
14919
15060
  const _hoisted_1$s = { id: "view-checkIns" };
14920
15061
  const _hoisted_2$j = { class: "summary" };
@@ -25904,7 +26045,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
25904
26045
  createElementVNode("div", _hoisted_6$1, [
25905
26046
  createVNode(unref(OfficeCollectionQuery), { displays: __props.displays }, {
25906
26047
  default: withCtx(() => [
25907
- unref(permit).isAny(["neu:shiftCabang", "neu:admin"]) ? (openBlock(), createBlock(unref(_sfc_main$1h), { key: 0 })) : createCommentVNode("v-if", true),
26048
+ unref(permit).isAny(["neu:shiftCabang", "neu:admin"]) ? (openBlock(), createBlock(unref(_sfc_main$1j), { key: 0 })) : createCommentVNode("v-if", true),
25908
26049
  createVNode(unref(OfficeCollectionOperation), {
25909
26050
  "is-main": "",
25910
26051
  path: __props.path
@@ -26478,12 +26619,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
26478
26619
  const ShiftStaffImport = /* @__PURE__ */ _export_sfc$1(_sfc_main, [["__scopeId", "data-v-818a1e6a"]]);
26479
26620
  const all = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
26480
26621
  __proto__: null,
26481
- AttendanceCollection: _sfc_main$1g,
26622
+ AttendanceCollection: _sfc_main$1i,
26482
26623
  AttendanceDelegate,
26483
26624
  AttendanceManager,
26484
26625
  AttendanceSingle,
26485
26626
  AttendanceStaff,
26486
26627
  AttendanceSupervisor,
26628
+ AttendanceTypeCollection: _sfc_main$1c,
26629
+ AttendanceTypeSingle,
26487
26630
  CheckInAccess,
26488
26631
  CheckInCollection: _sfc_main$13,
26489
26632
  CheckInExternal,
@@ -26495,7 +26638,7 @@ const all = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty(
26495
26638
  CheckInSupervisor,
26496
26639
  NOperasional: operasional_types,
26497
26640
  NeonTime,
26498
- NeutronImportButton: _sfc_main$1h,
26641
+ NeutronImportButton: _sfc_main$1j,
26499
26642
  OfficeSingleSync,
26500
26643
  OperasionalIdentitas,
26501
26644
  PeriodButton,
@@ -26583,6 +26726,9 @@ const config = OfficeInterfaces.define({
26583
26726
  "AttendanceManager",
26584
26727
  "AttendanceSupervisor",
26585
26728
  "AttendanceDelegate",
26729
+ // Attendance Type
26730
+ "AttendanceTypeCollection",
26731
+ "AttendanceTypeSingle",
26586
26732
  // Check In
26587
26733
  "CheckInCollection",
26588
26734
  "CheckInSingle",
@@ -97,11 +97,11 @@
97
97
  gap: 0.5rem
98
98
  }
99
99
 
100
- .neu-attendance-single[data-v-68aaccaa] {
100
+ .neu-attendance-single[data-v-0f0e0119] {
101
101
  display: block
102
102
  }
103
103
 
104
- .neu-attendance-single[data-v-f59b58f4] {
104
+ .neu-attendance-single[data-v-2957df27] {
105
105
  display: block
106
106
  }
107
107
 
@@ -117,6 +117,10 @@
117
117
  display: block
118
118
  }
119
119
 
120
+ .neu-AttendanceType-single[data-v-776e6c14] {
121
+ display: block
122
+ }
123
+
120
124
  #view-checkIns[data-v-802b3ded] {
121
125
 
122
126
  height: 100%
package/build/module.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "compatibility": {
5
5
  "nuxt": "^3.0.0"
6
6
  },
7
- "version": "1.17.5",
7
+ "version": "1.17.6",
8
8
  "builder": {
9
9
  "@neon.id/module-builder": "1.8.0",
10
10
  "unbuild": "2.0.0"
package/build/nuxt.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "compatibility": {
5
5
  "nuxt": "^3.0.0"
6
6
  },
7
- "version": "1.17.5",
7
+ "version": "1.17.6",
8
8
  "builder": {
9
9
  "@neon.id/module-builder": "1.8.0",
10
10
  "unbuild": "2.0.0"
package/build/nuxt.mjs CHANGED
@@ -25,6 +25,9 @@ const config = OfficeInterfaces.define({
25
25
  "AttendanceManager",
26
26
  "AttendanceSupervisor",
27
27
  "AttendanceDelegate",
28
+ // Attendance Type
29
+ "AttendanceTypeCollection",
30
+ "AttendanceTypeSingle",
28
31
  // Check In
29
32
  "CheckInCollection",
30
33
  "CheckInSingle",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neutron.co.id/operasional-interfaces",
3
- "version": "1.17.5",
3
+ "version": "1.17.6",
4
4
  "description": "Interface library of Neutron Operasional.",
5
5
  "sideEffects": [
6
6
  "*.css"
@@ -78,8 +78,8 @@
78
78
  "@neon.id/nuxt": "^1.5.0",
79
79
  "@neon.id/office": "1.46.0",
80
80
  "@neon.id/utils": "^1.51.0",
81
- "@neutron.co.id/operasional-modules": "1.12.13",
82
- "@neutron.co.id/personalia-models": "1.13.8",
81
+ "@neutron.co.id/operasional-modules": "1.12.15",
82
+ "@neutron.co.id/personalia-models": "1.13.9-beta.1",
83
83
  "@nuxt/kit": "^3.12.3",
84
84
  "file-saver": "^2.0.5",
85
85
  "papaparse": "5.4.1",
@@ -153,8 +153,8 @@
153
153
  "@neon.id/nuxt": "^1.5.0",
154
154
  "@neon.id/office": "1.46.0",
155
155
  "@neon.id/utils": "^1.51.0",
156
- "@neutron.co.id/operasional-modules": "1.12.13",
157
- "@neutron.co.id/personalia-models": "1.13.8",
156
+ "@neutron.co.id/operasional-modules": "1.12.15",
157
+ "@neutron.co.id/personalia-models": "1.13.9-beta.1",
158
158
  "@nuxt/kit": "^3.12.3",
159
159
  "file-saver": "^2.0.5",
160
160
  "qr-scanner": "^1.4.2",
@@ -164,5 +164,5 @@
164
164
  "publishConfig": {
165
165
  "access": "public"
166
166
  },
167
- "build": 187
167
+ "build": 188
168
168
  }