@svelte-atoms/core 1.0.0-alpha.44 → 1.0.0-alpha.46

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 (178) hide show
  1. package/README.md +13 -0
  2. package/dist/components/accordion/item/accordion-item-body.svelte +5 -8
  3. package/dist/components/accordion/item/accordion-item-header.svelte +0 -13
  4. package/dist/components/accordion/item/accordion-item-indicator.svelte +0 -12
  5. package/dist/components/accordion/item/accordion-item-root.svelte +0 -12
  6. package/dist/components/alert/alert-actions.svelte +0 -12
  7. package/dist/components/alert/alert-close-button.svelte +0 -12
  8. package/dist/components/alert/alert-content.svelte +0 -12
  9. package/dist/components/alert/alert-description.svelte +0 -12
  10. package/dist/components/alert/alert-icon.svelte +0 -12
  11. package/dist/components/alert/alert-root.svelte +1 -13
  12. package/dist/components/alert/alert-title.svelte +0 -12
  13. package/dist/components/atom/html-atom.svelte +31 -17
  14. package/dist/components/atom/types.d.ts +9 -0
  15. package/dist/components/atom/utils/base.d.ts +6 -0
  16. package/dist/components/atom/utils/base.js +8 -0
  17. package/dist/components/atom/utils/cache.d.ts +17 -0
  18. package/dist/components/atom/utils/cache.js +134 -0
  19. package/dist/components/atom/utils/classes.d.ts +14 -0
  20. package/dist/components/atom/utils/classes.js +42 -0
  21. package/dist/components/atom/utils/constants.d.ts +9 -0
  22. package/dist/components/atom/utils/constants.js +9 -0
  23. package/dist/components/atom/utils/index.d.ts +6 -0
  24. package/dist/components/atom/utils/index.js +5 -0
  25. package/dist/components/atom/utils/preset.d.ts +22 -0
  26. package/dist/components/atom/utils/preset.js +94 -0
  27. package/dist/components/atom/utils/props.d.ts +13 -0
  28. package/dist/components/atom/utils/props.js +60 -0
  29. package/dist/components/atom/utils/variants.d.ts +31 -0
  30. package/dist/components/atom/utils/variants.js +270 -0
  31. package/dist/components/card/card-body.svelte +0 -12
  32. package/dist/components/card/card-description.svelte +0 -12
  33. package/dist/components/card/card-footer.svelte +0 -12
  34. package/dist/components/card/card-header.svelte +0 -12
  35. package/dist/components/card/card-media.svelte +0 -12
  36. package/dist/components/card/card-root.svelte +0 -12
  37. package/dist/components/card/card-subtitle.svelte +0 -12
  38. package/dist/components/card/card-title.svelte +0 -12
  39. package/dist/components/collapsible/collapsible-body.svelte +5 -12
  40. package/dist/components/collapsible/collapsible-header.svelte +0 -12
  41. package/dist/components/collapsible/collapsible-indicator.svelte +0 -12
  42. package/dist/components/collapsible/collapsible-root.svelte +0 -12
  43. package/dist/components/combobox/combobox-control.svelte +0 -12
  44. package/dist/components/combobox/combobox-item.svelte +0 -12
  45. package/dist/components/combobox/combobox-item.svelte.d.ts +0 -6
  46. package/dist/components/combobox/index.d.ts +1 -1
  47. package/dist/components/container/container.svelte +0 -12
  48. package/dist/components/datagrid/column/datagrid-column-sort-icon.svelte +3 -12
  49. package/dist/components/datagrid/column/datagrid-column-sort-icon.svelte.d.ts +0 -6
  50. package/dist/components/datagrid/datagrid-body.svelte +17 -1
  51. package/dist/components/dialog/dialog-body.svelte +0 -12
  52. package/dist/components/dialog/dialog-close-button.svelte +0 -12
  53. package/dist/components/dialog/dialog-close.svelte +0 -12
  54. package/dist/components/dialog/dialog-content.svelte +4 -12
  55. package/dist/components/dialog/dialog-description.svelte +0 -12
  56. package/dist/components/dialog/dialog-footer.svelte +0 -12
  57. package/dist/components/dialog/dialog-header.svelte +0 -12
  58. package/dist/components/dialog/dialog-title.svelte +0 -12
  59. package/dist/components/dialog/index.d.ts +3 -0
  60. package/dist/components/dialog/index.js +3 -0
  61. package/dist/components/drawer/drawer-backdrop.svelte +0 -12
  62. package/dist/components/drawer/drawer-body.svelte +0 -12
  63. package/dist/components/drawer/drawer-content.svelte +5 -12
  64. package/dist/components/drawer/drawer-description.svelte +0 -12
  65. package/dist/components/drawer/drawer-footer.svelte +0 -12
  66. package/dist/components/drawer/drawer-header.svelte +0 -12
  67. package/dist/components/drawer/drawer-root.svelte +5 -4
  68. package/dist/components/drawer/drawer-title.svelte +0 -12
  69. package/dist/components/dropdown/dropdown-placeholder.svelte +0 -6
  70. package/dist/components/dropdown/dropdown-placeholder.svelte.d.ts +0 -6
  71. package/dist/components/dropdown/dropdown-query.svelte +0 -12
  72. package/dist/components/dropdown-menu/bond.svelte.d.ts +0 -4
  73. package/dist/components/dropdown-menu/dropdown-menu-content.svelte +0 -12
  74. package/dist/components/dropdown-menu/dropdown-menu-content.svelte.d.ts +0 -6
  75. package/dist/components/dropdown-menu/index.d.ts +1 -1
  76. package/dist/components/form/field/bond.svelte.d.ts +29 -17
  77. package/dist/components/form/field/bond.svelte.js +73 -49
  78. package/dist/components/form/field/field-control.svelte +21 -18
  79. package/dist/components/form/field/field-label.svelte +2 -2
  80. package/dist/components/form/field/field-root.svelte +2 -1
  81. package/dist/components/index.d.ts +2 -0
  82. package/dist/components/index.js +2 -0
  83. package/dist/components/input/input-file-control.svelte +0 -12
  84. package/dist/components/input/input-icon.svelte +3 -3
  85. package/dist/components/input/input-number-control.svelte +28 -35
  86. package/dist/components/input/input-text-control.svelte +8 -3
  87. package/dist/components/input/input-url-control.svelte +2 -2
  88. package/dist/components/input/types.d.ts +4 -4
  89. package/dist/components/kbd/index.d.ts +3 -0
  90. package/dist/components/kbd/index.js +3 -0
  91. package/dist/components/kbd/kbd.svelte +19 -0
  92. package/dist/components/kbd/kbd.svelte.d.ts +4 -0
  93. package/dist/components/kbd/shortcut.svelte +38 -0
  94. package/dist/components/kbd/shortcut.svelte.d.ts +4 -0
  95. package/dist/components/kbd/types.d.ts +20 -0
  96. package/dist/components/kbd/types.js +1 -0
  97. package/dist/components/layer/layer-inner.svelte +0 -12
  98. package/dist/components/layer/layer-root.svelte +0 -12
  99. package/dist/components/menu/menu-content.svelte +0 -12
  100. package/dist/components/menu/menu-content.svelte.d.ts +0 -6
  101. package/dist/components/popover/bond.svelte.d.ts +29 -1
  102. package/dist/components/popover/bond.svelte.js +55 -2
  103. package/dist/components/popover/index.d.ts +1 -0
  104. package/dist/components/popover/index.js +1 -0
  105. package/dist/components/popover/popover-arrow.svelte +4 -2
  106. package/dist/components/popover/popover-content.svelte +17 -90
  107. package/dist/components/popover/popover-overlay.svelte +98 -0
  108. package/dist/components/popover/popover-overlay.svelte.d.ts +4 -0
  109. package/dist/components/popover/popover-trigger.svelte +9 -0
  110. package/dist/components/popover/strategies/floating.svelte +10 -10
  111. package/dist/components/popover/types.d.ts +7 -2
  112. package/dist/components/portal/portal-inner.svelte +0 -12
  113. package/dist/components/portal/portal-root.svelte +0 -12
  114. package/dist/components/portal/types.d.ts +1 -1
  115. package/dist/components/progress/index.d.ts +3 -0
  116. package/dist/components/progress/index.js +3 -0
  117. package/dist/components/progress/progress-circular.svelte +99 -0
  118. package/dist/components/progress/progress-circular.svelte.d.ts +6 -0
  119. package/dist/components/progress/progress-linear.svelte +66 -0
  120. package/dist/components/progress/progress-linear.svelte.d.ts +6 -0
  121. package/dist/components/progress/types.d.ts +18 -0
  122. package/dist/components/progress/types.js +1 -0
  123. package/dist/components/scrollable/scrollable-container.svelte +0 -12
  124. package/dist/components/scrollable/scrollable-content.svelte +0 -12
  125. package/dist/components/scrollable/scrollable-root.svelte +0 -12
  126. package/dist/components/scrollable/scrollable-thumb.svelte +1 -12
  127. package/dist/components/scrollable/scrollable-track.svelte +0 -12
  128. package/dist/components/select/bond.svelte.d.ts +0 -4
  129. package/dist/components/select/index.d.ts +1 -1
  130. package/dist/components/select/select-placeholder.svelte +0 -6
  131. package/dist/components/select/select-placeholder.svelte.d.ts +0 -6
  132. package/dist/components/sidebar/sidebar-content.svelte +5 -12
  133. package/dist/components/stack/bond.svelte.js +6 -0
  134. package/dist/components/stack/stack-item.svelte +4 -0
  135. package/dist/components/switch/switch.svelte +2 -0
  136. package/dist/components/tabs/tab/tab-header.svelte +4 -4
  137. package/dist/components/tabs/tabs-body.svelte +0 -2
  138. package/dist/components/tabs/tabs-root.svelte +11 -3
  139. package/dist/components/toast/atoms.d.ts +1 -1
  140. package/dist/components/toast/atoms.js +1 -1
  141. package/dist/components/toast/attachments.svelte.d.ts +10 -2
  142. package/dist/components/toast/attachments.svelte.js +9 -1
  143. package/dist/components/toast/bond.svelte.d.ts +73 -0
  144. package/dist/components/toast/bond.svelte.js +132 -0
  145. package/dist/components/toast/index.d.ts +1 -1
  146. package/dist/components/toast/index.js +1 -1
  147. package/dist/components/toast/toast-close.svelte +47 -0
  148. package/dist/components/toast/toast-close.svelte.d.ts +26 -0
  149. package/dist/components/toast/toast-description.svelte +16 -24
  150. package/dist/components/toast/toast-description.svelte.d.ts +15 -19
  151. package/dist/components/toast/toast-root.svelte +36 -26
  152. package/dist/components/toast/toast-root.svelte.d.ts +16 -15
  153. package/dist/components/toast/toast-title.svelte +17 -22
  154. package/dist/components/toast/toast-title.svelte.d.ts +13 -13
  155. package/dist/components/toast/toaster.svelte.d.ts +38 -0
  156. package/dist/components/toast/toaster.svelte.js +107 -0
  157. package/dist/components/toast/types.d.ts +13 -21
  158. package/dist/components/tree/tree-body.svelte +5 -12
  159. package/dist/components/tree/tree-header.svelte +0 -12
  160. package/dist/components/tree/tree-indicator.svelte +0 -12
  161. package/dist/components/tree/tree-root.svelte +0 -12
  162. package/dist/context/preset.svelte.d.ts +53 -37
  163. package/dist/context/preset.svelte.js +29 -3
  164. package/package.json +1 -1
  165. package/dist/components/atom/utils.d.ts +0 -44
  166. package/dist/components/atom/utils.js +0 -275
  167. package/dist/components/popover/popover-engine.svelte +0 -118
  168. package/dist/components/popover/popover-engine.svelte.d.ts +0 -3
  169. package/dist/components/toast/bond.d.ts +0 -35
  170. package/dist/components/toast/bond.js +0 -59
  171. package/dist/components/toast/manager.svelte.d.ts +0 -38
  172. package/dist/components/toast/manager.svelte.js +0 -82
  173. package/dist/components/toast/toast-root-managed.svelte +0 -64
  174. package/dist/components/toast/toast-root-managed.svelte.d.ts +0 -7
  175. package/dist/components/toast/toast-toaster.svelte +0 -42
  176. package/dist/components/toast/toast-toaster.svelte.d.ts +0 -4
  177. /package/dist/components/popover/{motion.d.ts → motion.svelte.d.ts} +0 -0
  178. /package/dist/components/popover/{motion.js → motion.svelte.js} +0 -0
