yummies 5.15.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. package/README.md +10 -4
  2. package/async.cjs +45 -1
  3. package/async.cjs.map +1 -1
  4. package/async.d.ts +7 -6
  5. package/common.cjs +11 -1
  6. package/common.cjs.map +1 -1
  7. package/common.d.ts +8 -5
  8. package/common.js.map +1 -1
  9. package/complex.cjs +88 -1
  10. package/complex.cjs.map +1 -1
  11. package/{complex/modules-factory.d.ts → complex.d.ts} +31 -4
  12. package/complex.js.map +1 -1
  13. package/cookie.cjs +9 -1
  14. package/cookie.cjs.map +1 -1
  15. package/cookie.d.ts +5 -3
  16. package/cookie.js.map +1 -1
  17. package/css.cjs +45 -1
  18. package/css.cjs.map +1 -1
  19. package/css.d.ts +11 -8
  20. package/css.js.map +1 -1
  21. package/data.cjs +43 -1
  22. package/data.cjs.map +1 -1
  23. package/data.d.ts +5 -4
  24. package/data.js.map +1 -1
  25. package/date-time.cjs +395 -1
  26. package/date-time.cjs.map +1 -1
  27. package/date-time.d.ts +12 -10
  28. package/date-time.js.map +1 -1
  29. package/device.cjs +32 -1
  30. package/device.cjs.map +1 -1
  31. package/device.d.ts +9 -8
  32. package/encodings.cjs +270 -1
  33. package/encodings.cjs.map +1 -1
  34. package/encodings.d.ts +3 -2
  35. package/encodings.js.map +1 -1
  36. package/errors.cjs +23 -1
  37. package/errors.cjs.map +1 -1
  38. package/errors.d.ts +5 -4
  39. package/errors.js.map +1 -1
  40. package/file.cjs +28 -1
  41. package/file.cjs.map +1 -1
  42. package/file.d.ts +4 -3
  43. package/format.cjs +75 -1
  44. package/format.cjs.map +1 -1
  45. package/format.d.ts +74 -0
  46. package/format.js.map +1 -1
  47. package/html.cjs +167 -1
  48. package/html.cjs.map +1 -1
  49. package/html.d.ts +19 -17
  50. package/html.js.map +1 -1
  51. package/id.cjs +25 -1
  52. package/id.cjs.map +1 -1
  53. package/id.d.ts +9 -8
  54. package/imports.cjs +33 -1
  55. package/imports.cjs.map +1 -1
  56. package/imports.d.ts +6 -4
  57. package/math.cjs +14 -1
  58. package/math.cjs.map +1 -1
  59. package/math.d.ts +7 -5
  60. package/math.js.map +1 -1
  61. package/media.cjs +105 -1
  62. package/media.cjs.map +1 -1
  63. package/media.d.ts +11 -11
  64. package/mobx.cjs +184 -1
  65. package/mobx.cjs.map +1 -1
  66. package/mobx.d.ts +66 -0
  67. package/mobx.js +16 -12
  68. package/mobx.js.map +1 -1
  69. package/ms.cjs +13 -1
  70. package/ms.cjs.map +1 -1
  71. package/ms.d.ts +4 -3
  72. package/number.cjs +10 -1
  73. package/number.cjs.map +1 -1
  74. package/number.d.ts +3 -2
  75. package/package.json +39 -113
  76. package/parser.cjs +68 -1
  77. package/parser.cjs.map +1 -1
  78. package/parser.d.ts +41 -0
  79. package/parser.js.map +1 -1
  80. package/price.cjs +20 -1
  81. package/price.cjs.map +1 -1
  82. package/price.d.ts +5 -3
  83. package/random.cjs +24 -1
  84. package/random.cjs.map +1 -1
  85. package/random.d.ts +10 -9
  86. package/react.cjs +216 -1
  87. package/react.cjs.map +1 -1
  88. package/react.d.ts +113 -0
  89. package/react.js.map +1 -1
  90. package/sound.cjs +11 -1
  91. package/sound.cjs.map +1 -1
  92. package/sound.d.ts +3 -2
  93. package/text.cjs +37 -1
  94. package/text.cjs.map +1 -1
  95. package/text.d.ts +4 -3
  96. package/type-guard.cjs +75 -1
  97. package/type-guard.cjs.map +1 -1
  98. package/type-guard.d.ts +121 -0
  99. package/type-guard.js.map +1 -1
  100. package/{utils/types.d.ts → types.d.ts} +54 -53
  101. package/types.global.cjs +2 -0
  102. package/types.global.cjs.map +1 -0
  103. package/{utility-types.d.ts → types.global.d.ts} +1 -1
  104. package/types.global.js +2 -0
  105. package/types.global.js.map +1 -0
  106. package/vibrate.cjs +8 -1
  107. package/vibrate.cjs.map +1 -1
  108. package/vibrate.d.ts +3 -2
  109. package/async.d.ts.map +0 -1
  110. package/common.d.ts.map +0 -1
  111. package/complex/counter.d.ts +0 -15
  112. package/complex/counter.d.ts.map +0 -1
  113. package/complex/global-config.d.ts +0 -11
  114. package/complex/global-config.d.ts.map +0 -1
  115. package/complex/index.d.ts +0 -4
  116. package/complex/index.d.ts.map +0 -1
  117. package/complex/modules-factory.d.ts.map +0 -1
  118. package/cookie.d.ts.map +0 -1
  119. package/css.d.ts.map +0 -1
  120. package/data.d.ts.map +0 -1
  121. package/date-time.d.ts.map +0 -1
  122. package/device.d.ts.map +0 -1
  123. package/encodings.d.ts.map +0 -1
  124. package/errors.d.ts.map +0 -1
  125. package/file.d.ts.map +0 -1
  126. package/format/_exports.d.ts +0 -5
  127. package/format/_exports.d.ts.map +0 -1
  128. package/format/constants.d.ts +0 -4
  129. package/format/constants.d.ts.map +0 -1
  130. package/format/index.d.ts +0 -3
  131. package/format/index.d.ts.map +0 -1
  132. package/format/number.d.ts +0 -36
  133. package/format/number.d.ts.map +0 -1
  134. package/format/percent.d.ts +0 -15
  135. package/format/percent.d.ts.map +0 -1
  136. package/format/skip-spaces.d.ts +0 -5
  137. package/format/skip-spaces.d.ts.map +0 -1
  138. package/html.d.ts.map +0 -1
  139. package/id.d.ts.map +0 -1
  140. package/imports.d.ts.map +0 -1
  141. package/math.d.ts.map +0 -1
  142. package/media.d.ts.map +0 -1
  143. package/mobx/apply-observable.d.ts +0 -4
  144. package/mobx/apply-observable.d.ts.map +0 -1
  145. package/mobx/create-enhanced-atom.d.ts +0 -11
  146. package/mobx/create-enhanced-atom.d.ts.map +0 -1
  147. package/mobx/create-ref.d.ts +0 -25
  148. package/mobx/create-ref.d.ts.map +0 -1
  149. package/mobx/deep-observable-struct.d.ts +0 -7
  150. package/mobx/deep-observable-struct.d.ts.map +0 -1
  151. package/mobx/get-mobx-administration.d.ts +0 -6
  152. package/mobx/get-mobx-administration.d.ts.map +0 -1
  153. package/mobx/index.d.ts +0 -7
  154. package/mobx/index.d.ts.map +0 -1
  155. package/mobx/lazy-observe.d.ts +0 -14
  156. package/mobx/lazy-observe.d.ts.map +0 -1
  157. package/ms.d.ts.map +0 -1
  158. package/number.d.ts.map +0 -1
  159. package/parser/_exports.d.ts +0 -4
  160. package/parser/_exports.d.ts.map +0 -1
  161. package/parser/index.d.ts +0 -3
  162. package/parser/index.d.ts.map +0 -1
  163. package/parser/number.d.ts +0 -21
  164. package/parser/number.d.ts.map +0 -1
  165. package/parser/percent.d.ts +0 -4
  166. package/parser/percent.d.ts.map +0 -1
  167. package/parser/string.d.ts +0 -7
  168. package/parser/string.d.ts.map +0 -1
  169. package/price.d.ts.map +0 -1
  170. package/random.d.ts.map +0 -1
  171. package/react/hooks/index.d.ts +0 -22
  172. package/react/hooks/index.d.ts.map +0 -1
  173. package/react/hooks/use-abort-controller.d.ts +0 -2
  174. package/react/hooks/use-abort-controller.d.ts.map +0 -1
  175. package/react/hooks/use-abort-signal.d.ts +0 -2
  176. package/react/hooks/use-abort-signal.d.ts.map +0 -1
  177. package/react/hooks/use-click-outside.d.ts +0 -9
  178. package/react/hooks/use-click-outside.d.ts.map +0 -1
  179. package/react/hooks/use-constant.d.ts +0 -9
  180. package/react/hooks/use-constant.d.ts.map +0 -1
  181. package/react/hooks/use-define-ref.d.ts +0 -10
  182. package/react/hooks/use-define-ref.d.ts.map +0 -1
  183. package/react/hooks/use-element-ref.d.ts +0 -2
  184. package/react/hooks/use-element-ref.d.ts.map +0 -1
  185. package/react/hooks/use-event-listener.d.ts +0 -8
  186. package/react/hooks/use-event-listener.d.ts.map +0 -1
  187. package/react/hooks/use-event.d.ts +0 -3
  188. package/react/hooks/use-event.d.ts.map +0 -1
  189. package/react/hooks/use-flag.d.ts +0 -8
  190. package/react/hooks/use-flag.d.ts.map +0 -1
  191. package/react/hooks/use-force-update.d.ts +0 -2
  192. package/react/hooks/use-force-update.d.ts.map +0 -1
  193. package/react/hooks/use-initial-height.d.ts +0 -5
  194. package/react/hooks/use-initial-height.d.ts.map +0 -1
  195. package/react/hooks/use-instance.d.ts +0 -27
  196. package/react/hooks/use-instance.d.ts.map +0 -1
  197. package/react/hooks/use-intersection-observer.d.ts +0 -2
  198. package/react/hooks/use-intersection-observer.d.ts.map +0 -1
  199. package/react/hooks/use-last-defined-value.d.ts +0 -2
  200. package/react/hooks/use-last-defined-value.d.ts.map +0 -1
  201. package/react/hooks/use-last-value-ref.d.ts +0 -2
  202. package/react/hooks/use-last-value-ref.d.ts.map +0 -1
  203. package/react/hooks/use-life-cycle.d.ts +0 -5
  204. package/react/hooks/use-life-cycle.d.ts.map +0 -1
  205. package/react/hooks/use-resize-observer.d.ts +0 -2
  206. package/react/hooks/use-resize-observer.d.ts.map +0 -1
  207. package/react/hooks/use-sync-ref.d.ts +0 -2
  208. package/react/hooks/use-sync-ref.d.ts.map +0 -1
  209. package/react/hooks/use-toggle.d.ts +0 -2
  210. package/react/hooks/use-toggle.d.ts.map +0 -1
  211. package/react/hooks/use-value.d.ts +0 -5
  212. package/react/hooks/use-value.d.ts.map +0 -1
  213. package/react/hooks/use-visibility-state.d.ts +0 -2
  214. package/react/hooks/use-visibility-state.d.ts.map +0 -1
  215. package/react/index.d.ts +0 -2
  216. package/react/index.d.ts.map +0 -1
  217. package/sound.d.ts.map +0 -1
  218. package/storage.d.ts +0 -39
  219. package/storage.d.ts.map +0 -1
  220. package/text.d.ts.map +0 -1
  221. package/type-guard/_exports.d.ts +0 -86
  222. package/type-guard/_exports.d.ts.map +0 -1
  223. package/type-guard/index.d.ts +0 -3
  224. package/type-guard/index.d.ts.map +0 -1
  225. package/utility-types.cjs +0 -2
  226. package/utility-types.cjs.map +0 -1
  227. package/utility-types.d.ts.map +0 -1
  228. package/utility-types.js +0 -2
  229. package/utility-types.js.map +0 -1
  230. package/utils/types.d.ts.map +0 -1
  231. package/vibrate.d.ts.map +0 -1
  232. /package/{utils/types.cjs → types.cjs} +0 -0
  233. /package/{utils/types.cjs.map → types.cjs.map} +0 -0
  234. /package/{utils/types.js → types.js} +0 -0
  235. /package/{utils/types.js.map → types.js.map} +0 -0
