foldkit 0.39.0 → 0.41.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 (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +24 -20
  3. package/dist/command/index.d.ts +7 -5
  4. package/dist/command/index.d.ts.map +1 -1
  5. package/dist/command/index.js +2 -2
  6. package/dist/devtools/overlay.d.ts +34 -1
  7. package/dist/devtools/overlay.d.ts.map +1 -1
  8. package/dist/devtools/overlay.js +42 -13
  9. package/dist/devtools/store.d.ts +2 -1
  10. package/dist/devtools/store.d.ts.map +1 -1
  11. package/dist/devtools/store.js +4 -1
  12. package/dist/fieldValidation/index.d.ts +45 -37
  13. package/dist/fieldValidation/index.d.ts.map +1 -1
  14. package/dist/fieldValidation/public.d.ts +1 -1
  15. package/dist/fieldValidation/public.d.ts.map +1 -1
  16. package/dist/index.d.ts +1 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +1 -0
  19. package/dist/runtime/browserListeners.d.ts +2 -2
  20. package/dist/runtime/browserListeners.js +11 -11
  21. package/dist/runtime/crashUI.d.ts.map +1 -1
  22. package/dist/runtime/crashUI.js +1 -3
  23. package/dist/runtime/public.d.ts +2 -2
  24. package/dist/runtime/public.d.ts.map +1 -1
  25. package/dist/runtime/public.js +1 -1
  26. package/dist/runtime/runtime.d.ts +34 -49
  27. package/dist/runtime/runtime.d.ts.map +1 -1
  28. package/dist/runtime/runtime.js +21 -43
  29. package/dist/test/index.d.ts +40 -0
  30. package/dist/test/index.d.ts.map +1 -0
  31. package/dist/test/index.js +138 -0
  32. package/dist/test/public.d.ts +3 -0
  33. package/dist/test/public.d.ts.map +1 -0
  34. package/dist/test/public.js +1 -0
  35. package/dist/ui/checkbox/index.d.ts +1 -1
  36. package/dist/ui/checkbox/index.d.ts.map +1 -1
  37. package/dist/ui/combobox/multi.d.ts +1 -1
  38. package/dist/ui/combobox/shared.d.ts +34 -1
  39. package/dist/ui/combobox/shared.d.ts.map +1 -1
  40. package/dist/ui/combobox/shared.js +10 -10
  41. package/dist/ui/combobox/single.d.ts +1 -1
  42. package/dist/ui/dialog/index.d.ts +13 -1
  43. package/dist/ui/dialog/index.d.ts.map +1 -1
  44. package/dist/ui/dialog/index.js +4 -4
  45. package/dist/ui/disclosure/index.d.ts +4 -1
  46. package/dist/ui/disclosure/index.d.ts.map +1 -1
  47. package/dist/ui/disclosure/index.js +1 -1
  48. package/dist/ui/listbox/multi.d.ts +1 -1
  49. package/dist/ui/listbox/shared.d.ts +40 -1
  50. package/dist/ui/listbox/shared.d.ts.map +1 -1
  51. package/dist/ui/listbox/shared.js +12 -12
  52. package/dist/ui/listbox/single.d.ts +1 -1
  53. package/dist/ui/menu/index.d.ts +40 -1
  54. package/dist/ui/menu/index.d.ts.map +1 -1
  55. package/dist/ui/menu/index.js +12 -12
  56. package/dist/ui/popover/index.d.ts +30 -1
  57. package/dist/ui/popover/index.d.ts.map +1 -1
  58. package/dist/ui/popover/index.js +9 -9
  59. package/dist/ui/radioGroup/index.d.ts +4 -1
  60. package/dist/ui/radioGroup/index.d.ts.map +1 -1
  61. package/dist/ui/radioGroup/index.js +1 -1
  62. package/dist/ui/switch/index.d.ts +1 -1
  63. package/dist/ui/switch/index.d.ts.map +1 -1
  64. package/dist/ui/tabs/index.d.ts +4 -1
  65. package/dist/ui/tabs/index.d.ts.map +1 -1
  66. package/dist/ui/tabs/index.js +1 -1
  67. package/package.json +15 -11
@@ -92,9 +92,7 @@ export const defaultCrashView = (context, viewError) => {
92
92
  'This is the default crash view. You can customize it by providing a ',
93
93
  span([inlineCodeStyle], ['crash.view']),
94
94
  ' function to ',
95
- span([inlineCodeStyle], ['makeElement']),
96
- ' or ',
97
- span([inlineCodeStyle], ['makeApplication']),
95
+ span([inlineCodeStyle], ['makeProgram']),
98
96
  '.',
99
97
  ]),
100
98
  ];
@@ -1,5 +1,5 @@
1
- export { makeElement, makeApplication, run } from './runtime';
2
- export type { BrowserConfig, CrashConfig, CrashContext, ElementConfigWithFlags, ElementConfigWithoutFlags, ApplicationConfigWithFlags, ApplicationConfigWithoutFlags, ElementInit, ApplicationInit, MakeRuntimeReturn, Visibility, SlowViewContext, SlowViewConfig, DevtoolsConfig, } from './runtime';
1
+ export { makeProgram, run } from './runtime';
2
+ export type { RoutingConfig, CrashConfig, CrashContext, RoutingProgramConfigWithFlags, RoutingProgramConfig, ProgramConfigWithFlags, ProgramConfig, ProgramInit, RoutingProgramInit, MakeRuntimeReturn, Visibility, SlowViewContext, SlowViewConfig, DevtoolsConfig, } from './runtime';
3
3
  export { UrlRequest } from './urlRequest';
4
4
  export type { Internal, External } from './urlRequest';
