polpo 0.1.0 → 0.1.2

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 (128) hide show
  1. package/.storybook/theme.ts +2 -2
  2. package/.turbo/turbo-build.log +0 -77
  3. package/.turbo/turbo-lint.log +1 -1
  4. package/README.md +2 -5
  5. package/dist/chunk-CFYQBHH5.js +3 -0
  6. package/dist/chunk-CFYQBHH5.js.map +1 -0
  7. package/dist/chunk-MAWW6AA7.js +3 -0
  8. package/dist/chunk-MAWW6AA7.js.map +1 -0
  9. package/dist/get-modal-position-drle0OjP.d.cts +49 -0
  10. package/dist/get-modal-position-drle0OjP.d.ts +49 -0
  11. package/dist/helpers.cjs +1 -1
  12. package/dist/helpers.cjs.map +1 -1
  13. package/dist/helpers.d.cts +9 -2
  14. package/dist/helpers.d.ts +9 -2
  15. package/dist/helpers.js +1 -1
  16. package/dist/hooks.cjs +1 -1
  17. package/dist/hooks.cjs.map +1 -1
  18. package/dist/hooks.d.cts +59 -21
  19. package/dist/hooks.d.ts +59 -21
  20. package/dist/hooks.js +1 -1
  21. package/dist/ui.cjs +601 -389
  22. package/dist/ui.cjs.map +1 -1
  23. package/dist/ui.d.cts +97 -77
  24. package/dist/ui.d.ts +97 -77
  25. package/dist/ui.js +585 -373
  26. package/dist/ui.js.map +1 -1
  27. package/dist/use-modal-in-container-DiNW1PE_.d.cts +34 -0
  28. package/dist/use-modal-in-container-neGo-kMk.d.ts +34 -0
  29. package/package.json +5 -5
  30. package/src/components/buttons/button/button.stories.tsx +4 -4
  31. package/src/components/buttons/button/button.style.ts +10 -5
  32. package/src/components/buttons/button/button.tsx +7 -19
  33. package/src/components/cards/flip-card/flip-card.tsx +1 -1
  34. package/src/components/cursor/cursor.stories.tsx +35 -0
  35. package/src/components/cursor/cursor.style.ts +73 -0
  36. package/src/components/cursor/cursor.tsx +49 -0
  37. package/src/components/cursor/index.ts +1 -0
  38. package/src/components/form/checkbox/checkbox.stories.tsx +51 -0
  39. package/src/components/form/checkbox/checkbox.style.ts +73 -37
  40. package/src/components/form/checkbox/checkbox.tsx +38 -4
  41. package/src/components/form/field/field.stories.tsx +5 -1
  42. package/src/components/form/field/field.style.ts +12 -0
  43. package/src/components/form/field/field.tsx +3 -1
  44. package/src/components/form/field/field.types.ts +6 -0
  45. package/src/components/form/input-color/input-color.style.ts +5 -4
  46. package/src/components/form/input-color/input-color.tsx +41 -44
  47. package/src/components/form/radio/radio.stories.tsx +29 -5
  48. package/src/components/form/radio/radio.style.ts +45 -24
  49. package/src/components/form/radio/radio.tsx +22 -3
  50. package/src/components/form/select/options.tsx +119 -67
  51. package/src/components/form/select/select.stories.tsx +103 -42
  52. package/src/components/form/select/select.style.ts +10 -92
  53. package/src/components/form/select/select.tsx +19 -42
  54. package/src/components/form/select/select.types.ts +4 -21
  55. package/src/components/form/slider/slider.style.ts +2 -0
  56. package/src/components/icon/icons/social.tsx +17 -1
  57. package/src/components/index.ts +1 -0
  58. package/src/components/infinity-scroll/infinity-scroll.tsx +1 -1
  59. package/src/components/line/line.stories.tsx +3 -4
  60. package/src/components/modals/action-modal/action-modal.stories.tsx +58 -39
  61. package/src/components/modals/action-modal/action-modal.style.ts +13 -25
  62. package/src/components/modals/action-modal/action-modal.tsx +68 -70
  63. package/src/components/modals/aside-modal/aside-modal.stories.tsx +11 -15
  64. package/src/components/modals/aside-modal/aside-modal.style.ts +17 -37
  65. package/src/components/modals/aside-modal/aside-modal.tsx +41 -43
  66. package/src/components/modals/confirmation-modal/confirmation-modal.stories.tsx +21 -9
  67. package/src/components/modals/index.ts +2 -0
  68. package/src/components/modals/menu/index.ts +1 -0
  69. package/src/components/modals/menu/menu.stories.tsx +69 -0
  70. package/src/components/modals/menu/menu.style.ts +62 -0
  71. package/src/components/modals/menu/menu.tsx +142 -0
  72. package/src/components/modals/modal/backdrop.tsx +70 -0
  73. package/src/components/modals/modal/index.ts +1 -0
  74. package/src/components/modals/modal/modal.stories.tsx +325 -0
  75. package/src/components/modals/modal/modal.style.ts +62 -2
  76. package/src/components/modals/modal/modal.tsx +82 -123
  77. package/src/components/modals/portal/index.ts +1 -0
  78. package/src/components/modals/portal/portal.tsx +18 -0
  79. package/src/components/tabs/tabs-list.tsx +13 -10
  80. package/src/components/tabs/tabs.style.ts +48 -43
  81. package/src/components/tag/tag.stories.tsx +11 -12
  82. package/src/components/tag/tag.style.ts +9 -4
  83. package/src/components/tag/tag.tsx +2 -12
  84. package/src/components/tooltips/tooltip/tooltip.stories.tsx +5 -2
  85. package/src/components/tooltips/tooltip/tooltip.style.ts +37 -6
  86. package/src/components/tooltips/tooltip/tooltip.tsx +33 -19
  87. package/src/components/typography/typography.stories.tsx +3 -1
  88. package/src/components/typography/typography.tsx +21 -0
  89. package/src/contexts/theme-context/theme.animations.ts +91 -2
  90. package/src/contexts/theme-context/theme.defaults.ts +1 -1
  91. package/src/core/http-client.ts +49 -47
  92. package/src/core/variants/color.ts +3 -30
  93. package/src/core/variants/radius.ts +12 -41
  94. package/src/core/variants/size.ts +8 -33
  95. package/src/helpers/get-modal-position-relative-to-screen.ts +86 -0
  96. package/src/helpers/get-modal-position.ts +173 -28
  97. package/src/helpers/index.ts +1 -0
  98. package/src/hooks/index.ts +9 -3
  99. package/src/hooks/use-click-outside.ts +32 -0
  100. package/src/hooks/use-cookie.ts +124 -0
  101. package/src/hooks/use-dimensions.ts +11 -14
  102. package/src/hooks/use-dom-container.ts +32 -0
  103. package/src/hooks/use-event-listener.ts +4 -4
  104. package/src/hooks/use-geolocation.ts +63 -0
  105. package/src/hooks/use-in-view.ts +9 -11
  106. package/src/hooks/use-intersection-observer.ts +19 -0
  107. package/src/hooks/use-modal-in-container.ts +60 -52
  108. package/src/hooks/use-modal-transition.ts +54 -0
  109. package/src/hooks/use-modal.ts +21 -0
  110. package/src/hooks/use-mouse-position.ts +55 -7
  111. package/src/hooks/use-resize-observer.ts +18 -0
  112. package/src/stories/GettingStarted.mdx +2 -6
  113. package/svg/Name=npm, Category=social.svg +3 -0
  114. package/tsconfig.json +1 -0
  115. package/vite.config.ts +1 -0
  116. package/.turbo/daemon/f5c5c8fb195b01d0-turbo.log.2024-05-26 +0 -0
  117. package/.turbo/turbo-build$colon$watch.log +0 -96
  118. package/.turbo/turbo-build-storybook.log +0 -0
  119. package/.turbo/turbo-lint$colon$fix.log +0 -2
  120. package/dist/chunk-M4KRSYE7.js +0 -3
  121. package/dist/chunk-M4KRSYE7.js.map +0 -1
  122. package/dist/chunk-U5XSMSKZ.js +0 -3
  123. package/dist/chunk-U5XSMSKZ.js.map +0 -1
  124. package/dist/get-modal-position-DPftPoU2.d.cts +0 -28
  125. package/dist/get-modal-position-DPftPoU2.d.ts +0 -28
  126. package/src/components/form/select/select-option.tsx +0 -84
  127. package/src/hooks/use-observer.ts +0 -18
  128. package/src/hooks/use-on-click-outside-ref.ts +0 -17
