design-system-next 2.17.8 → 2.19.3

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 (24) hide show
  1. package/dist/design-system-next.es.js +7252 -7106
  2. package/dist/design-system-next.es.js.gz +0 -0
  3. package/dist/design-system-next.umd.js +12 -13
  4. package/dist/design-system-next.umd.js.gz +0 -0
  5. package/dist/main.css +1 -1
  6. package/dist/main.css.gz +0 -0
  7. package/dist/package.json.d.ts +1 -1
  8. package/package.json +1 -1
  9. package/src/App.vue +1 -51
  10. package/src/assets/styles/tailwind.css +105 -44
  11. package/src/components/attribute-filter/attribute-filter.vue +1 -1
  12. package/src/components/audit-trail/audit-trail.ts +28 -0
  13. package/src/components/audit-trail/audit-trail.vue +104 -0
  14. package/src/components/audit-trail/use-audit-trail.ts +82 -0
  15. package/src/components/chips/chips.vue +4 -1
  16. package/src/components/date-picker/{reusable-calendar/reusable-calendar.ts → date-calendar-picker/date-calendar-picker.ts} +4 -4
  17. package/src/components/date-picker/{reusable-calendar/reusable-calendar.vue → date-calendar-picker/date-calendar-picker.vue} +10 -10
  18. package/src/components/date-picker/{reusable-calendar/use-reusable-calendar.ts → date-calendar-picker/use-date-calendar-picker.ts} +4 -4
  19. package/src/components/list/ladderized-list/use-ladderized-list.ts +19 -8
  20. package/src/components/lozenge/use-lozenge.ts +55 -23
  21. package/src/components/select/select-ladderized/select-ladderized.ts +5 -1
  22. package/src/components/select/select-ladderized/select-ladderized.vue +3 -1
  23. package/src/components/select/select-ladderized/use-select-ladderized.ts +17 -4
  24. package/src/components/table/table.vue +3 -4
@@ -587,7 +587,7 @@
587
587
  }
588
588
 
589
589
  .spr-text-color-supporting {
590
- @apply spr-text-mushroom-400;
590
+ @apply spr-text-mushroom-500;
591
591
  }
592
592
 
593
593
  .spr-text-color-base {
@@ -595,15 +595,15 @@
595
595
  }
596
596
 
597
597
  .spr-text-color-weak {
598
- @apply spr-text-mushroom-300;
598
+ @apply spr-text-mushroom-400;
599
599
  }
600
600
 
601
601
  .spr-text-color-disabled {
602
- @apply spr-text-white-300;
602
+ @apply spr-text-white-400;
603
603
  }
604
604
 
605
605
  .spr-text-color-on-fill-disabled {
606
- @apply spr-text-white-400;
606
+ @apply spr-text-white-500;
607
607
  }
608
608
 
609
609
  .spr-text-color-inverted-strong {
@@ -647,51 +647,51 @@
647
647
  }
648
648
 
649
649
  .spr-text-color-information-base {
650
- @apply spr-text-blueberry-700;
650
+ @apply spr-text-blueberry-800;
651
651
  }
652
652
 
653
653
  .spr-text-color-information-hover {
654
- @apply spr-text-blueberry-800;
654
+ @apply spr-text-blueberry-900;
655
655
  }
656
656
 
657
657
  .spr-text-color-information-pressed {
658
- @apply spr-text-blueberry-900;
658
+ @apply spr-text-blueberry-950;
659
659
  }
660
660
 
661
661
  .spr-text-color-danger-base {
662
- @apply spr-text-tomato-600;
662
+ @apply spr-text-tomato-700;
663
663
  }
664
664
 
665
665
  .spr-text-color-danger-hover {
666
- @apply spr-text-tomato-700;
666
+ @apply spr-text-tomato-800;
667
667
  }
668
668
 
669
669
  .spr-text-color-danger-pressed {
670
- @apply spr-text-tomato-800;
670
+ @apply spr-text-tomato-900;
671
671
  }
672
672
 
673
673
  .spr-text-color-pending-base {
674
- @apply spr-text-mango-700;
674
+ @apply spr-text-mango-800;
675
675
  }
676
676
 
677
677
  .spr-text-color-pending-hover {
678
- @apply spr-text-mango-800;
678
+ @apply spr-text-mango-900;
679
679
  }
680
680
 
