@stacksjs/stx 0.2.10 → 0.2.11
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/README.md +16 -11
- package/dist/a11y.d.ts +2 -1
- package/dist/analyzer.d.ts +4 -0
- package/dist/app-shell.d.ts +72 -0
- package/dist/app.d.ts +1 -0
- package/dist/broadcasting.d.ts +77 -0
- package/dist/build-assets.d.ts +32 -0
- package/dist/build-mode-detector.d.ts +26 -0
- package/dist/build.d.ts +31 -0
- package/dist/builtins/icon.d.ts +7 -0
- package/dist/builtins/index.d.ts +21 -0
- package/dist/builtins/stx-image.d.ts +2 -0
- package/dist/builtins/stx-link.d.ts +2 -0
- package/dist/builtins/stx-loading-indicator.d.ts +2 -0
- package/dist/bundle-analyzer/index.d.ts +2 -0
- package/dist/bundle-analyzer.js +20 -20
- package/dist/caching.d.ts +27 -0
- package/dist/cli.js +3941 -2609
- package/dist/client-helpers.d.ts +7 -3
- package/dist/client-script-bundler.d.ts +27 -0
- package/dist/client-script.d.ts +5 -1
- package/dist/client.d.ts +1 -0
- package/dist/component-hmr.d.ts +1 -0
- package/dist/component-processing.d.ts +107 -0
- package/dist/component-registry.d.ts +54 -0
- package/dist/component-renderer.d.ts +18 -0
- package/dist/components/StxImage.stx +12 -0
- package/dist/components/StxLink.stx +18 -8
- package/dist/composables/index.d.ts +7 -0
- package/dist/composables/use-broadcast-channel.d.ts +1 -0
- package/dist/composables/use-channel.d.ts +67 -0
- package/dist/composables/use-intersection-observer.d.ts +2 -0
- package/dist/composables/use-keyboard.d.ts +1 -0
- package/dist/composables/use-mouse.d.ts +1 -0
- package/dist/composables/use-router.d.ts +4 -0
- package/dist/composables/use-websocket.d.ts +1 -0
- package/dist/composables.d.ts +2 -0
- package/dist/composition-api.d.ts +1 -0
- package/dist/computed.d.ts +1 -0
- package/dist/config.d.ts +12 -1
- package/dist/craft-bridge.d.ts +6 -3
- package/dist/craft-components.d.ts +1 -0
- package/dist/craft.js +39 -33
- package/dist/deploy/index.d.ts +1 -0
- package/dist/dev-server/crosswind.d.ts +2 -5
- package/dist/dev-server/native-window.d.ts +19 -1
- package/dist/dev-server/serve-app.d.ts +15 -0
- package/dist/dev-server/serve-file.d.ts +3 -0
- package/dist/dev-server/serve-markdown.d.ts +3 -0
- package/dist/dev-server/serve-multi.d.ts +5 -0
- package/dist/dev-server/types.d.ts +2 -0
- package/dist/dev-server.d.ts +6 -40
- package/dist/devtools.d.ts +1 -0
- package/dist/directive-api.d.ts +1 -1
- package/dist/document-shell.d.ts +33 -0
- package/dist/error-boundaries.d.ts +1 -0
- package/dist/events.d.ts +1 -0
- package/dist/expressions.d.ts +38 -0
- package/dist/forms-validation.d.ts +2 -0
- package/dist/head.d.ts +1 -0
- package/dist/hot-reload.d.ts +1 -0
- package/dist/hydration-runtime.d.ts +1 -0
- package/dist/hydration.d.ts +1 -0
- package/dist/i18n.d.ts +3 -1
- package/dist/image-optimization/build-plugin.d.ts +1 -0
- package/dist/index.d.ts +22 -1
- package/dist/index.js +5569 -4182
- package/dist/inline-assets.d.ts +28 -0
- package/dist/internal-markdown.d.ts +0 -4
- package/dist/jsx-runtime.d.ts +1 -0
- package/dist/keep-alive.d.ts +1 -0
- package/dist/manifest.d.ts +41 -0
- package/dist/markdown.d.ts +1 -0
- package/dist/media/client/blur-up.d.ts +1 -0
- package/dist/media/client/lazy-load.d.ts +1 -0
- package/dist/media/client/upload-handler.d.ts +1 -0
- package/dist/media/shared/cache.d.ts +2 -0
- package/dist/media/video/index.d.ts +1 -0
- package/dist/media/video/processor/thumbnail.d.ts +1 -0
- package/dist/misc-directives.d.ts +49 -0
- package/dist/parser/directive-parser.d.ts +13 -0
- package/dist/performance-utils.d.ts +2 -0
- package/dist/placeholder.d.ts +45 -0
- package/dist/plugin-system.d.ts +32 -2
- package/dist/process.d.ts +11 -1
- package/dist/production-builder.d.ts +42 -0
- package/dist/production-server.d.ts +19 -0
- package/dist/props.d.ts +1 -0
- package/dist/pwa.js +3883 -2679
- package/dist/reactive.d.ts +2 -16
- package/dist/reactivity.d.ts +1 -0
- package/dist/router.d.ts +1 -1
- package/dist/runtime-injection.d.ts +20 -0
- package/dist/runtime.d.ts +2 -2
- package/dist/script-classifier.d.ts +35 -0
- package/dist/script-validation.d.ts +16 -0
- package/dist/server-bindings.d.ts +7 -0
- package/dist/server-components.d.ts +4 -0
- package/dist/signal-processing.d.ts +109 -0
- package/dist/signals-api.d.ts +309 -0
- package/dist/signals.d.ts +2 -309
- package/dist/spa-shell.d.ts +1 -0
- package/dist/ssg.js +3862 -2655
- package/dist/ssr.d.ts +1 -0
- package/dist/state-management.d.ts +27 -0
- package/dist/store-imports.d.ts +24 -0
- package/dist/store-loader.d.ts +16 -0
- package/dist/story/bun-test.d.ts +1 -0
- package/dist/story/compiled-output.d.ts +1 -0
- package/dist/story/interactions.d.ts +1 -0
- package/dist/story/renderer.d.ts +2 -0
- package/dist/story/setup.d.ts +1 -0
- package/dist/story/ui/code-panel.d.ts +1 -0
- package/dist/stx.d.ts +437 -0
- package/dist/style-scoping.d.ts +23 -0
- package/dist/template-compiler.d.ts +31 -0
- package/dist/template-hydrator.d.ts +18 -0
- package/dist/transitions.d.ts +1 -0
- package/dist/types/config-types.d.ts +62 -0
- package/dist/validator.d.ts +1 -0
- package/dist/variable-extractor.d.ts +1 -1
- package/dist/view-composers.d.ts +1 -0
- package/dist/virtual-scrolling.d.ts +1 -0
- package/dist/visual-testing.js +2 -2
- package/dist/web-components.d.ts +1 -0
- package/dist/x-element.d.ts +1 -0
- package/package.json +72 -7
- package/stx.d.ts +437 -0
package/dist/ssr.d.ts
CHANGED
|
@@ -88,6 +88,7 @@ export declare interface AppConfig {
|
|
|
88
88
|
sessionStore?: SessionStore
|
|
89
89
|
}
|
|
90
90
|
/** Route handler */
|
|
91
|
+
// eslint-disable-next-line pickier/no-unused-vars
|
|
91
92
|
export type RouteHandler = (ctx: RequestContext) => Response | Promise<Response>;
|
|
92
93
|
/** Middleware function */
|
|
93
94
|
export type Middleware = (ctx: RequestContext, next: () => Promise<Response>) => Response | Promise<Response>;
|
|
@@ -146,6 +146,32 @@ export declare function initDevTools(): void;
|
|
|
146
146
|
* </script>
|
|
147
147
|
* ```
|
|
148
148
|
*/
|
|
149
|
+
/**
|
|
150
|
+
* Define a store using a setup function (composition API style).
|
|
151
|
+
* The function receives no arguments and returns an object of signals,
|
|
152
|
+
* derived values, and action functions.
|
|
153
|
+
*
|
|
154
|
+
* ```ts
|
|
155
|
+
* defineStore('auth', () => {
|
|
156
|
+
* const user = state(null)
|
|
157
|
+
* const isAuthenticated = derived(() => !!user())
|
|
158
|
+
* function login(data) { user.set(data) }
|
|
159
|
+
* return { user, isAuthenticated, login }
|
|
160
|
+
* })
|
|
161
|
+
* ```
|
|
162
|
+
*/
|
|
163
|
+
export declare function defineStore<T extends Record<string, any>>(id: string, setup: () => T, options?: { persist?: boolean | { pick?: string[], storage?: string, key?: string } }): T;
|
|
164
|
+
/**
|
|
165
|
+
* Define a store using an options object (options API style).
|
|
166
|
+
*
|
|
167
|
+
* ```ts
|
|
168
|
+
* defineStore('counter', {
|
|
169
|
+
* state: () => ({ count: 0 }),
|
|
170
|
+
* getters: { doubled: (s) => s.count * 2 },
|
|
171
|
+
* actions: { increment() { this.count++ } },
|
|
172
|
+
* })
|
|
173
|
+
* ```
|
|
174
|
+
*/
|
|
149
175
|
export declare function defineStore<S extends object, G extends Record<string, (state: S) => any> = Record<string, never>, A extends Record<string, (...args: any[]) => any> = Record<string, never>,>(id: string, options: DefineStoreOptions<S, G, A>): DefinedStoreWithGettersAndActions<S, G, A>;
|
|
150
176
|
/**
|
|
151
177
|
* Get a defined store by name.
|
|
@@ -263,6 +289,7 @@ export declare interface DefinedStore<S, G extends Record<string, (state: S) =>
|
|
|
263
289
|
$id: string
|
|
264
290
|
}
|
|
265
291
|
/** Subscription callback */
|
|
292
|
+
// eslint-disable-next-line pickier/no-unused-vars
|
|
266
293
|
export type Subscriber<T> = (value: T, previousValue: T | undefined) => void;
|
|
267
294
|
/** Unsubscribe function */
|
|
268
295
|
export type Unsubscribe = () => void;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Store Import Transformation
|
|
3
|
+
*
|
|
4
|
+
* Transforms `import { x } from '@stores'` statements in client scripts
|
|
5
|
+
* into runtime lookups against the global store registry.
|
|
6
|
+
*
|
|
7
|
+
* @module store-imports
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Transform import statements from @stores to runtime code.
|
|
11
|
+
*
|
|
12
|
+
* Transforms:
|
|
13
|
+
* ```js
|
|
14
|
+
* import { appStore, chatStore } from '@stores'
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* Into:
|
|
18
|
+
* ```js
|
|
19
|
+
* const { appStore, chatStore } = window.__STX_STORES__
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* Also transforms @composables imports to window.__composables.
|
|
23
|
+
*/
|
|
24
|
+
export declare function transformStoreImports(code: string): string;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Discover store files from storesDir and bundle them into a single
|
|
3
|
+
* script that can be injected into the page.
|
|
4
|
+
*
|
|
5
|
+
* The bundle runs `defineStore(...)` for each store — since the signals
|
|
6
|
+
* runtime is already loaded, `defineStore`/`state`/`derived` are globals.
|
|
7
|
+
*
|
|
8
|
+
* Pass an absolute `storesDir` to look up stores there. When omitted, falls
|
|
9
|
+
* back to reading `storesDir` from the stx config at the current working
|
|
10
|
+
* directory — which is only correct when run from the app's own root.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getStoreScript(storesDir?: string): Promise<string | null>;
|
|
13
|
+
/**
|
|
14
|
+
* Clear the cached store script (for dev mode hot reload).
|
|
15
|
+
*/
|
|
16
|
+
export declare function clearStoreCache(): void;
|
package/dist/story/bun-test.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ export declare function createStoryTests(options?: BunTestOptions): Promise<void
|
|
|
19
19
|
/**
|
|
20
20
|
* Run story tests programmatically
|
|
21
21
|
*/
|
|
22
|
+
// eslint-disable-next-line pickier/no-unused-vars
|
|
22
23
|
export declare function runStoryTests(options?: BunTestOptions): Promise<{
|
|
23
24
|
passed: number
|
|
24
25
|
failed: number
|
|
@@ -2,6 +2,7 @@ import type { ServerStoryFile, StoryContext } from './types';
|
|
|
2
2
|
/**
|
|
3
3
|
* Get compiled HTML output for a story variant
|
|
4
4
|
*/
|
|
5
|
+
// eslint-disable-next-line pickier/no-unused-vars
|
|
5
6
|
export declare function getCompiledOutput(ctx: StoryContext, story: ServerStoryFile, variantId: string, options?: CompiledOutputOptions): Promise<string>;
|
|
6
7
|
/**
|
|
7
8
|
* Generate compiled output panel HTML
|
|
@@ -6,6 +6,7 @@ export declare function parseInteractionBlocks(content: string): InteractionTest
|
|
|
6
6
|
/**
|
|
7
7
|
* Run interaction tests for a story
|
|
8
8
|
*/
|
|
9
|
+
// eslint-disable-next-line pickier/no-unused-vars
|
|
9
10
|
export declare function runInteractionTests(_ctx: StoryContext, story: ServerStoryFile, tests: InteractionTest[]): Promise<InteractionTestResult[]>;
|
|
10
11
|
/**
|
|
11
12
|
* Generate interaction test helpers script (for browser)
|
package/dist/story/renderer.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { ServerStoryFile, StoryContext } from './types';
|
|
|
2
2
|
/**
|
|
3
3
|
* Render a story component with props
|
|
4
4
|
*/
|
|
5
|
+
// eslint-disable-next-line pickier/no-unused-vars
|
|
5
6
|
export declare function renderStoryComponent(ctx: StoryContext, componentPath: string, options?: StoryRenderOptions): Promise<StoryRenderResult>;
|
|
6
7
|
/**
|
|
7
8
|
* Render a story variant
|
|
@@ -10,6 +11,7 @@ export declare function renderStoryVariant(ctx: StoryContext, story: ServerStory
|
|
|
10
11
|
/**
|
|
11
12
|
* Render an inline template string
|
|
12
13
|
*/
|
|
14
|
+
// eslint-disable-next-line pickier/no-unused-vars
|
|
13
15
|
export declare function renderInlineTemplate(ctx: StoryContext, template: string, props?: Record<string, any>): Promise<StoryRenderResult>;
|
|
14
16
|
/**
|
|
15
17
|
* Clear the story component cache
|
package/dist/story/setup.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { AnalyzedComponent, ServerStoryFile } from '../types';
|
|
|
2
2
|
/**
|
|
3
3
|
* Generate code panel HTML
|
|
4
4
|
*/
|
|
5
|
+
// eslint-disable-next-line pickier/no-unused-vars
|
|
5
6
|
export declare function generateCodePanel(story: ServerStoryFile, component: AnalyzedComponent | null, activeTab?: CodePanelTab): string;
|
|
6
7
|
/**
|
|
7
8
|
* Get source code for a component
|
package/dist/stx.d.ts
ADDED
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* STX Ambient Type Declarations
|
|
3
|
+
*
|
|
4
|
+
* This file is shipped with the @stacksjs/stx package and referenced from
|
|
5
|
+
* the package's main types entry. When stx is installed, TypeScript picks
|
|
6
|
+
* these declarations up automatically — apps do NOT need to write their own
|
|
7
|
+
* stx.d.ts workaround for runtime globals.
|
|
8
|
+
*
|
|
9
|
+
* What's declared here:
|
|
10
|
+
* 1. Module declarations for `*.stx` and `*.md` imports
|
|
11
|
+
* 2. Runtime globals injected by the stx signals runtime into <script client>
|
|
12
|
+
* blocks (signals, lifecycle, stores, composables, head, routing, etc.)
|
|
13
|
+
* 3. The `window.stx` registry interface
|
|
14
|
+
*
|
|
15
|
+
* Source of truth for the auto-imported global list:
|
|
16
|
+
* packages/stx/src/client-script.ts → STX_AUTO_IMPORTS
|
|
17
|
+
* packages/stx/src/signals.ts → window.stx = { ... }
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
// ============================================================================
|
|
21
|
+
// Module declarations
|
|
22
|
+
// ============================================================================
|
|
23
|
+
|
|
24
|
+
// Allow importing .stx files
|
|
25
|
+
declare module '*.stx'
|
|
26
|
+
|
|
27
|
+
// Allow importing .md files with frontmatter
|
|
28
|
+
declare module '*.md' {
|
|
29
|
+
const content: string
|
|
30
|
+
const data: Record<string, any>
|
|
31
|
+
export default content
|
|
32
|
+
export { data }
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// ============================================================================
|
|
36
|
+
// Signal types
|
|
37
|
+
// ============================================================================
|
|
38
|
+
|
|
39
|
+
interface StxSignal<T> {
|
|
40
|
+
(): T
|
|
41
|
+
set: (value: T) => void
|
|
42
|
+
update: (fn: (current: T) => T) => void
|
|
43
|
+
subscribe: (cb: (value: T) => void) => () => void
|
|
44
|
+
readonly _isSignal: true
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
interface StxDerivedSignal<T> {
|
|
48
|
+
(): T
|
|
49
|
+
readonly _isSignal: true
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
interface StxRef<T> {
|
|
53
|
+
value: T
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
type StxCleanup = () => void
|
|
57
|
+
|
|
58
|
+
// ============================================================================
|
|
59
|
+
// Signals (modern reactivity)
|
|
60
|
+
// ============================================================================
|
|
61
|
+
|
|
62
|
+
declare function state<T>(initial: T): StxSignal<T>
|
|
63
|
+
declare function derived<T>(compute: () => T): StxDerivedSignal<T>
|
|
64
|
+
declare function effect(fn: () => void | StxCleanup): StxCleanup
|
|
65
|
+
declare function batch(fn: () => void): void
|
|
66
|
+
declare function untrack<T>(value: T | StxSignal<T> | StxDerivedSignal<T>): T
|
|
67
|
+
declare function peek<T>(fn: () => T): T
|
|
68
|
+
declare function isSignal(value: unknown): value is StxSignal<unknown>
|
|
69
|
+
declare function isDerived(value: unknown): value is StxDerivedSignal<unknown>
|
|
70
|
+
|
|
71
|
+
// ============================================================================
|
|
72
|
+
// Lifecycle
|
|
73
|
+
// ============================================================================
|
|
74
|
+
|
|
75
|
+
declare function onMount(fn: () => void | StxCleanup): void
|
|
76
|
+
declare function onDestroy(fn: () => void): void
|
|
77
|
+
declare function onBeforeMount(fn: () => void): void
|
|
78
|
+
declare function onMounted(fn: () => void | StxCleanup): void
|
|
79
|
+
declare function onBeforeUpdate(fn: () => void): void
|
|
80
|
+
declare function onUpdated(fn: () => void): void
|
|
81
|
+
declare function onBeforeUnmount(fn: () => void): void
|
|
82
|
+
declare function onUnmounted(fn: () => void): void
|
|
83
|
+
declare function onErrorCaptured(fn: (error: unknown, instance: any, info: string) => boolean | void): void
|
|
84
|
+
|
|
85
|
+
// ============================================================================
|
|
86
|
+
// Template refs
|
|
87
|
+
// ============================================================================
|
|
88
|
+
|
|
89
|
+
declare function useRef<T = HTMLElement>(name: string): { current: T | null }
|
|
90
|
+
|
|
91
|
+
// ============================================================================
|
|
92
|
+
// Routing / navigation
|
|
93
|
+
// ============================================================================
|
|
94
|
+
|
|
95
|
+
declare function navigate(url: string, options?: { replace?: boolean }): void
|
|
96
|
+
declare function goBack(): void
|
|
97
|
+
declare function goForward(): void
|
|
98
|
+
declare function useRoute(): {
|
|
99
|
+
path: string
|
|
100
|
+
params: Record<string, string>
|
|
101
|
+
query: Record<string, string>
|
|
102
|
+
hash: string
|
|
103
|
+
}
|
|
104
|
+
declare function setRouteParams(params: Record<string, string>): void
|
|
105
|
+
declare function useSearchParams(): {
|
|
106
|
+
get: (key: string) => string | null
|
|
107
|
+
set: (key: string, value: string) => void
|
|
108
|
+
delete: (key: string) => void
|
|
109
|
+
has: (key: string) => boolean
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// ============================================================================
|
|
113
|
+
// Data fetching
|
|
114
|
+
// ============================================================================
|
|
115
|
+
|
|
116
|
+
interface StxQueryResult<T> {
|
|
117
|
+
data: StxSignal<T | null>
|
|
118
|
+
loading: StxSignal<boolean>
|
|
119
|
+
error: StxSignal<Error | null>
|
|
120
|
+
refetch: () => Promise<void>
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
interface StxMutationResult<T> {
|
|
124
|
+
data: StxSignal<T | null>
|
|
125
|
+
loading: StxSignal<boolean>
|
|
126
|
+
error: StxSignal<Error | null>
|
|
127
|
+
mutate: (body?: any) => Promise<T>
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
declare function useFetch<T = any>(url: string, options?: any): StxQueryResult<T>
|
|
131
|
+
declare function useQuery<T = any>(url: string, options?: any): StxQueryResult<T>
|
|
132
|
+
declare function useMutation<T = any>(url: string, options?: any): StxMutationResult<T>
|
|
133
|
+
|
|
134
|
+
// ============================================================================
|
|
135
|
+
// DOM utilities
|
|
136
|
+
// ============================================================================
|
|
137
|
+
|
|
138
|
+
declare function useEventListener<K extends keyof WindowEventMap>(
|
|
139
|
+
target: Window | Document | HTMLElement | string | null,
|
|
140
|
+
event: K,
|
|
141
|
+
handler: (event: WindowEventMap[K]) => void,
|
|
142
|
+
options?: boolean | AddEventListenerOptions,
|
|
143
|
+
): StxCleanup
|
|
144
|
+
declare function useEventListener(
|
|
145
|
+
target: Window | Document | HTMLElement | string | null,
|
|
146
|
+
event: string,
|
|
147
|
+
handler: (event: Event) => void,
|
|
148
|
+
options?: boolean | AddEventListenerOptions,
|
|
149
|
+
): StxCleanup
|
|
150
|
+
declare function useMeta(meta: Record<string, string>): void
|
|
151
|
+
declare function useClickOutside(target: any, handler: (event: MouseEvent) => void): StxCleanup
|
|
152
|
+
declare function useFocus(target: any): { focused: StxSignal<boolean>, focus: () => void, blur: () => void }
|
|
153
|
+
|
|
154
|
+
// ============================================================================
|
|
155
|
+
// Timers / scheduling
|
|
156
|
+
// ============================================================================
|
|
157
|
+
|
|
158
|
+
declare function useDebounce<T extends (...args: any[]) => any>(fn: T, delay: number): T
|
|
159
|
+
declare function useDebouncedValue<T>(value: StxSignal<T>, delay: number): StxSignal<T>
|
|
160
|
+
declare function useThrottle<T extends (...args: any[]) => any>(fn: T, delay: number): T
|
|
161
|
+
declare function useInterval(fn: () => void, ms: number, options?: { immediate?: boolean }): {
|
|
162
|
+
start: () => void
|
|
163
|
+
stop: () => void
|
|
164
|
+
isActive: StxSignal<boolean>
|
|
165
|
+
}
|
|
166
|
+
declare function useTimeout(fn: () => void, ms: number): {
|
|
167
|
+
start: () => void
|
|
168
|
+
stop: () => void
|
|
169
|
+
isPending: StxSignal<boolean>
|
|
170
|
+
}
|
|
171
|
+
declare function nextTick(fn?: () => void): Promise<void>
|
|
172
|
+
|
|
173
|
+
// ============================================================================
|
|
174
|
+
// State utilities
|
|
175
|
+
// ============================================================================
|
|
176
|
+
|
|
177
|
+
declare function useToggle(initial?: boolean): [StxSignal<boolean>, (value?: boolean) => void]
|
|
178
|
+
declare function useCounter(initial?: number, options?: { min?: number, max?: number }): {
|
|
179
|
+
count: StxSignal<number>
|
|
180
|
+
inc: (n?: number) => void
|
|
181
|
+
dec: (n?: number) => void
|
|
182
|
+
set: (n: number) => void
|
|
183
|
+
reset: () => void
|
|
184
|
+
}
|
|
185
|
+
declare function useAsync<T>(fn: () => Promise<T>): {
|
|
186
|
+
data: StxSignal<T | null>
|
|
187
|
+
loading: StxSignal<boolean>
|
|
188
|
+
error: StxSignal<Error | null>
|
|
189
|
+
execute: () => Promise<T>
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// ============================================================================
|
|
193
|
+
// Storage
|
|
194
|
+
// ============================================================================
|
|
195
|
+
|
|
196
|
+
declare function useLocalStorage<T>(key: string, defaultValue: T): StxSignal<T>
|
|
197
|
+
declare function useSessionStorage<T>(key: string, defaultValue: T): StxSignal<T>
|
|
198
|
+
|
|
199
|
+
// ============================================================================
|
|
200
|
+
// WebSocket
|
|
201
|
+
// ============================================================================
|
|
202
|
+
|
|
203
|
+
declare function useWebSocket(url: string, options?: {
|
|
204
|
+
immediate?: boolean
|
|
205
|
+
autoReconnect?: boolean | { retries?: number, delay?: number }
|
|
206
|
+
onMessage?: (event: MessageEvent) => void
|
|
207
|
+
onConnected?: () => void
|
|
208
|
+
onDisconnected?: () => void
|
|
209
|
+
onError?: (event: Event) => void
|
|
210
|
+
}): {
|
|
211
|
+
status: StxSignal<'CONNECTING' | 'OPEN' | 'CLOSING' | 'CLOSED'>
|
|
212
|
+
data: StxSignal<any>
|
|
213
|
+
send: (data: string | ArrayBuffer | Blob) => void
|
|
214
|
+
open: () => void
|
|
215
|
+
close: () => void
|
|
216
|
+
ws: WebSocket | null
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// ============================================================================
|
|
220
|
+
// Color mode
|
|
221
|
+
// ============================================================================
|
|
222
|
+
|
|
223
|
+
declare function useColorMode(): {
|
|
224
|
+
mode: StxSignal<'light' | 'dark' | 'auto'>
|
|
225
|
+
setMode: (mode: 'light' | 'dark' | 'auto') => void
|
|
226
|
+
}
|
|
227
|
+
declare function useDark(): StxSignal<boolean>
|
|
228
|
+
|
|
229
|
+
// ============================================================================
|
|
230
|
+
// Head / SEO
|
|
231
|
+
// ============================================================================
|
|
232
|
+
|
|
233
|
+
interface StxHeadConfig {
|
|
234
|
+
title?: string
|
|
235
|
+
titleTemplate?: string | ((title?: string) => string)
|
|
236
|
+
meta?: Array<Record<string, string>>
|
|
237
|
+
link?: Array<Record<string, string>>
|
|
238
|
+
script?: Array<Record<string, string> & { children?: string }>
|
|
239
|
+
style?: Array<Record<string, string> & { children?: string }>
|
|
240
|
+
htmlAttrs?: Record<string, string>
|
|
241
|
+
bodyAttrs?: Record<string, string>
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
interface StxSeoMetaConfig {
|
|
245
|
+
title?: string
|
|
246
|
+
description?: string
|
|
247
|
+
keywords?: string
|
|
248
|
+
author?: string
|
|
249
|
+
ogTitle?: string
|
|
250
|
+
ogDescription?: string
|
|
251
|
+
ogImage?: string
|
|
252
|
+
ogUrl?: string
|
|
253
|
+
ogType?: string
|
|
254
|
+
twitterCard?: 'summary' | 'summary_large_image' | 'app' | 'player'
|
|
255
|
+
twitterTitle?: string
|
|
256
|
+
twitterDescription?: string
|
|
257
|
+
twitterImage?: string
|
|
258
|
+
robots?: string
|
|
259
|
+
canonical?: string
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
declare function useHead(config: StxHeadConfig): void
|
|
263
|
+
declare function useSeoMeta(config: StxSeoMetaConfig): void
|
|
264
|
+
|
|
265
|
+
// ============================================================================
|
|
266
|
+
// Vue-style reactivity (alternative API)
|
|
267
|
+
// ============================================================================
|
|
268
|
+
|
|
269
|
+
declare function ref<T>(value: T): StxRef<T>
|
|
270
|
+
declare function reactive<T extends object>(target: T): T
|
|
271
|
+
declare function computed<T>(getter: () => T): StxRef<T>
|
|
272
|
+
declare function watch<T>(
|
|
273
|
+
source: (() => T) | StxRef<T> | StxSignal<T>,
|
|
274
|
+
callback: (value: T, oldValue: T) => void,
|
|
275
|
+
options?: { immediate?: boolean, deep?: boolean },
|
|
276
|
+
): StxCleanup
|
|
277
|
+
declare function watchEffect(fn: () => void): StxCleanup
|
|
278
|
+
declare function watchMultiple(
|
|
279
|
+
sources: Array<() => any>,
|
|
280
|
+
callback: (values: any[], oldValues: any[]) => void,
|
|
281
|
+
options?: { immediate?: boolean },
|
|
282
|
+
): StxCleanup
|
|
283
|
+
|
|
284
|
+
// ============================================================================
|
|
285
|
+
// Component definition / composition API
|
|
286
|
+
// ============================================================================
|
|
287
|
+
|
|
288
|
+
declare function defineProps<T extends Record<string, any> = Record<string, any>>(definitions?: any): T
|
|
289
|
+
declare function withDefaults<T extends Record<string, any>>(props: T, defaults: Partial<T>): T
|
|
290
|
+
declare function defineEmits<T extends string = string>(): (event: T, payload?: any) => void
|
|
291
|
+
declare function defineExpose<T extends Record<string, any>>(exposed: T): void
|
|
292
|
+
declare function provide<T>(key: string | symbol, value: T): void
|
|
293
|
+
declare function inject<T>(key: string | symbol, defaultValue?: T): T | undefined
|
|
294
|
+
declare function getCurrentInstance(): any
|
|
295
|
+
declare function useSlots(): Record<string, any>
|
|
296
|
+
declare function useAttrs(): Record<string, any>
|
|
297
|
+
declare function $computed<T>(getter: () => T): StxRef<T>
|
|
298
|
+
declare function $watch<T>(
|
|
299
|
+
source: (() => T) | StxRef<T> | StxSignal<T>,
|
|
300
|
+
callback: (value: T, oldValue: T) => void,
|
|
301
|
+
options?: { immediate?: boolean, deep?: boolean },
|
|
302
|
+
): StxCleanup
|
|
303
|
+
|
|
304
|
+
// ============================================================================
|
|
305
|
+
// Stores (Pinia-inspired, signals-based)
|
|
306
|
+
// ============================================================================
|
|
307
|
+
|
|
308
|
+
interface StxStorePersistOptions {
|
|
309
|
+
pick?: string[]
|
|
310
|
+
storage?: 'localStorage' | 'sessionStorage'
|
|
311
|
+
key?: string
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
interface StxStoreOptions {
|
|
315
|
+
persist?: boolean | StxStorePersistOptions
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
declare function defineStore<T>(
|
|
319
|
+
id: string,
|
|
320
|
+
setup: () => T,
|
|
321
|
+
options?: StxStoreOptions,
|
|
322
|
+
): () => T
|
|
323
|
+
declare function defineStore<S extends Record<string, any>, G extends Record<string, any>, A extends Record<string, any>>(
|
|
324
|
+
id: string,
|
|
325
|
+
options: {
|
|
326
|
+
state?: () => S
|
|
327
|
+
getters?: G
|
|
328
|
+
actions?: A
|
|
329
|
+
persist?: boolean | StxStorePersistOptions
|
|
330
|
+
},
|
|
331
|
+
): () => S & G & A
|
|
332
|
+
declare function useStore<T = any>(id: string): T
|
|
333
|
+
declare function createStore<T>(setup: () => T, options?: StxStoreOptions): () => T
|
|
334
|
+
declare function action<T extends (...args: any[]) => any>(fn: T): T
|
|
335
|
+
declare function createSelector<T, R>(selector: (state: T) => R): (state: T) => R
|
|
336
|
+
|
|
337
|
+
// ============================================================================
|
|
338
|
+
// JSX runtime (Vue/React style)
|
|
339
|
+
// ============================================================================
|
|
340
|
+
|
|
341
|
+
declare function h(tag: string | Function, props?: Record<string, any> | null, ...children: any[]): any
|
|
342
|
+
declare const Fragment: unique symbol
|
|
343
|
+
|
|
344
|
+
// ============================================================================
|
|
345
|
+
// window.stx registry
|
|
346
|
+
// ============================================================================
|
|
347
|
+
|
|
348
|
+
interface StxRuntimeRegistry {
|
|
349
|
+
// Signals
|
|
350
|
+
state: typeof state
|
|
351
|
+
derived: typeof derived
|
|
352
|
+
effect: typeof effect
|
|
353
|
+
batch: typeof batch
|
|
354
|
+
untrack: typeof untrack
|
|
355
|
+
peek: typeof peek
|
|
356
|
+
isSignal: typeof isSignal
|
|
357
|
+
|
|
358
|
+
// Lifecycle
|
|
359
|
+
onMount: typeof onMount
|
|
360
|
+
onDestroy: typeof onDestroy
|
|
361
|
+
|
|
362
|
+
// Composables
|
|
363
|
+
useFetch: typeof useFetch
|
|
364
|
+
useRef: typeof useRef
|
|
365
|
+
useQuery: typeof useQuery
|
|
366
|
+
useMutation: typeof useMutation
|
|
367
|
+
|
|
368
|
+
// Routing
|
|
369
|
+
navigate: typeof navigate
|
|
370
|
+
goBack: typeof goBack
|
|
371
|
+
goForward: typeof goForward
|
|
372
|
+
useRoute: typeof useRoute
|
|
373
|
+
setRouteParams: typeof setRouteParams
|
|
374
|
+
useSearchParams: typeof useSearchParams
|
|
375
|
+
|
|
376
|
+
// Composition
|
|
377
|
+
provide: typeof provide
|
|
378
|
+
defineProps: typeof defineProps
|
|
379
|
+
withDefaults: typeof withDefaults
|
|
380
|
+
defineEmits: typeof defineEmits
|
|
381
|
+
defineExpose: typeof defineExpose
|
|
382
|
+
|
|
383
|
+
// Vue compat
|
|
384
|
+
ref: typeof ref
|
|
385
|
+
reactive: typeof reactive
|
|
386
|
+
computed: typeof computed
|
|
387
|
+
watch: typeof watch
|
|
388
|
+
watchEffect: typeof watchEffect
|
|
389
|
+
$computed: typeof $computed
|
|
390
|
+
$watch: typeof $watch
|
|
391
|
+
|
|
392
|
+
// Utilities
|
|
393
|
+
useDebounce: typeof useDebounce
|
|
394
|
+
useDebouncedValue: typeof useDebouncedValue
|
|
395
|
+
useThrottle: typeof useThrottle
|
|
396
|
+
useInterval: typeof useInterval
|
|
397
|
+
useTimeout: typeof useTimeout
|
|
398
|
+
useToggle: typeof useToggle
|
|
399
|
+
useCounter: typeof useCounter
|
|
400
|
+
useClickOutside: typeof useClickOutside
|
|
401
|
+
useFocus: typeof useFocus
|
|
402
|
+
useAsync: typeof useAsync
|
|
403
|
+
useLocalStorage: typeof useLocalStorage
|
|
404
|
+
useEventListener: typeof useEventListener
|
|
405
|
+
useWebSocket: typeof useWebSocket
|
|
406
|
+
useColorMode: typeof useColorMode
|
|
407
|
+
useDark: typeof useDark
|
|
408
|
+
useHead: typeof useHead
|
|
409
|
+
useSeoMeta: typeof useSeoMeta
|
|
410
|
+
|
|
411
|
+
// Stores
|
|
412
|
+
defineStore: typeof defineStore
|
|
413
|
+
useStore: typeof useStore
|
|
414
|
+
|
|
415
|
+
// Mount API
|
|
416
|
+
mount: (setupFn: () => any) => void
|
|
417
|
+
mountEl: (selector: string, setupFn: () => any) => void
|
|
418
|
+
|
|
419
|
+
// Helpers (template helpers — populated by app)
|
|
420
|
+
helpers: Record<string, any>
|
|
421
|
+
|
|
422
|
+
// Internals (escape hatch)
|
|
423
|
+
[key: string]: any
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
// Bare global so existing code that references `stx` (without `window.`) still works
|
|
427
|
+
declare const stx: StxRuntimeRegistry
|
|
428
|
+
|
|
429
|
+
// Augment Window so `window.stx` is typed
|
|
430
|
+
interface Window {
|
|
431
|
+
stx: StxRuntimeRegistry
|
|
432
|
+
__STX_STORES__?: Record<string, any>
|
|
433
|
+
__STX_CURRENT_PROPS__?: Record<string, any>
|
|
434
|
+
__STX_CURRENT_ELEMENT__?: HTMLElement | null
|
|
435
|
+
__stxRouter?: boolean
|
|
436
|
+
__stxRouterConfig?: Record<string, any>
|
|
437
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process all `<style scoped>` blocks in a template.
|
|
3
|
+
*
|
|
4
|
+
* For each `<style scoped>` block:
|
|
5
|
+
* 1. Generates a deterministic hash from the file path
|
|
6
|
+
* 2. Prefixes all CSS selectors with `[data-v-{hash}]`
|
|
7
|
+
* 3. Adds `data-v-{hash}` attribute to all top-level HTML elements
|
|
8
|
+
* 4. Replaces the `<style scoped>` tag with scoped CSS
|
|
9
|
+
*
|
|
10
|
+
* Non-scoped `<style>` tags pass through unchanged.
|
|
11
|
+
*
|
|
12
|
+
* @param template - The HTML template string
|
|
13
|
+
* @param filePath - Source file path (used for deterministic hash generation)
|
|
14
|
+
* @returns Processed template with scoped styles
|
|
15
|
+
*/
|
|
16
|
+
export declare function processScopedStyles(template: string, filePath: string): ScopedStyleResult;
|
|
17
|
+
/**
|
|
18
|
+
* Result of processing scoped styles in a template
|
|
19
|
+
*/
|
|
20
|
+
export declare interface ScopedStyleResult {
|
|
21
|
+
html: string
|
|
22
|
+
hasScoped: boolean
|
|
23
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type PlaceholderMap } from './placeholder';
|
|
2
|
+
/**
|
|
3
|
+
* Compile a single .stx template file.
|
|
4
|
+
*
|
|
5
|
+
* Runs the full processDirectives pipeline in build mode ('compile'),
|
|
6
|
+
* producing pre-rendered HTML with placeholder tokens for dynamic content.
|
|
7
|
+
*
|
|
8
|
+
* @param filePath - Absolute path to the .stx file
|
|
9
|
+
* @param route - The URL route this page serves (e.g. '/jobs')
|
|
10
|
+
* @param options - Additional compilation options
|
|
11
|
+
*/
|
|
12
|
+
export declare function compileTemplate(filePath: string, route: string, options?: {
|
|
13
|
+
componentsDir?: string
|
|
14
|
+
partialsDir?: string
|
|
15
|
+
layoutsDir?: string
|
|
16
|
+
debug?: boolean
|
|
17
|
+
}): Promise<CompiledTemplate>;
|
|
18
|
+
/**
|
|
19
|
+
* A pre-compiled template ready for serve-time hydration.
|
|
20
|
+
*/
|
|
21
|
+
export declare interface CompiledTemplate {
|
|
22
|
+
route: string
|
|
23
|
+
sourceFile: string
|
|
24
|
+
html: string
|
|
25
|
+
fragment: string
|
|
26
|
+
placeholders: PlaceholderMap
|
|
27
|
+
hasServerScripts: boolean
|
|
28
|
+
serverScriptContent: string[]
|
|
29
|
+
dependencies: string[]
|
|
30
|
+
contentHash: string
|
|
31
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { CompiledTemplate } from './template-compiler';
|
|
2
|
+
/**
|
|
3
|
+
* Hydrate a pre-compiled template with request-time data.
|
|
4
|
+
*
|
|
5
|
+
* This is the serve-time counterpart to compileTemplate(). It takes a
|
|
6
|
+
* compiled template (with placeholder tokens) and a request context,
|
|
7
|
+
* executes server scripts, evaluates expressions, and returns final HTML.
|
|
8
|
+
*
|
|
9
|
+
* @param compiled - The pre-compiled template from build time
|
|
10
|
+
* @param requestContext - Request-time context (route params, session, etc.)
|
|
11
|
+
* @returns Final HTML ready to send to the browser
|
|
12
|
+
*/
|
|
13
|
+
export declare function hydrateTemplate(compiled: CompiledTemplate, requestContext?: Record<string, any>): Promise<string>;
|
|
14
|
+
/**
|
|
15
|
+
* Hydrate a fragment (for SPA navigation).
|
|
16
|
+
* Same as hydrateTemplate but returns the fragment portion.
|
|
17
|
+
*/
|
|
18
|
+
export declare function hydrateFragment(compiled: CompiledTemplate, requestContext?: Record<string, any>): Promise<string>;
|
package/dist/transitions.d.ts
CHANGED
|
@@ -31,6 +31,7 @@ export declare function generateTransitionRuntime(): string;
|
|
|
31
31
|
* <div @transition.slide-up.300="isOpen">Content</div>
|
|
32
32
|
*/
|
|
33
33
|
export declare function processTransitionAttributes(template: string): string;
|
|
34
|
+
/* eslint-disable prefer-const, style/max-statements-per-line, no-super-linear-backtracking, regexp/no-unused-capturing-group */
|
|
34
35
|
/**
|
|
35
36
|
* STX Transitions
|
|
36
37
|
*
|