@dxos/react-hooks 0.1.52 → 0.1.53-main.02d8e55

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.
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/useForwardedRef.ts", "../../../src/useId.ts", "../../../src/useIsFocused.ts", "../../../src/useMediaQuery.ts"],
4
4
  "sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport { useRef, useEffect } from 'react';\n\nexport const useForwardedRef = <T>(ref: React.ForwardedRef<T>) => {\n const innerRef = useRef<T>(null);\n\n useEffect(() => {\n if (!ref) {\n return;\n }\n if (typeof ref === 'function') {\n ref(innerRef.current);\n } else {\n ref.current = innerRef.current;\n }\n });\n\n return innerRef;\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport alea from 'alea';\nimport { useMemo } from 'react';\n\ninterface PrngFactory {\n new (seed?: string): () => number;\n}\n\nconst Alea: PrngFactory = alea as unknown as PrngFactory;\n\nconst prng = new Alea('@dxos/react-hooks');\n\n// TODO(burdon): Replace with PublicKey.random() but consider removing (dangerous mis-use of ECHO objects).\nexport const randomString = (n = 4) =>\n prng()\n .toString(16)\n .slice(2, n + 2);\n\nexport const useId = (namespace: string, propsId?: string, opts?: Partial<{ n: number }>) =>\n useMemo(() => propsId ?? `${namespace}-${randomString(opts?.n ?? 4)}`, [propsId]);\n", "//\n// Copyright 2022 DXOS.org\n//\n\n// Based upon the useIsFocused hook which is part of the `rci` project:\n/// https://github.com/leonardodino/rci/blob/main/packages/use-is-focused\n\nimport { useEffect, useRef, useState, RefObject } from 'react';\n\nexport const useIsFocused = (inputRef: RefObject<HTMLInputElement>) => {\n const [isFocused, setIsFocused] = useState<boolean | undefined>(undefined);\n const isFocusedRef = useRef<boolean | undefined>(isFocused);\n\n isFocusedRef.current = isFocused;\n\n useEffect(() => {\n const input = inputRef.current;\n if (!input) {\n return;\n }\n\n const onFocus = () => setIsFocused(true);\n const onBlur = () => setIsFocused(false);\n input.addEventListener('focus', onFocus);\n input.addEventListener('blur', onBlur);\n\n if (isFocusedRef.current === undefined) {\n setIsFocused(document.activeElement === input);\n }\n\n return () => {\n input.removeEventListener('focus', onFocus);\n input.removeEventListener('blur', onBlur);\n };\n }, [inputRef, setIsFocused]);\n\n return isFocused;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// This hook is based on Chakra UI’s `useMediaQuery`: https://github.com/chakra-ui/chakra-ui/blob/main/packages/components/media-query/src/use-media-query.ts\n\nimport { useEffect, useState } from 'react';\n\nexport type UseMediaQueryOptions = {\n fallback?: boolean | boolean[];\n ssr?: boolean;\n};\n\n// TODO(thure): This should be derived from the same source of truth as the Tailwind theme config\nconst breakpointMediaQueries: Record<string, string> = {\n sm: '(min-width: 640px)',\n md: '(min-width: 768px)',\n lg: '(min-width: 1024px)',\n xl: '(min-width: 1280px)',\n '2xl': '(min-width: 1536px)',\n};\n\n/**\n * React hook that tracks state of a CSS media query\n *\n * @param query the media query to match, or a recognized breakpoint token\n * @param options the media query options { fallback, ssr }\n *\n * @see Docs https://chakra-ui.com/docs/hooks/use-media-query\n */\nexport const useMediaQuery = (query: string | string[], options: UseMediaQueryOptions = {}): boolean[] => {\n const { ssr = true, fallback } = options;\n\n const queries = (Array.isArray(query) ? query : [query]).map((query) =>\n query in breakpointMediaQueries ? breakpointMediaQueries[query] : query,\n );\n\n let fallbackValues = Array.isArray(fallback) ? fallback : [fallback];\n fallbackValues = fallbackValues.filter((v) => v != null) as boolean[];\n\n const [value, setValue] = useState(() => {\n return queries.map((query, index) => ({\n media: query,\n matches: ssr ? !!fallbackValues[index] : document.defaultView?.matchMedia(query).matches,\n }));\n });\n\n useEffect(() => {\n setValue(\n queries.map((query) => ({\n media: query,\n matches: document.defaultView?.matchMedia(query).matches,\n })),\n );\n\n const mql = queries.map((query) => document.defaultView?.matchMedia(query));\n\n const handler = (evt: MediaQueryListEvent) => {\n setValue((prev) => {\n return prev.slice().map((item) => {\n if (item.media === evt.media) {\n return { ...item, matches: evt.matches };\n }\n return item;\n });\n });\n };\n\n mql.forEach((mql) => {\n if (typeof mql?.addListener === 'function') {\n mql?.addListener(handler);\n } else {\n mql?.addEventListener('change', handler);\n }\n });\n\n return () => {\n mql.forEach((mql) => {\n if (typeof mql?.removeListener === 'function') {\n mql?.removeListener(handler);\n } else {\n mql?.removeEventListener('change', handler);\n }\n });\n };\n }, [document.defaultView]);\n\n return value.map((item) => !!item.matches);\n};\n"],
