@wssto2/vue-core 0.1.0 → 0.2.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.
Files changed (95) hide show
  1. package/README.md +20 -9
  2. package/dist/{AdaptivePageShell.vue_vue_type_script_setup_true_lang-CKghARkW.js → AdaptivePageShell.vue_vue_type_script_setup_true_lang-CeKK8_g5.js} +2 -2
  3. package/dist/{AlertDialog.vue_vue_type_script_setup_true_lang-BZb4qKXo.js → AlertDialog.vue_vue_type_script_setup_true_lang-e4hzkzg3.js} +1 -1
  4. package/dist/{AsyncSection.vue_vue_type_script_setup_true_lang-B82bl36A.js → AsyncSection.vue_vue_type_script_setup_true_lang-CWLB3xsR.js} +1 -1
  5. package/dist/Badge.vue_vue_type_script_setup_true_lang-DJyZc0C7.js +51 -0
  6. package/dist/Button.vue_vue_type_script_setup_true_lang-B1eZgLae.js +182 -0
  7. package/dist/CountryFlag.vue_vue_type_script_setup_true_lang-Kry_vPPZ.js +299 -0
  8. package/dist/{DiscardChangesModal.vue_vue_type_script_setup_true_lang-Bx5O1RZJ.js → DiscardChangesModal.vue_vue_type_script_setup_true_lang-DyhYHRyz.js} +1 -1
  9. package/dist/{LeaveGuardRoot.vue_vue_type_script_setup_true_lang-DH6EB8br.js → LeaveGuardRoot.vue_vue_type_script_setup_true_lang-CvwoT1JF.js} +1 -1
  10. package/dist/{Menu.vue_vue_type_script_setup_true_lang-D44EHXQZ.js → Menu.vue_vue_type_script_setup_true_lang-CrMj6KPD.js} +1 -1
  11. package/dist/{Modal.vue_vue_type_script_setup_true_lang-DYQgaUtj.js → Modal.vue_vue_type_script_setup_true_lang-BQZM49gC.js} +138 -128
  12. package/dist/{PhotoViewer.vue_vue_type_script_setup_true_lang-DDVQXJRB.js → PhotoViewer.vue_vue_type_script_setup_true_lang-ElDizaW2.js} +1 -1
  13. package/dist/{SectionList.vue_vue_type_script_setup_true_lang-DGcKX_OJ.js → SectionList.vue_vue_type_script_setup_true_lang-L9ita_Kx.js} +2 -2
  14. package/dist/SelectField.vue_vue_type_script_setup_true_lang-DZTrU8NJ.js +661 -0
  15. package/dist/{Sheet.vue_vue_type_script_setup_true_lang-BLBD5ps8.js → Sheet.vue_vue_type_script_setup_true_lang-CtkJ-4e3.js} +1 -1
  16. package/dist/{Tooltip.vue_vue_type_script_setup_true_lang-BJWPVyfT.js → Tooltip.vue_vue_type_script_setup_true_lang-OOD_XNWx.js} +1 -1
  17. package/dist/app/application.d.ts +5 -0
  18. package/dist/app/environment.d.ts +2 -0
  19. package/dist/app/index.js +75 -72
  20. package/dist/button/index.d.ts +1 -1
  21. package/dist/button/index.js +5 -3
  22. package/dist/button/shortcut.d.ts +28 -2
  23. package/dist/collection/CollectionPage.vue.d.ts +1 -0
  24. package/dist/collection/CollectionRows.vue.d.ts +59 -0
  25. package/dist/collection/CollectionTable.vue.d.ts +1 -1
  26. package/dist/collection/DataTable.vue.d.ts +47 -0
  27. package/dist/collection/RowActions.vue.d.ts +19 -0
  28. package/dist/collection/columns.d.ts +2 -0
  29. package/dist/collection/index.d.ts +4 -2
  30. package/dist/collection/index.js +1752 -1610
  31. package/dist/collection/rowLayout.d.ts +10 -0
  32. package/dist/collection/slots.d.ts +6 -3
  33. package/dist/describeError-l5T9b8Uv.js +41 -0
  34. package/dist/dialogStack-DZZg55w0.js +31 -0
  35. package/dist/form/CommandDialog.vue.d.ts +12 -1
  36. package/dist/form/FormGroup.vue.d.ts +1 -1
  37. package/dist/form/MultiSelectField.vue.d.ts +4 -1
  38. package/dist/form/NumberField.vue.d.ts +6 -0
  39. package/dist/form/OptionList.vue.d.ts +6 -2
  40. package/dist/form/SelectField.vue.d.ts +4 -1
  41. package/dist/form/index.d.ts +2 -0
  42. package/dist/form/index.js +1940 -2008
  43. package/dist/form/suggestions.d.ts +11 -0
  44. package/dist/form/useOptions.d.ts +60 -0
  45. package/dist/i18n/describeError.d.ts +31 -0
  46. package/dist/i18n/index.d.ts +26 -0
  47. package/dist/i18n/index.js +22 -20
  48. package/dist/index.d.ts +1 -1
  49. package/dist/index.js +1 -1
  50. package/dist/internal/CountryFlag.vue.d.ts +10 -0
  51. package/dist/modal/Modal.vue.d.ts +4 -0
  52. package/dist/modal/ShortcutHelp.vue.d.ts +2 -0
  53. package/dist/modal/index.d.ts +2 -0
  54. package/dist/modal/index.js +64 -6
  55. package/dist/modal/placement.d.ts +22 -0
  56. package/dist/{options-CjSz2dQK.js → options-DAkBtYkI.js} +3 -3
  57. package/dist/overlay/Popover.vue.d.ts +3 -0
  58. package/dist/overlay/dialogStack.d.ts +9 -0
  59. package/dist/overlay/index.d.ts +1 -1
  60. package/dist/overlay/index.js +18 -17
  61. package/dist/page/index.js +4 -4
  62. package/dist/phone/index.js +247 -540
  63. package/dist/platform/AccessGate.vue.d.ts +50 -0
  64. package/dist/platform/index.d.ts +2 -0
  65. package/dist/platform/index.js +86 -66
  66. package/dist/resource/index.js +42 -42
  67. package/dist/shell/AccountMenuItem.vue.d.ts +3 -0
  68. package/dist/shell/NavigationList.vue.d.ts +1 -1
  69. package/dist/shell/index.js +406 -394
  70. package/dist/state/Badge.vue.d.ts +17 -10
  71. package/dist/state/hue.d.ts +8 -0
  72. package/dist/state/index.d.ts +2 -0
  73. package/dist/state/index.js +92 -56
  74. package/dist/state/useLoad.d.ts +41 -0
  75. package/dist/styles.css +1 -1
  76. package/dist/testing/app.d.ts +61 -0
  77. package/dist/testing/async.d.ts +12 -0
  78. package/dist/testing/collection.d.ts +18 -0
  79. package/dist/testing/format.d.ts +9 -0
  80. package/dist/testing/i18n.d.ts +16 -0
  81. package/dist/testing/index.d.ts +14 -0
  82. package/dist/testing/index.js +178 -0
  83. package/dist/testing/media.d.ts +23 -0
  84. package/dist/testing/platform.d.ts +40 -0
  85. package/dist/testing/transport.d.ts +40 -0
  86. package/dist/{toast-BTeX0r66.js → toast-DvrHQ6Ag.js} +45 -43
  87. package/dist/{useDialog-wmyNx2j_.js → useDialog-CXR3hN0G.js} +1 -1
  88. package/package.json +5 -1
  89. package/src/styles/theme.css +60 -0
  90. package/dist/Badge.vue_vue_type_script_setup_true_lang-DKc6ugmr.js +0 -31
  91. package/dist/Button.vue_vue_type_script_setup_true_lang-3f0emVNU.js +0 -141
  92. package/dist/SelectField.vue_vue_type_script_setup_true_lang-SyFWE33A.js +0 -422
  93. package/dist/dialogStack-DiTG1rZc.js +0 -26
  94. package/dist/phone/CountryFlag.vue.d.ts +0 -10
  95. /package/dist/{phone → internal}/flagLoaders.d.ts +0 -0