681
681
  .spr-text-color-pending-pressed {
682
- @apply spr-text-mango-900;
682
+ @apply spr-text-mango-950;
683
683
  }
684
684
 
685
685
  .spr-text-color-caution-base {
686
- @apply spr-text-carrot-700;
686
+ @apply spr-text-carrot-800;
687
687
  }
688
688
 
689
689
  .spr-text-color-caution-hover {
690
- @apply spr-text-carrot-800;
690
+ @apply spr-text-carrot-900;
691
691
  }
692
692
 
693
693
  .spr-text-color-caution-pressed {
694
- @apply spr-text-carrot-900;
694
+ @apply spr-text-carrot-950;
695
695
  }
696
696
 
697
697
  .spr-text-color-accent-base {
@@ -713,6 +713,25 @@
713
713
  }
714
714
 
715
715
  .spr-background-color-surface {
716
+ @apply spr-bg-mushroom-50;
717
+ }
718
+ .spr-background-color-surface-adaptive {
719
+ @apply spr-bg-mushroom-950/[0.05];
720
+ }
721
+
722
+ .spr-background-color-base {
723
+ @apply spr-bg-mushroom-100;
724
+ }
725
+
726
+ .spr-background-color-hover {
727
+ @apply spr-bg-mushroom-950/[0.08];
728
+ }
729
+
730
+ .spr-background-color-pressed {
731
+ @apply spr-bg-mushroom-950/[0.12];
732
+ }
733
+
734
+ .spr-background-color-disabled {
716
735
  @apply spr-bg-white-100;
717
736
  }
718
737
 
@@ -728,10 +747,6 @@
728
747
  @apply spr-bg-mushroom-800;
729
748
  }
730
749
 
731
- .spr-background-color-base {
732
- @apply spr-bg-mushroom-50;
733
- }
734
-
735
750
  .spr-background-color-single-active {
736
751
  @apply spr-bg-kangkong-100;
737
752
  }
@@ -740,18 +755,7 @@
740
755
  @apply spr-bg-kangkong-50;
741
756
  }
742
757
 
743
- .spr-background-color-hover {
744
- @apply spr-bg-mushroom-50;
745
- }
746
-
747
- .spr-background-color-pressed {
748
- @apply spr-bg-mushroom-100;
749
- }
750
-
751
- .spr-background-color-disabled {
752
- @apply spr-bg-white-100;
753
- }
754
-
758
+ /* BRAND COLORS */
755
759
  .spr-background-color-brand-base {
756
760
  @apply spr-bg-kangkong-700;
757
761
  }
@@ -768,10 +772,18 @@
768
772
  @apply spr-bg-kangkong-100;
769
773
  }
770
774
 
775
+ .spr-background-color-brand-weak-hover {
776
+ @apply spr-bg-kangkong-200;
777
+ }
778
+ .spr-background-color-brand-weak-pressed {
779
+ @apply spr-bg-kangkong-300;
780
+ }
781
+
771
782
  .spr-background-color-success-base {
772
783
  @apply spr-bg-kangkong-600;
773
784
  }
774
785
 
786
+ /* SUCCESS COLORS */
775
787
  .spr-background-color-success-hover {
776
788
  @apply spr-bg-kangkong-700;
777
789
  }
@@ -784,6 +796,14 @@
784
796
  @apply spr-bg-kangkong-100;
785
797
  }
786
798
 
799
+ .spr-background-color-success-weak-hover {
800
+ @apply spr-bg-kangkong-200;
801
+ }
802
+ .spr-background-color-success-weak-pressed {
803
+ @apply spr-bg-kangkong-300;
804
+ }
805
+
806
+ /* INFORMATION COLORS */
787
807
  .spr-background-color-information-base {
788
808
  @apply spr-bg-blueberry-600;
789
809
  }
@@ -799,7 +819,14 @@
799
819
  .spr-background-color-information-weak {
800
820
  @apply spr-bg-blueberry-100;
801
821
  }
822
+ .spr-background-color-information-weak-hover {
823
+ @apply spr-bg-blueberry-200;
824
+ }
825
+ .spr-background-color-information-weak-pressed {
826
+ @apply spr-bg-blueberry-300;
827
+ }
802
828
 
829
+ /* PENDING COLORS */
803
830
  .spr-background-color-pending-base {
804
831
  @apply spr-bg-mango-500;
805
832
  }
