@gjermundgaraba-designs/pixel-paper 0.18.0 → 0.19.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.
@@ -245,6 +245,8 @@ export declare const update: (model: Model, message: Message) => Readonly<{
245
245
  }>;
246
246
  };
247
247
  commands?: Update.Commands<{
248
+ readonly _tag: "PressedEscape";
249
+ } | {
248
250
  readonly _tag: "CancelledPointer";
249
251
  } | {
250
252
  readonly _tag: "CompletedAnnounceReorder";
@@ -253,6 +255,9 @@ export declare const update: (model: Model, message: Message) => Readonly<{
253
255
  } | {
254
256
  readonly _tag: "GotDragAndDropMessage";
255
257
  readonly message: {
258
+ readonly _tag: "PressedArrowKey";
259
+ readonly direction: "Down" | "Left" | "NextContainer" | "PreviousContainer" | "Right" | "Up";
260
+ } | {
256
261
  readonly _tag: "ActivatedKeyboardDrag";
257
262
  readonly itemId: string;
258
263
  readonly containerId: string;
@@ -279,9 +284,6 @@ export declare const update: (model: Model, message: Message) => Readonly<{
279
284
  readonly containerId: string;
280
285
  readonly index: number;
281
286
  }>;
282
- } | {
283
- readonly _tag: "PressedArrowKey";
284
- readonly direction: "Down" | "Left" | "NextContainer" | "PreviousContainer" | "Right" | "Up";
285
287
  } | {
286
288
  readonly _tag: "PressedDraggable";
287
289
  readonly itemId: string;
@@ -299,8 +301,6 @@ export declare const update: (model: Model, message: Message) => Readonly<{
299
301
  readonly clientX: number;
300
302
  readonly clientY: number;
301
303
  readonly maybeIndex: Option.Option<number>;
302
- } | {
303
- readonly _tag: "PressedEscape";
304
304
  } | {
305
305
  readonly _tag: "PressedGripKey";
306
306
  readonly itemId: string;
@@ -413,6 +413,8 @@ export declare const subscriptions: <Prefix extends string>(keyPrefix: Prefix) =
413
413
  }>;
414
414
  }>;
415
415
  }, {
416
+ readonly _tag: "PressedEscape";
417
+ } | {
416
418
  readonly _tag: "CancelledPointer";
417
419
  } | {
418
420
  readonly _tag: "CompletedAnnounceReorder";
@@ -421,6 +423,9 @@ export declare const subscriptions: <Prefix extends string>(keyPrefix: Prefix) =
421
423
  } | {
422
424
  readonly _tag: "GotDragAndDropMessage";
423
425
  readonly message: {
426
+ readonly _tag: "PressedArrowKey";
427
+ readonly direction: "Down" | "Left" | "NextContainer" | "PreviousContainer" | "Right" | "Up";
428
+ } | {
424
429
  readonly _tag: "ActivatedKeyboardDrag";
425
430
  readonly itemId: string;
426
431
  readonly containerId: string;
@@ -447,9 +452,6 @@ export declare const subscriptions: <Prefix extends string>(keyPrefix: Prefix) =
447
452
  readonly containerId: string;
448
453
  readonly index: number;
449
454
  }>;
450
- } | {
451
- readonly _tag: "PressedArrowKey";
452
- readonly direction: "Down" | "Left" | "NextContainer" | "PreviousContainer" | "Right" | "Up";
453
455
  } | {
454
456
  readonly _tag: "PressedDraggable";
455
457
  readonly itemId: string;
@@ -467,8 +469,6 @@ export declare const subscriptions: <Prefix extends string>(keyPrefix: Prefix) =
467
469
  readonly clientX: number;
468
470
  readonly clientY: number;
469
471
  readonly maybeIndex: Option.Option<number>;
470
- } | {
471
- readonly _tag: "PressedEscape";
472
472
  } | {
473
473
  readonly _tag: "PressedGripKey";
474
474
  readonly itemId: string;
@@ -559,6 +559,8 @@ export declare const subscriptions: <Prefix extends string>(keyPrefix: Prefix) =
559
559
  }>;
560
560
  }>;
