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.
Files changed (317) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +95 -0
  3. package/dist/atoms/animation/motion-div/index.d.mts +2 -0
  4. package/dist/atoms/animation/motion-div/motion-div.d.mts +7 -0
  5. package/dist/atoms/animation/motion-div/motion-div.mjs +37 -0
  6. package/dist/atoms/animation/motion-div/use-motion-div-store.mjs +17 -0
  7. package/dist/atoms/buttons/button/button.d.mts +8 -0
  8. package/dist/atoms/buttons/button/button.mjs +12 -0
  9. package/dist/atoms/buttons/button/index.d.mts +2 -0
  10. package/dist/atoms/buttons/switch/index.d.mts +2 -0
  11. package/dist/atoms/buttons/switch/switch.d.mts +10 -0
  12. package/dist/atoms/buttons/switch/switch.mjs +40 -0
  13. package/dist/atoms/buttons/switch/use-switch-store.mjs +7 -0
  14. package/dist/atoms/call-to-actions/call-to-action-external-with-tracking/call-to-action-external-with-tracking.d.mts +13 -0
  15. package/dist/atoms/call-to-actions/call-to-action-external-with-tracking/call-to-action-external-with-tracking.mjs +30 -0
  16. package/dist/atoms/call-to-actions/call-to-action-external-with-tracking/index.d.mts +2 -0
  17. package/dist/atoms/call-to-actions/call-to-action-internal-with-tracking/call-to-action-internal-with-tracking.d.mts +14 -0
  18. package/dist/atoms/call-to-actions/call-to-action-internal-with-tracking/call-to-action-internal-with-tracking.mjs +29 -0
  19. package/dist/atoms/call-to-actions/call-to-action-internal-with-tracking/index.d.mts +2 -0
  20. package/dist/atoms/chip/chip.d.mts +10 -0
  21. package/dist/atoms/chip/chip.mjs +10 -0
  22. package/dist/atoms/chip/index.d.mts +2 -0
  23. package/dist/atoms/effects/glassmorphism-background/glassmorphism-background.d.mts +8 -0
  24. package/dist/atoms/effects/glassmorphism-background/glassmorphism-background.mjs +33 -0
  25. package/dist/atoms/effects/glassmorphism-background/index.d.mts +2 -0
  26. package/dist/atoms/effects/glassmorphism-background/use-glassmorphism-background-store.mjs +17 -0
  27. package/dist/atoms/effects/image-glow/image-glow.d.mts +12 -0
  28. package/dist/atoms/effects/image-glow/image-glow.mjs +20 -0
  29. package/dist/atoms/effects/image-glow/index.d.mts +2 -0
  30. package/dist/atoms/effects/image-shimmer-placeholder/image-shimmer-placeholder.d.mts +6 -0
  31. package/dist/atoms/effects/image-shimmer-placeholder/image-shimmer-placeholder.mjs +22 -0
  32. package/dist/atoms/effects/image-shimmer-placeholder/index.d.mts +2 -0
  33. package/dist/atoms/effects/matrix-rain/matrix-rain/index.d.mts +2 -0
  34. package/dist/atoms/effects/matrix-rain/matrix-rain/matrix-2d-canvas/debounce.mjs +12 -0
  35. package/dist/atoms/effects/matrix-rain/matrix-rain/matrix-2d-canvas/matrix-2d-canvas.mjs +25 -0
  36. package/dist/atoms/effects/matrix-rain/matrix-rain/matrix-2d-canvas/use-matrix-2d-canvas-store.mjs +186 -0
  37. package/dist/atoms/effects/matrix-rain/matrix-rain/matrix-rain.d.mts +5 -0
  38. package/dist/atoms/effects/matrix-rain/matrix-rain/matrix-rain.mjs +68 -0
  39. package/dist/atoms/effects/matrix-rain/matrix-rain/use-matrix-rain-activity.mjs +40 -0
  40. package/dist/atoms/effects/matrix-rain/matrix-rain/use-matrix-rain-store.mjs +69 -0
  41. package/dist/atoms/effects/overlay/index.d.mts +2 -0
  42. package/dist/atoms/effects/overlay/overlay.d.mts +11 -0
  43. package/dist/atoms/effects/overlay/overlay.mjs +61 -0
  44. package/dist/atoms/effects/overlay/use-overlay-store.mjs +8 -0
  45. package/dist/atoms/effects/pills/index.d.mts +2 -0
  46. package/dist/atoms/effects/pills/pills.d.mts +10 -0
  47. package/dist/atoms/effects/pills/pills.mjs +121 -0
  48. package/dist/atoms/effects/pills/use-pills-store.mjs +17 -0
  49. package/dist/atoms/effects/plain-image/index.d.mts +2 -0
  50. package/dist/atoms/effects/plain-image/plain-image.d.mts +45 -0
  51. package/dist/atoms/effects/plain-image/plain-image.mjs +140 -0
  52. package/dist/atoms/effects/plain-image/use-plain-image-store.mjs +62 -0
  53. package/dist/atoms/icons/chat-icon/chat-icon.d.mts +4 -0
  54. package/dist/atoms/icons/chat-icon/chat-icon.mjs +13 -0
  55. package/dist/atoms/icons/copy-icon/copy-icon.d.mts +6 -0
  56. package/dist/atoms/icons/copy-icon/copy-icon.mjs +17 -0
  57. package/dist/atoms/icons/rounded-icon/index.d.mts +2 -0
  58. package/dist/atoms/icons/rounded-icon/rounded-icon.d.mts +8 -0
  59. package/dist/atoms/icons/rounded-icon/rounded-icon.mjs +8 -0
  60. package/dist/atoms/links/anchor-link/anchor-link.d.mts +31 -0
  61. package/dist/atoms/links/anchor-link/anchor-link.mjs +14 -0
  62. package/dist/atoms/links/anchor-link/index.d.mts +2 -0
  63. package/dist/atoms/links/external-link/external-link.d.mts +13 -0
  64. package/dist/atoms/links/external-link/external-link.mjs +29 -0
  65. package/dist/atoms/links/external-link/index.d.mts +2 -0
  66. package/dist/atoms/links/internal-link/index.d.mts +2 -0
  67. package/dist/atoms/links/internal-link/internal-link.d.mts +15 -0
  68. package/dist/atoms/links/internal-link/internal-link.mjs +12 -0
  69. package/dist/atoms/loader/loader/index.d.mts +2 -0
  70. package/dist/atoms/loader/loader/loader.d.mts +10 -0
  71. package/dist/atoms/loader/loader/loader.mjs +62 -0
  72. package/dist/atoms/typography/input-field/index.d.mts +2 -0
  73. package/dist/atoms/typography/input-field/input-field.d.mts +9 -0
  74. package/dist/atoms/typography/input-field/input-field.mjs +8 -0
  75. package/dist/atoms/typography/label/index.d.mts +2 -0
  76. package/dist/atoms/typography/label/label.d.mts +9 -0
  77. package/dist/atoms/typography/label/label.mjs +11 -0
  78. package/dist/atoms/typography/markdown/markdown-plugins.mjs +16 -0
  79. package/dist/atoms/typography/markdown/markdown.d.mts +7 -0
  80. package/dist/atoms/typography/markdown/markdown.mjs +23 -0
  81. package/dist/atoms/typography/markdown/use-markdown-store.mjs +24 -0
  82. package/dist/atoms/typography/terminal-blocks/index.d.mts +2 -0
  83. package/dist/atoms/typography/terminal-blocks/terminal-blocks.d.mts +13 -0
  84. package/dist/atoms/typography/terminal-blocks/terminal-blocks.mjs +42 -0
  85. package/dist/atoms/typography/textarea/index.d.mts +2 -0
  86. package/dist/atoms/typography/textarea/textarea.d.mts +9 -0
  87. package/dist/atoms/typography/textarea/textarea.mjs +8 -0
  88. package/dist/chart.d.mts +7 -0
  89. package/dist/chart.mjs +4 -0
  90. package/dist/command-palette.d.mts +6 -0
  91. package/dist/command-palette.mjs +5 -0
  92. package/dist/hooks/use-clipboard-available.d.mts +4 -0
  93. package/dist/hooks/use-clipboard-available.mjs +10 -0
  94. package/dist/hooks/use-device-capabilities.d.mts +10 -0
  95. package/dist/hooks/use-device-capabilities.mjs +30 -0
  96. package/dist/hooks/use-glassmorphism.d.mts +10 -0
  97. package/dist/hooks/use-glassmorphism.mjs +9 -0
  98. package/dist/hooks/use-in-view-list.d.mts +7 -0
  99. package/dist/hooks/use-in-view-list.mjs +63 -0
  100. package/dist/hooks/use-in-view.d.mts +9 -0
  101. package/dist/hooks/use-in-view.mjs +68 -0
  102. package/dist/hooks/use-is-ios.d.mts +4 -0
  103. package/dist/hooks/use-is-ios.mjs +7 -0
  104. package/dist/hooks/use-lock-body-scroll.d.mts +4 -0
  105. package/dist/hooks/use-lock-body-scroll.mjs +40 -0
  106. package/dist/hooks/use-matrix-settings-store.d.mts +5 -0
  107. package/dist/hooks/use-matrix-settings-store.mjs +15 -0
  108. package/dist/hooks/use-motion-store.d.mts +13 -0
  109. package/dist/hooks/use-motion-store.mjs +29 -0
  110. package/dist/hooks/use-os-modifier-key.d.mts +5 -0
  111. package/dist/hooks/use-os-modifier-key.mjs +15 -0
  112. package/dist/hooks/use-reading-progress.d.mts +8 -0
  113. package/dist/hooks/use-reading-progress.mjs +49 -0
  114. package/dist/hooks/use-reduced-motions.d.mts +4 -0
  115. package/dist/hooks/use-reduced-motions.mjs +10 -0
  116. package/dist/hooks/use-scroll-direction.d.mts +8 -0
  117. package/dist/hooks/use-scroll-direction.mjs +43 -0
  118. package/dist/hooks/use-typewriter.d.mts +15 -0
  119. package/dist/hooks/use-typewriter.mjs +89 -0
  120. package/dist/hooks/use-webgpu-supported.d.mts +4 -0
  121. package/dist/hooks/use-webgpu-supported.mjs +16 -0
  122. package/dist/index.d.mts +153 -0
  123. package/dist/index.mjs +88 -0
  124. package/dist/markdown.d.mts +2 -0
  125. package/dist/markdown.mjs +2 -0
  126. package/dist/molecules/accordion/accordion/accordion.d.mts +12 -0
  127. package/dist/molecules/accordion/accordion/accordion.mjs +130 -0
  128. package/dist/molecules/accordion/accordion/index.d.mts +2 -0
  129. package/dist/molecules/accordion/accordion/use-accordion-store.mjs +55 -0
  130. package/dist/molecules/breadcrumbs/breadcrumb/breadcrumb.d.mts +21 -0
  131. package/dist/molecules/breadcrumbs/breadcrumb/breadcrumb.mjs +186 -0
  132. package/dist/molecules/breadcrumbs/breadcrumb/index.d.mts +2 -0
  133. package/dist/molecules/breadcrumbs/breadcrumb/use-breadcrumb-store.mjs +29 -0
  134. package/dist/molecules/buttons/pagination-navigation/index.d.mts +2 -0
  135. package/dist/molecules/buttons/pagination-navigation/pagination-navigation.d.mts +11 -0
  136. package/dist/molecules/buttons/pagination-navigation/pagination-navigation.mjs +17 -0
  137. package/dist/molecules/buttons/pills-buttons/index.d.mts +2 -0
  138. package/dist/molecules/buttons/pills-buttons/pills-buttons.d.mts +10 -0
  139. package/dist/molecules/buttons/pills-buttons/pills-buttons.mjs +55 -0
  140. package/dist/molecules/buttons/segmented-control/segmented-control.d.mts +13 -0
  141. package/dist/molecules/buttons/segmented-control/segmented-control.mjs +46 -0
  142. package/dist/molecules/buttons/segmented-control/use-segmented-control-store.mjs +8 -0
  143. package/dist/molecules/buttons/social-contact/index.d.mts +2 -0
  144. package/dist/molecules/buttons/social-contact/social-contact.d.mts +10 -0
  145. package/dist/molecules/buttons/social-contact/social-contact.mjs +13 -0
  146. package/dist/molecules/buttons/tag/index.d.mts +2 -0
  147. package/dist/molecules/buttons/tag/tag.d.mts +17 -0
  148. package/dist/molecules/buttons/tag/tag.mjs +20 -0
  149. package/dist/molecules/buttons/terminal-button/index.d.mts +2 -0
  150. package/dist/molecules/buttons/terminal-button/terminal-button.d.mts +15 -0
  151. package/dist/molecules/buttons/terminal-button/terminal-button.mjs +38 -0
  152. package/dist/molecules/chart/chart-panel/chart-panel.d.mts +9 -0
  153. package/dist/molecules/chart/chart-panel/chart-panel.mjs +12 -0
  154. package/dist/molecules/chart/chart-panel/index.d.mts +2 -0
  155. package/dist/molecules/chart/chart-tooltip/chart-tooltip.d.mts +8 -0
  156. package/dist/molecules/chart/chart-tooltip/chart-tooltip.mjs +18 -0
  157. package/dist/molecules/chart/chart-tooltip/index.d.mts +2 -0
  158. package/dist/molecules/chart/donut-chart/donut-chart.d.mts +15 -0
  159. package/dist/molecules/chart/donut-chart/donut-chart.mjs +142 -0
  160. package/dist/molecules/chart/donut-chart/index.d.mts +2 -0
  161. package/dist/molecules/containers/content-container/content-container.d.mts +5 -0
  162. package/dist/molecules/containers/content-container/content-container.mjs +8 -0
  163. package/dist/molecules/containers/content-container/index.d.mts +2 -0
  164. package/dist/molecules/controls/control-slider/control-slider.d.mts +14 -0
  165. package/dist/molecules/controls/control-slider/control-slider.mjs +76 -0
  166. package/dist/molecules/controls/control-slider/index.d.mts +2 -0
  167. package/dist/molecules/controls/control-slider/use-control-slider-store.mjs +10 -0
  168. package/dist/molecules/effects/matrix-background/index.d.mts +2 -0
  169. package/dist/molecules/effects/matrix-background/matrix-background.d.mts +8 -0
  170. package/dist/molecules/effects/matrix-background/matrix-background.mjs +15 -0
  171. package/dist/molecules/effects/matrix-header-background/index.d.mts +2 -0
  172. package/dist/molecules/effects/matrix-header-background/matrix-header-background.d.mts +8 -0
  173. package/dist/molecules/effects/matrix-header-background/matrix-header-background.mjs +14 -0
  174. package/dist/molecules/effects/matrix-terminal/index.d.mts +2 -0
  175. package/dist/molecules/effects/matrix-terminal/matrix-terminal.d.mts +15 -0
  176. package/dist/molecules/effects/matrix-terminal/matrix-terminal.mjs +101 -0
  177. package/dist/molecules/effects/matrix-terminal/use-matrix-terminal-store.mjs +59 -0
  178. package/dist/molecules/form/filter-input/filter-input.d.mts +10 -0
  179. package/dist/molecules/form/filter-input/filter-input.mjs +35 -0
  180. package/dist/molecules/form/filter-input/index.d.mts +2 -0
  181. package/dist/molecules/form/form-error-summary/form-error-summary.d.mts +10 -0
  182. package/dist/molecules/form/form-error-summary/form-error-summary.mjs +71 -0
  183. package/dist/molecules/form/form-error-summary/index.d.mts +2 -0
  184. package/dist/molecules/form/form-field/form-field.d.mts +10 -0
  185. package/dist/molecules/form/form-field/form-field.mjs +60 -0
  186. package/dist/molecules/form/form-field/index.d.mts +2 -0
  187. package/dist/molecules/form/form-success-message/form-success-message.d.mts +8 -0
  188. package/dist/molecules/form/form-success-message/form-success-message.mjs +21 -0
  189. package/dist/molecules/form/form-success-message/index.d.mts +2 -0
  190. package/dist/molecules/form/form-textarea/form-textarea.d.mts +10 -0
  191. package/dist/molecules/form/form-textarea/form-textarea.mjs +60 -0
  192. package/dist/molecules/form/form-textarea/index.d.mts +2 -0
  193. package/dist/molecules/lightbox-image/index.d.mts +2 -0
  194. package/dist/molecules/lightbox-image/lightbox-image.d.mts +6 -0
  195. package/dist/molecules/lightbox-image/lightbox-image.mjs +49 -0
  196. package/dist/molecules/lightbox-image/use-lightbox-image-store.mjs +29 -0
  197. package/dist/molecules/links/pills-links/index.d.mts +2 -0
  198. package/dist/molecules/links/pills-links/pills-links.d.mts +13 -0
  199. package/dist/molecules/links/pills-links/pills-links.mjs +60 -0
  200. package/dist/molecules/menu/close/close.d.mts +8 -0
  201. package/dist/molecules/menu/close/close.mjs +9 -0
  202. package/dist/molecules/menu/close/index.d.mts +2 -0
  203. package/dist/molecules/menu/dropdown-menu/dropdown-menu.d.mts +25 -0
  204. package/dist/molecules/menu/dropdown-menu/dropdown-menu.mjs +143 -0
  205. package/dist/molecules/menu/dropdown-menu/index.d.mts +2 -0
  206. package/dist/molecules/menu/dropdown-menu/use-dropdown-menu-store.mjs +108 -0
  207. package/dist/molecules/menu/hamburger-menu/hamburger-menu.d.mts +8 -0
  208. package/dist/molecules/menu/hamburger-menu/hamburger-menu.mjs +9 -0
  209. package/dist/molecules/menu/hamburger-menu/index.d.mts +2 -0
  210. package/dist/molecules/menu/menu-item/index.d.mts +2 -0
  211. package/dist/molecules/menu/menu-item/menu-item.d.mts +16 -0
  212. package/dist/molecules/menu/menu-item/menu-item.mjs +65 -0
  213. package/dist/molecules/menu/menu-item/use-menu-item-store.mjs +10 -0
  214. package/dist/molecules/stat-card/index.d.mts +2 -0
  215. package/dist/molecules/stat-card/stat-card.d.mts +10 -0
  216. package/dist/molecules/stat-card/stat-card.mjs +21 -0
  217. package/dist/molecules/terminal-list-item/index.d.mts +2 -0
  218. package/dist/molecules/terminal-list-item/terminal-list-item.d.mts +9 -0
  219. package/dist/molecules/terminal-list-item/terminal-list-item.mjs +13 -0
  220. package/dist/molecules/terminal-progress-bar/index.d.mts +2 -0
  221. package/dist/molecules/terminal-progress-bar/terminal-progress-bar.d.mts +11 -0
  222. package/dist/molecules/terminal-progress-bar/terminal-progress-bar.mjs +20 -0
  223. package/dist/molecules/typography/page-title/index.d.mts +2 -0
  224. package/dist/molecules/typography/page-title/page-title.d.mts +5 -0
  225. package/dist/molecules/typography/page-title/page-title.mjs +8 -0
  226. package/dist/molecules/typography/paragraph-title-with-icon/index.d.mts +2 -0
  227. package/dist/molecules/typography/paragraph-title-with-icon/paragraph-title-with-icon.d.mts +8 -0
  228. package/dist/molecules/typography/paragraph-title-with-icon/paragraph-title-with-icon.mjs +13 -0
  229. package/dist/molecules/typography/section-heading/index.d.mts +2 -0
  230. package/dist/molecules/typography/section-heading/section-heading.d.mts +9 -0
  231. package/dist/molecules/typography/section-heading/section-heading.mjs +17 -0
  232. package/dist/molecules/video/self-hosted-video/index.d.mts +2 -0
  233. package/dist/molecules/video/self-hosted-video/self-hosted-video.d.mts +17 -0
  234. package/dist/molecules/video/self-hosted-video/self-hosted-video.mjs +39 -0
  235. package/dist/molecules/video/youtube/index.d.mts +2 -0
  236. package/dist/molecules/video/youtube/youtube.d.mts +9 -0
  237. package/dist/molecules/video/youtube/youtube.mjs +12 -0
  238. package/dist/organism/command-palette/command-palette/command-palette.d.mts +12 -0
  239. package/dist/organism/command-palette/command-palette/command-palette.mjs +148 -0
  240. package/dist/organism/command-palette/command-palette/index.d.mts +2 -0
  241. package/dist/organism/command-palette/command-palette/use-command-palette-store.mjs +121 -0
  242. package/dist/organism/command-palette/command-palette-group/command-palette-group.d.mts +9 -0
  243. package/dist/organism/command-palette/command-palette-group/command-palette-group.mjs +24 -0
  244. package/dist/organism/command-palette/command-palette-group/index.d.mts +2 -0
  245. package/dist/organism/command-palette/command-palette-item/command-palette-item.d.mts +11 -0
  246. package/dist/organism/command-palette/command-palette-item/command-palette-item.mjs +29 -0
  247. package/dist/organism/command-palette/command-palette-item/index.d.mts +2 -0
  248. package/dist/organism/command-palette/command-palette-item/use-command-palette-item-store.mjs +30 -0
  249. package/dist/organism/command-palette/index.d.mts +9 -0
  250. package/dist/organism/command-palette/toggle-motion-item/index.d.mts +2 -0
  251. package/dist/organism/command-palette/toggle-motion-item/toggle-motion-item.d.mts +8 -0
  252. package/dist/organism/command-palette/toggle-motion-item/toggle-motion-item.mjs +63 -0
  253. package/dist/organism/command-palette/toggle-motion-item/use-toggle-motion-item-store.mjs +45 -0
  254. package/dist/organism/cookie-consent-banner/cookie-consent-banner.d.mts +9 -0
  255. package/dist/organism/cookie-consent-banner/cookie-consent-banner.mjs +71 -0
  256. package/dist/organism/cookie-consent-banner/use-cookie-consent-banner-store.mjs +10 -0
  257. package/dist/organism/footer/footer.d.mts +26 -0
  258. package/dist/organism/footer/footer.mjs +193 -0
  259. package/dist/organism/footer/index.d.mts +3 -0
  260. package/dist/organism/footer/use-footer-store.d.mts +22 -0
  261. package/dist/organism/footer/use-footer-store.mjs +57 -0
  262. package/dist/organism/header/brand-header/brand-header.d.mts +14 -0
  263. package/dist/organism/header/brand-header/brand-header.mjs +132 -0
  264. package/dist/organism/header/brand-header/index.d.mts +2 -0
  265. package/dist/organism/image-carousel/fullscreen-modal/fullscreen-modal.mjs +148 -0
  266. package/dist/organism/image-carousel/fullscreen-modal/use-fullscreen-modal-store.mjs +129 -0
  267. package/dist/organism/image-carousel/image-carousel.d.mts +14 -0
  268. package/dist/organism/image-carousel/image-carousel.mjs +225 -0
  269. package/dist/organism/image-carousel/index.d.mts +2 -0
  270. package/dist/organism/image-carousel/navigation-buttons/navigation-buttons.mjs +22 -0
  271. package/dist/organism/image-carousel/navigation-buttons/use-navigation-buttons-store.mjs +18 -0
  272. package/dist/organism/image-carousel/page-indicators/page-indicator-button/page-indicator-button.mjs +14 -0
  273. package/dist/organism/image-carousel/page-indicators/page-indicator-button/use-page-indicator-button-store.mjs +11 -0
  274. package/dist/organism/image-carousel/page-indicators/page-indicators.mjs +20 -0
  275. package/dist/organism/image-carousel/use-image-carousel-store.mjs +88 -0
  276. package/dist/organism/lightbox/index.d.mts +2 -0
  277. package/dist/organism/lightbox/lightbox.d.mts +5 -0
  278. package/dist/organism/lightbox/lightbox.mjs +100 -0
  279. package/dist/organism/lightbox/use-lightbox-store.mjs +120 -0
  280. package/dist/organism/loading-bar/loading-bar.d.mts +7 -0
  281. package/dist/organism/loading-bar/loading-bar.mjs +48 -0
  282. package/dist/organism/loading-bar/use-loading-bar-store.mjs +52 -0
  283. package/dist/organism/menu/index.d.mts +3 -0
  284. package/dist/organism/menu/menu.d.mts +33 -0
  285. package/dist/organism/menu/menu.mjs +396 -0
  286. package/dist/organism/menu/use-menu-store.d.mts +22 -0
  287. package/dist/organism/menu/use-menu-store.mjs +265 -0
  288. package/dist/organism/profile-hero/index.d.mts +2 -0
  289. package/dist/organism/profile-hero/profile-hero.d.mts +15 -0
  290. package/dist/organism/profile-hero/profile-hero.mjs +72 -0
  291. package/dist/organism/profile-photo/index.d.mts +2 -0
  292. package/dist/organism/profile-photo/profile-photo.d.mts +12 -0
  293. package/dist/organism/profile-photo/profile-photo.mjs +17 -0
  294. package/dist/organism/reading-content-progress-bar/index.d.mts +2 -0
  295. package/dist/organism/reading-content-progress-bar/reading-content-progress-bar.d.mts +8 -0
  296. package/dist/organism/reading-content-progress-bar/reading-content-progress-bar.mjs +76 -0
  297. package/dist/organism/reading-content-progress-bar/use-reading-content-progress-bar-store.mjs +29 -0
  298. package/dist/organism/social-contacts/index.d.mts +2 -0
  299. package/dist/organism/social-contacts/social-contacts.d.mts +29 -0
  300. package/dist/organism/social-contacts/social-contacts.mjs +78 -0
  301. package/dist/state/command-palette/command-palette-context.d.mts +9 -0
  302. package/dist/state/command-palette/command-palette-context.mjs +10 -0
  303. package/dist/state/command-palette/command-palette-events.d.mts +11 -0
  304. package/dist/state/command-palette/command-palette-events.mjs +15 -0
  305. package/dist/state/command-palette/command-palette-trigger.d.mts +8 -0
  306. package/dist/state/lightbox/lightbox-events.d.mts +9 -0
  307. package/dist/state/lightbox/lightbox-events.mjs +7 -0
  308. package/dist/state/matrix-rain/matrix-settings.d.mts +37 -0
  309. package/dist/state/matrix-rain/matrix-settings.mjs +122 -0
  310. package/dist/state/motion/motion.d.mts +6 -0
  311. package/dist/state/motion/motion.mjs +17 -0
  312. package/package.json +160 -0
  313. package/src/styles/base.css +130 -0
  314. package/src/styles/components.css +57 -0
  315. package/src/styles/index.css +23 -0
  316. package/src/styles/pills.css +85 -0
  317. 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,2 @@
