@ibobbyts/svelte-ui-utils 0.1.2

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 (82) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +379 -0
  3. package/dist/data-table/BaseDataTable.svelte +322 -0
  4. package/dist/data-table/BaseDataTable.svelte.d.ts +49 -0
  5. package/dist/data-table/BaseDataTable.svelte.d.ts.map +1 -0
  6. package/dist/data-table/DataTable.svelte +104 -0
  7. package/dist/data-table/DataTable.svelte.d.ts +59 -0
  8. package/dist/data-table/DataTable.svelte.d.ts.map +1 -0
  9. package/dist/data-table/DateRangeFilter.svelte +174 -0
  10. package/dist/data-table/DateRangeFilter.svelte.d.ts +30 -0
  11. package/dist/data-table/DateRangeFilter.svelte.d.ts.map +1 -0
  12. package/dist/data-table/FilterControl.svelte +184 -0
  13. package/dist/data-table/FilterControl.svelte.d.ts +5 -0
  14. package/dist/data-table/FilterControl.svelte.d.ts.map +1 -0
  15. package/dist/data-table/FilterTable.svelte +25 -0
  16. package/dist/data-table/FilterTable.svelte.d.ts +24 -0
  17. package/dist/data-table/FilterTable.svelte.d.ts.map +1 -0
  18. package/dist/data-table/NumberRangeFilter.svelte +80 -0
  19. package/dist/data-table/NumberRangeFilter.svelte.d.ts +32 -0
  20. package/dist/data-table/NumberRangeFilter.svelte.d.ts.map +1 -0
  21. package/dist/data-table/filter.d.ts +23 -0
  22. package/dist/data-table/filter.d.ts.map +1 -0
  23. package/dist/data-table/filter.js +38 -0
  24. package/dist/data-table/index.d.ts +11 -0
  25. package/dist/data-table/index.d.ts.map +1 -0
  26. package/dist/data-table/index.js +8 -0
  27. package/dist/data-table/state.d.ts +11 -0
  28. package/dist/data-table/state.d.ts.map +1 -0
  29. package/dist/data-table/state.js +58 -0
  30. package/dist/data-table/types.d.ts +167 -0
  31. package/dist/data-table/types.d.ts.map +1 -0
  32. package/dist/data-table/types.js +1 -0
  33. package/dist/dropdown/Dropdown.svelte +159 -0
  34. package/dist/dropdown/Dropdown.svelte.d.ts +28 -0
  35. package/dist/dropdown/Dropdown.svelte.d.ts.map +1 -0
  36. package/dist/dropdown/index.d.ts +3 -0
  37. package/dist/dropdown/index.d.ts.map +1 -0
  38. package/dist/dropdown/index.js +1 -0
  39. package/dist/dropdown/types.d.ts +9 -0
  40. package/dist/dropdown/types.d.ts.map +1 -0
  41. package/dist/dropdown/types.js +1 -0
  42. package/dist/dropdown-search/DropdownSearch.svelte +312 -0
  43. package/dist/dropdown-search/DropdownSearch.svelte.d.ts +51 -0
  44. package/dist/dropdown-search/DropdownSearch.svelte.d.ts.map +1 -0
  45. package/dist/dropdown-search/index.d.ts +6 -0
  46. package/dist/dropdown-search/index.d.ts.map +1 -0
  47. package/dist/dropdown-search/index.js +3 -0
  48. package/dist/dropdown-search/state.d.ts +15 -0
  49. package/dist/dropdown-search/state.d.ts.map +1 -0
  50. package/dist/dropdown-search/state.js +44 -0
  51. package/dist/dropdown-search/types.d.ts +24 -0
  52. package/dist/dropdown-search/types.d.ts.map +1 -0
  53. package/dist/dropdown-search/types.js +1 -0
  54. package/dist/i18n.d.ts +31 -0
  55. package/dist/i18n.d.ts.map +1 -0
  56. package/dist/i18n.js +118 -0
  57. package/dist/index.d.ts +7 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +5 -0
  60. package/dist/pagination/Pagination.svelte +112 -0
  61. package/dist/pagination/Pagination.svelte.d.ts +30 -0
  62. package/dist/pagination/Pagination.svelte.d.ts.map +1 -0
  63. package/dist/pagination/index.d.ts +6 -0
  64. package/dist/pagination/index.d.ts.map +1 -0
  65. package/dist/pagination/index.js +3 -0
  66. package/dist/style.css +1110 -0
  67. package/dist/toast/Toast.svelte +37 -0
  68. package/dist/toast/Toast.svelte.d.ts +26 -0
  69. package/dist/toast/Toast.svelte.d.ts.map +1 -0
  70. package/dist/toast/ToastManager.svelte +29 -0
  71. package/dist/toast/ToastManager.svelte.d.ts +26 -0
  72. package/dist/toast/ToastManager.svelte.d.ts.map +1 -0
  73. package/dist/toast/index.d.ts +7 -0
  74. package/dist/toast/index.d.ts.map +1 -0
  75. package/dist/toast/index.js +4 -0
  76. package/dist/toast/store.d.ts +7 -0
  77. package/dist/toast/store.d.ts.map +1 -0
  78. package/dist/toast/store.js +114 -0
  79. package/dist/toast/types.d.ts +36 -0
  80. package/dist/toast/types.d.ts.map +1 -0
  81. package/dist/toast/types.js +1 -0
  82. package/package.json +83 -0