561
561
  }, {
562
+ readonly _tag: "PressedEscape";
563
+ } | {
562
564
  readonly _tag: "CancelledPointer";
563
565
  } | {
564
566
  readonly _tag: "CompletedAnnounceReorder";
@@ -567,6 +569,9 @@ export declare const subscriptions: <Prefix extends string>(keyPrefix: Prefix) =
567
569
  } | {
568
570
  readonly _tag: "GotDragAndDropMessage";
569
571
  readonly message: {
572
+ readonly _tag: "PressedArrowKey";
573
+ readonly direction: "Down" | "Left" | "NextContainer" | "PreviousContainer" | "Right" | "Up";
574
+ } | {
570
575
  readonly _tag: "ActivatedKeyboardDrag";
571
576
  readonly itemId: string;
572
577
  readonly containerId: string;
@@ -593,9 +598,6 @@ export declare const subscriptions: <Prefix extends string>(keyPrefix: Prefix) =
593
598
  readonly containerId: string;
594
599
  readonly index: number;
595
600
  }>;
596
- } | {
597
- readonly _tag: "PressedArrowKey";
598
- readonly direction: "Down" | "Left" | "NextContainer" | "PreviousContainer" | "Right" | "Up";
599
601
  } | {
600
602
  readonly _tag: "PressedDraggable";
601
603
  readonly itemId: string;
@@ -613,8 +615,6 @@ export declare const subscriptions: <Prefix extends string>(keyPrefix: Prefix) =
613
615
  readonly clientX: number;
614
616
  readonly clientY: number;
615
617
  readonly maybeIndex: Option.Option<number>;
616
- } | {
617
- readonly _tag: "PressedEscape";
618
618
  } | {
619
619
  readonly _tag: "PressedGripKey";
620
620
  readonly itemId: string;
@@ -710,6 +710,8 @@ export declare const subscriptions: <Prefix extends string>(keyPrefix: Prefix) =
710
710
  }>;
711
711
  }>;
712
712
  }, {
713
+ readonly _tag: "PressedEscape";
714
+ } | {
713
715
  readonly _tag: "CancelledPointer";
714
716
  } | {
715
717
  readonly _tag: "CompletedAnnounceReorder";
@@ -718,6 +720,9 @@ export declare const subscriptions: <Prefix extends string>(keyPrefix: Prefix) =
718
720
  } | {
719
721
  readonly _tag: "GotDragAndDropMessage";
720
722
  readonly message: {
723
+ readonly _tag: "PressedArrowKey";
724
+ readonly direction: "Down" | "Left" | "NextContainer" | "PreviousContainer" | "Right" | "Up";
725
+ } | {
721
726
  readonly _tag: "ActivatedKeyboardDrag";
722
727
  readonly itemId: string;
723
728
  readonly containerId: string;
@@ -744,9 +749,6 @@ export declare const subscriptions: <Prefix extends string>(keyPrefix: Prefix) =
744
749
  readonly containerId: string;
745
750
  readonly index: number;
746
751
  }>;
747
- } | {
748
- readonly _tag: "PressedArrowKey";
749
- readonly direction: "Down" | "Left" | "NextContainer" | "PreviousContainer" | "Right" | "Up";
750
752
  } | {
751
753
  readonly _tag: "PressedDraggable";
752
754
  readonly itemId: string;
@@ -764,8 +766,6 @@ export declare const subscriptions: <Prefix extends string>(keyPrefix: Prefix) =
764
766
  readonly clientX: number;
765
767
  readonly clientY: number;
766
768
  readonly maybeIndex: Option.Option<number>;
767
- } | {
768
- readonly _tag: "PressedEscape";
769
769
  } | {
770
770
  readonly _tag: "PressedGripKey";
771
771
  readonly itemId: string;
@@ -857,6 +857,8 @@ export declare const subscriptions: <Prefix extends string>(keyPrefix: Prefix) =
857
857
  }>;
858
858
  }>;
