yuyeon 0.3.2-rc.8 → 0.3.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 (73) hide show
  1. package/dist/style.css +1 -1
  2. package/dist/yuyeon.js +3483 -3270
  3. package/dist/yuyeon.umd.cjs +3 -3
  4. package/lib/components/table/YDataTable.js +25 -14
  5. package/lib/components/table/YDataTable.js.map +1 -1
  6. package/lib/components/table/YDataTableBody.js +14 -18
  7. package/lib/components/table/YDataTableBody.js.map +1 -1
  8. package/lib/components/table/YDataTableControl.js +1 -1
  9. package/lib/components/table/YDataTableControl.js.map +1 -1
  10. package/lib/components/table/YDataTableHead.js +3 -3
  11. package/lib/components/table/YDataTableHead.js.map +1 -1
  12. package/lib/components/table/YDataTableLayer.js +11 -4
  13. package/lib/components/table/YDataTableLayer.js.map +1 -1
  14. package/lib/components/table/YDataTableLayerRow.js +87 -0
  15. package/lib/components/table/YDataTableLayerRow.js.map +1 -0
  16. package/lib/components/table/YDataTableLayerRow.vue +146 -0
  17. package/lib/components/table/YDataTableLayerRows.js +60 -0
  18. package/lib/components/table/YDataTableLayerRows.js.map +1 -0
  19. package/lib/components/table/YDataTableLayerRows.scss +14 -0
  20. package/lib/components/table/YDataTableRow.js +13 -5
  21. package/lib/components/table/YDataTableRow.js.map +1 -1
  22. package/lib/components/table/YDataTableRows.scss +14 -0
  23. package/lib/components/table/YDataTableServer.js +27 -17
  24. package/lib/components/table/YDataTableServer.js.map +1 -1
  25. package/lib/components/table/YTable.js +8 -3
  26. package/lib/components/table/YTable.js.map +1 -1
  27. package/lib/components/table/composables/expand.js +49 -0
  28. package/lib/components/table/composables/expand.js.map +1 -0
  29. package/lib/components/table/composables/header.js +127 -0
  30. package/lib/components/table/composables/header.js.map +1 -0
  31. package/lib/components/table/composables/items.js +58 -0
  32. package/lib/components/table/composables/items.js.map +1 -0
  33. package/lib/components/table/composables/measure.js +55 -0
  34. package/lib/components/table/composables/measure.js.map +1 -0
  35. package/lib/components/table/composables/options.js +33 -0
  36. package/lib/components/table/composables/options.js.map +1 -0
  37. package/lib/components/table/composables/pagination.js +99 -0
  38. package/lib/components/table/composables/pagination.js.map +1 -0
  39. package/lib/components/table/composables/provides.js +3 -0
  40. package/lib/components/table/composables/provides.js.map +1 -0
  41. package/lib/components/table/composables/selection.js +196 -0
  42. package/lib/components/table/composables/selection.js.map +1 -0
  43. package/lib/components/table/composables/sorted-items.js +50 -0
  44. package/lib/components/table/composables/sorted-items.js.map +1 -0
  45. package/lib/components/table/composables/sorting.js +73 -0
  46. package/lib/components/table/composables/sorting.js.map +1 -0
  47. package/lib/components/table/composibles/measure.js +21 -5
  48. package/lib/components/table/composibles/measure.js.map +1 -1
  49. package/lib/components/table/index.js +2 -0
  50. package/lib/components/table/index.js.map +1 -1
  51. package/lib/components/table/types/index.js.map +1 -1
  52. package/lib/components/table/types/item.js.map +1 -1
  53. package/package.json +5 -2
  54. package/types/components/table/YDataTable.d.ts +22 -0
  55. package/types/components/table/YDataTableBody.d.ts +1 -3
  56. package/types/components/table/YDataTableLayer.d.ts +4 -1
  57. package/types/components/table/YDataTableLayerRow.d.ts +22 -0
  58. package/types/components/table/YDataTableLayerRows.d.ts +9 -0
  59. package/types/components/table/YDataTableServer.d.ts +22 -0
  60. package/types/components/table/composables/expand.d.ts +42 -0
  61. package/types/components/table/composables/header.d.ts +207 -0
  62. package/types/components/table/composables/items.d.ts +55 -0
  63. package/types/components/table/composables/measure.d.ts +8 -0
  64. package/types/components/table/composables/options.d.ts +11 -0
  65. package/types/components/table/composables/pagination.d.ts +81 -0
  66. package/types/components/table/composables/provides.d.ts +15 -0
  67. package/types/components/table/composables/selection.d.ts +82 -0
  68. package/types/components/table/composables/sorted-items.d.ts +7 -0
  69. package/types/components/table/composables/sorting.d.ts +62 -0
  70. package/types/components/table/index.d.ts +2 -0
  71. package/types/components/table/types/index.d.ts +1 -1
  72. package/types/components/table/types/item.d.ts +2 -1
  73. package/types/shims.d.ts +58 -56