@@ -815,7 +842,14 @@
815
842
  .spr-background-color-pending-weak {
816
843
  @apply spr-bg-mango-100;
817
844
  }
845
+ .spr-background-color-pending-weak-hover {
846
+ @apply spr-bg-mango-200;
847
+ }
848
+ .spr-background-color-pending-weak-pressed {
849
+ @apply spr-bg-mango-300;
850
+ }
818
851
 
852
+ /* CAUTION COLORS */
819
853
  .spr-background-color-caution-base {
820
854
  @apply spr-bg-carrot-500;
821
855
  }
@@ -831,7 +865,14 @@
831
865
  .spr-background-color-caution-weak {
832
866
  @apply spr-bg-carrot-100;
833
867
  }
868
+ .spr-background-color-caution-weak-hover {
869
+ @apply spr-bg-carrot-200;
870
+ }
871
+ .spr-background-color-caution-weak-pressed {
872
+ @apply spr-bg-carrot-300;
873
+ }
834
874
 
875
+ /* ACCENT COLORS */
835
876
  .spr-background-color-accent-base {
836
877
  @apply spr-bg-wintermelon-600;
837
878
  }
@@ -847,7 +888,14 @@
847
888
  .spr-background-color-accent-weak {
848
889
  @apply spr-bg-wintermelon-100;
849
890
  }
891
+ .spr-background-color-accent-weak-hover {
892
+ @apply spr-bg-wintermelon-200;
893
+ }
894
+ .spr-background-color-accent-weak-pressed {
895
+ @apply spr-bg-wintermelon-300;
896
+ }
850
897
 
898
+ /* DANGER COLORS */
851
899
  .spr-background-color-danger-base {
852
900
  @apply spr-bg-tomato-600;
853
901
  }
@@ -863,6 +911,12 @@
863
911
  .spr-background-color-danger-weak {
864
912
  @apply spr-bg-tomato-100;
865
913
  }
914
+ .spr-background-color-danger-weak-hover {
915
+ @apply spr-bg-tomato-200;
916
+ }
917
+ .spr-background-color-danger-weak-pressed {
918
+ @apply spr-bg-tomato-300;
919
+ }
866
920
 
867
921
  .spr-switch-background-default {
868
922
  @apply spr-bg-mushroom-200;
@@ -910,6 +964,7 @@
910
964
  @apply spr-border-white-200;
911
965
  }
912
966
 
967
+ /* BRAND COLORS */
913
968
  .spr-border-color-brand-base {
914
969
  @apply spr-border-kangkong-700;
915
970
  }
@@ -922,6 +977,7 @@
922
977
  @apply spr-border-kangkong-900;
923
978
  }
924
979
 
980
+ /* SUCCESS COLORS */
925
981
  .spr-border-color-success-base {
926
982
  @apply spr-border-kangkong-700;
927
983
  }
@@ -934,54 +990,59 @@
934
990
  @apply spr-border-kangkong-900;
935
991
  }
936
992
 
993
+ /* INFORMATION COLORS */
937
994
  .spr-border-color-information-base {
938
- @apply spr-border-blueberry-700;
995
+ @apply spr-border-blueberry-800;
939
996
  }
940
997
 
941
998
  .spr-border-color-information-hover {
942
- @apply spr-border-blueberry-800;
999
+ @apply spr-border-blueberry-900;
943
1000
  }
944
1001
 
945
1002
  .spr-border-color-information-pressed {
946
- @apply spr-border-blueberry-900;
1003
+ @apply spr-border-blueberry-950;
947
1004
  }
948
1005
 
1006
+ /* DANGER COLORS */
949
1007
  .spr-border-color-danger-base {
950
- @apply spr-border-tomato-600;
1008
+ @apply spr-border-tomato-700;
951
1009
  }
952
1010
 
953
1011
  .spr-border-color-danger-hover {
954
- @apply spr-border-tomato-700;
1012
+ @apply spr-border-tomato-800;
955
1013
  }
956
1014
 
957
1015
  .spr-border-color-danger-pressed {
958
- @apply spr-border-tomato-800;
1016
+ @apply spr-border-tomato-900;
959
1017
  }
960
1018
 
1019
+ /* PENDING COLORS */
961
1020
  .spr-border-color-pending-base {
962
- @apply spr-border-mango-700;
1021
+ @apply spr-border-mango-800;
963
1022
  }
