@solibo/solibo-ui 2.0.2 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/index.css +1 -1
- package/dist/assets/index13.css +1 -1
- package/dist/assets/index16.css +1 -1
- package/dist/assets/index18.css +1 -1
- package/dist/assets/index19.css +1 -1
- package/dist/assets/index2.css +1 -1
- package/dist/assets/index21.css +1 -1
- package/dist/assets/index28.css +1 -1
- package/dist/assets/index35.css +1 -1
- package/dist/assets/index36.css +1 -1
- package/dist/assets/index37.css +1 -1
- package/dist/assets/index38.css +1 -1
- package/dist/assets/index39.css +1 -1
- package/dist/assets/index40.css +1 -1
- package/dist/assets/index41.css +1 -1
- package/dist/assets/index42.css +1 -1
- package/dist/assets/index43.css +1 -1
- package/dist/assets/index44.css +1 -1
- package/dist/assets/index45.css +1 -1
- package/dist/assets/index46.css +1 -1
- package/dist/assets/index47.css +1 -1
- package/dist/assets/index48.css +1 -1
- package/dist/assets/index49.css +1 -1
- package/dist/assets/index50.css +1 -1
- package/dist/assets/index51.css +1 -1
- package/dist/assets/index52.css +1 -1
- package/dist/assets/index53.css +1 -1
- package/dist/assets/index54.css +1 -1
- package/dist/assets/index55.css +1 -0
- package/dist/assets/index6.css +1 -1
- package/dist/components/badge/index.cjs +1 -1
- package/dist/components/badge/index.js +38 -38
- package/dist/components/checkbox/index.cjs +1 -1
- package/dist/components/checkbox/index.js +1 -1
- package/dist/components/clipboard/index.cjs +2 -0
- package/dist/components/clipboard/index.cjs.map +1 -0
- package/dist/components/clipboard/index.js +29 -0
- package/dist/components/clipboard/index.js.map +1 -0
- package/dist/components/collapsible/index.cjs +1 -1
- package/dist/components/collapsible/index.js +1 -1
- package/dist/components/controls/index.cjs +1 -1
- package/dist/components/controls/index.js +2 -2
- package/dist/components/croppable/index.cjs +1 -1
- package/dist/components/croppable/index.js +1 -1
- package/dist/components/dialog/index.cjs +1 -1
- package/dist/components/dialog/index.js +35 -35
- package/dist/components/divider/index.cjs +1 -1
- package/dist/components/divider/index.js +3 -3
- package/dist/components/dropdown/index.cjs +1 -1
- package/dist/components/dropdown/index.js +4 -4
- package/dist/components/dropzone/index.cjs +1 -1
- package/dist/components/dropzone/index.js +1 -1
- package/dist/components/editor/index.cjs +1 -1
- package/dist/components/editor/index.js +2 -2
- package/dist/components/empty-state/index.cjs +1 -1
- package/dist/components/empty-state/index.cjs.map +1 -1
- package/dist/components/empty-state/index.js +16 -11
- package/dist/components/empty-state/index.js.map +1 -1
- package/dist/components/fieldset/index.cjs +1 -1
- package/dist/components/fieldset/index.js +1 -1
- package/dist/components/figure/index.cjs +1 -1
- package/dist/components/figure/index.js +1 -1
- package/dist/components/file/index.cjs +1 -1
- package/dist/components/file/index.js +1 -1
- package/dist/components/graph/index.cjs +1 -1
- package/dist/components/graph/index.js +26 -26
- package/dist/components/group/index.cjs +1 -1
- package/dist/components/group/index.js +3 -3
- package/dist/components/header/index.cjs +1 -1
- package/dist/components/header/index.cjs.map +1 -1
- package/dist/components/header/index.js +22 -22
- package/dist/components/icon/index.cjs +1 -1
- package/dist/components/icon/index.cjs.map +1 -1
- package/dist/components/icon/index.js +28 -26
- package/dist/components/icon/index.js.map +1 -1
- package/dist/components/iframe/index.cjs +1 -1
- package/dist/components/iframe/index.cjs.map +1 -1
- package/dist/components/iframe/index.js +45 -44
- package/dist/components/iframe/index.js.map +1 -1
- package/dist/components/input/index.cjs +1 -1
- package/dist/components/input/index.js +2 -2
- package/dist/components/link/index.cjs +1 -1
- package/dist/components/link/index.js +1 -1
- package/dist/components/list/index.cjs +1 -1
- package/dist/components/list/index.cjs.map +1 -1
- package/dist/components/list/index.js +72 -44
- package/dist/components/list/index.js.map +1 -1
- package/dist/components/loading/index.cjs +1 -1
- package/dist/components/loading/index.js +1 -1
- package/dist/components/menu/index.cjs +1 -1
- package/dist/components/menu/index.cjs.map +1 -1
- package/dist/components/menu/index.js +23 -22
- package/dist/components/menu/index.js.map +1 -1
- package/dist/components/message/index.cjs +1 -1
- package/dist/components/message/index.cjs.map +1 -1
- package/dist/components/message/index.js +33 -33
- package/dist/components/message/index.js.map +1 -1
- package/dist/components/nav/index.cjs +1 -1
- package/dist/components/nav/index.js +30 -30
- package/dist/components/popover/index.cjs +1 -1
- package/dist/components/popover/index.cjs.map +1 -1
- package/dist/components/popover/index.js +81 -69
- package/dist/components/popover/index.js.map +1 -1
- package/dist/components/search/index.cjs +1 -1
- package/dist/components/search/index.js +1 -1
- package/dist/components/select/index.cjs +1 -1
- package/dist/components/select/index.js +2 -2
- package/dist/components/sortable/index.cjs.map +1 -1
- package/dist/components/sortable/index.js.map +1 -1
- package/dist/components/table/index.cjs.map +1 -1
- package/dist/components/table/index.js.map +1 -1
- package/dist/components/textarea/index.cjs +1 -1
- package/dist/components/textarea/index.js +12 -12
- package/dist/components/toolbar/index.cjs +1 -1
- package/dist/components/toolbar/index.js +1 -1
- package/dist/components/widget/index.cjs +1 -1
- package/dist/components/widget/index.cjs.map +1 -1
- package/dist/components/widget/index.js +13 -8
- package/dist/components/widget/index.js.map +1 -1
- package/dist/icons-BTif0nDb.cjs +2 -0
- package/dist/icons-BTif0nDb.cjs.map +1 -0
- package/dist/{icons-dUP7sKyt.js → icons-CBbpxsJF.js} +32 -5
- package/dist/icons-CBbpxsJF.js.map +1 -0
- package/dist/{index-Bt7vnwji.cjs → index-5qUTKX7P.cjs} +2 -2
- package/dist/{index-Bt7vnwji.cjs.map → index-5qUTKX7P.cjs.map} +1 -1
- package/dist/{index-BLb3JiCr.js → index-BuSfz4qx.js} +3 -3
- package/dist/{index-BLb3JiCr.js.map → index-BuSfz4qx.js.map} +1 -1
- package/dist/index-CeHwRKAg.cjs +2 -0
- package/dist/{index-CQlMdqOp.cjs.map → index-CeHwRKAg.cjs.map} +1 -1
- package/dist/index-DBWgRXp9.js +83 -0
- package/dist/{index-CbJ2-IPc.js.map → index-DBWgRXp9.js.map} +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +45 -7
- package/dist/index.js +97 -95
- package/dist/index.js.map +1 -1
- package/dist/menu-popover-CdhAgSQb.cjs +2 -0
- package/dist/menu-popover-CdhAgSQb.cjs.map +1 -0
- package/dist/menu-popover-D-Ax5zzy.js +77 -0
- package/dist/menu-popover-D-Ax5zzy.js.map +1 -0
- package/dist/tokens.json +1 -1
- package/package.json +1 -1
- package/dist/icons-Dv_p0bUF.cjs +0 -2
- package/dist/icons-Dv_p0bUF.cjs.map +0 -1
- package/dist/icons-dUP7sKyt.js.map +0 -1
- package/dist/index-CQlMdqOp.cjs +0 -2
- package/dist/index-CbJ2-IPc.js +0 -83
- package/dist/menu-popover-CM3v5s-5.cjs +0 -2
- package/dist/menu-popover-CM3v5s-5.cjs.map +0 -1
- package/dist/menu-popover-DOkciab5.js +0 -74
- package/dist/menu-popover-DOkciab5.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/iframe/index.tsx"],"sourcesContent":["import cx from 'classix';\nimport { type ComponentPropsWithoutRef, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Button } from '../button';\nimport { Controls } from '../controls';\nimport { Dialog } from '../dialog';\nimport { Header } from '../header';\nimport styles from './styles.module.css';\n\nconst MIN_AUTO_HEIGHT = 120;\nconst MAX_AUTO_HEIGHT = 12000;\nconst AUTO_HEIGHT_BUFFER = 8;\n\nexport type IframeProps = Omit<ComponentPropsWithoutRef<'iframe'>, 'src' | 'srcDoc' | 'title'> & {\n accessibleLabel: string;\n autoResize?: boolean;\n closeFullscreenLabel?: string;\n fullscreenLabel?: string;\n hasFullscreenView?: boolean;\n srcDoc: string;\n};\n\nexport const Iframe = ({\n accessibleLabel,\n autoResize = false,\n className,\n closeFullscreenLabel = 'Close fullscreen',\n fullscreenLabel = 'View in fullscreen',\n hasFullscreenView = true,\n loading = 'lazy',\n onLoad,\n referrerPolicy = 'no-referrer',\n sandbox = '',\n srcDoc,\n style,\n ...props\n}: IframeProps) => {\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const measurementFrameRef = useRef<number | null>(null);\n const followUpMeasurementTimeoutRef = useRef<number | null>(null);\n const [measuredHeight, setMeasuredHeight] = useState(MIN_AUTO_HEIGHT);\n const [isFullscreenOpen, setIsFullscreenOpen] = useState(false);\n\n const clearScheduledMeasurements = useCallback(() => {\n if (measurementFrameRef.current !== null) {\n window.cancelAnimationFrame(measurementFrameRef.current);\n measurementFrameRef.current = null;\n }\n\n if (followUpMeasurementTimeoutRef.current !== null) {\n window.clearTimeout(followUpMeasurementTimeoutRef.current);\n followUpMeasurementTimeoutRef.current = null;\n }\n }, []);\n\n const measureSize = useCallback(() => {\n if (!autoResize) return;\n\n const iframe = iframeRef.current;\n const iframeDocument = iframe?.contentDocument;\n if (!iframe || !iframeDocument) return;\n\n const renderedHeight = iframe.style.height;\n\n try {\n // measure from a stable viewport height so content sized with percentages or\n // viewport units cannot feed the iframe's previous height back into itself\n iframe.style.height = `${MIN_AUTO_HEIGHT}px`;\n\n const content =\n iframeDocument.querySelector<HTMLElement>('[data-iframe-content]') ?? iframeDocument.body;\n const contentRect = content.getBoundingClientRect();\n const { body, documentElement } = iframeDocument;\n const height = Math.min(\n Math.max(\n Math.ceil(\n Math.max(\n content.scrollHeight,\n content.offsetHeight,\n contentRect.height,\n body.scrollHeight,\n body.offsetHeight,\n documentElement.scrollHeight,\n documentElement.offsetHeight\n ) + AUTO_HEIGHT_BUFFER\n ),\n MIN_AUTO_HEIGHT\n ),\n MAX_AUTO_HEIGHT\n );\n\n setMeasuredHeight(height);\n } catch {\n // cross-origin iframe content cannot be measured; retain minimum height\n } finally {\n iframe.style.height = renderedHeight;\n }\n }, [autoResize]);\n\n const scheduleSizeMeasurement = useCallback(() => {\n if (!autoResize || measurementFrameRef.current !== null) return;\n\n measurementFrameRef.current = window.requestAnimationFrame(() => {\n measurementFrameRef.current = null;\n measureSize();\n\n if (followUpMeasurementTimeoutRef.current !== null) {\n window.clearTimeout(followUpMeasurementTimeoutRef.current);\n }\n\n followUpMeasurementTimeoutRef.current = window.setTimeout(() => {\n followUpMeasurementTimeoutRef.current = null;\n measureSize();\n }, 250);\n });\n }, [autoResize, measureSize]);\n\n const handleLoad: NonNullable<IframeProps['onLoad']> = (event) => {\n scheduleSizeMeasurement();\n\n const iframeDocument = iframeRef.current?.contentDocument;\n Array.from(iframeDocument?.images ?? []).forEach((image) => {\n if (image.complete) return;\n image.addEventListener('load', scheduleSizeMeasurement, { once: true });\n image.addEventListener('error', scheduleSizeMeasurement, { once: true });\n });\n iframeDocument?.fonts?.ready.then(scheduleSizeMeasurement).catch(() => undefined);\n\n onLoad?.(event);\n };\n\n useEffect(() => {\n if (!autoResize) return undefined;\n\n clearScheduledMeasurements();\n setMeasuredHeight(MIN_AUTO_HEIGHT);\n scheduleSizeMeasurement();\n\n return clearScheduledMeasurements;\n }, [autoResize, clearScheduledMeasurements, scheduleSizeMeasurement, srcDoc]);\n\n useEffect(() => {\n if (!autoResize) return undefined;\n\n window.addEventListener('resize', scheduleSizeMeasurement);\n window.visualViewport?.addEventListener('resize', scheduleSizeMeasurement);\n\n return () => {\n window.removeEventListener('resize', scheduleSizeMeasurement);\n window.visualViewport?.removeEventListener('resize', scheduleSizeMeasurement);\n };\n }, [autoResize, scheduleSizeMeasurement]);\n\n return (\n <div className={styles.wrapper}>\n {hasFullscreenView && (\n <div className={styles.toolbar}>\n <Button\n aria-expanded={isFullscreenOpen}\n aria-haspopup='dialog'\n onClick={() => setIsFullscreenOpen(true)}\n variant='tertiary'\n >\n {fullscreenLabel}\n </Button>\n </div>\n )}\n <iframe\n {...props}\n className={cx(styles.iframe, className)}\n loading={loading}\n onLoad={handleLoad}\n ref={iframeRef}\n referrerPolicy={referrerPolicy}\n sandbox={sandbox}\n srcDoc={srcDoc}\n style={\n autoResize\n ? {\n ...style,\n height: measuredHeight,\n minHeight: MIN_AUTO_HEIGHT,\n }\n : style\n }\n title={accessibleLabel}\n />\n {isFullscreenOpen && (\n <Dialog\n aria-label={`${accessibleLabel} fullscreen`}\n controls={\n <Controls>\n <Button onClick={() => setIsFullscreenOpen(false)}>{closeFullscreenLabel}</Button>\n </Controls>\n }\n fullscreen\n header={\n <Header>\n <h2>{accessibleLabel}</h2>\n </Header>\n }\n open\n setOpen={setIsFullscreenOpen}\n >\n <iframe\n {...props}\n className={cx(styles.iframe, styles['fullscreen-iframe'], className)}\n loading='eager'\n referrerPolicy={referrerPolicy}\n sandbox={sandbox}\n srcDoc={srcDoc}\n title={`${accessibleLabel} fullscreen`}\n />\n </Dialog>\n )}\n </div>\n );\n};\n"],"names":["MIN_AUTO_HEIGHT","MAX_AUTO_HEIGHT","AUTO_HEIGHT_BUFFER","Iframe","accessibleLabel","autoResize","className","closeFullscreenLabel","fullscreenLabel","hasFullscreenView","loading","onLoad","referrerPolicy","sandbox","srcDoc","style","props","iframeRef","useRef","measurementFrameRef","followUpMeasurementTimeoutRef","measuredHeight","setMeasuredHeight","useState","isFullscreenOpen","setIsFullscreenOpen","clearScheduledMeasurements","useCallback","current","window","cancelAnimationFrame","clearTimeout","measureSize","iframe","iframeDocument","contentDocument","renderedHeight","height","content","querySelector","body","contentRect","getBoundingClientRect","documentElement","Math","min","max","ceil","scrollHeight","offsetHeight","scheduleSizeMeasurement","requestAnimationFrame","setTimeout","handleLoad","event","Array","from","images","forEach","image","complete","addEventListener","once","fonts","ready","then","catch","useEffect","visualViewport","removeEventListener","styles","wrapper","toolbar","jsx","Button","cx","minHeight","Dialog","Controls","Header"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/iframe/index.tsx"],"sourcesContent":["import cx from 'classix';\nimport { type ComponentPropsWithoutRef, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Button } from '../button';\nimport { Controls } from '../controls';\nimport { Dialog } from '../dialog';\nimport { Header } from '../header';\nimport styles from './styles.module.css';\n\nconst MIN_AUTO_HEIGHT = 120;\nconst MAX_AUTO_HEIGHT = 12000;\nconst AUTO_HEIGHT_BUFFER = 8;\n\nexport type IframeProps = Omit<ComponentPropsWithoutRef<'iframe'>, 'src' | 'srcDoc' | 'title'> & {\n accessibleLabel: string;\n autoResize?: boolean;\n closeFullscreenLabel?: string;\n fullscreenLabel?: string;\n hasFullscreenView?: boolean;\n srcDoc: string;\n};\n\nexport const Iframe = ({\n accessibleLabel,\n autoResize = false,\n className,\n closeFullscreenLabel = 'Close fullscreen',\n fullscreenLabel = 'View in fullscreen',\n hasFullscreenView = true,\n loading = 'lazy',\n onLoad,\n referrerPolicy = 'no-referrer',\n sandbox = '',\n srcDoc,\n style,\n ...props\n}: IframeProps) => {\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const measurementFrameRef = useRef<number | null>(null);\n const followUpMeasurementTimeoutRef = useRef<number | null>(null);\n const [measuredHeight, setMeasuredHeight] = useState(MIN_AUTO_HEIGHT);\n const [isFullscreenOpen, setIsFullscreenOpen] = useState(false);\n\n const clearScheduledMeasurements = useCallback(() => {\n if (measurementFrameRef.current !== null) {\n window.cancelAnimationFrame(measurementFrameRef.current);\n measurementFrameRef.current = null;\n }\n\n if (followUpMeasurementTimeoutRef.current !== null) {\n window.clearTimeout(followUpMeasurementTimeoutRef.current);\n followUpMeasurementTimeoutRef.current = null;\n }\n }, []);\n\n const measureSize = useCallback(() => {\n if (!autoResize) return;\n\n const iframe = iframeRef.current;\n const iframeDocument = iframe?.contentDocument;\n if (!iframe || !iframeDocument) return;\n\n const renderedHeight = iframe.style.height;\n\n try {\n iframe.style.height = `${MIN_AUTO_HEIGHT}px`;\n\n const content =\n iframeDocument.querySelector<HTMLElement>('[data-iframe-content]') ?? iframeDocument.body;\n const contentRect = content.getBoundingClientRect();\n const { body, documentElement } = iframeDocument;\n const height = Math.min(\n Math.max(\n Math.ceil(\n Math.max(\n content.scrollHeight,\n content.offsetHeight,\n contentRect.height,\n body.scrollHeight,\n body.offsetHeight,\n documentElement.scrollHeight,\n documentElement.offsetHeight\n ) + AUTO_HEIGHT_BUFFER\n ),\n MIN_AUTO_HEIGHT\n ),\n MAX_AUTO_HEIGHT\n );\n\n setMeasuredHeight(height);\n } catch {\n /* 🌝 */\n } finally {\n iframe.style.height = renderedHeight;\n }\n }, [autoResize]);\n\n const scheduleSizeMeasurement = useCallback(() => {\n if (!autoResize || measurementFrameRef.current !== null) return;\n\n measurementFrameRef.current = window.requestAnimationFrame(() => {\n measurementFrameRef.current = null;\n measureSize();\n\n if (followUpMeasurementTimeoutRef.current !== null) {\n window.clearTimeout(followUpMeasurementTimeoutRef.current);\n }\n\n followUpMeasurementTimeoutRef.current = window.setTimeout(() => {\n followUpMeasurementTimeoutRef.current = null;\n measureSize();\n }, 250);\n });\n }, [autoResize, measureSize]);\n\n const handleLoad: NonNullable<IframeProps['onLoad']> = (event) => {\n scheduleSizeMeasurement();\n\n const iframeDocument = iframeRef.current?.contentDocument;\n Array.from(iframeDocument?.images ?? []).forEach((image) => {\n if (image.complete) return;\n image.addEventListener('load', scheduleSizeMeasurement, { once: true });\n image.addEventListener('error', scheduleSizeMeasurement, { once: true });\n });\n iframeDocument?.fonts?.ready.then(scheduleSizeMeasurement).catch(() => undefined);\n\n onLoad?.(event);\n };\n\n useEffect(() => {\n if (!autoResize) return undefined;\n\n clearScheduledMeasurements();\n setMeasuredHeight(MIN_AUTO_HEIGHT);\n scheduleSizeMeasurement();\n\n return clearScheduledMeasurements;\n }, [autoResize, clearScheduledMeasurements, scheduleSizeMeasurement, srcDoc]);\n\n useEffect(() => {\n if (!autoResize) return undefined;\n\n window.addEventListener('resize', scheduleSizeMeasurement);\n window.visualViewport?.addEventListener('resize', scheduleSizeMeasurement);\n\n return () => {\n window.removeEventListener('resize', scheduleSizeMeasurement);\n window.visualViewport?.removeEventListener('resize', scheduleSizeMeasurement);\n };\n }, [autoResize, scheduleSizeMeasurement]);\n\n return (\n <div className={styles.wrapper}>\n {hasFullscreenView && (\n <div className={styles.toolbar}>\n <Button\n aria-expanded={isFullscreenOpen}\n aria-haspopup='dialog'\n onClick={() => setIsFullscreenOpen(true)}\n variant='tertiary'\n >\n {fullscreenLabel}\n </Button>\n </div>\n )}\n <iframe\n {...props}\n className={cx(styles.iframe, !autoResize && styles.scrollable, className)}\n loading={loading}\n onLoad={handleLoad}\n ref={iframeRef}\n referrerPolicy={referrerPolicy}\n sandbox={sandbox}\n srcDoc={srcDoc}\n style={\n autoResize\n ? {\n ...style,\n height: measuredHeight,\n minHeight: MIN_AUTO_HEIGHT,\n }\n : style\n }\n title={accessibleLabel}\n />\n {isFullscreenOpen && (\n <Dialog\n aria-label={`${accessibleLabel} fullscreen`}\n controls={\n <Controls>\n <Button onClick={() => setIsFullscreenOpen(false)}>{closeFullscreenLabel}</Button>\n </Controls>\n }\n fullscreen\n header={\n <Header>\n <h2>{accessibleLabel}</h2>\n </Header>\n }\n open\n setOpen={setIsFullscreenOpen}\n >\n <iframe\n {...props}\n className={cx(styles.iframe, styles['fullscreen-iframe'], styles.scrollable, className)}\n loading='eager'\n referrerPolicy={referrerPolicy}\n sandbox={sandbox}\n srcDoc={srcDoc}\n title={`${accessibleLabel} fullscreen`}\n />\n </Dialog>\n )}\n </div>\n );\n};\n"],"names":["MIN_AUTO_HEIGHT","MAX_AUTO_HEIGHT","AUTO_HEIGHT_BUFFER","Iframe","accessibleLabel","autoResize","className","closeFullscreenLabel","fullscreenLabel","hasFullscreenView","loading","onLoad","referrerPolicy","sandbox","srcDoc","style","props","iframeRef","useRef","measurementFrameRef","followUpMeasurementTimeoutRef","measuredHeight","setMeasuredHeight","useState","isFullscreenOpen","setIsFullscreenOpen","clearScheduledMeasurements","useCallback","current","window","cancelAnimationFrame","clearTimeout","measureSize","iframe","iframeDocument","contentDocument","renderedHeight","height","content","querySelector","body","contentRect","getBoundingClientRect","documentElement","Math","min","max","ceil","scrollHeight","offsetHeight","scheduleSizeMeasurement","requestAnimationFrame","setTimeout","handleLoad","event","Array","from","images","forEach","image","complete","addEventListener","once","fonts","ready","then","catch","useEffect","visualViewport","removeEventListener","styles","wrapper","toolbar","jsx","Button","cx","scrollable","minHeight","Dialog","Controls","Header"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("react/jsx-runtime");require("../../classix-5H4IWnMA.cjs");require("react");require("../../icons-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("react/jsx-runtime");require("../../classix-5H4IWnMA.cjs");require("react");require("../../icons-BTif0nDb.cjs");require("../../use-touched-Bq5Gjbpz.cjs");const e=require("../../index-CeHwRKAg.cjs");exports.Input=e.Input;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import "react/jsx-runtime";
|
|
2
2
|
import "../../classix-DG18itHa.js";
|
|
3
3
|
import "react";
|
|
4
|
-
import "../../icons-
|
|
4
|
+
import "../../icons-CBbpxsJF.js";
|
|
5
5
|
import "../../use-touched-B999bBr8.js";
|
|
6
|
-
import { I as a } from "../../index-
|
|
6
|
+
import { I as a } from "../../index-DBWgRXp9.js";
|
|
7
7
|
export {
|
|
8
8
|
a as Input
|
|
9
9
|
};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/index50.css');const a=require("react/jsx-runtime"),l=require("../../classix-5H4IWnMA.cjs"),m="_link_fsphh_1",o="_primary_fsphh_19",c="_danger_fsphh_25",_="_minimal_fsphh_33",n={link:m,primary:o,danger:c,minimal:_},p=({children:i,className:r,to:s="#",variant:e="primary",...t})=>a.jsx("a",{className:l.t(r,n.link,n[e]),href:s,...t,"data-component":"link",children:i});exports.Link=p;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as t } from "react/jsx-runtime";
|
|
2
2
|
import { t as o } from "../../classix-DG18itHa.js";
|
|
3
|
-
import '../../assets/
|
|
3
|
+
import '../../assets/index50.css';const p = "_link_fsphh_1", _ = "_primary_fsphh_19", l = "_danger_fsphh_25", e = "_minimal_fsphh_33", n = {
|
|
4
4
|
link: p,
|
|
5
5
|
primary: _,
|
|
6
6
|
danger: l,
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/index51.css');const a=require("react/jsx-runtime"),q=require("../../classix-5H4IWnMA.cjs"),l=require("react");function H(t){return l.isValidElement(t)&&t.type===l.Fragment}function O(t,s=[]){return l.Children.forEach(t,i=>{H(i)?O(i.props.children,s):s.push(i)}),s}function F(t,{wrapper:s="li"}={}){return O(t).filter(n=>n!==null).map((n,u)=>{if(l.isValidElement(n)&&n.type===s)return n;const f=l.isValidElement(n)&&n.key!=null?n.key:u;return l.createElement(s,{key:f},n)})}const T="_controls_bp7if_3",V="_horizontal_bp7if_8",A="_list_bp7if_19",I="_columns_bp7if_59",D="_masonry_bp7if_69",P="_scrollable_bp7if_79",$="_overflowing_bp7if_86",G="_compact_bp7if_111",r={controls:T,horizontal:V,list:A,columns:I,masonry:D,scrollable:P,overflowing:$,compact:G},M=(t,s)=>{typeof t=="function"?t(s):t&&(t.current=s)};function J({children:t,className:s,columns:i=1,compact:p=!1,controls:n,horizontal:u,layout:f="grid",maxVisibleItems:m,ordered:z,ref:y,style:B,...b}){const _=Number.isFinite(i)?Math.max(1,Math.floor(i)):1,v=l.useRef(null),[c,S]=l.useState(),o=f==="grid"&&_===1&&!u&&m!=null&&Number.isFinite(m)&&m>=1?Math.floor(m):void 0,h=!!o&&c!=null;l.useLayoutEffect(()=>{const e=v.current;if(!e||!o)return;const R=()=>{const g=Array.from(e.children).filter(j=>j instanceof HTMLElement&&getComputedStyle(j).display!=="none"),N=g[o-1],k=g.length>o&&N?N.getBoundingClientRect().bottom-e.getBoundingClientRect().top+e.scrollTop+(parseFloat(getComputedStyle(e).paddingBottom)||0):void 0;S(k)},d=new ResizeObserver(R),C=()=>{d.disconnect(),d.observe(e),Array.from(e.children).forEach(g=>d.observe(g)),R()},L=new MutationObserver(C);return L.observe(e,{childList:!0,subtree:!0,characterData:!0}),C(),()=>{d.disconnect(),L.disconnect()}},[t,o,h]);const x=q.t(s,r.list,f==="masonry"?r.masonry:_>1&&r.columns,!!o&&r.scrollable,h&&r.overflowing,u&&r.horizontal,p&&r.compact),E={...B,"--list-columns":_,"--list-max-height":o&&c!=null?`${c}px`:void 0},w=z?a.jsx("ol",{className:x,ref:e=>{v.current=e,M(y,e)},style:E,...b,tabIndex:b.tabIndex??(o&&c!=null?0:void 0),children:F(t)}):a.jsx("ul",{className:x,ref:e=>{v.current=e,M(y,e)},style:E,...b,tabIndex:b.tabIndex??(o&&c!=null?0:void 0),children:F(t)});return n==null?w:a.jsxs(a.Fragment,{children:[a.jsx("div",{className:r.controls,children:n}),w]})}exports.List=J;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../src/utils/wrap-children.tsx","../../../src/components/list/index.tsx"],"sourcesContent":["import React, { JSX } from 'react';\n\ntype WrapOptions<T extends keyof JSX.IntrinsicElements = 'li'> = {\n wrapper?: T;\n};\n\nfunction isFragmentElement(\n node: React.ReactNode\n): node is React.ReactElement<{ children?: React.ReactNode }> {\n return React.isValidElement(node) && node.type === React.Fragment;\n}\n\nfunction flattenChildren(children: React.ReactNode, out: React.ReactNode[] = []) {\n React.Children.forEach(children, (child) => {\n if (isFragmentElement(child)) {\n flattenChildren(child.props.children, out);\n } else {\n out.push(child);\n }\n });\n return out;\n}\n\nexport function wrapChildren<T extends keyof JSX.IntrinsicElements = 'li'>(\n children: React.ReactNode,\n { wrapper = 'li' as T }: WrapOptions<T> = {}\n) {\n const flat = flattenChildren(children);\n\n const filterNull = flat.filter((child) => child !== null);\n\n return filterNull.map((child, i) => {\n if (React.isValidElement(child) && child.type === wrapper) {\n return child;\n }\n\n const key = React.isValidElement(child) && child.key != null ? child.key : i;\n\n return React.createElement(wrapper, { key }, child);\n });\n}\n","import cx from 'classix';\n\nimport { wrapChildren } from '@/utils/wrap-children';\n\nimport styles from './styles.module.css';\n\ntype ListElement = HTMLUListElement | HTMLOListElement;\n\nconst setListRef = (ref: React.Ref<ListElement> | undefined, node: ListElement | null) => {\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n};\n\nexport type ListProps = React.ComponentPropsWithoutRef<'ul'> & {\n columns?: number;\n compact?: boolean;\n controls?: React.ReactNode;\n horizontal?: boolean;\n ordered?: boolean;\n ref?: React.Ref<ListElement>;\n};\n\nexport function List({\n children,\n className,\n columns = 1,\n compact = false,\n controls,\n horizontal,\n ordered,\n ref,\n style,\n ...props\n}: ListProps) {\n const cols = Number.isFinite(columns) ? Math.max(1, Math.floor(columns)) : 1;\n\n const classes = cx(\n className,\n styles.list,\n cols > 1 && styles.columns,\n horizontal && styles.horizontal,\n compact && styles.compact\n );\n\n type withVars = React.CSSProperties & {\n '--list-columns'?: number;\n };\n\n const withVars: withVars = {\n ...style,\n '--list-columns': cols,\n };\n\n const list = ordered ? (\n <ol\n className={classes}\n ref={(node) => setListRef(ref, node)}\n style={withVars}\n {...props}\n >\n {wrapChildren(children)}\n </ol>\n ) : (\n <ul\n className={classes}\n ref={(node) => setListRef(ref, node)}\n style={withVars}\n {...props}\n >\n {wrapChildren(children)}\n </ul>\n );\n\n if (controls === undefined || controls === null) return list;\n\n return (\n <>\n <div className={styles.controls}>{controls}</div>\n {list}\n </>\n );\n}\n"],"names":["isFragmentElement","node","React","isValidElement","type","Fragment","flattenChildren","children","out","Children","forEach","child","props","push","wrapChildren","wrapper","filter","map","i","key","createElement","setListRef","ref","current","List","className","columns","compact","controls","horizontal","ordered","style","cols","Number","isFinite","Math","max","floor","classes","cx","styles","list","withVars","jsx","jsxs"],"mappings":"gLAMA,SAASA,EACPC,EAC4D,CAC5D,OAAOC,EAAMC,eAAeF,CAAI,GAAKA,EAAKG,OAASF,EAAMG,QAC3D,CAEA,SAASC,EAAgBC,EAA2BC,EAAyB,GAAI,CAC/EN,OAAAA,EAAMO,SAASC,QAAQH,EAAWI,GAAU,CACtCX,EAAkBW,CAAK,EACzBL,EAAgBK,EAAMC,MAAML,SAAUC,CAAG,EAEzCA,EAAIK,KAAKF,CAAK,CAElB,CAAC,EACMH,CACT,CAEO,SAASM,EACdP,EACA,CAAEQ,QAAAA,EAAU,IAA0B,EAAI,GAC1C,CAKA,OAJaT,EAAgBC,CAAQ,EAEbS,OAAQL,GAAUA,IAAU,IAAI,EAEtCM,IAAI,CAACN,EAAOO,IAAM,CAClC,GAAIhB,EAAMC,eAAeQ,CAAK,GAAKA,EAAMP,OAASW,EAChD,OAAOJ,EAGT,MAAMQ,EAAMjB,EAAMC,eAAeQ,CAAK,GAAKA,EAAMQ,KAAO,KAAOR,EAAMQ,IAAMD,EAE3E,OAAOhB,EAAMkB,cAAcL,EAAS,CAAEI,IAAAA,CAAAA,EAAOR,CAAK,CACpD,CAAC,CACH,
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/utils/wrap-children.tsx","../../../src/components/list/index.tsx"],"sourcesContent":["import React, { JSX } from 'react';\n\ntype WrapOptions<T extends keyof JSX.IntrinsicElements = 'li'> = {\n wrapper?: T;\n};\n\nfunction isFragmentElement(\n node: React.ReactNode\n): node is React.ReactElement<{ children?: React.ReactNode }> {\n return React.isValidElement(node) && node.type === React.Fragment;\n}\n\nfunction flattenChildren(children: React.ReactNode, out: React.ReactNode[] = []) {\n React.Children.forEach(children, (child) => {\n if (isFragmentElement(child)) {\n flattenChildren(child.props.children, out);\n } else {\n out.push(child);\n }\n });\n return out;\n}\n\nexport function wrapChildren<T extends keyof JSX.IntrinsicElements = 'li'>(\n children: React.ReactNode,\n { wrapper = 'li' as T }: WrapOptions<T> = {}\n) {\n const flat = flattenChildren(children);\n\n const filterNull = flat.filter((child) => child !== null);\n\n return filterNull.map((child, i) => {\n if (React.isValidElement(child) && child.type === wrapper) {\n return child;\n }\n\n const key = React.isValidElement(child) && child.key != null ? child.key : i;\n\n return React.createElement(wrapper, { key }, child);\n });\n}\n","import cx from 'classix';\nimport { useLayoutEffect, useRef, useState } from 'react';\n\nimport { wrapChildren } from '@/utils/wrap-children';\n\nimport styles from './styles.module.css';\n\ntype ListElement = HTMLUListElement | HTMLOListElement;\n\nconst setListRef = (ref: React.Ref<ListElement> | undefined, node: ListElement | null) => {\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n};\n\nexport type ListProps = React.ComponentPropsWithoutRef<'ul'> & {\n columns?: number;\n compact?: boolean;\n controls?: React.ReactNode;\n horizontal?: boolean;\n layout?: 'grid' | 'masonry';\n maxVisibleItems?: number;\n ordered?: boolean;\n ref?: React.Ref<ListElement>;\n};\n\nexport function List({\n children,\n className,\n columns = 1,\n compact = false,\n controls,\n horizontal,\n layout = 'grid',\n maxVisibleItems,\n ordered,\n ref,\n style,\n ...props\n}: ListProps) {\n const cols = Number.isFinite(columns) ? Math.max(1, Math.floor(columns)) : 1;\n\n const listRef = useRef<ListElement | null>(null);\n const [visibleHeight, setVisibleHeight] = useState<number>();\n const itemLimit =\n layout === 'grid' &&\n cols === 1 &&\n !horizontal &&\n maxVisibleItems != null &&\n Number.isFinite(maxVisibleItems) &&\n maxVisibleItems >= 1\n ? Math.floor(maxVisibleItems)\n : undefined;\n const isOverflowing = Boolean(itemLimit) && visibleHeight != null;\n\n useLayoutEffect(() => {\n const node = listRef.current;\n if (!node || !itemLimit) return;\n\n const measure = () => {\n const items = Array.from(node.children).filter(\n (item): item is HTMLElement =>\n item instanceof HTMLElement && getComputedStyle(item).display !== 'none'\n );\n const lastVisible = items[itemLimit - 1];\n const height =\n items.length > itemLimit && lastVisible\n ? lastVisible.getBoundingClientRect().bottom -\n node.getBoundingClientRect().top +\n node.scrollTop +\n (parseFloat(getComputedStyle(node).paddingBottom) || 0)\n : undefined;\n setVisibleHeight(height);\n };\n const resizeObserver = new ResizeObserver(measure);\n const observeItems = () => {\n resizeObserver.disconnect();\n resizeObserver.observe(node);\n Array.from(node.children).forEach((item) => resizeObserver.observe(item));\n measure();\n };\n const mutationObserver = new MutationObserver(observeItems);\n mutationObserver.observe(node, { childList: true, subtree: true, characterData: true });\n observeItems();\n return () => {\n resizeObserver.disconnect();\n mutationObserver.disconnect();\n };\n }, [children, itemLimit, isOverflowing]);\n\n const classes = cx(\n className,\n styles.list,\n layout === 'masonry' ? styles.masonry : cols > 1 && styles.columns,\n Boolean(itemLimit) && styles.scrollable,\n isOverflowing && styles.overflowing,\n horizontal && styles.horizontal,\n compact && styles.compact\n );\n\n type withVars = React.CSSProperties & {\n '--list-columns'?: number;\n '--list-max-height'?: string;\n };\n\n const withVars: withVars = {\n ...style,\n '--list-columns': cols,\n '--list-max-height': itemLimit && visibleHeight != null ? `${visibleHeight}px` : undefined,\n };\n\n const list = ordered ? (\n <ol\n className={classes}\n ref={(node) => {\n listRef.current = node;\n setListRef(ref, node);\n }}\n style={withVars}\n {...props}\n tabIndex={props.tabIndex ?? (itemLimit && visibleHeight != null ? 0 : undefined)}\n >\n {wrapChildren(children)}\n </ol>\n ) : (\n <ul\n className={classes}\n ref={(node) => {\n listRef.current = node;\n setListRef(ref, node);\n }}\n style={withVars}\n {...props}\n tabIndex={props.tabIndex ?? (itemLimit && visibleHeight != null ? 0 : undefined)}\n >\n {wrapChildren(children)}\n </ul>\n );\n\n if (controls === undefined || controls === null) return list;\n\n return (\n <>\n <div className={styles.controls}>{controls}</div>\n {list}\n </>\n );\n}\n"],"names":["isFragmentElement","node","React","isValidElement","type","Fragment","flattenChildren","children","out","Children","forEach","child","props","push","wrapChildren","wrapper","filter","map","i","key","createElement","setListRef","ref","current","List","className","columns","compact","controls","horizontal","layout","maxVisibleItems","ordered","style","cols","Number","isFinite","Math","max","floor","listRef","useRef","visibleHeight","setVisibleHeight","useState","itemLimit","undefined","isOverflowing","Boolean","useLayoutEffect","measure","items","Array","from","item","HTMLElement","getComputedStyle","display","lastVisible","height","length","getBoundingClientRect","bottom","top","scrollTop","parseFloat","paddingBottom","resizeObserver","ResizeObserver","observeItems","disconnect","observe","mutationObserver","MutationObserver","childList","subtree","characterData","classes","cx","styles","list","masonry","scrollable","overflowing","withVars","jsx","tabIndex","jsxs"],"mappings":"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"}
|
|
@@ -1,57 +1,85 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { t as
|
|
3
|
-
import
|
|
4
|
-
import '../../assets/
|
|
5
|
-
return
|
|
1
|
+
import { jsx as g, jsxs as V, Fragment as j } from "react/jsx-runtime";
|
|
2
|
+
import { t as A } from "../../classix-DG18itHa.js";
|
|
3
|
+
import i, { useRef as I, useState as T, useLayoutEffect as D } from "react";
|
|
4
|
+
import '../../assets/index51.css';function $(t) {
|
|
5
|
+
return i.isValidElement(t) && t.type === i.Fragment;
|
|
6
6
|
}
|
|
7
|
-
function
|
|
8
|
-
return
|
|
9
|
-
|
|
10
|
-
}),
|
|
7
|
+
function M(t, o = []) {
|
|
8
|
+
return i.Children.forEach(t, (r) => {
|
|
9
|
+
$(r) ? M(r.props.children, o) : o.push(r);
|
|
10
|
+
}), o;
|
|
11
11
|
}
|
|
12
|
-
function
|
|
13
|
-
wrapper:
|
|
12
|
+
function z(t, {
|
|
13
|
+
wrapper: o = "li"
|
|
14
14
|
} = {}) {
|
|
15
|
-
return
|
|
16
|
-
if (
|
|
17
|
-
return
|
|
18
|
-
const
|
|
19
|
-
return
|
|
20
|
-
key:
|
|
21
|
-
},
|
|
15
|
+
return M(t).filter((n) => n !== null).map((n, a) => {
|
|
16
|
+
if (i.isValidElement(n) && n.type === o)
|
|
17
|
+
return n;
|
|
18
|
+
const u = i.isValidElement(n) && n.key != null ? n.key : a;
|
|
19
|
+
return i.createElement(o, {
|
|
20
|
+
key: u
|
|
21
|
+
}, n);
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
|
-
const
|
|
25
|
-
controls:
|
|
26
|
-
horizontal:
|
|
27
|
-
list:
|
|
28
|
-
columns:
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
24
|
+
const q = "_controls_bp7if_3", G = "_horizontal_bp7if_8", J = "_list_bp7if_19", K = "_columns_bp7if_59", P = "_masonry_bp7if_69", Q = "_scrollable_bp7if_79", U = "_overflowing_bp7if_86", W = "_compact_bp7if_111", l = {
|
|
25
|
+
controls: q,
|
|
26
|
+
horizontal: G,
|
|
27
|
+
list: J,
|
|
28
|
+
columns: K,
|
|
29
|
+
masonry: P,
|
|
30
|
+
scrollable: Q,
|
|
31
|
+
overflowing: U,
|
|
32
|
+
compact: W
|
|
33
|
+
}, B = (t, o) => {
|
|
34
|
+
typeof t == "function" ? t(o) : t && (t.current = o);
|
|
32
35
|
};
|
|
33
|
-
function
|
|
36
|
+
function tt({
|
|
34
37
|
children: t,
|
|
35
|
-
className:
|
|
36
|
-
columns:
|
|
37
|
-
compact:
|
|
38
|
-
controls:
|
|
39
|
-
horizontal:
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
38
|
+
className: o,
|
|
39
|
+
columns: r = 1,
|
|
40
|
+
compact: v = !1,
|
|
41
|
+
controls: n,
|
|
42
|
+
horizontal: a,
|
|
43
|
+
layout: u = "grid",
|
|
44
|
+
maxVisibleItems: f,
|
|
45
|
+
ordered: O,
|
|
46
|
+
ref: h,
|
|
47
|
+
style: k,
|
|
48
|
+
...m
|
|
44
49
|
}) {
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
const p = Number.isFinite(r) ? Math.max(1, Math.floor(r)) : 1, _ = I(null), [c, H] = T(), s = u === "grid" && p === 1 && !a && f != null && Number.isFinite(f) && f >= 1 ? Math.floor(f) : void 0, y = !!s && c != null;
|
|
51
|
+
D(() => {
|
|
52
|
+
const e = _.current;
|
|
53
|
+
if (!e || !s) return;
|
|
54
|
+
const C = () => {
|
|
55
|
+
const d = Array.from(e.children).filter((L) => L instanceof HTMLElement && getComputedStyle(L).display !== "none"), F = d[s - 1], S = d.length > s && F ? F.getBoundingClientRect().bottom - e.getBoundingClientRect().top + e.scrollTop + (parseFloat(getComputedStyle(e).paddingBottom) || 0) : void 0;
|
|
56
|
+
H(S);
|
|
57
|
+
}, b = new ResizeObserver(C), N = () => {
|
|
58
|
+
b.disconnect(), b.observe(e), Array.from(e.children).forEach((d) => b.observe(d)), C();
|
|
59
|
+
}, R = new MutationObserver(N);
|
|
60
|
+
return R.observe(e, {
|
|
61
|
+
childList: !0,
|
|
62
|
+
subtree: !0,
|
|
63
|
+
characterData: !0
|
|
64
|
+
}), N(), () => {
|
|
65
|
+
b.disconnect(), R.disconnect();
|
|
66
|
+
};
|
|
67
|
+
}, [t, s, y]);
|
|
68
|
+
const E = A(o, l.list, u === "masonry" ? l.masonry : p > 1 && l.columns, !!s && l.scrollable, y && l.overflowing, a && l.horizontal, v && l.compact), w = {
|
|
69
|
+
...k,
|
|
70
|
+
"--list-columns": p,
|
|
71
|
+
"--list-max-height": s && c != null ? `${c}px` : void 0
|
|
72
|
+
}, x = O ? /* @__PURE__ */ g("ol", { className: E, ref: (e) => {
|
|
73
|
+
_.current = e, B(h, e);
|
|
74
|
+
}, style: w, ...m, tabIndex: m.tabIndex ?? (s && c != null ? 0 : void 0), children: z(t) }) : /* @__PURE__ */ g("ul", { className: E, ref: (e) => {
|
|
75
|
+
_.current = e, B(h, e);
|
|
76
|
+
}, style: w, ...m, tabIndex: m.tabIndex ?? (s && c != null ? 0 : void 0), children: z(t) });
|
|
77
|
+
return n == null ? x : /* @__PURE__ */ V(j, { children: [
|
|
78
|
+
/* @__PURE__ */ g("div", { className: l.controls, children: n }),
|
|
79
|
+
x
|
|
52
80
|
] });
|
|
53
81
|
}
|
|
54
82
|
export {
|
|
55
|
-
|
|
83
|
+
tt as List
|
|
56
84
|
};
|
|
57
85
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/utils/wrap-children.tsx","../../../src/components/list/index.tsx"],"sourcesContent":["import React, { JSX } from 'react';\n\ntype WrapOptions<T extends keyof JSX.IntrinsicElements = 'li'> = {\n wrapper?: T;\n};\n\nfunction isFragmentElement(\n node: React.ReactNode\n): node is React.ReactElement<{ children?: React.ReactNode }> {\n return React.isValidElement(node) && node.type === React.Fragment;\n}\n\nfunction flattenChildren(children: React.ReactNode, out: React.ReactNode[] = []) {\n React.Children.forEach(children, (child) => {\n if (isFragmentElement(child)) {\n flattenChildren(child.props.children, out);\n } else {\n out.push(child);\n }\n });\n return out;\n}\n\nexport function wrapChildren<T extends keyof JSX.IntrinsicElements = 'li'>(\n children: React.ReactNode,\n { wrapper = 'li' as T }: WrapOptions<T> = {}\n) {\n const flat = flattenChildren(children);\n\n const filterNull = flat.filter((child) => child !== null);\n\n return filterNull.map((child, i) => {\n if (React.isValidElement(child) && child.type === wrapper) {\n return child;\n }\n\n const key = React.isValidElement(child) && child.key != null ? child.key : i;\n\n return React.createElement(wrapper, { key }, child);\n });\n}\n","import cx from 'classix';\n\nimport { wrapChildren } from '@/utils/wrap-children';\n\nimport styles from './styles.module.css';\n\ntype ListElement = HTMLUListElement | HTMLOListElement;\n\nconst setListRef = (ref: React.Ref<ListElement> | undefined, node: ListElement | null) => {\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n};\n\nexport type ListProps = React.ComponentPropsWithoutRef<'ul'> & {\n columns?: number;\n compact?: boolean;\n controls?: React.ReactNode;\n horizontal?: boolean;\n ordered?: boolean;\n ref?: React.Ref<ListElement>;\n};\n\nexport function List({\n children,\n className,\n columns = 1,\n compact = false,\n controls,\n horizontal,\n ordered,\n ref,\n style,\n ...props\n}: ListProps) {\n const cols = Number.isFinite(columns) ? Math.max(1, Math.floor(columns)) : 1;\n\n const classes = cx(\n className,\n styles.list,\n cols > 1 && styles.columns,\n horizontal && styles.horizontal,\n compact && styles.compact\n );\n\n type withVars = React.CSSProperties & {\n '--list-columns'?: number;\n };\n\n const withVars: withVars = {\n ...style,\n '--list-columns': cols,\n };\n\n const list = ordered ? (\n <ol\n className={classes}\n ref={(node) => setListRef(ref, node)}\n style={withVars}\n {...props}\n >\n {wrapChildren(children)}\n </ol>\n ) : (\n <ul\n className={classes}\n ref={(node) => setListRef(ref, node)}\n style={withVars}\n {...props}\n >\n {wrapChildren(children)}\n </ul>\n );\n\n if (controls === undefined || controls === null) return list;\n\n return (\n <>\n <div className={styles.controls}>{controls}</div>\n {list}\n </>\n );\n}\n"],"names":["isFragmentElement","node","React","isValidElement","type","Fragment","flattenChildren","children","out","Children","forEach","child","props","push","wrapChildren","wrapper","filter","map","i","key","createElement","setListRef","ref","current","List","className","columns","compact","controls","horizontal","ordered","style","cols","Number","isFinite","Math","max","floor","classes","cx","styles","list","withVars","jsx","jsxs"],"mappings":";;;AAMA,SAASA,EACPC,GAC4D;AAC5D,SAAOC,EAAMC,eAAeF,CAAI,KAAKA,EAAKG,SAASF,EAAMG;AAC3D;AAEA,SAASC,EAAgBC,GAA2BC,IAAyB,IAAI;AAC/EN,SAAAA,EAAMO,SAASC,QAAQH,GAAWI,CAAAA,MAAU;AAC1C,IAAIX,EAAkBW,CAAK,IACzBL,EAAgBK,EAAMC,MAAML,UAAUC,CAAG,IAEzCA,EAAIK,KAAKF,CAAK;AAAA,EAElB,CAAC,GACMH;AACT;AAEO,SAASM,EACdP,GACA;AAAA,EAAEQ,SAAAA,IAAU;AAA0B,IAAI,IAC1C;AAKA,SAJaT,EAAgBC,CAAQ,EAEbS,OAAQL,CAAAA,MAAUA,MAAU,IAAI,EAEtCM,IAAI,CAACN,GAAOO,MAAM;AAClC,QAAIhB,EAAMC,eAAeQ,CAAK,KAAKA,EAAMP,SAASW;AAChD,aAAOJ;AAGT,UAAMQ,IAAMjB,EAAMC,eAAeQ,CAAK,KAAKA,EAAMQ,OAAO,OAAOR,EAAMQ,MAAMD;AAE3E,WAAOhB,EAAMkB,cAAcL,GAAS;AAAA,MAAEI,KAAAA;AAAAA,IAAAA,GAAOR,CAAK;AAAA,EACpD,CAAC;AACH
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/utils/wrap-children.tsx","../../../src/components/list/index.tsx"],"sourcesContent":["import React, { JSX } from 'react';\n\ntype WrapOptions<T extends keyof JSX.IntrinsicElements = 'li'> = {\n wrapper?: T;\n};\n\nfunction isFragmentElement(\n node: React.ReactNode\n): node is React.ReactElement<{ children?: React.ReactNode }> {\n return React.isValidElement(node) && node.type === React.Fragment;\n}\n\nfunction flattenChildren(children: React.ReactNode, out: React.ReactNode[] = []) {\n React.Children.forEach(children, (child) => {\n if (isFragmentElement(child)) {\n flattenChildren(child.props.children, out);\n } else {\n out.push(child);\n }\n });\n return out;\n}\n\nexport function wrapChildren<T extends keyof JSX.IntrinsicElements = 'li'>(\n children: React.ReactNode,\n { wrapper = 'li' as T }: WrapOptions<T> = {}\n) {\n const flat = flattenChildren(children);\n\n const filterNull = flat.filter((child) => child !== null);\n\n return filterNull.map((child, i) => {\n if (React.isValidElement(child) && child.type === wrapper) {\n return child;\n }\n\n const key = React.isValidElement(child) && child.key != null ? child.key : i;\n\n return React.createElement(wrapper, { key }, child);\n });\n}\n","import cx from 'classix';\nimport { useLayoutEffect, useRef, useState } from 'react';\n\nimport { wrapChildren } from '@/utils/wrap-children';\n\nimport styles from './styles.module.css';\n\ntype ListElement = HTMLUListElement | HTMLOListElement;\n\nconst setListRef = (ref: React.Ref<ListElement> | undefined, node: ListElement | null) => {\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n};\n\nexport type ListProps = React.ComponentPropsWithoutRef<'ul'> & {\n columns?: number;\n compact?: boolean;\n controls?: React.ReactNode;\n horizontal?: boolean;\n layout?: 'grid' | 'masonry';\n maxVisibleItems?: number;\n ordered?: boolean;\n ref?: React.Ref<ListElement>;\n};\n\nexport function List({\n children,\n className,\n columns = 1,\n compact = false,\n controls,\n horizontal,\n layout = 'grid',\n maxVisibleItems,\n ordered,\n ref,\n style,\n ...props\n}: ListProps) {\n const cols = Number.isFinite(columns) ? Math.max(1, Math.floor(columns)) : 1;\n\n const listRef = useRef<ListElement | null>(null);\n const [visibleHeight, setVisibleHeight] = useState<number>();\n const itemLimit =\n layout === 'grid' &&\n cols === 1 &&\n !horizontal &&\n maxVisibleItems != null &&\n Number.isFinite(maxVisibleItems) &&\n maxVisibleItems >= 1\n ? Math.floor(maxVisibleItems)\n : undefined;\n const isOverflowing = Boolean(itemLimit) && visibleHeight != null;\n\n useLayoutEffect(() => {\n const node = listRef.current;\n if (!node || !itemLimit) return;\n\n const measure = () => {\n const items = Array.from(node.children).filter(\n (item): item is HTMLElement =>\n item instanceof HTMLElement && getComputedStyle(item).display !== 'none'\n );\n const lastVisible = items[itemLimit - 1];\n const height =\n items.length > itemLimit && lastVisible\n ? lastVisible.getBoundingClientRect().bottom -\n node.getBoundingClientRect().top +\n node.scrollTop +\n (parseFloat(getComputedStyle(node).paddingBottom) || 0)\n : undefined;\n setVisibleHeight(height);\n };\n const resizeObserver = new ResizeObserver(measure);\n const observeItems = () => {\n resizeObserver.disconnect();\n resizeObserver.observe(node);\n Array.from(node.children).forEach((item) => resizeObserver.observe(item));\n measure();\n };\n const mutationObserver = new MutationObserver(observeItems);\n mutationObserver.observe(node, { childList: true, subtree: true, characterData: true });\n observeItems();\n return () => {\n resizeObserver.disconnect();\n mutationObserver.disconnect();\n };\n }, [children, itemLimit, isOverflowing]);\n\n const classes = cx(\n className,\n styles.list,\n layout === 'masonry' ? styles.masonry : cols > 1 && styles.columns,\n Boolean(itemLimit) && styles.scrollable,\n isOverflowing && styles.overflowing,\n horizontal && styles.horizontal,\n compact && styles.compact\n );\n\n type withVars = React.CSSProperties & {\n '--list-columns'?: number;\n '--list-max-height'?: string;\n };\n\n const withVars: withVars = {\n ...style,\n '--list-columns': cols,\n '--list-max-height': itemLimit && visibleHeight != null ? `${visibleHeight}px` : undefined,\n };\n\n const list = ordered ? (\n <ol\n className={classes}\n ref={(node) => {\n listRef.current = node;\n setListRef(ref, node);\n }}\n style={withVars}\n {...props}\n tabIndex={props.tabIndex ?? (itemLimit && visibleHeight != null ? 0 : undefined)}\n >\n {wrapChildren(children)}\n </ol>\n ) : (\n <ul\n className={classes}\n ref={(node) => {\n listRef.current = node;\n setListRef(ref, node);\n }}\n style={withVars}\n {...props}\n tabIndex={props.tabIndex ?? (itemLimit && visibleHeight != null ? 0 : undefined)}\n >\n {wrapChildren(children)}\n </ul>\n );\n\n if (controls === undefined || controls === null) return list;\n\n return (\n <>\n <div className={styles.controls}>{controls}</div>\n {list}\n </>\n );\n}\n"],"names":["isFragmentElement","node","React","isValidElement","type","Fragment","flattenChildren","children","out","Children","forEach","child","props","push","wrapChildren","wrapper","filter","map","i","key","createElement","setListRef","ref","current","List","className","columns","compact","controls","horizontal","layout","maxVisibleItems","ordered","style","cols","Number","isFinite","Math","max","floor","listRef","useRef","visibleHeight","setVisibleHeight","useState","itemLimit","undefined","isOverflowing","Boolean","useLayoutEffect","measure","items","Array","from","item","HTMLElement","getComputedStyle","display","lastVisible","height","length","getBoundingClientRect","bottom","top","scrollTop","parseFloat","paddingBottom","resizeObserver","ResizeObserver","observeItems","disconnect","observe","mutationObserver","MutationObserver","childList","subtree","characterData","classes","cx","styles","list","masonry","scrollable","overflowing","withVars","jsx","tabIndex","jsxs"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/index52.css');const l=require("react/jsx-runtime"),n=require("../../classix-5H4IWnMA.cjs"),o="_loading_107mr_23",m="_spin_107mr_1",r="_small_107mr_40",c="_large_107mr_46",_="_ping_107mr_52",d="_sticky_107mr_78",s={loading:o,default:"_default_107mr_29",spin:m,small:r,large:c,ping:_,sticky:d},g={large:s.large,medium:s.medium,small:s.small},u=({variant:a="default",size:e="medium",sticky:i=!1,...t})=>l.jsx("div",{className:n.t(s.loading,i&&s.sticky),"data-component":"loading",children:l.jsx("span",{className:n.t(s.loading,s[a],g[e]),...t})});exports.Loading=u;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as l } from "react/jsx-runtime";
|
|
2
2
|
import { t as a } from "../../classix-DG18itHa.js";
|
|
3
|
-
import '../../assets/
|
|
3
|
+
import '../../assets/index52.css';const o = "_loading_107mr_23", _ = "_spin_107mr_1", e = "_small_107mr_40", r = "_large_107mr_46", c = "_ping_107mr_52", d = "_sticky_107mr_78", s = {
|
|
4
4
|
loading: o,
|
|
5
5
|
default: "_default_107mr_29",
|
|
6
6
|
spin: _,
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),j=require("../button/index.cjs"),M=require("../icon/index.cjs"),i=require("../../menu-popover-CdhAgSQb.cjs");function v(e){return[...e].sort((n,a)=>+!!n.isDanger-+!!a.isDanger)}const D=e=>v(e).map(n=>({button:r.jsxs(j.Button,{"aria-label":n.accessibleLabel,disabled:n.disabled,children:[n.icon&&r.jsx(M.Icon,{gap:"right",name:n.icon,size:"small"}),r.jsx("span",{children:n.label})]}),id:n.id,isActive:n.isActive,isDanger:n.isDanger,value:n})),h=({inline:e=!1,items:n,menuAccessibleLabel:a="Menu",onItemSelect:s,triggerAccessibleLabel:l="Open menu",triggerIcon:p="DotsThreeVertical",triggerLabel:b,variant:g="popover"})=>{const d=D(n);return g==="simple"?r.jsx(i.MenuActionList,{actions:d,menuAccessibleLabel:a,onSelect:o=>{var u;(u=o.onSelect)==null||u.call(o),s==null||s(o)},"data-component":"menu"}):r.jsx(i.MenuPopover,{inline:e,triggerAccessibleLabel:l,triggerIcon:p,triggerLabel:b,"data-component":"menu",children:({close:o,initialFocus:u,isPositioned:x})=>r.jsx(i.MenuActionList,{actions:d,initialFocus:u,readyToFocus:x,menuAccessibleLabel:a,onSelect:c=>{var t;(t=c.onSelect)==null||t.call(c),s==null||s(c),o()},usesMenuSemantics:!0})})};exports.Menu=h;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../src/components/menu/index.tsx"],"sourcesContent":["import { Button } from '@/components/button';\nimport { Icon, type IconName } from '@/components/icon';\n\nimport { type MenuAction, MenuActionList } from './action-list';\nimport { MenuPopover } from './menu-popover';\n\nexport type MenuItem = {\n accessibleLabel?: string;\n disabled?: boolean;\n icon?: IconName;\n id?: string;\n isActive?: boolean;\n isDanger?: boolean;\n label: React.ReactNode;\n onSelect?: () => void;\n};\n\ntype MenuSharedProps = {\n items: MenuItem[];\n menuAccessibleLabel?: string;\n onItemSelect?: (item: MenuItem) => void;\n};\n\ntype PopoverMenuProps = {\n inline?: boolean;\n triggerAccessibleLabel?: string;\n triggerIcon?: IconName;\n triggerLabel?: React.ReactNode;\n variant?: 'popover';\n};\n\ntype SimpleMenuProps = {\n inline?: never;\n triggerAccessibleLabel?: never;\n triggerIcon?: never;\n triggerLabel?: never;\n variant: 'simple';\n};\n\nexport type MenuProps = MenuSharedProps & (PopoverMenuProps | SimpleMenuProps);\n\nfunction sortDangerItemsLast(items: MenuItem[]) {\n return [...items].sort(\n (left, right) => Number(Boolean(left.isDanger)) - Number(Boolean(right.isDanger))\n );\n}\n\nconst getActions = (items: MenuItem[]): MenuAction<MenuItem>[] =>\n sortDangerItemsLast(items).map((item) => ({\n button: (\n <Button\n aria-label={item.accessibleLabel}\n disabled={item.disabled}\n >\n {item.icon && (\n <Icon\n gap='right'\n name={item.icon}\n size='small'\n />\n )}\n <span>{item.label}</span>\n </Button>\n ),\n id: item.id,\n isActive: item.isActive,\n isDanger: item.isDanger,\n value: item,\n }));\n\nexport const Menu = ({\n inline = false,\n items,\n menuAccessibleLabel = 'Menu',\n onItemSelect,\n triggerAccessibleLabel = 'Open menu',\n triggerIcon = 'DotsThreeVertical',\n triggerLabel,\n variant = 'popover',\n}: MenuProps) => {\n const actions = getActions(items);\n\n if (variant === 'simple') {\n return (\n <MenuActionList\n actions={actions}\n menuAccessibleLabel={menuAccessibleLabel}\n onSelect={(item) => {\n item.onSelect?.();\n onItemSelect?.(item);\n }}\n />\n );\n }\n\n return (\n <MenuPopover\n inline={inline}\n triggerAccessibleLabel={triggerAccessibleLabel}\n triggerIcon={triggerIcon}\n triggerLabel={triggerLabel}\n >\n {({ close, initialFocus }) => (\n <MenuActionList\n actions={actions}\n initialFocus={initialFocus}\n menuAccessibleLabel={menuAccessibleLabel}\n onSelect={(item) => {\n item.onSelect?.();\n onItemSelect?.(item);\n close();\n }}\n usesMenuSemantics\n />\n )}\n </MenuPopover>\n );\n};\n"],"names":["sortDangerItemsLast","items","sort","left","right","Number","Boolean","isDanger","getActions","map","item","button","Button","accessibleLabel","disabled","icon","Icon","jsx","label","id","isActive","value","Menu","inline","menuAccessibleLabel","onItemSelect","triggerAccessibleLabel","triggerIcon","triggerLabel","variant","actions","MenuActionList","onSelect","MenuPopover","close","initialFocus"],"mappings":"kOAyCA,SAASA,EAAoBC,EAAmB,CAC9C,MAAO,CAAC,GAAGA,CAAK,EAAEC,KAChB,CAACC,EAAMC,IAAUC,CAAOC,EAAQH,EAAKI,SAAaF,CAAOC,EAAQF,EAAMG,QACzE,CACF,CAEA,MAAMC,EAAcP,GAClBD,EAAoBC,CAAK,EAAEQ,IAAKC,IAAU,CACxCC,cACGC,SAAA,CACC,aAAYF,EAAKG,gBACjB,SAAUH,EAAKI,SAEdJ,SAAAA,CAAAA,EAAKK,YACHC,EAAAA,KAAA,CACC,IAAI,QACJ,KAAMN,EAAKK,KACX,KAAK,OAAA,CAAO,EAGhBE,EAAAA,IAAC,OAAA,CAAMP,SAAAA,EAAKQ,KAAAA,CAAM,CAAA,EACpB,EAEFC,GAAIT,EAAKS,GACTC,SAAUV,EAAKU,SACfb,SAAUG,EAAKH,SACfc,MAAOX,CACT,EAAE,EAESY,EAAOA,CAAC,CACnBC,OAAAA,EAAS,GACTtB,MAAAA,EACAuB,oBAAAA,EAAsB,OACtBC,aAAAA,EACAC,uBAAAA,EAAyB,YACzBC,YAAAA,EAAc,oBACdC,aAAAA,EACAC,QAAAA,EAAU,SACD,IAAM,CACf,MAAMC,EAAUtB,EAAWP,CAAK,EAEhC,OAAI4B,IAAY,SAEZZ,EAAAA,IAACc,EAAAA,eAAA,CACC,QAAAD,EACA,oBAAAN,EACA,SAAWd,GAAS,QAClBA,EAAAA,EAAKsB,WAALtB,MAAAA,EAAAA,KAAAA,GACAe,GAAAA,MAAAA,EAAef,EACjB,EAAE,iBAAA,OAAA,EAMNO,MAACgB,EAAAA,aACC,OAAAV,EACA,uBAAAG,EACA,YAAAC,EACA,aAAAC,EAA2B,iBAAA,OAE1B,SAAA,CAAC,CAAEM,MAAAA,EAAOC,aAAAA,
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/menu/index.tsx"],"sourcesContent":["import { Button } from '@/components/button';\nimport { Icon, type IconName } from '@/components/icon';\n\nimport { type MenuAction, MenuActionList } from './action-list';\nimport { MenuPopover } from './menu-popover';\n\nexport type MenuItem = {\n accessibleLabel?: string;\n disabled?: boolean;\n icon?: IconName;\n id?: string;\n isActive?: boolean;\n isDanger?: boolean;\n label: React.ReactNode;\n onSelect?: () => void;\n};\n\ntype MenuSharedProps = {\n items: MenuItem[];\n menuAccessibleLabel?: string;\n onItemSelect?: (item: MenuItem) => void;\n};\n\ntype PopoverMenuProps = {\n inline?: boolean;\n triggerAccessibleLabel?: string;\n triggerIcon?: IconName;\n triggerLabel?: React.ReactNode;\n variant?: 'popover';\n};\n\ntype SimpleMenuProps = {\n inline?: never;\n triggerAccessibleLabel?: never;\n triggerIcon?: never;\n triggerLabel?: never;\n variant: 'simple';\n};\n\nexport type MenuProps = MenuSharedProps & (PopoverMenuProps | SimpleMenuProps);\n\nfunction sortDangerItemsLast(items: MenuItem[]) {\n return [...items].sort(\n (left, right) => Number(Boolean(left.isDanger)) - Number(Boolean(right.isDanger))\n );\n}\n\nconst getActions = (items: MenuItem[]): MenuAction<MenuItem>[] =>\n sortDangerItemsLast(items).map((item) => ({\n button: (\n <Button\n aria-label={item.accessibleLabel}\n disabled={item.disabled}\n >\n {item.icon && (\n <Icon\n gap='right'\n name={item.icon}\n size='small'\n />\n )}\n <span>{item.label}</span>\n </Button>\n ),\n id: item.id,\n isActive: item.isActive,\n isDanger: item.isDanger,\n value: item,\n }));\n\nexport const Menu = ({\n inline = false,\n items,\n menuAccessibleLabel = 'Menu',\n onItemSelect,\n triggerAccessibleLabel = 'Open menu',\n triggerIcon = 'DotsThreeVertical',\n triggerLabel,\n variant = 'popover',\n}: MenuProps) => {\n const actions = getActions(items);\n\n if (variant === 'simple') {\n return (\n <MenuActionList\n actions={actions}\n menuAccessibleLabel={menuAccessibleLabel}\n onSelect={(item) => {\n item.onSelect?.();\n onItemSelect?.(item);\n }}\n />\n );\n }\n\n return (\n <MenuPopover\n inline={inline}\n triggerAccessibleLabel={triggerAccessibleLabel}\n triggerIcon={triggerIcon}\n triggerLabel={triggerLabel}\n >\n {({ close, initialFocus, isPositioned }) => (\n <MenuActionList\n actions={actions}\n initialFocus={initialFocus}\n readyToFocus={isPositioned}\n menuAccessibleLabel={menuAccessibleLabel}\n onSelect={(item) => {\n item.onSelect?.();\n onItemSelect?.(item);\n close();\n }}\n usesMenuSemantics\n />\n )}\n </MenuPopover>\n );\n};\n"],"names":["sortDangerItemsLast","items","sort","left","right","Number","Boolean","isDanger","getActions","map","item","button","Button","accessibleLabel","disabled","icon","Icon","jsx","label","id","isActive","value","Menu","inline","menuAccessibleLabel","onItemSelect","triggerAccessibleLabel","triggerIcon","triggerLabel","variant","actions","MenuActionList","onSelect","MenuPopover","close","initialFocus","isPositioned"],"mappings":"kOAyCA,SAASA,EAAoBC,EAAmB,CAC9C,MAAO,CAAC,GAAGA,CAAK,EAAEC,KAChB,CAACC,EAAMC,IAAUC,CAAOC,EAAQH,EAAKI,SAAaF,CAAOC,EAAQF,EAAMG,QACzE,CACF,CAEA,MAAMC,EAAcP,GAClBD,EAAoBC,CAAK,EAAEQ,IAAKC,IAAU,CACxCC,cACGC,SAAA,CACC,aAAYF,EAAKG,gBACjB,SAAUH,EAAKI,SAEdJ,SAAAA,CAAAA,EAAKK,YACHC,EAAAA,KAAA,CACC,IAAI,QACJ,KAAMN,EAAKK,KACX,KAAK,OAAA,CAAO,EAGhBE,EAAAA,IAAC,OAAA,CAAMP,SAAAA,EAAKQ,KAAAA,CAAM,CAAA,EACpB,EAEFC,GAAIT,EAAKS,GACTC,SAAUV,EAAKU,SACfb,SAAUG,EAAKH,SACfc,MAAOX,CACT,EAAE,EAESY,EAAOA,CAAC,CACnBC,OAAAA,EAAS,GACTtB,MAAAA,EACAuB,oBAAAA,EAAsB,OACtBC,aAAAA,EACAC,uBAAAA,EAAyB,YACzBC,YAAAA,EAAc,oBACdC,aAAAA,EACAC,QAAAA,EAAU,SACD,IAAM,CACf,MAAMC,EAAUtB,EAAWP,CAAK,EAEhC,OAAI4B,IAAY,SAEZZ,EAAAA,IAACc,EAAAA,eAAA,CACC,QAAAD,EACA,oBAAAN,EACA,SAAWd,GAAS,QAClBA,EAAAA,EAAKsB,WAALtB,MAAAA,EAAAA,KAAAA,GACAe,GAAAA,MAAAA,EAAef,EACjB,EAAE,iBAAA,OAAA,EAMNO,MAACgB,EAAAA,aACC,OAAAV,EACA,uBAAAG,EACA,YAAAC,EACA,aAAAC,EAA2B,iBAAA,OAE1B,SAAA,CAAC,CAAEM,MAAAA,EAAOC,aAAAA,EAAcC,aAAAA,CAAAA,UACtBL,EAAAA,eAAA,CACC,QAAAD,EACA,aAAAK,EACA,aAAcC,EACd,oBAAAZ,EACA,SAAWd,GAAS,QAClBA,EAAAA,EAAKsB,WAALtB,MAAAA,EAAAA,KAAAA,GACAe,GAAAA,MAAAA,EAAef,GACfwB,EAAAA,CACF,EACA,kBAAiB,EAAA,CAAA,EAGvB,CAEJ"}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { Button as
|
|
3
|
-
import { Icon as
|
|
4
|
-
import { M as
|
|
5
|
-
function
|
|
6
|
-
return [...
|
|
1
|
+
import { jsx as s, jsxs as M } from "react/jsx-runtime";
|
|
2
|
+
import { Button as h } from "../button/index.js";
|
|
3
|
+
import { Icon as v } from "../icon/index.js";
|
|
4
|
+
import { M as l, a as t } from "../../menu-popover-D-Ax5zzy.js";
|
|
5
|
+
function x(o) {
|
|
6
|
+
return [...o].sort((n, u) => +!!n.isDanger - +!!u.isDanger);
|
|
7
7
|
}
|
|
8
|
-
const
|
|
9
|
-
button: /* @__PURE__ */
|
|
10
|
-
n.icon && /* @__PURE__ */
|
|
11
|
-
/* @__PURE__ */
|
|
8
|
+
const A = (o) => x(o).map((n) => ({
|
|
9
|
+
button: /* @__PURE__ */ M(h, { "aria-label": n.accessibleLabel, disabled: n.disabled, children: [
|
|
10
|
+
n.icon && /* @__PURE__ */ s(v, { gap: "right", name: n.icon, size: "small" }),
|
|
11
|
+
/* @__PURE__ */ s("span", { children: n.label })
|
|
12
12
|
] }),
|
|
13
13
|
id: n.id,
|
|
14
14
|
isActive: n.isActive,
|
|
15
15
|
isDanger: n.isDanger,
|
|
16
16
|
value: n
|
|
17
|
-
})),
|
|
18
|
-
inline:
|
|
17
|
+
})), T = ({
|
|
18
|
+
inline: o = !1,
|
|
19
19
|
items: n,
|
|
20
20
|
menuAccessibleLabel: u = "Menu",
|
|
21
21
|
onItemSelect: r,
|
|
@@ -24,19 +24,20 @@ const x = (s) => t(s).map((n) => ({
|
|
|
24
24
|
triggerLabel: b,
|
|
25
25
|
variant: f = "popover"
|
|
26
26
|
}) => {
|
|
27
|
-
const
|
|
28
|
-
return f === "simple" ? /* @__PURE__ */
|
|
29
|
-
var
|
|
30
|
-
(
|
|
31
|
-
}, "data-component": "menu" }) : /* @__PURE__ */
|
|
27
|
+
const p = A(n);
|
|
28
|
+
return f === "simple" ? /* @__PURE__ */ s(l, { actions: p, menuAccessibleLabel: u, onSelect: (a) => {
|
|
29
|
+
var c;
|
|
30
|
+
(c = a.onSelect) == null || c.call(a), r == null || r(a);
|
|
31
|
+
}, "data-component": "menu" }) : /* @__PURE__ */ s(t, { inline: o, triggerAccessibleLabel: e, triggerIcon: g, triggerLabel: b, "data-component": "menu", children: ({
|
|
32
32
|
close: a,
|
|
33
|
-
initialFocus:
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
initialFocus: c,
|
|
34
|
+
isPositioned: D
|
|
35
|
+
}) => /* @__PURE__ */ s(l, { actions: p, initialFocus: c, readyToFocus: D, menuAccessibleLabel: u, onSelect: (i) => {
|
|
36
|
+
var d;
|
|
37
|
+
(d = i.onSelect) == null || d.call(i), r == null || r(i), a();
|
|
37
38
|
}, usesMenuSemantics: !0 }) });
|
|
38
39
|
};
|
|
39
40
|
export {
|
|
40
|
-
|
|
41
|
+
T as Menu
|
|
41
42
|
};
|
|
42
43
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/menu/index.tsx"],"sourcesContent":["import { Button } from '@/components/button';\nimport { Icon, type IconName } from '@/components/icon';\n\nimport { type MenuAction, MenuActionList } from './action-list';\nimport { MenuPopover } from './menu-popover';\n\nexport type MenuItem = {\n accessibleLabel?: string;\n disabled?: boolean;\n icon?: IconName;\n id?: string;\n isActive?: boolean;\n isDanger?: boolean;\n label: React.ReactNode;\n onSelect?: () => void;\n};\n\ntype MenuSharedProps = {\n items: MenuItem[];\n menuAccessibleLabel?: string;\n onItemSelect?: (item: MenuItem) => void;\n};\n\ntype PopoverMenuProps = {\n inline?: boolean;\n triggerAccessibleLabel?: string;\n triggerIcon?: IconName;\n triggerLabel?: React.ReactNode;\n variant?: 'popover';\n};\n\ntype SimpleMenuProps = {\n inline?: never;\n triggerAccessibleLabel?: never;\n triggerIcon?: never;\n triggerLabel?: never;\n variant: 'simple';\n};\n\nexport type MenuProps = MenuSharedProps & (PopoverMenuProps | SimpleMenuProps);\n\nfunction sortDangerItemsLast(items: MenuItem[]) {\n return [...items].sort(\n (left, right) => Number(Boolean(left.isDanger)) - Number(Boolean(right.isDanger))\n );\n}\n\nconst getActions = (items: MenuItem[]): MenuAction<MenuItem>[] =>\n sortDangerItemsLast(items).map((item) => ({\n button: (\n <Button\n aria-label={item.accessibleLabel}\n disabled={item.disabled}\n >\n {item.icon && (\n <Icon\n gap='right'\n name={item.icon}\n size='small'\n />\n )}\n <span>{item.label}</span>\n </Button>\n ),\n id: item.id,\n isActive: item.isActive,\n isDanger: item.isDanger,\n value: item,\n }));\n\nexport const Menu = ({\n inline = false,\n items,\n menuAccessibleLabel = 'Menu',\n onItemSelect,\n triggerAccessibleLabel = 'Open menu',\n triggerIcon = 'DotsThreeVertical',\n triggerLabel,\n variant = 'popover',\n}: MenuProps) => {\n const actions = getActions(items);\n\n if (variant === 'simple') {\n return (\n <MenuActionList\n actions={actions}\n menuAccessibleLabel={menuAccessibleLabel}\n onSelect={(item) => {\n item.onSelect?.();\n onItemSelect?.(item);\n }}\n />\n );\n }\n\n return (\n <MenuPopover\n inline={inline}\n triggerAccessibleLabel={triggerAccessibleLabel}\n triggerIcon={triggerIcon}\n triggerLabel={triggerLabel}\n >\n {({ close, initialFocus }) => (\n <MenuActionList\n actions={actions}\n initialFocus={initialFocus}\n menuAccessibleLabel={menuAccessibleLabel}\n onSelect={(item) => {\n item.onSelect?.();\n onItemSelect?.(item);\n close();\n }}\n usesMenuSemantics\n />\n )}\n </MenuPopover>\n );\n};\n"],"names":["sortDangerItemsLast","items","sort","left","right","Number","Boolean","isDanger","getActions","map","item","button","Button","accessibleLabel","disabled","icon","Icon","jsx","label","id","isActive","value","Menu","inline","menuAccessibleLabel","onItemSelect","triggerAccessibleLabel","triggerIcon","triggerLabel","variant","actions","MenuActionList","onSelect","MenuPopover","close","initialFocus"],"mappings":";;;;AAyCA,SAASA,EAAoBC,GAAmB;AAC9C,SAAO,CAAC,GAAGA,CAAK,EAAEC,KAChB,CAACC,GAAMC,MAAUC,CAAOC,EAAQH,EAAKI,WAAaF,CAAOC,EAAQF,EAAMG,QACzE;AACF;AAEA,MAAMC,IAAaA,CAACP,MAClBD,EAAoBC,CAAK,EAAEQ,IAAKC,CAAAA,OAAU;AAAA,EACxCC,0BACGC,GAAA,EACC,cAAYF,EAAKG,iBACjB,UAAUH,EAAKI,UAEdJ,UAAAA;AAAAA,IAAAA,EAAKK,0BACHC,GAAA,EACC,KAAI,SACJ,MAAMN,EAAKK,MACX,MAAK,QAAA,CAAO;AAAA,IAGhB,gBAAAE,EAAC,QAAA,EAAMP,UAAAA,EAAKQ,MAAAA,CAAM;AAAA,EAAA,GACpB;AAAA,EAEFC,IAAIT,EAAKS;AAAAA,EACTC,UAAUV,EAAKU;AAAAA,EACfb,UAAUG,EAAKH;AAAAA,EACfc,OAAOX;AACT,EAAE,GAESY,IAAOA,CAAC;AAAA,EACnBC,QAAAA,IAAS;AAAA,EACTtB,OAAAA;AAAAA,EACAuB,qBAAAA,IAAsB;AAAA,EACtBC,cAAAA;AAAAA,EACAC,wBAAAA,IAAyB;AAAA,EACzBC,aAAAA,IAAc;AAAA,EACdC,cAAAA;AAAAA,EACAC,SAAAA,IAAU;AACD,MAAM;AACf,QAAMC,IAAUtB,EAAWP,CAAK;AAEhC,SAAI4B,MAAY,WAEZ,gBAAAZ,EAACc,GAAA,EACC,SAAAD,GACA,qBAAAN,GACA,UAAWd,CAAAA,MAAS;;AAClBA,KAAAA,IAAAA,EAAKsB,aAALtB,QAAAA,EAAAA,KAAAA,IACAe,KAAAA,QAAAA,EAAef;AAAAA,EACjB,GAAE,kBAAA,QAAA,IAMN,gBAAAO,EAACgB,KACC,QAAAV,GACA,wBAAAG,GACA,aAAAC,GACA,cAAAC,GAA2B,kBAAA,QAE1B,UAAA,CAAC;AAAA,IAAEM,OAAAA;AAAAA,IAAOC,cAAAA;AAAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/menu/index.tsx"],"sourcesContent":["import { Button } from '@/components/button';\nimport { Icon, type IconName } from '@/components/icon';\n\nimport { type MenuAction, MenuActionList } from './action-list';\nimport { MenuPopover } from './menu-popover';\n\nexport type MenuItem = {\n accessibleLabel?: string;\n disabled?: boolean;\n icon?: IconName;\n id?: string;\n isActive?: boolean;\n isDanger?: boolean;\n label: React.ReactNode;\n onSelect?: () => void;\n};\n\ntype MenuSharedProps = {\n items: MenuItem[];\n menuAccessibleLabel?: string;\n onItemSelect?: (item: MenuItem) => void;\n};\n\ntype PopoverMenuProps = {\n inline?: boolean;\n triggerAccessibleLabel?: string;\n triggerIcon?: IconName;\n triggerLabel?: React.ReactNode;\n variant?: 'popover';\n};\n\ntype SimpleMenuProps = {\n inline?: never;\n triggerAccessibleLabel?: never;\n triggerIcon?: never;\n triggerLabel?: never;\n variant: 'simple';\n};\n\nexport type MenuProps = MenuSharedProps & (PopoverMenuProps | SimpleMenuProps);\n\nfunction sortDangerItemsLast(items: MenuItem[]) {\n return [...items].sort(\n (left, right) => Number(Boolean(left.isDanger)) - Number(Boolean(right.isDanger))\n );\n}\n\nconst getActions = (items: MenuItem[]): MenuAction<MenuItem>[] =>\n sortDangerItemsLast(items).map((item) => ({\n button: (\n <Button\n aria-label={item.accessibleLabel}\n disabled={item.disabled}\n >\n {item.icon && (\n <Icon\n gap='right'\n name={item.icon}\n size='small'\n />\n )}\n <span>{item.label}</span>\n </Button>\n ),\n id: item.id,\n isActive: item.isActive,\n isDanger: item.isDanger,\n value: item,\n }));\n\nexport const Menu = ({\n inline = false,\n items,\n menuAccessibleLabel = 'Menu',\n onItemSelect,\n triggerAccessibleLabel = 'Open menu',\n triggerIcon = 'DotsThreeVertical',\n triggerLabel,\n variant = 'popover',\n}: MenuProps) => {\n const actions = getActions(items);\n\n if (variant === 'simple') {\n return (\n <MenuActionList\n actions={actions}\n menuAccessibleLabel={menuAccessibleLabel}\n onSelect={(item) => {\n item.onSelect?.();\n onItemSelect?.(item);\n }}\n />\n );\n }\n\n return (\n <MenuPopover\n inline={inline}\n triggerAccessibleLabel={triggerAccessibleLabel}\n triggerIcon={triggerIcon}\n triggerLabel={triggerLabel}\n >\n {({ close, initialFocus, isPositioned }) => (\n <MenuActionList\n actions={actions}\n initialFocus={initialFocus}\n readyToFocus={isPositioned}\n menuAccessibleLabel={menuAccessibleLabel}\n onSelect={(item) => {\n item.onSelect?.();\n onItemSelect?.(item);\n close();\n }}\n usesMenuSemantics\n />\n )}\n </MenuPopover>\n );\n};\n"],"names":["sortDangerItemsLast","items","sort","left","right","Number","Boolean","isDanger","getActions","map","item","button","Button","accessibleLabel","disabled","icon","Icon","jsx","label","id","isActive","value","Menu","inline","menuAccessibleLabel","onItemSelect","triggerAccessibleLabel","triggerIcon","triggerLabel","variant","actions","MenuActionList","onSelect","MenuPopover","close","initialFocus","isPositioned"],"mappings":";;;;AAyCA,SAASA,EAAoBC,GAAmB;AAC9C,SAAO,CAAC,GAAGA,CAAK,EAAEC,KAChB,CAACC,GAAMC,MAAUC,CAAOC,EAAQH,EAAKI,WAAaF,CAAOC,EAAQF,EAAMG,QACzE;AACF;AAEA,MAAMC,IAAaA,CAACP,MAClBD,EAAoBC,CAAK,EAAEQ,IAAKC,CAAAA,OAAU;AAAA,EACxCC,0BACGC,GAAA,EACC,cAAYF,EAAKG,iBACjB,UAAUH,EAAKI,UAEdJ,UAAAA;AAAAA,IAAAA,EAAKK,0BACHC,GAAA,EACC,KAAI,SACJ,MAAMN,EAAKK,MACX,MAAK,QAAA,CAAO;AAAA,IAGhB,gBAAAE,EAAC,QAAA,EAAMP,UAAAA,EAAKQ,MAAAA,CAAM;AAAA,EAAA,GACpB;AAAA,EAEFC,IAAIT,EAAKS;AAAAA,EACTC,UAAUV,EAAKU;AAAAA,EACfb,UAAUG,EAAKH;AAAAA,EACfc,OAAOX;AACT,EAAE,GAESY,IAAOA,CAAC;AAAA,EACnBC,QAAAA,IAAS;AAAA,EACTtB,OAAAA;AAAAA,EACAuB,qBAAAA,IAAsB;AAAA,EACtBC,cAAAA;AAAAA,EACAC,wBAAAA,IAAyB;AAAA,EACzBC,aAAAA,IAAc;AAAA,EACdC,cAAAA;AAAAA,EACAC,SAAAA,IAAU;AACD,MAAM;AACf,QAAMC,IAAUtB,EAAWP,CAAK;AAEhC,SAAI4B,MAAY,WAEZ,gBAAAZ,EAACc,GAAA,EACC,SAAAD,GACA,qBAAAN,GACA,UAAWd,CAAAA,MAAS;;AAClBA,KAAAA,IAAAA,EAAKsB,aAALtB,QAAAA,EAAAA,KAAAA,IACAe,KAAAA,QAAAA,EAAef;AAAAA,EACjB,GAAE,kBAAA,QAAA,IAMN,gBAAAO,EAACgB,KACC,QAAAV,GACA,wBAAAG,GACA,aAAAC,GACA,cAAAC,GAA2B,kBAAA,QAE1B,UAAA,CAAC;AAAA,IAAEM,OAAAA;AAAAA,IAAOC,cAAAA;AAAAA,IAAcC,cAAAA;AAAAA,EAAAA,wBACtBL,GAAA,EACC,SAAAD,GACA,cAAAK,GACA,cAAcC,GACd,qBAAAZ,GACA,UAAWd,CAAAA,MAAS;;AAClBA,KAAAA,IAAAA,EAAKsB,aAALtB,QAAAA,EAAAA,KAAAA,IACAe,KAAAA,QAAAA,EAAef,IACfwB,EAAAA;AAAAA,EACF,GACA,mBAAiB,GAAA,CAAA,GAGvB;AAEJ;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/index16.css');const e=require("react/jsx-runtime"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/index16.css');const e=require("react/jsx-runtime"),j=require("../../classix-5H4IWnMA.cjs"),h=require("../avatar/index.cjs"),N=require("../icon/index.cjs"),w="_attachments_1crfp_1",y="_footer_1crfp_27",S="_message_1crfp_11",b="_timestamp_1crfp_147",q="_actions_1crfp_152",I="_preview_1crfp_164",s={attachments:w,"message-group":"_message-group_1crfp_11",footer:y,message:S,timestamp:b,actions:q,preview:I},M=({actions:i,appearance:m="default",attachments:o,author:a,authorColor:l,authorImageUrl:d,authorLink:_,authorRole:p,content:g,iconName:f="Info",id:u,preview:v,timestamp:r,timestampText:x,type:t="default"})=>{const c=r?new Date(r):void 0,n=c?e.jsx("time",{className:s.timestamp,dateTime:c.toISOString(),children:x??c.toLocaleString()}):null;return e.jsxs("div",{className:s["message-group"],"data-message-type":t,"data-component":"message",children:[a&&e.jsx(h.Avatar,{accessibleLabel:a,color:l,imageUrl:d,link:_,name:a,role:p}),t==="system"&&n,e.jsxs("div",{className:j.t(s.message,v&&s.preview),"data-appearance":m,"data-id":u,"data-type":t,children:[t=="system"&&e.jsx(N.Icon,{gap:"right",name:f,size:"tiny"}),g]}),o&&e.jsx("div",{className:s.attachments,children:o}),t!=="system"&&(i?e.jsxs("div",{className:s.footer,children:[n,e.jsx("div",{className:s.actions,"data-message-actions":!0,children:i})]}):n)]})};exports.Message=M;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../src/components/message/index.tsx"],"sourcesContent":["import cx from 'classix';\n\nimport type { IconName } from '@/components/icon';\n\nimport { Avatar, type AvatarColor } from '../avatar';\nimport { Icon } from '../icon';\nimport styles from './styles.module.css';\n\nexport type MessageOptions = {\n
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/message/index.tsx"],"sourcesContent":["import cx from 'classix';\n\nimport type { IconName } from '@/components/icon';\n\nimport { Avatar, type AvatarColor } from '../avatar';\nimport { Icon } from '../icon';\nimport styles from './styles.module.css';\n\nexport type MessageOptions = {\n actions?: React.ReactNode;\n appearance?: 'default' | 'document' | 'file';\n attachments?: React.ReactNode;\n author?: string;\n authorColor?: AvatarColor;\n authorImageUrl?: string;\n authorLink?: string;\n authorRole?: string;\n content: React.ReactNode;\n iconName?: IconName;\n id: string;\n preview?: boolean;\n timestamp?: Date | string;\n timestampText?: React.ReactNode;\n type?: 'default' | 'minimal' | 'system' | 'user';\n};\n\nexport const Message = ({\n actions,\n appearance = 'default',\n attachments,\n author,\n authorColor,\n authorImageUrl,\n authorLink,\n authorRole,\n content,\n iconName = 'Info',\n id,\n preview,\n timestamp,\n timestampText,\n type = 'default',\n}: MessageOptions) => {\n const date = timestamp ? new Date(timestamp) : undefined;\n const timestampElement = date ? (\n <time\n className={styles.timestamp}\n dateTime={date.toISOString()}\n >\n {timestampText ?? date.toLocaleString()}\n </time>\n ) : null;\n\n return (\n <div\n className={styles['message-group']}\n data-message-type={type}\n >\n {author && (\n <Avatar\n accessibleLabel={author}\n color={authorColor}\n imageUrl={authorImageUrl}\n link={authorLink}\n name={author}\n role={authorRole}\n />\n )}\n {type === 'system' && timestampElement}\n <div\n className={cx(styles.message, preview && styles.preview)}\n data-appearance={appearance}\n data-id={id}\n data-type={type}\n >\n {type == 'system' && (\n <Icon\n gap='right'\n name={iconName}\n size='tiny'\n />\n )}\n {content}\n </div>\n {attachments && <div className={styles.attachments}>{attachments}</div>}\n {type !== 'system' &&\n (actions ? (\n <div className={styles.footer}>\n {timestampElement}\n <div\n className={styles.actions}\n data-message-actions\n >\n {actions}\n </div>\n </div>\n ) : (\n timestampElement\n ))}\n </div>\n );\n};\n"],"names":["Message","actions","appearance","attachments","author","authorColor","authorImageUrl","authorLink","authorRole","content","iconName","id","preview","timestamp","timestampText","type","date","Date","undefined","timestampElement","jsx","styles","toISOString","toLocaleString","jsxs","Avatar","cx","message","Icon","footer"],"mappings":"udA0BaA,EAAUA,CAAC,CACtBC,QAAAA,EACAC,WAAAA,EAAa,UACbC,YAAAA,EACAC,OAAAA,EACAC,YAAAA,EACAC,eAAAA,EACAC,WAAAA,EACAC,WAAAA,EACAC,QAAAA,EACAC,SAAAA,EAAW,OACXC,GAAAA,EACAC,QAAAA,EACAC,UAAAA,EACAC,cAAAA,EACAC,KAAAA,EAAO,SACO,IAAM,CACpB,MAAMC,EAAOH,EAAY,IAAII,KAAKJ,CAAS,EAAIK,OACzCC,EAAmBH,EACvBI,EAAAA,IAAC,OAAA,CACC,UAAWC,EAAOR,UAClB,SAAUG,EAAKM,cAEdR,SAAAA,GAAiBE,EAAKO,eAAAA,EACzB,EACE,KAEJ,OACEC,OAAC,OACC,UAAWH,EAAO,eAAe,EACjC,oBAAmBN,EAAK,iBAAA,UAEvBX,SAAAA,CAAAA,GACCgB,EAAAA,IAACK,EAAAA,OAAA,CACC,gBAAiBrB,EACjB,MAAOC,EACP,SAAUC,EACV,KAAMC,EACN,KAAMH,EACN,KAAMI,EAAW,EAGpBO,IAAS,UAAYI,EACtBK,EAAAA,KAAC,MAAA,CACC,UAAWE,EAAAA,EAAGL,EAAOM,QAASf,GAAWS,EAAOT,OAAO,EACvD,kBAAiBV,EACjB,UAASS,EACT,YAAWI,EAEVA,SAAAA,CAAAA,GAAQ,gBACNa,EAAAA,KAAA,CACC,IAAI,QACJ,KAAMlB,EACN,KAAK,MAAA,CAAM,EAGdD,CAAAA,EACH,EACCN,GAAeiB,EAAAA,IAAC,MAAA,CAAI,UAAWC,EAAOlB,YAAcA,SAAAA,EAAY,EAChEY,IAAS,WACPd,SACE,MAAA,CAAI,UAAWoB,EAAOQ,OACpBV,SAAAA,CAAAA,QACA,MAAA,CACC,UAAWE,EAAOpB,QAClB,uBAAoB,GAEnBA,SAAAA,CAAAA,CACH,CAAA,CAAA,CACF,EAEAkB,EAAAA,EAEN,CAEJ"}
|