@design-edito/tools 0.5.6 → 0.5.7

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 (79) hide show
  1. package/agnostic/colors/index.d.ts +2 -2
  2. package/agnostic/colors/index.js +2 -2
  3. package/agnostic/css/index.d.ts +1 -1
  4. package/agnostic/css/index.js +1 -1
  5. package/agnostic/errors/index.d.ts +1 -1
  6. package/agnostic/errors/index.js +1 -1
  7. package/agnostic/html/hyper-json/smart-tags/coalesced/index.d.ts +8 -8
  8. package/agnostic/html/hyper-json/smart-tags/coalesced/index.js +8 -8
  9. package/agnostic/html/hyper-json/smart-tags/isolated/index.d.ts +4 -4
  10. package/agnostic/html/hyper-json/smart-tags/isolated/index.js +4 -4
  11. package/agnostic/html/index.d.ts +1 -1
  12. package/agnostic/html/index.js +1 -1
  13. package/agnostic/index.d.ts +1 -0
  14. package/agnostic/index.js +1 -0
  15. package/agnostic/misc/index.d.ts +2 -2
  16. package/agnostic/misc/index.js +2 -2
  17. package/agnostic/numbers/index.d.ts +1 -1
  18. package/agnostic/numbers/index.js +1 -1
  19. package/agnostic/objects/index.d.ts +3 -3
  20. package/agnostic/objects/index.js +3 -3
  21. package/agnostic/random/index.d.ts +1 -1
  22. package/agnostic/random/index.js +1 -1
  23. package/agnostic/strings/index.d.ts +1 -1
  24. package/agnostic/strings/index.js +1 -1
  25. package/agnostic/subtitles/index.d.ts +2 -0
  26. package/agnostic/subtitles/index.js +2 -0
  27. package/agnostic/subtitles/parse-srt/index.d.ts +17 -0
  28. package/agnostic/subtitles/parse-srt/index.js +67 -0
  29. package/agnostic/subtitles/parse-srt/index.test.d.ts +1 -0
  30. package/agnostic/subtitles/parse-srt/index.test.js +94 -0
  31. package/agnostic/subtitles/parse-srt/types.d.ts +22 -0
  32. package/agnostic/subtitles/parse-srt/types.js +1 -0
  33. package/agnostic/subtitles/srt-timecode-to-ms/index.d.ts +14 -0
  34. package/agnostic/subtitles/srt-timecode-to-ms/index.js +36 -0
  35. package/agnostic/subtitles/srt-timecode-to-ms/index.test.d.ts +1 -0
  36. package/agnostic/subtitles/srt-timecode-to-ms/index.test.js +44 -0
  37. package/agnostic/time/dates/index.d.ts +1 -1
  38. package/agnostic/time/dates/index.js +1 -1
  39. package/components/ListLoader/index.controlled.d.ts +8 -3
  40. package/components/ListLoader/index.controlled.js +2 -2
  41. package/components/ListLoader/index.d.ts +1 -1
  42. package/components/ListLoader/index.js +2 -2
  43. package/components/Scrllgngn/index.d.ts +37 -7
  44. package/components/Scrllgngn/index.js +81 -24
  45. package/components/Scrllgngn/styles.module.css +30 -5
  46. package/components/Scrllgngn/utils.d.ts +87 -4
  47. package/components/Scrllgngn/utils.js +142 -8
  48. package/components/ScrollListener/index.d.ts +7 -3
  49. package/components/ScrollListener/index.js +2 -2
  50. package/components/Sequencer/index.d.ts +10 -1
  51. package/components/Sequencer/index.js +7 -3
  52. package/components/Subtitles/index.d.ts +53 -62
  53. package/components/Subtitles/index.js +90 -158
  54. package/components/Subtitles/utils.d.ts +60 -0
  55. package/components/Subtitles/utils.js +76 -0
  56. package/components/Video/index.controlled.d.ts +5 -0
  57. package/components/Video/index.controlled.js +22 -3
  58. package/components/Video/index.d.ts +47 -9
  59. package/components/Video/index.js +71 -20
  60. package/components/Video/utils.d.ts +14 -0
  61. package/components/Video/utils.js +18 -0
  62. package/components/utils/types.d.ts +32 -0
  63. package/index.d.ts +1 -1
  64. package/index.js +1 -1
  65. package/node/@aws-s3/storage/directory/index.d.ts +1 -1
  66. package/node/@aws-s3/storage/directory/index.js +1 -1
  67. package/node/@google-cloud/storage/file/index.d.ts +2 -2
  68. package/node/@google-cloud/storage/file/index.js +2 -2
  69. package/node/cloud-storage/operations/index.d.ts +1 -1
  70. package/node/cloud-storage/operations/index.js +1 -1
  71. package/node/files/index.d.ts +1 -1
  72. package/node/files/index.js +1 -1
  73. package/node/images/index.d.ts +1 -1
  74. package/node/images/index.js +1 -1
  75. package/node/index.d.ts +1 -1
  76. package/node/index.js +1 -1
  77. package/node/sftp/file/index.d.ts +1 -1
  78. package/node/sftp/file/index.js +1 -1
  79. package/package.json +26 -1
