dinocollab-core 2.2.14 → 2.2.15
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/dist/src/components/image-with-fallback.js +1 -1
- package/dist/src/components/image-with-fallback.js.map +1 -1
- package/dist/src/data-surface/helpers.js +1 -1
- package/dist/src/data-surface/helpers.js.map +1 -1
- package/dist/src/filter-bar/components/chip-viewer.js +1 -1
- package/dist/src/filter-bar/components/chip-viewer.js.map +1 -1
- package/dist/src/filter-bar/components/filter-input.mobile.js +1 -1
- package/dist/src/filter-bar/components/filter-input.mobile.js.map +1 -1
- package/dist/src/filter-bar/components/filter-summary.js +1 -1
- package/dist/src/filter-bar/components/filter-summary.js.map +1 -1
- package/dist/src/filter-bar/components/popper-custom.js +1 -1
- package/dist/src/filter-bar/components/popper-custom.js.map +1 -1
- package/dist/src/filter-bar/components/ui.units.js +1 -1
- package/dist/src/filter-bar/components/ui.units.js.map +1 -1
- package/dist/src/filter-bar/convert-to-graphql.js +1 -1
- package/dist/src/filter-bar/convert-to-graphql.js.map +1 -1
- package/dist/src/filter-bar/index.create.js +1 -1
- package/dist/src/filter-bar/index.create.js.map +1 -1
- package/dist/src/filter-bar/index.dino.js +1 -1
- package/dist/src/filter-bar/index.dino.js.map +1 -1
- package/dist/src/filter-bar/menu/create-form-field-datetime.js +2 -0
- package/dist/src/filter-bar/menu/create-form-field-datetime.js.map +1 -0
- package/dist/src/filter-bar/menu/create-form-field-select-multiple.js +1 -1
- package/dist/src/filter-bar/menu/create-form-field-select-multiple.js.map +1 -1
- package/dist/src/filter-bar/menu/create-form-field-select.js +1 -1
- package/dist/src/filter-bar/menu/create-form-field-select.js.map +1 -1
- package/dist/src/filter-bar/menu/create-form-field-string.js +1 -1
- package/dist/src/filter-bar/menu/create-form-field-string.js.map +1 -1
- package/dist/src/filter-bar/menu/create.js +1 -1
- package/dist/src/filter-bar/menu/create.js.map +1 -1
- package/dist/src/filter-bar/types.js.map +1 -1
- package/dist/src/form/create.form-grid-layout.units.js +1 -1
- package/dist/src/form/create.form-grid-layout.units.js.map +1 -1
- package/dist/src/table/create.table.js +1 -1
- package/dist/src/table/create.table.js.map +1 -1
- package/dist/src/table/helpers.js +1 -1
- package/dist/src/table/helpers.js.map +1 -1
- package/dist/src/table/styled.js +2 -0
- package/dist/src/table/styled.js.map +1 -0
- package/dist/src/table/toolbar-pannel.js +1 -1
- package/dist/src/table/toolbar-pannel.js.map +1 -1
- package/dist/table/index.js +1 -1
- package/dist/types/components/image-with-fallback.d.ts +7 -2
- package/dist/types/data-surface/helpers.d.ts +5 -3
- package/dist/types/filter-bar/components/filter-summary.types.d.ts +2 -1
- package/dist/types/filter-bar/components/hint-icon.types.d.ts +1 -1
- package/dist/types/filter-bar/components/popper-custom.d.ts +1 -0
- package/dist/types/filter-bar/components/ui.units.d.ts +8 -1
- package/dist/types/filter-bar/index.d.ts +2 -0
- package/dist/types/filter-bar/index.dino.d.ts +2 -0
- package/dist/types/filter-bar/menu/create-form-field-datetime.d.ts +53 -0
- package/dist/types/filter-bar/menu/create-form-field-select-multiple.d.ts +17 -0
- package/dist/types/filter-bar/menu/create-form-field-select.d.ts +17 -0
- package/dist/types/filter-bar/menu/create-form-field-string.d.ts +16 -0
- package/dist/types/filter-bar/menu/create.d.ts +17 -0
- package/dist/types/filter-bar/menu/types.d.ts +6 -1
- package/dist/types/filter-bar/types.d.ts +3 -0
- package/dist/types/table/helpers.d.ts +0 -3
- package/dist/types/table/index.d.ts +1 -1
- package/dist/types/table/styled.d.ts +8 -0
- package/dist/types/table/toolbar-pannel.d.ts +5 -0
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{objectWithoutProperties as r,slicedToArray as t,objectSpread2 as
|
|
1
|
+
import{objectWithoutProperties as r,slicedToArray as t,objectSpread2 as n}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as e,jsx as o}from"react/jsx-runtime";import{useRef as u,useState as l,useEffect as c,Fragment as a}from"react";import{useDebounce as i}from"../hooks/debounce.js";var s=["src","fallbackSrc","alt","loading","debounceDelay"],f=function(f){var m=f.src,d=f.fallbackSrc,p=f.alt,y=f.loading,b=f.debounceDelay,h=void 0===b?0:b,g=r(f,s),v=i(m,h),j=i(d,h),S=h>0?v:m,T=h>0?j:d,k=T?Array.isArray(T)?T:[T]:[],A=u(S?-1:0),x=l(!0),D=t(x,2),L=D[0],P=D[1],_=l(null!=S?S:k[0]),B=t(_,2),E=B[0],H=B[1],W=u(null),q=function(){W.current&&(clearTimeout(W.current),W.current=null),W.current=setTimeout(function(){P(!1)},2e3)};c(function(){return function(){W.current&&clearTimeout(W.current)}},[]),c(function(){A.current=S?-1:0,H(null!=S?S:k[0]),P(!0)},[S,T]);var w,z=y?"function"==typeof y?y(L):L?y:null:null;return e(a,{children:[z,o("img",n(n(n({},g),(w={},g.style&&(w.style=g.style),L&&(w.style=n(n({},w.style),{},{height:"0!important",transition:"height 0.2s ease-in-out"})),w)),{},{src:E,alt:p,onLoadStart:function(){return P(!0)},onLoad:function(){P(!1),q()},onError:function(){var r=A.current+1;r<k.length?(A.current=r,H(k[r])):(P(!1),q())}}))]})};export{f as ImageWithFallback,f as default};
|
|
2
2
|
//# sourceMappingURL=image-with-fallback.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-with-fallback.js","sources":["../../../src/components/image-with-fallback.tsx"],"sourcesContent":["import { Fragment, useEffect, useRef, useState } from 'react'\r\nimport type { CSSProperties, FC, ImgHTMLAttributes, ReactNode } from 'react'\r\nimport { useDebounce } from '../hooks'\r\n\r\nexport interface IImageWithFallbackPropsOwner {\r\n src?: string\r\n alt?: string\r\n fallbackSrc
|
|
1
|
+
{"version":3,"file":"image-with-fallback.js","sources":["../../../src/components/image-with-fallback.tsx"],"sourcesContent":["import { Fragment, useEffect, useRef, useState } from 'react'\r\nimport type { CSSProperties, FC, ImgHTMLAttributes, ReactNode } from 'react'\r\nimport { useDebounce } from '../hooks'\r\n\r\nexport interface IImageWithFallbackPropsOwner {\r\n /** The source URL of the image */\r\n src?: string\r\n /** The alt text for the image */\r\n alt?: string\r\n /** The fallback source(s) to use if the main image fails to load */\r\n fallbackSrc?: string | string[]\r\n /** The loading indicator to display while the image is loading */\r\n loading?: ReactNode | ((isLoading: boolean) => ReactNode)\r\n /** The debounce delay in milliseconds */\r\n debounceDelay?: number\r\n}\r\n\r\nexport type IImageProps = Omit<ImgHTMLAttributes<HTMLImageElement>, keyof IImageWithFallbackPropsOwner>\r\n\r\nexport interface IImageWithFallbackProps extends IImageProps, IImageWithFallbackPropsOwner {}\r\n\r\nexport const ImageWithFallback: FC<IImageWithFallbackProps> = ({ src, fallbackSrc, alt, loading, debounceDelay = 0, ...props }) => {\r\n const debouncedSrc = useDebounce(src, debounceDelay)\r\n const debouncedFallbackSrc = useDebounce(fallbackSrc, debounceDelay)\r\n\r\n const effectiveSrc = debounceDelay > 0 ? debouncedSrc : src\r\n const effectiveFallbackSrc = debounceDelay > 0 ? debouncedFallbackSrc : fallbackSrc\r\n\r\n // Normalize fallbackSrc to array for uniform iteration\r\n const fallbackList = effectiveFallbackSrc ? (Array.isArray(effectiveFallbackSrc) ? effectiveFallbackSrc : [effectiveFallbackSrc]) : []\r\n\r\n // -1 when src is provided (no fallback tried yet); 0 when starting directly from fallbackList[0]\r\n const fallbackIndexRef = useRef(effectiveSrc ? -1 : 0)\r\n\r\n const [isLoading, setLoading] = useState(true)\r\n const [imgSrc, setImgSrc] = useState(effectiveSrc ?? fallbackList[0])\r\n\r\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\r\n\r\n // Safety net: force-stop loading after 2s in case onLoad/onError never fires (e.g. broken network)\r\n const forceStopLoading = () => {\r\n if (timeoutRef.current) {\r\n clearTimeout(timeoutRef.current)\r\n timeoutRef.current = null\r\n }\r\n timeoutRef.current = setTimeout(() => {\r\n setLoading(false)\r\n }, 2000)\r\n }\r\n\r\n // Cleanup pending timeout to avoid setState on unmounted component\r\n useEffect(() => {\r\n return () => {\r\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\r\n }\r\n }, [])\r\n\r\n // Reset state whenever src or fallbackSrc changes\r\n useEffect(() => {\r\n fallbackIndexRef.current = effectiveSrc ? -1 : 0\r\n setImgSrc(effectiveSrc ?? fallbackList[0])\r\n setLoading(true)\r\n }, [effectiveSrc, effectiveFallbackSrc])\r\n\r\n const loadingElement = loading ? (typeof loading === 'function' ? loading(isLoading) : isLoading ? loading : null) : null\r\n\r\n const mapStyle = () => {\r\n const obj: { style?: CSSProperties } = {}\r\n if (props.style) obj.style = props.style\r\n if (isLoading) obj.style = { ...obj.style, height: '0!important', transition: 'height 0.2s ease-in-out' }\r\n return obj\r\n }\r\n\r\n // Try next fallback in sequence; stop loading when the list is exhausted\r\n const handleError = () => {\r\n const nextIndex = fallbackIndexRef.current + 1\r\n if (nextIndex < fallbackList.length) {\r\n fallbackIndexRef.current = nextIndex\r\n setImgSrc(fallbackList[nextIndex])\r\n } else {\r\n setLoading(false)\r\n forceStopLoading()\r\n }\r\n }\r\n\r\n return (\r\n <Fragment>\r\n {loadingElement}\r\n <img\r\n {...props}\r\n {...mapStyle()}\r\n src={imgSrc}\r\n alt={alt}\r\n onLoadStart={() => setLoading(true)}\r\n onLoad={() => {\r\n setLoading(false)\r\n forceStopLoading()\r\n }}\r\n onError={handleError}\r\n />\r\n </Fragment>\r\n )\r\n}\r\nexport default ImageWithFallback\r\n"],"names":["ImageWithFallback","_ref","src","fallbackSrc","alt","loading","_ref$debounceDelay","debounceDelay","props","_objectWithoutProperties","_excluded","debouncedSrc","useDebounce","debouncedFallbackSrc","effectiveSrc","effectiveFallbackSrc","fallbackList","Array","isArray","fallbackIndexRef","useRef","_useState","useState","_useState2","_slicedToArray","isLoading","setLoading","_useState3","_useState4","imgSrc","setImgSrc","timeoutRef","forceStopLoading","current","clearTimeout","setTimeout","useEffect","obj","loadingElement","_jsxs","Fragment","children","_jsx","_objectSpread","style","height","transition","onLoadStart","onLoad","onError","nextIndex","length"],"mappings":"uWAqBaA,EAAiD,SAAhCC,GAAoG,IAAjEC,EAAGD,EAAHC,IAAKC,EAAWF,EAAXE,YAAaC,EAAGH,EAAHG,IAAKC,EAAOJ,EAAPI,QAAOC,EAAAL,EAAEM,cAAAA,OAAgB,IAAHD,EAAG,EAACA,EAAKE,EAAKC,EAAAR,EAAAS,GACpHC,EAAeC,EAAYV,EAAKK,GAChCM,EAAuBD,EAAYT,EAAaI,GAEhDO,EAAeP,EAAgB,EAAII,EAAeT,EAClDa,EAAuBR,EAAgB,EAAIM,EAAuBV,EAGlEa,EAAeD,EAAwBE,MAAMC,QAAQH,GAAwBA,EAAuB,CAACA,GAAyB,GAG9HI,EAAmBC,EAAON,GAAe,EAAK,GAEpDO,EAAgCC,GAAS,GAAKC,EAAAC,EAAAH,EAAA,GAAvCI,EAASF,EAAA,GAAEG,EAAUH,EAAA,GAC5BI,EAA4BL,EAASR,QAAAA,EAAgBE,EAAa,IAAGY,EAAAJ,EAAAG,EAAA,GAA9DE,EAAMD,EAAA,GAAEE,EAASF,EAAA,GAElBG,EAAaX,EAA6C,MAG1DY,EAAmB,WACnBD,EAAWE,UACbC,aAAaH,EAAWE,SACxBF,EAAWE,QAAU,MAEvBF,EAAWE,QAAUE,WAAW,WAC9BT,GAAW,EACZ,EAAE,IACJ,EAGDU,EAAU,WACR,OAAO,WACDL,EAAWE,SAASC,aAAaH,EAAWE,QACjD,CACF,EAAE,IAGHG,EAAU,WACRjB,EAAiBc,QAAUnB,GAAe,EAAK,EAC/CgB,EAAUhB,QAAAA,EAAgBE,EAAa,IACvCU,GAAW,EACb,EAAG,CAACZ,EAAcC,IAElB,IAGQsB,EAHFC,EAAiBjC,EAA8B,mBAAZA,EAAyBA,EAAQoB,GAAaA,EAAYpB,EAAU,KAAQ,KAqBrH,OACEkC,EAACC,EAAQ,CAAAC,SAAA,CACNH,EACDI,EAAA,MAAAC,EAAAA,EAAAA,EAAA,CAAA,EACMnC,IAtBF6B,EAAiC,CAAE,EACrC7B,EAAMoC,QAAOP,EAAIO,MAAQpC,EAAMoC,OAC/BnB,IAAWY,EAAIO,MAAKD,EAAAA,EAAA,CAAA,EAAQN,EAAIO,OAAK,GAAA,CAAEC,OAAQ,cAAeC,WAAY,6BACvET,IAoBW,CAAA,EAAA,CACdnC,IAAK2B,EACLzB,IAAKA,EACL2C,YAAa,WAAF,OAAQrB,GAAW,EAAK,EACnCsB,OAAQ,WACNtB,GAAW,GACXM,GACD,EACDiB,QAxBc,WAClB,IAAMC,EAAY/B,EAAiBc,QAAU,EACzCiB,EAAYlC,EAAamC,QAC3BhC,EAAiBc,QAAUiB,EAC3BpB,EAAUd,EAAakC,MAEvBxB,GAAW,GACXM,IAEH,OAmBH"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{objectSpread2 as e}from"../../_virtual/_rollupPluginBabelHelpers.js";import{QueryParam as r}from"../utils/query-param.js";function
|
|
1
|
+
import{objectSpread2 as e}from"../../_virtual/_rollupPluginBabelHelpers.js";import{QueryParam as r}from"../utils/query-param.js";function o(e,o){if("undefined"!=typeof window)try{var i={mode:e===o?void 0:e};i.mode?r.replacePatch(i):r.replaceDeletes("mode")}catch(e){console.error("Error syncing view mode to URL:",e)}}function i(e){if("undefined"==typeof window)return e;try{var o=r.gets("mode");return o.mode?o.mode:e}catch(r){return console.error("Error getting view mode from URL:",r),e}}function n(e,o){if("undefined"!=typeof window)try{var i={},n=[];void 0!==(null==e?void 0:e.page)&&e.page!==(null==o?void 0:o.page)?i.page=String(e.page):n.push("page"),void 0!==(null==e?void 0:e.pageSize)&&e.pageSize!==(null==o?void 0:o.pageSize)?i.pageSize=String(e.pageSize):n.push("pageSize"),Object.keys(i).length>0&&r.replacePatch(i),n.length>0&&r.replaceDeletes.apply(r,n)}catch(e){console.error("Error syncing pagination to URL:",e)}}function a(o){if("undefined"==typeof window)return o;try{var i=r.gets("page","pageSize"),n=i.page?parseInt(i.page,10):void 0,a=i.pageSize?parseInt(i.pageSize,10):void 0;return void 0===n&&void 0===a?o:e(e({},o),{},{page:void 0===n||isNaN(n)?null==o?void 0:o.page:n,pageSize:void 0===a||isNaN(a)?null==o?void 0:o.pageSize:a})}catch(e){return console.error("Error getting pagination from URL:",e),o}}export{a as getPaginationFromURL,i as getViewModeFromURL,n as setPaginationToURL,o as setViewModeToURL};
|
|
2
2
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../../../src/data-surface/helpers.ts"],"sourcesContent":["import { DataSurfaceViewMode, TPagination } from './types'\r\nimport { QueryParam } from '../utils/query-param'\r\n\r\nexport interface IViewDataQueryParams {\r\n mode?: DataSurfaceViewMode\r\n}\r\n\r\nexport function setViewModeToURL(mode?: DataSurfaceViewMode, defaultMode?: DataSurfaceViewMode) {\r\n // If window is undefined (e.g., during SSR), do nothing\r\n if (typeof window === 'undefined') return\r\n try {\r\n const updateParams: IViewDataQueryParams = { mode: mode === defaultMode ? undefined : mode }\r\n\r\n // Update URL with view mode\r\n if (updateParams.mode) {\r\n QueryParam.replacePatch<IViewDataQueryParams>(updateParams)\r\n } else {\r\n // If no view mode to update, remove existing mode from URL\r\n QueryParam.replaceDeletes<IViewDataQueryParams>('mode')\r\n }\r\n } catch (error) {\r\n console.error('Error syncing view mode to URL:', error)\r\n }\r\n}\r\n\r\nexport function getViewModeFromURL(defaultMode?: DataSurfaceViewMode): DataSurfaceViewMode | undefined {\r\n // If window is undefined (e.g., during SSR), return defaultViewMode\r\n if (typeof window === 'undefined') return defaultMode\r\n try {\r\n const q = QueryParam.gets<IViewDataQueryParams>('mode')\r\n return q.mode ? (q.mode as DataSurfaceViewMode) : defaultMode\r\n } catch (error) {\r\n console.error('Error getting view mode from URL:', error)\r\n return defaultMode\r\n }\r\n}\r\n\r\nexport interface IPaginationQueryParams {\r\n page?: string\r\n pageSize?: string\r\n}\r\n\r\n/**\r\n * @en
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../src/data-surface/helpers.ts"],"sourcesContent":["import { DataSurfaceViewMode, TPagination } from './types'\r\nimport { QueryParam } from '../utils/query-param'\r\n\r\nexport interface IViewDataQueryParams {\r\n mode?: DataSurfaceViewMode\r\n}\r\n\r\nexport function setViewModeToURL(mode?: DataSurfaceViewMode, defaultMode?: DataSurfaceViewMode) {\r\n // If window is undefined (e.g., during SSR), do nothing\r\n if (typeof window === 'undefined') return\r\n try {\r\n const updateParams: IViewDataQueryParams = { mode: mode === defaultMode ? undefined : mode }\r\n\r\n // Update URL with view mode\r\n if (updateParams.mode) {\r\n QueryParam.replacePatch<IViewDataQueryParams>(updateParams)\r\n } else {\r\n // If no view mode to update, remove existing mode from URL\r\n QueryParam.replaceDeletes<IViewDataQueryParams>('mode')\r\n }\r\n } catch (error) {\r\n console.error('Error syncing view mode to URL:', error)\r\n }\r\n}\r\n\r\nexport function getViewModeFromURL(defaultMode?: DataSurfaceViewMode): DataSurfaceViewMode | undefined {\r\n // If window is undefined (e.g., during SSR), return defaultViewMode\r\n if (typeof window === 'undefined') return defaultMode\r\n try {\r\n const q = QueryParam.gets<IViewDataQueryParams>('mode')\r\n return q.mode ? (q.mode as DataSurfaceViewMode) : defaultMode\r\n } catch (error) {\r\n console.error('Error getting view mode from URL:', error)\r\n return defaultMode\r\n }\r\n}\r\n\r\nexport interface IPaginationQueryParams {\r\n page?: string\r\n pageSize?: string\r\n}\r\n\r\n/**\r\n * @en Synchronize pagination to URL query parameters. Each field is handled independently:\r\n * if it differs from default → add to URL; if same or undefined → remove from URL.\r\n * @vi Dong bo pagination vao URL query parameters. Tung field duoc xu ly doc lap:\r\n * neu khac default → them vao URL; neu bang hoac undefined → xoa khoi URL.\r\n *\r\n * @param pagination - Current pagination to sync\r\n * @param defaultPagination - Default pagination values used as baseline\r\n */\r\nexport function setPaginationToURL(pagination?: TPagination, defaultPagination?: TPagination) {\r\n if (typeof window === 'undefined') return\r\n\r\n try {\r\n const patchParams: IPaginationQueryParams = {}\r\n const deleteKeys: (keyof IPaginationQueryParams)[] = []\r\n\r\n // page: differs from default → add to URL; same or missing → remove\r\n if (pagination?.page !== undefined && pagination.page !== defaultPagination?.page) {\r\n patchParams.page = String(pagination.page)\r\n } else {\r\n deleteKeys.push('page')\r\n }\r\n\r\n // pageSize: differs from default → add to URL; same or missing → remove\r\n if (pagination?.pageSize !== undefined && pagination.pageSize !== defaultPagination?.pageSize) {\r\n patchParams.pageSize = String(pagination.pageSize)\r\n } else {\r\n deleteKeys.push('pageSize')\r\n }\r\n\r\n if (Object.keys(patchParams).length > 0) QueryParam.replacePatch<IPaginationQueryParams>(patchParams)\r\n if (deleteKeys.length > 0) QueryParam.replaceDeletes<IPaginationQueryParams>(...deleteKeys)\r\n } catch (error) {\r\n console.error('Error syncing pagination to URL:', error)\r\n }\r\n}\r\n\r\n/**\r\n * @en Retrieve pagination from URL query parameters.\r\n * @vi Lay pagination tu URL query parameters.\r\n *\r\n * @param defaultPagination - Default pagination to return if URL has no pagination\r\n * @returns Pagination from URL or defaultPagination\r\n */\r\nexport function getPaginationFromURL(defaultPagination?: TPagination): TPagination | undefined {\r\n // If window is undefined (e.g., during SSR), return defaultPagination\r\n if (typeof window === 'undefined') return defaultPagination\r\n\r\n try {\r\n const q = QueryParam.gets<IPaginationQueryParams>('page', 'pageSize')\r\n\r\n // Parse values from URL\r\n const page = q.page ? parseInt(q.page, 10) : undefined\r\n const pageSize = q.pageSize ? parseInt(q.pageSize, 10) : undefined\r\n\r\n // If no pagination in URL, return default\r\n if (page === undefined && pageSize === undefined) {\r\n return defaultPagination\r\n }\r\n\r\n // Merge with default pagination\r\n return {\r\n ...defaultPagination,\r\n page: page !== undefined && !isNaN(page) ? page : defaultPagination?.page,\r\n pageSize: pageSize !== undefined && !isNaN(pageSize) ? pageSize : defaultPagination?.pageSize\r\n }\r\n } catch (error) {\r\n console.error('Error getting pagination from URL:', error)\r\n return defaultPagination\r\n }\r\n}\r\n"],"names":["setViewModeToURL","mode","defaultMode","window","updateParams","undefined","QueryParam","replacePatch","replaceDeletes","error","console","getViewModeFromURL","q","gets","setPaginationToURL","pagination","defaultPagination","patchParams","deleteKeys","page","String","push","pageSize","Object","keys","length","apply","getPaginationFromURL","parseInt","_objectSpread","isNaN"],"mappings":"iIAOgB,SAAAA,EAAiBC,EAA4BC,GAE3D,GAAsB,oBAAXC,OACX,IACE,IAAMC,EAAqC,CAAEH,KAAMA,IAASC,OAAcG,EAAYJ,GAGlFG,EAAaH,KACfK,EAAWC,aAAmCH,GAG9CE,EAAWE,eAAqC,OAEnD,CAAC,MAAOC,GACPC,QAAQD,MAAM,kCAAmCA,EAClD,CACH,CAEM,SAAUE,EAAmBT,GAEjC,GAAsB,oBAAXC,OAAwB,OAAOD,EAC1C,IACE,IAAMU,EAAIN,EAAWO,KAA2B,QAChD,OAAOD,EAAEX,KAAQW,EAAEX,KAA+BC,CACnD,CAAC,MAAOO,GAEP,OADAC,QAAQD,MAAM,oCAAqCA,GAC5CP,CACR,CACH,CAgBgB,SAAAY,EAAmBC,EAA0BC,GAC3D,GAAsB,oBAAXb,OAEX,IACE,IAAMc,EAAsC,CAAE,EACxCC,EAA+C,QAG5Bb,KAArBU,eAAAA,EAAYI,OAAsBJ,EAAWI,QAASH,aAAAA,EAAAA,EAAmBG,MAC3EF,EAAYE,KAAOC,OAAOL,EAAWI,MAErCD,EAAWG,KAAK,aAIWhB,KAAzBU,eAAAA,EAAYO,WAA0BP,EAAWO,YAAaN,aAAAA,EAAAA,EAAmBM,UACnFL,EAAYK,SAAWF,OAAOL,EAAWO,UAEzCJ,EAAWG,KAAK,YAGdE,OAAOC,KAAKP,GAAaQ,OAAS,GAAGnB,EAAWC,aAAqCU,GACrFC,EAAWO,OAAS,GAAGnB,EAAWE,eAAckB,MAAzBpB,EAAqDY,EACjF,CAAC,MAAOT,GACPC,QAAQD,MAAM,mCAAoCA,EACnD,CACH,CASM,SAAUkB,EAAqBX,GAEnC,GAAsB,oBAAXb,OAAwB,OAAOa,EAE1C,IACE,IAAMJ,EAAIN,EAAWO,KAA6B,OAAQ,YAGpDM,EAAOP,EAAEO,KAAOS,SAAShB,EAAEO,KAAM,SAAMd,EACvCiB,EAAWV,EAAEU,SAAWM,SAAShB,EAAEU,SAAU,SAAMjB,EAGzD,YAAaA,IAATc,QAAmCd,IAAbiB,EACjBN,EAITa,EAAAA,EAAA,CAAA,EACKb,GAAiB,CAAA,EAAA,CACpBG,UAAed,IAATc,GAAuBW,MAAMX,GAAeH,aAAAA,EAAAA,EAAmBG,KAA1BA,EAC3CG,cAAuBjB,IAAbiB,GAA2BQ,MAAMR,GAAuBN,aAAiB,EAAjBA,EAAmBM,SAA9BA,GAE1D,CAAC,MAAOb,GAEP,OADAC,QAAQD,MAAM,qCAAsCA,GAC7CO,CACR,CACH"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as e,slicedToArray as i}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as t,jsx as n,Fragment as a}from"react/jsx-runtime";import{useMemo as r,useState as o}from"react";import{styled as l,Box as c,Typography as m,Tooltip as p,Chip as s}from"@mui/material";import u from"@mui/icons-material/MoreHoriz";function h(){var e=function(e){var i=e.item,t=e.group,a=e.onRemove,r=t.field,o=t.label,l=i.label||i.value.toString();return n(s,{size:"small",title:l,label:l,className:d.itemChip,onDelete:a?function(){return a(r,i.value)}:void 0},"".concat(o,"-").concat(i.value))},l=function(r){var l=o(!1),c=i(l,2),m=c[0],h=c[1],f=r.group,g=r.onRemove,v=r.enableMinimalesticView,b=f.items;if(v&&b.length>1&&!m)return t(a,{children:[n(p,{title:"".concat(b.length-1," more, click to expand"),placement:"top",arrow:!0,children:n(s,{icon:n(u,{fontSize:"small"}),label:"".concat(b.length-1,"+"),size:"small",className:d.itemChip,style:{opacity:.7},onClick:function(){return h(!0)}})}),n(e,{item:b[b.length-1],group:f,onRemove:g})]});var C=m&&b.length>1;return t(a,{children:[C&&n(p,{title:"Show less",placement:"top",arrow:!0,children:n(s,{icon:n(u,{fontSize:"small"}),size:"small",className:d.itemChip,sx:{opacity:.7,".MuiChip-label":{pl:0}},onClick:function(){return h(!1)}})}),b.map(function(i){return n(e,{item:i,group:f,onRemove:g},i.value.toString())})]})};return function(e){var i=e.value,a=void 0===i?[]:i,o=e.onRemove,c=e.placement,p=e.label,s=e.enableMinimalesticView,u=[d.item];"vertical"===c?u.push(d.itemVertical):"horizontal"===c&&u.push(d.itemHorizontal);var h=r(function(){return a?(Array.isArray(a)?a:[a]).filter(function(e){return e.items&&e.items.length>0}):[]},[a]);return 0===h.length?null:t(f,{sx:e.sx,className:u.filter(Boolean).join(" "),children:[Boolean(p)&&t(m,{variant:"caption",className:d.itemLabel,children:[p||"ChipViewer",":"]}),n("div",{className:d.itemContent,children:h.map(function(e){var i=e.field,a=e.label;return t("div",{className:d.itemGroup,children:[a&&t(m,{variant:"caption",className:d.itemLabel,children:[a,":"]}),n(l,{group:e,onRemove:o,enableMinimalesticView:s})]},i.toString())})})]})}}var d={item:"DinoChipViewer-item",itemLabel:"DinoChipViewer-itemLabel",itemChip:"DinoChipViewer-itemChip",itemGroup:"DinoChipViewer-itemGroup",itemContent:"DinoChipViewer-itemContent",sort:"DinoChipViewer-sort",itemVertical:"DinoChipViewer-itemVertical",itemHorizontal:"DinoChipViewer-itemHorizontal"},f=l(c)(function(i){var t=i.theme;return e(e(e(e(e({},".".concat(d.itemLabel),{fontWeight:700,marginLeft:t.spacing(.5),lineHeight:1}),".".concat(d.itemChip),{borderRadius:"4px",maxWidth:"100px","& .MuiChip-label":{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}}),".".concat(d.itemGroup),{display:"flex",flexWrap:"wrap",border:"dashed 1px ".concat(t.palette.divider),borderRadius:t.shape.borderRadius,alignItems:"center",padding:t.spacing(.25),gap:t.spacing(
|
|
1
|
+
import{defineProperty as e,slicedToArray as i}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as t,jsx as n,Fragment as a}from"react/jsx-runtime";import{useMemo as r,useState as o}from"react";import{styled as l,Box as c,Typography as m,Tooltip as p,Chip as s}from"@mui/material";import u from"@mui/icons-material/MoreHoriz";function h(){var e=function(e){var i=e.item,t=e.group,a=e.onRemove,r=t.field,o=t.label,l=i.label||i.value.toString();return n(s,{size:"small",title:l,label:l,className:d.itemChip,onDelete:a?function(){return a(r,i.value)}:void 0},"".concat(o,"-").concat(i.value))},l=function(r){var l=o(!1),c=i(l,2),m=c[0],h=c[1],f=r.group,g=r.onRemove,v=r.enableMinimalesticView,b=f.items;if(v&&b.length>1&&!m)return t(a,{children:[n(p,{title:"".concat(b.length-1," more, click to expand"),placement:"top",arrow:!0,children:n(s,{icon:n(u,{fontSize:"small"}),label:"".concat(b.length-1,"+"),size:"small",className:d.itemChip,style:{opacity:.7},onClick:function(){return h(!0)}})}),n(e,{item:b[b.length-1],group:f,onRemove:g})]});var C=m&&b.length>1;return t(a,{children:[C&&n(p,{title:"Show less",placement:"top",arrow:!0,children:n(s,{icon:n(u,{fontSize:"small"}),size:"small",className:d.itemChip,sx:{opacity:.7,".MuiChip-label":{pl:0}},onClick:function(){return h(!1)}})}),b.map(function(i){return n(e,{item:i,group:f,onRemove:g},i.value.toString())})]})};return function(e){var i=e.value,a=void 0===i?[]:i,o=e.onRemove,c=e.placement,p=e.label,s=e.enableMinimalesticView,u=[d.item];"vertical"===c?u.push(d.itemVertical):"horizontal"===c&&u.push(d.itemHorizontal);var h=r(function(){return a?(Array.isArray(a)?a:[a]).filter(function(e){return e.items&&e.items.length>0}):[]},[a]);return 0===h.length?null:t(f,{sx:e.sx,className:u.filter(Boolean).join(" "),children:[Boolean(p)&&t(m,{variant:"caption",className:d.itemLabel,children:[p||"ChipViewer",":"]}),n("div",{className:d.itemContent,children:h.map(function(e){var i=e.field,a=e.label;return t("div",{className:d.itemGroup,children:[a&&t(m,{variant:"caption",className:d.itemLabel,children:[a,":"]}),n(l,{group:e,onRemove:o,enableMinimalesticView:s})]},i.toString())})})]})}}var d={item:"DinoChipViewer-item",itemLabel:"DinoChipViewer-itemLabel",itemChip:"DinoChipViewer-itemChip",itemGroup:"DinoChipViewer-itemGroup",itemContent:"DinoChipViewer-itemContent",sort:"DinoChipViewer-sort",itemVertical:"DinoChipViewer-itemVertical",itemHorizontal:"DinoChipViewer-itemHorizontal"},f=l(c)(function(i){var t=i.theme;return e(e(e(e(e({},".".concat(d.itemLabel),{fontWeight:700,marginLeft:t.spacing(.5),lineHeight:1}),".".concat(d.itemChip),{borderRadius:"4px",maxWidth:"100px","& .MuiChip-label":{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}}),".".concat(d.itemGroup),{display:"flex",flexWrap:"wrap",border:"dashed 1px ".concat(t.palette.divider),borderRadius:t.shape.borderRadius,alignItems:"center",padding:t.spacing(.25),gap:t.spacing(.5)}),".".concat(d.itemContent),e({display:"flex",flexWrap:"wrap",gap:t.spacing(.5)},".".concat(d.itemLabel),{fontWeight:500,color:t.palette.text.secondary})),"&.".concat(d.item),e(e({display:"flex",flexDirection:"row",alignItems:"center",gap:t.spacing(1),padding:t.spacing(.25,.5),"&:last-child":{marginBottom:0,borderBottom:"none",paddingBottom:0}},"&.".concat(d.sort),{".MuiChip-label > div":{display:"flex",alignItems:"center",gap:4},".MuiSvgIcon-root":{fontSize:12}}),"&.".concat(d.itemVertical),{flexDirection:"column",alignItems:"flex-start"}))});export{h as createChipViewers};
|
|
2
2
|
//# sourceMappingURL=chip-viewer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chip-viewer.js","sources":["../../../../src/filter-bar/components/chip-viewer.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { useMemo, useState } from 'react'\r\nimport { Box, Chip, styled, Tooltip, Typography } from '@mui/material'\r\nimport MoreHorizIcon from '@mui/icons-material/MoreHoriz'\r\n// types\r\nimport type { FC } from 'react'\r\nimport type { SxProps, Theme } from '@mui/material'\r\nimport type { TFieldType, TFieldValid } from '../types'\r\n\r\nexport interface IChipViewerItem<O = any> {\r\n value: TFieldValid\r\n label?: string\r\n other?: O\r\n}\r\n\r\nexport interface TChipViewerGroup<T, O = any> {\r\n field: TFieldType<T>\r\n label?: string\r\n items: IChipViewerItem<O>[]\r\n}\r\n\r\nexport type TOnRemoveFilterFunc<T> = (field: TFieldType<T>, value: TFieldValid) => void\r\n\r\ninterface IChipViewerProps<T> {\r\n value?: TChipViewerGroup<T> | TChipViewerGroup<T>[]\r\n onRemove?: TOnRemoveFilterFunc<T>\r\n placement?: 'vertical' | 'horizontal'\r\n /** Option to set a custom label for the group. */\r\n label?: string | boolean\r\n /** Enable minimalistic view: only show the last item, hide the rest as an icon at the start */\r\n enableMinimalesticView?: boolean\r\n sx?: SxProps<Theme>\r\n}\r\n\r\ninterface IChipItemProps<T> extends Pick<IChipViewerProps<T>, 'onRemove'> {\r\n item: IChipViewerItem\r\n group: TChipViewerGroup<T>\r\n}\r\n\r\ninterface IChipListProps<T> extends Pick<IChipViewerProps<T>, 'onRemove' | 'enableMinimalesticView'> {\r\n group: TChipViewerGroup<T>\r\n}\r\n\r\nexport function createChipViewers<T>() {\r\n const ChipItem: FC<IChipItemProps<T>> = (props) => {\r\n const { item, group, onRemove } = props\r\n const { field, label } = group\r\n const itemLabel = item.label || item.value.toString()\r\n return (\r\n <Chip\r\n key={`${label}-${item.value}`}\r\n size='small'\r\n title={itemLabel}\r\n label={itemLabel}\r\n className={classes.itemChip}\r\n onDelete={onRemove ? () => onRemove(field, item.value) : undefined}\r\n />\r\n )\r\n }\r\n\r\n const ChipList: FC<IChipListProps<T>> = (props) => {\r\n const [expanded, setExpanded] = useState<boolean>(false)\r\n const { group, onRemove, enableMinimalesticView } = props\r\n const { items } = group\r\n const isMinimalistic = enableMinimalesticView && items.length > 1 && !expanded\r\n if (isMinimalistic) {\r\n return (\r\n <>\r\n <Tooltip title={`${items.length - 1} more, click to expand`} placement='top' arrow>\r\n <Chip\r\n icon={<MoreHorizIcon fontSize='small' />}\r\n label={`${items.length - 1}+`}\r\n size='small'\r\n className={classes.itemChip}\r\n style={{ opacity: 0.7 }}\r\n onClick={() => setExpanded(true)}\r\n />\r\n </Tooltip>\r\n <ChipItem item={items[items.length - 1]} group={group} onRemove={onRemove} />\r\n </>\r\n )\r\n }\r\n const isBtnShowLess = expanded && items.length > 1\r\n return (\r\n <>\r\n {isBtnShowLess && (\r\n <Tooltip title='Show less' placement='top' arrow>\r\n <Chip\r\n icon={<MoreHorizIcon fontSize='small' />}\r\n // label={false}\r\n size='small'\r\n className={classes.itemChip}\r\n sx={{ opacity: 0.7, '.MuiChip-label': { pl: 0 } }}\r\n onClick={() => setExpanded(false)}\r\n />\r\n </Tooltip>\r\n )}\r\n {items.map((item) => (\r\n <ChipItem key={item.value.toString()} item={item} group={group} onRemove={onRemove} />\r\n ))}\r\n </>\r\n )\r\n }\r\n\r\n const ChipViewer: FC<IChipViewerProps<T>> = (props) => {\r\n const { value = [], onRemove, placement, label, enableMinimalesticView } = props\r\n\r\n const rootClasses = [classes.item]\r\n if (placement === 'vertical') rootClasses.push(classes.itemVertical)\r\n else if (placement === 'horizontal') rootClasses.push(classes.itemHorizontal)\r\n\r\n const data = useMemo(() => {\r\n if (!value) return []\r\n const valueArray = Array.isArray(value) ? value : [value]\r\n return valueArray.filter((group) => group.items && group.items.length > 0)\r\n }, [value])\r\n\r\n if (data.length === 0) return null\r\n\r\n return (\r\n <ItemStyled sx={props.sx} className={rootClasses.filter(Boolean).join(' ')}>\r\n {Boolean(label) && (\r\n <Typography variant='caption' className={classes.itemLabel}>\r\n {label || 'ChipViewer'}:\r\n </Typography>\r\n )}\r\n <div className={classes.itemContent}>\r\n {data.map((group) => {\r\n const { field, label } = group\r\n return (\r\n <div key={field.toString()} className={classes.itemGroup}>\r\n {label && (\r\n <Typography variant='caption' className={classes.itemLabel}>\r\n {label}:\r\n </Typography>\r\n )}\r\n <ChipList group={group} onRemove={onRemove} enableMinimalesticView={enableMinimalesticView} />\r\n </div>\r\n )\r\n })}\r\n </div>\r\n </ItemStyled>\r\n )\r\n }\r\n\r\n return ChipViewer\r\n}\r\n\r\n//#region styles\r\nconst chipViewerClasses = {\r\n root: 'DinoChipViewer-root',\r\n item: 'DinoChipViewer-item',\r\n itemLabel: 'DinoChipViewer-itemLabel',\r\n itemChip: 'DinoChipViewer-itemChip',\r\n itemGroup: 'DinoChipViewer-itemGroup',\r\n itemContent: 'DinoChipViewer-itemContent',\r\n sort: 'DinoChipViewer-sort',\r\n itemVertical: 'DinoChipViewer-itemVertical',\r\n itemHorizontal: 'DinoChipViewer-itemHorizontal'\r\n}\r\n\r\nconst classes = chipViewerClasses\r\n\r\nconst ItemStyled = styled(Box)(({ theme }) => ({\r\n [`.${classes.itemLabel}`]: {\r\n fontWeight: 700,\r\n marginLeft: theme.spacing(0.5),\r\n lineHeight: 1\r\n },\r\n [`.${classes.itemChip}`]: {\r\n borderRadius: '4px',\r\n maxWidth: '100px',\r\n '& .MuiChip-label': { whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }\r\n },\r\n [`.${classes.itemGroup}`]: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n border: `dashed 1px ${theme.palette.divider}`,\r\n borderRadius: theme.shape.borderRadius,\r\n alignItems: 'center',\r\n padding: theme.spacing(0.25),\r\n gap: theme.spacing(1)\r\n },\r\n [`.${classes.itemContent}`]: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n gap: theme.spacing(0.5),\r\n [`.${classes.itemLabel}`]: {\r\n fontWeight: 500,\r\n color: theme.palette.text.secondary\r\n }\r\n },\r\n [`&.${classes.item}`]: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n gap: theme.spacing(1),\r\n padding: theme.spacing(0.25, 0.5),\r\n // borderBottom: `1px solid ${theme.palette.grey[100]}`,\r\n '&:last-child': { marginBottom: 0, borderBottom: 'none', paddingBottom: 0 },\r\n [`&.${classes.sort}`]: {\r\n '.MuiChip-label > div': { display: 'flex', alignItems: 'center', gap: 4 },\r\n '.MuiSvgIcon-root': { fontSize: 12 }\r\n },\r\n [`&.${classes.itemVertical}`]: { flexDirection: 'column', alignItems: 'flex-start' }\r\n // [`&.${classes.itemHorizontal}`]: { flexDirection: 'row', alignItems: 'center' }\r\n }\r\n}))\r\n//#endregion\r\n"],"names":["createChipViewers","ChipItem","props","item","group","onRemove","field","label","itemLabel","value","toString","_jsx","Chip","size","title","className","classes","itemChip","onDelete","undefined","concat","ChipList","_useState","useState","_useState2","_slicedToArray","expanded","setExpanded","enableMinimalesticView","items","length","_jsxs","Tooltip","placement","arrow","children","icon","MoreHorizIcon","fontSize","style","opacity","onClick","isBtnShowLess","_Fragment","sx","pl","map","_props$value","rootClasses","push","itemVertical","itemHorizontal","data","useMemo","Array","isArray","filter","ItemStyled","Boolean","join","Typography","variant","itemContent","itemGroup","sort","styled","Box","_ref","theme","_defineProperty","fontWeight","marginLeft","spacing","lineHeight","borderRadius","maxWidth","whiteSpace","overflow","textOverflow","display","flexWrap","border","palette","divider","shape","alignItems","padding","gap","color","text","secondary","flexDirection","marginBottom","borderBottom","paddingBottom"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chip-viewer.js","sources":["../../../../src/filter-bar/components/chip-viewer.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { useMemo, useState } from 'react'\r\nimport { Box, Chip, styled, Tooltip, Typography } from '@mui/material'\r\nimport MoreHorizIcon from '@mui/icons-material/MoreHoriz'\r\n// types\r\nimport type { FC } from 'react'\r\nimport type { SxProps, Theme } from '@mui/material'\r\nimport type { TFieldType, TFieldValid } from '../types'\r\n\r\nexport interface IChipViewerItem<O = any> {\r\n value: TFieldValid\r\n label?: string\r\n other?: O\r\n}\r\n\r\nexport interface TChipViewerGroup<T, O = any> {\r\n field: TFieldType<T>\r\n label?: string\r\n items: IChipViewerItem<O>[]\r\n}\r\n\r\nexport type TOnRemoveFilterFunc<T> = (field: TFieldType<T>, value: TFieldValid) => void\r\n\r\ninterface IChipViewerProps<T> {\r\n value?: TChipViewerGroup<T> | TChipViewerGroup<T>[]\r\n onRemove?: TOnRemoveFilterFunc<T>\r\n placement?: 'vertical' | 'horizontal'\r\n /** Option to set a custom label for the group. */\r\n label?: string | boolean\r\n /** Enable minimalistic view: only show the last item, hide the rest as an icon at the start */\r\n enableMinimalesticView?: boolean\r\n sx?: SxProps<Theme>\r\n}\r\n\r\ninterface IChipItemProps<T> extends Pick<IChipViewerProps<T>, 'onRemove'> {\r\n item: IChipViewerItem\r\n group: TChipViewerGroup<T>\r\n}\r\n\r\ninterface IChipListProps<T> extends Pick<IChipViewerProps<T>, 'onRemove' | 'enableMinimalesticView'> {\r\n group: TChipViewerGroup<T>\r\n}\r\n\r\nexport function createChipViewers<T>() {\r\n const ChipItem: FC<IChipItemProps<T>> = (props) => {\r\n const { item, group, onRemove } = props\r\n const { field, label } = group\r\n const itemLabel = item.label || item.value.toString()\r\n return (\r\n <Chip\r\n key={`${label}-${item.value}`}\r\n size='small'\r\n title={itemLabel}\r\n label={itemLabel}\r\n className={classes.itemChip}\r\n onDelete={onRemove ? () => onRemove(field, item.value) : undefined}\r\n />\r\n )\r\n }\r\n\r\n const ChipList: FC<IChipListProps<T>> = (props) => {\r\n const [expanded, setExpanded] = useState<boolean>(false)\r\n const { group, onRemove, enableMinimalesticView } = props\r\n const { items } = group\r\n const isMinimalistic = enableMinimalesticView && items.length > 1 && !expanded\r\n if (isMinimalistic) {\r\n return (\r\n <>\r\n <Tooltip title={`${items.length - 1} more, click to expand`} placement='top' arrow>\r\n <Chip\r\n icon={<MoreHorizIcon fontSize='small' />}\r\n label={`${items.length - 1}+`}\r\n size='small'\r\n className={classes.itemChip}\r\n style={{ opacity: 0.7 }}\r\n onClick={() => setExpanded(true)}\r\n />\r\n </Tooltip>\r\n <ChipItem item={items[items.length - 1]} group={group} onRemove={onRemove} />\r\n </>\r\n )\r\n }\r\n const isBtnShowLess = expanded && items.length > 1\r\n return (\r\n <>\r\n {isBtnShowLess && (\r\n <Tooltip title='Show less' placement='top' arrow>\r\n <Chip\r\n icon={<MoreHorizIcon fontSize='small' />}\r\n // label={false}\r\n size='small'\r\n className={classes.itemChip}\r\n sx={{ opacity: 0.7, '.MuiChip-label': { pl: 0 } }}\r\n onClick={() => setExpanded(false)}\r\n />\r\n </Tooltip>\r\n )}\r\n {items.map((item) => (\r\n <ChipItem key={item.value.toString()} item={item} group={group} onRemove={onRemove} />\r\n ))}\r\n </>\r\n )\r\n }\r\n\r\n const ChipViewer: FC<IChipViewerProps<T>> = (props) => {\r\n const { value = [], onRemove, placement, label, enableMinimalesticView } = props\r\n\r\n const rootClasses = [classes.item]\r\n if (placement === 'vertical') rootClasses.push(classes.itemVertical)\r\n else if (placement === 'horizontal') rootClasses.push(classes.itemHorizontal)\r\n\r\n const data = useMemo(() => {\r\n if (!value) return []\r\n const valueArray = Array.isArray(value) ? value : [value]\r\n return valueArray.filter((group) => group.items && group.items.length > 0)\r\n }, [value])\r\n\r\n if (data.length === 0) return null\r\n\r\n return (\r\n <ItemStyled sx={props.sx} className={rootClasses.filter(Boolean).join(' ')}>\r\n {Boolean(label) && (\r\n <Typography variant='caption' className={classes.itemLabel}>\r\n {label || 'ChipViewer'}:\r\n </Typography>\r\n )}\r\n <div className={classes.itemContent}>\r\n {data.map((group) => {\r\n const { field, label } = group\r\n return (\r\n <div key={field.toString()} className={classes.itemGroup}>\r\n {label && (\r\n <Typography variant='caption' className={classes.itemLabel}>\r\n {label}:\r\n </Typography>\r\n )}\r\n <ChipList group={group} onRemove={onRemove} enableMinimalesticView={enableMinimalesticView} />\r\n </div>\r\n )\r\n })}\r\n </div>\r\n </ItemStyled>\r\n )\r\n }\r\n\r\n return ChipViewer\r\n}\r\n\r\n//#region styles\r\nconst chipViewerClasses = {\r\n root: 'DinoChipViewer-root',\r\n item: 'DinoChipViewer-item',\r\n itemLabel: 'DinoChipViewer-itemLabel',\r\n itemChip: 'DinoChipViewer-itemChip',\r\n itemGroup: 'DinoChipViewer-itemGroup',\r\n itemContent: 'DinoChipViewer-itemContent',\r\n sort: 'DinoChipViewer-sort',\r\n itemVertical: 'DinoChipViewer-itemVertical',\r\n itemHorizontal: 'DinoChipViewer-itemHorizontal'\r\n}\r\n\r\nconst classes = chipViewerClasses\r\n\r\nconst ItemStyled = styled(Box)(({ theme }) => ({\r\n [`.${classes.itemLabel}`]: {\r\n fontWeight: 700,\r\n marginLeft: theme.spacing(0.5),\r\n lineHeight: 1\r\n },\r\n [`.${classes.itemChip}`]: {\r\n borderRadius: '4px',\r\n maxWidth: '100px',\r\n '& .MuiChip-label': { whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }\r\n },\r\n [`.${classes.itemGroup}`]: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n border: `dashed 1px ${theme.palette.divider}`,\r\n borderRadius: theme.shape.borderRadius,\r\n alignItems: 'center',\r\n padding: theme.spacing(0.25),\r\n gap: theme.spacing(0.5)\r\n },\r\n [`.${classes.itemContent}`]: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n gap: theme.spacing(0.5),\r\n [`.${classes.itemLabel}`]: {\r\n fontWeight: 500,\r\n color: theme.palette.text.secondary\r\n }\r\n },\r\n [`&.${classes.item}`]: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n gap: theme.spacing(1),\r\n padding: theme.spacing(0.25, 0.5),\r\n // borderBottom: `1px solid ${theme.palette.grey[100]}`,\r\n '&:last-child': { marginBottom: 0, borderBottom: 'none', paddingBottom: 0 },\r\n [`&.${classes.sort}`]: {\r\n '.MuiChip-label > div': { display: 'flex', alignItems: 'center', gap: 4 },\r\n '.MuiSvgIcon-root': { fontSize: 12 }\r\n },\r\n [`&.${classes.itemVertical}`]: { flexDirection: 'column', alignItems: 'flex-start' }\r\n // [`&.${classes.itemHorizontal}`]: { flexDirection: 'row', alignItems: 'center' }\r\n }\r\n}))\r\n//#endregion\r\n"],"names":["createChipViewers","ChipItem","props","item","group","onRemove","field","label","itemLabel","value","toString","_jsx","Chip","size","title","className","classes","itemChip","onDelete","undefined","concat","ChipList","_useState","useState","_useState2","_slicedToArray","expanded","setExpanded","enableMinimalesticView","items","length","_jsxs","Tooltip","placement","arrow","children","icon","MoreHorizIcon","fontSize","style","opacity","onClick","isBtnShowLess","_Fragment","sx","pl","map","_props$value","rootClasses","push","itemVertical","itemHorizontal","data","useMemo","Array","isArray","filter","ItemStyled","Boolean","join","Typography","variant","itemContent","itemGroup","sort","styled","Box","_ref","theme","_defineProperty","fontWeight","marginLeft","spacing","lineHeight","borderRadius","maxWidth","whiteSpace","overflow","textOverflow","display","flexWrap","border","palette","divider","shape","alignItems","padding","gap","color","text","secondary","flexDirection","marginBottom","borderBottom","paddingBottom"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as r,slicedToArray as e,toConsumableArray as n}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as t,Fragment as
|
|
1
|
+
import{defineProperty as r,slicedToArray as e,toConsumableArray as n}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as t,Fragment as o,jsx as i}from"react/jsx-runtime";import{useState as a,useRef as l,useEffect as c,useMemo as u}from"react";import{styled as s,InputBase as d,Box as p,SwipeableDrawer as h,Tooltip as m,IconButton as f,Stack as v,Typography as g}from"@mui/material";import y from"@mui/icons-material/Clear";import b from"@mui/icons-material/Search";import x from"@mui/icons-material/NorthWest";import C from"@mui/icons-material/ChevronLeft";import{InputAdornmentRight as S}from"./filter-input.units.js";var w="dino_search_history_v1",R=function(r){var e=r.placeholder,n=void 0===e?"Search...":e,t=r.inputRef,o=r.hasKeyword,a=r.onEnter,u=r.onChange,s=r.onClear,d=l(null),p=null!=t?t:d;return c(function(){var r=setTimeout(function(){var r;return null===(r=p.current)||void 0===r?void 0:r.focus()},50);return function(){try{var e;null===(e=p.current)||void 0===e||e.blur()}catch(r){}clearTimeout(r)}},[p]),i(k,{fullWidth:!0,inputRef:p,placeholder:n,inputProps:{autoCapitalize:"off",autoComplete:"off"},onKeyDown:function(r){"Enter"===r.key&&(r.preventDefault(),null==a||a())},onChange:function(r){return null==u?void 0:u(r.target.value)},endAdornment:i(S,{hasKeyword:o,onSubmit:a,onClear:s})})},k=s(d)(function(r){var e=r.theme;return{border:"1px solid ".concat(e.palette.divider),borderRadius:e.shape.borderRadius,padding:e.spacing(.5,1)}}),z=function(r){var e=r.history,n=r.onSelect,o=r.onFillInput,a=r.onClear;return e&&0!==e.length?t(A,{className:I.root,children:[t(v,{direction:"row",justifyContent:"space-between",alignItems:"center",sx:{mb:1},children:[i(g,{variant:"subtitle2",fontWeight:600,children:"Recent Searches"}),a&&i(m,{title:"Clear history",arrow:!0,children:i(f,{size:"small",onClick:a,children:i(y,{fontSize:"small"})})})]}),i(v,{className:I.items,children:e.map(function(r,e){return t(p,{className:I.item,onClick:function(){return n(r)},sx:{cursor:"pointer"},children:[i(g,{variant:"body2",noWrap:!0,sx:{flex:1},children:r}),i(m,{title:"Fill input",arrow:!0,children:i(f,{size:"small",sx:{color:"text.secondary","&:hover":{color:"text.primary"}},onClick:function(e){e.stopPropagation(),null==o||o(r)},children:i(x,{fontSize:"small"})})})]},e)})})]}):i(D,{children:i(g,{variant:"body2",color:"textSecondary",children:"No recent searches."})})},I={root:"DinoSearchHistory-root",items:"DinoSearchHistory-items",item:"DinoSearchHistory-item"},A=s(p)(function(e){var n=e.theme;return r(r({padding:"8px 16px",marginTop:1},".".concat(I.items),{}),".".concat(I.item),{display:"flex",alignItems:"center",gap:n.spacing(1),padding:n.spacing(.5,1),marginBottom:n.spacing(.5),borderRadius:n.shape.borderRadius,backgroundColor:"rgba(0,0,0,0.02)","&:hover":{backgroundColor:"rgba(0,0,0,0.04)"},"&:first-of-type":{marginTop:0}})}),D=s(p)(function(r){var e=r.theme;return{padding:e.spacing(2),textAlign:"center",color:e.palette.text.secondary,border:"0.5px dashed ".concat(e.palette.divider),borderRadius:e.shape.borderRadius,display:"flex",flexDirection:"column",alignItems:"center",gap:e.spacing(1),margin:e.spacing(1,2)}}),T=function(r){var s=r.onSearching,d=r.placeholder,h=a(!1),y=e(h,2),x=y[0],S=y[1],k=a([]),I=e(k,2),A=I[0],D=I[1],T=a(""),j=e(T,2),B=j[0],H=j[1],P=l(null);c(function(){if("undefined"!=typeof window)try{var r=localStorage.getItem(w);if(r){var e=JSON.parse(r);Array.isArray(e)&&D(e)}}catch(r){}},[]);var W=function(r){var e=r.trim();e&&D(function(r){var t=[e].concat(n(r.filter(function(r){return r!==e}))).slice(0,20);try{localStorage.setItem(w,JSON.stringify(t))}catch(r){}return t})},_=u(function(){var r=(B||"").trim();return r?A.filter(function(e){return e.toLowerCase().includes(r.toLowerCase())}).slice(0,5):A.slice(0,5)},[B,A]),E=function(){var r,e=(null===(r=P.current)||void 0===r||null===(r=r.value)||void 0===r?void 0:r.trim())||"";e&&(W(e),null==s||s(e),K())},K=function(){try{var r;null===(r=P.current)||void 0===r||r.blur()}catch(r){}S(!1)},L=function(){S(!0),H(""),P.current&&(P.current.value="")};return t(o,{children:[i(m,{title:"Search",arrow:!0,children:i(f,{size:"small",onClick:L,"aria-label":"Open search",children:i(b,{})})}),t(N,{anchor:"bottom",open:x,onClose:K,onOpen:L,disableBackdropTransition:!1,disableDiscovery:!1,swipeAreaWidth:20,children:[i(p,{sx:{display:"flex",justifyContent:"center",py:1},children:i(p,{sx:{width:40,height:4,borderRadius:2,backgroundColor:"divider"}})}),t(v,{gap:1,style:{flexDirection:"row",alignItems:"center",padding:"0 8px"},children:[i(m,{title:"Back",arrow:!0,children:i(f,{size:"small",onClick:function(){H("");try{var r;null===(r=P.current)||void 0===r||r.blur()}catch(r){}S(!1)},children:i(C,{fontSize:"small"})})}),i(R,{placeholder:d,inputRef:P,hasKeyword:Boolean(B),onEnter:E,onChange:H,onClear:function(){var r;P.current&&(P.current.value=""),H(""),null===(r=P.current)||void 0===r||r.focus()}}),i(m,{title:"Search",arrow:!0,children:i(f,{size:"small",onClick:E,"aria-label":"Apply search",children:i(b,{fontSize:"small"})})})]}),i(g,{variant:"caption",color:"textSecondary",sx:{px:2,mt:1},children:"Enter the value to search for and hit enter or click the enter icon to apply."}),i(z,{history:_,onSelect:function(r){P.current&&(P.current.value=r),H(r),W(r),null==s||s(r),K()},onFillInput:function(r){var e;P.current&&(P.current.value=r),H(r),null===(e=P.current)||void 0===e||e.focus()},onClear:function(){D([]);try{localStorage.removeItem(w)}catch(r){}}})]})]})},N=s(h)(function(r){return{zIndex:r.theme.zIndex.modal-10,".MuiPaper-root":{height:"calc(100svh - 56px)",maxHeight:"calc(100svh - 56px)",borderTopLeftRadius:12,borderTopRightRadius:12,overflow:"auto"}}});export{T as MobileSearchButton,T as default};
|
|
2
2
|
//# sourceMappingURL=filter-input.mobile.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-input.mobile.js","sources":["../../../../src/filter-bar/components/filter-input.mobile.tsx"],"sourcesContent":["// Mobile search drawer: opens drawer from bottom and focuses input\r\nimport { useEffect, useMemo, useRef, useState } from 'react'\r\nimport { Box, IconButton, InputBase, styled, Tooltip, SwipeableDrawer, Stack, Divider, Typography, Button, Chip } from '@mui/material'\r\nimport SearchIcon from '@mui/icons-material/Search'\r\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft'\r\nimport ClearIcon from '@mui/icons-material/Clear'\r\nimport NorthWestIcon from '@mui/icons-material/NorthWest'\r\nimport type { FC, RefObject } from 'react'\r\nimport { InputAdornmentRight } from './filter-input.units'\r\n// import SwipeableDrawer from '@mui/material/SwipeableDrawer'\r\n\r\nconst DEFAULT_PLACEHOLDER = 'Search...'\r\nconst HISTORY_KEY = 'dino_search_history_v1'\r\nconst MAX_HISTORY_STORED = 20\r\nconst MAX_HISTORY_DISPLAYED = 5\r\n\r\nconst Root = styled(Box)(({ theme }) => ({\r\n padding: theme.spacing(2),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: theme.spacing(1)\r\n}))\r\n\r\nconst Header = styled('div')(({ theme }) => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: theme.spacing(1)\r\n}))\r\n\r\n//#region InputSearch\r\ninterface IInputSearchProps {\r\n placeholder?: string\r\n inputRef?: RefObject<HTMLInputElement>\r\n hasKeyword?: boolean\r\n onEnter?: () => void\r\n onChange?: (value: string) => void\r\n onClear?: () => void\r\n}\r\nconst InputSearch: FC<IInputSearchProps> = (props) => {\r\n const { placeholder = DEFAULT_PLACEHOLDER, inputRef, hasKeyword, onEnter, onChange, onClear } = props\r\n const localRef = useRef<HTMLInputElement | null>(null)\r\n const refToUse = (inputRef as RefObject<HTMLInputElement>) ?? localRef\r\n\r\n useEffect(() => {\r\n // ensure focus opens mobile keyboard — sometimes requires a small delay\r\n const t = setTimeout(() => refToUse.current?.focus(), 50)\r\n return () => {\r\n // blur on unmount to dismiss soft keyboard before drawer closes\r\n try {\r\n refToUse.current?.blur()\r\n } catch {\r\n // ignore\r\n }\r\n clearTimeout(t)\r\n }\r\n }, [refToUse])\r\n\r\n return (\r\n <SearchInput\r\n fullWidth\r\n inputRef={refToUse}\r\n placeholder={placeholder}\r\n inputProps={{ autoCapitalize: 'off', autoComplete: 'off' }}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter') {\r\n e.preventDefault()\r\n onEnter?.()\r\n }\r\n }}\r\n onChange={(e) => onChange?.(e.target.value)}\r\n endAdornment={<InputAdornmentRight hasKeyword={hasKeyword} onSubmit={onEnter} onClear={onClear} />}\r\n />\r\n )\r\n}\r\n\r\nconst SearchInput = styled(InputBase)(({ theme }) => ({\r\n border: `1px solid ${theme.palette.divider}`,\r\n borderRadius: theme.shape.borderRadius,\r\n padding: theme.spacing(0.5, 1)\r\n}))\r\n//#endregion\r\n\r\n//#region SearchHistory\r\ninterface ISearchHistoryProps {\r\n history: string[]\r\n onSelect: (keyword: string) => void\r\n onFillInput?: (keyword: string) => void\r\n onClear?: () => void\r\n}\r\nconst SearchHistory: FC<ISearchHistoryProps> = (props) => {\r\n const { history, onSelect, onFillInput, onClear } = props\r\n if (!history || history.length === 0) {\r\n return (\r\n <SearchHistoryNoResults>\r\n <Typography variant='body2' color='textSecondary'>\r\n No recent searches.\r\n </Typography>\r\n </SearchHistoryNoResults>\r\n )\r\n }\r\n\r\n return (\r\n <SearchHistoryStyled className={searchHistoryClasses.root}>\r\n <Stack direction='row' justifyContent='space-between' alignItems='center' sx={{ mb: 1 }}>\r\n <Typography variant='subtitle2' fontWeight={600}>\r\n Recent Searches\r\n </Typography>\r\n {onClear && (\r\n <Tooltip title='Clear history' arrow>\r\n <IconButton size='small' onClick={onClear}>\r\n <ClearIcon fontSize='small' />\r\n </IconButton>\r\n </Tooltip>\r\n )}\r\n </Stack>\r\n <Stack className={searchHistoryClasses.items}>\r\n {history.map((keyword, idx) => (\r\n <Box key={idx} className={searchHistoryClasses.item} onClick={() => onSelect(keyword)} sx={{ cursor: 'pointer' }}>\r\n <Typography variant='body2' noWrap sx={{ flex: 1 }}>\r\n {keyword}\r\n </Typography>\r\n <Tooltip title='Fill input' arrow>\r\n <IconButton\r\n size='small'\r\n sx={{ color: 'text.secondary', '&:hover': { color: 'text.primary' } }}\r\n onClick={(e) => {\r\n e.stopPropagation()\r\n onFillInput?.(keyword)\r\n }}\r\n >\r\n <NorthWestIcon fontSize='small' />\r\n </IconButton>\r\n </Tooltip>\r\n </Box>\r\n ))}\r\n </Stack>\r\n </SearchHistoryStyled>\r\n )\r\n}\r\nconst searchHistoryClasses = {\r\n root: 'DinoSearchHistory-root',\r\n items: 'DinoSearchHistory-items',\r\n item: 'DinoSearchHistory-item'\r\n}\r\nconst SearchHistoryStyled = styled(Box)(({ theme }) => ({\r\n padding: '8px 16px',\r\n marginTop: 1,\r\n [`.${searchHistoryClasses.items}`]: {},\r\n [`.${searchHistoryClasses.item}`]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: theme.spacing(1),\r\n padding: theme.spacing(0.5, 1),\r\n marginBottom: theme.spacing(0.5),\r\n borderRadius: theme.shape.borderRadius,\r\n backgroundColor: 'rgba(0,0,0,0.02)',\r\n '&:hover': { backgroundColor: 'rgba(0,0,0,0.04)' },\r\n '&:first-of-type': { marginTop: 0 }\r\n }\r\n}))\r\n\r\nconst SearchHistoryNoResults = styled(Box)(({ theme }) => ({\r\n padding: theme.spacing(2),\r\n textAlign: 'center',\r\n color: theme.palette.text.secondary,\r\n border: `0.5px dashed ${theme.palette.divider}`,\r\n borderRadius: theme.shape.borderRadius,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n gap: theme.spacing(1),\r\n margin: theme.spacing(1, 2)\r\n}))\r\n\r\n//#endregion\r\n//#region Main Component\r\nexport interface IMobileSearchButtonProps {\r\n placeholder?: string\r\n onSearching?: (keyword: string) => void\r\n}\r\n\r\nexport const MobileSearchButton: FC<IMobileSearchButtonProps> = (props) => {\r\n const { onSearching, placeholder } = props\r\n\r\n const [isOpenDrawer, setIsOpenDrawer] = useState(false)\r\n const [history, setHistory] = useState<string[]>([])\r\n const [inputValue, setInputValue] = useState('')\r\n\r\n const refInput = useRef<HTMLInputElement | null>(null)\r\n\r\n // Load history from localStorage on mount\r\n useEffect(() => {\r\n if (typeof window === 'undefined') return\r\n try {\r\n const raw = localStorage.getItem(HISTORY_KEY)\r\n if (raw) {\r\n const parsed = JSON.parse(raw)\r\n if (Array.isArray(parsed)) setHistory(parsed)\r\n }\r\n } catch {\r\n // ignore\r\n }\r\n }, [])\r\n\r\n // Save keyword to history (dedupe, limit to MAX_HISTORY_STORED)\r\n const pushHistory = (keyword: string) => {\r\n const trimmed = keyword.trim()\r\n if (!trimmed) return\r\n\r\n setHistory((prev) => {\r\n const next = [trimmed, ...prev.filter((x) => x !== trimmed)].slice(0, MAX_HISTORY_STORED)\r\n try {\r\n localStorage.setItem(HISTORY_KEY, JSON.stringify(next))\r\n } catch {\r\n // ignore\r\n }\r\n return next\r\n })\r\n }\r\n\r\n // Filter history based on current input (limit to MAX_HISTORY_DISPLAYED)\r\n const filteredHistory = useMemo(() => {\r\n const finalValue = (inputValue || '').trim()\r\n if (!finalValue) return history.slice(0, MAX_HISTORY_DISPLAYED)\r\n return history.filter((kw) => kw.toLowerCase().includes(finalValue.toLowerCase())).slice(0, MAX_HISTORY_DISPLAYED)\r\n }, [inputValue, history])\r\n\r\n const handleBack = () => {\r\n setInputValue('')\r\n try {\r\n refInput.current?.blur()\r\n } catch {\r\n // ignore\r\n }\r\n setIsOpenDrawer(false)\r\n }\r\n\r\n const handleSearch = () => {\r\n const keyword = refInput.current?.value?.trim() || ''\r\n if (keyword) {\r\n pushHistory(keyword)\r\n onSearching?.(keyword)\r\n handleCloseDrawer()\r\n }\r\n }\r\n\r\n const handleSelectHistory = (keyword: string) => {\r\n if (refInput.current) refInput.current.value = keyword\r\n setInputValue(keyword)\r\n pushHistory(keyword)\r\n onSearching?.(keyword)\r\n handleCloseDrawer()\r\n }\r\n\r\n const handleFillInput = (keyword: string) => {\r\n if (refInput.current) refInput.current.value = keyword\r\n setInputValue(keyword)\r\n refInput.current?.focus()\r\n }\r\n\r\n const handleClearHistory = () => {\r\n setHistory([])\r\n try {\r\n localStorage.removeItem(HISTORY_KEY)\r\n } catch {\r\n // ignore\r\n }\r\n }\r\n\r\n const handleClearInput = () => {\r\n if (refInput.current) refInput.current.value = ''\r\n setInputValue('')\r\n refInput.current?.focus()\r\n }\r\n\r\n const handleCloseDrawer = () => {\r\n try {\r\n refInput.current?.blur()\r\n } catch {}\r\n setIsOpenDrawer(false)\r\n }\r\n\r\n const handleOpenDrawer = () => {\r\n setIsOpenDrawer(true)\r\n setInputValue('')\r\n if (refInput.current) refInput.current.value = ''\r\n }\r\n\r\n return (\r\n <>\r\n <Tooltip title='Search' arrow>\r\n <IconButton size='small' onClick={handleOpenDrawer} aria-label='Open search'>\r\n <SearchIcon />\r\n </IconButton>\r\n </Tooltip>\r\n <SwipeableDrawerStyled\r\n anchor='bottom'\r\n open={isOpenDrawer}\r\n onClose={handleCloseDrawer}\r\n onOpen={handleOpenDrawer}\r\n disableBackdropTransition={false}\r\n disableDiscovery={false}\r\n swipeAreaWidth={20}\r\n >\r\n <Box sx={{ display: 'flex', justifyContent: 'center', py: 1 }}>\r\n <Box sx={{ width: 40, height: 4, borderRadius: 2, backgroundColor: 'divider' }} />\r\n </Box>\r\n <Stack gap={1} style={{ flexDirection: 'row', alignItems: 'center', padding: '0 8px' }}>\r\n <Tooltip title='Back' arrow>\r\n <IconButton size='small' onClick={handleBack}>\r\n <ChevronLeftIcon fontSize='small' />\r\n </IconButton>\r\n </Tooltip>\r\n <InputSearch\r\n placeholder={placeholder}\r\n inputRef={refInput}\r\n hasKeyword={Boolean(inputValue)}\r\n onEnter={handleSearch}\r\n onChange={setInputValue}\r\n onClear={handleClearInput}\r\n />\r\n <Tooltip title='Search' arrow>\r\n <IconButton size='small' onClick={handleSearch} aria-label='Apply search'>\r\n <SearchIcon fontSize='small' />\r\n </IconButton>\r\n </Tooltip>\r\n </Stack>\r\n <Typography variant='caption' color='textSecondary' sx={{ px: 2, mt: 1 }}>\r\n Enter the value to search for and hit enter or click the enter icon to apply.\r\n </Typography>\r\n <SearchHistory history={filteredHistory} onSelect={handleSelectHistory} onFillInput={handleFillInput} onClear={handleClearHistory} />\r\n </SwipeableDrawerStyled>\r\n </>\r\n )\r\n}\r\n\r\nexport default MobileSearchButton\r\n\r\nconst SwipeableDrawerStyled = styled(SwipeableDrawer)(({ theme }) => ({\r\n zIndex: theme.zIndex.modal - 10, // ensure it's below any modal that might be opened from the filter bar\r\n '.MuiPaper-root': {\r\n height: 'calc(100svh - 56px)',\r\n maxHeight: 'calc(100svh - 56px)',\r\n borderTopLeftRadius: 12,\r\n borderTopRightRadius: 12,\r\n overflow: 'auto'\r\n }\r\n}))\r\n//#endregion\r\n"],"names":["HISTORY_KEY","styled","Box","_ref","theme","padding","spacing","display","flexDirection","gap","_ref2","alignItems","InputSearch","props","_props$placeholder","placeholder","DEFAULT_PLACEHOLDER","inputRef","hasKeyword","onEnter","onChange","onClear","localRef","useRef","refToUse","useEffect","t","setTimeout","_refToUse$current","current","focus","_refToUse$current2","blur","_unused","clearTimeout","_jsx","SearchInput","fullWidth","inputProps","autoCapitalize","autoComplete","onKeyDown","e","key","preventDefault","target","value","endAdornment","InputAdornmentRight","onSubmit","InputBase","_ref3","border","concat","palette","divider","borderRadius","shape","SearchHistory","history","onSelect","onFillInput","length","_jsxs","SearchHistoryStyled","className","searchHistoryClasses","root","Stack","direction","justifyContent","sx","mb","children","Typography","variant","fontWeight","Tooltip","title","arrow","IconButton","size","onClick","ClearIcon","fontSize","items","map","keyword","idx","item","cursor","noWrap","flex","color","stopPropagation","NorthWestIcon","SearchHistoryNoResults","_ref4","_defineProperty","marginTop","marginBottom","backgroundColor","_ref6","textAlign","text","secondary","margin","MobileSearchButton","onSearching","_useState","useState","_useState2","_slicedToArray","isOpenDrawer","setIsOpenDrawer","_useState3","_useState4","setHistory","_useState5","_useState6","inputValue","setInputValue","refInput","window","raw","localStorage","getItem","parsed","JSON","parse","Array","isArray","_unused2","pushHistory","trimmed","trim","prev","next","_toConsumableArray","filter","x","slice","setItem","stringify","_unused3","filteredHistory","useMemo","finalValue","kw","toLowerCase","includes","handleSearch","_refInput$current2","handleCloseDrawer","_refInput$current5","_unused6","handleOpenDrawer","_Fragment","SearchIcon","SwipeableDrawerStyled","anchor","open","onClose","onOpen","disableBackdropTransition","disableDiscovery","swipeAreaWidth","py","width","height","style","_refInput$current","_unused4","ChevronLeftIcon","Boolean","_refInput$current4","px","mt","_refInput$current3","removeItem","_unused5","SwipeableDrawer","_ref7","zIndex","modal","maxHeight","borderTopLeftRadius","borderTopRightRadius","overflow"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"filter-input.mobile.js","sources":["../../../../src/filter-bar/components/filter-input.mobile.tsx"],"sourcesContent":["// imports\r\nimport { useEffect, useMemo, useRef, useState } from 'react'\r\nimport { Box, IconButton, InputBase, styled, Tooltip, SwipeableDrawer, Stack, Typography } from '@mui/material'\r\nimport ClearIcon from '@mui/icons-material/Clear'\r\nimport SearchIcon from '@mui/icons-material/Search'\r\nimport NorthWestIcon from '@mui/icons-material/NorthWest'\r\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft'\r\nimport { InputAdornmentRight } from './filter-input.units'\r\n// types\r\nimport type { FC, RefObject } from 'react'\r\n\r\nconst DEFAULT_PLACEHOLDER = 'Search...'\r\nconst HISTORY_KEY = 'dino_search_history_v1'\r\nconst MAX_HISTORY_STORED = 20\r\nconst MAX_HISTORY_DISPLAYED = 5\r\n\r\n// const Root = styled(Box)(({ theme }) => ({\r\n// padding: theme.spacing(2),\r\n// display: 'flex',\r\n// flexDirection: 'column',\r\n// gap: theme.spacing(1)\r\n// }))\r\n\r\n// const Header = styled('div')(({ theme }) => ({\r\n// display: 'flex',\r\n// alignItems: 'center',\r\n// gap: theme.spacing(1)\r\n// }))\r\n\r\n//#region InputSearch\r\ninterface IInputSearchProps {\r\n placeholder?: string\r\n inputRef?: RefObject<HTMLInputElement>\r\n hasKeyword?: boolean\r\n onEnter?: () => void\r\n onChange?: (value: string) => void\r\n onClear?: () => void\r\n}\r\nconst InputSearch: FC<IInputSearchProps> = (props) => {\r\n const { placeholder = DEFAULT_PLACEHOLDER, inputRef, hasKeyword, onEnter, onChange, onClear } = props\r\n const localRef = useRef<HTMLInputElement | null>(null)\r\n const refToUse = (inputRef as RefObject<HTMLInputElement>) ?? localRef\r\n\r\n useEffect(() => {\r\n // ensure focus opens mobile keyboard — sometimes requires a small delay\r\n const t = setTimeout(() => refToUse.current?.focus(), 50)\r\n return () => {\r\n // blur on unmount to dismiss soft keyboard before drawer closes\r\n try {\r\n refToUse.current?.blur()\r\n } catch {\r\n // ignore\r\n }\r\n clearTimeout(t)\r\n }\r\n }, [refToUse])\r\n\r\n return (\r\n <SearchInput\r\n fullWidth\r\n inputRef={refToUse}\r\n placeholder={placeholder}\r\n inputProps={{ autoCapitalize: 'off', autoComplete: 'off' }}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter') {\r\n e.preventDefault()\r\n onEnter?.()\r\n }\r\n }}\r\n onChange={(e) => onChange?.(e.target.value)}\r\n endAdornment={<InputAdornmentRight hasKeyword={hasKeyword} onSubmit={onEnter} onClear={onClear} />}\r\n />\r\n )\r\n}\r\n\r\nconst SearchInput = styled(InputBase)(({ theme }) => ({\r\n border: `1px solid ${theme.palette.divider}`,\r\n borderRadius: theme.shape.borderRadius,\r\n padding: theme.spacing(0.5, 1)\r\n}))\r\n//#endregion\r\n\r\n//#region SearchHistory\r\ninterface ISearchHistoryProps {\r\n history: string[]\r\n onSelect: (keyword: string) => void\r\n onFillInput?: (keyword: string) => void\r\n onClear?: () => void\r\n}\r\nconst SearchHistory: FC<ISearchHistoryProps> = (props) => {\r\n const { history, onSelect, onFillInput, onClear } = props\r\n if (!history || history.length === 0) {\r\n return (\r\n <SearchHistoryNoResults>\r\n <Typography variant='body2' color='textSecondary'>\r\n No recent searches.\r\n </Typography>\r\n </SearchHistoryNoResults>\r\n )\r\n }\r\n\r\n return (\r\n <SearchHistoryStyled className={searchHistoryClasses.root}>\r\n <Stack direction='row' justifyContent='space-between' alignItems='center' sx={{ mb: 1 }}>\r\n <Typography variant='subtitle2' fontWeight={600}>\r\n Recent Searches\r\n </Typography>\r\n {onClear && (\r\n <Tooltip title='Clear history' arrow>\r\n <IconButton size='small' onClick={onClear}>\r\n <ClearIcon fontSize='small' />\r\n </IconButton>\r\n </Tooltip>\r\n )}\r\n </Stack>\r\n <Stack className={searchHistoryClasses.items}>\r\n {history.map((keyword, idx) => (\r\n <Box key={idx} className={searchHistoryClasses.item} onClick={() => onSelect(keyword)} sx={{ cursor: 'pointer' }}>\r\n <Typography variant='body2' noWrap sx={{ flex: 1 }}>\r\n {keyword}\r\n </Typography>\r\n <Tooltip title='Fill input' arrow>\r\n <IconButton\r\n size='small'\r\n sx={{ color: 'text.secondary', '&:hover': { color: 'text.primary' } }}\r\n onClick={(e) => {\r\n e.stopPropagation()\r\n onFillInput?.(keyword)\r\n }}\r\n >\r\n <NorthWestIcon fontSize='small' />\r\n </IconButton>\r\n </Tooltip>\r\n </Box>\r\n ))}\r\n </Stack>\r\n </SearchHistoryStyled>\r\n )\r\n}\r\nconst searchHistoryClasses = {\r\n root: 'DinoSearchHistory-root',\r\n items: 'DinoSearchHistory-items',\r\n item: 'DinoSearchHistory-item'\r\n}\r\nconst SearchHistoryStyled = styled(Box)(({ theme }) => ({\r\n padding: '8px 16px',\r\n marginTop: 1,\r\n [`.${searchHistoryClasses.items}`]: {},\r\n [`.${searchHistoryClasses.item}`]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: theme.spacing(1),\r\n padding: theme.spacing(0.5, 1),\r\n marginBottom: theme.spacing(0.5),\r\n borderRadius: theme.shape.borderRadius,\r\n backgroundColor: 'rgba(0,0,0,0.02)',\r\n '&:hover': { backgroundColor: 'rgba(0,0,0,0.04)' },\r\n '&:first-of-type': { marginTop: 0 }\r\n }\r\n}))\r\n\r\nconst SearchHistoryNoResults = styled(Box)(({ theme }) => ({\r\n padding: theme.spacing(2),\r\n textAlign: 'center',\r\n color: theme.palette.text.secondary,\r\n border: `0.5px dashed ${theme.palette.divider}`,\r\n borderRadius: theme.shape.borderRadius,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n gap: theme.spacing(1),\r\n margin: theme.spacing(1, 2)\r\n}))\r\n\r\n//#endregion\r\n//#region Main Component\r\nexport interface IMobileSearchButtonProps {\r\n placeholder?: string\r\n onSearching?: (keyword: string) => void\r\n}\r\n\r\nexport const MobileSearchButton: FC<IMobileSearchButtonProps> = (props) => {\r\n const { onSearching, placeholder } = props\r\n\r\n const [isOpenDrawer, setIsOpenDrawer] = useState(false)\r\n const [history, setHistory] = useState<string[]>([])\r\n const [inputValue, setInputValue] = useState('')\r\n\r\n const refInput = useRef<HTMLInputElement | null>(null)\r\n\r\n // Load history from localStorage on mount\r\n useEffect(() => {\r\n if (typeof window === 'undefined') return\r\n try {\r\n const raw = localStorage.getItem(HISTORY_KEY)\r\n if (raw) {\r\n const parsed = JSON.parse(raw)\r\n if (Array.isArray(parsed)) setHistory(parsed)\r\n }\r\n } catch {\r\n // ignore\r\n }\r\n }, [])\r\n\r\n // Save keyword to history (dedupe, limit to MAX_HISTORY_STORED)\r\n const pushHistory = (keyword: string) => {\r\n const trimmed = keyword.trim()\r\n if (!trimmed) return\r\n\r\n setHistory((prev) => {\r\n const next = [trimmed, ...prev.filter((x) => x !== trimmed)].slice(0, MAX_HISTORY_STORED)\r\n try {\r\n localStorage.setItem(HISTORY_KEY, JSON.stringify(next))\r\n } catch {\r\n // ignore\r\n }\r\n return next\r\n })\r\n }\r\n\r\n // Filter history based on current input (limit to MAX_HISTORY_DISPLAYED)\r\n const filteredHistory = useMemo(() => {\r\n const finalValue = (inputValue || '').trim()\r\n if (!finalValue) return history.slice(0, MAX_HISTORY_DISPLAYED)\r\n return history.filter((kw) => kw.toLowerCase().includes(finalValue.toLowerCase())).slice(0, MAX_HISTORY_DISPLAYED)\r\n }, [inputValue, history])\r\n\r\n const handleBack = () => {\r\n setInputValue('')\r\n try {\r\n refInput.current?.blur()\r\n } catch {\r\n // ignore\r\n }\r\n setIsOpenDrawer(false)\r\n }\r\n\r\n const handleSearch = () => {\r\n const keyword = refInput.current?.value?.trim() || ''\r\n if (keyword) {\r\n pushHistory(keyword)\r\n onSearching?.(keyword)\r\n handleCloseDrawer()\r\n }\r\n }\r\n\r\n const handleSelectHistory = (keyword: string) => {\r\n if (refInput.current) refInput.current.value = keyword\r\n setInputValue(keyword)\r\n pushHistory(keyword)\r\n onSearching?.(keyword)\r\n handleCloseDrawer()\r\n }\r\n\r\n const handleFillInput = (keyword: string) => {\r\n if (refInput.current) refInput.current.value = keyword\r\n setInputValue(keyword)\r\n refInput.current?.focus()\r\n }\r\n\r\n const handleClearHistory = () => {\r\n setHistory([])\r\n try {\r\n localStorage.removeItem(HISTORY_KEY)\r\n } catch {\r\n // ignore\r\n }\r\n }\r\n\r\n const handleClearInput = () => {\r\n if (refInput.current) refInput.current.value = ''\r\n setInputValue('')\r\n refInput.current?.focus()\r\n }\r\n\r\n const handleCloseDrawer = () => {\r\n try {\r\n refInput.current?.blur()\r\n } catch {}\r\n setIsOpenDrawer(false)\r\n }\r\n\r\n const handleOpenDrawer = () => {\r\n setIsOpenDrawer(true)\r\n setInputValue('')\r\n if (refInput.current) refInput.current.value = ''\r\n }\r\n\r\n return (\r\n <>\r\n <Tooltip title='Search' arrow>\r\n <IconButton size='small' onClick={handleOpenDrawer} aria-label='Open search'>\r\n <SearchIcon />\r\n </IconButton>\r\n </Tooltip>\r\n <SwipeableDrawerStyled\r\n anchor='bottom'\r\n open={isOpenDrawer}\r\n onClose={handleCloseDrawer}\r\n onOpen={handleOpenDrawer}\r\n disableBackdropTransition={false}\r\n disableDiscovery={false}\r\n swipeAreaWidth={20}\r\n >\r\n <Box sx={{ display: 'flex', justifyContent: 'center', py: 1 }}>\r\n <Box sx={{ width: 40, height: 4, borderRadius: 2, backgroundColor: 'divider' }} />\r\n </Box>\r\n <Stack gap={1} style={{ flexDirection: 'row', alignItems: 'center', padding: '0 8px' }}>\r\n <Tooltip title='Back' arrow>\r\n <IconButton size='small' onClick={handleBack}>\r\n <ChevronLeftIcon fontSize='small' />\r\n </IconButton>\r\n </Tooltip>\r\n <InputSearch\r\n placeholder={placeholder}\r\n inputRef={refInput}\r\n hasKeyword={Boolean(inputValue)}\r\n onEnter={handleSearch}\r\n onChange={setInputValue}\r\n onClear={handleClearInput}\r\n />\r\n <Tooltip title='Search' arrow>\r\n <IconButton size='small' onClick={handleSearch} aria-label='Apply search'>\r\n <SearchIcon fontSize='small' />\r\n </IconButton>\r\n </Tooltip>\r\n </Stack>\r\n <Typography variant='caption' color='textSecondary' sx={{ px: 2, mt: 1 }}>\r\n Enter the value to search for and hit enter or click the enter icon to apply.\r\n </Typography>\r\n <SearchHistory history={filteredHistory} onSelect={handleSelectHistory} onFillInput={handleFillInput} onClear={handleClearHistory} />\r\n </SwipeableDrawerStyled>\r\n </>\r\n )\r\n}\r\n\r\nexport default MobileSearchButton\r\n\r\nconst SwipeableDrawerStyled = styled(SwipeableDrawer)(({ theme }) => ({\r\n zIndex: theme.zIndex.modal - 10, // ensure it's below any modal that might be opened from the filter bar\r\n '.MuiPaper-root': {\r\n height: 'calc(100svh - 56px)',\r\n maxHeight: 'calc(100svh - 56px)',\r\n borderTopLeftRadius: 12,\r\n borderTopRightRadius: 12,\r\n overflow: 'auto'\r\n }\r\n}))\r\n//#endregion\r\n"],"names":["HISTORY_KEY","InputSearch","props","_props$placeholder","placeholder","DEFAULT_PLACEHOLDER","inputRef","hasKeyword","onEnter","onChange","onClear","localRef","useRef","refToUse","useEffect","t","setTimeout","_refToUse$current","current","focus","_refToUse$current2","blur","_unused","clearTimeout","_jsx","SearchInput","fullWidth","inputProps","autoCapitalize","autoComplete","onKeyDown","e","key","preventDefault","target","value","endAdornment","InputAdornmentRight","onSubmit","styled","InputBase","_ref","theme","border","concat","palette","divider","borderRadius","shape","padding","spacing","SearchHistory","history","onSelect","onFillInput","length","_jsxs","SearchHistoryStyled","className","searchHistoryClasses","root","Stack","direction","justifyContent","alignItems","sx","mb","children","Typography","variant","fontWeight","Tooltip","title","arrow","IconButton","size","onClick","ClearIcon","fontSize","items","map","keyword","idx","Box","item","cursor","noWrap","flex","color","stopPropagation","NorthWestIcon","SearchHistoryNoResults","_ref2","_defineProperty","marginTop","display","gap","marginBottom","backgroundColor","_ref4","textAlign","text","secondary","flexDirection","margin","MobileSearchButton","onSearching","_useState","useState","_useState2","_slicedToArray","isOpenDrawer","setIsOpenDrawer","_useState3","_useState4","setHistory","_useState5","_useState6","inputValue","setInputValue","refInput","window","raw","localStorage","getItem","parsed","JSON","parse","Array","isArray","_unused2","pushHistory","trimmed","trim","prev","next","_toConsumableArray","filter","x","slice","setItem","stringify","_unused3","filteredHistory","useMemo","finalValue","kw","toLowerCase","includes","handleSearch","_refInput$current2","handleCloseDrawer","_refInput$current5","_unused6","handleOpenDrawer","_Fragment","SearchIcon","SwipeableDrawerStyled","anchor","open","onClose","onOpen","disableBackdropTransition","disableDiscovery","swipeAreaWidth","py","width","height","style","_refInput$current","_unused4","ChevronLeftIcon","Boolean","_refInput$current4","px","mt","_refInput$current3","removeItem","_unused5","SwipeableDrawer","_ref5","zIndex","modal","maxHeight","borderTopLeftRadius","borderTopRightRadius","overflow"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as r,objectSpread2 as l}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as e,jsxs as t}from"react/jsx-runtime";import{useContext as o,useMemo as a}from"react";import{styled as i,iconButtonClasses as n,buttonClasses as c,Collapse as s,Box as u,Button as m,IconButton as d}from"@mui/material";import p from"@mui/icons-material/ClearAll";import{KeySpecial as b}from"../types.js";import{useFilterActions as f}from"../hooks.js";import{mapSpecialLabel as h}from"../helpers.js";import{createChipViewers as
|
|
1
|
+
import{defineProperty as r,objectSpread2 as l}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as e,jsxs as t}from"react/jsx-runtime";import{useContext as o,useMemo as a}from"react";import{styled as i,iconButtonClasses as n,buttonClasses as c,Collapse as s,Box as u,Button as m,IconButton as d}from"@mui/material";import p from"@mui/icons-material/ClearAll";import{KeySpecial as b}from"../types.js";import{useFilterActions as f}from"../hooks.js";import{mapSpecialLabel as h}from"../helpers.js";import{createChipViewers as v}from"./chip-viewer.js";import{FilterBarContext as g}from"../index.context.js";function x(r){var i=k,n=v();return function(c){var v=o(g),x=v.filterState,k=f(v),C=a(function(){return function(r,e){var t,o=r.fields,a=r.enableQuickSearch,i=void 0===a||a,n=l({},o),c=b.quickSearch;return i?n[c]?null!==(t=n[c])&&void 0!==t&&t.label||(n[c]=l(l({},n[c]),{},{label:h[c]})):n[c]={label:h[c]}:delete n[c],Object.keys(e||{}).reduce(function(r,l){var t,o=null==n?void 0:n[l],a=(null==o?void 0:o.label)||l.toString(),i=null==e||null===(t=e[l])||void 0===t?void 0:t.values,c=(Array.isArray(i)?i:[]).filter(Boolean).map(function(r){var l;return{value:r.toString(),label:null==o||null===(l=o.labelFormatter)||void 0===l?void 0:l.call(o,r)}});return c.length>0&&r.push({field:l,label:a,items:c}),r},[]).sort(function(r,l){return r.field===c?-1:l.field===c?1:0})}(r,x.storeFilter)},[x,r]);return e(s,{in:C.length>0,timeout:"auto",unmountOnExit:!0,children:t(y,{className:i.root,sx:c.sx,children:[e("div",{className:i.scrollHorizontal,children:e(n,{label:"Filters",value:C,placement:"horizontal",onRemove:k.removeFilterByFieldValue})}),t(u,{children:[e(m,{size:"small",color:"error",variant:"text",onClick:k.clearAllFilters,className:i.buttonClearAll,startIcon:e(p,{}),"aria-label":"Clear all filters",children:"Clear All"}),e(d,{size:"small",color:"error",onClick:k.clearAllFilters,className:i.buttonClearAll,"aria-label":"Clear all filters",children:e(p,{})})]})]})})}}var k={root:"DinoFilterSummary-root",scrollHorizontal:"DinoFilterSummary-scrollHorizontal",buttonClearAll:"DinoFilterSummary-buttonClearAll"},y=i("div")(function(l){var e=l.theme;return r(r(r({},"&.".concat(k.root),{display:"flex",alignItems:"center",padding:e.spacing(0,1.5)}),".".concat(k.scrollHorizontal),{overflowX:"auto",overflowY:"hidden",WebkitOverflowScrolling:"touch",scrollbarHeight:"thin",display:"flex",flexWrap:"nowrap",minWidth:0,flex:1,"& > *":{minWidth:"max-content",flexShrink:0},"&::-webkit-scrollbar":{height:"8px",background:"transparent"},"&::-webkit-scrollbar-thumb":{background:e.palette.grey[300],borderRadius:"8px",minHeight:"8px",transition:"background 0.2s"},"&::-webkit-scrollbar-thumb:hover":{background:e.palette.primary.light},"&::-webkit-scrollbar-track":{background:e.palette.grey[100],borderRadius:"8px"},scrollbarColor:"".concat(e.palette.grey[300]," ").concat(e.palette.grey[100]),scrollbarWidth:"thin"}),".".concat(k.buttonClearAll),r(r(r({marginLeft:e.spacing(1)},"&:not(.".concat(n.root,")"),{textTransform:"none",fontWeight:500,lineHeight:2,padding:e.spacing(0,1)}),"&.".concat(n.root),{display:"none"}),e.breakpoints.down("md"),r(r({},"&.".concat(c.root),{display:"none"}),"&.".concat(n.root),{display:"flex"})))});export{x as createFilterSummary};
|
|
2
2
|
//# sourceMappingURL=filter-summary.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-summary.js","sources":["../../../../src/filter-bar/components/filter-summary.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { useContext, useMemo } from 'react'\r\nimport { Box, Button, buttonClasses, Collapse, IconButton, iconButtonClasses, styled } from '@mui/material'\r\nimport ClearAllIcon from '@mui/icons-material/ClearAll'\r\nimport { KeySpecial } from '../types'\r\nimport { useFilterActions } from '../hooks'\r\nimport { mapSpecialLabel } from '../helpers'\r\nimport { createChipViewers } from './chip-viewer'\r\nimport { FilterBarContext } from '../index.context'\r\n// types\r\nimport type { FC } from 'react'\r\nimport type { TFieldStore, TFieldValid } from '../types'\r\nimport type { IFilterBarContext } from '../index.context'\r\nimport type { IChipViewerItem, TChipViewerGroup } from './chip-viewer'\r\nimport type { IFilterSummaryConfig, IFilterSummaryProps, TFieldSummaryConfigs } from './filter-summary.types'\r\n\r\nfunction mapFilterStateToFilterData<T>(config: IFilterSummaryConfig<T>, store?: TFieldStore<T>): TChipViewerGroup<T>[] {\r\n const { fields, enableQuickSearch = true } = config\r\n\r\n // Ensure 'quickSearch' is always included in the summary, even if it's not in the config or store\r\n // If enableQuickSearch is false, it will not be added to the summary or removed if it exists in the config\r\n const mergedConfig: TFieldSummaryConfigs<T> = { ...fields }\r\n const qsKey = KeySpecial.quickSearch\r\n if (enableQuickSearch) {\r\n if (!mergedConfig[qsKey]) {\r\n mergedConfig[qsKey] = { label: mapSpecialLabel[qsKey] }\r\n } else if (!mergedConfig[qsKey]?.label) {\r\n mergedConfig[qsKey] = { ...mergedConfig[qsKey], label: mapSpecialLabel[qsKey] }\r\n }\r\n } else {\r\n delete mergedConfig[qsKey]\r\n }\r\n\r\n const keys = Object.keys(store || {}) as (keyof TFieldStore<T>)[]\r\n const groups = keys.reduce<TChipViewerGroup<T>[]>((acc, key) => {\r\n const fieldConfig = mergedConfig?.[key]\r\n const label = fieldConfig?.label || key.toString()\r\n const values = store?.[key]?.values as TFieldValid[] | undefined\r\n const items = Array.isArray(values) ? values : []\r\n const summaryItems = items.filter(Boolean).map<IChipViewerItem<T>>((item) => ({ value: item.toString() }))\r\n if (summaryItems.length > 0) {\r\n acc.push({ field: key, label, items: summaryItems })\r\n }\r\n return acc\r\n }, [])\r\n const finalGroups = groups.sort((a, b) => {\r\n if (a.field === qsKey) return -1\r\n if (b.field === qsKey) return 1\r\n return 0\r\n })\r\n return finalGroups\r\n}\r\n\r\nexport function createFilterSummary<T>(config: IFilterSummaryConfig<T>) {\r\n const classes = filterSummaryClasses\r\n const ChipViewers = createChipViewers<T>()\r\n\r\n const FilterSummary: FC<IFilterSummaryProps<T>> = (props) => {\r\n const context = useContext(FilterBarContext) as IFilterBarContext<T>\r\n const { filterState } = context\r\n const filterActions = useFilterActions<T>(context)\r\n\r\n const filterData = useMemo(() => {\r\n return mapFilterStateToFilterData(config, filterState.storeFilter)\r\n }, [filterState, config])\r\n\r\n // Old logic to calculate filterData, now moved to useMemo above\r\n // if (filterData.length === 0) return null\r\n\r\n return (\r\n <Collapse in={filterData.length > 0} timeout='auto' unmountOnExit>\r\n <FilterSummaryStyled className={classes.root} sx={props.sx}>\r\n <div className={classes.scrollHorizontal}>\r\n <ChipViewers label='Filters' value={filterData} placement='horizontal' onRemove={filterActions.removeFilterByFieldValue} />\r\n </div>\r\n <Box>\r\n <Button\r\n size='small'\r\n color='error'\r\n variant='text'\r\n onClick={filterActions.clearAllFilters}\r\n className={classes.buttonClearAll}\r\n startIcon={<ClearAllIcon />}\r\n aria-label='Clear all filters'\r\n >\r\n Clear All\r\n </Button>\r\n <IconButton\r\n size='small'\r\n color='error'\r\n onClick={filterActions.clearAllFilters}\r\n className={classes.buttonClearAll}\r\n aria-label='Clear all filters'\r\n >\r\n <ClearAllIcon />\r\n </IconButton>\r\n </Box>\r\n </FilterSummaryStyled>\r\n </Collapse>\r\n )\r\n }\r\n\r\n return FilterSummary\r\n}\r\n\r\nconst filterSummaryClasses = {\r\n root: 'DinoFilterSummary-root',\r\n scrollHorizontal: 'DinoFilterSummary-scrollHorizontal',\r\n fieldItem: 'DinoFilterSummary-fieldItem',\r\n fieldLabel: 'DinoFilterSummary-fieldLabel',\r\n fieldValue: 'DinoFilterSummary-fieldValue',\r\n buttonClearAll: 'DinoFilterSummary-buttonClearAll'\r\n}\r\n\r\nconst FilterSummaryStyled = styled('div')(({ theme }) => ({\r\n [`&.${filterSummaryClasses.root}`]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: theme.spacing(0, 1.5)\r\n },\r\n [`.${filterSummaryClasses.scrollHorizontal}`]: {\r\n overflowX: 'auto',\r\n overflowY: 'hidden',\r\n WebkitOverflowScrolling: 'touch',\r\n scrollbarHeight: 'thin',\r\n // The content doesn't wrap to the next line and is wider than the container, displaying a horizontal scroll bar.\r\n display: 'flex',\r\n flexWrap: 'nowrap',\r\n minWidth: 0,\r\n flex: 1,\r\n '& > *': { minWidth: 'max-content', flexShrink: 0 },\r\n // Custom scrollbar\r\n '&::-webkit-scrollbar': { height: '8px', background: 'transparent' },\r\n '&::-webkit-scrollbar-thumb': {\r\n background: theme.palette.grey[300],\r\n borderRadius: '8px',\r\n minHeight: '8px',\r\n transition: 'background 0.2s'\r\n },\r\n '&::-webkit-scrollbar-thumb:hover': { background: theme.palette.primary.light },\r\n '&::-webkit-scrollbar-track': { background: theme.palette.grey[100], borderRadius: '8px' },\r\n // Firefox\r\n scrollbarColor: `${theme.palette.grey[300]} ${theme.palette.grey[100]}`,\r\n scrollbarWidth: 'thin'\r\n },\r\n [`.${filterSummaryClasses.buttonClearAll}`]: {\r\n marginLeft: theme.spacing(1),\r\n [`&:not(.${iconButtonClasses.root})`]: {\r\n textTransform: 'none',\r\n fontWeight: 500,\r\n lineHeight: 2,\r\n padding: theme.spacing(0, 1)\r\n },\r\n [`&.${iconButtonClasses.root}`]: { display: 'none' },\r\n [theme.breakpoints.down('md')]: {\r\n [`&.${buttonClasses.root}`]: { display: 'none' },\r\n [`&.${iconButtonClasses.root}`]: { display: 'flex' }\r\n }\r\n }\r\n}))\r\n"],"names":["createFilterSummary","config","classes","filterSummaryClasses","ChipViewers","createChipViewers","props","context","useContext","FilterBarContext","filterState","filterActions","useFilterActions","filterData","useMemo","store","_mergedConfig$qsKey","fields","_config$enableQuickSe","enableQuickSearch","mergedConfig","_objectSpread","qsKey","KeySpecial","quickSearch","label","mapSpecialLabel","Object","keys","reduce","acc","key","_store$key","fieldConfig","toString","values","summaryItems","Array","isArray","filter","Boolean","map","item","value","length","push","field","items","sort","a","b","mapFilterStateToFilterData","storeFilter","_jsx","Collapse","in","timeout","unmountOnExit","children","_jsxs","FilterSummaryStyled","className","root","sx","scrollHorizontal","placement","onRemove","removeFilterByFieldValue","Box","Button","size","color","variant","onClick","clearAllFilters","buttonClearAll","startIcon","ClearAllIcon","IconButton","styled","_ref","theme","_defineProperty","concat","display","alignItems","padding","spacing","overflowX","overflowY","WebkitOverflowScrolling","scrollbarHeight","flexWrap","minWidth","flex","flexShrink","height","background","palette","grey","borderRadius","minHeight","transition","primary","light","scrollbarColor","scrollbarWidth","marginLeft","iconButtonClasses","textTransform","fontWeight","lineHeight","breakpoints","down","buttonClasses"],"mappings":"ymBAuDM,SAAUA,EAAuBC,GACrC,IAAMC,EAAUC,EACVC,EAAcC,IA+CpB,OA7CkD,SAACC,GACjD,IAAMC,EAAUC,EAAWC,GACnBC,EAAgBH,EAAhBG,YACFC,EAAgBC,EAAoBL,GAEpCM,EAAaC,EAAQ,WACzB,OA/CN,SAAuCb,EAAiCc,GACtE,IAMuBC,EANfC,EAAqChB,EAArCgB,OAAMC,EAA+BjB,EAA7BkB,kBAAAA,OAAoB,IAAHD,GAAOA,EAIlCE,EAAYC,EAAA,CAAA,EAAiCJ,GAC7CK,EAAQC,EAAWC,YA4BzB,OA3BIL,EACGC,EAAaE,WAEPN,EAACI,EAAaE,UAAM,IAAAN,GAAnBA,EAAqBS,QAC/BL,EAAaE,GAAMD,EAAAA,EAAQD,CAAAA,EAAAA,EAAaE,IAAM,GAAA,CAAEG,MAAOC,EAAgBJ,MAFvEF,EAAaE,GAAS,CAAEG,MAAOC,EAAgBJ,WAK1CF,EAAaE,GAGTK,OAAOC,KAAKb,GAAS,CAAA,GACdc,OAA8B,SAACC,EAAKC,GAAO,IAAAC,EACvDC,EAAcb,aAAAA,EAAAA,EAAeW,GAC7BN,GAAQQ,aAAW,EAAXA,EAAaR,QAASM,EAAIG,WAClCC,EAASpB,SAAY,QAAPiB,EAALjB,EAAQgB,UAARC,IAAYA,OAAZA,EAAAA,EAAcG,OAEvBC,GADQC,MAAMC,QAAQH,GAAUA,EAAS,IACpBI,OAAOC,SAASC,IAAwB,SAACC,GAAI,MAAM,CAAEC,MAAOD,EAAKR,WAAY,GAIxG,OAHIE,EAAaQ,OAAS,GACxBd,EAAIe,KAAK,CAAEC,MAAOf,EAAKN,MAAAA,EAAOsB,MAAOX,IAEhCN,CACR,EAAE,IACwBkB,KAAK,SAACC,EAAGC,GAClC,OAAID,EAAEH,QAAUxB,GAAgB,EAC5B4B,EAAEJ,QAAUxB,EAAc,EACvB,CACT,EAEF,CAYa6B,CAA2BlD,EAAQS,EAAY0C,YACxD,EAAG,CAAC1C,EAAaT,IAKjB,OACEoD,EAACC,EAAQ,CAACC,GAAI1C,EAAW+B,OAAS,EAAGY,QAAQ,OAAOC,eAClD,EAAAC,SAAAC,EAACC,EAAmB,CAACC,UAAW3D,EAAQ4D,KAAMC,GAAIzD,EAAMyD,GACtDL,SAAA,CAAAL,EAAA,MAAA,CAAKQ,UAAW3D,EAAQ8D,iBAAgBN,SACtCL,EAACjD,EAAY,CAAAqB,MAAM,UAAUkB,MAAO9B,EAAYoD,UAAU,aAAaC,SAAUvD,EAAcwD,6BAEjGR,EAACS,EACC,CAAAV,SAAA,CAAAL,EAACgB,EAAM,CACLC,KAAK,QACLC,MAAM,QACNC,QAAQ,OACRC,QAAS9D,EAAc+D,gBACvBb,UAAW3D,EAAQyE,eACnBC,UAAWvB,EAACwB,EAAe,IAAA,aAChB,oBAGJnB,SAAA,cACTL,EAACyB,EACC,CAAAR,KAAK,QACLC,MAAM,QACNE,QAAS9D,EAAc+D,gBACvBb,UAAW3D,EAAQyE,eAAc,aACtB,oBAEXjB,SAAAL,EAACwB,EAAY,CAAA,YAMxB,CAGH,CAEA,IAAM1E,EAAuB,CAC3B2D,KAAM,yBACNE,iBAAkB,qCAIlBW,eAAgB,oCAGZf,EAAsBmB,EAAO,MAAPA,CAAc,SAAAC,GAAA,IAAGC,EAAKD,EAALC,MAAK,OAAAC,EAAAA,EAAAA,EAAAC,CAAAA,EAAAA,KAAAA,OAC1ChF,EAAqB2D,MAAS,CAClCsB,QAAS,OACTC,WAAY,SACZC,QAASL,EAAMM,QAAQ,EAAG,WAC3BJ,OACIhF,EAAqB6D,kBAAqB,CAC7CwB,UAAW,OACXC,UAAW,SACXC,wBAAyB,QACzBC,gBAAiB,OAEjBP,QAAS,OACTQ,SAAU,SACVC,SAAU,EACVC,KAAM,EACN,QAAS,CAAED,SAAU,cAAeE,WAAY,GAEhD,uBAAwB,CAAEC,OAAQ,MAAOC,WAAY,eACrD,6BAA8B,CAC5BA,WAAYhB,EAAMiB,QAAQC,KAAK,KAC/BC,aAAc,MACdC,UAAW,MACXC,WAAY,mBAEd,mCAAoC,CAAEL,WAAYhB,EAAMiB,QAAQK,QAAQC,OACxE,6BAA8B,CAAEP,WAAYhB,EAAMiB,QAAQC,KAAK,KAAMC,aAAc,OAEnFK,eAAc,GAAAtB,OAAKF,EAAMiB,QAAQC,KAAK,UAAIhB,OAAIF,EAAMiB,QAAQC,KAAK,MACjEO,eAAgB,SACjB,IAAAvB,OACIhF,EAAqBwE,gBAAcO,EAAAA,EAAAA,EAAA,CACtCyB,WAAY1B,EAAMM,QAAQ,IAAE,UAAAJ,OACjByB,EAAkB9C,KAAU,KAAA,CACrC+C,cAAe,OACfC,WAAY,IACZC,WAAY,EACZzB,QAASL,EAAMM,QAAQ,EAAG,UAC3BJ,OACKyB,EAAkB9C,MAAS,CAAEsB,QAAS,SAC3CH,EAAM+B,YAAYC,KAAK,MAAK/B,EAAAA,EAAAC,CAAAA,EAAAA,KAAAA,OACrB+B,EAAcpD,MAAS,CAAEsB,QAAS,cAAQD,OAC1CyB,EAAkB9C,MAAS,CAAEsB,QAAS,UAAQ"}
|
|
1
|
+
{"version":3,"file":"filter-summary.js","sources":["../../../../src/filter-bar/components/filter-summary.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { useContext, useMemo } from 'react'\r\nimport { Box, Button, buttonClasses, Collapse, IconButton, iconButtonClasses, styled } from '@mui/material'\r\nimport ClearAllIcon from '@mui/icons-material/ClearAll'\r\nimport { KeySpecial } from '../types'\r\nimport { useFilterActions } from '../hooks'\r\nimport { mapSpecialLabel } from '../helpers'\r\nimport { createChipViewers } from './chip-viewer'\r\nimport { FilterBarContext } from '../index.context'\r\n// types\r\nimport type { FC } from 'react'\r\nimport type { TFieldStore, TFieldValid } from '../types'\r\nimport type { IFilterBarContext } from '../index.context'\r\nimport type { IChipViewerItem, TChipViewerGroup } from './chip-viewer'\r\nimport type { IFilterSummaryConfig, IFilterSummaryProps, TFieldSummaryConfigs } from './filter-summary.types'\r\n\r\nfunction mapFilterStateToFilterData<T>(config: IFilterSummaryConfig<T>, store?: TFieldStore<T>): TChipViewerGroup<T>[] {\r\n const { fields, enableQuickSearch = true } = config\r\n\r\n // Ensure 'quickSearch' is always included in the summary, even if it's not in the config or store\r\n // If enableQuickSearch is false, it will not be added to the summary or removed if it exists in the config\r\n const mergedConfig: TFieldSummaryConfigs<T> = { ...fields }\r\n const qsKey = KeySpecial.quickSearch\r\n if (enableQuickSearch) {\r\n if (!mergedConfig[qsKey]) {\r\n mergedConfig[qsKey] = { label: mapSpecialLabel[qsKey] }\r\n } else if (!mergedConfig[qsKey]?.label) {\r\n mergedConfig[qsKey] = { ...mergedConfig[qsKey], label: mapSpecialLabel[qsKey] }\r\n }\r\n } else {\r\n delete mergedConfig[qsKey]\r\n }\r\n\r\n const keys = Object.keys(store || {}) as (keyof TFieldStore<T>)[]\r\n const groups = keys.reduce<TChipViewerGroup<T>[]>((acc, key) => {\r\n const fieldConfig = mergedConfig?.[key]\r\n const label = fieldConfig?.label || key.toString()\r\n const values = store?.[key]?.values as TFieldValid[] | undefined\r\n const items = Array.isArray(values) ? values : []\r\n const summaryItems = items.filter(Boolean).map<IChipViewerItem<T>>((item) => {\r\n return { value: item.toString(), label: fieldConfig?.labelFormatter?.(item) }\r\n })\r\n if (summaryItems.length > 0) {\r\n acc.push({ field: key, label, items: summaryItems })\r\n }\r\n return acc\r\n }, [])\r\n const finalGroups = groups.sort((a, b) => {\r\n if (a.field === qsKey) return -1\r\n if (b.field === qsKey) return 1\r\n return 0\r\n })\r\n return finalGroups\r\n}\r\n\r\nexport function createFilterSummary<T>(config: IFilterSummaryConfig<T>) {\r\n const classes = filterSummaryClasses\r\n const ChipViewers = createChipViewers<T>()\r\n\r\n const FilterSummary: FC<IFilterSummaryProps<T>> = (props) => {\r\n const context = useContext(FilterBarContext) as IFilterBarContext<T>\r\n const { filterState } = context\r\n const filterActions = useFilterActions<T>(context)\r\n\r\n const filterData = useMemo(() => {\r\n return mapFilterStateToFilterData(config, filterState.storeFilter)\r\n }, [filterState, config])\r\n\r\n // Old logic to calculate filterData, now moved to useMemo above\r\n // if (filterData.length === 0) return null\r\n\r\n return (\r\n <Collapse in={filterData.length > 0} timeout='auto' unmountOnExit>\r\n <FilterSummaryStyled className={classes.root} sx={props.sx}>\r\n <div className={classes.scrollHorizontal}>\r\n <ChipViewers label='Filters' value={filterData} placement='horizontal' onRemove={filterActions.removeFilterByFieldValue} />\r\n </div>\r\n <Box>\r\n <Button\r\n size='small'\r\n color='error'\r\n variant='text'\r\n onClick={filterActions.clearAllFilters}\r\n className={classes.buttonClearAll}\r\n startIcon={<ClearAllIcon />}\r\n aria-label='Clear all filters'\r\n >\r\n Clear All\r\n </Button>\r\n <IconButton\r\n size='small'\r\n color='error'\r\n onClick={filterActions.clearAllFilters}\r\n className={classes.buttonClearAll}\r\n aria-label='Clear all filters'\r\n >\r\n <ClearAllIcon />\r\n </IconButton>\r\n </Box>\r\n </FilterSummaryStyled>\r\n </Collapse>\r\n )\r\n }\r\n\r\n return FilterSummary\r\n}\r\n\r\nconst filterSummaryClasses = {\r\n root: 'DinoFilterSummary-root',\r\n scrollHorizontal: 'DinoFilterSummary-scrollHorizontal',\r\n fieldItem: 'DinoFilterSummary-fieldItem',\r\n fieldLabel: 'DinoFilterSummary-fieldLabel',\r\n fieldValue: 'DinoFilterSummary-fieldValue',\r\n buttonClearAll: 'DinoFilterSummary-buttonClearAll'\r\n}\r\n\r\nconst FilterSummaryStyled = styled('div')(({ theme }) => ({\r\n [`&.${filterSummaryClasses.root}`]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: theme.spacing(0, 1.5)\r\n },\r\n [`.${filterSummaryClasses.scrollHorizontal}`]: {\r\n overflowX: 'auto',\r\n overflowY: 'hidden',\r\n WebkitOverflowScrolling: 'touch',\r\n scrollbarHeight: 'thin',\r\n // The content doesn't wrap to the next line and is wider than the container, displaying a horizontal scroll bar.\r\n display: 'flex',\r\n flexWrap: 'nowrap',\r\n minWidth: 0,\r\n flex: 1,\r\n '& > *': { minWidth: 'max-content', flexShrink: 0 },\r\n // Custom scrollbar\r\n '&::-webkit-scrollbar': { height: '8px', background: 'transparent' },\r\n '&::-webkit-scrollbar-thumb': {\r\n background: theme.palette.grey[300],\r\n borderRadius: '8px',\r\n minHeight: '8px',\r\n transition: 'background 0.2s'\r\n },\r\n '&::-webkit-scrollbar-thumb:hover': { background: theme.palette.primary.light },\r\n '&::-webkit-scrollbar-track': { background: theme.palette.grey[100], borderRadius: '8px' },\r\n // Firefox\r\n scrollbarColor: `${theme.palette.grey[300]} ${theme.palette.grey[100]}`,\r\n scrollbarWidth: 'thin'\r\n },\r\n [`.${filterSummaryClasses.buttonClearAll}`]: {\r\n marginLeft: theme.spacing(1),\r\n [`&:not(.${iconButtonClasses.root})`]: {\r\n textTransform: 'none',\r\n fontWeight: 500,\r\n lineHeight: 2,\r\n padding: theme.spacing(0, 1)\r\n },\r\n [`&.${iconButtonClasses.root}`]: { display: 'none' },\r\n [theme.breakpoints.down('md')]: {\r\n [`&.${buttonClasses.root}`]: { display: 'none' },\r\n [`&.${iconButtonClasses.root}`]: { display: 'flex' }\r\n }\r\n }\r\n}))\r\n"],"names":["createFilterSummary","config","classes","filterSummaryClasses","ChipViewers","createChipViewers","props","context","useContext","FilterBarContext","filterState","filterActions","useFilterActions","filterData","useMemo","store","_mergedConfig$qsKey","fields","_config$enableQuickSe","enableQuickSearch","mergedConfig","_objectSpread","qsKey","KeySpecial","quickSearch","label","mapSpecialLabel","Object","keys","reduce","acc","key","_store$key","fieldConfig","toString","values","summaryItems","Array","isArray","filter","Boolean","map","item","_fieldConfig$labelFor","value","labelFormatter","call","length","push","field","items","sort","a","b","mapFilterStateToFilterData","storeFilter","_jsx","Collapse","in","timeout","unmountOnExit","children","_jsxs","FilterSummaryStyled","className","root","sx","scrollHorizontal","placement","onRemove","removeFilterByFieldValue","Box","Button","size","color","variant","onClick","clearAllFilters","buttonClearAll","startIcon","ClearAllIcon","IconButton","styled","_ref","theme","_defineProperty","concat","display","alignItems","padding","spacing","overflowX","overflowY","WebkitOverflowScrolling","scrollbarHeight","flexWrap","minWidth","flex","flexShrink","height","background","palette","grey","borderRadius","minHeight","transition","primary","light","scrollbarColor","scrollbarWidth","marginLeft","iconButtonClasses","textTransform","fontWeight","lineHeight","breakpoints","down","buttonClasses"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{objectWithoutProperties as e,objectSpread2 as t,defineProperty as o}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as
|
|
1
|
+
import{objectWithoutProperties as e,objectSpread2 as t,defineProperty as o,slicedToArray as i}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as n,jsxs as r}from"react/jsx-runtime";import{useMemo as a,useRef as l,useState as d,useLayoutEffect as c}from"react";import{styled as s,Popper as p,Fade as u,Box as m,alpha as h,Typography as f,Tooltip as g,IconButton as b}from"@mui/material";import x from"@mui/icons-material/Close";var v=["children"],C=["title","children","onClose","disableGutter","disableMinMaxWidth","slots","anchorEl"],w=["children"],M=["children"],y=s(function(o){var i=o.children,a=e(o,v);return n(p,t(t({},a),{},{children:function(e){var o=e.TransitionProps;return n(u,t(t({},o),{},{timeout:350,children:r("div",{children:[" ",i]})}))}}))})(function(e){return{zIndex:e.theme.zIndex.modal+1,maxWidth:"100%"}}),W=function(o){var s=a(function(){return j},[]),p=o.title,u=o.children,m=o.onClose,h=o.disableGutter,v=o.disableMinMaxWidth,w=o.slots;o.anchorEl;var M=e(o,C),y=l(null),W=d(void 0),P=i(W,2),D=P[0],G=P[1];c(function(){var e=y.current;if(e){var t=function(){var t=e.getBoundingClientRect().top;G("".concat(Math.max(window.innerHeight-t-24,160),"px"))};return t(),window.addEventListener("resize",t),function(){return window.removeEventListener("resize",t)}}},[]);var T=[s.root];return h&&T.push(s.disableGutter),v&&T.push(s.disableMinMaxWidth),r(z,t(t({ref:y,className:T.join(" "),style:D?{maxHeight:D}:void 0},M),{},{children:[r("div",{className:s.header,children:[null==w?void 0:w.beforeTitle,n(f,{variant:"subtitle1",className:s.title,children:p||"Menu Title"}),null==w?void 0:w.afterTitle,n(g,{title:"Close",placement:"top",arrow:!0,children:n(b,{size:"small",className:s.buttonClose,onClick:m,children:n(x,{fontSize:"small"})})})]}),u]}))},P=function(o){var i=o.children,r=e(o,w);return n(m,t(t({className:j.footer},r),{},{children:i}))},D=function(o){var i=o.children,r=e(o,M);return n(m,t(t({className:j.body},r),{},{children:i}))},j={root:"DinoPopperCustom-root",body:"DinoPopperCustom-body",header:"DinoPopperCustom-header",footer:"DinoPopperCustom-footer",title:"DinoPopperCustom-title",buttonClose:"DinoPopperCustom-buttonClose",disableGutter:"DinoPopperCustom-disableGutter",disableMinMaxWidth:"DinoPopperCustom-disableMinMaxWidth"},z=s(m)(function(e){var t=e.theme;return o(o(o(o(o(o(o({},"&.".concat(j.root),o({borderRadius:t.shape.borderRadius,boxShadow:"rgba(0, 0, 0, 0.06) 0px 5px 22px, rgba(0, 0, 0, 0.04) 0px 0px 0px 0.5px",backgroundColor:t.palette.background.paper,overflow:"hidden",display:"flex",flexDirection:"column"},"&:not(.".concat(j.disableMinMaxWidth,")"),o({minWidth:"350px",maxWidth:"550px"},t.breakpoints.down("sm"),{minWidth:"240px",maxWidth:"90vw"}))),".".concat(j.body),{padding:t.spacing(1),flex:1,minHeight:0,overflow:"auto"}),".".concat(j.header),{display:"flex",alignItems:"center",justifyContent:"space-between",gap:t.spacing(.5),backgroundColor:t.palette.grey[900],padding:t.spacing(.5,1),color:t.palette.common.white}),".".concat(j.title),{fontSize:"0.875rem",fontWeight:600,lineHeight:1,flexGrow:1}),".".concat(j.buttonClose),{color:t.palette.common.white,transition:t.transitions.create("color"),".MuiSvgIcon-root":{transition:t.transitions.create("transform")},"&:hover":{color:t.palette.error.light,backgroundColor:h(t.palette.common.white,.1),".MuiSvgIcon-root":{transform:"rotate(90deg)"}}}),".".concat(j.footer),o({display:"flex",justifyContent:"flex-end",gap:t.spacing(1),borderTop:"1px solid ".concat(t.palette.grey[100]),padding:t.spacing(.5,1)},".MuiButtonBase-root",{textTransform:"none",fontWeight:500,lineHeight:1,padding:t.spacing(1,1.5)})),"&.".concat(j.disableGutter),o(o(o({},".".concat(j.body),{padding:0}),".".concat(j.header),{padding:t.spacing(.5,1)}),".".concat(j.footer),{padding:t.spacing(.5,1.5),margin:t.spacing(1,1,0)}))});export{D as PopperBody,W as PopperContent,y as PopperCustom,P as PopperFooter};
|
|
2
2
|
//# sourceMappingURL=popper-custom.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"popper-custom.js","sources":["../../../../src/filter-bar/components/popper-custom.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { useMemo, useState } from 'react'\r\nimport { alpha, Box, Fade, IconButton, Popper, styled, Tooltip, Typography } from '@mui/material'\r\nimport CloseIcon from '@mui/icons-material/Close'\r\n// types\r\nimport type { FC, PropsWithChildren } from 'react'\r\nimport type { BoxProps, ButtonProps, PopperProps } from '@mui/material'\r\n\r\nexport const usePopperState = () => {\r\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\r\n const isOpen = Boolean(anchorEl)\r\n\r\n const handleToggle: React.MouseEventHandler<HTMLElement> = (event) => {\r\n setAnchorEl((prev) => (prev ? null : event.currentTarget))\r\n }\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null)\r\n }\r\n\r\n return { anchorEl, isOpen, handleToggle, handleClose }\r\n}\r\n\r\ninterface IPopperProps extends Omit<PopperProps, 'children'>, PropsWithChildren {}\r\n\r\nexport const PopperCustom = styled(({ children, ...props }: IPopperProps) => (\r\n <Popper {...props}>\r\n {({ TransitionProps }) => (\r\n <Fade {...TransitionProps} timeout={350}>\r\n <div> {children}</div>\r\n </Fade>\r\n )}\r\n </Popper>\r\n))(({ theme }) => ({\r\n zIndex: theme.zIndex.modal + 1,\r\n maxWidth: '100%'\r\n}))\r\n\r\nexport interface PopperContentProps extends BoxProps {\r\n sx?: BoxProps['sx']\r\n title?: string\r\n children: React.ReactNode\r\n onClose?: ButtonProps['onClick']\r\n disableGutter?: boolean\r\n disableMinMaxWidth?: boolean\r\n slots?: {\r\n afterTitle?: React.ReactNode\r\n beforeTitle?: React.ReactNode\r\n }\r\n}\r\n\r\nexport const PopperContent: FC<PopperContentProps> = (props) => {\r\n const classes = useMemo(() => popperCustomClasses, [])\r\n const { title, children, onClose, disableGutter, disableMinMaxWidth, slots, ...rest } = props\r\n\r\n const rootClasses = [classes.root]\r\n if (disableGutter) rootClasses.push(classes.disableGutter)\r\n if (disableMinMaxWidth) rootClasses.push(classes.disableMinMaxWidth)\r\n\r\n return (\r\n <PopperContentStyled className={rootClasses.join(' ')} {...rest}>\r\n <div className={classes.header}>\r\n {slots?.beforeTitle}\r\n <Typography variant='subtitle1' className={classes.title}>\r\n {title || 'Menu Title'}\r\n </Typography>\r\n {slots?.afterTitle}\r\n <Tooltip title='Close' placement='top' arrow>\r\n <IconButton size='small' className={classes.buttonClose} onClick={onClose}>\r\n <CloseIcon fontSize='small' />\r\n </IconButton>\r\n </Tooltip>\r\n </div>\r\n {children}\r\n </PopperContentStyled>\r\n )\r\n}\r\n\r\nexport const PopperFooter: FC<BoxProps & Required<PropsWithChildren>> = ({ children, ...rest }) => (\r\n <Box className={popperCustomClasses.footer} {...rest}>\r\n {children}\r\n </Box>\r\n)\r\n\r\nexport const PopperBody: FC<BoxProps & Required<PropsWithChildren>> = ({ children, ...rest }) => (\r\n <Box className={popperCustomClasses.body} {...rest}>\r\n {children}\r\n </Box>\r\n)\r\n\r\nconst popperCustomClasses = {\r\n root: 'DinoPopperCustom-root',\r\n body: 'DinoPopperCustom-body',\r\n header: 'DinoPopperCustom-header',\r\n footer: 'DinoPopperCustom-footer',\r\n title: 'DinoPopperCustom-title',\r\n buttonClose: 'DinoPopperCustom-buttonClose',\r\n disableGutter: 'DinoPopperCustom-disableGutter',\r\n disableMinMaxWidth: 'DinoPopperCustom-disableMinMaxWidth'\r\n}\r\n\r\nconst PopperContentStyled = styled(Box)(({ theme }) => ({\r\n [`&.${popperCustomClasses.root}`]: {\r\n borderRadius: theme.shape.borderRadius,\r\n boxShadow: 'rgba(0, 0, 0, 0.06) 0px 5px 22px, rgba(0, 0, 0, 0.04) 0px 0px 0px 0.5px',\r\n backgroundColor: theme.palette.background.paper,\r\n overflow: 'hidden',\r\n [`&:not(.${popperCustomClasses.disableMinMaxWidth})`]: {\r\n minWidth: '350px',\r\n maxWidth: '550px',\r\n [theme.breakpoints.down('sm')]: {\r\n minWidth: '240px',\r\n maxWidth: '90vw'\r\n }\r\n }\r\n },\r\n [`.${popperCustomClasses.body}`]: {\r\n padding: theme.spacing(1),\r\n maxHeight: '70vh',\r\n overflow: 'auto'\r\n },\r\n [`.${popperCustomClasses.header}`]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n gap: theme.spacing(0.5),\r\n backgroundColor: theme.palette.grey[900],\r\n padding: theme.spacing(0.5, 1),\r\n color: theme.palette.common.white\r\n },\r\n [`.${popperCustomClasses.title}`]: {\r\n fontSize: '0.875rem',\r\n fontWeight: 600,\r\n lineHeight: 1,\r\n flexGrow: 1\r\n },\r\n [`.${popperCustomClasses.buttonClose}`]: {\r\n color: theme.palette.common.white,\r\n transition: theme.transitions.create('color'),\r\n '.MuiSvgIcon-root': { transition: theme.transitions.create('transform') },\r\n '&:hover': {\r\n color: theme.palette.error.light,\r\n backgroundColor: alpha(theme.palette.common.white, 0.1),\r\n '.MuiSvgIcon-root': { transform: 'rotate(90deg)' }\r\n }\r\n },\r\n [`.${popperCustomClasses.footer}`]: {\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n gap: theme.spacing(1),\r\n borderTop: `1px solid ${theme.palette.grey[100]}`,\r\n padding: theme.spacing(0.5, 1),\r\n [`.MuiButtonBase-root`]: {\r\n textTransform: 'none',\r\n fontWeight: 500,\r\n lineHeight: 1,\r\n padding: theme.spacing(1, 1.5)\r\n }\r\n },\r\n [`&.${popperCustomClasses.disableGutter}`]: {\r\n [`.${popperCustomClasses.body}`]: { padding: 0 },\r\n [`.${popperCustomClasses.header}`]: { padding: theme.spacing(0.5, 1) },\r\n [`.${popperCustomClasses.footer}`]: { padding: theme.spacing(0.5, 1.5), margin: theme.spacing(1, 1, 0) }\r\n }\r\n}))\r\n"],"names":["PopperCustom","styled","_ref","children","props","_objectWithoutProperties","_excluded","_jsx","Popper","_objectSpread","_ref2","TransitionProps","Fade","timeout","_jsxs","_ref3","zIndex","theme","modal","maxWidth","PopperContent","classes","useMemo","popperCustomClasses","title","onClose","disableGutter","disableMinMaxWidth","slots","rest","_excluded2","rootClasses","root","push","PopperContentStyled","className","join","header","beforeTitle","Typography","variant","afterTitle","Tooltip","placement","arrow","IconButton","size","buttonClose","onClick","CloseIcon","fontSize","PopperFooter","_ref4","_excluded3","Box","footer","PopperBody","_ref5","_excluded4","body","_ref6","_defineProperty","concat","borderRadius","shape","boxShadow","backgroundColor","palette","background","paper","overflow","minWidth","breakpoints","down","padding","spacing","maxHeight","display","alignItems","justifyContent","gap","grey","color","common","white","fontWeight","lineHeight","flexGrow","transition","transitions","create","error","light","alpha","transform","borderTop","textTransform","margin"],"mappings":"wfA2BaA,EAAeC,EAAO,SAAAC,GAAA,IAAGC,EAAQD,EAARC,SAAaC,EAAKC,EAAAH,EAAAI,GAAA,OACtDC,EAACC,EAAMC,EAAAA,KAAKL,GAAK,GAAA,CACdD,SAAA,SAAAO,GAAA,IAAGC,EAAeD,EAAfC,gBAAe,OACjBJ,EAACK,EAAIH,EAAAA,KAAKE,GAAe,GAAA,CAAEE,QAAS,IAClCV,SAAAW,EAAA,MAAA,CAAAX,SAAA,CAAA,IAAOA,OACF,IAEF,EAPiBF,CAQzB,SAAAc,GAAQ,MAAQ,CACjBC,OADSD,EAALE,MACUD,OAAOE,MAAQ,EAC7BC,SAAU,OACX,GAeYC,EAAwC,SAAChB,GACpD,IAAMiB,EAAUC,EAAQ,WAAA,OAAMC,CAAmB,EAAE,IAC3CC,EAAgFpB,EAAhFoB,MAAOrB,EAAyEC,EAAzED,SAAUsB,EAA+DrB,EAA/DqB,QAASC,EAAsDtB,EAAtDsB,cAAeC,EAAuCvB,EAAvCuB,mBAAoBC,EAAmBxB,EAAnBwB,MAAUC,EAAIxB,EAAKD,EAAK0B,GAEvFC,EAAc,CAACV,EAAQW,MAI7B,OAHIN,GAAeK,EAAYE,KAAKZ,EAAQK,eACxCC,GAAoBI,EAAYE,KAAKZ,EAAQM,oBAG/Cb,EAACoB,EAAmBzB,EAAAA,EAAA,CAAC0B,UAAWJ,EAAYK,KAAK,MAAUP,GAAI,GAAA,CAC7D1B,SAAA,CAAAW,EAAA,MAAA,CAAKqB,UAAWd,EAAQgB,OAAMlC,SAAA,CAC3ByB,aAAK,EAALA,EAAOU,YACR/B,EAACgC,GAAWC,QAAQ,YAAYL,UAAWd,EAAQG,MAChDrB,SAAAqB,GAAS,eAEXI,aAAK,EAALA,EAAOa,WACRlC,EAACmC,EAAQ,CAAAlB,MAAM,QAAQmB,UAAU,MAAMC,OAAK,EAAAzC,SAC1CI,EAACsC,EAAU,CAACC,KAAK,QAAQX,UAAWd,EAAQ0B,YAAaC,QAASvB,EAChEtB,SAAAI,EAAC0C,EAAU,CAAAC,SAAS,iBAIzB/C,KAGP,EAEagD,EAA2D,SAA/CC,GAAA,IAAkDjD,EAAQiD,EAARjD,SAAa0B,EAAIxB,EAAA+C,EAAAC,GAAA,OAC1F9C,EAAC+C,EAAG7C,EAAAA,EAAA,CAAC0B,UAAWZ,EAAoBgC,QAAY1B,GAAI,GAAA,CAAA1B,SACjDA,IACG,EAGKqD,EAAyD,SAA/CC,GAAA,IAAkDtD,EAAQsD,EAARtD,SAAa0B,EAAIxB,EAAAoD,EAAAC,GAAA,OACxFnD,EAAC+C,EAAG7C,EAAAA,EAAA,CAAC0B,UAAWZ,EAAoBoC,MAAU9B,GAAI,GAAA,CAAA1B,SAC/CA,IACG,EAGFoB,EAAsB,CAC1BS,KAAM,wBACN2B,KAAM,wBACNtB,OAAQ,0BACRkB,OAAQ,0BACR/B,MAAO,yBACPuB,YAAa,+BACbrB,cAAe,iCACfC,mBAAoB,uCAGhBO,EAAsBjC,EAAOqD,EAAPrD,CAAY,SAAA2D,GAAA,IAAG3C,EAAK2C,EAAL3C,MAAK,OAAA4C,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,UAAAC,OACxCvC,EAAoBS,MAAI6B,EAAA,CAC5BE,aAAc9C,EAAM+C,MAAMD,aAC1BE,UAAW,0EACXC,gBAAiBjD,EAAMkD,QAAQC,WAAWC,MAC1CC,SAAU,UAAQ,UAAAR,OACPvC,EAAoBI,wBAAkBkC,EAAA,CAC/CU,SAAU,QACVpD,SAAU,SACTF,EAAMuD,YAAYC,KAAK,MAAQ,CAC9BF,SAAU,QACVpD,SAAU,eACX2C,OAGAvC,EAAoBoC,MAAS,CAChCe,QAASzD,EAAM0D,QAAQ,GACvBC,UAAW,OACXN,SAAU,aACXR,OACIvC,EAAoBc,QAAW,CAClCwC,QAAS,OACTC,WAAY,SACZC,eAAgB,gBAChBC,IAAK/D,EAAM0D,QAAQ,IACnBT,gBAAiBjD,EAAMkD,QAAQc,KAAK,KACpCP,QAASzD,EAAM0D,QAAQ,GAAK,GAC5BO,MAAOjE,EAAMkD,QAAQgB,OAAOC,YAC7BtB,OACIvC,EAAoBC,OAAU,CACjC0B,SAAU,WACVmC,WAAY,IACZC,WAAY,EACZC,SAAU,QACXzB,OACIvC,EAAoBwB,aAAgB,CACvCmC,MAAOjE,EAAMkD,QAAQgB,OAAOC,MAC5BI,WAAYvE,EAAMwE,YAAYC,OAAO,SACrC,mBAAoB,CAAEF,WAAYvE,EAAMwE,YAAYC,OAAO,cAC3D,UAAW,CACTR,MAAOjE,EAAMkD,QAAQwB,MAAMC,MAC3B1B,gBAAiB2B,EAAM5E,EAAMkD,QAAQgB,OAAOC,MAAO,IACnD,mBAAoB,CAAEU,UAAW,wBAEpChC,OACIvC,EAAoBgC,QAAMM,EAAA,CAC7BgB,QAAS,OACTE,eAAgB,WAChBC,IAAK/D,EAAM0D,QAAQ,GACnBoB,UAAS,aAAAjC,OAAe7C,EAAMkD,QAAQc,KAAK,MAC3CP,QAASzD,EAAM0D,QAAQ,GAAK,IACH,sBAAA,CACvBqB,cAAe,OACfX,WAAY,IACZC,WAAY,EACZZ,QAASzD,EAAM0D,QAAQ,EAAG,aAC3Bb,OAEGvC,EAAoBG,eAAamC,EAAAA,EAAAA,EAAAC,CAAAA,EAAAA,IAAAA,OAChCvC,EAAoBoC,MAAS,CAAEe,QAAS,QAAGZ,OAC3CvC,EAAoBc,QAAW,CAAEqC,QAASzD,EAAM0D,QAAQ,GAAK,SAAIb,OACjEvC,EAAoBgC,QAAW,CAAEmB,QAASzD,EAAM0D,QAAQ,GAAK,KAAMsB,OAAQhF,EAAM0D,QAAQ,EAAG,EAAG,KAAI"}
|
|
1
|
+
{"version":3,"file":"popper-custom.js","sources":["../../../../src/filter-bar/components/popper-custom.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { useLayoutEffect, useMemo, useRef, useState } from 'react'\r\nimport { alpha, Box, Fade, IconButton, Popper, styled, Tooltip, Typography } from '@mui/material'\r\nimport CloseIcon from '@mui/icons-material/Close'\r\n// types\r\nimport type { FC, PropsWithChildren } from 'react'\r\nimport type { BoxProps, ButtonProps, PopperProps } from '@mui/material'\r\n\r\nexport const usePopperState = () => {\r\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\r\n const isOpen = Boolean(anchorEl)\r\n\r\n const handleToggle: React.MouseEventHandler<HTMLElement> = (event) => {\r\n setAnchorEl((prev) => (prev ? null : event.currentTarget))\r\n }\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null)\r\n }\r\n\r\n return { anchorEl, isOpen, handleToggle, handleClose }\r\n}\r\n\r\ninterface IPopperProps extends Omit<PopperProps, 'children'>, PropsWithChildren {}\r\n\r\nexport const PopperCustom = styled(({ children, ...props }: IPopperProps) => (\r\n <Popper {...props}>\r\n {({ TransitionProps }) => (\r\n <Fade {...TransitionProps} timeout={350}>\r\n <div> {children}</div>\r\n </Fade>\r\n )}\r\n </Popper>\r\n))(({ theme }) => ({\r\n zIndex: theme.zIndex.modal + 1,\r\n maxWidth: '100%'\r\n}))\r\n\r\nexport interface PopperContentProps extends BoxProps {\r\n sx?: BoxProps['sx']\r\n title?: string\r\n children: React.ReactNode\r\n onClose?: ButtonProps['onClick']\r\n disableGutter?: boolean\r\n disableMinMaxWidth?: boolean\r\n anchorEl?: HTMLElement | null\r\n slots?: {\r\n afterTitle?: React.ReactNode\r\n beforeTitle?: React.ReactNode\r\n }\r\n}\r\n\r\nexport const PopperContent: FC<PopperContentProps> = (props) => {\r\n const classes = useMemo(() => popperCustomClasses, [])\r\n const { title, children, onClose, disableGutter, disableMinMaxWidth, slots, anchorEl, ...rest } = props\r\n const containerRef = useRef<HTMLDivElement>(null)\r\n const [maxHeight, setMaxHeight] = useState<string | undefined>(undefined)\r\n\r\n useLayoutEffect(() => {\r\n const el = containerRef.current\r\n if (!el) return\r\n const calculate = () => {\r\n const { top } = el.getBoundingClientRect()\r\n setMaxHeight(`${Math.max(window.innerHeight - top - 24, 160)}px`)\r\n }\r\n calculate()\r\n window.addEventListener('resize', calculate)\r\n return () => window.removeEventListener('resize', calculate)\r\n }, [])\r\n\r\n const rootClasses = [classes.root]\r\n if (disableGutter) rootClasses.push(classes.disableGutter)\r\n if (disableMinMaxWidth) rootClasses.push(classes.disableMinMaxWidth)\r\n\r\n return (\r\n <PopperContentStyled ref={containerRef} className={rootClasses.join(' ')} style={maxHeight ? { maxHeight } : undefined} {...rest}>\r\n <div className={classes.header}>\r\n {slots?.beforeTitle}\r\n <Typography variant='subtitle1' className={classes.title}>\r\n {title || 'Menu Title'}\r\n </Typography>\r\n {slots?.afterTitle}\r\n <Tooltip title='Close' placement='top' arrow>\r\n <IconButton size='small' className={classes.buttonClose} onClick={onClose}>\r\n <CloseIcon fontSize='small' />\r\n </IconButton>\r\n </Tooltip>\r\n </div>\r\n {children}\r\n </PopperContentStyled>\r\n )\r\n}\r\n\r\nexport const PopperFooter: FC<BoxProps & Required<PropsWithChildren>> = ({ children, ...rest }) => (\r\n <Box className={popperCustomClasses.footer} {...rest}>\r\n {children}\r\n </Box>\r\n)\r\n\r\nexport const PopperBody: FC<BoxProps & Required<PropsWithChildren>> = ({ children, ...rest }) => (\r\n <Box className={popperCustomClasses.body} {...rest}>\r\n {children}\r\n </Box>\r\n)\r\n\r\nconst popperCustomClasses = {\r\n root: 'DinoPopperCustom-root',\r\n body: 'DinoPopperCustom-body',\r\n header: 'DinoPopperCustom-header',\r\n footer: 'DinoPopperCustom-footer',\r\n title: 'DinoPopperCustom-title',\r\n buttonClose: 'DinoPopperCustom-buttonClose',\r\n disableGutter: 'DinoPopperCustom-disableGutter',\r\n disableMinMaxWidth: 'DinoPopperCustom-disableMinMaxWidth'\r\n}\r\n\r\nconst PopperContentStyled = styled(Box)(({ theme }) => ({\r\n [`&.${popperCustomClasses.root}`]: {\r\n borderRadius: theme.shape.borderRadius,\r\n boxShadow: 'rgba(0, 0, 0, 0.06) 0px 5px 22px, rgba(0, 0, 0, 0.04) 0px 0px 0px 0.5px',\r\n backgroundColor: theme.palette.background.paper,\r\n overflow: 'hidden',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n [`&:not(.${popperCustomClasses.disableMinMaxWidth})`]: {\r\n minWidth: '350px',\r\n maxWidth: '550px',\r\n [theme.breakpoints.down('sm')]: {\r\n minWidth: '240px',\r\n maxWidth: '90vw'\r\n }\r\n }\r\n },\r\n [`.${popperCustomClasses.body}`]: {\r\n padding: theme.spacing(1),\r\n flex: 1,\r\n minHeight: 0,\r\n overflow: 'auto'\r\n },\r\n [`.${popperCustomClasses.header}`]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n gap: theme.spacing(0.5),\r\n backgroundColor: theme.palette.grey[900],\r\n padding: theme.spacing(0.5, 1),\r\n color: theme.palette.common.white\r\n },\r\n [`.${popperCustomClasses.title}`]: {\r\n fontSize: '0.875rem',\r\n fontWeight: 600,\r\n lineHeight: 1,\r\n flexGrow: 1\r\n },\r\n [`.${popperCustomClasses.buttonClose}`]: {\r\n color: theme.palette.common.white,\r\n transition: theme.transitions.create('color'),\r\n '.MuiSvgIcon-root': { transition: theme.transitions.create('transform') },\r\n '&:hover': {\r\n color: theme.palette.error.light,\r\n backgroundColor: alpha(theme.palette.common.white, 0.1),\r\n '.MuiSvgIcon-root': { transform: 'rotate(90deg)' }\r\n }\r\n },\r\n [`.${popperCustomClasses.footer}`]: {\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n gap: theme.spacing(1),\r\n borderTop: `1px solid ${theme.palette.grey[100]}`,\r\n padding: theme.spacing(0.5, 1),\r\n [`.MuiButtonBase-root`]: {\r\n textTransform: 'none',\r\n fontWeight: 500,\r\n lineHeight: 1,\r\n padding: theme.spacing(1, 1.5)\r\n }\r\n },\r\n [`&.${popperCustomClasses.disableGutter}`]: {\r\n [`.${popperCustomClasses.body}`]: { padding: 0 },\r\n [`.${popperCustomClasses.header}`]: { padding: theme.spacing(0.5, 1) },\r\n [`.${popperCustomClasses.footer}`]: { padding: theme.spacing(0.5, 1.5), margin: theme.spacing(1, 1, 0) }\r\n }\r\n}))\r\n"],"names":["PopperCustom","styled","_ref","children","props","_objectWithoutProperties","_excluded","_jsx","Popper","_objectSpread","_ref2","TransitionProps","Fade","timeout","_jsxs","_ref3","zIndex","theme","modal","maxWidth","PopperContent","classes","useMemo","popperCustomClasses","title","onClose","disableGutter","disableMinMaxWidth","slots","anchorEl","rest","_excluded2","containerRef","useRef","_useState3","useState","undefined","_useState4","_slicedToArray","maxHeight","setMaxHeight","useLayoutEffect","el","current","calculate","top","getBoundingClientRect","concat","Math","max","window","innerHeight","addEventListener","removeEventListener","rootClasses","root","push","PopperContentStyled","ref","className","join","style","header","beforeTitle","Typography","variant","afterTitle","Tooltip","placement","arrow","IconButton","size","buttonClose","onClick","CloseIcon","fontSize","PopperFooter","_ref4","_excluded3","Box","footer","PopperBody","_ref5","_excluded4","body","_ref6","_defineProperty","borderRadius","shape","boxShadow","backgroundColor","palette","background","paper","overflow","display","flexDirection","minWidth","breakpoints","down","padding","spacing","flex","minHeight","alignItems","justifyContent","gap","grey","color","common","white","fontWeight","lineHeight","flexGrow","transition","transitions","create","error","light","alpha","transform","borderTop","textTransform","margin"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{objectWithoutProperties as e,objectSpread2 as o}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as r,jsxs as t}from"react/jsx-runtime";import{styled as
|
|
1
|
+
import{objectWithoutProperties as e,objectSpread2 as o}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as r,jsxs as t}from"react/jsx-runtime";import{styled as n,Tooltip as l,IconButton as i,alpha as a,Chip as c,ToggleButtonGroup as u,ToggleButton as m,Typography as h}from"@mui/material";import s from"@mui/icons-material/ChevronLeft";import{PopperContent as p}from"./popper-custom.js";var d=["children"],f=function(e){var o=e.onClose;return r(p,{title:"Filter by",onClose:o,children:r(h,{variant:"body2",sx:{p:2,textAlign:"center"},children:"No field to filter"})})},g=n(function(t){var n=t.children,a=e(t,d);return r(l,{title:"Back",placement:"top",arrow:!0,children:r(i,o(o({},a),{},{children:n||r(s,{fontSize:"small"})}))})})(function(e){var o=e.theme;return{color:o.palette.common.white,transition:o.transitions.create("color"),"&:hover":{color:o.palette.primary.light,backgroundColor:a(o.palette.common.white,.1)}}}),v=n(c)(function(e){var o=e.theme;return{backgroundColor:"dark"===o.palette.mode?o.palette.grey[900]:o.palette.grey[800],color:o.palette.common.white,border:"1px solid ".concat(a(o.palette.common.white,.1)),height:20,fontSize:"0.75rem",".MuiChip-label":{color:o.palette.common.white}}}),b=function(e){return t(C,{size:"small",value:e.value||"and",exclusive:!0,onChange:function(o,r){r&&e.onChange&&e.onChange(o,r)},sx:e.sx,children:[r(m,{size:"small",value:"and","aria-label":"and logic",children:"AND"}),r(m,{size:"small",value:"or","aria-label":"or logic",children:"OR"})]})},C=n(u)({".MuiToggleButton-root":{color:"#fff",borderColor:"rgba(255, 255, 255, 0.3)",fontSize:"0.65rem",fontWeight:600,lineHeight:1,minWidth:"40px",padding:"6px 8px","&.Mui-selected":{backgroundColor:"#1976d2",color:"#fff","&:hover":{backgroundColor:"#1565c0"}},"&:hover":{backgroundColor:"rgba(255, 255, 255, 0.08)"}}}),x={before:"Before",on:"On",after:"After"},k=function(e){return r(C,{size:"small",value:e.value||"on",exclusive:!0,onChange:function(o,r){r&&e.onChange&&e.onChange(o,r)},sx:e.sx,children:Object.keys(x).map(function(e){return r(m,{size:"small",value:e,children:x[e]},e)})})};export{g as ButtonBack,v as ChipDark,k as DateLogicToggle,b as FilterLogicToggle,f as FilterMenuNoField};
|
|
2
2
|
//# sourceMappingURL=ui.units.js.map
|