5
5
  //# sourceMappingURL=public.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/runtime/public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAE7D,YAAY,EACV,aAAa,EACb,WAAW,EACX,YAAY,EACZ,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,6BAA6B,EAC7B,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,eAAe,EACf,cAAc,EACd,cAAc,GACf,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/runtime/public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAE5C,YAAY,EACV,aAAa,EACb,WAAW,EACX,YAAY,EACZ,6BAA6B,EAC7B,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,eAAe,EACf,cAAc,EACd,cAAc,GACf,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA"}
@@ -1,2 +1,2 @@
1
- export { makeElement, makeApplication, run } from './runtime';
1
+ export { makeProgram, run } from './runtime';
2
2
  export { UrlRequest } from './urlRequest';
@@ -60,8 +60,8 @@ declare const Dispatch_base: Context.TagClass<Dispatch, "@foldkit/Dispatch", {
60
60
  export declare class Dispatch extends Dispatch_base {
61
61
  }
62
62
  export type { Command } from '../command';
63
- /** Configuration for browser URL integration with handlers for URL requests and URL changes. */
64
- export type BrowserConfig<Message> = Readonly<{
63
+ /** Configuration for URL routing with handlers for URL requests and URL changes. */
64
+ export type RoutingConfig<Message> = Readonly<{
65
65
  onUrlRequest: (request: UrlRequest) => Message;
66
66
  onUrlChange: (url: Url) => Message;
67
67
  }>;
@@ -76,9 +76,9 @@ export type CrashConfig<Model, Message> = Readonly<{
76
76
  view?: (context: CrashContext<Model, Message>) => Html;
77
77
  report?: (context: CrashContext<Model, Message>) => void;
78
78
  }>;
79
- type BaseElementConfig<Model, Message, StreamDepsMap extends Schema.Struct<Schema.Struct.Fields>, Resources = never, ManagedResourceServices = never> = Readonly<{
79
+ type BaseProgramConfig<Model, Message, StreamDepsMap extends Schema.Struct<Schema.Struct.Fields>, Resources = never, ManagedResourceServices = never> = Readonly<{
80
80
  Model: Schema.Schema<Model, any, never>;
81
- update: (model: Model, message: Message) => [
81
+ update: (model: Model, message: Message) => readonly [
82
82
  Model,
83
83
  ReadonlyArray<Command<Message, never, Resources | ManagedResourceServices>>
84
84
  ];
@@ -91,86 +91,71 @@ type BaseElementConfig<Model, Message, StreamDepsMap extends Schema.Struct<Schem
91
91
  managedResources?: ManagedResources<Model, Message, ManagedResourceServices>;
92
92
  devtools?: DevtoolsConfig;
93
93
  }>;
94
- /** Configuration for `makeElement` when the element receives initial data via flags. */
95
- export type ElementConfigWithFlags<Model, Message, StreamDepsMap extends Schema.Struct<Schema.Struct.Fields>, Flags, Resources = never, ManagedResourceServices = never> = BaseElementConfig<Model, Message, StreamDepsMap, Resources, ManagedResourceServices> & Readonly<{
94
+ /** Configuration for `makeProgram` with flags and URL routing. */
95
+ export type RoutingProgramConfigWithFlags<Model, Message, StreamDepsMap extends Schema.Struct<Schema.Struct.Fields>, Flags, Resources = never, ManagedResourceServices = never> = BaseProgramConfig<Model, Message, StreamDepsMap, Resources, ManagedResourceServices> & Readonly<{
96
96
  Flags: Schema.Schema<Flags, any, never>;
97
97
  flags: Effect.Effect<Flags>;
98
- init: (flags: Flags) => [
98
+ routing: RoutingConfig<Message>;
99
+ init: (flags: Flags, url: Url) => readonly [
99
100
  Model,
100
101
  ReadonlyArray<Command<Message, never, Resources | ManagedResourceServices>>
101
102
  ];
102
103
  }>;
103
- /** Configuration for `makeElement` without flags. */
104
- export type ElementConfigWithoutFlags<Model, Message, StreamDepsMap extends Schema.Struct<Schema.Struct.Fields>, Resources = never, ManagedResourceServices = never> = BaseElementConfig<Model, Message, StreamDepsMap, Resources, ManagedResourceServices> & Readonly<{
105
- init: () => [
104
+ /** Configuration for `makeProgram` with URL routing but no flags. */
105
+ export type RoutingProgramConfig<Model, Message, StreamDepsMap extends Schema.Struct<Schema.Struct.Fields>, Resources = never, ManagedResourceServices = never> = BaseProgramConfig<Model, Message, StreamDepsMap, Resources, ManagedResourceServices> & Readonly<{
106
+ routing: RoutingConfig<Message>;
107
+ init: (url: Url) => readonly [
106
108
  Model,
107
109
  ReadonlyArray<Command<Message, never, Resources | ManagedResourceServices>>
108
110
  ];
109
111
  }>;
110
- type BaseApplicationConfig<Model, Message, StreamDepsMap extends Schema.Struct<Schema.Struct.Fields>, Resources = never, ManagedResourceServices = never> = Readonly<{
111
- Model: Schema.Schema<Model, any, never>;
112
- update: (model: Model, message: Message) => [
113
- Model,
114
- ReadonlyArray<Command<Message, never, Resources | ManagedResourceServices>>
115
- ];
116
- view: (model: Model) => Html;
117
- subscriptions?: Subscriptions<Model, Message, StreamDepsMap, Resources | ManagedResourceServices>;
118
- container: HTMLElement;
119
- browser: BrowserConfig<Message>;
120
- crash?: CrashConfig<Model, Message>;
121
- slowView?: SlowViewConfig<Model, Message>;
122
- resources?: Layer.Layer<Resources>;
123
- managedResources?: ManagedResources<Model, Message, ManagedResourceServices>;
124
- devtools?: DevtoolsConfig;
125
- }>;
126
- /** Configuration for `makeApplication` when the application receives initial data via flags. */
127
- export type ApplicationConfigWithFlags<Model, Message, StreamDepsMap extends Schema.Struct<Schema.Struct.Fields>, Flags, Resources = never, ManagedResourceServices = never> = BaseApplicationConfig<Model, Message, StreamDepsMap, Resources, ManagedResourceServices> & Readonly<{
112
+ /** Configuration for `makeProgram` with flags but no URL routing. */
113
+ export type ProgramConfigWithFlags<Model, Message, StreamDepsMap extends Schema.Struct<Schema.Struct.Fields>, Flags, Resources = never, ManagedResourceServices = never> = BaseProgramConfig<Model, Message, StreamDepsMap, Resources, ManagedResourceServices> & Readonly<{
128
114
  Flags: Schema.Schema<Flags, any, never>;
129
115
  flags: Effect.Effect<Flags>;
130
- init: (flags: Flags, url: Url) => [
116
+ init: (flags: Flags) => readonly [
131
117
  Model,
132
118
  ReadonlyArray<Command<Message, never, Resources | ManagedResourceServices>>
133
119
  ];
134
120
  }>;
135
- /** Configuration for `makeApplication` without flags. */
136
- export type ApplicationConfigWithoutFlags<Model, Message, StreamDepsMap extends Schema.Struct<Schema.Struct.Fields>, Resources = never, ManagedResourceServices = never> = BaseApplicationConfig<Model, Message, StreamDepsMap, Resources, ManagedResourceServices> & Readonly<{
137
- init: (url: Url) => [
121
+ /** Configuration for `makeProgram` without flags or URL routing. */
122
+ export type ProgramConfig<Model, Message, StreamDepsMap extends Schema.Struct<Schema.Struct.Fields>, Resources = never, ManagedResourceServices = never> = BaseProgramConfig<Model, Message, StreamDepsMap, Resources, ManagedResourceServices> & Readonly<{
123
+ init: () => readonly [
138
124
  Model,
139
125
  ReadonlyArray<Command<Message, never, Resources | ManagedResourceServices>>
140
126
  ];
141
127
  }>;
142
- /** The `init` function type for elements, with an optional `flags` parameter when `Flags` is not `void`. */
143
- export type ElementInit<Model, Message, Flags = void, Resources = never, ManagedResourceServices = never> = Flags extends void ? () => [
128
+ /** The `init` function type for programs without URL routing. */
129
+ export type ProgramInit<Model, Message, Flags = void, Resources = never, ManagedResourceServices = never> = Flags extends void ? () => readonly [
144
130
  Model,
145
131
  ReadonlyArray<Command<Message, never, Resources | ManagedResourceServices>>
146
- ] : (flags: Flags) => [
132
+ ] : (flags: Flags) => readonly [
147
133
  Model,
148
134
  ReadonlyArray<Command<Message, never, Resources | ManagedResourceServices>>
149
135
  ];
150
- /** The `init` function type for applications, receives the current URL and optional flags. */
151
- export type ApplicationInit<Model, Message, Flags = void, Resources = never, ManagedResourceServices = never> = Flags extends void ? (url: Url) => [
136
+ /** The `init` function type for programs with URL routing, receives the current URL and optional flags. */
137
+ export type RoutingProgramInit<Model, Message, Flags = void, Resources = never, ManagedResourceServices = never> = Flags extends void ? (url: Url) => readonly [
152
138
  Model,
153
139
  ReadonlyArray<Command<Message, never, Resources | ManagedResourceServices>>
154
- ] : (flags: Flags, url: Url) => [
140
+ ] : (flags: Flags, url: Url) => readonly [
155
141
  Model,
156
142
  ReadonlyArray<Command<Message, never, Resources | ManagedResourceServices>>
157
143
  ];
158
- /** A configured Foldkit runtime returned by `makeElement` or `makeApplication`, passed to `run` to start the application. */
144
+ /** A configured Foldkit runtime returned by `makeProgram`, passed to `run` to start the application. */
159
145
  export type MakeRuntimeReturn = (hmrModel?: unknown) => Effect.Effect<void>;
160
- /** Creates a Foldkit element (no URL routing) and returns a runtime that can be passed to `run`. */
161
- export declare function makeElement<Model, Message extends {
146
+ /** Creates a Foldkit program and returns a runtime that can be passed to `run`. Add a `routing` config for URL routing. */
147
+ export declare function makeProgram<Model, Message extends {
162
148
  _tag: string;
163
- }, StreamDepsMap extends Schema.Struct<Schema.Struct.Fields>, Flags, Resources = never, ManagedResourceServices = never>(config: ElementConfigWithFlags<Model, Message, StreamDepsMap, Flags, Resources, ManagedResourceServices>): MakeRuntimeReturn;
164
- export declare function makeElement<Model, Message extends {
149
+ }, StreamDepsMap extends Schema.Struct<Schema.Struct.Fields>, Flags, Resources = never, ManagedResourceServices = never>(config: RoutingProgramConfigWithFlags<Model, Message, StreamDepsMap, Flags, Resources, ManagedResourceServices>): MakeRuntimeReturn;
150
+ export declare function makeProgram<Model, Message extends {
165
151
  _tag: string;
166
- }, StreamDepsMap extends Schema.Struct<Schema.Struct.Fields>, Resources = never, ManagedResourceServices = never>(config: ElementConfigWithoutFlags<Model, Message, StreamDepsMap, Resources, ManagedResourceServices>): MakeRuntimeReturn;
167
- /** Creates a Foldkit application with URL routing and returns a runtime that can be passed to `run`. */
168
- export declare function makeApplication<Model, Message extends {
152
+ }, StreamDepsMap extends Schema.Struct<Schema.Struct.Fields>, Resources = never, ManagedResourceServices = never>(config: RoutingProgramConfig<Model, Message, StreamDepsMap, Resources, ManagedResourceServices>): MakeRuntimeReturn;
153
+ export declare function makeProgram<Model, Message extends {
169
154
  _tag: string;
170
- }, StreamDepsMap extends Schema.Struct<Schema.Struct.Fields>, Flags, Resources = never, ManagedResourceServices = never>(config: ApplicationConfigWithFlags<Model, Message, StreamDepsMap, Flags, Resources, ManagedResourceServices>): MakeRuntimeReturn;
171
- export declare function makeApplication<Model, Message extends {
155
+ }, StreamDepsMap extends Schema.Struct<Schema.Struct.Fields>, Flags, Resources = never, ManagedResourceServices = never>(config: ProgramConfigWithFlags<Model, Message, StreamDepsMap, Flags, Resources, ManagedResourceServices>): MakeRuntimeReturn;
156
+ export declare function makeProgram<Model, Message extends {
172
157
  _tag: string;
173
- }, StreamDepsMap extends Schema.Struct<Schema.Struct.Fields>, Resources = never, ManagedResourceServices = never>(config: ApplicationConfigWithoutFlags<Model, Message, StreamDepsMap, Resources, ManagedResourceServices>): MakeRuntimeReturn;
158
+ }, StreamDepsMap extends Schema.Struct<Schema.Struct.Fields>, Resources = never, ManagedResourceServices = never>(config: ProgramConfig<Model, Message, StreamDepsMap, Resources, ManagedResourceServices>): MakeRuntimeReturn;
174
159
  /** Starts a Foldkit runtime, with HMR support for development. */
175
160
  export declare const run: (foldkitRuntime: MakeRuntimeReturn) => void;
176
161
  //# sourceMappingURL=runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"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"}
@@ -27,7 +27,7 @@ const defaultSlowViewCallback = (context) => {
27
27
  /** Effect service tag that provides message dispatching to the view layer. */
28
28
  export class Dispatch extends Context.Tag('@foldkit/Dispatch')() {
29
29
  }
30
- const makeRuntime = ({ Model, flags: resolveFlags, init, update, view, subscriptions, container, browser: browserConfig, crash, slowView, resources, managedResources, devtools, }) => {
30
+ const makeRuntime = ({ Model, flags: resolveFlags, init, update, view, subscriptions, container, routing: routingConfig, crash, slowView, resources, managedResources, devtools, }) => {
31
31
  const resolvedSlowView = pipe(slowView ?? {}, Option.liftPredicate(config => config !== false), Option.filter(config => Match.value(config.show ?? DEFAULT_SLOW_VIEW_SHOW).pipe(Match.when('Always', () => true), Match.when('Development', () => !!import.meta.hot), Match.exhaustive)), Option.map(config => ({
32
32
  thresholdMs: config.thresholdMs ?? DEFAULT_SLOW_VIEW_THRESHOLD_MS,
33
33
  onSlowView: config.onSlowView ?? defaultSlowViewCallback,
@@ -67,7 +67,7 @@ const makeRuntime = ({ Model, flags: resolveFlags, init, update, view, subscript
67
67
  const modelEquivalence = Schema.equivalence(Model);
68
68
  const messageQueue = yield* Queue.unbounded();
69
69
  const enqueueMessage = (message) => Queue.offer(messageQueue, message);
70
- const currentUrl = Option.fromNullable(browserConfig).pipe(Option.flatMap(() => urlFromString(window.location.href)));
70
+ const currentUrl = Option.fromNullable(routingConfig).pipe(Option.flatMap(() => urlFromString(window.location.href)));
71
71
  const [initModel, initCommands] = Predicate.isNotUndefined(hmrModel)
72
72
  ? pipe(hmrModel, Schema.decodeUnknownEither(Model), Either.match({
73
73
  onLeft: () => init(flags, Option.getOrUndefined(currentUrl)),
@@ -78,8 +78,8 @@ const makeRuntime = ({ Model, flags: resolveFlags, init, update, view, subscript
78
78
  yield* Effect.forEach(
79
79
  /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions */
80
80
  initCommands, command => Effect.forkDaemon(command.effect.pipe(Effect.withSpan(command.name), provideAllResources, Effect.flatMap(enqueueMessage))));
81
- if (browserConfig) {
82
- addNavigationEventListeners(messageQueue, browserConfig);
81
+ if (routingConfig) {
82
+ addNavigationEventListeners(messageQueue, routingConfig);
83
83
  }
84
84
  const modelRef = yield* Ref.make(initModel);
85
85
  const maybeCurrentVNodeRef = yield* Ref.make(Option.none());
@@ -189,7 +189,7 @@ const makeRuntime = ({ Model, flags: resolveFlags, init, update, view, subscript
189
189
  getCurrentModel: Ref.get(modelRef),
190
190
  });
191
191
  yield* Ref.set(maybeDevtoolsStoreRef, Option.some(devtoolsStore));
192
- yield* devtoolsStore.recordInit(initModel);
192
+ yield* devtoolsStore.recordInit(initModel, Array.map(initCommands, ({ name }) => name));
193
193
  yield* createOverlay(devtoolsStore, position, mode, maybeBanner);
194
194
  }
195
195
  yield* render(initModel, Option.none());
@@ -284,13 +284,19 @@ const renderCrashView = (context, crash, container, maybeCurrentVNodeRef) => {
284
284
  patchVNode(maybeCurrentVNode, vnode, container);
285
285
  }
286
286
  };
287
- export function makeElement(config) {
287
+ export function makeProgram(config) {
288
+ const hasRouting = 'routing' in config;
289
+ const hasFlags = 'Flags' in config;
290
+ const currentUrl = hasRouting
291
+ ? Option.getOrThrow(urlFromString(window.location.href))
292
+ : undefined;
288
293
  const baseConfig = {
289
294
  Model: config.Model,
290
295
  update: config.update,
291
296
  view: config.view,
292
297
  ...(config.subscriptions && { subscriptions: config.subscriptions }),
293
298
  container: config.container,
299
+ ...(hasRouting && { routing: config.routing }),
294
300
  ...(config.crash && { crash: config.crash }),
295
301
  ...(Predicate.isNotUndefined(config.slowView) && {
296
302
  slowView: config.slowView,
@@ -303,68 +309,40 @@ export function makeElement(config) {
303
309
  devtools: config.devtools,
304
310
  }),
305
311
  };
306
- if ('Flags' in config) {
307
- /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions */
312
+ /* eslint-disable @typescript-eslint/consistent-type-assertions */
313
+ if (hasFlags && hasRouting) {
308
314
  return makeRuntime({
309
315
  ...baseConfig,
310
316
  Flags: config.Flags,
311
317
  flags: config.flags,
312
- init: (flags) =>
313
- /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions */
314
- config.init(flags),
318
+ init: (flags, url) => config.init(flags, url ?? currentUrl),
315
319
  });
316
320
  }
317
- else {
318
- /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions */
321
+ else if (hasRouting) {
319
322
  return makeRuntime({
320
323
  ...baseConfig,
321
324
  Flags: Schema.Void,
322
325
  flags: Effect.succeed(undefined),
323
- init: () => config.init(),
326
+ init: (_flags, url) => config.init(url ?? currentUrl),
324
327
  });
325
328
  }
326
- }
327
- export function makeApplication(config) {
328
- const currentUrl = Option.getOrThrow(urlFromString(window.location.href));
329
- const baseConfig = {
330
- Model: config.Model,
331
- update: config.update,
332
- view: config.view,
333
- ...(config.subscriptions && { subscriptions: config.subscriptions }),
334
- container: config.container,
335
- browser: config.browser,
336
- ...(config.crash && { crash: config.crash }),
337
- ...(Predicate.isNotUndefined(config.slowView) && {
338
- slowView: config.slowView,
339
- }),
340
- ...(config.resources && { resources: config.resources }),
341
- ...(config.managedResources && {
342
- managedResources: config.managedResources,
343
- }),
344
- ...(Predicate.isNotUndefined(config.devtools) && {
345
- devtools: config.devtools,
346
- }),
347
- };
348
- if ('Flags' in config) {
349
- /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions */
329
+ else if (hasFlags) {
350
330
  return makeRuntime({
351
331
  ...baseConfig,
352
332
  Flags: config.Flags,
353
333
  flags: config.flags,
354
- init: (flags, url) =>
355
- /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions */
356
- config.init(flags, url ?? currentUrl),
334
+ init: (flags) => config.init(flags),
357
335
  });
358
336
  }
359
337
  else {
360
- /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions */
361
338
  return makeRuntime({
362
339
  ...baseConfig,
363
340
  Flags: Schema.Void,
364
341
  flags: Effect.succeed(undefined),
365
- init: (_flags, url) => config.init(url ?? currentUrl),
342
+ init: () => config.init(),
366
343
  });
367
344
  }
345
+ /* eslint-enable @typescript-eslint/consistent-type-assertions */
368
346
  }
369
347
  const preserveModel = (model) => {
370
348
  if (import.meta.hot) {
@@ -0,0 +1,40 @@
1
+ import type { CommandDefinition } from '../command';
2
+ /** A Command in a test simulation, identified by name. */
3
+ export type AnyCommand = Readonly<{
4
+ name: string;
5
+ }>;
6
+ /** An immutable test simulation of a Foldkit program. */
7
+ export type Simulation<Model, Message, OutMessage = undefined> = Readonly<{
8
+ model: Model;
9
+ message: Message | undefined;
10
+ commands: ReadonlyArray<AnyCommand>;
11
+ outMessage: OutMessage;
12
+ }>;
13
+ /** A callable step that sets the initial Model. Carries phantom type for compile-time validation. */
14
+ export type WithStep<Model> = Readonly<{
15
+ _phantomModel: Model;
16
+ }> & (<M, Message, OutMessage = undefined>(simulation: Simulation<M, Message, OutMessage>) => Simulation<M, Message, OutMessage>);
17
+ /** Sets the initial Model for a test story. */
18
+ export { with_ as with };
19
+ declare const with_: <Model>(model: Model) => WithStep<Model>;
20
+ /** Sends a Message through update. Commands stay pending until resolve or resolveAll. */
21
+ export declare const message: <Message>(message_: NoInfer<Message>) => <Model, OutMessage = undefined>(simulation: Simulation<Model, Message, OutMessage>) => Simulation<Model, Message, OutMessage>;
22
+ /** Resolves a specific pending Command with the given result Message. */
23
+ export declare const resolve: {
24
+ <Name extends string, ResultMessage>(definition: CommandDefinition<Name, ResultMessage>, resultMessage: ResultMessage): <Model, Message, OutMessage = undefined>(simulation: Simulation<Model, Message, OutMessage>) => Simulation<Model, Message, OutMessage>;
25
+ <Name extends string, ResultMessage, ParentMessage>(definition: CommandDefinition<Name, ResultMessage>, resultMessage: ResultMessage, toParentMessage: (message: ResultMessage) => ParentMessage): <Model, Message, OutMessage = undefined>(simulation: Simulation<Model, Message, OutMessage>) => Simulation<Model, Message, OutMessage>;
26
+ };
27
+ /** A Command definition paired with the result Message to resolve it with. */
28
+ export type ResolverPair<Name extends string = string, ResultMessage = unknown> = readonly [CommandDefinition<Name, ResultMessage>, ResultMessage];
29
+ /** Resolves all listed Commands with their result Messages. Handles cascading resolution. */
30
+ export declare const resolveAll: (pairs: ReadonlyArray<ResolverPair>) => <Model, Message, OutMessage = undefined>(simulation: Simulation<Model, Message, OutMessage>) => Simulation<Model, Message, OutMessage>;
31
+ /** Runs a function for side effects (e.g. assertions) without breaking the pipe chain. */
32
+ export declare const tap: <Model, Message, OutMessage = undefined>(f: (simulation: Simulation<Model, Message, OutMessage>) => void) => (simulation: Simulation<Model, Message, OutMessage>) => Simulation<Model, Message, OutMessage>;
33
+ /** A single step in a test story — either a {@link WithStep} or a simulation transform. */
34
+ export type StoryStep<Model, Message, OutMessage> = WithStep<NoInfer<Model>> | ((simulation: Simulation<Model, Message, OutMessage>) => Simulation<Model, Message, OutMessage>);
35
+ /** Executes a test story. Throws if any Commands remain unresolved. */
36
+ export declare const story: {
37
+ <Model, Message, OutMessage>(updateFn: (model: Model, message: Message) => readonly [Model, ReadonlyArray<AnyCommand>, OutMessage], ...steps: ReadonlyArray<StoryStep<Model, Message, OutMessage>>): void;
38
+ <Model, Message>(updateFn: (model: Model, message: Message) => readonly [Model, ReadonlyArray<AnyCommand>], ...steps: ReadonlyArray<StoryStep<Model, Message, undefined>>): void;
39
+ };
40
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,0DAA0D;AAC1D,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAEnD,yDAAyD;AACzD,MAAM,MAAM,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,GAAG,SAAS,IAAI,QAAQ,CAAC;IACxE,KAAK,EAAE,KAAK,CAAA;IACZ,OAAO,EAAE,OAAO,GAAG,SAAS,CAAA;IAC5B,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;IACnC,UAAU,EAAE,UAAU,CAAA;CACvB,CAAC,CAAA;AAEF,qGAAqG;AACrG,MAAM,MAAM,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC;IAAE,aAAa,EAAE,KAAK,CAAA;CAAE,CAAC,GAC9D,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,GAAG,SAAS,EAClC,UAAU,EAAE,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,KAC3C,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAA;AAsD1C,+CAA+C;AAC/C,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,CAAA;AACxB,QAAA,MAAM,KAAK,GAAI,KAAK,EAAE,OAAO,KAAK,KAAG,QAAQ,CAAC,KAAK,CAiBlD,CAAA;AAED,yFAAyF;AACzF,eAAO,MAAM,OAAO,GACjB,OAAO,EAAE,UAAU,OAAO,CAAC,OAAO,CAAC,MACnC,KAAK,EAAE,UAAU,GAAG,SAAS,EAC5B,YAAY,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,KACjD,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CA8BvC,CAAA;AAEH,yEAAyE;AACzE,eAAO,MAAM,OAAO,EAAE;IACpB,CAAC,IAAI,SAAS,MAAM,EAAE,aAAa,EACjC,UAAU,EAAE,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC,EAClD,aAAa,EAAE,aAAa,GAC3B,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,GAAG,SAAS,EACxC,UAAU,EAAE,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,KAC/C,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAA;IAC3C,CAAC,IAAI,SAAS,MAAM,EAAE,aAAa,EAAE,aAAa,EAChD,UAAU,EAAE,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC,EAClD,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,aAAa,GACzD,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,GAAG,SAAS,EACxC,UAAU,EAAE,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,KAC/C,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAA;CAkC1C,CAAA;AAEH,8EAA8E;AAC9E,MAAM,MAAM,YAAY,CACtB,IAAI,SAAS,MAAM,GAAG,MAAM,EAC5B,aAAa,GAAG,OAAO,IACrB,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,aAAa,CAAC,CAAA;AAEpE,6FAA6F;AAC7F,eAAO,MAAM,UAAU,GACpB,OAAO,aAAa,CAAC,YAAY,CAAC,MAClC,KAAK,EAAE,OAAO,EAAE,UAAU,GAAG,SAAS,EACrC,YAAY,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,KACjD,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CA+CvC,CAAA;AAEH,0FAA0F;AAC1F,eAAO,MAAM,GAAG,GACb,KAAK,EAAE,OAAO,EAAE,UAAU,GAAG,SAAS,EACrC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,KAAK,IAAI,MAG/D,YAAY,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,KACjD,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAGvC,CAAA;AAEH,2FAA2F;AAC3F,MAAM,MAAM,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,IAC5C,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GACxB,CAAC,CACC,UAAU,EAAE,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,KAC/C,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAA;AAEhD,uEAAuE;AACvE,eAAO,MAAM,KAAK,EAAE;IAClB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EACzB,QAAQ,EAAE,CACR,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,KACb,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,EAC5D,GAAG,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,GAC7D,IAAI,CAAA;IACP,CAAC,KAAK,EAAE,OAAO,EACb,QAAQ,EAAE,CACR,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,KACb,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC,EAChD,GAAG,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,GAC5D,IAAI,CAAA;CAyCR,CAAA"}
@@ -0,0 +1,138 @@
1
+ import { Array, Predicate, pipe } from 'effect';
2
+ const toInternal = (simulation) =>
3
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
4
+ simulation;
5
+ const resolveByName = (internal, commandName, resolverMessage) => {
6
+ const commandIndex = internal.commands.findIndex(({ name }) => name === commandName);
7
+ if (commandIndex === -1) {
8
+ return undefined;
9
+ }
10
+ const remainingCommands = Array.remove(internal.commands, commandIndex);
11
+ const result = internal.updateFn(internal.model, resolverMessage);
12
+ const nextModel = result[0];
13
+ const newCommands = result[1];
14
+ const outMessage = result.length === 3 ? result[2] : internal.outMessage;
15
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
16
+ return {
17
+ ...internal,
18
+ model: nextModel,
19
+ message: resolverMessage,
20
+ commands: Array.appendAll(remainingCommands, newCommands),
21
+ outMessage,
22
+ };
23
+ };
24
+ /** Sets the initial Model for a test story. */
25
+ export { with_ as with };
26
+ const with_ = (model) => {
27
+ const step = (simulation) => {
28
+ const internal = toInternal(simulation);
29
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
30
+ return { ...internal, model };
31
+ };
32
+ /* eslint-disable @typescript-eslint/consistent-type-assertions */
33
+ return Object.assign(step, {
34
+ _phantomModel: undefined,
35
+ });
36
+ /* eslint-enable @typescript-eslint/consistent-type-assertions */
37
+ };
38
+ /** Sends a Message through update. Commands stay pending until resolve or resolveAll. */
39
+ export const message = (message_) => (simulation) => {
40
+ const internal = toInternal(simulation);
41
+ if (Array.isNonEmptyReadonlyArray(internal.commands)) {
42
+ const names = pipe(internal.commands, Array.map(({ name }) => ` ${name}`), Array.join('\n'));
43
+ throw new Error(`I found unresolved Commands when you sent a new Message:\n\n${names}\n\n` +
44
+ 'Resolve all Commands before sending the next Message.\n' +
45
+ 'Use Test.resolve(Definition, ResultMessage) for each one,\n' +
46
+ 'or Test.resolveAll([...pairs]) to resolve them all at once.');
47
+ }
48
+ const result = internal.updateFn(internal.model, message_);
49
+ const nextModel = result[0];
50
+ const commands = result[1];
51
+ const outMessage = result.length === 3 ? result[2] : internal.outMessage;
52
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
53
+ return {
54
+ ...internal,
55
+ model: nextModel,
56
+ message: message_,
57
+ commands: Array.appendAll(internal.commands, commands),
58
+ outMessage,
59
+ };
60
+ };
61
+ /** Resolves a specific pending Command with the given result Message. */
62
+ export const resolve = (definition, resultMessage, toParentMessage) => (simulation) => {
63
+ /* eslint-disable @typescript-eslint/consistent-type-assertions */
64
+ const internal = toInternal(simulation);
65
+ const messageForUpdate = (Predicate.isUndefined(toParentMessage)
66
+ ? resultMessage
67
+ : toParentMessage(resultMessage));
68
+ const next = resolveByName(internal, definition.name, messageForUpdate);
69
+ if (Predicate.isUndefined(next)) {
70
+ const pending = Array.isNonEmptyReadonlyArray(internal.commands)
71
+ ? pipe(internal.commands, Array.map(({ name }) => ` ${name}`), Array.join('\n'))
72
+ : ' (none)';
73
+ throw new Error(`I tried to resolve "${definition.name}" but it wasn't in the pending Commands.\n\n` +
74
+ `Pending Commands:\n${pending}\n\n` +
75
+ 'Make sure the previous Message produced this Command.');
76
+ }
77
+ return next;
78
+ /* eslint-enable @typescript-eslint/consistent-type-assertions */
79
+ };
80
+ /** Resolves all listed Commands with their result Messages. Handles cascading resolution. */
81
+ export const resolveAll = (pairs) => (simulation) => {
82
+ const internal = toInternal(simulation);
83
+ const resolvers = {};
84
+ for (const [definition, resultMessage] of pairs) {
85
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
86
+ resolvers[definition.name] = resultMessage;
87
+ }
88
+ let current = {
89
+ ...internal,
90
+ resolvers: { ...internal.resolvers, ...resolvers },
91
+ };
92
+ const MAX_CASCADE_DEPTH = 100;
93
+ for (let depth = 0; depth < MAX_CASCADE_DEPTH; depth++) {
94
+ const resolvable = current.commands.find(({ name }) => name in current.resolvers);
95
+ if (Predicate.isUndefined(resolvable)) {
96
+ break;
97
+ }
98
+ const next = resolveByName(current, resolvable.name, current.resolvers[resolvable.name]);
99
+ if (Predicate.isUndefined(next)) {
100
+ break;
101
+ }
102
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
103
+ current = next;
104
+ if (depth === MAX_CASCADE_DEPTH - 1) {
105
+ throw new Error('resolveAll hit the maximum cascade depth (100). ' +
106
+ 'This usually means Commands are producing Commands in an infinite cycle.');
107
+ }
108
+ }
109
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
110
+ return current;
111
+ };
112
+ /** Runs a function for side effects (e.g. assertions) without breaking the pipe chain. */
113
+ export const tap = (f) => (simulation) => {
114
+ f(simulation);
115
+ return simulation;
116
+ };
117
+ /** Executes a test story. Throws if any Commands remain unresolved. */
118
+ export const story = (updateFn, ...steps) => {
119
+ /* eslint-disable @typescript-eslint/consistent-type-assertions */
120
+ const seed = {
121
+ model: undefined,
122
+ message: undefined,
123
+ commands: [],
124
+ outMessage: undefined,
125
+ updateFn,
126
+ resolvers: {},
127
+ };
128
+ const result = steps.reduce((current, step) => step(current), seed);
129
+ /* eslint-enable @typescript-eslint/consistent-type-assertions */
130
+ const internal = toInternal(result);
131
+ if (Array.isNonEmptyReadonlyArray(internal.commands)) {
132
+ const names = pipe(internal.commands, Array.map(({ name }) => ` ${name}`), Array.join('\n'));
133
+ throw new Error(`I found Commands without resolvers:\n\n${names}\n\n` +
134
+ 'Every Command produced by update needs to be resolved.\n' +
135
+ 'Use Test.resolve(Definition, ResultMessage) for each one,\n' +
136
+ 'or Test.resolveAll([...pairs]) to resolve them all at once.');
137
+ }
138
+ };
@@ -0,0 +1,3 @@
1
+ export type { AnyCommand, ResolverPair, Simulation, StoryStep, WithStep, } from './index';
2
+ export { message, resolve, resolveAll, story, tap, with } from './index';
3
+ //# sourceMappingURL=public.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/test/public.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,YAAY,EACZ,UAAU,EACV,SAAS,EACT,QAAQ,GACT,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1 @@
1
+ export { message, resolve, resolveAll, story, tap, with } from './index';
@@ -21,7 +21,7 @@ export type InitConfig = Readonly<{
21
21
  /** Creates an initial checkbox model from a config. Defaults to unchecked. */
22
22
  export declare const init: (config: InitConfig) => Model;
23
23
  /** Processes a checkbox message and returns the next model and commands. */
24
- export declare const update: (model: Model, _message: Message) => [Model, ReadonlyArray<Command<Message>>];
24
+ export declare const update: (model: Model, _message: Message) => readonly [Model, ReadonlyArray<Command<Message>>];
25
25
  /** Attribute groups the checkbox component provides to the consumer's `toView` callback. */
26
26
  export type CheckboxAttributes<Message> = Readonly<{
27
27
  checkbox: ReadonlyArray<Attribute<Message>>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/checkbox/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAExD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,IAAI,EAAoB,MAAM,YAAY,CAAA;AAMxE,8EAA8E;AAC9E,eAAO,MAAM,KAAK;;;EAGhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,sEAAsE;AACtE,eAAO,MAAM,OAAO,4DAAe,CAAA;AAEnC,kEAAkE;AAClE,eAAO,MAAM,OAAO,4DAAU,CAAA;AAE9B,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAEzC,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,+DAA+D;AAC/D,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAC,CAAA;AAEF,8EAA8E;AAC9E,eAAO,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,KAGxC,CAAA;AAIF,4EAA4E;AAC5E,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,UAAU,OAAO,KAChB,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAGzC,CAAA;AAID,4FAA4F;AAC5F,MAAM,MAAM,kBAAkB,CAAC,OAAO,IAAI,QAAQ,CAAC;IACjD,QAAQ,EAAE,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IAC3C,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IACxC,WAAW,EAAE,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IAC9C,WAAW,EAAE,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;CAC/C,CAAC,CAAA;AAEF,0DAA0D;AAC1D,MAAM,MAAM,UAAU,CAAC,OAAO,IAAI,QAAQ,CAAC;IACzC,KAAK,EAAE,KAAK,CAAA;IACZ,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAA;IACxC,MAAM,EAAE,CAAC,UAAU,EAAE,kBAAkB,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;IACzD,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAC,CAAA;AAKF,kIAAkI;AAClI,eAAO,MAAM,IAAI,GAAI,OAAO,EAAE,QAAQ,UAAU,CAAC,OAAO,CAAC,KAAG,IAwE3D,CAAA;AAED;6EAC6E;AAC7E,eAAO,MAAM,IAAI,GAAI,OAAO,EAC1B,cAAc,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC,KAC7D,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,KAAK,IAAI,CAgBtE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/checkbox/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAExD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,IAAI,EAAoB,MAAM,YAAY,CAAA;AAMxE,8EAA8E;AAC9E,eAAO,MAAM,KAAK;;;EAGhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,sEAAsE;AACtE,eAAO,MAAM,OAAO,4DAAe,CAAA;AAEnC,kEAAkE;AAClE,eAAO,MAAM,OAAO,4DAAU,CAAA;AAE9B,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAEzC,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,+DAA+D;AAC/D,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAC,CAAA;AAEF,8EAA8E;AAC9E,eAAO,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,KAGxC,CAAA;AAIF,4EAA4E;AAC5E,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,UAAU,OAAO,KAChB,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAGlD,CAAA;AAID,4FAA4F;AAC5F,MAAM,MAAM,kBAAkB,CAAC,OAAO,IAAI,QAAQ,CAAC;IACjD,QAAQ,EAAE,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IAC3C,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IACxC,WAAW,EAAE,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IAC9C,WAAW,EAAE,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;CAC/C,CAAC,CAAA;AAEF,0DAA0D;AAC1D,MAAM,MAAM,UAAU,CAAC,OAAO,IAAI,QAAQ,CAAC;IACzC,KAAK,EAAE,KAAK,CAAA;IACZ,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAA;IACxC,MAAM,EAAE,CAAC,UAAU,EAAE,kBAAkB,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;IACzD,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAC,CAAA;AAKF,kIAAkI;AAClI,eAAO,MAAM,IAAI,GAAI,OAAO,EAAE,QAAQ,UAAU,CAAC,OAAO,CAAC,KAAG,IAwE3D,CAAA;AAED;6EAC6E;AAC7E,eAAO,MAAM,IAAI,GAAI,OAAO,EAC1B,cAAc,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC,KAC7D,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,KAAK,IAAI,CAgBtE,CAAA"}
@@ -47,7 +47,7 @@ export declare const update: (model: {
47
47
  }>;
48
48
  } & {
49
49
  readonly selectedItems: readonly string[];
50
- }, message: import("./shared").Message) => [{
50
+ }, message: import("./shared").Message) => readonly [{
51
51
  readonly id: string;
52
52
  readonly isOpen: boolean;
53
53
  readonly isAnimated: boolean;