@motion-proto/live-tokens 0.85.0 → 0.87.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 (43) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +1 -1
  3. package/package.json +1 -1
  4. package/src/editor/component-editor/SlidePagerEditor.svelte +118 -0
  5. package/src/editor/component-editor/VideoFrameEditor.svelte +73 -0
  6. package/src/editor/component-editor/VideoLightboxEditor.svelte +108 -0
  7. package/src/editor/component-editor/registry.ts +40 -1
  8. package/src/editor/core/sketch/sketchLayer.ts +7 -0
  9. package/src/editor/overlay/LiveEditorOverlay.svelte +45 -52
  10. package/src/editor/pages/ComponentEditorPage.svelte +1 -1
  11. package/src/editor/ui/ThemePanel.svelte +9 -53
  12. package/src/live-tokens/data/themes/autumn.json +97 -0
  13. package/src/live-tokens/data/themes/halloween.json +97 -0
  14. package/src/live-tokens/data/themes/midnight-study.json +97 -0
  15. package/src/live-tokens/data/themes/ocean.json +97 -0
  16. package/src/live-tokens/data/themes/royal-velvet.json +97 -0
  17. package/src/live-tokens/data/themes/sketchy.json +97 -0
  18. package/src/live-tokens/data/themes/spring-meadow.json +97 -0
  19. package/src/live-tokens/data/themes/sunset.json +97 -0
  20. package/src/system/assets/slide-04.webp +0 -0
  21. package/src/system/assets/slide-05.webp +0 -0
  22. package/src/system/assets/slide-06.webp +0 -0
  23. package/src/system/assets/watch-navigation-poster.webp +0 -0
  24. package/src/system/assets/watch-navigation.mp4 +0 -0
  25. package/src/system/components/ImageLightbox.svelte +20 -21
  26. package/src/system/components/SlidePager.svelte +516 -0
  27. package/src/system/components/VideoFrame.svelte +284 -0
  28. package/src/system/components/VideoLightbox.svelte +454 -0
  29. package/src/testing-js/{chunk-RDHCBQ6I.js → chunk-FTLASW2R.js} +366 -2
  30. package/src/testing-js/chunk-FTLASW2R.js.map +1 -0
  31. package/src/testing-js/{chunk-XV5CYADO.js → chunk-NXRFTTVL.js} +10 -6
  32. package/src/testing-js/chunk-NXRFTTVL.js.map +1 -0
  33. package/src/testing-js/component-behavior.contract.js +1 -1
  34. package/src/testing-js/component-editor.contract.js +1 -1
  35. package/src/testing-js/component-render.contract.js +1 -1
  36. package/src/testing-js/index.d.ts +2 -2
  37. package/src/testing-js/index.js +2 -2
  38. package/src/testing-js/page-compliance.contract.js +1 -1
  39. package/src/testing-js/{vitest-BMLIbDs2.d.ts → vitest-5vWtqwWe.d.ts} +2 -2
  40. package/src/testing-js/vitest.d.ts +1 -1
  41. package/src/testing-js/vitest.js +2 -2
  42. package/src/testing-js/chunk-RDHCBQ6I.js.map +0 -1
  43. package/src/testing-js/chunk-XV5CYADO.js.map +0 -1
@@ -4007,6 +4007,103 @@
4007
4007
  "--slider-value-font-weight": "--font-weight-normal",
4008
4008
  "--slider-value-line-height": "--line-height-normal"
4009
4009
  }
