decantr 0.9.0
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/AGENTS.md +868 -0
- package/CHANGELOG.md +255 -0
- package/CLAUDE.md +178 -0
- package/LICENSE +21 -0
- package/README.md +229 -0
- package/cli/art.js +127 -0
- package/cli/commands/a11y.js +61 -0
- package/cli/commands/audit.js +225 -0
- package/cli/commands/build.js +38 -0
- package/cli/commands/dev.js +18 -0
- package/cli/commands/doctor.js +197 -0
- package/cli/commands/figma-sync.js +48 -0
- package/cli/commands/figma-tokens.js +55 -0
- package/cli/commands/generate.js +26 -0
- package/cli/commands/init.js +116 -0
- package/cli/commands/lint.js +209 -0
- package/cli/commands/mcp.js +530 -0
- package/cli/commands/migrate.js +175 -0
- package/cli/commands/test.js +38 -0
- package/cli/commands/validate.js +354 -0
- package/cli/index.js +113 -0
- package/package.json +95 -0
- package/reference/atoms.md +517 -0
- package/reference/behaviors.md +384 -0
- package/reference/build-tooling.md +275 -0
- package/reference/color-guidelines.md +965 -0
- package/reference/component-lifecycle.md +137 -0
- package/reference/compound-spacing.md +95 -0
- package/reference/decantation-process.md +499 -0
- package/reference/dev-server-routes.md +93 -0
- package/reference/form-system.md +253 -0
- package/reference/i18n.md +336 -0
- package/reference/icons.md +576 -0
- package/reference/llm-primer.md +953 -0
- package/reference/plugins.md +252 -0
- package/reference/registry-consumption.md +76 -0
- package/reference/router.md +217 -0
- package/reference/shells.md +116 -0
- package/reference/spatial-guidelines.md +541 -0
- package/reference/ssr.md +234 -0
- package/reference/state-data.md +215 -0
- package/reference/state-patterns.md +166 -0
- package/reference/state.md +194 -0
- package/reference/style-system.md +110 -0
- package/reference/tokens.md +460 -0
- package/src/app.js +19 -0
- package/src/chart/_animate.js +266 -0
- package/src/chart/_base.js +109 -0
- package/src/chart/_data.js +209 -0
- package/src/chart/_format.js +106 -0
- package/src/chart/_interact.js +364 -0
- package/src/chart/_palette.js +105 -0
- package/src/chart/_renderer.js +52 -0
- package/src/chart/_scene.js +262 -0
- package/src/chart/_shared.js +371 -0
- package/src/chart/index.js +637 -0
- package/src/chart/layouts/_layout-base.js +328 -0
- package/src/chart/layouts/cartesian.js +148 -0
- package/src/chart/layouts/hierarchy.js +562 -0
- package/src/chart/layouts/polar.js +101 -0
- package/src/chart/renderers/canvas.js +179 -0
- package/src/chart/renderers/svg.js +256 -0
- package/src/chart/renderers/webgpu.js +715 -0
- package/src/chart/types/_type-base.js +26 -0
- package/src/chart/types/area.js +134 -0
- package/src/chart/types/bar.js +173 -0
- package/src/chart/types/box-plot.js +125 -0
- package/src/chart/types/bubble.js +63 -0
- package/src/chart/types/candlestick.js +115 -0
- package/src/chart/types/chord.js +85 -0
- package/src/chart/types/combination.js +108 -0
- package/src/chart/types/funnel.js +68 -0
- package/src/chart/types/gauge.js +163 -0
- package/src/chart/types/heatmap.js +98 -0
- package/src/chart/types/histogram.js +71 -0
- package/src/chart/types/line.js +111 -0
- package/src/chart/types/org-chart.js +93 -0
- package/src/chart/types/pie.js +81 -0
- package/src/chart/types/radar.js +96 -0
- package/src/chart/types/radial.js +68 -0
- package/src/chart/types/range-area.js +55 -0
- package/src/chart/types/range-bar.js +61 -0
- package/src/chart/types/sankey.js +73 -0
- package/src/chart/types/scatter.js +66 -0
- package/src/chart/types/sparkline.js +81 -0
- package/src/chart/types/sunburst.js +69 -0
- package/src/chart/types/swimlane.js +88 -0
- package/src/chart/types/treemap.js +62 -0
- package/src/chart/types/waterfall.js +100 -0
- package/src/components/_base.js +1658 -0
- package/src/components/_behaviors.js +1140 -0
- package/src/components/_primitives.js +534 -0
- package/src/components/_qr-encoder.js +539 -0
- package/src/components/accordion.js +207 -0
- package/src/components/affix.js +62 -0
- package/src/components/alert-dialog.js +75 -0
- package/src/components/alert.js +47 -0
- package/src/components/aspect-ratio.js +24 -0
- package/src/components/avatar-group.js +55 -0
- package/src/components/avatar.js +38 -0
- package/src/components/back-top.js +75 -0
- package/src/components/badge.js +74 -0
- package/src/components/banner.js +68 -0
- package/src/components/breadcrumb.js +162 -0
- package/src/components/button.js +115 -0
- package/src/components/calendar.js +131 -0
- package/src/components/card.js +192 -0
- package/src/components/carousel.js +98 -0
- package/src/components/cascader.js +261 -0
- package/src/components/checkbox.js +80 -0
- package/src/components/chip.js +81 -0
- package/src/components/code-block.js +82 -0
- package/src/components/collapsible.js +50 -0
- package/src/components/color-palette.js +438 -0
- package/src/components/color-picker.js +314 -0
- package/src/components/combobox.js +181 -0
- package/src/components/command.js +174 -0
- package/src/components/comment.js +206 -0
- package/src/components/context-menu.js +76 -0
- package/src/components/data-table.js +724 -0
- package/src/components/date-picker.js +217 -0
- package/src/components/date-range-picker.js +244 -0
- package/src/components/datetime-picker.js +271 -0
- package/src/components/descriptions.js +68 -0
- package/src/components/drawer.js +179 -0
- package/src/components/dropdown.js +88 -0
- package/src/components/empty.js +41 -0
- package/src/components/float-button.js +90 -0
- package/src/components/form.js +106 -0
- package/src/components/hover-card.js +49 -0
- package/src/components/icon.js +87 -0
- package/src/components/image.js +97 -0
- package/src/components/index.js +117 -0
- package/src/components/input-group.js +75 -0
- package/src/components/input-number.js +155 -0
- package/src/components/input-otp.js +178 -0
- package/src/components/input.js +91 -0
- package/src/components/kbd.js +36 -0
- package/src/components/label.js +25 -0
- package/src/components/list.js +118 -0
- package/src/components/masked-input.js +236 -0
- package/src/components/mentions.js +165 -0
- package/src/components/menu.js +259 -0
- package/src/components/message.js +80 -0
- package/src/components/modal.js +147 -0
- package/src/components/navigation-menu.js +166 -0
- package/src/components/notification.js +84 -0
- package/src/components/pagination.js +104 -0
- package/src/components/placeholder.js +132 -0
- package/src/components/popconfirm.js +70 -0
- package/src/components/popover.js +58 -0
- package/src/components/progress.js +61 -0
- package/src/components/qrcode.js +251 -0
- package/src/components/radiogroup.js +120 -0
- package/src/components/range-slider.js +176 -0
- package/src/components/rate.js +186 -0
- package/src/components/resizable.js +83 -0
- package/src/components/result.js +57 -0
- package/src/components/scroll-area.js +43 -0
- package/src/components/segmented.js +97 -0
- package/src/components/select.js +165 -0
- package/src/components/separator.js +31 -0
- package/src/components/shell.js +407 -0
- package/src/components/skeleton.js +39 -0
- package/src/components/slider.js +141 -0
- package/src/components/sortable-list.js +176 -0
- package/src/components/space.js +42 -0
- package/src/components/spinner.js +112 -0
- package/src/components/splitter.js +147 -0
- package/src/components/statistic.js +136 -0
- package/src/components/steps.js +99 -0
- package/src/components/switch.js +95 -0
- package/src/components/table.js +44 -0
- package/src/components/tabs.js +216 -0
- package/src/components/tag.js +115 -0
- package/src/components/textarea.js +82 -0
- package/src/components/time-picker.js +153 -0
- package/src/components/time-range-picker.js +170 -0
- package/src/components/timeline.js +226 -0
- package/src/components/toast.js +71 -0
- package/src/components/toggle.js +213 -0
- package/src/components/tooltip.js +57 -0
- package/src/components/tour.js +159 -0
- package/src/components/transfer.js +163 -0
- package/src/components/tree-select.js +274 -0
- package/src/components/tree.js +141 -0
- package/src/components/typography.js +136 -0
- package/src/components/upload.js +118 -0
- package/src/components/visually-hidden.js +20 -0
- package/src/components/watermark.js +124 -0
- package/src/core/index.js +539 -0
- package/src/core/lifecycle.js +69 -0
- package/src/css/atoms.js +651 -0
- package/src/css/components.js +940 -0
- package/src/css/derive.js +1296 -0
- package/src/css/index.js +265 -0
- package/src/css/runtime.js +268 -0
- package/src/css/styles/addons/bioluminescent.js +93 -0
- package/src/css/styles/addons/clay.js +70 -0
- package/src/css/styles/addons/clean.js +57 -0
- package/src/css/styles/addons/command-center.js +143 -0
- package/src/css/styles/addons/dopamine.js +83 -0
- package/src/css/styles/addons/editorial.js +80 -0
- package/src/css/styles/addons/glassmorphism.js +99 -0
- package/src/css/styles/addons/liquid-glass.js +105 -0
- package/src/css/styles/addons/prismatic.js +100 -0
- package/src/css/styles/addons/retro.js +63 -0
- package/src/css/styles/auradecantism.js +96 -0
- package/src/css/theme-registry.js +444 -0
- package/src/data/entity.js +281 -0
- package/src/data/index.js +13 -0
- package/src/data/persist.js +225 -0
- package/src/data/query.js +839 -0
- package/src/data/realtime.js +299 -0
- package/src/data/url.js +177 -0
- package/src/data/worker.js +134 -0
- package/src/explorer/archetypes.js +243 -0
- package/src/explorer/atoms.js +228 -0
- package/src/explorer/charts.js +497 -0
- package/src/explorer/components.js +129 -0
- package/src/explorer/foundations.js +949 -0
- package/src/explorer/icons.js +178 -0
- package/src/explorer/patterns.js +247 -0
- package/src/explorer/recipes.js +194 -0
- package/src/explorer/shared/pattern-examples.js +1337 -0
- package/src/explorer/shared/showcase-renderer.js +958 -0
- package/src/explorer/shared/spec-table.js +41 -0
- package/src/explorer/shared/usage-links.js +87 -0
- package/src/explorer/shell-config.js +10 -0
- package/src/explorer/shells.js +551 -0
- package/src/explorer/styles.js +161 -0
- package/src/explorer/tokens.js +262 -0
- package/src/explorer/tools.js +525 -0
- package/src/form/index.js +804 -0
- package/src/i18n/index.js +251 -0
- package/src/icons/essential.js +479 -0
- package/src/icons/index.js +53 -0
- package/src/plugins/index.js +282 -0
- package/src/registry/archetypes/content-site.json +71 -0
- package/src/registry/archetypes/docs-explorer.json +23 -0
- package/src/registry/archetypes/ecommerce.json +104 -0
- package/src/registry/archetypes/financial-dashboard.json +77 -0
- package/src/registry/archetypes/index.json +41 -0
- package/src/registry/archetypes/portfolio.json +82 -0
- package/src/registry/archetypes/recipe-community.json +159 -0
- package/src/registry/archetypes/saas-dashboard.json +86 -0
- package/src/registry/architect/cross-cutting.json +45 -0
- package/src/registry/architect/domains/ecommerce.json +294 -0
- package/src/registry/architect/domains/financial-services.json +302 -0
- package/src/registry/architect/index.json +26 -0
- package/src/registry/architect/traits.json +379 -0
- package/src/registry/atoms.json +16 -0
- package/src/registry/chart-showcase.json +160 -0
- package/src/registry/chart.json +136 -0
- package/src/registry/components.json +8616 -0
- package/src/registry/core.json +216 -0
- package/src/registry/css.json +319 -0
- package/src/registry/data.json +135 -0
- package/src/registry/foundations.json +11 -0
- package/src/registry/icons.json +463 -0
- package/src/registry/index.json +101 -0
- package/src/registry/patterns/activity-feed.json +37 -0
- package/src/registry/patterns/article-content.json +27 -0
- package/src/registry/patterns/auth-form.json +37 -0
- package/src/registry/patterns/author-card.json +20 -0
- package/src/registry/patterns/card-grid.json +127 -0
- package/src/registry/patterns/category-nav.json +26 -0
- package/src/registry/patterns/chart-grid.json +36 -0
- package/src/registry/patterns/chat-interface.json +37 -0
- package/src/registry/patterns/checklist-card.json +55 -0
- package/src/registry/patterns/comparison-panel.json +27 -0
- package/src/registry/patterns/component-showcase.json +24 -0
- package/src/registry/patterns/contact-form.json +31 -0
- package/src/registry/patterns/cta-section.json +20 -0
- package/src/registry/patterns/data-table.json +37 -0
- package/src/registry/patterns/detail-header.json +83 -0
- package/src/registry/patterns/detail-panel.json +27 -0
- package/src/registry/patterns/explorer-shell.json +22 -0
- package/src/registry/patterns/filter-bar.json +33 -0
- package/src/registry/patterns/filter-sidebar.json +27 -0
- package/src/registry/patterns/form-sections.json +110 -0
- package/src/registry/patterns/goal-tracker.json +27 -0
- package/src/registry/patterns/hero.json +107 -0
- package/src/registry/patterns/index.json +47 -0
- package/src/registry/patterns/kpi-grid.json +36 -0
- package/src/registry/patterns/media-gallery.json +20 -0
- package/src/registry/patterns/order-history.json +20 -0
- package/src/registry/patterns/pagination.json +19 -0
- package/src/registry/patterns/photo-to-recipe.json +36 -0
- package/src/registry/patterns/pipeline-tracker.json +28 -0
- package/src/registry/patterns/post-list.json +27 -0
- package/src/registry/patterns/pricing-table.json +32 -0
- package/src/registry/patterns/scorecard.json +28 -0
- package/src/registry/patterns/search-bar.json +20 -0
- package/src/registry/patterns/specimen-grid.json +19 -0
- package/src/registry/patterns/stat-card.json +55 -0
- package/src/registry/patterns/stats-bar.json +55 -0
- package/src/registry/patterns/steps-card.json +55 -0
- package/src/registry/patterns/table-of-contents.json +19 -0
- package/src/registry/patterns/testimonials.json +21 -0
- package/src/registry/patterns/timeline.json +27 -0
- package/src/registry/patterns/token-inspector.json +21 -0
- package/src/registry/patterns/wizard.json +27 -0
- package/src/registry/recipe-auradecantism.json +69 -0
- package/src/registry/recipe-clean.json +65 -0
- package/src/registry/recipe-command-center.json +78 -0
- package/src/registry/router.json +73 -0
- package/src/registry/schema/README.md +197 -0
- package/src/registry/skeletons.json +259 -0
- package/src/registry/state.json +137 -0
- package/src/registry/tokens.json +40 -0
- package/src/router/hash.js +17 -0
- package/src/router/history.js +18 -0
- package/src/router/index.js +598 -0
- package/src/ssr/index.js +922 -0
- package/src/state/arrays.js +181 -0
- package/src/state/devtools.js +647 -0
- package/src/state/index.js +498 -0
- package/src/state/middleware.js +288 -0
- package/src/state/scheduler.js +206 -0
- package/src/state/store.js +300 -0
- package/src/tags/index.js +19 -0
- package/src/tannins/auth.js +396 -0
- package/src/test/dom.js +352 -0
- package/src/test/index.js +62 -0
- package/src/test/state.js +306 -0
- package/tools/a11y-audit.js +487 -0
- package/tools/analyzer.js +315 -0
- package/tools/audit.js +706 -0
- package/tools/builder.js +1422 -0
- package/tools/css-extract.js +188 -0
- package/tools/dev-server.js +316 -0
- package/tools/dts-gen.js +1260 -0
- package/tools/figma-components.js +329 -0
- package/tools/figma-patterns.js +516 -0
- package/tools/figma-plugin/code.js +453 -0
- package/tools/figma-plugin/manifest.json +14 -0
- package/tools/figma-plugin/ui.html +268 -0
- package/tools/figma-render.js +293 -0
- package/tools/figma-tokens.js +712 -0
- package/tools/figma-upload.js +318 -0
- package/tools/generate.js +738 -0
- package/tools/icons.js +133 -0
- package/tools/init-templates.js +265 -0
- package/tools/install-hooks.sh +5 -0
- package/tools/migrations/0.5.0.js +53 -0
- package/tools/migrations/0.6.0.js +95 -0
- package/tools/minify.js +170 -0
- package/tools/pre-commit +4 -0
- package/tools/registry.js +662 -0
- package/tools/reset-playground.js +61 -0
- package/tools/starter-templates/content-site/app.js +49 -0
- package/tools/starter-templates/content-site/essence.js +19 -0
- package/tools/starter-templates/content-site/pages.js +31 -0
- package/tools/starter-templates/ecommerce/app.js +50 -0
- package/tools/starter-templates/ecommerce/essence.js +19 -0
- package/tools/starter-templates/ecommerce/pages.js +31 -0
- package/tools/starter-templates/landing-page/app.js +38 -0
- package/tools/starter-templates/landing-page/essence.js +18 -0
- package/tools/starter-templates/landing-page/pages.js +21 -0
- package/tools/starter-templates/portfolio/app.js +45 -0
- package/tools/starter-templates/portfolio/essence.js +19 -0
- package/tools/starter-templates/portfolio/pages.js +33 -0
- package/tools/starter-templates/saas-dashboard/app.js +70 -0
- package/tools/starter-templates/saas-dashboard/essence.js +19 -0
- package/tools/starter-templates/saas-dashboard/pages.js +31 -0
- package/tools/verify-pack.js +203 -0
- package/types/chart.d.ts +77 -0
- package/types/components.d.ts +587 -0
- package/types/core.d.ts +89 -0
- package/types/css.d.ts +149 -0
- package/types/data.d.ts +238 -0
- package/types/form.d.ts +164 -0
- package/types/i18n.d.ts +51 -0
- package/types/icons.d.ts +27 -0
- package/types/index.d.ts +13 -0
- package/types/router.d.ts +116 -0
- package/types/ssr.d.ts +102 -0
- package/types/state.d.ts +83 -0
- package/types/tags.d.ts +62 -0
- package/types/tannins.d.ts +63 -0
- package/types/test.d.ts +48 -0
package/types/css.d.ts
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
// Auto-generated by tools/dts-gen.js — do not edit manually
|
|
2
|
+
declare module 'decantr/css' {
|
|
3
|
+
/**
|
|
4
|
+
* Compose atomic CSS class names. Injects styles on first use.
|
|
5
|
+
*/
|
|
6
|
+
export function css(...classes: string[]): string;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Define a custom atomic CSS class.
|
|
10
|
+
*/
|
|
11
|
+
export function define(name: string, declaration: string): void;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Get all generated CSS as a string.
|
|
15
|
+
*/
|
|
16
|
+
export function extractCSS(): string;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Clear all injected styles.
|
|
20
|
+
*/
|
|
21
|
+
export function reset(): void;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Sanitize a string for safe use in HTML attributes.
|
|
25
|
+
*/
|
|
26
|
+
export function sanitize(str: string): string;
|
|
27
|
+
|
|
28
|
+
// ── Style API (visual personality) ──
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Set the active visual style.
|
|
32
|
+
*/
|
|
33
|
+
export function setStyle(id: string): void;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Get the active style ID.
|
|
37
|
+
*/
|
|
38
|
+
export function getStyle(): string;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Get list of registered styles.
|
|
42
|
+
*/
|
|
43
|
+
export function getStyleList(): Array<{ id: string; name: string }>;
|
|
44
|
+
|
|
45
|
+
interface StyleDefinition {
|
|
46
|
+
id: string;
|
|
47
|
+
name: string;
|
|
48
|
+
seed: Record<string, string>;
|
|
49
|
+
personality: Record<string, string>;
|
|
50
|
+
typography?: Record<string, string>;
|
|
51
|
+
overrides?: { light?: Record<string, string>; dark?: Record<string, string> };
|
|
52
|
+
components?: string;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Register a custom style.
|
|
57
|
+
*/
|
|
58
|
+
export function registerStyle(style: StyleDefinition): void;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Merge a Map of plugin-provided styles into the registry.
|
|
62
|
+
* Used by the plugin system to wire addon styles without individual registerStyle calls.
|
|
63
|
+
*/
|
|
64
|
+
export function mergePluginStyles(pluginStyles: Map<string, StyleDefinition>): void;
|
|
65
|
+
|
|
66
|
+
// ── Mode API (light/dark) ──
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Set the color mode.
|
|
70
|
+
*/
|
|
71
|
+
export function setMode(mode: 'light' | 'dark' | 'auto'): void;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Get the current mode setting.
|
|
75
|
+
*/
|
|
76
|
+
export function getMode(): 'light' | 'dark' | 'auto';
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Get the resolved mode (always 'light' or 'dark', never 'auto').
|
|
80
|
+
*/
|
|
81
|
+
export function getResolvedMode(): 'light' | 'dark';
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Register callback for resolved mode changes. Returns unsubscribe function.
|
|
85
|
+
*/
|
|
86
|
+
export function onModeChange(fn: (mode: 'light' | 'dark') => void): () => void;
|
|
87
|
+
|
|
88
|
+
// ── Legacy / backward compat ──
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Combines setStyle + setMode. Accepts legacy theme IDs.
|
|
92
|
+
*/
|
|
93
|
+
export function setTheme(id: string, mode?: string): void;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Get the current theme object (backward compat).
|
|
97
|
+
*/
|
|
98
|
+
export function getTheme(): Record<string, any>;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Get theme metadata.
|
|
102
|
+
*/
|
|
103
|
+
export function getThemeMeta(): Record<string, any>;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Get list of available themes.
|
|
107
|
+
*/
|
|
108
|
+
export function getThemeList(): Array<Record<string, any>>;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Register a theme (backward compat wrapper for registerStyle).
|
|
112
|
+
*/
|
|
113
|
+
export function registerTheme(theme: Record<string, any>): void;
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Get complete CSS for the active style's theme layer.
|
|
117
|
+
*/
|
|
118
|
+
export function getActiveCSS(): string;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Reset to defaults (clean + light).
|
|
122
|
+
*/
|
|
123
|
+
export function resetStyles(): void;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Enable/disable JS animations globally.
|
|
127
|
+
*/
|
|
128
|
+
export function setAnimations(enabled: boolean): void;
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Get a signal getter for the current animations-enabled state.
|
|
132
|
+
*/
|
|
133
|
+
export function getAnimations(): () => boolean;
|
|
134
|
+
|
|
135
|
+
/** Responsive breakpoint widths. */
|
|
136
|
+
export const BREAKPOINTS: Record<string, number>;
|
|
137
|
+
|
|
138
|
+
/** Container query widths. */
|
|
139
|
+
export const CQ_WIDTHS: number[];
|
|
140
|
+
|
|
141
|
+
// ── Atom type hints ──
|
|
142
|
+
// Pseudo-class prefixes: _h: (hover), _f: (focus), _fv: (focus-visible), _a: (active), _fw: (focus-within)
|
|
143
|
+
// Ring utilities: _ring0, _ring1, _ring2, _ring4, _ringPrimary, _ringAccent, _ringBorder
|
|
144
|
+
// Transition shortcuts: _transColors, _transOpacity, _transTransform, _transShadow
|
|
145
|
+
// Text wrapping: _textBalance, _textPretty
|
|
146
|
+
// Prose: _prose (maps to d-prose class for nested typography)
|
|
147
|
+
// Divide: _divideY, _divideX (maps to d-divide-y, d-divide-x classes)
|
|
148
|
+
// Scroll: _scrollSmooth
|
|
149
|
+
}
|
package/types/data.d.ts
ADDED
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
// Auto-generated by tools/dts-gen.js — do not edit manually
|
|
2
|
+
declare module 'decantr/data' {
|
|
3
|
+
// ─── Query ────────────────────────────────────────────────
|
|
4
|
+
|
|
5
|
+
interface QueryOptions<T> {
|
|
6
|
+
staleTime?: number;
|
|
7
|
+
cacheTime?: number;
|
|
8
|
+
retry?: number;
|
|
9
|
+
refetchInterval?: number;
|
|
10
|
+
refetchOnWindowFocus?: boolean;
|
|
11
|
+
enabled?: () => boolean;
|
|
12
|
+
select?: (data: any) => T;
|
|
13
|
+
initialData?: T;
|
|
14
|
+
placeholderData?: T;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
interface QueryResult<T> {
|
|
18
|
+
data: () => T | undefined;
|
|
19
|
+
status: () => 'idle' | 'loading' | 'success' | 'error';
|
|
20
|
+
error: () => Error | null;
|
|
21
|
+
isLoading: () => boolean;
|
|
22
|
+
isStale: () => boolean;
|
|
23
|
+
isFetching: () => boolean;
|
|
24
|
+
refetch: () => Promise<void>;
|
|
25
|
+
setData: (value: T) => void;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function createQuery<T>(
|
|
29
|
+
key: string | (() => string),
|
|
30
|
+
fetcher: (context: { key: string; signal: AbortSignal }) => Promise<T>,
|
|
31
|
+
options?: QueryOptions<T>
|
|
32
|
+
): QueryResult<T>;
|
|
33
|
+
|
|
34
|
+
interface InfiniteQueryOptions<T> extends QueryOptions<T> {
|
|
35
|
+
getNextPageParam: (lastPage: T, allPages: T[]) => any | undefined;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
interface InfiniteQueryResult<T> {
|
|
39
|
+
pages: () => T[];
|
|
40
|
+
allItems: () => any[];
|
|
41
|
+
hasNextPage: () => boolean;
|
|
42
|
+
fetchNextPage: () => Promise<void>;
|
|
43
|
+
isFetchingNextPage: () => boolean;
|
|
44
|
+
refetch: () => Promise<void>;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function createInfiniteQuery<T>(
|
|
48
|
+
key: string | (() => string),
|
|
49
|
+
fetcher: (context: { key: string; pageParam: any; signal: AbortSignal }) => Promise<T>,
|
|
50
|
+
options?: InfiniteQueryOptions<T>
|
|
51
|
+
): InfiniteQueryResult<T>;
|
|
52
|
+
|
|
53
|
+
interface MutationOptions<TData, TVariables, TContext> {
|
|
54
|
+
onMutate?: (variables: TVariables) => TContext | Promise<TContext>;
|
|
55
|
+
onSuccess?: (data: TData, variables: TVariables, context: TContext) => void;
|
|
56
|
+
onError?: (error: Error, variables: TVariables, context: TContext) => void;
|
|
57
|
+
onSettled?: (data: TData | undefined, error: Error | null, variables: TVariables, context: TContext) => void;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
interface MutationResult<TData, TVariables> {
|
|
61
|
+
mutate: (variables: TVariables) => void;
|
|
62
|
+
mutateAsync: (variables: TVariables) => Promise<TData>;
|
|
63
|
+
isLoading: () => boolean;
|
|
64
|
+
error: () => Error | null;
|
|
65
|
+
data: () => TData | undefined;
|
|
66
|
+
reset: () => void;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export function createMutation<TData = any, TVariables = any, TContext = any>(
|
|
70
|
+
mutationFn: (variables: TVariables) => Promise<TData>,
|
|
71
|
+
options?: MutationOptions<TData, TVariables, TContext>
|
|
72
|
+
): MutationResult<TData, TVariables>;
|
|
73
|
+
|
|
74
|
+
interface QueryClient {
|
|
75
|
+
invalidate: (keyPrefix: string) => void;
|
|
76
|
+
prefetch: <T>(key: string, fetcher: (context: { key: string; signal: AbortSignal }) => Promise<T>) => Promise<void>;
|
|
77
|
+
setCache: (key: string, data: any) => void;
|
|
78
|
+
getCache: (key: string) => any | undefined;
|
|
79
|
+
clear: () => void;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export const queryClient: QueryClient;
|
|
83
|
+
|
|
84
|
+
// ─── Entity ───────────────────────────────────────────────
|
|
85
|
+
|
|
86
|
+
interface EntityStore<T> {
|
|
87
|
+
addMany: (entities: T[]) => void;
|
|
88
|
+
upsert: (entity: T) => void;
|
|
89
|
+
update: (id: any, partial: Partial<T>) => void;
|
|
90
|
+
remove: (id: any) => void;
|
|
91
|
+
clear: () => void;
|
|
92
|
+
get: (id: any) => () => T | undefined;
|
|
93
|
+
all: () => T[];
|
|
94
|
+
count: () => number;
|
|
95
|
+
filter: (predicate: (entity: T) => boolean) => () => T[];
|
|
96
|
+
sorted: (comparator: (a: T, b: T) => number) => () => T[];
|
|
97
|
+
paginated: (opts: { page: number; size: number }) => () => T[];
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export function createEntityStore<T>(options: { getId: (entity: T) => any }): EntityStore<T>;
|
|
101
|
+
|
|
102
|
+
// ─── URL State ────────────────────────────────────────────
|
|
103
|
+
|
|
104
|
+
interface Parser<T> {
|
|
105
|
+
parse: (value: string) => T;
|
|
106
|
+
serialize: (value: T) => string;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
interface URLSignalOptions<T> {
|
|
110
|
+
defaultValue?: T;
|
|
111
|
+
push?: boolean;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export function createURLSignal<T>(
|
|
115
|
+
key: string,
|
|
116
|
+
parser: Parser<T>,
|
|
117
|
+
options?: URLSignalOptions<T>
|
|
118
|
+
): [() => T, (value: T) => void];
|
|
119
|
+
|
|
120
|
+
export function createURLStore<T extends Record<string, any>>(
|
|
121
|
+
schema: { [K in keyof T]: { parser: Parser<T[K]>; defaultValue: T[K] } }
|
|
122
|
+
): { [K in keyof T as `${string & K}`]: () => T[K] } & { [K in keyof T as `set${Capitalize<string & K>}`]: (value: T[K]) => void } & { values: () => T; reset: () => void };
|
|
123
|
+
|
|
124
|
+
export const parsers: {
|
|
125
|
+
string: Parser<string>;
|
|
126
|
+
integer: Parser<number>;
|
|
127
|
+
float: Parser<number>;
|
|
128
|
+
boolean: Parser<boolean>;
|
|
129
|
+
json: Parser<any>;
|
|
130
|
+
date: Parser<Date>;
|
|
131
|
+
enum: <T extends string>(values: T[]) => Parser<T>;
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
// ─── Realtime ─────────────────────────────────────────────
|
|
135
|
+
|
|
136
|
+
interface WebSocketOptions {
|
|
137
|
+
reconnectDelay?: number;
|
|
138
|
+
maxRetries?: number;
|
|
139
|
+
buffer?: boolean;
|
|
140
|
+
parse?: (data: any) => any;
|
|
141
|
+
protocols?: string[];
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
interface WebSocketResult {
|
|
145
|
+
lastMessage: () => any;
|
|
146
|
+
messages: () => any[];
|
|
147
|
+
status: () => 'connecting' | 'open' | 'closed' | 'reconnecting';
|
|
148
|
+
send: (data: any) => void;
|
|
149
|
+
close: () => void;
|
|
150
|
+
reconnect: () => void;
|
|
151
|
+
on: (handler: (message: any) => void) => () => void;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
export function createWebSocket(url: string, options?: WebSocketOptions): WebSocketResult;
|
|
155
|
+
|
|
156
|
+
interface EventSourceOptions {
|
|
157
|
+
events?: string[];
|
|
158
|
+
withCredentials?: boolean;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
interface EventSourceResult {
|
|
162
|
+
lastEvent: () => { type: string; data: any } | null;
|
|
163
|
+
status: () => 'connecting' | 'open' | 'closed';
|
|
164
|
+
close: () => void;
|
|
165
|
+
on: (eventType: string, handler: (data: any) => void) => () => void;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export function createEventSource(url: string, options?: EventSourceOptions): EventSourceResult;
|
|
169
|
+
|
|
170
|
+
// ─── Persistence ──────────────────────────────────────────
|
|
171
|
+
|
|
172
|
+
interface PersistedOptions {
|
|
173
|
+
storage?: 'local' | 'session';
|
|
174
|
+
serialize?: (value: any) => string;
|
|
175
|
+
deserialize?: (value: string) => any;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
export function createPersisted<T>(
|
|
179
|
+
key: string,
|
|
180
|
+
init: T,
|
|
181
|
+
options?: PersistedOptions
|
|
182
|
+
): [() => T, (value: T | ((prev: T) => T)) => void];
|
|
183
|
+
|
|
184
|
+
interface IndexedDBStore {
|
|
185
|
+
get: <T>(key: string) => Promise<T | undefined>;
|
|
186
|
+
set: (key: string, value: any) => Promise<void>;
|
|
187
|
+
delete: (key: string) => Promise<void>;
|
|
188
|
+
getAll: <T>() => Promise<T[]>;
|
|
189
|
+
clear: () => Promise<void>;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
export function createIndexedDB(dbName: string, storeName: string): IndexedDBStore;
|
|
193
|
+
|
|
194
|
+
export function createCrossTab<T>(
|
|
195
|
+
channel: string,
|
|
196
|
+
signal: [() => T, (value: T) => void]
|
|
197
|
+
): () => void;
|
|
198
|
+
|
|
199
|
+
interface OfflineQueueOptions {
|
|
200
|
+
process: (item: any) => Promise<void>;
|
|
201
|
+
persist?: boolean;
|
|
202
|
+
key?: string;
|
|
203
|
+
retryDelay?: number;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
interface OfflineQueue {
|
|
207
|
+
add: (item: any) => void;
|
|
208
|
+
pending: () => any[];
|
|
209
|
+
isOnline: () => boolean;
|
|
210
|
+
flush: () => Promise<void>;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
export function createOfflineQueue(options: OfflineQueueOptions): OfflineQueue;
|
|
214
|
+
|
|
215
|
+
// ─── Worker ───────────────────────────────────────────────
|
|
216
|
+
|
|
217
|
+
interface WorkerSignalResult {
|
|
218
|
+
result: () => any;
|
|
219
|
+
busy: () => boolean;
|
|
220
|
+
error: () => Error | null;
|
|
221
|
+
send: (data: any) => void;
|
|
222
|
+
terminate: () => void;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
export function createWorkerSignal(worker: Worker): WorkerSignalResult;
|
|
226
|
+
|
|
227
|
+
interface WorkerQueryResult<T> {
|
|
228
|
+
data: () => T | undefined;
|
|
229
|
+
loading: () => boolean;
|
|
230
|
+
error: () => Error | null;
|
|
231
|
+
refetch: () => void;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
export function createWorkerQuery<T>(
|
|
235
|
+
worker: Worker,
|
|
236
|
+
input: (() => any) | any
|
|
237
|
+
): WorkerQueryResult<T>;
|
|
238
|
+
}
|
package/types/form.d.ts
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
// Auto-generated by tools/dts-gen.js — do not edit manually
|
|
2
|
+
declare module 'decantr/form' {
|
|
3
|
+
// ── Validator Types ──
|
|
4
|
+
|
|
5
|
+
type SyncValidator = (value: any, allValues?: Record<string, any>) => string | null;
|
|
6
|
+
type AsyncValidator = (value: any, allValues?: Record<string, any>) => Promise<string | null>;
|
|
7
|
+
|
|
8
|
+
interface Validators {
|
|
9
|
+
/** Value must be truthy (non-empty). */
|
|
10
|
+
required(msg?: string): SyncValidator;
|
|
11
|
+
/** String length must be >= n. */
|
|
12
|
+
minLength(n: number, msg?: string): SyncValidator;
|
|
13
|
+
/** String length must be <= n. */
|
|
14
|
+
maxLength(n: number, msg?: string): SyncValidator;
|
|
15
|
+
/** Numeric value must be >= n. */
|
|
16
|
+
min(n: number, msg?: string): SyncValidator;
|
|
17
|
+
/** Numeric value must be <= n. */
|
|
18
|
+
max(n: number, msg?: string): SyncValidator;
|
|
19
|
+
/** Value must match regex pattern. */
|
|
20
|
+
pattern(regex: RegExp, msg?: string): SyncValidator;
|
|
21
|
+
/** Must be a valid email address. */
|
|
22
|
+
email(msg?: string): SyncValidator;
|
|
23
|
+
/** Value must equal another field's current value. */
|
|
24
|
+
match(fieldName: string, msg?: string): SyncValidator;
|
|
25
|
+
/** Custom synchronous validator. */
|
|
26
|
+
custom(fn: (value: any, allValues: Record<string, any>) => true | string, msg?: string): SyncValidator;
|
|
27
|
+
/** Async validator (auto-debounced 300ms). */
|
|
28
|
+
async(fn: (value: any, allValues: Record<string, any>) => Promise<true | string>, msg?: string): AsyncValidator;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export const validators: Validators;
|
|
32
|
+
|
|
33
|
+
// ── Field Instance ──
|
|
34
|
+
|
|
35
|
+
interface FieldInstance {
|
|
36
|
+
readonly name: string;
|
|
37
|
+
/** Signal getter for current value. */
|
|
38
|
+
value: () => any;
|
|
39
|
+
/** First error message or null. */
|
|
40
|
+
error: () => string | null;
|
|
41
|
+
/** All error messages. */
|
|
42
|
+
errors: () => string[];
|
|
43
|
+
/** Whether field has been blurred. */
|
|
44
|
+
touched: () => boolean;
|
|
45
|
+
/** Whether value differs from initial. */
|
|
46
|
+
dirty: () => boolean;
|
|
47
|
+
/** Whether field has no errors. */
|
|
48
|
+
valid: () => boolean;
|
|
49
|
+
/** Set a new value. */
|
|
50
|
+
setValue: (value: any) => void;
|
|
51
|
+
/** Mark as touched. */
|
|
52
|
+
setTouched: () => void;
|
|
53
|
+
/** Set an error manually. */
|
|
54
|
+
setError: (msg: string) => void;
|
|
55
|
+
/** Reset to initial value. */
|
|
56
|
+
reset: (value?: any) => void;
|
|
57
|
+
/** Run all validators. Returns true if valid. */
|
|
58
|
+
validate: () => Promise<boolean>;
|
|
59
|
+
/** Get binding props for Decantr form components. */
|
|
60
|
+
bind: () => { value: () => any; onchange: (v: any) => void; onblur: () => void; error: () => string | null };
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// ── Field Array Instance ──
|
|
64
|
+
|
|
65
|
+
interface FieldArrayInstance {
|
|
66
|
+
/** Signal getter for array of items. */
|
|
67
|
+
items: () => any[];
|
|
68
|
+
/** Reactive item count. */
|
|
69
|
+
length: () => number;
|
|
70
|
+
/** Append a value to the end. */
|
|
71
|
+
append: (value: any) => void;
|
|
72
|
+
/** Prepend a value to the beginning. */
|
|
73
|
+
prepend: (value: any) => void;
|
|
74
|
+
/** Remove item at index. */
|
|
75
|
+
remove: (index: number) => void;
|
|
76
|
+
/** Move item from one index to another. */
|
|
77
|
+
move: (from: number, to: number) => void;
|
|
78
|
+
/** Swap two items by index. */
|
|
79
|
+
swap: (a: number, b: number) => void;
|
|
80
|
+
/** Replace item at index. */
|
|
81
|
+
replace: (index: number, value: any) => void;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// ── Form Instance ──
|
|
85
|
+
|
|
86
|
+
interface FieldConfig {
|
|
87
|
+
/** Initial value. */
|
|
88
|
+
value?: any;
|
|
89
|
+
/** Array of validator functions. */
|
|
90
|
+
validators?: Array<SyncValidator | AsyncValidator>;
|
|
91
|
+
/** Transform function applied on setValue. */
|
|
92
|
+
transform?: (raw: any) => any;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
interface FormConfig {
|
|
96
|
+
/** Field definitions. */
|
|
97
|
+
fields: Record<string, FieldConfig>;
|
|
98
|
+
/** Submit handler. */
|
|
99
|
+
onSubmit?: (values: Record<string, any>, form: FormInstance) => void | Promise<void>;
|
|
100
|
+
/** Cross-field validation returning `{ fieldName: string[] }`. */
|
|
101
|
+
validate?: (values: Record<string, any>) => Record<string, string[]> | void;
|
|
102
|
+
/** When to trigger validation. Default: 'onBlur'. */
|
|
103
|
+
validateOn?: 'onChange' | 'onBlur' | 'onSubmit';
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
interface FormInstance {
|
|
107
|
+
/** Get or create a field by name. */
|
|
108
|
+
field: (name: string) => FieldInstance;
|
|
109
|
+
/** Proxy for field access via dot notation (form.fields.email). */
|
|
110
|
+
fields: Record<string, FieldInstance>;
|
|
111
|
+
/** Signal getter for all current values. */
|
|
112
|
+
values: () => Record<string, any>;
|
|
113
|
+
/** Signal getter for all errors `{ fieldName: string[] }`. */
|
|
114
|
+
errors: () => Record<string, string[]>;
|
|
115
|
+
/** Signal getter for overall form validity. */
|
|
116
|
+
isValid: () => boolean;
|
|
117
|
+
/** Signal getter for whether any field is dirty. */
|
|
118
|
+
isDirty: () => boolean;
|
|
119
|
+
/** Signal getter for submitting state. */
|
|
120
|
+
isSubmitting: () => boolean;
|
|
121
|
+
/** Signal getter for submitted state. */
|
|
122
|
+
isSubmitted: () => boolean;
|
|
123
|
+
/** Signal getter for submit count. */
|
|
124
|
+
submitCount: () => number;
|
|
125
|
+
/** Submit the form. */
|
|
126
|
+
submit: () => Promise<void>;
|
|
127
|
+
/** Reset all fields. */
|
|
128
|
+
reset: (values?: Record<string, any>) => void;
|
|
129
|
+
/** Set multiple field values at once. */
|
|
130
|
+
setValues: (partial: Record<string, any>) => void;
|
|
131
|
+
/** Set errors on multiple fields. */
|
|
132
|
+
setErrors: (errors: Record<string, string | string[]>) => void;
|
|
133
|
+
/** Run all validators. Returns true if valid. */
|
|
134
|
+
validate: () => Promise<boolean>;
|
|
135
|
+
/** Get or create a field array. */
|
|
136
|
+
fieldArray: (name: string) => FieldArrayInstance;
|
|
137
|
+
/** Watch a specific field for value changes. Returns unsubscribe. */
|
|
138
|
+
watch: (fieldName: string, callback: (value: any, prevValue: any) => void) => () => void;
|
|
139
|
+
/** Watch all fields for any change. Returns unsubscribe. */
|
|
140
|
+
watchAll: (callback: (values: Record<string, any>) => void) => () => void;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Create a reactive form instance.
|
|
145
|
+
*/
|
|
146
|
+
export function createForm(config: FormConfig): FormInstance;
|
|
147
|
+
|
|
148
|
+
interface UseFormFieldResult {
|
|
149
|
+
value: () => any;
|
|
150
|
+
setValue: (value: any) => void;
|
|
151
|
+
error: () => string | null;
|
|
152
|
+
errors: () => string[];
|
|
153
|
+
touched: () => boolean;
|
|
154
|
+
dirty: () => boolean;
|
|
155
|
+
valid: () => boolean;
|
|
156
|
+
onBlur: () => void;
|
|
157
|
+
bind: () => { value: () => any; onchange: (v: any) => void; onblur: () => void; error: () => string | null };
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Hook for binding a form field to a custom component.
|
|
162
|
+
*/
|
|
163
|
+
export function useFormField(form: FormInstance, fieldName: string): UseFormFieldResult;
|
|
164
|
+
}
|
package/types/i18n.d.ts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// Auto-generated by tools/dts-gen.js — do not edit manually
|
|
2
|
+
declare module 'decantr/i18n' {
|
|
3
|
+
/**
|
|
4
|
+
* Configuration for creating an i18n instance.
|
|
5
|
+
*/
|
|
6
|
+
export interface I18nConfig {
|
|
7
|
+
/** Initial active locale (e.g. 'en', 'fr', 'ar'). */
|
|
8
|
+
locale: string;
|
|
9
|
+
/** Messages keyed by locale. Each locale maps keys to strings or nested objects. */
|
|
10
|
+
messages: Record<string, Record<string, any>>;
|
|
11
|
+
/** Fallback locale used when a key is missing in the active locale. */
|
|
12
|
+
fallbackLocale?: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* An i18n instance returned by createI18n().
|
|
17
|
+
*/
|
|
18
|
+
export interface I18nInstance {
|
|
19
|
+
/**
|
|
20
|
+
* Translate a key with optional interpolation and pluralization.
|
|
21
|
+
*
|
|
22
|
+
* - Dot notation: `t('nav.home')` resolves nested objects.
|
|
23
|
+
* - Interpolation: `t('hello', { name: 'World' })` replaces `{name}`.
|
|
24
|
+
* - Pluralization: `t('items', { count: 3 })` appends `_one`/`_other` suffix
|
|
25
|
+
* via `Intl.PluralRules`.
|
|
26
|
+
* - Fallback chain: current locale -> fallback locale -> raw key.
|
|
27
|
+
*/
|
|
28
|
+
t: (key: string, params?: Record<string, any>) => string;
|
|
29
|
+
|
|
30
|
+
/** Signal getter for the current locale. */
|
|
31
|
+
locale: () => string;
|
|
32
|
+
|
|
33
|
+
/** Set the active locale. Reactively updates all `t()` consumers. */
|
|
34
|
+
setLocale: (locale: string) => void;
|
|
35
|
+
|
|
36
|
+
/** Set the document direction attribute ('ltr' or 'rtl'). */
|
|
37
|
+
setDirection: (dir: 'ltr' | 'rtl') => void;
|
|
38
|
+
|
|
39
|
+
/** Merge additional messages into a locale at runtime. */
|
|
40
|
+
addMessages: (locale: string, messages: Record<string, any>) => void;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Create a reactive i18n instance.
|
|
45
|
+
*
|
|
46
|
+
* The returned `t()` function is reactive — it reads the internal locale
|
|
47
|
+
* signal, so any `createEffect` or `createMemo` that calls `t()` will
|
|
48
|
+
* re-run when the locale changes via `setLocale()`.
|
|
49
|
+
*/
|
|
50
|
+
export function createI18n(config: I18nConfig): I18nInstance;
|
|
51
|
+
}
|
package/types/icons.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Auto-generated by tools/dts-gen.js — do not edit manually
|
|
2
|
+
declare module 'decantr/icons' {
|
|
3
|
+
/**
|
|
4
|
+
* Get SVG inner content for an icon by name.
|
|
5
|
+
*/
|
|
6
|
+
export function getIconPath(name: string): string | null;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Register a custom icon (or override an existing one).
|
|
10
|
+
*/
|
|
11
|
+
export function registerIcon(name: string, pathData: string): void;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Register multiple icons at once.
|
|
15
|
+
*/
|
|
16
|
+
export function registerIcons(iconMap: Record<string, string>): void;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Check if an icon is available.
|
|
20
|
+
*/
|
|
21
|
+
export function hasIcon(name: string): boolean;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Get all currently available icon names.
|
|
25
|
+
*/
|
|
26
|
+
export function getIconNames(): string[];
|
|
27
|
+
}
|
package/types/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Auto-generated by tools/dts-gen.js — do not edit manually
|
|
2
|
+
// Master declaration file — re-exports all Decantr modules.
|
|
3
|
+
|
|
4
|
+
/// <reference path="./core.d.ts" />
|
|
5
|
+
/// <reference path="./state.d.ts" />
|
|
6
|
+
/// <reference path="./router.d.ts" />
|
|
7
|
+
/// <reference path="./css.d.ts" />
|
|
8
|
+
/// <reference path="./tags.d.ts" />
|
|
9
|
+
/// <reference path="./components.d.ts" />
|
|
10
|
+
/// <reference path="./form.d.ts" />
|
|
11
|
+
/// <reference path="./icons.d.ts" />
|
|
12
|
+
/// <reference path="./chart.d.ts" />
|
|
13
|
+
/// <reference path="./test.d.ts" />
|