@540deg/ds 0.0.0-stage → 0.1.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/LICENSE +202 -0
- package/NOTICE +13 -0
- package/README.md +207 -2
- package/dist/assets/samples/captura.js +4 -0
- package/dist/assets/samples/charla-david.js +4 -0
- package/dist/assets/samples/charla-escultura.js +4 -0
- package/dist/assets/samples/charla-fachada.js +4 -0
- package/dist/assets/samples/charla-pintura.js +4 -0
- package/dist/assets/samples/charla-placa.js +4 -0
- package/dist/assets/samples/charla-teclado.js +4 -0
- package/dist/assets/samples/logo-540-claro.js +4 -0
- package/dist/assets/samples/logo-540-portada-claro.js +4 -0
- package/dist/assets/samples/logo-540-portada-oscuro.js +4 -0
- package/dist/assets/samples/logos/cliente-1.js +4 -0
- package/dist/assets/samples/logos/cliente-2.js +4 -0
- package/dist/assets/samples/logos/cliente-3.js +4 -0
- package/dist/assets/samples/logos/cliente-4.js +4 -0
- package/dist/assets/samples/logos/cliente-5.js +4 -0
- package/dist/assets/samples/logos/cliente-6.js +4 -0
- package/dist/assets/samples/logos/cliente-7.js +4 -0
- package/dist/assets/samples/logos/cliente-8.js +4 -0
- package/dist/assets/samples/logos/cliente-9.js +4 -0
- package/dist/assets/samples/retrato.js +4 -0
- package/dist/components/atoms/Bullets/Bullets.d.ts +6 -0
- package/dist/components/atoms/Bullets/Bullets.js +34 -0
- package/dist/components/atoms/Bullets/Bullets.module.js +13 -0
- package/dist/components/atoms/Bullets/index.d.ts +3 -0
- package/dist/components/atoms/Bullets/types.d.ts +23 -0
- package/dist/components/atoms/Bullets/types.js +9 -0
- package/dist/components/atoms/Button/Button.d.ts +6 -0
- package/dist/components/atoms/Button/Button.js +46 -0
- package/dist/components/atoms/Button/Button.module.js +24 -0
- package/dist/components/atoms/Button/index.d.ts +3 -0
- package/dist/components/atoms/Button/types.d.ts +38 -0
- package/dist/components/atoms/Button/types.js +14 -0
- package/dist/components/atoms/Count/Count.d.ts +6 -0
- package/dist/components/atoms/Count/Count.js +51 -0
- package/dist/components/atoms/Count/Count.module.js +9 -0
- package/dist/components/atoms/Count/index.d.ts +3 -0
- package/dist/components/atoms/Count/types.d.ts +17 -0
- package/dist/components/atoms/Count/types.js +8 -0
- package/dist/components/atoms/Image/Image.d.ts +6 -0
- package/dist/components/atoms/Image/Image.js +30 -0
- package/dist/components/atoms/Image/Image.module.js +11 -0
- package/dist/components/atoms/Image/index.d.ts +3 -0
- package/dist/components/atoms/Image/types.d.ts +16 -0
- package/dist/components/atoms/Image/types.js +13 -0
- package/dist/components/atoms/Logo/Logo.d.ts +6 -0
- package/dist/components/atoms/Logo/Logo.js +32 -0
- package/dist/components/atoms/Logo/Logo.module.js +10 -0
- package/dist/components/atoms/Logo/index.d.ts +3 -0
- package/dist/components/atoms/Logo/paths.d.ts +2 -0
- package/dist/components/atoms/Logo/paths.js +11 -0
- package/dist/components/atoms/Logo/types.d.ts +14 -0
- package/dist/components/atoms/Logo/types.js +12 -0
- package/dist/components/atoms/MenuItem/MenuItem.d.ts +6 -0
- package/dist/components/atoms/MenuItem/MenuItem.js +28 -0
- package/dist/components/atoms/MenuItem/MenuItem.module.js +19 -0
- package/dist/components/atoms/MenuItem/index.d.ts +3 -0
- package/dist/components/atoms/MenuItem/types.d.ts +18 -0
- package/dist/components/atoms/MenuItem/types.js +8 -0
- package/dist/components/atoms/SocialIcon/SocialIcon.d.ts +6 -0
- package/dist/components/atoms/SocialIcon/SocialIcon.js +26 -0
- package/dist/components/atoms/SocialIcon/SocialIcon.module.js +9 -0
- package/dist/components/atoms/SocialIcon/index.d.ts +3 -0
- package/dist/components/atoms/SocialIcon/paths.d.ts +7 -0
- package/dist/components/atoms/SocialIcon/paths.js +10 -0
- package/dist/components/atoms/SocialIcon/types.d.ts +15 -0
- package/dist/components/atoms/SocialIcon/types.js +11 -0
- package/dist/components/atoms/Text/Text.d.ts +6 -0
- package/dist/components/atoms/Text/Text.js +28 -0
- package/dist/components/atoms/Text/Text.module.js +32 -0
- package/dist/components/atoms/Text/index.d.ts +3 -0
- package/dist/components/atoms/Text/types.d.ts +39 -0
- package/dist/components/atoms/Text/types.js +54 -0
- package/dist/components/atoms/ThemeToggle/ThemeToggle.d.ts +6 -0
- package/dist/components/atoms/ThemeToggle/ThemeToggle.js +30 -0
- package/dist/components/atoms/ThemeToggle/ThemeToggle.module.js +17 -0
- package/dist/components/atoms/ThemeToggle/index.d.ts +3 -0
- package/dist/components/atoms/ThemeToggle/types.d.ts +13 -0
- package/dist/components/atoms/ThemeToggle/types.js +4 -0
- package/dist/components/molecules/Card/Card.d.ts +6 -0
- package/dist/components/molecules/Card/Card.js +82 -0
- package/dist/components/molecules/Card/Card.module.js +33 -0
- package/dist/components/molecules/Card/index.d.ts +3 -0
- package/dist/components/molecules/Card/types.d.ts +48 -0
- package/dist/components/molecules/Card/types.js +17 -0
- package/dist/components/molecules/Carousel/Carousel.d.ts +5 -0
- package/dist/components/molecules/Carousel/Carousel.js +148 -0
- package/dist/components/molecules/Carousel/Carousel.module.js +29 -0
- package/dist/components/molecules/Carousel/index.d.ts +3 -0
- package/dist/components/molecules/Carousel/types.d.ts +24 -0
- package/dist/components/molecules/Carousel/types.js +12 -0
- package/dist/components/molecules/CaseItem/CaseItem.d.ts +6 -0
- package/dist/components/molecules/CaseItem/CaseItem.js +54 -0
- package/dist/components/molecules/CaseItem/CaseItem.module.js +19 -0
- package/dist/components/molecules/CaseItem/index.d.ts +3 -0
- package/dist/components/molecules/CaseItem/types.d.ts +20 -0
- package/dist/components/molecules/CaseItem/types.js +7 -0
- package/dist/components/molecules/Dialog/Dialog.d.ts +6 -0
- package/dist/components/molecules/Dialog/Dialog.js +81 -0
- package/dist/components/molecules/Dialog/Dialog.module.js +19 -0
- package/dist/components/molecules/Dialog/index.d.ts +2 -0
- package/dist/components/molecules/Dialog/types.d.ts +22 -0
- package/dist/components/molecules/Field/Field.d.ts +6 -0
- package/dist/components/molecules/Field/Field.js +47 -0
- package/dist/components/molecules/Field/Field.module.js +15 -0
- package/dist/components/molecules/Field/index.d.ts +3 -0
- package/dist/components/molecules/Field/types.d.ts +24 -0
- package/dist/components/molecules/Field/types.js +5 -0
- package/dist/components/molecules/Footer/Footer.d.ts +6 -0
- package/dist/components/molecules/Footer/Footer.js +102 -0
- package/dist/components/molecules/Footer/Footer.module.js +33 -0
- package/dist/components/molecules/Footer/index.d.ts +3 -0
- package/dist/components/molecules/Footer/types.d.ts +46 -0
- package/dist/components/molecules/Footer/types.js +8 -0
- package/dist/components/molecules/Grid/Grid.d.ts +5 -0
- package/dist/components/molecules/Grid/Grid.js +32 -0
- package/dist/components/molecules/Grid/Grid.module.js +29 -0
- package/dist/components/molecules/Grid/index.d.ts +3 -0
- package/dist/components/molecules/Grid/types.d.ts +28 -0
- package/dist/components/molecules/Grid/types.js +14 -0
- package/dist/components/molecules/Lists/Lists.d.ts +7 -0
- package/dist/components/molecules/Lists/Lists.js +54 -0
- package/dist/components/molecules/Lists/Lists.module.js +15 -0
- package/dist/components/molecules/Lists/index.d.ts +2 -0
- package/dist/components/molecules/Lists/types.d.ts +22 -0
- package/dist/components/molecules/Menu/Menu.d.ts +6 -0
- package/dist/components/molecules/Menu/Menu.js +43 -0
- package/dist/components/molecules/Menu/Menu.module.js +13 -0
- package/dist/components/molecules/Menu/index.d.ts +3 -0
- package/dist/components/molecules/Menu/types.d.ts +27 -0
- package/dist/components/molecules/Menu/types.js +8 -0
- package/dist/components/molecules/Metric/Metric.d.ts +5 -0
- package/dist/components/molecules/Metric/Metric.js +40 -0
- package/dist/components/molecules/Metric/Metric.module.js +11 -0
- package/dist/components/molecules/Metric/index.d.ts +2 -0
- package/dist/components/molecules/Metric/types.d.ts +15 -0
- package/dist/components/molecules/NavMobile/NavMobile.d.ts +6 -0
- package/dist/components/molecules/NavMobile/NavMobile.js +95 -0
- package/dist/components/molecules/NavMobile/NavMobile.module.js +17 -0
- package/dist/components/molecules/NavMobile/index.d.ts +3 -0
- package/dist/components/molecules/NavMobile/types.d.ts +20 -0
- package/dist/components/molecules/NavMobile/types.js +8 -0
- package/dist/components/molecules/Question/Question.d.ts +3 -0
- package/dist/components/molecules/Question/Question.js +22 -0
- package/dist/components/molecules/Question/Question.module.js +5 -0
- package/dist/components/molecules/Question/index.d.ts +2 -0
- package/dist/components/molecules/Question/types.d.ts +8 -0
- package/dist/components/molecules/Screenshot/Screenshot.d.ts +3 -0
- package/dist/components/molecules/Screenshot/Screenshot.js +17 -0
- package/dist/components/molecules/Screenshot/Screenshot.module.js +5 -0
- package/dist/components/molecules/Screenshot/index.d.ts +2 -0
- package/dist/components/molecules/Screenshot/types.d.ts +12 -0
- package/dist/components/molecules/Section/Section.d.ts +6 -0
- package/dist/components/molecules/Section/Section.js +25 -0
- package/dist/components/molecules/Section/Section.module.js +11 -0
- package/dist/components/molecules/Section/index.d.ts +3 -0
- package/dist/components/molecules/Section/types.d.ts +13 -0
- package/dist/components/molecules/Section/types.js +5 -0
- package/dist/components/molecules/SectionHeader/SectionHeader.d.ts +6 -0
- package/dist/components/molecules/SectionHeader/SectionHeader.js +34 -0
- package/dist/components/molecules/SectionHeader/SectionHeader.module.js +9 -0
- package/dist/components/molecules/SectionHeader/index.d.ts +3 -0
- package/dist/components/molecules/SectionHeader/types.d.ts +22 -0
- package/dist/components/molecules/SectionHeader/types.js +14 -0
- package/dist/components/molecules/Stack/Stack.d.ts +6 -0
- package/dist/components/molecules/Stack/Stack.js +22 -0
- package/dist/components/molecules/Stack/Stack.module.js +12 -0
- package/dist/components/molecules/Stack/index.d.ts +3 -0
- package/dist/components/molecules/Stack/types.d.ts +18 -0
- package/dist/components/molecules/Stack/types.js +17 -0
- package/dist/components/molecules/TeamMember/TeamMember.d.ts +6 -0
- package/dist/components/molecules/TeamMember/TeamMember.js +55 -0
- package/dist/components/molecules/TeamMember/TeamMember.module.js +13 -0
- package/dist/components/molecules/TeamMember/index.d.ts +3 -0
- package/dist/components/molecules/TeamMember/types.d.ts +24 -0
- package/dist/components/molecules/TeamMember/types.js +8 -0
- package/dist/components/organisms/Bars/Bars.d.ts +6 -0
- package/dist/components/organisms/Bars/Bars.js +94 -0
- package/dist/components/organisms/Bars/Bars.module.js +26 -0
- package/dist/components/organisms/Bars/index.d.ts +3 -0
- package/dist/components/organisms/Bars/types.d.ts +43 -0
- package/dist/components/organisms/Bars/types.js +12 -0
- package/dist/components/organisms/Blobs/Blobs.d.ts +3 -0
- package/dist/components/organisms/Blobs/Blobs.js +14 -0
- package/dist/components/organisms/Blobs/Blobs.module.js +15 -0
- package/dist/components/organisms/Blobs/index.d.ts +2 -0
- package/dist/components/organisms/Blobs/types.d.ts +3 -0
- package/dist/components/organisms/BlockTitle/BlockTitle.d.ts +6 -0
- package/dist/components/organisms/BlockTitle/BlockTitle.js +46 -0
- package/dist/components/organisms/BlockTitle/BlockTitle.module.js +15 -0
- package/dist/components/organisms/BlockTitle/index.d.ts +2 -0
- package/dist/components/organisms/BlockTitle/types.d.ts +18 -0
- package/dist/components/organisms/CardList/CardList.d.ts +6 -0
- package/dist/components/organisms/CardList/CardList.js +15 -0
- package/dist/components/organisms/CardList/CardList.module.js +5 -0
- package/dist/components/organisms/CardList/index.d.ts +2 -0
- package/dist/components/organisms/CardList/types.d.ts +6 -0
- package/dist/components/organisms/Closing/Closing.d.ts +6 -0
- package/dist/components/organisms/Closing/Closing.js +42 -0
- package/dist/components/organisms/Closing/Closing.module.js +9 -0
- package/dist/components/organisms/Closing/index.d.ts +3 -0
- package/dist/components/organisms/Closing/types.d.ts +15 -0
- package/dist/components/organisms/Closing/types.js +4 -0
- package/dist/components/organisms/Cover/Cover.d.ts +6 -0
- package/dist/components/organisms/Cover/Cover.js +85 -0
- package/dist/components/organisms/Cover/Cover.module.js +21 -0
- package/dist/components/organisms/Cover/index.d.ts +3 -0
- package/dist/components/organisms/Cover/types.d.ts +33 -0
- package/dist/components/organisms/Cover/types.js +4 -0
- package/dist/components/organisms/Cycle/Cycle.d.ts +6 -0
- package/dist/components/organisms/Cycle/Cycle.js +79 -0
- package/dist/components/organisms/Cycle/Cycle.module.js +17 -0
- package/dist/components/organisms/Cycle/index.d.ts +3 -0
- package/dist/components/organisms/Cycle/types.d.ts +18 -0
- package/dist/components/organisms/Cycle/types.js +9 -0
- package/dist/components/organisms/Deck/Deck.d.ts +6 -0
- package/dist/components/organisms/Deck/Deck.js +159 -0
- package/dist/components/organisms/Deck/Deck.module.js +19 -0
- package/dist/components/organisms/Deck/index.d.ts +4 -0
- package/dist/components/organisms/Deck/types.d.ts +37 -0
- package/dist/components/organisms/Deck/types.js +13 -0
- package/dist/components/organisms/Deck/useDeckNavigation.d.ts +15 -0
- package/dist/components/organisms/Deck/useDeckNavigation.js +218 -0
- package/dist/components/organisms/DeckFooter/DeckFooter.d.ts +6 -0
- package/dist/components/organisms/DeckFooter/DeckFooter.js +75 -0
- package/dist/components/organisms/DeckFooter/DeckFooter.module.js +25 -0
- package/dist/components/organisms/DeckFooter/index.d.ts +3 -0
- package/dist/components/organisms/DeckFooter/types.d.ts +22 -0
- package/dist/components/organisms/DeckFooter/types.js +8 -0
- package/dist/components/organisms/Flow/Flow.d.ts +6 -0
- package/dist/components/organisms/Flow/Flow.js +26 -0
- package/dist/components/organisms/Flow/Flow.module.js +13 -0
- package/dist/components/organisms/Flow/index.d.ts +3 -0
- package/dist/components/organisms/Flow/types.d.ts +17 -0
- package/dist/components/organisms/Flow/types.js +4 -0
- package/dist/components/organisms/Form/Form.d.ts +6 -0
- package/dist/components/organisms/Form/Form.js +28 -0
- package/dist/components/organisms/Form/Form.module.js +13 -0
- package/dist/components/organisms/Form/index.d.ts +3 -0
- package/dist/components/organisms/Form/types.d.ts +16 -0
- package/dist/components/organisms/Form/types.js +8 -0
- package/dist/components/organisms/Heartbeat/Heartbeat.d.ts +3 -0
- package/dist/components/organisms/Heartbeat/Heartbeat.js +17 -0
- package/dist/components/organisms/Heartbeat/Heartbeat.module.js +13 -0
- package/dist/components/organisms/Heartbeat/index.d.ts +2 -0
- package/dist/components/organisms/Heartbeat/types.d.ts +3 -0
- package/dist/components/organisms/LogoCarousel/LogoCarousel.d.ts +6 -0
- package/dist/components/organisms/LogoCarousel/LogoCarousel.js +72 -0
- package/dist/components/organisms/LogoCarousel/LogoCarousel.module.js +13 -0
- package/dist/components/organisms/LogoCarousel/index.d.ts +3 -0
- package/dist/components/organisms/LogoCarousel/types.d.ts +18 -0
- package/dist/components/organisms/LogoCarousel/types.js +4 -0
- package/dist/components/organisms/Marquee/Marquee.d.ts +7 -0
- package/dist/components/organisms/Marquee/Marquee.js +57 -0
- package/dist/components/organisms/Marquee/Marquee.module.js +15 -0
- package/dist/components/organisms/Marquee/index.d.ts +3 -0
- package/dist/components/organisms/Marquee/types.d.ts +11 -0
- package/dist/components/organisms/Marquee/types.js +4 -0
- package/dist/components/organisms/ProgressBar/ProgressBar.d.ts +6 -0
- package/dist/components/organisms/ProgressBar/ProgressBar.js +56 -0
- package/dist/components/organisms/ProgressBar/ProgressBar.module.js +17 -0
- package/dist/components/organisms/ProgressBar/index.d.ts +3 -0
- package/dist/components/organisms/ProgressBar/types.d.ts +20 -0
- package/dist/components/organisms/ProgressBar/types.js +7 -0
- package/dist/components/organisms/Punchline/Punchline.d.ts +6 -0
- package/dist/components/organisms/Punchline/Punchline.js +41 -0
- package/dist/components/organisms/Punchline/Punchline.module.js +11 -0
- package/dist/components/organisms/Punchline/index.d.ts +3 -0
- package/dist/components/organisms/Punchline/types.d.ts +15 -0
- package/dist/components/organisms/Punchline/types.js +4 -0
- package/dist/components/organisms/Quote/Quote.d.ts +3 -0
- package/dist/components/organisms/Quote/Quote.js +33 -0
- package/dist/components/organisms/Quote/Quote.module.js +5 -0
- package/dist/components/organisms/Quote/index.d.ts +3 -0
- package/dist/components/organisms/Quote/types.d.ts +15 -0
- package/dist/components/organisms/Quote/types.js +4 -0
- package/dist/components/organisms/Schema/Schema.d.ts +54 -0
- package/dist/components/organisms/Schema/Schema.js +117 -0
- package/dist/components/organisms/Schema/Schema.module.js +87 -0
- package/dist/components/organisms/Schema/index.d.ts +2 -0
- package/dist/components/organisms/Schema/types.d.ts +32 -0
- package/dist/components/organisms/Share/Share.d.ts +6 -0
- package/dist/components/organisms/Share/Share.js +68 -0
- package/dist/components/organisms/Share/Share.module.js +22 -0
- package/dist/components/organisms/Share/index.d.ts +3 -0
- package/dist/components/organisms/Share/types.d.ts +24 -0
- package/dist/components/organisms/Share/types.js +4 -0
- package/dist/components/organisms/Sheet/Sheet.d.ts +2 -0
- package/dist/components/organisms/Sheet/Sheet.js +92 -0
- package/dist/components/organisms/Sheet/Sheet.module.js +15 -0
- package/dist/components/organisms/Sheet/index.d.ts +3 -0
- package/dist/components/organisms/Sheet/types.d.ts +15 -0
- package/dist/components/organisms/Sheet/types.js +4 -0
- package/dist/components/organisms/Slide/Slide.d.ts +6 -0
- package/dist/components/organisms/Slide/Slide.js +29 -0
- package/dist/components/organisms/Slide/Slide.module.js +13 -0
- package/dist/components/organisms/Slide/index.d.ts +3 -0
- package/dist/components/organisms/Slide/types.d.ts +18 -0
- package/dist/components/organisms/Slide/types.js +8 -0
- package/dist/components/organisms/Spotlight/Spotlight.d.ts +7 -0
- package/dist/components/organisms/Spotlight/Spotlight.js +39 -0
- package/dist/components/organisms/Spotlight/Spotlight.module.js +5 -0
- package/dist/components/organisms/Spotlight/index.d.ts +2 -0
- package/dist/components/organisms/Spotlight/types.d.ts +6 -0
- package/dist/components/organisms/Statements/Statements.d.ts +7 -0
- package/dist/components/organisms/Statements/Statements.js +50 -0
- package/dist/components/organisms/Statements/Statements.module.js +11 -0
- package/dist/components/organisms/Statements/index.d.ts +3 -0
- package/dist/components/organisms/Statements/types.d.ts +14 -0
- package/dist/components/organisms/Statements/types.js +7 -0
- package/dist/components/organisms/Steps/Steps.d.ts +15 -0
- package/dist/components/organisms/Steps/Steps.js +117 -0
- package/dist/components/organisms/Steps/Steps.module.js +13 -0
- package/dist/components/organisms/Steps/StepsContext.d.ts +11 -0
- package/dist/components/organisms/Steps/StepsContext.js +18 -0
- package/dist/components/organisms/Steps/index.d.ts +3 -0
- package/dist/components/organisms/Steps/types.d.ts +22 -0
- package/dist/components/organisms/Story/Story.d.ts +6 -0
- package/dist/components/organisms/Story/Story.js +43 -0
- package/dist/components/organisms/Story/Story.module.js +5 -0
- package/dist/components/organisms/Story/index.d.ts +3 -0
- package/dist/components/organisms/Story/types.d.ts +20 -0
- package/dist/components/organisms/Story/types.js +7 -0
- package/dist/components/organisms/Timeline/Timeline.d.ts +7 -0
- package/dist/components/organisms/Timeline/Timeline.js +67 -0
- package/dist/components/organisms/Timeline/Timeline.module.js +19 -0
- package/dist/components/organisms/Timeline/index.d.ts +3 -0
- package/dist/components/organisms/Timeline/types.d.ts +25 -0
- package/dist/components/organisms/Timeline/types.js +4 -0
- package/dist/components/organisms/Tools/Tools.d.ts +6 -0
- package/dist/components/organisms/Tools/Tools.js +47 -0
- package/dist/components/organisms/Tools/Tools.module.js +17 -0
- package/dist/components/organisms/Tools/index.d.ts +3 -0
- package/dist/components/organisms/Tools/types.d.ts +23 -0
- package/dist/components/organisms/Tools/types.js +4 -0
- package/dist/fonts/OFL.txt +93 -0
- package/dist/fonts/dm-sans-latin-opsz-normal.woff2 +0 -0
- package/dist/hooks/useCenterState.d.ts +9 -0
- package/dist/hooks/useCenterState.js +40 -0
- package/dist/hooks/useReveal.d.ts +7 -0
- package/dist/hooks/useReveal.js +34 -0
- package/dist/index.d.ts +54 -0
- package/dist/index.js +98 -0
- package/dist/styles.css +3441 -0
- package/dist/templates/TalkTemplate/TalkTemplate.d.ts +7 -0
- package/dist/templates/TalkTemplate/TalkTemplate.js +1392 -0
- package/dist/templates/TalkTemplate/index.d.ts +2 -0
- package/package.json +86 -4
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import Cycle_module_default from "./Cycle.module.js";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
//#region src/components/organisms/Cycle/Cycle.tsx
|
|
4
|
+
var CX = 440;
|
|
5
|
+
var CY = 320;
|
|
6
|
+
var R = 215;
|
|
7
|
+
var NODE_R = 34;
|
|
8
|
+
var LENGTH = 2 * Math.PI * R;
|
|
9
|
+
/**
|
|
10
|
+
* Cycle is a ring of phases with an arc of progress. The phases before the active one are done;
|
|
11
|
+
* marks paint a node red, green or yellow.
|
|
12
|
+
*/
|
|
13
|
+
function Cycle({ phases, active = -1, all = false, highlightFirst = false, marks = {}, label, className }) {
|
|
14
|
+
const n = phases.length;
|
|
15
|
+
const progress = all ? 1 : Math.max(0, active) / n;
|
|
16
|
+
return /* @__PURE__ */ jsxs("svg", {
|
|
17
|
+
className: [Cycle_module_default.cycle, className ?? ""].filter(Boolean).join(" "),
|
|
18
|
+
viewBox: "0 0 880 640",
|
|
19
|
+
role: "img",
|
|
20
|
+
"aria-label": label,
|
|
21
|
+
children: [
|
|
22
|
+
/* @__PURE__ */ jsx("circle", {
|
|
23
|
+
className: Cycle_module_default.ring,
|
|
24
|
+
cx: CX,
|
|
25
|
+
cy: CY,
|
|
26
|
+
r: R
|
|
27
|
+
}),
|
|
28
|
+
/* @__PURE__ */ jsx("circle", {
|
|
29
|
+
className: Cycle_module_default.arc,
|
|
30
|
+
cx: CX,
|
|
31
|
+
cy: CY,
|
|
32
|
+
r: R,
|
|
33
|
+
transform: `rotate(-90 ${CX} ${CY})`,
|
|
34
|
+
strokeDasharray: LENGTH,
|
|
35
|
+
strokeDashoffset: LENGTH * (1 - progress)
|
|
36
|
+
}),
|
|
37
|
+
phases.map((phase, i) => {
|
|
38
|
+
const angle = -Math.PI / 2 + i / n * 2 * Math.PI;
|
|
39
|
+
const x = CX + R * Math.cos(angle);
|
|
40
|
+
const y = CY + R * Math.sin(angle);
|
|
41
|
+
const lx = CX + 300 * Math.cos(angle);
|
|
42
|
+
const ly = CY + 300 * Math.sin(angle);
|
|
43
|
+
const anchor = Math.abs(Math.cos(angle)) < .2 ? "middle" : Math.cos(angle) > 0 ? "start" : "end";
|
|
44
|
+
let state = all || i < active ? "done" : i === active ? "active" : "idle";
|
|
45
|
+
if (all && highlightFirst && i === 0) state = "active";
|
|
46
|
+
return /* @__PURE__ */ jsxs("g", {
|
|
47
|
+
className: Cycle_module_default.node,
|
|
48
|
+
"data-state": state,
|
|
49
|
+
"data-mark": marks[i],
|
|
50
|
+
children: [
|
|
51
|
+
/* @__PURE__ */ jsx("circle", {
|
|
52
|
+
cx: x,
|
|
53
|
+
cy: y,
|
|
54
|
+
r: NODE_R
|
|
55
|
+
}),
|
|
56
|
+
/* @__PURE__ */ jsx("text", {
|
|
57
|
+
className: Cycle_module_default.number,
|
|
58
|
+
x,
|
|
59
|
+
y,
|
|
60
|
+
textAnchor: "middle",
|
|
61
|
+
dominantBaseline: "central",
|
|
62
|
+
children: i + 1
|
|
63
|
+
}),
|
|
64
|
+
/* @__PURE__ */ jsx("text", {
|
|
65
|
+
className: Cycle_module_default.label,
|
|
66
|
+
x: lx,
|
|
67
|
+
y: ly,
|
|
68
|
+
textAnchor: anchor,
|
|
69
|
+
dominantBaseline: "central",
|
|
70
|
+
children: phase
|
|
71
|
+
})
|
|
72
|
+
]
|
|
73
|
+
}, phase);
|
|
74
|
+
})
|
|
75
|
+
]
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
//#endregion
|
|
79
|
+
export { Cycle };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/components/organisms/Cycle/Cycle.module.css
|
|
2
|
+
var cycle = "_cycle_1bjzo_4";
|
|
3
|
+
var ring = "_ring_1bjzo_11";
|
|
4
|
+
var arc = "_arc_1bjzo_17";
|
|
5
|
+
var node = "_node_1bjzo_25";
|
|
6
|
+
var number = "_number_1bjzo_70";
|
|
7
|
+
var label = "_label_1bjzo_87";
|
|
8
|
+
var Cycle_module_default = {
|
|
9
|
+
cycle,
|
|
10
|
+
ring,
|
|
11
|
+
arc,
|
|
12
|
+
node,
|
|
13
|
+
number,
|
|
14
|
+
label
|
|
15
|
+
};
|
|
16
|
+
//#endregion
|
|
17
|
+
export { arc, cycle, Cycle_module_default as default, label, node, number, ring };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const CYCLE_MARKS: readonly ["red", "green", "yellow"];
|
|
2
|
+
export type CycleMark = (typeof CYCLE_MARKS)[number];
|
|
3
|
+
export type CycleProps = {
|
|
4
|
+
/** The phases, in order around the ring. */
|
|
5
|
+
phases: string[];
|
|
6
|
+
/** The active phase (index). Earlier ones are done. */
|
|
7
|
+
active?: number;
|
|
8
|
+
/** All phases done. */
|
|
9
|
+
all?: boolean;
|
|
10
|
+
/** With all, keep the first one as active. */
|
|
11
|
+
highlightFirst?: boolean;
|
|
12
|
+
/** Marks by index: red (a problem), green (solved), yellow (the concern). */
|
|
13
|
+
marks?: Record<number, CycleMark>;
|
|
14
|
+
/** Accessible name. */
|
|
15
|
+
label: string;
|
|
16
|
+
className?: string;
|
|
17
|
+
};
|
|
18
|
+
export declare const CYCLE_DEFAULTS: {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { DeckProps } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Deck is the frame of a talk: the blobs behind, the top bar that hides while navigating,
|
|
4
|
+
* the stops (Slides), the side index, keyboard navigation, the remembered theme and the footer.
|
|
5
|
+
*/
|
|
6
|
+
export declare function Deck({ items, children, footer, defaultTheme, storageKey, navLabel, indexLabel, blobs, homeHref, homeLabel, className, }: DeckProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { Bullets } from "../../atoms/Bullets/Bullets.js";
|
|
2
|
+
import { ThemeToggle } from "../../atoms/ThemeToggle/ThemeToggle.js";
|
|
3
|
+
import { Menu } from "../../molecules/Menu/Menu.js";
|
|
4
|
+
import { NavMobile } from "../../molecules/NavMobile/NavMobile.js";
|
|
5
|
+
import { Blobs } from "../Blobs/Blobs.js";
|
|
6
|
+
import { DeckFooter } from "../DeckFooter/DeckFooter.js";
|
|
7
|
+
import Deck_module_default from "./Deck.module.js";
|
|
8
|
+
import { DECK_DEFAULTS } from "./types.js";
|
|
9
|
+
import { useDeckNavigation } from "./useDeckNavigation.js";
|
|
10
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
11
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
12
|
+
//#region src/components/organisms/Deck/Deck.tsx
|
|
13
|
+
/** The side index never paints more than this many marks; longer talks share them out evenly. */
|
|
14
|
+
var MAX_MARKS = 20;
|
|
15
|
+
function readTheme(key, fallback) {
|
|
16
|
+
if (!key) return fallback;
|
|
17
|
+
try {
|
|
18
|
+
const v = localStorage.getItem(key);
|
|
19
|
+
if (v === "claro") return "light";
|
|
20
|
+
if (v === "oscuro") return "dark";
|
|
21
|
+
} catch {}
|
|
22
|
+
return fallback;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Deck is the frame of a talk: the blobs behind, the top bar that hides while navigating,
|
|
26
|
+
* the stops (Slides), the side index, keyboard navigation, the remembered theme and the footer.
|
|
27
|
+
*/
|
|
28
|
+
function Deck({ items, children, footer, defaultTheme = DECK_DEFAULTS.defaultTheme, storageKey = DECK_DEFAULTS.storageKey, navLabel = DECK_DEFAULTS.navLabel, indexLabel = DECK_DEFAULTS.indexLabel, blobs = DECK_DEFAULTS.blobs, homeHref = DECK_DEFAULTS.homeHref, homeLabel = DECK_DEFAULTS.homeLabel, className }) {
|
|
29
|
+
const mainRef = useRef(null);
|
|
30
|
+
const footerRef = useRef(null);
|
|
31
|
+
const barRef = useRef(null);
|
|
32
|
+
const [theme, setTheme] = useState(() => readTheme(storageKey, defaultTheme));
|
|
33
|
+
const [barHidden, setBarHidden] = useState(false);
|
|
34
|
+
const [indexVisible, setIndexVisible] = useState(false);
|
|
35
|
+
const { stops, current, goTo } = useDeckNavigation(mainRef, footerRef);
|
|
36
|
+
const toggleTheme = (dark) => {
|
|
37
|
+
setTheme(dark ? "dark" : "light");
|
|
38
|
+
if (storageKey) try {
|
|
39
|
+
localStorage.setItem(storageKey, dark ? "oscuro" : "claro");
|
|
40
|
+
} catch {}
|
|
41
|
+
};
|
|
42
|
+
const wakeAt = useRef(0);
|
|
43
|
+
const pointerTop = useRef(false);
|
|
44
|
+
const atCover = useCallback(() => window.scrollY < window.innerHeight * .6, []);
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
const WAIT = 1e3;
|
|
47
|
+
let raf = 0;
|
|
48
|
+
const busy = () => {
|
|
49
|
+
const bar = barRef.current;
|
|
50
|
+
return pointerTop.current || Boolean(document.querySelector("dialog[open]")) || Boolean(bar && (bar.contains(document.activeElement) || bar.matches(":hover")));
|
|
51
|
+
};
|
|
52
|
+
const watch = (now) => {
|
|
53
|
+
if (atCover()) setBarHidden(false);
|
|
54
|
+
else if (busy()) wakeAt.current = now;
|
|
55
|
+
else if (now - wakeAt.current > WAIT) setBarHidden(true);
|
|
56
|
+
setIndexVisible(window.scrollY > window.innerHeight * .6);
|
|
57
|
+
raf = requestAnimationFrame(watch);
|
|
58
|
+
};
|
|
59
|
+
raf = requestAnimationFrame(watch);
|
|
60
|
+
const hide = () => {
|
|
61
|
+
if (!atCover() && !pointerTop.current) setBarHidden(true);
|
|
62
|
+
};
|
|
63
|
+
const onMove = (e) => {
|
|
64
|
+
pointerTop.current = e.clientY < 120;
|
|
65
|
+
if (pointerTop.current) {
|
|
66
|
+
wakeAt.current = performance.now();
|
|
67
|
+
setBarHidden(false);
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
const onLeave = () => {
|
|
71
|
+
pointerTop.current = false;
|
|
72
|
+
};
|
|
73
|
+
document.addEventListener("keydown", hide, true);
|
|
74
|
+
window.addEventListener("scroll", hide, { passive: true });
|
|
75
|
+
document.addEventListener("pointermove", onMove, { passive: true });
|
|
76
|
+
document.addEventListener("pointerleave", onLeave);
|
|
77
|
+
return () => {
|
|
78
|
+
cancelAnimationFrame(raf);
|
|
79
|
+
document.removeEventListener("keydown", hide, true);
|
|
80
|
+
window.removeEventListener("scroll", hide);
|
|
81
|
+
document.removeEventListener("pointermove", onMove);
|
|
82
|
+
document.removeEventListener("pointerleave", onLeave);
|
|
83
|
+
};
|
|
84
|
+
}, [atCover]);
|
|
85
|
+
const toggle = /* @__PURE__ */ jsx(ThemeToggle, {
|
|
86
|
+
dark: theme === "dark",
|
|
87
|
+
onToggle: toggleTheme
|
|
88
|
+
});
|
|
89
|
+
const classes = [Deck_module_default.deck, className ?? ""].filter(Boolean).join(" ");
|
|
90
|
+
const marks = Math.min(stops.length, MAX_MARKS);
|
|
91
|
+
const grouped = stops.length > MAX_MARKS;
|
|
92
|
+
const markOf = (stop) => grouped ? Math.min(marks - 1, Math.floor(stop * marks / stops.length)) : stop;
|
|
93
|
+
const firstStopOf = (mark) => grouped ? Math.ceil(mark * stops.length / marks) : mark;
|
|
94
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
95
|
+
className: classes,
|
|
96
|
+
"data-theme": theme,
|
|
97
|
+
"data-deck": "",
|
|
98
|
+
children: [
|
|
99
|
+
blobs ? /* @__PURE__ */ jsx(Blobs, {}) : null,
|
|
100
|
+
/* @__PURE__ */ jsx("div", {
|
|
101
|
+
ref: barRef,
|
|
102
|
+
className: Deck_module_default.bar,
|
|
103
|
+
"data-hidden": barHidden ? "" : void 0,
|
|
104
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
105
|
+
className: Deck_module_default.row,
|
|
106
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
107
|
+
className: Deck_module_default.wide,
|
|
108
|
+
children: /* @__PURE__ */ jsx(Menu, {
|
|
109
|
+
items,
|
|
110
|
+
homeHref,
|
|
111
|
+
homeLabel,
|
|
112
|
+
label: navLabel,
|
|
113
|
+
end: toggle
|
|
114
|
+
})
|
|
115
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
116
|
+
className: Deck_module_default.narrow,
|
|
117
|
+
children: /* @__PURE__ */ jsx(NavMobile, {
|
|
118
|
+
items,
|
|
119
|
+
homeHref,
|
|
120
|
+
homeLabel,
|
|
121
|
+
label: navLabel,
|
|
122
|
+
end: toggle
|
|
123
|
+
})
|
|
124
|
+
})]
|
|
125
|
+
})
|
|
126
|
+
}),
|
|
127
|
+
/* @__PURE__ */ jsx("main", {
|
|
128
|
+
ref: mainRef,
|
|
129
|
+
className: Deck_module_default.main,
|
|
130
|
+
"data-scale": "projection",
|
|
131
|
+
"data-deck-stops": "",
|
|
132
|
+
children
|
|
133
|
+
}),
|
|
134
|
+
/* @__PURE__ */ jsx("div", {
|
|
135
|
+
ref: footerRef,
|
|
136
|
+
children: /* @__PURE__ */ jsx(DeckFooter, {
|
|
137
|
+
homeHref,
|
|
138
|
+
homeLabel,
|
|
139
|
+
...footer
|
|
140
|
+
})
|
|
141
|
+
}),
|
|
142
|
+
stops.length > 2 ? /* @__PURE__ */ jsx("div", {
|
|
143
|
+
className: Deck_module_default.index,
|
|
144
|
+
"data-visible": indexVisible ? "" : void 0,
|
|
145
|
+
children: /* @__PURE__ */ jsx(Bullets, {
|
|
146
|
+
orientation: "vertical",
|
|
147
|
+
count: marks,
|
|
148
|
+
current: markOf(current) + 1,
|
|
149
|
+
onSelect: (mark) => goTo(firstStopOf(mark - 1)),
|
|
150
|
+
label: indexLabel,
|
|
151
|
+
itemLabel: grouped ? "Tramo" : "Parada",
|
|
152
|
+
"aria-label": indexLabel
|
|
153
|
+
})
|
|
154
|
+
}) : null
|
|
155
|
+
]
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
//#endregion
|
|
159
|
+
export { Deck };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/components/organisms/Deck/Deck.module.css
|
|
2
|
+
var deck = "_deck_1rkwo_4";
|
|
3
|
+
var bar = "_bar_1rkwo_13";
|
|
4
|
+
var row = "_row_1rkwo_39";
|
|
5
|
+
var narrow = "_narrow_1rkwo_49";
|
|
6
|
+
var wide = "_wide_1rkwo_54";
|
|
7
|
+
var main = "_main_1rkwo_70";
|
|
8
|
+
var index = "_index_1rkwo_76";
|
|
9
|
+
var Deck_module_default = {
|
|
10
|
+
deck,
|
|
11
|
+
bar,
|
|
12
|
+
row,
|
|
13
|
+
narrow,
|
|
14
|
+
wide,
|
|
15
|
+
main,
|
|
16
|
+
index
|
|
17
|
+
};
|
|
18
|
+
//#endregion
|
|
19
|
+
export { bar, deck, Deck_module_default as default, index, main, narrow, row, wide };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { MenuDestination } from '../../molecules/Menu';
|
|
3
|
+
import type { DeckFooterProps } from '../DeckFooter';
|
|
4
|
+
export declare const DECK_THEMES: readonly ["dark", "light"];
|
|
5
|
+
export type DeckTheme = (typeof DECK_THEMES)[number];
|
|
6
|
+
export type DeckProps = {
|
|
7
|
+
/** The destinations of the top bar: the main stops of the talk. */
|
|
8
|
+
items: MenuDestination[];
|
|
9
|
+
/** The stops: Slides (and the photos that go with a block title). */
|
|
10
|
+
children: ReactNode;
|
|
11
|
+
/** The last stop. */
|
|
12
|
+
footer: DeckFooterProps;
|
|
13
|
+
/** Theme at first visit. Talks default to dark. */
|
|
14
|
+
defaultTheme?: DeckTheme;
|
|
15
|
+
/** localStorage key where the viewer's theme is remembered. Empty string disables it. */
|
|
16
|
+
storageKey?: string;
|
|
17
|
+
/** Accessible name of the top navigation. */
|
|
18
|
+
navLabel?: string;
|
|
19
|
+
/** Accessible name of the side index. */
|
|
20
|
+
indexLabel?: string;
|
|
21
|
+
/** Paint the background blobs. */
|
|
22
|
+
blobs?: boolean;
|
|
23
|
+
/** Where the logo links to: the cover. */
|
|
24
|
+
homeHref?: string;
|
|
25
|
+
/** Accessible name of the logo link. */
|
|
26
|
+
homeLabel?: string;
|
|
27
|
+
className?: string;
|
|
28
|
+
};
|
|
29
|
+
export declare const DECK_DEFAULTS: {
|
|
30
|
+
readonly defaultTheme: "dark";
|
|
31
|
+
readonly storageKey: "540:tema";
|
|
32
|
+
readonly navLabel: "Paradas de la charla";
|
|
33
|
+
readonly indexLabel: "Recorrido de la charla";
|
|
34
|
+
readonly blobs: true;
|
|
35
|
+
readonly homeHref: "#portada";
|
|
36
|
+
readonly homeLabel: "540, ir al inicio";
|
|
37
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region src/components/organisms/Deck/types.ts
|
|
2
|
+
var DECK_THEMES = ["dark", "light"];
|
|
3
|
+
var DECK_DEFAULTS = {
|
|
4
|
+
defaultTheme: "dark",
|
|
5
|
+
storageKey: "540:tema",
|
|
6
|
+
navLabel: "Paradas de la charla",
|
|
7
|
+
indexLabel: "Recorrido de la charla",
|
|
8
|
+
blobs: true,
|
|
9
|
+
homeHref: "#portada",
|
|
10
|
+
homeLabel: "540, ir al inicio"
|
|
11
|
+
};
|
|
12
|
+
//#endregion
|
|
13
|
+
export { DECK_DEFAULTS, DECK_THEMES };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { RefObject } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* The journey of a talk, ported from the talks' navegacion-540.js (without GSAP):
|
|
4
|
+
* - stops are the Slides inside <main> (at any depth), split by their outermost [data-stop] descendants, plus the footer;
|
|
5
|
+
* - the keyboard moves between stops (and pages inside a stop taller than the window);
|
|
6
|
+
* - the current stop is the one holding the center of the window.
|
|
7
|
+
*/
|
|
8
|
+
export declare function useDeckNavigation(mainRef: RefObject<HTMLElement | null>, footerRef: RefObject<HTMLElement | null>): {
|
|
9
|
+
stops: HTMLElement[];
|
|
10
|
+
current: number;
|
|
11
|
+
goTo: (i: number) => void;
|
|
12
|
+
next: () => void;
|
|
13
|
+
prev: () => void;
|
|
14
|
+
nameOf: (el: HTMLElement, i: number) => string;
|
|
15
|
+
};
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
2
|
+
//#region src/components/organisms/Deck/useDeckNavigation.ts
|
|
3
|
+
var WRAPPERS = /* @__PURE__ */ new Set(["DS-SLOT", "DS-ISLAND"]);
|
|
4
|
+
/** The Slides under parent, at any depth: a wrapper (a div with a label, an island) does not hide them. Other sections are not stops. */
|
|
5
|
+
function slidesOf(parent) {
|
|
6
|
+
return Array.from(parent.querySelectorAll("[data-slide]"));
|
|
7
|
+
}
|
|
8
|
+
/** The element after el, looking through the ds-slot/ds-island wrappers (not other wrappers: a photo goes next to its title). */
|
|
9
|
+
function nextThroughWrappers(el) {
|
|
10
|
+
let cur = el;
|
|
11
|
+
while (!cur.nextElementSibling && cur.parentElement && WRAPPERS.has(cur.parentElement.tagName)) cur = cur.parentElement;
|
|
12
|
+
let next = cur.nextElementSibling;
|
|
13
|
+
while (next && WRAPPERS.has(next.tagName)) next = next.firstElementChild ?? next.nextElementSibling;
|
|
14
|
+
return next;
|
|
15
|
+
}
|
|
16
|
+
function photoAfter(el) {
|
|
17
|
+
const next = nextThroughWrappers(el);
|
|
18
|
+
return next && next.hasAttribute("data-deck-photo") ? next : null;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The journey of a talk, ported from the talks' navegacion-540.js (without GSAP):
|
|
22
|
+
* - stops are the Slides inside <main> (at any depth), split by their outermost [data-stop] descendants, plus the footer;
|
|
23
|
+
* - the keyboard moves between stops (and pages inside a stop taller than the window);
|
|
24
|
+
* - the current stop is the one holding the center of the window.
|
|
25
|
+
*/
|
|
26
|
+
function useDeckNavigation(mainRef, footerRef) {
|
|
27
|
+
const [stops, setStops] = useState([]);
|
|
28
|
+
const [current, setCurrent] = useState(0);
|
|
29
|
+
const rangesRef = useRef([]);
|
|
30
|
+
const collect = useCallback(() => {
|
|
31
|
+
const main = mainRef.current;
|
|
32
|
+
if (!main) return;
|
|
33
|
+
let list = slidesOf(main);
|
|
34
|
+
list = list.flatMap((section) => {
|
|
35
|
+
const inner = Array.from(section.querySelectorAll(":scope [data-stop]:not([data-stop] [data-stop])"));
|
|
36
|
+
return inner.length ? inner : [section];
|
|
37
|
+
});
|
|
38
|
+
if (footerRef.current) list.push(footerRef.current);
|
|
39
|
+
setStops(list);
|
|
40
|
+
}, [mainRef, footerRef]);
|
|
41
|
+
const measure = useCallback(() => {
|
|
42
|
+
rangesRef.current = stops.map((el) => {
|
|
43
|
+
const r = el.getBoundingClientRect();
|
|
44
|
+
const top = r.top + window.scrollY;
|
|
45
|
+
return [top, top + r.height];
|
|
46
|
+
});
|
|
47
|
+
}, [stops]);
|
|
48
|
+
const reduced = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
49
|
+
const slide = useCallback((y) => {
|
|
50
|
+
const max = document.documentElement.scrollHeight - window.innerHeight;
|
|
51
|
+
const top = Math.max(0, Math.min(Math.round(y), max));
|
|
52
|
+
window.scrollTo({
|
|
53
|
+
top,
|
|
54
|
+
behavior: reduced() ? "auto" : "smooth"
|
|
55
|
+
});
|
|
56
|
+
}, []);
|
|
57
|
+
const photoOf = (el) => el.tagName === "SECTION" ? photoAfter(el) : null;
|
|
58
|
+
const goTo = useCallback((i) => {
|
|
59
|
+
const n = Math.max(0, Math.min(stops.length - 1, i));
|
|
60
|
+
const el = stops[n];
|
|
61
|
+
if (!el) return;
|
|
62
|
+
if (n === stops.length - 1) {
|
|
63
|
+
slide(document.documentElement.scrollHeight);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const vh = window.innerHeight;
|
|
67
|
+
const top = el.getBoundingClientRect().top + window.scrollY;
|
|
68
|
+
if (photoOf(el)) {
|
|
69
|
+
slide(top);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const r = (el.querySelector("[data-slide-stage]") ?? el).getBoundingClientRect();
|
|
73
|
+
const t = r.top + window.scrollY;
|
|
74
|
+
slide(r.height < vh ? t - (vh - r.height) / 2 : top);
|
|
75
|
+
}, [stops, slide]);
|
|
76
|
+
const currentIndex = useCallback(() => {
|
|
77
|
+
if (!rangesRef.current.length) measure();
|
|
78
|
+
const yc = window.scrollY + window.innerHeight / 2;
|
|
79
|
+
const ranges = rangesRef.current;
|
|
80
|
+
for (let i = 0; i < ranges.length; i++) if (yc >= ranges[i][0] && yc < ranges[i][1]) return i;
|
|
81
|
+
let best = 0;
|
|
82
|
+
let min = Infinity;
|
|
83
|
+
ranges.forEach(([a, b], j) => {
|
|
84
|
+
const d = Math.abs((a + b) / 2 - yc);
|
|
85
|
+
if (d < min) {
|
|
86
|
+
min = d;
|
|
87
|
+
best = j;
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
return best;
|
|
91
|
+
}, [measure]);
|
|
92
|
+
const box = (i) => {
|
|
93
|
+
const el = stops[i];
|
|
94
|
+
const r = (el.querySelector("[data-slide-stage]") ?? el).getBoundingClientRect();
|
|
95
|
+
return [r.top + window.scrollY, r.bottom + window.scrollY];
|
|
96
|
+
};
|
|
97
|
+
const next = useCallback(() => {
|
|
98
|
+
const i = currentIndex();
|
|
99
|
+
const [, bottom] = box(i);
|
|
100
|
+
const y = window.scrollY;
|
|
101
|
+
const vh = window.innerHeight;
|
|
102
|
+
if (i > 0 && bottom - (y + vh) > 12) {
|
|
103
|
+
slide(Math.min(y + vh * .84, bottom - vh));
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
goTo(i + 1);
|
|
107
|
+
}, [
|
|
108
|
+
currentIndex,
|
|
109
|
+
goTo,
|
|
110
|
+
slide,
|
|
111
|
+
stops
|
|
112
|
+
]);
|
|
113
|
+
const prev = useCallback(() => {
|
|
114
|
+
const i = currentIndex();
|
|
115
|
+
const [top] = box(i);
|
|
116
|
+
const y = window.scrollY;
|
|
117
|
+
const vh = window.innerHeight;
|
|
118
|
+
if (i > 0 && y - top > 12) {
|
|
119
|
+
slide(Math.max(top, y - vh * .84));
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
goTo(i - 1);
|
|
123
|
+
}, [
|
|
124
|
+
currentIndex,
|
|
125
|
+
goTo,
|
|
126
|
+
slide,
|
|
127
|
+
stops
|
|
128
|
+
]);
|
|
129
|
+
useEffect(() => {
|
|
130
|
+
collect();
|
|
131
|
+
}, [collect]);
|
|
132
|
+
useEffect(() => {
|
|
133
|
+
if (!stops.length) return;
|
|
134
|
+
measure();
|
|
135
|
+
let lastY = -1;
|
|
136
|
+
let lastH = -1;
|
|
137
|
+
let raf = 0;
|
|
138
|
+
const tick = () => {
|
|
139
|
+
const y = window.scrollY;
|
|
140
|
+
const h = document.documentElement.scrollHeight;
|
|
141
|
+
if (h !== lastH) {
|
|
142
|
+
lastH = h;
|
|
143
|
+
measure();
|
|
144
|
+
lastY = -1;
|
|
145
|
+
}
|
|
146
|
+
if (y !== lastY) {
|
|
147
|
+
lastY = y;
|
|
148
|
+
setCurrent(currentIndex());
|
|
149
|
+
}
|
|
150
|
+
raf = requestAnimationFrame(tick);
|
|
151
|
+
};
|
|
152
|
+
raf = requestAnimationFrame(tick);
|
|
153
|
+
const onResize = () => {
|
|
154
|
+
measure();
|
|
155
|
+
setCurrent(currentIndex());
|
|
156
|
+
};
|
|
157
|
+
window.addEventListener("resize", onResize);
|
|
158
|
+
return () => {
|
|
159
|
+
cancelAnimationFrame(raf);
|
|
160
|
+
window.removeEventListener("resize", onResize);
|
|
161
|
+
};
|
|
162
|
+
}, [
|
|
163
|
+
stops,
|
|
164
|
+
measure,
|
|
165
|
+
currentIndex
|
|
166
|
+
]);
|
|
167
|
+
useEffect(() => {
|
|
168
|
+
const editing = (t) => {
|
|
169
|
+
const el = t;
|
|
170
|
+
if (!el || !el.tagName) return false;
|
|
171
|
+
return el.isContentEditable || /^(INPUT|TEXTAREA|SELECT)$/.test(el.tagName);
|
|
172
|
+
};
|
|
173
|
+
const onKey = (e) => {
|
|
174
|
+
if (e.defaultPrevented || e.metaKey || e.ctrlKey || e.altKey) return;
|
|
175
|
+
if (document.querySelector("dialog[open]")) return;
|
|
176
|
+
if (editing(e.target)) return;
|
|
177
|
+
const k = e.key;
|
|
178
|
+
if (k === "ArrowRight" || k === "ArrowDown" || k === "PageDown") {
|
|
179
|
+
e.preventDefault();
|
|
180
|
+
next();
|
|
181
|
+
} else if (k === " " || k === "Spacebar") {
|
|
182
|
+
e.preventDefault();
|
|
183
|
+
if (e.shiftKey) prev();
|
|
184
|
+
else next();
|
|
185
|
+
} else if (k === "ArrowLeft" || k === "ArrowUp" || k === "PageUp") {
|
|
186
|
+
e.preventDefault();
|
|
187
|
+
prev();
|
|
188
|
+
} else if (k === "Home") {
|
|
189
|
+
e.preventDefault();
|
|
190
|
+
goTo(0);
|
|
191
|
+
} else if (k === "End") {
|
|
192
|
+
e.preventDefault();
|
|
193
|
+
goTo(stops.length - 1);
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
document.addEventListener("keydown", onKey);
|
|
197
|
+
return () => document.removeEventListener("keydown", onKey);
|
|
198
|
+
}, [
|
|
199
|
+
next,
|
|
200
|
+
prev,
|
|
201
|
+
goTo,
|
|
202
|
+
stops.length
|
|
203
|
+
]);
|
|
204
|
+
const nameOf = (el, i) => {
|
|
205
|
+
const txt = (el.querySelector("h1,h2,h3") ?? el.querySelector("p"))?.textContent?.trim() ?? el.id ?? "";
|
|
206
|
+
return `${i + 1} de ${stops.length}${txt ? `. ${txt.slice(0, 44)}` : ""}`;
|
|
207
|
+
};
|
|
208
|
+
return {
|
|
209
|
+
stops,
|
|
210
|
+
current,
|
|
211
|
+
goTo,
|
|
212
|
+
next,
|
|
213
|
+
prev,
|
|
214
|
+
nameOf
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
//#endregion
|
|
218
|
+
export { useDeckNavigation };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { DeckFooterProps } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* DeckFooter is the last stop of a talk: a full screen with the halo, the logo, the tagline,
|
|
4
|
+
* the networks, the thanks and the signature, all centered.
|
|
5
|
+
*/
|
|
6
|
+
export declare function DeckFooter({ tagline, networks, thanks, copyright, homeHref, homeLabel, className, }: DeckFooterProps): import("react").JSX.Element;
|