4010
+ },
4011
+ "videolightbox": {
4012
+ "name": "sketchy",
4013
+ "component": "videolightbox",
4014
+ "createdAt": "2026-09-21T17:00:00.000Z",
4015
+ "updatedAt": "2026-09-21T17:00:00.000Z",
4016
+ "aliases": {
4017
+ "--videolightbox-tile-surface": "--color-transparent",
4018
+ "--videolightbox-tile-border": "--color-transparent",
4019
+ "--videolightbox-tile-border-width": "--border-width-1",
4020
+ "--videolightbox-tile-radius": "--radius-none",
4021
+ "--videolightbox-tile-shadow": "--shadow-md",
4022
+ "--videolightbox-scrim-surface": "--scrim-high",
4023
+ "--videolightbox-overlay-padding": "--space-64",
4024
+ "--videolightbox-overlay-duration": "--duration-500",
4025
+ "--videolightbox-overlay-easing": "--ease-out-quad",
4026
+ "--videolightbox-chrome-surface": "--surface-neutral-low",
4027
+ "--videolightbox-chrome-border": "--border-brand",
4028
+ "--videolightbox-chrome-border-width": "--border-width-1",
4029
+ "--videolightbox-chrome-radius": "--radius-none",
4030
+ "--videolightbox-chrome-icon": "--text-primary",
4031
+ "--videolightbox-chrome-hover-surface": "--surface-brand-high",
4032
+ "--videolightbox-badge-default-surface": "--surface-brand-lower",
4033
+ "--videolightbox-badge-default-border": "--border-brand-medium",
4034
+ "--videolightbox-badge-default-border-width": "--border-width-2",
4035
+ "--videolightbox-badge-default-icon": "--text-primary",
4036
+ "--videolightbox-badge-default-size": "--space-64",
4037
+ "--videolightbox-badge-default-icon-size": "--icon-size-4xl",
4038
+ "--videolightbox-badge-duration": "--duration-200",
4039
+ "--videolightbox-badge-easing": "--ease-out-quad",
4040
+ "--videolightbox-badge-hover-surface": "--surface-brand",
4041
+ "--videolightbox-badge-hover-border": "--border-brand-strong",
4042
+ "--videolightbox-badge-hover-icon": "--text-primary"
4043
+ }
4044
+ },
4045
+ "videoframe": {
4046
+ "name": "sketchy",
4047
+ "component": "videoframe",
4048
+ "createdAt": "2026-09-21T18:00:00.000Z",
4049
+ "updatedAt": "2026-09-21T18:00:00.000Z",
4050
+ "aliases": {
4051
+ "--videoframe-frame-surface": "--surface-neutral-lowest",
4052
+ "--videoframe-clip-surface": "--color-transparent",
4053
+ "--videoframe-frame-border": "--border-neutral",
4054
+ "--videoframe-frame-border-width": "--border-width-1",
4055
+ "--videoframe-frame-radius": "--radius-none",
4056
+ "--videoframe-badge-default-surface": "--surface-brand-lower",
4057
+ "--videoframe-badge-default-border": "--border-brand-medium",
4058
+ "--videoframe-badge-default-border-width": "--border-width-2",
4059
+ "--videoframe-badge-default-icon": "--text-primary",
4060
+ "--videoframe-badge-default-size": "--space-64",
4061
+ "--videoframe-badge-default-icon-size": "--icon-size-4xl",
4062
+ "--videoframe-badge-duration": "--duration-200",
4063
+ "--videoframe-badge-easing": "--ease-out-quad",
4064
+ "--videoframe-badge-hover-surface": "--surface-brand",
4065
+ "--videoframe-badge-hover-border": "--border-brand-strong",
4066
+ "--videoframe-badge-hover-icon": "--text-primary"
4067
+ }
4068
+ },
4069
+ "slidepager": {
4070
+ "name": "sketchy",
4071
+ "component": "slidepager",
4072
+ "createdAt": "2026-09-21T18:00:00.000Z",
4073
+ "updatedAt": "2026-09-21T18:00:00.000Z",
4074
+ "aliases": {
4075
+ "--slidepager-frame-surface": "--surface-neutral-lower",
4076
+ "--slidepager-frame-border": "--border-neutral-subtle",
4077
+ "--slidepager-frame-border-width": "--border-width-1",
4078
+ "--slidepager-frame-radius": "--radius-none",
4079
+ "--slidepager-frame-shadow": "--shadow-md",
4080
+ "--slidepager-bar-gap": "--space-16",
4081
+ "--slidepager-bar-padding": "--space-12",
4082
+ "--slidepager-control-surface": "--surface-neutral-low",
4083
+ "--slidepager-control-border": "--border-neutral",
4084
+ "--slidepager-control-border-width": "--border-width-1",
4085
+ "--slidepager-control-radius": "--radius-none",
4086
+ "--slidepager-control-size": "--space-40",
4087
+ "--slidepager-control-icon": "--text-primary",
4088
+ "--slidepager-control-icon-size": "--icon-size-md",
4089
+ "--slidepager-control-hover-surface": "--surface-brand-high",
4090
+ "--slidepager-control-hover-border": "--border-brand",
4091
+ "--slidepager-control-hover-icon": "--text-inverted",
4092
+ "--slidepager-control-disabled-surface": "--surface-neutral-lower",
4093
+ "--slidepager-control-disabled-border": "--border-neutral-subtle",
4094
+ "--slidepager-control-disabled-icon": "--text-disabled",
4095
+ "--slidepager-counter-text": "--text-secondary",
4096
+ "--slidepager-counter-font-family": "--font-sans",
4097
+ "--slidepager-counter-font-size": "--font-size-lg",
4098
+ "--slidepager-counter-font-weight": "--font-weight-medium",
4099
+ "--slidepager-counter-line-height": "--line-height-normal",
4100
+ "--slidepager-counter-letter-spacing": "--letter-spacing-normal",
4101
+ "--slidepager-scrim-surface": "--scrim-high",
4102
+ "--slidepager-overlay-padding": "--space-64",
4103
+ "--slidepager-close-margin": "--space-24",
4104
+ "--slidepager-overlay-duration": "--duration-300",
4105
+ "--slidepager-overlay-easing": "--ease-out-quad"
4106
+ }
4010
4107
  }
