matrix-design-system 1.0.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 +21 -0
- package/README.md +95 -0
- package/dist/atoms/animation/motion-div/index.d.mts +2 -0
- package/dist/atoms/animation/motion-div/motion-div.d.mts +7 -0
- package/dist/atoms/animation/motion-div/motion-div.mjs +37 -0
- package/dist/atoms/animation/motion-div/use-motion-div-store.mjs +17 -0
- package/dist/atoms/buttons/button/button.d.mts +8 -0
- package/dist/atoms/buttons/button/button.mjs +12 -0
- package/dist/atoms/buttons/button/index.d.mts +2 -0
- package/dist/atoms/buttons/switch/index.d.mts +2 -0
- package/dist/atoms/buttons/switch/switch.d.mts +10 -0
- package/dist/atoms/buttons/switch/switch.mjs +40 -0
- package/dist/atoms/buttons/switch/use-switch-store.mjs +7 -0
- package/dist/atoms/call-to-actions/call-to-action-external-with-tracking/call-to-action-external-with-tracking.d.mts +13 -0
- package/dist/atoms/call-to-actions/call-to-action-external-with-tracking/call-to-action-external-with-tracking.mjs +30 -0
- package/dist/atoms/call-to-actions/call-to-action-external-with-tracking/index.d.mts +2 -0
- package/dist/atoms/call-to-actions/call-to-action-internal-with-tracking/call-to-action-internal-with-tracking.d.mts +14 -0
- package/dist/atoms/call-to-actions/call-to-action-internal-with-tracking/call-to-action-internal-with-tracking.mjs +29 -0
- package/dist/atoms/call-to-actions/call-to-action-internal-with-tracking/index.d.mts +2 -0
- package/dist/atoms/chip/chip.d.mts +10 -0
- package/dist/atoms/chip/chip.mjs +10 -0
- package/dist/atoms/chip/index.d.mts +2 -0
- package/dist/atoms/effects/glassmorphism-background/glassmorphism-background.d.mts +8 -0
- package/dist/atoms/effects/glassmorphism-background/glassmorphism-background.mjs +33 -0
- package/dist/atoms/effects/glassmorphism-background/index.d.mts +2 -0
- package/dist/atoms/effects/glassmorphism-background/use-glassmorphism-background-store.mjs +17 -0
- package/dist/atoms/effects/image-glow/image-glow.d.mts +12 -0
- package/dist/atoms/effects/image-glow/image-glow.mjs +20 -0
- package/dist/atoms/effects/image-glow/index.d.mts +2 -0
- package/dist/atoms/effects/image-shimmer-placeholder/image-shimmer-placeholder.d.mts +6 -0
- package/dist/atoms/effects/image-shimmer-placeholder/image-shimmer-placeholder.mjs +22 -0
- package/dist/atoms/effects/image-shimmer-placeholder/index.d.mts +2 -0
- package/dist/atoms/effects/matrix-rain/matrix-rain/index.d.mts +2 -0
- package/dist/atoms/effects/matrix-rain/matrix-rain/matrix-2d-canvas/debounce.mjs +12 -0
- package/dist/atoms/effects/matrix-rain/matrix-rain/matrix-2d-canvas/matrix-2d-canvas.mjs +25 -0
- package/dist/atoms/effects/matrix-rain/matrix-rain/matrix-2d-canvas/use-matrix-2d-canvas-store.mjs +186 -0
- package/dist/atoms/effects/matrix-rain/matrix-rain/matrix-rain.d.mts +5 -0
- package/dist/atoms/effects/matrix-rain/matrix-rain/matrix-rain.mjs +68 -0
- package/dist/atoms/effects/matrix-rain/matrix-rain/use-matrix-rain-activity.mjs +40 -0
- package/dist/atoms/effects/matrix-rain/matrix-rain/use-matrix-rain-store.mjs +69 -0
- package/dist/atoms/effects/overlay/index.d.mts +2 -0
- package/dist/atoms/effects/overlay/overlay.d.mts +11 -0
- package/dist/atoms/effects/overlay/overlay.mjs +61 -0
- package/dist/atoms/effects/overlay/use-overlay-store.mjs +8 -0
- package/dist/atoms/effects/pills/index.d.mts +2 -0
- package/dist/atoms/effects/pills/pills.d.mts +10 -0
- package/dist/atoms/effects/pills/pills.mjs +121 -0
- package/dist/atoms/effects/pills/use-pills-store.mjs +17 -0
- package/dist/atoms/effects/plain-image/index.d.mts +2 -0
- package/dist/atoms/effects/plain-image/plain-image.d.mts +45 -0
- package/dist/atoms/effects/plain-image/plain-image.mjs +140 -0
- package/dist/atoms/effects/plain-image/use-plain-image-store.mjs +62 -0
- package/dist/atoms/icons/chat-icon/chat-icon.d.mts +4 -0
- package/dist/atoms/icons/chat-icon/chat-icon.mjs +13 -0
- package/dist/atoms/icons/copy-icon/copy-icon.d.mts +6 -0
- package/dist/atoms/icons/copy-icon/copy-icon.mjs +17 -0
- package/dist/atoms/icons/rounded-icon/index.d.mts +2 -0
- package/dist/atoms/icons/rounded-icon/rounded-icon.d.mts +8 -0
- package/dist/atoms/icons/rounded-icon/rounded-icon.mjs +8 -0
- package/dist/atoms/links/anchor-link/anchor-link.d.mts +31 -0
- package/dist/atoms/links/anchor-link/anchor-link.mjs +14 -0
- package/dist/atoms/links/anchor-link/index.d.mts +2 -0
- package/dist/atoms/links/external-link/external-link.d.mts +13 -0
- package/dist/atoms/links/external-link/external-link.mjs +29 -0
- package/dist/atoms/links/external-link/index.d.mts +2 -0
- package/dist/atoms/links/internal-link/index.d.mts +2 -0
- package/dist/atoms/links/internal-link/internal-link.d.mts +15 -0
- package/dist/atoms/links/internal-link/internal-link.mjs +12 -0
- package/dist/atoms/loader/loader/index.d.mts +2 -0
- package/dist/atoms/loader/loader/loader.d.mts +10 -0
- package/dist/atoms/loader/loader/loader.mjs +62 -0
- package/dist/atoms/typography/input-field/index.d.mts +2 -0
- package/dist/atoms/typography/input-field/input-field.d.mts +9 -0
- package/dist/atoms/typography/input-field/input-field.mjs +8 -0
- package/dist/atoms/typography/label/index.d.mts +2 -0
- package/dist/atoms/typography/label/label.d.mts +9 -0
- package/dist/atoms/typography/label/label.mjs +11 -0
- package/dist/atoms/typography/markdown/markdown-plugins.mjs +16 -0
- package/dist/atoms/typography/markdown/markdown.d.mts +7 -0
- package/dist/atoms/typography/markdown/markdown.mjs +23 -0
- package/dist/atoms/typography/markdown/use-markdown-store.mjs +24 -0
- package/dist/atoms/typography/terminal-blocks/index.d.mts +2 -0
- package/dist/atoms/typography/terminal-blocks/terminal-blocks.d.mts +13 -0
- package/dist/atoms/typography/terminal-blocks/terminal-blocks.mjs +42 -0
- package/dist/atoms/typography/textarea/index.d.mts +2 -0
- package/dist/atoms/typography/textarea/textarea.d.mts +9 -0
- package/dist/atoms/typography/textarea/textarea.mjs +8 -0
- package/dist/chart.d.mts +7 -0
- package/dist/chart.mjs +4 -0
- package/dist/command-palette.d.mts +6 -0
- package/dist/command-palette.mjs +5 -0
- package/dist/hooks/use-clipboard-available.d.mts +4 -0
- package/dist/hooks/use-clipboard-available.mjs +10 -0
- package/dist/hooks/use-device-capabilities.d.mts +10 -0
- package/dist/hooks/use-device-capabilities.mjs +30 -0
- package/dist/hooks/use-glassmorphism.d.mts +10 -0
- package/dist/hooks/use-glassmorphism.mjs +9 -0
- package/dist/hooks/use-in-view-list.d.mts +7 -0
- package/dist/hooks/use-in-view-list.mjs +63 -0
- package/dist/hooks/use-in-view.d.mts +9 -0
- package/dist/hooks/use-in-view.mjs +68 -0
- package/dist/hooks/use-is-ios.d.mts +4 -0
- package/dist/hooks/use-is-ios.mjs +7 -0
- package/dist/hooks/use-lock-body-scroll.d.mts +4 -0
- package/dist/hooks/use-lock-body-scroll.mjs +40 -0
- package/dist/hooks/use-matrix-settings-store.d.mts +5 -0
- package/dist/hooks/use-matrix-settings-store.mjs +15 -0
- package/dist/hooks/use-motion-store.d.mts +13 -0
- package/dist/hooks/use-motion-store.mjs +29 -0
- package/dist/hooks/use-os-modifier-key.d.mts +5 -0
- package/dist/hooks/use-os-modifier-key.mjs +15 -0
- package/dist/hooks/use-reading-progress.d.mts +8 -0
- package/dist/hooks/use-reading-progress.mjs +49 -0
- package/dist/hooks/use-reduced-motions.d.mts +4 -0
- package/dist/hooks/use-reduced-motions.mjs +10 -0
- package/dist/hooks/use-scroll-direction.d.mts +8 -0
- package/dist/hooks/use-scroll-direction.mjs +43 -0
- package/dist/hooks/use-typewriter.d.mts +15 -0
- package/dist/hooks/use-typewriter.mjs +89 -0
- package/dist/hooks/use-webgpu-supported.d.mts +4 -0
- package/dist/hooks/use-webgpu-supported.mjs +16 -0
- package/dist/index.d.mts +153 -0
- package/dist/index.mjs +88 -0
- package/dist/markdown.d.mts +2 -0
- package/dist/markdown.mjs +2 -0
- package/dist/molecules/accordion/accordion/accordion.d.mts +12 -0
- package/dist/molecules/accordion/accordion/accordion.mjs +130 -0
- package/dist/molecules/accordion/accordion/index.d.mts +2 -0
- package/dist/molecules/accordion/accordion/use-accordion-store.mjs +55 -0
- package/dist/molecules/breadcrumbs/breadcrumb/breadcrumb.d.mts +21 -0
- package/dist/molecules/breadcrumbs/breadcrumb/breadcrumb.mjs +186 -0
- package/dist/molecules/breadcrumbs/breadcrumb/index.d.mts +2 -0
- package/dist/molecules/breadcrumbs/breadcrumb/use-breadcrumb-store.mjs +29 -0
- package/dist/molecules/buttons/pagination-navigation/index.d.mts +2 -0
- package/dist/molecules/buttons/pagination-navigation/pagination-navigation.d.mts +11 -0
- package/dist/molecules/buttons/pagination-navigation/pagination-navigation.mjs +17 -0
- package/dist/molecules/buttons/pills-buttons/index.d.mts +2 -0
- package/dist/molecules/buttons/pills-buttons/pills-buttons.d.mts +10 -0
- package/dist/molecules/buttons/pills-buttons/pills-buttons.mjs +55 -0
- package/dist/molecules/buttons/segmented-control/segmented-control.d.mts +13 -0
- package/dist/molecules/buttons/segmented-control/segmented-control.mjs +46 -0
- package/dist/molecules/buttons/segmented-control/use-segmented-control-store.mjs +8 -0
- package/dist/molecules/buttons/social-contact/index.d.mts +2 -0
- package/dist/molecules/buttons/social-contact/social-contact.d.mts +10 -0
- package/dist/molecules/buttons/social-contact/social-contact.mjs +13 -0
- package/dist/molecules/buttons/tag/index.d.mts +2 -0
- package/dist/molecules/buttons/tag/tag.d.mts +17 -0
- package/dist/molecules/buttons/tag/tag.mjs +20 -0
- package/dist/molecules/buttons/terminal-button/index.d.mts +2 -0
- package/dist/molecules/buttons/terminal-button/terminal-button.d.mts +15 -0
- package/dist/molecules/buttons/terminal-button/terminal-button.mjs +38 -0
- package/dist/molecules/chart/chart-panel/chart-panel.d.mts +9 -0
- package/dist/molecules/chart/chart-panel/chart-panel.mjs +12 -0
- package/dist/molecules/chart/chart-panel/index.d.mts +2 -0
- package/dist/molecules/chart/chart-tooltip/chart-tooltip.d.mts +8 -0
- package/dist/molecules/chart/chart-tooltip/chart-tooltip.mjs +18 -0
- package/dist/molecules/chart/chart-tooltip/index.d.mts +2 -0
- package/dist/molecules/chart/donut-chart/donut-chart.d.mts +15 -0
- package/dist/molecules/chart/donut-chart/donut-chart.mjs +142 -0
- package/dist/molecules/chart/donut-chart/index.d.mts +2 -0
- package/dist/molecules/containers/content-container/content-container.d.mts +5 -0
- package/dist/molecules/containers/content-container/content-container.mjs +8 -0
- package/dist/molecules/containers/content-container/index.d.mts +2 -0
- package/dist/molecules/controls/control-slider/control-slider.d.mts +14 -0
- package/dist/molecules/controls/control-slider/control-slider.mjs +76 -0
- package/dist/molecules/controls/control-slider/index.d.mts +2 -0
- package/dist/molecules/controls/control-slider/use-control-slider-store.mjs +10 -0
- package/dist/molecules/effects/matrix-background/index.d.mts +2 -0
- package/dist/molecules/effects/matrix-background/matrix-background.d.mts +8 -0
- package/dist/molecules/effects/matrix-background/matrix-background.mjs +15 -0
- package/dist/molecules/effects/matrix-header-background/index.d.mts +2 -0
- package/dist/molecules/effects/matrix-header-background/matrix-header-background.d.mts +8 -0
- package/dist/molecules/effects/matrix-header-background/matrix-header-background.mjs +14 -0
- package/dist/molecules/effects/matrix-terminal/index.d.mts +2 -0
- package/dist/molecules/effects/matrix-terminal/matrix-terminal.d.mts +15 -0
- package/dist/molecules/effects/matrix-terminal/matrix-terminal.mjs +101 -0
- package/dist/molecules/effects/matrix-terminal/use-matrix-terminal-store.mjs +59 -0
- package/dist/molecules/form/filter-input/filter-input.d.mts +10 -0
- package/dist/molecules/form/filter-input/filter-input.mjs +35 -0
- package/dist/molecules/form/filter-input/index.d.mts +2 -0
- package/dist/molecules/form/form-error-summary/form-error-summary.d.mts +10 -0
- package/dist/molecules/form/form-error-summary/form-error-summary.mjs +71 -0
- package/dist/molecules/form/form-error-summary/index.d.mts +2 -0
- package/dist/molecules/form/form-field/form-field.d.mts +10 -0
- package/dist/molecules/form/form-field/form-field.mjs +60 -0
- package/dist/molecules/form/form-field/index.d.mts +2 -0
- package/dist/molecules/form/form-success-message/form-success-message.d.mts +8 -0
- package/dist/molecules/form/form-success-message/form-success-message.mjs +21 -0
- package/dist/molecules/form/form-success-message/index.d.mts +2 -0
- package/dist/molecules/form/form-textarea/form-textarea.d.mts +10 -0
- package/dist/molecules/form/form-textarea/form-textarea.mjs +60 -0
- package/dist/molecules/form/form-textarea/index.d.mts +2 -0
- package/dist/molecules/lightbox-image/index.d.mts +2 -0
- package/dist/molecules/lightbox-image/lightbox-image.d.mts +6 -0
- package/dist/molecules/lightbox-image/lightbox-image.mjs +49 -0
- package/dist/molecules/lightbox-image/use-lightbox-image-store.mjs +29 -0
- package/dist/molecules/links/pills-links/index.d.mts +2 -0
- package/dist/molecules/links/pills-links/pills-links.d.mts +13 -0
- package/dist/molecules/links/pills-links/pills-links.mjs +60 -0
- package/dist/molecules/menu/close/close.d.mts +8 -0
- package/dist/molecules/menu/close/close.mjs +9 -0
- package/dist/molecules/menu/close/index.d.mts +2 -0
- package/dist/molecules/menu/dropdown-menu/dropdown-menu.d.mts +25 -0
- package/dist/molecules/menu/dropdown-menu/dropdown-menu.mjs +143 -0
- package/dist/molecules/menu/dropdown-menu/index.d.mts +2 -0
- package/dist/molecules/menu/dropdown-menu/use-dropdown-menu-store.mjs +108 -0
- package/dist/molecules/menu/hamburger-menu/hamburger-menu.d.mts +8 -0
- package/dist/molecules/menu/hamburger-menu/hamburger-menu.mjs +9 -0
- package/dist/molecules/menu/hamburger-menu/index.d.mts +2 -0
- package/dist/molecules/menu/menu-item/index.d.mts +2 -0
- package/dist/molecules/menu/menu-item/menu-item.d.mts +16 -0
- package/dist/molecules/menu/menu-item/menu-item.mjs +65 -0
- package/dist/molecules/menu/menu-item/use-menu-item-store.mjs +10 -0
- package/dist/molecules/stat-card/index.d.mts +2 -0
- package/dist/molecules/stat-card/stat-card.d.mts +10 -0
- package/dist/molecules/stat-card/stat-card.mjs +21 -0
- package/dist/molecules/terminal-list-item/index.d.mts +2 -0
- package/dist/molecules/terminal-list-item/terminal-list-item.d.mts +9 -0
- package/dist/molecules/terminal-list-item/terminal-list-item.mjs +13 -0
- package/dist/molecules/terminal-progress-bar/index.d.mts +2 -0
- package/dist/molecules/terminal-progress-bar/terminal-progress-bar.d.mts +11 -0
- package/dist/molecules/terminal-progress-bar/terminal-progress-bar.mjs +20 -0
- package/dist/molecules/typography/page-title/index.d.mts +2 -0
- package/dist/molecules/typography/page-title/page-title.d.mts +5 -0
- package/dist/molecules/typography/page-title/page-title.mjs +8 -0
- package/dist/molecules/typography/paragraph-title-with-icon/index.d.mts +2 -0
- package/dist/molecules/typography/paragraph-title-with-icon/paragraph-title-with-icon.d.mts +8 -0
- package/dist/molecules/typography/paragraph-title-with-icon/paragraph-title-with-icon.mjs +13 -0
- package/dist/molecules/typography/section-heading/index.d.mts +2 -0
- package/dist/molecules/typography/section-heading/section-heading.d.mts +9 -0
- package/dist/molecules/typography/section-heading/section-heading.mjs +17 -0
- package/dist/molecules/video/self-hosted-video/index.d.mts +2 -0
- package/dist/molecules/video/self-hosted-video/self-hosted-video.d.mts +17 -0
- package/dist/molecules/video/self-hosted-video/self-hosted-video.mjs +39 -0
- package/dist/molecules/video/youtube/index.d.mts +2 -0
- package/dist/molecules/video/youtube/youtube.d.mts +9 -0
- package/dist/molecules/video/youtube/youtube.mjs +12 -0
- package/dist/organism/command-palette/command-palette/command-palette.d.mts +12 -0
- package/dist/organism/command-palette/command-palette/command-palette.mjs +148 -0
- package/dist/organism/command-palette/command-palette/index.d.mts +2 -0
- package/dist/organism/command-palette/command-palette/use-command-palette-store.mjs +121 -0
- package/dist/organism/command-palette/command-palette-group/command-palette-group.d.mts +9 -0
- package/dist/organism/command-palette/command-palette-group/command-palette-group.mjs +24 -0
- package/dist/organism/command-palette/command-palette-group/index.d.mts +2 -0
- package/dist/organism/command-palette/command-palette-item/command-palette-item.d.mts +11 -0
- package/dist/organism/command-palette/command-palette-item/command-palette-item.mjs +29 -0
- package/dist/organism/command-palette/command-palette-item/index.d.mts +2 -0
- package/dist/organism/command-palette/command-palette-item/use-command-palette-item-store.mjs +30 -0
- package/dist/organism/command-palette/index.d.mts +9 -0
- package/dist/organism/command-palette/toggle-motion-item/index.d.mts +2 -0
- package/dist/organism/command-palette/toggle-motion-item/toggle-motion-item.d.mts +8 -0
- package/dist/organism/command-palette/toggle-motion-item/toggle-motion-item.mjs +63 -0
- package/dist/organism/command-palette/toggle-motion-item/use-toggle-motion-item-store.mjs +45 -0
- package/dist/organism/cookie-consent-banner/cookie-consent-banner.d.mts +9 -0
- package/dist/organism/cookie-consent-banner/cookie-consent-banner.mjs +71 -0
- package/dist/organism/cookie-consent-banner/use-cookie-consent-banner-store.mjs +10 -0
- package/dist/organism/footer/footer.d.mts +26 -0
- package/dist/organism/footer/footer.mjs +193 -0
- package/dist/organism/footer/index.d.mts +3 -0
- package/dist/organism/footer/use-footer-store.d.mts +22 -0
- package/dist/organism/footer/use-footer-store.mjs +57 -0
- package/dist/organism/header/brand-header/brand-header.d.mts +14 -0
- package/dist/organism/header/brand-header/brand-header.mjs +132 -0
- package/dist/organism/header/brand-header/index.d.mts +2 -0
- package/dist/organism/image-carousel/fullscreen-modal/fullscreen-modal.mjs +148 -0
- package/dist/organism/image-carousel/fullscreen-modal/use-fullscreen-modal-store.mjs +129 -0
- package/dist/organism/image-carousel/image-carousel.d.mts +14 -0
- package/dist/organism/image-carousel/image-carousel.mjs +225 -0
- package/dist/organism/image-carousel/index.d.mts +2 -0
- package/dist/organism/image-carousel/navigation-buttons/navigation-buttons.mjs +22 -0
- package/dist/organism/image-carousel/navigation-buttons/use-navigation-buttons-store.mjs +18 -0
- package/dist/organism/image-carousel/page-indicators/page-indicator-button/page-indicator-button.mjs +14 -0
- package/dist/organism/image-carousel/page-indicators/page-indicator-button/use-page-indicator-button-store.mjs +11 -0
- package/dist/organism/image-carousel/page-indicators/page-indicators.mjs +20 -0
- package/dist/organism/image-carousel/use-image-carousel-store.mjs +88 -0
- package/dist/organism/lightbox/index.d.mts +2 -0
- package/dist/organism/lightbox/lightbox.d.mts +5 -0
- package/dist/organism/lightbox/lightbox.mjs +100 -0
- package/dist/organism/lightbox/use-lightbox-store.mjs +120 -0
- package/dist/organism/loading-bar/loading-bar.d.mts +7 -0
- package/dist/organism/loading-bar/loading-bar.mjs +48 -0
- package/dist/organism/loading-bar/use-loading-bar-store.mjs +52 -0
- package/dist/organism/menu/index.d.mts +3 -0
- package/dist/organism/menu/menu.d.mts +33 -0
- package/dist/organism/menu/menu.mjs +396 -0
- package/dist/organism/menu/use-menu-store.d.mts +22 -0
- package/dist/organism/menu/use-menu-store.mjs +265 -0
- package/dist/organism/profile-hero/index.d.mts +2 -0
- package/dist/organism/profile-hero/profile-hero.d.mts +15 -0
- package/dist/organism/profile-hero/profile-hero.mjs +72 -0
- package/dist/organism/profile-photo/index.d.mts +2 -0
- package/dist/organism/profile-photo/profile-photo.d.mts +12 -0
- package/dist/organism/profile-photo/profile-photo.mjs +17 -0
- package/dist/organism/reading-content-progress-bar/index.d.mts +2 -0
- package/dist/organism/reading-content-progress-bar/reading-content-progress-bar.d.mts +8 -0
- package/dist/organism/reading-content-progress-bar/reading-content-progress-bar.mjs +76 -0
- package/dist/organism/reading-content-progress-bar/use-reading-content-progress-bar-store.mjs +29 -0
- package/dist/organism/social-contacts/index.d.mts +2 -0
- package/dist/organism/social-contacts/social-contacts.d.mts +29 -0
- package/dist/organism/social-contacts/social-contacts.mjs +78 -0
- package/dist/state/command-palette/command-palette-context.d.mts +9 -0
- package/dist/state/command-palette/command-palette-context.mjs +10 -0
- package/dist/state/command-palette/command-palette-events.d.mts +11 -0
- package/dist/state/command-palette/command-palette-events.mjs +15 -0
- package/dist/state/command-palette/command-palette-trigger.d.mts +8 -0
- package/dist/state/lightbox/lightbox-events.d.mts +9 -0
- package/dist/state/lightbox/lightbox-events.mjs +7 -0
- package/dist/state/matrix-rain/matrix-settings.d.mts +37 -0
- package/dist/state/matrix-rain/matrix-settings.mjs +122 -0
- package/dist/state/motion/motion.d.mts +6 -0
- package/dist/state/motion/motion.mjs +17 -0
- package/package.json +160 -0
- package/src/styles/base.css +130 -0
- package/src/styles/components.css +57 -0
- package/src/styles/index.css +23 -0
- package/src/styles/pills.css +85 -0
- package/src/styles/theme.css +254 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
//#region src/atoms/typography/terminal-blocks/terminal-blocks.tsx
|
|
3
|
+
/**
|
|
4
|
+
* Expressed as a lookup rather than an appended `className` because the two sets are both font-size
|
|
5
|
+
* utilities: which one wins would come down to their order in the generated stylesheet, not to the
|
|
6
|
+
* order they are written in. There is no tailwind-merge in this project to arbitrate that.
|
|
7
|
+
*/
|
|
8
|
+
const TERMINAL_LINE_SIZE_CLASS = {
|
|
9
|
+
sm: "text-xs sm:text-sm",
|
|
10
|
+
md: "text-sm sm:text-base",
|
|
11
|
+
lg: "text-base sm:text-lg"
|
|
12
|
+
};
|
|
13
|
+
const TerminalLine = ({ children, size = "sm" }) => {
|
|
14
|
+
return /* @__PURE__ */ jsx("div", {
|
|
15
|
+
className: `text-shadow-md mb-2 font-mono font-bold leading-tight text-accent break-words ${TERMINAL_LINE_SIZE_CLASS[size]}`,
|
|
16
|
+
children
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
const TerminalQuoteLine = ({ children }) => {
|
|
20
|
+
return /* @__PURE__ */ jsx("div", {
|
|
21
|
+
className: "my-2 leading-tight break-words text-xs sm:text-sm text-center",
|
|
22
|
+
children
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
const Cursor = () => /* @__PURE__ */ jsx("span", {
|
|
26
|
+
className: "animate-blink",
|
|
27
|
+
children: "_"
|
|
28
|
+
});
|
|
29
|
+
const ErrorText = ({ children }) => /* @__PURE__ */ jsx("span", {
|
|
30
|
+
className: "text-confirm font-bold",
|
|
31
|
+
children
|
|
32
|
+
});
|
|
33
|
+
const SuccessText = ({ children }) => /* @__PURE__ */ jsx("span", {
|
|
34
|
+
className: "text-accent text-shadow-md",
|
|
35
|
+
children
|
|
36
|
+
});
|
|
37
|
+
const QuoteText = ({ children }) => /* @__PURE__ */ jsx("span", {
|
|
38
|
+
className: "w-full text-center font-bold text-accent italic m-6 font-mono",
|
|
39
|
+
children
|
|
40
|
+
});
|
|
41
|
+
//#endregion
|
|
42
|
+
export { Cursor, ErrorText, QuoteText, SuccessText, TerminalLine, TerminalQuoteLine };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FC, RefObject } from "react";
|
|
2
|
+
//#region src/atoms/typography/textarea/textarea.d.ts
|
|
3
|
+
interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {
|
|
4
|
+
className?: string;
|
|
5
|
+
ref?: RefObject<HTMLTextAreaElement | null>;
|
|
6
|
+
}
|
|
7
|
+
declare const Textarea: FC<TextareaProps>;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { Textarea };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
//#region src/atoms/typography/textarea/textarea.tsx
|
|
3
|
+
const Textarea = ({ className, ...props }) => /* @__PURE__ */ jsx("textarea", {
|
|
4
|
+
className: `glow-container w-full rounded-xl bg-none outline-none text-accent${className ? ` ${className}` : ""}`,
|
|
5
|
+
...props
|
|
6
|
+
});
|
|
7
|
+
//#endregion
|
|
8
|
+
export { Textarea };
|
package/dist/chart.d.mts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ChartPanel, ChartPanelProps } from "./molecules/chart/chart-panel/chart-panel.mjs";
|
|
2
|
+
import "./molecules/chart/chart-panel/index.mjs";
|
|
3
|
+
import { ChartTooltip, ChartTooltipProps } from "./molecules/chart/chart-tooltip/chart-tooltip.mjs";
|
|
4
|
+
import "./molecules/chart/chart-tooltip/index.mjs";
|
|
5
|
+
import { DonutChart, DonutDatum } from "./molecules/chart/donut-chart/donut-chart.mjs";
|
|
6
|
+
import "./molecules/chart/donut-chart/index.mjs";
|
|
7
|
+
export { ChartPanel, type ChartPanelProps, ChartTooltip, type ChartTooltipProps, DonutChart, type DonutDatum };
|
package/dist/chart.mjs
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ChartPanel } from "./molecules/chart/chart-panel/chart-panel.mjs";
|
|
2
|
+
import { ChartTooltip } from "./molecules/chart/chart-tooltip/chart-tooltip.mjs";
|
|
3
|
+
import { DonutChart } from "./molecules/chart/donut-chart/donut-chart.mjs";
|
|
4
|
+
export { ChartPanel, ChartTooltip, DonutChart };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { CommandPalette, CommandPaletteProps } from "./organism/command-palette/command-palette/command-palette.mjs";
|
|
2
|
+
import { CommandPaletteGroup, CommandPaletteGroupProps } from "./organism/command-palette/command-palette-group/command-palette-group.mjs";
|
|
3
|
+
import { CommandPaletteItem, CommandPaletteItemProps } from "./organism/command-palette/command-palette-item/command-palette-item.mjs";
|
|
4
|
+
import { ToggleMotionItem, ToggleMotionItemProps } from "./organism/command-palette/toggle-motion-item/toggle-motion-item.mjs";
|
|
5
|
+
import "./organism/command-palette/index.mjs";
|
|
6
|
+
export { CommandPalette, CommandPaletteGroup, type CommandPaletteGroupProps, CommandPaletteItem, type CommandPaletteItemProps, type CommandPaletteProps, ToggleMotionItem, type ToggleMotionItemProps };
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { CommandPalette } from "./organism/command-palette/command-palette/command-palette.mjs";
|
|
2
|
+
import { CommandPaletteGroup } from "./organism/command-palette/command-palette-group/command-palette-group.mjs";
|
|
3
|
+
import { CommandPaletteItem } from "./organism/command-palette/command-palette-item/command-palette-item.mjs";
|
|
4
|
+
import { ToggleMotionItem } from "./organism/command-palette/toggle-motion-item/toggle-motion-item.mjs";
|
|
5
|
+
export { CommandPalette, CommandPaletteGroup, CommandPaletteItem, ToggleMotionItem };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { useSyncExternalStore } from "react";
|
|
2
|
+
//#region src/hooks/use-clipboard-available.ts
|
|
3
|
+
const subscribe = () => () => {};
|
|
4
|
+
const getSnapshot = () => !!navigator.clipboard;
|
|
5
|
+
const getServerSnapshot = () => false;
|
|
6
|
+
const useClipboardAvailable = () => {
|
|
7
|
+
return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
|
|
8
|
+
};
|
|
9
|
+
//#endregion
|
|
10
|
+
export { useClipboardAvailable };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region src/hooks/use-device-capabilities.d.ts
|
|
2
|
+
interface DeviceCapabilities {
|
|
3
|
+
deviceMemory: number | undefined;
|
|
4
|
+
cores: number;
|
|
5
|
+
saveData: boolean;
|
|
6
|
+
isLowEnd: boolean;
|
|
7
|
+
}
|
|
8
|
+
declare function useDeviceCapabilities(): DeviceCapabilities;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { useDeviceCapabilities };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { useSyncExternalStore } from "react";
|
|
2
|
+
//#region src/hooks/use-device-capabilities.ts
|
|
3
|
+
const defaults = {
|
|
4
|
+
deviceMemory: void 0,
|
|
5
|
+
cores: 4,
|
|
6
|
+
saveData: false,
|
|
7
|
+
isLowEnd: false
|
|
8
|
+
};
|
|
9
|
+
const computeCapabilities = () => {
|
|
10
|
+
if (typeof navigator === "undefined") return defaults;
|
|
11
|
+
const nav = navigator;
|
|
12
|
+
const deviceMemory = nav.deviceMemory;
|
|
13
|
+
const cores = nav.hardwareConcurrency ?? 4;
|
|
14
|
+
const saveData = nav.connection?.saveData ?? false;
|
|
15
|
+
return {
|
|
16
|
+
deviceMemory,
|
|
17
|
+
cores,
|
|
18
|
+
saveData,
|
|
19
|
+
isLowEnd: deviceMemory != null && deviceMemory <= 2 || cores <= 2 || saveData
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
const capabilities = computeCapabilities();
|
|
23
|
+
const subscribe = () => () => {};
|
|
24
|
+
const getSnapshot = () => capabilities;
|
|
25
|
+
const getServerSnapshot = () => defaults;
|
|
26
|
+
function useDeviceCapabilities() {
|
|
27
|
+
return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
30
|
+
export { useDeviceCapabilities };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region src/hooks/use-glassmorphism.d.ts
|
|
2
|
+
interface UseGlassmorphismOptions {
|
|
3
|
+
noScale?: boolean;
|
|
4
|
+
increaseContrast?: boolean;
|
|
5
|
+
}
|
|
6
|
+
declare const useGlassmorphism: ({ noScale, increaseContrast }?: UseGlassmorphismOptions) => {
|
|
7
|
+
glassmorphismClass: string;
|
|
8
|
+
};
|
|
9
|
+
//#endregion
|
|
10
|
+
export { useGlassmorphism };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { useReducedMotions } from "./use-reduced-motions.mjs";
|
|
2
|
+
//#region src/hooks/use-glassmorphism.ts
|
|
3
|
+
const useGlassmorphism = ({ noScale = false, increaseContrast = false } = {}) => {
|
|
4
|
+
const shouldReduceMotion = useReducedMotions();
|
|
5
|
+
const increaseContrastRule = increaseContrast ? "backdrop-blur-2xl!" : "";
|
|
6
|
+
return { glassmorphismClass: !shouldReduceMotion ? `glassmorphism${noScale ? "-no-scale" : ""} ${increaseContrastRule}` : `glassmorphism-lite${noScale ? "-no-scale" : ""} ${increaseContrastRule}` };
|
|
7
|
+
};
|
|
8
|
+
//#endregion
|
|
9
|
+
export { useGlassmorphism };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
//#region src/hooks/use-in-view-list.d.ts
|
|
2
|
+
interface UseInViewListOptions {
|
|
3
|
+
rootMargin: string;
|
|
4
|
+
}
|
|
5
|
+
declare const useInViewList: <T extends HTMLElement = HTMLDivElement>({ rootMargin }: UseInViewListOptions) => [(el: T | null) => void, boolean];
|
|
6
|
+
//#endregion
|
|
7
|
+
export { useInViewList };
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { c } from "react/compiler-runtime";
|
|
3
|
+
import { useEffect, useState } from "react";
|
|
4
|
+
//#region src/hooks/use-in-view-list.ts
|
|
5
|
+
const observers = /* @__PURE__ */ new Map();
|
|
6
|
+
const observersIntersectionCallbacks = /* @__PURE__ */ new Map();
|
|
7
|
+
function getObserver(rootMargin) {
|
|
8
|
+
if (!observers.has(rootMargin)) {
|
|
9
|
+
const observer = new IntersectionObserver((entries) => {
|
|
10
|
+
entries.forEach((entry) => {
|
|
11
|
+
observersIntersectionCallbacks.get(entry.target)?.(entry.isIntersecting);
|
|
12
|
+
});
|
|
13
|
+
}, { rootMargin });
|
|
14
|
+
observers.set(rootMargin, observer);
|
|
15
|
+
}
|
|
16
|
+
return observers.get(rootMargin);
|
|
17
|
+
}
|
|
18
|
+
const useInViewList = (t0) => {
|
|
19
|
+
const $ = c(7);
|
|
20
|
+
const { rootMargin } = t0;
|
|
21
|
+
const [element, setElement] = useState(null);
|
|
22
|
+
const [isInView, setIsInView] = useState(false);
|
|
23
|
+
let t1;
|
|
24
|
+
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
|
|
25
|
+
t1 = (el) => setElement(el);
|
|
26
|
+
$[0] = t1;
|
|
27
|
+
} else t1 = $[0];
|
|
28
|
+
const setEl = t1;
|
|
29
|
+
let t2;
|
|
30
|
+
let t3;
|
|
31
|
+
if ($[1] !== element || $[2] !== rootMargin) {
|
|
32
|
+
t2 = () => {
|
|
33
|
+
if (!element) return;
|
|
34
|
+
observersIntersectionCallbacks.set(element, (isIntersecting) => {
|
|
35
|
+
if (isIntersecting) setIsInView(true);
|
|
36
|
+
});
|
|
37
|
+
const observer = getObserver(rootMargin);
|
|
38
|
+
observer.observe(element);
|
|
39
|
+
return () => {
|
|
40
|
+
observer.unobserve(element);
|
|
41
|
+
observersIntersectionCallbacks.delete(element);
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
t3 = [rootMargin, element];
|
|
45
|
+
$[1] = element;
|
|
46
|
+
$[2] = rootMargin;
|
|
47
|
+
$[3] = t2;
|
|
48
|
+
$[4] = t3;
|
|
49
|
+
} else {
|
|
50
|
+
t2 = $[3];
|
|
51
|
+
t3 = $[4];
|
|
52
|
+
}
|
|
53
|
+
useEffect(t2, t3);
|
|
54
|
+
let t4;
|
|
55
|
+
if ($[5] !== isInView) {
|
|
56
|
+
t4 = [setEl, isInView];
|
|
57
|
+
$[5] = isInView;
|
|
58
|
+
$[6] = t4;
|
|
59
|
+
} else t4 = $[6];
|
|
60
|
+
return t4;
|
|
61
|
+
};
|
|
62
|
+
//#endregion
|
|
63
|
+
export { useInViewList };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
//#region src/hooks/use-in-view.d.ts
|
|
2
|
+
interface UseInViewOptions {
|
|
3
|
+
threshold?: number;
|
|
4
|
+
rootMargin?: string;
|
|
5
|
+
triggerOnce?: boolean;
|
|
6
|
+
}
|
|
7
|
+
declare const useInView: <T extends HTMLElement = HTMLDivElement>(options?: UseInViewOptions) => [element: React.RefObject<T | null>, boolean];
|
|
8
|
+
//#endregion
|
|
9
|
+
export { useInView };
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { c } from "react/compiler-runtime";
|
|
3
|
+
import { useEffect, useRef, useState } from "react";
|
|
4
|
+
//#region src/hooks/use-in-view.ts
|
|
5
|
+
const useInView = (t0) => {
|
|
6
|
+
const $ = c(10);
|
|
7
|
+
let t1;
|
|
8
|
+
if ($[0] !== t0) {
|
|
9
|
+
t1 = t0 === void 0 ? {} : t0;
|
|
10
|
+
$[0] = t0;
|
|
11
|
+
$[1] = t1;
|
|
12
|
+
} else t1 = $[1];
|
|
13
|
+
const { threshold: t2, rootMargin: t3, triggerOnce: t4 } = t1;
|
|
14
|
+
const threshold = t2 === void 0 ? .1 : t2;
|
|
15
|
+
const rootMargin = t3 === void 0 ? "0px" : t3;
|
|
16
|
+
const triggerOnce = t4 === void 0 ? false : t4;
|
|
17
|
+
const ref = useRef(null);
|
|
18
|
+
const [isInView, setIsInView] = useState(false);
|
|
19
|
+
let t5;
|
|
20
|
+
let t6;
|
|
21
|
+
if ($[2] !== isInView || $[3] !== rootMargin || $[4] !== threshold || $[5] !== triggerOnce) {
|
|
22
|
+
t5 = () => {
|
|
23
|
+
const element = ref.current;
|
|
24
|
+
if (!element) return;
|
|
25
|
+
if (triggerOnce && isInView) return;
|
|
26
|
+
const observer = new IntersectionObserver((entries) => {
|
|
27
|
+
entries.forEach((entry) => {
|
|
28
|
+
if (entry.isIntersecting) {
|
|
29
|
+
setIsInView(true);
|
|
30
|
+
if (triggerOnce) observer.disconnect();
|
|
31
|
+
} else if (!triggerOnce) setIsInView(false);
|
|
32
|
+
});
|
|
33
|
+
}, {
|
|
34
|
+
threshold,
|
|
35
|
+
rootMargin
|
|
36
|
+
});
|
|
37
|
+
observer.observe(element);
|
|
38
|
+
return () => {
|
|
39
|
+
observer.disconnect();
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
t6 = [
|
|
43
|
+
threshold,
|
|
44
|
+
rootMargin,
|
|
45
|
+
triggerOnce,
|
|
46
|
+
isInView
|
|
47
|
+
];
|
|
48
|
+
$[2] = isInView;
|
|
49
|
+
$[3] = rootMargin;
|
|
50
|
+
$[4] = threshold;
|
|
51
|
+
$[5] = triggerOnce;
|
|
52
|
+
$[6] = t5;
|
|
53
|
+
$[7] = t6;
|
|
54
|
+
} else {
|
|
55
|
+
t5 = $[6];
|
|
56
|
+
t6 = $[7];
|
|
57
|
+
}
|
|
58
|
+
useEffect(t5, t6);
|
|
59
|
+
let t7;
|
|
60
|
+
if ($[8] !== isInView) {
|
|
61
|
+
t7 = [ref, isInView];
|
|
62
|
+
$[8] = isInView;
|
|
63
|
+
$[9] = t7;
|
|
64
|
+
} else t7 = $[9];
|
|
65
|
+
return t7;
|
|
66
|
+
};
|
|
67
|
+
//#endregion
|
|
68
|
+
export { useInView };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { useIsIOS } from "./use-is-ios.mjs";
|
|
2
|
+
import { useLayoutEffect } from "react";
|
|
3
|
+
//#region src/hooks/use-lock-body-scroll.ts
|
|
4
|
+
const useLockBodyScroll = () => {
|
|
5
|
+
const isIOS = useIsIOS();
|
|
6
|
+
useLayoutEffect(() => {
|
|
7
|
+
const scrollBarWidth = window.innerWidth - document.documentElement.clientWidth;
|
|
8
|
+
const originalOverflow = document.documentElement.style.overflow;
|
|
9
|
+
const originalPaddingRight = document.documentElement.style.paddingRight;
|
|
10
|
+
let originalBodyPosition = "";
|
|
11
|
+
let originalBodyTop = "";
|
|
12
|
+
let scrollY = 0;
|
|
13
|
+
document.documentElement.style.overflow = "hidden";
|
|
14
|
+
if (isIOS) {
|
|
15
|
+
originalBodyPosition = document.body.style.position;
|
|
16
|
+
originalBodyTop = document.body.style.top;
|
|
17
|
+
scrollY = window.scrollY;
|
|
18
|
+
document.body.style.position = "fixed";
|
|
19
|
+
document.body.style.top = `-${scrollY}px`;
|
|
20
|
+
}
|
|
21
|
+
if (scrollBarWidth > 0) {
|
|
22
|
+
document.documentElement.style.paddingRight = `${scrollBarWidth}px`;
|
|
23
|
+
document.body.classList.add("scroll-locked");
|
|
24
|
+
document.documentElement.style.setProperty("--scrollbar-width", scrollBarWidth + "px");
|
|
25
|
+
}
|
|
26
|
+
return () => {
|
|
27
|
+
document.documentElement.style.overflow = originalOverflow;
|
|
28
|
+
document.documentElement.style.paddingRight = originalPaddingRight;
|
|
29
|
+
document.body.classList.remove("scroll-locked");
|
|
30
|
+
document.documentElement.style.removeProperty("--scrollbar-width");
|
|
31
|
+
if (isIOS) {
|
|
32
|
+
document.body.style.position = originalBodyPosition;
|
|
33
|
+
document.body.style.top = originalBodyTop;
|
|
34
|
+
window.scrollTo(0, scrollY);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}, [isIOS]);
|
|
38
|
+
};
|
|
39
|
+
//#endregion
|
|
40
|
+
export { useLockBodyScroll };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { MATRIX_RAIN_DEFAULTS, matrixSettingsChangeEvent, readMatrixSettings } from "../state/matrix-rain/matrix-settings.mjs";
|
|
2
|
+
import { useSyncExternalStore } from "react";
|
|
3
|
+
//#region src/hooks/use-matrix-settings-store.ts
|
|
4
|
+
const subscribe = (callback) => {
|
|
5
|
+
if (typeof window === "undefined") return () => {};
|
|
6
|
+
window.addEventListener(matrixSettingsChangeEvent, callback);
|
|
7
|
+
return () => window.removeEventListener(matrixSettingsChangeEvent, callback);
|
|
8
|
+
};
|
|
9
|
+
const getSnapshot = () => readMatrixSettings();
|
|
10
|
+
const getServerSnapshot = () => MATRIX_RAIN_DEFAULTS;
|
|
11
|
+
const useMatrixSettingsStore = () => {
|
|
12
|
+
return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
|
|
13
|
+
};
|
|
14
|
+
//#endregion
|
|
15
|
+
export { useMatrixSettingsStore };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region src/hooks/use-motion-store.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* React hook to subscribe to motion settings using useSyncExternalStore.
|
|
4
|
+
* Returns true if animations are enabled, false otherwise.
|
|
5
|
+
*
|
|
6
|
+
* Behavior:
|
|
7
|
+
* - Current tab: Changes sync immediately via custom events
|
|
8
|
+
* - New tabs: Automatically read from localStorage on mount
|
|
9
|
+
* - SSR: Defaults to enabled to prevent hydration mismatches
|
|
10
|
+
*/
|
|
11
|
+
declare const useMotionStore: () => boolean;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { useMotionStore };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { hasMotion, motionChangeEvent } from "../state/motion/motion.mjs";
|
|
2
|
+
import { useSyncExternalStore } from "react";
|
|
3
|
+
//#region src/hooks/use-motion-store.ts
|
|
4
|
+
const subscribe = (callback) => {
|
|
5
|
+
if (typeof window === "undefined") return () => {};
|
|
6
|
+
const handleMotionChange = () => {
|
|
7
|
+
callback();
|
|
8
|
+
};
|
|
9
|
+
window.addEventListener(motionChangeEvent, handleMotionChange);
|
|
10
|
+
return () => {
|
|
11
|
+
window.removeEventListener(motionChangeEvent, handleMotionChange);
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
const getSnapshot = () => hasMotion();
|
|
15
|
+
const getServerSnapshot = () => true;
|
|
16
|
+
/**
|
|
17
|
+
* React hook to subscribe to motion settings using useSyncExternalStore.
|
|
18
|
+
* Returns true if animations are enabled, false otherwise.
|
|
19
|
+
*
|
|
20
|
+
* Behavior:
|
|
21
|
+
* - Current tab: Changes sync immediately via custom events
|
|
22
|
+
* - New tabs: Automatically read from localStorage on mount
|
|
23
|
+
* - SSR: Defaults to enabled to prevent hydration mismatches
|
|
24
|
+
*/
|
|
25
|
+
const useMotionStore = () => {
|
|
26
|
+
return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
|
|
27
|
+
};
|
|
28
|
+
//#endregion
|
|
29
|
+
export { useMotionStore };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { useSyncExternalStore } from "react";
|
|
2
|
+
//#region src/hooks/use-os-modifier-key.ts
|
|
3
|
+
const detectModifierKey = () => {
|
|
4
|
+
if (typeof navigator === "undefined") return null;
|
|
5
|
+
return /Mac|iPhone|iPad|iPod/.test(navigator.userAgent) ? "meta" : "ctrl";
|
|
6
|
+
};
|
|
7
|
+
const modifierKey = detectModifierKey();
|
|
8
|
+
const subscribe = () => () => {};
|
|
9
|
+
const getSnapshot = () => modifierKey;
|
|
10
|
+
const getServerSnapshot = () => null;
|
|
11
|
+
const useOsModifierKey = () => {
|
|
12
|
+
return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
|
|
13
|
+
};
|
|
14
|
+
//#endregion
|
|
15
|
+
export { useOsModifierKey };
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { c } from "react/compiler-runtime";
|
|
3
|
+
import { useEffect, useState } from "react";
|
|
4
|
+
//#region src/hooks/use-reading-progress.ts
|
|
5
|
+
function useReadingProgress(targetId) {
|
|
6
|
+
const $ = c(4);
|
|
7
|
+
let t0;
|
|
8
|
+
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
|
|
9
|
+
t0 = {
|
|
10
|
+
percentage: 0,
|
|
11
|
+
started: false,
|
|
12
|
+
status: "uploading"
|
|
13
|
+
};
|
|
14
|
+
$[0] = t0;
|
|
15
|
+
} else t0 = $[0];
|
|
16
|
+
const [readingProgress, setReadingProgress] = useState(t0);
|
|
17
|
+
let t1;
|
|
18
|
+
let t2;
|
|
19
|
+
if ($[1] !== targetId) {
|
|
20
|
+
t1 = () => {
|
|
21
|
+
const updateProgress = function updateProgress() {
|
|
22
|
+
const element = document.getElementById(targetId);
|
|
23
|
+
if (!element) return;
|
|
24
|
+
const scrollTop = window.scrollY - element.offsetTop;
|
|
25
|
+
const total = element.scrollHeight - window.innerHeight;
|
|
26
|
+
const percentage = Math.max(0, Math.min(100, Math.round(scrollTop / total * 100)));
|
|
27
|
+
setReadingProgress({
|
|
28
|
+
percentage,
|
|
29
|
+
started: scrollTop > 0,
|
|
30
|
+
status: percentage >= 100 ? "complete" : "uploading"
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
window.addEventListener("scroll", updateProgress);
|
|
34
|
+
updateProgress();
|
|
35
|
+
return () => window.removeEventListener("scroll", updateProgress);
|
|
36
|
+
};
|
|
37
|
+
t2 = [targetId];
|
|
38
|
+
$[1] = targetId;
|
|
39
|
+
$[2] = t1;
|
|
40
|
+
$[3] = t2;
|
|
41
|
+
} else {
|
|
42
|
+
t1 = $[2];
|
|
43
|
+
t2 = $[3];
|
|
44
|
+
}
|
|
45
|
+
useEffect(t1, t2);
|
|
46
|
+
return readingProgress;
|
|
47
|
+
}
|
|
48
|
+
//#endregion
|
|
49
|
+
export { useReadingProgress };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { useMotionStore } from "./use-motion-store.mjs";
|
|
2
|
+
import { useDeviceCapabilities } from "./use-device-capabilities.mjs";
|
|
3
|
+
//#region src/hooks/use-reduced-motions.ts
|
|
4
|
+
function useReducedMotions() {
|
|
5
|
+
const motionEnabled = useMotionStore();
|
|
6
|
+
const { isLowEnd } = useDeviceCapabilities();
|
|
7
|
+
return !motionEnabled || isLowEnd;
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { useReducedMotions };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { c } from "react/compiler-runtime";
|
|
3
|
+
import { useEffect, useState } from "react";
|
|
4
|
+
//#region src/hooks/use-scroll-direction.ts
|
|
5
|
+
let ScrollDirection = /* @__PURE__ */ function(ScrollDirection) {
|
|
6
|
+
ScrollDirection["up"] = "up";
|
|
7
|
+
ScrollDirection["down"] = "down";
|
|
8
|
+
return ScrollDirection;
|
|
9
|
+
}({});
|
|
10
|
+
const useScrollDirection = () => {
|
|
11
|
+
const $ = c(2);
|
|
12
|
+
const [scrollDir, setScrollDir] = useState("up");
|
|
13
|
+
let t0;
|
|
14
|
+
let t1;
|
|
15
|
+
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
|
|
16
|
+
t0 = () => {
|
|
17
|
+
let previousScrollYPosition = window.scrollY;
|
|
18
|
+
const scrolledMoreThanThreshold = (currentScrollYPosition) => Math.abs(currentScrollYPosition - previousScrollYPosition) > 100;
|
|
19
|
+
const isScrollingUp = (currentScrollYPosition_0) => currentScrollYPosition_0 > previousScrollYPosition && !(previousScrollYPosition > 0 && currentScrollYPosition_0 === 0) && !(currentScrollYPosition_0 > 0 && previousScrollYPosition === 0);
|
|
20
|
+
const updateScrollDir = () => {
|
|
21
|
+
const currentScrollYPosition_1 = window.scrollY;
|
|
22
|
+
if (scrolledMoreThanThreshold(currentScrollYPosition_1)) {
|
|
23
|
+
const newScrollDirection = isScrollingUp(currentScrollYPosition_1) ? "down" : "up";
|
|
24
|
+
setScrollDir(newScrollDirection);
|
|
25
|
+
previousScrollYPosition = currentScrollYPosition_1 > 0 ? currentScrollYPosition_1 : 0;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const onScroll = () => window.requestAnimationFrame(updateScrollDir);
|
|
29
|
+
window.addEventListener("scroll", onScroll);
|
|
30
|
+
return () => window.removeEventListener("scroll", onScroll);
|
|
31
|
+
};
|
|
32
|
+
t1 = [];
|
|
33
|
+
$[0] = t0;
|
|
34
|
+
$[1] = t1;
|
|
35
|
+
} else {
|
|
36
|
+
t0 = $[0];
|
|
37
|
+
t1 = $[1];
|
|
38
|
+
}
|
|
39
|
+
useEffect(t0, t1);
|
|
40
|
+
return scrollDir;
|
|
41
|
+
};
|
|
42
|
+
//#endregion
|
|
43
|
+
export { ScrollDirection, useScrollDirection };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/hooks/use-typewriter.d.ts
|
|
2
|
+
interface TypewriterLine {
|
|
3
|
+
text: string;
|
|
4
|
+
type?: 'normal' | 'error' | 'success' | 'quote';
|
|
5
|
+
delay?: number;
|
|
6
|
+
}
|
|
7
|
+
interface TypewriterState {
|
|
8
|
+
completedLines: TypewriterLine[];
|
|
9
|
+
currentLine: TypewriterLine | null;
|
|
10
|
+
currentText: string;
|
|
11
|
+
isComplete: boolean;
|
|
12
|
+
}
|
|
13
|
+
declare const useTypewriter: (lines: TypewriterLine[], speed?: number, shouldStart?: boolean) => TypewriterState;
|
|
14
|
+
//#endregion
|
|
15
|
+
export { useTypewriter };
|