cisse-vue-ui 0.8.3 → 0.9.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.
Files changed (174) hide show
  1. package/README.md +666 -4
  2. package/dist/{CheckboxGroup.vue_vue_type_script_setup_true_lang-DuJr8cz3.cjs → CheckboxGroup.vue_vue_type_script_setup_true_lang-BC86pBlY.cjs} +70 -70
  3. package/dist/CheckboxGroup.vue_vue_type_script_setup_true_lang-BC86pBlY.cjs.map +1 -0
  4. package/dist/{CheckboxGroup.vue_vue_type_script_setup_true_lang-N4oS_DJD.js → CheckboxGroup.vue_vue_type_script_setup_true_lang-ZP02bMgY.js} +72 -72
  5. package/dist/CheckboxGroup.vue_vue_type_script_setup_true_lang-ZP02bMgY.js.map +1 -0
  6. package/dist/{ConfirmDialog.vue_vue_type_script_setup_true_lang-DWs2V7xX.js → ConfirmDialog.vue_vue_type_script_setup_true_lang-C5KHLMvx.js} +37 -184
  7. package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-C5KHLMvx.js.map +1 -0
  8. package/dist/{ConfirmDialog.vue_vue_type_script_setup_true_lang-BGUoa5fT.cjs → ConfirmDialog.vue_vue_type_script_setup_true_lang-CLfy0-Wb.cjs} +33 -180
  9. package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-CLfy0-Wb.cjs.map +1 -0
  10. package/dist/{Dropdown.vue_vue_type_script_setup_true_lang-DoJKvn30.cjs → Dropdown.vue_vue_type_script_setup_true_lang-BAKGRZIb.cjs} +2 -2
  11. package/dist/{Dropdown.vue_vue_type_script_setup_true_lang-DoJKvn30.cjs.map → Dropdown.vue_vue_type_script_setup_true_lang-BAKGRZIb.cjs.map} +1 -1
  12. package/dist/{Dropdown.vue_vue_type_script_setup_true_lang-A9Ax6iob.js → Dropdown.vue_vue_type_script_setup_true_lang-GLCX7E3C.js} +2 -2
  13. package/dist/{Dropdown.vue_vue_type_script_setup_true_lang-A9Ax6iob.js.map → Dropdown.vue_vue_type_script_setup_true_lang-GLCX7E3C.js.map} +1 -1
  14. package/dist/{FilterTabs.vue_vue_type_script_setup_true_lang-jW6Ikbvy.cjs → FilterTabs.vue_vue_type_script_setup_true_lang-COkZbeGG.cjs} +1260 -209
  15. package/dist/FilterTabs.vue_vue_type_script_setup_true_lang-COkZbeGG.cjs.map +1 -0
  16. package/dist/{FilterTabs.vue_vue_type_script_setup_true_lang-CcOgc2Y_.js → FilterTabs.vue_vue_type_script_setup_true_lang-CzpYHtc5.js} +1269 -218
  17. package/dist/FilterTabs.vue_vue_type_script_setup_true_lang-CzpYHtc5.js.map +1 -0
  18. package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-BHopJ9RG.js +298 -0
  19. package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-BHopJ9RG.js.map +1 -0
  20. package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-Bo3HqgX0.cjs +297 -0
  21. package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-Bo3HqgX0.cjs.map +1 -0
  22. package/dist/{PageHero.vue_vue_type_script_setup_true_lang-rbvfGvll.cjs → PageHero.vue_vue_type_script_setup_true_lang-BqwBJlv0.cjs} +2 -2
  23. package/dist/{PageHero.vue_vue_type_script_setup_true_lang-rbvfGvll.cjs.map → PageHero.vue_vue_type_script_setup_true_lang-BqwBJlv0.cjs.map} +1 -1
  24. package/dist/{PageHero.vue_vue_type_script_setup_true_lang-Gvocjdqh.js → PageHero.vue_vue_type_script_setup_true_lang-by-P5wIB.js} +2 -2
  25. package/dist/{PageHero.vue_vue_type_script_setup_true_lang-Gvocjdqh.js.map → PageHero.vue_vue_type_script_setup_true_lang-by-P5wIB.js.map} +1 -1
  26. package/dist/cisse-vue-ui.css +4 -4
  27. package/dist/components/core/AccordionItem.test.d.ts +1 -0
  28. package/dist/components/core/Breadcrumb.stories.d.ts +5 -0
  29. package/dist/components/core/CardWrapper.stories.d.ts +32 -0
  30. package/dist/components/core/CardWrapper.test.d.ts +1 -0
  31. package/dist/components/core/CardWrapper.vue.d.ts +129 -0
  32. package/dist/components/core/CollapsibleCard.vue.d.ts +1 -1
  33. package/dist/components/core/DataTable.stories.d.ts +38 -0
  34. package/dist/components/core/Dropdown.vue.d.ts +1 -1
  35. package/dist/components/core/Popover.vue.d.ts +2 -2
  36. package/dist/components/core/Tooltip.stories.d.ts +3 -0
  37. package/dist/components/core/index.cjs +40 -23
  38. package/dist/components/core/index.cjs.map +1 -1
  39. package/dist/components/core/index.d.ts +4 -1
  40. package/dist/components/core/index.js +40 -23
  41. package/dist/components/core/table/DataTable.test.d.ts +1 -0
  42. package/dist/components/core/{TableComponent.vue.d.ts → table/DataTable.vue.d.ts} +60 -7
  43. package/dist/components/core/table/Table.stories.d.ts +27 -0
  44. package/dist/components/core/table/atoms/Caption.test.d.ts +1 -0
  45. package/dist/components/core/table/atoms/Caption.vue.d.ts +26 -0
  46. package/dist/components/core/table/atoms/Col.test.d.ts +1 -0
  47. package/dist/components/core/table/atoms/Col.vue.d.ts +8 -0
  48. package/dist/components/core/table/atoms/Colgroup.test.d.ts +1 -0
  49. package/dist/components/core/table/atoms/Colgroup.vue.d.ts +17 -0
  50. package/dist/components/core/table/atoms/Table.test.d.ts +1 -0
  51. package/dist/components/core/table/atoms/Table.vue.d.ts +46 -0
  52. package/dist/components/core/table/atoms/Tbody.test.d.ts +1 -0
  53. package/dist/components/core/table/atoms/Tbody.vue.d.ts +17 -0
  54. package/dist/components/core/table/atoms/Td.test.d.ts +1 -0
  55. package/dist/components/core/table/atoms/Td.vue.d.ts +43 -0
  56. package/dist/components/core/table/atoms/Tfoot.test.d.ts +1 -0
  57. package/dist/components/core/table/atoms/Tfoot.vue.d.ts +17 -0
  58. package/dist/components/core/table/atoms/Th.test.d.ts +1 -0
  59. package/dist/components/core/table/atoms/Th.vue.d.ts +64 -0
  60. package/dist/components/core/table/atoms/Thead.test.d.ts +1 -0
  61. package/dist/components/core/table/atoms/Thead.vue.d.ts +17 -0
  62. package/dist/components/core/table/atoms/Tr.test.d.ts +1 -0
  63. package/dist/components/core/table/atoms/Tr.vue.d.ts +35 -0
  64. package/dist/components/core/table/atoms/index.d.ts +10 -0
  65. package/dist/components/core/table/index.d.ts +3 -0
  66. package/dist/components/core/table/molecules/ExpandableRow.test.d.ts +1 -0
  67. package/dist/components/core/table/molecules/ExpandableRow.vue.d.ts +47 -0
  68. package/dist/components/core/table/molecules/TableFooter.test.d.ts +1 -0
  69. package/dist/components/core/table/molecules/TableFooter.vue.d.ts +21 -0
  70. package/dist/components/core/table/molecules/TableHeader.test.d.ts +1 -0
  71. package/dist/components/core/table/molecules/TableHeader.vue.d.ts +49 -0
  72. package/dist/components/core/table/molecules/TableRow.test.d.ts +1 -0
  73. package/dist/components/core/table/molecules/TableRow.vue.d.ts +59 -0
  74. package/dist/components/core/table/molecules/index.d.ts +4 -0
  75. package/dist/components/feedback/Progress.vue.d.ts +1 -1
  76. package/dist/components/feedback/TableSkeleton.vue.d.ts +1 -1
  77. package/dist/components/feedback/index.cjs +14 -14
  78. package/dist/components/feedback/index.js +14 -14
  79. package/dist/components/form/Combobox.stories.d.ts +2 -0
  80. package/dist/components/form/Combobox.vue.d.ts +4 -0
  81. package/dist/components/form/DatePicker.stories.d.ts +2 -0
  82. package/dist/components/form/DatePicker.vue.d.ts +4 -0
  83. package/dist/components/form/FormSection.vue.d.ts +1 -1
  84. package/dist/components/form/FormSelect.stories.d.ts +2 -0
  85. package/dist/components/form/FormSelect.vue.d.ts +4 -0
  86. package/dist/components/form/IconPicker.stories.d.ts +19 -0
  87. package/dist/components/form/IconPicker.test.d.ts +1 -0
  88. package/dist/components/form/InputWrapper.stories.d.ts +1 -5
  89. package/dist/components/form/InputWrapper.vue.d.ts +6 -3
  90. package/dist/components/form/Rating.vue.d.ts +1 -1
  91. package/dist/components/form/SearchInput.vue.d.ts +1 -1
  92. package/dist/components/form/TagsInput.stories.d.ts +1 -0
  93. package/dist/components/form/TagsInput.vue.d.ts +3 -3
  94. package/dist/components/form/TextArea.stories.d.ts +3 -1
  95. package/dist/components/form/TextArea.vue.d.ts +4 -0
  96. package/dist/components/form/index.cjs +1 -1
  97. package/dist/components/form/index.js +2 -2
  98. package/dist/components/index.cjs +56 -39
  99. package/dist/components/index.cjs.map +1 -1
  100. package/dist/components/index.js +66 -49
  101. package/dist/components/layout/index.cjs +1 -1
  102. package/dist/components/layout/index.js +1 -1
  103. package/dist/composables/index.cjs +18 -9
  104. package/dist/composables/index.cjs.map +1 -1
  105. package/dist/composables/index.d.ts +8 -0
  106. package/dist/composables/index.js +15 -6
  107. package/dist/composables/index.js.map +1 -1
  108. package/dist/composables/useColumnResize.d.ts +38 -0
  109. package/dist/composables/useColumnResize.test.d.ts +1 -0
  110. package/dist/composables/useColumnVisibility.d.ts +44 -0
  111. package/dist/composables/useColumnVisibility.test.d.ts +1 -0
  112. package/dist/composables/useEditableCell.d.ts +51 -0
  113. package/dist/composables/useEditableCell.test.d.ts +1 -0
  114. package/dist/composables/useInputStyles.d.ts +32 -0
  115. package/dist/composables/useInputStyles.test.d.ts +1 -0
  116. package/dist/composables/usePagination.d.ts +44 -0
  117. package/dist/composables/usePagination.test.d.ts +1 -0
  118. package/dist/composables/usePinnedRows.d.ts +41 -0
  119. package/dist/composables/usePinnedRows.test.d.ts +1 -0
  120. package/dist/composables/useTableKeyboardNavigation.d.ts +52 -0
  121. package/dist/composables/useTableKeyboardNavigation.test.d.ts +1 -0
  122. package/dist/composables/useVirtualScroll.d.ts +32 -0
  123. package/dist/composables/useVirtualScroll.test.d.ts +1 -0
  124. package/dist/index-0kwQORZJ.js +114 -0
  125. package/dist/index-0kwQORZJ.js.map +1 -0
  126. package/dist/{index-5dQNEzd8.cjs → index-BMSH4AOz.cjs} +57 -40
  127. package/dist/{index-5dQNEzd8.cjs.map → index-BMSH4AOz.cjs.map} +1 -1
  128. package/dist/{index-SNefWfX0.js → index-BaWpldIJ.js} +3 -3
  129. package/dist/{index-SNefWfX0.js.map → index-BaWpldIJ.js.map} +1 -1
  130. package/dist/index.cjs +75 -49
  131. package/dist/index.cjs.map +1 -1
  132. package/dist/index.js +83 -57
  133. package/dist/index.js.map +1 -1
  134. package/dist/style.css +1 -1
  135. package/dist/types/components.d.ts +1 -1
  136. package/dist/types/property.d.ts +8 -0
  137. package/dist/{useDropdown-DK4c5JGL.cjs → useDropdown-HI7ABBLe.cjs} +5 -4
  138. package/dist/{useDropdown-DK4c5JGL.cjs.map → useDropdown-HI7ABBLe.cjs.map} +1 -1
  139. package/dist/{useDropdown-De0cKI83.js → useDropdown-XITCE_SM.js} +5 -4
  140. package/dist/{useDropdown-De0cKI83.js.map → useDropdown-XITCE_SM.js.map} +1 -1
  141. package/dist/useInputStyles-BFTJdXHL.js +127 -0
  142. package/dist/useInputStyles-BFTJdXHL.js.map +1 -0
  143. package/dist/useInputStyles-DMfvW6N5.cjs +126 -0
  144. package/dist/useInputStyles-DMfvW6N5.cjs.map +1 -0
  145. package/dist/usePagination-BGwbICFC.js +135 -0
  146. package/dist/usePagination-BGwbICFC.js.map +1 -0
  147. package/dist/usePagination-gvvh1zqA.cjs +134 -0
  148. package/dist/usePagination-gvvh1zqA.cjs.map +1 -0
  149. package/dist/useVirtualScroll-BivP86fA.cjs +869 -0
  150. package/dist/useVirtualScroll-BivP86fA.cjs.map +1 -0
  151. package/dist/useVirtualScroll-YeZru2Eo.js +870 -0
  152. package/dist/useVirtualScroll-YeZru2Eo.js.map +1 -0
  153. package/package.json +1 -1
  154. package/dist/CheckboxGroup.vue_vue_type_script_setup_true_lang-DuJr8cz3.cjs.map +0 -1
  155. package/dist/CheckboxGroup.vue_vue_type_script_setup_true_lang-N4oS_DJD.js.map +0 -1
  156. package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-BGUoa5fT.cjs.map +0 -1
  157. package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-DWs2V7xX.js.map +0 -1
  158. package/dist/FilterTabs.vue_vue_type_script_setup_true_lang-CcOgc2Y_.js.map +0 -1
  159. package/dist/FilterTabs.vue_vue_type_script_setup_true_lang-jW6Ikbvy.cjs.map +0 -1
  160. package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-BwtEbaiT.js +0 -150
  161. package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-BwtEbaiT.js.map +0 -1
  162. package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-DtwwmfWr.cjs +0 -149
  163. package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-DtwwmfWr.cjs.map +0 -1
  164. package/dist/components/core/TableComponent.stories.d.ts +0 -16
  165. package/dist/index-CDDUEkXf.js +0 -97
  166. package/dist/index-CDDUEkXf.js.map +0 -1
  167. package/dist/useDarkMode-Cl5QWTlC.js +0 -53
  168. package/dist/useDarkMode-Cl5QWTlC.js.map +0 -1
  169. package/dist/useDarkMode-DLZcJEUQ.cjs +0 -52
  170. package/dist/useDarkMode-DLZcJEUQ.cjs.map +0 -1
  171. package/dist/useToast-Bk60GArg.cjs +0 -176
  172. package/dist/useToast-Bk60GArg.cjs.map +0 -1
  173. package/dist/useToast-ina5g3mj.js +0 -177
  174. package/dist/useToast-ina5g3mj.js.map +0 -1
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ const vue = require("vue");
3
+ function useDarkMode(options = {}) {
4
+ const {
5
+ selector = "html",
6
+ attribute = "class",
7
+ storageKey = "dark-mode",
8
+ defaultValue = false
9
+ } = options;
10
+ const isDark = vue.ref(defaultValue);
11
+ const getInitialValue = () => {
12
+ if (typeof window === "undefined") return defaultValue;
13
+ const stored = localStorage.getItem(storageKey);
14
+ if (stored !== null) {
15
+ return stored === "true";
16
+ }
17
+ return window.matchMedia("(prefers-color-scheme: dark)").matches;
18
+ };
19
+ const updateDOM = (dark) => {
20
+ if (typeof document === "undefined") return;
21
+ const element = document.querySelector(selector);
22
+ if (!element) return;
23
+ if (attribute === "class") {
24
+ element.classList.toggle("dark", dark);
25
+ } else {
26
+ element.setAttribute(attribute, dark ? "dark" : "light");
27
+ }
28
+ };
29
+ const toggle = () => {
30
+ isDark.value = !isDark.value;
31
+ };
32
+ const set = (value) => {
33
+ isDark.value = value;
34
+ };
35
+ vue.watch(isDark, (newValue) => {
36
+ updateDOM(newValue);
37
+ if (typeof localStorage !== "undefined") {
38
+ localStorage.setItem(storageKey, String(newValue));
39
+ }
40
+ });
41
+ vue.onMounted(() => {
42
+ isDark.value = getInitialValue();
43
+ updateDOM(isDark.value);
44
+ });
45
+ return {
46
+ isDark,
47
+ toggle,
48
+ set
49
+ };
50
+ }
51
+ function usePagination(options) {
52
+ const {
53
+ items: itemsOption,
54
+ pageSize: initialPageSize = 10,
55
+ initialPage = 1
56
+ } = options;
57
+ const currentPage = vue.ref(initialPage);
58
+ const pageSize = vue.ref(initialPageSize);
59
+ const allItems = vue.computed(() => {
60
+ return "value" in itemsOption ? itemsOption.value : itemsOption;
61
+ });
62
+ const totalItems = vue.computed(() => allItems.value.length);
63
+ const totalPages = vue.computed(() => {
64
+ if (totalItems.value === 0) return 1;
65
+ return Math.ceil(totalItems.value / pageSize.value);
66
+ });
67
+ const startIndex = vue.computed(() => {
68
+ return (currentPage.value - 1) * pageSize.value;
69
+ });
70
+ const endIndex = vue.computed(() => {
71
+ return Math.min(startIndex.value + pageSize.value - 1, totalItems.value - 1);
72
+ });
73
+ const paginatedItems = vue.computed(() => {
74
+ const start = startIndex.value;
75
+ const end = start + pageSize.value;
76
+ return allItems.value.slice(start, end);
77
+ });
78
+ const hasPrevious = vue.computed(() => currentPage.value > 1);
79
+ const hasNext = vue.computed(() => currentPage.value < totalPages.value);
80
+ vue.watch(totalPages, (newTotalPages) => {
81
+ if (currentPage.value > newTotalPages) {
82
+ currentPage.value = Math.max(1, newTotalPages);
83
+ }
84
+ });
85
+ const goToPage = (page) => {
86
+ const validPage = Math.max(1, Math.min(page, totalPages.value));
87
+ currentPage.value = validPage;
88
+ };
89
+ const nextPage = () => {
90
+ if (hasNext.value) {
91
+ currentPage.value++;
92
+ }
93
+ };
94
+ const previousPage = () => {
95
+ if (hasPrevious.value) {
96
+ currentPage.value--;
97
+ }
98
+ };
99
+ const firstPage = () => {
100
+ currentPage.value = 1;
101
+ };
102
+ const lastPage = () => {
103
+ currentPage.value = totalPages.value;
104
+ };
105
+ const setPageSize = (size) => {
106
+ pageSize.value = size;
107
+ currentPage.value = 1;
108
+ };
109
+ const reset = () => {
110
+ currentPage.value = initialPage;
111
+ pageSize.value = initialPageSize;
112
+ };
113
+ return {
114
+ currentPage,
115
+ pageSize,
116
+ totalPages,
117
+ totalItems,
118
+ paginatedItems,
119
+ startIndex,
120
+ endIndex,
121
+ hasPrevious,
122
+ hasNext,
123
+ goToPage,
124
+ nextPage,
125
+ previousPage,
126
+ firstPage,
127
+ lastPage,
128
+ setPageSize,
129
+ reset
130
+ };
131
+ }
132
+ exports.useDarkMode = useDarkMode;
133
+ exports.usePagination = usePagination;
134
+ //# sourceMappingURL=usePagination-gvvh1zqA.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePagination-gvvh1zqA.cjs","sources":["../src/composables/useDarkMode.ts","../src/composables/usePagination.ts"],"sourcesContent":["import { ref, watch, onMounted } from 'vue'\n\nexport interface DarkModeOptions {\n selector?: string\n attribute?: string\n storageKey?: string\n defaultValue?: boolean\n}\n\n/**\n * Composable for managing dark mode state\n */\nexport function useDarkMode(options: DarkModeOptions = {}) {\n const {\n selector = 'html',\n attribute = 'class',\n storageKey = 'dark-mode',\n defaultValue = false,\n } = options\n\n const isDark = ref(defaultValue)\n\n const getInitialValue = (): boolean => {\n if (typeof window === 'undefined') return defaultValue\n\n const stored = localStorage.getItem(storageKey)\n if (stored !== null) {\n return stored === 'true'\n }\n\n return window.matchMedia('(prefers-color-scheme: dark)').matches\n }\n\n const updateDOM = (dark: boolean) => {\n if (typeof document === 'undefined') return\n\n const element = document.querySelector(selector)\n if (!element) return\n\n if (attribute === 'class') {\n element.classList.toggle('dark', dark)\n } else {\n element.setAttribute(attribute, dark ? 'dark' : 'light')\n }\n }\n\n const toggle = () => {\n isDark.value = !isDark.value\n }\n\n const set = (value: boolean) => {\n isDark.value = value\n }\n\n watch(isDark, (newValue) => {\n updateDOM(newValue)\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem(storageKey, String(newValue))\n }\n })\n\n onMounted(() => {\n isDark.value = getInitialValue()\n updateDOM(isDark.value)\n })\n\n return {\n isDark,\n toggle,\n set,\n }\n}\n","import { ref, computed, watch, type Ref, type ComputedRef } from 'vue'\r\n\r\nexport interface UsePaginationOptions<T> {\r\n /** The full array of items to paginate */\r\n items: T[] | Ref<T[]>\r\n /** Initial page size */\r\n pageSize?: number\r\n /** Initial page (1-indexed) */\r\n initialPage?: number\r\n}\r\n\r\nexport interface UsePaginationReturn<T> {\r\n /** Current page number (1-indexed) */\r\n currentPage: Ref<number>\r\n /** Current page size */\r\n pageSize: Ref<number>\r\n /** Total number of pages */\r\n totalPages: ComputedRef<number>\r\n /** Total number of items */\r\n totalItems: ComputedRef<number>\r\n /** Items for the current page */\r\n paginatedItems: ComputedRef<T[]>\r\n /** Index of the first item on current page (0-indexed) */\r\n startIndex: ComputedRef<number>\r\n /** Index of the last item on current page (0-indexed) */\r\n endIndex: ComputedRef<number>\r\n /** Whether there is a previous page */\r\n hasPrevious: ComputedRef<boolean>\r\n /** Whether there is a next page */\r\n hasNext: ComputedRef<boolean>\r\n /** Go to a specific page */\r\n goToPage: (page: number) => void\r\n /** Go to the next page */\r\n nextPage: () => void\r\n /** Go to the previous page */\r\n previousPage: () => void\r\n /** Go to the first page */\r\n firstPage: () => void\r\n /** Go to the last page */\r\n lastPage: () => void\r\n /** Set page size (resets to page 1) */\r\n setPageSize: (size: number) => void\r\n /** Reset to initial state */\r\n reset: () => void\r\n}\r\n\r\nexport function usePagination<T>(\r\n options: UsePaginationOptions<T>\r\n): UsePaginationReturn<T> {\r\n const {\r\n items: itemsOption,\r\n pageSize: initialPageSize = 10,\r\n initialPage = 1,\r\n } = options\r\n\r\n const currentPage = ref(initialPage)\r\n const pageSize = ref(initialPageSize)\r\n\r\n const allItems = computed(() => {\r\n return 'value' in itemsOption ? itemsOption.value : itemsOption\r\n })\r\n\r\n const totalItems = computed(() => allItems.value.length)\r\n\r\n const totalPages = computed(() => {\r\n if (totalItems.value === 0) return 1\r\n return Math.ceil(totalItems.value / pageSize.value)\r\n })\r\n\r\n const startIndex = computed(() => {\r\n return (currentPage.value - 1) * pageSize.value\r\n })\r\n\r\n const endIndex = computed(() => {\r\n return Math.min(startIndex.value + pageSize.value - 1, totalItems.value - 1)\r\n })\r\n\r\n const paginatedItems = computed(() => {\r\n const start = startIndex.value\r\n const end = start + pageSize.value\r\n return allItems.value.slice(start, end)\r\n })\r\n\r\n const hasPrevious = computed(() => currentPage.value > 1)\r\n const hasNext = computed(() => currentPage.value < totalPages.value)\r\n\r\n // Ensure current page is valid when items change\r\n watch(totalPages, (newTotalPages) => {\r\n if (currentPage.value > newTotalPages) {\r\n currentPage.value = Math.max(1, newTotalPages)\r\n }\r\n })\r\n\r\n const goToPage = (page: number) => {\r\n const validPage = Math.max(1, Math.min(page, totalPages.value))\r\n currentPage.value = validPage\r\n }\r\n\r\n const nextPage = () => {\r\n if (hasNext.value) {\r\n currentPage.value++\r\n }\r\n }\r\n\r\n const previousPage = () => {\r\n if (hasPrevious.value) {\r\n currentPage.value--\r\n }\r\n }\r\n\r\n const firstPage = () => {\r\n currentPage.value = 1\r\n }\r\n\r\n const lastPage = () => {\r\n currentPage.value = totalPages.value\r\n }\r\n\r\n const setPageSize = (size: number) => {\r\n pageSize.value = size\r\n currentPage.value = 1 // Reset to first page when changing page size\r\n }\r\n\r\n const reset = () => {\r\n currentPage.value = initialPage\r\n pageSize.value = initialPageSize\r\n }\r\n\r\n return {\r\n currentPage,\r\n pageSize,\r\n totalPages,\r\n totalItems,\r\n paginatedItems,\r\n startIndex,\r\n endIndex,\r\n hasPrevious,\r\n hasNext,\r\n goToPage,\r\n nextPage,\r\n previousPage,\r\n firstPage,\r\n lastPage,\r\n setPageSize,\r\n reset,\r\n }\r\n}\r\n"],"names":["ref","watch","onMounted","computed"],"mappings":"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"}