4011
4108
  },
4012
4109
  "componentSchemaVersion": 38
@@ -3980,6 +3980,103 @@
3980
3980
  "--slider-value-font-weight": "--font-weight-normal",
3981
3981
  "--slider-value-line-height": "--line-height-normal"
3982
3982
  }
3983
+ },
3984
+ "videolightbox": {
3985
+ "name": "spring-meadow",
3986
+ "component": "videolightbox",
3987
+ "createdAt": "2026-09-21T17:00:00.000Z",
3988
+ "updatedAt": "2026-09-21T17:00:00.000Z",
3989
+ "aliases": {
3990
+ "--videolightbox-tile-surface": "--color-transparent",
3991
+ "--videolightbox-tile-border": "--color-transparent",
3992
+ "--videolightbox-tile-border-width": "--border-width-0",
3993
+ "--videolightbox-tile-radius": "--radius-3xl",
3994
+ "--videolightbox-tile-shadow": "--shadow-md",
3995
+ "--videolightbox-scrim-surface": "--scrim-high",
3996
+ "--videolightbox-overlay-padding": "--space-64",
3997
+ "--videolightbox-overlay-duration": "--duration-500",
3998
+ "--videolightbox-overlay-easing": "--ease-out-quad",
3999
+ "--videolightbox-chrome-surface": "--surface-neutral-low",
4000
+ "--videolightbox-chrome-border": "--border-brand",
4001
+ "--videolightbox-chrome-border-width": "--border-width-1",
4002
+ "--videolightbox-chrome-radius": "--radius-full",
4003
+ "--videolightbox-chrome-icon": "--text-primary",
4004
+ "--videolightbox-chrome-hover-surface": "--surface-brand-high",
4005
+ "--videolightbox-badge-default-surface": "--surface-brand-lower",
4006
+ "--videolightbox-badge-default-border": "--border-brand-medium",
4007
+ "--videolightbox-badge-default-border-width": "--border-width-2",
4008
+ "--videolightbox-badge-default-icon": "--text-primary",
4009
+ "--videolightbox-badge-default-size": "--space-64",
4010
+ "--videolightbox-badge-default-icon-size": "--icon-size-4xl",
4011
+ "--videolightbox-badge-duration": "--duration-200",
4012
+ "--videolightbox-badge-easing": "--ease-out-quad",
4013
+ "--videolightbox-badge-hover-surface": "--surface-brand",
4014
+ "--videolightbox-badge-hover-border": "--border-brand-strong",
4015
+ "--videolightbox-badge-hover-icon": "--text-primary"
4016
+ }
4017
+ },
4018
+ "videoframe": {
4019
+ "name": "spring-meadow",
4020
+ "component": "videoframe",
4021
+ "createdAt": "2026-09-21T18:00:00.000Z",
4022
+ "updatedAt": "2026-09-21T18:00:00.000Z",
4023
+ "aliases": {
4024
+ "--videoframe-frame-surface": "--surface-neutral-lowest",
4025
+ "--videoframe-clip-surface": "--color-transparent",
4026
+ "--videoframe-frame-border": "--border-neutral",
4027
+ "--videoframe-frame-border-width": "--border-width-1",
4028
+ "--videoframe-frame-radius": "--radius-3xl",
4029
+ "--videoframe-badge-default-surface": "--surface-brand-lower",
4030
+ "--videoframe-badge-default-border": "--border-brand-medium",
4031
+ "--videoframe-badge-default-border-width": "--border-width-2",
4032
+ "--videoframe-badge-default-icon": "--text-primary",
4033
+ "--videoframe-badge-default-size": "--space-64",
4034
+ "--videoframe-badge-default-icon-size": "--icon-size-4xl",
4035
+ "--videoframe-badge-duration": "--duration-200",
4036
+ "--videoframe-badge-easing": "--ease-out-quad",
4037
+ "--videoframe-badge-hover-surface": "--surface-brand",
4038
+ "--videoframe-badge-hover-border": "--border-brand-strong",
4039
+ "--videoframe-badge-hover-icon": "--text-primary"
4040
+ }
4041
+ },
4042
+ "slidepager": {
4043
+ "name": "spring-meadow",
4044
+ "component": "slidepager",
4045
+ "createdAt": "2026-09-21T18:00:00.000Z",
4046
+ "updatedAt": "2026-09-21T18:00:00.000Z",
4047
+ "aliases": {
4048
+ "--slidepager-frame-surface": "--surface-neutral-lower",
4049
+ "--slidepager-frame-border": "--border-neutral-subtle",
4050
+ "--slidepager-frame-border-width": "--border-width-1",
4051
+ "--slidepager-frame-radius": "--radius-3xl",
4052
+ "--slidepager-frame-shadow": "--shadow-md",
4053
+ "--slidepager-bar-gap": "--space-16",
4054
+ "--slidepager-bar-padding": "--space-12",
4055
+ "--slidepager-control-surface": "--surface-neutral-low",
4056
+ "--slidepager-control-border": "--border-neutral",
4057
+ "--slidepager-control-border-width": "--border-width-1",
4058
+ "--slidepager-control-radius": "--radius-full",
4059
+ "--slidepager-control-size": "--space-40",
4060
+ "--slidepager-control-icon": "--text-primary",
4061
+ "--slidepager-control-icon-size": "--icon-size-md",
4062
+ "--slidepager-control-hover-surface": "--surface-brand-high",
4063
+ "--slidepager-control-hover-border": "--border-brand",
4064
+ "--slidepager-control-hover-icon": "--text-inverted",
4065
+ "--slidepager-control-disabled-surface": "--surface-neutral-lower",
4066
+ "--slidepager-control-disabled-border": "--border-neutral-subtle",
4067
+ "--slidepager-control-disabled-icon": "--text-disabled",
4068
+ "--slidepager-counter-text": "--text-secondary",
4069
+ "--slidepager-counter-font-family": "--font-sans",
4070
+ "--slidepager-counter-font-size": "--font-size-lg",
4071
+ "--slidepager-counter-font-weight": "--font-weight-medium",
4072
+ "--slidepager-counter-line-height": "--line-height-normal",
4073
+ "--slidepager-counter-letter-spacing": "--letter-spacing-normal",
4074
+ "--slidepager-scrim-surface": "--scrim-high",
4075
+ "--slidepager-overlay-padding": "--space-64",
4076
+ "--slidepager-close-margin": "--space-24",
4077
+ "--slidepager-overlay-duration": "--duration-300",
4078
+ "--slidepager-overlay-easing": "--ease-out-quad"
4079
+ }
3983
4080
  }