@@ -4,7 +4,7 @@ import { clss } from '../../agnostic/css/clss/index.js';
4
4
  import { IntersectionObserverComponent } from '../IntersectionObserver/index.js';
5
5
  import { mergeClassNames } from '../utils/index.js';
6
6
  import { videoWrapper as publicClassName } from '../public-classnames.js';
7
- import { muteAttributeWorkaround } from './utils.js';
7
+ import { muteAttributeWorkaround, shouldRunAutoBehaviour } from './utils.js';
8
8
  import cssModule from './styles.module.css';
9
9
  import { ControlledVideo } from './index.controlled.js';
10
10
  /**
@@ -16,34 +16,72 @@ import { ControlledVideo } from './index.controlled.js';
16
16
  * @see {@link Props}
17
17
  * @returns A `<figure>` element containing the video, its controls and optional
18
18
  * subtitles.
19
+ *
20
+ * @remarks
21
+ * **Audio-only media belongs here too**, carried by the same `<video>` element.
22
+ * Everything this component drives — play, mute, volume, rate, time, `ended` — is
23
+ * `HTMLMediaElement`, shared with `<audio>`; only fullscreen is video's own. And an
24
+ * `<audio>` tag can't be autoplayed: the muted-autoplay exemption browsers grant is
25
+ * for video, so an `<audio>` waits for a user gesture whatever its muted state.
26
+ * `autoPlayWhenVisible` on an audio file therefore needs `muted` and `playsInline`
27
+ * on a `<video>`, which is what this is. The one thing lost is the assistive-tech
28
+ * label: a screen reader announces a video player. Worth a `tag` prop the day that
29
+ * matters more than autoplay — not before.
30
+ *
31
+ * Each viewport-driven behaviour comes in two flavours: `…When…` fires on every
32
+ * crossing, `…Once…` only on the first one. A `…Once…` flag is armed by its own
33
+ * automatic trigger and by nothing else — pressing play does not spend the one
34
+ * automatic play the component still owed. Setting both flavours of the same
35
+ * behaviour is the same as setting the `…When…` one alone.
36
+ *
37
+ * Browsers refuse an unmuted `play()` outside a user gesture, so pairing an
38
+ * `autoLoud…` with an `autoPlay…` will usually have the playback rejected: the
39
+ * element stays paused while the controls believe otherwise. Autoplay muted, and
40
+ * leave unmuting to the reader.
19
41
  */
