@vesk/runtime 0.1.1 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/form.js +1 -1
  2. package/dist/headless.d.ts +30 -0
  3. package/dist/headless.d.ts.map +1 -0
  4. package/dist/headless.js +39 -0
  5. package/dist/hmr-client.js +5 -2
  6. package/dist/index-client.d.ts +5 -0
  7. package/dist/index-client.d.ts.map +1 -1
  8. package/dist/index-client.js +3 -0
  9. package/dist/index-router.d.ts +16 -0
  10. package/dist/index-router.d.ts.map +1 -0
  11. package/dist/index-router.js +15 -0
  12. package/dist/index-server.d.ts +3 -0
  13. package/dist/index-server.d.ts.map +1 -1
  14. package/dist/index-server.js +2 -0
  15. package/dist/loading-indicator.d.ts +127 -0
  16. package/dist/loading-indicator.d.ts.map +1 -0
  17. package/dist/loading-indicator.js +342 -0
  18. package/dist/md.d.ts +112 -3
  19. package/dist/md.d.ts.map +1 -1
  20. package/dist/md.js +1977 -198
  21. package/dist/network.d.ts +28 -0
  22. package/dist/network.d.ts.map +1 -0
  23. package/dist/network.js +62 -0
  24. package/dist/request.d.ts.map +1 -1
  25. package/dist/request.js +22 -13
  26. package/dist/resource.d.ts +3 -1
  27. package/dist/resource.d.ts.map +1 -1
  28. package/dist/resource.js +36 -1
  29. package/dist/ripple-runtime.d.ts +11 -6
  30. package/dist/ripple-runtime.d.ts.map +1 -1
  31. package/dist/ripple-runtime.js +12 -0
  32. package/dist/router-components.d.ts +29 -3
  33. package/dist/router-components.d.ts.map +1 -1
  34. package/dist/router-components.js +73 -0
  35. package/dist/router-match.d.ts +2 -0
  36. package/dist/router-match.d.ts.map +1 -1
  37. package/dist/router-match.js +6 -3
  38. package/dist/router.d.ts +27 -0
  39. package/dist/router.d.ts.map +1 -1
  40. package/dist/router.js +770 -254
  41. package/package.json +6 -2
  42. package/dist/package.json +0 -23