859
859
  }, {
860
+ readonly _tag: "PressedEscape";
861
+ } | {
860
862
  readonly _tag: "CancelledPointer";
861
863
  } | {
862
864
  readonly _tag: "CompletedAnnounceReorder";
@@ -865,6 +867,9 @@ export declare const subscriptions: <Prefix extends string>(keyPrefix: Prefix) =
865
867
  } | {
866
868
  readonly _tag: "GotDragAndDropMessage";
867
869
  readonly message: {
870
+ readonly _tag: "PressedArrowKey";
871
+ readonly direction: "Down" | "Left" | "NextContainer" | "PreviousContainer" | "Right" | "Up";
872
+ } | {
868
873
  readonly _tag: "ActivatedKeyboardDrag";
869
874
  readonly itemId: string;
870
875
  readonly containerId: string;
@@ -891,9 +896,6 @@ export declare const subscriptions: <Prefix extends string>(keyPrefix: Prefix) =
891
896
  readonly containerId: string;
892
897
  readonly index: number;
893
898
  }>;
894
- } | {
895
- readonly _tag: "PressedArrowKey";
896
- readonly direction: "Down" | "Left" | "NextContainer" | "PreviousContainer" | "Right" | "Up";
897
899
  } | {
898
900
  readonly _tag: "PressedDraggable";
899
901
  readonly itemId: string;
@@ -911,8 +913,6 @@ export declare const subscriptions: <Prefix extends string>(keyPrefix: Prefix) =
911
913
  readonly clientX: number;
912
914
  readonly clientY: number;
913
915
  readonly maybeIndex: Option.Option<number>;
914
- } | {
915
- readonly _tag: "PressedEscape";
916
916
  } | {
917
917
  readonly _tag: "PressedGripKey";
918
918
  readonly itemId: string;
@@ -1055,6 +1055,8 @@ export declare const view: import("foldkit/submodel").View<{
1055
1055
  }>;
1056
1056
  }>;