20
- export const Video = ({ loop, autoPlayWhenVisible, autoPauseWhenHidden, autoMuteWhenHidden, autoLoudWhenVisible, wrapperClassName, onPlayButtonClicked, onPauseButtonClicked, onLoudButtonClicked, onMuteButtonClicked, onVolumeRangeChanged, onRateRangeChanged, onFullscreenButtonClicked, ...controlledProps }) => {
42
+ export const Video = ({ loop, autoPlayWhenVisible, autoPlayOnceVisible, autoPauseWhenHidden, autoPauseOnceHidden, autoMuteWhenHidden, autoMuteOnceHidden, autoLoudWhenVisible, autoLoudOnceVisible, threshold, root, rootMargin, onVisibilityChanged, wrapperClassName, onPlayButtonClicked, onPauseButtonClicked, onLoudButtonClicked, onMuteButtonClicked, onVolumeRangeChanged, onRateRangeChanged, onFullscreenButtonClicked, ...controlledProps }) => {
21
43
  // State & refs
22
44
  const [play, setPlay] = useState(false);
23
45
  const [volume, setVolume] = useState(1);
24
46
  const [mute, setMute] = useState(false);
25
47
  const [playbackRate, setPlaybackRate] = useState(1);
26
48
  const [fullscreen, setFullscreen] = useState(false);
27
- const hasBeenAutoPlayed = useRef(false);
49
+ // One flag per `…Once…` behaviour, and each is armed by that behaviour's own
50
+ // automatic trigger. A single shared flag conflated four questions, and being set
51
+ // on any `play` event — a user click included — meant the first press cancelled
52
+ // behaviours that had nothing to do with playback.
53
+ const hasAutoPlayedOnce = useRef(false);
54
+ const hasAutoPausedOnce = useRef(false);
55
+ const hasAutoLoudedOnce = useRef(false);
56
+ const hasAutoMutedOnce = useRef(false);
28
57
  // Several paths below ask for playback — the play button, autoPlayWhenVisible,
29
58
  // autoPlay itself. None of them may win over a parent-owned time, so the
30
59
  // invariant is applied where the state is forwarded rather than guarded at each
31
60
  // of those call sites.
32
61
  const isTimeControlled = controlledProps.currentTimeMs !== undefined;
33
- const needsObserve = useMemo(() => autoLoudWhenVisible === true
62
+ const needsObserve = useMemo(() => onVisibilityChanged !== undefined
63
+ || autoLoudWhenVisible === true
64
+ || autoLoudOnceVisible === true
34
65
  || autoMuteWhenHidden === true
66
+ || autoMuteOnceHidden === true
35
67
  || autoPlayWhenVisible === true
36
- || autoPauseWhenHidden === true, [
68
+ || autoPlayOnceVisible === true
69
+ || autoPauseWhenHidden === true
70
+ || autoPauseOnceHidden === true, [
37
71
  autoLoudWhenVisible,
72
+ autoLoudOnceVisible,
38
73
  autoMuteWhenHidden,
74
+ autoMuteOnceHidden,
39
75
  autoPlayWhenVisible,
40
- autoPauseWhenHidden
76
+ autoPlayOnceVisible,
77
+ autoPauseWhenHidden,
78
+ autoPauseOnceHidden,
79
+ onVisibilityChanged
41
80
  ]);
42
81
  // Intrisic event handlers
43
82
  const handleOnPlayEvent = useCallback((e) => {
44
83
  controlledProps.onPlay?.(e);
45
84
  setPlay(true);
46
- hasBeenAutoPlayed.current = true;
47
85
  }, [controlledProps.onPlay]);
48
86
  const handleOnPauseEvent = useCallback((e) => {
49
87
  setPlay(false);
@@ -100,28 +138,41 @@ export const Video = ({ loop, autoPlayWhenVisible, autoPauseWhenHidden, autoMute
100
138
  if (ioEntry === undefined)
101
139
  return;
102
140
  const { isIntersecting } = ioEntry;
103
- if (autoPauseWhenHidden === true && !isIntersecting)
141
+ onVisibilityChanged?.(isIntersecting);
142
+ if (isIntersecting) {
143
+ if (shouldRunAutoBehaviour(autoPlayWhenVisible, autoPlayOnceVisible, hasAutoPlayedOnce.current)) {
144
+ hasAutoPlayedOnce.current = true;
145
+ setPlay(true);
146
+ }
147
+ if (shouldRunAutoBehaviour(autoLoudWhenVisible, autoLoudOnceVisible, hasAutoLoudedOnce.current)) {
148
+ hasAutoLoudedOnce.current = true;
149
+ setMute(false);
150
+ }
151
+ return;
152
+ }
153
+ if (shouldRunAutoBehaviour(autoPauseWhenHidden, autoPauseOnceHidden, hasAutoPausedOnce.current)) {
154
+ hasAutoPausedOnce.current = true;
104
155
  setPlay(false);
105
- if (autoLoudWhenVisible === true && isIntersecting)
106
- setMute(false);
107
- if (autoPlayWhenVisible === true
108
- && !hasBeenAutoPlayed.current
109
- && isIntersecting)
110
- setPlay(true);
111
- if (autoMuteWhenHidden === true
112
- && !hasBeenAutoPlayed.current
113
- && !isIntersecting)
156
+ }
157
+ if (shouldRunAutoBehaviour(autoMuteWhenHidden, autoMuteOnceHidden, hasAutoMutedOnce.current)) {
158
+ hasAutoMutedOnce.current = true;
114
159
  setMute(true);
160
+ }
115
161
  }, [
116
162
  autoPlayWhenVisible,
163
+ autoPlayOnceVisible,
117
164
  autoPauseWhenHidden,
165
+ autoPauseOnceHidden,
118
166
  autoMuteWhenHidden,
119
- autoLoudWhenVisible
167
+ autoMuteOnceHidden,
168
+ autoLoudWhenVisible,
169
+ autoLoudOnceVisible,
170
+ onVisibilityChanged
120
171
  ]);
121
172
  // `autoPlay` is forwarded to the element, but the play state is owned here, so
122
173
  // it has to be seeded once on mount for the controls to agree with the element.
123
174
  useEffect(() => {
124
- if (controlledProps.autoPlay === true && !hasBeenAutoPlayed.current)
175
+ if (controlledProps.autoPlay === true)
125
176
  setPlay(true);
126
177
  }, []);
127
178
  // Render
@@ -129,6 +180,6 @@ export const Video = ({ loop, autoPlayWhenVisible, autoPauseWhenHidden, autoMute
129
180
  const rootClss = mergeClassNames(c(), wrapperClassName);
130
181
  const videoContent = _jsx(ControlledVideo, { ...controlledProps, play: play && !isTimeControlled, volume: volume, mute: mute, playbackRate: playbackRate, fullscreen: fullscreen, onPlay: handleOnPlayEvent, onPause: handleOnPauseEvent, onVolumeChange: handleOnVolumeChangeEvent, onRateChange: handleOnRateChangeEvent, onLoadedMetadata: handleOnLoadedMetadataEvent, onFullscreenChange: handleFullscreenChange, onPlayButtonClicked: handlePlayButtonClick, onPauseButtonClicked: handlePauseButtonClick, onLoudButtonClicked: handleLoudButtonClick, onMuteButtonClicked: handleMuteButtonClick, onVolumeRangeChanged: handleVolumeRangeChange, onRateRangeChanged: handleRateRangeChange, onFullscreenButtonClicked: handleFullscreenButtonClick });
131
182
  return _jsx("div", { className: rootClss, children: needsObserve
132
- ? _jsx(IntersectionObserverComponent, { onIntersected: onIntersected, children: videoContent })
183
+ ? _jsx(IntersectionObserverComponent, { threshold: threshold, root: root, rootMargin: rootMargin, onIntersected: onIntersected, children: videoContent })
133
184
  : videoContent });
134
185
  };
@@ -45,3 +45,17 @@ export declare function formatTime(ms: number, format: string, fps?: number): st
45
45
  * @returns A ratio between `0` and `1`, clamped to the element's own bounds.
46
46
  */
47
47
  export declare const getTimelineClickProgress: (event: React.MouseEvent<HTMLDivElement>) => number;
48
+ /**
49
+ * Whether a viewport-driven behaviour should run on this crossing.
50
+ *
51
+ * Each behaviour comes in two flavours: `…When…` on every crossing, `…Once…` on the
52
+ * first one only. Setting both is the same as setting `…When…` alone.
53
+ *
54
+ * @param whenCrossed - The `…When…` prop.
55
+ * @param onceOnly - The `…Once…` prop.
56
+ * @param hasFired - Whether this behaviour's own automatic trigger already ran. It
57
+ * tracks that behaviour and nothing else: a user pressing play must not spend an
58
+ * automatic mute the component still owed.
59
+ * @returns Whether to apply it now.
60
+ */
61
+ export declare const shouldRunAutoBehaviour: (whenCrossed: boolean | undefined, onceOnly: boolean | undefined, hasFired: boolean) => boolean;
@@ -160,3 +160,21 @@ export const getTimelineClickProgress = (event) => {
160
160
  const position = event.clientX - timelineRect.left;
161
161
  return Math.min(1, Math.max(0, position / timelineRect.width));
162
162
  };
163
+ /**
164
+ * Whether a viewport-driven behaviour should run on this crossing.
165
+ *
166
+ * Each behaviour comes in two flavours: `…When…` on every crossing, `…Once…` on the
167
+ * first one only. Setting both is the same as setting `…When…` alone.
168
+ *
169
+ * @param whenCrossed - The `…When…` prop.
170
+ * @param onceOnly - The `…Once…` prop.
171
+ * @param hasFired - Whether this behaviour's own automatic trigger already ran. It
172
+ * tracks that behaviour and nothing else: a user pressing play must not spend an
173
+ * automatic mute the component still owed.
174
+ * @returns Whether to apply it now.
175
+ */
176
+ export const shouldRunAutoBehaviour = (whenCrossed, onceOnly, hasFired) => {
177
+ if (whenCrossed === true)
178
+ return true;
179
+ return onceOnly === true && !hasFired;
180
+ };
@@ -6,3 +6,35 @@
6
6
  export type WithClassName<T extends Record<string, unknown>> = T & {
7
7
  className?: string | Array<string | null | undefined>;
8
8
  };
9
+ /**
10
+ * The settings of an {@link IntersectionObserver} a component mounts internally.
11
+ *
12
+ * A component that offers viewport-driven behaviour has to offer its dial too:
13
+ * `autoPlayWhenVisible` means little if "visible" can't be told to mean *thirty
14
+ * percent* visible, and an infinite list wants to start loading before its sentinel
15
+ * shows, which is `rootMargin`'s job.
16
+ *
17
+ * They mirror `ObserverOptions` of the `IntersectionObserver` component, where they
18
+ * end up. Restated here rather than imported from it: that component reads
19
+ * {@link WithClassName} from this very file, and the two shouldn't import each other.
20
+ */
21
+ export type ViewportObserverOptions = {
22
+ threshold?: number | number[];
23
+ root?: HTMLElement;
24
+ rootMargin?: string;
25
+ };
26
+ /**
27
+ * Extends a type with an internal observer's settings and with what it sees.
28
+ *
29
+ * For a component observing **one** element — itself, usually. A component with
30
+ * several observers takes {@link ViewportObserverOptions} alone, since a single
31
+ * visibility handler couldn't say which of them crossed.
32
+ *
33
+ * `Scrllgngn` deliberately stays out of both: its observers take a `rootMargin`
34
+ * derived from its `viewportOffset*` props, which are its own version of the dial.
35
+ *
36
+ * @template T - The base type to extend.
37
+ */
38
+ export type WithViewportObservation<T extends Record<string, unknown>> = T & ViewportObserverOptions & {
39
+ onVisibilityChanged?: (isVisible: boolean) => void;
40
+ };
package/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export * as agnostic from './agnostic/index.js'
2
- export * as components from './components/index.js'
3
2
  export * as node from './node/index.js'
3
+ export * as components from './components/index.js'
package/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  export * as agnostic from './agnostic/index.js'
2
- export * as components from './components/index.js'
3
2
  export * as node from './node/index.js'
3
+ export * as components from './components/index.js'
@@ -1,4 +1,4 @@
1
- export * as list from './list/index.js'
2
1
  export * as copyDir from './copy-dir/index.js'
2
+ export * as list from './list/index.js'
3
3
  export * as moveDir from './move-dir/index.js'
4
4
  export * as removeDir from './remove-dir/index.js'
@@ -1,4 +1,4 @@
1
- export * as list from './list/index.js'
2
1
  export * as copyDir from './copy-dir/index.js'
2
+ export * as list from './list/index.js'
3
3
  export * as moveDir from './move-dir/index.js'
4
4
  export * as removeDir from './remove-dir/index.js'
@@ -1,11 +1,11 @@
1
1
  export * as copy from './copy/index.js'
2
- export * as exists from './exists/index.js'
3
2
  export * as download from './download/index.js'
4
3
  export * as generateSignedUrl from './generate-signed-url/index.js'
4
+ export * as exists from './exists/index.js'
5
5
  export * as getMetadata from './get-metadata/index.js'
6
6
  export * as getPermissions from './get-permissions/index.js'
7
- export * as remove from './remove/index.js'
8
7
  export * as move from './move/index.js'
8
+ export * as remove from './remove/index.js'
9
9
  export * as revokeSignedUrls from './revoke-signed-urls/index.js'
10
10
  export * as stat from './stat/index.js'
11
11
  export * as updateMetadata from './update-metadata/index.js'
@@ -1,11 +1,11 @@
1
1
  export * as copy from './copy/index.js'
2
- export * as exists from './exists/index.js'
3
2
  export * as download from './download/index.js'
4
3
  export * as generateSignedUrl from './generate-signed-url/index.js'
4
+ export * as exists from './exists/index.js'
5
5
  export * as getMetadata from './get-metadata/index.js'
6
6
  export * as getPermissions from './get-permissions/index.js'
7
- export * as remove from './remove/index.js'
8
7
  export * as move from './move/index.js'
8
+ export * as remove from './remove/index.js'
9
9
  export * as revokeSignedUrls from './revoke-signed-urls/index.js'
10
10
  export * as stat from './stat/index.js'
11
11
  export * as updateMetadata from './update-metadata/index.js'
@@ -1,7 +1,7 @@
1
1
  export * as copyDir from './copy-dir/index.js'
2
2
  export * as copyFile from './copy-file/index.js'
3
- export * as existsFile from './exists-file/index.js'
4
3
  export * as downloadFile from './download-file/index.js'
4
+ export * as existsFile from './exists-file/index.js'
5
5
  export * as listDir from './list-dir/index.js'
6
6
  export * as moveDir from './move-dir/index.js'
7
7
  export * as moveFile from './move-file/index.js'
@@ -1,7 +1,7 @@
1
1
  export * as copyDir from './copy-dir/index.js'
2
2
  export * as copyFile from './copy-file/index.js'
3
- export * as existsFile from './exists-file/index.js'
4
3
  export * as downloadFile from './download-file/index.js'
4
+ export * as existsFile from './exists-file/index.js'
5
5
  export * as listDir from './list-dir/index.js'
6
6
  export * as moveDir from './move-dir/index.js'
7
7
  export * as moveFile from './move-file/index.js'
@@ -1,4 +1,4 @@
1
1
  export * as getSize from './get-size/index.js'
2
2
  export * as isInDirectory from './is-in-directory/index.js'
3
- export * as readWrite from './read-write/index.js'
4
3
  export * as subpaths from './subpaths/index.js'
4
+ export * as readWrite from './read-write/index.js'
@@ -1,4 +1,4 @@
1
1
  export * as getSize from './get-size/index.js'
2
2
  export * as isInDirectory from './is-in-directory/index.js'
3
- export * as readWrite from './read-write/index.js'
4
3
  export * as subpaths from './subpaths/index.js'
4
+ export * as readWrite from './read-write/index.js'
@@ -1,5 +1,5 @@
1
- export * as format from './format/index.js'
2
1
  export * as create from './create/index.js'
2
+ export * as format from './format/index.js'
3
3
  export * as metadata from './metadata/index.js'
4
4
  export * as transform from './transform/index.js'
5
5
  export * as utils from './utils/index.js'
@@ -1,5 +1,5 @@
1
- export * as format from './format/index.js'
2
1
  export * as create from './create/index.js'
2
+ export * as format from './format/index.js'
3
3
  export * as metadata from './metadata/index.js'
4
4
  export * as transform from './transform/index.js'
5
5
  export * as utils from './utils/index.js'
package/node/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export * as awsS3 from './@aws-s3/index.js'
2
- export * as express from './@express/index.js'
3
2
  export * as designEdito from './@design-edito/index.js'
3
+ export * as express from './@express/index.js'
4
4
  export * as googleCloud from './@google-cloud/index.js'
5
5
  export * as cloudStorage from './cloud-storage/index.js'
6
6
  export * as encryption from './encryption/index.js'
package/node/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export * as awsS3 from './@aws-s3/index.js'
2
- export * as express from './@express/index.js'
3
2
  export * as designEdito from './@design-edito/index.js'
3
+ export * as express from './@express/index.js'
4
4
  export * as googleCloud from './@google-cloud/index.js'
5
5
  export * as cloudStorage from './cloud-storage/index.js'
6
6
  export * as encryption from './encryption/index.js'
@@ -1,5 +1,5 @@
1
- export * as download from './download/index.js'
2
1
  export * as copy from './copy/index.js'
2
+ export * as download from './download/index.js'
3
3
  export * as exists from './exists/index.js'
4
4
  export * as move from './move/index.js'
5
5
  export * as remove from './remove/index.js'
@@ -1,5 +1,5 @@
1
- export * as download from './download/index.js'
2
1
  export * as copy from './copy/index.js'
2
+ export * as download from './download/index.js'
3
3
  export * as exists from './exists/index.js'
4
4
  export * as move from './move/index.js'
5
5
  export * as remove from './remove/index.js'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@design-edito/tools",
3
- "version": "0.5.6",
3
+ "version": "0.5.7",
4
4
  "description": "",
5
5
  "author": "Maxime Fabas",
6
6
  "license": "ISC",
@@ -1275,6 +1275,31 @@
1275
1275
  "./agnostic/strings/trim/index.js": {
1276
1276
  "import": "./agnostic/strings/trim/index.js"
1277
1277
  },
1278
+ "./agnostic/subtitles": {
1279
+ "import": "./agnostic/subtitles/index.js",
1280
+ "types": "./agnostic/subtitles/index.d.ts"
1281
+ },
1282
+ "./agnostic/subtitles/index.js": {
1283
+ "import": "./agnostic/subtitles/index.js"
1284
+ },
1285
+ "./agnostic/subtitles/parse-srt": {
1286
+ "import": "./agnostic/subtitles/parse-srt/index.js",
1287
+ "types": "./agnostic/subtitles/parse-srt/index.d.ts"
1288
+ },
1289
+ "./agnostic/subtitles/parse-srt/index.js": {
1290
+ "import": "./agnostic/subtitles/parse-srt/index.js"
1291
+ },
1292
+ "./agnostic/subtitles/parse-srt/types.js": {
1293
+ "import": "./agnostic/subtitles/parse-srt/types.js",
1294
+ "types": "./agnostic/subtitles/parse-srt/types.d.ts"
1295
+ },
1296
+ "./agnostic/subtitles/srt-timecode-to-ms": {
1297
+ "import": "./agnostic/subtitles/srt-timecode-to-ms/index.js",
1298
+ "types": "./agnostic/subtitles/srt-timecode-to-ms/index.d.ts"
1299
+ },
1300
+ "./agnostic/subtitles/srt-timecode-to-ms/index.js": {
1301
+ "import": "./agnostic/subtitles/srt-timecode-to-ms/index.js"
1302
+ },
1278
1303
  "./agnostic/time": {
1279
1304
  "import": "./agnostic/time/index.js",
1280
1305
  "types": "./agnostic/time/index.d.ts"