package/random.cjs CHANGED
@@ -1,2 +1,25 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=(o=0,e=1)=>Math.random()*(e-o)+o,e=(e=0,t=1)=>e===t?e:Math.round(o(e,t)),t=()=>e(0,10)<=6;exports.getFrequencyValue=o=>Math.random()<o,exports.getMajorRandomBool=t,exports.getMinorRandomBool=()=>!t(),exports.getRandomBool=()=>1===e(0,1),exports.getRandomChoice=o=>o[e(0,o.length-1)],exports.getRandomFloat=o,exports.getRandomInt=e,exports.getRandomSizeArray=(o=0,t=10)=>Array.from({length:e(o,t)}).fill(null);
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const getRandomFloat = (min = 0, max = 1) => Math.random() * (max - min) + min;
4
+ const getRandomInt = (min = 0, max = 1) => min === max ? min : Math.round(getRandomFloat(min, max));
5
+ const getRandomChoice = (arr) => arr[getRandomInt(0, arr.length - 1)];
6
+ const getRandomSizeArray = (min = 0, max = 10) => Array.from({ length: getRandomInt(min, max) }).fill(null);
7
+ const getRandomBool = () => getRandomInt(0, 1) === 1;
8
+ const getMajorRandomBool = () => {
9
+ return getRandomInt(0, 10) <= 6;
10
+ };
11
+ const getMinorRandomBool = () => {
12
+ return !getMajorRandomBool();
13
+ };
14
+ const getFrequencyValue = (frequency) => {
15
+ return Math.random() < frequency;
16
+ };
17
+ exports.getFrequencyValue = getFrequencyValue;
18
+ exports.getMajorRandomBool = getMajorRandomBool;
19
+ exports.getMinorRandomBool = getMinorRandomBool;
20
+ exports.getRandomBool = getRandomBool;
21
+ exports.getRandomChoice = getRandomChoice;
22
+ exports.getRandomFloat = getRandomFloat;
23
+ exports.getRandomInt = getRandomInt;
24
+ exports.getRandomSizeArray = getRandomSizeArray;
2
25
  //# sourceMappingURL=random.cjs.map
package/random.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"random.cjs","sources":["../src/random.ts"],"sourcesContent":["export const getRandomFloat = <T extends number = number>(\n min = 0,\n max = 1,\n): T => (Math.random() * (max - min) + min) as T;\n\nexport const getRandomInt = <T extends number = number>(min = 0, max = 1): T =>\n min === max ? (min as T) : (Math.round(getRandomFloat(min, max)) as T);\n\nexport const getRandomChoice = <T>(arr: T[]): T =>\n arr[getRandomInt(0, arr.length - 1)];\n\nexport const getRandomSizeArray = (min = 0, max = 10) =>\n Array.from({ length: getRandomInt(min, max) }).fill(null);\n\nexport const getRandomBool = () => getRandomInt(0, 1) === 1;\n\nexport const getMajorRandomBool = () => {\n return getRandomInt(0, 10) <= 6;\n};\n\nexport const getMinorRandomBool = () => {\n return !getMajorRandomBool();\n};\n\nexport const getFrequencyValue = (frequency: number) => {\n return Math.random() < frequency;\n};\n"],"names":["getRandomFloat","min","max","Math","random","getRandomInt","round","getMajorRandomBool","frequency","arr","length","Array","from","fill"],"mappings":"gFAAO,MAAMA,EAAiB,CAC5BC,EAAM,EACNC,EAAM,IACCC,KAAKC,UAAYF,EAAMD,GAAOA,EAE1BI,EAAe,CAA4BJ,EAAM,EAAGC,EAAM,IACrED,IAAQC,EAAOD,EAAaE,KAAKG,MAAMN,EAAeC,EAAKC,IAUhDK,EAAqB,IACzBF,EAAa,EAAG,KAAO,4BAOEG,GACzBL,KAAKC,SAAWI,0DALS,KACxBD,0BAPmB,IAA6B,IAAvBF,EAAa,EAAG,2BANhBI,GACjCA,EAAIJ,EAAa,EAAGI,EAAIC,OAAS,+EAED,CAACT,EAAM,EAAGC,EAAM,KAChDS,MAAMC,KAAK,CAAEF,OAAQL,EAAaJ,EAAKC,KAAQW,KAAK"}
1
+ {"version":3,"file":"random.cjs","sources":["../src/random.ts"],"sourcesContent":["export const getRandomFloat = <T extends number = number>(\n min = 0,\n max = 1,\n): T => (Math.random() * (max - min) + min) as T;\n\nexport const getRandomInt = <T extends number = number>(min = 0, max = 1): T =>\n min === max ? (min as T) : (Math.round(getRandomFloat(min, max)) as T);\n\nexport const getRandomChoice = <T>(arr: T[]): T =>\n arr[getRandomInt(0, arr.length - 1)];\n\nexport const getRandomSizeArray = (min = 0, max = 10) =>\n Array.from({ length: getRandomInt(min, max) }).fill(null);\n\nexport const getRandomBool = () => getRandomInt(0, 1) === 1;\n\nexport const getMajorRandomBool = () => {\n return getRandomInt(0, 10) <= 6;\n};\n\nexport const getMinorRandomBool = () => {\n return !getMajorRandomBool();\n};\n\nexport const getFrequencyValue = (frequency: number) => {\n return Math.random() < frequency;\n};\n"],"names":[],"mappings":";;AAAO,MAAM,iBAAiB,CAC5B,MAAM,GACN,MAAM,MACC,KAAK,OAAA,KAAY,MAAM,OAAO;AAEhC,MAAM,eAAe,CAA4B,MAAM,GAAG,MAAM,MACrE,QAAQ,MAAO,MAAa,KAAK,MAAM,eAAe,KAAK,GAAG,CAAC;AAE1D,MAAM,kBAAkB,CAAI,QACjC,IAAI,aAAa,GAAG,IAAI,SAAS,CAAC,CAAC;AAE9B,MAAM,qBAAqB,CAAC,MAAM,GAAG,MAAM,OAChD,MAAM,KAAK,EAAE,QAAQ,aAAa,KAAK,GAAG,GAAG,EAAE,KAAK,IAAI;AAEnD,MAAM,gBAAgB,MAAM,aAAa,GAAG,CAAC,MAAM;AAEnD,MAAM,qBAAqB,MAAM;AACtC,SAAO,aAAa,GAAG,EAAE,KAAK;AAChC;AAEO,MAAM,qBAAqB,MAAM;AACtC,SAAO,CAAC,mBAAA;AACV;AAEO,MAAM,oBAAoB,CAAC,cAAsB;AACtD,SAAO,KAAK,WAAW;AACzB;;;;;;;;;"}
package/random.d.ts CHANGED
@@ -1,9 +1,10 @@
1
- export declare const getRandomFloat: <T extends number = number>(min?: number, max?: number) => T;
2
- export declare const getRandomInt: <T extends number = number>(min?: number, max?: number) => T;
3
- export declare const getRandomChoice: <T>(arr: T[]) => T;
4
- export declare const getRandomSizeArray: (min?: number, max?: number) => unknown[];
5
- export declare const getRandomBool: () => boolean;
6
- export declare const getMajorRandomBool: () => boolean;
7
- export declare const getMinorRandomBool: () => boolean;
8
- export declare const getFrequencyValue: (frequency: number) => boolean;
9
- //# sourceMappingURL=random.d.ts.map
1
+ declare const getRandomFloat: <T extends number = number>(min?: number, max?: number) => T;
2
+ declare const getRandomInt: <T extends number = number>(min?: number, max?: number) => T;
3
+ declare const getRandomChoice: <T>(arr: T[]) => T;
4
+ declare const getRandomSizeArray: (min?: number, max?: number) => unknown[];
5
+ declare const getRandomBool: () => boolean;
6
+ declare const getMajorRandomBool: () => boolean;
7
+ declare const getMinorRandomBool: () => boolean;
8
+ declare const getFrequencyValue: (frequency: number) => boolean;
9
+
10
+ export { getFrequencyValue, getMajorRandomBool, getMinorRandomBool, getRandomBool, getRandomChoice, getRandomFloat, getRandomInt, getRandomSizeArray };
package/react.cjs CHANGED
@@ -1,2 +1,217 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react"),t=t=>{const r=e.useRef();return r.current||(r.current={value:t()}),r.current.value},r=()=>{const r=t(()=>new AbortController);return e.useEffect(()=>()=>{r.abort()},[]),r},s=()=>r().signal,n=t=>{const r=e.useRef(t);return r.current=t,r},u=({event:t,handler:r,options:s,deps:u=[],node:o=document})=>{const c=n(r);e.useEffect(()=>{const e=e=>c.current(e);return o.addEventListener(t,e,s),()=>o.removeEventListener(t,e,s)},u)},o=t=>{const r=e.useRef(void 0);return r.current||(r.current=t()),r},c=r=>(n,u)=>{const o=s(),c=t(()=>n({...r,abortSignal:o,payload:u?.payload}));return e.useLayoutEffect(()=>{u?.onUpdate?.(u.payload)},[u?.payload]),c},a=c();exports.createUseInstanceHook=c,exports.useAbortController=r,exports.useAbortSignal=s,exports.useClickOutside=({contentRef:e,onClick:t,options:r})=>{u({event:"mousedown",handler:r=>{e.current&&!e.current.contains(r.target)&&t()},options:r})},exports.useConstant=t,exports.useDefineRef=o,exports.useElementRef=t=>{const r=e.useRef();return e.useLayoutEffect(()=>{r.current=t()},[]),r},exports.useEvent=t=>{const r=e.useRef(t);return e.useLayoutEffect(()=>{r.current=t}),e.useCallback((...e)=>(0,r.current)(...e),[])},exports.useEventListener=u,exports.useFlag=(t=!1)=>{const[r,s]=e.useState(t),n=e.useCallback(()=>s(e=>!e),[]),u=e.useCallback(()=>s(!0),[]),o=e.useCallback(()=>s(!1),[]),c=e.useRef({enabled:r,toggle:n,enable:u,disable:o});return c.current.enabled=r,c.current},exports.useForceUpdate=()=>{const[,t]=e.useState(null);return e.useCallback(()=>{t({})},[])},exports.useInitialHeight=()=>{const t=e.useRef(null),[r,s]=e.useState(void 0);return e.useEffect(()=>{t.current&&!r&&s(t.current.offsetHeight)},[r]),{ref:t,initialHeight:r}},exports.useInstance=a,exports.useIntersectionObserver=(t,r)=>{const[s]=e.useState(()=>new IntersectionObserver(t,r));return e.useEffect(()=>()=>{s.disconnect()},[]),s},exports.useLastDefinedValue=t=>{const r=e.useRef(t);return null!=t&&(r.current=t),r.current},exports.useLastValueRef=t=>{const r=e.useRef(t);return null!=t&&(r.current=t),r},exports.useLifeCycle=t=>{const r=n(t);e.useEffect(()=>{const e=r.current();return e.mount?.(),e.unmount?.()},[])},exports.useResizeObserver=t=>{const r=o(()=>new ResizeObserver(t));return e.useLayoutEffect(()=>()=>{r.current.disconnect()},[]),r},exports.useSyncRef=n,exports.useToggle=t=>{const[r,s]=e.useState(!!t);return[r,e.useCallback(()=>s(e=>!e),[]),s]},exports.useValue=t=>{const[r,s]=e.useState(t);return{value:r,set:s}},exports.useVisibilityState=()=>{const[t,r]=e.useState();return e.useEffect(()=>{const e=()=>{r(document.visibilityState)};return document.addEventListener("visibilitychange",e),()=>{document.removeEventListener("visibilitychange",e)}},[]),t};
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const react = require("react");
4
+ const useConstant = (defineValue) => {
5
+ const ref = react.useRef();
6
+ if (!ref.current) {
7
+ ref.current = { value: defineValue() };
8
+ }
9
+ return ref.current.value;
10
+ };
11
+ const useAbortController = () => {
12
+ const controller = useConstant(() => new AbortController());
13
+ react.useEffect(() => {
14
+ return () => {
15
+ controller.abort();
16
+ };
17
+ }, []);
18
+ return controller;
19
+ };
20
+ const useAbortSignal = () => {
21
+ return useAbortController().signal;
22
+ };
23
+ const useSyncRef = (value) => {
24
+ const ref = react.useRef(value);
25
+ ref.current = value;
26
+ return ref;
27
+ };
28
+ const useEventListener = ({
29
+ event,
30
+ handler,
31
+ options,
32
+ deps = [],
33
+ node = document
34
+ }) => {
35
+ const handlerRef = useSyncRef(handler);
36
+ react.useEffect(() => {
37
+ const handleEvent = (e) => handlerRef.current(e);
38
+ node.addEventListener(event, handleEvent, options);
39
+ return () => node.removeEventListener(event, handleEvent, options);
40
+ }, deps);
41
+ };
42
+ const useClickOutside = ({
43
+ contentRef,
44
+ onClick,
45
+ options
46
+ }) => {
47
+ useEventListener({
48
+ event: "mousedown",
49
+ handler: (event) => {
50
+ if (contentRef.current && !contentRef.current.contains(event.target)) {
51
+ onClick();
52
+ }
53
+ },
54
+ options
55
+ });
56
+ };
57
+ const useDefineRef = (defineFn) => {
58
+ const ref = react.useRef(void 0);
59
+ if (!ref.current) {
60
+ ref.current = defineFn();
61
+ }
62
+ return ref;
63
+ };
64
+ const useElementRef = (selector) => {
65
+ const ref = react.useRef();
66
+ react.useLayoutEffect(() => {
67
+ ref.current = selector();
68
+ }, []);
69
+ return ref;
70
+ };
71
+ const useEvent = (handler) => {
72
+ const handlerRef = react.useRef(handler);
73
+ react.useLayoutEffect(() => {
74
+ handlerRef.current = handler;
75
+ });
76
+ return react.useCallback((...args) => {
77
+ const fn = handlerRef.current;
78
+ return fn(...args);
79
+ }, []);
80
+ };
81
+ const useFlag = (defaultValue = false) => {
82
+ const [enabled, setEnabled] = react.useState(defaultValue);
83
+ const toggle = react.useCallback(() => setEnabled((value) => !value), []);
84
+ const enable = react.useCallback(() => setEnabled(true), []);
85
+ const disable = react.useCallback(() => setEnabled(false), []);
86
+ const flagObjRef = react.useRef({
87
+ enabled,
88
+ toggle,
89
+ enable,
90
+ disable
91
+ });
92
+ flagObjRef.current.enabled = enabled;
93
+ return flagObjRef.current;
94
+ };
95
+ const useForceUpdate = () => {
96
+ const [, setState] = react.useState(null);
97
+ return react.useCallback(() => {
98
+ setState({});
99
+ }, []);
100
+ };
101
+ const useInitialHeight = () => {
102
+ const ref = react.useRef(null);
103
+ const [initialHeight, setInitialHeight] = react.useState(
104
+ void 0
105
+ );
106
+ react.useEffect(() => {
107
+ if (ref.current && !initialHeight) {
108
+ setInitialHeight(ref.current.offsetHeight);
109
+ }
110
+ }, [initialHeight]);
111
+ return { ref, initialHeight };
112
+ };
113
+ const createUseInstanceHook = (extension) => (factory, config) => {
114
+ const abortSignal = useAbortSignal();
115
+ const instance = useConstant(
116
+ () => factory({
117
+ ...extension,
118
+ abortSignal,
119
+ payload: config?.payload
120
+ })
121
+ );
122
+ react.useLayoutEffect(() => {
123
+ config?.onUpdate?.(config.payload);
124
+ }, [config?.payload]);
125
+ return instance;
126
+ };
127
+ const useInstance = createUseInstanceHook();
128
+ const useIntersectionObserver = (callback, options) => {
129
+ const [intersectionObserver] = react.useState(
130
+ () => new IntersectionObserver(callback, options)
131
+ );
132
+ react.useEffect(() => {
133
+ return () => {
134
+ intersectionObserver.disconnect();
135
+ };
136
+ }, []);
137
+ return intersectionObserver;
138
+ };
139
+ const useLastDefinedValue = (value) => {
140
+ const ref = react.useRef(value);
141
+ if (value != null) {
142
+ ref.current = value;
143
+ }
144
+ return ref.current;
145
+ };
146
+ const useLastValueRef = (value) => {
147
+ const ref = react.useRef(value);
148
+ if (value != null) {
149
+ ref.current = value;
150
+ }
151
+ return ref;
152
+ };
153
+ const useLifeCycle = (fn) => {
154
+ const fnRef = useSyncRef(fn);
155
+ react.useEffect(() => {
156
+ const fnOperation = fnRef.current();
157
+ fnOperation.mount?.();
158
+ return fnOperation.unmount?.();
159
+ }, []);
160
+ };
161
+ const useResizeObserver = (callback) => {
162
+ const resizeObserverRef = useDefineRef(() => new ResizeObserver(callback));
163
+ react.useLayoutEffect(() => {
164
+ return () => {
165
+ resizeObserverRef.current.disconnect();
166
+ };
167
+ }, []);
168
+ return resizeObserverRef;
169
+ };
170
+ const useToggle = (initialState) => {
171
+ const [toggled, setToggled] = react.useState(!!initialState);
172
+ const toggle = react.useCallback(() => setToggled((toggled2) => !toggled2), []);
173
+ return [toggled, toggle, setToggled];
174
+ };
175
+ const useValue = (defaults) => {
176
+ const [value, setValue] = react.useState(defaults);
177
+ return {
178
+ value,
179
+ set: setValue
180
+ };
181
+ };
182
+ const useVisibilityState = () => {
183
+ const [state, setState] = react.useState();
184
+ react.useEffect(() => {
185
+ const handleVisibilityChange = () => {
186
+ setState(document.visibilityState);
187
+ };
188
+ document.addEventListener("visibilitychange", handleVisibilityChange);
189
+ return () => {
190
+ document.removeEventListener("visibilitychange", handleVisibilityChange);
191
+ };
192
+ }, []);
193
+ return state;
194
+ };
195
+ exports.createUseInstanceHook = createUseInstanceHook;
196
+ exports.useAbortController = useAbortController;
197
+ exports.useAbortSignal = useAbortSignal;
198
+ exports.useClickOutside = useClickOutside;
199
+ exports.useConstant = useConstant;
200
+ exports.useDefineRef = useDefineRef;
201
+ exports.useElementRef = useElementRef;
202
+ exports.useEvent = useEvent;
203
+ exports.useEventListener = useEventListener;
204
+ exports.useFlag = useFlag;
205
+ exports.useForceUpdate = useForceUpdate;
206
+ exports.useInitialHeight = useInitialHeight;
207
+ exports.useInstance = useInstance;
208
+ exports.useIntersectionObserver = useIntersectionObserver;
209
+ exports.useLastDefinedValue = useLastDefinedValue;
210
+ exports.useLastValueRef = useLastValueRef;
211
+ exports.useLifeCycle = useLifeCycle;
212
+ exports.useResizeObserver = useResizeObserver;
213
+ exports.useSyncRef = useSyncRef;
214
+ exports.useToggle = useToggle;
215
+ exports.useValue = useValue;
216
+ exports.useVisibilityState = useVisibilityState;
2
217
  //# sourceMappingURL=react.cjs.map
