runeforge 0.0.53 → 0.0.55
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/LICENSE +21 -21
- package/README.md +1342 -1222
- package/dist/components/Avatar.svelte +31 -31
- package/dist/components/IconRenderer.svelte +22 -22
- package/dist/components/Modal.svelte +75 -75
- package/dist/components/common/Header.svelte +40 -40
- package/dist/components/crud/EmbeddedField.svelte +175 -175
- package/dist/components/crud/Field.svelte +376 -376
- package/dist/components/crud/GenericCRUD.svelte +426 -435
- package/dist/components/crud/GenericCRUD.svelte.d.ts +6 -9
- package/dist/components/crud/SearchInput.svelte +53 -53
- package/dist/components/crud/columns/Avatar.svelte +15 -15
- package/dist/components/crud/columns/Icon.svelte +8 -8
- package/dist/components/crud/utils/reorder.d.ts +4 -0
- package/dist/components/crud/utils/reorder.js +13 -0
- package/dist/components/crud/views/Create.svelte +232 -232
- package/dist/components/crud/views/Read.svelte +124 -124
- package/dist/components/crud/views/Update.svelte +208 -208
- package/dist/components/crud/views/list/List.svelte +291 -0
- package/dist/components/crud/views/{List.svelte.d.ts → list/List.svelte.d.ts} +4 -14
- package/dist/components/crud/views/list/Modals.svelte +56 -0
- package/dist/components/crud/views/list/Modals.svelte.d.ts +36 -0
- package/dist/components/crud/views/list/Table.svelte +176 -0
- package/dist/components/crud/views/list/Table.svelte.d.ts +59 -0
- package/dist/components/crud/views/list/Toolbar.svelte +341 -0
- package/dist/components/crud/views/list/Toolbar.svelte.d.ts +46 -0
- package/dist/components/form/Button.svelte +27 -27
- package/dist/components/form/Label.svelte +37 -37
- package/dist/components/form/MultiSelect.svelte +248 -248
- package/dist/components/form/PasswordInput.svelte +68 -68
- package/dist/components/form/Required.svelte +1 -1
- package/dist/components/form/Select.svelte +209 -209
- package/dist/components/form/Tree.svelte +62 -62
- package/dist/components/form/TreeNode.svelte +66 -66
- package/dist/components/navigation/Breadcrumbs.svelte +111 -111
- package/dist/components/table/ColumnFilter.svelte +168 -168
- package/dist/components/table/PaginatedTable.svelte +536 -215
- package/dist/components/table/PaginatedTable.svelte.d.ts +11 -2
- package/dist/components/table/Paginator.svelte +113 -113
- package/dist/components/table/SortHeader.svelte +43 -43
- package/dist/components/table/TableBody.svelte +150 -70
- package/dist/components/table/TableBody.svelte.d.ts +14 -1
- package/dist/components/table/TableHeader.svelte +88 -83
- package/dist/components/table/TableHeader.svelte.d.ts +1 -0
- package/dist/components/table/sortable.d.ts +27 -0
- package/dist/components/table/sortable.js +55 -0
- package/dist/components/table/utils.d.ts +28 -1
- package/dist/components/table/utils.js +75 -0
- package/dist/i18n/en.js +2 -0
- package/dist/i18n/es.js +2 -0
- package/dist/i18n/types.d.ts +2 -0
- package/dist/icons/defaults/Clear.svelte +6 -6
- package/dist/icons/defaults/Create.svelte +6 -6
- package/dist/icons/defaults/Delete.svelte +6 -6
- package/dist/icons/defaults/Download.svelte +7 -7
- package/dist/icons/defaults/Edit.svelte +7 -7
- package/dist/icons/defaults/Filter.svelte +6 -6
- package/dist/icons/defaults/FilterActive.svelte +6 -6
- package/dist/icons/defaults/Folder.svelte +6 -6
- package/dist/icons/defaults/Grip.svelte +7 -0
- package/dist/icons/defaults/Grip.svelte.d.ts +7 -0
- package/dist/icons/defaults/Home.svelte +6 -6
- package/dist/icons/defaults/PasswordHide.svelte +9 -9
- package/dist/icons/defaults/PasswordShow.svelte +7 -7
- package/dist/icons/defaults/SortAsc.svelte +6 -6
- package/dist/icons/defaults/SortDesc.svelte +6 -6
- package/dist/icons/defaults/SortNone.svelte +6 -6
- package/dist/icons/defaults/View.svelte +7 -7
- package/dist/icons/sets/bootstrap.js +2 -1
- package/dist/icons/sets/default.js +2 -0
- package/dist/icons/types.d.ts +3 -0
- package/dist/index.d.ts +5 -4
- package/dist/index.js +3 -2
- package/dist/types/attribute.d.ts +9 -0
- package/dist/types/crud.d.ts +72 -1
- package/dist/types/table.d.ts +56 -0
- package/package.json +3 -1
- package/dist/components/crud/views/List.svelte +0 -584
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
let {
|
|
3
|
-
src = null,
|
|
4
|
-
text = '',
|
|
5
|
-
alt = '',
|
|
6
|
-
class: className = 'w-10 rounded-full',
|
|
7
|
-
textClass = '',
|
|
8
|
-
}: {
|
|
9
|
-
src?: string | null;
|
|
10
|
-
text?: string;
|
|
11
|
-
alt?: string;
|
|
12
|
-
class?: string;
|
|
13
|
-
textClass?: string;
|
|
14
|
-
} = $props();
|
|
15
|
-
|
|
16
|
-
const placeholder = $derived(text.trim().slice(0, 2).toUpperCase() || '?');
|
|
17
|
-
</script>
|
|
18
|
-
|
|
19
|
-
{#if src}
|
|
20
|
-
<div class="avatar">
|
|
21
|
-
<div class={className}>
|
|
22
|
-
<img {src} {alt} />
|
|
23
|
-
</div>
|
|
24
|
-
</div>
|
|
25
|
-
{:else}
|
|
26
|
-
<div class="avatar avatar-placeholder">
|
|
27
|
-
<div class="bg-neutral text-neutral-content {className}">
|
|
28
|
-
<span class={textClass}>{placeholder}</span>
|
|
29
|
-
</div>
|
|
30
|
-
</div>
|
|
31
|
-
{/if}
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
let {
|
|
3
|
+
src = null,
|
|
4
|
+
text = '',
|
|
5
|
+
alt = '',
|
|
6
|
+
class: className = 'w-10 rounded-full',
|
|
7
|
+
textClass = '',
|
|
8
|
+
}: {
|
|
9
|
+
src?: string | null;
|
|
10
|
+
text?: string;
|
|
11
|
+
alt?: string;
|
|
12
|
+
class?: string;
|
|
13
|
+
textClass?: string;
|
|
14
|
+
} = $props();
|
|
15
|
+
|
|
16
|
+
const placeholder = $derived(text.trim().slice(0, 2).toUpperCase() || '?');
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
{#if src}
|
|
20
|
+
<div class="avatar">
|
|
21
|
+
<div class={className}>
|
|
22
|
+
<img {src} {alt} />
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
{:else}
|
|
26
|
+
<div class="avatar avatar-placeholder">
|
|
27
|
+
<div class="bg-neutral text-neutral-content {className}">
|
|
28
|
+
<span class={textClass}>{placeholder}</span>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
{/if}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { getIconSet } from '../icons/context.js';
|
|
3
|
-
|
|
4
|
-
let {
|
|
5
|
-
name,
|
|
6
|
-
size = '1em',
|
|
7
|
-
class: className = '',
|
|
8
|
-
}: {
|
|
9
|
-
name: string;
|
|
10
|
-
size?: string | number;
|
|
11
|
-
class?: string;
|
|
12
|
-
} = $props();
|
|
13
|
-
|
|
14
|
-
const icons = $derived(getIconSet());
|
|
15
|
-
const IconComponent = $derived(icons?.getByName?.(name) ?? null);
|
|
16
|
-
</script>
|
|
17
|
-
|
|
18
|
-
{#if IconComponent}
|
|
19
|
-
<IconComponent {size} class={className} />
|
|
20
|
-
{:else}
|
|
21
|
-
<span class={className} title={name}></span>
|
|
22
|
-
{/if}
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { getIconSet } from '../icons/context.js';
|
|
3
|
+
|
|
4
|
+
let {
|
|
5
|
+
name,
|
|
6
|
+
size = '1em',
|
|
7
|
+
class: className = '',
|
|
8
|
+
}: {
|
|
9
|
+
name: string;
|
|
10
|
+
size?: string | number;
|
|
11
|
+
class?: string;
|
|
12
|
+
} = $props();
|
|
13
|
+
|
|
14
|
+
const icons = $derived(getIconSet());
|
|
15
|
+
const IconComponent = $derived(icons?.getByName?.(name) ?? null);
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
{#if IconComponent}
|
|
19
|
+
<IconComponent {size} class={className} />
|
|
20
|
+
{:else}
|
|
21
|
+
<span class={className} title={name}></span>
|
|
22
|
+
{/if}
|
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { Snippet } from 'svelte';
|
|
3
|
-
import Button from './form/Button.svelte';
|
|
4
|
-
|
|
5
|
-
let {
|
|
6
|
-
title = '',
|
|
7
|
-
onClose,
|
|
8
|
-
closeOnClickOutside = true,
|
|
9
|
-
onClickOutside,
|
|
10
|
-
children,
|
|
11
|
-
class: additionalClass,
|
|
12
|
-
width,
|
|
13
|
-
maxWidth,
|
|
14
|
-
height,
|
|
15
|
-
maxHeight,
|
|
16
|
-
}: {
|
|
17
|
-
title?: string;
|
|
18
|
-
onClose?: () => void;
|
|
19
|
-
/** Whether clicking the backdrop (outside the modal box) closes the modal. */
|
|
20
|
-
closeOnClickOutside?: boolean;
|
|
21
|
-
/** Callback invoked when clicking outside the modal. Defaults to `onClose`. */
|
|
22
|
-
onClickOutside?: () => void;
|
|
23
|
-
children: Snippet;
|
|
24
|
-
/** Extra classes merged onto the modal box, e.g. Tailwind size utilities
|
|
25
|
-
* like `max-w-4xl` or `w-11/12`. */
|
|
26
|
-
class?: string;
|
|
27
|
-
/** Explicit size overrides (any valid CSS length, e.g. '600px', '90vw').
|
|
28
|
-
* Applied as inline styles, so they take priority over `class` utilities. */
|
|
29
|
-
width?: string;
|
|
30
|
-
maxWidth?: string;
|
|
31
|
-
height?: string;
|
|
32
|
-
maxHeight?: string;
|
|
33
|
-
} = $props();
|
|
34
|
-
|
|
35
|
-
const handleClickOutside = $derived(onClickOutside ?? onClose);
|
|
36
|
-
|
|
37
|
-
const boxStyle = $derived(
|
|
38
|
-
[
|
|
39
|
-
width ? `width:${width}` : '',
|
|
40
|
-
maxWidth ? `max-width:${maxWidth}` : '',
|
|
41
|
-
height ? `height:${height}` : '',
|
|
42
|
-
maxHeight ? `max-height:${maxHeight}` : '',
|
|
43
|
-
]
|
|
44
|
-
.filter(Boolean)
|
|
45
|
-
.join(';')
|
|
46
|
-
);
|
|
47
|
-
</script>
|
|
48
|
-
|
|
49
|
-
<dialog class="modal" open>
|
|
50
|
-
<div class={['modal-box', additionalClass]} style={boxStyle}>
|
|
51
|
-
<div class="flex items-center justify-between gap-4">
|
|
52
|
-
<h3 class="text-lg font-bold">{title}</h3>
|
|
53
|
-
{#if onClose}
|
|
54
|
-
<Button
|
|
55
|
-
variant="ghost"
|
|
56
|
-
class="btn-circle"
|
|
57
|
-
aria-label="Cerrar"
|
|
58
|
-
onclick={onClose}
|
|
59
|
-
>
|
|
60
|
-
✕
|
|
61
|
-
</Button>
|
|
62
|
-
{/if}
|
|
63
|
-
</div>
|
|
64
|
-
|
|
65
|
-
<div class="divider my-2"></div>
|
|
66
|
-
|
|
67
|
-
{@render children()}
|
|
68
|
-
</div>
|
|
69
|
-
|
|
70
|
-
{#if closeOnClickOutside && handleClickOutside}
|
|
71
|
-
<div class="modal-backdrop">
|
|
72
|
-
<button onclick={handleClickOutside} aria-label="Cerrar"></button>
|
|
73
|
-
</div>
|
|
74
|
-
{/if}
|
|
75
|
-
</dialog>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
import Button from './form/Button.svelte';
|
|
4
|
+
|
|
5
|
+
let {
|
|
6
|
+
title = '',
|
|
7
|
+
onClose,
|
|
8
|
+
closeOnClickOutside = true,
|
|
9
|
+
onClickOutside,
|
|
10
|
+
children,
|
|
11
|
+
class: additionalClass,
|
|
12
|
+
width,
|
|
13
|
+
maxWidth,
|
|
14
|
+
height,
|
|
15
|
+
maxHeight,
|
|
16
|
+
}: {
|
|
17
|
+
title?: string;
|
|
18
|
+
onClose?: () => void;
|
|
19
|
+
/** Whether clicking the backdrop (outside the modal box) closes the modal. */
|
|
20
|
+
closeOnClickOutside?: boolean;
|
|
21
|
+
/** Callback invoked when clicking outside the modal. Defaults to `onClose`. */
|
|
22
|
+
onClickOutside?: () => void;
|
|
23
|
+
children: Snippet;
|
|
24
|
+
/** Extra classes merged onto the modal box, e.g. Tailwind size utilities
|
|
25
|
+
* like `max-w-4xl` or `w-11/12`. */
|
|
26
|
+
class?: string;
|
|
27
|
+
/** Explicit size overrides (any valid CSS length, e.g. '600px', '90vw').
|
|
28
|
+
* Applied as inline styles, so they take priority over `class` utilities. */
|
|
29
|
+
width?: string;
|
|
30
|
+
maxWidth?: string;
|
|
31
|
+
height?: string;
|
|
32
|
+
maxHeight?: string;
|
|
33
|
+
} = $props();
|
|
34
|
+
|
|
35
|
+
const handleClickOutside = $derived(onClickOutside ?? onClose);
|
|
36
|
+
|
|
37
|
+
const boxStyle = $derived(
|
|
38
|
+
[
|
|
39
|
+
width ? `width:${width}` : '',
|
|
40
|
+
maxWidth ? `max-width:${maxWidth}` : '',
|
|
41
|
+
height ? `height:${height}` : '',
|
|
42
|
+
maxHeight ? `max-height:${maxHeight}` : '',
|
|
43
|
+
]
|
|
44
|
+
.filter(Boolean)
|
|
45
|
+
.join(';')
|
|
46
|
+
);
|
|
47
|
+
</script>
|
|
48
|
+
|
|
49
|
+
<dialog class="modal" open>
|
|
50
|
+
<div class={['modal-box', additionalClass]} style={boxStyle}>
|
|
51
|
+
<div class="flex items-center justify-between gap-4">
|
|
52
|
+
<h3 class="text-lg font-bold">{title}</h3>
|
|
53
|
+
{#if onClose}
|
|
54
|
+
<Button
|
|
55
|
+
variant="ghost"
|
|
56
|
+
class="btn-circle"
|
|
57
|
+
aria-label="Cerrar"
|
|
58
|
+
onclick={onClose}
|
|
59
|
+
>
|
|
60
|
+
✕
|
|
61
|
+
</Button>
|
|
62
|
+
{/if}
|
|
63
|
+
</div>
|
|
64
|
+
|
|
65
|
+
<div class="divider my-2"></div>
|
|
66
|
+
|
|
67
|
+
{@render children()}
|
|
68
|
+
</div>
|
|
69
|
+
|
|
70
|
+
{#if closeOnClickOutside && handleClickOutside}
|
|
71
|
+
<div class="modal-backdrop">
|
|
72
|
+
<button onclick={handleClickOutside} aria-label="Cerrar"></button>
|
|
73
|
+
</div>
|
|
74
|
+
{/if}
|
|
75
|
+
</dialog>
|
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { Snippet } from 'svelte';
|
|
3
|
-
import Breadcrumbs from '../navigation/Breadcrumbs.svelte';
|
|
4
|
-
import type { BreadcrumbItem } from '../../types/breadcrumb.js';
|
|
5
|
-
|
|
6
|
-
let {
|
|
7
|
-
title,
|
|
8
|
-
breadcrumbs = [],
|
|
9
|
-
buttons,
|
|
10
|
-
}: {
|
|
11
|
-
title: string;
|
|
12
|
-
breadcrumbs?: BreadcrumbItem[];
|
|
13
|
-
buttons?: Snippet;
|
|
14
|
-
} = $props();
|
|
15
|
-
</script>
|
|
16
|
-
|
|
17
|
-
<div class="header-root flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between">
|
|
18
|
-
<div class="flex flex-col gap-1 flex-1">
|
|
19
|
-
<h1>{title}</h1>
|
|
20
|
-
<Breadcrumbs items={breadcrumbs} />
|
|
21
|
-
</div>
|
|
22
|
-
|
|
23
|
-
{#if buttons}
|
|
24
|
-
<div class="flex min-w-0 items-center gap-2 sm:pt-1">
|
|
25
|
-
{@render buttons()}
|
|
26
|
-
</div>
|
|
27
|
-
{/if}
|
|
28
|
-
</div>
|
|
29
|
-
|
|
30
|
-
<style>
|
|
31
|
-
h1 {
|
|
32
|
-
font-size: var(--runeforge-crud-title-size, 1.875rem);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
.header-root {
|
|
36
|
-
width: 100%;
|
|
37
|
-
max-width: var(--runeforge-crud-max-width);
|
|
38
|
-
margin-inline: auto;
|
|
39
|
-
}
|
|
40
|
-
</style>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
import Breadcrumbs from '../navigation/Breadcrumbs.svelte';
|
|
4
|
+
import type { BreadcrumbItem } from '../../types/breadcrumb.js';
|
|
5
|
+
|
|
6
|
+
let {
|
|
7
|
+
title,
|
|
8
|
+
breadcrumbs = [],
|
|
9
|
+
buttons,
|
|
10
|
+
}: {
|
|
11
|
+
title: string;
|
|
12
|
+
breadcrumbs?: BreadcrumbItem[];
|
|
13
|
+
buttons?: Snippet;
|
|
14
|
+
} = $props();
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<div class="header-root flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between">
|
|
18
|
+
<div class="flex flex-col gap-1 flex-1">
|
|
19
|
+
<h1>{title}</h1>
|
|
20
|
+
<Breadcrumbs items={breadcrumbs} />
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
{#if buttons}
|
|
24
|
+
<div class="flex min-w-0 items-center gap-2 sm:pt-1">
|
|
25
|
+
{@render buttons()}
|
|
26
|
+
</div>
|
|
27
|
+
{/if}
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
<style>
|
|
31
|
+
h1 {
|
|
32
|
+
font-size: var(--runeforge-crud-title-size, 1.875rem);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.header-root {
|
|
36
|
+
width: 100%;
|
|
37
|
+
max-width: var(--runeforge-crud-max-width);
|
|
38
|
+
margin-inline: auto;
|
|
39
|
+
}
|
|
40
|
+
</style>
|