3984
4081
  },
3985
4082
  "componentSchemaVersion": 38
@@ -4032,6 +4032,103 @@
4032
4032
  "--slider-value-font-weight": "--font-weight-normal",
4033
4033
  "--slider-value-line-height": "--line-height-normal"
4034
4034
  }
4035
+ },
4036
+ "videolightbox": {
4037
+ "name": "sunset",
4038
+ "component": "videolightbox",
4039
+ "createdAt": "2026-09-21T17:00:00.000Z",
4040
+ "updatedAt": "2026-09-21T17:00:00.000Z",
4041
+ "aliases": {
4042
+ "--videolightbox-tile-surface": "--color-transparent",
4043
+ "--videolightbox-tile-border": "--color-transparent",
4044
+ "--videolightbox-tile-border-width": "--border-width-0",
4045
+ "--videolightbox-tile-radius": "--radius-3xl",
4046
+ "--videolightbox-tile-shadow": "--shadow-md",
4047
+ "--videolightbox-scrim-surface": "--scrim-high",
4048
+ "--videolightbox-overlay-padding": "--space-64",
4049
+ "--videolightbox-overlay-duration": "--duration-500",
4050
+ "--videolightbox-overlay-easing": "--ease-out-quad",
4051
+ "--videolightbox-chrome-surface": "--surface-neutral-low",
4052
+ "--videolightbox-chrome-border": "--border-brand",
4053
+ "--videolightbox-chrome-border-width": "--border-width-1",
4054
+ "--videolightbox-chrome-radius": "--radius-full",
4055
+ "--videolightbox-chrome-icon": "--text-primary",
4056
+ "--videolightbox-chrome-hover-surface": "--surface-brand-high",
4057
+ "--videolightbox-badge-default-surface": "--surface-brand-lower",
4058
+ "--videolightbox-badge-default-border": "--border-brand-medium",
4059
+ "--videolightbox-badge-default-border-width": "--border-width-2",
4060
+ "--videolightbox-badge-default-icon": "--text-primary",
4061
+ "--videolightbox-badge-default-size": "--space-64",
4062
+ "--videolightbox-badge-default-icon-size": "--icon-size-4xl",
4063
+ "--videolightbox-badge-duration": "--duration-200",
4064
+ "--videolightbox-badge-easing": "--ease-out-quad",
4065
+ "--videolightbox-badge-hover-surface": "--surface-brand",
4066
+ "--videolightbox-badge-hover-border": "--border-brand-strong",
4067
+ "--videolightbox-badge-hover-icon": "--text-primary"
4068
+ }
4069
+ },
4070
+ "videoframe": {
4071
+ "name": "sunset",
4072
+ "component": "videoframe",
4073
+ "createdAt": "2026-09-21T18:00:00.000Z",
4074
+ "updatedAt": "2026-09-21T18:00:00.000Z",
4075
+ "aliases": {
4076
+ "--videoframe-frame-surface": "--surface-neutral-lowest",
4077
+ "--videoframe-clip-surface": "--color-transparent",
4078
+ "--videoframe-frame-border": "--border-neutral",
4079
+ "--videoframe-frame-border-width": "--border-width-1",
4080
+ "--videoframe-frame-radius": "--radius-3xl",
4081
+ "--videoframe-badge-default-surface": "--surface-brand-lower",
4082
+ "--videoframe-badge-default-border": "--border-brand-medium",
4083
+ "--videoframe-badge-default-border-width": "--border-width-2",
4084
+ "--videoframe-badge-default-icon": "--text-primary",
4085
+ "--videoframe-badge-default-size": "--space-64",
4086
+ "--videoframe-badge-default-icon-size": "--icon-size-4xl",
4087
+ "--videoframe-badge-duration": "--duration-200",
4088
+ "--videoframe-badge-easing": "--ease-out-quad",
4089
+ "--videoframe-badge-hover-surface": "--surface-brand",
4090
+ "--videoframe-badge-hover-border": "--border-brand-strong",
4091
+ "--videoframe-badge-hover-icon": "--text-primary"
4092
+ }
4093
+ },
4094
+ "slidepager": {
4095
+ "name": "sunset",
4096
+ "component": "slidepager",
4097
+ "createdAt": "2026-09-21T18:00:00.000Z",
4098
+ "updatedAt": "2026-09-21T18:00:00.000Z",
4099
+ "aliases": {
4100
+ "--slidepager-frame-surface": "--surface-neutral-lower",
4101
+ "--slidepager-frame-border": "--border-neutral-subtle",
4102
+ "--slidepager-frame-border-width": "--border-width-1",
4103
+ "--slidepager-frame-radius": "--radius-3xl",
4104
+ "--slidepager-frame-shadow": "--shadow-md",
4105
+ "--slidepager-bar-gap": "--space-16",
4106
+ "--slidepager-bar-padding": "--space-12",
4107
+ "--slidepager-control-surface": "--surface-neutral-low",
4108
+ "--slidepager-control-border": "--border-neutral",
4109
+ "--slidepager-control-border-width": "--border-width-1",
4110
+ "--slidepager-control-radius": "--radius-full",
4111
+ "--slidepager-control-size": "--space-40",
4112
+ "--slidepager-control-icon": "--text-primary",
4113
+ "--slidepager-control-icon-size": "--icon-size-md",
4114
+ "--slidepager-control-hover-surface": "--surface-brand-high",
4115
+ "--slidepager-control-hover-border": "--border-brand",
4116
+ "--slidepager-control-hover-icon": "--text-inverted",
4117
+ "--slidepager-control-disabled-surface": "--surface-neutral-lower",
4118
+ "--slidepager-control-disabled-border": "--border-neutral-subtle",
4119
+ "--slidepager-control-disabled-icon": "--text-disabled",
4120
+ "--slidepager-counter-text": "--text-secondary",
4121
+ "--slidepager-counter-font-family": "--font-sans",
4122
+ "--slidepager-counter-font-size": "--font-size-lg",
4123
+ "--slidepager-counter-font-weight": "--font-weight-medium",
4124
+ "--slidepager-counter-line-height": "--line-height-normal",
4125
+ "--slidepager-counter-letter-spacing": "--letter-spacing-normal",
4126
+ "--slidepager-scrim-surface": "--scrim-high",
4127
+ "--slidepager-overlay-padding": "--space-64",
4128
+ "--slidepager-close-margin": "--space-24",
4129
+ "--slidepager-overlay-duration": "--duration-300",
4130
+ "--slidepager-overlay-easing": "--ease-out-quad"
4131
+ }
4035
4132
  }