964
1023
 
965
1024
  .spr-border-color-pending-hover {
966
- @apply spr-border-mango-800;
1025
+ @apply spr-border-mango-900;
967
1026
  }
968
1027
 
969
1028
  .spr-border-color-pending-pressed {
970
- @apply spr-border-mango-900;
1029
+ @apply spr-border-mango-950;
971
1030
  }
972
1031
 
1032
+ /* CAUTION COLORS */
973
1033
  .spr-border-color-caution-base {
974
- @apply spr-border-carrot-700;
1034
+ @apply spr-border-carrot-800;
975
1035
  }
976
1036
 
977
1037
  .spr-border-color-caution-hover {
978
- @apply spr-border-carrot-800;
1038
+ @apply spr-border-carrot-900;
979
1039
  }
980
1040
 
981
1041
  .spr-border-color-caution-pressed {
982
- @apply spr-border-carrot-900;
1042
+ @apply spr-border-carrot-950;
983
1043
  }
984
1044
 
1045
+ /* ACCENT COLORS */
985
1046
  .spr-border-color-accent-base {
986
1047
  @apply spr-border-wintermelon-700;
987
1048
  }
@@ -82,8 +82,8 @@
82
82
  <slot name="body">
83
83
  <div
84
84
  v-if="!noList"
85
- ref="filterDropdownRef"
86
85
  id="attribute_filter_body"
86
+ ref="filterDropdownRef"
87
87
  class="spr-max-h-[250px] spr-overflow-y-auto"
88
88
  >
89
89
  <spr-list