1
+ import { Textarea } from "./textarea.mjs";
2
+ export { Textarea };
@@ -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 };
@@ -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,4 @@
1
+ //#region src/hooks/use-clipboard-available.d.ts
2
+ declare const useClipboardAvailable: () => boolean;
3
+ //#endregion
4
+ export { useClipboardAvailable };
@@ -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,4 @@
1
+ //#region src/hooks/use-is-ios.d.ts
2
+ declare const useIsIOS: () => boolean;
3
+ //#endregion
4
+ export { useIsIOS };
@@ -0,0 +1,7 @@
1
+ //#region src/hooks/use-is-ios.ts
2
+ const useIsIOS = () => {
3
+ if (typeof window === "undefined") return false;
4
+ return /iP(ad|hone|od)/.test(window.navigator.userAgent);
5
+ };
6
+ //#endregion
7
+ export { useIsIOS };
@@ -0,0 +1,4 @@
1
+ //#region src/hooks/use-lock-body-scroll.d.ts
2
+ declare const useLockBodyScroll: () => void;
3
+ //#endregion
4
+ export { useLockBodyScroll };
@@ -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,5 @@
1
+ import { MatrixRainSettings } from "../state/matrix-rain/matrix-settings.mjs";
2
+ //#region src/hooks/use-matrix-settings-store.d.ts
3
+ declare const useMatrixSettingsStore: () => MatrixRainSettings;
4
+ //#endregion
5
+ export { useMatrixSettingsStore };
@@ -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,5 @@
1
+ //#region src/hooks/use-os-modifier-key.d.ts
2
+ type OsModifierKey = "meta" | "ctrl";
3
+ declare const useOsModifierKey: () => OsModifierKey | null;
4
+ //#endregion
5
+ export { OsModifierKey, useOsModifierKey };
@@ -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,8 @@
1
+ //#region src/hooks/use-reading-progress.d.ts
2
+ declare function useReadingProgress(targetId: string): {
3
+ percentage: number;
4
+ started: boolean;
5
+ status: "uploading" | "complete";
6
+ };
7
+ //#endregion
8
+ export { useReadingProgress };
@@ -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,4 @@
1
+ //#region src/hooks/use-reduced-motions.d.ts
2
+ declare function useReducedMotions(): boolean;
3
+ //#endregion
4
+ export { useReducedMotions };
@@ -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,8 @@
1
+ //#region src/hooks/use-scroll-direction.d.ts
2
+ declare enum ScrollDirection {
3
+ up = "up",
4
+ down = "down"
5
+ }
6
+ declare const useScrollDirection: () => ScrollDirection;
7
+ //#endregion
8
+ export { ScrollDirection, useScrollDirection };
@@ -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 };