cisse-vue-ui 0.8.4 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +666 -4
- package/dist/{CheckboxGroup.vue_vue_type_script_setup_true_lang-B190Yija.js → CheckboxGroup.vue_vue_type_script_setup_true_lang-ZP02bMgY.js} +2 -2
- package/dist/{CheckboxGroup.vue_vue_type_script_setup_true_lang-B190Yija.js.map → CheckboxGroup.vue_vue_type_script_setup_true_lang-ZP02bMgY.js.map} +1 -1
- package/dist/{ConfirmDialog.vue_vue_type_script_setup_true_lang-DWs2V7xX.js → ConfirmDialog.vue_vue_type_script_setup_true_lang-C5KHLMvx.js} +37 -184
- package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-C5KHLMvx.js.map +1 -0
- 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
- package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-CLfy0-Wb.cjs.map +1 -0
- package/dist/{FilterTabs.vue_vue_type_script_setup_true_lang-BmJHgkBs.js → FilterTabs.vue_vue_type_script_setup_true_lang-CJnvcF8Z.js} +1568 -384
- package/dist/FilterTabs.vue_vue_type_script_setup_true_lang-CJnvcF8Z.js.map +1 -0
- package/dist/{FilterTabs.vue_vue_type_script_setup_true_lang-DYxh-wFx.cjs → FilterTabs.vue_vue_type_script_setup_true_lang-l8lJzwoY.cjs} +1564 -380
- package/dist/FilterTabs.vue_vue_type_script_setup_true_lang-l8lJzwoY.cjs.map +1 -0
- package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-BHopJ9RG.js +298 -0
- package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-BHopJ9RG.js.map +1 -0
- package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-Bo3HqgX0.cjs +297 -0
- package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-Bo3HqgX0.cjs.map +1 -0
- package/dist/components/core/Breadcrumb.stories.d.ts +5 -0
- package/dist/components/core/CardWrapper.stories.d.ts +32 -0
- package/dist/components/core/CardWrapper.vue.d.ts +129 -0
- package/dist/components/core/CollapsibleCard.vue.d.ts +1 -1
- package/dist/components/core/DataTable.stories.d.ts +38 -0
- package/dist/components/core/Dropdown.vue.d.ts +1 -1
- package/dist/components/core/Popover.vue.d.ts +2 -2
- package/dist/components/core/StatItem.stories.d.ts +25 -0
- package/dist/components/core/StatItem.test.d.ts +1 -0
- package/dist/components/core/StatItem.vue.d.ts +81 -0
- package/dist/components/core/Stats.stories.d.ts +24 -0
- package/dist/components/core/Stats.test.d.ts +1 -0
- package/dist/components/core/Stats.vue.d.ts +41 -0
- package/dist/components/core/Tooltip.stories.d.ts +3 -0
- package/dist/components/core/index.cjs +41 -22
- package/dist/components/core/index.cjs.map +1 -1
- package/dist/components/core/index.d.ts +10 -4
- package/dist/components/core/index.js +41 -22
- package/dist/components/core/table/DataTable.test.d.ts +1 -0
- package/dist/components/core/{TableComponent.vue.d.ts → table/DataTable.vue.d.ts} +60 -7
- package/dist/components/core/table/Table.stories.d.ts +27 -0
- package/dist/components/core/table/atoms/Caption.test.d.ts +1 -0
- package/dist/components/core/table/atoms/Caption.vue.d.ts +26 -0
- package/dist/components/core/table/atoms/Col.test.d.ts +1 -0
- package/dist/components/core/table/atoms/Col.vue.d.ts +8 -0
- package/dist/components/core/table/atoms/Colgroup.test.d.ts +1 -0
- package/dist/components/core/table/atoms/Colgroup.vue.d.ts +17 -0
- package/dist/components/core/table/atoms/Table.test.d.ts +1 -0
- package/dist/components/core/table/atoms/Table.vue.d.ts +46 -0
- package/dist/components/core/table/atoms/Tbody.test.d.ts +1 -0
- package/dist/components/core/table/atoms/Tbody.vue.d.ts +17 -0
- package/dist/components/core/table/atoms/Td.test.d.ts +1 -0
- package/dist/components/core/table/atoms/Td.vue.d.ts +43 -0
- package/dist/components/core/table/atoms/Tfoot.test.d.ts +1 -0
- package/dist/components/core/table/atoms/Tfoot.vue.d.ts +17 -0
- package/dist/components/core/table/atoms/Th.test.d.ts +1 -0
- package/dist/components/core/table/atoms/Th.vue.d.ts +64 -0
- package/dist/components/core/table/atoms/Thead.test.d.ts +1 -0
- package/dist/components/core/table/atoms/Thead.vue.d.ts +17 -0
- package/dist/components/core/table/atoms/Tr.test.d.ts +1 -0
- package/dist/components/core/table/atoms/Tr.vue.d.ts +35 -0
- package/dist/components/core/table/atoms/index.d.ts +10 -0
- package/dist/components/core/table/index.d.ts +3 -0
- package/dist/components/core/table/molecules/ExpandableRow.test.d.ts +1 -0
- package/dist/components/core/table/molecules/ExpandableRow.vue.d.ts +47 -0
- package/dist/components/core/table/molecules/TableFooter.test.d.ts +1 -0
- package/dist/components/core/table/molecules/TableFooter.vue.d.ts +21 -0
- package/dist/components/core/table/molecules/TableHeader.test.d.ts +1 -0
- package/dist/components/core/table/molecules/TableHeader.vue.d.ts +49 -0
- package/dist/components/core/table/molecules/TableRow.test.d.ts +1 -0
- package/dist/components/core/table/molecules/TableRow.vue.d.ts +59 -0
- package/dist/components/core/table/molecules/index.d.ts +4 -0
- package/dist/components/feedback/Progress.vue.d.ts +1 -1
- package/dist/components/feedback/TableSkeleton.vue.d.ts +1 -1
- package/dist/components/feedback/index.cjs +14 -14
- package/dist/components/feedback/index.js +14 -14
- package/dist/components/form/Combobox.vue.d.ts +1 -1
- package/dist/components/form/DatePicker.vue.d.ts +1 -1
- package/dist/components/form/FormSection.vue.d.ts +1 -1
- package/dist/components/form/IconPicker.stories.d.ts +19 -0
- package/dist/components/form/IconPicker.test.d.ts +1 -0
- package/dist/components/form/InputWrapper.stories.d.ts +0 -5
- package/dist/components/form/Rating.vue.d.ts +1 -1
- package/dist/components/form/SearchInput.vue.d.ts +1 -1
- package/dist/components/form/index.js +2 -2
- package/dist/components/index.cjs +55 -36
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +67 -48
- package/dist/composables/index.cjs +15 -8
- package/dist/composables/index.cjs.map +1 -1
- package/dist/composables/index.d.ts +7 -0
- package/dist/composables/index.js +12 -5
- package/dist/composables/useColumnResize.d.ts +38 -0
- package/dist/composables/useColumnResize.test.d.ts +1 -0
- package/dist/composables/useColumnVisibility.d.ts +44 -0
- package/dist/composables/useColumnVisibility.test.d.ts +1 -0
- package/dist/composables/useEditableCell.d.ts +51 -0
- package/dist/composables/useEditableCell.test.d.ts +1 -0
- package/dist/composables/usePagination.d.ts +44 -0
- package/dist/composables/usePagination.test.d.ts +1 -0
- package/dist/composables/usePinnedRows.d.ts +41 -0
- package/dist/composables/usePinnedRows.test.d.ts +1 -0
- package/dist/composables/useTableKeyboardNavigation.d.ts +52 -0
- package/dist/composables/useTableKeyboardNavigation.test.d.ts +1 -0
- package/dist/composables/useVirtualScroll.d.ts +32 -0
- package/dist/composables/useVirtualScroll.test.d.ts +1 -0
- package/dist/{index-SNefWfX0.js → index-BaWpldIJ.js} +3 -3
- package/dist/{index-SNefWfX0.js.map → index-BaWpldIJ.js.map} +1 -1
- package/dist/{index-LFQFhClN.cjs → index-CYXOfUOG.cjs} +56 -37
- package/dist/{index-LFQFhClN.cjs.map → index-CYXOfUOG.cjs.map} +1 -1
- package/dist/index-C_N7WRnM.js +116 -0
- package/dist/index-C_N7WRnM.js.map +1 -0
- package/dist/index.cjs +71 -45
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +81 -55
- package/dist/style.css +1 -1
- package/dist/types/components.d.ts +1 -1
- package/dist/types/property.d.ts +8 -0
- package/dist/usePagination-BGwbICFC.js +135 -0
- package/dist/usePagination-BGwbICFC.js.map +1 -0
- package/dist/usePagination-gvvh1zqA.cjs +134 -0
- package/dist/usePagination-gvvh1zqA.cjs.map +1 -0
- package/dist/useVirtualScroll-BivP86fA.cjs +869 -0
- package/dist/useVirtualScroll-BivP86fA.cjs.map +1 -0
- package/dist/useVirtualScroll-YeZru2Eo.js +870 -0
- package/dist/useVirtualScroll-YeZru2Eo.js.map +1 -0
- package/package.json +1 -1
- package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-BGUoa5fT.cjs.map +0 -1
- package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-DWs2V7xX.js.map +0 -1
- package/dist/FilterTabs.vue_vue_type_script_setup_true_lang-BmJHgkBs.js.map +0 -1
- package/dist/FilterTabs.vue_vue_type_script_setup_true_lang-DYxh-wFx.cjs.map +0 -1
- package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-BwtEbaiT.js +0 -150
- package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-BwtEbaiT.js.map +0 -1
- package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-DtwwmfWr.cjs +0 -149
- package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-DtwwmfWr.cjs.map +0 -1
- package/dist/components/core/StatsCard.stories.d.ts +0 -15
- package/dist/components/core/StatsCard.vue.d.ts +0 -44
- package/dist/components/core/StatsGrid.stories.d.ts +0 -12
- package/dist/components/core/StatsGrid.vue.d.ts +0 -16
- package/dist/components/core/TableComponent.stories.d.ts +0 -16
- package/dist/index-CyL_6V7D.js +0 -97
- package/dist/index-CyL_6V7D.js.map +0 -1
- package/dist/useDarkMode-Cl5QWTlC.js +0 -53
- package/dist/useDarkMode-Cl5QWTlC.js.map +0 -1
- package/dist/useDarkMode-DLZcJEUQ.cjs +0 -52
- package/dist/useDarkMode-DLZcJEUQ.cjs.map +0 -1
- package/dist/useToast-Bk60GArg.cjs +0 -176
- package/dist/useToast-Bk60GArg.cjs.map +0 -1
- package/dist/useToast-ina5g3mj.js +0 -177
- package/dist/useToast-ina5g3mj.js.map +0 -1
- /package/dist/components/core/{StatsCard.test.d.ts → AccordionItem.test.d.ts} +0 -0
- /package/dist/components/core/{StatsGrid.test.d.ts → CardWrapper.test.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePagination-BGwbICFC.js","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":[],"mappings":"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"}
|
|
@@ -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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"}
|