@@ -0,0 +1,28 @@
1
+ import type { PropType, ExtractPropTypes } from 'vue';
2
+
3
+ export const definePropType = <T>(val: unknown): PropType<T> => val as PropType<T>;
4
+ export interface AuditTrailLog {
5
+ userName: string;
6
+ avatarUrl?: string;
7
+ title: string;
8
+ logs: LogEntry[];
9
+ }
10
+
11
+ export interface LogEntry {
12
+ label: string[];
13
+ oldValue: string;
14
+ newValue: string;
15
+ }
16
+
17
+ export const auditTrailPropTypes = {
18
+ auditTrailLogs: {
19
+ type: Array as PropType<AuditTrailLog[]>,
20
+ default: () => [],
21
+ },
22
+ alwaysOpen: {
23
+ type: Boolean,
24
+ default: true,
25
+ }
26
+ };
27
+
28
+ export type AuditTrailPropTypes = ExtractPropTypes<typeof auditTrailPropTypes>;
@@ -0,0 +1,104 @@
1
+ <template>
2
+ <div id="audit_trail_wrapper" ref="auditTrailWrapperRef" class="spr-flex spr-flex-col spr-gap-size-spacing-2xs">
3
+ <div v-for="(entry, index) in auditTrailLogs" id="audit_trail_entry" :key="index" class="spr-relative spr-h-fit">
4
+ <div class="spr-absolute spr-h-full spr-py-[6px]">
5
+ <div
6
+ :class="[
7
+ 'spr-h-[6px] spr-w-[6px] spr-rounded-full',
8
+ index === 0 ? 'spr-bg-kangkong-600' : 'spr-bg-mushroom-200',
9
+ ]"
10
+ />
11
+ <div
12
+ :class="[
13
+ 'spr-relative spr-left-1/2 spr-mt-size-spacing-5xs spr-h-[calc(100%-18px)] spr-w-[1px] spr-translate-x-[-50%]',
14
+ index === 0 ? 'spr-bg-kangkong-600' : 'spr-bg-mushroom-200',
15
+ collapsedState[index] ? 'spr-h-[calc(100%-12px)]' : 'spr-h-[calc(100%-22px)]',
16
+ ]"
17
+ />
18
+ </div>
19
+ <div
20
+ id="audit_trail_header"
21
+ class="hover:spr-background-color-hover spr-ml-[10px] spr-flex spr-w-full spr-items-center spr-justify-between spr-gap-size-spacing-3xs spr-self-start spr-px-2 spr-py-[6px] hover:spr-cursor-pointer hover:spr-rounded-lg"
22
+ @click="toggleCollapse(index)"
23
+ >
24
+ <div id="audit_trail_avatar" :class="[{ 'spr-self-start': isMultiLine[index] }]">
25
+ <SprAvatar v-if="!!entry.avatarUrl" variant="image" :src="entry.avatarUrl" size="sm" />
26
+ <SprAvatar v-else :initial="entry.userName" size="sm" />
27
+ </div>
28
+ <span
29
+ id="audit_trail_title"
30
+ :ref="(el) => setTitleRef(el, index)"
31
+ class="spr-text-color-strong spr-text-200 spr-font-normal"
32
+ >
33
+ {{ entry.title }}
34
+ </span>
35
+ <div :class="['spr-h-4 spr-w-4', { 'spr-self-start': isMultiLine[index] }]">
36
+ <Icon
37
+ :icon="collapsedState[index] ? 'ph:caret-up' : 'ph:caret-down'"
38
+ width="16px"
39
+ height="16px"
40
+ class="spr-text-color-strong"
41
+ />
42
+ </div>
43
+ </div>
44
+ <div id="audit_trail_logs_wrapper" class="spr-pl-[18px]">
45
+ <SprCollapsible v-model="collapsedState[index]">
46
+ <div
47
+ v-for="(log, logIndex) in entry.logs"
48
+ id="audit_trail_log_entries"
49
+ :key="logIndex"
50
+ :class="[
51
+ 'spr-flex spr-flex-col spr-gap-size-spacing-3xs',
52
+ { 'spr-pb-size-spacing-3xs': logIndex !== entry.logs.length - 1 },
53
+ ]"
54
+ >
55
+ <div id="log_label">
56
+ <SprTooltip
57
+ :text="log.label.join(' > ')"
58
+ placement="bottom"
59
+ :show-triggers="log.label.length > 2 ? 'hover' : []"
60
+ >
61
+ <div id="entry_label" class="spr-text-color-strong spr-text-200 spr-font-normal">
62
+ <template v-if="log.label.length === 1">
63
+ {{ log.label[0] }}
64
+ </template>
65
+ <template v-else-if="log.label.length === 2">
66
+ {{ log.label.join(' > ') }}
67
+ </template>
68
+ <template v-else> {{ log.label[0] }} > ... > {{ log.label[log.label.length - 1] }} </template>
69
+ </div>
70
+ </SprTooltip>
71
+ </div>
72
+ <div id="log_values" class="spr-flex spr-items-center spr-gap-size-spacing-3xs">
73
+ <div
74
+ id="old_value"
75
+ class="spr-border-color-weak spr-text-color-supporting spr-rounded-border-radius-xs spr-border spr-border-solid spr-px-size-spacing-5xs spr-py-size-spacing-6xs spr-text-200 spr-font-normal"
76
+ >
77
+ {{ log.oldValue }}
78
+ </div>
79
+ <span class="spr-text-200 spr-font-medium"> → </span>
80
+ <div
81
+ id="new_value"
82
+ class="spr-border-color-weak spr-text-color-strong spr-rounded-border-radius-xs spr-border spr-border-solid spr-px-size-spacing-5xs spr-py-size-spacing-6xs spr-text-200 spr-font-normal"
83
+ >
84
+ {{ log.newValue }}
85
+ </div>
86
+ </div>
87
+ </div>
88
+ </SprCollapsible>
89
+ </div>
90
+ </div>
91
+ </div>
92
+ </template>
93
+ <script lang="ts" setup>
94
+ import SprAvatar from '../avatar/avatar.vue';
95
+ import { useAuditTrail } from './use-audit-trail';
96
+ import { auditTrailPropTypes } from './audit-trail';
97
+ import { Icon } from '@iconify/vue';
98
+ import SprCollapsible from '../collapsible/collapsible.vue';
99
+ import SprTooltip from '../tooltip/tooltip.vue';
100
+
101
+ const props = defineProps(auditTrailPropTypes);
102
+ const { auditTrailLogs, collapsedState, toggleCollapse, setTitleRef, isMultiLine, auditTrailWrapperRef } =
103
+ useAuditTrail(props);
104
+ </script>
@@ -0,0 +1,82 @@
1
+ import type { AuditTrailPropTypes } from './audit-trail';
2
+ import { toRefs, reactive, nextTick, onMounted, onUnmounted, ref } from 'vue';
3
+ export const useAuditTrail = (props: AuditTrailPropTypes) => {
4
+ const { auditTrailLogs, alwaysOpen } = toRefs(props);
5
+
6
+ const collapsedState = reactive(auditTrailLogs.value.map((_, index) => index === 0));
7
+
8
+ const toggleCollapse = (index: number) => {
9
+ if (index < 0 || index >= collapsedState.length) return;
10
+
11
+ collapsedState[index] = !collapsedState[index];
12
+ if (!alwaysOpen.value) {
13
+ collapsedState.forEach((_, i) => {
14
+ if (i !== index) {
15
+ collapsedState[i] = false;
16
+ }
17
+ });
18
+ }
19
+ };
20
+ const auditTrailWrapperRef = ref<HTMLElement | null>(null);
21
+ const titleRefs = reactive<{ [key: number]: HTMLElement | null }>({});
22
+ const isMultiLine = reactive<{ [key: number]: boolean }>({});
23
+ const resizeObserver = ref<ResizeObserver | null>(null);
24
+
25
+ const setTitleRef = (el: unknown, index: number) => {
26
+ const element = el as HTMLElement;
27
+ titleRefs[index] = element;
28
+ if (element) {
29
+ checkIfMultiLine(element, index);
30
+ }
31
+ };
32
+
33
+ const checkIfMultiLine = (element: HTMLElement, index: number) => {
34
+ nextTick(() => {
35
+ const computedStyle = getComputedStyle(element);
36
+ const lineHeight = parseFloat(computedStyle.lineHeight);
37
+ const elementHeight = element.offsetHeight;
38
+
39
+ // If lineHeight is 'normal', calculate it based on font size
40
+ const actualLineHeight = isNaN(lineHeight) ? parseFloat(computedStyle.fontSize) * 1.2 : lineHeight;
41
+
42
+ isMultiLine[index] = elementHeight > actualLineHeight * 1.1;
43
+ });
44
+ };
45
+
46
+ const checkAllMultiLine = (): void => {
47
+ Object.entries(titleRefs).forEach(([indexStr, el]) => {
48
+ if (el) {
49
+ const index = parseInt(indexStr, 10);
50
+ checkIfMultiLine(el, index);
51
+ }
52
+ });
53
+ };
54
+
55
+ onMounted(() => {
56
+ nextTick(() => {
57
+ if (!auditTrailWrapperRef.value) return;
58
+ resizeObserver.value = new ResizeObserver((entries) => {
59
+ for (const entry of entries) {
60
+ if (entry.target.id === auditTrailWrapperRef.value?.id) {
61
+ checkAllMultiLine();
62
+ }
63
+ }
64
+ });
65
+
66
+ resizeObserver.value.observe(auditTrailWrapperRef.value);
67
+ });
68
+ });
69
+
70
+ onUnmounted(() => {
71
+ resizeObserver.value?.disconnect();
72
+ });
73
+
74
+ return {
75
+ auditTrailLogs,
76
+ collapsedState,
77
+ toggleCollapse,
78
+ setTitleRef,
79
+ isMultiLine,
80
+ auditTrailWrapperRef,
81
+ };
82
+ };
@@ -8,7 +8,10 @@
8
8
  @click="handleClick"