package/tsconfig.json CHANGED
@@ -7,6 +7,7 @@
7
7
  "outDir": "dist",
8
8
  "baseUrl": "src",
9
9
  "paths": {
10
+ "@polpo/ui": ["./"],
10
11
  "@polpo/helpers": ["./helpers"],
11
12
  "@polpo/hooks": ["./hooks"]
12
13
  }
package/vite.config.ts CHANGED
@@ -6,6 +6,7 @@ export default defineConfig({
6
6
  plugins: [react()],
7
7
  resolve: {
8
8
  alias: {
9
+ '@polpo/ui': '/src',
9
10
  '@polpo/helpers': '/src/helpers',
10
11
  '@polpo/hooks': '/src/hooks',
11
12
  },
@@ -1,96 +0,0 @@
1
- $ tsup --watch
2
- CLI Building entry: ./src/index.ts
3
- CLI Using tsconfig: tsconfig.json
4
- CLI tsup v8.0.2
5
- CLI Using tsup config: /Users/juanmsl/Code/personal/monorepo-juanmsl/packages/ui/tsup.config.cjs
6
- CLI Running in watch mode
7
- CLI Target: node20
8
- ESM Build start
9
- CJS Build start
10
- DTS Build start
11
- ESM dist/index.js 130.51 KB
12
- ESM dist/index.js.map 266.39 KB
13
- ESM ⚡️ Build success in 240ms
14
- CJS dist/index.cjs 136.19 KB
15
- CJS dist/index.cjs.map 266.39 KB
16
- CJS ⚡️ Build success in 240ms
17
- CLI Watching for changes in "."
18
- CLI Ignoring changes in "**/{.git,node_modules}/**" | "./dist"
19
- src/components/accordion/accordion.tsx(1,31): error TS7016: Could not find a declaration file for module '@juanmsl/hooks'. '/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/hooks/dist/index.cjs' implicitly has an 'any' type.
20
- Try `npm i --save-dev @types/juanmsl__hooks` if it exists or add a new declaration (.d.ts) file containing `declare module '@juanmsl/hooks';`
21
-
22
- DTS Build failed
23
- Error: error occured in dts build
24
- at Worker.<anonymous> (/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/ui/node_modules/tsup/dist/index.js:2693:26)
25
- at Worker.emit (node:events:518:28)
26
- at MessagePort.<anonymous> (node:internal/worker:263:53)
27
- at [nodejs.internal.kHybridDispatch] (node:internal/event_target:826:20)
28
- at exports.emitMessage (node:internal/per_context/messageport:23:28)
29
- RollupError: [plugin dts] src/components/accordion/accordion.tsx: Failed to compile. Check the logs above.
30
- at getRollupError (/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/ui/node_modules/rollup/dist/shared/parseAst.js:282:41)
31
- at Object.error (/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/ui/node_modules/rollup/dist/shared/parseAst.js:278:42)
32
- at Object.error (/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/ui/node_modules/rollup/dist/shared/rollup.js:813:32)
33
- at Object.error (/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/ui/node_modules/rollup/dist/shared/rollup.js:19565:42)
34
- at generateDtsFromTs (/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/ui/node_modules/tsup/dist/rollup.js:7776:22)
35
- at /Users/juanmsl/Code/personal/monorepo-juanmsl/packages/ui/node_modules/tsup/dist/rollup.js:7783:59
36
- at _nullishCoalesce (/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/ui/node_modules/tsup/dist/rollup.js:1:198)
37
- at Object.transform (/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/ui/node_modules/tsup/dist/rollup.js:7783:18)
38
- at /Users/juanmsl/Code/personal/monorepo-juanmsl/packages/ui/node_modules/rollup/dist/shared/rollup.js:998:40
39
- src/components/hover-card/hover-card.tsx(1,34): error TS7016: Could not find a declaration file for module '@juanmsl/hooks'. '/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/hooks/dist/index.cjs' implicitly has an 'any' type.
40
- Try `npm i --save-dev @types/juanmsl__hooks` if it exists or add a new declaration (.d.ts) file containing `declare module '@juanmsl/hooks';`
41
-
42
- src/components/line/line.tsx(1,31): error TS7016: Could not find a declaration file for module '@juanmsl/hooks'. '/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/hooks/dist/index.cjs' implicitly has an 'any' type.
43
- Try `npm i --save-dev @types/juanmsl__hooks` if it exists or add a new declaration (.d.ts) file containing `declare module '@juanmsl/hooks';`
44
-
45
- src/components/infinity-scroll/infinity-scroll.tsx(1,42): error TS7016: Could not find a declaration file for module '@juanmsl/hooks'. '/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/hooks/dist/index.cjs' implicitly has an 'any' type.
46
- Try `npm i --save-dev @types/juanmsl__hooks` if it exists or add a new declaration (.d.ts) file containing `declare module '@juanmsl/hooks';`
47
-
48
- src/components/tabs/tabs.tsx(1,31): error TS7016: Could not find a declaration file for module '@juanmsl/hooks'. '/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/hooks/dist/index.cjs' implicitly has an 'any' type.
49
- Try `npm i --save-dev @types/juanmsl__hooks` if it exists or add a new declaration (.d.ts) file containing `declare module '@juanmsl/hooks';`
50
-
51
- src/components/tag/tag.tsx(1,31): error TS7016: Could not find a declaration file for module '@juanmsl/hooks'. '/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/hooks/dist/index.cjs' implicitly has an 'any' type.
52
- Try `npm i --save-dev @types/juanmsl__hooks` if it exists or add a new declaration (.d.ts) file containing `declare module '@juanmsl/hooks';`
53
-
54
- src/components/tooltip/tooltip.tsx(1,31): error TS7016: Could not find a declaration file for module '@juanmsl/hooks'. '/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/hooks/dist/index.cjs' implicitly has an 'any' type.
55
- Try `npm i --save-dev @types/juanmsl__hooks` if it exists or add a new declaration (.d.ts) file containing `declare module '@juanmsl/hooks';`
56
-
57
- src/components/typography/typography.tsx(1,31): error TS7016: Could not find a declaration file for module '@juanmsl/hooks'. '/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/hooks/dist/index.cjs' implicitly has an 'any' type.
58
- Try `npm i --save-dev @types/juanmsl__hooks` if it exists or add a new declaration (.d.ts) file containing `declare module '@juanmsl/hooks';`
59
-
60
- src/components/form/input-file/input-file.tsx(2,60): error TS7016: Could not find a declaration file for module '@juanmsl/hooks'. '/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/hooks/dist/index.cjs' implicitly has an 'any' type.
61
- Try `npm i --save-dev @types/juanmsl__hooks` if it exists or add a new declaration (.d.ts) file containing `declare module '@juanmsl/hooks';`
62
- src/components/form/input-file/input-file.tsx(104,52): error TS7006: Parameter 'prev' implicitly has an 'any' type.
63
- src/components/form/input-file/input-file.tsx(104,60): error TS7031: Binding element 'size' implicitly has an 'any' type.
64
-
65
- src/components/buttons/button/button.tsx(1,31): error TS7016: Could not find a declaration file for module '@juanmsl/hooks'. '/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/hooks/dist/index.cjs' implicitly has an 'any' type.
66
- Try `npm i --save-dev @types/juanmsl__hooks` if it exists or add a new declaration (.d.ts) file containing `declare module '@juanmsl/hooks';`
67
-
68
- src/components/modals/modal/modal.tsx(1,29): error TS7016: Could not find a declaration file for module '@juanmsl/hooks'. '/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/hooks/dist/index.cjs' implicitly has an 'any' type.
69
- Try `npm i --save-dev @types/juanmsl__hooks` if it exists or add a new declaration (.d.ts) file containing `declare module '@juanmsl/hooks';`
70
-
71
- src/components/form2/date-picker/date-picker.tsx(1,34): error TS7016: Could not find a declaration file for module '@juanmsl/hooks'. '/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/hooks/dist/index.cjs' implicitly has an 'any' type.
72
- Try `npm i --save-dev @types/juanmsl__hooks` if it exists or add a new declaration (.d.ts) file containing `declare module '@juanmsl/hooks';`
73
-
74
- src/components/form2/input/input.tsx(1,34): error TS7016: Could not find a declaration file for module '@juanmsl/hooks'. '/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/hooks/dist/index.cjs' implicitly has an 'any' type.
75
- Try `npm i --save-dev @types/juanmsl__hooks` if it exists or add a new declaration (.d.ts) file containing `declare module '@juanmsl/hooks';`
76
-
77
- src/components/form2/field/field.tsx(1,31): error TS7016: Could not find a declaration file for module '@juanmsl/hooks'. '/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/hooks/dist/index.cjs' implicitly has an 'any' type.
78
- Try `npm i --save-dev @types/juanmsl__hooks` if it exists or add a new declaration (.d.ts) file containing `declare module '@juanmsl/hooks';`
79
-
80
- src/components/form2/input-password/input-password.tsx(1,51): error TS7016: Could not find a declaration file for module '@juanmsl/hooks'. '/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/hooks/dist/index.cjs' implicitly has an 'any' type.
81
- Try `npm i --save-dev @types/juanmsl__hooks` if it exists or add a new declaration (.d.ts) file containing `declare module '@juanmsl/hooks';`
82
-
83
- src/components/form2/input-color/input-color.tsx(1,37): error TS7016: Could not find a declaration file for module '@juanmsl/hooks'. '/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/hooks/dist/index.cjs' implicitly has an 'any' type.
84
- Try `npm i --save-dev @types/juanmsl__hooks` if it exists or add a new declaration (.d.ts) file containing `declare module '@juanmsl/hooks';`
85
-
86
- src/components/form2/slider/slider.tsx(1,34): error TS7016: Could not find a declaration file for module '@juanmsl/hooks'. '/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/hooks/dist/index.cjs' implicitly has an 'any' type.
87
- Try `npm i --save-dev @types/juanmsl__hooks` if it exists or add a new declaration (.d.ts) file containing `declare module '@juanmsl/hooks';`
88
- src/components/form2/slider/slider.tsx(58,15): error TS7006: Parameter 'value' implicitly has an 'any' type.
89
-
90
- src/components/form2/select/select.tsx(1,37): error TS7016: Could not find a declaration file for module '@juanmsl/hooks'. '/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/hooks/dist/index.cjs' implicitly has an 'any' type.
91
- Try `npm i --save-dev @types/juanmsl__hooks` if it exists or add a new declaration (.d.ts) file containing `declare module '@juanmsl/hooks';`
92
-
93
- src/components/form2/textarea/textarea.tsx(1,34): error TS7016: Could not find a declaration file for module '@juanmsl/hooks'. '/Users/juanmsl/Code/personal/monorepo-juanmsl/packages/hooks/dist/index.cjs' implicitly has an 'any' type.
94
- Try `npm i --save-dev @types/juanmsl__hooks` if it exists or add a new declaration (.d.ts) file containing `declare module '@juanmsl/hooks';`
95
- src/components/form2/textarea/textarea.tsx(45,15): error TS7006: Parameter 'value' implicitly has an 'any' type.
96
-
Binary file
@@ -1,2 +0,0 @@
1
- $ yarn lint --fix
2
- $ eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0 --fix
@@ -1,3 +0,0 @@
1
- "use client";
2
- var m=(t,o=2)=>{if(t===0)return"0 Bytes";let r=1e3,i=o<0?0:o,e=["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"],a=Math.floor(Math.log(t)/Math.log(r));return parseFloat((t/Math.pow(r,a)).toFixed(i))+" "+e[a]};import p from"moment/moment";var u=t=>Date.parse(t)?p(t,"YYYY-MM-DD").format("MMM YYYY"):t,b=(t,o)=>{let r=p(t);return Date.parse(o)?p(o).from(r,!0):r.fromNow()};var h=(e=>(e.top="top",e.left="left",e.right="right",e.bottom="bottom",e))(h||{}),M=({c:t,m:o,offset:r,windowOffset:i,position:e,distancePercentage:a=50})=>{let n=t.y+t.h+r,s=t.x-(o.w-t.w);switch(e){case"top":n=t.y-o.h-r,s=t.x-(o.w-t.w)*(a/100);break;case"bottom":n=t.y+t.h+r,s=t.x-(o.w-t.w)*(a/100);break;case"left":n=t.y-(o.h-t.h)*(a/100),s=t.x-o.w-r;break;case"right":n=t.y-(o.h-t.h)*(a/100),s=t.x+t.w+r;break}return{left:s+o.w+i>window.innerWidth?t.left-(s+o.w-window.innerWidth)-i:s,top:n+o.h+i>window.innerHeight?t.top-(n+o.h-window.innerHeight)-i:n}};var g=(t,o={})=>{let{separator:r=" ",variant:i="each-word",join:e=r}=o;return i==="first-word"?t[0].toUpperCase()+t.slice(1):t.split(r).map(n=>n[0].toUpperCase()+n.slice(1)).join(e)};export{m as a,u as b,b as c,h as d,M as e,g as f};
3
- //# sourceMappingURL=chunk-M4KRSYE7.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/helpers/format-bytes.ts","../src/helpers/format-dates.ts","../src/helpers/get-modal-position.ts","../src/helpers/text/to-capitalize.ts"],"sourcesContent":["export const formatBytes = (bytes: number, decimals = 2) => {\n if (bytes === 0) return '0 Bytes';\n\n const k = 1000;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\n};\n","import moment from 'moment/moment';\n\nexport const formatDate = (date: string) => {\n return Date.parse(date) ? moment(date, 'YYYY-MM-DD').format('MMM YYYY') : date;\n};\n\nexport const timeBetween = (date_start: string, date_end: string) => {\n const momentStart = moment(date_start);\n\n return Date.parse(date_end) ? moment(date_end).from(momentStart, true) : momentStart.fromNow();\n};\n","export enum POSITION {\n top = 'top',\n left = 'left',\n right = 'right',\n bottom = 'bottom',\n}\n\nexport type PositionObject = {\n x: number;\n y: number;\n top: number;\n left: number;\n w: number;\n h: number;\n};\n\nexport type GetModalPositionParams = {\n c: PositionObject;\n m: PositionObject;\n offset: number;\n windowOffset: number;\n position?: `${POSITION}`;\n distancePercentage?: number;\n};\n\nexport const getModalPosition = ({\n c,\n m,\n offset,\n windowOffset,\n position,\n distancePercentage = 50,\n}: GetModalPositionParams) => {\n // Default bottom\n let top = c.y + c.h + offset;\n let left = c.x - (m.w - c.w);\n\n switch (position) {\n case POSITION.top:\n top = c.y - m.h - offset;\n left = c.x - (m.w - c.w) * (distancePercentage / 100);\n\n break;\n case POSITION.bottom:\n top = c.y + c.h + offset;\n left = c.x - (m.w - c.w) * (distancePercentage / 100);\n\n break;\n case POSITION.left:\n top = c.y - (m.h - c.h) * (distancePercentage / 100);\n left = c.x - m.w - offset;\n\n break;\n case POSITION.right:\n top = c.y - (m.h - c.h) * (distancePercentage / 100);\n left = c.x + c.w + offset;\n\n break;\n }\n\n return {\n left:\n left + m.w + windowOffset > window.innerWidth ? c.left - (left + m.w - window.innerWidth) - windowOffset : left,\n top: top + m.h + windowOffset > window.innerHeight ? c.top - (top + m.h - window.innerHeight) - windowOffset : top,\n };\n};\n","export type ToCapitalizeOptions = Partial<{\n separator: string;\n join: string;\n variant: 'first-word' | 'each-word';\n}>;\n\nexport const toCapitalize = (text: string, options: ToCapitalizeOptions = {}) => {\n const { separator = ' ', variant = 'each-word', join = separator } = options;\n\n if (variant === 'first-word') {\n return text[0].toUpperCase() + text.slice(1);\n }\n\n const words = text.split(separator);\n\n return words.map(word => word[0].toUpperCase() + word.slice(1)).join(join);\n};\n"],"mappings":";AAAO,IAAMA,EAAc,CAACC,EAAeC,EAAW,IAAM,CAC1D,GAAID,IAAU,EAAG,MAAO,UAExB,IAAME,EAAI,IACJC,EAAKF,EAAW,EAAI,EAAIA,EACxBG,EAAQ,CAAC,QAAS,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAI,EAEhEC,EAAI,KAAK,MAAM,KAAK,IAAIL,CAAK,EAAI,KAAK,IAAIE,CAAC,CAAC,EAElD,OAAO,YAAYF,EAAQ,KAAK,IAAIE,EAAGG,CAAC,GAAG,QAAQF,CAAE,CAAC,EAAI,IAAMC,EAAMC,CAAC,CACzE,ECVA,OAAOC,MAAY,gBAEZ,IAAMC,EAAcC,GAClB,KAAK,MAAMA,CAAI,EAAIF,EAAOE,EAAM,YAAY,EAAE,OAAO,UAAU,EAAIA,EAG/DC,EAAc,CAACC,EAAoBC,IAAqB,CACnE,IAAMC,EAAcN,EAAOI,CAAU,EAErC,OAAO,KAAK,MAAMC,CAAQ,EAAIL,EAAOK,CAAQ,EAAE,KAAKC,EAAa,EAAI,EAAIA,EAAY,QAAQ,CAC/F,ECVO,IAAKC,OACVA,EAAA,IAAM,MACNA,EAAA,KAAO,OACPA,EAAA,MAAQ,QACRA,EAAA,OAAS,SAJCA,OAAA,IAyBCC,EAAmB,CAAC,CAC/B,EAAAC,EACA,EAAAC,EACA,OAAAC,EACA,aAAAC,EACA,SAAAC,EACA,mBAAAC,EAAqB,EACvB,IAA8B,CAE5B,IAAIC,EAAMN,EAAE,EAAIA,EAAE,EAAIE,EAClBK,EAAOP,EAAE,GAAKC,EAAE,EAAID,EAAE,GAE1B,OAAQI,EAAU,CAChB,IAAK,MACHE,EAAMN,EAAE,EAAIC,EAAE,EAAIC,EAClBK,EAAOP,EAAE,GAAKC,EAAE,EAAID,EAAE,IAAMK,EAAqB,KAEjD,MACF,IAAK,SACHC,EAAMN,EAAE,EAAIA,EAAE,EAAIE,EAClBK,EAAOP,EAAE,GAAKC,EAAE,EAAID,EAAE,IAAMK,EAAqB,KAEjD,MACF,IAAK,OACHC,EAAMN,EAAE,GAAKC,EAAE,EAAID,EAAE,IAAMK,EAAqB,KAChDE,EAAOP,EAAE,EAAIC,EAAE,EAAIC,EAEnB,MACF,IAAK,QACHI,EAAMN,EAAE,GAAKC,EAAE,EAAID,EAAE,IAAMK,EAAqB,KAChDE,EAAOP,EAAE,EAAIA,EAAE,EAAIE,EAEnB,KACJ,CAEA,MAAO,CACL,KACEK,EAAON,EAAE,EAAIE,EAAe,OAAO,WAAaH,EAAE,MAAQO,EAAON,EAAE,EAAI,OAAO,YAAcE,EAAeI,EAC7G,IAAKD,EAAML,EAAE,EAAIE,EAAe,OAAO,YAAcH,EAAE,KAAOM,EAAML,EAAE,EAAI,OAAO,aAAeE,EAAeG,CACjH,CACF,EC3DO,IAAME,EAAe,CAACC,EAAcC,EAA+B,CAAC,IAAM,CAC/E,GAAM,CAAE,UAAAC,EAAY,IAAK,QAAAC,EAAU,YAAa,KAAAC,EAAOF,CAAU,EAAID,EAErE,OAAIE,IAAY,aACPH,EAAK,CAAC,EAAE,YAAY,EAAIA,EAAK,MAAM,CAAC,EAG/BA,EAAK,MAAME,CAAS,EAErB,IAAIG,GAAQA,EAAK,CAAC,EAAE,YAAY,EAAIA,EAAK,MAAM,CAAC,CAAC,EAAE,KAAKD,CAAI,CAC3E","names":["formatBytes","bytes","decimals","k","dm","sizes","i","moment","formatDate","date","timeBetween","date_start","date_end","momentStart","POSITION","getModalPosition","c","m","offset","windowOffset","position","distancePercentage","top","left","toCapitalize","text","options","separator","variant","join","word"]}
@@ -1,3 +0,0 @@
1
- "use client";
2
- import{a as x,e as R}from"./chunk-M4KRSYE7.js";import{useCallback as p,useMemo as H,useReducer as C}from"react";import{useCallback as O,useLayoutEffect as N,useRef as P}from"react";var M=e=>{let t=P(!1);return N(()=>(t.current=!0,()=>{t.current=!1}),[]),O((...r)=>{t.current&&e(...r)},[e])};var k=(e,t)=>{switch(t.type){case"pending":return{status:"pending",data:null,error:null};case"resolved":return{status:"resolved",data:t.data,error:null};case"rejected":return{status:"rejected",data:null,error:t.error};default:throw new Error(`Unhandled action: ${JSON.stringify(t)}`)}},Le=e=>{let[t,r]=C(k,{status:"idle",data:null,error:null,...e}),n=M(r),o=p(u=>{n({type:"pending"}),u.then(i=>{n({type:"resolved",data:i})},i=>{n({type:"rejected",error:i})})},[n]),s=p(u=>n({type:"resolved",data:u}),[n]),a=p(u=>n({type:"rejected",error:u}),[n]);return H(()=>({setData:s,setError:a,run:o,...t}),[t,o,s,a])};import{useMemo as I}from"react";var Se=e=>I(()=>Object.entries(e).reduce((t,[r,n])=>n?[...t,r]:t,[]).join(" "),[e]);import{useState as j}from"react";var De=e=>j(e)[0];import{useEffect as F,useState as V}from"react";var Pe=(e,t=500)=>{let[r,n]=V(e);return F(()=>{let o=setTimeout(()=>n(e),t);return()=>{clearTimeout(o)}},[e,t]),r};import{useEffect as G,useState as B}from"react";import{useEffect as z,useLayoutEffect as Q,useRef as W}from"react";function c(e,t,r,n){let o=W(t);z(()=>{o.current=t},[t]),Q(()=>{let s=r?.current??window;if(!(s&&s.addEventListener))return;let a=u=>o.current(u);return s.addEventListener(e,a,n),()=>{s.removeEventListener(e,a,n)}},[e,r,n])}import{useEffect as U}from"react";var f=(e,t)=>{U(()=>{let r=null;return t&&e.current&&(r=new ResizeObserver(t),r.observe(e.current)),()=>{r&&r.disconnect()}},[e,t])};var Ue=e=>{let[t,r]=B({width:0,height:0}),n=()=>{r({width:e.current?.offsetWidth??0,height:e.current?.offsetHeight??0})};return c("resize",n),f(e,n),G(n,[e]),t};import{useEffect as J,useState as X}from"react";var Y=(r=>(r.PNG="image/png",r.PDF="application/pdf",r))(Y||{}),Xe=e=>{let[t,r]=X([]);return J(()=>{let n=[],o=!1;if(!Array.isArray(e)||e.length===0)r([]);else{let s=e.map(a=>new Promise((u,i)=>{let m=new FileReader;n.push(m),m.onload=d=>{d.target?.result&&u({name:a.name,size:a.size,formatSize:x(a.size),type:a.type,url:d.target.result})},m.onabort=()=>{i(new Error("File reading aborted"))},m.onerror=()=>{i(new Error("Failed to read file"))},m.readAsDataURL(a)}));Promise.all(s).then(a=>{o||r(a)})}return()=>{o=!0,n.forEach(s=>{s.abort()})}},[e]),t};import{useEffect as _,useRef as $,useState as K}from"react";var $e=(e={})=>{let[t,r]=K(!1),n=$(null);return _(()=>{let o=new IntersectionObserver(([s])=>{r(s.isIntersecting)},e);return n.current&&o.observe(n.current),()=>{o.disconnect()}},[e]),{ref:n,inView:t}};import{useCallback as v,useState as Z}from"react";var et=({onBlur:e,onFocus:t,onChange:r}={})=>{let[n,o]=Z(!1),s=v(i=>{o(!0),t&&t(i)},[t]),a=v(i=>{o(!1),e&&e(i)},[e]),u=v(i=>{r&&r(i)},[r]);return{isFocus:n,handlers:{onFocus:s,onBlur:a,onChange:u}}};import{useEffect as q,useState as ee}from"react";var rt=e=>{let[t,r]=ee(!1);return q(()=>{let n=window.matchMedia(e);n.matches!==t&&r(n.matches);let o=()=>{r(n.matches)};return n.addEventListener("change",o),()=>{n.removeEventListener("change",o)}},[t,e]),t};import{useCallback as L,useEffect as te,useLayoutEffect as ne,useRef as h,useState as g}from"react";var b=(e,t)=>{c("keydown",r=>{r.key==="Escape"&&t()}),c("mousedown",r=>{e.current&&!e.current.contains(r.target)&&t()})};var S=e=>({x:e.x,y:e.y,w:e.width,h:e.height,top:e.top,left:e.left}),Et=({closeOnClickOutside:e=!0,offset:t=5,windowOffset:r=10,position:n,distancePercentage:o=50}={})=>{let[s,a]=g(!1),[u,i]=g({}),m=h(null),d=h(null);te(()=>{e&&(document.documentElement.style.overflow=s?"hidden":"auto")},[s,e]),b(m,()=>{s&&e&&a(!1)});let E=L(A=>{let T=A.current?.getClientRects()[0],y=d.current?.getClientRects()[0];if(!y||!T){i({});return}let D=R({c:S(y),m:S(T),distancePercentage:o,windowOffset:r,position:n,offset:t});i(D)},[o,r,n,t]),l=L(()=>{s&&E(m)},[E,s]);return ne(l,[l]),f(d,l),f(m,l),c("resize",l),c("scroll",l,m),{isVisible:s,setIsVisible:a,modalStyle:u,containerRef:d,modalRef:m}};import{useState as re}from"react";var Mt=()=>{let[{x:e,y:t},r]=re({x:0,y:0});return c("mousemove",o=>{let{clientX:s,clientY:a}=o;r({x:s,y:a})}),[e,t]};import{useState as oe}from"react";var gt=()=>{let[e,t]=oe(navigator.onLine);return c("online",()=>t(navigator.onLine)),c("offline",()=>t(navigator.onLine)),e};import{useEffect as se,useRef as ae}from"react";var At=()=>{let e=ae(1);return se(()=>{e.current++}),e.current};import{useEffect as ie,useRef as ce,useState as ue}from"react";var Nt=()=>{let e=ce(null),[t,r]=ue([0,0]);return ie(()=>{let n=e.current,o=()=>{n&&r([n.scrollLeft,n.scrollTop])};return n&&n.addEventListener("scroll",o),()=>{n&&n.removeEventListener("scroll",o)}},[]),{ref:e,position:t}};import{useEffect as me,useState as w}from"react";function It(e){let[t,r]=w(e),[n,o]=w([]);return me(()=>{t!==void 0&&o(s=>[...s,t])},[t]),[t,r,n]}import{useCallback as de,useState as le}from"react";var Vt=(e=!1)=>{let[t,r]=le(e),n=de(()=>{r(o=>!o)},[]);return[t,n,r]};import{useCallback as fe,useState as pe}from"react";var Wt=(e,t=0)=>{let[r,n]=pe(t),o=fe(s=>{n(s!==void 0?s:a=>(a+1)%e.length)},[e.length]);return[e[r],o]};import{useEffect as ve,useState as Ee}from"react";var Jt=()=>{let e=()=>{let{innerWidth:n,innerHeight:o}=window;return{width:n,height:o,orientation:n>o?"landscape":"portrait"}},[t,r]=Ee(e);return c("resize",()=>{r(e())}),ve(()=>{r(e())},[]),t};export{M as a,Le as b,Se as c,De as d,Pe as e,c as f,f as g,Ue as h,Y as i,Xe as j,$e as k,et as l,rt as m,b as n,Et as o,Mt as p,gt as q,At as r,Nt as s,It as t,Vt as u,Wt as v,Jt as w};
3
- //# sourceMappingURL=chunk-U5XSMSKZ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/hooks/use-async.ts","../src/hooks/use-safe-dispatch.ts","../src/hooks/use-classnames.ts","../src/hooks/use-constant.ts","../src/hooks/use-debounce.ts","../src/hooks/use-dimensions.ts","../src/hooks/use-event-listener.ts","../src/hooks/use-observer.ts","../src/hooks/use-file-reader.ts","../src/hooks/use-in-view.ts","../src/hooks/use-input-handlers.ts","../src/hooks/use-media-query.ts","../src/hooks/use-modal-in-container.ts","../src/hooks/use-on-click-outside-ref.ts","../src/hooks/use-mouse-position.ts","../src/hooks/use-online-status.ts","../src/hooks/use-render-count.ts","../src/hooks/use-scroll.ts","../src/hooks/use-state-history.ts","../src/hooks/use-toggle.ts","../src/hooks/use-toggle-values.ts","../src/hooks/use-viewport.ts"],"sourcesContent":["import React, { useCallback, useMemo, useReducer } from 'react';\n\nimport { useSafeDispatch } from './use-safe-dispatch';\n\ntype AsyncState<T> =\n | {\n status: 'idle' | 'pending';\n data?: null;\n error?: null;\n }\n | {\n status: 'resolved';\n data: T;\n error: null;\n }\n | {\n status: 'rejected';\n data: null;\n error: Error;\n };\n\ntype AsyncAction<T> =\n | { type: 'reset' }\n | { type: 'pending' }\n | { type: 'resolved'; data: T }\n | { type: 'rejected'; error: Error };\n\nconst asyncReducer = <T>(_state: AsyncState<T>, action: AsyncAction<T>): AsyncState<T> => {\n switch (action.type) {\n case 'pending': {\n return { status: 'pending' as const, data: null, error: null };\n }\n case 'resolved': {\n return { status: 'resolved' as const, data: action.data, error: null };\n }\n case 'rejected': {\n return { status: 'rejected' as const, data: null, error: action.error };\n }\n default: {\n throw new Error(`Unhandled action: ${JSON.stringify(action)}`);\n }\n }\n};\n\nexport const useAsync = <T>(\n initialState?: AsyncState<T>,\n): AsyncState<T> & {\n setData: (data: T) => void;\n setError: (error: Error) => void;\n run: (promise: Promise<T>) => void;\n} => {\n const [asyncState, unsafeDispatch] = useReducer<React.Reducer<AsyncState<T>, AsyncAction<T>>>(asyncReducer, {\n status: 'idle',\n data: null,\n error: null,\n ...initialState,\n });\n const dispatch = useSafeDispatch(unsafeDispatch);\n\n const run = useCallback(\n (promise: Promise<T>) => {\n dispatch({ type: 'pending' });\n promise.then(\n data => {\n dispatch({ type: 'resolved', data });\n },\n (error: Error) => {\n dispatch({ type: 'rejected', error });\n },\n );\n },\n [dispatch],\n );\n\n const setData = useCallback((data: T) => dispatch({ type: 'resolved', data }), [dispatch]);\n\n const setError = useCallback((error: Error) => dispatch({ type: 'rejected', error }), [dispatch]);\n\n return useMemo(\n () => ({\n setData,\n setError,\n run,\n ...asyncState,\n }),\n [asyncState, run, setData, setError],\n );\n};\n","import React, { useCallback, useLayoutEffect, useRef } from 'react';\n\nexport const useSafeDispatch = <T>(dispatch: React.Dispatch<T>): ((action: T) => void) => {\n const mounted = useRef(false);\n\n useLayoutEffect(() => {\n mounted.current = true;\n\n return () => {\n mounted.current = false;\n };\n }, []);\n\n return useCallback(\n (...args: Parameters<React.Dispatch<T>>) => {\n if (mounted.current) {\n dispatch(...args);\n }\n },\n [dispatch],\n );\n};\n","import { useMemo } from 'react';\n\nexport const useClassNames = (classes: Record<string, boolean>): string =>\n useMemo<string>(\n () =>\n Object.entries(classes)\n .reduce<Array<string>>(\n (compiledClassNames, [classname, value]) => (value ? [...compiledClassNames, classname] : compiledClassNames),\n [],\n )\n .join(' '),\n [classes],\n );\n","import { useState } from 'react';\n\nexport const useConstant = <T>(initializer: T | (() => T)): T => useState(initializer)[0];\n","import { useEffect, useState } from 'react';\n\nexport const useDebounce = <T>(value: T, delay: number = 500): T => {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay);\n\n return () => {\n clearTimeout(timer);\n };\n }, [value, delay]);\n\n return debouncedValue;\n};\n","import React, { useEffect, useState } from 'react';\n\nimport { useEventListener } from './use-event-listener';\nimport { useObserver } from './use-observer';\n\nexport const useDimensions = (ref: React.RefObject<HTMLElement>) => {\n const [dimensions, setDimensions] = useState({ width: 0, height: 0 });\n\n const getSize = () => {\n setDimensions({\n width: ref.current?.offsetWidth ?? 0,\n height: ref.current?.offsetHeight ?? 0,\n });\n };\n\n useEventListener('resize', getSize);\n useObserver(ref, getSize);\n\n useEffect(getSize, [ref]);\n\n return dimensions;\n};\n","import { RefObject, useEffect, useLayoutEffect, useRef } from 'react';\n\nfunction useEventListener<EventName extends keyof MediaQueryListEventMap>(\n eventName: EventName,\n callback: (event: MediaQueryListEventMap[EventName]) => void,\n element: RefObject<MediaQueryList>,\n options?: boolean | AddEventListenerOptions,\n): void;\n\nfunction useEventListener<EventName extends keyof WindowEventMap>(\n eventName: EventName,\n callback: (event: WindowEventMap[EventName]) => void,\n element?: undefined,\n options?: boolean | AddEventListenerOptions,\n): void;\n\nfunction useEventListener<EventName extends keyof HTMLElementEventMap, ElementRef extends HTMLElement = HTMLDivElement>(\n eventName: EventName,\n callback: (event: HTMLElementEventMap[EventName]) => void,\n element: RefObject<ElementRef>,\n options?: boolean | AddEventListenerOptions,\n): void;\n\nfunction useEventListener<EventName extends keyof DocumentEventMap>(\n eventName: EventName,\n callback: (event: DocumentEventMap[EventName]) => void,\n element: RefObject<Document>,\n options?: boolean | AddEventListenerOptions,\n): void;\n\nfunction useEventListener<\n MediaQueryEventName extends keyof MediaQueryListEventMap,\n WindowEventName extends keyof WindowEventMap,\n ElementEventName extends keyof HTMLElementEventMap,\n DocumentEventName extends keyof DocumentEventMap,\n ElementRef extends HTMLElement | MediaQueryList | Document | Window | void = void,\n>(\n eventName: WindowEventName | DocumentEventName | ElementEventName | MediaQueryEventName,\n callback: (\n event:\n | MediaQueryListEventMap[MediaQueryEventName]\n | WindowEventMap[WindowEventName]\n | HTMLElementEventMap[ElementEventName]\n | DocumentEventMap[DocumentEventName]\n | Event,\n ) => void,\n element?: RefObject<ElementRef>,\n options?: boolean | AddEventListenerOptions,\n) {\n const callbackRef = useRef<EventListener>(callback);\n\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n useLayoutEffect(() => {\n const targetElement = element?.current ?? window;\n\n if (!(targetElement && targetElement.addEventListener)) return;\n\n const listener: typeof callback = event => callbackRef.current(event);\n\n targetElement.addEventListener(eventName, listener, options);\n\n return () => {\n targetElement.removeEventListener(eventName, listener, options);\n };\n }, [eventName, element, options]);\n}\n\nexport { useEventListener };\n","import { useEffect } from 'react';\n\nexport const useObserver = <T extends HTMLElement>(ref: React.RefObject<T>, callback: () => void) => {\n useEffect(() => {\n let observer = null;\n\n if (callback && ref.current) {\n observer = new ResizeObserver(callback);\n observer.observe(ref.current);\n }\n\n return () => {\n if (observer) {\n observer.disconnect();\n }\n };\n }, [ref, callback]);\n};\n","import { useEffect, useState } from 'react';\n\nimport { formatBytes } from '@polpo/helpers';\n\nexport enum FileTypeEnum {\n PNG = 'image/png',\n PDF = 'application/pdf',\n}\n\nexport type FileResolvedT = {\n name: string;\n size: number;\n formatSize: string;\n type: FileTypeEnum;\n url: FileReader['result'];\n};\n\nexport const useFileReader = (inputFiles: Array<File>) => {\n const [files, setFiles] = useState<Array<FileResolvedT>>([]);\n\n useEffect(() => {\n const fileReaders: Array<FileReader> = [];\n let isCancel = false;\n\n if (!Array.isArray(inputFiles) || inputFiles.length === 0) {\n setFiles([]);\n } else {\n const promises = inputFiles.map(file => {\n return new Promise<FileResolvedT>((resolve, reject) => {\n const fileReader = new FileReader();\n fileReaders.push(fileReader);\n fileReader.onload = (e: ProgressEvent<FileReader>) => {\n if (e.target?.result) {\n resolve({\n name: file.name,\n size: file.size,\n formatSize: formatBytes(file.size),\n type: file.type as FileTypeEnum,\n url: e.target.result,\n });\n }\n };\n fileReader.onabort = () => {\n reject(new Error('File reading aborted'));\n };\n fileReader.onerror = () => {\n reject(new Error('Failed to read file'));\n };\n fileReader.readAsDataURL(file);\n });\n });\n\n Promise.all(promises).then(files => {\n if (!isCancel) {\n setFiles(files);\n }\n });\n }\n\n return () => {\n isCancel = true;\n fileReaders.forEach(fileReader => {\n fileReader.abort();\n });\n };\n }, [inputFiles]);\n\n return files;\n};\n","import { useEffect, useRef, useState } from 'react';\n\nexport const useInView = (initOptions: IntersectionObserverInit = {}) => {\n const [inView, setInView] = useState(false);\n const ref = useRef<Element>(null);\n\n useEffect(() => {\n const observer = new IntersectionObserver(([entry]) => {\n setInView(entry.isIntersecting);\n }, initOptions);\n\n ref.current && observer.observe(ref.current);\n\n return () => {\n observer.disconnect();\n };\n }, [initOptions]);\n\n return { ref, inView };\n};\n","import React, { useCallback, useState } from 'react';\n\ntype InputTypes = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\n\ntype UseInputHandlersProps<T extends InputTypes> = {\n onBlur?: (e: React.FocusEvent<T>) => void;\n onFocus?: (e: React.FocusEvent<T>) => void;\n onChange?: (e: React.ChangeEvent<T>) => void;\n};\n\nexport const useInputHandlers = <T extends InputTypes>({\n onBlur,\n onFocus,\n onChange,\n}: UseInputHandlersProps<T> = {}) => {\n const [isFocus, setIsFocus] = useState(false);\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<T>) => {\n setIsFocus(true);\n onFocus && onFocus(e);\n },\n [onFocus],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<T>) => {\n setIsFocus(false);\n onBlur && onBlur(e);\n },\n [onBlur],\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<T>) => {\n onChange && onChange(e);\n },\n [onChange],\n );\n\n return {\n isFocus,\n handlers: {\n onFocus: handleFocus,\n onBlur: handleBlur,\n onChange: handleChange,\n },\n };\n};\n","import { useEffect, useState } from 'react';\n\nexport const useMediaQuery = (query: string): boolean => {\n const [matches, setMatches] = useState(false);\n\n useEffect(() => {\n const media = window.matchMedia(query);\n\n if (media.matches !== matches) {\n setMatches(media.matches);\n }\n\n const listener = () => {\n setMatches(media.matches);\n };\n\n media.addEventListener('change', listener);\n\n return () => {\n media.removeEventListener('change', listener);\n };\n }, [matches, query]);\n\n return matches;\n};\n","import React, { RefObject, useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';\n\nimport { useEventListener } from './use-event-listener';\nimport { useObserver } from './use-observer';\nimport { useOnClickOutsideRef } from './use-on-click-outside-ref';\n\nimport { getModalPosition, GetModalPositionParams, PositionObject } from '@polpo/helpers';\n\nconst convertDOMRectToPosition = (rect: DOMRectReadOnly): PositionObject => ({\n x: rect.x,\n y: rect.y,\n w: rect.width,\n h: rect.height,\n top: rect.top,\n left: rect.left,\n});\n\ntype useModalInContainerParams = Partial<\n Pick<GetModalPositionParams, 'position' | 'distancePercentage' | 'offset' | 'windowOffset'>\n> & {\n closeOnClickOutside?: boolean;\n};\n\nexport const useModalInContainer = <Container extends HTMLElement, Modal extends HTMLElement = Container>({\n closeOnClickOutside = true,\n offset = 5,\n windowOffset = 10,\n position,\n distancePercentage = 50,\n}: useModalInContainerParams = {}) => {\n const [isVisible, setIsVisible] = useState<boolean>(false);\n const [modalStyle, setModalStyle] = useState<React.CSSProperties>({});\n\n const modalRef = useRef<Modal>(null);\n const containerRef = useRef<Container>(null);\n\n useEffect(() => {\n if (closeOnClickOutside) {\n document.documentElement.style.overflow = isVisible ? 'hidden' : 'auto';\n }\n }, [isVisible, closeOnClickOutside]);\n\n useOnClickOutsideRef<Modal>(modalRef, () => {\n if (isVisible && closeOnClickOutside) {\n setIsVisible(false);\n }\n });\n\n const getPosition = useCallback(\n (modalRef: RefObject<HTMLElement>) => {\n const modal = modalRef.current?.getClientRects()[0];\n const container = containerRef.current?.getClientRects()[0];\n\n if (!container || !modal) {\n setModalStyle({});\n\n return;\n }\n\n const nextStyles = getModalPosition({\n c: convertDOMRectToPosition(container),\n m: convertDOMRectToPosition(modal),\n distancePercentage,\n windowOffset,\n position,\n offset,\n });\n\n setModalStyle(nextStyles);\n },\n [distancePercentage, windowOffset, position, offset],\n );\n\n const callback = useCallback(() => {\n if (isVisible) {\n getPosition(modalRef);\n }\n }, [getPosition, isVisible]);\n\n useLayoutEffect(callback, [callback]);\n\n useObserver<Container>(containerRef, callback);\n useObserver<Modal>(modalRef, callback);\n useEventListener('resize', callback);\n useEventListener('scroll', callback, modalRef);\n\n return {\n isVisible,\n setIsVisible,\n modalStyle,\n containerRef,\n modalRef,\n };\n};\n","import { RefObject } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\nexport const useOnClickOutsideRef = <T extends HTMLElement>(containerRef: RefObject<T>, callback: () => void) => {\n useEventListener('keydown', e => {\n if (e.key === 'Escape') {\n callback();\n }\n });\n\n useEventListener('mousedown', event => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n callback();\n }\n });\n};\n","import React, { useState } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\nexport const useMousePosition = () => {\n const [{ x, y }, setPosition] = useState({ x: 0, y: 0 });\n\n const mouseMove = (e: React.MouseEvent) => {\n const { clientX, clientY } = e;\n setPosition({ x: clientX, y: clientY });\n };\n\n useEventListener('mousemove', mouseMove as unknown as EventListener);\n\n return [x, y];\n};\n","import { useState } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\nexport const useOnlineStatus = () => {\n const [online, setOnline] = useState(navigator.onLine);\n\n useEventListener('online', () => setOnline(navigator.onLine));\n useEventListener('offline', () => setOnline(navigator.onLine));\n\n return online;\n};\n","import { useEffect, useRef } from 'react';\n\nexport const useRenderCount = () => {\n const count = useRef(1);\n\n useEffect(() => {\n count.current++;\n });\n\n return count.current;\n};\n","import { useEffect, useRef, useState } from 'react';\n\nexport const useScroll = () => {\n const ref = useRef<HTMLElement>(null);\n const [position, setPosition] = useState([0, 0]);\n\n useEffect(() => {\n const element = ref.current;\n\n const handleScroll = () => {\n if (!element) return;\n\n setPosition([element.scrollLeft, element.scrollTop]);\n };\n\n if (element) {\n element.addEventListener('scroll', handleScroll);\n }\n\n return () => {\n if (element) {\n element.removeEventListener('scroll', handleScroll);\n }\n };\n }, []);\n\n return {\n ref,\n position,\n };\n};\n","import { Dispatch, SetStateAction, useEffect, useState } from 'react';\n\nfunction useStateHistory<T>(initialState: T | (() => T)): [T, Dispatch<SetStateAction<T>>, Array<T>];\n\nfunction useStateHistory<T = undefined>(): [T | undefined, Dispatch<SetStateAction<T | undefined>>, Array<T>];\n\nfunction useStateHistory<T = undefined>(\n initialState?: T | (() => T) | undefined,\n): [T | undefined, Dispatch<SetStateAction<T | undefined>>, Array<T>] {\n const [state, setState] = useState<T | undefined>(initialState);\n const [history, setHistory] = useState<Array<T>>([]);\n\n useEffect(() => {\n if (state !== undefined) {\n setHistory(prevHistory => [...prevHistory, state]);\n }\n }, [state]);\n\n return [state, setState, history];\n}\n\nexport { useStateHistory };\n","import { useCallback, useState } from 'react';\n\nexport const useToggle = (defaultValue: boolean = false) => {\n const [value, setValue] = useState<boolean>(defaultValue);\n\n const toggle = useCallback(() => {\n setValue(prev => !prev);\n }, []);\n\n return [value, toggle, setValue];\n};\n","import { useCallback, useState } from 'react';\n\nexport const useToggleValues = <T>(values: Array<T>, defaultIndex: number = 0): [T, (index?: number) => void] => {\n const [index, setIndex] = useState(defaultIndex);\n\n const toggle = useCallback(\n (index?: number) => {\n setIndex(index !== undefined ? index : prev => (prev + 1) % values.length);\n },\n [values.length],\n );\n\n return [values[index], toggle];\n};\n","import { useEffect, useState } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\nenum ScreenOrientation {\n PORTRAIT = 'portrait',\n LANDSCAPE = 'landscape',\n}\n\ntype UseViewportData = {\n width: number;\n height: number;\n orientation: ScreenOrientation;\n};\n\nexport const useViewport = (): UseViewportData => {\n const getData = (): UseViewportData => {\n const { innerWidth, innerHeight } = window;\n\n return {\n width: innerWidth,\n height: innerHeight,\n orientation: innerWidth > innerHeight ? ScreenOrientation.LANDSCAPE : ScreenOrientation.PORTRAIT,\n };\n };\n\n const [data, setData] = useState<UseViewportData>(getData);\n\n useEventListener('resize', () => {\n setData(getData());\n });\n\n useEffect(() => {\n setData(getData());\n }, []);\n\n return data;\n};\n"],"mappings":"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","names":["useCallback","useMemo","useReducer","useCallback","useLayoutEffect","useRef","useSafeDispatch","dispatch","mounted","args","asyncReducer","_state","action","useAsync","initialState","asyncState","unsafeDispatch","useReducer","dispatch","useSafeDispatch","run","useCallback","promise","data","error","setData","setError","useMemo","useMemo","useClassNames","classes","compiledClassNames","classname","value","useState","useConstant","initializer","useEffect","useState","useDebounce","value","delay","debouncedValue","setDebouncedValue","timer","useEffect","useState","useEffect","useLayoutEffect","useRef","useEventListener","eventName","callback","element","options","callbackRef","targetElement","listener","event","useEffect","useObserver","ref","callback","observer","useDimensions","ref","dimensions","setDimensions","useState","getSize","useEventListener","useObserver","useEffect","useEffect","useState","FileTypeEnum","useFileReader","inputFiles","files","setFiles","useState","useEffect","fileReaders","isCancel","promises","file","resolve","reject","fileReader","e","formatBytes","useEffect","useRef","useState","useInView","initOptions","inView","setInView","ref","observer","entry","useCallback","useState","useInputHandlers","onBlur","onFocus","onChange","isFocus","setIsFocus","handleFocus","e","handleBlur","handleChange","useEffect","useState","useMediaQuery","query","matches","setMatches","media","listener","useCallback","useEffect","useLayoutEffect","useRef","useState","useOnClickOutsideRef","containerRef","callback","useEventListener","e","event","convertDOMRectToPosition","rect","useModalInContainer","closeOnClickOutside","offset","windowOffset","position","distancePercentage","isVisible","setIsVisible","useState","modalStyle","setModalStyle","modalRef","useRef","containerRef","useEffect","useOnClickOutsideRef","getPosition","useCallback","modal","container","nextStyles","getModalPosition","callback","useLayoutEffect","useObserver","useEventListener","useState","useMousePosition","x","y","setPosition","useState","useEventListener","e","clientX","clientY","useState","useOnlineStatus","online","setOnline","useState","useEventListener","useEffect","useRef","useRenderCount","count","useEffect","useRef","useState","useScroll","ref","position","setPosition","element","handleScroll","useEffect","useState","useStateHistory","initialState","state","setState","history","setHistory","prevHistory","useCallback","useState","useToggle","defaultValue","value","setValue","toggle","prev","useCallback","useState","useToggleValues","values","defaultIndex","index","setIndex","toggle","prev","useEffect","useState","useViewport","getData","innerWidth","innerHeight","data","setData","useState","useEventListener","useEffect"]}
@@ -1,28 +0,0 @@
1
- declare enum POSITION {
2
- top = "top",
3
- left = "left",
4
- right = "right",
5
- bottom = "bottom"
6
- }
7
- type PositionObject = {
8
- x: number;
9
- y: number;
10
- top: number;
11
- left: number;
12
- w: number;
13
- h: number;
14
- };
15
- type GetModalPositionParams = {
16
- c: PositionObject;
17
- m: PositionObject;
18
- offset: number;
19
- windowOffset: number;
20
- position?: `${POSITION}`;
21
- distancePercentage?: number;
22
- };
23
- declare const getModalPosition: ({ c, m, offset, windowOffset, position, distancePercentage, }: GetModalPositionParams) => {
24
- left: number;
25
- top: number;
26
- };
27
-
28
- export { type GetModalPositionParams as G, POSITION as P, type PositionObject as a, getModalPosition as g };
@@ -1,28 +0,0 @@
1
- declare enum POSITION {
2
- top = "top",
3
- left = "left",
4
- right = "right",
5
- bottom = "bottom"
6
- }
7
- type PositionObject = {
8
- x: number;
9
- y: number;
10
- top: number;
11
- left: number;
12
- w: number;
13
- h: number;
14
- };
15
- type GetModalPositionParams = {
16
- c: PositionObject;
17
- m: PositionObject;
18
- offset: number;
19
- windowOffset: number;
20
- position?: `${POSITION}`;
21
- distancePercentage?: number;
22
- };
23
- declare const getModalPosition: ({ c, m, offset, windowOffset, position, distancePercentage, }: GetModalPositionParams) => {
24
- left: number;
25
- top: number;
26
- };
27
-
28
- export { type GetModalPositionParams as G, POSITION as P, type PositionObject as a, getModalPosition as g };
@@ -1,84 +0,0 @@
1
- import React, { useCallback } from 'react';
2
-
3
- import { Icon } from '../../icon';
4
- import { Checkbox } from '../checkbox';
5
-
6
- import { OptionStyle } from './select.style';
7
- import { SelectItem, SelectOptionProps, SelectOptionVariant } from './select.types';
8
-
9
- import { useClassNames } from '@polpo/hooks';
10
-
11
- export const SelectOption = <T extends SelectItem>({
12
- id,
13
- selected,
14
- selectOption,
15
- unselectOption,
16
- data,
17
- Component,
18
- multiselect,
19
- variant,
20
- }: SelectOptionProps<T>) => {
21
- const optionClassName = useClassNames({
22
- 'selected-option': selected,
23
- 'multiselect-icon': multiselect && variant === SelectOptionVariant.ICON,
24
- 'multiselect-checkbox': multiselect && variant === SelectOptionVariant.CHECKBOX,
25
- });
26
-
27
- const handleKeyDown = useCallback(
28
- (option: T) => (e: React.KeyboardEvent<HTMLLIElement>) => {
29
- if (['Enter', ' '].includes(e.key)) {
30
- e.preventDefault();
31
-
32
- if (selected && multiselect) {
33
- unselectOption(option);
34
- } else {
35
- selectOption(option);
36
- }
37
- }
38
- },
39
- [multiselect, selectOption, selected, unselectOption],
40
- );
41
-
42
- const handleCheckboxChange = useCallback(
43
- (option: T) => (checked: boolean | '') => {
44
- if (checked !== '' && checked) selectOption(option);
45
- else unselectOption(option);
46
- },
47
- [selectOption, unselectOption],
48
- );
49
-
50
- const handleClick = useCallback(
51
- (option: T) => (e: React.MouseEvent) => {
52
- e.stopPropagation();
53
-
54
- if (multiselect) {
55
- if (selected) unselectOption(option);
56
- else selectOption(option);
57
- } else {
58
- selectOption(option);
59
- }
60
- },
61
- [multiselect, selected, selectOption, unselectOption],
62
- );
63
-
64
- return (
65
- <OptionStyle
66
- id={id}
67
- role='option'
68
- aria-selected={selected}
69
- tabIndex={-1}
70
- onKeyDown={handleKeyDown(data)}
71
- className={optionClassName}
72
- onClick={handleClick(data)}
73
- >
74
- {multiselect && variant === SelectOptionVariant.CHECKBOX && (
75
- <Checkbox name={id} value={selected} setValue={handleCheckboxChange(data)} />
76
- )}
77
- <section className='option-content'>
78
- <Component data={data} isSelected={selected} multiselect={multiselect} />
79
- </section>
80
- {multiselect && selected && variant === SelectOptionVariant.ICON && <Icon name='checkmark' />}
81
- {multiselect && !selected && variant === SelectOptionVariant.ICON && <span />}
82
- </OptionStyle>
83
- );
84
- };
@@ -1,18 +0,0 @@
1
- import { useEffect } from 'react';
2
-
3
- export const useObserver = <T extends HTMLElement>(ref: React.RefObject<T>, callback: () => void) => {
4
- useEffect(() => {
5
- let observer = null;
6
-
7
- if (callback && ref.current) {
8
- observer = new ResizeObserver(callback);
9
- observer.observe(ref.current);
10
- }
11
-
12
- return () => {
13
- if (observer) {
14
- observer.disconnect();
15
- }
16
- };
17
- }, [ref, callback]);
18
- };
@@ -1,17 +0,0 @@
1
- import { RefObject } from 'react';
2
-
3
- import { useEventListener } from './use-event-listener';
4
-
5
- export const useOnClickOutsideRef = <T extends HTMLElement>(containerRef: RefObject<T>, callback: () => void) => {
6
- useEventListener('keydown', e => {
7
- if (e.key === 'Escape') {
8
- callback();
9
- }
10
- });
11
-
12
- useEventListener('mousedown', event => {
13
- if (containerRef.current && !containerRef.current.contains(event.target as Node)) {
14
- callback();
15
- }
16
- });
17
- };