4036
4133
  },
4037
4134
  "componentSchemaVersion": 38
Binary file
Binary file
Binary file
@@ -6,6 +6,8 @@
6
6
  whenToUse: 'a screenshot, artwork, or chart whose detail is the point, and for a gallery of them.',
7
7
  whenNotToUse: [
8
8
  { when: 'the reader takes the picture in at a glance, with no detail to open.', use: 'image' },
9
+ { when: 'a video clip the reader opens from its still.', use: 'videolightbox' },
10
+ { when: 'slides or pages the reader reads in order.', use: 'slidepager' },
9
11
  ],
10
12
  } satisfies CatalogueEntry;
11
13
  </script>
@@ -62,7 +64,7 @@
62
64
  The modal portals to <body>, out of reach of a wrapper around the tile,
63
65
  so a page that wants its own scrim has to say so here. */
64
66
  scrim?: string | undefined;
65
- /** When true, shows a bottom toolbar (zoom in/out + percent) and a top-right close button, and enables wheel/drag zoom inside the open modal. When false, click anywhere closes. */
67
+ /** When true, shows a bottom toolbar (zoom in/out + percent) and enables wheel/drag zoom inside the open modal. Either way, a click on the unzoomed image closes. */
66
68
  extended?: boolean;
67
69
  /** Maximum zoom, as a multiple of the image's natural resolution: `1` = 100%
68
70
  of the source's real pixels (1 source px = 1 screen px), `2` = 200%. The
@@ -314,8 +316,7 @@
314
316
  });
315
317
  }
316
318
 
317
- // Move focus into the modal so keyboard users land inside the dialog; the
318
- // stage (tabindex -1) is the fallback when there is no chrome to focus.
319
+ // Move focus into the modal so keyboard users land inside the dialog.
319
320
  (closeBtnEl ?? stageEl)?.focus();
320
321
  }
321
322
 
@@ -323,7 +324,7 @@
323
324
  // the zoom toolbar keeps its bespoke slide so it's handled separately.
324
325
  function chromeFadeEls(): HTMLElement[] {
325
326
  const els: (HTMLElement | undefined)[] = [];
326
- if (extended || isGallery) els.push(closeBtnEl);
327
+ els.push(closeBtnEl);
327
328
  if (isGallery) els.push(prevBtnEl, nextBtnEl, counterEl);
328
329
  return els.filter((el): el is HTMLElement => !!el);
329
330
  }
@@ -549,11 +550,11 @@
549
550
  didDrag = false;
550
551
  return;
551
552
  }
552
- if (!extended && !isGallery) closeLightbox();
553
+ if (!isGallery && scale <= MIN_SCALE) closeLightbox();
553
554
  }
554
555
 
555
556
  // Keep Tab inside the open dialog. The stage (tabindex -1) is excluded, so an
556
- // image-only lightbox with no chrome simply holds focus on the stage.
557
+ // image-only lightbox holds focus on its close button.
557
558
  function trapTab(e: KeyboardEvent) {
558
559
  if (!modalEl) return;
559
560
  const f = [
@@ -688,21 +689,19 @@
688
689
  </div>
689
690
  </div>
690
691
 
691
- {#if extended || isGallery}
692
- <button
693
- bind:this={closeBtnEl}
694
- class="image-lightbox-chrome image-lightbox-close"
695
- class:active={open}
696
- type="button"
697
- aria-label="Close"
698
- onclick={closeLightbox}
699
- >
700
- <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
701
- <path d="M18 6L6 18" />
702
- <path d="M6 6l12 12" />
703
- </svg>
704
- </button>
705
- {/if}
692
+ <button
693
+ bind:this={closeBtnEl}
694
+ class="image-lightbox-chrome image-lightbox-close"
695
+ class:active={open}
696
+ type="button"
697
+ aria-label="Close"
698
+ onclick={closeLightbox}
699
+ >
700
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
701
+ <path d="M18 6L6 18" />
702
+ <path d="M6 6l12 12" />
703
+ </svg>
704
+ </button>
706
705
 
707
706
  {#if isGallery}
708
707
  <button