package/react.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"react.cjs","sources":["../src/react/hooks/use-constant.ts","../src/react/hooks/use-abort-controller.ts","../src/react/hooks/use-abort-signal.ts","../src/react/hooks/use-sync-ref.ts","../src/react/hooks/use-event-listener.ts","../src/react/hooks/use-define-ref.ts","../src/react/hooks/use-instance.ts","../src/react/hooks/use-click-outside.ts","../src/react/hooks/use-element-ref.ts","../src/react/hooks/use-event.ts","../src/react/hooks/use-flag.ts","../src/react/hooks/use-force-update.ts","../src/react/hooks/use-initial-height.ts","../src/react/hooks/use-intersection-observer.ts","../src/react/hooks/use-last-defined-value.ts","../src/react/hooks/use-last-value-ref.ts","../src/react/hooks/use-life-cycle.ts","../src/react/hooks/use-resize-observer.ts","../src/react/hooks/use-toggle.ts","../src/react/hooks/use-value.ts","../src/react/hooks/use-visibility-state.ts"],"sourcesContent":["import { useRef } from 'react';\n\n/**\n * React hook for creating a value exactly once.\n * useMemo doesn't give this guarantee unfortunately -\n * https://reactjs.org/docs/hooks-faq.html#how-to-create-expensive-objects-lazily\n * https://reactjs.org/docs/hooks-reference.html#usememo\n * @param defineValue Function which returns defined value.\n */\nexport const useConstant = <T>(defineValue: () => T): T => {\n const ref = useRef<{ value: T }>();\n\n if (!ref.current) {\n ref.current = { value: defineValue() };\n }\n\n return ref.current.value;\n};\n","import { useEffect } from 'react';\n\nimport { useConstant } from './use-constant.js';\n\nexport const useAbortController = () => {\n const controller = useConstant(() => new AbortController());\n\n useEffect(() => {\n return () => {\n controller.abort();\n };\n }, []);\n\n return controller;\n};\n","import { useAbortController } from './use-abort-controller.js';\n\nexport const useAbortSignal = () => {\n return useAbortController().signal;\n};\n","import { useRef } from 'react';\n\nexport const useSyncRef = <T>(value: T) => {\n const ref = useRef(value);\n ref.current = value;\n return ref;\n};\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { useEffect } from 'react';\nimport { useSyncRef } from './use-sync-ref.js';\n\nexport const useEventListener = <EventName extends keyof HTMLElementEventMap>({\n event,\n handler,\n options,\n deps = [],\n node = document,\n}: {\n event: EventName;\n handler: (e: HTMLElementEventMap[EventName]) => void;\n options?: boolean | AddEventListenerOptions;\n deps?: unknown[];\n node?: HTMLElement | Document | Window;\n}) => {\n const handlerRef = useSyncRef(handler);\n\n useEffect(() => {\n const handleEvent = (e: HTMLElementEventMap[EventName]) =>\n handlerRef.current(e);\n\n // @ts-expect-error\n node.addEventListener(event, handleEvent, options);\n // @ts-expect-error\n return () => node.removeEventListener(event, handleEvent, options);\n }, deps);\n};\n","import { type MutableRefObject, useRef } from 'react';\n\n/**\n * React hook for creating a value exactly once.\n * useMemo doesn't give this guarantee unfortunately -\n * https://reactjs.org/docs/hooks-faq.html#how-to-create-expensive-objects-lazily\n * https://reactjs.org/docs/hooks-reference.html#usememo\n * @param defineFn Function which returns defined value.\n */\nexport const useDefineRef = <T>(defineFn: () => T): MutableRefObject<T> => {\n const ref = useRef<T>(void 0 as T);\n\n if (!ref.current) {\n ref.current = defineFn();\n }\n\n return ref;\n};\n","import { useLayoutEffect } from 'react';\nimport { useAbortSignal } from './use-abort-signal.js';\nimport { useConstant } from './use-constant.js';\n\nexport type InstanceCreateConfig<TPayload, TExtension = {}> = TExtension & {\n abortSignal: AbortSignal;\n payload: TPayload;\n};\n\nexport const createUseInstanceHook =\n <TExtension = {}>(extension?: TExtension) =>\n <TInstance, TPayload>(\n factory: (\n config: InstanceCreateConfig<NoInfer<TPayload>, TExtension>,\n ) => TInstance,\n config?: {\n payload?: TPayload;\n onUpdate?: (payload: TPayload) => void;\n },\n ) => {\n const abortSignal = useAbortSignal();\n\n const instance = useConstant(() =>\n factory({\n ...(extension as TExtension),\n abortSignal,\n payload: config?.payload as any,\n }),\n );\n\n useLayoutEffect(() => {\n config?.onUpdate?.(config.payload!);\n }, [config?.payload]);\n\n return instance;\n };\n\n/**\n * The `useInstance` hook is used to create and manage an instance of an object\n * that requires access to the root store and an abort signal.\n *\n * You can create YOUR OWN CUSTOM `useInstance` hook using `createUseInstanceHook` if you need\n * to provide some specific data\n *\n * @param factory - A factory function that takes a configuration and returns an instance.\n * @param config - An optional configuration containing additional input parameters and an update function.\n * @returns An instance created by the factory function.\n */\nexport const useInstance = createUseInstanceHook();\n","import type { MutableRefObject } from 'react';\nimport { useEventListener } from './use-event-listener.js';\n\ntype ClickOutsideInput = {\n contentRef: MutableRefObject<HTMLElement | null>;\n onClick: VoidFunction;\n options?: AddEventListenerOptions;\n};\n\nexport const useClickOutside = ({\n contentRef,\n onClick,\n options,\n}: ClickOutsideInput) => {\n useEventListener({\n event: 'mousedown',\n handler: (event) => {\n if (\n contentRef.current &&\n !contentRef.current.contains(event.target as Node)\n ) {\n onClick();\n }\n },\n options,\n });\n};\n","import { useLayoutEffect, useRef } from 'react';\n\nexport const useElementRef = <T extends HTMLElement>(selector: () => T) => {\n const ref = useRef<T>();\n\n useLayoutEffect(() => {\n ref.current = selector();\n }, []);\n\n return ref;\n};\n","/**\n * A Hook to define an event handler with an always-stable function identity.\n *\n * borrowed from @gaeron\n * https://github.com/reactjs/rfcs/blob/useevent/text/0000-useevent.md\n */\nimport { useCallback, useLayoutEffect, useRef } from 'react';\nimport type { AnyFunction } from 'yummies/utils/types';\n\nexport const useEvent = <H extends AnyFunction>(handler: H): H => {\n const handlerRef = useRef<H>(handler);\n\n // In a real implementation, this would run before layout effects\n useLayoutEffect(() => {\n handlerRef.current = handler;\n });\n\n return useCallback((...args: unknown[]) => {\n // In a real implementation, this would throw if called during render\n const fn = handlerRef.current as AnyFunction;\n return fn(...args);\n }, []) as unknown as H;\n};\n","import { useCallback, useRef, useState } from 'react';\n\nexport interface FlagHook {\n enabled: boolean;\n toggle: VoidFunction;\n enable: VoidFunction;\n disable: VoidFunction;\n}\n\nexport const useFlag = (defaultValue = false): FlagHook => {\n const [enabled, setEnabled] = useState(defaultValue);\n\n const toggle = useCallback(() => setEnabled((value) => !value), []);\n const enable = useCallback(() => setEnabled(true), []);\n const disable = useCallback(() => setEnabled(false), []);\n\n const flagObjRef = useRef<FlagHook>({\n enabled,\n toggle,\n enable,\n disable,\n });\n\n flagObjRef.current.enabled = enabled;\n\n return flagObjRef.current;\n};\n","import { useCallback, useState } from 'react';\n\nexport const useForceUpdate = () => {\n const [, setState] = useState<unknown>(null);\n\n return useCallback(() => {\n setState({});\n }, []);\n};\n","import { useEffect, useRef, useState } from 'react';\n\nexport const useInitialHeight = <T extends HTMLElement>() => {\n const ref = useRef<T | null>(null);\n const [initialHeight, setInitialHeight] = useState<number | undefined>(\n undefined,\n );\n\n useEffect(() => {\n if (ref.current && !initialHeight) {\n setInitialHeight(ref.current.offsetHeight);\n }\n }, [initialHeight]);\n\n return { ref, initialHeight };\n};\n","import { useEffect, useState } from 'react';\n\nexport const useIntersectionObserver = (\n callback: IntersectionObserverCallback,\n options?: IntersectionObserverInit,\n) => {\n const [intersectionObserver] = useState(\n () => new IntersectionObserver(callback, options),\n );\n\n useEffect(() => {\n return () => {\n intersectionObserver.disconnect();\n };\n }, []);\n\n return intersectionObserver;\n};\n","import { useRef } from 'react';\n\nexport const useLastDefinedValue = <T>(value: T) => {\n const ref = useRef(value);\n if (value != null) {\n ref.current = value;\n }\n return ref.current;\n};\n","import { useRef } from 'react';\n\nexport const useLastValueRef = <T>(value: T | null | undefined) => {\n const ref = useRef(value);\n\n if (value != null) {\n ref.current = value;\n }\n\n return ref;\n};\n","import { useEffect } from 'react';\nimport { useSyncRef } from './use-sync-ref.js';\n\nexport const useLifeCycle = (\n fn: () => {\n mount?: VoidFunction;\n unmount?: VoidFunction;\n },\n) => {\n const fnRef = useSyncRef(fn);\n\n useEffect(() => {\n const fnOperation = fnRef.current();\n fnOperation.mount?.();\n return fnOperation.unmount?.();\n }, []);\n};\n","import { useLayoutEffect } from 'react';\nimport { useDefineRef } from './use-define-ref.js';\n\nexport const useResizeObserver = (callback: ResizeObserverCallback) => {\n const resizeObserverRef = useDefineRef(() => new ResizeObserver(callback));\n\n useLayoutEffect(() => {\n return () => {\n resizeObserverRef.current.disconnect();\n };\n }, []);\n\n return resizeObserverRef;\n};\n","import { useCallback, useState } from 'react';\n\nexport const useToggle = (initialState?: boolean) => {\n const [toggled, setToggled] = useState(!!initialState);\n\n const toggle = useCallback(() => setToggled((toggled) => !toggled), []);\n\n return [toggled, toggle, setToggled] as const;\n};\n","import { useState } from 'react';\n\nexport const useValue = <T>(defaults: T | (() => T)) => {\n const [value, setValue] = useState<T>(defaults);\n\n return {\n value,\n set: setValue,\n };\n};\n","import { useEffect, useState } from 'react';\n\nexport const useVisibilityState = () => {\n const [state, setState] = useState<DocumentVisibilityState>();\n\n useEffect(() => {\n const handleVisibilityChange = () => {\n setState(document.visibilityState);\n };\n\n document.addEventListener('visibilitychange', handleVisibilityChange);\n\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n };\n }, []);\n\n return state;\n};\n"],"names":["useConstant","defineValue","ref","useRef","current","value","useAbortController","controller","AbortController","useEffect","abort","useAbortSignal","signal","useSyncRef","useEventListener","event","handler","options","deps","node","document","handlerRef","handleEvent","e","addEventListener","removeEventListener","useDefineRef","defineFn","createUseInstanceHook","extension","factory","config","abortSignal","instance","payload","useLayoutEffect","onUpdate","useInstance","contentRef","onClick","contains","target","selector","useCallback","args","fn","defaultValue","enabled","setEnabled","useState","toggle","enable","disable","flagObjRef","setState","initialHeight","setInitialHeight","offsetHeight","callback","intersectionObserver","IntersectionObserver","disconnect","fnRef","fnOperation","mount","unmount","resizeObserverRef","ResizeObserver","initialState","toggled","setToggled","defaults","setValue","set","state","handleVisibilityChange","visibilityState"],"mappings":"yGASaA,EAAkBC,IAC7B,MAAMC,EAAMC,EAAAA,SAMZ,OAJKD,EAAIE,UACPF,EAAIE,QAAU,CAAEC,MAAOJ,MAGlBC,EAAIE,QAAQC,OCZRC,EAAqB,KAChC,MAAMC,EAAaP,EAAY,IAAM,IAAIQ,iBAQzC,OANAC,EAAAA,UAAU,IACD,KACLF,EAAWG,SAEZ,IAEIH,GCXII,EAAiB,IACrBL,IAAqBM,OCDjBC,EAAiBR,IAC5B,MAAMH,EAAMC,EAAAA,OAAOE,GAEnB,OADAH,EAAIE,QAAUC,EACPH,GCDIY,EAAmB,EAC9BC,QACAC,UACAC,UACAC,OAAO,GACPC,OAAOC,aAQP,MAAMC,EAAaR,EAAWG,GAE9BP,EAAAA,UAAU,KACR,MAAMa,EAAeC,GACnBF,EAAWjB,QAAQmB,GAKrB,OAFAJ,EAAKK,iBAAiBT,EAAOO,EAAaL,GAEnC,IAAME,EAAKM,oBAAoBV,EAAOO,EAAaL,IACzDC,IClBQQ,EAAmBC,IAC9B,MAAMzB,EAAMC,EAAAA,YAAU,GAMtB,OAJKD,EAAIE,UACPF,EAAIE,QAAUuB,KAGTzB,GCPI0B,EACOC,GAClB,CACEC,EAGAC,KAKA,MAAMC,EAAcrB,IAEdsB,EAAWjC,EAAY,IAC3B8B,EAAQ,IACFD,EACJG,cACAE,QAASH,GAAQG,WAQrB,OAJAC,EAAAA,gBAAgB,KACdJ,GAAQK,WAAWL,EAAOG,UACzB,CAACH,GAAQG,UAELD,GAcEI,EAAcT,kHCvCI,EAC7BU,aACAC,UACAtB,cAEAH,EAAiB,CACfC,MAAO,YACPC,QAAUD,IAENuB,EAAWlC,UACVkC,EAAWlC,QAAQoC,SAASzB,EAAM0B,SAEnCF,KAGJtB,gFCtBiDyB,IACnD,MAAMxC,EAAMC,EAAAA,SAMZ,OAJAgC,EAAAA,gBAAgB,KACdjC,EAAIE,QAAUsC,KACb,IAEIxC,oBCAuCc,IAC9C,MAAMK,EAAalB,EAAAA,OAAUa,GAO7B,OAJAmB,EAAAA,gBAAgB,KACdd,EAAWjB,QAAUY,IAGhB2B,EAAAA,YAAY,IAAIC,KAGdC,EADIxB,EAAWjB,YACTwC,GACZ,gDCZkB,CAACE,GAAe,KACrC,MAAOC,EAASC,GAAcC,EAAAA,SAASH,GAEjCI,EAASP,EAAAA,YAAY,IAAMK,EAAY3C,IAAWA,GAAQ,IAC1D8C,EAASR,EAAAA,YAAY,IAAMK,GAAW,GAAO,IAC7CI,EAAUT,EAAAA,YAAY,IAAMK,GAAW,GAAQ,IAE/CK,EAAalD,EAAAA,OAAiB,CAClC4C,UACAG,SACAC,SACAC,YAKF,OAFAC,EAAWjD,QAAQ2C,QAAUA,EAEtBM,EAAWjD,gCCvBU,KAC5B,OAASkD,GAAYL,EAAAA,SAAkB,MAEvC,OAAON,EAAAA,YAAY,KACjBW,EAAS,CAAA,IACR,8BCL2B,KAC9B,MAAMpD,EAAMC,EAAAA,OAAiB,OACtBoD,EAAeC,GAAoBP,EAAAA,cACxC,GASF,OANAxC,EAAAA,UAAU,KACJP,EAAIE,UAAYmD,GAClBC,EAAiBtD,EAAIE,QAAQqD,eAE9B,CAACF,IAEG,CAAErD,MAAKqD,wECZuB,CACrCG,EACAzC,KAEA,MAAO0C,GAAwBV,EAAAA,SAC7B,IAAM,IAAIW,qBAAqBF,EAAUzC,IAS3C,OANAR,EAAAA,UAAU,IACD,KACLkD,EAAqBE,cAEtB,IAEIF,+BCd8BtD,IACrC,MAAMH,EAAMC,EAAAA,OAAOE,GAInB,OAHa,MAATA,IACFH,EAAIE,QAAUC,GAETH,EAAIE,iCCLsBC,IACjC,MAAMH,EAAMC,EAAAA,OAAOE,GAMnB,OAJa,MAATA,IACFH,EAAIE,QAAUC,GAGTH,wBCLP2C,IAKA,MAAMiB,EAAQjD,EAAWgC,GAEzBpC,EAAAA,UAAU,KACR,MAAMsD,EAAcD,EAAM1D,UAE1B,OADA2D,EAAYC,UACLD,EAAYE,aAClB,+BCZ6BP,IAChC,MAAMQ,EAAoBxC,EAAa,IAAM,IAAIyC,eAAeT,IAQhE,OANAvB,EAAAA,gBAAgB,IACP,KACL+B,EAAkB9D,QAAQyD,cAE3B,IAEIK,0CCViBE,IACxB,MAAOC,EAASC,GAAcrB,EAAAA,WAAWmB,GAIzC,MAAO,CAACC,EAFO1B,EAAAA,YAAY,IAAM2B,EAAYD,IAAaA,GAAU,IAE3CC,qBCLCC,IAC1B,MAAOlE,EAAOmE,GAAYvB,EAAAA,SAAYsB,GAEtC,MAAO,CACLlE,QACAoE,IAAKD,+BCLyB,KAChC,MAAOE,EAAOpB,GAAYL,aAc1B,OAZAxC,EAAAA,UAAU,KACR,MAAMkE,EAAyB,KAC7BrB,EAASlC,SAASwD,kBAKpB,OAFAxD,SAASI,iBAAiB,mBAAoBmD,GAEvC,KACLvD,SAASK,oBAAoB,mBAAoBkD,KAElD,IAEID"}
1
+ {"version":3,"file":"react.cjs","sources":["../src/react/hooks/use-constant.ts","../src/react/hooks/use-abort-controller.ts","../src/react/hooks/use-abort-signal.ts","../src/react/hooks/use-sync-ref.ts","../src/react/hooks/use-event-listener.ts","../src/react/hooks/use-click-outside.ts","../src/react/hooks/use-define-ref.ts","../src/react/hooks/use-element-ref.ts","../src/react/hooks/use-event.ts","../src/react/hooks/use-flag.ts","../src/react/hooks/use-force-update.ts","../src/react/hooks/use-initial-height.ts","../src/react/hooks/use-instance.ts","../src/react/hooks/use-intersection-observer.ts","../src/react/hooks/use-last-defined-value.ts","../src/react/hooks/use-last-value-ref.ts","../src/react/hooks/use-life-cycle.ts","../src/react/hooks/use-resize-observer.ts","../src/react/hooks/use-toggle.ts","../src/react/hooks/use-value.ts","../src/react/hooks/use-visibility-state.ts"],"sourcesContent":["import { useRef } from 'react';\n\n/**\n * React hook for creating a value exactly once.\n * useMemo doesn't give this guarantee unfortunately -\n * https://reactjs.org/docs/hooks-faq.html#how-to-create-expensive-objects-lazily\n * https://reactjs.org/docs/hooks-reference.html#usememo\n * @param defineValue Function which returns defined value.\n */\nexport const useConstant = <T>(defineValue: () => T): T => {\n const ref = useRef<{ value: T }>();\n\n if (!ref.current) {\n ref.current = { value: defineValue() };\n }\n\n return ref.current.value;\n};\n","import { useEffect } from 'react';\n\nimport { useConstant } from './use-constant.js';\n\nexport const useAbortController = () => {\n const controller = useConstant(() => new AbortController());\n\n useEffect(() => {\n return () => {\n controller.abort();\n };\n }, []);\n\n return controller;\n};\n","import { useAbortController } from './use-abort-controller.js';\n\nexport const useAbortSignal = () => {\n return useAbortController().signal;\n};\n","import { useRef } from 'react';\n\nexport const useSyncRef = <T>(value: T) => {\n const ref = useRef(value);\n ref.current = value;\n return ref;\n};\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { useEffect } from 'react';\nimport { useSyncRef } from './use-sync-ref.js';\n\nexport const useEventListener = <EventName extends keyof HTMLElementEventMap>({\n event,\n handler,\n options,\n deps = [],\n node = document,\n}: {\n event: EventName;\n handler: (e: HTMLElementEventMap[EventName]) => void;\n options?: boolean | AddEventListenerOptions;\n deps?: unknown[];\n node?: HTMLElement | Document | Window;\n}) => {\n const handlerRef = useSyncRef(handler);\n\n useEffect(() => {\n const handleEvent = (e: HTMLElementEventMap[EventName]) =>\n handlerRef.current(e);\n\n // @ts-expect-error\n node.addEventListener(event, handleEvent, options);\n // @ts-expect-error\n return () => node.removeEventListener(event, handleEvent, options);\n }, deps);\n};\n","import type { MutableRefObject } from 'react';\nimport { useEventListener } from './use-event-listener.js';\n\ntype ClickOutsideInput = {\n contentRef: MutableRefObject<HTMLElement | null>;\n onClick: VoidFunction;\n options?: AddEventListenerOptions;\n};\n\nexport const useClickOutside = ({\n contentRef,\n onClick,\n options,\n}: ClickOutsideInput) => {\n useEventListener({\n event: 'mousedown',\n handler: (event) => {\n if (\n contentRef.current &&\n !contentRef.current.contains(event.target as Node)\n ) {\n onClick();\n }\n },\n options,\n });\n};\n","import { type MutableRefObject, useRef } from 'react';\n\n/**\n * React hook for creating a value exactly once.\n * useMemo doesn't give this guarantee unfortunately -\n * https://reactjs.org/docs/hooks-faq.html#how-to-create-expensive-objects-lazily\n * https://reactjs.org/docs/hooks-reference.html#usememo\n * @param defineFn Function which returns defined value.\n */\nexport const useDefineRef = <T>(defineFn: () => T): MutableRefObject<T> => {\n const ref = useRef<T>(void 0 as T);\n\n if (!ref.current) {\n ref.current = defineFn();\n }\n\n return ref;\n};\n","import { useLayoutEffect, useRef } from 'react';\n\nexport const useElementRef = <T extends HTMLElement>(selector: () => T) => {\n const ref = useRef<T>();\n\n useLayoutEffect(() => {\n ref.current = selector();\n }, []);\n\n return ref;\n};\n","/**\n * A Hook to define an event handler with an always-stable function identity.\n *\n * borrowed from @gaeron\n * https://github.com/reactjs/rfcs/blob/useevent/text/0000-useevent.md\n */\nimport { useCallback, useLayoutEffect, useRef } from 'react';\nimport type { AnyFunction } from 'yummies/types';\n\nexport const useEvent = <H extends AnyFunction>(handler: H): H => {\n const handlerRef = useRef<H>(handler);\n\n // In a real implementation, this would run before layout effects\n useLayoutEffect(() => {\n handlerRef.current = handler;\n });\n\n return useCallback((...args: unknown[]) => {\n // In a real implementation, this would throw if called during render\n const fn = handlerRef.current as AnyFunction;\n return fn(...args);\n }, []) as unknown as H;\n};\n","import { useCallback, useRef, useState } from 'react';\n\nexport interface FlagHook {\n enabled: boolean;\n toggle: VoidFunction;\n enable: VoidFunction;\n disable: VoidFunction;\n}\n\nexport const useFlag = (defaultValue = false): FlagHook => {\n const [enabled, setEnabled] = useState(defaultValue);\n\n const toggle = useCallback(() => setEnabled((value) => !value), []);\n const enable = useCallback(() => setEnabled(true), []);\n const disable = useCallback(() => setEnabled(false), []);\n\n const flagObjRef = useRef<FlagHook>({\n enabled,\n toggle,\n enable,\n disable,\n });\n\n flagObjRef.current.enabled = enabled;\n\n return flagObjRef.current;\n};\n","import { useCallback, useState } from 'react';\n\nexport const useForceUpdate = () => {\n const [, setState] = useState<unknown>(null);\n\n return useCallback(() => {\n setState({});\n }, []);\n};\n","import { useEffect, useRef, useState } from 'react';\n\nexport const useInitialHeight = <T extends HTMLElement>() => {\n const ref = useRef<T | null>(null);\n const [initialHeight, setInitialHeight] = useState<number | undefined>(\n undefined,\n );\n\n useEffect(() => {\n if (ref.current && !initialHeight) {\n setInitialHeight(ref.current.offsetHeight);\n }\n }, [initialHeight]);\n\n return { ref, initialHeight };\n};\n","import { useLayoutEffect } from 'react';\nimport { useAbortSignal } from './use-abort-signal.js';\nimport { useConstant } from './use-constant.js';\n\nexport type InstanceCreateConfig<TPayload, TExtension = {}> = TExtension & {\n abortSignal: AbortSignal;\n payload: TPayload;\n};\n\nexport const createUseInstanceHook =\n <TExtension = {}>(extension?: TExtension) =>\n <TInstance, TPayload>(\n factory: (\n config: InstanceCreateConfig<NoInfer<TPayload>, TExtension>,\n ) => TInstance,\n config?: {\n payload?: TPayload;\n onUpdate?: (payload: TPayload) => void;\n },\n ) => {\n const abortSignal = useAbortSignal();\n\n const instance = useConstant(() =>\n factory({\n ...(extension as TExtension),\n abortSignal,\n payload: config?.payload as any,\n }),\n );\n\n useLayoutEffect(() => {\n config?.onUpdate?.(config.payload!);\n }, [config?.payload]);\n\n return instance;\n };\n\n/**\n * The `useInstance` hook is used to create and manage an instance of an object\n * that requires access to the root store and an abort signal.\n *\n * You can create YOUR OWN CUSTOM `useInstance` hook using `createUseInstanceHook` if you need\n * to provide some specific data\n *\n * @param factory - A factory function that takes a configuration and returns an instance.\n * @param config - An optional configuration containing additional input parameters and an update function.\n * @returns An instance created by the factory function.\n */\nexport const useInstance = createUseInstanceHook();\n","import { useEffect, useState } from 'react';\n\nexport const useIntersectionObserver = (\n callback: IntersectionObserverCallback,\n options?: IntersectionObserverInit,\n) => {\n const [intersectionObserver] = useState(\n () => new IntersectionObserver(callback, options),\n );\n\n useEffect(() => {\n return () => {\n intersectionObserver.disconnect();\n };\n }, []);\n\n return intersectionObserver;\n};\n","import { useRef } from 'react';\n\nexport const useLastDefinedValue = <T>(value: T) => {\n const ref = useRef(value);\n if (value != null) {\n ref.current = value;\n }\n return ref.current;\n};\n","import { useRef } from 'react';\n\nexport const useLastValueRef = <T>(value: T | null | undefined) => {\n const ref = useRef(value);\n\n if (value != null) {\n ref.current = value;\n }\n\n return ref;\n};\n","import { useEffect } from 'react';\nimport { useSyncRef } from './use-sync-ref.js';\n\nexport const useLifeCycle = (\n fn: () => {\n mount?: VoidFunction;\n unmount?: VoidFunction;\n },\n) => {\n const fnRef = useSyncRef(fn);\n\n useEffect(() => {\n const fnOperation = fnRef.current();\n fnOperation.mount?.();\n return fnOperation.unmount?.();\n }, []);\n};\n","import { useLayoutEffect } from 'react';\nimport { useDefineRef } from './use-define-ref.js';\n\nexport const useResizeObserver = (callback: ResizeObserverCallback) => {\n const resizeObserverRef = useDefineRef(() => new ResizeObserver(callback));\n\n useLayoutEffect(() => {\n return () => {\n resizeObserverRef.current.disconnect();\n };\n }, []);\n\n return resizeObserverRef;\n};\n","import { useCallback, useState } from 'react';\n\nexport const useToggle = (initialState?: boolean) => {\n const [toggled, setToggled] = useState(!!initialState);\n\n const toggle = useCallback(() => setToggled((toggled) => !toggled), []);\n\n return [toggled, toggle, setToggled] as const;\n};\n","import { useState } from 'react';\n\nexport const useValue = <T>(defaults: T | (() => T)) => {\n const [value, setValue] = useState<T>(defaults);\n\n return {\n value,\n set: setValue,\n };\n};\n","import { useEffect, useState } from 'react';\n\nexport const useVisibilityState = () => {\n const [state, setState] = useState<DocumentVisibilityState>();\n\n useEffect(() => {\n const handleVisibilityChange = () => {\n setState(document.visibilityState);\n };\n\n document.addEventListener('visibilitychange', handleVisibilityChange);\n\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n };\n }, []);\n\n return state;\n};\n"],"names":["useRef","useEffect","useLayoutEffect","useCallback","useState","toggled"],"mappings":"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"}
package/react.d.ts ADDED
@@ -0,0 +1,113 @@
1
+ import * as react from 'react';
2
+ import { MutableRefObject } from 'react';
3
+ import { AnyFunction } from 'yummies/types';
4
+
5
+ declare const useAbortController: () => AbortController;
6
+
7
+ declare const useAbortSignal: () => AbortSignal;
8
+
9
+ type ClickOutsideInput = {
10
+ contentRef: MutableRefObject<HTMLElement | null>;
11
+ onClick: VoidFunction;
12
+ options?: AddEventListenerOptions;
13
+ };
14
+ declare const useClickOutside: ({ contentRef, onClick, options, }: ClickOutsideInput) => void;
15
+
16
+ /**
17
+ * React hook for creating a value exactly once.
18
+ * useMemo doesn't give this guarantee unfortunately -
19
+ * https://reactjs.org/docs/hooks-faq.html#how-to-create-expensive-objects-lazily
20
+ * https://reactjs.org/docs/hooks-reference.html#usememo
21
+ * @param defineValue Function which returns defined value.
22
+ */
23
+ declare const useConstant: <T>(defineValue: () => T) => T;
24
+
25
+ /**
26
+ * React hook for creating a value exactly once.
27
+ * useMemo doesn't give this guarantee unfortunately -
28
+ * https://reactjs.org/docs/hooks-faq.html#how-to-create-expensive-objects-lazily
29
+ * https://reactjs.org/docs/hooks-reference.html#usememo
30
+ * @param defineFn Function which returns defined value.
31
+ */
32
+ declare const useDefineRef: <T>(defineFn: () => T) => MutableRefObject<T>;
33
+
34
+ declare const useElementRef: <T extends HTMLElement>(selector: () => T) => react.MutableRefObject<T | undefined>;
35
+
36
+ declare const useEvent: <H extends AnyFunction>(handler: H) => H;
37
+
38
+ declare const useEventListener: <EventName extends keyof HTMLElementEventMap>({ event, handler, options, deps, node, }: {
39
+ event: EventName;
40
+ handler: (e: HTMLElementEventMap[EventName]) => void;
41
+ options?: boolean | AddEventListenerOptions;
42
+ deps?: unknown[];
43
+ node?: HTMLElement | Document | Window;
44
+ }) => void;
45
+
46
+ interface FlagHook {
47
+ enabled: boolean;
48
+ toggle: VoidFunction;
49
+ enable: VoidFunction;
50
+ disable: VoidFunction;
51
+ }
52
+ declare const useFlag: (defaultValue?: boolean) => FlagHook;
53
+
54
+ declare const useForceUpdate: () => () => void;
55
+
56
+ declare const useInitialHeight: <T extends HTMLElement>() => {
57
+ ref: react.MutableRefObject<T | null>;
58
+ initialHeight: number | undefined;
59
+ };
60
+
61
+ type InstanceCreateConfig<TPayload, TExtension = {}> = TExtension & {
62
+ abortSignal: AbortSignal;
63
+ payload: TPayload;
64
+ };
65
+ declare const createUseInstanceHook: <TExtension = {}>(extension?: TExtension) => <TInstance, TPayload>(factory: (config: InstanceCreateConfig<NoInfer<TPayload>, TExtension>) => TInstance, config?: {
66
+ payload?: TPayload;
67
+ onUpdate?: (payload: TPayload) => void;
68
+ }) => TInstance;
69
+ /**
70
+ * The `useInstance` hook is used to create and manage an instance of an object
71
+ * that requires access to the root store and an abort signal.
72
+ *
73
+ * You can create YOUR OWN CUSTOM `useInstance` hook using `createUseInstanceHook` if you need
74
+ * to provide some specific data
75
+ *
76
+ * @param factory - A factory function that takes a configuration and returns an instance.
77
+ * @param config - An optional configuration containing additional input parameters and an update function.
78
+ * @returns An instance created by the factory function.
79
+ */
80
+ declare const useInstance: <TInstance, TPayload>(factory: (config: {
81
+ abortSignal: AbortSignal;
82
+ payload: NoInfer<TPayload>;
83
+ }) => TInstance, config?: {
84
+ payload?: TPayload | undefined;
85
+ onUpdate?: ((payload: TPayload) => void) | undefined;
86
+ } | undefined) => TInstance;
87
+
88
+ declare const useIntersectionObserver: (callback: IntersectionObserverCallback, options?: IntersectionObserverInit) => IntersectionObserver;
89
+
90
+ declare const useLastDefinedValue: <T>(value: T) => T;
91
+
92
+ declare const useLastValueRef: <T>(value: T | null | undefined) => react.MutableRefObject<T | null | undefined>;
93
+
94
+ declare const useLifeCycle: (fn: () => {
95
+ mount?: VoidFunction;
96
+ unmount?: VoidFunction;
97
+ }) => void;
98
+
99
+ declare const useResizeObserver: (callback: ResizeObserverCallback) => react.MutableRefObject<ResizeObserver>;
100
+
101
+ declare const useSyncRef: <T>(value: T) => react.MutableRefObject<T>;
102
+
103
+ declare const useToggle: (initialState?: boolean) => readonly [boolean, () => void, react.Dispatch<react.SetStateAction<boolean>>];
104
+
105
+ declare const useValue: <T>(defaults: T | (() => T)) => {
106
+ value: T;
107
+ set: react.Dispatch<react.SetStateAction<T>>;
108
+ };
109
+
110
+ declare const useVisibilityState: () => DocumentVisibilityState | undefined;
111
+
112
+ export { createUseInstanceHook, useAbortController, useAbortSignal, useClickOutside, useConstant, useDefineRef, useElementRef, useEvent, useEventListener, useFlag, useForceUpdate, useInitialHeight, useInstance, useIntersectionObserver, useLastDefinedValue, useLastValueRef, useLifeCycle, useResizeObserver, useSyncRef, useToggle, useValue, useVisibilityState };
113
+ export type { FlagHook, InstanceCreateConfig };
package/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"react.js","sources":["../src/react/hooks/use-constant.ts","../src/react/hooks/use-abort-controller.ts","../src/react/hooks/use-abort-signal.ts","../src/react/hooks/use-sync-ref.ts","../src/react/hooks/use-event-listener.ts","../src/react/hooks/use-click-outside.ts","../src/react/hooks/use-define-ref.ts","../src/react/hooks/use-element-ref.ts","../src/react/hooks/use-event.ts","../src/react/hooks/use-flag.ts","../src/react/hooks/use-force-update.ts","../src/react/hooks/use-initial-height.ts","../src/react/hooks/use-instance.ts","../src/react/hooks/use-intersection-observer.ts","../src/react/hooks/use-last-defined-value.ts","../src/react/hooks/use-last-value-ref.ts","../src/react/hooks/use-life-cycle.ts","../src/react/hooks/use-resize-observer.ts","../src/react/hooks/use-toggle.ts","../src/react/hooks/use-value.ts","../src/react/hooks/use-visibility-state.ts"],"sourcesContent":["import { useRef } from 'react';\n\n/**\n * React hook for creating a value exactly once.\n * useMemo doesn't give this guarantee unfortunately -\n * https://reactjs.org/docs/hooks-faq.html#how-to-create-expensive-objects-lazily\n * https://reactjs.org/docs/hooks-reference.html#usememo\n * @param defineValue Function which returns defined value.\n */\nexport const useConstant = <T>(defineValue: () => T): T => {\n const ref = useRef<{ value: T }>();\n\n if (!ref.current) {\n ref.current = { value: defineValue() };\n }\n\n return ref.current.value;\n};\n","import { useEffect } from 'react';\n\nimport { useConstant } from './use-constant.js';\n\nexport const useAbortController = () => {\n const controller = useConstant(() => new AbortController());\n\n useEffect(() => {\n return () => {\n controller.abort();\n };\n }, []);\n\n return controller;\n};\n","import { useAbortController } from './use-abort-controller.js';\n\nexport const useAbortSignal = () => {\n return useAbortController().signal;\n};\n","import { useRef } from 'react';\n\nexport const useSyncRef = <T>(value: T) => {\n const ref = useRef(value);\n ref.current = value;\n return ref;\n};\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { useEffect } from 'react';\nimport { useSyncRef } from './use-sync-ref.js';\n\nexport const useEventListener = <EventName extends keyof HTMLElementEventMap>({\n event,\n handler,\n options,\n deps = [],\n node = document,\n}: {\n event: EventName;\n handler: (e: HTMLElementEventMap[EventName]) => void;\n options?: boolean | AddEventListenerOptions;\n deps?: unknown[];\n node?: HTMLElement | Document | Window;\n}) => {\n const handlerRef = useSyncRef(handler);\n\n useEffect(() => {\n const handleEvent = (e: HTMLElementEventMap[EventName]) =>\n handlerRef.current(e);\n\n // @ts-expect-error\n node.addEventListener(event, handleEvent, options);\n // @ts-expect-error\n return () => node.removeEventListener(event, handleEvent, options);\n }, deps);\n};\n","import type { MutableRefObject } from 'react';\nimport { useEventListener } from './use-event-listener.js';\n\ntype ClickOutsideInput = {\n contentRef: MutableRefObject<HTMLElement | null>;\n onClick: VoidFunction;\n options?: AddEventListenerOptions;\n};\n\nexport const useClickOutside = ({\n contentRef,\n onClick,\n options,\n}: ClickOutsideInput) => {\n useEventListener({\n event: 'mousedown',\n handler: (event) => {\n if (\n contentRef.current &&\n !contentRef.current.contains(event.target as Node)\n ) {\n onClick();\n }\n },\n options,\n });\n};\n","import { type MutableRefObject, useRef } from 'react';\n\n/**\n * React hook for creating a value exactly once.\n * useMemo doesn't give this guarantee unfortunately -\n * https://reactjs.org/docs/hooks-faq.html#how-to-create-expensive-objects-lazily\n * https://reactjs.org/docs/hooks-reference.html#usememo\n * @param defineFn Function which returns defined value.\n */\nexport const useDefineRef = <T>(defineFn: () => T): MutableRefObject<T> => {\n const ref = useRef<T>(void 0 as T);\n\n if (!ref.current) {\n ref.current = defineFn();\n }\n\n return ref;\n};\n","import { useLayoutEffect, useRef } from 'react';\n\nexport const useElementRef = <T extends HTMLElement>(selector: () => T) => {\n const ref = useRef<T>();\n\n useLayoutEffect(() => {\n ref.current = selector();\n }, []);\n\n return ref;\n};\n","/**\n * A Hook to define an event handler with an always-stable function identity.\n *\n * borrowed from @gaeron\n * https://github.com/reactjs/rfcs/blob/useevent/text/0000-useevent.md\n */\nimport { useCallback, useLayoutEffect, useRef } from 'react';\nimport type { AnyFunction } from 'yummies/utils/types';\n\nexport const useEvent = <H extends AnyFunction>(handler: H): H => {\n const handlerRef = useRef<H>(handler);\n\n // In a real implementation, this would run before layout effects\n useLayoutEffect(() => {\n handlerRef.current = handler;\n });\n\n return useCallback((...args: unknown[]) => {\n // In a real implementation, this would throw if called during render\n const fn = handlerRef.current as AnyFunction;\n return fn(...args);\n }, []) as unknown as H;\n};\n","import { useCallback, useRef, useState } from 'react';\n\nexport interface FlagHook {\n enabled: boolean;\n toggle: VoidFunction;\n enable: VoidFunction;\n disable: VoidFunction;\n}\n\nexport const useFlag = (defaultValue = false): FlagHook => {\n const [enabled, setEnabled] = useState(defaultValue);\n\n const toggle = useCallback(() => setEnabled((value) => !value), []);\n const enable = useCallback(() => setEnabled(true), []);\n const disable = useCallback(() => setEnabled(false), []);\n\n const flagObjRef = useRef<FlagHook>({\n enabled,\n toggle,\n enable,\n disable,\n });\n\n flagObjRef.current.enabled = enabled;\n\n return flagObjRef.current;\n};\n","import { useCallback, useState } from 'react';\n\nexport const useForceUpdate = () => {\n const [, setState] = useState<unknown>(null);\n\n return useCallback(() => {\n setState({});\n }, []);\n};\n","import { useEffect, useRef, useState } from 'react';\n\nexport const useInitialHeight = <T extends HTMLElement>() => {\n const ref = useRef<T | null>(null);\n const [initialHeight, setInitialHeight] = useState<number | undefined>(\n undefined,\n );\n\n useEffect(() => {\n if (ref.current && !initialHeight) {\n setInitialHeight(ref.current.offsetHeight);\n }\n }, [initialHeight]);\n\n return { ref, initialHeight };\n};\n","import { useLayoutEffect } from 'react';\nimport { useAbortSignal } from './use-abort-signal.js';\nimport { useConstant } from './use-constant.js';\n\nexport type InstanceCreateConfig<TPayload, TExtension = {}> = TExtension & {\n abortSignal: AbortSignal;\n payload: TPayload;\n};\n\nexport const createUseInstanceHook =\n <TExtension = {}>(extension?: TExtension) =>\n <TInstance, TPayload>(\n factory: (\n config: InstanceCreateConfig<NoInfer<TPayload>, TExtension>,\n ) => TInstance,\n config?: {\n payload?: TPayload;\n onUpdate?: (payload: TPayload) => void;\n },\n ) => {\n const abortSignal = useAbortSignal();\n\n const instance = useConstant(() =>\n factory({\n ...(extension as TExtension),\n abortSignal,\n payload: config?.payload as any,\n }),\n );\n\n useLayoutEffect(() => {\n config?.onUpdate?.(config.payload!);\n }, [config?.payload]);\n\n return instance;\n };\n\n/**\n * The `useInstance` hook is used to create and manage an instance of an object\n * that requires access to the root store and an abort signal.\n *\n * You can create YOUR OWN CUSTOM `useInstance` hook using `createUseInstanceHook` if you need\n * to provide some specific data\n *\n * @param factory - A factory function that takes a configuration and returns an instance.\n * @param config - An optional configuration containing additional input parameters and an update function.\n * @returns An instance created by the factory function.\n */\nexport const useInstance = createUseInstanceHook();\n","import { useEffect, useState } from 'react';\n\nexport const useIntersectionObserver = (\n callback: IntersectionObserverCallback,\n options?: IntersectionObserverInit,\n) => {\n const [intersectionObserver] = useState(\n () => new IntersectionObserver(callback, options),\n );\n\n useEffect(() => {\n return () => {\n intersectionObserver.disconnect();\n };\n }, []);\n\n return intersectionObserver;\n};\n","import { useRef } from 'react';\n\nexport const useLastDefinedValue = <T>(value: T) => {\n const ref = useRef(value);\n if (value != null) {\n ref.current = value;\n }\n return ref.current;\n};\n","import { useRef } from 'react';\n\nexport const useLastValueRef = <T>(value: T | null | undefined) => {\n const ref = useRef(value);\n\n if (value != null) {\n ref.current = value;\n }\n\n return ref;\n};\n","import { useEffect } from 'react';\nimport { useSyncRef } from './use-sync-ref.js';\n\nexport const useLifeCycle = (\n fn: () => {\n mount?: VoidFunction;\n unmount?: VoidFunction;\n },\n) => {\n const fnRef = useSyncRef(fn);\n\n useEffect(() => {\n const fnOperation = fnRef.current();\n fnOperation.mount?.();\n return fnOperation.unmount?.();\n }, []);\n};\n","import { useLayoutEffect } from 'react';\nimport { useDefineRef } from './use-define-ref.js';\n\nexport const useResizeObserver = (callback: ResizeObserverCallback) => {\n const resizeObserverRef = useDefineRef(() => new ResizeObserver(callback));\n\n useLayoutEffect(() => {\n return () => {\n resizeObserverRef.current.disconnect();\n };\n }, []);\n\n return resizeObserverRef;\n};\n","import { useCallback, useState } from 'react';\n\nexport const useToggle = (initialState?: boolean) => {\n const [toggled, setToggled] = useState(!!initialState);\n\n const toggle = useCallback(() => setToggled((toggled) => !toggled), []);\n\n return [toggled, toggle, setToggled] as const;\n};\n","import { useState } from 'react';\n\nexport const useValue = <T>(defaults: T | (() => T)) => {\n const [value, setValue] = useState<T>(defaults);\n\n return {\n value,\n set: setValue,\n };\n};\n","import { useEffect, useState } from 'react';\n\nexport const useVisibilityState = () => {\n const [state, setState] = useState<DocumentVisibilityState>();\n\n useEffect(() => {\n const handleVisibilityChange = () => {\n setState(document.visibilityState);\n };\n\n document.addEventListener('visibilitychange', handleVisibilityChange);\n\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n };\n }, []);\n\n return state;\n};\n"],"names":["toggled"],"mappings":"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"}
1
+ {"version":3,"file":"react.js","sources":["../src/react/hooks/use-constant.ts","../src/react/hooks/use-abort-controller.ts","../src/react/hooks/use-abort-signal.ts","../src/react/hooks/use-sync-ref.ts","../src/react/hooks/use-event-listener.ts","../src/react/hooks/use-click-outside.ts","../src/react/hooks/use-define-ref.ts","../src/react/hooks/use-element-ref.ts","../src/react/hooks/use-event.ts","../src/react/hooks/use-flag.ts","../src/react/hooks/use-force-update.ts","../src/react/hooks/use-initial-height.ts","../src/react/hooks/use-instance.ts","../src/react/hooks/use-intersection-observer.ts","../src/react/hooks/use-last-defined-value.ts","../src/react/hooks/use-last-value-ref.ts","../src/react/hooks/use-life-cycle.ts","../src/react/hooks/use-resize-observer.ts","../src/react/hooks/use-toggle.ts","../src/react/hooks/use-value.ts","../src/react/hooks/use-visibility-state.ts"],"sourcesContent":["import { useRef } from 'react';\n\n/**\n * React hook for creating a value exactly once.\n * useMemo doesn't give this guarantee unfortunately -\n * https://reactjs.org/docs/hooks-faq.html#how-to-create-expensive-objects-lazily\n * https://reactjs.org/docs/hooks-reference.html#usememo\n * @param defineValue Function which returns defined value.\n */\nexport const useConstant = <T>(defineValue: () => T): T => {\n const ref = useRef<{ value: T }>();\n\n if (!ref.current) {\n ref.current = { value: defineValue() };\n }\n\n return ref.current.value;\n};\n","import { useEffect } from 'react';\n\nimport { useConstant } from './use-constant.js';\n\nexport const useAbortController = () => {\n const controller = useConstant(() => new AbortController());\n\n useEffect(() => {\n return () => {\n controller.abort();\n };\n }, []);\n\n return controller;\n};\n","import { useAbortController } from './use-abort-controller.js';\n\nexport const useAbortSignal = () => {\n return useAbortController().signal;\n};\n","import { useRef } from 'react';\n\nexport const useSyncRef = <T>(value: T) => {\n const ref = useRef(value);\n ref.current = value;\n return ref;\n};\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { useEffect } from 'react';\nimport { useSyncRef } from './use-sync-ref.js';\n\nexport const useEventListener = <EventName extends keyof HTMLElementEventMap>({\n event,\n handler,\n options,\n deps = [],\n node = document,\n}: {\n event: EventName;\n handler: (e: HTMLElementEventMap[EventName]) => void;\n options?: boolean | AddEventListenerOptions;\n deps?: unknown[];\n node?: HTMLElement | Document | Window;\n}) => {\n const handlerRef = useSyncRef(handler);\n\n useEffect(() => {\n const handleEvent = (e: HTMLElementEventMap[EventName]) =>\n handlerRef.current(e);\n\n // @ts-expect-error\n node.addEventListener(event, handleEvent, options);\n // @ts-expect-error\n return () => node.removeEventListener(event, handleEvent, options);\n }, deps);\n};\n","import type { MutableRefObject } from 'react';\nimport { useEventListener } from './use-event-listener.js';\n\ntype ClickOutsideInput = {\n contentRef: MutableRefObject<HTMLElement | null>;\n onClick: VoidFunction;\n options?: AddEventListenerOptions;\n};\n\nexport const useClickOutside = ({\n contentRef,\n onClick,\n options,\n}: ClickOutsideInput) => {\n useEventListener({\n event: 'mousedown',\n handler: (event) => {\n if (\n contentRef.current &&\n !contentRef.current.contains(event.target as Node)\n ) {\n onClick();\n }\n },\n options,\n });\n};\n","import { type MutableRefObject, useRef } from 'react';\n\n/**\n * React hook for creating a value exactly once.\n * useMemo doesn't give this guarantee unfortunately -\n * https://reactjs.org/docs/hooks-faq.html#how-to-create-expensive-objects-lazily\n * https://reactjs.org/docs/hooks-reference.html#usememo\n * @param defineFn Function which returns defined value.\n */\nexport const useDefineRef = <T>(defineFn: () => T): MutableRefObject<T> => {\n const ref = useRef<T>(void 0 as T);\n\n if (!ref.current) {\n ref.current = defineFn();\n }\n\n return ref;\n};\n","import { useLayoutEffect, useRef } from 'react';\n\nexport const useElementRef = <T extends HTMLElement>(selector: () => T) => {\n const ref = useRef<T>();\n\n useLayoutEffect(() => {\n ref.current = selector();\n }, []);\n\n return ref;\n};\n","/**\n * A Hook to define an event handler with an always-stable function identity.\n *\n * borrowed from @gaeron\n * https://github.com/reactjs/rfcs/blob/useevent/text/0000-useevent.md\n */\nimport { useCallback, useLayoutEffect, useRef } from 'react';\nimport type { AnyFunction } from 'yummies/types';\n\nexport const useEvent = <H extends AnyFunction>(handler: H): H => {\n const handlerRef = useRef<H>(handler);\n\n // In a real implementation, this would run before layout effects\n useLayoutEffect(() => {\n handlerRef.current = handler;\n });\n\n return useCallback((...args: unknown[]) => {\n // In a real implementation, this would throw if called during render\n const fn = handlerRef.current as AnyFunction;\n return fn(...args);\n }, []) as unknown as H;\n};\n","import { useCallback, useRef, useState } from 'react';\n\nexport interface FlagHook {\n enabled: boolean;\n toggle: VoidFunction;\n enable: VoidFunction;\n disable: VoidFunction;\n}\n\nexport const useFlag = (defaultValue = false): FlagHook => {\n const [enabled, setEnabled] = useState(defaultValue);\n\n const toggle = useCallback(() => setEnabled((value) => !value), []);\n const enable = useCallback(() => setEnabled(true), []);\n const disable = useCallback(() => setEnabled(false), []);\n\n const flagObjRef = useRef<FlagHook>({\n enabled,\n toggle,\n enable,\n disable,\n });\n\n flagObjRef.current.enabled = enabled;\n\n return flagObjRef.current;\n};\n","import { useCallback, useState } from 'react';\n\nexport const useForceUpdate = () => {\n const [, setState] = useState<unknown>(null);\n\n return useCallback(() => {\n setState({});\n }, []);\n};\n","import { useEffect, useRef, useState } from 'react';\n\nexport const useInitialHeight = <T extends HTMLElement>() => {\n const ref = useRef<T | null>(null);\n const [initialHeight, setInitialHeight] = useState<number | undefined>(\n undefined,\n );\n\n useEffect(() => {\n if (ref.current && !initialHeight) {\n setInitialHeight(ref.current.offsetHeight);\n }\n }, [initialHeight]);\n\n return { ref, initialHeight };\n};\n","import { useLayoutEffect } from 'react';\nimport { useAbortSignal } from './use-abort-signal.js';\nimport { useConstant } from './use-constant.js';\n\nexport type InstanceCreateConfig<TPayload, TExtension = {}> = TExtension & {\n abortSignal: AbortSignal;\n payload: TPayload;\n};\n\nexport const createUseInstanceHook =\n <TExtension = {}>(extension?: TExtension) =>\n <TInstance, TPayload>(\n factory: (\n config: InstanceCreateConfig<NoInfer<TPayload>, TExtension>,\n ) => TInstance,\n config?: {\n payload?: TPayload;\n onUpdate?: (payload: TPayload) => void;\n },\n ) => {\n const abortSignal = useAbortSignal();\n\n const instance = useConstant(() =>\n factory({\n ...(extension as TExtension),\n abortSignal,\n payload: config?.payload as any,\n }),\n );\n\n useLayoutEffect(() => {\n config?.onUpdate?.(config.payload!);\n }, [config?.payload]);\n\n return instance;\n };\n\n/**\n * The `useInstance` hook is used to create and manage an instance of an object\n * that requires access to the root store and an abort signal.\n *\n * You can create YOUR OWN CUSTOM `useInstance` hook using `createUseInstanceHook` if you need\n * to provide some specific data\n *\n * @param factory - A factory function that takes a configuration and returns an instance.\n * @param config - An optional configuration containing additional input parameters and an update function.\n * @returns An instance created by the factory function.\n */\nexport const useInstance = createUseInstanceHook();\n","import { useEffect, useState } from 'react';\n\nexport const useIntersectionObserver = (\n callback: IntersectionObserverCallback,\n options?: IntersectionObserverInit,\n) => {\n const [intersectionObserver] = useState(\n () => new IntersectionObserver(callback, options),\n );\n\n useEffect(() => {\n return () => {\n intersectionObserver.disconnect();\n };\n }, []);\n\n return intersectionObserver;\n};\n","import { useRef } from 'react';\n\nexport const useLastDefinedValue = <T>(value: T) => {\n const ref = useRef(value);\n if (value != null) {\n ref.current = value;\n }\n return ref.current;\n};\n","import { useRef } from 'react';\n\nexport const useLastValueRef = <T>(value: T | null | undefined) => {\n const ref = useRef(value);\n\n if (value != null) {\n ref.current = value;\n }\n\n return ref;\n};\n","import { useEffect } from 'react';\nimport { useSyncRef } from './use-sync-ref.js';\n\nexport const useLifeCycle = (\n fn: () => {\n mount?: VoidFunction;\n unmount?: VoidFunction;\n },\n) => {\n const fnRef = useSyncRef(fn);\n\n useEffect(() => {\n const fnOperation = fnRef.current();\n fnOperation.mount?.();\n return fnOperation.unmount?.();\n }, []);\n};\n","import { useLayoutEffect } from 'react';\nimport { useDefineRef } from './use-define-ref.js';\n\nexport const useResizeObserver = (callback: ResizeObserverCallback) => {\n const resizeObserverRef = useDefineRef(() => new ResizeObserver(callback));\n\n useLayoutEffect(() => {\n return () => {\n resizeObserverRef.current.disconnect();\n };\n }, []);\n\n return resizeObserverRef;\n};\n","import { useCallback, useState } from 'react';\n\nexport const useToggle = (initialState?: boolean) => {\n const [toggled, setToggled] = useState(!!initialState);\n\n const toggle = useCallback(() => setToggled((toggled) => !toggled), []);\n\n return [toggled, toggle, setToggled] as const;\n};\n","import { useState } from 'react';\n\nexport const useValue = <T>(defaults: T | (() => T)) => {\n const [value, setValue] = useState<T>(defaults);\n\n return {\n value,\n set: setValue,\n };\n};\n","import { useEffect, useState } from 'react';\n\nexport const useVisibilityState = () => {\n const [state, setState] = useState<DocumentVisibilityState>();\n\n useEffect(() => {\n const handleVisibilityChange = () => {\n setState(document.visibilityState);\n };\n\n document.addEventListener('visibilitychange', handleVisibilityChange);\n\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n };\n }, []);\n\n return state;\n};\n"],"names":["toggled"],"mappings":"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"}
package/sound.cjs CHANGED
@@ -1,2 +1,12 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});exports.playSound=async(e,{volume:o=1}={})=>{let t=new Audio(e);t.volume=o,t.muted=!o,await t.play(),t.remove(),t=null};
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const playSound = async (file, { volume = 1 } = {}) => {
4
+ let audio = new Audio(file);
5
+ audio.volume = volume;
6
+ audio.muted = !volume;
7
+ await audio.play();
8
+ audio.remove();
9
+ audio = null;
10
+ };
11
+ exports.playSound = playSound;
2
12
  //# sourceMappingURL=sound.cjs.map