@@ -1,118 +0,0 @@
1
- <script lang="ts">
2
- import type { autoUpdate, ComputePositionConfig } from "@floating-ui/dom";
3
- import { PopoverBond, type PopoverParams } from "./bond.svelte";
4
- import { offset } from "@floating-ui/dom";
5
- import { flip } from "svelte/animate";
6
- import { shift } from "@floating-ui/dom";
7
- import { computePosition } from "@floating-ui/dom";
8
-
9
- const bond = PopoverBond.get();
10
- const placement = $derived(bond?.state.props.placement);
11
- const placements = $derived(bond?.state.props.placements);
12
- const offsetValue = $derived(bond?.state.props.offset);
13
- const portal = $derived(bond?.state.props.portal);
14
-
15
- let {} = $props();
16
-
17
- $effect.pre(() => {
18
- if(!bond) {
19
- return;
20
- }
21
-
22
- const trigger = bond.elements.trigger;
23
- if(!trigger) {
24
- return;
25
- }
26
- const content = bond.elements.content;
27
- if(!content) {
28
- return;
29
- }
30
-
31
-
32
-
33
- });
34
-
35
- function popover(bond: PopoverBond) {
36
- return (props: Record<string, unknown>, updater?: typeof autoUpdate) => {
37
- const { offset: ofs, placements, placement } = bond.state.props;
38
-
39
- // Guard: ensure required elements exist
40
- if (!bond.elements.content || !bond.elements.trigger) {
41
- return;
42
- }
43
-
44
- const { content, trigger, arrow: arrowElement } = bond.elements;
45
-
46
- // Build middleware stack
47
- const middleware: ComputePositionConfig['middleware'] = [
48
- offset(ofs),
49
- flip({
50
- fallbackPlacements: placements,
51
- padding: 8,
52
- crossAxis: true,
53
- fallbackStrategy: 'bestFit',
54
-
55
- }),
56
- shift({
57
- padding: 8,
58
- limiter: {
59
- fn: (state) => {
60
- const { x, y } = state;
61
- return {
62
- x,
63
- y
64
- };
65
- }
66
- }
67
- })
68
- ];
69
-
70
- // Add arrow middleware if element exists
71
- if (arrowElement) {
72
- middleware.push(arrow({ element: arrowElement }));
73
- }
74
-
75
- // Debounce position change callback
76
- const onchangeCallback = props.onchange as PopoverParams['onchange'];
77
-
78
- // Compute position and notify listeners
79
- const compute = async () => {
80
- // Wait for next frame to ensure DOM has settled and styles are applied
81
- // Double requestAnimationFrame - This ensures the browser has completed both layout calculation AND painting, giving us accurate final dimensions
82
- await new Promise((resolve) => requestAnimationFrame(() => requestAnimationFrame(resolve)));
83
-
84
- const position = await computePosition(trigger, content, {
85
- placement: placement ?? 'bottom',
86
- middleware
87
- });
88
-
89
- // Round to 0.001 precision to avoid excessive updates from sub-pixel changes
90
- const x = Math.round((position.x ?? 0) * 100) / 100;
91
- const y = Math.round((position.y ?? 0) * 100) / 100;
92
-
93
- bond.state.position = {
94
- middlewareData: position.middlewareData,
95
- placement: position.placement,
96
- strategy: position.strategy,
97
- x,
98
- y
99
- };
100
- onchangeCallback?.(content, position);
101
-
102
- // Set minimum width to match trigger
103
- requestAnimationFrame(() => {
104
- content.style.minWidth = `${trigger.clientWidth}px`;
105
- });
106
- };
107
-
108
- // Use auto-update if provided, otherwise compute once
109
- if (updater) {
110
- return updater(trigger, content, compute, {
111
- ancestorScroll: false
112
- });
113
- }
114
-
115
- compute();
116
- };
117
- }
118
- </script>
@@ -1,3 +0,0 @@
1
- declare const PopoverEngine: import("svelte").Component<$$ComponentProps, {}, "">;
2
- type PopoverEngine = ReturnType<typeof PopoverEngine>;
3
- export default PopoverEngine;
@@ -1,35 +0,0 @@
1
- import { Bond, BondState, type BondStateProps } from '../../shared/bond.svelte';
2
- export type ToastBondProps = BondStateProps & {
3
- open: boolean;
4
- disabled: boolean;
5
- extend?: Record<string, unknown>;
6
- };
7
- export type ToastBondElements = {
8
- root: HTMLElement;
9
- title: HTMLElement;
10
- description: HTMLElement;
11
- };
12
- export declare class ToastBond<Props extends ToastBondProps = ToastBondProps, State extends ToastBondState<Props> = ToastBondState<Props>> extends Bond<Props, State, ToastBondElements> {
13
- static CONTEXT_KEY: string;
14
- constructor(s: State);
15
- share(): this;
16
- root(props?: Record<string, unknown>): {
17
- id: string;
18
- 'aria-labeledby': string;
19
- 'aria-describedby': string;
20
- 'aria-disabled': boolean;
21
- };
22
- title(props?: Record<string, unknown>): {
23
- id: string;
24
- };
25
- description(props?: Record<string, unknown>): {
26
- id: string;
27
- };
28
- static get(): ToastBond | undefined;
29
- static set(atom: ToastBond): ToastBond;
30
- }
31
- export declare class ToastBondState<Props extends ToastBondProps> extends BondState<Props> {
32
- constructor(props: () => Props);
33
- open(): void;
34
- close(): void;
35
- }
@@ -1,59 +0,0 @@
1
- import { Bond, BondState } from '../../shared/bond.svelte';
2
- import { getContext, setContext } from 'svelte';
3
- import { createAttachmentKey } from 'svelte/attachments';
4
- export class ToastBond extends Bond {
5
- static CONTEXT_KEY = '@atoms/context/toast';
6
- constructor(s) {
7
- super(s);
8
- }
9
- share() {
10
- return ToastBond.set(this);
11
- }
12
- root(props = {}) {
13
- return {
14
- id: `toast-root-${this.id}`,
15
- 'aria-labeledby': `toast-title-${this.id}`,
16
- 'aria-describedby': `toast-description-${this.id}`,
17
- 'aria-disabled': this.state.props.disabled ?? false,
18
- ...props,
19
- [createAttachmentKey()]: (node) => {
20
- this.elements.root = node;
21
- }
22
- };
23
- }
24
- title(props = {}) {
25
- return {
26
- id: `toast-title-${this.id}`,
27
- ...props,
28
- [createAttachmentKey()]: (node) => {
29
- this.elements.title = node;
30
- }
31
- };
32
- }
33
- description(props = {}) {
34
- return {
35
- id: `toast-description-${this.id}`,
36
- ...props,
37
- [createAttachmentKey()]: (node) => {
38
- this.elements.description = node;
39
- }
40
- };
41
- }
42
- static get() {
43
- return getContext(this.CONTEXT_KEY);
44
- }
45
- static set(atom) {
46
- return setContext(this.CONTEXT_KEY, atom);
47
- }
48
- }
49
- export class ToastBondState extends BondState {
50
- constructor(props) {
51
- super(props);
52
- }
53
- open() {
54
- this.props.open = true;
55
- }
56
- close() {
57
- this.props.open = false;
58
- }
59
- }
@@ -1,38 +0,0 @@
1
- import { ToastBond } from './bond';
2
- export type ToastType = 'info' | 'success' | 'error' | 'warning' | 'default';
3
- export type ToastPosition = 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';
4
- export interface ToastItem {
5
- id: string;
6
- type: ToastType;
7
- title?: string | undefined;
8
- description?: string | undefined;
9
- duration: number;
10
- dismissible: boolean;
11
- bond: ToastBond;
12
- open: boolean;
13
- }
14
- export interface ToastOptions {
15
- id?: string;
16
- description?: string;
17
- duration?: number;
18
- dismissible?: boolean;
19
- }
20
- declare class ToastManager {
21
- #private;
22
- get toasts(): ToastItem[];
23
- add(title: string, type?: ToastType, options?: ToastOptions): string;
24
- dismiss(id: string): void;
25
- dismissAll(): void;
26
- remove(id: string): void;
27
- }
28
- export declare const toastManager: ToastManager;
29
- export declare function toast(title: string, options?: ToastOptions): string;
30
- export declare namespace toast {
31
- var info: (title: string, options?: ToastOptions) => string;
32
- var success: (title: string, options?: ToastOptions) => string;
33
- var error: (title: string, options?: ToastOptions) => string;
34
- var warning: (title: string, options?: ToastOptions) => string;
35
- var dismiss: (id: string) => void;
36
- var dismissAll: () => void;
37
- }
38
- export {};
@@ -1,82 +0,0 @@
1
- import { nanoid } from 'nanoid';
2
- import { ToastBond, ToastBondState } from './bond';
3
- import { defineProperty, defineState } from '../../utils';
4
- const DEFAULT_DURATION = 4000;
5
- class ToastManager {
6
- #toasts = $state([]);
7
- get toasts() {
8
- return this.#toasts;
9
- }
10
- add(title, type = 'default', options = {}) {
11
- const id = options.id ?? nanoid(8);
12
- // If a toast with this id already exists, update it
13
- const existing = this.#toasts.find((t) => t.id === id);
14
- if (existing) {
15
- existing.title = title;
16
- existing.type = type;
17
- if (options.description !== undefined)
18
- existing.description = options.description;
19
- return id;
20
- }
21
- const duration = options.duration ?? DEFAULT_DURATION;
22
- const dismissible = options.dismissible ?? true;
23
- let open = $state(true);
24
- const bondProps = defineState([
25
- defineProperty('open', () => open, (v) => {
26
- open = v;
27
- if (!v) {
28
- // Remove after exit animation completes
29
- setTimeout(() => this.remove(id), 300);
30
- }
31
- })
32
- ], () => ({ disabled: false, extend: {} }));
33
- const bondState = new ToastBondState(() => bondProps);
34
- const bond = new ToastBond(bondState);
35
- const item = {
36
- id,
37
- type,
38
- title,
39
- description: options.description,
40
- duration,
41
- dismissible,
42
- bond,
43
- get open() {
44
- return open;
45
- }
46
- };
47
- this.#toasts.push(item);
48
- // Auto-dismiss
49
- if (duration > 0) {
50
- setTimeout(() => {
51
- open = false;
52
- }, duration);
53
- }
54
- return id;
55
- }
56
- dismiss(id) {
57
- const item = this.#toasts.find((t) => t.id === id);
58
- if (item) {
59
- item.bond.state.close();
60
- }
61
- }
62
- dismissAll() {
63
- for (const item of this.#toasts) {
64
- item.bond.state.close();
65
- }
66
- }
67
- remove(id) {
68
- this.#toasts = this.#toasts.filter((t) => t.id !== id);
69
- }
70
- }
71
- // Singleton manager instance
72
- export const toastManager = new ToastManager();
73
- // Imperative API
74
- export function toast(title, options) {
75
- return toastManager.add(title, 'default', options);
76
- }
77
- toast.info = (title, options) => toastManager.add(title, 'info', options);
78
- toast.success = (title, options) => toastManager.add(title, 'success', options);
79
- toast.error = (title, options) => toastManager.add(title, 'error', options);
80
- toast.warning = (title, options) => toastManager.add(title, 'warning', options);
81
- toast.dismiss = (id) => toastManager.dismiss(id);
82
- toast.dismissAll = () => toastManager.dismissAll();
@@ -1,64 +0,0 @@
1
- <script lang="ts">
2
- import { HtmlAtom } from '../atom';
3
- import type { ToastItem } from './manager.svelte';
4
-
5
- let { item }: { item: ToastItem } = $props();
6
-
7
- const typeClasses: Record<string, string> = {
8
- default: 'border-border bg-card text-foreground',
9
- info: 'border-blue-200 bg-blue-50 text-blue-900 dark:border-blue-800 dark:bg-blue-950 dark:text-blue-100',
10
- success: 'border-green-200 bg-green-50 text-green-900 dark:border-green-800 dark:bg-green-950 dark:text-green-100',
11
- error: 'border-red-200 bg-red-50 text-red-900 dark:border-red-800 dark:bg-red-950 dark:text-red-100',
12
- warning: 'border-yellow-200 bg-yellow-50 text-yellow-900 dark:border-yellow-800 dark:bg-yellow-950 dark:text-yellow-100'
13
- };
14
- </script>
15
-
16
- <HtmlAtom
17
- as="li"
18
- {...item.bond.root()}
19
- preset="toast.item"
20
- class={[
21
- 'pointer-events-auto flex w-80 max-w-sm flex-col gap-1 rounded-md border p-4 shadow-md transition-all duration-200',
22
- typeClasses[item.type] ?? typeClasses.default,
23
- !item.open && 'opacity-0 translate-y-2',
24
- '$preset'
25
- ]}
26
- role="status"
27
- aria-live="polite"
28
- >
29
- {#if item.title}
30
- <HtmlAtom
31
- as="p"
32
- {...item.bond.title()}
33
- preset="toast.title"
34
- class={['font-medium text-sm leading-tight', '$preset']}
35
- >
36
- {item.title}
37
- </HtmlAtom>
38
- {/if}
39
-
40
- {#if item.description}
41
- <HtmlAtom
42
- as="p"
43
- {...item.bond.description()}
44
- preset="toast.description"
45
- class={['text-sm opacity-80', '$preset']}
46
- >
47
- {item.description}
48
- </HtmlAtom>
49
- {/if}
50
-
51
- {#if item.dismissible}
52
- <button
53
- class="absolute top-2 right-2 rounded p-1 opacity-50 hover:opacity-100 transition-opacity"
54
- type="button"
55
- aria-label="Dismiss notification"
56
- onclick={() => item.bond.state.close()}
57
- >
58
- <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
59
- <line x1="18" y1="6" x2="6" y2="18"></line>
60
- <line x1="6" y1="6" x2="18" y2="18"></line>
61
- </svg>
62
- </button>
63
- {/if}
64
- </HtmlAtom>
@@ -1,7 +0,0 @@
1
- import type { ToastItem } from './manager.svelte';
2
- type $$ComponentProps = {
3
- item: ToastItem;
4
- };
5
- declare const ToastRootManaged: import("svelte").Component<$$ComponentProps, {}, "">;
6
- type ToastRootManaged = ReturnType<typeof ToastRootManaged>;
7
- export default ToastRootManaged;
@@ -1,42 +0,0 @@
1
- <script lang="ts">
2
- import { HtmlAtom } from '../atom';
3
- import { toastManager, type ToastPosition } from './manager.svelte';
4
- import type { ToasterProps } from './types';
5
- import ToastRootManaged from './toast-root-managed.svelte';
6
-
7
- let {
8
- class: klass = '',
9
- position = 'bottom-right' as ToastPosition,
10
- gap = 8,
11
- ...restProps
12
- }: ToasterProps = $props();
13
-
14
- const positionClasses: Record<ToastPosition, string> = {
15
- 'top-left': 'top-0 left-0 items-start',
16
- 'top-center': 'top-0 left-1/2 -translate-x-1/2 items-center',
17
- 'top-right': 'top-0 right-0 items-end',
18
- 'bottom-left': 'bottom-0 left-0 items-start',
19
- 'bottom-center': 'bottom-0 left-1/2 -translate-x-1/2 items-center',
20
- 'bottom-right': 'bottom-0 right-0 items-end'
21
- };
22
- </script>
23
-
24
- <HtmlAtom
25
- as="ol"
26
- class={[
27
- 'pointer-events-none fixed z-50 flex flex-col p-4',
28
- positionClasses[position],
29
- '$preset',
30
- klass
31
- ]}
32
- preset="toast.toaster"
33
- style={`gap: ${gap}px`}
34
- aria-label="Notifications"
35
- aria-live="polite"
36
- aria-atomic="false"
37
- {...restProps}
38
- >
39
- {#each toastManager.toasts as item (item.id)}
40
- <ToastRootManaged {item} />
41
- {/each}
42
- </HtmlAtom>
@@ -1,4 +0,0 @@
1
- import type { ToasterProps } from './types';
2
- declare const ToastToaster: import("svelte").Component<ToasterProps, {}, "">;
3
- type ToastToaster = ReturnType<typeof ToastToaster>;
4
- export default ToastToaster;