foldkit 0.64.0 → 0.65.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.
@@ -56,6 +56,10 @@ export type Validation<T> = [Predicate.Predicate<T>, ValidationMessage<T>];
56
56
  export declare const resolveMessage: <T>(message: ValidationMessage<T>, value: T) => string;
57
57
  /** Creates a `Validation` that checks if a string is non-empty. */
58
58
  export declare const required: (message?: ValidationMessage<string>) => Validation<string>;
59
+ /** Wraps a string validation so that empty strings pass without being
60
+ * checked. Useful for fields that are optional but must be valid if
61
+ * filled in (e.g. an optional email). */
62
+ export declare const optional: (validation: Validation<string>) => Validation<string>;
59
63
  /** Creates a `Validation` that checks if a string meets a minimum length. */
60
64
  export declare const minLength: (min: number, message?: ValidationMessage<string>) => Validation<string>;
61
65
  /** Creates a `Validation` that checks if a string does not exceed a maximum length. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fieldValidation/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fieldValidation/index.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,13 @@ export const resolveMessage = (message, value) => (typeof message === 'string' ?
33
33
  // STRING VALIDATORS
34
34
  /** Creates a `Validation` that checks if a string is non-empty. */
35
35
  export const required = (message = 'Required') => [String.isNonEmpty, message];
36
+ /** Wraps a string validation so that empty strings pass without being
37
+ * checked. Useful for fields that are optional but must be valid if
38
+ * filled in (e.g. an optional email). */
39
+ export const optional = (validation) => {
40
+ const [predicate, message] = validation;
41
+ return [Predicate.or(String.isEmpty, predicate), message];
42
+ };
36
43
  /** Creates a `Validation` that checks if a string meets a minimum length. */