package/sound.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sound.cjs","sources":["../src/sound.ts"],"sourcesContent":["/**\n * Воспроизводит звук из файла\n */\nexport const playSound = async (\n file: string,\n { volume = 1 }: { volume?: number } = {},\n) => {\n let audio = new Audio(file);\n audio.volume = volume;\n audio.muted = !volume;\n await audio.play();\n audio.remove();\n // @ts-expect-error\n audio = null;\n};\n"],"names":["async","file","volume","audio","Audio","muted","play","remove"],"mappings":"kGAGyBA,MACvBC,GACEC,SAAS,GAA2B,CAAA,KAEtC,IAAIC,EAAQ,IAAIC,MAAMH,GACtBE,EAAMD,OAASA,EACfC,EAAME,OAASH,QACTC,EAAMG,OACZH,EAAMI,SAENJ,EAAQ"}
1
+ {"version":3,"file":"sound.cjs","sources":["../src/sound.ts"],"sourcesContent":["/**\n * Воспроизводит звук из файла\n */\nexport const playSound = async (\n file: string,\n { volume = 1 }: { volume?: number } = {},\n) => {\n let audio = new Audio(file);\n audio.volume = volume;\n audio.muted = !volume;\n await audio.play();\n audio.remove();\n // @ts-expect-error\n audio = null;\n};\n"],"names":[],"mappings":";;AAGO,MAAM,YAAY,OACvB,MACA,EAAE,SAAS,EAAA,IAA2B,CAAA,MACnC;AACH,MAAI,QAAQ,IAAI,MAAM,IAAI;AAC1B,QAAM,SAAS;AACf,QAAM,QAAQ,CAAC;AACf,QAAM,MAAM,KAAA;AACZ,QAAM,OAAA;AAEN,UAAQ;AACV;;"}
package/sound.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * Воспроизводит звук из файла
3
3
  */
4
- export declare const playSound: (file: string, { volume }?: {
4
+ declare const playSound: (file: string, { volume }?: {
5
5
  volume?: number;
6
6
  }) => Promise<void>;
7
- //# sourceMappingURL=sound.d.ts.map
7
+
8
+ export { playSound };
package/text.cjs CHANGED
@@ -1,2 +1,38 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});exports.declension=(t,e,s=[2,0,1,1,1,2])=>e[t%100>4&&t%100<20?2:s[Math.min(t%10,5)]],exports.splitTextByLines=(t,e=60)=>{const s=t.split(/\s+/).filter(t=>""!==t),n=[];let l="";for(const o of s){if(o.length>e){""!==l&&(n.push(l),l="");let t=0;for(;t<o.length;){const s=o.slice(t,t+e);n.push(s),t+=e}continue}""===l?l=o:l.length+1+o.length<=e?l+=` ${o}`:(n.push(l),l=o)}return""===l&&0!==n.length||n.push(l),n};
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const declension = (count, txt, cases = [2, 0, 1, 1, 1, 2]) => txt[count % 100 > 4 && count % 100 < 20 ? 2 : cases[Math.min(count % 10, 5)]];
4
+ const splitTextByLines = (text, lineLingth = 60) => {
5
+ const words = text.split(/\s+/).filter((word) => word !== "");
6
+ const lines = [];
7
+ let currentLine = "";
8
+ for (const word of words) {
9
+ if (word.length > lineLingth) {
10
+ if (currentLine !== "") {
11
+ lines.push(currentLine);
12
+ currentLine = "";
13
+ }
14
+ let start = 0;
15
+ while (start < word.length) {
16
+ const chunk = word.slice(start, start + lineLingth);
17
+ lines.push(chunk);
18
+ start += lineLingth;
19
+ }
20
+ continue;
21
+ }
22
+ if (currentLine === "") {
23
+ currentLine = word;
24
+ } else if (currentLine.length + 1 + word.length <= lineLingth) {
25
+ currentLine += ` ${word}`;
26
+ } else {
27
+ lines.push(currentLine);
28
+ currentLine = word;
29
+ }
30
+ }
31
+ if (currentLine !== "" || lines.length === 0) {
32
+ lines.push(currentLine);
33
+ }
34
+ return lines;
35
+ };
36
+ exports.declension = declension;
37
+ exports.splitTextByLines = splitTextByLines;
2
38
  //# sourceMappingURL=text.cjs.map