9
9
  @keyup.enter="handleClick"
10
10
  >
11
- <template v-if="variant === 'tag'">
11
+ <template v-if="slots.default">
12
+ <slot />
13
+ </template>
14
+ <template v-else-if="variant === 'tag'">
12
15
  <span v-if="hasIcon" class="chips-icon spr-inline-flex spr-items-center spr-leading-[0]">
13
16
  <slot name="icon">
14
17
  <Icon :icon="getIcon" class="spr-font-size-300" />
@@ -27,7 +27,7 @@ export type RestDayType = 'su' | 'mo' | 'tu' | 'we' | 'th' | 'fr' | 'sa';
27
27
  export type DatePickerMode = typeof DATE_PICKER_MODES[number];
28
28
 
29
29
  // Define props with JSDoc comments for documentation
30
- export const reusableCalendarPropTypes = {
30
+ export const dateCalendarPickerPropTypes = {
31
31
  /**
32
32
  * @description The selected date value (v-model)
33
33
  */
@@ -109,7 +109,7 @@ export const reusableCalendarPropTypes = {
109
109
  };
110
110
 
111
111
  // Define emits with type validation
112
- export const reusableCalendarEmitTypes = {
112
+ export const dateCalendarPickerEmitTypes = {
113
113
  'update:modelValue': (value: string): value is string => typeof value === 'string',
114
114
  'update:month': (month: number): month is number => typeof month === 'number',
115
115
  'update:year': (year: number): year is number => typeof year === 'number',
@@ -117,5 +117,5 @@ export const reusableCalendarEmitTypes = {
117
117
  };
118
118
 
119
119
  // Export types for use in other files
120
- export type ReusableCalendarPropTypes = ExtractPropTypes<typeof reusableCalendarPropTypes>;
121
- export type ReusableCalendarEmitTypes = typeof reusableCalendarEmitTypes;
120
+ export type DateCalendarPickerPropTypes = ExtractPropTypes<typeof dateCalendarPickerPropTypes>;
121
+ export type DateCalendarPickerEmitTypes = typeof dateCalendarPickerEmitTypes;
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <div
3
- ref="reusableCalendarRef"
4
- :class="reusableCalendarClasses"
3
+ ref="dateCalendarPickerRef"
4
+ :class="dateCalendarPickerClasses"
5
5
  >
6
6
  <div
7
7
  :class="[
@@ -132,13 +132,13 @@ import DatePickerCalendarTab from '../tabs/DatePickerCalendarTab.vue';
132
132
  import DatePickerMonthTab from '../tabs/DatePickerMonthTab.vue';
133
133
  import DatePickerYearTab from '../tabs/DatePickerYearTab.vue';
134
134
 
135
- import { useReusableCalendar } from './use-reusable-calendar';
136
- import { reusableCalendarEmitTypes, reusableCalendarPropTypes } from './reusable-calendar';
135
+ import { useDateCalendarPicker } from './use-date-calendar-picker';
136
+ import { dateCalendarPickerEmitTypes, dateCalendarPickerPropTypes } from './date-calendar-picker';
137
137
 
138
- const props = defineProps(reusableCalendarPropTypes);
139
- const emit = defineEmits(reusableCalendarEmitTypes);
138
+ const props = defineProps(dateCalendarPickerPropTypes);
139
+ const emit = defineEmits(dateCalendarPickerEmitTypes);
140
140
 
141
- const reusableCalendarRef = ref<HTMLElement | null>(null);
141
+ const dateCalendarPickerRef = ref<HTMLElement | null>(null);
142
142
 
143
143
  // Use the composable for all logic
144
144
  const {
@@ -176,12 +176,12 @@ const {
176
176
  handleMonthTabMonthUpdateWrapper,
177
177
  handleYearTabYearUpdateWrapper,
178
178
  handleYearTabCurrentPageUpdateWrapper,
179
- } = useReusableCalendar(props, emit);
179
+ } = useDateCalendarPicker(props, emit);
180
180
 
181
181
  // Compute CSS classes using classNames utility
182
- const reusableCalendarClasses = computed(() => {
182
+ const dateCalendarPickerClasses = computed(() => {
183
183
  return classNames(
184
- 'reusable-calendar-container spr-bg-white spr-rounded-lg spr-shadow-lg spr-border spr-border-solid spr-border-mushroom-200 min-w-[320px]',
184
+ 'date-calendar-picker-container spr-bg-white spr-rounded-lg spr-shadow-lg spr-border spr-border-solid spr-border-mushroom-200 min-w-[320px]',
185
185
  {
186
186
  'spr-disabled': props.disabled,
187
187
  'spr-readonly': props.readonly,
@@ -3,11 +3,11 @@ import { toRefs } from 'vue';
3
3
  import dayjs from 'dayjs';
4
4
 
5
5
  import type { SetupContext } from 'vue';
6
- import type { ReusableCalendarEmitTypes, ReusableCalendarPropTypes } from './reusable-calendar';
6
+ import type { DateCalendarPickerEmitTypes, DateCalendarPickerPropTypes } from './date-calendar-picker';
7
7
 
8
- export const useReusableCalendar = (
9
- props: ReusableCalendarPropTypes,
10
- emit: SetupContext<ReusableCalendarEmitTypes>['emit']
8
+ export const useDateCalendarPicker = (
9
+ props: DateCalendarPickerPropTypes,
10
+ emit: SetupContext<DateCalendarPickerEmitTypes>['emit']
11
11
  ) => {
12
12
  // Extract reactive props
13
13
  const {