@getflip/swirl-components 0.3.0 → 0.4.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.
- package/dist/cjs/flip-action-list-item.cjs.entry.js +1 -1
- package/dist/cjs/flip-action-list-item.cjs.entry.js.map +1 -1
- package/dist/cjs/flip-avatar-group.cjs.entry.js +11 -1
- package/dist/cjs/flip-avatar-group.cjs.entry.js.map +1 -1
- package/dist/cjs/flip-avatar.cjs.entry.js +11 -1
- package/dist/cjs/flip-avatar.cjs.entry.js.map +1 -1
- package/dist/cjs/flip-button-group.cjs.entry.js +9 -3
- package/dist/cjs/flip-button-group.cjs.entry.js.map +1 -1
- package/dist/cjs/flip-button.cjs.entry.js +1 -1
- package/dist/cjs/flip-button.cjs.entry.js.map +1 -1
- package/dist/cjs/flip-checkbox.cjs.entry.js +1 -1
- package/dist/cjs/flip-checkbox.cjs.entry.js.map +1 -1
- package/dist/cjs/flip-date-picker_3.cjs.entry.js +20 -12
- package/dist/cjs/flip-date-picker_3.cjs.entry.js.map +1 -1
- package/dist/cjs/flip-dialog.cjs.entry.js +1 -1
- package/dist/cjs/flip-dialog.cjs.entry.js.map +1 -1
- package/dist/cjs/flip-file-uploader.cjs.entry.js +1 -1
- package/dist/cjs/flip-file-uploader.cjs.entry.js.map +1 -1
- package/dist/cjs/flip-file-viewer-audio_6.cjs.entry.js +3 -3
- package/dist/cjs/flip-file-viewer-audio_6.cjs.entry.js.map +1 -1
- package/dist/cjs/flip-file-viewer.cjs.entry.js +2 -1
- package/dist/cjs/flip-file-viewer.cjs.entry.js.map +1 -1
- package/dist/cjs/flip-form-group.cjs.entry.js +1 -1
- package/dist/cjs/flip-form-group.cjs.entry.js.map +1 -1
- package/dist/cjs/flip-icon-arrow-left_3.cjs.entry.js +50 -0
- package/dist/cjs/flip-icon-arrow-left_3.cjs.entry.js.map +1 -0
- package/dist/cjs/flip-lightbox.cjs.entry.js +205 -0
- package/dist/cjs/flip-lightbox.cjs.entry.js.map +1 -0
- package/dist/cjs/flip-modal.cjs.entry.js +14 -2
- package/dist/cjs/flip-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/flip-radio-group.cjs.entry.js +1 -1
- package/dist/cjs/flip-radio-group.cjs.entry.js.map +1 -1
- package/dist/cjs/flip-radio.cjs.entry.js +1 -1
- package/dist/cjs/flip-radio.cjs.entry.js.map +1 -1
- package/dist/cjs/flip-tabs.cjs.entry.js +3 -40
- package/dist/cjs/flip-tabs.cjs.entry.js.map +1 -1
- package/dist/cjs/flip-text-input.cjs.entry.js +1 -1
- package/dist/cjs/flip-text-input.cjs.entry.js.map +1 -1
- package/dist/cjs/flip-toast.cjs.entry.js +1 -1
- package/dist/cjs/flip-toast.cjs.entry.js.map +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/swirl-components.cjs.js +1 -1
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/flip-action-list-item/flip-action-list-item.css +4 -0
- package/dist/collection/components/flip-avatar/flip-avatar.js +11 -1
- package/dist/collection/components/flip-avatar/flip-avatar.js.map +1 -1
- package/dist/collection/components/flip-avatar-group/flip-avatar-group.js +11 -1
- package/dist/collection/components/flip-avatar-group/flip-avatar-group.js.map +1 -1
- package/dist/collection/components/flip-button/flip-button.css +10 -2
- package/dist/collection/components/flip-button-group/flip-button-group.css +57 -0
- package/dist/collection/components/flip-button-group/flip-button-group.js +27 -5
- package/dist/collection/components/flip-button-group/flip-button-group.js.map +1 -1
- package/dist/collection/components/flip-button-group/flip-button-group.stories.js +8 -2
- package/dist/collection/components/flip-button-group/flip-button-group.stories.js.map +1 -1
- package/dist/collection/components/flip-checkbox/flip-checkbox.css +1 -1
- package/dist/collection/components/flip-date-picker/flip-date-picker.css +0 -1
- package/dist/collection/components/flip-dialog/flip-dialog.css +1 -1
- package/dist/collection/components/flip-file-uploader/flip-file-uploader.css +3 -1
- package/dist/collection/components/flip-file-viewer/flip-file-viewer.js +20 -1
- package/dist/collection/components/flip-file-viewer/flip-file-viewer.js.map +1 -1
- package/dist/collection/components/flip-file-viewer/viewers/flip-file-viewer-csv/flip-file-viewer-csv.css +2 -0
- package/dist/collection/components/flip-file-viewer/viewers/flip-file-viewer-text/flip-file-viewer-text.css +2 -0
- package/dist/collection/components/flip-file-viewer/viewers/flip-file-viewer-video/flip-file-viewer-video.css +2 -2
- package/dist/collection/components/flip-form-group/flip-form-group.css +6 -2
- package/dist/collection/components/flip-lightbox/flip-lightbox.css +208 -0
- package/dist/collection/components/flip-lightbox/flip-lightbox.js +375 -0
- package/dist/collection/components/flip-lightbox/flip-lightbox.js.map +1 -0
- package/dist/collection/components/flip-lightbox/flip-lightbox.stories.js +44 -0
- package/dist/collection/components/flip-lightbox/flip-lightbox.stories.js.map +1 -0
- package/dist/collection/components/flip-modal/flip-modal.css +14 -3
- package/dist/collection/components/flip-modal/flip-modal.js +16 -2
- package/dist/collection/components/flip-modal/flip-modal.js.map +1 -1
- package/dist/collection/components/flip-popover/flip-popover.css +1 -1
- package/dist/collection/components/flip-popover/flip-popover.js +18 -10
- package/dist/collection/components/flip-popover/flip-popover.js.map +1 -1
- package/dist/collection/components/flip-radio/flip-radio.css +1 -1
- package/dist/collection/components/flip-radio-group/flip-radio-group.css +1 -1
- package/dist/collection/components/flip-tabs/flip-tabs.css +25 -36
- package/dist/collection/components/flip-tabs/flip-tabs.js +12 -59
- package/dist/collection/components/flip-tabs/flip-tabs.js.map +1 -1
- package/dist/collection/components/flip-text-input/flip-text-input.css +2 -0
- package/dist/collection/components/flip-toast/flip-toast.css +1 -1
- package/dist/components/flip-action-list-item.js +1 -1
- package/dist/components/flip-action-list-item.js.map +1 -1
- package/dist/components/flip-avatar-group.js +11 -1
- package/dist/components/flip-avatar-group.js.map +1 -1
- package/dist/components/flip-avatar.js +11 -1
- package/dist/components/flip-avatar.js.map +1 -1
- package/dist/components/flip-button-group2.js +9 -3
- package/dist/components/flip-button-group2.js.map +1 -1
- package/dist/components/flip-button2.js +1 -1
- package/dist/components/flip-button2.js.map +1 -1
- package/dist/components/flip-checkbox.js +1 -1
- package/dist/components/flip-checkbox.js.map +1 -1
- package/dist/components/flip-date-picker2.js +1 -1
- package/dist/components/flip-date-picker2.js.map +1 -1
- package/dist/components/flip-dialog.js +1 -1
- package/dist/components/flip-dialog.js.map +1 -1
- package/dist/components/flip-file-uploader.js +1 -1
- package/dist/components/flip-file-uploader.js.map +1 -1
- package/dist/components/flip-file-viewer-csv2.js +1 -1
- package/dist/components/flip-file-viewer-csv2.js.map +1 -1
- package/dist/components/flip-file-viewer-text2.js +1 -1
- package/dist/components/flip-file-viewer-text2.js.map +1 -1
- package/dist/components/flip-file-viewer-video2.js +1 -1
- package/dist/components/flip-file-viewer-video2.js.map +1 -1
- package/dist/components/flip-file-viewer.js +3 -1
- package/dist/components/flip-file-viewer.js.map +1 -1
- package/dist/components/flip-form-group.js +1 -1
- package/dist/components/flip-form-group.js.map +1 -1
- package/dist/components/flip-icon-arrow-left.js +1 -32
- package/dist/components/flip-icon-arrow-left.js.map +1 -1
- package/dist/{esm/flip-icon-arrow-left.entry.js → components/flip-icon-arrow-left2.js} +26 -8
- package/dist/components/flip-icon-arrow-left2.js.map +1 -0
- package/dist/components/flip-icon-arrow-right.js +1 -32
- package/dist/components/flip-icon-arrow-right.js.map +1 -1
- package/dist/{esm/flip-icon-arrow-right.entry.js → components/flip-icon-arrow-right2.js} +26 -8
- package/dist/components/flip-icon-arrow-right2.js.map +1 -0
- package/dist/components/flip-icon-download.js +1 -32
- package/dist/components/flip-icon-download.js.map +1 -1
- package/dist/{esm/flip-icon-download.entry.js → components/flip-icon-download2.js} +26 -8
- package/dist/components/flip-icon-download2.js.map +1 -0
- package/dist/components/flip-lightbox.d.ts +11 -0
- package/dist/components/flip-lightbox.js +255 -0
- package/dist/components/flip-lightbox.js.map +1 -0
- package/dist/components/flip-modal.js +16 -2
- package/dist/components/flip-modal.js.map +1 -1
- package/dist/components/flip-popover2.js +19 -11
- package/dist/components/flip-popover2.js.map +1 -1
- package/dist/components/flip-radio-group.js +1 -1
- package/dist/components/flip-radio-group.js.map +1 -1
- package/dist/components/flip-radio.js +1 -1
- package/dist/components/flip-radio.js.map +1 -1
- package/dist/components/flip-tabs.js +4 -42
- package/dist/components/flip-tabs.js.map +1 -1
- package/dist/components/flip-text-input.js +1 -1
- package/dist/components/flip-text-input.js.map +1 -1
- package/dist/components/flip-toast2.js +1 -1
- package/dist/components/flip-toast2.js.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +1 -0
- package/dist/components/index.js.map +1 -1
- package/dist/esm/flip-action-list-item.entry.js +1 -1
- package/dist/esm/flip-action-list-item.entry.js.map +1 -1
- package/dist/esm/flip-avatar-group.entry.js +11 -1
- package/dist/esm/flip-avatar-group.entry.js.map +1 -1
- package/dist/esm/flip-avatar.entry.js +11 -1
- package/dist/esm/flip-avatar.entry.js.map +1 -1
- package/dist/esm/flip-button-group.entry.js +9 -3
- package/dist/esm/flip-button-group.entry.js.map +1 -1
- package/dist/esm/flip-button.entry.js +1 -1
- package/dist/esm/flip-button.entry.js.map +1 -1
- package/dist/esm/flip-checkbox.entry.js +1 -1
- package/dist/esm/flip-checkbox.entry.js.map +1 -1
- package/dist/esm/flip-date-picker_3.entry.js +20 -12
- package/dist/esm/flip-date-picker_3.entry.js.map +1 -1
- package/dist/esm/flip-dialog.entry.js +1 -1
- package/dist/esm/flip-dialog.entry.js.map +1 -1
- package/dist/esm/flip-file-uploader.entry.js +1 -1
- package/dist/esm/flip-file-uploader.entry.js.map +1 -1
- package/dist/esm/flip-file-viewer-audio_6.entry.js +3 -3
- package/dist/esm/flip-file-viewer-audio_6.entry.js.map +1 -1
- package/dist/esm/flip-file-viewer.entry.js +2 -1
- package/dist/esm/flip-file-viewer.entry.js.map +1 -1
- package/dist/esm/flip-form-group.entry.js +1 -1
- package/dist/esm/flip-form-group.entry.js.map +1 -1
- package/dist/esm/flip-icon-arrow-left_3.entry.js +44 -0
- package/dist/esm/flip-icon-arrow-left_3.entry.js.map +1 -0
- package/dist/esm/flip-lightbox.entry.js +201 -0
- package/dist/esm/flip-lightbox.entry.js.map +1 -0
- package/dist/esm/flip-modal.entry.js +14 -2
- package/dist/esm/flip-modal.entry.js.map +1 -1
- package/dist/esm/flip-radio-group.entry.js +1 -1
- package/dist/esm/flip-radio-group.entry.js.map +1 -1
- package/dist/esm/flip-radio.entry.js +1 -1
- package/dist/esm/flip-radio.entry.js.map +1 -1
- package/dist/esm/flip-tabs.entry.js +3 -40
- package/dist/esm/flip-tabs.entry.js.map +1 -1
- package/dist/esm/flip-text-input.entry.js +1 -1
- package/dist/esm/flip-text-input.entry.js.map +1 -1
- package/dist/esm/flip-toast.entry.js +1 -1
- package/dist/esm/flip-toast.entry.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/swirl-components.js +1 -1
- package/dist/swirl-components/p-013a1742.entry.js +2 -0
- package/dist/swirl-components/p-013a1742.entry.js.map +1 -0
- package/dist/swirl-components/{p-c8db8af8.entry.js → p-04eefcca.entry.js} +2 -2
- package/dist/swirl-components/p-04eefcca.entry.js.map +1 -0
- package/dist/swirl-components/p-1ff7b440.entry.js +2 -0
- package/dist/swirl-components/p-1ff7b440.entry.js.map +1 -0
- package/dist/swirl-components/p-3147334a.entry.js +2 -0
- package/dist/swirl-components/p-3147334a.entry.js.map +1 -0
- package/dist/swirl-components/p-5022e258.entry.js +2 -0
- package/dist/swirl-components/p-5022e258.entry.js.map +1 -0
- package/dist/swirl-components/p-6ddd889e.entry.js +2 -0
- package/dist/swirl-components/p-6ddd889e.entry.js.map +1 -0
- package/dist/swirl-components/p-6febfe15.entry.js +2 -0
- package/dist/swirl-components/p-6febfe15.entry.js.map +1 -0
- package/dist/swirl-components/p-8784a282.entry.js +2 -0
- package/dist/swirl-components/p-8784a282.entry.js.map +1 -0
- package/dist/swirl-components/p-8faa2889.entry.js +2 -0
- package/dist/swirl-components/p-8faa2889.entry.js.map +1 -0
- package/dist/swirl-components/p-95c9ef17.entry.js +2 -0
- package/dist/swirl-components/p-95c9ef17.entry.js.map +1 -0
- package/dist/swirl-components/p-a15a28d3.entry.js +2 -0
- package/dist/swirl-components/p-a15a28d3.entry.js.map +1 -0
- package/dist/swirl-components/p-a178d901.entry.js +2 -0
- package/dist/swirl-components/p-a178d901.entry.js.map +1 -0
- package/dist/swirl-components/p-ad92140f.entry.js +2 -0
- package/dist/swirl-components/p-ad92140f.entry.js.map +1 -0
- package/dist/swirl-components/p-b1532bdb.entry.js +2 -0
- package/dist/swirl-components/p-b1532bdb.entry.js.map +1 -0
- package/dist/swirl-components/{p-c4c5a7ca.entry.js → p-bb9a65d7.entry.js} +3 -3
- package/dist/swirl-components/p-bb9a65d7.entry.js.map +1 -0
- package/dist/swirl-components/{p-7c20748f.entry.js → p-d6bb9690.entry.js} +2 -2
- package/dist/swirl-components/{p-7c20748f.entry.js.map → p-d6bb9690.entry.js.map} +1 -1
- package/dist/swirl-components/p-d9dfcd01.entry.js +2 -0
- package/dist/swirl-components/p-d9dfcd01.entry.js.map +1 -0
- package/dist/swirl-components/{p-06a08b17.entry.js → p-e34707fb.entry.js} +2 -2
- package/dist/swirl-components/{p-06a08b17.entry.js.map → p-e34707fb.entry.js.map} +1 -1
- package/dist/swirl-components/{p-692cb3d7.entry.js → p-f6a8ea5d.entry.js} +2 -2
- package/dist/swirl-components/p-f6a8ea5d.entry.js.map +1 -0
- package/dist/swirl-components/p-f94fc675.entry.js +2 -0
- package/dist/swirl-components/p-f94fc675.entry.js.map +1 -0
- package/dist/swirl-components/swirl-components.css +1 -1
- package/dist/swirl-components/swirl-components.esm.js +1 -1
- package/dist/swirl-components/swirl-components.esm.js.map +1 -1
- package/dist/types/components/flip-avatar/flip-avatar.d.ts +3 -0
- package/dist/types/components/flip-avatar-group/flip-avatar-group.d.ts +3 -0
- package/dist/types/components/flip-button-group/flip-button-group.d.ts +4 -3
- package/dist/types/components/flip-button-group/flip-button-group.stories.d.ts +5 -0
- package/dist/types/components/flip-file-viewer/flip-file-viewer.d.ts +1 -0
- package/dist/types/components/flip-lightbox/flip-lightbox.d.ts +49 -0
- package/dist/types/components/flip-lightbox/flip-lightbox.stories.d.ts +16 -0
- package/dist/types/components/flip-modal/flip-modal.d.ts +2 -0
- package/dist/types/components/flip-popover/flip-popover.d.ts +2 -0
- package/dist/types/components/flip-tabs/flip-tabs.d.ts +0 -7
- package/dist/types/components.d.ts +43 -3
- package/package.json +1 -1
- package/vscode-data.json +37 -0
- package/dist/cjs/flip-icon-arrow-left.cjs.entry.js +0 -22
- package/dist/cjs/flip-icon-arrow-left.cjs.entry.js.map +0 -1
- package/dist/cjs/flip-icon-arrow-right.cjs.entry.js +0 -22
- package/dist/cjs/flip-icon-arrow-right.cjs.entry.js.map +0 -1
- package/dist/cjs/flip-icon-download.cjs.entry.js +0 -22
- package/dist/cjs/flip-icon-download.cjs.entry.js.map +0 -1
- package/dist/esm/flip-icon-arrow-left.entry.js.map +0 -1
- package/dist/esm/flip-icon-arrow-right.entry.js.map +0 -1
- package/dist/esm/flip-icon-download.entry.js.map +0 -1
- package/dist/swirl-components/p-273b12eb.entry.js +0 -2
- package/dist/swirl-components/p-273b12eb.entry.js.map +0 -1
- package/dist/swirl-components/p-4aafa158.entry.js +0 -2
- package/dist/swirl-components/p-4aafa158.entry.js.map +0 -1
- package/dist/swirl-components/p-529bace4.entry.js +0 -2
- package/dist/swirl-components/p-529bace4.entry.js.map +0 -1
- package/dist/swirl-components/p-692cb3d7.entry.js.map +0 -1
- package/dist/swirl-components/p-91ccf392.entry.js +0 -2
- package/dist/swirl-components/p-91ccf392.entry.js.map +0 -1
- package/dist/swirl-components/p-91cd33f9.entry.js +0 -2
- package/dist/swirl-components/p-91cd33f9.entry.js.map +0 -1
- package/dist/swirl-components/p-9ffa5f69.entry.js +0 -2
- package/dist/swirl-components/p-9ffa5f69.entry.js.map +0 -1
- package/dist/swirl-components/p-b65aec9d.entry.js +0 -2
- package/dist/swirl-components/p-b65aec9d.entry.js.map +0 -1
- package/dist/swirl-components/p-bada1dda.entry.js +0 -2
- package/dist/swirl-components/p-bada1dda.entry.js.map +0 -1
- package/dist/swirl-components/p-bc94ecde.entry.js +0 -2
- package/dist/swirl-components/p-bc94ecde.entry.js.map +0 -1
- package/dist/swirl-components/p-c4c5a7ca.entry.js.map +0 -1
- package/dist/swirl-components/p-c8db8af8.entry.js.map +0 -1
- package/dist/swirl-components/p-c9f5b33a.entry.js +0 -2
- package/dist/swirl-components/p-c9f5b33a.entry.js.map +0 -1
- package/dist/swirl-components/p-d9b3b617.entry.js +0 -2
- package/dist/swirl-components/p-d9b3b617.entry.js.map +0 -1
- package/dist/swirl-components/p-df639805.entry.js +0 -2
- package/dist/swirl-components/p-df639805.entry.js.map +0 -1
- package/dist/swirl-components/p-dfd81ceb.entry.js +0 -2
- package/dist/swirl-components/p-dfd81ceb.entry.js.map +0 -1
- package/dist/swirl-components/p-e1debe08.entry.js +0 -2
- package/dist/swirl-components/p-e1debe08.entry.js.map +0 -1
- package/dist/swirl-components/p-f9c75666.entry.js +0 -2
- package/dist/swirl-components/p-f9c75666.entry.js.map +0 -1
- package/dist/swirl-components/p-fefffb34.entry.js +0 -2
- package/dist/swirl-components/p-fefffb34.entry.js.map +0 -1
|
@@ -10,16 +10,20 @@
|
|
|
10
10
|
.form-group {
|
|
11
11
|
display: flex;
|
|
12
12
|
flex-direction: column;
|
|
13
|
-
gap: var(--s-space-
|
|
13
|
+
gap: var(--s-space-16);
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
@media (min-width: 768px) {
|
|
17
17
|
|
|
18
18
|
.form-group {
|
|
19
|
-
gap: var(--s-space-
|
|
19
|
+
gap: var(--s-space-24)
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
+
.form-group--orientation-horizontal {
|
|
24
|
+
gap: var(--s-space-16);
|
|
25
|
+
}
|
|
26
|
+
|
|
23
27
|
@media (min-width: 768px) {
|
|
24
28
|
|
|
25
29
|
.form-group--orientation-horizontal {
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
:host {
|
|
2
|
+
display: block;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
:host * {
|
|
6
|
+
box-sizing: border-box;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.lightbox {
|
|
10
|
+
position: fixed;
|
|
11
|
+
z-index: var(--s-z-40);
|
|
12
|
+
background-color: rgba(0, 0, 0, 1);
|
|
13
|
+
inset: 0;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.lightbox[aria-hidden="true"] {
|
|
17
|
+
display: none;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@media (min-width: 768px) {
|
|
21
|
+
|
|
22
|
+
.lightbox {
|
|
23
|
+
background-color: rgba(0, 0, 0, 0.6)
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.lightbox:not(.lightbox--closing) .lightbox__body {
|
|
28
|
+
-webkit-animation: 0.15s lightbox-fade-in;
|
|
29
|
+
animation: 0.15s lightbox-fade-in;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@media (prefers-reduced-motion) {
|
|
33
|
+
|
|
34
|
+
.lightbox:not(.lightbox--closing) .lightbox__body {
|
|
35
|
+
-webkit-animation: none;
|
|
36
|
+
animation: none
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.lightbox--closing {
|
|
41
|
+
-webkit-animation: 0.15s lightbox-fade-out;
|
|
42
|
+
animation: 0.15s lightbox-fade-out;
|
|
43
|
+
-webkit-animation-fill-mode: forwards;
|
|
44
|
+
animation-fill-mode: forwards;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
@media (prefers-reduced-motion) {
|
|
48
|
+
|
|
49
|
+
.lightbox--closing {
|
|
50
|
+
-webkit-animation: none;
|
|
51
|
+
animation: none
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.lightbox__body {
|
|
56
|
+
position: relative;
|
|
57
|
+
width: 100%;
|
|
58
|
+
height: 100%;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.lightbox__header {
|
|
62
|
+
position: absolute;
|
|
63
|
+
z-index: 1;
|
|
64
|
+
top: 0;
|
|
65
|
+
right: 0;
|
|
66
|
+
left: 0;
|
|
67
|
+
display: flex;
|
|
68
|
+
padding: var(--s-space-12) var(--s-space-16);
|
|
69
|
+
justify-content: space-between;
|
|
70
|
+
align-items: flex-start;
|
|
71
|
+
pointer-events: none;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.lightbox__controls {
|
|
75
|
+
position: absolute;
|
|
76
|
+
z-index: 1;
|
|
77
|
+
top: 50%;
|
|
78
|
+
right: 0;
|
|
79
|
+
left: 0;
|
|
80
|
+
display: none;
|
|
81
|
+
padding-right: var(--s-space-16);
|
|
82
|
+
padding-left: var(--s-space-16);
|
|
83
|
+
justify-content: space-between;
|
|
84
|
+
align-items: flex-start;
|
|
85
|
+
pointer-events: none;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
@media (min-width: 768px) {
|
|
89
|
+
|
|
90
|
+
.lightbox__controls {
|
|
91
|
+
display: flex
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.lightbox__close-button,
|
|
96
|
+
.lightbox__download-button,
|
|
97
|
+
.lightbox__previous-slide-button,
|
|
98
|
+
.lightbox__next-slide-button {
|
|
99
|
+
display: inline-flex;
|
|
100
|
+
width: 2.5rem;
|
|
101
|
+
height: 2.5rem;
|
|
102
|
+
justify-content: center;
|
|
103
|
+
align-items: center;
|
|
104
|
+
border: none;
|
|
105
|
+
border-radius: 50%;
|
|
106
|
+
color: var(--s-icon-on-image);
|
|
107
|
+
background-color: rgba(0, 0, 0, 0.6);
|
|
108
|
+
cursor: pointer;
|
|
109
|
+
transition: opacity 0.15s;
|
|
110
|
+
pointer-events: auto;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.lightbox__close-button:disabled, .lightbox__download-button:disabled, .lightbox__previous-slide-button:disabled, .lightbox__next-slide-button:disabled {
|
|
114
|
+
pointer-events: none;
|
|
115
|
+
opacity: 0;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.lightbox__content {
|
|
119
|
+
overflow: hidden;
|
|
120
|
+
width: 100%;
|
|
121
|
+
height: 100%;
|
|
122
|
+
-webkit-user-select: none;
|
|
123
|
+
-moz-user-select: none;
|
|
124
|
+
user-select: none;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.lightbox__slides {
|
|
128
|
+
display: flex;
|
|
129
|
+
width: 100%;
|
|
130
|
+
height: 100%;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.lightbox__slides ::slotted(*) {
|
|
134
|
+
flex-basis: 100%;
|
|
135
|
+
flex-shrink: 0;
|
|
136
|
+
transition: transform 0.3s;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
@media (min-width: 768px) {
|
|
140
|
+
|
|
141
|
+
.lightbox__slides ::slotted(*) {
|
|
142
|
+
padding: 4rem 5rem
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
@media (prefers-reduced-motion) {
|
|
147
|
+
|
|
148
|
+
.lightbox__slides ::slotted(*) {
|
|
149
|
+
transition: none
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.lightbox__pagination {
|
|
154
|
+
position: absolute;
|
|
155
|
+
bottom: var(--s-space-32);
|
|
156
|
+
left: 50%;
|
|
157
|
+
padding: var(--s-space-4) var(--s-space-12);
|
|
158
|
+
border-radius: var(--s-border-radius-base);
|
|
159
|
+
color: var(--s-text-on-image);
|
|
160
|
+
background-color: rgba(0, 0, 0, 0.6);
|
|
161
|
+
font-weight: var(--s-font-weight-medium);
|
|
162
|
+
line-height: var(--s-line-height-base);
|
|
163
|
+
transform: translateX(-50%);
|
|
164
|
+
pointer-events: none;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
@media (min-width: 768px) {
|
|
168
|
+
|
|
169
|
+
.lightbox__pagination {
|
|
170
|
+
display: none
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
@-webkit-keyframes lightbox-fade-in {
|
|
175
|
+
from {
|
|
176
|
+
opacity: 0;
|
|
177
|
+
}
|
|
178
|
+
to {
|
|
179
|
+
opacity: 1;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
@keyframes lightbox-fade-in {
|
|
184
|
+
from {
|
|
185
|
+
opacity: 0;
|
|
186
|
+
}
|
|
187
|
+
to {
|
|
188
|
+
opacity: 1;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
@-webkit-keyframes lightbox-fade-out {
|
|
193
|
+
from {
|
|
194
|
+
opacity: 1;
|
|
195
|
+
}
|
|
196
|
+
to {
|
|
197
|
+
opacity: 0;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
@keyframes lightbox-fade-out {
|
|
202
|
+
from {
|
|
203
|
+
opacity: 1;
|
|
204
|
+
}
|
|
205
|
+
to {
|
|
206
|
+
opacity: 0;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
import { Component, Element, h, Host, Method, Prop, State, } from "@stencil/core";
|
|
2
|
+
import A11yDialog from "a11y-dialog";
|
|
3
|
+
import { disableBodyScroll, enableBodyScroll } from "body-scroll-lock";
|
|
4
|
+
import classnames from "classnames";
|
|
5
|
+
import { querySelectorAllDeep } from "../../utils";
|
|
6
|
+
export class FlipLightbox {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.closeButtonLabel = "Close modal";
|
|
9
|
+
this.downloadButtonLabel = "Download active slide content";
|
|
10
|
+
this.nextSlideButtonLabel = "Next slide";
|
|
11
|
+
this.previousSlideButtonLabel = "Previous slide";
|
|
12
|
+
this.activeSlideIndex = 0;
|
|
13
|
+
this.closing = false;
|
|
14
|
+
this.dragging = false;
|
|
15
|
+
this.mediaPlayers = [];
|
|
16
|
+
this.onCloseButtonClick = () => {
|
|
17
|
+
this.close();
|
|
18
|
+
};
|
|
19
|
+
this.onDownloadButtonClick = () => {
|
|
20
|
+
var _a;
|
|
21
|
+
(_a = this.slides[this.activeSlideIndex]) === null || _a === void 0 ? void 0 : _a.download();
|
|
22
|
+
};
|
|
23
|
+
this.onKeyDown = (event) => {
|
|
24
|
+
if (event.code === "Escape") {
|
|
25
|
+
this.close();
|
|
26
|
+
}
|
|
27
|
+
else if (event.code === "ArrowLeft") {
|
|
28
|
+
this.onPreviousSlideClick();
|
|
29
|
+
}
|
|
30
|
+
else if (event.code === "ArrowRight") {
|
|
31
|
+
this.onNextSlideClick();
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
this.onNextSlideClick = () => {
|
|
35
|
+
this.activateSlide(Math.min(this.slides.length - 1, this.activeSlideIndex + 1));
|
|
36
|
+
};
|
|
37
|
+
this.onPreviousSlideClick = () => {
|
|
38
|
+
this.activateSlide(Math.max(0, this.activeSlideIndex - 1));
|
|
39
|
+
};
|
|
40
|
+
this.registerSlides = () => {
|
|
41
|
+
this.slides = Array.from(this.el.children);
|
|
42
|
+
this.setSlideAttributes();
|
|
43
|
+
this.updateMediaPlayers();
|
|
44
|
+
};
|
|
45
|
+
this.onPointerDown = (event) => {
|
|
46
|
+
event.preventDefault();
|
|
47
|
+
this.dragging = true;
|
|
48
|
+
this.dragStartPosition =
|
|
49
|
+
event instanceof MouseEvent ? event.clientX : event.touches[0].clientX;
|
|
50
|
+
this.slides.forEach((slide) => {
|
|
51
|
+
slide.style.transition = "none";
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
this.onPointerMove = (event) => {
|
|
55
|
+
if (this.dragging) {
|
|
56
|
+
event.preventDefault();
|
|
57
|
+
const deltaX = event instanceof MouseEvent
|
|
58
|
+
? event.clientX - this.dragStartPosition
|
|
59
|
+
: event.touches[0].clientX - this.dragStartPosition;
|
|
60
|
+
this.slides.forEach((slide) => {
|
|
61
|
+
const pixelOffset = this.activeSlideIndex * slide.getBoundingClientRect().width;
|
|
62
|
+
this.dragDelta = deltaX;
|
|
63
|
+
slide.style.transform = `translate3d(${(-pixelOffset + this.dragDelta) / 16}rem, 0, 0)`;
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
this.onPointerUp = () => {
|
|
68
|
+
this.dragging = false;
|
|
69
|
+
this.dragStartPosition = undefined;
|
|
70
|
+
const dragRatio = this.dragDelta /
|
|
71
|
+
this.slides[this.activeSlideIndex].getBoundingClientRect().width;
|
|
72
|
+
this.dragDelta = 0;
|
|
73
|
+
const shouldMoveToPreviousSlide = dragRatio > 0.2;
|
|
74
|
+
const shouldMoveToNextSlide = dragRatio < -0.2;
|
|
75
|
+
this.slides.forEach((slide) => {
|
|
76
|
+
slide.style.transition = "";
|
|
77
|
+
});
|
|
78
|
+
if (shouldMoveToPreviousSlide) {
|
|
79
|
+
this.onPreviousSlideClick();
|
|
80
|
+
}
|
|
81
|
+
else if (shouldMoveToNextSlide) {
|
|
82
|
+
this.onNextSlideClick();
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
this.resetSlidePositions();
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
componentWillLoad() {
|
|
90
|
+
this.registerSlides();
|
|
91
|
+
}
|
|
92
|
+
componentDidLoad() {
|
|
93
|
+
this.modal = new A11yDialog(this.modalEl);
|
|
94
|
+
this.activateSlide(0);
|
|
95
|
+
}
|
|
96
|
+
disconnectedCallback() {
|
|
97
|
+
var _a;
|
|
98
|
+
(_a = this.modal) === null || _a === void 0 ? void 0 : _a.destroy();
|
|
99
|
+
this.unlockBodyScroll();
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Open the lightbox.
|
|
103
|
+
*/
|
|
104
|
+
async open() {
|
|
105
|
+
this.modal.show();
|
|
106
|
+
this.lockBodyScroll();
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Close the lightbox.
|
|
110
|
+
*/
|
|
111
|
+
async close() {
|
|
112
|
+
if (this.closing) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
this.closing = true;
|
|
116
|
+
this.unlockBodyScroll();
|
|
117
|
+
setTimeout(() => {
|
|
118
|
+
this.modal.hide();
|
|
119
|
+
this.closing = false;
|
|
120
|
+
}, 150);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Activate a slide.
|
|
124
|
+
* @param newActiveSlideIndex
|
|
125
|
+
*/
|
|
126
|
+
async activateSlide(newActiveSlideIndex) {
|
|
127
|
+
this.dragging = false;
|
|
128
|
+
this.activeSlideIndex = newActiveSlideIndex;
|
|
129
|
+
this.slides.forEach((slide, index) => {
|
|
130
|
+
if (index === this.activeSlideIndex) {
|
|
131
|
+
slide.removeAttribute("aria-hidden");
|
|
132
|
+
slide.setAttribute("active", "true");
|
|
133
|
+
}
|
|
134
|
+
else if (index === this.activeSlideIndex - 1 ||
|
|
135
|
+
index === this.activeSlideIndex + 1) {
|
|
136
|
+
slide.setAttribute("aria-hidden", "true");
|
|
137
|
+
slide.setAttribute("active", "true");
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
slide.setAttribute("aria-hidden", "true");
|
|
141
|
+
}
|
|
142
|
+
slide.style.transform = `translate3d(-${100 * this.activeSlideIndex}%, 0, 0)`;
|
|
143
|
+
});
|
|
144
|
+
// wait for slide animation before deactivating the slide
|
|
145
|
+
setTimeout(() => {
|
|
146
|
+
this.slides.forEach((slide, index) => {
|
|
147
|
+
if (index !== this.activeSlideIndex &&
|
|
148
|
+
index !== this.activeSlideIndex - 1 &&
|
|
149
|
+
index !== this.activeSlideIndex + 1) {
|
|
150
|
+
slide.setAttribute("active", "false");
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}, 300);
|
|
154
|
+
this.stopAllMediaPlayers();
|
|
155
|
+
this.updateMediaPlayers();
|
|
156
|
+
}
|
|
157
|
+
setSlideAttributes() {
|
|
158
|
+
this.slides.forEach((slide) => {
|
|
159
|
+
slide.setAttribute("active", "false");
|
|
160
|
+
slide.setAttribute("aria-label", slide.file);
|
|
161
|
+
slide.setAttribute("aria-roledescription", "slide");
|
|
162
|
+
slide.setAttribute("role", "group");
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
resetSlidePositions() {
|
|
166
|
+
this.slides.forEach((slide) => {
|
|
167
|
+
slide.style.transform = `translate3d(-${100 * this.activeSlideIndex}%, 0, 0)`;
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
lockBodyScroll() {
|
|
171
|
+
disableBodyScroll(this.el);
|
|
172
|
+
}
|
|
173
|
+
unlockBodyScroll() {
|
|
174
|
+
enableBodyScroll(this.el);
|
|
175
|
+
}
|
|
176
|
+
updateMediaPlayers() {
|
|
177
|
+
const mediaPlayers = querySelectorAllDeep(this.el, "video");
|
|
178
|
+
this.mediaPlayers = mediaPlayers;
|
|
179
|
+
}
|
|
180
|
+
stopAllMediaPlayers() {
|
|
181
|
+
this.mediaPlayers.forEach((mediaPlayer) => mediaPlayer.pause());
|
|
182
|
+
}
|
|
183
|
+
render() {
|
|
184
|
+
const showPagination = this.slides.length > 1;
|
|
185
|
+
const className = classnames("lightbox", {
|
|
186
|
+
"lightbox--closing": this.closing,
|
|
187
|
+
});
|
|
188
|
+
return (h(Host, null,
|
|
189
|
+
h("section", { "aria-hidden": "true", "aria-label": this.label, class: className, id: "lightbox", onMouseDown: this.onPointerDown, onMouseMove: this.onPointerMove, onMouseOut: this.onPointerUp, onMouseUp: this.onPointerUp, onKeyDown: this.onKeyDown, onTouchEnd: this.onPointerUp, onTouchMove: this.onPointerMove, onTouchStart: this.onPointerDown, ref: (el) => (this.modalEl = el) },
|
|
190
|
+
h("div", { class: "lightbox__body", role: "document" },
|
|
191
|
+
h("header", { class: "lightbox__header" },
|
|
192
|
+
h("button", { "aria-label": this.closeButtonLabel, class: "lightbox__close-button", onClick: this.onCloseButtonClick },
|
|
193
|
+
h("flip-icon-close", null)),
|
|
194
|
+
h("button", { "aria-label": this.downloadButtonLabel, class: "lightbox__download-button", onClick: this.onDownloadButtonClick },
|
|
195
|
+
h("flip-icon-download", null))),
|
|
196
|
+
h("div", { "aria-roledescription": "carousel", class: "lightbox__content", role: "group" },
|
|
197
|
+
h("div", { "aria-atomic": "false", "aria-live": "polite", class: "lightbox__slides" },
|
|
198
|
+
h("slot", { onSlotchange: this.registerSlides }))),
|
|
199
|
+
h("div", { class: "lightbox__controls" },
|
|
200
|
+
h("button", { "aria-label": this.previousSlideButtonLabel, class: "lightbox__previous-slide-button", disabled: this.activeSlideIndex === 0, onClick: this.onPreviousSlideClick },
|
|
201
|
+
h("flip-icon-arrow-left", null)),
|
|
202
|
+
h("button", { "aria-label": this.nextSlideButtonLabel, class: "lightbox__next-slide-button", disabled: this.activeSlideIndex === this.slides.length - 1, onClick: this.onNextSlideClick },
|
|
203
|
+
h("flip-icon-arrow-right", null))),
|
|
204
|
+
showPagination && (h("span", { class: "lightbox__pagination" },
|
|
205
|
+
h("span", { "aria-current": "page" }, this.activeSlideIndex + 1),
|
|
206
|
+
" /",
|
|
207
|
+
" ",
|
|
208
|
+
this.slides.length))))));
|
|
209
|
+
}
|
|
210
|
+
static get is() { return "flip-lightbox"; }
|
|
211
|
+
static get encapsulation() { return "shadow"; }
|
|
212
|
+
static get originalStyleUrls() { return {
|
|
213
|
+
"$": ["flip-lightbox.css"]
|
|
214
|
+
}; }
|
|
215
|
+
static get styleUrls() { return {
|
|
216
|
+
"$": ["flip-lightbox.css"]
|
|
217
|
+
}; }
|
|
218
|
+
static get properties() { return {
|
|
219
|
+
"closeButtonLabel": {
|
|
220
|
+
"type": "string",
|
|
221
|
+
"mutable": false,
|
|
222
|
+
"complexType": {
|
|
223
|
+
"original": "string",
|
|
224
|
+
"resolved": "string",
|
|
225
|
+
"references": {}
|
|
226
|
+
},
|
|
227
|
+
"required": false,
|
|
228
|
+
"optional": true,
|
|
229
|
+
"docs": {
|
|
230
|
+
"tags": [],
|
|
231
|
+
"text": ""
|
|
232
|
+
},
|
|
233
|
+
"attribute": "close-button-label",
|
|
234
|
+
"reflect": false,
|
|
235
|
+
"defaultValue": "\"Close modal\""
|
|
236
|
+
},
|
|
237
|
+
"downloadButtonLabel": {
|
|
238
|
+
"type": "string",
|
|
239
|
+
"mutable": false,
|
|
240
|
+
"complexType": {
|
|
241
|
+
"original": "string",
|
|
242
|
+
"resolved": "string",
|
|
243
|
+
"references": {}
|
|
244
|
+
},
|
|
245
|
+
"required": false,
|
|
246
|
+
"optional": true,
|
|
247
|
+
"docs": {
|
|
248
|
+
"tags": [],
|
|
249
|
+
"text": ""
|
|
250
|
+
},
|
|
251
|
+
"attribute": "download-button-label",
|
|
252
|
+
"reflect": false,
|
|
253
|
+
"defaultValue": "\"Download active slide content\""
|
|
254
|
+
},
|
|
255
|
+
"label": {
|
|
256
|
+
"type": "string",
|
|
257
|
+
"mutable": false,
|
|
258
|
+
"complexType": {
|
|
259
|
+
"original": "string",
|
|
260
|
+
"resolved": "string",
|
|
261
|
+
"references": {}
|
|
262
|
+
},
|
|
263
|
+
"required": true,
|
|
264
|
+
"optional": false,
|
|
265
|
+
"docs": {
|
|
266
|
+
"tags": [],
|
|
267
|
+
"text": ""
|
|
268
|
+
},
|
|
269
|
+
"attribute": "label",
|
|
270
|
+
"reflect": false
|
|
271
|
+
},
|
|
272
|
+
"nextSlideButtonLabel": {
|
|
273
|
+
"type": "string",
|
|
274
|
+
"mutable": false,
|
|
275
|
+
"complexType": {
|
|
276
|
+
"original": "string",
|
|
277
|
+
"resolved": "string",
|
|
278
|
+
"references": {}
|
|
279
|
+
},
|
|
280
|
+
"required": false,
|
|
281
|
+
"optional": true,
|
|
282
|
+
"docs": {
|
|
283
|
+
"tags": [],
|
|
284
|
+
"text": ""
|
|
285
|
+
},
|
|
286
|
+
"attribute": "next-slide-button-label",
|
|
287
|
+
"reflect": false,
|
|
288
|
+
"defaultValue": "\"Next slide\""
|
|
289
|
+
},
|
|
290
|
+
"previousSlideButtonLabel": {
|
|
291
|
+
"type": "string",
|
|
292
|
+
"mutable": false,
|
|
293
|
+
"complexType": {
|
|
294
|
+
"original": "string",
|
|
295
|
+
"resolved": "string",
|
|
296
|
+
"references": {}
|
|
297
|
+
},
|
|
298
|
+
"required": false,
|
|
299
|
+
"optional": true,
|
|
300
|
+
"docs": {
|
|
301
|
+
"tags": [],
|
|
302
|
+
"text": ""
|
|
303
|
+
},
|
|
304
|
+
"attribute": "previous-slide-button-label",
|
|
305
|
+
"reflect": false,
|
|
306
|
+
"defaultValue": "\"Previous slide\""
|
|
307
|
+
}
|
|
308
|
+
}; }
|
|
309
|
+
static get states() { return {
|
|
310
|
+
"activeSlideIndex": {},
|
|
311
|
+
"closing": {},
|
|
312
|
+
"slides": {}
|
|
313
|
+
}; }
|
|
314
|
+
static get methods() { return {
|
|
315
|
+
"open": {
|
|
316
|
+
"complexType": {
|
|
317
|
+
"signature": "() => Promise<void>",
|
|
318
|
+
"parameters": [],
|
|
319
|
+
"references": {
|
|
320
|
+
"Promise": {
|
|
321
|
+
"location": "global"
|
|
322
|
+
}
|
|
323
|
+
},
|
|
324
|
+
"return": "Promise<void>"
|
|
325
|
+
},
|
|
326
|
+
"docs": {
|
|
327
|
+
"text": "Open the lightbox.",
|
|
328
|
+
"tags": []
|
|
329
|
+
}
|
|
330
|
+
},
|
|
331
|
+
"close": {
|
|
332
|
+
"complexType": {
|
|
333
|
+
"signature": "() => Promise<void>",
|
|
334
|
+
"parameters": [],
|
|
335
|
+
"references": {
|
|
336
|
+
"Promise": {
|
|
337
|
+
"location": "global"
|
|
338
|
+
}
|
|
339
|
+
},
|
|
340
|
+
"return": "Promise<void>"
|
|
341
|
+
},
|
|
342
|
+
"docs": {
|
|
343
|
+
"text": "Close the lightbox.",
|
|
344
|
+
"tags": []
|
|
345
|
+
}
|
|
346
|
+
},
|
|
347
|
+
"activateSlide": {
|
|
348
|
+
"complexType": {
|
|
349
|
+
"signature": "(newActiveSlideIndex: number) => Promise<void>",
|
|
350
|
+
"parameters": [{
|
|
351
|
+
"tags": [{
|
|
352
|
+
"name": "param",
|
|
353
|
+
"text": "newActiveSlideIndex"
|
|
354
|
+
}],
|
|
355
|
+
"text": ""
|
|
356
|
+
}],
|
|
357
|
+
"references": {
|
|
358
|
+
"Promise": {
|
|
359
|
+
"location": "global"
|
|
360
|
+
}
|
|
361
|
+
},
|
|
362
|
+
"return": "Promise<void>"
|
|
363
|
+
},
|
|
364
|
+
"docs": {
|
|
365
|
+
"text": "Activate a slide.",
|
|
366
|
+
"tags": [{
|
|
367
|
+
"name": "param",
|
|
368
|
+
"text": "newActiveSlideIndex"
|
|
369
|
+
}]
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}; }
|
|
373
|
+
static get elementRef() { return "el"; }
|
|
374
|
+
}
|
|
375
|
+
//# sourceMappingURL=flip-lightbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flip-lightbox.js","sourceRoot":"","sources":["../../../../src/components/flip-lightbox/flip-lightbox.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n h,\n Host,\n Method,\n Prop,\n State,\n} from \"@stencil/core\";\nimport A11yDialog from \"a11y-dialog\";\nimport { disableBodyScroll, enableBodyScroll } from \"body-scroll-lock\";\nimport classnames from \"classnames\";\nimport { querySelectorAllDeep } from \"../../utils\";\n\n@Component({\n shadow: true,\n styleUrl: \"flip-lightbox.css\",\n tag: \"flip-lightbox\",\n})\nexport class FlipLightbox {\n @Element() el: HTMLElement;\n\n @Prop() closeButtonLabel?: string = \"Close modal\";\n @Prop() downloadButtonLabel?: string = \"Download active slide content\";\n @Prop() label!: string;\n @Prop() nextSlideButtonLabel?: string = \"Next slide\";\n @Prop() previousSlideButtonLabel?: string = \"Previous slide\";\n\n @State() activeSlideIndex: number = 0;\n @State() closing = false;\n @State() slides: HTMLFlipFileViewerElement[];\n\n private dragging: boolean = false;\n private dragStartPosition: number;\n private dragDelta: number;\n private modal: A11yDialog;\n private modalEl: HTMLElement;\n private mediaPlayers: (HTMLVideoElement | HTMLAudioElement)[] = [];\n\n componentWillLoad() {\n this.registerSlides();\n }\n\n componentDidLoad() {\n this.modal = new A11yDialog(this.modalEl);\n this.activateSlide(0);\n }\n\n disconnectedCallback() {\n this.modal?.destroy();\n this.unlockBodyScroll();\n }\n\n /**\n * Open the lightbox.\n */\n @Method()\n async open() {\n this.modal.show();\n this.lockBodyScroll();\n }\n\n /**\n * Close the lightbox.\n */\n @Method()\n async close() {\n if (this.closing) {\n return;\n }\n\n this.closing = true;\n this.unlockBodyScroll();\n\n setTimeout(() => {\n this.modal.hide();\n this.closing = false;\n }, 150);\n }\n\n /**\n * Activate a slide.\n * @param newActiveSlideIndex\n */\n @Method()\n async activateSlide(newActiveSlideIndex: number) {\n this.dragging = false;\n this.activeSlideIndex = newActiveSlideIndex;\n\n this.slides.forEach((slide, index) => {\n if (index === this.activeSlideIndex) {\n slide.removeAttribute(\"aria-hidden\");\n slide.setAttribute(\"active\", \"true\");\n } else if (\n index === this.activeSlideIndex - 1 ||\n index === this.activeSlideIndex + 1\n ) {\n slide.setAttribute(\"aria-hidden\", \"true\");\n slide.setAttribute(\"active\", \"true\");\n } else {\n slide.setAttribute(\"aria-hidden\", \"true\");\n }\n\n slide.style.transform = `translate3d(-${\n 100 * this.activeSlideIndex\n }%, 0, 0)`;\n });\n\n // wait for slide animation before deactivating the slide\n setTimeout(() => {\n this.slides.forEach((slide, index) => {\n if (\n index !== this.activeSlideIndex &&\n index !== this.activeSlideIndex - 1 &&\n index !== this.activeSlideIndex + 1\n ) {\n slide.setAttribute(\"active\", \"false\");\n }\n });\n }, 300);\n\n this.stopAllMediaPlayers();\n this.updateMediaPlayers();\n }\n\n private setSlideAttributes() {\n this.slides.forEach((slide) => {\n slide.setAttribute(\"active\", \"false\");\n slide.setAttribute(\"aria-label\", slide.file);\n slide.setAttribute(\"aria-roledescription\", \"slide\");\n slide.setAttribute(\"role\", \"group\");\n });\n }\n\n private resetSlidePositions() {\n this.slides.forEach((slide) => {\n slide.style.transform = `translate3d(-${\n 100 * this.activeSlideIndex\n }%, 0, 0)`;\n });\n }\n\n private lockBodyScroll() {\n disableBodyScroll(this.el);\n }\n\n private unlockBodyScroll() {\n enableBodyScroll(this.el);\n }\n\n private onCloseButtonClick = () => {\n this.close();\n };\n\n private onDownloadButtonClick = () => {\n this.slides[this.activeSlideIndex]?.download();\n };\n\n private onKeyDown = (event: KeyboardEvent) => {\n if (event.code === \"Escape\") {\n this.close();\n } else if (event.code === \"ArrowLeft\") {\n this.onPreviousSlideClick();\n } else if (event.code === \"ArrowRight\") {\n this.onNextSlideClick();\n }\n };\n\n private onNextSlideClick = () => {\n this.activateSlide(\n Math.min(this.slides.length - 1, this.activeSlideIndex + 1)\n );\n };\n\n private onPreviousSlideClick = () => {\n this.activateSlide(Math.max(0, this.activeSlideIndex - 1));\n };\n\n private registerSlides = () => {\n this.slides = Array.from(this.el.children) as HTMLFlipFileViewerElement[];\n this.setSlideAttributes();\n this.updateMediaPlayers();\n };\n\n private updateMediaPlayers() {\n const mediaPlayers = querySelectorAllDeep<\n HTMLAudioElement | HTMLVideoElement\n >(this.el, \"video\");\n\n this.mediaPlayers = mediaPlayers;\n }\n\n private stopAllMediaPlayers() {\n this.mediaPlayers.forEach((mediaPlayer) => mediaPlayer.pause());\n }\n\n private onPointerDown = (event: MouseEvent | TouchEvent) => {\n event.preventDefault();\n\n this.dragging = true;\n\n this.dragStartPosition =\n event instanceof MouseEvent ? event.clientX : event.touches[0].clientX;\n\n this.slides.forEach((slide) => {\n slide.style.transition = \"none\";\n });\n };\n\n private onPointerMove = (event: MouseEvent | TouchEvent) => {\n if (this.dragging) {\n event.preventDefault();\n\n const deltaX =\n event instanceof MouseEvent\n ? event.clientX - this.dragStartPosition\n : event.touches[0].clientX - this.dragStartPosition;\n\n this.slides.forEach((slide) => {\n const pixelOffset =\n this.activeSlideIndex * slide.getBoundingClientRect().width;\n\n this.dragDelta = deltaX;\n\n slide.style.transform = `translate3d(${\n (-pixelOffset + this.dragDelta) / 16\n }rem, 0, 0)`;\n });\n }\n };\n\n private onPointerUp = () => {\n this.dragging = false;\n this.dragStartPosition = undefined;\n\n const dragRatio =\n this.dragDelta /\n this.slides[this.activeSlideIndex].getBoundingClientRect().width;\n\n this.dragDelta = 0;\n\n const shouldMoveToPreviousSlide = dragRatio > 0.2;\n const shouldMoveToNextSlide = dragRatio < -0.2;\n\n this.slides.forEach((slide) => {\n slide.style.transition = \"\";\n });\n\n if (shouldMoveToPreviousSlide) {\n this.onPreviousSlideClick();\n } else if (shouldMoveToNextSlide) {\n this.onNextSlideClick();\n } else {\n this.resetSlidePositions();\n }\n };\n\n render() {\n const showPagination = this.slides.length > 1;\n\n const className = classnames(\"lightbox\", {\n \"lightbox--closing\": this.closing,\n });\n\n return (\n <Host>\n <section\n aria-hidden=\"true\"\n aria-label={this.label}\n class={className}\n id=\"lightbox\"\n onMouseDown={this.onPointerDown}\n onMouseMove={this.onPointerMove}\n onMouseOut={this.onPointerUp}\n onMouseUp={this.onPointerUp}\n onKeyDown={this.onKeyDown}\n onTouchEnd={this.onPointerUp}\n onTouchMove={this.onPointerMove}\n onTouchStart={this.onPointerDown}\n ref={(el) => (this.modalEl = el)}\n >\n <div class=\"lightbox__body\" role=\"document\">\n <header class=\"lightbox__header\">\n <button\n aria-label={this.closeButtonLabel}\n class=\"lightbox__close-button\"\n onClick={this.onCloseButtonClick}\n >\n <flip-icon-close></flip-icon-close>\n </button>\n <button\n aria-label={this.downloadButtonLabel}\n class=\"lightbox__download-button\"\n onClick={this.onDownloadButtonClick}\n >\n <flip-icon-download></flip-icon-download>\n </button>\n </header>\n <div\n aria-roledescription=\"carousel\"\n class=\"lightbox__content\"\n role=\"group\"\n >\n <div\n aria-atomic=\"false\"\n aria-live=\"polite\"\n class=\"lightbox__slides\"\n >\n <slot onSlotchange={this.registerSlides}></slot>\n </div>\n </div>\n <div class=\"lightbox__controls\">\n <button\n aria-label={this.previousSlideButtonLabel}\n class=\"lightbox__previous-slide-button\"\n disabled={this.activeSlideIndex === 0}\n onClick={this.onPreviousSlideClick}\n >\n <flip-icon-arrow-left></flip-icon-arrow-left>\n </button>\n <button\n aria-label={this.nextSlideButtonLabel}\n class=\"lightbox__next-slide-button\"\n disabled={this.activeSlideIndex === this.slides.length - 1}\n onClick={this.onNextSlideClick}\n >\n <flip-icon-arrow-right></flip-icon-arrow-right>\n </button>\n </div>\n {showPagination && (\n <span class=\"lightbox__pagination\">\n <span aria-current=\"page\">{this.activeSlideIndex + 1}</span> /{\" \"}\n {this.slides.length}\n </span>\n )}\n </div>\n </section>\n </Host>\n );\n }\n}\n"]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { generateStoryElement } from "../../utils";
|
|
2
|
+
import Docs from "./flip-lightbox.mdx";
|
|
3
|
+
export default {
|
|
4
|
+
component: "flip-lightbox",
|
|
5
|
+
parameters: {
|
|
6
|
+
docs: {
|
|
7
|
+
page: Docs,
|
|
8
|
+
source: {
|
|
9
|
+
code: `<flip-lightbox id="lightbox" label="Lightbox">
|
|
10
|
+
<flip-file-viewer description="Cute dog in a blaket." file="/sample.jpg" type="image/jpeg"></flip-file-viewer>
|
|
11
|
+
<flip-file-viewer description="Another cute dog in a blanket." file="/sample-2.jpg" type="image/jpeg"></flip-file-viewer>
|
|
12
|
+
<flip-file-viewer description="Black puppy." file="/sample-3.jpg" type="image/jpeg"></flip-file-viewer>
|
|
13
|
+
<flip-file-viewer file="/sample.mp4" type="video/mp4"></flip-file-viewer>
|
|
14
|
+
</flip-lightbox>
|
|
15
|
+
|
|
16
|
+
<script>
|
|
17
|
+
const lightbox = document.body.querySelector('#lightbox');
|
|
18
|
+
lightbox.open();
|
|
19
|
+
</script>`,
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
title: "Components/FlipLightbox",
|
|
24
|
+
};
|
|
25
|
+
const Template = (args) => {
|
|
26
|
+
const container = document.createElement("div");
|
|
27
|
+
const trigger = document.createElement("flip-button");
|
|
28
|
+
const element = generateStoryElement("flip-lightbox", args);
|
|
29
|
+
trigger.label = "Open lightbox";
|
|
30
|
+
trigger.addEventListener("click", () => element.open());
|
|
31
|
+
element.innerHTML = `
|
|
32
|
+
<flip-file-viewer description="Cute dog in a blanket." file="/sample.jpg" type="image/jpeg"></flip-file-viewer>
|
|
33
|
+
<flip-file-viewer description="Another cute dog in a blanket." file="/sample-2.jpg" type="image/jpeg"></flip-file-viewer>
|
|
34
|
+
<flip-file-viewer description="Black puppy." file="/sample-3.jpg" type="image/jpeg"></flip-file-viewer>
|
|
35
|
+
<flip-file-viewer file="/sample.mp4" type="video/mp4"></flip-file-viewer>
|
|
36
|
+
`;
|
|
37
|
+
container.append(trigger, element);
|
|
38
|
+
return container;
|
|
39
|
+
};
|
|
40
|
+
export const FlipLightbox = Template.bind({});
|
|
41
|
+
FlipLightbox.args = {
|
|
42
|
+
label: "Lightbox",
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=flip-lightbox.stories.js.map
|