@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flip-lightbox.stories.js","sourceRoot":"","sources":["../../../../src/components/flip-lightbox/flip-lightbox.stories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,IAAI,MAAM,qBAAqB,CAAC;AAEvC,eAAe;EACb,SAAS,EAAE,eAAe;EAC1B,UAAU,EAAE;IACV,IAAI,EAAE;MACJ,IAAI,EAAE,IAAI;MACV,MAAM,EAAE;QACN,IAAI,EAAE;;;;;;;;;;UAUJ;OACH;KACF;GACF;EACD,KAAK,EAAE,yBAAyB;CACjC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,EAAE;EACxB,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;EAChD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;EACtD,MAAM,OAAO,GAAG,oBAAoB,CAClC,eAAe,EACf,IAAI,CACsB,CAAC;EAE7B,OAAO,CAAC,KAAK,GAAG,eAAe,CAAC;EAChC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;EAExD,OAAO,CAAC,SAAS,GAAG;;;;;GAKnB,CAAC;EAEF,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;EAEnC,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAE9C,YAAY,CAAC,IAAI,GAAG;EAClB,KAAK,EAAE,UAAU;CAClB,CAAC","sourcesContent":["import { generateStoryElement } from \"../../utils\";\nimport Docs from \"./flip-lightbox.mdx\";\n\nexport default {\n component: \"flip-lightbox\",\n parameters: {\n docs: {\n page: Docs,\n source: {\n code: `<flip-lightbox id=\"lightbox\" label=\"Lightbox\">\n <flip-file-viewer description=\"Cute dog in a blaket.\" file=\"/sample.jpg\" type=\"image/jpeg\"></flip-file-viewer>\n <flip-file-viewer description=\"Another cute dog in a blanket.\" file=\"/sample-2.jpg\" type=\"image/jpeg\"></flip-file-viewer>\n <flip-file-viewer description=\"Black puppy.\" file=\"/sample-3.jpg\" type=\"image/jpeg\"></flip-file-viewer>\n <flip-file-viewer file=\"/sample.mp4\" type=\"video/mp4\"></flip-file-viewer>\n</flip-lightbox>\n\n<script>\n const lightbox = document.body.querySelector('#lightbox');\n lightbox.open();\n</script>`,\n },\n },\n },\n title: \"Components/FlipLightbox\",\n};\n\nconst Template = (args) => {\n const container = document.createElement(\"div\");\n const trigger = document.createElement(\"flip-button\");\n const element = generateStoryElement(\n \"flip-lightbox\",\n args\n ) as HTMLFlipLightboxElement;\n\n trigger.label = \"Open lightbox\";\n trigger.addEventListener(\"click\", () => element.open());\n\n element.innerHTML = `\n <flip-file-viewer description=\"Cute dog in a blanket.\" file=\"/sample.jpg\" type=\"image/jpeg\"></flip-file-viewer>\n <flip-file-viewer description=\"Another cute dog in a blanket.\" file=\"/sample-2.jpg\" type=\"image/jpeg\"></flip-file-viewer>\n <flip-file-viewer description=\"Black puppy.\" file=\"/sample-3.jpg\" type=\"image/jpeg\"></flip-file-viewer>\n <flip-file-viewer file=\"/sample.mp4\" type=\"video/mp4\"></flip-file-viewer>\n `;\n\n container.append(trigger, element);\n\n return container;\n};\n\nexport const FlipLightbox = Template.bind({});\n\nFlipLightbox.args = {\n label: \"Lightbox\",\n};\n"]}
|
|
@@ -64,6 +64,17 @@
|
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
+
@media (min-width: 768px) {
|
|
68
|
+
|
|
69
|
+
.modal--scrollable .modal__content {
|
|
70
|
+
padding-bottom: 0
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.modal--scrollable:not(.modal--scrolled-down) .modal__controls {
|
|
75
|
+
border-top: var(--s-border-width-default) solid var(--s-border-default);
|
|
76
|
+
}
|
|
77
|
+
|
|
67
78
|
@media (min-width: 768px) {
|
|
68
79
|
.modal--scrolled .modal__header {
|
|
69
80
|
border-bottom: var(--s-border-width-default) solid var(--s-border-default);
|
|
@@ -93,7 +104,7 @@
|
|
|
93
104
|
max-width: 33.75rem;
|
|
94
105
|
height: auto;
|
|
95
106
|
max-height: 90vh;
|
|
96
|
-
border-radius: var(--s-border-radius-
|
|
107
|
+
border-radius: var(--s-border-radius-base);
|
|
97
108
|
box-shadow: 0.125rem 0.25rem 1rem rgba(0, 0, 0, 0.14)
|
|
98
109
|
}
|
|
99
110
|
}
|
|
@@ -129,6 +140,7 @@
|
|
|
129
140
|
@media (min-width: 768px) {
|
|
130
141
|
|
|
131
142
|
.modal__header {
|
|
143
|
+
height: 4.125rem;
|
|
132
144
|
padding-top: var(--s-space-24);
|
|
133
145
|
padding-right: calc(var(--s-space-16) + 2.5rem + var(--s-space-8));
|
|
134
146
|
padding-bottom: var(--s-space-16);
|
|
@@ -167,7 +179,7 @@
|
|
|
167
179
|
.modal__content {
|
|
168
180
|
padding-top: 0;
|
|
169
181
|
padding-right: var(--s-space-24);
|
|
170
|
-
padding-bottom: var(--s-space-
|
|
182
|
+
padding-bottom: var(--s-space-16);
|
|
171
183
|
padding-left: var(--s-space-24)
|
|
172
184
|
}
|
|
173
185
|
}
|
|
@@ -180,7 +192,6 @@
|
|
|
180
192
|
padding-left: var(--s-space-24);
|
|
181
193
|
flex-shrink: 0;
|
|
182
194
|
justify-content: flex-end;
|
|
183
|
-
border-top: var(--s-border-width-default) solid var(--s-border-default);
|
|
184
195
|
}
|
|
185
196
|
|
|
186
197
|
@-webkit-keyframes modal-scale-in {
|
|
@@ -6,7 +6,9 @@ export class FlipModal {
|
|
|
6
6
|
constructor() {
|
|
7
7
|
this.closeButtonLabel = "Close modal";
|
|
8
8
|
this.closing = false;
|
|
9
|
+
this.scrollable = false;
|
|
9
10
|
this.scrolled = false;
|
|
11
|
+
this.scrolledDown = false;
|
|
10
12
|
this.onKeyDown = (event) => {
|
|
11
13
|
if (event.code === "Escape") {
|
|
12
14
|
this.close();
|
|
@@ -27,11 +29,19 @@ export class FlipModal {
|
|
|
27
29
|
this.close();
|
|
28
30
|
};
|
|
29
31
|
this.determineScrollStatus = () => {
|
|
30
|
-
var _a;
|
|
32
|
+
var _a, _b, _c, _d, _e, _f;
|
|
31
33
|
const scrolled = ((_a = this.scrollContainer) === null || _a === void 0 ? void 0 : _a.scrollTop) > 0;
|
|
34
|
+
const scrolledDown = Math.ceil(((_b = this.scrollContainer) === null || _b === void 0 ? void 0 : _b.scrollTop) + ((_c = this.scrollContainer) === null || _c === void 0 ? void 0 : _c.offsetHeight)) >= ((_d = this.scrollContainer) === null || _d === void 0 ? void 0 : _d.scrollHeight);
|
|
35
|
+
const scrollable = ((_e = this.scrollContainer) === null || _e === void 0 ? void 0 : _e.scrollHeight) > ((_f = this.scrollContainer) === null || _f === void 0 ? void 0 : _f.offsetHeight);
|
|
32
36
|
if (scrolled !== this.scrolled) {
|
|
33
37
|
this.scrolled = scrolled;
|
|
34
38
|
}
|
|
39
|
+
if (scrolledDown !== this.scrolledDown) {
|
|
40
|
+
this.scrolledDown = scrolledDown;
|
|
41
|
+
}
|
|
42
|
+
if (scrollable !== this.scrollable) {
|
|
43
|
+
this.scrollable = scrollable;
|
|
44
|
+
}
|
|
35
45
|
};
|
|
36
46
|
}
|
|
37
47
|
componentDidLoad() {
|
|
@@ -77,7 +87,9 @@ export class FlipModal {
|
|
|
77
87
|
render() {
|
|
78
88
|
const className = classnames("modal", {
|
|
79
89
|
"modal--closing": this.closing,
|
|
90
|
+
"modal--scrollable": this.scrollable,
|
|
80
91
|
"modal--scrolled": this.scrolled,
|
|
92
|
+
"modal--scrolled-down": this.scrolledDown,
|
|
81
93
|
});
|
|
82
94
|
return (h(Host, null,
|
|
83
95
|
h("section", { "aria-hidden": "true", "aria-label": this.label, class: className, id: "modal", onKeyDown: this.onKeyDown, ref: (el) => (this.modalEl = el) },
|
|
@@ -174,7 +186,9 @@ export class FlipModal {
|
|
|
174
186
|
}; }
|
|
175
187
|
static get states() { return {
|
|
176
188
|
"closing": {},
|
|
177
|
-
"
|
|
189
|
+
"scrollable": {},
|
|
190
|
+
"scrolled": {},
|
|
191
|
+
"scrolledDown": {}
|
|
178
192
|
}; }
|
|
179
193
|
static get events() { return [{
|
|
180
194
|
"method": "primaryAction",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flip-modal.js","sourceRoot":"","sources":["../../../../src/components/flip-modal/flip-modal.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,KAAK,EAEL,CAAC,EACD,IAAI,EACJ,MAAM,EACN,MAAM,EACN,IAAI,EACJ,KAAK,GACN,MAAM,eAAe,CAAC;AACvB,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,UAAU,MAAM,YAAY,CAAC;AAOpC,MAAM,OAAO,SAAS;EALtB;IAMU,qBAAgB,GAAY,aAAa,CAAC;IAQzC,YAAO,GAAG,KAAK,CAAC;IAChB,aAAQ,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"flip-modal.js","sourceRoot":"","sources":["../../../../src/components/flip-modal/flip-modal.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\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\";\n\n@Component({\n shadow: true,\n styleUrl: \"flip-modal.css\",\n tag: \"flip-modal\",\n})\nexport class FlipModal {\n @Prop() closeButtonLabel?: string = \"Close modal\";\n @Prop() label!: string;\n @Prop() primaryActionLabel?: string;\n @Prop() secondaryActionLabel?: string;\n\n @Event() primaryAction: EventEmitter<MouseEvent>;\n @Event() secondaryAction: EventEmitter<MouseEvent>;\n\n @State() closing = false;\n @State() scrollable = false;\n @State() scrolled = false;\n @State() scrolledDown = false;\n\n private modal: A11yDialog;\n private modalEl: HTMLElement;\n private scrollContainer: HTMLElement;\n\n componentDidLoad() {\n this.modal = new A11yDialog(this.modalEl);\n this.determineScrollStatus();\n }\n\n disconnectedCallback() {\n this.modal?.destroy();\n this.unlockBodyScroll();\n }\n\n @Listen(\"resize\", { target: \"window\" })\n onWindowResize() {\n this.determineScrollStatus();\n }\n\n /**\n * Open the modal.\n */\n @Method()\n async open() {\n this.modal.show();\n this.lockBodyScroll();\n this.determineScrollStatus();\n }\n\n /**\n * Close the modal.\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 onKeyDown = (event: KeyboardEvent) => {\n if (event.code === \"Escape\") {\n this.close();\n }\n };\n\n private onBackdropClick = () => {\n this.close();\n };\n\n private onCloseButtonClick = () => {\n this.close();\n };\n\n private onPrimaryAction = (event: MouseEvent) => {\n this.primaryAction.emit(event);\n this.close();\n };\n\n private onSecondaryAction = (event: MouseEvent) => {\n this.secondaryAction.emit(event);\n this.close();\n };\n\n private determineScrollStatus = () => {\n const scrolled = this.scrollContainer?.scrollTop > 0;\n\n const scrolledDown =\n Math.ceil(\n this.scrollContainer?.scrollTop + this.scrollContainer?.offsetHeight\n ) >= this.scrollContainer?.scrollHeight;\n\n const scrollable =\n this.scrollContainer?.scrollHeight > this.scrollContainer?.offsetHeight;\n\n if (scrolled !== this.scrolled) {\n this.scrolled = scrolled;\n }\n\n if (scrolledDown !== this.scrolledDown) {\n this.scrolledDown = scrolledDown;\n }\n\n if (scrollable !== this.scrollable) {\n this.scrollable = scrollable;\n }\n };\n\n private lockBodyScroll() {\n disableBodyScroll(this.scrollContainer);\n }\n\n private unlockBodyScroll() {\n enableBodyScroll(this.scrollContainer);\n }\n\n render() {\n const className = classnames(\"modal\", {\n \"modal--closing\": this.closing,\n \"modal--scrollable\": this.scrollable,\n \"modal--scrolled\": this.scrolled,\n \"modal--scrolled-down\": this.scrolledDown,\n });\n\n return (\n <Host>\n <section\n aria-hidden=\"true\"\n aria-label={this.label}\n class={className}\n id=\"modal\"\n onKeyDown={this.onKeyDown}\n ref={(el) => (this.modalEl = el)}\n >\n <div class=\"modal__backdrop\" onClick={this.onBackdropClick}></div>\n <div class=\"modal__body\" role=\"document\">\n <flip-button\n class=\"modal__close-button\"\n hideLabel\n icon=\"<flip-icon-close></flip-icon-close>\"\n label={this.closeButtonLabel}\n onClick={this.onCloseButtonClick}\n ></flip-button>\n <header class=\"modal__header\">\n <flip-heading\n as=\"h2\"\n class=\"modal__heading\"\n level={3}\n text={this.label}\n ></flip-heading>\n </header>\n <div\n class=\"modal__content\"\n onScroll={this.determineScrollStatus}\n ref={(el) => (this.scrollContainer = el)}\n >\n <slot></slot>\n </div>\n <footer class=\"modal__controls\">\n <flip-button-group wrap>\n {this.secondaryActionLabel && (\n <flip-button\n label={this.secondaryActionLabel}\n onClick={this.onSecondaryAction}\n ></flip-button>\n )}\n {this.primaryActionLabel && (\n <flip-button\n intent=\"primary\"\n label={this.primaryActionLabel}\n onClick={this.onPrimaryAction}\n variant=\"flat\"\n ></flip-button>\n )}\n </flip-button-group>\n </footer>\n </div>\n </section>\n </Host>\n );\n }\n}\n"]}
|
|
@@ -128,7 +128,7 @@
|
|
|
128
128
|
bottom: unset;
|
|
129
129
|
left: unset;
|
|
130
130
|
max-width: 22.5rem;
|
|
131
|
-
border-radius: var(--s-border-radius-
|
|
131
|
+
border-radius: var(--s-border-radius-sm);
|
|
132
132
|
-webkit-animation: none;
|
|
133
133
|
animation: none;
|
|
134
134
|
box-shadow: 0.125rem 0.25rem 2.5rem rgba(0, 0, 0, 0.14)
|
|
@@ -50,6 +50,9 @@ export class FlipPopover {
|
|
|
50
50
|
strategy: "fixed",
|
|
51
51
|
});
|
|
52
52
|
};
|
|
53
|
+
this.onCloseButtonClick = () => {
|
|
54
|
+
this.close();
|
|
55
|
+
};
|
|
53
56
|
}
|
|
54
57
|
componentDidLoad() {
|
|
55
58
|
this.connectTrigger();
|
|
@@ -84,7 +87,7 @@ export class FlipPopover {
|
|
|
84
87
|
this.updateTriggerAttributes();
|
|
85
88
|
}, 150);
|
|
86
89
|
this.unlockBodyScroll();
|
|
87
|
-
(_a = this.
|
|
90
|
+
(_a = this.getNativeTriggerElement()) === null || _a === void 0 ? void 0 : _a.focus();
|
|
88
91
|
}
|
|
89
92
|
/**
|
|
90
93
|
* Open the popover.
|
|
@@ -111,23 +114,28 @@ export class FlipPopover {
|
|
|
111
114
|
});
|
|
112
115
|
}
|
|
113
116
|
connectTrigger() {
|
|
114
|
-
|
|
115
|
-
const triggerComponent = querySelectorAllDeep(document.body, `#${this.trigger}`)[0];
|
|
116
|
-
this.triggerEl = ((triggerComponent === null || triggerComponent === void 0 ? void 0 : triggerComponent.children[0]) ||
|
|
117
|
-
((_a = triggerComponent === null || triggerComponent === void 0 ? void 0 : triggerComponent.shadowRoot) === null || _a === void 0 ? void 0 : _a.children[0]) ||
|
|
118
|
-
triggerComponent);
|
|
117
|
+
this.triggerEl = querySelectorAllDeep(document.body, `#${this.trigger}`)[0];
|
|
119
118
|
if (!Boolean(this.triggerEl)) {
|
|
120
119
|
return;
|
|
121
120
|
}
|
|
122
121
|
this.triggerEl.addEventListener("click", this.toggle);
|
|
123
122
|
}
|
|
123
|
+
getNativeTriggerElement() {
|
|
124
|
+
var _a, _b, _c;
|
|
125
|
+
return this.triggerEl.tagName.startsWith("FLIP-")
|
|
126
|
+
? (((_a = this.triggerEl) === null || _a === void 0 ? void 0 : _a.children[0]) ||
|
|
127
|
+
((_c = (_b = this.triggerEl) === null || _b === void 0 ? void 0 : _b.shadowRoot) === null || _c === void 0 ? void 0 : _c.children[0]) ||
|
|
128
|
+
this.triggerEl)
|
|
129
|
+
: this.triggerEl;
|
|
130
|
+
}
|
|
124
131
|
updateTriggerAttributes() {
|
|
125
132
|
if (!Boolean(this.triggerEl)) {
|
|
126
133
|
return;
|
|
127
134
|
}
|
|
128
|
-
this.
|
|
129
|
-
|
|
130
|
-
|
|
135
|
+
const nativeTriggerEl = this.getNativeTriggerElement();
|
|
136
|
+
nativeTriggerEl.setAttribute("aria-controls", this.popoverId);
|
|
137
|
+
nativeTriggerEl.setAttribute("aria-expanded", String(this.active));
|
|
138
|
+
nativeTriggerEl.setAttribute("aria-haspopup", "dialog");
|
|
131
139
|
}
|
|
132
140
|
updateChildMenuItems() {
|
|
133
141
|
this.childMenuItems = querySelectorAllDeep(this.el, '[role="menuitem"]');
|
|
@@ -158,7 +166,7 @@ export class FlipPopover {
|
|
|
158
166
|
h("span", { class: "popover__handle" }),
|
|
159
167
|
h("div", { class: "popover__scroll-container", ref: (el) => (this.scrollContainer = el) },
|
|
160
168
|
h("slot", null))),
|
|
161
|
-
this.active && (h("div", { class: "popover__backdrop", onClick: this.
|
|
169
|
+
this.active && (h("div", { class: "popover__backdrop", onClick: this.onCloseButtonClick })))));
|
|
162
170
|
}
|
|
163
171
|
static get is() { return "flip-popover"; }
|
|
164
172
|
static get encapsulation() { return "shadow"; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flip-popover.js","sourceRoot":"","sources":["../../../../src/components/flip-popover/flip-popover.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n autoUpdate,\n computePosition,\n ComputePositionReturn,\n flip,\n Placement,\n shift,\n} from \"@floating-ui/dom\";\nimport {\n Component,\n Element,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n} from \"@stencil/core\";\nimport { disableBodyScroll, enableBodyScroll } from \"body-scroll-lock\";\nimport classnames from \"classnames\";\nimport { isMobileViewport, querySelectorAllDeep } from \"../../utils\";\n\n/**\n * @slot slot - The popover content.\n */\n@Component({\n shadow: true,\n styleUrl: \"flip-popover.css\",\n tag: \"flip-popover\",\n})\nexport class FlipPopover {\n @Element() el: HTMLElement;\n\n @Prop() label!: string;\n @Prop() placement?: Placement = \"bottom-start\";\n @Prop() popoverId!: string;\n @Prop() trigger!: string;\n\n @State() active = false;\n @State() closing = false;\n @State() position: ComputePositionReturn;\n\n private childMenuItems: HTMLElement[];\n private disableAutoUpdate: any;\n private contentContainer: HTMLDivElement;\n private scrollContainer: HTMLDivElement;\n private triggerEl: HTMLElement;\n\n componentDidLoad() {\n this.connectTrigger();\n this.updateChildMenuItems();\n this.updateTriggerAttributes();\n }\n\n disconnectedCallback() {\n enableBodyScroll(this.scrollContainer);\n }\n\n @Listen(\"click\", { target: \"window\" })\n onWindowClick(event: MouseEvent) {\n const target = event.target as HTMLElement;\n\n if (!this.el.contains(target)) {\n this.close();\n }\n }\n\n onFocusOut = (event: FocusEvent) => {\n if (!this.active) {\n return;\n }\n\n const target =\n (event.relatedTarget as HTMLElement) || (event.target as HTMLElement);\n\n const popoverLostFocus = !this.el.contains(target);\n\n if (popoverLostFocus) {\n this.close();\n }\n };\n\n /**\n * Close the popover.\n * @returns\n */\n @Method()\n public async close() {\n if (this.closing) {\n return;\n }\n\n if (this.disableAutoUpdate) {\n this.disableAutoUpdate();\n }\n\n this.closing = true;\n\n setTimeout(() => {\n this.active = false;\n this.closing = false;\n this.updateTriggerAttributes();\n }, 150);\n\n this.unlockBodyScroll();\n\n this.triggerEl?.focus();\n }\n\n /**\n * Open the popover.\n * @returns\n */\n @Method()\n public async open() {\n this.active = true;\n\n this.updateChildMenuItems();\n this.updateTriggerAttributes();\n\n requestAnimationFrame(async () => {\n await this.reposition();\n\n if (this.childMenuItems.length > 0) {\n (this.childMenuItems[0] as HTMLElement).focus();\n } else {\n this.contentContainer.focus();\n }\n\n if (this.disableAutoUpdate) {\n this.disableAutoUpdate();\n }\n\n this.disableAutoUpdate = autoUpdate(\n this.triggerEl,\n this.contentContainer,\n this.reposition\n );\n\n this.scrollContainer.scrollTop = 0;\n\n this.lockBodyScroll();\n });\n }\n\n toggle = (event: Event) => {\n event.stopPropagation();\n\n if (this.active) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private connectTrigger() {\n const triggerComponent = querySelectorAllDeep(\n document.body,\n `#${this.trigger}`\n )[0];\n\n this.triggerEl = (triggerComponent?.children[0] ||\n triggerComponent?.shadowRoot?.children[0] ||\n triggerComponent) as HTMLElement;\n\n if (!Boolean(this.triggerEl)) {\n return;\n }\n\n this.triggerEl.addEventListener(\"click\", this.toggle);\n }\n\n private onKeydown = (event: KeyboardEvent) => {\n if (event.code === \"Escape\" && this.active) {\n this.close();\n }\n };\n\n private updateTriggerAttributes() {\n if (!Boolean(this.triggerEl)) {\n return;\n }\n\n this.triggerEl.setAttribute(\"aria-controls\", this.popoverId);\n this.triggerEl.setAttribute(\"aria-expanded\", String(this.active));\n this.triggerEl.setAttribute(\"aria-haspopup\", \"dialog\");\n }\n\n private updateChildMenuItems() {\n this.childMenuItems = querySelectorAllDeep(this.el, '[role=\"menuitem\"]');\n }\n\n private reposition = async () => {\n const mobile = isMobileViewport();\n\n if (!Boolean(this.triggerEl) || !Boolean(this.contentContainer)) {\n return;\n }\n\n if (mobile) {\n this.position = undefined;\n return;\n }\n\n this.position = await computePosition(\n this.triggerEl,\n this.contentContainer,\n {\n middleware: [shift(), flip()],\n placement: this.placement,\n strategy: \"fixed\",\n }\n );\n };\n\n private lockBodyScroll() {\n const mobile = isMobileViewport();\n\n if (!mobile) {\n return;\n }\n\n disableBodyScroll(this.scrollContainer);\n }\n\n private unlockBodyScroll() {\n enableBodyScroll(this.scrollContainer);\n }\n\n render() {\n const className = classnames(\"popover\", {\n \"popover--closing\": this.closing,\n \"popover--active\": this.active,\n \"popover--inactive\": !this.active,\n });\n\n return (\n <Host id={this.popoverId} onFocusout={this.onFocusOut}>\n <div class={className} onKeyDown={this.onKeydown}>\n <div\n aria-hidden={!this.active ? \"true\" : \"false\"}\n aria-label={this.label}\n class=\"popover__content\"\n role=\"dialog\"\n tabindex=\"-1\"\n ref={(el) => (this.contentContainer = el)}\n style={{\n top: Boolean(this.position) ? `${this.position?.y}px` : \"\",\n left: Boolean(this.position) ? `${this.position?.x}px` : \"\",\n }}\n >\n <span class=\"popover__handle\"></span>\n <div\n class=\"popover__scroll-container\"\n ref={(el) => (this.scrollContainer = el)}\n >\n <slot></slot>\n </div>\n </div>\n {this.active && (\n <div class=\"popover__backdrop\" onClick={this.close}></div>\n )}\n </div>\n </Host>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"flip-popover.js","sourceRoot":"","sources":["../../../../src/components/flip-popover/flip-popover.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n autoUpdate,\n computePosition,\n ComputePositionReturn,\n flip,\n Placement,\n shift,\n} from \"@floating-ui/dom\";\nimport {\n Component,\n Element,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n} from \"@stencil/core\";\nimport { disableBodyScroll, enableBodyScroll } from \"body-scroll-lock\";\nimport classnames from \"classnames\";\nimport { isMobileViewport, querySelectorAllDeep } from \"../../utils\";\n\n/**\n * @slot slot - The popover content.\n */\n@Component({\n shadow: true,\n styleUrl: \"flip-popover.css\",\n tag: \"flip-popover\",\n})\nexport class FlipPopover {\n @Element() el: HTMLElement;\n\n @Prop() label!: string;\n @Prop() placement?: Placement = \"bottom-start\";\n @Prop() popoverId!: string;\n @Prop() trigger!: string;\n\n @State() active = false;\n @State() closing = false;\n @State() position: ComputePositionReturn;\n\n private childMenuItems: HTMLElement[];\n private disableAutoUpdate: any;\n private contentContainer: HTMLDivElement;\n private scrollContainer: HTMLDivElement;\n private triggerEl: HTMLElement;\n\n componentDidLoad() {\n this.connectTrigger();\n this.updateChildMenuItems();\n this.updateTriggerAttributes();\n }\n\n disconnectedCallback() {\n enableBodyScroll(this.scrollContainer);\n }\n\n @Listen(\"click\", { target: \"window\" })\n onWindowClick(event: MouseEvent) {\n const target = event.target as HTMLElement;\n\n if (!this.el.contains(target)) {\n this.close();\n }\n }\n\n onFocusOut = (event: FocusEvent) => {\n if (!this.active) {\n return;\n }\n\n const target =\n (event.relatedTarget as HTMLElement) || (event.target as HTMLElement);\n\n const popoverLostFocus = !this.el.contains(target);\n\n if (popoverLostFocus) {\n this.close();\n }\n };\n\n /**\n * Close the popover.\n * @returns\n */\n @Method()\n public async close() {\n if (this.closing) {\n return;\n }\n\n if (this.disableAutoUpdate) {\n this.disableAutoUpdate();\n }\n\n this.closing = true;\n\n setTimeout(() => {\n this.active = false;\n this.closing = false;\n this.updateTriggerAttributes();\n }, 150);\n\n this.unlockBodyScroll();\n\n this.getNativeTriggerElement()?.focus();\n }\n\n /**\n * Open the popover.\n * @returns\n */\n @Method()\n public async open() {\n this.active = true;\n\n this.updateChildMenuItems();\n this.updateTriggerAttributes();\n\n requestAnimationFrame(async () => {\n await this.reposition();\n\n if (this.childMenuItems.length > 0) {\n (this.childMenuItems[0] as HTMLElement).focus();\n } else {\n this.contentContainer.focus();\n }\n\n if (this.disableAutoUpdate) {\n this.disableAutoUpdate();\n }\n\n this.disableAutoUpdate = autoUpdate(\n this.triggerEl,\n this.contentContainer,\n this.reposition\n );\n\n this.scrollContainer.scrollTop = 0;\n\n this.lockBodyScroll();\n });\n }\n\n toggle = (event: Event) => {\n event.stopPropagation();\n\n if (this.active) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private connectTrigger() {\n this.triggerEl = querySelectorAllDeep(document.body, `#${this.trigger}`)[0];\n\n if (!Boolean(this.triggerEl)) {\n return;\n }\n\n this.triggerEl.addEventListener(\"click\", this.toggle);\n }\n\n private getNativeTriggerElement() {\n return this.triggerEl.tagName.startsWith(\"FLIP-\")\n ? ((this.triggerEl?.children[0] ||\n this.triggerEl?.shadowRoot?.children[0] ||\n this.triggerEl) as HTMLElement)\n : this.triggerEl;\n }\n\n private onKeydown = (event: KeyboardEvent) => {\n if (event.code === \"Escape\" && this.active) {\n this.close();\n }\n };\n\n private updateTriggerAttributes() {\n if (!Boolean(this.triggerEl)) {\n return;\n }\n\n const nativeTriggerEl = this.getNativeTriggerElement();\n\n nativeTriggerEl.setAttribute(\"aria-controls\", this.popoverId);\n nativeTriggerEl.setAttribute(\"aria-expanded\", String(this.active));\n nativeTriggerEl.setAttribute(\"aria-haspopup\", \"dialog\");\n }\n\n private updateChildMenuItems() {\n this.childMenuItems = querySelectorAllDeep(this.el, '[role=\"menuitem\"]');\n }\n\n private reposition = async () => {\n const mobile = isMobileViewport();\n\n if (!Boolean(this.triggerEl) || !Boolean(this.contentContainer)) {\n return;\n }\n\n if (mobile) {\n this.position = undefined;\n return;\n }\n\n this.position = await computePosition(\n this.triggerEl,\n this.contentContainer,\n {\n middleware: [shift(), flip()],\n placement: this.placement,\n strategy: \"fixed\",\n }\n );\n };\n\n private lockBodyScroll() {\n const mobile = isMobileViewport();\n\n if (!mobile) {\n return;\n }\n\n disableBodyScroll(this.scrollContainer);\n }\n\n private unlockBodyScroll() {\n enableBodyScroll(this.scrollContainer);\n }\n\n private onCloseButtonClick = () => {\n this.close();\n };\n\n render() {\n const className = classnames(\"popover\", {\n \"popover--closing\": this.closing,\n \"popover--active\": this.active,\n \"popover--inactive\": !this.active,\n });\n\n return (\n <Host id={this.popoverId} onFocusout={this.onFocusOut}>\n <div class={className} onKeyDown={this.onKeydown}>\n <div\n aria-hidden={!this.active ? \"true\" : \"false\"}\n aria-label={this.label}\n class=\"popover__content\"\n role=\"dialog\"\n tabindex=\"-1\"\n ref={(el) => (this.contentContainer = el)}\n style={{\n top: Boolean(this.position) ? `${this.position?.y}px` : \"\",\n left: Boolean(this.position) ? `${this.position?.x}px` : \"\",\n }}\n >\n <span class=\"popover__handle\"></span>\n <div\n class=\"popover__scroll-container\"\n ref={(el) => (this.scrollContainer = el)}\n >\n <slot></slot>\n </div>\n </div>\n {this.active && (\n <div\n class=\"popover__backdrop\"\n onClick={this.onCloseButtonClick}\n ></div>\n )}\n </div>\n </Host>\n );\n }\n}\n"]}
|
|
@@ -15,25 +15,16 @@
|
|
|
15
15
|
position: relative;
|
|
16
16
|
display: flex;
|
|
17
17
|
width: 100%;
|
|
18
|
-
padding-right: var(--s-space-16);
|
|
19
|
-
padding-left: var(--s-space-16);
|
|
20
18
|
justify-content: flex-start;
|
|
21
19
|
border-bottom: var(--s-border-width-default) solid var(--s-border-default);
|
|
22
20
|
}
|
|
23
21
|
|
|
24
|
-
@media (--from-tablet) {
|
|
25
|
-
|
|
26
|
-
.tabs__tab-bar {
|
|
27
|
-
padding-right: 0;
|
|
28
|
-
padding-left: 0
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
22
|
.tabs__tab {
|
|
23
|
+
position: relative;
|
|
33
24
|
display: block;
|
|
34
25
|
min-width: 0;
|
|
35
26
|
margin: 0;
|
|
36
|
-
padding: var(--s-space-4)
|
|
27
|
+
padding: var(--s-space-4) var(--s-space-8);
|
|
37
28
|
border: none;
|
|
38
29
|
background-color: transparent;
|
|
39
30
|
font: inherit;
|
|
@@ -51,13 +42,18 @@
|
|
|
51
42
|
box-shadow: inset 0 0 0 0.125rem var(--s-focus-default);
|
|
52
43
|
}
|
|
53
44
|
|
|
54
|
-
.tabs__tab:not(:
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
45
|
+
.tabs__tab:not(.tabs__tab--active):hover:after {
|
|
46
|
+
position: absolute;
|
|
47
|
+
bottom: 0;
|
|
48
|
+
left: 50%;
|
|
49
|
+
width: calc(100% - var(--s-space-8));
|
|
50
|
+
height: 0.1875rem;
|
|
51
|
+
border-radius: 0.125rem;
|
|
52
|
+
background-color: var(--s-border-default);
|
|
53
|
+
content: "";
|
|
54
|
+
transform: translateX(-50%);
|
|
55
|
+
pointer-events: none;
|
|
56
|
+
}
|
|
61
57
|
|
|
62
58
|
.tabs__tab-label {
|
|
63
59
|
display: block;
|
|
@@ -73,22 +69,15 @@
|
|
|
73
69
|
color: var(--s-text-highlight);
|
|
74
70
|
}
|
|
75
71
|
|
|
76
|
-
.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
@media (prefers-reduced-motion) {
|
|
90
|
-
|
|
91
|
-
.tabs__indicator {
|
|
92
|
-
transition: none
|
|
93
|
-
}
|
|
72
|
+
.tabs__tab--active:after {
|
|
73
|
+
position: absolute;
|
|
74
|
+
bottom: 0;
|
|
75
|
+
left: 50%;
|
|
76
|
+
width: calc(100% - var(--s-space-8));
|
|
77
|
+
height: 0.1875rem;
|
|
78
|
+
border-radius: 0.125rem;
|
|
79
|
+
background-color: var(--s-border-highlight);
|
|
80
|
+
content: "";
|
|
81
|
+
transform: translateX(-50%);
|
|
82
|
+
pointer-events: none;
|
|
94
83
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, Element, Event, h, Host,
|
|
1
|
+
import { Component, Element, Event, h, Host, Method, Prop, State, } from "@stencil/core";
|
|
2
2
|
import classnames from "classnames";
|
|
3
3
|
export class FlipTabs {
|
|
4
4
|
constructor() {
|
|
@@ -13,27 +13,10 @@ export class FlipTabs {
|
|
|
13
13
|
this.activateNextTab();
|
|
14
14
|
}
|
|
15
15
|
};
|
|
16
|
-
this.onMouseEnter = (event, tab) => {
|
|
17
|
-
if (tab.tabId === this.activeTab) {
|
|
18
|
-
this.highlightedTab = undefined;
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
this.highlightedTab =
|
|
22
|
-
event.target.closest(".tabs__tab") || undefined;
|
|
23
|
-
};
|
|
24
|
-
this.onMouseLeave = () => {
|
|
25
|
-
this.highlightedTab = undefined;
|
|
26
|
-
};
|
|
27
16
|
}
|
|
28
17
|
componentWillLoad() {
|
|
29
18
|
this.collectTabs();
|
|
30
19
|
}
|
|
31
|
-
componentDidRender() {
|
|
32
|
-
this.updateIndicatorPosition();
|
|
33
|
-
}
|
|
34
|
-
onWindowResize() {
|
|
35
|
-
this.updateIndicatorPosition();
|
|
36
|
-
}
|
|
37
20
|
/**
|
|
38
21
|
* Activate a tab.
|
|
39
22
|
* @param tabId
|
|
@@ -48,7 +31,6 @@ export class FlipTabs {
|
|
|
48
31
|
if (!Boolean(tab)) {
|
|
49
32
|
return;
|
|
50
33
|
}
|
|
51
|
-
this.highlightedTab = undefined;
|
|
52
34
|
tab.active = true;
|
|
53
35
|
this.tabActivated.emit(tab);
|
|
54
36
|
}
|
|
@@ -78,40 +60,19 @@ export class FlipTabs {
|
|
|
78
60
|
const initialTab = this.tabs.find((tab) => tab.tabId === this.initialTab);
|
|
79
61
|
this.activateTab(Boolean(initialTab) ? initialTab.tabId : this.tabs[0].tabId);
|
|
80
62
|
}
|
|
81
|
-
updateIndicatorPosition() {
|
|
82
|
-
const activeTab = this.tabs.find((tab) => tab.tabId === this.activeTab);
|
|
83
|
-
if (!Boolean(activeTab) && !Boolean(this.highlightedTab)) {
|
|
84
|
-
this.indicatorEl.style.width = "";
|
|
85
|
-
this.indicatorEl.style.transform = "";
|
|
86
|
-
this.indicatorEl.style.backgroundColor = "";
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
const activeTabEl = this.highlightedTab ||
|
|
90
|
-
this.el.querySelector(`#tab-${activeTab.tabId}`);
|
|
91
|
-
const activeTabLabelEl = activeTabEl.querySelector(".tabs__tab-label");
|
|
92
|
-
this.indicatorEl.style.width = `${activeTabLabelEl.getBoundingClientRect().width / 16}rem`;
|
|
93
|
-
this.indicatorEl.style.transform = `translate3d(${activeTabLabelEl.offsetLeft / 16}rem, 0, 0)`;
|
|
94
|
-
this.indicatorEl.style.backgroundColor = Boolean(this.highlightedTab)
|
|
95
|
-
? "var(--s-border-default)"
|
|
96
|
-
: "";
|
|
97
|
-
}
|
|
98
63
|
render() {
|
|
99
64
|
return (h(Host, null,
|
|
100
65
|
h("div", { class: "tabs" },
|
|
101
|
-
h("div", { "aria-label": this.label, class: "tabs__tab-bar", onKeyDown: this.onKeyDown, role: "tablist" },
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
onMouseEnter: (event) => this.onMouseEnter(event, tab), onMouseLeave: this.onMouseLeave, role: "tab", tabIndex: isActive ? 0 : -1, type: "button" },
|
|
112
|
-
h("span", { class: "tabs__tab-label" }, tab.label)));
|
|
113
|
-
}),
|
|
114
|
-
h("span", { class: "tabs__indicator", ref: (el) => (this.indicatorEl = el) })),
|
|
66
|
+
h("div", { "aria-label": this.label, class: "tabs__tab-bar", onKeyDown: this.onKeyDown, role: "tablist" }, this.tabs.map((tab) => {
|
|
67
|
+
const isActive = tab.tabId === this.activeTab;
|
|
68
|
+
const className = classnames("tabs__tab", {
|
|
69
|
+
"tabs__tab--active": isActive,
|
|
70
|
+
});
|
|
71
|
+
return (h("button", { "aria-controls": tab.tabId, "aria-selected": isActive ? "true" : "false", class: className, id: `tab-${tab.tabId}`, key: tab.tabId,
|
|
72
|
+
// eslint-disable-next-line react/jsx-no-bind
|
|
73
|
+
onClick: () => this.activateTab(tab.tabId), role: "tab", tabIndex: isActive ? 0 : -1, type: "button" },
|
|
74
|
+
h("span", { class: "tabs__tab-label" }, tab.label)));
|
|
75
|
+
})),
|
|
115
76
|
h("slot", null))));
|
|
116
77
|
}
|
|
117
78
|
static get is() { return "flip-tabs"; }
|
|
@@ -159,8 +120,7 @@ export class FlipTabs {
|
|
|
159
120
|
}
|
|
160
121
|
}; }
|
|
161
122
|
static get states() { return {
|
|
162
|
-
"activeTab": {}
|
|
163
|
-
"highlightedTab": {}
|
|
123
|
+
"activeTab": {}
|
|
164
124
|
}; }
|
|
165
125
|
static get events() { return [{
|
|
166
126
|
"method": "tabActivated",
|
|
@@ -210,12 +170,5 @@ export class FlipTabs {
|
|
|
210
170
|
}
|
|
211
171
|
}; }
|
|
212
172
|
static get elementRef() { return "el"; }
|
|
213
|
-
static get listeners() { return [{
|
|
214
|
-
"name": "resize",
|
|
215
|
-
"method": "onWindowResize",
|
|
216
|
-
"target": "window",
|
|
217
|
-
"capture": false,
|
|
218
|
-
"passive": true
|
|
219
|
-
}]; }
|
|
220
173
|
}
|
|
221
174
|
//# sourceMappingURL=flip-tabs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flip-tabs.js","sourceRoot":"","sources":["../../../../src/components/flip-tabs/flip-tabs.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n} from \"@stencil/core\";\nimport classnames from \"classnames\";\n\n@Component({\n scoped: true,\n shadow: false,\n styleUrl: \"flip-tabs.css\",\n tag: \"flip-tabs\",\n})\nexport class FlipTabs {\n @Element() el: HTMLElement;\n\n @Prop() initialTab?: string;\n @Prop() label!: string;\n\n @State() activeTab?: string;\n @State() highlightedTab: HTMLElement | undefined;\n\n @Event() tabActivated: EventEmitter<HTMLFlipTabElement>;\n\n private indicatorEl: HTMLElement;\n private tabs: HTMLFlipTabElement[] = [];\n\n componentWillLoad() {\n this.collectTabs();\n }\n\n componentDidRender() {\n this.updateIndicatorPosition();\n }\n\n @Listen(\"resize\", { target: \"window\" })\n onWindowResize() {\n this.updateIndicatorPosition();\n }\n\n /**\n * Activate a tab.\n * @param tabId\n */\n @Method()\n public async activateTab(tabId: string) {\n if (this.activeTab === tabId) {\n return;\n }\n\n this.activeTab = tabId;\n this.tabs.forEach((tab) => (tab.active = false));\n\n const tab = this.tabs.find((tab) => tab.tabId === tabId);\n\n if (!Boolean(tab)) {\n return;\n }\n\n this.highlightedTab = undefined;\n\n tab.active = true;\n this.tabActivated.emit(tab);\n }\n\n private activateNextTab() {\n const currentIndex = this.tabs.findIndex(\n (tab) => tab.tabId === this.activeTab\n );\n\n const nextIndex = Math.min(this.tabs.length - 1, currentIndex + 1);\n\n this.activateTab(this.tabs[nextIndex].tabId);\n\n requestAnimationFrame(() => {\n this.el.querySelector<HTMLButtonElement>(\".tabs__tab--active\")?.focus();\n });\n }\n\n private activatePreviousTab() {\n const currentIndex = this.tabs.findIndex(\n (tab) => tab.tabId === this.activeTab\n );\n\n const previousIndex = Math.max(0, currentIndex - 1);\n\n this.activateTab(this.tabs[previousIndex].tabId);\n\n requestAnimationFrame(() => {\n this.el.querySelector<HTMLButtonElement>(\".tabs__tab--active\")?.focus();\n });\n }\n\n private collectTabs() {\n this.tabs = Array.from(this.el.querySelectorAll(\"flip-tab\"));\n\n if (this.tabs.length === 0) {\n return;\n }\n\n const initialTab = this.tabs.find((tab) => tab.tabId === this.initialTab);\n\n this.activateTab(\n Boolean(initialTab) ? initialTab.tabId : this.tabs[0].tabId\n );\n }\n\n private updateIndicatorPosition() {\n const activeTab = this.tabs.find((tab) => tab.tabId === this.activeTab);\n\n if (!Boolean(activeTab) && !Boolean(this.highlightedTab)) {\n this.indicatorEl.style.width = \"\";\n this.indicatorEl.style.transform = \"\";\n this.indicatorEl.style.backgroundColor = \"\";\n return;\n }\n\n const activeTabEl =\n this.highlightedTab ||\n this.el.querySelector<HTMLButtonElement>(`#tab-${activeTab.tabId}`);\n\n const activeTabLabelEl =\n activeTabEl.querySelector<HTMLSpanElement>(\".tabs__tab-label\");\n\n this.indicatorEl.style.width = `${\n activeTabLabelEl.getBoundingClientRect().width / 16\n }rem`;\n\n this.indicatorEl.style.transform = `translate3d(${\n activeTabLabelEl.offsetLeft / 16\n }rem, 0, 0)`;\n\n this.indicatorEl.style.backgroundColor = Boolean(this.highlightedTab)\n ? \"var(--s-border-default)\"\n : \"\";\n }\n\n private onKeyDown = (event: KeyboardEvent) => {\n if (event.code === \"ArrowLeft\") {\n event.preventDefault();\n this.activatePreviousTab();\n } else if (event.code === \"ArrowRight\") {\n event.preventDefault();\n this.activateNextTab();\n }\n };\n\n private onMouseEnter = (event: MouseEvent, tab: HTMLFlipTabElement) => {\n if (tab.tabId === this.activeTab) {\n this.highlightedTab = undefined;\n return;\n }\n\n this.highlightedTab =\n (event.target as HTMLElement).closest(\".tabs__tab\") || undefined;\n };\n\n private onMouseLeave = () => {\n this.highlightedTab = undefined;\n };\n\n render() {\n return (\n <Host>\n <div class=\"tabs\">\n <div\n aria-label={this.label}\n class=\"tabs__tab-bar\"\n onKeyDown={this.onKeyDown}\n role=\"tablist\"\n >\n {this.tabs.map((tab) => {\n const isActive = tab.tabId === this.activeTab;\n const className = classnames(\"tabs__tab\", {\n \"tabs__tab--active\": isActive,\n });\n\n return (\n <button\n aria-controls={tab.tabId}\n aria-selected={isActive ? \"true\" : \"false\"}\n class={className}\n id={`tab-${tab.tabId}`}\n key={tab.tabId}\n // eslint-disable-next-line react/jsx-no-bind\n onClick={() => this.activateTab(tab.tabId)}\n // eslint-disable-next-line react/jsx-no-bind\n onMouseEnter={(event) => this.onMouseEnter(event, tab)}\n onMouseLeave={this.onMouseLeave}\n role=\"tab\"\n tabIndex={isActive ? 0 : -1}\n type=\"button\"\n >\n <span class=\"tabs__tab-label\">{tab.label}</span>\n </button>\n );\n })}\n\n <span\n class=\"tabs__indicator\"\n ref={(el) => (this.indicatorEl = el)}\n ></span>\n </div>\n <slot></slot>\n </div>\n </Host>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"flip-tabs.js","sourceRoot":"","sources":["../../../../src/components/flip-tabs/flip-tabs.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n} from \"@stencil/core\";\nimport classnames from \"classnames\";\n\n@Component({\n scoped: true,\n shadow: false,\n styleUrl: \"flip-tabs.css\",\n tag: \"flip-tabs\",\n})\nexport class FlipTabs {\n @Element() el: HTMLElement;\n\n @Prop() initialTab?: string;\n @Prop() label!: string;\n\n @State() activeTab?: string;\n\n @Event() tabActivated: EventEmitter<HTMLFlipTabElement>;\n\n private tabs: HTMLFlipTabElement[] = [];\n\n componentWillLoad() {\n this.collectTabs();\n }\n\n /**\n * Activate a tab.\n * @param tabId\n */\n @Method()\n public async activateTab(tabId: string) {\n if (this.activeTab === tabId) {\n return;\n }\n\n this.activeTab = tabId;\n this.tabs.forEach((tab) => (tab.active = false));\n\n const tab = this.tabs.find((tab) => tab.tabId === tabId);\n\n if (!Boolean(tab)) {\n return;\n }\n\n tab.active = true;\n this.tabActivated.emit(tab);\n }\n\n private activateNextTab() {\n const currentIndex = this.tabs.findIndex(\n (tab) => tab.tabId === this.activeTab\n );\n\n const nextIndex = Math.min(this.tabs.length - 1, currentIndex + 1);\n\n this.activateTab(this.tabs[nextIndex].tabId);\n\n requestAnimationFrame(() => {\n this.el.querySelector<HTMLButtonElement>(\".tabs__tab--active\")?.focus();\n });\n }\n\n private activatePreviousTab() {\n const currentIndex = this.tabs.findIndex(\n (tab) => tab.tabId === this.activeTab\n );\n\n const previousIndex = Math.max(0, currentIndex - 1);\n\n this.activateTab(this.tabs[previousIndex].tabId);\n\n requestAnimationFrame(() => {\n this.el.querySelector<HTMLButtonElement>(\".tabs__tab--active\")?.focus();\n });\n }\n\n private collectTabs() {\n this.tabs = Array.from(this.el.querySelectorAll(\"flip-tab\"));\n\n if (this.tabs.length === 0) {\n return;\n }\n\n const initialTab = this.tabs.find((tab) => tab.tabId === this.initialTab);\n\n this.activateTab(\n Boolean(initialTab) ? initialTab.tabId : this.tabs[0].tabId\n );\n }\n\n private onKeyDown = (event: KeyboardEvent) => {\n if (event.code === \"ArrowLeft\") {\n event.preventDefault();\n this.activatePreviousTab();\n } else if (event.code === \"ArrowRight\") {\n event.preventDefault();\n this.activateNextTab();\n }\n };\n\n render() {\n return (\n <Host>\n <div class=\"tabs\">\n <div\n aria-label={this.label}\n class=\"tabs__tab-bar\"\n onKeyDown={this.onKeyDown}\n role=\"tablist\"\n >\n {this.tabs.map((tab) => {\n const isActive = tab.tabId === this.activeTab;\n const className = classnames(\"tabs__tab\", {\n \"tabs__tab--active\": isActive,\n });\n\n return (\n <button\n aria-controls={tab.tabId}\n aria-selected={isActive ? \"true\" : \"false\"}\n class={className}\n id={`tab-${tab.tabId}`}\n key={tab.tabId}\n // eslint-disable-next-line react/jsx-no-bind\n onClick={() => this.activateTab(tab.tabId)}\n role=\"tab\"\n tabIndex={isActive ? 0 : -1}\n type=\"button\"\n >\n <span class=\"tabs__tab-label\">{tab.label}</span>\n </button>\n );\n })}\n </div>\n <slot></slot>\n </div>\n </Host>\n );\n }\n}\n"]}
|
|
@@ -125,10 +125,12 @@ input.text-input__input:not([type="password"]) {
|
|
|
125
125
|
|
|
126
126
|
.text-input__prefix {
|
|
127
127
|
padding-right: var(--s-space-4);
|
|
128
|
+
color: var(--s-text-subdued);
|
|
128
129
|
font-size: var(--s-font-size-base);
|
|
129
130
|
}
|
|
130
131
|
|
|
131
132
|
.text-input__suffix {
|
|
132
133
|
padding-left: var(--s-space-4);
|
|
134
|
+
color: var(--s-text-subdued);
|
|
133
135
|
font-size: var(--s-font-size-base);
|
|
134
136
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { proxyCustomElement, HTMLElement, h, Host } from '@stencil/core/internal/client';
|
|
2
2
|
import { c as classnames } from './index2.js';
|
|
3
3
|
|
|
4
|
-
const flipActionListItemCss = ":host{display:block}:host *{box-sizing:border-box}.action-list-item{display:inline-flex;width:100%;min-width:15rem;margin:0;padding:var(--s-space-12) var(--s-space-16);justify-content:flex-start;align-items:center;border:none;color:var(--s-text-default);background-color:var(--s-surface-overlay-default);font:inherit;line-height:var(--s-line-height-base);text-align:left;cursor:pointer;gap:var(--s-space-12)}.action-list-item:hover{background-color:var(--s-surface-overlay-hovered)}.action-list-item:focus{background-color:var(--s-surface-overlay-hovered);outline:none}.action-list-item:active{background-color:var(--s-surface-overlay-pressed)}.action-list-item:disabled{background-color:var(--s-surface-overlay-default);cursor:default}.action-list-item:disabled .action-list-item__label,.action-list-item:disabled .action-list-item__description{color:var(--s-text-disabled)}.action-list-item:disabled .action-list-item__icon{color:var(--s-icon-disabled)}.action-list-item--size-l{padding:var(--s-space-16)}.action-list-item--intent-critical:not(:disabled) .action-list-item__label{color:var(--s-text-critical)}.action-list-item--intent-critical:not(:disabled) .action-list-item__icon{color:var(--s-icon-critical)}.action-list-item__icon{display:inline-flex;flex-shrink:0;color:var(--s-icon-default)}.action-list-item__label-container{display:inline-flex;min-width:0;flex-grow:1;align-items:flex-start;flex-direction:column}.action-list-item__label{overflow:hidden;max-width:100%;padding-top:0.0625rem;font-weight:var(--s-font-weight-medium);white-space:nowrap;text-overflow:ellipsis}.action-list-item__description{color:var(--s-text-subdued)}.action-list-item__suffix{display:inline-flex;flex-shrink:0;color:var(--s-icon-highlight)}";
|
|
4
|
+
const flipActionListItemCss = ":host{display:block}:host *{box-sizing:border-box}.action-list-item{display:inline-flex;width:100%;min-width:15rem;margin:0;padding:var(--s-space-12) var(--s-space-16);justify-content:flex-start;align-items:center;border:none;color:var(--s-text-default);background-color:var(--s-surface-overlay-default);font:inherit;line-height:var(--s-line-height-base);text-align:left;cursor:pointer;gap:var(--s-space-12)}.action-list-item:hover{background-color:var(--s-surface-overlay-hovered)}.action-list-item:focus{background-color:var(--s-surface-overlay-hovered);outline:none}.action-list-item:active{background-color:var(--s-surface-overlay-pressed)}.action-list-item:disabled{background-color:var(--s-surface-overlay-default);cursor:default}.action-list-item:disabled .action-list-item__label,.action-list-item:disabled .action-list-item__description{color:var(--s-text-disabled)}.action-list-item:disabled .action-list-item__icon{color:var(--s-icon-disabled)}.action-list-item--size-l{padding:var(--s-space-16)}.action-list-item--intent-critical ::part(icon){color:var(--s-icon-critical)}.action-list-item--intent-critical:not(:disabled) .action-list-item__label{color:var(--s-text-critical)}.action-list-item--intent-critical:not(:disabled) .action-list-item__icon{color:var(--s-icon-critical)}.action-list-item__icon{display:inline-flex;flex-shrink:0;color:var(--s-icon-default)}.action-list-item__label-container{display:inline-flex;min-width:0;flex-grow:1;align-items:flex-start;flex-direction:column}.action-list-item__label{overflow:hidden;max-width:100%;padding-top:0.0625rem;font-weight:var(--s-font-weight-medium);white-space:nowrap;text-overflow:ellipsis}.action-list-item__description{color:var(--s-text-subdued)}.action-list-item__suffix{display:inline-flex;flex-shrink:0;color:var(--s-icon-highlight)}";
|
|
5
5
|
|
|
6
6
|
const FlipActionListItem$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
7
7
|
constructor() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"flip-action-list-item.js","mappings":";;;AAAA,MAAM,qBAAqB,GAAG,
|
|
1
|
+
{"file":"flip-action-list-item.js","mappings":";;;AAAA,MAAM,qBAAqB,GAAG,oxDAAoxD;;MCYryDA,oBAAkB;EAL/B;;;;IASU,WAAM,GAA8B,SAAS,CAAC;IAE9C,SAAI,GAA4B,GAAG,CAAC;GA0C7C;EAvCC,MAAM;IACJ,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IAE1D,MAAM,SAAS,GAAG,UAAU,CAC1B,kBAAkB,EAClB,4BAA4B,IAAI,CAAC,MAAM,EAAE,EACzC,0BAA0B,IAAI,CAAC,IAAI,EAAE,CACtC,CAAC;IAEF,QACE,EAAC,IAAI,QACH,cACE,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,IAAI,EAAC,UAAU,EACf,QAAQ,EAAE,CAAC,CAAC,EACZ,IAAI,EAAC,QAAQ,IAEZ,IAAI,CAAC,IAAI,KACR,YAAM,KAAK,EAAC,wBAAwB,EAAC,SAAS,EAAE,IAAI,CAAC,IAAI,GAAS,CACnE,EACD,YAAM,KAAK,EAAC,mCAAmC,IAC7C,YAAM,KAAK,EAAC,yBAAyB,IAAE,IAAI,CAAC,KAAK,CAAQ,EACxD,IAAI,CAAC,WAAW,KACf,YAAM,KAAK,EAAC,+BAA+B,IACxC,IAAI,CAAC,WAAW,CACZ,CACR,CACI,EACN,UAAU,KACT,YACE,KAAK,EAAC,0BAA0B,EAChC,SAAS,EAAE,IAAI,CAAC,MAAM,GAChB,CACT,CACM,CACJ,EACP;GACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["FlipActionListItem"],"sources":["./src/components/flip-action-list-item/flip-action-list-item.css?tag=flip-action-list-item&encapsulation=shadow","./src/components/flip-action-list-item/flip-action-list-item.tsx"],"sourcesContent":[":host {\n display: block;\n\n & * {\n box-sizing: border-box;\n }\n}\n\n.action-list-item {\n display: inline-flex;\n width: 100%;\n min-width: 15rem;\n margin: 0;\n padding: var(--s-space-12) var(--s-space-16);\n justify-content: flex-start;\n align-items: center;\n border: none;\n color: var(--s-text-default);\n background-color: var(--s-surface-overlay-default);\n font: inherit;\n line-height: var(--s-line-height-base);\n text-align: left;\n cursor: pointer;\n gap: var(--s-space-12);\n\n &:hover {\n background-color: var(--s-surface-overlay-hovered);\n }\n\n &:focus {\n background-color: var(--s-surface-overlay-hovered);\n outline: none;\n }\n\n &:active {\n background-color: var(--s-surface-overlay-pressed);\n }\n\n &:disabled {\n background-color: var(--s-surface-overlay-default);\n cursor: default;\n\n & .action-list-item__label,\n & .action-list-item__description {\n color: var(--s-text-disabled);\n }\n\n & .action-list-item__icon {\n color: var(--s-icon-disabled);\n }\n }\n}\n\n.action-list-item--size-l {\n padding: var(--s-space-16);\n}\n\n.action-list-item--intent-critical {\n & ::part(icon) {\n color: var(--s-icon-critical);\n }\n\n &:not(:disabled) {\n & .action-list-item__label {\n color: var(--s-text-critical);\n }\n\n & .action-list-item__icon {\n color: var(--s-icon-critical);\n }\n }\n}\n\n.action-list-item__icon {\n display: inline-flex;\n flex-shrink: 0;\n color: var(--s-icon-default);\n}\n\n.action-list-item__label-container {\n display: inline-flex;\n min-width: 0;\n flex-grow: 1;\n align-items: flex-start;\n flex-direction: column;\n}\n\n.action-list-item__label {\n overflow: hidden;\n max-width: 100%;\n padding-top: 0.0625rem;\n font-weight: var(--s-font-weight-medium);\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.action-list-item__description {\n color: var(--s-text-subdued);\n}\n\n.action-list-item__suffix {\n display: inline-flex;\n flex-shrink: 0;\n color: var(--s-icon-highlight);\n}\n","import { Component, h, Host, Prop } from \"@stencil/core\";\nimport classnames from \"classnames\";\n\nexport type FlipActionListItemIntent = \"default\" | \"critical\";\n\nexport type FlipActionListItemSize = \"m\" | \"l\";\n\n@Component({\n shadow: true,\n styleUrl: \"flip-action-list-item.css\",\n tag: \"flip-action-list-item\",\n})\nexport class FlipActionListItem {\n @Prop() disabled?: boolean;\n @Prop() description?: string;\n @Prop() icon?: string;\n @Prop() intent?: FlipActionListItemIntent = \"default\";\n @Prop() label!: string;\n @Prop() size?: FlipActionListItemSize = \"m\";\n @Prop() suffix?: string;\n\n render() {\n const showSuffix = Boolean(this.suffix) && !this.disabled;\n\n const className = classnames(\n \"action-list-item\",\n `action-list-item--intent-${this.intent}`,\n `action-list-item--size-${this.size}`\n );\n\n return (\n <Host>\n <button\n class={className}\n disabled={this.disabled}\n role=\"menuitem\"\n tabIndex={-1}\n type=\"button\"\n >\n {this.icon && (\n <span class=\"action-list-item__icon\" innerHTML={this.icon}></span>\n )}\n <span class=\"action-list-item__label-container\">\n <span class=\"action-list-item__label\">{this.label}</span>\n {this.description && (\n <span class=\"action-list-item__description\">\n {this.description}\n </span>\n )}\n </span>\n {showSuffix && (\n <span\n class=\"action-list-item__suffix\"\n innerHTML={this.suffix}\n ></span>\n )}\n </button>\n </Host>\n );\n }\n}\n"],"version":3}
|