5
- "mappings": ";AAIA,SAASA,QAAQC,iBAAiB;AAE3B,IAAMC,kBAAkB,CAAIC,QAA+B;AAChE,QAAMC,WAAWJ,OAAU,IAAI;AAE/BC,YAAU,MAAM;AACd,QAAI,CAACE,KAAK;AACR;IACF;AACA,QAAI,OAAOA,QAAQ,YAAY;AAC7BA,UAAIC,SAASC,OAAO;IACtB,OAAO;AACLF,UAAIE,UAAUD,SAASC;IACzB;EACF,CAAA;AAEA,SAAOD;AACT;;;ACjBA,OAAOE,UAAU;AACjB,SAASC,eAAe;AAMxB,IAAMC,OAAoBF;AAE1B,IAAMG,OAAO,IAAID,KAAK,mBAAA;AAGf,IAAME,eAAe,CAACC,IAAI,MAC/BF,KAAAA,EACGG,SAAS,EAAA,EACTC,MAAM,GAAGF,IAAI,CAAA;AAEX,IAAMG,QAAQ,CAACC,WAAmBC,SAAkBC,SACzDV,QAAQ,MAAA;AAtBV;AAsBgBS,qCAAW,GAAGD,aAAaL,cAAaO,kCAAMN,MAANM,YAAW,CAAA;GAAM;EAACD;CAAQ;;;ACflF,SAASE,aAAAA,YAAWC,UAAAA,SAAQC,gBAA2B;AAEhD,IAAMC,eAAe,CAACC,aAA0C;AACrE,QAAM,CAACC,WAAWC,YAAAA,IAAgBJ,SAA8BK,MAAAA;AAChE,QAAMC,eAAeP,QAA4BI,SAAAA;AAEjDG,eAAaC,UAAUJ;AAEvBL,EAAAA,WAAU,MAAM;AACd,UAAMU,QAAQN,SAASK;AACvB,QAAI,CAACC,OAAO;AACV;IACF;AAEA,UAAMC,UAAU,MAAML,aAAa,IAAI;AACvC,UAAMM,SAAS,MAAMN,aAAa,KAAK;AACvCI,UAAMG,iBAAiB,SAASF,OAAAA;AAChCD,UAAMG,iBAAiB,QAAQD,MAAAA;AAE/B,QAAIJ,aAAaC,YAAYF,QAAW;AACtCD,mBAAaQ,SAASC,kBAAkBL,KAAAA;IAC1C;AAEA,WAAO,MAAM;AACXA,YAAMM,oBAAoB,SAASL,OAAAA;AACnCD,YAAMM,oBAAoB,QAAQJ,MAAAA;IACpC;EACF,GAAG;IAACR;IAAUE;GAAa;AAE3B,SAAOD;AACT;;;AC/BE,SAAKY,aAAAA,YAAWC,YAAAA,iBAAgB;AAQhC,IAAEC,yBAAiD;EACrDC,IAAI;EACJC,IAAI;EACJC,IAAI;EACJC,IAAI;EACJ,OAAO;AACL;AAUG,IAAMC,gBAAgB,CAACC,OAA0BC,UAAgC,CAAC,MAAiB;AACxG,QAAM,EAAEC,MAAM,MAAMC,SAAQ,IAAKF;AAEjC,QAAMG,WAAWC,MAAMC,QAAQN,KAAAA,IAASA,QAAQ;IAACA;KAAQO,IAAI,CAACP,WAC5DA,UAASN,yBAAyBA,uBAAuBM,MAAAA,IAASA,MAAK;AAGzE,MAAIQ,iBAAiBH,MAAMC,QAAQH,QAAAA,IAAYA,WAAW;IAACA;;AAC3DK,mBAAiBA,eAAeC,OAAO,CAACC,MAAMA,KAAK,IAAI;AAEvD,QAAM,CAACC,OAAOC,QAAAA,IAAYnB,UAAS,MAAM;AACvC,WAAOW,QAAQG,IAAI,CAACP,QAAOa,UAAAA;AAzC7B;AAyCwC;QACpCC,OAAOd;QACPe,SAASb,MAAM,CAAC,CAACM,eAAeK,KAAAA,KAASG,cAASC,gBAATD,mBAAsBE,WAAWlB,QAAOe;MACnF;KAAA;EACF,CAAA;AAEAvB,EAAAA,WAAU,MAAM;AACdoB,aACER,QAAQG,IAAI,CAACP,WAAAA;AAjDjB;AAiD4B;QACtBc,OAAOd;QACPe,UAASC,cAASC,gBAATD,mBAAsBE,WAAWlB,QAAOe;MACnD;KAAA,CAAA;AAGF,UAAMI,MAAMf,QAAQG,IAAI,CAACP,WAAAA;AAvD3B;AAuDqCgB,4BAASC,gBAATD,mBAAsBE,WAAWlB;KAAAA;AAEpE,UAAMoB,UAAU,CAACC,QAA6B;AAC5CT,eAAS,CAACU,SAAS;AACjB,eAAOA,KAAKC,MAAK,EAAGhB,IAAI,CAACiB,SAAS;AAChC,cAAIA,KAAKV,UAAUO,IAAIP,OAAO;AAC5B,mBAAO;cAAE,GAAGU;cAAMT,SAASM,IAAIN;YAAQ;UACzC;AACA,iBAAOS;QACT,CAAA;MACF,CAAA;IACF;AAEAL,QAAIM,QAAQ,CAACN,SAAQ;AACnB,UAAI,QAAOA,QAAAA,gBAAAA,KAAKO,iBAAgB,YAAY;AAC1CP,QAAAA,QAAAA,gBAAAA,KAAKO,YAAYN;MACnB,OAAO;AACLD,QAAAA,QAAAA,gBAAAA,KAAKQ,iBAAiB,UAAUP;MAClC;IACF,CAAA;AAEA,WAAO,MAAM;AACXD,UAAIM,QAAQ,CAACN,SAAQ;AACnB,YAAI,QAAOA,QAAAA,gBAAAA,KAAKS,oBAAmB,YAAY;AAC7CT,UAAAA,QAAAA,gBAAAA,KAAKS,eAAeR;QACtB,OAAO;AACLD,UAAAA,QAAAA,gBAAAA,KAAKU,oBAAoB,UAAUT;QACrC;MACF,CAAA;IACF;EACF,GAAG;IAACJ,SAASC;GAAY;AAEzB,SAAON,MAAMJ,IAAI,CAACiB,SAAS,CAAC,CAACA,KAAKT,OAAO;AACvC;",
6
- "names": ["useRef", "useEffect", "useForwardedRef", "ref", "innerRef", "current", "alea", "useMemo", "Alea", "prng", "randomString", "n", "toString", "slice", "useId", "namespace", "propsId", "opts", "useEffect", "useRef", "useState", "useIsFocused", "inputRef", "isFocused", "setIsFocused", "undefined", "isFocusedRef", "current", "input", "onFocus", "onBlur", "addEventListener", "document", "activeElement", "removeEventListener", "useEffect", "useState", "breakpointMediaQueries", "sm", "md", "lg", "xl", "useMediaQuery", "query", "options", "ssr", "fallback", "queries", "Array", "isArray", "map", "fallbackValues", "filter", "v", "value", "setValue", "index", "media", "matches", "document", "defaultView", "matchMedia", "mql", "handler", "evt", "prev", "slice", "item", "forEach", "addListener", "addEventListener", "removeListener", "removeEventListener"]
5
+ "mappings": "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",
6
+ "names": ["useRef", "useEffect", "useForwardedRef", "ref", "innerRef", "useRef", "useEffect", "current", "alea", "useMemo", "Alea", "alea", "prng", "randomString", "n", "toString", "slice", "useId", "namespace", "propsId", "opts", "useMemo", "useEffect", "useRef", "useState", "useIsFocused", "inputRef", "isFocused", "setIsFocused", "useState", "undefined", "isFocusedRef", "useRef", "current", "useEffect", "input", "onFocus", "onBlur", "addEventListener", "document", "activeElement", "removeEventListener", "useEffect", "useState", "breakpointMediaQueries", "sm", "md", "lg", "xl", "useMediaQuery", "query", "options", "ssr", "fallback", "queries", "Array", "isArray", "map", "fallbackValues", "filter", "v", "value", "setValue", "useState", "index", "media", "matches", "document", "defaultView", "matchMedia", "useEffect", "mql", "handler", "evt", "prev", "slice", "item", "forEach", "addListener", "addEventListener", "removeListener", "removeEventListener"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/ui/primitives/react-hooks/src/useForwardedRef.ts":{"bytes":1639,"imports":[{"path":"react","kind":"import-statement","external":true}]},"packages/ui/primitives/react-hooks/src/useId.ts":{"bytes":2159,"imports":[{"path":"alea","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}]},"packages/ui/primitives/react-hooks/src/useIsFocused.ts":{"bytes":3857,"imports":[{"path":"react","kind":"import-statement","external":true}]},"packages/ui/primitives/react-hooks/src/useMediaQuery.ts":{"bytes":9277,"imports":[{"path":"react","kind":"import-statement","external":true}]},"packages/ui/primitives/react-hooks/src/index.ts":{"bytes":677,"imports":[{"path":"packages/ui/primitives/react-hooks/src/useForwardedRef.ts","kind":"import-statement","original":"./useForwardedRef"},{"path":"packages/ui/primitives/react-hooks/src/useId.ts","kind":"import-statement","original":"./useId"},{"path":"packages/ui/primitives/react-hooks/src/useIsFocused.ts","kind":"import-statement","original":"./useIsFocused"},{"path":"packages/ui/primitives/react-hooks/src/useMediaQuery.ts","kind":"import-statement","original":"./useMediaQuery"}]}},"outputs":{"packages/ui/primitives/react-hooks/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":8695},"packages/ui/primitives/react-hooks/dist/lib/browser/index.mjs":{"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"alea","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"exports":["randomString","useForwardedRef","useId","useIsFocused","useMediaQuery"],"entryPoint":"packages/ui/primitives/react-hooks/src/index.ts","inputs":{"packages/ui/primitives/react-hooks/src/useForwardedRef.ts":{"bytesInOutput":316},"packages/ui/primitives/react-hooks/src/index.ts":{"bytesInOutput":0},"packages/ui/primitives/react-hooks/src/useId.ts":{"bytesInOutput":396},"packages/ui/primitives/react-hooks/src/useIsFocused.ts":{"bytesInOutput":819},"packages/ui/primitives/react-hooks/src/useMediaQuery.ts":{"bytesInOutput":2282}},"bytes":4168}}}
1
+ {"inputs":{"packages/ui/primitives/react-hooks/src/useForwardedRef.ts":{"bytes":1711,"imports":[{"path":"react","kind":"import-statement","external":true}]},"packages/ui/primitives/react-hooks/src/useId.ts":{"bytes":2257,"imports":[{"path":"alea","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}]},"packages/ui/primitives/react-hooks/src/useIsFocused.ts":{"bytes":3918,"imports":[{"path":"react","kind":"import-statement","external":true}]},"packages/ui/primitives/react-hooks/src/useMediaQuery.ts":{"bytes":9262,"imports":[{"path":"react","kind":"import-statement","external":true}]},"packages/ui/primitives/react-hooks/src/index.ts":{"bytes":779,"imports":[{"path":"packages/ui/primitives/react-hooks/src/useForwardedRef.ts","kind":"import-statement","original":"./useForwardedRef"},{"path":"packages/ui/primitives/react-hooks/src/useId.ts","kind":"import-statement","original":"./useId"},{"path":"packages/ui/primitives/react-hooks/src/useIsFocused.ts","kind":"import-statement","original":"./useIsFocused"},{"path":"packages/ui/primitives/react-hooks/src/useMediaQuery.ts","kind":"import-statement","original":"./useMediaQuery"}]}},"outputs":{"packages/ui/primitives/react-hooks/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":8799},"packages/ui/primitives/react-hooks/dist/lib/browser/index.mjs":{"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"alea","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"exports":["randomString","useForwardedRef","useId","useIsFocused","useMediaQuery"],"entryPoint":"packages/ui/primitives/react-hooks/src/index.ts","inputs":{"packages/ui/primitives/react-hooks/src/useForwardedRef.ts":{"bytesInOutput":316},"packages/ui/primitives/react-hooks/src/index.ts":{"bytesInOutput":0},"packages/ui/primitives/react-hooks/src/useId.ts":{"bytesInOutput":396},"packages/ui/primitives/react-hooks/src/useIsFocused.ts":{"bytesInOutput":819},"packages/ui/primitives/react-hooks/src/useMediaQuery.ts":{"bytesInOutput":2282}},"bytes":4168}}}
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/index.ts", "../../../src/useForwardedRef.ts", "../../../src/useId.ts", "../../../src/useIsFocused.ts", "../../../src/useMediaQuery.ts"],
4
4
  "sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nexport * from './useForwardedRef';\nexport * from './useId';\nexport * from './useIsFocused';\nexport * from './useMediaQuery';\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { useRef, useEffect } from 'react';\n\nexport const useForwardedRef = <T>(ref: React.ForwardedRef<T>) => {\n const innerRef = useRef<T>(null);\n\n useEffect(() => {\n if (!ref) {\n return;\n }\n if (typeof ref === 'function') {\n ref(innerRef.current);\n } else {\n ref.current = innerRef.current;\n }\n });\n\n return innerRef;\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport alea from 'alea';\nimport { useMemo } from 'react';\n\ninterface PrngFactory {\n new (seed?: string): () => number;\n}\n\nconst Alea: PrngFactory = alea as unknown as PrngFactory;\n\nconst prng = new Alea('@dxos/react-hooks');\n\n// TODO(burdon): Replace with PublicKey.random() but consider removing (dangerous mis-use of ECHO objects).\nexport const randomString = (n = 4) =>\n prng()\n .toString(16)\n .slice(2, n + 2);\n\nexport const useId = (namespace: string, propsId?: string, opts?: Partial<{ n: number }>) =>\n useMemo(() => propsId ?? `${namespace}-${randomString(opts?.n ?? 4)}`, [propsId]);\n", "//\n// Copyright 2022 DXOS.org\n//\n\n// Based upon the useIsFocused hook which is part of the `rci` project:\n/// https://github.com/leonardodino/rci/blob/main/packages/use-is-focused\n\nimport { useEffect, useRef, useState, RefObject } from 'react';\n\nexport const useIsFocused = (inputRef: RefObject<HTMLInputElement>) => {\n const [isFocused, setIsFocused] = useState<boolean | undefined>(undefined);\n const isFocusedRef = useRef<boolean | undefined>(isFocused);\n\n isFocusedRef.current = isFocused;\n\n useEffect(() => {\n const input = inputRef.current;\n if (!input) {\n return;\n }\n\n const onFocus = () => setIsFocused(true);\n const onBlur = () => setIsFocused(false);\n input.addEventListener('focus', onFocus);\n input.addEventListener('blur', onBlur);\n\n if (isFocusedRef.current === undefined) {\n setIsFocused(document.activeElement === input);\n }\n\n return () => {\n input.removeEventListener('focus', onFocus);\n input.removeEventListener('blur', onBlur);\n };\n }, [inputRef, setIsFocused]);\n\n return isFocused;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// This hook is based on Chakra UI’s `useMediaQuery`: https://github.com/chakra-ui/chakra-ui/blob/main/packages/components/media-query/src/use-media-query.ts\n\nimport { useEffect, useState } from 'react';\n\nexport type UseMediaQueryOptions = {\n fallback?: boolean | boolean[];\n ssr?: boolean;\n};\n\n// TODO(thure): This should be derived from the same source of truth as the Tailwind theme config\nconst breakpointMediaQueries: Record<string, string> = {\n sm: '(min-width: 640px)',\n md: '(min-width: 768px)',\n lg: '(min-width: 1024px)',\n xl: '(min-width: 1280px)',\n '2xl': '(min-width: 1536px)',\n};\n\n/**\n * React hook that tracks state of a CSS media query\n *\n * @param query the media query to match, or a recognized breakpoint token\n * @param options the media query options { fallback, ssr }\n *\n * @see Docs https://chakra-ui.com/docs/hooks/use-media-query\n */\nexport const useMediaQuery = (query: string | string[], options: UseMediaQueryOptions = {}): boolean[] => {\n const { ssr = true, fallback } = options;\n\n const queries = (Array.isArray(query) ? query : [query]).map((query) =>\n query in breakpointMediaQueries ? breakpointMediaQueries[query] : query,\n );\n\n let fallbackValues = Array.isArray(fallback) ? fallback : [fallback];\n fallbackValues = fallbackValues.filter((v) => v != null) as boolean[];\n\n const [value, setValue] = useState(() => {\n return queries.map((query, index) => ({\n media: query,\n matches: ssr ? !!fallbackValues[index] : document.defaultView?.matchMedia(query).matches,\n }));\n });\n\n useEffect(() => {\n setValue(\n queries.map((query) => ({\n media: query,\n matches: document.defaultView?.matchMedia(query).matches,\n })),\n );\n\n const mql = queries.map((query) => document.defaultView?.matchMedia(query));\n\n const handler = (evt: MediaQueryListEvent) => {\n setValue((prev) => {\n return prev.slice().map((item) => {\n if (item.media === evt.media) {\n return { ...item, matches: evt.matches };\n }\n return item;\n });\n });\n };\n\n mql.forEach((mql) => {\n if (typeof mql?.addListener === 'function') {\n mql?.addListener(handler);\n } else {\n mql?.addEventListener('change', handler);\n }\n });\n\n return () => {\n mql.forEach((mql) => {\n if (typeof mql?.removeListener === 'function') {\n mql?.removeListener(handler);\n } else {\n mql?.removeEventListener('change', handler);\n }\n });\n };\n }, [document.defaultView]);\n\n return value.map((item) => !!item.matches);\n};\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["useForwardedRef", "ref", "innerRef", "useRef", "useEffect", "current", "import_react", "Alea", "alea", "prng", "randomString", "n", "toString", "slice", "useId", "namespace", "propsId", "opts", "useMemo", "import_react", "useIsFocused", "inputRef", "isFocused", "setIsFocused", "useState", "undefined", "isFocusedRef", "useRef", "current", "useEffect", "input", "onFocus", "onBlur", "addEventListener", "document", "activeElement", "removeEventListener", "import_react", "breakpointMediaQueries", "sm", "md", "lg", "xl", "useMediaQuery", "query", "options", "ssr", "fallback", "queries", "Array", "isArray", "map", "fallbackValues", "filter", "v", "value", "setValue", "useState", "index", "media", "matches", "document", "defaultView", "matchMedia", "useEffect", "mql", "handler", "evt", "prev", "slice", "item", "forEach", "addListener", "addEventListener", "removeListener", "removeEventListener"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/ui/primitives/react-hooks/src/useForwardedRef.ts":{"bytes":1639,"imports":[{"path":"react","kind":"import-statement","external":true}]},"packages/ui/primitives/react-hooks/src/useId.ts":{"bytes":2159,"imports":[{"path":"alea","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}]},"packages/ui/primitives/react-hooks/src/useIsFocused.ts":{"bytes":3857,"imports":[{"path":"react","kind":"import-statement","external":true}]},"packages/ui/primitives/react-hooks/src/useMediaQuery.ts":{"bytes":9277,"imports":[{"path":"react","kind":"import-statement","external":true}]},"packages/ui/primitives/react-hooks/src/index.ts":{"bytes":677,"imports":[{"path":"packages/ui/primitives/react-hooks/src/useForwardedRef.ts","kind":"import-statement","original":"./useForwardedRef"},{"path":"packages/ui/primitives/react-hooks/src/useId.ts","kind":"import-statement","original":"./useId"},{"path":"packages/ui/primitives/react-hooks/src/useIsFocused.ts","kind":"import-statement","original":"./useIsFocused"},{"path":"packages/ui/primitives/react-hooks/src/useMediaQuery.ts","kind":"import-statement","original":"./useMediaQuery"}]}},"outputs":{"packages/ui/primitives/react-hooks/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":8932},"packages/ui/primitives/react-hooks/dist/lib/node/index.cjs":{"imports":[{"path":"react","kind":"require-call","external":true},{"path":"alea","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true}],"exports":[],"entryPoint":"packages/ui/primitives/react-hooks/src/index.ts","inputs":{"packages/ui/primitives/react-hooks/src/index.ts":{"bytesInOutput":267},"packages/ui/primitives/react-hooks/src/useForwardedRef.ts":{"bytesInOutput":346},"packages/ui/primitives/react-hooks/src/useId.ts":{"bytesInOutput":454},"packages/ui/primitives/react-hooks/src/useIsFocused.ts":{"bytesInOutput":834},"packages/ui/primitives/react-hooks/src/useMediaQuery.ts":{"bytesInOutput":2284}},"bytes":6068}}}
1
+ {"inputs":{"packages/ui/primitives/react-hooks/src/useForwardedRef.ts":{"bytes":1711,"imports":[{"path":"react","kind":"import-statement","external":true}]},"packages/ui/primitives/react-hooks/src/useId.ts":{"bytes":2257,"imports":[{"path":"alea","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}]},"packages/ui/primitives/react-hooks/src/useIsFocused.ts":{"bytes":3918,"imports":[{"path":"react","kind":"import-statement","external":true}]},"packages/ui/primitives/react-hooks/src/useMediaQuery.ts":{"bytes":9262,"imports":[{"path":"react","kind":"import-statement","external":true}]},"packages/ui/primitives/react-hooks/src/index.ts":{"bytes":779,"imports":[{"path":"packages/ui/primitives/react-hooks/src/useForwardedRef.ts","kind":"import-statement","original":"./useForwardedRef"},{"path":"packages/ui/primitives/react-hooks/src/useId.ts","kind":"import-statement","original":"./useId"},{"path":"packages/ui/primitives/react-hooks/src/useIsFocused.ts","kind":"import-statement","original":"./useIsFocused"},{"path":"packages/ui/primitives/react-hooks/src/useMediaQuery.ts","kind":"import-statement","original":"./useMediaQuery"}]}},"outputs":{"packages/ui/primitives/react-hooks/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":8932},"packages/ui/primitives/react-hooks/dist/lib/node/index.cjs":{"imports":[{"path":"react","kind":"require-call","external":true},{"path":"alea","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true}],"exports":[],"entryPoint":"packages/ui/primitives/react-hooks/src/index.ts","inputs":{"packages/ui/primitives/react-hooks/src/index.ts":{"bytesInOutput":267},"packages/ui/primitives/react-hooks/src/useForwardedRef.ts":{"bytesInOutput":346},"packages/ui/primitives/react-hooks/src/useId.ts":{"bytesInOutput":454},"packages/ui/primitives/react-hooks/src/useIsFocused.ts":{"bytesInOutput":834},"packages/ui/primitives/react-hooks/src/useMediaQuery.ts":{"bytesInOutput":2284}},"bytes":6068}}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/react-hooks",
3
- "version": "0.1.52",
3
+ "version": "0.1.53-main.02d8e55",
4
4
  "description": "React hooks supporting DXOS React primitives.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",