@panneau/lists 5.0.0-alpha.7 → 5.0.0-alpha.9

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.
@@ -1 +1 @@
1
- {"version":3,"file":"displays.js","names":["Check","Minus","toReferences","formatDuration","Badge","Icon","usePanneauIntl","messages","DisplayEntry","DisplayProps","getFieldOptions","getOptionLabel","toText","styles","EmptyValue","$","_c","t0","Symbol","for","empty","isEmpty","value","undefined","Array","isArray","length","TextDisplay","intl","t1","locale","text","t2","RichTextDisplay","replace","trim","NumberDisplay","number","Number","NaN","isNaN","formatNumber","BooleanDisplay","checked","boolean","true","false","t3","formatMessage","yes","no","t4","t5","DATE_ONLY","TIME_ONLY","parseDate","Date","day","exec","date","getTime","DateDisplay","bb0","String","formatDate","dateStyle","DateTimeDisplay","timeStyle","TimeDisplay","match","formatTime","SelectDisplay","field","options","values","badges","map","entry","RelationDisplay","references","_temp","join","reference","label","UrlDisplay","link","EmailDisplay","TelDisplay","DurationDisplay","precision","settings","JsonDisplay","json","JSON","stringify","code","slice","TagsDisplay","tags","filter","_temp2","tag_0","tag","find","option","EmbedDisplay","url","title","thumbnailUrl","thumbnail","media","LocationDisplay","lat","lng","address","maximumFractionDigits","format","ColorDisplay","swatch","backgroundColor","color","MediaDisplay","name","filename","Record","source","builtInDisplays","Readonly","textarea","slug","richtext","datetime","time","select","relation","email","tel","range","duration","embed","location","_c","styles"],"sources":["../../src/displays/displays.tsx"],"sourcesContent":["import { Check, Minus } from 'lucide-react';\n\nimport { toReferences } from '@panneau/fields';\nimport { formatDuration } from '@panneau/fields/duration';\nimport { Badge, Icon, usePanneauIntl } from '@panneau/ui';\n\nimport { messages } from '../messages';\nimport type { DisplayEntry, DisplayProps } from '../types';\nimport { getFieldOptions, getOptionLabel, toText } from '../values';\nimport styles from './Displays.module.css';\n\n/** What a cell shows without a value. Hidden from assistive technologies, which skip the cell. */\nexport function EmptyValue() {\n return (\n <span className={styles.empty} aria-hidden=\"true\">\n —\n </span>\n );\n}\n\nfunction isEmpty(value: unknown): boolean {\n return (\n value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0)\n );\n}\n\n/** Text, on two lines at most. The default display. */\nexport function TextDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n const text = toText(value, intl.locale);\n return text === '' ? <EmptyValue /> : <span className={styles.text}>{text}</span>;\n}\n\n/** HTML as plain text. */\nexport function RichTextDisplay({ value }: DisplayProps) {\n const text =\n typeof value === 'string'\n ? value\n .replace(/<[^>]*>/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim()\n : '';\n return text === '' ? <EmptyValue /> : <span className={styles.text}>{text}</span>;\n}\n\n/** A number, in the format of the locale. */\nexport function NumberDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n const number =\n typeof value === 'number' ? value : typeof value === 'string' ? Number(value) : NaN;\n if (Number.isNaN(number) || isEmpty(value)) {\n return <EmptyValue />;\n }\n return <span className={styles.number}>{intl.formatNumber(number)}</span>;\n}\n\n/** Yes or no, as an icon with its label. */\nexport function BooleanDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n if (value === null || value === undefined) {\n return <EmptyValue />;\n }\n const checked = value === true || value === 1 || value === 'true' || value === '1';\n return (\n <span className={`${styles.boolean} ${checked ? styles.true : styles.false}`}>\n <Icon\n icon={checked ? Check : Minus}\n label={intl.formatMessage(checked ? messages.yes : messages.no)}\n />\n </span>\n );\n}\n\nconst DATE_ONLY = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\nconst TIME_ONLY = /^(\\d{2}):(\\d{2})(?::(\\d{2}))?$/;\n\n/** A date (`2026-10-15`) as a local date, so that it doesn't move with the time zone. */\nfunction parseDate(value: unknown): Date | null {\n if (typeof value !== 'string' || value === '') {\n return null;\n }\n const day = DATE_ONLY.exec(value);\n const date =\n day !== null\n ? new Date(Number(day[1]), Number(day[2]) - 1, Number(day[3]))\n : new Date(value);\n return Number.isNaN(date.getTime()) ? null : date;\n}\n\n/** A date, in the format of the locale. */\nexport function DateDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n const date = parseDate(value);\n if (date === null) {\n return <EmptyValue />;\n }\n return <time dateTime={String(value)}>{intl.formatDate(date, { dateStyle: 'medium' })}</time>;\n}\n\n/** A date and a time, in the format and the time zone of the user. */\nexport function DateTimeDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n const date = parseDate(value);\n if (date === null) {\n return <EmptyValue />;\n }\n return (\n <time dateTime={String(value)}>\n {intl.formatDate(date, { dateStyle: 'medium', timeStyle: 'short' })}\n </time>\n );\n}\n\n/** A time of day (`14:30`), in the format of the locale. */\nexport function TimeDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n const match = typeof value === 'string' ? TIME_ONLY.exec(value) : null;\n if (match === null) {\n return <EmptyValue />;\n }\n const date = new Date(2000, 0, 1, Number(match[1]), Number(match[2]), Number(match[3] ?? 0));\n return <time dateTime={String(value)}>{intl.formatTime(date, { timeStyle: 'short' })}</time>;\n}\n\n/** The labels of the selected options, as badges. */\nexport function SelectDisplay({ value, field }: DisplayProps) {\n const options = getFieldOptions(field);\n const values: unknown[] = Array.isArray(value) ? value : isEmpty(value) ? [] : [value];\n if (values.length === 0) {\n return <EmptyValue />;\n }\n return (\n <span className={styles.badges}>\n {values.map((entry) => (\n <Badge key={String(entry)}>{getOptionLabel(options, entry) ?? String(entry)}</Badge>\n ))}\n </span>\n );\n}\n\n/** The labels of related items. */\nexport function RelationDisplay({ value }: DisplayProps) {\n const references = toReferences(value);\n if (references.length === 0) {\n return <EmptyValue />;\n }\n return (\n <span className={styles.text}>\n {references.map((reference) => reference.label).join(', ')}\n </span>\n );\n}\n\n/** A link that opens the URL. */\nexport function UrlDisplay({ value }: DisplayProps) {\n if (typeof value !== 'string' || value === '') {\n return <EmptyValue />;\n }\n return (\n <a className={styles.link} href={value} target=\"_blank\" rel=\"noreferrer\">\n {value.replace(/^https?:\\/\\//, '')}\n </a>\n );\n}\n\n/** A link that writes an email. */\nexport function EmailDisplay({ value }: DisplayProps) {\n if (typeof value !== 'string' || value === '') {\n return <EmptyValue />;\n }\n return (\n <a className={styles.link} href={`mailto:${value}`}>\n {value}\n </a>\n );\n}\n\n/** A link that calls the phone number. */\nexport function TelDisplay({ value }: DisplayProps) {\n if (typeof value !== 'string' || value.trim() === '') {\n return <EmptyValue />;\n }\n return (\n <a className={styles.link} href={`tel:${value.replace(/[^\\d+]/g, '')}`}>\n {value}\n </a>\n );\n}\n\n/** A duration in seconds, with its units: `1 h 5 min`, to the precision of its field. */\nexport function DurationDisplay({ value, field }: DisplayProps) {\n if (typeof value !== 'number' || Number.isNaN(value)) {\n return <EmptyValue />;\n }\n const precision = field?.settings?.precision === 'minutes' ? 'minutes' : 'seconds';\n return <span className={styles.number}>{formatDuration(value, { precision })}</span>;\n}\n\n/** JSON on one line, shortened. */\nexport function JsonDisplay({ value }: DisplayProps) {\n if (value === null || value === undefined || typeof value !== 'object') {\n return <EmptyValue />;\n }\n const json = JSON.stringify(value);\n return (\n <code className={styles.code} title={json.length > 80 ? json : undefined}>\n {json.length > 80 ? `${json.slice(0, 79)}…` : json}\n </code>\n );\n}\n\n/** Tags, as badges, with the labels of their options. */\nexport function TagsDisplay({ value, field }: DisplayProps) {\n const tags = Array.isArray(value) ? value.filter((tag) => typeof tag === 'string') : [];\n if (tags.length === 0) {\n return <EmptyValue />;\n }\n const options = field?.options ?? [];\n return (\n <span className={styles.tags}>\n {tags.map((tag) => (\n <Badge key={tag}>\n {options.find((option) => String(option.value) === tag)?.label ?? tag}\n </Badge>\n ))}\n </span>\n );\n}\n\n/** What a URL embeds: its thumbnail and title, linked to it. */\nexport function EmbedDisplay({ value }: DisplayProps) {\n if (\n value === null ||\n typeof value !== 'object' ||\n typeof (value as { url?: unknown }).url !== 'string'\n ) {\n return <EmptyValue />;\n }\n const { url, title, thumbnailUrl } = value as {\n url: string;\n title?: unknown;\n thumbnailUrl?: unknown;\n };\n return (\n <a className={`${styles.link} ${styles.media}`} href={url} target=\"_blank\" rel=\"noreferrer\">\n {typeof thumbnailUrl === 'string' ? (\n <img className={styles.thumbnail} src={thumbnailUrl} alt=\"\" />\n ) : null}\n <span className={styles.text}>\n {typeof title === 'string' ? title : url.replace(/^https?:\\/\\//, '')}\n </span>\n </a>\n );\n}\n\n/** A place: its address, or its coordinates. */\nexport function LocationDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n if (value === null || typeof value !== 'object') {\n return <EmptyValue />;\n }\n const { lat, lng, address } = value as { lat?: unknown; lng?: unknown; address?: unknown };\n if (typeof address === 'string' && address !== '') {\n return <span className={styles.text}>{address}</span>;\n }\n if (typeof lat !== 'number' || typeof lng !== 'number') {\n return <EmptyValue />;\n }\n const format = (number: number) => intl.formatNumber(number, { maximumFractionDigits: 5 });\n return (\n <span className={styles.number}>\n {format(lat)}, {format(lng)}\n </span>\n );\n}\n\n/** A swatch, with the color's code. */\nexport function ColorDisplay({ value }: DisplayProps) {\n if (typeof value !== 'string' || value === '') {\n return <EmptyValue />;\n }\n return (\n <span className={styles.color}>\n <span className={styles.swatch} style={{ backgroundColor: value }} aria-hidden=\"true\" />\n {value}\n </span>\n );\n}\n\n/** A thumbnail and the name of a media item (or of the first one). */\nexport function MediaDisplay({ value }: DisplayProps) {\n const media: unknown = Array.isArray(value) ? value[0] : value;\n if (media === null || typeof media !== 'object') {\n return <EmptyValue />;\n }\n const { thumbnailUrl, url, name, filename } = media as Record<string, unknown>;\n const source =\n typeof thumbnailUrl === 'string' ? thumbnailUrl : typeof url === 'string' ? url : null;\n const label = typeof name === 'string' ? name : typeof filename === 'string' ? filename : '';\n return (\n <span className={styles.media}>\n {source !== null ? <img className={styles.thumbnail} src={source} alt=\"\" /> : null}\n {label !== '' ? <span className={styles.text}>{label}</span> : null}\n </span>\n );\n}\n\n/**\n * The built-in displays, by name. A column's display is its `display`, its field's `display`, or\n * its field's type: field types are display names. Values without a known display are shown as\n * text.\n */\nexport const builtInDisplays: Readonly<Record<string, DisplayEntry>> = {\n text: TextDisplay,\n textarea: TextDisplay,\n slug: TextDisplay,\n richtext: RichTextDisplay,\n number: NumberDisplay,\n boolean: BooleanDisplay,\n date: DateDisplay,\n datetime: DateTimeDisplay,\n time: TimeDisplay,\n select: SelectDisplay,\n relation: RelationDisplay,\n url: UrlDisplay,\n email: EmailDisplay,\n color: ColorDisplay,\n media: MediaDisplay,\n tel: TelDisplay,\n range: NumberDisplay,\n duration: DurationDisplay,\n json: JsonDisplay,\n tags: TagsDisplay,\n embed: EmbedDisplay,\n location: LocationDisplay,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"displays.js","names":["Check","Minus","toReferences","formatDuration","Badge","Icon","Tone","usePanneauIntl","messages","DisplayEntry","DisplayProps","findOption","getFieldOptions","toText","styles","EmptyValue","$","_c","t0","Symbol","for","empty","isEmpty","value","undefined","Array","isArray","length","TextDisplay","field","intl","t1","locale","text","t2","settings","secret","formatMessage","secretValue","t3","RichTextDisplay","replace","trim","NumberDisplay","number","Number","NaN","isNaN","formatNumber","BooleanDisplay","checked","boolean","true","false","yes","no","t4","t5","DATE_ONLY","TIME_ONLY","parseDate","Date","day","exec","date","getTime","DateDisplay","bb0","String","formatDate","dateStyle","DateTimeDisplay","timeStyle","TimeDisplay","match","formatTime","SelectDisplay","options","values","badges","map","entry","option","tone","label","RelationDisplay","references","_temp","join","reference","UrlDisplay","link","EmailDisplay","TelDisplay","DurationDisplay","precision","JsonDisplay","json","JSON","stringify","code","slice","TagsDisplay","tags","filter","_temp2","tag_0","tag","find","EmbedDisplay","url","title","thumbnailUrl","thumbnail","media","LocationDisplay","lat","lng","address","maximumFractionDigits","format","ColorDisplay","swatch","backgroundColor","color","MediaDisplay","name","filename","Record","source","builtInDisplays","Readonly","textarea","slug","richtext","datetime","time","select","relation","email","tel","range","duration","embed","location","_c","styles"],"sources":["../../src/displays/displays.tsx"],"sourcesContent":["import { Check, Minus } from 'lucide-react';\n\nimport { toReferences } from '@panneau/fields';\nimport { formatDuration } from '@panneau/fields/duration';\nimport { Badge, Icon, type Tone, usePanneauIntl } from '@panneau/ui';\n\nimport { messages } from '../messages';\nimport type { DisplayEntry, DisplayProps } from '../types';\nimport { findOption, getFieldOptions, toText } from '../values';\nimport styles from './Displays.module.css';\n\n/** What a cell shows without a value. Hidden from assistive technologies, which skip the cell. */\nexport function EmptyValue() {\n return (\n <span className={styles.empty} aria-hidden=\"true\">\n —\n </span>\n );\n}\n\nfunction isEmpty(value: unknown): boolean {\n return (\n value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0)\n );\n}\n\n/**\n * Text, on two lines at most. The default display. The value of a `secret` text field\n * (`settings.secret`) shows as dots, never in clear.\n */\nexport function TextDisplay({ value, field }: DisplayProps) {\n const intl = usePanneauIntl();\n const text = toText(value, intl.locale);\n if (text === '') {\n return <EmptyValue />;\n }\n if (field?.settings?.secret === true) {\n return (\n <span role=\"img\" aria-label={intl.formatMessage(messages.secretValue)}>\n ••••••••\n </span>\n );\n }\n return <span className={styles.text}>{text}</span>;\n}\n\n/** HTML as plain text. */\nexport function RichTextDisplay({ value }: DisplayProps) {\n const text =\n typeof value === 'string'\n ? value\n .replace(/<[^>]*>/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim()\n : '';\n return text === '' ? <EmptyValue /> : <span className={styles.text}>{text}</span>;\n}\n\n/** A number, in the format of the locale. */\nexport function NumberDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n const number =\n typeof value === 'number' ? value : typeof value === 'string' ? Number(value) : NaN;\n if (Number.isNaN(number) || isEmpty(value)) {\n return <EmptyValue />;\n }\n return <span className={styles.number}>{intl.formatNumber(number)}</span>;\n}\n\n/** Yes or no, as an icon with its label. */\nexport function BooleanDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n if (value === null || value === undefined) {\n return <EmptyValue />;\n }\n const checked = value === true || value === 1 || value === 'true' || value === '1';\n return (\n <span className={`${styles.boolean} ${checked ? styles.true : styles.false}`}>\n <Icon\n icon={checked ? Check : Minus}\n label={intl.formatMessage(checked ? messages.yes : messages.no)}\n />\n </span>\n );\n}\n\nconst DATE_ONLY = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\nconst TIME_ONLY = /^(\\d{2}):(\\d{2})(?::(\\d{2}))?$/;\n\n/** A date (`2026-10-15`) as a local date, so that it doesn't move with the time zone. */\nfunction parseDate(value: unknown): Date | null {\n if (typeof value !== 'string' || value === '') {\n return null;\n }\n const day = DATE_ONLY.exec(value);\n const date =\n day !== null\n ? new Date(Number(day[1]), Number(day[2]) - 1, Number(day[3]))\n : new Date(value);\n return Number.isNaN(date.getTime()) ? null : date;\n}\n\n/** A date, in the format of the locale. */\nexport function DateDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n const date = parseDate(value);\n if (date === null) {\n return <EmptyValue />;\n }\n return <time dateTime={String(value)}>{intl.formatDate(date, { dateStyle: 'medium' })}</time>;\n}\n\n/** A date and a time, in the format and the time zone of the user. */\nexport function DateTimeDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n const date = parseDate(value);\n if (date === null) {\n return <EmptyValue />;\n }\n return (\n <time dateTime={String(value)}>\n {intl.formatDate(date, { dateStyle: 'medium', timeStyle: 'short' })}\n </time>\n );\n}\n\n/** A time of day (`14:30`), in the format of the locale. */\nexport function TimeDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n const match = typeof value === 'string' ? TIME_ONLY.exec(value) : null;\n if (match === null) {\n return <EmptyValue />;\n }\n const date = new Date(2000, 0, 1, Number(match[1]), Number(match[2]), Number(match[3] ?? 0));\n return <time dateTime={String(value)}>{intl.formatTime(date, { timeStyle: 'short' })}</time>;\n}\n\n/** The labels of the selected options, as badges. */\nexport function SelectDisplay({ value, field }: DisplayProps) {\n const options = getFieldOptions(field);\n const values: unknown[] = Array.isArray(value) ? value : isEmpty(value) ? [] : [value];\n if (values.length === 0) {\n return <EmptyValue />;\n }\n return (\n <span className={styles.badges}>\n {values.map((entry) => {\n const option = findOption(options, entry);\n return (\n <Badge key={String(entry)} tone={(option?.tone ?? 'neutral') as Tone}>\n {option?.label ?? String(entry)}\n </Badge>\n );\n })}\n </span>\n );\n}\n\n/** The labels of related items. */\nexport function RelationDisplay({ value }: DisplayProps) {\n const references = toReferences(value);\n if (references.length === 0) {\n return <EmptyValue />;\n }\n return (\n <span className={styles.text}>\n {references.map((reference) => reference.label).join(', ')}\n </span>\n );\n}\n\n/** A link that opens the URL. */\nexport function UrlDisplay({ value }: DisplayProps) {\n if (typeof value !== 'string' || value === '') {\n return <EmptyValue />;\n }\n return (\n <a className={styles.link} href={value} target=\"_blank\" rel=\"noreferrer\">\n {value.replace(/^https?:\\/\\//, '')}\n </a>\n );\n}\n\n/** A link that writes an email. */\nexport function EmailDisplay({ value }: DisplayProps) {\n if (typeof value !== 'string' || value === '') {\n return <EmptyValue />;\n }\n return (\n <a className={styles.link} href={`mailto:${value}`}>\n {value}\n </a>\n );\n}\n\n/** A link that calls the phone number. */\nexport function TelDisplay({ value }: DisplayProps) {\n if (typeof value !== 'string' || value.trim() === '') {\n return <EmptyValue />;\n }\n return (\n <a className={styles.link} href={`tel:${value.replace(/[^\\d+]/g, '')}`}>\n {value}\n </a>\n );\n}\n\n/** A duration in seconds, with its units: `1 h 5 min`, to the precision of its field. */\nexport function DurationDisplay({ value, field }: DisplayProps) {\n if (typeof value !== 'number' || Number.isNaN(value)) {\n return <EmptyValue />;\n }\n const precision = field?.settings?.precision === 'minutes' ? 'minutes' : 'seconds';\n return <span className={styles.number}>{formatDuration(value, { precision })}</span>;\n}\n\n/** JSON on one line, shortened. */\nexport function JsonDisplay({ value }: DisplayProps) {\n if (value === null || value === undefined || typeof value !== 'object') {\n return <EmptyValue />;\n }\n const json = JSON.stringify(value);\n return (\n <code className={styles.code} title={json.length > 80 ? json : undefined}>\n {json.length > 80 ? `${json.slice(0, 79)}…` : json}\n </code>\n );\n}\n\n/** Tags, as badges, with the labels of their options. */\nexport function TagsDisplay({ value, field }: DisplayProps) {\n const tags = Array.isArray(value) ? value.filter((tag) => typeof tag === 'string') : [];\n if (tags.length === 0) {\n return <EmptyValue />;\n }\n const options = field?.options ?? [];\n return (\n <span className={styles.tags}>\n {tags.map((tag) => (\n <Badge key={tag}>\n {options.find((option) => String(option.value) === tag)?.label ?? tag}\n </Badge>\n ))}\n </span>\n );\n}\n\n/** What a URL embeds: its thumbnail and title, linked to it. */\nexport function EmbedDisplay({ value }: DisplayProps) {\n if (\n value === null ||\n typeof value !== 'object' ||\n typeof (value as { url?: unknown }).url !== 'string'\n ) {\n return <EmptyValue />;\n }\n const { url, title, thumbnailUrl } = value as {\n url: string;\n title?: unknown;\n thumbnailUrl?: unknown;\n };\n return (\n <a className={`${styles.link} ${styles.media}`} href={url} target=\"_blank\" rel=\"noreferrer\">\n {typeof thumbnailUrl === 'string' ? (\n <img className={styles.thumbnail} src={thumbnailUrl} alt=\"\" />\n ) : null}\n <span className={styles.text}>\n {typeof title === 'string' ? title : url.replace(/^https?:\\/\\//, '')}\n </span>\n </a>\n );\n}\n\n/** A place: its address, or its coordinates. */\nexport function LocationDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n if (value === null || typeof value !== 'object') {\n return <EmptyValue />;\n }\n const { lat, lng, address } = value as { lat?: unknown; lng?: unknown; address?: unknown };\n if (typeof address === 'string' && address !== '') {\n return <span className={styles.text}>{address}</span>;\n }\n if (typeof lat !== 'number' || typeof lng !== 'number') {\n return <EmptyValue />;\n }\n const format = (number: number) => intl.formatNumber(number, { maximumFractionDigits: 5 });\n return (\n <span className={styles.number}>\n {format(lat)}, {format(lng)}\n </span>\n );\n}\n\n/** A swatch, with the color's code. */\nexport function ColorDisplay({ value }: DisplayProps) {\n if (typeof value !== 'string' || value === '') {\n return <EmptyValue />;\n }\n return (\n <span className={styles.color}>\n <span className={styles.swatch} style={{ backgroundColor: value }} aria-hidden=\"true\" />\n {value}\n </span>\n );\n}\n\n/** A thumbnail and the name of a media item (or of the first one). */\nexport function MediaDisplay({ value }: DisplayProps) {\n const media: unknown = Array.isArray(value) ? value[0] : value;\n if (media === null || typeof media !== 'object') {\n return <EmptyValue />;\n }\n const { thumbnailUrl, url, name, filename } = media as Record<string, unknown>;\n const source =\n typeof thumbnailUrl === 'string' ? thumbnailUrl : typeof url === 'string' ? url : null;\n const label = typeof name === 'string' ? name : typeof filename === 'string' ? filename : '';\n return (\n <span className={styles.media}>\n {source !== null ? <img className={styles.thumbnail} src={source} alt=\"\" /> : null}\n {label !== '' ? <span className={styles.text}>{label}</span> : null}\n </span>\n );\n}\n\n/**\n * The built-in displays, by name. A column's display is its `display`, its field's `display`, or\n * its field's type: field types are display names. Values without a known display are shown as\n * text.\n */\nexport const builtInDisplays: Readonly<Record<string, DisplayEntry>> = {\n text: TextDisplay,\n textarea: TextDisplay,\n slug: TextDisplay,\n richtext: RichTextDisplay,\n number: NumberDisplay,\n boolean: BooleanDisplay,\n date: DateDisplay,\n datetime: DateTimeDisplay,\n time: TimeDisplay,\n select: SelectDisplay,\n relation: RelationDisplay,\n url: UrlDisplay,\n email: EmailDisplay,\n color: ColorDisplay,\n media: MediaDisplay,\n tel: TelDisplay,\n range: NumberDisplay,\n duration: DurationDisplay,\n json: JsonDisplay,\n tags: TagsDisplay,\n embed: EmbedDisplay,\n location: LocationDisplay,\n};\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { Field, Filter, FilterValue } from '@panneau/protocol';
2
- import type { FilterEntry, ListColumn } from '../types';
2
+ import type { FilterEntry, ListColumn } from '../types.js';
3
3
  /** Labels of filter values (relation ids), by filter id, for the chips. */
4
4
  export type FilterLabels = Readonly<Record<string, Readonly<Record<string, string>>>>;
5
5
  /** Remembers the labels of filter values, for the chips of active filters. */
@@ -1,4 +1,4 @@
1
- import type { FilterControlProps, FilterEntry } from '../types';
1
+ import type { FilterControlProps, FilterEntry } from '../types.js';
2
2
  /** A text filter: the list changes once the user stops typing. */
3
3
  export declare function TextFilter({ label, value, onChange }: FilterControlProps): import("react").JSX.Element;
4
4
  /** A choice among the options, or several with `multiple`. */
@@ -1,6 +1,6 @@
1
1
  import type { IntlShape } from 'react-intl';
2
2
  import type { Field, Filter, Option } from '@panneau/protocol';
3
- import type { ListColumn } from '../types';
3
+ import type { ListColumn } from '../types.js';
4
4
  /** The label of a filter: its `label`, the label of its field, or its id. */
5
5
  export declare function getFilterLabel(filter: Filter, columns: readonly ListColumn[], fields: readonly Field[]): string;
6
6
  /** The field a filter filters, when a column or the list's fields have one with its id. */
package/dist/index.d.ts CHANGED
@@ -1,20 +1,20 @@
1
- export { type ListActions, getActionHref, groupListActions, isAllowedOn } from './actions/actions';
2
- export { ConfirmDialog, type ConfirmDialogProps, type ConfirmPreview, } from './actions/ConfirmDialog';
3
- export { type ActionIcons, getActionIcon } from './actions/icons';
4
- export { BooleanDisplay, ColorDisplay, DateDisplay, DateTimeDisplay, DurationDisplay, EmailDisplay, EmbedDisplay, EmptyValue, JsonDisplay, LocationDisplay, MediaDisplay, NumberDisplay, RelationDisplay, RichTextDisplay, SelectDisplay, TagsDisplay, TelDisplay, TextDisplay, TimeDisplay, UrlDisplay, builtInDisplays, } from './displays/displays';
5
- export { DateFilter, DateRangeFilter, RelationFilter, SelectFilter, TextFilter, ToggleFilter, builtInFilters, } from './filters/controls';
6
- export { CardsLayout } from './layouts/CardsLayout';
7
- export { TableLayout } from './layouts/TableLayout';
8
- export { builtInLayouts } from './layouts/builtIn';
9
- export { ItemDetails, type ItemDetailsProps } from './ItemDetails';
10
- export { List, type ListProps } from './List';
11
- export { ListView, type ListViewProps } from './ListView';
12
- export { listsPlugin } from './plugin';
13
- export { type LocalQueryOptions, type LocalQueryResult, applyListQuery } from './query';
14
- export { countSelected, getPageSelection, isItemSelected } from './selection';
15
- export { Pagination, type PaginationProps } from './toolbar/Pagination';
16
- export { SearchField, type SearchFieldProps } from './toolbar/SearchField';
17
- export type { DisplayEntry, DisplayProps, FilterControlProps, FilterEntry, ListActionEvent, ListActionHandler, ListActionPreview, ListActionPreviewer, ListColumn, ListItem, ListLayoutEntry, ListLayoutProps, } from './types';
18
- export { useListState } from './useListState';
19
- export { getLocalizedValue, toText } from './values';
1
+ export { type ListActions, getActionHref, groupListActions, isAllowedOn } from './actions/actions.js';
2
+ export { ConfirmDialog, type ConfirmDialogProps, type ConfirmPreview, } from './actions/ConfirmDialog.js';
3
+ export { type ActionIcons, getActionIcon } from './actions/icons.js';
4
+ export { BooleanDisplay, ColorDisplay, DateDisplay, DateTimeDisplay, DurationDisplay, EmailDisplay, EmbedDisplay, EmptyValue, JsonDisplay, LocationDisplay, MediaDisplay, NumberDisplay, RelationDisplay, RichTextDisplay, SelectDisplay, TagsDisplay, TelDisplay, TextDisplay, TimeDisplay, UrlDisplay, builtInDisplays, } from './displays/displays.js';
5
+ export { DateFilter, DateRangeFilter, RelationFilter, SelectFilter, TextFilter, ToggleFilter, builtInFilters, } from './filters/controls.js';
6
+ export { CardsLayout } from './layouts/CardsLayout.js';
7
+ export { TableLayout } from './layouts/TableLayout.js';
8
+ export { builtInLayouts } from './layouts/builtIn.js';
9
+ export { ItemDetails, type ItemDetailsProps } from './ItemDetails.js';
10
+ export { List, type ListProps } from './List.js';
11
+ export { ListView, type ListViewProps } from './ListView.js';
12
+ export { listsPlugin } from './plugin.js';
13
+ export { type LocalQueryOptions, type LocalQueryResult, applyListQuery } from './query.js';
14
+ export { countSelected, getPageSelection, isItemSelected } from './selection.js';
15
+ export { CursorPagination, type CursorPaginationProps, Pagination, type PaginationProps, getPagingProps, } from './toolbar/Pagination.js';
16
+ export { SearchField, type SearchFieldProps } from './toolbar/SearchField.js';
17
+ export type { DisplayEntry, DisplayProps, FilterControlProps, FilterEntry, ListActionEvent, ListActionHandler, ListActionPreview, ListActionPreviewer, ListColumn, ListItem, ListLayoutEntry, ListLayoutProps, } from './types.js';
18
+ export { useListState } from './useListState.js';
19
+ export { getLocalizedValue, toText } from './values.js';
20
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnG,OAAO,EACH,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,cAAc,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EACH,cAAc,EACd,YAAY,EACZ,WAAW,EACX,eAAe,EACf,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,eAAe,EACf,YAAY,EACZ,aAAa,EACb,eAAe,EACf,eAAe,EACf,aAAa,EACb,WAAW,EACX,UAAU,EACV,WAAW,EACX,WAAW,EACX,UAAU,EACV,eAAe,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACH,UAAU,EACV,eAAe,EACf,cAAc,EACd,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,cAAc,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,YAAY,EACR,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,UAAU,EACV,QAAQ,EACR,eAAe,EACf,eAAe,GAClB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnG,OAAO,EACH,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,cAAc,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EACH,cAAc,EACd,YAAY,EACZ,WAAW,EACX,eAAe,EACf,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,eAAe,EACf,YAAY,EACZ,aAAa,EACb,eAAe,EACf,eAAe,EACf,aAAa,EACb,WAAW,EACX,UAAU,EACV,WAAW,EACX,WAAW,EACX,UAAU,EACV,eAAe,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACH,UAAU,EACV,eAAe,EACf,cAAc,EACd,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,cAAc,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EACH,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,UAAU,EACV,KAAK,eAAe,EACpB,cAAc,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,YAAY,EACR,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,UAAU,EACV,QAAQ,EACR,eAAe,EACf,eAAe,GAClB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
package/dist/index.js CHANGED
@@ -9,11 +9,11 @@ import { TableLayout } from "./layouts/TableLayout.js";
9
9
  import { builtInLayouts } from "./layouts/builtIn.js";
10
10
  import { ItemDetails } from "./ItemDetails.js";
11
11
  import { countSelected, getPageSelection, isItemSelected } from "./selection.js";
12
- import { Pagination } from "./toolbar/Pagination.js";
12
+ import { CursorPagination, Pagination, getPagingProps } from "./toolbar/Pagination.js";
13
13
  import { SearchField } from "./toolbar/SearchField.js";
14
14
  import { useListState } from "./useListState.js";
15
15
  import { ListView } from "./ListView.js";
16
16
  import { applyListQuery } from "./query.js";
17
17
  import { List } from "./List.js";
18
18
  import { listsPlugin } from "./plugin.js";
19
- export { BooleanDisplay, CardsLayout, ColorDisplay, ConfirmDialog, DateDisplay, DateFilter, DateRangeFilter, DateTimeDisplay, DurationDisplay, EmailDisplay, EmbedDisplay, EmptyValue, ItemDetails, JsonDisplay, List, ListView, LocationDisplay, MediaDisplay, NumberDisplay, Pagination, RelationDisplay, RelationFilter, RichTextDisplay, SearchField, SelectDisplay, SelectFilter, TableLayout, TagsDisplay, TelDisplay, TextDisplay, TextFilter, TimeDisplay, ToggleFilter, UrlDisplay, applyListQuery, builtInDisplays, builtInFilters, builtInLayouts, countSelected, getActionHref, getActionIcon, getLocalizedValue, getPageSelection, groupListActions, isAllowedOn, isItemSelected, listsPlugin, toText, useListState };
19
+ export { BooleanDisplay, CardsLayout, ColorDisplay, ConfirmDialog, CursorPagination, DateDisplay, DateFilter, DateRangeFilter, DateTimeDisplay, DurationDisplay, EmailDisplay, EmbedDisplay, EmptyValue, ItemDetails, JsonDisplay, List, ListView, LocationDisplay, MediaDisplay, NumberDisplay, Pagination, RelationDisplay, RelationFilter, RichTextDisplay, SearchField, SelectDisplay, SelectFilter, TableLayout, TagsDisplay, TelDisplay, TextDisplay, TextFilter, TimeDisplay, ToggleFilter, UrlDisplay, applyListQuery, builtInDisplays, builtInFilters, builtInLayouts, countSelected, getActionHref, getActionIcon, getLocalizedValue, getPageSelection, getPagingProps, groupListActions, isAllowedOn, isItemSelected, listsPlugin, toText, useListState };
@@ -1,4 +1,4 @@
1
- import type { ListLayoutProps } from '../types';
1
+ import type { ListLayoutProps } from '../types.js';
2
2
  /** Items as cards: the first column is the title, the others are listed under it. */
3
3
  export declare function CardsLayout({ items, columns, renderValue, getItemLabel, getItemHref, isCurrent, selectable, isSelected, onToggle, renderActions, label, pageSelection, }: ListLayoutProps): import("react").JSX.Element;
4
4
  //# sourceMappingURL=CardsLayout.d.ts.map
@@ -1,4 +1,4 @@
1
- import type { ListColumn, ListLayoutProps } from '../types';
1
+ import type { ListColumn, ListLayoutProps } from '../types.js';
2
2
  /** The sort direction of a column, from the first `sort` value. */
3
3
  export declare function getSortDirection(sort: readonly string[], column: ListColumn): 'ascending' | 'descending' | null;
4
4
  /**
@@ -1,4 +1,4 @@
1
- import type { ListLayoutEntry } from '../types';
1
+ import type { ListLayoutEntry } from '../types.js';
2
2
  /** The built-in list layouts, by id. `gallery` and `calendar` come later. */
3
3
  export declare const builtInLayouts: Readonly<Record<string, ListLayoutEntry>> & {
4
4
  table: ListLayoutEntry;
package/dist/plugin.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { DisplayEntry, ListLayoutEntry } from './types';
1
+ import type { DisplayEntry, ListLayoutEntry } from './types.js';
2
2
  /**
3
3
  * The built-in displays and layouts as a `@panneau/core` plugin, with the French messages of every
4
4
  * Panneau package (from `@panneau/intl`). Lists use the built-in displays and layouts without it:
package/dist/query.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { ListQuery } from '@panneau/protocol';
2
- import type { ListColumn, ListItem } from './types';
2
+ import type { ListColumn, ListItem } from './types.js';
3
3
  export interface LocalQueryOptions {
4
4
  /** The columns: values of localized fields are compared in `locale`. */
5
5
  columns?: readonly ListColumn[];
@@ -1,5 +1,5 @@
1
1
  import type { ListSelection } from '@panneau/core';
2
- import type { ListItem } from './types';
2
+ import type { ListItem } from './types.js';
3
3
  /** Whether an item is selected. */
4
4
  export declare function isItemSelected(selection: ListSelection, id: string): boolean;
5
5
  /** How many items are selected, given the total of the list (or the count of items without it). */
@@ -1,3 +1,4 @@
1
+ import type { ListResponse } from '@panneau/protocol';
1
2
  export interface PaginationProps {
2
3
  page: number;
3
4
  perPage: number;
@@ -10,4 +11,36 @@ export interface PaginationProps {
10
11
  }
11
12
  /** The range of items shown, the page, and buttons to the previous and next pages. */
12
13
  export declare function Pagination({ page, perPage, total, onPageChange, perPageOptions, onPerPageChange, }: PaginationProps): import("react").JSX.Element;
14
+ export interface CursorPaginationProps {
15
+ perPage: number;
16
+ /** Whether there is a page before: the list isn't on its first page. */
17
+ hasPrevious: boolean;
18
+ /** Whether there is a page after: the page has a `nextCursor`. */
19
+ hasNext: boolean;
20
+ onPrevious: () => void;
21
+ onNext: () => void;
22
+ /** Page sizes to choose from. Without them, the page size can't be changed. */
23
+ perPageOptions?: readonly number[] | undefined;
24
+ onPerPageChange?: (perPage: number) => void;
25
+ }
26
+ /**
27
+ * Buttons to the previous and next pages of a list paged with cursors, which has no page numbers
28
+ * and no total (decision 0039).
29
+ */
30
+ export declare function CursorPagination({ perPage, hasPrevious, hasNext, onPrevious, onNext, perPageOptions, onPerPageChange, }: CursorPaginationProps): import("react").JSX.Element;
31
+ /**
32
+ * The props of a `ListView` that page it, from the `meta` of a page of the list: `total` for
33
+ * numbered pages, `cursors` for a list paged with cursors.
34
+ *
35
+ * ```tsx
36
+ * <ListView {...getPagingProps(data?.meta)} items={data?.data} … />
37
+ * ```
38
+ */
39
+ export declare function getPagingProps(meta: ListResponse['meta'] | undefined): {
40
+ total?: number;
41
+ cursors?: {
42
+ next: string | null;
43
+ previous?: string | null;
44
+ };
45
+ };
13
46
  //# sourceMappingURL=Pagination.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../../src/toolbar/Pagination.tsx"],"names":[],"mappings":"AAOA,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,+EAA+E;IAC/E,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC/C,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C;AAED,sFAAsF;AACtF,wBAAgB,UAAU,CAAC,EACvB,IAAI,EACJ,OAAO,EACP,KAAK,EACL,YAAY,EACZ,cAAmB,EACnB,eAAe,GAClB,EAAE,eAAe,+BAyCjB"}
1
+ {"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../../src/toolbar/Pagination.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAOtD,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,+EAA+E;IAC/E,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC/C,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C;AAED,sFAAsF;AACtF,wBAAgB,UAAU,CAAC,EACvB,IAAI,EACJ,OAAO,EACP,KAAK,EACL,YAAY,EACZ,cAAmB,EACnB,eAAe,GAClB,EAAE,eAAe,+BAyCjB;AAED,MAAM,WAAW,qBAAqB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,WAAW,EAAE,OAAO,CAAC;IACrB,kEAAkE;IAClE,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,+EAA+E;IAC/E,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC/C,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAC7B,OAAO,EACP,WAAW,EACX,OAAO,EACP,UAAU,EACV,MAAM,EACN,cAAmB,EACnB,eAAe,GAClB,EAAE,qBAAqB,+BAmCvB;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,SAAS,GAAG;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CAC/D,CAaA"}
@@ -4,6 +4,7 @@ import { c } from "react/compiler-runtime";
4
4
  import { IconButton, Select, usePanneauIntl } from "@panneau/ui";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  import { ChevronLeft, ChevronRight } from "lucide-react";
7
+ import { isCursorPage } from "@panneau/protocol/runtime";
7
8
  //#region src/toolbar/Pagination.tsx
8
9
  /** The range of items shown, the page, and buttons to the previous and next pages. */
9
10
  function Pagination(t0) {
@@ -167,7 +168,135 @@ function _temp2(size) {
167
168
  function _temp(a, b) {
168
169
  return a - b;
169
170
  }
171
+ /**
172
+ * Buttons to the previous and next pages of a list paged with cursors, which has no page numbers
173
+ * and no total (decision 0039).
174
+ */
175
+ function CursorPagination(t0) {
176
+ const $ = c(25);
177
+ const { perPage, hasPrevious, hasNext, onPrevious, onNext, perPageOptions: t1, onPerPageChange } = t0;
178
+ const perPageOptions = t1 === void 0 ? [] : t1;
179
+ const intl = usePanneauIntl();
180
+ const sizes = [.../* @__PURE__ */ new Set([...perPageOptions, perPage])].sort(_temp3);
181
+ let t2;
182
+ if ($[0] !== intl) {
183
+ t2 = intl.formatMessage(messages.pagination);
184
+ $[0] = intl;
185
+ $[1] = t2;
186
+ } else t2 = $[1];
187
+ const t3 = Toolbar_module_default;
188
+ let t4;
189
+ if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
190
+ t4 = /* @__PURE__ */ jsx("span", {});
191
+ $[2] = t4;
192
+ } else t4 = $[2];
193
+ const t5 = Toolbar_module_default;
194
+ const t6 = perPageOptions.length > 0 && onPerPageChange !== void 0 ? /* @__PURE__ */ jsx(Select, {
195
+ "aria-label": intl.formatMessage(messages.perPage),
196
+ options: sizes.map(_temp4),
197
+ value: perPage,
198
+ onChange: (value) => {
199
+ if (typeof value === "number") onPerPageChange(value);
200
+ },
201
+ className: Toolbar_module_default.perPage
202
+ }) : null;
203
+ let t7;
204
+ if ($[3] !== intl) {
205
+ t7 = intl.formatMessage(messages.previousPage);
206
+ $[3] = intl;
207
+ $[4] = t7;
208
+ } else t7 = $[4];
209
+ const t8 = !hasPrevious;
210
+ let t9;
211
+ if ($[5] !== onPrevious || $[6] !== t7 || $[7] !== t8) {
212
+ t9 = /* @__PURE__ */ jsx(IconButton, {
213
+ icon: ChevronLeft,
214
+ label: t7,
215
+ isDisabled: t8,
216
+ onPress: onPrevious
217
+ });
218
+ $[5] = onPrevious;
219
+ $[6] = t7;
220
+ $[7] = t8;
221
+ $[8] = t9;
222
+ } else t9 = $[8];
223
+ let t10;
224
+ if ($[9] !== intl) {
225
+ t10 = intl.formatMessage(messages.nextPage);
226
+ $[9] = intl;
227
+ $[10] = t10;
228
+ } else t10 = $[10];
229
+ const t11 = !hasNext;
230
+ let t12;
231
+ if ($[11] !== onNext || $[12] !== t10 || $[13] !== t11) {
232
+ t12 = /* @__PURE__ */ jsx(IconButton, {
233
+ icon: ChevronRight,
234
+ label: t10,
235
+ isDisabled: t11,
236
+ onPress: onNext
237
+ });
238
+ $[11] = onNext;
239
+ $[12] = t10;
240
+ $[13] = t11;
241
+ $[14] = t12;
242
+ } else t12 = $[14];
243
+ let t13;
244
+ if ($[15] !== t12 || $[16] !== t5.pages || $[17] !== t6 || $[18] !== t9) {
245
+ t13 = /* @__PURE__ */ jsxs("div", {
246
+ className: t5.pages,
247
+ children: [
248
+ t6,
249
+ t9,
250
+ t12
251
+ ]
252
+ });
253
+ $[15] = t12;
254
+ $[16] = t5.pages;
255
+ $[17] = t6;
256
+ $[18] = t9;
257
+ $[19] = t13;
258
+ } else t13 = $[19];
259
+ let t14;
260
+ if ($[20] !== t13 || $[21] !== t2 || $[22] !== t3.pagination || $[23] !== t4) {
261
+ t14 = /* @__PURE__ */ jsxs("nav", {
262
+ "aria-label": t2,
263
+ className: t3.pagination,
264
+ children: [t4, t13]
265
+ });
266
+ $[20] = t13;
267
+ $[21] = t2;
268
+ $[22] = t3.pagination;
269
+ $[23] = t4;
270
+ $[24] = t14;
271
+ } else t14 = $[24];
272
+ return t14;
273
+ }
274
+ /**
275
+ * The props of a `ListView` that page it, from the `meta` of a page of the list: `total` for
276
+ * numbered pages, `cursors` for a list paged with cursors.
277
+ *
278
+ * ```tsx
279
+ * <ListView {...getPagingProps(data?.meta)} items={data?.data} … />
280
+ * ```
281
+ */
282
+ function _temp4(size) {
283
+ return {
284
+ value: size,
285
+ label: String(size)
286
+ };
287
+ }
288
+ function _temp3(a, b) {
289
+ return a - b;
290
+ }
291
+ function getPagingProps(meta) {
292
+ if (meta === void 0) return {};
293
+ if (isCursorPage(meta)) return { cursors: {
294
+ next: meta.nextCursor,
295
+ ...meta.previousCursor !== void 0 ? { previous: meta.previousCursor } : {}
296
+ } };
297
+ return { total: meta.total };
298
+ }
170
299
  //#endregion
171
- export { Pagination };
300
+ export { CursorPagination, Pagination, getPagingProps };
172
301
 
173
302
  //# sourceMappingURL=Pagination.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Pagination.js","names":["ChevronLeft","ChevronRight","IconButton","Select","usePanneauIntl","messages","styles","PaginationProps","page","perPage","total","onPageChange","perPageOptions","onPerPageChange","Pagination","t0","$","_c","t1","undefined","intl","lastPage","Math","max","ceil","start","end","min","sizes","Set","sort","_temp","t2","formatMessage","pagination","t4","range","t5","t7","length","map","_temp2","value","t8","previousPage","t9","t10","t11","t12","pageOf","t13","t14","nextPage","t15","t16","t17","t18","t6","pages","t19","t3","size","label","String","a","b","_c","styles"],"sources":["../../src/toolbar/Pagination.tsx"],"sourcesContent":["import { ChevronLeft, ChevronRight } from 'lucide-react';\n\nimport { IconButton, Select, usePanneauIntl } from '@panneau/ui';\n\nimport { messages } from '../messages';\nimport styles from './Toolbar.module.css';\n\nexport interface PaginationProps {\n page: number;\n perPage: number;\n /** How many items match the query, on every page. */\n total: number;\n onPageChange: (page: number) => void;\n /** Page sizes to choose from. Without them, the page size can't be changed. */\n perPageOptions?: readonly number[] | undefined;\n onPerPageChange?: (perPage: number) => void;\n}\n\n/** The range of items shown, the page, and buttons to the previous and next pages. */\nexport function Pagination({\n page,\n perPage,\n total,\n onPageChange,\n perPageOptions = [],\n onPerPageChange,\n}: PaginationProps) {\n const intl = usePanneauIntl();\n const lastPage = Math.max(1, Math.ceil(total / perPage));\n const start = total === 0 ? 0 : (page - 1) * perPage + 1;\n const end = Math.min(total, page * perPage);\n const sizes = [...new Set([...perPageOptions, perPage])].sort((a, b) => a - b);\n return (\n <nav aria-label={intl.formatMessage(messages.pagination)} className={styles.pagination}>\n <span>{intl.formatMessage(messages.range, { start, end, total })}</span>\n <div className={styles.pages}>\n {perPageOptions.length > 0 && onPerPageChange !== undefined ? (\n <Select\n aria-label={intl.formatMessage(messages.perPage)}\n options={sizes.map((size) => ({ value: size, label: String(size) }))}\n value={perPage}\n onChange={(value) => {\n if (typeof value === 'number') {\n onPerPageChange(value);\n }\n }}\n className={styles.perPage}\n />\n ) : null}\n <IconButton\n icon={ChevronLeft}\n label={intl.formatMessage(messages.previousPage)}\n isDisabled={page <= 1}\n onPress={() => onPageChange(page - 1)}\n />\n <span aria-current=\"page\">\n {intl.formatMessage(messages.pageOf, { page, lastPage })}\n </span>\n <IconButton\n icon={ChevronRight}\n label={intl.formatMessage(messages.nextPage)}\n isDisabled={page >= lastPage}\n onPress={() => onPageChange(page + 1)}\n />\n </div>\n </nav>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Pagination.js","names":["ChevronLeft","ChevronRight","ListResponse","isCursorPage","IconButton","Select","usePanneauIntl","messages","styles","PaginationProps","page","perPage","total","onPageChange","perPageOptions","onPerPageChange","Pagination","t0","$","_c","t1","undefined","intl","lastPage","Math","max","ceil","start","end","min","sizes","Set","sort","_temp","t2","formatMessage","pagination","t4","range","t5","t7","length","map","_temp2","value","t8","previousPage","t9","t10","t11","t12","pageOf","t13","t14","nextPage","t15","t16","t17","t18","t6","pages","t19","t3","size","label","String","a","b","CursorPaginationProps","hasPrevious","hasNext","onPrevious","onNext","CursorPagination","_temp3","Symbol","for","_temp4","getPagingProps","meta","cursors","next","previous","nextCursor","previousCursor","_c","styles"],"sources":["../../src/toolbar/Pagination.tsx"],"sourcesContent":["import { ChevronLeft, ChevronRight } from 'lucide-react';\n\nimport type { ListResponse } from '@panneau/protocol';\nimport { isCursorPage } from '@panneau/protocol/runtime';\nimport { IconButton, Select, usePanneauIntl } from '@panneau/ui';\n\nimport { messages } from '../messages';\nimport styles from './Toolbar.module.css';\n\nexport interface PaginationProps {\n page: number;\n perPage: number;\n /** How many items match the query, on every page. */\n total: number;\n onPageChange: (page: number) => void;\n /** Page sizes to choose from. Without them, the page size can't be changed. */\n perPageOptions?: readonly number[] | undefined;\n onPerPageChange?: (perPage: number) => void;\n}\n\n/** The range of items shown, the page, and buttons to the previous and next pages. */\nexport function Pagination({\n page,\n perPage,\n total,\n onPageChange,\n perPageOptions = [],\n onPerPageChange,\n}: PaginationProps) {\n const intl = usePanneauIntl();\n const lastPage = Math.max(1, Math.ceil(total / perPage));\n const start = total === 0 ? 0 : (page - 1) * perPage + 1;\n const end = Math.min(total, page * perPage);\n const sizes = [...new Set([...perPageOptions, perPage])].sort((a, b) => a - b);\n return (\n <nav aria-label={intl.formatMessage(messages.pagination)} className={styles.pagination}>\n <span>{intl.formatMessage(messages.range, { start, end, total })}</span>\n <div className={styles.pages}>\n {perPageOptions.length > 0 && onPerPageChange !== undefined ? (\n <Select\n aria-label={intl.formatMessage(messages.perPage)}\n options={sizes.map((size) => ({ value: size, label: String(size) }))}\n value={perPage}\n onChange={(value) => {\n if (typeof value === 'number') {\n onPerPageChange(value);\n }\n }}\n className={styles.perPage}\n />\n ) : null}\n <IconButton\n icon={ChevronLeft}\n label={intl.formatMessage(messages.previousPage)}\n isDisabled={page <= 1}\n onPress={() => onPageChange(page - 1)}\n />\n <span aria-current=\"page\">\n {intl.formatMessage(messages.pageOf, { page, lastPage })}\n </span>\n <IconButton\n icon={ChevronRight}\n label={intl.formatMessage(messages.nextPage)}\n isDisabled={page >= lastPage}\n onPress={() => onPageChange(page + 1)}\n />\n </div>\n </nav>\n );\n}\n\nexport interface CursorPaginationProps {\n perPage: number;\n /** Whether there is a page before: the list isn't on its first page. */\n hasPrevious: boolean;\n /** Whether there is a page after: the page has a `nextCursor`. */\n hasNext: boolean;\n onPrevious: () => void;\n onNext: () => void;\n /** Page sizes to choose from. Without them, the page size can't be changed. */\n perPageOptions?: readonly number[] | undefined;\n onPerPageChange?: (perPage: number) => void;\n}\n\n/**\n * Buttons to the previous and next pages of a list paged with cursors, which has no page numbers\n * and no total (decision 0039).\n */\nexport function CursorPagination({\n perPage,\n hasPrevious,\n hasNext,\n onPrevious,\n onNext,\n perPageOptions = [],\n onPerPageChange,\n}: CursorPaginationProps) {\n const intl = usePanneauIntl();\n const sizes = [...new Set([...perPageOptions, perPage])].sort((a, b) => a - b);\n return (\n <nav aria-label={intl.formatMessage(messages.pagination)} className={styles.pagination}>\n <span />\n <div className={styles.pages}>\n {perPageOptions.length > 0 && onPerPageChange !== undefined ? (\n <Select\n aria-label={intl.formatMessage(messages.perPage)}\n options={sizes.map((size) => ({ value: size, label: String(size) }))}\n value={perPage}\n onChange={(value) => {\n if (typeof value === 'number') {\n onPerPageChange(value);\n }\n }}\n className={styles.perPage}\n />\n ) : null}\n <IconButton\n icon={ChevronLeft}\n label={intl.formatMessage(messages.previousPage)}\n isDisabled={!hasPrevious}\n onPress={onPrevious}\n />\n <IconButton\n icon={ChevronRight}\n label={intl.formatMessage(messages.nextPage)}\n isDisabled={!hasNext}\n onPress={onNext}\n />\n </div>\n </nav>\n );\n}\n\n/**\n * The props of a `ListView` that page it, from the `meta` of a page of the list: `total` for\n * numbered pages, `cursors` for a list paged with cursors.\n *\n * ```tsx\n * <ListView {...getPagingProps(data?.meta)} items={data?.data} … />\n * ```\n */\nexport function getPagingProps(meta: ListResponse['meta'] | undefined): {\n total?: number;\n cursors?: { next: string | null; previous?: string | null };\n} {\n if (meta === undefined) {\n return {};\n }\n if (isCursorPage(meta)) {\n return {\n cursors: {\n next: meta.nextCursor,\n ...(meta.previousCursor !== undefined ? { previous: meta.previousCursor } : {}),\n },\n };\n }\n return { total: meta.total };\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { ListColumn } from '../types';
1
+ import type { ListColumn } from '../types.js';
2
2
  export interface SortSelectProps {
3
3
  columns: readonly ListColumn[];
4
4
  sort: readonly string[];
@@ -1,5 +1,5 @@
1
1
  import type { ReactNode } from 'react';
2
- import type { DisplayEntry, ListColumn, ListItem } from './types';
2
+ import type { DisplayEntry, ListColumn, ListItem } from './types.js';
3
3
  /**
4
4
  * Renders the value of a column for an item with its display: those given, over those of the
5
5
  * plugins, over the built-in ones. Columns without a known display show their value as text.
package/dist/values.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { Field, Option } from '@panneau/protocol';
2
- import type { ListColumn, ListItem } from './types';
2
+ import type { ListColumn, ListItem } from './types.js';
3
3
  /**
4
4
  * The value of a localized field in a locale: the locale (`fr-CA`), its language (`fr`), then the
5
5
  * first filled locale. Other values are returned as they are.
@@ -16,6 +16,8 @@ export declare function getColumnValue(item: ListItem, column: ListColumn, local
16
16
  export declare function toText(value: unknown, locale: string): string;
17
17
  /** The options of a field, or none. */
18
18
  export declare function getFieldOptions(field: Field | null | undefined): readonly Option[];
19
+ /** The option of a value, matched as a string (values from the URL are strings). */
20
+ export declare function findOption(options: readonly Option[], value: unknown): Option | undefined;
19
21
  /** The label of an option value, matched as a string (values from the URL are strings). */
20
22
  export declare function getOptionLabel(options: readonly Option[], value: unknown): string | null;
21
23
  //# sourceMappingURL=values.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../src/values.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAMpD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAczE;AAED,oDAAoD;AACpD,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEpE;AAED,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAG1F;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAuB7D;AAED,uCAAuC;AACvC,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,MAAM,EAAE,CAElF;AAED,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAGxF"}
1
+ {"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../src/values.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAMpD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAczE;AAED,oDAAoD;AACpD,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEpE;AAED,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAG1F;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAuB7D;AAED,uCAAuC;AACvC,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,MAAM,EAAE,CAElF;AAED,oFAAoF;AACpF,wBAAgB,UAAU,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEzF;AAED,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAExF"}
package/dist/values.js CHANGED
@@ -42,11 +42,15 @@ function toText(value, locale) {
42
42
  function getFieldOptions(field) {
43
43
  return field?.options ?? [];
44
44
  }
45
+ /** The option of a value, matched as a string (values from the URL are strings). */
46
+ function findOption(options, value) {
47
+ return options.find((candidate) => String(candidate.value) === String(value));
48
+ }
45
49
  /** The label of an option value, matched as a string (values from the URL are strings). */
46
50
  function getOptionLabel(options, value) {
47
- return options.find((candidate) => String(candidate.value) === String(value))?.label ?? null;
51
+ return findOption(options, value)?.label ?? null;
48
52
  }
49
53
  //#endregion
50
- export { getColumnValue, getFieldOptions, getLocalizedValue, getOptionLabel, isLocalized, toText };
54
+ export { findOption, getColumnValue, getFieldOptions, getLocalizedValue, getOptionLabel, isLocalized, toText };
51
55
 
52
56
  //# sourceMappingURL=values.js.map