1057
1057
  }, {
1058
+ readonly _tag: "PressedEscape";
1059
+ } | {
1058
1060
  readonly _tag: "CancelledPointer";
1059
1061
  } | {
1060
1062
  readonly _tag: "CompletedAnnounceReorder";
@@ -1063,6 +1065,9 @@ export declare const view: import("foldkit/submodel").View<{
1063
1065
  } | {
1064
1066
  readonly _tag: "GotDragAndDropMessage";
1065
1067
  readonly message: {
1068
+ readonly _tag: "PressedArrowKey";
1069
+ readonly direction: "Down" | "Left" | "NextContainer" | "PreviousContainer" | "Right" | "Up";
1070
+ } | {
1066
1071
  readonly _tag: "ActivatedKeyboardDrag";
1067
1072
  readonly itemId: string;
1068
1073
  readonly containerId: string;
@@ -1089,9 +1094,6 @@ export declare const view: import("foldkit/submodel").View<{
1089
1094
  readonly containerId: string;
1090
1095
  readonly index: number;
1091
1096
  }>;
1092
- } | {
1093
- readonly _tag: "PressedArrowKey";
1094
- readonly direction: "Down" | "Left" | "NextContainer" | "PreviousContainer" | "Right" | "Up";
1095
1097
  } | {
1096
1098
  readonly _tag: "PressedDraggable";
1097
1099
  readonly itemId: string;
@@ -1109,8 +1111,6 @@ export declare const view: import("foldkit/submodel").View<{
1109
1111
  readonly clientX: number;
1110
1112
  readonly clientY: number;
1111
1113
  readonly maybeIndex: Option.Option<number>;
1112
- } | {
1113
- readonly _tag: "PressedEscape";
1114
1114
  } | {
1115
1115
  readonly _tag: "PressedGripKey";
1116
1116
  readonly itemId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"sortable.d.ts","sourceRoot":"","sources":["../../../src/sortable/sortable.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sortable.d.ts","sourceRoot":"","sources":["../../../src/sortable/sortable.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ import * as Subscription from "foldkit/subscription";
10
10
  import * as Update from "foldkit/update";
11
11
  import * as Announcer from "../announcer/announcer.js";
12
12
  import * as Button from "../button/button.js";
13
- import { LEFT_BUTTON, activatedKeyboardDrag, cancelledDrag, escapeKeys, insertionIndex, isCarrying, markDragging, measureLift, movedPointer, phaseOf, pressedDraggable, releasedPointer, } from "../drag/drag.js";
13
+ import { LEFT_BUTTON, activatedKeyboardDrag, cancelledDrag, escapeKeys, insertionIndex, isCarrying, markDragging, measureLift, movedPointer, phaseOf, pressedDraggable, pressingPointer, releasedPointer, } from "../drag/drag.js";
14
14
  import * as Glyph from "../glyph/glyph.js";
15
15
  import * as IconButton from "../iconButton/iconButton.js";
16
16
  import { LOCALE } from "../locale/locale.js";
@@ -289,15 +289,7 @@ const pointerAt = (hold, event) => (__foldkitBrandViewResult(({
289
289
  maybeIndex: pointerIndex(hold.listId, hold.heldHook, event.clientX, event.clientY),
290
290
  }), "@gjermundgaraba-designs/pixel-paper/src/sortable/sortable.js#pointerAt"));
291
291
  /** The pressing pointer's moves, release and cancel; another pointer's are not the list's. */
292
- export const pointerMessages = (hold) => {
293
- const fromPressing = (type) => __foldkitBrandViewResult((Stream.fromEventListener(document, type).pipe(Stream.filter((event) => __foldkitBrandViewResult((event.pointerId === hold.pointerId), "@gjermundgaraba-designs/pixel-paper/src/sortable/sortable.js#anonymous~25")))), "@gjermundgaraba-designs/pixel-paper/src/sortable/sortable.js#fromPressing");
294
- const streams = [
295
- Stream.map(fromPressing("pointermove"), (event) => __foldkitBrandViewResult((Message.MovedPointer(pointerAt(hold, event))), "@gjermundgaraba-designs/pixel-paper/src/sortable/sortable.js#anonymous~26")),
296
- Stream.map(fromPressing("pointerup"), (event) => __foldkitBrandViewResult((Message.ReleasedPointer(pointerAt(hold, event))), "@gjermundgaraba-designs/pixel-paper/src/sortable/sortable.js#anonymous~27")),
297
- Stream.map(fromPressing("pointercancel"), () => __foldkitBrandViewResult((Message.CancelledPointer()), "@gjermundgaraba-designs/pixel-paper/src/sortable/sortable.js#anonymous~28")),
298
- ];
299
- return __foldkitBrandViewResult((Stream.mergeAll(streams, { concurrency: "unbounded" })), "@gjermundgaraba-designs/pixel-paper/src/sortable/sortable.js#pointerMessages");
300
- };
292
+ export const pointerMessages = (hold) => __foldkitBrandViewResult((Stream.map(pressingPointer(hold.pointerId), (event) => __foldkitBrandViewResult((Match.value(event.type).pipe(Match.when("pointermove", () => __foldkitBrandViewResult((Message.MovedPointer(pointerAt(hold, event))), "@gjermundgaraba-designs/pixel-paper/src/sortable/sortable.js#anonymous~26")), Match.when("pointerup", () => __foldkitBrandViewResult((Message.ReleasedPointer(pointerAt(hold, event))), "@gjermundgaraba-designs/pixel-paper/src/sortable/sortable.js#anonymous~27")), Match.orElse(() => __foldkitBrandViewResult((Message.CancelledPointer()), "@gjermundgaraba-designs/pixel-paper/src/sortable/sortable.js#anonymous~28")))), "@gjermundgaraba-designs/pixel-paper/src/sortable/sortable.js#anonymous~25"))), "@gjermundgaraba-designs/pixel-paper/src/sortable/sortable.js#pointerMessages");
301
293
  const ownSubscriptions = Subscription.make()((entry) => (__foldkitBrandViewResult(({
302
294
  pointer: entry({ maybeHold: Schema.Option(PointerHold) }, {
303
295
  modelToDependencies: (model) => (__foldkitBrandViewResult(({
@@ -326,8 +326,6 @@ export declare const update: (model: Model, message: Message) => Readonly<{
326
326
  readonly pendingDismissVersion: number;
327
327
  readonly isHovered: boolean;
328
328
  readonly swipeState: {
329
- readonly _tag: "Idle";
330
- } | {
331
329
  readonly _tag: "Dismissing";
332
330
  readonly offsetX: number;
333
331
  readonly direction: "Left" | "Right";
@@ -336,6 +334,8 @@ export declare const update: (model: Model, message: Message) => Readonly<{
336
334
  readonly pointerId: number;
337
335
  readonly startX: number;
338
336
  readonly currentX: number;
337
+ } | {
338
+ readonly _tag: "Idle";
339
339
  } | {
340
340
  readonly _tag: "Settling";
341
341
  readonly offsetX: number;
@@ -371,15 +371,15 @@ export declare const update: (model: Model, message: Message) => Readonly<{
371
371
  readonly _tag: "GotAnimationMessage";
372
372
  readonly entryId: string;
373
373
  readonly message: {
374
- readonly _tag: "Hid";
375
- } | {
376
- readonly _tag: "Showed";
377
- } | {
378
374
  readonly _tag: "CompletedWaitForPaint";
379
375
  readonly generation: number;
380
376
  } | {
381
377
  readonly _tag: "EndedAnimation";
382
378
  readonly generation: number;
379
+ } | {
380
+ readonly _tag: "Hid";
381
+ } | {
382
+ readonly _tag: "Showed";
383
383
  };
384
384
  } | {
385
385
  readonly _tag: "HoveredEntry";
@@ -557,8 +557,6 @@ export declare const view: import("foldkit/submodel").View<{
557
557
  readonly pendingDismissVersion: number;
558
558
  readonly isHovered: boolean;
559
559
  readonly swipeState: {
560
- readonly _tag: "Idle";
561
- } | {
562
560
  readonly _tag: "Dismissing";
563
561
  readonly offsetX: number;
564
562
  readonly direction: "Left" | "Right";
@@ -567,6 +565,8 @@ export declare const view: import("foldkit/submodel").View<{
567
565
  readonly pointerId: number;
568
566
  readonly startX: number;
569
567
  readonly currentX: number;
568
+ } | {
569
+ readonly _tag: "Idle";
570
570
  } | {
571
571
  readonly _tag: "Settling";
572
572
  readonly offsetX: number;
@@ -602,15 +602,15 @@ export declare const view: import("foldkit/submodel").View<{
602
602
  readonly _tag: "GotAnimationMessage";
603
603
  readonly entryId: string;
604
604
  readonly message: {
605
- readonly _tag: "Hid";
606
- } | {
607
- readonly _tag: "Showed";
608
- } | {
609
605
  readonly _tag: "CompletedWaitForPaint";
610
606
  readonly generation: number;
611
607
  } | {
612
608
  readonly _tag: "EndedAnimation";
613
609
  readonly generation: number;
610
+ } | {
611
+ readonly _tag: "Hid";
612
+ } | {
613
+ readonly _tag: "Showed";
614
614
  };
615
615
  } | {
616
616
  readonly _tag: "HoveredEntry";
@@ -6,6 +6,8 @@ export type ViewConfig<Message> = Readonly<{
6
6
  id: string;
7
7
  /** Pixel caps in the inverted title bar. */
8
8
  title: string;
9
+ /** A quiet IconButton before the kind glyph: a Reel's grip. */
10
+ lead?: ReadonlyArray<Html>;
9
11
  /** What kind of thing it is: a terminal, a note, a machine. */
10
12
  glyph?: GlyphName;
11
13
  /** A chip in the title bar: its state. */
@@ -1 +1 @@
1
- {"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../../../src/window/window.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAOpD,wDAAwD;AACxD,MAAM,MAAM,UAAU,CAAC,OAAO,IAAI,QAAQ,CAAC;IACzC,oFAAoF;IACpF,EAAE,EAAE,MAAM,CAAC;IACX,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,aAAa,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;IACtC,sDAAsD;IACtD,KAAK,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IAC5B,oEAAoE;IACpE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,aAAa,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;IACnC,iEAAiE;IACjE,IAAI,CAAC,EAAE,aAAa,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;IACpC,8DAA8D;IAC9D,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC,CAAC;AAEH;;6DAE6D;AAC7D,eAAO,MAAM,IAAI,GAAI,OAAO,UAAU,UAAU,CAAC,OAAO,CAAC,KAAK,WAAW,CAAC,OAAO,CAAC,KAAG,IAoCpF,CAAC"}
1
+ {"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../../../src/window/window.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAOpD,wDAAwD;AACxD,MAAM,MAAM,UAAU,CAAC,OAAO,IAAI,QAAQ,CAAC;IACzC,oFAAoF;IACpF,EAAE,EAAE,MAAM,CAAC;IACX,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,IAAI,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3B,+DAA+D;IAC/D,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,aAAa,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;IACtC,sDAAsD;IACtD,KAAK,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IAC5B,oEAAoE;IACpE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,aAAa,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;IACnC,iEAAiE;IACjE,IAAI,CAAC,EAAE,aAAa,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;IACpC,8DAA8D;IAC9D,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC,CAAC;AAEH;;6DAE6D;AAC7D,eAAO,MAAM,IAAI,GAAI,OAAO,UAAU,UAAU,CAAC,OAAO,CAAC,KAAK,WAAW,CAAC,OAAO,CAAC,KAAG,IAsCpF,CAAC"}
@@ -7,13 +7,14 @@ import { slotView } from "../slot/slot.js";
7
7
  * its body scrolls inside, and its title bar carries its kind, its state and its tools. A
8
8
  * region landmark (`<section>`) named by its `h2` title. */
9
9
  export const view = (config, h) => {
10
- const { id, title, glyph, status = [], tools = [], onClose, body, foot = [], isFlush = false, } = config;
10
+ const { id, title, lead = [], glyph, status = [], tools = [], onClose, body, foot = [], isFlush = false, } = config;
11
11
  return __foldkitBrandViewResult((h.section([
12
12
  h.Id(id),
13
13
  h.AriaLabelledBy(titleId(id)),
14
14
  h.Class(isFlush ? "panel window flush" : "panel window"),
15
15
  ], [
16
16
  h.header([h.Class("panel-tb")], [
17
+ ...slotView("span", "panel-lead", lead, h),
17
18
  ...(glyph === undefined ? [] : [Glyph.view({ name: glyph }, h)]),
18
19
  h.h2([h.Id(titleId(id))], [title]),
19
20
  ...status,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gjermundgaraba-designs/pixel-paper",
3
- "version": "0.18.0",
3
+ "version": "0.19.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
package/src/drag/drag.ts CHANGED
@@ -1,7 +1,7 @@
1
- // Shared by Board and Sortable, the two users of @foldkit/ui's DragAndDrop: the phase a drag
2
- // is in, the DragAndDrop Messages both build, what a press lifts, Escape taken before anything
3
- // else, the lifted copy's measure, and the closest-centre drop target a sortable resolves for
4
- // a pointer.
1
+ // Shared by Board and Sortable, the two users of @foldkit/ui's DragAndDrop, and Reel, which
2
+ // holds its own: the phase a drag is in, the DragAndDrop Messages both build, what a press
3
+ // lifts, Escape taken before anything else, the pressing pointer's events, the lifted copy's
4
+ // measure, and the closest-centre drop target a sortable resolves for a pointer.
5
5
 
6
6
  import { DragAndDrop as UiDragAndDrop } from "@foldkit/ui";
7
7
  import { Array, Effect, Option, Order, Stream, pipe } from "effect";
@@ -110,6 +110,21 @@ export const escapeKeys = <Message>(message: Message): Stream.Stream<Message> =>
110
110
  options: { capture: true },
111
111
  });
112
112
 
113
+ // POINTER
114
+
115
+ /** The moves, release and cancel of the pointer `pointerId`, on the document; another
116
+ * pointer's are not the drag's. */
117
+ export const pressingPointer = (pointerId: number): Stream.Stream<PointerEvent> =>
118
+ Stream.filter(
119
+ Stream.mergeAll(
120
+ Array.map(["pointermove", "pointerup", "pointercancel"] as const, (type) =>
121
+ Stream.fromEventListener<PointerEvent>(document, type),
122
+ ),
123
+ { concurrency: "unbounded" },
124
+ ),
125
+ (event) => event.pointerId === pointerId,
126
+ );
127
+
113
128
  // LIFTED COPY
114
129
 
115
130
  /** Sizes the copy that follows the pointer to the element `sourceSelector` finds, and keeps the
package/src/index.ts CHANGED
@@ -65,6 +65,7 @@ export * as Prose from "./prose/index.ts";
65
65
  export * as QueryChip from "./queryChip/index.ts";
66
66
  export * as RadioChoices from "./radioChoices/index.ts";
67
67
  export * as Rail from "./rail/index.ts";
68
+ export * as Reel from "./reel/index.ts";
68
69
  export * as Remote from "./remote/index.ts";
69
70
  export * as Rows from "./rows/index.ts";
70
71
  export * as Scheme from "./scheme/index.ts";
@@ -3433,7 +3433,8 @@ dialog.veil:focus {
3433
3433
  padding: 6px;
3434
3434
  }
3435
3435
 
3436
- .sortable-lift {
3436
+ .sortable-lift,
3437
+ .reel-lift {
3437
3438
  width: var(--lift-width, 320px);
3438
3439
  translate: var(--lift-x, 0) var(--lift-y, 0);
3439
3440
  }
@@ -5121,6 +5122,11 @@ dialog.veil:focus {
5121
5122
  user-select: none;
5122
5123
  }
5123
5124
 
5125
+ /* a lead (a reel's grip) trims the bar's left, as a panel's does */
5126
+ .window > .panel-tb:has(> .panel-lead) {
5127
+ padding-left: 3px;
5128
+ }
5129
+
5124
5130
  .window > .panel-tb h2 {
5125
5131
  flex: 1;
5126
5132
  min-width: 0;
@@ -5163,6 +5169,227 @@ dialog.veil:focus {
5163
5169
  min-width: 0;
5164
5170
  }
5165
5171
 
5172
+ /* ---------- the reel: a scrolling row of columns of panes ---------- */
5173
+
5174
+ /* the reel takes its height from whatever holds it; the held copy hangs from it, outside the
5175
+ scroller, whose containment would hold a fixed copy inside it */
5176
+ .reel {
5177
+ height: 100%;
5178
+ min-height: 0;
5179
+ }
5180
+
5181
+ /* the scroller, sideways and, where a column is taller than the view, down. Its size is what
5182
+ a column's width (100cqw) and least height (100cqh) are shares of, so it takes no padding */
5183
+ .reel-view {
5184
+ height: 100%;
5185
+ overflow: auto;
5186
+ overscroll-behavior: contain;
5187
+ container-type: size;
5188
+ }
5189
+
5190
+ /* the columns in a row, and the panes' containing block. Each pane is pinned to its slot by
5191
+ anchor positioning, so a move changes where a pane is drawn and never its place in the page */
5192
+ .reel-track {
5193
+ position: relative;
5194
+ display: flex;
5195
+ align-items: flex-start;
5196
+ width: max-content;
5197
+ min-width: 100%;
5198
+ min-height: 100%;
5199
+ padding-bottom: var(--reel-gutter);
5200
+ }
5201
+
5202
+ .reel-gap {
5203
+ position: relative;
5204
+ flex: none;
5205
+ align-self: stretch;
5206
+ width: var(--reel-gutter);
5207
+ }
5208
+
5209
+ /* a column is width × (view − gutter) − gutter wide, so columns whose widths add up to one
5210
+ fill the view with a gutter between each and at either side; never under the minimum. It is
5211
+ the view's height, and taller where its panes need more, which the view scrolls to */
5212
+ .reel-column {
5213
+ display: flex;
5214
+ flex: none;
5215
+ flex-direction: column;
5216
+ width: max(
5217
+ var(--reel-column-min),
5218
+ var(--reel-width) * (100cqw - var(--reel-gutter)) - var(--reel-gutter)
5219
+ );
5220
+ min-height: calc(100cqh - var(--reel-gutter));
5221
+ }
5222
+
5223
+ /* the column's head, in the gutter above its panes: its grip and its width */
5224
+ .reel-column-head {
5225
+ display: flex;
5226
+ flex: none;
5227
+ align-items: center;
5228
+ gap: var(--space-s);
5229
+ padding-block: 4px;
5230
+ }
5231
+
5232
+ .reel-width {
5233
+ font-family: var(--font-px);
5234
+ font-size: var(--type-state);
5235
+ letter-spacing: var(--tracking-state);
5236
+ text-transform: uppercase;
5237
+ color: var(--muted);
5238
+ }
5239
+
5240
+ /* a slot holds a pane's place, its share of the column by weight; the pane is drawn over it */
5241
+ .reel-slot {
5242
+ position: relative;
5243
+ flex: var(--reel-weight, 1) 1 0;
5244
+ min-height: var(--reel-pane-min);
5245
+ anchor-name: var(--reel-anchor);
5246
+ }
5247
+
5248
+ /* the splitters: the gutter between two panes, and the one after each column */
5249
+ .reel-split {
5250
+ position: relative;
5251
+ flex: none;
5252
+ height: var(--reel-gutter);
5253
+ cursor: row-resize;
5254
+ touch-action: none;
5255
+ }
5256
+
5257
+ .reel-resize {
5258
+ cursor: col-resize;
5259
+ touch-action: none;
5260
+ }
5261
+
5262
+ /* a splitter shows itself as a 2px ink line along the middle of its gutter while it is
5263
+ hovered or focused; focused, the ring is the system's */
5264
+ .reel-resize::after,
5265
+ .reel-split::after {
5266
+ content: "";
5267
+ position: absolute;
5268
+ background: var(--ink);
5269
+ opacity: 0;
5270
+ pointer-events: none;
5271
+ }
5272
+
5273
+ .reel-resize::after {
5274
+ top: 0;
5275
+ bottom: var(--reel-gutter);
5276
+ left: calc(50% - 1px);
5277
+ width: var(--line);
5278
+ }
5279
+
5280
+ .reel-split::after {
5281
+ left: 0;
5282
+ right: 0;
5283
+ top: calc(50% - 1px);
5284
+ height: var(--line);
5285
+ }
5286
+
5287
+ .reel-resize:is(:hover, :focus-visible)::after,
5288
+ .reel-split:is(:hover, :focus-visible)::after {
5289
+ opacity: 1;
5290
+ }
5291
+
5292
+ .reel-resize:focus-visible,
5293
+ .reel-split:focus-visible {
5294
+ outline-offset: -2px;
5295
+ }
5296
+
5297
+ /* where a drop would land: a 2px dashed ink line down the gap it would open, or across the
5298
+ gutter between the panes it would join, drawn over the layout so nothing moves under it */
5299
+ .reel-gap.drop-here::before {
5300
+ content: "";
5301
+ position: absolute;
5302
+ top: 0;
5303
+ bottom: var(--reel-gutter);
5304
+ left: calc(50% - 1px);
5305
+ border-left: var(--line) dashed var(--ink);
5306
+ pointer-events: none;
5307
+ }
5308
+
5309
+ .reel-slot:is(.drop-before, .drop-after)::before {
5310
+ content: "";
5311
+ position: absolute;
5312
+ left: 0;
5313
+ right: 0;
5314
+ border-top: var(--line) dashed var(--ink);
5315
+ pointer-events: none;
5316
+ }
5317
+
5318
+ .reel-slot.drop-before::before {
5319
+ top: calc(var(--reel-gutter) / -2 - 1px);
5320
+ }
5321
+
5322
+ .reel-slot.drop-after::before {
5323
+ bottom: calc(var(--reel-gutter) / -2 - 1px);
5324
+ }
5325
+
5326
+ /* the panes' layer is no box of its own: each pane's containing block is the track */
5327
+ .reel-panes {
5328
+ display: contents;
5329
+ }
5330
+
5331
+ /* a pane or a column scrolled into view keeps its gutter showing */
5332
+ .reel-pane,
5333
+ .reel-column {
5334
+ scroll-margin: var(--reel-gutter);
5335
+ }
5336
+
5337
+ .reel-pane {
5338
+ position: absolute;
5339
+ position-anchor: var(--reel-anchor);
5340
+ top: anchor(top);
5341
+ right: anchor(right);
5342
+ bottom: anchor(bottom);
5343
+ left: anchor(left);
5344
+ min-width: 0;
5345
+ }
5346
+
5347
+ /* the focused pane lifts onto the card shadow; taking focus itself (it holds no control), it
5348
+ keeps the system's ring outside its window */
5349
+ .reel-pane.focused > .window {
5350
+ box-shadow: var(--shadow-card);
5351
+ }
5352
+
5353
+ .reel-pane:focus-visible {
5354
+ outline: 0;
5355
+ }
5356
+
5357
+ .reel-pane:focus-visible > .window {
5358
+ outline: var(--line) solid var(--ink);
5359
+ outline-offset: 2px;
5360
+ }
5361
+
5362
+ .reel-pane.drag-dim {
5363
+ opacity: 0.4;
5364
+ }
5365
+
5366
+ /* only the grips lift: a pane's text selects and its terminal takes the pointer */
5367
+ [data-reel-grip] {
5368
+ cursor: grab;
5369
+ touch-action: none;
5370
+ }
5371
+
5372
+ /* the held copy, following the pointer from the window's corner (its transform puts it at the
5373
+ pointer): the title bars alone, tinted head on the card shadow */
5374
+ .reel-lift {
5375
+ position: fixed;
5376
+ top: 0;
5377
+ left: 0;
5378
+ z-index: 9999;
5379
+ pointer-events: none;
5380
+ }
5381
+
5382
+ .reel-lifted {
5383
+ display: grid;
5384
+ gap: var(--space-s);
5385
+ }
5386
+
5387
+ .reel-lifted .window {
5388
+ height: auto;
5389
+ background: var(--head);
5390
+ box-shadow: var(--shadow-card);
5391
+ }
5392
+
5166
5393
  /* ---------- images and media: a picture or a player in a 2px ink frame, at rest ---------- */
5167
5394
 
5168
5395
  /* a figure sits at rest wherever it is placed (a panel, prose): no print shadow. The frame