@tribepad/themis 1.5.9 → 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/dist/elements/Checkbox/Checkbox.d.ts.map +1 -1
- package/dist/elements/Checkbox/index.js +1 -1
- package/dist/elements/Checkbox/index.js.map +1 -1
- package/dist/elements/Checkbox/index.mjs +1 -1
- package/dist/elements/Checkbox/index.mjs.map +1 -1
- package/dist/elements/Filters/AppliedFilters.d.ts +4 -0
- package/dist/elements/Filters/AppliedFilters.d.ts.map +1 -0
- package/dist/elements/Filters/FilterPopover.d.ts +33 -0
- package/dist/elements/Filters/FilterPopover.d.ts.map +1 -0
- package/dist/elements/Filters/Filters.d.ts +25 -0
- package/dist/elements/Filters/Filters.d.ts.map +1 -0
- package/dist/elements/Filters/Filters.styles.d.ts +24 -0
- package/dist/elements/Filters/Filters.styles.d.ts.map +1 -0
- package/dist/elements/Filters/Filters.types.d.ts +123 -0
- package/dist/elements/Filters/Filters.types.d.ts.map +1 -0
- package/dist/elements/Filters/FiltersContext.d.ts +36 -0
- package/dist/elements/Filters/FiltersContext.d.ts.map +1 -0
- package/dist/elements/Filters/index.css +2 -0
- package/dist/elements/Filters/index.css.map +1 -0
- package/dist/elements/Filters/index.d.ts +26 -0
- package/dist/elements/Filters/index.d.ts.map +1 -0
- package/dist/elements/Filters/index.js +3 -0
- package/dist/elements/Filters/index.js.map +1 -0
- package/dist/elements/Filters/index.mjs +3 -0
- package/dist/elements/Filters/index.mjs.map +1 -0
- package/dist/elements/PasswordField/PasswordField.types.d.ts +34 -34
- package/dist/elements/Sidebar/index.js +1 -1
- package/dist/elements/Sidebar/index.js.map +1 -1
- package/dist/elements/Sidebar/index.mjs +1 -1
- package/dist/elements/Sidebar/index.mjs.map +1 -1
- package/dist/elements/Table/BulkActionBar.d.ts +5 -0
- package/dist/elements/Table/BulkActionBar.d.ts.map +1 -0
- package/dist/elements/Table/BulkActionBar.styles.d.ts +17 -0
- package/dist/elements/Table/BulkActionBar.styles.d.ts.map +1 -0
- package/dist/elements/Table/BulkActionBar.types.d.ts +136 -0
- package/dist/elements/Table/BulkActionBar.types.d.ts.map +1 -0
- package/dist/elements/Table/Table.d.ts +4 -5
- package/dist/elements/Table/Table.d.ts.map +1 -1
- package/dist/elements/Table/Table.styles.d.ts +2 -3
- package/dist/elements/Table/Table.styles.d.ts.map +1 -1
- package/dist/elements/Table/Table.types.d.ts +14 -30
- package/dist/elements/Table/Table.types.d.ts.map +1 -1
- package/dist/elements/Table/TableCardList.d.ts +25 -0
- package/dist/elements/Table/TableCardList.d.ts.map +1 -0
- package/dist/elements/Table/TableCardList.styles.d.ts +15 -0
- package/dist/elements/Table/TableCardList.styles.d.ts.map +1 -0
- package/dist/elements/Table/TableCardList.types.d.ts +48 -0
- package/dist/elements/Table/TableCardList.types.d.ts.map +1 -0
- package/dist/elements/Table/index.d.ts +12 -3
- package/dist/elements/Table/index.d.ts.map +1 -1
- package/dist/elements/Table/index.js +1 -1
- package/dist/elements/Table/index.js.map +1 -1
- package/dist/elements/Table/index.mjs +1 -1
- package/dist/elements/Table/index.mjs.map +1 -1
- package/dist/elements/Table/resolveSelectedCount.d.ts +20 -0
- package/dist/elements/Table/resolveSelectedCount.d.ts.map +1 -0
- package/dist/elements/Table/useBulkActionShortcut.d.ts +29 -0
- package/dist/elements/Table/useBulkActionShortcut.d.ts.map +1 -0
- package/dist/elements/TextField/TextField.types.d.ts +68 -68
- package/dist/elements/index.d.ts +4 -1
- package/dist/elements/index.d.ts.map +1 -1
- package/dist/elements/index.js +1 -1
- package/dist/elements/index.js.map +1 -1
- package/dist/elements/index.mjs +1 -1
- package/dist/elements/index.mjs.map +1 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +1 -1
- package/dist/hooks/index.mjs.map +1 -1
- package/dist/hooks/useContainerNarrow.d.ts +15 -0
- package/dist/hooks/useContainerNarrow.d.ts.map +1 -0
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/dist/styles/defaults.css +15 -0
- package/package.json +6 -1
- package/src/elements/Filters/Filters.stories.tsx +148 -0
- package/src/elements/Sidebar/Sidebar.stories.tsx +1 -1
- package/src/elements/Table/Table.stories.tsx +467 -10
package/dist/hooks/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/hooks/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var react=require('react');function
|
|
1
|
+
'use strict';var react=require('react');function u(e){let n=react.useCallback(t=>{let o=window.matchMedia(e);return o.addEventListener("change",t),()=>o.removeEventListener("change",t)},[e]),r=react.useCallback(()=>window.matchMedia(e).matches,[e]),s=react.useCallback(()=>false,[]);return react.useSyncExternalStore(n,r,s)}var a="(prefers-reduced-motion: reduce)";function l(){return typeof window>"u"?false:window.matchMedia(a).matches}function v(){let[e,n]=react.useState(l);return react.useEffect(()=>{let r=window.matchMedia(a);n(r.matches);let s=t=>{n(t.matches);};return r.addEventListener("change",s),()=>r.removeEventListener("change",s)},[]),e}function p(e,n){let[r,s]=react.useState(false);return react.useEffect(()=>{let t=e.current;if(!t)return;let o=()=>s(t.offsetWidth<n);o();let i;return typeof ResizeObserver<"u"&&(i=new ResizeObserver(o),i.observe(t)),window.addEventListener("resize",o),()=>{window.removeEventListener("resize",o),i?.disconnect();}},[e,n]),r}exports.useContainerNarrow=p;exports.useMediaQuery=u;exports.useReducedMotion=v;//# sourceMappingURL=index.js.map
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/hooks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useMediaQuery.ts","../../src/hooks/useReducedMotion.ts"],"names":["useMediaQuery","query","subscribe","useCallback","callback","mql","getSnapshot","getServerSnapshot","useSyncExternalStore","QUERY","getInitialState","useReducedMotion","prefersReducedMotion","setPrefersReducedMotion","useState","useEffect","handler","event"],"mappings":"wCAcO,SAASA,CAAAA,CAAcC,CAAAA,CAAwB,CACpD,IAAMC,CAAAA,CAAYC,
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useMediaQuery.ts","../../src/hooks/useReducedMotion.ts","../../src/hooks/useContainerNarrow.ts"],"names":["useMediaQuery","query","subscribe","useCallback","callback","mql","getSnapshot","getServerSnapshot","useSyncExternalStore","QUERY","getInitialState","useReducedMotion","prefersReducedMotion","setPrefersReducedMotion","useState","useEffect","handler","event","useContainerNarrow","ref","breakpoint","narrow","setNarrow","el","measure","observer"],"mappings":"wCAcO,SAASA,CAAAA,CAAcC,CAAAA,CAAwB,CACpD,IAAMC,CAAAA,CAAYC,kBACfC,CAAAA,EAAyB,CACxB,IAAMC,CAAAA,CAAM,MAAA,CAAO,UAAA,CAAWJ,CAAK,CAAA,CACnC,OAAAI,CAAAA,CAAI,gBAAA,CAAiB,QAAA,CAAUD,CAAQ,EAChC,IAAMC,CAAAA,CAAI,mBAAA,CAAoB,QAAA,CAAUD,CAAQ,CACzD,EACA,CAACH,CAAK,CACR,CAAA,CAEMK,CAAAA,CAAcH,iBAAAA,CAClB,IAAM,MAAA,CAAO,UAAA,CAAWF,CAAK,CAAA,CAAE,OAAA,CAC/B,CAACA,CAAK,CACR,CAAA,CAEMM,CAAAA,CAAoBJ,iBAAAA,CAAY,IAAM,KAAA,CAAO,EAAE,CAAA,CAErD,OAAOK,0BAAAA,CAAqBN,CAAAA,CAAWI,EAAaC,CAAiB,CACvE,CC5BA,IAAME,CAAAA,CAAQ,kCAAA,CAEd,SAASC,GAA2B,CAClC,OAAI,OAAO,MAAA,CAAW,GAAA,CAAoB,KAAA,CACnC,OAAO,UAAA,CAAWD,CAAK,CAAA,CAAE,OAClC,CASO,SAASE,GAA4B,CAC1C,GAAM,CAACC,CAAAA,CAAsBC,CAAuB,CAAA,CAAIC,eAASJ,CAAe,CAAA,CAEhF,OAAAK,eAAAA,CAAU,IAAM,CACd,IAAMV,CAAAA,CAAM,MAAA,CAAO,UAAA,CAAWI,CAAK,CAAA,CACnCI,CAAAA,CAAwBR,EAAI,OAAO,CAAA,CAEnC,IAAMW,CAAAA,CAAWC,CAAAA,EAAqC,CACpDJ,CAAAA,CAAwBI,CAAAA,CAAM,OAAO,EACvC,CAAA,CAEA,OAAAZ,EAAI,gBAAA,CAAiB,QAAA,CAAUW,CAAO,CAAA,CAC/B,IAAMX,CAAAA,CAAI,oBAAoB,QAAA,CAAUW,CAAO,CACxD,CAAA,CAAG,EAAE,EAEEJ,CACT,CClBO,SAASM,CAAAA,CACdC,CAAAA,CACAC,CAAAA,CACS,CACT,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIR,cAAAA,CAAS,KAAK,EAE1C,OAAAC,eAAAA,CAAU,IAAM,CACd,IAAMQ,CAAAA,CAAKJ,EAAI,OAAA,CACf,GAAI,CAACI,CAAAA,CAAI,OAET,IAAMC,CAAAA,CAAU,IAAYF,CAAAA,CAAUC,CAAAA,CAAG,WAAA,CAAcH,CAAU,EACjEI,CAAAA,EAAQ,CAER,IAAIC,CAAAA,CACJ,OAAI,OAAO,eAAmB,GAAA,GAC5BA,CAAAA,CAAW,IAAI,cAAA,CAAeD,CAAO,CAAA,CACrCC,EAAS,OAAA,CAAQF,CAAE,CAAA,CAAA,CAErB,MAAA,CAAO,gBAAA,CAAiB,QAAA,CAAUC,CAAO,CAAA,CAClC,IAAM,CACX,MAAA,CAAO,mBAAA,CAAoB,QAAA,CAAUA,CAAO,CAAA,CAC5CC,CAAAA,EAAU,UAAA,GACZ,CACF,CAAA,CAAG,CAACN,CAAAA,CAAKC,CAAU,CAAC,CAAA,CAEbC,CACT","file":"index.js","sourcesContent":["'use client';\n\nimport { useCallback, useSyncExternalStore } from 'react';\n\n/**\n * SSR-safe media query hook using useSyncExternalStore.\n *\n * - No hydration mismatch flicker (getServerSnapshot returns false)\n * - Listener registered once per query value (no dependency bugs)\n * - Reacts to changes in real time\n *\n * @param query - CSS media query string, e.g. '(max-width: 767px)'\n * @returns Whether the media query currently matches\n */\nexport function useMediaQuery(query: string): boolean {\n const subscribe = useCallback(\n (callback: () => void) => {\n const mql = window.matchMedia(query);\n mql.addEventListener('change', callback);\n return () => mql.removeEventListener('change', callback);\n },\n [query],\n );\n\n const getSnapshot = useCallback(\n () => window.matchMedia(query).matches,\n [query],\n );\n\n const getServerSnapshot = useCallback(() => false, []);\n\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\n","'use client';\n\nimport { useState, useEffect } from 'react';\n\nconst QUERY = '(prefers-reduced-motion: reduce)';\n\nfunction getInitialState(): boolean {\n if (typeof window === 'undefined') return false;\n return window.matchMedia(QUERY).matches;\n}\n\n/**\n * Detects whether the user prefers reduced motion.\n *\n * - SSR-safe (returns `false` on the server)\n * - Reacts to changes in the OS preference\n * - Cleans up the listener on unmount\n */\nexport function useReducedMotion(): boolean {\n const [prefersReducedMotion, setPrefersReducedMotion] = useState(getInitialState);\n\n useEffect(() => {\n const mql = window.matchMedia(QUERY);\n setPrefersReducedMotion(mql.matches);\n\n const handler = (event: MediaQueryListEvent): void => {\n setPrefersReducedMotion(event.matches);\n };\n\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, []);\n\n return prefersReducedMotion;\n}\n","'use client';\n\nimport { useEffect, useState, type RefObject } from 'react';\n\n/**\n * Track whether a referenced element is narrower than `breakpoint` (px), via a\n * `ResizeObserver`. This is a **container query**, not a viewport query — a table\n * inside a narrow panel reflows to cards even on a wide screen.\n *\n * Uses `offsetWidth` (ignores CSS transforms, e.g. zoom/preview scaling).\n *\n * @example\n * const ref = useRef<HTMLDivElement>(null);\n * const narrow = useContainerNarrow(ref, 680);\n * return <div ref={ref}>{narrow ? <TableCardList .../> : <Table .../>}</div>;\n */\nexport function useContainerNarrow(\n ref: RefObject<HTMLElement | null>,\n breakpoint: number\n): boolean {\n const [narrow, setNarrow] = useState(false);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const measure = (): void => setNarrow(el.offsetWidth < breakpoint);\n measure(); // initial — covers an already-narrow mount\n\n let observer: ResizeObserver | undefined;\n if (typeof ResizeObserver !== 'undefined') {\n observer = new ResizeObserver(measure);\n observer.observe(el);\n }\n window.addEventListener('resize', measure);\n return () => {\n window.removeEventListener('resize', measure);\n observer?.disconnect();\n };\n }, [ref, breakpoint]);\n\n return narrow;\n}\n"]}
|
package/dist/hooks/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {useCallback,useSyncExternalStore,useState,useEffect}from'react';function
|
|
1
|
+
import {useCallback,useSyncExternalStore,useState,useEffect}from'react';function u(e){let n=useCallback(t=>{let o=window.matchMedia(e);return o.addEventListener("change",t),()=>o.removeEventListener("change",t)},[e]),r=useCallback(()=>window.matchMedia(e).matches,[e]),s=useCallback(()=>false,[]);return useSyncExternalStore(n,r,s)}var a="(prefers-reduced-motion: reduce)";function l(){return typeof window>"u"?false:window.matchMedia(a).matches}function v(){let[e,n]=useState(l);return useEffect(()=>{let r=window.matchMedia(a);n(r.matches);let s=t=>{n(t.matches);};return r.addEventListener("change",s),()=>r.removeEventListener("change",s)},[]),e}function p(e,n){let[r,s]=useState(false);return useEffect(()=>{let t=e.current;if(!t)return;let o=()=>s(t.offsetWidth<n);o();let i;return typeof ResizeObserver<"u"&&(i=new ResizeObserver(o),i.observe(t)),window.addEventListener("resize",o),()=>{window.removeEventListener("resize",o),i?.disconnect();}},[e,n]),r}export{p as useContainerNarrow,u as useMediaQuery,v as useReducedMotion};//# sourceMappingURL=index.mjs.map
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/dist/hooks/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useMediaQuery.ts","../../src/hooks/useReducedMotion.ts"],"names":["useMediaQuery","query","subscribe","useCallback","callback","mql","getSnapshot","getServerSnapshot","useSyncExternalStore","QUERY","getInitialState","useReducedMotion","prefersReducedMotion","setPrefersReducedMotion","useState","useEffect","handler","event"],"mappings":"wEAcO,SAASA,CAAAA,CAAcC,CAAAA,CAAwB,CACpD,IAAMC,CAAAA,CAAYC,
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useMediaQuery.ts","../../src/hooks/useReducedMotion.ts","../../src/hooks/useContainerNarrow.ts"],"names":["useMediaQuery","query","subscribe","useCallback","callback","mql","getSnapshot","getServerSnapshot","useSyncExternalStore","QUERY","getInitialState","useReducedMotion","prefersReducedMotion","setPrefersReducedMotion","useState","useEffect","handler","event","useContainerNarrow","ref","breakpoint","narrow","setNarrow","el","measure","observer"],"mappings":"wEAcO,SAASA,CAAAA,CAAcC,CAAAA,CAAwB,CACpD,IAAMC,CAAAA,CAAYC,YACfC,CAAAA,EAAyB,CACxB,IAAMC,CAAAA,CAAM,MAAA,CAAO,UAAA,CAAWJ,CAAK,CAAA,CACnC,OAAAI,CAAAA,CAAI,gBAAA,CAAiB,QAAA,CAAUD,CAAQ,EAChC,IAAMC,CAAAA,CAAI,mBAAA,CAAoB,QAAA,CAAUD,CAAQ,CACzD,EACA,CAACH,CAAK,CACR,CAAA,CAEMK,CAAAA,CAAcH,WAAAA,CAClB,IAAM,MAAA,CAAO,UAAA,CAAWF,CAAK,CAAA,CAAE,OAAA,CAC/B,CAACA,CAAK,CACR,CAAA,CAEMM,CAAAA,CAAoBJ,WAAAA,CAAY,IAAM,KAAA,CAAO,EAAE,CAAA,CAErD,OAAOK,oBAAAA,CAAqBN,CAAAA,CAAWI,EAAaC,CAAiB,CACvE,CC5BA,IAAME,CAAAA,CAAQ,kCAAA,CAEd,SAASC,GAA2B,CAClC,OAAI,OAAO,MAAA,CAAW,GAAA,CAAoB,KAAA,CACnC,OAAO,UAAA,CAAWD,CAAK,CAAA,CAAE,OAClC,CASO,SAASE,GAA4B,CAC1C,GAAM,CAACC,CAAAA,CAAsBC,CAAuB,CAAA,CAAIC,SAASJ,CAAe,CAAA,CAEhF,OAAAK,SAAAA,CAAU,IAAM,CACd,IAAMV,CAAAA,CAAM,MAAA,CAAO,UAAA,CAAWI,CAAK,CAAA,CACnCI,CAAAA,CAAwBR,EAAI,OAAO,CAAA,CAEnC,IAAMW,CAAAA,CAAWC,CAAAA,EAAqC,CACpDJ,CAAAA,CAAwBI,CAAAA,CAAM,OAAO,EACvC,CAAA,CAEA,OAAAZ,EAAI,gBAAA,CAAiB,QAAA,CAAUW,CAAO,CAAA,CAC/B,IAAMX,CAAAA,CAAI,oBAAoB,QAAA,CAAUW,CAAO,CACxD,CAAA,CAAG,EAAE,EAEEJ,CACT,CClBO,SAASM,CAAAA,CACdC,CAAAA,CACAC,CAAAA,CACS,CACT,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIR,QAAAA,CAAS,KAAK,EAE1C,OAAAC,SAAAA,CAAU,IAAM,CACd,IAAMQ,CAAAA,CAAKJ,EAAI,OAAA,CACf,GAAI,CAACI,CAAAA,CAAI,OAET,IAAMC,CAAAA,CAAU,IAAYF,CAAAA,CAAUC,CAAAA,CAAG,WAAA,CAAcH,CAAU,EACjEI,CAAAA,EAAQ,CAER,IAAIC,CAAAA,CACJ,OAAI,OAAO,eAAmB,GAAA,GAC5BA,CAAAA,CAAW,IAAI,cAAA,CAAeD,CAAO,CAAA,CACrCC,EAAS,OAAA,CAAQF,CAAE,CAAA,CAAA,CAErB,MAAA,CAAO,gBAAA,CAAiB,QAAA,CAAUC,CAAO,CAAA,CAClC,IAAM,CACX,MAAA,CAAO,mBAAA,CAAoB,QAAA,CAAUA,CAAO,CAAA,CAC5CC,CAAAA,EAAU,UAAA,GACZ,CACF,CAAA,CAAG,CAACN,CAAAA,CAAKC,CAAU,CAAC,CAAA,CAEbC,CACT","file":"index.mjs","sourcesContent":["'use client';\n\nimport { useCallback, useSyncExternalStore } from 'react';\n\n/**\n * SSR-safe media query hook using useSyncExternalStore.\n *\n * - No hydration mismatch flicker (getServerSnapshot returns false)\n * - Listener registered once per query value (no dependency bugs)\n * - Reacts to changes in real time\n *\n * @param query - CSS media query string, e.g. '(max-width: 767px)'\n * @returns Whether the media query currently matches\n */\nexport function useMediaQuery(query: string): boolean {\n const subscribe = useCallback(\n (callback: () => void) => {\n const mql = window.matchMedia(query);\n mql.addEventListener('change', callback);\n return () => mql.removeEventListener('change', callback);\n },\n [query],\n );\n\n const getSnapshot = useCallback(\n () => window.matchMedia(query).matches,\n [query],\n );\n\n const getServerSnapshot = useCallback(() => false, []);\n\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\n","'use client';\n\nimport { useState, useEffect } from 'react';\n\nconst QUERY = '(prefers-reduced-motion: reduce)';\n\nfunction getInitialState(): boolean {\n if (typeof window === 'undefined') return false;\n return window.matchMedia(QUERY).matches;\n}\n\n/**\n * Detects whether the user prefers reduced motion.\n *\n * - SSR-safe (returns `false` on the server)\n * - Reacts to changes in the OS preference\n * - Cleans up the listener on unmount\n */\nexport function useReducedMotion(): boolean {\n const [prefersReducedMotion, setPrefersReducedMotion] = useState(getInitialState);\n\n useEffect(() => {\n const mql = window.matchMedia(QUERY);\n setPrefersReducedMotion(mql.matches);\n\n const handler = (event: MediaQueryListEvent): void => {\n setPrefersReducedMotion(event.matches);\n };\n\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, []);\n\n return prefersReducedMotion;\n}\n","'use client';\n\nimport { useEffect, useState, type RefObject } from 'react';\n\n/**\n * Track whether a referenced element is narrower than `breakpoint` (px), via a\n * `ResizeObserver`. This is a **container query**, not a viewport query — a table\n * inside a narrow panel reflows to cards even on a wide screen.\n *\n * Uses `offsetWidth` (ignores CSS transforms, e.g. zoom/preview scaling).\n *\n * @example\n * const ref = useRef<HTMLDivElement>(null);\n * const narrow = useContainerNarrow(ref, 680);\n * return <div ref={ref}>{narrow ? <TableCardList .../> : <Table .../>}</div>;\n */\nexport function useContainerNarrow(\n ref: RefObject<HTMLElement | null>,\n breakpoint: number\n): boolean {\n const [narrow, setNarrow] = useState(false);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const measure = (): void => setNarrow(el.offsetWidth < breakpoint);\n measure(); // initial — covers an already-narrow mount\n\n let observer: ResizeObserver | undefined;\n if (typeof ResizeObserver !== 'undefined') {\n observer = new ResizeObserver(measure);\n observer.observe(el);\n }\n window.addEventListener('resize', measure);\n return () => {\n window.removeEventListener('resize', measure);\n observer?.disconnect();\n };\n }, [ref, breakpoint]);\n\n return narrow;\n}\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type RefObject } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Track whether a referenced element is narrower than `breakpoint` (px), via a
|
|
4
|
+
* `ResizeObserver`. This is a **container query**, not a viewport query — a table
|
|
5
|
+
* inside a narrow panel reflows to cards even on a wide screen.
|
|
6
|
+
*
|
|
7
|
+
* Uses `offsetWidth` (ignores CSS transforms, e.g. zoom/preview scaling).
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* const ref = useRef<HTMLDivElement>(null);
|
|
11
|
+
* const narrow = useContainerNarrow(ref, 680);
|
|
12
|
+
* return <div ref={ref}>{narrow ? <TableCardList .../> : <Table .../>}</div>;
|
|
13
|
+
*/
|
|
14
|
+
export declare function useContainerNarrow(ref: RefObject<HTMLElement | null>, breakpoint: number): boolean;
|
|
15
|
+
//# sourceMappingURL=useContainerNarrow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useContainerNarrow.d.ts","sourceRoot":"","sources":["../../src/hooks/useContainerNarrow.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE5D;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAClC,UAAU,EAAE,MAAM,GACjB,OAAO,CAuBT"}
|