@@ -1,26 +1,33 @@
1
+ import type { Hue } from "./hue";
1
2
  import type { Tone } from "./tone";
2
3
  /**
3
- * The one badge: a status, a phase, a source. The tone carries the meaning; shape, size and case
4
- * never change, so a screen full of badges reads as one system. A label, not a button: 6 px
5
- * corners, a hairline in the tone's own colour so it keeps an edge on white rows, medium weight.
4
+ * The one badge: a status, a phase, a source. Shape, size and case never change, so a screen full of
5
+ * badges reads as one system. A label, not a button: 6 px corners, a hairline in its own colour so it
6
+ * keeps an edge on white rows, medium weight. The label always shows; colour never carries the meaning alone.
7
+ *
8
+ * A status says what state something is in, by `tone`; a category tells things of one kind apart, by `hue`
9
+ * (nine, separate from the tones: a lead's source is not a warning).
6
10
  *
7
11
  * <Badge tone="warning" dot>Offer sent</Badge>
8
- * <Badge tone="context" dot>Instagram</Badge>
12
+ * <Badge hue="violet">Instagram</Badge> tinted
13
+ * <Badge hue="violet" appearance="dot">Instagram</Badge> neutral label with a coloured dot
9
14
  *
10
- * `context` is for information that is not a state (where a lead came from): full-contrast
11
- * neutral text on the cell surface.
15
+ * `tone="context"` is information that is not a state, in full-contrast neutral text on the cell surface.
12
16
  */