package/dist/form.js CHANGED
@@ -56,7 +56,7 @@ export function custom(fn, msg) {
56
56
  export function Field(props, registry, hydrate) {
57
57
  const { name, label, rules = [], children, errorClass, class: className, style, ...rest } = props;
58
58
  if (formIsSSR()) {
59
- const labelHtml = label ? `<label>${label}</label>` : '';
59
+ const labelHtml = label ? `<label>${escapeHtml(String(label))}</label>` : '';
60
60
  const serverErrors = readServerFieldErrors();
61
61
  const serverErr = serverErrors[name] ? String(serverErrors[name]) : '';
62
62
  const errStyle = serverErr ? '' : 'display:none';
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Headless component primitives — Show, For, Switch/Match.
3
+ * Thin wrappers that work on both server and client; SSR renders directly,
4
+ * client is reactive via the parent's effect system (props.when is read via
5
+ * normal prop passing, so include them inside a reactive context or use
6
+ * `effect` inside if you need fine-grained updates).
7
+ */
8
+ export interface ShowProps {
9
+ when: unknown;
10
+ children?: unknown;
11
+ fallback?: unknown;
12
+ }
13
+ export declare function Show(props: ShowProps): unknown;
14
+ export interface ForProps<T> {
15
+ each: readonly T[] | null | undefined;
16
+ children: (item: T, index: number) => unknown;
17
+ fallback?: unknown;
18
+ }
19
+ export declare function For<T>(props: ForProps<T>): unknown;
20
+ export interface SwitchProps {
21
+ children?: unknown;
22
+ fallback?: unknown;
23
+ }
24
+ export declare function Switch(props: SwitchProps): unknown;
25
+ export interface MatchProps {
26
+ when: unknown;
27
+ children?: unknown;
28
+ }
29
+ export declare function Match(props: MatchProps): unknown;
30
+ //# sourceMappingURL=headless.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headless.d.ts","sourceRoot":"","sources":["../src/headless.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAE9C;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,IAAI,EAAE,SAAS,CAAC,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IACtC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAWlD;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAUlD;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAEhD"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Headless component primitives — Show, For, Switch/Match.
3
+ * Thin wrappers that work on both server and client; SSR renders directly,
4
+ * client is reactive via the parent's effect system (props.when is read via
5
+ * normal prop passing, so include them inside a reactive context or use
6
+ * `effect` inside if you need fine-grained updates).
7
+ */
8
+ export function Show(props) {
9
+ return props.when ? props.children : props.fallback ?? null;
10
+ }
11
+ export function For(props) {
12
+ const list = props.each;
13
+ if (!list || list.length === 0)
14
+ return props.fallback ?? null;
15
+ // `children` is a render function: (item, index) => VNode
16
+ // In .vsk, usage is <For each={items}>{(item, i) => <li>{item}</li>}</For>
17
+ // At runtime, `props.children` is the function.
18
+ const fn = props.children;
19
+ if (typeof fn !== 'function')
20
+ return null;
21
+ // Preserve keyed reconciliation? For now, simple map.
22
+ // The caller can use `key` on the returned element if needed.
23
+ return list.map((item, idx) => fn(item, idx));
24
+ }
25
+ export function Switch(props) {
26
+ const children = props.children;
27
+ const list = Array.isArray(children) ? children : children != null ? [children] : [];
28
+ for (const child of list) {
29
+ // Each child is expected to be a Match element's rendered output.
30
+ // Match returns its children when `when` is truthy, otherwise null.
31
+ // So Switch just returns the first non-null/defined child.
32
+ if (child != null && child !== false && child !== '')
33
+ return child;
34
+ }
35
+ return props.fallback ?? null;
36
+ }
37
+ export function Match(props) {
38
+ return props.when ? props.children : null;
39
+ }
@@ -17,6 +17,9 @@
17
17
  ws.onmessage = function (e) {
18
18
  try {
19
19
  var msg = JSON.parse(e.data);
20
+ if (msg.nonce && !globalThis.__vesk_hmr_nonce) {
21
+ globalThis.__vesk_hmr_nonce = msg.nonce;
22
+ }
20
23
  switch (msg.type) {
21
24
  case 'update':
22
25
  if (msg.fnSources) {
@@ -26,7 +29,7 @@
26
29
  catch (ex) {
27
30
  console.error('HMR eval error:', ex);
28
31
  } };
29
- Object.values(msg.fnSources).forEach(function (fn) { _eval(fn); });
32
+ Object.values(msg.fnSources).forEach(function (fn) { _eval(fn, msg.nonce); });
30
33
  }
31
34
  globalThis.__updatedComponents = new Set(Object.keys((msg.components || {})));
32
35
  var router = globalThis.__vesk_router;
@@ -190,7 +193,7 @@
190
193
  tipsHtml += '<div class="__vo_tips_title">Debug Tips</div>';
191
194
  shownHeader = true;
192
195
  }
193
- tipsHtml += '<div class="__vo_tip">' + msg.tips[t] + '</div>';
196
+ tipsHtml += '<div class="__vo_tip">' + escapeHtml(msg.tips[t]) + '</div>';
194
197
  }
195
198
  }