37
44
  export const minLength = (min, message) => [
38
45
  flow(String.length, Number_.greaterThanOrEqualTo(min)),
@@ -1,3 +1,3 @@
1
- export { makeField, required, minLength, maxLength, pattern, email, url, startsWith, endsWith, includes, equals, min, max, between, positive, nonNegative, integer, oneOf, } from './index';
1
+ export { makeField, required, optional, minLength, maxLength, pattern, email, url, startsWith, endsWith, includes, equals, min, max, between, positive, nonNegative, integer, oneOf, } from './index';
2
2
  export type { Field, Validation, ValidationMessage } from './index';
3
3
  //# sourceMappingURL=public.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/fieldValidation/public.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,QAAQ,EACR,SAAS,EACT,SAAS,EACT,OAAO,EACP,KAAK,EACL,GAAG,EACH,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,GAAG,EACH,GAAG,EACH,OAAO,EACP,QAAQ,EACR,WAAW,EACX,OAAO,EACP,KAAK,GACN,MAAM,SAAS,CAAA;AAEhB,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA"}
1
+ {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/fieldValidation/public.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,SAAS,EACT,OAAO,EACP,KAAK,EACL,GAAG,EACH,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,GAAG,EACH,GAAG,EACH,OAAO,EACP,QAAQ,EACR,WAAW,EACX,OAAO,EACP,KAAK,GACN,MAAM,SAAS,CAAA;AAEhB,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA"}
@@ -1 +1 @@
1
- export { makeField, required, minLength, maxLength, pattern, email, url, startsWith, endsWith, includes, equals, min, max, between, positive, nonNegative, integer, oneOf, } from './index';
1
+ export { makeField, required, optional, minLength, maxLength, pattern, email, url, startsWith, endsWith, includes, equals, min, max, between, positive, nonNegative, integer, oneOf, } from './index';
@@ -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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"}
@@ -86,6 +86,17 @@ const makeRuntime = ({ Model, flags: resolveFlags, init, update, view, subscript
86
86
  const currentMessageRef = yield* Ref.make(Option.none());
87
87
  const maybeRuntimeRef = yield* Ref.make(Option.none());
88
88
  const maybeDevtoolsStoreRef = yield* Ref.make(Option.none());
89
+ /** `true` while a render is patching the DOM. Synchronous events
90
+ * that fire as a side-effect of DOM mutations (e.g. Chrome firing
91
+ * `blur` when a focused element is removed) call `dispatchSync`; if
92
+ * they do so while the flag is set, the message is offered to
93
+ * `pendingMessagesQueue` and processed after the current render
94
+ * completes. Without this lock, nested dispatches during a patch
95
+ * see a stale `maybeCurrentVNodeRef` and double-patch the DOM. */
96
+ const isRenderingRef = yield* Ref.make(false);
97
+ /** Messages offered by `dispatchSync` calls that land while a render
98
+ * is in progress. Drained at the end of each render. */
99
+ const pendingMessagesQueue = yield* Queue.unbounded();
89
100
  const processMessage = (message) => Effect.gen(function* () {
90
101
  const currentModel = yield* Ref.get(modelRef);
91
102
  const [nextModel, commands] = update(currentModel, message);
@@ -127,12 +138,18 @@ const makeRuntime = ({ Model, flags: resolveFlags, init, update, view, subscript
127
138
  const appError = squashed instanceof Error
128
139
  ? squashed
129
140
  : new Error(String(squashed));
130
- const model = Ref.get(modelRef).pipe(Effect.runSync);
141
+ const model = Effect.runSync(Ref.get(modelRef));
131
142
  renderCrashView({ error: appError, model, message }, crash, container, maybeCurrentVNodeRef);
132
143
  }
133
144
  };
134
145
  const dispatchSync = (message) => {
135
- const maybeRuntime = Ref.get(maybeRuntimeRef).pipe(Effect.runSync);
146
+ const isRendering = Effect.runSync(Ref.get(isRenderingRef));
147
+ if (isRendering) {
148
+ /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions */
149
+ Queue.offer(pendingMessagesQueue, message).pipe(Effect.runSync);
150
+ return;
151
+ }
152
+ const maybeRuntime = Effect.runSync(Ref.get(maybeRuntimeRef));
136
153
  Option.match(maybeRuntime, {
137
154
  onNone: Function.constVoid,
138
155
  onSome: runProcessMessage(
@@ -146,6 +163,10 @@ const makeRuntime = ({ Model, flags: resolveFlags, init, update, view, subscript
146
163
  /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions */
147
164
  enqueueMessage(message);
148
165
  const dispatch = { dispatchAsync, dispatchSync };
166
+ const drainPendingMessages = Effect.gen(function* () {
167
+ const pending = yield* Queue.takeAll(pendingMessagesQueue);
168
+ yield* Effect.forEach(pending, queuedMessage => Effect.sync(() => dispatchSync(queuedMessage)));
169
+ });
149
170
  const render = (model, message) => Effect.gen(function* () {
150
171
  const viewStart = performance.now();
151
172
  const nextVNodeNullish = yield* view(model);
@@ -164,11 +185,12 @@ const makeRuntime = ({ Model, flags: resolveFlags, init, update, view, subscript
164
185
  },
165
186
  });
166
187
  const maybeCurrentVNode = yield* Ref.get(maybeCurrentVNodeRef);
167
- const patchedVNode = yield* Effect.sync(() => patchVNode(maybeCurrentVNode, nextVNodeNullish, container));
188
+ const patchedVNode = yield* Effect.acquireUseRelease(Ref.set(isRenderingRef, true), () => Effect.sync(() => patchVNode(maybeCurrentVNode, nextVNodeNullish, container)), () => Ref.set(isRenderingRef, false));
168
189
  yield* Ref.set(maybeCurrentVNodeRef, Option.some(patchedVNode));
169
190
  if (title) {
170
191
  document.title = title(model);
171
192
  }
193
+ yield* drainPendingMessages;
172
194
  }).pipe(Effect.provideService(Dispatch, dispatch));
173
195
  const runtime = yield* Effect.runtime();
174
196
  yield* Ref.set(maybeRuntimeRef, Option.some(runtime));
@@ -254,7 +276,7 @@ const makeRuntime = ({ Model, flags: resolveFlags, init, update, view, subscript
254
276
  const appError = squashed instanceof Error
255
277
  ? squashed
256
278
  : new Error(String(squashed));
257
- const model = Ref.get(modelRef).pipe(Effect.runSync);
279
+ const model = Effect.runSync(Ref.get(modelRef));
258
280
  const message = Ref.get(currentMessageRef).pipe(Effect.runSync, Option.getOrThrow);
259
281
  renderCrashView({ error: appError, model, message }, crash, container, maybeCurrentVNodeRef);
260
282
  })));
@@ -283,13 +305,13 @@ const renderCrashView = (context, crash, container, maybeCurrentVNodeRef) => {
283
305
  const crashHtml = crash?.view
284
306
  ? crash.view(context)
285
307
  : defaultCrashView(context);
286
- const maybeCurrentVNode = Ref.get(maybeCurrentVNodeRef).pipe(Effect.runSync);
308
+ const maybeCurrentVNode = Effect.runSync(Ref.get(maybeCurrentVNodeRef));
287
309
  const vnode = crashHtml.pipe(Effect.provideService(Dispatch, noOpDispatch), Effect.runSync);
288
310
  patchVNode(maybeCurrentVNode, vnode, container);
289
311
  }
290
312
  catch (viewError) {
291
313
  console.error('[foldkit] crash.view failed:', viewError);
292
- const maybeCurrentVNode = Ref.get(maybeCurrentVNodeRef).pipe(Effect.runSync);
314
+ const maybeCurrentVNode = Effect.runSync(Ref.get(maybeCurrentVNodeRef));
293
315
  const fallbackViewError = viewError instanceof Error ? viewError : new Error(String(viewError));
294
316
  const vnode = defaultCrashView(context, fallbackViewError).pipe(Effect.provideService(Dispatch, noOpDispatch), Effect.runSync);
295
317
  patchVNode(maybeCurrentVNode, vnode, container);
@@ -4,7 +4,7 @@ export { advanceFocus, focus, showModal, closeModal, clickElement, scrollIntoVie
4
4
  export type { FocusDirection } from './dom';
5
5
  export { detectElementMovement } from './elementMovement';
6
6
  export { delay, nextFrame, waitForTransitions } from './timing';
7
- export { randomInt } from './random';
7
+ export { randomInt, uuid } from './random';
8
8
  export { lockScroll, unlockScroll } from './scrollLock';
9
9
  export { inertOthers, restoreInert } from './inert';
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/task/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAA;AAC3E,OAAO,EACL,YAAY,EACZ,KAAK,EACL,SAAS,EACT,UAAU,EACV,YAAY,EACZ,cAAc,GACf,MAAM,OAAO,CAAA;AACd,YAAY,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/task/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAA;AAC3E,OAAO,EACL,YAAY,EACZ,KAAK,EACL,SAAS,EACT,UAAU,EACV,YAAY,EACZ,cAAc,GACf,MAAM,OAAO,CAAA;AACd,YAAY,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA"}
@@ -3,6 +3,6 @@ export { getTime, getTimeZone, getZonedTime, getZonedTimeIn } from './time';
3
3
  export { advanceFocus, focus, showModal, closeModal, clickElement, scrollIntoView, } from './dom';
4
4
  export { detectElementMovement } from './elementMovement';
5
5
  export { delay, nextFrame, waitForTransitions } from './timing';
6
- export { randomInt } from './random';
6
+ export { randomInt, uuid } from './random';
7
7
  export { lockScroll, unlockScroll } from './scrollLock';
8
8
  export { inertOthers, restoreInert } from './inert';
@@ -1,2 +1,2 @@
1
- export { ElementNotFound, TimeZoneError, getTime, getTimeZone, getZonedTime, getZonedTimeIn, focus, showModal, closeModal, clickElement, delay, scrollIntoView, randomInt, nextFrame, waitForTransitions, } from './index';
1
+ export { ElementNotFound, TimeZoneError, getTime, getTimeZone, getZonedTime, getZonedTimeIn, focus, showModal, closeModal, clickElement, delay, scrollIntoView, randomInt, uuid, nextFrame, waitForTransitions, } from './index';
2
2
  //# sourceMappingURL=public.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/task/public.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,aAAa,EACb,OAAO,EACP,WAAW,EACX,YAAY,EACZ,cAAc,EACd,KAAK,EACL,SAAS,EACT,UAAU,EACV,YAAY,EACZ,KAAK,EACL,cAAc,EACd,SAAS,EACT,SAAS,EACT,kBAAkB,GACnB,MAAM,SAAS,CAAA"}
1
+ {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/task/public.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,aAAa,EACb,OAAO,EACP,WAAW,EACX,YAAY,EACZ,cAAc,EACd,KAAK,EACL,SAAS,EACT,UAAU,EACV,YAAY,EACZ,KAAK,EACL,cAAc,EACd,SAAS,EACT,IAAI,EACJ,SAAS,EACT,kBAAkB,GACnB,MAAM,SAAS,CAAA"}
@@ -1 +1 @@
1
- export { ElementNotFound, TimeZoneError, getTime, getTimeZone, getZonedTime, getZonedTimeIn, focus, showModal, closeModal, clickElement, delay, scrollIntoView, randomInt, nextFrame, waitForTransitions, } from './index';
1
+ export { ElementNotFound, TimeZoneError, getTime, getTimeZone, getZonedTime, getZonedTimeIn, focus, showModal, closeModal, clickElement, delay, scrollIntoView, randomInt, uuid, nextFrame, waitForTransitions, } from './index';
@@ -8,4 +8,14 @@ import { Effect } from 'effect';
8
8
  * ```
9
9
  */
10
10
  export declare const randomInt: (min: number, max: number) => Effect.Effect<number>;
11
+ /**
12
+ * Generates a RFC 4122 version 4 UUID via the platform's
13
+ * `crypto.randomUUID()`.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * Task.uuid.pipe(Effect.map(id => CreatedCard({ id, title })))
18
+ * ```
19
+ */
20
+ export declare const uuid: Effect.Effect<string>;
11
21
  //# sourceMappingURL=random.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"random.d.ts","sourceRoot":"","sources":["../../src/task/random.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,EAAE,KAAK,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CACP,CAAA"}
1
+ {"version":3,"file":"random.d.ts","sourceRoot":"","sources":["../../src/task/random.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,EAAE,KAAK,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CACP,CAAA;AAElE;;;;;;;;GAQG;AACH,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAEtC,CAAA"}
@@ -8,3 +8,13 @@ import { Effect } from 'effect';
8
8
  * ```
9
9
  */
10
10
  export const randomInt = (min, max) => Effect.sync(() => Math.floor(Math.random() * (max - min)) + min);
11
+ /**
12
+ * Generates a RFC 4122 version 4 UUID via the platform's
13
+ * `crypto.randomUUID()`.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * Task.uuid.pipe(Effect.map(id => CreatedCard({ id, title })))
18
+ * ```
19
+ */
20
+ export const uuid = Effect.sync(() => crypto.randomUUID());
@@ -19,26 +19,37 @@ export declare const EnteredDragZone: import("../../schema").CallableTaggedStruc
19
19
  * `isDragOver` back to false. */
20
20
  export declare const LeftDragZone: import("../../schema").CallableTaggedStruct<"LeftDragZone", {}>;
21
21
  /** Sent when the user drops files on the zone or selects them via the
22
- * hidden `<input type="file">`. Carries the raw `File` objects, resets
23
- * `isDragOver`, and emits `ReceivedFiles` as an OutMessage. */
22
+ * hidden `<input type="file">`. Carries a non-empty list of `File`
23
+ * objects, resets `isDragOver`, and emits `ReceivedFiles` as an
24
+ * OutMessage. */
24
25
  export declare const DroppedFiles: import("../../schema").CallableTaggedStruct<"DroppedFiles", {
25
- files: S.Array$<S.Schema<File, File, never>>;
26
+ files: S.NonEmptyArray<S.Schema<File, File, never>>;
26
27
  }>;
28
+ /** Sent when a drop or input-change event fires without any files \u2014
29
+ * typically a drag of non-file data (text, URLs, images from another
30
+ * page). Resets `isDragOver` and emits `DroppedWithoutFiles` as an
31
+ * OutMessage so the consumer can surface a message (e.g. "Only files are
32
+ * accepted"). */
33
+ export declare const DroppedWithoutFiles: import("../../schema").CallableTaggedStruct<"DroppedWithoutFiles", {}>;
27
34
  /** Union of all messages the file-drop component can produce. */
28
35
  export declare const Message: S.Union<[import("../../schema").CallableTaggedStruct<"EnteredDragZone", {}>, import("../../schema").CallableTaggedStruct<"LeftDragZone", {}>, import("../../schema").CallableTaggedStruct<"DroppedFiles", {
29
- files: S.Array$<S.Schema<File, File, never>>;
30
- }>]>;
36
+ files: S.NonEmptyArray<S.Schema<File, File, never>>;
37
+ }>, import("../../schema").CallableTaggedStruct<"DroppedWithoutFiles", {}>]>;
31
38
  export type Message = typeof Message.Type;
32
39
  /** Emitted when files arrive via drop or input-change. The consumer's
33
40
  * parent update handles this to process the files (validate, upload,
34
- * store in Model, etc.). */
41
+ * store in Model, etc.). The files list is non-empty. */
35
42
  export declare const ReceivedFiles: import("../../schema").CallableTaggedStruct<"ReceivedFiles", {
36
- files: S.Array$<S.Schema<File, File, never>>;
37
- }>;
38
- /** The file-drop component's OutMessage, narrowed to `ReceivedFiles`. */
39
- export declare const OutMessage: import("../../schema").CallableTaggedStruct<"ReceivedFiles", {
40
- files: S.Array$<S.Schema<File, File, never>>;
43
+ files: S.NonEmptyArray<S.Schema<File, File, never>>;
41
44
  }>;
45
+ /** The file-drop component's OutMessages: `ReceivedFiles` on the happy
46
+ * path and `DroppedWithoutFiles` when a drop event fires without files.
47
+ * `DroppedWithoutFiles` is reused from the Message definitions \u2014 the
48
+ * fact is the same whether the component is handling it or reporting it
49
+ * up. */
50
+ export declare const OutMessage: S.Union<[import("../../schema").CallableTaggedStruct<"ReceivedFiles", {
51
+ files: S.NonEmptyArray<S.Schema<File, File, never>>;
52
+ }>, import("../../schema").CallableTaggedStruct<"DroppedWithoutFiles", {}>]>;
42
53
  export type OutMessage = typeof OutMessage.Type;
43
54
  /** Configuration for creating a file-drop model with `init`. */
44
55
  export type InitConfig = Readonly<{
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/fileDrop/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAExD,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,IAAI,EAAoB,MAAM,YAAY,CAAA;AAMxE;;;;;iEAKiE;AACjE,eAAO,MAAM,KAAK;;;EAGhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC;oDACoD;AACpD,eAAO,MAAM,eAAe,oEAAuB,CAAA;AACnD;iCACiC;AACjC,eAAO,MAAM,YAAY,iEAAoB,CAAA;AAC7C;;+DAE+D;AAC/D,eAAO,MAAM,YAAY;;EAEvB,CAAA;AAEF,iEAAiE;AACjE,eAAO,MAAM,OAAO;;IAAuD,CAAA;AAC3E,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC;;4BAE4B;AAC5B,eAAO,MAAM,aAAa;;EAExB,CAAA;AAEF,yEAAyE;AACzE,eAAO,MAAM,UAAU;;EAAgB,CAAA;AACvC,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAA;AAI/C,gEAAgE;AAChE,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,EAAE,EAAE,MAAM,CAAA;CACX,CAAC,CAAA;AAEF,qEAAqE;AACrE,eAAO,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,KAGxC,CAAA;AAIF,KAAK,YAAY,GAAG,SAAS;IAC3B,KAAK;IACL,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;CAC1B,CAAA;AAED;8BAC8B;AAC9B,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,SAAS,OAAO,KAAG,YAoBrD,CAAA;AAIH;;;yDAGyD;AACzD,MAAM,MAAM,kBAAkB,CAAC,aAAa,IAAI,QAAQ,CAAC;IACvD;;wCAEoC;IACpC,IAAI,EAAE,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAA;IAC7C;;0BAEsB;IACtB,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAA;CAC/C,CAAC,CAAA;AAEF;;;;0BAI0B;AAC1B,MAAM,MAAM,UAAU,CAAC,aAAa,IAAI,QAAQ,CAAC;IAC/C,KAAK,EAAE,KAAK,CAAA;IACZ,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,aAAa,CAAA;IACpD,MAAM,EAAE,CAAC,UAAU,EAAE,kBAAkB,CAAC,aAAa,CAAC,KAAK,IAAI,CAAA;IAC/D;;;kCAG8B;IAC9B,MAAM,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC9B,wEAAwE;IACxE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;yEACqE;IACrE,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAC,CAAA;AAEF;;;;gBAIgB;AAChB,eAAO,MAAM,IAAI,GAAI,aAAa,EAChC,QAAQ,UAAU,CAAC,aAAa,CAAC,KAChC,IAwDF,CAAA;AAED;;mBAEmB;AACnB,eAAO,MAAM,IAAI,GAAI,aAAa,EAChC,cAAc,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC,KACzE,CAAC,CACF,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC,iBAAiB,CAAC,KAC1D,IAAI,CAgBR,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/fileDrop/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE/D,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,IAAI,EAAoB,MAAM,YAAY,CAAA;AAMxE;;;;;iEAKiE;AACjE,eAAO,MAAM,KAAK;;;EAGhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC;oDACoD;AACpD,eAAO,MAAM,eAAe,oEAAuB,CAAA;AACnD;iCACiC;AACjC,eAAO,MAAM,YAAY,iEAAoB,CAAA;AAC7C;;;iBAGiB;AACjB,eAAO,MAAM,YAAY;;EAEvB,CAAA;AACF;;;;iBAIiB;AACjB,eAAO,MAAM,mBAAmB,wEAA2B,CAAA;AAE3D,iEAAiE;AACjE,eAAO,MAAM,OAAO;;4EAKnB,CAAA;AACD,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC;;yDAEyD;AACzD,eAAO,MAAM,aAAa;;EAExB,CAAA;AAEF;;;;SAIS;AACT,eAAO,MAAM,UAAU;;4EAA8C,CAAA;AACrE,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAA;AAI/C,gEAAgE;AAChE,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,EAAE,EAAE,MAAM,CAAA;CACX,CAAC,CAAA;AAEF,qEAAqE;AACrE,eAAO,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,KAGxC,CAAA;AAIF,KAAK,YAAY,GAAG,SAAS;IAC3B,KAAK;IACL,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;CAC1B,CAAA;AAED;8BAC8B;AAC9B,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,SAAS,OAAO,KAAG,YAyBrD,CAAA;AAIH;;;yDAGyD;AACzD,MAAM,MAAM,kBAAkB,CAAC,aAAa,IAAI,QAAQ,CAAC;IACvD;;wCAEoC;IACpC,IAAI,EAAE,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAA;IAC7C;;0BAEsB;IACtB,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAA;CAC/C,CAAC,CAAA;AAEF;;;;0BAI0B;AAC1B,MAAM,MAAM,UAAU,CAAC,aAAa,IAAI,QAAQ,CAAC;IAC/C,KAAK,EAAE,KAAK,CAAA;IACZ,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,aAAa,CAAA;IACpD,MAAM,EAAE,CAAC,UAAU,EAAE,kBAAkB,CAAC,aAAa,CAAC,KAAK,IAAI,CAAA;IAC/D;;;kCAG8B;IAC9B,MAAM,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC9B,wEAAwE;IACxE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;yEACqE;IACrE,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAC,CAAA;AAEF;;;;gBAIgB;AAChB,eAAO,MAAM,IAAI,GAAI,aAAa,EAChC,QAAQ,UAAU,CAAC,aAAa,CAAC,KAChC,IA0EF,CAAA;AAED;;mBAEmB;AACnB,eAAO,MAAM,IAAI,GAAI,aAAa,EAChC,cAAc,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC,KACzE,CAAC,CACF,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC,iBAAiB,CAAC,KAC1D,IAAI,CAgBR,CAAA"}
@@ -1,4 +1,4 @@
1
- import { Match as M, Option, Schema as S } from 'effect';
1
+ import { Array, Match as M, Option, Schema as S } from 'effect';
2
2
  import * as File from '../../file';
3
3
  import { createLazy, html } from '../../html';
4
4
  import { m } from '../../message';
@@ -22,22 +22,33 @@ export const EnteredDragZone = m('EnteredDragZone');
22
22
  * `isDragOver` back to false. */
23
23
  export const LeftDragZone = m('LeftDragZone');
24
24
  /** Sent when the user drops files on the zone or selects them via the
25
- * hidden `<input type="file">`. Carries the raw `File` objects, resets
26
- * `isDragOver`, and emits `ReceivedFiles` as an OutMessage. */
25
+ * hidden `<input type="file">`. Carries a non-empty list of `File`
26
+ * objects, resets `isDragOver`, and emits `ReceivedFiles` as an
27
+ * OutMessage. */
27
28
  export const DroppedFiles = m('DroppedFiles', {
28
- files: S.Array(File.File),
29
+ files: S.NonEmptyArray(File.File),
29
30
  });
31
+ /** Sent when a drop or input-change event fires without any files \u2014
32
+ * typically a drag of non-file data (text, URLs, images from another
33
+ * page). Resets `isDragOver` and emits `DroppedWithoutFiles` as an
34
+ * OutMessage so the consumer can surface a message (e.g. "Only files are
35
+ * accepted"). */
36
+ export const DroppedWithoutFiles = m('DroppedWithoutFiles');
30
37
  /** Union of all messages the file-drop component can produce. */
31
- export const Message = S.Union(EnteredDragZone, LeftDragZone, DroppedFiles);
38
+ export const Message = S.Union(EnteredDragZone, LeftDragZone, DroppedFiles, DroppedWithoutFiles);
32
39
  // OUT MESSAGE
33
40
  /** Emitted when files arrive via drop or input-change. The consumer's
34
41
  * parent update handles this to process the files (validate, upload,
35
- * store in Model, etc.). */
42
+ * store in Model, etc.). The files list is non-empty. */
36
43
  export const ReceivedFiles = m('ReceivedFiles', {
37
- files: S.Array(File.File),
44
+ files: S.NonEmptyArray(File.File),
38
45
  });
39
- /** The file-drop component's OutMessage, narrowed to `ReceivedFiles`. */
40
- export const OutMessage = ReceivedFiles;
46
+ /** The file-drop component's OutMessages: `ReceivedFiles` on the happy
47
+ * path and `DroppedWithoutFiles` when a drop event fires without files.
48
+ * `DroppedWithoutFiles` is reused from the Message definitions \u2014 the
49
+ * fact is the same whether the component is handling it or reporting it
50
+ * up. */
51
+ export const OutMessage = S.Union(ReceivedFiles, DroppedWithoutFiles);
41
52
  /** Creates an initial file-drop model. Drag state starts cleared. */
42
53
  export const init = (config) => ({
43
54
  id: config.id,
@@ -61,6 +72,11 @@ export const update = (model, message) => M.value(message).pipe(M.withReturnType
61
72
  [],
62
73
  Option.some(ReceivedFiles({ files })),
63
74
  ],
75
+ DroppedWithoutFiles: () => [
76
+ evo(model, { isDragOver: () => false }),
77
+ [],
78
+ Option.some(DroppedWithoutFiles()),
79
+ ],
64
80
  }));
65
81
  /** Renders an accessible file-drop zone by building attribute groups for
66
82
  * a `<label>`-wrapped hidden file input. The consumer's `toView` callback
@@ -81,7 +97,10 @@ export const view = (config) => {
81
97
  OnDragEnter(toParentMessage(EnteredDragZone())),
82
98
  OnDragLeave(toParentMessage(LeftDragZone())),
83
99
  AllowDrop(),
84
- OnDropFiles(files => toParentMessage(DroppedFiles({ files }))),
100
+ OnDropFiles(files => toParentMessage(Array.match(files, {
101
+ onEmpty: () => DroppedWithoutFiles(),
102
+ onNonEmpty: nonEmptyFiles => DroppedFiles({ files: [...nonEmptyFiles] }),
103
+ }))),
85
104
  ];
86
105
  const inputAttributes = [
87
106
  Id(id),
@@ -93,7 +112,12 @@ export const view = (config) => {
93
112
  : []),
94
113
  ...(isDisabled
95
114
  ? [Disabled(true)]
96
- : [OnFileChange(files => toParentMessage(DroppedFiles({ files })))]),
115
+ : [
116
+ OnFileChange(files => toParentMessage(Array.match(files, {
117
+ onEmpty: () => DroppedWithoutFiles(),
118
+ onNonEmpty: nonEmptyFiles => DroppedFiles({ files: [...nonEmptyFiles] }),
119
+ }))),
120
+ ]),
97
121
  ];
98
122
  return config.toView({
99
123
  root: rootAttributes,
@@ -1,3 +1,3 @@
1
- export { init, update, view, lazy, Model, Message, OutMessage, ReceivedFiles, EnteredDragZone, LeftDragZone, DroppedFiles, } from './index';
1
+ export { init, update, view, lazy, Model, Message, OutMessage, ReceivedFiles, EnteredDragZone, LeftDragZone, DroppedFiles, DroppedWithoutFiles, } from './index';
2
2
  export type { InitConfig, ViewConfig, FileDropAttributes } from './index';
3
3
  //# sourceMappingURL=public.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../../src/ui/fileDrop/public.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,OAAO,EACP,UAAU,EACV,aAAa,EACb,eAAe,EACf,YAAY,EACZ,YAAY,GACb,MAAM,SAAS,CAAA;AAEhB,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA"}
1
+ {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../../src/ui/fileDrop/public.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,OAAO,EACP,UAAU,EACV,aAAa,EACb,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,mBAAmB,GACpB,MAAM,SAAS,CAAA;AAEhB,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA"}
@@ -1 +1 @@
1
- export { init, update, view, lazy, Model, Message, OutMessage, ReceivedFiles, EnteredDragZone, LeftDragZone, DroppedFiles, } from './index';
1
+ export { init, update, view, lazy, Model, Message, OutMessage, ReceivedFiles, EnteredDragZone, LeftDragZone, DroppedFiles, DroppedWithoutFiles, } from './index';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "foldkit",
3
- "version": "0.64.0",
3
+ "version": "0.65.0",
4
4
  "description": "A frontend framework for TypeScript, built on Effect, using The Elm Architecture",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",