13
17
  type __VLS_Props = {
18
+ /** A state. Ignored when `hue` is given. */
14
19
  tone?: Tone | "context";
20
+ /** A dot before the label, in the tone's colour (tones only: a hue's dot is `appearance="dot"`). */
15
21
  dot?: boolean;
22
+ /** A category colour. */
23
+ hue?: Hue;
24
+ /** With a `hue`: `"tinted"` (default) colours the badge, `"dot"` keeps a neutral label and colours a dot. */
25
+ appearance?: "tinted" | "dot";
16
26
  };
17
27
  type __VLS_Slots = {
18
28
  default?: () => unknown;
19
29
  };
20
- declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
21
- tone: Tone | "context";
22
- dot: boolean;
23
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
30
+ declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
24
31
  declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
25
32
  export default _default;
26
33
  type __VLS_WithSlots<T, S> = T & {
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The category hues of `Badge`: nine colours for telling things of one kind apart (where a lead came
3
+ * from, a kind of document), never for a state. Separate from `Tone`, which owns red, green, orange
4
+ * and sky blue for meaning; every hue here has its own `category-<name>-content` / `-surface` roles in the
5
+ * theme, checked for text contrast in light and dark. The app maps its categories to hues in one place.
6
+ */
7
+ export declare const HUES: readonly ["amber", "lime", "teal", "cyan", "blue", "indigo", "violet", "fuchsia", "pink"];
8
+ export type Hue = (typeof HUES)[number];
@@ -1,6 +1,7 @@
1
1
  export { default as AsyncSection } from "./AsyncSection.vue";
2
2
  export { isEmptyValue, valueOf, type AsyncState } from "./async";
3
3
  export { default as Badge } from "./Badge.vue";
4
+ export { HUES, type Hue } from "./hue";
4
5
  export { default as Banner } from "./Banner.vue";
5
6
  export { default as DrawnCheck } from "./DrawnCheck.vue";
6
7
  export { default as EmptyState } from "./EmptyState.vue";
@@ -9,4 +10,5 @@ export { default as ProgressTrack } from "./ProgressTrack.vue";
9
10
  export { default as Skeleton } from "./Skeleton.vue";
10
11
  export { default as StatusLine } from "./StatusLine.vue";
11
12
  export type { Tone } from "./tone";
13
+ export { useLoad, type Load, type LoadContext, type LoadOptions } from "./useLoad";
12
14
  export { DONE_BEAT_MS, WAIT_VISIBLE_AFTER_MS, useWaitStatus } from "./useWaitStatus";
@@ -1,100 +1,136 @@
1
- import { _ as D, a as I, i as W, v as b } from "../AsyncSection.vue_vue_type_script_setup_true_lang-B82bl36A.js";
2
- import { _ as O } from "../Badge.vue_vue_type_script_setup_true_lang-DKc6ugmr.js";
3
- import { _ as P } from "../Banner.vue_vue_type_script_setup_true_lang-n_wGPIIu.js";
4
- import { a as f } from "../ProgressTrack.vue_vue_type_script_setup_true_lang-1DDaNs2W.js";
5
- import { _ as j } from "../ProgressTrack.vue_vue_type_script_setup_true_lang-1DDaNs2W.js";
6
- import { _ as G } from "../EmptyState.vue_vue_type_script_setup_true_lang-BeGpHMUP.js";
7
- import { defineComponent as m, computed as k, openBlock as e, createElementBlock as n, normalizeClass as p, createVNode as d, unref as i, createElementVNode as u, renderSlot as _, createBlock as S, toDisplayString as l, createCommentVNode as c } from "vue";
8
- import { _ as x } from "../Icon.vue_vue_type_script_lang-DtC4_mkz.js";
9
- import { useI18n as g } from "vue-i18n";
10
- import { D as J, W as K, u as Q } from "../useWaitStatus-fsacMl4W.js";
11
- const V = /* @__PURE__ */ m({
1
+ import { _ as ee, a as te, i as ae, v as se } from "../AsyncSection.vue_vue_type_script_setup_true_lang-CWLB3xsR.js";
2
+ import { _ as oe } from "../Badge.vue_vue_type_script_setup_true_lang-DJyZc0C7.js";
3
+ import { _ as le } from "../Banner.vue_vue_type_script_setup_true_lang-n_wGPIIu.js";
4
+ import { a as T } from "../ProgressTrack.vue_vue_type_script_setup_true_lang-1DDaNs2W.js";
5
+ import { _ as ce } from "../ProgressTrack.vue_vue_type_script_setup_true_lang-1DDaNs2W.js";
6
+ import { _ as de } from "../EmptyState.vue_vue_type_script_setup_true_lang-BeGpHMUP.js";
7
+ import { defineComponent as S, computed as v, openBlock as s, createElementBlock as o, normalizeClass as y, createVNode as E, unref as _, createElementVNode as b, renderSlot as B, createBlock as $, toDisplayString as k, createCommentVNode as w, shallowRef as A, watch as V, getCurrentScope as z, onScopeDispose as I } from "vue";
8
+ import { _ as L } from "../Icon.vue_vue_type_script_lang-DtC4_mkz.js";
9
+ import { useI18n as N } from "vue-i18n";
10
+ import { u as O } from "../describeError-l5T9b8Uv.js";
11
+ import { D as pe, W as fe, u as ve } from "../useWaitStatus-fsacMl4W.js";
12
+ const J = ["amber", "lime", "teal", "cyan", "blue", "indigo", "violet", "fuchsia", "pink"], K = /* @__PURE__ */ S({
12
13
  __name: "FieldNote",
13
14
  props: {
14
15
  tone: { default: "info" },
15
16
  icon: { default: void 0 }
16
17
  },
17
- setup(a) {
18
- const t = a, o = {
18
+ setup(r) {
19
+ const e = r, l = {
19
20
  info: { text: "text-content-muted", icon: "informationLine" },
20
21
  warning: { text: "text-status-warning-content", icon: "alertTriangle" },
21
22
  critical: { text: "text-status-danger-content", icon: "errorWarningLine" }
22
- }, s = k(() => o[t.tone]);
23
- return (r, B) => (e(), n("p", {
24
- class: p(["mt-1 flex items-start gap-1.5 text-xs", s.value.text])
23
+ }, a = v(() => l[e.tone]);
24
+ return (i, t) => (s(), o("p", {
25
+ class: y(["mt-1 flex items-start gap-1.5 text-xs", a.value.text])
25
26
  }, [
26
- d(i(x), {
27
- name: t.icon ?? s.value.icon,
27
+ E(_(L), {
28
+ name: e.icon ?? a.value.icon,
28
29
  size: 14,
29
30
  class: "mt-px"
30
31
  }, null, 8, ["name"]),
31
- u("span", null, [
32
- _(r.$slots, "default")
32
+ b("span", null, [
33
+ B(i.$slots, "default")
33
34
  ])
34
35
  ], 2));
35
36
  }
36
- }), h = ["data-done"], v = {
37
+ }), W = ["data-done"], F = {
37
38
  class: "flex min-w-0 items-center gap-2.5 text-subheadline",
38
39
  role: "status",
39
40
  "aria-live": "polite"
40
- }, y = {
41
+ }, M = {
41
42
  key: 0,
42
43
  class: "text-content-link"
43
- }, E = {
44
+ }, R = {
44
45
  key: 2,
45
46
  class: "ml-auto shrink-0 pl-2 text-footnote tabular-nums text-content-muted",
46
47
  "data-status-elapsed": ""
47
- }, w = {
48
+ }, H = {
48
49
  key: 0,
49
50
  class: "pl-6.5 text-footnote"
50
- }, z = /* @__PURE__ */ m({
51
+ }, Q = /* @__PURE__ */ S({
51
52
  __name: "StatusLine",
52
53
  props: {
53
54
  text: {},
54
55
  done: { type: Boolean },
55
56
  elapsed: {}
56
57
  },
57
- setup(a) {
58
- const t = a, { t: o } = g();
59
- return (s, r) => (e(), n("div", {
58
+ setup(r) {
59
+ const e = r, { t: l } = N();
60
+ return (a, i) => (s(), o("div", {
60
61
  class: "flex min-w-0 flex-col gap-1",
61
- "data-done": t.done || void 0
62
+ "data-done": e.done || void 0
62
63
  }, [
63
- u("div", v, [
64
- t.done ? (e(), n("span", y, [
65
- d(f, { size: 16 })
66
- ])) : (e(), S(i(x), {
64
+ b("div", F, [
65
+ e.done ? (s(), o("span", M, [
66
+ E(T, { size: 16 })
67
+ ])) : (s(), $(_(L), {
67
68
  key: 1,
68
69
  name: "loader4Line",
69
70
  size: 16,
70
71
  class: "animate-spin text-content-link"
71
72
  })),
72
- (e(), n("span", {
73
- key: t.text,
74
- class: p(["min-w-0 animate-text-swap", t.done ? "font-semibold text-content-link" : "text-shimmer"]),
73
+ (s(), o("span", {
74
+ key: e.text,
75
+ class: y(["min-w-0 animate-text-swap", e.done ? "font-semibold text-content-link" : "text-shimmer"]),
75
76
  "data-status-text": ""
76
- }, l(t.text), 3)),
77
- t.elapsed != null ? (e(), n("span", E, l(i(o)("core.wait.seconds", { count: t.elapsed })), 1)) : c("", !0)
77
+ }, k(e.text), 3)),
78
+ e.elapsed != null ? (s(), o("span", R, k(_(l)("core.wait.seconds", { count: e.elapsed })), 1)) : w("", !0)
78
79
  ]),
79
- s.$slots.default ? (e(), n("div", w, [
80
- _(s.$slots, "default")
81
- ])) : c("", !0)
82
- ], 8, h));
80
+ a.$slots.default ? (s(), o("div", H, [
81
+ B(a.$slots, "default")
82
+ ])) : w("", !0)
83
+ ], 8, W));
83
84
  }
84
85
  });
86
+ function X(r, e = {}) {
87
+ const { t: l } = N(), a = O(), i = e.errorMessage ?? ((n) => a(n, { fallback: l("core.resource.unavailable") })), t = A({ status: "loading" });
88
+ let u = 0, d = null;
89
+ function m() {
90
+ return d?.abort(), d = null, ++u;
91
+ }
92
+ async function p() {
93
+ const n = m(), x = t.value, c = "value" in x ? x : null;
94
+ t.value = c ? { status: "refreshing", value: c.value } : { status: "loading" };
95
+ const g = new AbortController();
96
+ d = g;
97
+ try {
98
+ const f = await r({ signal: g.signal });
99
+ n === u && (t.value = { status: "loaded", value: f });
100
+ } catch (f) {
101
+ if (n !== u) return;
102
+ const h = i(f);
103
+ t.value = c ? { status: "stale", value: c.value, error: h } : { status: "failed", error: h };
104
+ }
105
+ }
106
+ function C(n) {
107
+ m(), t.value = { status: "loaded", value: n };
108
+ }
109
+ function D() {
110
+ t.value = { status: "loading" }, p();
111
+ }
112
+ return e.watch !== void 0 ? V(e.watch, D, { immediate: e.immediate ?? !0 }) : (e.immediate ?? !0) && p(), z() && I(m), {
113
+ state: v(() => t.value),
114
+ data: v(() => "value" in t.value ? t.value.value : null),
115
+ reload: p,
116
+ update: C
117
+ };
118
+ }
85
119
  export {
86
- D as AsyncSection,
87
- O as Badge,
88
- P as Banner,
89
- J as DONE_BEAT_MS,
90
- f as DrawnCheck,
91
- G as EmptyState,
92
- V as FieldNote,
93
- j as ProgressTrack,
94
- I as Skeleton,
95
- z as StatusLine,
96
- K as WAIT_VISIBLE_AFTER_MS,
97
- W as isEmptyValue,
98
- Q as useWaitStatus,
99
- b as valueOf
120
+ ee as AsyncSection,
121
+ oe as Badge,
122
+ le as Banner,
123
+ pe as DONE_BEAT_MS,
124
+ T as DrawnCheck,
125
+ de as EmptyState,
126
+ K as FieldNote,
127
+ J as HUES,
128
+ ce as ProgressTrack,
129
+ te as Skeleton,
130
+ Q as StatusLine,
131
+ fe as WAIT_VISIBLE_AFTER_MS,
132
+ ae as isEmptyValue,
133
+ X as useLoad,
134
+ ve as useWaitStatus,
135
+ se as valueOf
100
136
  };
@@ -0,0 +1,41 @@
1
+ import { type ComputedRef, type WatchSource } from "vue";
2
+ import type { AsyncState } from "./async";
3
+ export interface LoadContext {
4
+ /** Aborted when the load is no longer wanted: a newer load or an `update` superseded it, the watch source changed, the scope ended. */
5
+ readonly signal: AbortSignal;
6
+ }
7
+ export interface LoadOptions {
8
+ /**
9
+ * Load again, from nothing, whenever this changes: the thing shown is another one (a route parameter, a
10
+ * selected tab). The previous value is cleared (`loading`), because it belongs to what was left.
11
+ */
12
+ readonly watch?: WatchSource<unknown> | readonly WatchSource<unknown>[];
13
+ /** Load at once (default true); false waits for `reload()` or a change of the watch source. */
14
+ readonly immediate?: boolean;
15
+ /** The text of a failed load; by default `describeError` with "An error occurred while loading data". */
16
+ readonly errorMessage?: (error: unknown) => string;
17
+ }
18
+ /** What `useLoad` gives: the `AsyncState` (so `AsyncSection` takes it as it is) and the two ways to change it. */
19
+ export interface Load<T> {
20
+ readonly state: ComputedRef<AsyncState<T>>;
21
+ /** The loaded value, null while loading or failed. */
22
+ readonly data: ComputedRef<T | null>;
23
+ /** Loads again, keeping the value on screen (`refreshing`, or `stale` when it failed); settles when the load has ended (applied or dropped). */
24
+ reload(): Promise<void>;
25
+ /** Replaces the value with what a mutation returned (no request) and drops every load still in flight, so none can bring back an older state. */
26
+ update(value: T): void;
27
+ }
28
+ /**
29
+ * One load for a region that has no identity of its own: a list, the settings of a page, a block of
30
+ * a record page. (`useResource` is the same for a record read by id; `useCollection` for a paged,
31
+ * filtered list.) Latest wins: a load that was left behind is aborted and its answer dropped, and
32
+ * nothing lands after the scope ended.
33
+ *
34
+ * const settings = useLoad(({ signal }) => api.settings({ signal }));
35
+ * <AsyncSection :state="settings.state.value" @retry="settings.reload()">
36
+ * <template #default="{ value }"><SettingsForm :settings="value" /></template>
37
+ * </AsyncSection>
38
+ *
39
+ * With `watch` it starts over when a source changes (`{ watch: () => route.params.id }`).
40
+ */
41
+ export declare function useLoad<T>(load: (context: LoadContext) => Promise<T>, options?: LoadOptions): Load<T>;