@@ -0,0 +1,112 @@
1
+ <script lang="ts">
2
+ import Dropdown from '../dropdown/Dropdown.svelte';
3
+ import { getPageCount, normalizePagination } from '../data-table/state.js';
4
+ import { getUiMessages, type UiLanguage } from '../i18n.js';
5
+ import type { DropdownValue } from '../dropdown/types.js';
6
+ import type { PaginationChangeHandler, PaginationDropdownPlacement, PaginationState } from '../data-table/types.js';
7
+
8
+ export let pagination: PaginationState = { page: 1, pageSize: 20 };
9
+ export let totalRows = 0;
10
+ export let pageSizeOptions: number[] = [10, 20, 50, 100];
11
+ export let language: UiLanguage = 'en_us';
12
+ export let pageSizeLabel: string | undefined = undefined;
13
+ export let maxPageButtons = 15;
14
+ export let pageSizeDropdownPlacement: PaginationDropdownPlacement = 'down';
15
+ export let onPaginationChange: PaginationChangeHandler | undefined = undefined;
16
+
17
+ type PaginationItem = { kind: 'page'; page: number } | { kind: 'ellipsis' };
18
+
19
+ $: messages = getUiMessages(language);
20
+ $: resolvedPageSizeLabel = pageSizeLabel ?? messages.table.pageSizeLabel;
21
+ $: normalized = normalizePagination(pagination, totalRows);
22
+ $: pageCount = getPageCount(totalRows, normalized.pageSize);
23
+ $: pageItems = buildPaginationItems(normalized.page, pageCount, maxPageButtons);
24
+ $: pageSizeDropdownOptions = pageSizeOptions.map((option) => ({ label: String(option), value: option }));
25
+
26
+ function buildPaginationItems(currentPage: number, totalPages: number, maxButtons: number): PaginationItem[] {
27
+ if (totalPages <= 1) {
28
+ return [];
29
+ }
30
+
31
+ const visiblePageCount = Math.max(3, Math.trunc(maxButtons));
32
+ if (totalPages <= visiblePageCount) {
33
+ return Array.from({ length: totalPages }, (_, index) => ({ kind: 'page', page: index + 1 }));
34
+ }
35
+
36
+ const page = Math.min(Math.max(Math.trunc(currentPage), 1), totalPages);
37
+ const innerWindowSize = visiblePageCount - 2;
38
+ const maxInnerPage = totalPages - 1;
39
+ let windowStart = page - Math.floor(innerWindowSize / 2);
40
+ let windowEnd = windowStart + innerWindowSize - 1;
41
+
42
+ if (windowStart < 2) {
43
+ windowStart = 2;
44
+ windowEnd = windowStart + innerWindowSize - 1;
45
+ }
46
+ if (windowEnd > maxInnerPage) {
47
+ windowEnd = maxInnerPage;
48
+ windowStart = windowEnd - innerWindowSize + 1;
49
+ }
50
+
51
+ const pages = [1];
52
+ for (let p = windowStart; p <= windowEnd; p += 1) {
53
+ pages.push(p);
54
+ }
55
+ pages.push(totalPages);
56
+
57
+ const items: PaginationItem[] = [];
58
+ for (let i = 0; i < pages.length; i += 1) {
59
+ const previousPage = pages[i - 1];
60
+ const nextPage = pages[i];
61
+ if (previousPage !== undefined && nextPage !== undefined && nextPage - previousPage > 1) {
62
+ items.push({ kind: 'ellipsis' });
63
+ }
64
+ if (nextPage !== undefined) {
65
+ items.push({ kind: 'page', page: nextPage });
66
+ }
67
+ }
68
+ return items;
69
+ }
70
+
71
+ function setPage(page: number) {
72
+ void onPaginationChange?.(normalizePagination({ ...normalized, page }, totalRows));
73
+ }
74
+
75
+ function setPageSize(nextValue: DropdownValue) {
76
+ const pageSize = typeof nextValue === 'number' ? nextValue : Number(nextValue);
77
+ if (!Number.isFinite(pageSize)) {
78
+ return;
79
+ }
80
+ void onPaginationChange?.(normalizePagination({ page: 1, pageSize }, totalRows));
81
+ }
82
+ </script>
83
+
84
+ <div class="suu-pagination" aria-label={messages.table.paginationLabel}>
85
+ <div class="suu-pagination__pages" class:suu-pagination__pages--empty={pageItems.length === 0}>
86
+ {#each pageItems as item, index (item.kind === 'page' ? `page-${item.page}` : `ellipsis-${index}`)}
87
+ {#if item.kind === 'page'}
88
+ <button
89
+ type="button"
90
+ class:suu-pagination__page-button={true}
91
+ class:suu-pagination__page-button--active={item.page === normalized.page}
92
+ aria-current={item.page === normalized.page ? 'page' : undefined}
93
+ on:click={() => setPage(item.page)}
94
+ >
95
+ {item.page}
96
+ </button>
97
+ {:else}
98
+ <span class="suu-pagination__ellipsis" aria-hidden="true">...</span>
99
+ {/if}
100
+ {/each}
101
+ </div>
102
+ <div class="suu-pagination__size">
103
+ <span>{resolvedPageSizeLabel}</span>
104
+ <Dropdown
105
+ value={normalized.pageSize}
106
+ options={pageSizeDropdownOptions}
107
+ ariaLabel={resolvedPageSizeLabel}
108
+ placement={pageSizeDropdownPlacement}
109
+ onChange={setPageSize}
110
+ />
111
+ </div>
112
+ </div>
@@ -0,0 +1,30 @@
1
+ import { type UiLanguage } from '../i18n.js';
2
+ import type { PaginationChangeHandler, PaginationDropdownPlacement, PaginationState } from '../data-table/types.js';
3
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
4
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
5
+ $$bindings?: Bindings;
6
+ } & Exports;
7
+ (internal: unknown, props: Props & {
8
+ $$events?: Events;
9
+ $$slots?: Slots;
10
+ }): Exports & {
11
+ $set?: any;
12
+ $on?: any;
13
+ };
14
+ z_$$bindings?: Bindings;
15
+ }
16
+ declare const Pagination: $$__sveltets_2_IsomorphicComponent<{
17
+ pagination?: PaginationState;
18
+ totalRows?: number;
19
+ pageSizeOptions?: number[];
20
+ language?: UiLanguage;
21
+ pageSizeLabel?: string | undefined;
22
+ maxPageButtons?: number;
23
+ pageSizeDropdownPlacement?: PaginationDropdownPlacement;
24
+ onPaginationChange?: PaginationChangeHandler | undefined;
25
+ }, {
26
+ [evt: string]: CustomEvent<any>;
27
+ }, {}, {}, string>;
28
+ type Pagination = InstanceType<typeof Pagination>;
29
+ export default Pagination;
30
+ //# sourceMappingURL=Pagination.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pagination.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/pagination/Pagination.svelte.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAE5D,OAAO,KAAK,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAyGpH,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,UAAU;iBAVyR,eAAe;;sBAAkD,MAAM,EAAE;eAAa,UAAU;oBAAkB,MAAM,GAAG,SAAS;;gCAAsE,2BAA2B;yBAAuB,uBAAuB,GAAG,SAAS;;;kBAUze,CAAC;AAC9E,KAAK,UAAU,GAAG,YAAY,CAAC,OAAO,UAAU,CAAC,CAAC;AACpD,eAAe,UAAU,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { default as Pagination } from './Pagination.svelte';
2
+ export { getPageCount, normalizePagination } from '../data-table/state.js';
3
+ export { getUiMessages, resolveUiLanguage, uiLanguages } from '../i18n.js';
4
+ export type { UiLanguage, UiMessages } from '../i18n.js';
5
+ export type { PaginationChangeHandler, PaginationDropdownPlacement, PaginationState } from '../data-table/types.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/pagination/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC3E,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACzD,YAAY,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { default as Pagination } from './Pagination.svelte';
2
+ export { getPageCount, normalizePagination } from '../data-table/state.js';
3
+ export { getUiMessages, resolveUiLanguage, uiLanguages } from '../i18n.js';