@svelte-atoms/core 1.0.0-alpha.31 → 1.0.0-alpha.32
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 -0
- package/README.md +289 -853
- package/dist/attachments/index.d.ts +1 -0
- package/dist/attachments/index.js +1 -0
- package/dist/components/accordion/accordion-root.svelte +65 -65
- package/dist/components/accordion/accordion.stories.svelte +70 -70
- package/dist/components/accordion/item/accordion-item-body.svelte +44 -44
- package/dist/components/accordion/item/accordion-item-header.svelte +51 -51
- package/dist/components/accordion/item/accordion-item-indicator.svelte +51 -51
- package/dist/components/accordion/item/accordion-item-root.svelte +66 -66
- package/dist/components/alert/alert-close-button.svelte +66 -66
- package/dist/components/alert/alert-description.svelte +42 -42
- package/dist/components/alert/alert-root.svelte +68 -68
- package/dist/components/atom/html-atom.svelte +26 -194
- package/dist/components/atom/types.d.ts +3 -2
- package/dist/components/atom/utils.d.ts +37 -0
- package/dist/components/atom/utils.js +208 -0
- package/dist/components/breadcrumb/breadcrumb-item.svelte +1 -1
- package/dist/components/breadcrumb/breadcrumb-separator.svelte +5 -1
- package/dist/components/breadcrumb/breadcrumb.stories.svelte +16 -16
- package/dist/components/calendar/calendar-day.svelte +101 -101
- package/dist/components/checkbox/checkbox.svelte +159 -159
- package/dist/components/collapsible/bond.svelte.js +2 -1
- package/dist/components/collapsible/collapsible-body.svelte +3 -2
- package/dist/components/collapsible/motion.svelte.d.ts +6 -0
- package/dist/components/collapsible/motion.svelte.js +15 -0
- package/dist/components/combobox/atoms.d.ts +3 -3
- package/dist/components/combobox/atoms.js +3 -3
- package/dist/components/combobox/bond.svelte.d.ts +6 -6
- package/dist/components/combobox/bond.svelte.js +3 -26
- package/dist/components/combobox/combobox-control.svelte +52 -52
- package/dist/components/combobox/{compobox-item.svelte → combobox-item.svelte} +62 -68
- package/dist/components/combobox/combobox-item.svelte.d.ts +12 -0
- package/dist/components/combobox/combobox.stories.svelte +50 -0
- package/dist/components/combobox/combobox.stories.svelte.d.ts +3 -0
- package/dist/components/datagrid/tr/datagrid-tr.svelte +90 -90
- package/dist/components/date-picker/bond.svelte.d.ts +15 -5
- package/dist/components/date-picker/bond.svelte.js +5 -11
- package/dist/components/date-picker/date-picker-calendar.svelte +67 -67
- package/dist/components/dialog/bond.svelte.js +5 -20
- package/dist/components/dialog/dialog-content.svelte +44 -44
- package/dist/components/dialog/dialog-root.svelte +91 -91
- package/dist/components/drawer/bond.svelte.d.ts +18 -16
- package/dist/components/drawer/bond.svelte.js +8 -18
- package/dist/components/drawer/drawer-content.svelte +49 -49
- package/dist/components/drawer/drawer-root.svelte +5 -4
- package/dist/components/drawer/drawer.stories.svelte +141 -144
- package/dist/components/drawer/motion.js +1 -1
- package/dist/components/dropdown/atoms.d.ts +1 -1
- package/dist/components/dropdown/atoms.js +1 -1
- package/dist/components/dropdown/bond.svelte.d.ts +21 -22
- package/dist/components/dropdown/bond.svelte.js +29 -53
- package/dist/components/dropdown/dropdown-root.svelte +65 -59
- package/dist/components/dropdown/dropdown-values.svelte +17 -17
- package/dist/components/dropdown/dropdown-values.svelte.d.ts +1 -2
- package/dist/components/dropdown/dropdown.stories.svelte +83 -80
- package/dist/components/dropdown/index.d.ts +1 -0
- package/dist/components/dropdown/index.js +1 -0
- package/dist/components/dropdown/item/attachments.svelte.d.ts +2 -2
- package/dist/components/dropdown/item/attachments.svelte.js +2 -2
- package/dist/components/dropdown/item/controller.svelte.d.ts +34 -0
- package/dist/components/dropdown/item/controller.svelte.js +82 -0
- package/dist/components/dropdown/item/dropdown-item.svelte +109 -102
- package/dist/components/dropdown/item/dropdown-item.svelte.d.ts +13 -28
- package/dist/components/dropdown/item/index.d.ts +3 -0
- package/dist/components/dropdown/item/index.js +3 -0
- package/dist/components/dropdown/item/types.d.ts +29 -0
- package/dist/components/dropdown/item/types.js +1 -0
- package/dist/components/list/list-item.svelte +20 -20
- package/dist/components/menu/atoms.d.ts +8 -3
- package/dist/components/menu/atoms.js +8 -3
- package/dist/components/menu/bond.svelte.d.ts +54 -0
- package/dist/components/menu/bond.svelte.js +132 -0
- package/dist/components/menu/index.d.ts +1 -0
- package/dist/components/menu/index.js +1 -0
- package/dist/components/menu/item/controller.svelte.d.ts +26 -0
- package/dist/components/menu/item/controller.svelte.js +69 -0
- package/dist/components/menu/item/index.d.ts +2 -0
- package/dist/components/menu/item/index.js +2 -0
- package/dist/components/menu/item/menu-item.svelte +103 -0
- package/dist/components/menu/item/menu-item.svelte.d.ts +31 -0
- package/dist/components/menu/item/types.d.ts +62 -0
- package/dist/components/menu/item/types.js +1 -0
- package/dist/components/menu/{menu-list.svelte → menu-content.svelte} +40 -40
- package/dist/components/menu/{menu-list.svelte.d.ts → menu-content.svelte.d.ts} +3 -3
- package/dist/components/menu/menu-root.svelte +15 -0
- package/dist/components/menu/menu-root.svelte.d.ts +8 -0
- package/dist/components/menu/menu.stories.svelte +33 -33
- package/dist/components/menu/types.d.ts +0 -7
- package/dist/components/popover/bond.svelte.d.ts +11 -14
- package/dist/components/popover/bond.svelte.js +27 -44
- package/dist/components/popover/popover-content.svelte +137 -137
- package/dist/components/popover/popover.stories.svelte +37 -49
- package/dist/components/portal/active-portal.svelte +29 -29
- package/dist/components/portal/portal-root.svelte +76 -76
- package/dist/components/portal/teleport.svelte +49 -49
- package/dist/components/radio/radio.svelte +109 -109
- package/dist/components/root/index.d.ts +1 -0
- package/dist/components/root/index.js +1 -0
- package/dist/components/root/l0-portal.svelte +8 -0
- package/dist/components/root/l0-portal.svelte.d.ts +26 -0
- package/dist/components/root/l1-portal.svelte +7 -0
- package/dist/components/root/l1-portal.svelte.d.ts +26 -0
- package/dist/components/root/root.css +119 -119
- package/dist/components/root/root.svelte +17 -18
- package/dist/components/root/root.svelte.d.ts +2 -6
- package/dist/components/root/toasts-portal.svelte +7 -0
- package/dist/components/root/toasts-portal.svelte.d.ts +26 -0
- package/dist/components/root/types.d.ts +17 -0
- package/dist/components/sidebar/motion.svelte.js +3 -3
- package/dist/components/sidebar/sidebar-content.svelte +40 -40
- package/dist/components/textarea/textarea-input.svelte +9 -9
- package/dist/components/textarea/textarea-root.svelte +9 -9
- package/dist/components/tooltip/tooltip-trigger.svelte +39 -39
- package/dist/components/tree/index.d.ts +1 -0
- package/dist/components/tree/index.js +1 -0
- package/dist/components/tree/motion.svelte.d.ts +6 -0
- package/dist/components/tree/motion.svelte.js +14 -0
- package/dist/components/tree/tree-body.svelte +4 -3
- package/dist/context/preset.svelte.d.ts +3 -1
- package/dist/icons/icon-copy.svelte +6 -6
- package/dist/utils/dom.svelte.d.ts +2 -0
- package/dist/utils/dom.svelte.js +21 -0
- package/dist/utils/function.d.ts +1 -1
- package/dist/utils/promise.svelte.d.ts +5 -0
- package/dist/utils/promise.svelte.js +20 -0
- package/package.json +4 -2
- package/dist/components/combobox/compobox-item.svelte.d.ts +0 -34
- package/dist/components/combobox/compobox.stories.svelte +0 -51
- package/dist/components/combobox/compobox.stories.svelte.d.ts +0 -3
- package/dist/components/dropdown/item/bond.svelte.d.ts +0 -42
- package/dist/components/dropdown/item/bond.svelte.js +0 -99
- package/dist/components/menu/menu-item.svelte +0 -69
- package/dist/components/menu/menu-item.svelte.d.ts +0 -37
- package/dist/utils/markdown-to-llm.d.ts +0 -28
- package/dist/utils/markdown-to-llm.js +0 -76
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { ClassValue } from 'svelte/elements';
|
|
2
2
|
import type { Base } from '../components/atom';
|
|
3
3
|
import type { Bond } from '../shared';
|
|
4
|
-
|
|
4
|
+
import type { Attachment } from 'svelte/attachments';
|
|
5
|
+
export type PresetModuleName = 'accordion' | 'accordion.item.body' | 'accordion.item.header' | 'accordion.item.indicator' | 'accordion.item' | 'alert.actions' | 'alert.close-button' | 'alert.content' | 'alert.description' | 'alert.icon' | 'alert' | 'alert.title' | 'card.content' | 'card.description' | 'card.footer' | 'card.header' | 'card.body' | 'card.media' | 'card' | 'card.subtitle' | 'card.title' | 'collapsible.body' | 'collapsible.header' | 'collapsible.indicator' | 'collapsible' | 'combobox.control' | 'combobox.trigger' | 'combobox.item' | 'dialog.close-button' | 'dialog.body' | 'dialog.content' | 'dialog.description' | 'dialog.footer' | 'dialog.header' | 'dialog' | 'dialog.title' | 'divider' | 'dropdown.placeholder' | 'dropdown.query' | 'dropdown.trigger' | 'dropdown.value' | 'dropdown' | 'field.control' | 'field.label' | 'field' | 'form' | 'icon' | 'input' | 'input.control' | 'input.placeholder' | 'label' | 'layer.inner' | 'layer' | 'link' | 'list.divider' | 'list.group' | 'list.item' | 'list.item' | 'list.item' | 'dropdown.item' | 'menu.content' | 'popover.arrow' | 'popover.indicator' | 'popover.content' | 'popover.trigger' | 'portal.inner' | 'portal' | 'root' | 'root.portals' | 'sidebar.content' | 'sidebar' | 'drawer.backdrop' | 'drawer.body' | 'drawer.content' | 'drawer.description' | 'drawer.title' | 'drawer.footer' | 'drawer.header' | 'drawer' | 'stack.root' | 'stack.item' | 'tabs.body' | 'tabs.header' | 'tabs' | 'tab.header' | 'tab.body' | 'tab.description' | 'tab' | 'tree.body' | 'tree.header' | 'tree.indicator' | 'tree' | 'datagrid' | 'datagrid.header' | 'datagrid.th' | 'datagrid.body' | 'datagrid.tr' | 'datagrid.td' | 'datagrid.footer' | 'datagrid.checkbox' | 'datagrid.sort-icon' | 'scrollable' | 'scrollable.container' | 'scrollable.content' | 'scrollable.track' | 'scrollable.thumb' | 'breadcrumb' | 'breadcrumb.item' | 'breadcrumb.separator' | 'badge' | 'button' | 'checkbox' | 'checkbox.checkmark' | 'checkbox.indeterminate' | 'radio' | 'radio.group' | 'container' | 'calendar' | 'calendar.day' | 'calendar.header' | 'calendar.weekday' | 'calendar.body' | 'datepicker.trigger' | 'datepicker.calendar' | 'datepicker.years' | 'datepicker.months' | 'datepicker.header';
|
|
5
6
|
export interface PresetEntryRecord {
|
|
6
7
|
[key: string]: unknown;
|
|
7
8
|
class?: ClassValue;
|
|
@@ -10,6 +11,7 @@ export interface PresetEntryRecord {
|
|
|
10
11
|
variants?: Record<string, Record<string, any>>;
|
|
11
12
|
compounds?: Array<Record<string, any>>;
|
|
12
13
|
defaults?: Record<string, any>;
|
|
14
|
+
attachments?: Attachment[];
|
|
13
15
|
}
|
|
14
16
|
export type PresetEntry = (bond: Bond | undefined | null, ...args: any[]) => PresetEntryRecord | (() => PresetEntryRecord);
|
|
15
17
|
export type Preset = Record<PresetModuleName, PresetEntry>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" class="size-full" viewBox="0 0 24 24"
|
|
2
|
-
><!-- Icon from Fluent UI System Icons by Microsoft Corporation - https://github.com/microsoft/fluentui-system-icons/blob/main/LICENSE --><path
|
|
3
|
-
fill="currentColor"
|
|
4
|
-
d="M5.503 4.627 5.5 6.75v10.504a3.25 3.25 0 0 0 3.25 3.25h8.616a2.251 2.251 0 0 1-2.122 1.5H8.75A4.75 4.75 0 0 1 4 17.254V6.75c0-.98.627-1.815 1.503-2.123M17.75 2A2.25 2.25 0 0 1 20 4.25v13a2.25 2.25 0 0 1-2.25 2.25h-9a2.25 2.25 0 0 1-2.25-2.25v-13A2.25 2.25 0 0 1 8.75 2zM7.75 17.25c0 .414.336.75.75.75h9a.75.75 0 0 0 .75-.75v-13a.75.75 0 0 0-.75-.75h-9a.75.75 0 0 0-.75.75z"
|
|
5
|
-
/></svg
|
|
6
|
-
>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" class="size-full" viewBox="0 0 24 24"
|
|
2
|
+
><!-- Icon from Fluent UI System Icons by Microsoft Corporation - https://github.com/microsoft/fluentui-system-icons/blob/main/LICENSE --><path
|
|
3
|
+
fill="currentColor"
|
|
4
|
+
d="M5.503 4.627 5.5 6.75v10.504a3.25 3.25 0 0 0 3.25 3.25h8.616a2.251 2.251 0 0 1-2.122 1.5H8.75A4.75 4.75 0 0 1 4 17.254V6.75c0-.98.627-1.815 1.503-2.123M17.75 2A2.25 2.25 0 0 1 20 4.25v13a2.25 2.25 0 0 1-2.25 2.25h-9a2.25 2.25 0 0 1-2.25-2.25v-13A2.25 2.25 0 0 1 8.75 2zM7.75 17.25c0 .414.336.75.75.75h9a.75.75 0 0 0 .75-.75v-13a.75.75 0 0 0-.75-.75h-9a.75.75 0 0 0-.75.75z"
|
|
5
|
+
/></svg
|
|
6
|
+
>
|
package/dist/utils/dom.svelte.js
CHANGED
|
@@ -4,3 +4,24 @@ export function getElementId(id, kind) {
|
|
|
4
4
|
export function isBrowser() {
|
|
5
5
|
return typeof window !== 'undefined' && typeof document !== 'undefined';
|
|
6
6
|
}
|
|
7
|
+
export function focusTrap(ev) {
|
|
8
|
+
const node = ev.currentTarget;
|
|
9
|
+
// Tab trap - keep focus within popover
|
|
10
|
+
if (ev.key === 'Tab') {
|
|
11
|
+
const focusableElements = node.querySelectorAll('a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])');
|
|
12
|
+
const firstElement = focusableElements[0];
|
|
13
|
+
const lastElement = focusableElements[focusableElements.length - 1];
|
|
14
|
+
if (ev.shiftKey && document.activeElement === firstElement) {
|
|
15
|
+
ev.preventDefault();
|
|
16
|
+
lastElement?.focus();
|
|
17
|
+
}
|
|
18
|
+
else if (!ev.shiftKey && document.activeElement === lastElement) {
|
|
19
|
+
ev.preventDefault();
|
|
20
|
+
firstElement?.focus();
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export function focus(element) {
|
|
25
|
+
const firstFocusable = element?.querySelector('a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])');
|
|
26
|
+
(firstFocusable || element)?.focus();
|
|
27
|
+
}
|
package/dist/utils/function.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function call<const T = (...args: any) => any>(param: T, ...args: any[]): ReturnType<T>;
|
|
1
|
+
export declare function call<const T extends (...args: any) => any = (...args: any) => any>(param: T, ...args: any[]): ReturnType<T>;
|
|
2
2
|
export declare function call<const T>(param: T, ...args: any[]): T;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { call } from './function';
|
|
2
|
+
export function promiseToState(promise) {
|
|
3
|
+
let data = $state(null);
|
|
4
|
+
const refresh = async () => {
|
|
5
|
+
const result = (await call(promise));
|
|
6
|
+
data = result;
|
|
7
|
+
};
|
|
8
|
+
$effect(() => {
|
|
9
|
+
refresh();
|
|
10
|
+
});
|
|
11
|
+
return {
|
|
12
|
+
get promise() {
|
|
13
|
+
return promise;
|
|
14
|
+
},
|
|
15
|
+
get current() {
|
|
16
|
+
return data;
|
|
17
|
+
},
|
|
18
|
+
refresh
|
|
19
|
+
};
|
|
20
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@svelte-atoms/core",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.32",
|
|
4
4
|
"description": "A modular, accessible, and extensible Svelte UI component library.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"license": "MIT",
|
|
15
15
|
"scripts": {
|
|
16
16
|
"dev": "vite dev",
|
|
17
|
-
"build": "vite build
|
|
17
|
+
"build": "vite build",
|
|
18
18
|
"preview": "vite preview",
|
|
19
19
|
"prepare": "svelte-kit sync || echo ''",
|
|
20
20
|
"prepack": "svelte-kit sync && svelte-package && publint",
|
|
@@ -389,6 +389,7 @@
|
|
|
389
389
|
"@storybook/addon-vitest": "^9.1.3",
|
|
390
390
|
"@storybook/sveltekit": "^9.1.3",
|
|
391
391
|
"@sveltejs/adapter-auto": "^6.0.0",
|
|
392
|
+
"@sveltejs/adapter-netlify": "^5.2.4",
|
|
392
393
|
"@sveltejs/kit": "^2.22.0",
|
|
393
394
|
"@sveltejs/package": "^2.0.0",
|
|
394
395
|
"@sveltejs/vite-plugin-svelte": "^6.0.0",
|
|
@@ -450,6 +451,7 @@
|
|
|
450
451
|
},
|
|
451
452
|
"dependencies": {
|
|
452
453
|
"@floating-ui/dom": "^1.7.0",
|
|
454
|
+
"@modelcontextprotocol/sdk": "^1.24.3",
|
|
453
455
|
"@qrcode-js/browser": "^1.2.0",
|
|
454
456
|
"clsx": "^2.1.1",
|
|
455
457
|
"date-fns": "^4.1.0",
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import type { Base } from '../atom';
|
|
2
|
-
declare function $$render<D, T extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base>(): {
|
|
3
|
-
props: {
|
|
4
|
-
class?: string;
|
|
5
|
-
children?: any;
|
|
6
|
-
onmount?: any;
|
|
7
|
-
ondestroy?: any;
|
|
8
|
-
animate?: any;
|
|
9
|
-
enter?: any;
|
|
10
|
-
exit?: any;
|
|
11
|
-
initial?: any;
|
|
12
|
-
} & Record<string, any>;
|
|
13
|
-
exports: {};
|
|
14
|
-
bindings: "";
|
|
15
|
-
slots: {};
|
|
16
|
-
events: {};
|
|
17
|
-
};
|
|
18
|
-
declare class __sveltets_Render<D, T extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> {
|
|
19
|
-
props(): ReturnType<typeof $$render<D, T, B>>['props'];
|
|
20
|
-
events(): ReturnType<typeof $$render<D, T, B>>['events'];
|
|
21
|
-
slots(): ReturnType<typeof $$render<D, T, B>>['slots'];
|
|
22
|
-
bindings(): "";
|
|
23
|
-
exports(): {};
|
|
24
|
-
}
|
|
25
|
-
interface $$IsomorphicComponent {
|
|
26
|
-
new <D, T extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<D, T, B>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<D, T, B>['props']>, ReturnType<__sveltets_Render<D, T, B>['events']>, ReturnType<__sveltets_Render<D, T, B>['slots']>> & {
|
|
27
|
-
$$bindings?: ReturnType<__sveltets_Render<D, T, B>['bindings']>;
|
|
28
|
-
} & ReturnType<__sveltets_Render<D, T, B>['exports']>;
|
|
29
|
-
<D, T extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base>(internal: unknown, props: ReturnType<__sveltets_Render<D, T, B>['props']> & {}): ReturnType<__sveltets_Render<D, T, B>['exports']>;
|
|
30
|
-
z_$$bindings?: ReturnType<__sveltets_Render<any, any, any>['bindings']>;
|
|
31
|
-
}
|
|
32
|
-
declare const CompoboxItem: $$IsomorphicComponent;
|
|
33
|
-
type CompoboxItem<D, T extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> = InstanceType<typeof CompoboxItem<D, T, B>>;
|
|
34
|
-
export default CompoboxItem;
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
<script module>
|
|
2
|
-
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
-
import { Combobox as ACombobox } from '.';
|
|
4
|
-
import { Input } from '../input';
|
|
5
|
-
import { Divider } from '../divider';
|
|
6
|
-
|
|
7
|
-
// More on how to set up stories at: https://storybook.js.org/docs/writing-stories
|
|
8
|
-
const { Story } = defineMeta({
|
|
9
|
-
title: 'Atoms/Combobox',
|
|
10
|
-
// This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/writing-docs/autodocs
|
|
11
|
-
|
|
12
|
-
parameters: {
|
|
13
|
-
// More on how to position stories at: https://storybook.js.org/docs/configure/story-layout
|
|
14
|
-
layout: 'fullscreen'
|
|
15
|
-
},
|
|
16
|
-
args: {}
|
|
17
|
-
});
|
|
18
|
-
</script>
|
|
19
|
-
|
|
20
|
-
<script lang="ts">
|
|
21
|
-
let open = $state(false);
|
|
22
|
-
let value = $state<string | undefined>('ar');
|
|
23
|
-
let array = $state([
|
|
24
|
-
{ value: 'ar', label: 'Arabic' },
|
|
25
|
-
{ value: 'en', label: 'English' },
|
|
26
|
-
{ value: 'sp', label: 'Spanish' },
|
|
27
|
-
{ value: 'it', label: 'Italian' }
|
|
28
|
-
]);
|
|
29
|
-
</script>
|
|
30
|
-
|
|
31
|
-
<Story name="Combobox" args={{}}>
|
|
32
|
-
<ACombobox.Root bind:open bind:value>
|
|
33
|
-
{#snippet children({ combobox })}
|
|
34
|
-
<ACombobox.Trigger
|
|
35
|
-
base={Input.Root}
|
|
36
|
-
class="h-10 min-w-sm items-center gap-0 rounded-sm p-1 transition-colors duration-200"
|
|
37
|
-
>
|
|
38
|
-
<Input.Icon class="text-foreground/50">$</Input.Icon>
|
|
39
|
-
<Divider class="mx-1" vertical />
|
|
40
|
-
<ACombobox.Input class="px-1" placeholder="Select a language" />
|
|
41
|
-
</ACombobox.Trigger>
|
|
42
|
-
<ACombobox.List>
|
|
43
|
-
{#each array.filter((item) => !combobox.state.query || item.label
|
|
44
|
-
.toLowerCase()
|
|
45
|
-
.includes(combobox.state.query)) as item (item.value)}
|
|
46
|
-
<ACombobox.Item value={item.value}>{item.label}</ACombobox.Item>
|
|
47
|
-
{/each}
|
|
48
|
-
</ACombobox.List>
|
|
49
|
-
{/snippet}
|
|
50
|
-
</ACombobox.Root>
|
|
51
|
-
</Story>
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import type { PopoverStateProps } from '../../popover/bond.svelte';
|
|
2
|
-
import { Bond, BondState, type BondStateProps } from '../../../shared/bond.svelte';
|
|
3
|
-
import { DropdownBond, DropdownBondState } from '../bond.svelte';
|
|
4
|
-
export type DropdownItemBondProps<T> = BondStateProps & {
|
|
5
|
-
value: string;
|
|
6
|
-
selected?: string;
|
|
7
|
-
data: T;
|
|
8
|
-
};
|
|
9
|
-
export type DropdownItemBondElements = {
|
|
10
|
-
root: HTMLElement;
|
|
11
|
-
};
|
|
12
|
-
export declare class DropdownItemBond<T = unknown> extends Bond<DropdownItemBondProps<T>, DropdownItemBondState<T>, DropdownItemBondElements> {
|
|
13
|
-
#private;
|
|
14
|
-
static CONTEXT_KEY: string;
|
|
15
|
-
constructor(state: DropdownItemBondState<T>);
|
|
16
|
-
get value(): string;
|
|
17
|
-
get text(): string;
|
|
18
|
-
get dropdown(): DropdownBond<DropdownBondState<PopoverStateProps>, DropdownBondState<DropdownBondState<PopoverStateProps>>, import("..").DropdownBondElements> | undefined;
|
|
19
|
-
mount(): () => void;
|
|
20
|
-
unmount(): void;
|
|
21
|
-
share(): this;
|
|
22
|
-
root(): {
|
|
23
|
-
[x: symbol]: (node: HTMLElement) => void;
|
|
24
|
-
'data-selected': boolean;
|
|
25
|
-
};
|
|
26
|
-
static get(): DropdownItemBond | undefined;
|
|
27
|
-
static set(bond: DropdownItemBond): DropdownItemBond;
|
|
28
|
-
}
|
|
29
|
-
export declare class DropdownItemBondState<T> extends BondState<DropdownItemBondProps<T>> {
|
|
30
|
-
#private;
|
|
31
|
-
constructor(props: () => DropdownItemBondProps<T>);
|
|
32
|
-
get value(): string;
|
|
33
|
-
get data(): T;
|
|
34
|
-
get isSelected(): boolean;
|
|
35
|
-
set isSelected(val: boolean);
|
|
36
|
-
get isHighlighted(): boolean;
|
|
37
|
-
get dropdown(): DropdownBondState<DropdownBondState<PopoverStateProps>> | undefined;
|
|
38
|
-
select(): void;
|
|
39
|
-
unselect(): void;
|
|
40
|
-
toggle(): void;
|
|
41
|
-
close(): void;
|
|
42
|
-
}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { getContext, setContext } from 'svelte';
|
|
2
|
-
import { Bond, BondState } from '../../../shared/bond.svelte';
|
|
3
|
-
import { DropdownBond, DropdownBondState } from '../bond.svelte';
|
|
4
|
-
import { createAttachmentKey } from 'svelte/attachments';
|
|
5
|
-
export class DropdownItemBond extends Bond {
|
|
6
|
-
static CONTEXT_KEY = '@atoms/context/dropdown/item';
|
|
7
|
-
#dropdown;
|
|
8
|
-
constructor(state) {
|
|
9
|
-
super(state);
|
|
10
|
-
this.#dropdown = DropdownBond.get();
|
|
11
|
-
if (!this.#dropdown) {
|
|
12
|
-
throw new Error('DropdownItemAtom must be used within a DropdownAtom context');
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
get value() {
|
|
16
|
-
return this.state.value;
|
|
17
|
-
}
|
|
18
|
-
get text() {
|
|
19
|
-
const element = (this.elements?.root?.querySelector('[data-text]') ?? this.elements?.root);
|
|
20
|
-
return element?.innerText ?? '';
|
|
21
|
-
}
|
|
22
|
-
get dropdown() {
|
|
23
|
-
return this.#dropdown;
|
|
24
|
-
}
|
|
25
|
-
mount() {
|
|
26
|
-
this.dropdown?.state.mountItem(this.state.value, this);
|
|
27
|
-
return () => this.unmount();
|
|
28
|
-
}
|
|
29
|
-
unmount() {
|
|
30
|
-
this.dropdown?.state.unmountItem(this.state.value);
|
|
31
|
-
}
|
|
32
|
-
share() {
|
|
33
|
-
return DropdownItemBond.set(this);
|
|
34
|
-
}
|
|
35
|
-
root() {
|
|
36
|
-
return {
|
|
37
|
-
'data-selected': this.state.isSelected,
|
|
38
|
-
[createAttachmentKey()]: (node) => {
|
|
39
|
-
this.elements.root = node;
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
static get() {
|
|
44
|
-
return getContext(DropdownItemBond.CONTEXT_KEY);
|
|
45
|
-
}
|
|
46
|
-
static set(bond) {
|
|
47
|
-
return setContext(DropdownItemBond.CONTEXT_KEY, bond);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
export class DropdownItemBondState extends BondState {
|
|
51
|
-
#dropdown;
|
|
52
|
-
constructor(props) {
|
|
53
|
-
super(props);
|
|
54
|
-
this.#dropdown = DropdownBond.get();
|
|
55
|
-
if (!this.#dropdown) {
|
|
56
|
-
throw new Error('DropdownItemState must be used within a DropdownAtom context');
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
get value() {
|
|
60
|
-
return this.props.value;
|
|
61
|
-
}
|
|
62
|
-
get data() {
|
|
63
|
-
return this.props.data;
|
|
64
|
-
}
|
|
65
|
-
get isSelected() {
|
|
66
|
-
return this.dropdown?.props.values?.includes(this.props.value) ?? false;
|
|
67
|
-
}
|
|
68
|
-
set isSelected(val) {
|
|
69
|
-
if (val) {
|
|
70
|
-
this.dropdown?.select([this.props.value]);
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
this.dropdown?.unselect([this.props.value]);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
get isHighlighted() {
|
|
77
|
-
return this.dropdown?.highlightedItem?.id === this.id;
|
|
78
|
-
}
|
|
79
|
-
get dropdown() {
|
|
80
|
-
return this.#dropdown?.state;
|
|
81
|
-
}
|
|
82
|
-
select() {
|
|
83
|
-
this.dropdown?.select([this.value]);
|
|
84
|
-
}
|
|
85
|
-
unselect() {
|
|
86
|
-
this.dropdown?.unselect([this.value]);
|
|
87
|
-
}
|
|
88
|
-
toggle() {
|
|
89
|
-
if (this.isSelected) {
|
|
90
|
-
this.unselect();
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
this.select();
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
close() {
|
|
97
|
-
this.dropdown?.close();
|
|
98
|
-
}
|
|
99
|
-
}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
<script lang="ts" generics="T extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
|
|
2
|
-
import { PopoverBond } from '../popover/bond.svelte';
|
|
3
|
-
import type { Base } from '../atom';
|
|
4
|
-
import { List } from '../list';
|
|
5
|
-
|
|
6
|
-
const bond = PopoverBond.get();
|
|
7
|
-
|
|
8
|
-
let {
|
|
9
|
-
class: klass = '',
|
|
10
|
-
preset: presetKey = 'menu.item',
|
|
11
|
-
children = undefined,
|
|
12
|
-
onclick = undefined,
|
|
13
|
-
disabled = undefined,
|
|
14
|
-
onmount = undefined,
|
|
15
|
-
ondestroy = undefined,
|
|
16
|
-
animate = undefined,
|
|
17
|
-
enter = undefined,
|
|
18
|
-
exit = undefined,
|
|
19
|
-
initial = undefined,
|
|
20
|
-
...restProps
|
|
21
|
-
} = $props();
|
|
22
|
-
|
|
23
|
-
function _onclick(ev: MouseEvent) {
|
|
24
|
-
onclick?.(ev);
|
|
25
|
-
|
|
26
|
-
if (ev.defaultPrevented) {
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
bond?.state.close();
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
function _onkeydown(ev: KeyboardEvent) {
|
|
34
|
-
if (disabled) return;
|
|
35
|
-
|
|
36
|
-
// Activate on Enter or Space
|
|
37
|
-
if (ev.key === 'Enter' || ev.key === ' ') {
|
|
38
|
-
ev.preventDefault();
|
|
39
|
-
// Call the click handler if provided
|
|
40
|
-
// cast to any to avoid strict event-type mismatch when forwarding
|
|
41
|
-
onclick?.(ev as unknown as MouseEvent);
|
|
42
|
-
bond?.state.close();
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
</script>
|
|
46
|
-
|
|
47
|
-
<List.Item
|
|
48
|
-
{bond}
|
|
49
|
-
preset={presetKey}
|
|
50
|
-
class={[
|
|
51
|
-
'border-border last:border-b-none hover:bg-foreground/5 active:bg-foreground/10 cursor-pointer border-b',
|
|
52
|
-
'$preset',
|
|
53
|
-
klass
|
|
54
|
-
]}
|
|
55
|
-
onmount={onmount?.bind(bond.state)}
|
|
56
|
-
ondestroy={ondestroy?.bind(bond.state)}
|
|
57
|
-
enter={enter?.bind(bond.state)}
|
|
58
|
-
exit={exit?.bind(bond.state)}
|
|
59
|
-
initial={initial?.bind(bond.state)}
|
|
60
|
-
animate={animate?.bind(bond.state)}
|
|
61
|
-
role="menuitem"
|
|
62
|
-
aria-disabled={disabled ? true : undefined}
|
|
63
|
-
tabIndex={disabled ? -1 : 0}
|
|
64
|
-
onkeydown={_onkeydown}
|
|
65
|
-
onclick={_onclick}
|
|
66
|
-
{...restProps}
|
|
67
|
-
>
|
|
68
|
-
{@render children?.({ menu: bond })}
|
|
69
|
-
</List.Item>
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import type { Base } from '../atom';
|
|
2
|
-
declare function $$render<T extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base>(): {
|
|
3
|
-
props: {
|
|
4
|
-
class?: string;
|
|
5
|
-
preset?: string;
|
|
6
|
-
children?: any;
|
|
7
|
-
onclick?: any;
|
|
8
|
-
disabled?: any;
|
|
9
|
-
onmount?: any;
|
|
10
|
-
ondestroy?: any;
|
|
11
|
-
animate?: any;
|
|
12
|
-
enter?: any;
|
|
13
|
-
exit?: any;
|
|
14
|
-
initial?: any;
|
|
15
|
-
} & Record<string, any>;
|
|
16
|
-
exports: {};
|
|
17
|
-
bindings: "";
|
|
18
|
-
slots: {};
|
|
19
|
-
events: {};
|
|
20
|
-
};
|
|
21
|
-
declare class __sveltets_Render<T extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> {
|
|
22
|
-
props(): ReturnType<typeof $$render<T, B>>['props'];
|
|
23
|
-
events(): ReturnType<typeof $$render<T, B>>['events'];
|
|
24
|
-
slots(): ReturnType<typeof $$render<T, B>>['slots'];
|
|
25
|
-
bindings(): "";
|
|
26
|
-
exports(): {};
|
|
27
|
-
}
|
|
28
|
-
interface $$IsomorphicComponent {
|
|
29
|
-
new <T extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T, B>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T, B>['props']>, ReturnType<__sveltets_Render<T, B>['events']>, ReturnType<__sveltets_Render<T, B>['slots']>> & {
|
|
30
|
-
$$bindings?: ReturnType<__sveltets_Render<T, B>['bindings']>;
|
|
31
|
-
} & ReturnType<__sveltets_Render<T, B>['exports']>;
|
|
32
|
-
<T extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base>(internal: unknown, props: ReturnType<__sveltets_Render<T, B>['props']> & {}): ReturnType<__sveltets_Render<T, B>['exports']>;
|
|
33
|
-
z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
|
|
34
|
-
}
|
|
35
|
-
declare const MenuItem: $$IsomorphicComponent;
|
|
36
|
-
type MenuItem<T extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> = InstanceType<typeof MenuItem<T, B>>;
|
|
37
|
-
export default MenuItem;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
export interface PropDefinition {
|
|
2
|
-
name: string;
|
|
3
|
-
type: string;
|
|
4
|
-
default: string;
|
|
5
|
-
description: string;
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Converts prop definitions to markdown table format
|
|
9
|
-
*/
|
|
10
|
-
export declare function propsToMarkdown(props: PropDefinition[]): string;
|
|
11
|
-
/**
|
|
12
|
-
* Injects props into markdown content by replacing placeholders
|
|
13
|
-
* Placeholders format: {{propName}}
|
|
14
|
-
*/
|
|
15
|
-
export declare function injectPropsIntoMarkdown(markdown: string, propsMap: Record<string, PropDefinition[]>): string;
|
|
16
|
-
/**
|
|
17
|
-
* Converts markdown content to LLM-friendly text format
|
|
18
|
-
* Keeps markdown syntax as-is since LLMs parse it well
|
|
19
|
-
*/
|
|
20
|
-
export declare function markdownToLLM(markdown: string): string;
|
|
21
|
-
/**
|
|
22
|
-
* Reads markdown files from the docs directory
|
|
23
|
-
*/
|
|
24
|
-
export declare function readMarkdownFile(filePath: string): Promise<string>;
|
|
25
|
-
/**
|
|
26
|
-
* Generate LLM-friendly documentation metadata
|
|
27
|
-
*/
|
|
28
|
-
export declare function generateLLMHeader(title: string, description: string, version?: string): string;
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Converts prop definitions to markdown table format
|
|
3
|
-
*/
|
|
4
|
-
export function propsToMarkdown(props) {
|
|
5
|
-
if (!props || props.length === 0)
|
|
6
|
-
return '';
|
|
7
|
-
let markdown = '| Name | Type | Default | Description |\n';
|
|
8
|
-
markdown += '|------|------|---------|-------------|\n';
|
|
9
|
-
for (const prop of props) {
|
|
10
|
-
const name = prop.name.replace(/\|/g, '\\|');
|
|
11
|
-
const type = prop.type.replace(/\|/g, '\\|');
|
|
12
|
-
const defaultVal = prop.default.replace(/\|/g, '\\|');
|
|
13
|
-
const description = prop.description.replace(/\|/g, '\\|');
|
|
14
|
-
markdown += `| ${name} | ${type} | ${defaultVal} | ${description} |\n`;
|
|
15
|
-
}
|
|
16
|
-
return markdown;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Injects props into markdown content by replacing placeholders
|
|
20
|
-
* Placeholders format: {{propName}}
|
|
21
|
-
*/
|
|
22
|
-
export function injectPropsIntoMarkdown(markdown, propsMap) {
|
|
23
|
-
let result = markdown;
|
|
24
|
-
for (const [key, props] of Object.entries(propsMap)) {
|
|
25
|
-
const placeholder = new RegExp(`{{${key}}}`, 'g');
|
|
26
|
-
const propsMarkdown = propsToMarkdown(props);
|
|
27
|
-
result = result.replace(placeholder, propsMarkdown);
|
|
28
|
-
}
|
|
29
|
-
return result;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Converts markdown content to LLM-friendly text format
|
|
33
|
-
* Keeps markdown syntax as-is since LLMs parse it well
|
|
34
|
-
*/
|
|
35
|
-
export function markdownToLLM(markdown) {
|
|
36
|
-
let text = markdown;
|
|
37
|
-
// Remove HTML comments
|
|
38
|
-
text = text.replace(/<!--[\s\S]*?-->/g, '');
|
|
39
|
-
// Remove excessive blank lines (more than 2)
|
|
40
|
-
text = text.replace(/\n{3,}/g, '\n\n');
|
|
41
|
-
// Trim whitespace
|
|
42
|
-
text = text.trim();
|
|
43
|
-
return text;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Reads markdown files from the docs directory
|
|
47
|
-
*/
|
|
48
|
-
export async function readMarkdownFile(filePath) {
|
|
49
|
-
try {
|
|
50
|
-
// In production, you might want to use a different approach
|
|
51
|
-
// This is a placeholder - adjust based on your build setup
|
|
52
|
-
const response = await fetch(filePath);
|
|
53
|
-
if (!response.ok)
|
|
54
|
-
throw new Error(`Failed to fetch ${filePath}`);
|
|
55
|
-
return await response.text();
|
|
56
|
-
}
|
|
57
|
-
catch (error) {
|
|
58
|
-
console.error(`Error reading markdown file: ${filePath}`, error);
|
|
59
|
-
return '';
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Generate LLM-friendly documentation metadata
|
|
64
|
-
*/
|
|
65
|
-
export function generateLLMHeader(title, description, version = '1.0.0-alpha.30') {
|
|
66
|
-
return `# ${title}
|
|
67
|
-
|
|
68
|
-
${description}
|
|
69
|
-
|
|
70
|
-
---
|
|
71
|
-
Generated: ${new Date().toISOString()}
|
|
72
|
-
Version: ${version}
|
|
73
|
-
---
|
|
74
|
-
|
|
75
|
-
`;
|
|
76
|
-
}
|