@kids-reporter/routing-ui 0.1.0-alpha.1

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 (129) hide show
  1. package/.prettierignore +17 -0
  2. package/babel.config.cjs +31 -0
  3. package/dist/components/button.d.ts +23 -0
  4. package/dist/components/button.d.ts.map +1 -0
  5. package/dist/components/button.js +82 -0
  6. package/dist/components/button.js.map +1 -0
  7. package/dist/components/index.d.ts +3 -0
  8. package/dist/components/index.d.ts.map +1 -0
  9. package/dist/components/index.js +21 -0
  10. package/dist/components/index.js.map +1 -0
  11. package/dist/components/input.d.ts +20 -0
  12. package/dist/components/input.d.ts.map +1 -0
  13. package/dist/components/input.js +143 -0
  14. package/dist/components/input.js.map +1 -0
  15. package/dist/constants/default-values.d.ts +12 -0
  16. package/dist/constants/default-values.d.ts.map +1 -0
  17. package/dist/constants/default-values.js +148 -0
  18. package/dist/constants/default-values.js.map +1 -0
  19. package/dist/footer.d.ts +10 -0
  20. package/dist/footer.d.ts.map +1 -0
  21. package/dist/footer.js +144 -0
  22. package/dist/footer.js.map +1 -0
  23. package/dist/header/desktop-header.d.ts +14 -0
  24. package/dist/header/desktop-header.d.ts.map +1 -0
  25. package/dist/header/desktop-header.js +85 -0
  26. package/dist/header/desktop-header.js.map +1 -0
  27. package/dist/header/header-context.d.ts +16 -0
  28. package/dist/header/header-context.d.ts.map +1 -0
  29. package/dist/header/header-context.js +37 -0
  30. package/dist/header/header-context.js.map +1 -0
  31. package/dist/header/index.d.ts +12 -0
  32. package/dist/header/index.d.ts.map +1 -0
  33. package/dist/header/index.js +72 -0
  34. package/dist/header/index.js.map +1 -0
  35. package/dist/header/menu/header-menu-item-group.d.ts +7 -0
  36. package/dist/header/menu/header-menu-item-group.d.ts.map +1 -0
  37. package/dist/header/menu/header-menu-item-group.js +31 -0
  38. package/dist/header/menu/header-menu-item-group.js.map +1 -0
  39. package/dist/header/menu/header-menu-item.d.ts +9 -0
  40. package/dist/header/menu/header-menu-item.d.ts.map +1 -0
  41. package/dist/header/menu/header-menu-item.js +92 -0
  42. package/dist/header/menu/header-menu-item.js.map +1 -0
  43. package/dist/header/menu/index.d.ts +15 -0
  44. package/dist/header/menu/index.d.ts.map +1 -0
  45. package/dist/header/menu/index.js +170 -0
  46. package/dist/header/menu/index.js.map +1 -0
  47. package/dist/header/mobile-header.d.ts +9 -0
  48. package/dist/header/mobile-header.d.ts.map +1 -0
  49. package/dist/header/mobile-header.js +46 -0
  50. package/dist/header/mobile-header.js.map +1 -0
  51. package/dist/header/post-title-setter.d.ts +6 -0
  52. package/dist/header/post-title-setter.d.ts.map +1 -0
  53. package/dist/header/post-title-setter.js +22 -0
  54. package/dist/header/post-title-setter.js.map +1 -0
  55. package/dist/header/shared-components.d.ts +31 -0
  56. package/dist/header/shared-components.d.ts.map +1 -0
  57. package/dist/header/shared-components.js +256 -0
  58. package/dist/header/shared-components.js.map +1 -0
  59. package/dist/hooks/index.d.ts +4 -0
  60. package/dist/hooks/index.d.ts.map +1 -0
  61. package/dist/hooks/index.js +36 -0
  62. package/dist/hooks/index.js.map +1 -0
  63. package/dist/hooks/use-is-at-top.d.ts +3 -0
  64. package/dist/hooks/use-is-at-top.d.ts.map +1 -0
  65. package/dist/hooks/use-is-at-top.js +26 -0
  66. package/dist/hooks/use-is-at-top.js.map +1 -0
  67. package/dist/hooks/use-media-query.d.ts +7 -0
  68. package/dist/hooks/use-media-query.d.ts.map +1 -0
  69. package/dist/hooks/use-media-query.js +47 -0
  70. package/dist/hooks/use-media-query.js.map +1 -0
  71. package/dist/hooks/use-scroll-level.d.ts +11 -0
  72. package/dist/hooks/use-scroll-level.d.ts.map +1 -0
  73. package/dist/hooks/use-scroll-level.js +53 -0
  74. package/dist/hooks/use-scroll-level.js.map +1 -0
  75. package/dist/icons/index.d.ts +17 -0
  76. package/dist/icons/index.d.ts.map +1 -0
  77. package/dist/icons/index.js +341 -0
  78. package/dist/icons/index.js.map +1 -0
  79. package/dist/index.d.ts +10 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +101 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/styles.css +475 -0
  84. package/dist/types/index.d.ts +10 -0
  85. package/dist/types/index.d.ts.map +1 -0
  86. package/dist/types/index.js +6 -0
  87. package/dist/types/index.js.map +1 -0
  88. package/dist/utils/cn.d.ts +8 -0
  89. package/dist/utils/cn.d.ts.map +1 -0
  90. package/dist/utils/cn.js +27 -0
  91. package/dist/utils/cn.js.map +1 -0
  92. package/dist/utils/generate-social-media-config.d.ts +9 -0
  93. package/dist/utils/generate-social-media-config.d.ts.map +1 -0
  94. package/dist/utils/generate-social-media-config.js +55 -0
  95. package/dist/utils/generate-social-media-config.js.map +1 -0
  96. package/dist/utils/index.d.ts +3 -0
  97. package/dist/utils/index.d.ts.map +1 -0
  98. package/dist/utils/index.js +28 -0
  99. package/dist/utils/index.js.map +1 -0
  100. package/eslint.config.mjs +55 -0
  101. package/package.json +51 -0
  102. package/prettier.config.mjs +13 -0
  103. package/scripts/build.sh +18 -0
  104. package/src/components/button.tsx +108 -0
  105. package/src/components/index.tsx +2 -0
  106. package/src/components/input.tsx +171 -0
  107. package/src/constants/default-values.tsx +153 -0
  108. package/src/footer.tsx +151 -0
  109. package/src/header/desktop-header.tsx +128 -0
  110. package/src/header/header-context.tsx +56 -0
  111. package/src/header/index.tsx +96 -0
  112. package/src/header/menu/header-menu-item-group.tsx +37 -0
  113. package/src/header/menu/header-menu-item.tsx +132 -0
  114. package/src/header/menu/index.tsx +206 -0
  115. package/src/header/mobile-header.tsx +61 -0
  116. package/src/header/post-title-setter.tsx +22 -0
  117. package/src/header/shared-components.tsx +326 -0
  118. package/src/hooks/index.ts +3 -0
  119. package/src/hooks/use-is-at-top.ts +23 -0
  120. package/src/hooks/use-media-query.ts +57 -0
  121. package/src/hooks/use-scroll-level.ts +52 -0
  122. package/src/icons/index.tsx +358 -0
  123. package/src/index.ts +9 -0
  124. package/src/styles.css +475 -0
  125. package/src/types/index.ts +10 -0
  126. package/src/utils/cn.ts +41 -0
  127. package/src/utils/generate-social-media-config.ts +75 -0
  128. package/src/utils/index.ts +2 -0
  129. package/tsconfig.json +33 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-components.js","names":["_interopRequireDefault","require","Object","defineProperty","exports","value","ActionButtons","BottomNavigation","HamburgerButton","LogoLink","SearchInputSection","_classVarianceAuthority","_image","_react","_components","_icons","_cn","_jsxRuntime","searchFormVariants","cva","variants","mode","inline","popover","isSearchOpen","true","false","compoundVariants","class","searchDropdownVariants","isFocused","compactMode","jsx","href","className","rel","children","default","src","alt","loading","cn","width","height","props","ref","useRef","setIsFocused","useState","searchValue","setSearchValue","tags","searchPlaceholder","useEffect","current","focus","document","body","classList","add","remove","jsxs","onFocus","onBlur","role","method","action","undefined","Input","placeholder","name","title","inputRef","onChange","map","keyword","encodeURIComponent","hideCtaButtons","subscribeUrl","setIsSearchOpen","containerRef","buttonRef","handleClickOutside","event","containerElement","buttonElement","contains","target","addEventListener","removeEventListener","Button","variant","size","asChild","onClick","ClearIcon","SearchIcon","SettingsIcon","onHamburgerOverlayOpen","menuItems","small","reduce","acc","item","index","label","length","HamburgerIconSmall","HamburgerIcon"],"sources":["../../src/header/shared-components.tsx"],"sourcesContent":["'use client'\nimport { cva } from 'class-variance-authority'\nimport Image from 'next/image'\nimport { useEffect, useRef, useState } from 'react'\n\nimport { Button, Input } from '../components'\nimport {\n ClearIcon,\n HamburgerIcon,\n HamburgerIconSmall,\n SearchIcon,\n SettingsIcon,\n} from '../icons'\nimport type { MenuItem } from '../types'\nimport { cn } from '../utils/cn'\n\nconst searchFormVariants = cva(\n 'ease-in-out h-full transition-all duration-300',\n {\n variants: {\n mode: {\n inline: 'h-11 w-full',\n popover: 'top-0 -right-4 w-66 absolute overflow-hidden opacity-0',\n },\n isSearchOpen: {\n true: '',\n false: '',\n },\n },\n compoundVariants: [\n {\n mode: 'popover',\n isSearchOpen: true,\n class: 'w-66 pointer-events-auto opacity-100',\n },\n {\n mode: 'popover',\n isSearchOpen: false,\n class: 'pointer-events-none',\n },\n ],\n }\n)\n\nconst searchDropdownVariants = cva(\n 'rounded-xl mt-2 w-66 ease-in-out h-0 p-0 z-50 bg-neutral-white opacity-0 transition-all duration-200',\n {\n variants: {\n mode: {\n inline: '',\n popover: 'top-12 -right-4 shadow-custom p-4 absolute',\n },\n isSearchOpen: {\n true: '',\n false: '',\n },\n isFocused: {\n true: '',\n false: '',\n },\n },\n compoundVariants: [\n {\n mode: 'popover',\n isSearchOpen: true,\n isFocused: true,\n class: 'p-4 h-min opacity-100',\n },\n {\n mode: 'popover',\n isSearchOpen: false,\n class: 'pointer-events-none',\n },\n {\n mode: 'inline',\n isFocused: true,\n class:\n 'translate-y-0 pt-6 mt-0 bg-neutral-transparent h-min w-full opacity-100',\n },\n {\n mode: 'inline',\n isFocused: false,\n class: '-translate-y-3 pointer-events-none w-full',\n },\n ],\n }\n)\n\nexport function LogoLink({ compactMode = false }: { compactMode?: boolean }) {\n return (\n <a href=\"/\" className=\"flex items-center\" rel=\"home\">\n <Image\n src=\"/assets/images/brand-icon.svg\"\n alt=\"少年報導者 The Reporter for Kids\"\n loading=\"eager\"\n className={cn(\n 'h-5 tablet:h-6 desktop:h-8 ease-in-out w-auto transition-all duration-500',\n compactMode && 'desktop:h-[26px]'\n )}\n width={293}\n height={32}\n />\n </a>\n )\n}\n\ntype SearchInputSectionProps =\n | {\n mode: 'popover'\n isSearchOpen: boolean\n tags: string[]\n searchPlaceholder: string\n }\n | {\n mode: 'inline'\n tags: string[]\n searchPlaceholder: string\n }\n\nexport function SearchInputSection(props: SearchInputSectionProps) {\n const ref = useRef<HTMLInputElement>(null)\n const [isFocused, setIsFocused] = useState(false)\n const [searchValue, setSearchValue] = useState('')\n\n const mode = props.mode\n const isSearchOpen = mode === 'popover' && props.isSearchOpen\n const tags = props.tags\n const searchPlaceholder = props.searchPlaceholder\n\n useEffect(() => {\n if (mode === 'inline') {\n return\n }\n if (isSearchOpen) {\n ref.current?.focus()\n setIsFocused(true)\n document.body.classList.add('no-scroll')\n return\n }\n setIsFocused(false)\n document.body.classList.remove('no-scroll')\n }, [mode, isSearchOpen])\n\n return (\n <div\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n className={mode === 'inline' ? 'relative w-full' : 'h-11'}\n >\n <form\n role=\"search\"\n method=\"get\"\n action=\"/search\"\n className={searchFormVariants({\n mode,\n isSearchOpen: mode === 'popover' ? isSearchOpen : undefined,\n })}\n >\n <Input\n placeholder={searchPlaceholder}\n name=\"q\"\n title=\"Search for...\"\n aria-label=\"Search for...\"\n className=\"w-[99%]\"\n inputRef={ref}\n onChange={setSearchValue}\n value={searchValue}\n />\n </form>\n <div\n className={searchDropdownVariants({\n mode,\n isSearchOpen: mode === 'popover' ? isSearchOpen : undefined,\n isFocused,\n })}\n >\n <h3 className=\"prose-p3 font-bold mb-3 text-neutral-700\">熱門搜尋</h3>\n <div className=\"gap-2.5 flex flex-wrap\">\n {tags.map((keyword) => (\n <a\n key={keyword}\n className=\"px-3 py-1 prose-p2 font-bold cursor-pointer rounded-full bg-neutral-200 text-neutral-900 transition-colors duration-200 hover:bg-red-500 hover:text-neutral-white\"\n href={`/search?q=${encodeURIComponent(keyword)}`}\n >\n #{keyword}\n </a>\n ))}\n </div>\n </div>\n </div>\n )\n}\n\nexport function ActionButtons({\n hideCtaButtons = false,\n tags,\n searchPlaceholder,\n subscribeUrl,\n}: {\n hideCtaButtons?: boolean\n tags: string[]\n searchPlaceholder: string\n subscribeUrl: string\n}) {\n const [isSearchOpen, setIsSearchOpen] = useState(false)\n\n const containerRef = useRef<HTMLDivElement>(null)\n const buttonRef = useRef<HTMLButtonElement>(null)\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const containerElement = containerRef.current\n const buttonElement = buttonRef.current\n if (!containerElement || !buttonElement) return\n if (\n !containerElement.contains(event.target as Node) &&\n !buttonElement.contains(event.target as Node)\n ) {\n setIsSearchOpen(false)\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [])\n\n return (\n <div className=\"relative flex items-center\">\n <div className=\"mr-6 relative flex items-center\" ref={containerRef}>\n {/* CTA Buttons - Base layer */}\n {!hideCtaButtons && !isSearchOpen && (\n <div className=\"gap-4 flex items-center\">\n <Button variant=\"secondary\" size={32} asChild>\n <a href=\"/about#post\">投稿</a>\n </Button>\n <Button variant=\"primary\" size={32} asChild>\n <a href={subscribeUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n 訂閱\n </a>\n </Button>\n </div>\n )}\n\n <SearchInputSection\n isSearchOpen={isSearchOpen}\n mode=\"popover\"\n tags={tags}\n searchPlaceholder={searchPlaceholder}\n />\n </div>\n\n <button\n className=\"w-8 h-8 mr-4 flex cursor-pointer items-center justify-center rounded-full text-neutral-600 transition-all duration-200 hover:text-neutral-800\"\n aria-label=\"搜尋\"\n onClick={() => setIsSearchOpen(!isSearchOpen)}\n ref={buttonRef}\n >\n {isSearchOpen ? <ClearIcon /> : <SearchIcon />}\n </button>\n <button\n className=\"w-8 h-8 flex cursor-pointer items-center justify-center rounded-full text-neutral-600 transition-all duration-200 hover:text-neutral-800\"\n aria-label=\"設定\"\n >\n <SettingsIcon />\n </button>\n </div>\n )\n}\n\nexport function BottomNavigation({\n onHamburgerOverlayOpen,\n menuItems,\n}: {\n onHamburgerOverlayOpen: () => void\n menuItems: MenuItem[]\n}) {\n return (\n <div className=\"py-2 px-4 flex w-full items-center justify-between border-y border-neutral-border\">\n <HamburgerButton onHamburgerOverlayOpen={onHamburgerOverlayOpen} small />\n\n {menuItems.reduce((acc, item, index) => {\n return [\n ...acc,\n <div key={item.label} className=\"flex items-center\">\n <a\n href={item.href}\n className=\"py-1 prose-p1 font-bold! h-6 flex items-center text-neutral-900 transition-colors hover:text-red-400\"\n >\n {item.label}\n </a>\n </div>,\n ...(index < menuItems.length - 1\n ? [\n <div\n key={`separator-${index}`}\n className=\"h-4 mx-2 w-px bg-neutral-border\"\n />,\n ]\n : []),\n ]\n }, [] as React.ReactNode[])}\n </div>\n )\n}\n\nexport function HamburgerButton({\n onHamburgerOverlayOpen,\n small = false,\n}: {\n onHamburgerOverlayOpen: () => void\n small?: boolean\n}) {\n return (\n <button\n className={cn(\n 'rounded-sm ease-in-out flex cursor-pointer items-center justify-center transition-all duration-300 hover:[&>svg>path:nth-child(1)]:fill-blue-500 hover:[&>svg>path:nth-child(2)]:fill-red-500 hover:[&>svg>path:nth-child(3)]:fill-yellow-500 hover:[&>svg>rect:nth-child(1)]:fill-blue-500 hover:[&>svg>rect:nth-child(2)]:fill-red-500 hover:[&>svg>rect:nth-child(3)]:fill-yellow-500',\n small ? 'w-6 h-6' : 'w-8 h-8'\n )}\n onClick={onHamburgerOverlayOpen}\n >\n {small ? <HamburgerIconSmall /> : <HamburgerIcon />}\n </button>\n )\n}\n"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { default as useIsAtTop } from './use-is-at-top';
2
+ export { default as useMediaQuery } from './use-media-query';
3
+ export { ScrollLevel, default as useScrollLevel } from './use-scroll-level';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAA"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ Object.defineProperty(exports, "ScrollLevel", {
8
+ enumerable: true,
9
+ get: function () {
10
+ return _useScrollLevel.ScrollLevel;
11
+ }
12
+ });
13
+ Object.defineProperty(exports, "useIsAtTop", {
14
+ enumerable: true,
15
+ get: function () {
16
+ return _useIsAtTop.default;
17
+ }
18
+ });
19
+ Object.defineProperty(exports, "useMediaQuery", {
20
+ enumerable: true,
21
+ get: function () {
22
+ return _useMediaQuery.default;
23
+ }
24
+ });
25
+ Object.defineProperty(exports, "useScrollLevel", {
26
+ enumerable: true,
27
+ get: function () {
28
+ return _useScrollLevel.default;
29
+ }
30
+ });
31
+ var _useIsAtTop = _interopRequireDefault(require("./use-is-at-top"));
32
+ var _useMediaQuery = _interopRequireDefault(require("./use-media-query"));
33
+ var _useScrollLevel = _interopRequireWildcard(require("./use-scroll-level"));
34
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
35
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_useIsAtTop","_interopRequireDefault","require","_useMediaQuery","_useScrollLevel","_interopRequireWildcard","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set"],"sources":["../../src/hooks/index.ts"],"sourcesContent":["export { default as useIsAtTop } from './use-is-at-top'\nexport { default as useMediaQuery } from './use-media-query'\nexport { ScrollLevel, default as useScrollLevel } from './use-scroll-level'\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,cAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,eAAA,GAAAC,uBAAA,CAAAH,OAAA;AAA2E,SAAAI,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAF,wBAAAE,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAc,CAAA,SAAAI,CAAA,GAAAR,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAI,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAI,CAAA,IAAAV,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAgB,GAAA,CAAAnB,CAAA,EAAAQ,CAAA,GAAAA,CAAA"}
@@ -0,0 +1,3 @@
1
+ declare const useIsAtTop: (threshold?: number) => boolean;
2
+ export default useIsAtTop;
3
+ //# sourceMappingURL=use-is-at-top.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-is-at-top.d.ts","sourceRoot":"","sources":["../../src/hooks/use-is-at-top.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,UAAU,GAAI,kBAAc,YAiBjC,CAAA;AAED,eAAe,UAAU,CAAA"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ 'use client';
3
+
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _react = require("react");
9
+ const useIsAtTop = (threshold = 35) => {
10
+ const [isAtTop, setIsAtTop] = (0, _react.useState)(true);
11
+ (0, _react.useEffect)(() => {
12
+ const checkIsAtTop = () => {
13
+ setIsAtTop(window.scrollY <= threshold);
14
+ };
15
+ checkIsAtTop();
16
+ window.addEventListener('scroll', checkIsAtTop, {
17
+ passive: true
18
+ });
19
+ return () => {
20
+ window.removeEventListener('scroll', checkIsAtTop);
21
+ };
22
+ }, [threshold]);
23
+ return isAtTop;
24
+ };
25
+ var _default = exports.default = useIsAtTop;
26
+ //# sourceMappingURL=use-is-at-top.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-is-at-top.js","names":["Object","defineProperty","exports","value","default","_react","require","useIsAtTop","threshold","isAtTop","setIsAtTop","useState","useEffect","checkIsAtTop","window","scrollY","addEventListener","passive","removeEventListener","_default"],"sources":["../../src/hooks/use-is-at-top.ts"],"sourcesContent":["'use client'\nimport { useEffect, useState } from 'react'\n\nconst useIsAtTop = (threshold = 35) => {\n const [isAtTop, setIsAtTop] = useState(true)\n\n useEffect(() => {\n const checkIsAtTop = () => {\n setIsAtTop(window.scrollY <= threshold)\n }\n\n checkIsAtTop()\n window.addEventListener('scroll', checkIsAtTop, { passive: true })\n\n return () => {\n window.removeEventListener('scroll', checkIsAtTop)\n }\n }, [threshold])\n\n return isAtTop\n}\n\nexport default useIsAtTop\n"],"mappings":";AAAA,YAAY;;AAAAA,MAAA,CAAAC,cAAA,CAAAC,OAAA;EAAAC,KAAA;AAAA;AAAAD,OAAA,CAAAE,OAAA;AACZ,IAAAC,MAAA,GAAAC,OAAA;AAEA,MAAMC,UAAU,GAAGA,CAACC,SAAS,GAAG,EAAE,KAAK;EACrC,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAG,IAAAC,eAAQ,EAAC,IAAI,CAAC;EAE5C,IAAAC,gBAAS,EAAC,MAAM;IACd,MAAMC,YAAY,GAAGA,CAAA,KAAM;MACzBH,UAAU,CAACI,MAAM,CAACC,OAAO,IAAIP,SAAS,CAAC;IACzC,CAAC;IAEDK,YAAY,CAAC,CAAC;IACdC,MAAM,CAACE,gBAAgB,CAAC,QAAQ,EAAEH,YAAY,EAAE;MAAEI,OAAO,EAAE;IAAK,CAAC,CAAC;IAElE,OAAO,MAAM;MACXH,MAAM,CAACI,mBAAmB,CAAC,QAAQ,EAAEL,YAAY,CAAC;IACpD,CAAC;EACH,CAAC,EAAE,CAACL,SAAS,CAAC,CAAC;EAEf,OAAOC,OAAO;AAChB,CAAC;AAAA,IAAAU,QAAA,GAAAjB,OAAA,CAAAE,OAAA,GAEcG,UAAU"}
@@ -0,0 +1,7 @@
1
+ type UseMediaQueryOptions = {
2
+ defaultValue?: boolean;
3
+ initializeWithValue?: boolean;
4
+ };
5
+ declare function useMediaQuery(query: string, { defaultValue, initializeWithValue, }?: UseMediaQueryOptions): boolean;
6
+ export default useMediaQuery;
7
+ //# sourceMappingURL=use-media-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-media-query.d.ts","sourceRoot":"","sources":["../../src/hooks/use-media-query.ts"],"names":[],"mappings":"AAMA,KAAK,oBAAoB,GAAG;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B,CAAA;AAID,iBAAS,aAAa,CACpB,KAAK,EAAE,MAAM,EACb,EACE,YAAoB,EACpB,mBAA0B,GAC3B,GAAE,oBAAyB,GAC3B,OAAO,CAmCT;AAED,eAAe,aAAa,CAAA"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ 'use client';
3
+
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _react = require("react");
9
+ const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? _react.useLayoutEffect : _react.useEffect;
10
+ const IS_SERVER = typeof window === 'undefined';
11
+ function useMediaQuery(query, {
12
+ defaultValue = false,
13
+ initializeWithValue = true
14
+ } = {}) {
15
+ const getMatches = query => {
16
+ if (IS_SERVER) {
17
+ return defaultValue;
18
+ }
19
+ return window.matchMedia(query).matches;
20
+ };
21
+ const [matches, setMatches] = (0, _react.useState)(() => {
22
+ if (initializeWithValue && !IS_SERVER) {
23
+ return getMatches(query);
24
+ }
25
+ return defaultValue;
26
+ });
27
+
28
+ // Handles the change event of the media query.
29
+ function handleChange() {
30
+ setMatches(getMatches(query));
31
+ }
32
+ useIsomorphicLayoutEffect(() => {
33
+ const matchMedia = window.matchMedia(query);
34
+
35
+ // Triggered at the first client-side load and if query changes
36
+ handleChange();
37
+
38
+ // Use modern addEventListener/removeEventListener
39
+ matchMedia.addEventListener('change', handleChange);
40
+ return () => {
41
+ matchMedia.removeEventListener('change', handleChange);
42
+ };
43
+ }, [query]);
44
+ return matches;
45
+ }
46
+ var _default = exports.default = useMediaQuery;
47
+ //# sourceMappingURL=use-media-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-media-query.js","names":["Object","defineProperty","exports","value","default","_react","require","useIsomorphicLayoutEffect","window","useLayoutEffect","useEffect","IS_SERVER","useMediaQuery","query","defaultValue","initializeWithValue","getMatches","matchMedia","matches","setMatches","useState","handleChange","addEventListener","removeEventListener","_default"],"sources":["../../src/hooks/use-media-query.ts"],"sourcesContent":["'use client'\nimport { useEffect, useLayoutEffect, useState } from 'react'\n\nconst useIsomorphicLayoutEffect =\n typeof window !== 'undefined' ? useLayoutEffect : useEffect\n\ntype UseMediaQueryOptions = {\n defaultValue?: boolean\n initializeWithValue?: boolean\n}\n\nconst IS_SERVER = typeof window === 'undefined'\n\nfunction useMediaQuery(\n query: string,\n {\n defaultValue = false,\n initializeWithValue = true,\n }: UseMediaQueryOptions = {}\n): boolean {\n const getMatches = (query: string): boolean => {\n if (IS_SERVER) {\n return defaultValue\n }\n return window.matchMedia(query).matches\n }\n\n const [matches, setMatches] = useState<boolean>(() => {\n if (initializeWithValue && !IS_SERVER) {\n return getMatches(query)\n }\n return defaultValue\n })\n\n // Handles the change event of the media query.\n function handleChange() {\n setMatches(getMatches(query))\n }\n\n useIsomorphicLayoutEffect(() => {\n const matchMedia = window.matchMedia(query)\n\n // Triggered at the first client-side load and if query changes\n handleChange()\n\n // Use modern addEventListener/removeEventListener\n matchMedia.addEventListener('change', handleChange)\n\n return () => {\n matchMedia.removeEventListener('change', handleChange)\n }\n }, [query])\n\n return matches\n}\n\nexport default useMediaQuery\n"],"mappings":";AAAA,YAAY;;AAAAA,MAAA,CAAAC,cAAA,CAAAC,OAAA;EAAAC,KAAA;AAAA;AAAAD,OAAA,CAAAE,OAAA;AACZ,IAAAC,MAAA,GAAAC,OAAA;AAEA,MAAMC,yBAAyB,GAC7B,OAAOC,MAAM,KAAK,WAAW,GAAGC,sBAAe,GAAGC,gBAAS;AAO7D,MAAMC,SAAS,GAAG,OAAOH,MAAM,KAAK,WAAW;AAE/C,SAASI,aAAaA,CACpBC,KAAa,EACb;EACEC,YAAY,GAAG,KAAK;EACpBC,mBAAmB,GAAG;AACF,CAAC,GAAG,CAAC,CAAC,EACnB;EACT,MAAMC,UAAU,GAAIH,KAAa,IAAc;IAC7C,IAAIF,SAAS,EAAE;MACb,OAAOG,YAAY;IACrB;IACA,OAAON,MAAM,CAACS,UAAU,CAACJ,KAAK,CAAC,CAACK,OAAO;EACzC,CAAC;EAED,MAAM,CAACA,OAAO,EAAEC,UAAU,CAAC,GAAG,IAAAC,eAAQ,EAAU,MAAM;IACpD,IAAIL,mBAAmB,IAAI,CAACJ,SAAS,EAAE;MACrC,OAAOK,UAAU,CAACH,KAAK,CAAC;IAC1B;IACA,OAAOC,YAAY;EACrB,CAAC,CAAC;;EAEF;EACA,SAASO,YAAYA,CAAA,EAAG;IACtBF,UAAU,CAACH,UAAU,CAACH,KAAK,CAAC,CAAC;EAC/B;EAEAN,yBAAyB,CAAC,MAAM;IAC9B,MAAMU,UAAU,GAAGT,MAAM,CAACS,UAAU,CAACJ,KAAK,CAAC;;IAE3C;IACAQ,YAAY,CAAC,CAAC;;IAEd;IACAJ,UAAU,CAACK,gBAAgB,CAAC,QAAQ,EAAED,YAAY,CAAC;IAEnD,OAAO,MAAM;MACXJ,UAAU,CAACM,mBAAmB,CAAC,QAAQ,EAAEF,YAAY,CAAC;IACxD,CAAC;EACH,CAAC,EAAE,CAACR,KAAK,CAAC,CAAC;EAEX,OAAOK,OAAO;AAChB;AAAC,IAAAM,QAAA,GAAAtB,OAAA,CAAAE,OAAA,GAEcQ,aAAa"}
@@ -0,0 +1,11 @@
1
+ export declare enum ScrollLevel {
2
+ UP = "up",
3
+ DOWN_MINI = "down-mini",
4
+ DOWN_HIDDEN = "down-hidden"
5
+ }
6
+ declare const useScrollLevel: ({ scrollDownDistance, throttleThreshold, }?: {
7
+ scrollDownDistance?: number | undefined;
8
+ throttleThreshold?: number | undefined;
9
+ }) => ScrollLevel;
10
+ export default useScrollLevel;
11
+ //# sourceMappingURL=use-scroll-level.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-scroll-level.d.ts","sourceRoot":"","sources":["../../src/hooks/use-scroll-level.ts"],"names":[],"mappings":"AAIA,oBAAY,WAAW;IACrB,EAAE,OAAO;IACT,SAAS,cAAc;IACvB,WAAW,gBAAgB;CAC5B;AAOD,QAAA,MAAM,cAAc,GAAI;;;CAGlB,gBA+BL,CAAA;AAED,eAAe,cAAc,CAAA"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ 'use client';
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = exports.ScrollLevel = void 0;
9
+ var _throttle = _interopRequireDefault(require("lodash/throttle"));
10
+ var _react = require("react");
11
+ let ScrollLevel = exports.ScrollLevel = /*#__PURE__*/function (ScrollLevel) {
12
+ ScrollLevel["UP"] = "up";
13
+ ScrollLevel["DOWN_MINI"] = "down-mini";
14
+ ScrollLevel["DOWN_HIDDEN"] = "down-hidden";
15
+ return ScrollLevel;
16
+ }({});
17
+ var ScrollDirection = /*#__PURE__*/function (ScrollDirection) {
18
+ ScrollDirection["UP"] = "up";
19
+ ScrollDirection["DOWN"] = "down";
20
+ return ScrollDirection;
21
+ }(ScrollDirection || {});
22
+ const useScrollLevel = ({
23
+ scrollDownDistance = 10,
24
+ throttleThreshold = 200
25
+ } = {}) => {
26
+ const [scrollLevel, setScrollLevel] = (0, _react.useState)(ScrollLevel.UP);
27
+ (0, _react.useEffect)(() => {
28
+ let lastScrollY = window.scrollY;
29
+ const updateScrollLevel = (0, _throttle.default)(() => {
30
+ if (Math.abs(window.scrollY - lastScrollY) < scrollDownDistance) {
31
+ return;
32
+ }
33
+ const direction = window.scrollY > lastScrollY ? ScrollDirection.DOWN : ScrollDirection.UP;
34
+ let level = ScrollLevel.UP;
35
+ if (direction === ScrollDirection.DOWN) {
36
+ level = scrollLevel === ScrollLevel.UP ? ScrollLevel.DOWN_MINI : ScrollLevel.DOWN_HIDDEN;
37
+ }
38
+ if (level !== scrollLevel) {
39
+ setScrollLevel(level);
40
+ }
41
+ lastScrollY = window.scrollY > 0 ? window.scrollY : 0;
42
+ }, throttleThreshold);
43
+ window.addEventListener('scroll', updateScrollLevel, {
44
+ passive: true
45
+ });
46
+ return () => {
47
+ window.removeEventListener('scroll', updateScrollLevel);
48
+ };
49
+ }, [scrollLevel, scrollDownDistance, throttleThreshold]);
50
+ return scrollLevel;
51
+ };
52
+ var _default = exports.default = useScrollLevel;
53
+ //# sourceMappingURL=use-scroll-level.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-scroll-level.js","names":["_interopRequireDefault","require","Object","defineProperty","exports","value","default","ScrollLevel","_throttle","_react","ScrollDirection","useScrollLevel","scrollDownDistance","throttleThreshold","scrollLevel","setScrollLevel","useState","UP","useEffect","lastScrollY","window","scrollY","updateScrollLevel","throttle","Math","abs","direction","DOWN","level","DOWN_MINI","DOWN_HIDDEN","addEventListener","passive","removeEventListener","_default"],"sources":["../../src/hooks/use-scroll-level.ts"],"sourcesContent":["'use client'\nimport throttle from 'lodash/throttle'\nimport { useEffect, useState } from 'react'\n\nexport enum ScrollLevel {\n UP = 'up',\n DOWN_MINI = 'down-mini',\n DOWN_HIDDEN = 'down-hidden',\n}\n\nenum ScrollDirection {\n UP = 'up',\n DOWN = 'down',\n}\n\nconst useScrollLevel = ({\n scrollDownDistance = 10,\n throttleThreshold = 200,\n} = {}) => {\n const [scrollLevel, setScrollLevel] = useState<ScrollLevel>(ScrollLevel.UP)\n\n useEffect(() => {\n let lastScrollY = window.scrollY\n const updateScrollLevel = throttle(() => {\n if (Math.abs(window.scrollY - lastScrollY) < scrollDownDistance) {\n return\n }\n const direction =\n window.scrollY > lastScrollY ? ScrollDirection.DOWN : ScrollDirection.UP\n let level = ScrollLevel.UP\n if (direction === ScrollDirection.DOWN) {\n level =\n scrollLevel === ScrollLevel.UP\n ? ScrollLevel.DOWN_MINI\n : ScrollLevel.DOWN_HIDDEN\n }\n if (level !== scrollLevel) {\n setScrollLevel(level)\n }\n lastScrollY = window.scrollY > 0 ? window.scrollY : 0\n }, throttleThreshold)\n\n window.addEventListener('scroll', updateScrollLevel, { passive: true })\n return () => {\n window.removeEventListener('scroll', updateScrollLevel)\n }\n }, [scrollLevel, scrollDownDistance, throttleThreshold])\n\n return scrollLevel\n}\n\nexport default useScrollLevel\n"],"mappings":";AAAA,YAAY;;AAAA,IAAAA,sBAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,cAAA,CAAAC,OAAA;EAAAC,KAAA;AAAA;AAAAD,OAAA,CAAAE,OAAA,GAAAF,OAAA,CAAAG,WAAA;AACZ,IAAAC,SAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,MAAA,GAAAR,OAAA;AAA2C,IAE/BM,WAAW,GAAAH,OAAA,CAAAG,WAAA,0BAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAA,OAAXA,WAAW;AAAA;AAAA,IAMlBG,eAAe,0BAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA,EAAfA,eAAe;AAKpB,MAAMC,cAAc,GAAGA,CAAC;EACtBC,kBAAkB,GAAG,EAAE;EACvBC,iBAAiB,GAAG;AACtB,CAAC,GAAG,CAAC,CAAC,KAAK;EACT,MAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAG,IAAAC,eAAQ,EAAcT,WAAW,CAACU,EAAE,CAAC;EAE3E,IAAAC,gBAAS,EAAC,MAAM;IACd,IAAIC,WAAW,GAAGC,MAAM,CAACC,OAAO;IAChC,MAAMC,iBAAiB,GAAG,IAAAC,iBAAQ,EAAC,MAAM;MACvC,IAAIC,IAAI,CAACC,GAAG,CAACL,MAAM,CAACC,OAAO,GAAGF,WAAW,CAAC,GAAGP,kBAAkB,EAAE;QAC/D;MACF;MACA,MAAMc,SAAS,GACbN,MAAM,CAACC,OAAO,GAAGF,WAAW,GAAGT,eAAe,CAACiB,IAAI,GAAGjB,eAAe,CAACO,EAAE;MAC1E,IAAIW,KAAK,GAAGrB,WAAW,CAACU,EAAE;MAC1B,IAAIS,SAAS,KAAKhB,eAAe,CAACiB,IAAI,EAAE;QACtCC,KAAK,GACHd,WAAW,KAAKP,WAAW,CAACU,EAAE,GAC1BV,WAAW,CAACsB,SAAS,GACrBtB,WAAW,CAACuB,WAAW;MAC/B;MACA,IAAIF,KAAK,KAAKd,WAAW,EAAE;QACzBC,cAAc,CAACa,KAAK,CAAC;MACvB;MACAT,WAAW,GAAGC,MAAM,CAACC,OAAO,GAAG,CAAC,GAAGD,MAAM,CAACC,OAAO,GAAG,CAAC;IACvD,CAAC,EAAER,iBAAiB,CAAC;IAErBO,MAAM,CAACW,gBAAgB,CAAC,QAAQ,EAAET,iBAAiB,EAAE;MAAEU,OAAO,EAAE;IAAK,CAAC,CAAC;IACvE,OAAO,MAAM;MACXZ,MAAM,CAACa,mBAAmB,CAAC,QAAQ,EAAEX,iBAAiB,CAAC;IACzD,CAAC;EACH,CAAC,EAAE,CAACR,WAAW,EAAEF,kBAAkB,EAAEC,iBAAiB,CAAC,CAAC;EAExD,OAAOC,WAAW;AACpB,CAAC;AAAA,IAAAoB,QAAA,GAAA9B,OAAA,CAAAE,OAAA,GAEcK,cAAc"}
@@ -0,0 +1,17 @@
1
+ export declare const HamburgerIcon: () => import("react/jsx-runtime").JSX.Element;
2
+ export declare const SearchIcon: () => import("react/jsx-runtime").JSX.Element;
3
+ export declare const SearchIconSmall: () => import("react/jsx-runtime").JSX.Element;
4
+ export declare const ClearIcon: () => import("react/jsx-runtime").JSX.Element;
5
+ export declare const LoginIcon: () => import("react/jsx-runtime").JSX.Element;
6
+ export declare const SettingsIcon: () => import("react/jsx-runtime").JSX.Element;
7
+ export declare const SettingsIconSmall: () => import("react/jsx-runtime").JSX.Element;
8
+ export declare const FBIcon: () => import("react/jsx-runtime").JSX.Element;
9
+ export declare const IGIcon: () => import("react/jsx-runtime").JSX.Element;
10
+ export declare const YouTubeIcon: () => import("react/jsx-runtime").JSX.Element;
11
+ export declare const ThreadsIcon: () => import("react/jsx-runtime").JSX.Element;
12
+ export declare const MediumIcon: () => import("react/jsx-runtime").JSX.Element;
13
+ export declare const TwitterIcon: () => import("react/jsx-runtime").JSX.Element;
14
+ export declare const GithubIcon: () => import("react/jsx-runtime").JSX.Element;
15
+ export declare const RSSIcon: () => import("react/jsx-runtime").JSX.Element;
16
+ export declare const HamburgerIconSmall: () => import("react/jsx-runtime").JSX.Element;
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/icons/index.tsx"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,+CA8BzB,CAAA;AAED,eAAO,MAAM,UAAU,+CAoBtB,CAAA;AAED,eAAO,MAAM,eAAe,+CAoB3B,CAAA;AAED,eAAO,MAAM,SAAS,+CAarB,CAAA;AAED,eAAO,MAAM,SAAS,+CA0BrB,CAAA;AAED,eAAO,MAAM,YAAY,+CAaxB,CAAA;AAED,eAAO,MAAM,iBAAiB,+CAa7B,CAAA;AAED,eAAO,MAAM,MAAM,+CAalB,CAAA;AAED,eAAO,MAAM,MAAM,+CA4BlB,CAAA;AAED,eAAO,MAAM,WAAW,+CAoBvB,CAAA;AAED,eAAO,MAAM,WAAW,+CAoBvB,CAAA;AAED,eAAO,MAAM,UAAU,+CAoBtB,CAAA;AAED,eAAO,MAAM,WAAW,+CA0BvB,CAAA;AAED,eAAO,MAAM,UAAU,+CAwBtB,CAAA;AAED,eAAO,MAAM,OAAO,+CAoBnB,CAAA;AAED,eAAO,MAAM,kBAAkB,+CAqB9B,CAAA"}