@@ -0,0 +1,49 @@
1
+ import { inject, provide } from 'vue';
2
+ import { useModelDuplex } from "../../../composables/communication.js";
3
+ import { propsFactory } from "../../../util/component/props.js";
4
+ export const pressDataTableExpandProps = propsFactory({
5
+ enableExpand: Boolean,
6
+ expanded: {
7
+ type: Array,
8
+ default: () => []
9
+ }
10
+ }, 'YDataTable--expand');
11
+ const Y_DATA_TABLE_EXPAND_KEY = Symbol.for('yuyeon.data-table.expand');
12
+ export function provideExpand(props) {
13
+ const expands = useModelDuplex(props, 'expanded', props.expanded ?? [], v => new Set(v), v => [...v]);
14
+ function isExpanded(item) {
15
+ return expands.value.has(item.value);
16
+ }
17
+ function expand(item, value) {
18
+ const neo = new Set(expands.value);
19
+ if (value) {
20
+ neo.add(item.value);
21
+ } else {
22
+ neo.delete(item.value);
23
+ }
24
+ expands.value = neo;
25
+ }
26
+ function toggleExpand(item) {
27
+ expand(item, !isExpanded(item));
28
+ }
29
+ provide(Y_DATA_TABLE_EXPAND_KEY, {
30
+ expands,
31
+ isExpanded,
32
+ expand,
33
+ toggleExpand
34
+ });
35
+ return {
36
+ expands,
37
+ isExpanded,
38
+ expand,
39
+ toggleExpand
40
+ };
41
+ }
42
+ export function useExpand() {
43
+ const instance = inject(Y_DATA_TABLE_EXPAND_KEY);
44
+ if (!instance) {
45
+ throw new Error(`Not provided: ${Y_DATA_TABLE_EXPAND_KEY.description}`);
46
+ }
47
+ return instance;
48
+ }
49
+ //# sourceMappingURL=expand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expand.js","names":["inject","provide","useModelDuplex","propsFactory","pressDataTableExpandProps","enableExpand","Boolean","expanded","type","Array","default","Y_DATA_TABLE_EXPAND_KEY","Symbol","for","provideExpand","props","expands","v","Set","isExpanded","item","value","has","expand","neo","add","delete","toggleExpand","useExpand","instance","Error","description"],"sources":["../../../../src/components/table/composables/expand.ts"],"sourcesContent":["import {\n type InjectionKey,\n type PropType,\n type Ref,\n inject,\n provide,\n} from 'vue';\n\nimport { useModelDuplex } from '@/composables/communication';\nimport { propsFactory } from '@/util/component/props';\n\nimport type { DataTableItem } from '../types/item';\n\nexport const pressDataTableExpandProps = propsFactory(\n {\n enableExpand: Boolean,\n expanded: {\n type: Array as PropType<readonly string[]>,\n default: () => [],\n },\n },\n 'YDataTable--expand',\n);\n\ntype DataTableExpandProps = {\n enableExpand: boolean;\n expanded: readonly string[];\n 'onUpdate:expanded': ((value: any[]) => void) | undefined;\n};\n\nconst Y_DATA_TABLE_EXPAND_KEY: InjectionKey<{\n expands: Ref<Set<string>>;\n isExpanded: (item: DataTableItem) => boolean;\n expand: (item: DataTableItem, value: boolean) => void;\n toggleExpand: (item: DataTableItem) => void;\n}> = Symbol.for('yuyeon.data-table.expand');\n\nexport function provideExpand(props: DataTableExpandProps) {\n const expands = useModelDuplex(\n props,\n 'expanded',\n props.expanded ?? [],\n (v) => new Set(v),\n (v) => [...v],\n );\n\n function isExpanded(item: DataTableItem) {\n return expands.value.has(item.value);\n }\n\n function expand(item: DataTableItem, value: boolean) {\n const neo = new Set(expands.value);\n if (value) {\n neo.add(item.value);\n } else {\n neo.delete(item.value);\n }\n\n expands.value = neo;\n }\n\n function toggleExpand(item: DataTableItem) {\n expand(item, !isExpanded(item));\n }\n\n provide(Y_DATA_TABLE_EXPAND_KEY, {\n expands,\n isExpanded,\n expand,\n toggleExpand,\n });\n\n return {\n expands,\n isExpanded,\n expand,\n toggleExpand,\n };\n}\n\nexport function useExpand() {\n const instance = inject(Y_DATA_TABLE_EXPAND_KEY);\n if (!instance) {\n throw new Error(`Not provided: ${Y_DATA_TABLE_EXPAND_KEY.description}`);\n }\n return instance;\n}\n"],"mappings":"AAAA,SAIEA,MAAM,EACNC,OAAO,QACF,KAAK;AAAC,SAEJC,cAAc;AAAA,SACdC,YAAY;AAIrB,OAAO,MAAMC,yBAAyB,GAAGD,YAAY,CACnD;EACEE,YAAY,EAAEC,OAAO;EACrBC,QAAQ,EAAE;IACRC,IAAI,EAAEC,KAAoC;IAC1CC,OAAO,EAAEA,CAAA,KAAM;EACjB;AACF,CAAC,EACD,oBACF,CAAC;AAQD,MAAMC,uBAKJ,GAAGC,MAAM,CAACC,GAAG,CAAC,0BAA0B,CAAC;AAE3C,OAAO,SAASC,aAAaA,CAACC,KAA2B,EAAE;EACzD,MAAMC,OAAO,GAAGd,cAAc,CAC5Ba,KAAK,EACL,UAAU,EACVA,KAAK,CAACR,QAAQ,IAAI,EAAE,EACnBU,CAAC,IAAK,IAAIC,GAAG,CAACD,CAAC,CAAC,EAChBA,CAAC,IAAK,CAAC,GAAGA,CAAC,CACd,CAAC;EAED,SAASE,UAAUA,CAACC,IAAmB,EAAE;IACvC,OAAOJ,OAAO,CAACK,KAAK,CAACC,GAAG,CAACF,IAAI,CAACC,KAAK,CAAC;EACtC;EAEA,SAASE,MAAMA,CAACH,IAAmB,EAAEC,KAAc,EAAE;IACnD,MAAMG,GAAG,GAAG,IAAIN,GAAG,CAACF,OAAO,CAACK,KAAK,CAAC;IAClC,IAAIA,KAAK,EAAE;MACTG,GAAG,CAACC,GAAG,CAACL,IAAI,CAACC,KAAK,CAAC;IACrB,CAAC,MAAM;MACLG,GAAG,CAACE,MAAM,CAACN,IAAI,CAACC,KAAK,CAAC;IACxB;IAEAL,OAAO,CAACK,KAAK,GAAGG,GAAG;EACrB;EAEA,SAASG,YAAYA,CAACP,IAAmB,EAAE;IACzCG,MAAM,CAACH,IAAI,EAAE,CAACD,UAAU,CAACC,IAAI,CAAC,CAAC;EACjC;EAEAnB,OAAO,CAACU,uBAAuB,EAAE;IAC/BK,OAAO;IACPG,UAAU;IACVI,MAAM;IACNI;EACF,CAAC,CAAC;EAEF,OAAO;IACLX,OAAO;IACPG,UAAU;IACVI,MAAM;IACNI;EACF,CAAC;AACH;AAEA,OAAO,SAASC,SAASA,CAAA,EAAG;EAC1B,MAAMC,QAAQ,GAAG7B,MAAM,CAACW,uBAAuB,CAAC;EAChD,IAAI,CAACkB,QAAQ,EAAE;IACb,MAAM,IAAIC,KAAK,CAAE,iBAAgBnB,uBAAuB,CAACoB,WAAY,EAAC,CAAC;EACzE;EACA,OAAOF,QAAQ;AACjB"}
@@ -0,0 +1,127 @@
1
+ import { inject, provide, ref, watchEffect } from 'vue';
2
+ import { getRangeArr } from "../../../util/common.js";
3
+ import { propsFactory } from "../../../util/component/index.js";
4
+ export const pressDataTableHeader = propsFactory({
5
+ headers: {
6
+ type: Array,
7
+ default: () => []
8
+ }
9
+ }, 'YDataTable--header');
10
+ export const Y_DATA_TABLE_HEADER_KEY = Symbol.for('yuyeon.data-table.header');
11
+ export function createHeader(props, options) {
12
+ const headers = ref([]);
13
+ const columns = ref([]);
14
+ watchEffect(() => {
15
+ const rows = props.headers?.length ? [props.headers] : [];
16
+ const flat = rows.flatMap((row, index) => row.map(column => ({
17
+ column,
18
+ rowIndex: index
19
+ })));
20
+ const rowCount = rows.length;
21
+ const defaultHeader = {
22
+ text: '',
23
+ sortable: false
24
+ };
25
+ const defaultActionHeader = {
26
+ ...defaultHeader,
27
+ width: 48
28
+ };
29
+ if (options?.enableSelect?.value) {
30
+ const foundIndex = flat.findIndex(_ref => {
31
+ let {
32
+ column
33
+ } = _ref;
34
+ return column.key === 'data-table-select';
35
+ });
36
+ if (foundIndex < 0) {
37
+ const fixed = flat.some(_ref2 => {
38
+ let {
39
+ column
40
+ } = _ref2;
41
+ return column?.fixed === true || column?.fixed === 'left';
42
+ });
43
+ flat.unshift({
44
+ column: {
45
+ ...defaultActionHeader,
46
+ key: 'data-table-select',
47
+ rowspan: rowCount,
48
+ fixed
49
+ },
50
+ rowIndex: 0
51
+ });
52
+ } else {
53
+ flat.splice(foundIndex, 1, {
54
+ column: {
55
+ ...defaultActionHeader,
56
+ ...flat[foundIndex].column
57
+ },
58
+ rowIndex: flat[foundIndex].rowIndex
59
+ });
60
+ }
61
+ }
62
+ const fixedRows = getRangeArr(rowCount).map(() => []);
63
+ const fixedOffsets = getRangeArr(rowCount).fill(0);
64
+ flat.forEach(_ref3 => {
65
+ let {
66
+ column,
67
+ rowIndex
68
+ } = _ref3;
69
+ const {
70
+ key
71
+ } = column;
72
+ for (let i = rowIndex; i <= rowIndex + (column.rowspan ?? 1) - 1; i += 1) {
73
+ fixedRows[i].push({
74
+ ...column,
75
+ key,
76
+ fixedOffset: fixedOffsets[i],
77
+ sortable: column.sortable ?? !!key
78
+ });
79
+ fixedOffsets[i] += Number(column.width ?? 0);
80
+ }
81
+ });
82
+ fixedRows.forEach(row => {
83
+ for (let i = row.length - 1; i >= 0; i--) {
84
+ if (row[i].fixed === true || row[i].fixed === 'left') {
85
+ row[i].lastFixed = true;
86
+ break;
87
+ }
88
+ }
89
+ // fixed right
90
+ const rightFixed = row.filter(col => col.fixed === 'right');
91
+ let rightOffsets = 0;
92
+ for (let i = rightFixed.length - 1; i >= 0; i--) {
93
+ rightFixed[i].rightOffset = rightOffsets;
94
+ rightOffsets += Number(rightFixed[i].width ?? 0);
95
+ if (i === 0) {
96
+ rightFixed[i].lastFixed = true;
97
+ }
98
+ }
99
+ });
100
+ const seen = new Set();
101
+ headers.value = fixedRows.map(row => {
102
+ const filtered = [];
103
+ for (const column of row) {
104
+ if (!seen.has(column.key)) {
105
+ seen.add(column.key);
106
+ filtered.push(column);
107
+ }
108
+ }
109
+ return filtered;
110
+ });
111
+ columns.value = fixedRows[fixedRows.length - 1] || [];
112
+ });
113
+ const data = {
114
+ headers,
115
+ columns
116
+ };
117
+ provide(Y_DATA_TABLE_HEADER_KEY, data);
118
+ return data;
119
+ }
120
+ export function useHeader() {
121
+ const data = inject(Y_DATA_TABLE_HEADER_KEY);
122
+ if (!data) {
123
+ throw new Error(`Not provided: ${Y_DATA_TABLE_HEADER_KEY.description}`);
124
+ }
125
+ return data;
126
+ }
127
+ //# sourceMappingURL=header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.js","names":["inject","provide","ref","watchEffect","getRangeArr","propsFactory","pressDataTableHeader","headers","type","Array","default","Y_DATA_TABLE_HEADER_KEY","Symbol","for","createHeader","props","options","columns","rows","length","flat","flatMap","row","index","map","column","rowIndex","rowCount","defaultHeader","text","sortable","defaultActionHeader","width","enableSelect","value","foundIndex","findIndex","_ref","key","fixed","some","_ref2","unshift","rowspan","splice","fixedRows","fixedOffsets","fill","forEach","_ref3","i","push","fixedOffset","Number","lastFixed","rightFixed","filter","col","rightOffsets","rightOffset","seen","Set","filtered","has","add","data","useHeader","Error","description"],"sources":["../../../../src/components/table/composables/header.ts"],"sourcesContent":["import {\r\n type DeepReadonly,\r\n type InjectionKey,\r\n type PropType,\r\n type Ref,\r\n inject,\r\n provide,\r\n ref,\r\n watchEffect,\r\n} from 'vue';\r\n\r\nimport { getRangeArr } from '@/util/common';\r\nimport { propsFactory } from '@/util/component';\r\n\r\nimport { type DataTableHeader, type InternalDataTableHeader } from '../types';\r\n\r\nexport const pressDataTableHeader = propsFactory(\r\n {\r\n headers: {\r\n type: Array as PropType<DeepReadonly<DataTableHeader[]>>,\r\n default: () => [],\r\n },\r\n },\r\n 'YDataTable--header',\r\n);\r\n\r\nexport const Y_DATA_TABLE_HEADER_KEY: InjectionKey<{\r\n headers: Ref<InternalDataTableHeader[][]>;\r\n columns: Ref<InternalDataTableHeader[]>;\r\n}> = Symbol.for('yuyeon.data-table.header');\r\n\r\ntype HeaderProps = {\r\n headers: DeepReadonly<DataTableHeader[]> | undefined;\r\n};\r\n\r\nexport function createHeader(\r\n props: HeaderProps,\r\n options?: {\r\n enableSelect?: Ref<boolean>;\r\n },\r\n) {\r\n const headers = ref<InternalDataTableHeader[][]>([]);\r\n const columns = ref<InternalDataTableHeader[]>([]);\r\n\r\n watchEffect(() => {\r\n const rows = props.headers?.length\r\n ? [props.headers as DataTableHeader[]]\r\n : [];\r\n const flat = rows.flatMap((row, index) =>\r\n row.map((column) => ({ column, rowIndex: index })),\r\n );\r\n const rowCount = rows.length;\r\n const defaultHeader = { text: '', sortable: false };\r\n const defaultActionHeader = { ...defaultHeader, width: 48 };\r\n\r\n if (options?.enableSelect?.value) {\r\n const foundIndex = flat.findIndex(\r\n ({ column }) => column.key === 'data-table-select',\r\n );\r\n if (foundIndex < 0) {\r\n const fixed = flat.some(\r\n ({ column }) => column?.fixed === true || column?.fixed === 'left',\r\n );\r\n flat.unshift({\r\n column: {\r\n ...defaultActionHeader,\r\n key: 'data-table-select',\r\n rowspan: rowCount,\r\n fixed,\r\n },\r\n rowIndex: 0,\r\n });\r\n } else {\r\n flat.splice(foundIndex, 1, {\r\n column: {\r\n ...defaultActionHeader,\r\n ...flat[foundIndex].column,\r\n },\r\n rowIndex: flat[foundIndex].rowIndex,\r\n });\r\n }\r\n }\r\n\r\n const fixedRows: InternalDataTableHeader[][] = getRangeArr(rowCount).map(\r\n () => [],\r\n );\r\n const fixedOffsets = getRangeArr(rowCount).fill(0);\r\n\r\n flat.forEach(({ column, rowIndex }) => {\r\n const { key } = column;\r\n for (\r\n let i = rowIndex;\r\n i <= rowIndex + (column.rowspan ?? 1) - 1;\r\n i += 1\r\n ) {\r\n fixedRows[i].push({\r\n ...column,\r\n key,\r\n fixedOffset: fixedOffsets[i],\r\n sortable: column.sortable ?? !!key,\r\n });\r\n fixedOffsets[i] += Number(column.width ?? 0);\r\n }\r\n });\r\n\r\n fixedRows.forEach((row) => {\r\n for (let i = row.length - 1; i >= 0; i--) {\r\n if (row[i].fixed === true || row[i].fixed === 'left') {\r\n row[i].lastFixed = true;\r\n break;\r\n }\r\n }\r\n // fixed right\r\n const rightFixed = row.filter((col) => col.fixed === 'right');\r\n let rightOffsets = 0;\r\n for (let i = rightFixed.length - 1; i >= 0; i--) {\r\n rightFixed[i].rightOffset = rightOffsets;\r\n rightOffsets += Number(rightFixed[i].width ?? 0);\r\n if (i === 0) {\r\n rightFixed[i].lastFixed = true;\r\n }\r\n }\r\n });\r\n\r\n const seen = new Set();\r\n headers.value = fixedRows.map((row) => {\r\n const filtered = [];\r\n for (const column of row) {\r\n if (!seen.has(column.key)) {\r\n seen.add(column.key);\r\n filtered.push(column);\r\n }\r\n }\r\n return filtered;\r\n });\r\n columns.value = (fixedRows[fixedRows.length - 1]) || [];\r\n });\r\n\r\n const data = { headers, columns };\r\n\r\n provide(Y_DATA_TABLE_HEADER_KEY, data);\r\n\r\n return data;\r\n}\r\n\r\nexport function useHeader() {\r\n const data = inject(Y_DATA_TABLE_HEADER_KEY);\r\n if (!data) {\r\n throw new Error(`Not provided: ${Y_DATA_TABLE_HEADER_KEY.description}`);\r\n }\r\n return data;\r\n}\r\n"],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { computed, ref } from 'vue';
2
+ import { getPropertyFromItem } from "../../../util/common.js";
3
+ import { propsFactory } from "../../../util/component/index.js";
4
+ export const pressDataTableItemsProps = propsFactory({
5
+ items: {
6
+ type: Array,
7
+ default: () => []
8
+ },
9
+ itemKey: {
10
+ type: [String, Array, Function],
11
+ default: 'id'
12
+ },
13
+ itemSelectable: {
14
+ type: [String, Array, Function],
15
+ default: null
16
+ },
17
+ returnItem: Boolean
18
+ }, 'YDataTable--items');
19
+ export function updateItem(props, item, index, columns) {
20
+ const rowRef = ref(null);
21
+ const key = getPropertyFromItem(item, props.itemKey);
22
+ const value = props.returnItem ? item : key;
23
+ let selectable;
24
+ if (typeof props.itemSelectable === 'function') {
25
+ selectable = !!props.itemSelectable(item);
26
+ } else {
27
+ selectable = getPropertyFromItem(item, props.itemSelectable, true);
28
+ }
29
+ const itemColumns = columns.reduce((acc, column) => {
30
+ acc[column.key] = getPropertyFromItem(item, column.value ?? column.key);
31
+ return acc;
32
+ }, {});
33
+ function _bindRowRef(el) {
34
+ rowRef.value = el;
35
+ }
36
+ return {
37
+ index,
38
+ key,
39
+ value,
40
+ selectable,
41
+ columns: itemColumns,
42
+ raw: item,
43
+ rowRef,
44
+ _bindRowRef
45
+ };
46
+ }
47
+ export function updateItems(props, items, columns) {
48
+ return items.map((item, index) => updateItem(props, item, index, columns));
49
+ }
50
+ export function useItems(props, columns) {
51
+ const items = computed(() => {
52
+ return updateItems(props, props.items, columns.value);
53
+ });
54
+ return {
55
+ items
56
+ };
57
+ }
58
+ //# sourceMappingURL=items.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"items.js","names":["computed","ref","getPropertyFromItem","propsFactory","pressDataTableItemsProps","items","type","Array","default","itemKey","String","Function","itemSelectable","returnItem","Boolean","updateItem","props","item","index","columns","rowRef","key","value","selectable","itemColumns","reduce","acc","column","_bindRowRef","el","raw","updateItems","map","useItems"],"sources":["../../../../src/components/table/composables/items.ts"],"sourcesContent":["import { type PropType, type Ref, computed, ref } from 'vue';\r\n\r\nimport { getPropertyFromItem } from '@/util/common';\r\nimport { propsFactory } from '@/util/component';\r\n\r\nimport { DataTableItem, InternalDataTableHeader } from '../types';\r\n\r\nexport type DataTableItemsProps = {\r\n items: any[];\r\n itemKey: any;\r\n itemSelectable: any;\r\n returnItem: boolean;\r\n};\r\n\r\nexport const pressDataTableItemsProps = propsFactory(\r\n {\r\n items: {\r\n type: Array as PropType<DataTableItemsProps['items']>,\r\n default: () => [],\r\n },\r\n itemKey: {\r\n type: [String, Array, Function] as PropType<any>,\r\n default: 'id',\r\n },\r\n itemSelectable: {\r\n type: [String, Array, Function] as PropType<any>,\r\n default: null,\r\n },\r\n returnItem: Boolean,\r\n },\r\n 'YDataTable--items',\r\n);\r\n\r\nexport function updateItem(\r\n props: Omit<DataTableItemsProps, 'items'>,\r\n item: any,\r\n index: number,\r\n columns: InternalDataTableHeader[],\r\n): DataTableItem {\r\n const rowRef = ref<any | null>(null);\r\n const key = getPropertyFromItem(item, props.itemKey);\r\n const value = props.returnItem ? item : key;\r\n let selectable;\r\n if (typeof props.itemSelectable === 'function') {\r\n selectable = !!props.itemSelectable(item);\r\n } else {\r\n selectable = getPropertyFromItem(item, props.itemSelectable, true);\r\n }\r\n\r\n const itemColumns = columns.reduce(\r\n (acc, column) => {\r\n acc[column.key] = getPropertyFromItem(item, column.value ?? column.key);\r\n return acc;\r\n },\r\n {} as Record<string, unknown>,\r\n );\r\n\r\n function _bindRowRef(el: any | null) {\r\n rowRef.value = el;\r\n }\r\n\r\n return {\r\n index,\r\n key,\r\n value,\r\n selectable,\r\n columns: itemColumns,\r\n raw: item,\r\n rowRef,\r\n _bindRowRef,\r\n };\r\n}\r\n\r\nexport function updateItems(\r\n props: Omit<DataTableItemsProps, 'items'>,\r\n items: DataTableItemsProps['items'],\r\n columns: InternalDataTableHeader[],\r\n): DataTableItem[] {\r\n return items.map((item, index) => updateItem(props, item, index, columns));\r\n}\r\n\r\nexport function useItems(\r\n props: DataTableItemsProps,\r\n columns: Ref<InternalDataTableHeader[]>,\r\n) {\r\n const items = computed(() => {\r\n return updateItems(props, props.items, columns.value);\r\n });\r\n return { items };\r\n}\r\n"],"mappings":"AAAA,SAAkCA,QAAQ,EAAEC,GAAG,QAAQ,KAAK;AAAC,SAEpDC,mBAAmB;AAAA,SACnBC,YAAY;AAWrB,OAAO,MAAMC,wBAAwB,GAAGD,YAAY,CAClD;EACEE,KAAK,EAAE;IACLC,IAAI,EAAEC,KAA+C;IACrDC,OAAO,EAAEA,CAAA,KAAM;EACjB,CAAC;EACDC,OAAO,EAAE;IACPH,IAAI,EAAE,CAACI,MAAM,EAAEH,KAAK,EAAEI,QAAQ,CAAkB;IAChDH,OAAO,EAAE;EACX,CAAC;EACDI,cAAc,EAAE;IACdN,IAAI,EAAE,CAACI,MAAM,EAAEH,KAAK,EAAEI,QAAQ,CAAkB;IAChDH,OAAO,EAAE;EACX,CAAC;EACDK,UAAU,EAAEC;AACd,CAAC,EACD,mBACF,CAAC;AAED,OAAO,SAASC,UAAUA,CACxBC,KAAyC,EACzCC,IAAS,EACTC,KAAa,EACbC,OAAkC,EACnB;EACf,MAAMC,MAAM,GAAGnB,GAAG,CAAa,IAAI,CAAC;EACpC,MAAMoB,GAAG,GAAGnB,mBAAmB,CAACe,IAAI,EAAED,KAAK,CAACP,OAAO,CAAC;EACpD,MAAMa,KAAK,GAAGN,KAAK,CAACH,UAAU,GAAGI,IAAI,GAAGI,GAAG;EAC3C,IAAIE,UAAU;EACd,IAAI,OAAOP,KAAK,CAACJ,cAAc,KAAK,UAAU,EAAE;IAC9CW,UAAU,GAAG,CAAC,CAACP,KAAK,CAACJ,cAAc,CAACK,IAAI,CAAC;EAC3C,CAAC,MAAM;IACLM,UAAU,GAAGrB,mBAAmB,CAACe,IAAI,EAAED,KAAK,CAACJ,cAAc,EAAE,IAAI,CAAC;EACpE;EAEA,MAAMY,WAAW,GAAGL,OAAO,CAACM,MAAM,CAChC,CAACC,GAAG,EAAEC,MAAM,KAAK;IACfD,GAAG,CAACC,MAAM,CAACN,GAAG,CAAC,GAAGnB,mBAAmB,CAACe,IAAI,EAAEU,MAAM,CAACL,KAAK,IAAIK,MAAM,CAACN,GAAG,CAAC;IACvE,OAAOK,GAAG;EACZ,CAAC,EACD,CAAC,CACH,CAAC;EAED,SAASE,WAAWA,CAACC,EAAc,EAAE;IACnCT,MAAM,CAACE,KAAK,GAAGO,EAAE;EACnB;EAEA,OAAO;IACLX,KAAK;IACLG,GAAG;IACHC,KAAK;IACLC,UAAU;IACVJ,OAAO,EAAEK,WAAW;IACpBM,GAAG,EAAEb,IAAI;IACTG,MAAM;IACNQ;EACF,CAAC;AACH;AAEA,OAAO,SAASG,WAAWA,CACzBf,KAAyC,EACzCX,KAAmC,EACnCc,OAAkC,EACjB;EACjB,OAAOd,KAAK,CAAC2B,GAAG,CAAC,CAACf,IAAI,EAAEC,KAAK,KAAKH,UAAU,CAACC,KAAK,EAAEC,IAAI,EAAEC,KAAK,EAAEC,OAAO,CAAC,CAAC;AAC5E;AAEA,OAAO,SAASc,QAAQA,CACtBjB,KAA0B,EAC1BG,OAAuC,EACvC;EACA,MAAMd,KAAK,GAAGL,QAAQ,CAAC,MAAM;IAC3B,OAAO+B,WAAW,CAACf,KAAK,EAAEA,KAAK,CAACX,KAAK,EAAEc,OAAO,CAACG,KAAK,CAAC;EACvD,CAAC,CAAC;EACF,OAAO;IAAEjB;EAAM,CAAC;AAClB"}
@@ -0,0 +1,55 @@
1
+ import { ref, shallowRef, watch } from 'vue';
2
+ import { useResizeObserver } from "../../../composables/resize-observer.js";
3
+ import { debounce } from "../../../util/debounce.js";
4
+ export function useRectMeasure() {
5
+ const tableRef = ref();
6
+ const wrapperRef = ref();
7
+ const containerRect = shallowRef();
8
+ const wrapperRect = shallowRef();
9
+ const tableRect = shallowRef();
10
+ const debounceMeasure = debounce(measure, 100);
11
+ const {
12
+ resizeObservedRef: containerRef
13
+ } = useResizeObserver(entries => {
14
+ debounceMeasure(entries);
15
+ });
16
+ function measure(entries) {
17
+ containerRect.value = entries?.[0]?.contentRect;
18
+ if (wrapperRef.value) {
19
+ const rect = wrapperRef.value.getBoundingClientRect();
20
+ if (rect) {
21
+ const obj = {};
22
+ for (const key in rect) {
23
+ if (typeof rect[key] !== "function") {
24
+ obj[key] = rect[key];
25
+ }
26
+ }
27
+ wrapperRect.value = {
28
+ ...obj,
29
+ clientWidth: wrapperRef.value?.clientWidth ?? 0
30
+ };
31
+ }
32
+ }
33
+ if (tableRef.value) {
34
+ const rect = tableRef.value?.getBoundingClientRect();
35
+ if (rect) {
36
+ tableRect.value = rect;
37
+ }
38
+ }
39
+ }
40
+ watch(tableRef, neo => {
41
+ if (neo) {
42
+ const el = containerRef.value;
43
+ wrapperRef.value = el.querySelector('.y-table__wrapper') || undefined;
44
+ }
45
+ });
46
+ return {
47
+ containerRef,
48
+ wrapperRef,
49
+ tableRef,
50
+ containerRect,
51
+ wrapperRect,
52
+ tableRect
53
+ };
54
+ }
55
+ //# sourceMappingURL=measure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measure.js","names":["ref","shallowRef","watch","useResizeObserver","debounce","useRectMeasure","tableRef","wrapperRef","containerRect","wrapperRect","tableRect","debounceMeasure","measure","resizeObservedRef","containerRef","entries","value","contentRect","rect","getBoundingClientRect","obj","key","clientWidth","neo","el","querySelector","undefined"],"sources":["../../../../src/components/table/composables/measure.ts"],"sourcesContent":["import { ref, shallowRef, watch } from 'vue';\n\nimport { useResizeObserver } from '@/composables/resize-observer';\nimport { debounce } from '@/util/debounce';\n\nexport function useRectMeasure() {\n const tableRef = ref<HTMLTableElement>();\n const wrapperRef = ref<HTMLElement>();\n\n const containerRect = shallowRef<DOMRectReadOnly>();\n const wrapperRect = shallowRef<DOMRectReadOnly>();\n const tableRect = shallowRef<DOMRectReadOnly>();\n\n const debounceMeasure = debounce(measure, 100);\n\n const { resizeObservedRef: containerRef } = useResizeObserver((entries) => {\n debounceMeasure(entries);\n });\n\n function measure(entries: any) {\n containerRect.value = entries?.[0]?.contentRect;\n\n if (wrapperRef.value) {\n const rect = wrapperRef.value.getBoundingClientRect();\n\n if (rect) {\n const obj: any = {};\n for (const key in rect) {\n if (typeof rect[key as keyof DOMRect] !== \"function\") {\n obj[key] = rect[key as keyof DOMRect];\n }\n }\n wrapperRect.value = {\n ...obj,\n clientWidth: wrapperRef.value?.clientWidth ?? 0,\n };\n }\n\n }\n\n if (tableRef.value) {\n const rect = tableRef.value?.getBoundingClientRect();\n if (rect) {\n tableRect.value = rect;\n }\n }\n }\n\n watch(tableRef, (neo) => {\n if (neo) {\n const el = containerRef.value!;\n wrapperRef.value = el.querySelector('.y-table__wrapper') as HTMLElement || undefined;\n }\n })\n\n return {\n containerRef,\n wrapperRef,\n tableRef,\n containerRect,\n wrapperRect,\n tableRect,\n };\n}\n"],"mappings":"AAAA,SAASA,GAAG,EAAEC,UAAU,EAAEC,KAAK,QAAQ,KAAK;AAAC,SAEpCC,iBAAiB;AAAA,SACjBC,QAAQ;AAEjB,OAAO,SAASC,cAAcA,CAAA,EAAG;EAC/B,MAAMC,QAAQ,GAAGN,GAAG,CAAmB,CAAC;EACxC,MAAMO,UAAU,GAAGP,GAAG,CAAc,CAAC;EAErC,MAAMQ,aAAa,GAAGP,UAAU,CAAkB,CAAC;EACnD,MAAMQ,WAAW,GAAGR,UAAU,CAAkB,CAAC;EACjD,MAAMS,SAAS,GAAGT,UAAU,CAAkB,CAAC;EAE/C,MAAMU,eAAe,GAAGP,QAAQ,CAACQ,OAAO,EAAE,GAAG,CAAC;EAE9C,MAAM;IAAEC,iBAAiB,EAAEC;EAAa,CAAC,GAAGX,iBAAiB,CAAEY,OAAO,IAAK;IACzEJ,eAAe,CAACI,OAAO,CAAC;EAC1B,CAAC,CAAC;EAEF,SAASH,OAAOA,CAACG,OAAY,EAAE;IAC7BP,aAAa,CAACQ,KAAK,GAAGD,OAAO,GAAG,CAAC,CAAC,EAAEE,WAAW;IAE/C,IAAIV,UAAU,CAACS,KAAK,EAAE;MACpB,MAAME,IAAI,GAAGX,UAAU,CAACS,KAAK,CAACG,qBAAqB,CAAC,CAAC;MAErD,IAAID,IAAI,EAAE;QACR,MAAME,GAAQ,GAAG,CAAC,CAAC;QACnB,KAAK,MAAMC,GAAG,IAAIH,IAAI,EAAE;UACtB,IAAI,OAAOA,IAAI,CAACG,GAAG,CAAkB,KAAK,UAAU,EAAE;YACpDD,GAAG,CAACC,GAAG,CAAC,GAAGH,IAAI,CAACG,GAAG,CAAkB;UACvC;QACF;QACAZ,WAAW,CAACO,KAAK,GAAG;UAClB,GAAGI,GAAG;UACNE,WAAW,EAAEf,UAAU,CAACS,KAAK,EAAEM,WAAW,IAAI;QAChD,CAAC;MACH;IAEF;IAEA,IAAIhB,QAAQ,CAACU,KAAK,EAAE;MAClB,MAAME,IAAI,GAAGZ,QAAQ,CAACU,KAAK,EAAEG,qBAAqB,CAAC,CAAC;MACpD,IAAID,IAAI,EAAE;QACRR,SAAS,CAACM,KAAK,GAAGE,IAAI;MACxB;IACF;EACF;EAEAhB,KAAK,CAACI,QAAQ,EAAGiB,GAAG,IAAK;IACvB,IAAIA,GAAG,EAAE;MACP,MAAMC,EAAE,GAAGV,YAAY,CAACE,KAAM;MAC9BT,UAAU,CAACS,KAAK,GAAGQ,EAAE,CAACC,aAAa,CAAC,mBAAmB,CAAC,IAAmBC,SAAS;IACtF;EACF,CAAC,CAAC;EAEF,OAAO;IACLZ,YAAY;IACZP,UAAU;IACVD,QAAQ;IACRE,aAAa;IACbC,WAAW;IACXC;EACF,CAAC;AACH"}
@@ -0,0 +1,33 @@
1
+ import { computed, watch } from 'vue';
2
+ import { deepEqual } from "../../../util/common.js";
3
+ export function useOptions(_ref, emit) {
4
+ let {
5
+ page,
6
+ pageSize,
7
+ sortBy,
8
+ search
9
+ } = _ref;
10
+ const options = computed(() => {
11
+ return {
12
+ page: page.value,
13
+ pageSize: pageSize.value,
14
+ sortBy: sortBy.value,
15
+ search: search.value
16
+ };
17
+ });
18
+ watch(() => search?.value, () => {
19
+ page.value = 1;
20
+ });
21
+ let optionsCache = null;
22
+ watch(options, () => {
23
+ if (deepEqual(optionsCache, options.value)) {
24
+ return;
25
+ }
26
+ emit('update:options', options.value);
27
+ optionsCache = options.value;
28
+ }, {
29
+ deep: true,
30
+ immediate: true
31
+ });
32
+ }
33
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","names":["computed","watch","deepEqual","useOptions","_ref","emit","page","pageSize","sortBy","search","options","value","optionsCache","deep","immediate"],"sources":["../../../../src/components/table/composables/options.ts"],"sourcesContent":["import { type Ref, computed, watch } from 'vue';\r\n\r\nimport { deepEqual } from '@/util/common';\r\n\r\nimport { SortOption } from '../types';\r\n\r\ntype DataTableOptionsState = {\r\n page: Ref<number>;\r\n pageSize: Ref<number>;\r\n sortBy: Ref<readonly SortOption[]>;\r\n search: Ref<string | undefined>;\r\n};\r\n\r\nexport function useOptions(\r\n { page, pageSize, sortBy, search }: DataTableOptionsState,\r\n emit: Function,\r\n) {\r\n const options = computed(() => {\r\n return {\r\n page: page.value,\r\n pageSize: pageSize.value,\r\n sortBy: sortBy.value,\r\n search: search.value,\r\n };\r\n });\r\n\r\n watch(\r\n () => search?.value,\r\n () => {\r\n page.value = 1;\r\n },\r\n );\r\n\r\n let optionsCache = null as unknown;\r\n\r\n watch(\r\n options,\r\n () => {\r\n if (deepEqual(optionsCache, options.value)) {\r\n return;\r\n }\r\n emit('update:options', options.value);\r\n optionsCache = options.value;\r\n },\r\n { deep: true, immediate: true },\r\n );\r\n}\r\n"],"mappings":"AAAA,SAAmBA,QAAQ,EAAEC,KAAK,QAAQ,KAAK;AAAC,SAEvCC,SAAS;AAWlB,OAAO,SAASC,UAAUA,CAAAC,IAAA,EAExBC,IAAc,EACd;EAAA,IAFA;IAAEC,IAAI;IAAEC,QAAQ;IAAEC,MAAM;IAAEC;EAA8B,CAAC,GAAAL,IAAA;EAGzD,MAAMM,OAAO,GAAGV,QAAQ,CAAC,MAAM;IAC7B,OAAO;MACLM,IAAI,EAAEA,IAAI,CAACK,KAAK;MAChBJ,QAAQ,EAAEA,QAAQ,CAACI,KAAK;MACxBH,MAAM,EAAEA,MAAM,CAACG,KAAK;MACpBF,MAAM,EAAEA,MAAM,CAACE;IACjB,CAAC;EACH,CAAC,CAAC;EAEFV,KAAK,CACH,MAAMQ,MAAM,EAAEE,KAAK,EACnB,MAAM;IACJL,IAAI,CAACK,KAAK,GAAG,CAAC;EAChB,CACF,CAAC;EAED,IAAIC,YAAY,GAAG,IAAe;EAElCX,KAAK,CACHS,OAAO,EACP,MAAM;IACJ,IAAIR,SAAS,CAACU,YAAY,EAAEF,OAAO,CAACC,KAAK,CAAC,EAAE;MAC1C;IACF;IACAN,IAAI,CAAC,gBAAgB,EAAEK,OAAO,CAACC,KAAK,CAAC;IACrCC,YAAY,GAAGF,OAAO,CAACC,KAAK;EAC9B,CAAC,EACD;IAAEE,IAAI,EAAE,IAAI;IAAEC,SAAS,EAAE;EAAK,CAChC,CAAC;AACH"}
@@ -0,0 +1,99 @@
1
+ import { computed, inject, provide, watch } from 'vue';
2
+ import { useModelDuplex } from "../../../composables/communication.js";
3
+ import { clamp } from "../../../util/common.js";
4
+ import { propsFactory } from "../../../util/component/index.js";
5
+ export const Y_DATA_TABLE_PAGINATION_KEY = Symbol.for('yuyeon.data-table.pagination');
6
+ export const pressDataTablePaginationProps = propsFactory({
7
+ page: {
8
+ type: [Number, String],
9
+ default: 1
10
+ },
11
+ pageSize: {
12
+ type: [Number, String],
13
+ default: 10
14
+ }
15
+ }, 'YDataTable--pagination');
16
+ export function createPagination(props) {
17
+ const page = useModelDuplex(props, 'page', undefined, value => +(value ?? 1));
18
+ const pageSize = useModelDuplex(props, 'pageSize', undefined, value => +(value ?? 10));
19
+ return {
20
+ page,
21
+ pageSize
22
+ };
23
+ }
24
+ export function providePagination(options) {
25
+ const {
26
+ page,
27
+ pageSize,
28
+ total
29
+ } = options;
30
+ const startIndex = computed(() => {
31
+ if (pageSize.value === -1) return 0;
32
+ return pageSize.value * (page.value - 1);
33
+ });
34
+ const endIndex = computed(() => {
35
+ if (pageSize.value === -1) return total.value;
36
+ return Math.min(total.value, startIndex.value + pageSize.value);
37
+ });
38
+ const pageLength = computed(() => {
39
+ if (pageSize.value === -1 || total.value === 0) return 1;
40
+ return Math.ceil(total.value / pageSize.value);
41
+ });
42
+ watch([page, pageLength], () => {
43
+ if (page.value > pageLength.value) {
44
+ page.value = pageLength.value;
45
+ }
46
+ });
47
+ function setPageSize(value, noReset) {
48
+ pageSize.value = value;
49
+ if (!noReset) {
50
+ page.value = 1;
51
+ }
52
+ }
53
+ function nextPage() {
54
+ page.value = clamp(page.value + 1, 1, pageLength.value);
55
+ }
56
+ function prevPage() {
57
+ page.value = clamp(page.value - 1, 1, pageLength.value);
58
+ }
59
+ function setPage(value) {
60
+ page.value = clamp(value, 1, pageLength.value);
61
+ }
62
+ const data = {
63
+ page,
64
+ pageSize,
65
+ startIndex,
66
+ endIndex,
67
+ pageLength,
68
+ total,
69
+ nextPage,
70
+ prevPage,
71
+ setPage,
72
+ setPageSize
73
+ };
74
+ provide(Y_DATA_TABLE_PAGINATION_KEY, data);
75
+ return data;
76
+ }
77
+ export function usePagination() {
78
+ const data = inject(Y_DATA_TABLE_PAGINATION_KEY);
79
+ if (!data) {
80
+ throw new Error(`Not provided: ${Y_DATA_TABLE_PAGINATION_KEY.description}`);
81
+ }
82
+ return data;
83
+ }
84
+ export function usePaginatedItems(options) {
85
+ const {
86
+ items,
87
+ startIndex,
88
+ endIndex,
89
+ pageSize
90
+ } = options;
91
+ const paginatedItems = computed(() => {
92
+ if (pageSize.value <= 0) return items.value;
93
+ return items.value.slice(startIndex.value, endIndex.value);
94
+ });
95
+ return {
96
+ paginatedItems
97
+ };
98
+ }
99
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","names":["computed","inject","provide","watch","useModelDuplex","clamp","propsFactory","Y_DATA_TABLE_PAGINATION_KEY","Symbol","for","pressDataTablePaginationProps","page","type","Number","String","default","pageSize","createPagination","props","undefined","value","providePagination","options","total","startIndex","endIndex","Math","min","pageLength","ceil","setPageSize","noReset","nextPage","prevPage","setPage","data","usePagination","Error","description","usePaginatedItems","items","paginatedItems","slice"],"sources":["../../../../src/components/table/composables/pagination.ts"],"sourcesContent":["import type { InjectionKey, PropType, Ref } from 'vue';\r\nimport { computed, inject, provide, watch } from 'vue';\r\n\r\nimport { useModelDuplex } from '@/composables/communication';\r\nimport { clamp } from '@/util/common';\r\nimport { propsFactory } from '@/util/component';\r\n\r\nimport { DataTableProvidePaginationData } from '../types';\r\n\r\nexport const Y_DATA_TABLE_PAGINATION_KEY: InjectionKey<{\r\n page: Ref<number>;\r\n pageSize: Ref<number>;\r\n startIndex: Ref<number>;\r\n endIndex: Ref<number>;\r\n pageLength: Ref<number>;\r\n total: Ref<number>;\r\n prevPage: () => void;\r\n nextPage: () => void;\r\n setPage: (page: number) => void;\r\n setPageSize: (size: number) => void;\r\n}> = Symbol.for('yuyeon.data-table.pagination');\r\n\r\nexport const pressDataTablePaginationProps = propsFactory(\r\n {\r\n page: {\r\n type: [Number, String] as PropType<number | string>,\r\n default: 1,\r\n },\r\n pageSize: {\r\n type: [Number, String] as PropType<number | string>,\r\n default: 10,\r\n },\r\n },\r\n 'YDataTable--pagination',\r\n);\r\n\r\ntype PaginationProps = {\r\n page: number | string;\r\n 'onUpdate:page': ((v: any) => void) | undefined;\r\n pageSize: number | string;\r\n 'onUpdate:pageSize': ((v: any) => void) | undefined;\r\n total?: number | string;\r\n};\r\n\r\nexport function createPagination(props: PaginationProps) {\r\n const page = useModelDuplex(\r\n props,\r\n 'page',\r\n undefined,\r\n (value) => +(value ?? 1),\r\n );\r\n const pageSize = useModelDuplex(\r\n props,\r\n 'pageSize',\r\n undefined,\r\n (value) => +(value ?? 10),\r\n );\r\n return { page, pageSize };\r\n}\r\n\r\nexport function providePagination(options: {\r\n page: Ref<number>;\r\n pageSize: Ref<number>;\r\n total: Ref<number>;\r\n}) {\r\n const { page, pageSize, total } = options;\r\n const startIndex = computed(() => {\r\n if (pageSize.value === -1) return 0;\r\n\r\n return pageSize.value * (page.value - 1);\r\n });\r\n\r\n const endIndex = computed(() => {\r\n if (pageSize.value === -1) return total.value;\r\n\r\n return Math.min(total.value, startIndex.value + pageSize.value);\r\n });\r\n\r\n const pageLength = computed(() => {\r\n if (pageSize.value === -1 || total.value === 0) return 1;\r\n\r\n return Math.ceil(total.value / pageSize.value);\r\n });\r\n\r\n watch([page, pageLength], () => {\r\n if (page.value > pageLength.value) {\r\n page.value = pageLength.value;\r\n }\r\n });\r\n\r\n function setPageSize(value: number, noReset?: boolean) {\r\n pageSize.value = value;\r\n if (!noReset) {\r\n page.value = 1;\r\n }\r\n }\r\n\r\n function nextPage() {\r\n page.value = clamp(page.value + 1, 1, pageLength.value);\r\n }\r\n\r\n function prevPage() {\r\n page.value = clamp(page.value - 1, 1, pageLength.value);\r\n }\r\n\r\n function setPage(value: number) {\r\n page.value = clamp(value, 1, pageLength.value);\r\n }\r\n\r\n const data: DataTableProvidePaginationData = {\r\n page,\r\n pageSize,\r\n startIndex,\r\n endIndex,\r\n pageLength,\r\n total,\r\n nextPage,\r\n prevPage,\r\n setPage,\r\n setPageSize,\r\n };\r\n\r\n provide(Y_DATA_TABLE_PAGINATION_KEY, data);\r\n\r\n return data;\r\n}\r\n\r\nexport function usePagination() {\r\n const data = inject(Y_DATA_TABLE_PAGINATION_KEY);\r\n if (!data) {\r\n throw new Error(`Not provided: ${Y_DATA_TABLE_PAGINATION_KEY.description}`);\r\n }\r\n return data;\r\n}\r\n\r\nexport function usePaginatedItems<T>(options: {\r\n items: Ref<readonly T[]>;\r\n startIndex: Ref<number>;\r\n endIndex: Ref<number>;\r\n pageSize: Ref<number>;\r\n}) {\r\n const { items, startIndex, endIndex, pageSize } = options;\r\n const paginatedItems = computed(() => {\r\n if (pageSize.value <= 0) return items.value;\r\n\r\n return items.value.slice(startIndex.value, endIndex.value);\r\n });\r\n\r\n return { paginatedItems };\r\n}\r\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export const YTableInjectionKey = Symbol.for('y-table');
2
+ export const YDataTableInjectionKey = Symbol.for('y-data-table');
3
+ //# sourceMappingURL=provides.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provides.js","names":["YTableInjectionKey","Symbol","for","YDataTableInjectionKey"],"sources":["../../../../src/components/table/composables/provides.ts"],"sourcesContent":["import { type InjectionKey, Ref, ShallowRef } from 'vue';\nimport type { InternalDataTableHeader } from '@/components/table/types';\nimport { createSorting } from '@/components/table/composables/sorting';\n\nexport const YTableInjectionKey: InjectionKey<{\n tableRef: Ref<HTMLTableElement | undefined>\n containerRect: ShallowRef<DOMRectReadOnly | undefined>\n wrapperRef: Ref<HTMLElement | undefined>\n wrapperRect: ShallowRef<DOMRectReadOnly | undefined>\n}> = Symbol.for('y-table');\n\nexport const YDataTableInjectionKey: InjectionKey<{\n toggleSort: (column: InternalDataTableHeader) => void;\n sortBy: ReturnType<typeof createSorting>['sortBy']\n headRect: Ref<DOMRectReadOnly | undefined>\n}> =\n Symbol.for('y-data-table');\n"],"mappings":"AAIA,OAAO,MAAMA,kBAKX,GAAGC,MAAM,CAACC,GAAG,CAAC,SAAS,CAAC;AAE1B,OAAO,MAAMC,sBAIX,GACAF,MAAM,CAACC,GAAG,CAAC,cAAc,CAAC"}