196
199
  if (msg.suggestions && msg.suggestions.length > 0) {
@@ -2,6 +2,8 @@ export { track, get, set, untrack, peek_tracked as peek, derived, flush_sync as
2
2
  export { effect, user_effect, block, branch, root, render, pre_effect, destroy_block, destroy_block_children, pause_block, resume_block, is_destroyed, unlink_block, create_try_block, boundary_fn_running_block } from '@vesk/runtime/src/ripple-blocks';
3
3
  export { hydrate, hydrateViewport, hydrateIdle, hydrateOnInteraction, needsHydration, hydrationCount, createHydrateWalker, collectVskMarkers, reactiveProps, hydrateInitial } from '@vesk/runtime/src/hydrate';
4
4
  export { createRouter, createFileRouter, Outlet, Link, NavLink, useNavigate, useParams, usePathname, useSearchParams, useRouter, buildRouteTree, defineRoute, Redirect, redirect, permanentRedirect, notFound, NotFoundError, ensureChunk, matchRoute } from '@vesk/runtime/src/router';
5
+ export { getNetworkState, watchNetwork } from '@vesk/runtime/src/network';
6
+ export type { NetworkState, EffectiveType } from '@vesk/runtime/src/network';
5
7
  export { bindValue, bindChecked, bindGroup } from '@vesk/runtime/src/bindings';
6
8
  export { createContext, Context, getActiveComponent, setActiveComponent } from '@vesk/runtime/src/context';
7
9
  export { createResource, setSsrData, clearSsrData, resolveSsrResources, useFetch } from '@vesk/runtime/src/resource';
@@ -12,5 +14,8 @@ export { Image } from '@vesk/runtime/src/image';
12
14
  export { Experiment } from '@vesk/runtime/src/experiment';
13
15
  export { Form, Field, required, email, minLength, maxLength, pattern, custom } from '@vesk/runtime/src/form';
14
16
  export { Md } from '@vesk/runtime/src/md';
17
+ export { Show, For, Switch, Match } from '@vesk/runtime/src/headless';
18
+ export { LoadingIndicator, useLoadingIndicator, configureLoadingIndicator, getLoadingProgress, isLoadingActive, getLoadingError, LOADING_INDICATOR_DEFAULT_COLOR, LOADING_INDICATOR_DEFAULT_ERROR_COLOR } from '@vesk/runtime/src/loading-indicator';
19
+ export type { LoadingIndicatorHandle, LoadingIndicatorOptions, LoadingIndicatorProps } from '@vesk/runtime/src/loading-indicator';
15
20
  export { defineAction, getAction, clearActions, validateActionInput, issuesToFieldMap, isFormAction } from '@vesk/runtime/src/action';
16
21
  //# sourceMappingURL=index-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-client.d.ts","sourceRoot":"","sources":["../src/index-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,YAAY,IAAI,IAAI,EAAE,OAAO,EAAE,UAAU,IAAI,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AACtf,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,sBAAsB,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC1P,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,oBAAoB,EAAE,cAAc,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC/M,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACxR,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC3G,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACrH,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACxK,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC7G,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index-client.d.ts","sourceRoot":"","sources":["../src/index-client.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ export { track, get, set, untrack, peek_tracked as peek, derived, flush_sync as
2
2
  export { effect, user_effect, block, branch, root, render, pre_effect, destroy_block, destroy_block_children, pause_block, resume_block, is_destroyed, unlink_block, create_try_block, boundary_fn_running_block } from '@vesk/runtime/src/ripple-blocks';
3
3
  export { hydrate, hydrateViewport, hydrateIdle, hydrateOnInteraction, needsHydration, hydrationCount, createHydrateWalker, collectVskMarkers, reactiveProps, hydrateInitial } from '@vesk/runtime/src/hydrate';
4
4
  export { createRouter, createFileRouter, Outlet, Link, NavLink, useNavigate, useParams, usePathname, useSearchParams, useRouter, buildRouteTree, defineRoute, Redirect, redirect, permanentRedirect, notFound, NotFoundError, ensureChunk, matchRoute } from '@vesk/runtime/src/router';
5
+ export { getNetworkState, watchNetwork } from '@vesk/runtime/src/network';
5
6
  export { bindValue, bindChecked, bindGroup } from '@vesk/runtime/src/bindings';
6
7
  export { createContext, Context, getActiveComponent, setActiveComponent } from '@vesk/runtime/src/context';
7
8
  export { createResource, setSsrData, clearSsrData, resolveSsrResources, useFetch } from '@vesk/runtime/src/resource';
@@ -12,4 +13,6 @@ export { Image } from '@vesk/runtime/src/image';
12
13
  export { Experiment } from '@vesk/runtime/src/experiment';
13
14
  export { Form, Field, required, email, minLength, maxLength, pattern, custom } from '@vesk/runtime/src/form';
14
15
  export { Md } from '@vesk/runtime/src/md';
16
+ export { Show, For, Switch, Match } from '@vesk/runtime/src/headless';
17
+ export { LoadingIndicator, useLoadingIndicator, configureLoadingIndicator, getLoadingProgress, isLoadingActive, getLoadingError, LOADING_INDICATOR_DEFAULT_COLOR, LOADING_INDICATOR_DEFAULT_ERROR_COLOR } from '@vesk/runtime/src/loading-indicator';
15
18
  export { defineAction, getAction, clearActions, validateActionInput, issuesToFieldMap, isFormAction } from '@vesk/runtime/src/action';
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @vesk/router — the canonical public entry point for everything
3
+ * navigation/routing related.
4
+ *
5
+ * ```js
6
+ * import { Link, NavLink, useRouter, useNavigate } from '@vesk/router';
7
+ * ```
8
+ *
9
+ * The `@vesk/runtime` barrels keep thin back-compat re-exports of this surface
10
+ * because the compiler's auto-import machinery and the client bootstrap
11
+ * resolve through them — new application code should prefer `@vesk/router`.
12
+ */
13
+ export { createRouter, createFileRouter, Outlet, Link, NavLink, useNavigate, useParams, usePathname, useSearchParams, useRouter, buildRouteTree, defineRoute, Redirect, redirect, permanentRedirect, NotFoundError, notFound, ensureChunk, matchRoute, } from '@vesk/runtime/src/router';
14
+ export { LoadingIndicator, useLoadingIndicator, configureLoadingIndicator, loadingStart, loadingSet, loadingFinish, loadingClear, getLoadingProgress, isLoadingActive, getLoadingError, getLoadingState, LOADING_INDICATOR_DEFAULT_COLOR, LOADING_INDICATOR_DEFAULT_ERROR_COLOR, } from '@vesk/runtime/src/loading-indicator';
15
+ export type { LoadingIndicatorHandle, LoadingIndicatorOptions, LoadingIndicatorProps, } from '@vesk/runtime/src/loading-indicator';
16
+ //# sourceMappingURL=index-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-router.d.ts","sourceRoot":"","sources":["../src/index-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACN,YAAY,EAAE,gBAAgB,EAC9B,MAAM,EAAE,IAAI,EAAE,OAAO,EACrB,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAC/D,cAAc,EAAE,WAAW,EAC3B,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,aAAa,EAAE,QAAQ,EAC9D,WAAW,EAAE,UAAU,GACvB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACN,gBAAgB,EAAE,mBAAmB,EAAE,yBAAyB,EAChE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EACrD,kBAAkB,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EACrE,+BAA+B,EAAE,qCAAqC,GACtE,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EACX,sBAAsB,EAAE,uBAAuB,EAAE,qBAAqB,GACtE,MAAM,qCAAqC,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @vesk/router — the canonical public entry point for everything
3
+ * navigation/routing related.
4
+ *
5
+ * ```js
6
+ * import { Link, NavLink, useRouter, useNavigate } from '@vesk/router';
7
+ * ```
8
+ *
9
+ * The `@vesk/runtime` barrels keep thin back-compat re-exports of this surface
10
+ * because the compiler's auto-import machinery and the client bootstrap
11
+ * resolve through them — new application code should prefer `@vesk/router`.
12
+ */
13
+ export { createRouter, createFileRouter, Outlet, Link, NavLink, useNavigate, useParams, usePathname, useSearchParams, useRouter, buildRouteTree, defineRoute, Redirect, redirect, permanentRedirect, NotFoundError, notFound, ensureChunk, matchRoute, } from '@vesk/runtime/src/router';
14
+ // Navigation-driven loading state (the bar the router drives + custom UIs).
15
+ export { LoadingIndicator, useLoadingIndicator, configureLoadingIndicator, loadingStart, loadingSet, loadingFinish, loadingClear, getLoadingProgress, isLoadingActive, getLoadingError, getLoadingState, LOADING_INDICATOR_DEFAULT_COLOR, LOADING_INDICATOR_DEFAULT_ERROR_COLOR, } from '@vesk/runtime/src/loading-indicator';
@@ -11,5 +11,8 @@ export { Image } from '@vesk/runtime/src/image';
11
11
  export { Experiment } from '@vesk/runtime/src/experiment';
12
12
  export { Form, Field, required, email, minLength, maxLength, pattern, custom } from '@vesk/runtime/src/form';
13
13
  export { Md } from '@vesk/runtime/src/md';
14
+ export { Show, For, Switch, Match } from '@vesk/runtime/src/headless';
15
+ export { LoadingIndicator, useLoadingIndicator, configureLoadingIndicator, getLoadingProgress, isLoadingActive, getLoadingError } from '@vesk/runtime/src/loading-indicator';
16
+ export type { LoadingIndicatorHandle, LoadingIndicatorOptions, LoadingIndicatorProps } from '@vesk/runtime/src/loading-indicator';
14
17
  export { defineAction, getAction, clearActions, validateActionInput, issuesToFieldMap, isFormAction } from '@vesk/runtime/src/action';
15
18
  //# sourceMappingURL=index-server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-server.d.ts","sourceRoot":"","sources":["../src/index-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,YAAY,IAAI,IAAI,EAAE,OAAO,EAAE,UAAU,IAAI,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAC5S,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,sBAAsB,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC1P,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC3G,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACnJ,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,IAAI,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC/Q,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACnT,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC7J,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACxK,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC7G,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index-server.d.ts","sourceRoot":"","sources":["../src/index-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,YAAY,IAAI,IAAI,EAAE,OAAO,EAAE,UAAU,IAAI,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAC5S,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,sBAAsB,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC1P,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC3G,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACnJ,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,IAAI,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC/Q,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACnT,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC7J,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACxK,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC7G,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC7K,YAAY,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAClI,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC"}
@@ -11,4 +11,6 @@ export { Image } from '@vesk/runtime/src/image';
11
11
  export { Experiment } from '@vesk/runtime/src/experiment';
12
12
  export { Form, Field, required, email, minLength, maxLength, pattern, custom } from '@vesk/runtime/src/form';
13
13
  export { Md } from '@vesk/runtime/src/md';
14
+ export { Show, For, Switch, Match } from '@vesk/runtime/src/headless';
15
+ export { LoadingIndicator, useLoadingIndicator, configureLoadingIndicator, getLoadingProgress, isLoadingActive, getLoadingError } from '@vesk/runtime/src/loading-indicator';
14
16
  export { defineAction, getAction, clearActions, validateActionInput, issuesToFieldMap, isFormAction } from '@vesk/runtime/src/action';
@@ -0,0 +1,127 @@
1
+ /**
2
+ * LoadingIndicator — a Nuxt-style page-navigation progress bar.
3
+ *
4
+ * A global singleton driven by the router: `loadingStart()` fires when an SPA
5
+ * navigation begins and `loadingFinish()` when its content (and route data)
6
+ * has settled. `<LoadingIndicator/>` renders the bar anywhere in a layout;
7
+ * `useLoadingIndicator()` exposes the reactive state for fully custom UIs.
8
+ *
9
+ * Progress backs off as it approaches 100% (atan curve) so long loads never
10
+ * prematurely complete; short navigations stay invisible thanks to `throttle`.
11
+ * State lives in tracked cells so any `effect()`-driven UI updates live.
12
+ */
13
+ import type { Tracked } from '@vesk/runtime/src/ripple-runtime';
14
+ export interface LoadingIndicatorOptions {
15
+ /** Total duration of the progress animation, ms. Default 2000. */
16
+ duration?: number;
17
+ /** Delay before the bar appears/starts animating, ms. Default 200. */
18
+ throttle?: number;
19
+ /** How long the completed bar stays visible before hiding, ms. Default 500. */
20
+ hideDelay?: number;
21
+ /** How long after hiding before progress resets to 0, ms. Default 400. */
22
+ resetDelay?: number;
23
+ /**
24
+ * Custom progress estimator receiving `(duration, elapsedMs)` and
25
+ * returning 0–100. Defaults to an atan back-off curve.
26
+ */
27
+ estimatedProgress?: (duration: number, elapsed: number) => number;
28
+ }
29
+ /** Merges option overrides into the global singleton (used by the component's props). */
30
+ export declare function configureLoadingIndicator(opts?: LoadingIndicatorOptions): void;
31
+ /**
32
+ * Starts the loading animation from 0%. Without `{ force: true }` the bar
33
+ * waits `throttle` ms before becoming visible, so fast navigations never flash.
34
+ */
35
+ export declare function loadingStart(opts?: {
36
+ force?: boolean;
37
+ }): void;
38
+ /**
39
+ * Jumps the bar to a specific progress value (0–100). Values ≥ 100 finish.
40
+ * A manual set takes control: the automatic estimation stops until the next
41
+ * `start()`, so the value sticks instead of being overwritten by a frame.
42
+ */
43
+ export declare function loadingSet(at?: number, opts?: {
44
+ force?: boolean;
45
+ }): void;
46
+ /**
47
+ * Completes the animation at 100%. With `{ error: true }` the bar switches to
48
+ * the error color while hiding; with `{ force: true }` it resets instantly.
49
+ */
50
+ export declare function loadingFinish(opts?: {
51
+ force?: boolean;
52
+ error?: boolean;
53
+ }): void;
54
+ /** Cancels the pending appearance timer and animation frame without changing state. */
55
+ export declare function loadingClear(): void;
56
+ export interface LoadingIndicatorHandle {
57
+ /** Tracked cell — current progress 0–100. Read inside effect()/get(). */
58
+ progress: Tracked<number>;
59
+ /** Tracked cell — true once the bar is visible. */
60
+ isLoading: Tracked<boolean>;
61
+ /** Tracked cell — true when the last load finished with an error. */
62
+ error: Tracked<boolean>;
63
+ start(opts?: {
64
+ force?: boolean;
65
+ }): void;
66
+ set(value: number, opts?: {
67
+ force?: boolean;
68
+ }): void;
69
+ finish(opts?: {
70
+ force?: boolean;
71
+ error?: boolean;
72
+ }): void;
73
+ clear(): void;
74
+ }
75
+ /**
76
+ * Accesses the shared loading-indicator singleton. Call this (or render
77
+ * `<LoadingIndicator/>`) once per app — every call returns the same state,
78
+ * so programmatic `start()`/`finish()` drive the same bar the router does.
79
+ */
80
+ export declare function useLoadingIndicator(options?: LoadingIndicatorOptions): LoadingIndicatorHandle;
81
+ export declare function getLoadingProgress(): number;
82
+ export declare function isLoadingActive(): boolean;
83
+ export declare function getLoadingError(): boolean;
84
+ /** The raw tracked cells backing the shared singleton (used by the router). */
85
+ export declare function getLoadingState(): {
86
+ progress: Tracked<number>;
87
+ isLoading: Tracked<boolean>;
88
+ error: Tracked<boolean>;
89
+ };
90
+ export declare const LOADING_INDICATOR_DEFAULT_COLOR = "repeating-linear-gradient(to right,#38bdf8 0%,#6366f1 50%,#8b5cf6 100%)";
91
+ export declare const LOADING_INDICATOR_DEFAULT_ERROR_COLOR = "repeating-linear-gradient(to right,#f87171 0%,#ef4444 100%)";
92
+ export interface LoadingIndicatorProps extends LoadingIndicatorOptions {
93
+ /** Bar background (CSS color/gradient). `false` disables explicit styling so CSS classes take over. */
94
+ color?: string | false;
95
+ /** Background used while the error flag is set. */
96
+ errorColor?: string;
97
+ /** Bar height — number (px) or any CSS length. Default 3. */
98
+ height?: number | string;
99
+ /** Edge to pin the bar to. Default 'top'. */
100
+ position?: 'top' | 'bottom';
101
+ /** Stacking context for the fixed bar. Default 999999. */
102
+ zIndex?: number;
103
+ class?: string;
104
+ className?: string;
105
+ style?: string;
106
+ /** Custom inner content replacing the default bar element. */
107
+ children?: unknown;
108
+ [k: string]: unknown;
109
+ }
110
+ type HydrateWalker = {
111
+ nextElement?: (tag?: string) => Element;
112
+ root?: HTMLElement | null;
113
+ };
114
+ /**
115
+ * Renders the navigation progress bar. On the server it emits a hidden div
116
+ * snapshot (never flashes on first paint); on the client it claims that node
117
+ * during hydration or builds a fresh one for SPA mounts, then keeps its style
118
+ * in sync with the shared indicator state via an effect.
119
+ *
120
+ * Customize with `color`, `errorColor`, `height`, `duration`, `throttle`,
121
+ * `hideDelay`, `resetDelay`, `estimatedProgress`, `position`, `zIndex`,
122
+ * `class`/`style` — or pass `children` to replace the bar entirely and drive
123
+ * your own UI through `useLoadingIndicator()`.
124
+ */
125
+ export declare function LoadingIndicator(props?: LoadingIndicatorProps, _registry?: Map<string, unknown>, hydrate?: HydrateWalker): Node | string;
126
+ export {};
127
+ //# sourceMappingURL=loading-indicator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading-indicator.d.ts","sourceRoot":"","sources":["../src/loading-indicator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAMhE,MAAM,WAAW,uBAAuB;IACvC,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;CAClE;AAuBD,yFAAyF;AACzF,wBAAgB,yBAAyB,CAAC,IAAI,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAO9E;AAwED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAO7D;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAOxE;AAaD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAW/E;AAED,uFAAuF;AACvF,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAED,MAAM,WAAW,sBAAsB;IACtC,yEAAyE;IACzE,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1B,mDAAmD;IACnD,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,qEAAqE;IACrE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACxB,KAAK,CAAC,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACxC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACrD,MAAM,CAAC,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAC1D,KAAK,IAAI,IAAI,CAAC;CACd;AAYD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,sBAAsB,CAG7F;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,IAAI;IAClC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CACxB,CAEA;AAID,eAAO,MAAM,+BAA+B,4EAC8B,CAAC;AAE3E,eAAO,MAAM,qCAAqC,gEACY,CAAC;AAE/D,MAAM,WAAW,qBAAsB,SAAQ,uBAAuB;IACrE,uGAAuG;IACvG,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACvB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAC5B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACrB;AAsFD,KAAK,aAAa,GAAG;IAAE,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CAAC;AAE5F;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC/B,KAAK,GAAE,qBAA0B,EACjC,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,CAAC,EAAE,aAAa,GACrB,IAAI,GAAG,MAAM,CAkCf"}