@panneau/lists 5.0.0-alpha.0 → 5.0.0-alpha.10

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.
Files changed (120) hide show
  1. package/README.md +7 -3
  2. package/dist/ItemDetails.css +34 -0
  3. package/dist/ItemDetails.d.ts +18 -0
  4. package/dist/ItemDetails.d.ts.map +1 -0
  5. package/dist/ItemDetails.js +104 -0
  6. package/dist/ItemDetails.js.map +1 -0
  7. package/dist/ItemDetails.module.js +16 -0
  8. package/dist/ItemDetails.module.js.map +1 -0
  9. package/dist/List.d.ts +2 -2
  10. package/dist/List.js +54 -12
  11. package/dist/List.js.map +1 -1
  12. package/dist/ListSkeleton.d.ts +17 -0
  13. package/dist/ListSkeleton.d.ts.map +1 -0
  14. package/dist/ListSkeleton.js +111 -0
  15. package/dist/ListSkeleton.js.map +1 -0
  16. package/dist/ListView.css +16 -16
  17. package/dist/ListView.d.ts +40 -5
  18. package/dist/ListView.d.ts.map +1 -1
  19. package/dist/ListView.js +547 -211
  20. package/dist/ListView.js.map +1 -1
  21. package/dist/ListView.module.js +10 -10
  22. package/dist/actions/ActionButton.d.ts +4 -1
  23. package/dist/actions/ActionButton.d.ts.map +1 -1
  24. package/dist/actions/ActionButton.js +91 -23
  25. package/dist/actions/ActionButton.js.map +1 -1
  26. package/dist/actions/Actions.css +9 -9
  27. package/dist/actions/Actions.module.js +6 -6
  28. package/dist/actions/ConfirmDialog.d.ts +15 -3
  29. package/dist/actions/ConfirmDialog.d.ts.map +1 -1
  30. package/dist/actions/ConfirmDialog.js +103 -89
  31. package/dist/actions/ConfirmDialog.js.map +1 -1
  32. package/dist/actions/RowActions.d.ts +8 -6
  33. package/dist/actions/RowActions.d.ts.map +1 -1
  34. package/dist/actions/RowActions.js +40 -30
  35. package/dist/actions/RowActions.js.map +1 -1
  36. package/dist/actions/actions.d.ts +5 -4
  37. package/dist/actions/actions.d.ts.map +1 -1
  38. package/dist/actions/actions.js +7 -14
  39. package/dist/actions/actions.js.map +1 -1
  40. package/dist/actions/icons.d.ts +8 -3
  41. package/dist/actions/icons.d.ts.map +1 -1
  42. package/dist/actions/icons.js +11 -7
  43. package/dist/actions/icons.js.map +1 -1
  44. package/dist/cx.js.map +1 -1
  45. package/dist/displays/Displays.css +25 -13
  46. package/dist/displays/Displays.module.js +18 -14
  47. package/dist/displays/Displays.module.js.map +1 -1
  48. package/dist/displays/displays.d.ts +18 -3
  49. package/dist/displays/displays.d.ts.map +1 -1
  50. package/dist/displays/displays.js +355 -12
  51. package/dist/displays/displays.js.map +1 -1
  52. package/dist/filters/Filters.css +34 -20
  53. package/dist/filters/Filters.d.ts +1 -1
  54. package/dist/filters/Filters.js.map +1 -1
  55. package/dist/filters/Filters.module.js +13 -9
  56. package/dist/filters/Filters.module.js.map +1 -1
  57. package/dist/filters/controls.d.ts +3 -3
  58. package/dist/filters/controls.d.ts.map +1 -1
  59. package/dist/filters/controls.js +171 -123
  60. package/dist/filters/controls.js.map +1 -1
  61. package/dist/filters/format.d.ts +1 -1
  62. package/dist/filters/format.d.ts.map +1 -1
  63. package/dist/filters/format.js +4 -1
  64. package/dist/filters/format.js.map +1 -1
  65. package/dist/index.d.ts +19 -17
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +5 -3
  68. package/dist/layouts/CardsLayout.css +22 -11
  69. package/dist/layouts/CardsLayout.d.ts +2 -2
  70. package/dist/layouts/CardsLayout.d.ts.map +1 -1
  71. package/dist/layouts/CardsLayout.js +39 -35
  72. package/dist/layouts/CardsLayout.js.map +1 -1
  73. package/dist/layouts/CardsLayout.module.js +8 -8
  74. package/dist/layouts/CardsLayout.module.js.map +1 -1
  75. package/dist/layouts/ItemTitle.d.ts +4 -2
  76. package/dist/layouts/ItemTitle.d.ts.map +1 -1
  77. package/dist/layouts/ItemTitle.js +12 -8
  78. package/dist/layouts/ItemTitle.js.map +1 -1
  79. package/dist/layouts/TableLayout.css +51 -35
  80. package/dist/layouts/TableLayout.d.ts +2 -2
  81. package/dist/layouts/TableLayout.d.ts.map +1 -1
  82. package/dist/layouts/TableLayout.js +38 -33
  83. package/dist/layouts/TableLayout.js.map +1 -1
  84. package/dist/layouts/TableLayout.module.js +14 -14
  85. package/dist/layouts/TableLayout.module.js.map +1 -1
  86. package/dist/layouts/builtIn.d.ts +1 -1
  87. package/dist/layouts/builtIn.js.map +1 -1
  88. package/dist/layouts/link.css +3 -3
  89. package/dist/layouts/link.module.js +1 -1
  90. package/dist/plugin.d.ts +1 -1
  91. package/dist/plugin.js.map +1 -1
  92. package/dist/query.d.ts +3 -3
  93. package/dist/query.d.ts.map +1 -1
  94. package/dist/query.js +7 -2
  95. package/dist/query.js.map +1 -1
  96. package/dist/selection.d.ts +1 -1
  97. package/dist/selection.js.map +1 -1
  98. package/dist/toolbar/LayoutSwitch.js.map +1 -1
  99. package/dist/toolbar/Pagination.d.ts +33 -0
  100. package/dist/toolbar/Pagination.d.ts.map +1 -1
  101. package/dist/toolbar/Pagination.js +282 -42
  102. package/dist/toolbar/Pagination.js.map +1 -1
  103. package/dist/toolbar/SearchField.js.map +1 -1
  104. package/dist/toolbar/SortSelect.d.ts +1 -1
  105. package/dist/toolbar/SortSelect.js.map +1 -1
  106. package/dist/toolbar/Toolbar.css +12 -12
  107. package/dist/toolbar/Toolbar.module.js +7 -7
  108. package/dist/types.d.ts +18 -2
  109. package/dist/types.d.ts.map +1 -1
  110. package/dist/useDraft.js.map +1 -1
  111. package/dist/useListState.js.map +1 -1
  112. package/dist/useRenderValue.d.ts +8 -0
  113. package/dist/useRenderValue.d.ts.map +1 -0
  114. package/dist/useRenderValue.js +64 -0
  115. package/dist/useRenderValue.js.map +1 -0
  116. package/dist/values.d.ts +3 -1
  117. package/dist/values.d.ts.map +1 -1
  118. package/dist/values.js +6 -2
  119. package/dist/values.js.map +1 -1
  120. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"displays.js","names":["text","value","source","label","_c","styles"],"sources":["../../src/displays/displays.tsx"],"sourcesContent":["import { Check, Minus } from 'lucide-react';\n\nimport { toReferences } from '@panneau/fields';\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 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};\n"],"mappings":";;;;;;;;;;AAWA,SAAO,aAAA;CAAA,MAAA,IAAAI,EAAA,CAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,OAAA,IAAA,2BAAA,GAAA;EAEC,KAAA,oBAAA,QAAA;GAAiB,WAAAC,wBAAM;GAAoB,eAAA;GAAO,UAAA;EAE3C,CAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OAFP;AAEO;AAIf,SAAS,QAAQ,OAAyB;CACtC,OACI,UAAU,QACV,UAAU,KAAA,KACV,UAAU,MACT,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW;AAElD;;AAGA,SAAO,YAAA,IAAA;CAAA,MAAA,IAAAD,EAAA,CAAA;CAAqB,MAAA,EAAA,UAAA;CACxB,MAAA,OAAa,eAAe;CAAE,IAAA;CAAA,IAAA,EAAA,OAAA,KAAA,UAAA,EAAA,OAAA,OAAA;EACjB,KAAA,OAAO,OAAO,KAAI,MAAO;EAAC,EAAA,KAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAvC,MAAA,OAAa;CAA2B,IAAA;CAAA,IAAA,EAAA,OAAA,MAAA;EACjC,KAAA,SAAS,KAAK,oBAAC,YAAD,CAAW,CAAA,IAAM,oBAAA,QAAA;GAAiB,WAAAC,wBAAM;GAAQ,UAAA;EAAY,CAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OAA1E;AAA0E;;AAIrF,SAAO,gBAAA,IAAA;CAAA,MAAA,IAAAD,EAAA,CAAA;CAAyB,MAAA,EAAA,UAAA;CAAuB,IAAA;CAAA,IAAA,EAAA,OAAA,OAAA;EAE/C,KAAA,OAAO,UAAU,WACX,MAAK,QACQ,YAAY,GAAG,CAAC,CAAA,QAChB,QAAQ,GAAG,CAAC,CAAA,KAExB,IALP;EAKQ,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CANZ,MAAA,OACI;CAKS,IAAA;CAAA,IAAA,EAAA,OAAA,MAAA;EACN,KAAA,SAAS,KAAK,oBAAC,YAAD,CAAW,CAAA,IAAM,oBAAA,QAAA;GAAiB,WAAAC,wBAAM;GAAQ,UAAA;EAAY,CAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OAA1E;AAA0E;;AAIrF,SAAO,cAAA,IAAA;CAAA,MAAA,IAAAD,EAAA,CAAA;CAAuB,MAAA,EAAA,UAAA;CAC1B,MAAA,OAAa,eAAe;CAC5B,MAAA,SACI,OAAO,UAAU,WAAjB,QAAoC,OAAO,UAAU,WAAW,OAAO,KAAW,IAA9C;CACxC,IAAI,OAAM,MAAO,MAAwB,KAAb,QAAQ,KAAK,GAAC;EAAA,IAAA;EAAA,IAAA,EAAA,OAAA,OAAA,IAAA,2BAAA,GAAA;GAC/B,KAAA,oBAAC,YAAD,CAAW,CAAA;GAAG,EAAA,KAAA;EAAA,OAAA,KAAA,EAAA;EAAA,OAAd;CAAc;CACxB,IAAA;CAAA,IAAA,EAAA,OAAA,QAAA,EAAA,OAAA,QAAA;EACuC,KAAA,KAAI,aAAc,MAAM;EAAC,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,IAAA;EAA1D,KAAA,oBAAA,QAAA;GAAiB,WAAAC,wBAAM;GAAU,UAAA;EAAiC,CAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OAAlE;AAAkE;;AAI7E,SAAO,eAAA,IAAA;CAAA,MAAA,IAAAD,EAAA,EAAA;CAAwB,MAAA,EAAA,UAAA;CAC3B,MAAA,OAAa,eAAe;CAC5B,IAAI,UAAU,QAAQ,UAAU,KAAA,GAAS;EAAA,IAAA;EAAA,IAAA,EAAA,OAAA,OAAA,IAAA,2BAAA,GAAA;GAC9B,KAAA,oBAAC,YAAD,CAAW,CAAA;GAAG,EAAA,KAAA;EAAA,OAAA,KAAA,EAAA;EAAA,OAAd;CAAc;CAEzB,MAAA,UAAgB,UAAU,QAAQ,UAAU,KAAK,UAAU,UAAU,UAAU;CAE1D,MAAA,KAAA,GAAGC,wBAAM,QAAQ,GAAI,UAAUA,wBAAM,OAAQA,wBAAM;CAEtD,MAAA,KAAA,UAAA,QAAA;CAAuB,IAAA;CAAA,IAAA,EAAA,OAAA,WAAA,EAAA,OAAA,MAAA;EACtB,KAAA,KAAI,cAAe,UAAU,SAAQ,MAAO,SAAQ,EAAG;EAAC,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,MAAA,EAAA,OAAA,IAAA;EAFnE,KAAA,oBAAC,MAAD;GACU,MAAA;GACC,OAAA;EAAwD,CAAA;EACjE,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,MAAA,EAAA,OAAA,IAAA;EAJN,KAAA,oBAAA,QAAA;GAAiB,WAAA;GACb,UAAA;EAIG,CAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OALP;AAKO;AAIf,IAAM,YAAY;AAClB,IAAM,YAAY;;AAGlB,SAAS,UAAU,OAA6B;CAC5C,IAAI,OAAO,UAAU,YAAY,UAAU,IACvC,OAAO;CAEX,MAAM,MAAM,UAAU,KAAK,KAAK;CAChC,MAAM,OACF,QAAQ,OACF,IAAI,KAAK,OAAO,IAAI,EAAE,GAAG,OAAO,IAAI,EAAE,IAAI,GAAG,OAAO,IAAI,EAAE,CAAC,IAC3D,IAAI,KAAK,KAAK;CACxB,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,IAAI,OAAO;AACjD;;AAGA,SAAO,YAAA,IAAA;CAAA,MAAA,IAAAD,EAAA,CAAA;CAAqB,MAAA,EAAA,UAAA;CACxB,MAAA,OAAa,eAAe;CAAE,IAAA;CAAA,IAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,QAAA,EAAA,OAAA,OAAA;EAGnB,KAAA,OAAc,IAAd,6BAAa;EAAC,KAAA;GAFzB,MAAA,OAAa,UAAU,KAAK;GAC5B,IAAI,SAAS,MAAI;IAAA,IAAA;IAAA,IAAA,EAAA,OAAA,OAAA,IAAA,2BAAA,GAAA;KACN,KAAA,oBAAC,YAAD,CAAW,CAAA;KAAG,EAAA,KAAA;IAAA,OAAA,KAAA,EAAA;IAAd,KAAA;IAAA,MAAA;GAAc;GAEF,KAAA,OAAO,KAAK;GAAI,KAAA,KAAI,WAAY,MAAM,EAAA,WAAa,SAAS,CAAC;EAAC;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA;EAAA,KAAA,EAAA;EAAA,KAAA,EAAA;EAAA,KAAA,EAAA;CAAA;CAAA,IAAA,OAAA,OAAA,IAAA,6BAAA,GAAA,OAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,MAAA,EAAA,OAAA,IAAA;EAA9E,KAAA,oBAAA,QAAA;GAAgB,UAAA;GAAgB,UAAA;EAAsD,CAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OAAtF;AAAsF;;AAIjG,SAAO,gBAAA,IAAA;CAAA,MAAA,IAAAA,EAAA,CAAA;CAAyB,MAAA,EAAA,UAAA;CAC5B,MAAA,OAAa,eAAe;CAAE,IAAA;CAAA,IAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,QAAA,EAAA,OAAA,OAAA;EAGnB,KAAA,OAAc,IAAd,6BAAa;EAAC,KAAA;GAFzB,MAAA,OAAa,UAAU,KAAK;GAC5B,IAAI,SAAS,MAAI;IAAA,IAAA;IAAA,IAAA,EAAA,OAAA,OAAA,IAAA,2BAAA,GAAA;KACN,KAAA,oBAAC,YAAD,CAAW,CAAA;KAAG,EAAA,KAAA;IAAA,OAAA,KAAA,EAAA;IAAd,KAAA;IAAA,MAAA;GAAc;GAGL,KAAA,OAAO,KAAK;GACvB,KAAA,KAAI,WAAY,MAAM;IAAA,WAAa;IAAQ,WAAa;GAAQ,CAAC;EAAC;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA;EAAA,KAAA,EAAA;EAAA,KAAA,EAAA;EAAA,KAAA,EAAA;CAAA;CAAA,IAAA,OAAA,OAAA,IAAA,6BAAA,GAAA,OAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,MAAA,EAAA,OAAA,IAAA;EADvE,KAAA,oBAAA,QAAA;GAAgB,UAAA;GACX,UAAA;EACE,CAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OAFP;AAEO;;AAKf,SAAO,YAAA,IAAA;CAAA,MAAA,IAAAA,EAAA,EAAA;CAAqB,MAAA,EAAA,UAAA;CACxB,MAAA,OAAa,eAAe;CAAE,IAAA;CAAA,IAAA,EAAA,OAAA,OAAA;EAChB,KAAA,OAAO,UAAU,WAAW,UAAS,KAAM,KAAY,IAAvD;EAAwD,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAtE,MAAA,QAAc;CACd,IAAI,UAAU,MAAI;EAAA,IAAA;EAAA,IAAA,EAAA,OAAA,OAAA,IAAA,2BAAA,GAAA;GACP,KAAA,oBAAC,YAAD,CAAW,CAAA;GAAG,EAAA,KAAA;EAAA,OAAA,KAAA,EAAA;EAAA,OAAd;CAAc;CACxB,IAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,QAAA,EAAA,OAAA,MAAA,MAAA,EAAA,OAAA,MAAA,MAAA,EAAA,OAAA,MAAA,MAAA,EAAA,OAAA,OAAA;EACD,MAAA,OAAa,IAAI,KAAK,KAAM,GAAG,GAAG,OAAO,MAAK,EAAG,GAAG,OAAO,MAAK,EAAG,GAAG,OAAO,MAAK,MAAL,CAAa,CAAC;EACpE,KAAA,OAAO,KAAK;EAAI,KAAA,KAAI,WAAY,MAAM,EAAA,WAAa,QAAQ,CAAC;EAAC,EAAA,KAAA;EAAA,EAAA,KAAA,MAAA;EAAA,EAAA,KAAA,MAAA;EAAA,EAAA,KAAA,MAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA;EAAA,KAAA,EAAA;EAAA,KAAA,EAAA;CAAA;CAAA,IAAA;CAAA,IAAA,EAAA,QAAA,MAAA,EAAA,QAAA,IAAA;EAA7E,KAAA,oBAAA,QAAA;GAAgB,UAAA;GAAgB,UAAA;EAAqD,CAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OAArF;AAAqF;;AAIhG,SAAO,cAAA,IAAA;CAAA,MAAA,IAAAA,EAAA,CAAA;CAAuB,MAAA,EAAA,OAAA,UAAA;CAA8B,IAAA;CAAA,IAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,SAAA,EAAA,OAAA,OAAA;EAI7C,KAAA,OAAc,IAAd,6BAAa;EAAC,KAAA;GAHzB,MAAA,UAAgB,gBAAgB,KAAK;GACrC,MAAA,SAA0B,MAAK,QAAS,KAA6C,IAA3D,QAA+B,QAAQ,KAAoB,IAA5B,CAAA,IAAA,CAAuB,KAAK;GACrF,IAAI,OAAM,WAAY,GAAC;IAAA,IAAA;IAAA,IAAA,EAAA,OAAA,OAAA,IAAA,2BAAA,GAAA;KACZ,KAAA,oBAAC,YAAD,CAAW,CAAA;KAAG,EAAA,KAAA;IAAA,OAAA,KAAA,EAAA;IAAd,KAAA;IAAA,MAAA;GAAc;GAGJ,KAAAC,wBAAM;GAClB,KAAA,OAAM,KAAK,UACR,oBAAC,OAAD,EAAA,UAA4B,eAAe,SAAS,KAAsB,KAAZ,OAAO,KAAK,EAApE,GAAM,OAAO,KAAK,CAAlB,CACT;EAAC;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA;EAAA,KAAA,EAAA;EAAA,KAAA,EAAA;EAAA,KAAA,EAAA;CAAA;CAAA,IAAA,OAAA,OAAA,IAAA,6BAAA,GAAA,OAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,MAAA,EAAA,OAAA,IAAA;EAHN,KAAA,oBAAA,QAAA;GAAiB,WAAA;GACZ,UAAA;EAGE,CAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OAJP;AAIO;;AAKf,SAAO,gBAAA,IAAA;CAAA,MAAA,IAAAD,EAAA,CAAA;CAAyB,MAAA,EAAA,UAAA;CAAuB,IAAA;CAAA,IAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,OAAA;EAGxC,KAAA,OAAc,IAAd,6BAAa;EAAC,KAAA;GAFzB,MAAA,aAAmB,aAAa,KAAK;GACrC,IAAI,WAAU,WAAY,GAAC;IAAA,IAAA;IAAA,IAAA,EAAA,OAAA,OAAA,IAAA,2BAAA,GAAA;KAChB,KAAA,oBAAC,YAAD,CAAW,CAAA;KAAG,EAAA,KAAA;IAAA,OAAA,KAAA,EAAA;IAAd,KAAA;IAAA,MAAA;GAAc;GAGJ,KAAAC,wBAAM;GAClB,KAAA,WAAU,IAAK,KAA8B,CAAC,CAAA,KAAM,IAAI;EAAC;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA;EAAA,KAAA,EAAA;EAAA,KAAA,EAAA;EAAA,KAAA,EAAA;CAAA;CAAA,IAAA,OAAA,OAAA,IAAA,6BAAA,GAAA,OAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,MAAA,EAAA,OAAA,IAAA;EAD9D,KAAA,oBAAA,QAAA;GAAiB,WAAA;GACZ,UAAA;EACE,CAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OAFP;AAEO;;AARR,SAAA,MAAA,WAAA;CAAA,OAOoC,UAAS;AAAM;AAM1D,SAAO,WAAA,IAAA;CAAA,MAAA,IAAAD,EAAA,CAAA;CAAoB,MAAA,EAAA,UAAA;CACvB,IAAI,OAAO,UAAU,YAAY,UAAU,IAAE;EAAA,IAAA;EAAA,IAAA,EAAA,OAAA,OAAA,IAAA,2BAAA,GAAA;GAClC,KAAA,oBAAC,YAAD,CAAW,CAAA;GAAG,EAAA,KAAA;EAAA,OAAA,KAAA,EAAA;EAAA,OAAd;CAAc;CACxB,IAAA;CAAA,IAAA,EAAA,OAAA,OAAA;EAAA,IAAA;EAAA,IAAA,EAAA,OAAA,OAAA,IAAA,2BAAA,GAAA;GAGsB,KAAA;GAAc,EAAA,KAAA;EAAA,OAAA,KAAA,EAAA;EAA5B,KAAA,MAAK,QAAS,IAAgB,EAAE;EAAC,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,MAAA,EAAA,OAAA,OAAA;EADtC,KAAA,oBAAA,KAAA;GAAc,WAAAC,wBAAM;GAAaJ,MAAA;GAAc,QAAA;GAAa,KAAA;GACvD,UAAA;EACD,CAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OAFJ;AAEI;;AAKZ,SAAO,aAAA,IAAA;CAAA,MAAA,IAAAG,EAAA,CAAA;CAAsB,MAAA,EAAA,UAAA;CACzB,IAAI,OAAO,UAAU,YAAY,UAAU,IAAE;EAAA,IAAA;EAAA,IAAA,EAAA,OAAA,OAAA,IAAA,2BAAA,GAAA;GAClC,KAAA,oBAAC,YAAD,CAAW,CAAA;GAAG,EAAA,KAAA;EAAA,OAAA,KAAA,EAAA;EAAA,OAAd;CAAc;CAGY,MAAA,KAAA,UAAU;CAAO,IAAA;CAAA,IAAA,EAAA,OAAA,MAAA,EAAA,OAAA,OAAA;EAAlD,KAAA,oBAAA,KAAA;GAAc,WAAAC,wBAAM;GAAa,MAAA;GAC5B,UAAA;EACD,CAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OAFJ;AAEI;;AAKZ,SAAO,aAAA,IAAA;CAAA,MAAA,IAAAD,EAAA,CAAA;CAAsB,MAAA,EAAA,UAAA;CACzB,IAAI,OAAO,UAAU,YAAY,UAAU,IAAE;EAAA,IAAA;EAAA,IAAA,EAAA,OAAA,OAAA,IAAA,2BAAA,GAAA;GAClC,KAAA,oBAAC,YAAD,CAAW,CAAA;GAAG,EAAA,KAAA;EAAA,OAAA,KAAA,EAAA;EAAA,OAAd;CAAc;CACxB,IAAA;CAAA,IAAA,EAAA,OAAA,OAAA;EAGO,KAAA,oBAAA,QAAA;GAAiB,WAAAC,wBAAM;GAAgB,OAAA,EAAA,iBAAmB,MAAM;GAAe,eAAA;EAAM,CAAA;EAAG,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,MAAA,EAAA,OAAA,OAAA;EAD5F,KAAA,qBAAA,QAAA;GAAiB,WAAAA,wBAAM;GAAvB,UAAA,CACI,IACC,KACE;;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OAHP;AAGO;;AAKf,SAAO,aAAA,IAAA;CAAA,MAAA,IAAAD,EAAA,CAAA;CAAsB,MAAA,EAAA,UAAA;CACzB,MAAA,QAAuB,MAAK,QAAS,KAAwB,IAAf,MAAK,KAA5B;CACvB,IAAI,UAAU,QAAQ,OAAO,UAAU,UAAQ;EAAA,IAAA;EAAA,IAAA,EAAA,OAAA,OAAA,IAAA,2BAAA,GAAA;GACpC,KAAA,oBAAC,YAAD,CAAW,CAAA;GAAG,EAAA,KAAA;EAAA,OAAA,KAAA,EAAA;EAAA,OAAd;CAAc;CAEzB,MAAA,EAAA,cAAA,KAAA,MAAA,aAA8C;CAC9C,MAAA,SACI,OAAO,iBAAiB,WAAxB,eAAkD,OAAO,QAAQ,WAAf,MAAA;CACtD,MAAA,QAAc,OAAO,SAAS,WAAhB,OAAkC,OAAO,aAAa,WAApB,WAAA;CAA6C,IAAA;CAAA,IAAA,EAAA,OAAA,QAAA;EAGpF,KAAA,WAAW,OAAO,oBAAA,OAAA;GAAgB,WAAAC,wBAAM;GAAiBH,KAAA;GAAY,KAAA;EAAE,CAAA,IAAvE;EAAiF,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,OAAA;EACjF,KAAA,UAAU,KAAK,oBAAA,QAAA;GAAiB,WAAAG,wBAAM;GAAQ,UAAA;EAAa,CAAA,IAA3D;EAAkE,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,MAAA,EAAA,OAAA,IAAA;EAFvE,KAAA,qBAAA,QAAA;GAAiB,WAAAA,wBAAM;GAAvB,UAAA,CACK,IACA,EACE;;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OAHP;AAGO;;;;;;AASf,IAAa,kBAA0D;CACnE,MAAM;CACN,UAAU;CACV,MAAM;CACN,UAAU;CACV,QAAQ;CACR,SAAS;CACT,MAAM;CACN,UAAU;CACV,MAAM;CACN,QAAQ;CACR,UAAU;CACV,KAAK;CACL,OAAO;CACP,OAAO;CACP,OAAO;AACX"}
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,35 +1,45 @@
1
- .panneau-filters-9H41r8 {
1
+ .panneau-filters {
2
2
  display: flex;
3
3
  flex-wrap: wrap;
4
4
  align-items: flex-end;
5
5
  gap: var(--panneau-space-3);
6
6
  }
7
7
 
8
- .panneau-control-vD-jl2 {
8
+ .panneau-filters-control {
9
9
  width: 12rem;
10
10
  max-width: 100%;
11
11
  }
12
12
 
13
- .panneau-toggle-aBWzSX {
14
- align-self: center;
15
- min-height: var(--panneau-control-height);
13
+ /* On the line of the controls, below the labels of the other filters. The switch's own wrapper
14
+ * is a column: two classes outweigh it. */
15
+ .panneau-filters .panneau-filters-toggle {
16
16
  display: flex;
17
- align-items: center;
17
+ flex-direction: column;
18
+ justify-content: center;
19
+ align-self: flex-end;
20
+ min-height: var(--panneau-control-height);
21
+ }
22
+
23
+ .panneau-filters-range {
24
+ max-width: 100%;
18
25
  }
19
26
 
20
- .panneau-range-lY9OdJ {
27
+ .panneau-filters-range-inputs {
21
28
  display: flex;
22
- flex-wrap: wrap;
29
+ align-items: center;
23
30
  gap: var(--panneau-space-2);
24
- max-width: 100%;
25
31
  }
26
32
 
27
- .panneau-range-lY9OdJ > :not(legend) {
28
- width: 11rem;
29
- max-width: 100%;
33
+ .panneau-filters-range-inputs > :not(.panneau-filters-range-dash) {
34
+ width: 10.5rem;
35
+ min-width: 0;
30
36
  }
31
37
 
32
- .panneau-chips-zPj5hD {
38
+ .panneau-filters-range-dash {
39
+ color: var(--panneau-color-text-muted);
40
+ }
41
+
42
+ .panneau-filters-chips {
33
43
  display: flex;
34
44
  flex-wrap: wrap;
35
45
  align-items: center;
@@ -39,7 +49,7 @@
39
49
  list-style: none;
40
50
  }
41
51
 
42
- .panneau-chip-RQRPo6 {
52
+ .panneau-filters-chip {
43
53
  display: inline-flex;
44
54
  align-items: center;
45
55
  gap: var(--panneau-space-1);
@@ -51,21 +61,25 @@
51
61
  border-radius: var(--panneau-radius-full);
52
62
  }
53
63
 
54
- .panneau-chipText-Uofas9 {
64
+ .panneau-filters-chip-text {
55
65
  overflow: hidden;
56
66
  text-overflow: ellipsis;
57
67
  white-space: nowrap;
58
68
  }
59
69
 
60
- .panneau-chipLabel-QsALcI {
70
+ .panneau-filters-chip-label {
61
71
  color: var(--panneau-color-text-muted);
62
72
  }
63
73
 
64
74
  @container panneau-list (max-width: 40rem) {
65
- .panneau-filters-9H41r8,
66
- .panneau-control-vD-jl2,
67
- .panneau-range-lY9OdJ,
68
- .panneau-range-lY9OdJ > :not(legend) {
75
+ .panneau-filters,
76
+ .panneau-filters-control,
77
+ .panneau-filters-range {
69
78
  width: 100%;
70
79
  }
80
+
81
+ .panneau-filters-range-inputs > :not(.panneau-filters-range-dash) {
82
+ flex: 1 1 0;
83
+ width: auto;
84
+ }
71
85
  }
@@ -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 +1 @@
1
- {"version":3,"file":"Filters.js","names":["filter","value","X","onClearSearch","text","label","id","onClear","_c","styles","_Fragment"],"sources":["../../src/filters/Filters.tsx"],"sourcesContent":["import { X } from 'lucide-react';\nimport { useState } from 'react';\n\nimport type { Field, Filter, FilterValue } from '@panneau/protocol';\nimport { Button, IconButton, usePanneauIntl } from '@panneau/ui';\n\nimport { messages } from '../messages';\nimport type { FilterEntry, ListColumn } from '../types';\nimport styles from './Filters.module.css';\nimport { builtInFilters } from './controls';\nimport { formatFilterValue, getFilterLabel, getFilterOptions } from './format';\n\n/** Labels of filter values (relation ids), by filter id, for the chips. */\nexport type FilterLabels = Readonly<Record<string, Readonly<Record<string, string>>>>;\n\n/** Remembers the labels of filter values, for the chips of active filters. */\nexport function useFilterLabels(): {\n labels: FilterLabels;\n remember: (filter: string, value: string, label: string) => void;\n} {\n const [labels, setLabels] = useState<FilterLabels>({});\n return {\n labels,\n remember: (filter, value, label) =>\n setLabels((current) =>\n current[filter]?.[value] === label\n ? current\n : { ...current, [filter]: { ...current[filter], [value]: label } },\n ),\n };\n}\n\ninterface FilterContext {\n columns: readonly ListColumn[];\n fields: readonly Field[];\n labels: FilterLabels;\n}\n\nexport interface FilterControlsProps extends FilterContext {\n filters: readonly Filter[];\n /** The current filter values, by filter id. */\n values: Readonly<Record<string, FilterValue>>;\n onChange: (id: string, value: FilterValue | undefined) => void;\n onLabel: (filter: string, value: string, label: string) => void;\n /** Controls by filter type, over the built-in ones. */\n controls?: Readonly<Record<string, FilterEntry>> | undefined;\n}\n\n/** A control for each filter of the list. */\nexport function FilterControls({\n filters,\n values,\n onChange,\n onLabel,\n controls,\n columns,\n fields,\n labels,\n}: FilterControlsProps) {\n const intl = usePanneauIntl();\n return (\n <div\n role=\"group\"\n aria-label={intl.formatMessage(messages.filters)}\n className={styles.filters}\n >\n {filters.map((filter) => {\n const Control =\n controls?.[filter.type] ?? builtInFilters[filter.type] ?? builtInFilters.text;\n if (Control === undefined) {\n return null;\n }\n return (\n <Control\n key={filter.id}\n filter={filter}\n label={getFilterLabel(filter, columns, fields)}\n options={getFilterOptions(filter, columns, fields)}\n value={values[filter.id]}\n onChange={(value) => onChange(filter.id, value)}\n onLabel={(value, label) => onLabel(filter.id, value, label)}\n getValueLabel={(value) => labels[filter.id]?.[value] ?? null}\n />\n );\n })}\n </div>\n );\n}\n\nexport interface FilterChipsProps extends FilterContext {\n filters: readonly Filter[];\n values: Readonly<Record<string, FilterValue>>;\n /** The search, shown as a chip too. */\n q?: string | undefined;\n onRemove: (id: string) => void;\n onClearSearch: () => void;\n onClear: () => void;\n}\n\n/** The active filters and the search, as chips that remove them, and a button to clear them all. */\nexport function FilterChips({\n filters,\n values,\n q,\n onRemove,\n onClearSearch,\n onClear,\n columns,\n fields,\n labels,\n}: FilterChipsProps) {\n const intl = usePanneauIntl();\n const chips = Object.entries(values).map(([id, value]) => {\n const filter = filters.find((candidate) => candidate.id === id) ?? { id, type: 'text' };\n const label = getFilterLabel(filter, columns, fields);\n const text =\n filter.type === 'toggle'\n ? null\n : formatFilterValue(filter, value, {\n intl,\n options: getFilterOptions(filter, columns, fields),\n getValueLabel: (entry) => labels[id]?.[entry] ?? null,\n });\n return { id, label, text };\n });\n const search = q !== undefined && q !== '' ? q : null;\n if (chips.length === 0 && search === null) {\n return null;\n }\n return (\n <div className={styles.chips}>\n <ul aria-label={intl.formatMessage(messages.activeFilters)} className={styles.chips}>\n {search !== null ? (\n <li className={styles.chip}>\n <span className={styles.chipText}>\n {intl.formatMessage(messages.searchChip, { q: search })}\n </span>\n <IconButton\n icon={X}\n size=\"sm\"\n showTooltip={false}\n label={intl.formatMessage(messages.removeFilter, {\n filter: intl.formatMessage(messages.searchChip, { q: search }),\n })}\n onPress={onClearSearch}\n />\n </li>\n ) : null}\n {chips.map(({ id, label, text }) => {\n const name = text !== null ? `${label}: ${text}` : label;\n return (\n <li key={id} className={styles.chip}>\n <span className={styles.chipText}>\n {text !== null ? (\n <>\n <span className={styles.chipLabel}>{label}:</span> {text}\n </>\n ) : (\n label\n )}\n </span>\n <IconButton\n icon={X}\n size=\"sm\"\n showTooltip={false}\n label={intl.formatMessage(messages.removeFilter, { filter: name })}\n onPress={() => onRemove(id)}\n />\n </li>\n );\n })}\n </ul>\n <Button variant=\"ghost\" size=\"sm\" onPress={onClear}>\n {intl.formatMessage(messages.clearFilters)}\n </Button>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;AAgBA,SAAO,kBAAA;CAAA,MAAA,IAAAQ,EAAA,CAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,OAAA,IAAA,2BAAA,GAAA;EAIgD,KAAA,CAAC;EAAC,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAArD,MAAA,CAAA,QAAA,aAA4B,SAAuB,EAAE;CAAE,IAAA;CAAA,IAAA,EAAA,OAAA,OAAA,IAAA,2BAAA,GAAA;EAGzC,MAAA,QAAA,OAAA,UACN,WAAU,YACN,QAAQ,OAAgB,GAAN,WAAW,QAA7B,UAAA;GAAA,GAEW;IAAU,SAAS;IAAA,GAAK,QAAQ;KAAU,QAAQ;GAAM;EAAE,CACzE;EAAC,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,QAAA;EAPF,KAAA;GAAA;GAAA,UAEO;EAMd;EAAC,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OARM;AAQN;;AAoBL,SAAO,eAAA,IAAA;CAAA,MAAA,IAAAA,EAAA,EAAA;CAAwB,MAAA,EAAA,SAAA,QAAA,UAAA,SAAA,UAAA,SAAA,QAAA,WAAA;CAU3B,MAAA,OAAa,eAAe;CAAE,IAAA;CAAA,IAAA,EAAA,OAAA,MAAA;EAIV,KAAA,KAAI,cAAe,SAAQ,OAAQ;EAAC,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,WAAA,EAAA,OAAA,YAAA,EAAA,OAAA,UAAA,EAAA,OAAA,WAAA,EAAA,OAAA,UAAA,EAAA,OAAA,YAAA,EAAA,OAAA,WAAA,EAAA,OAAA,QAAA;EAAA,IAAA;EAAA,IAAA,EAAA,QAAA,WAAA,EAAA,QAAA,YAAA,EAAA,QAAA,UAAA,EAAA,QAAA,UAAA,EAAA,QAAA,YAAA,EAAA,QAAA,WAAA,EAAA,QAAA,QAAA;GAGnC,MAAA,WAAA;IACT,MAAA,UACI,WAAW,OAAM,SAAU,eAAe,OAAM,SAAU,eAAc;IAC5E,IAAI,YAAY,KAAA,GAAS,OACd;IACV,OAEG,oBAAC,SAAD;KAEY;KACD,OAAA,eAAe,QAAQ,SAAS,MAAM;KACpC,SAAA,iBAAiB,QAAQ,SAAS,MAAM;KAC1C,OAAA,OAAO,OAAM;KACV,WAAA,UAAW,SAAS,OAAM,IAAK,KAAK;KACrC,UAAA,SAAA,UAAkB,QAAQ,OAAM,IAAKP,SAAO,KAAK;KAC3C,gBAAA,YAAW,OAAO,OAAM,GAAa,GAANA,YAApB;IAAkC,GAPvD,OAAM,EAOiD;GAC9D;GAET,EAAA,MAAA;GAAA,EAAA,MAAA;GAAA,EAAA,MAAA;GAAA,EAAA,MAAA;GAAA,EAAA,MAAA;GAAA,EAAA,MAAA;GAAA,EAAA,MAAA;GAAA,EAAA,MAAA;EAAA,OAAA,KAAA,EAAA;EAlBA,KAAA,QAAO,IAAK,EAkBZ;EAAC,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,MAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,QAAA,MAAA,EAAA,QAAA,IAAA;EAvBN,KAAA,oBAAA,OAAA;GACS,MAAA;GACO,cAAA;GACD,WAAAQ,uBAAM;GAEhB,UAAA;EAmBC,CAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OAxBN;AAwBM;;AAed,SAAO,YAAA,IAAA;CAAA,MAAA,IAAAD,EAAA,EAAA;CAAqB,MAAA,EAAA,SAAA,QAAA,GAAA,UAAA,eAAA,SAAA,SAAA,QAAA,WAAA;CAWxB,MAAA,OAAa,eAAe;CAAE,IAAA;CAAA,IAAA,EAAA,OAAA,WAAA,EAAA,OAAA,UAAA,EAAA,OAAA,WAAA,EAAA,OAAA,QAAA,EAAA,OAAA,UAAA,EAAA,OAAA,QAAA;EAChB,KAAA,OAAM,QAAS,MAAM,CAAC,CAAA,KAAK,OAAA;GAAC,MAAA,CAAA,IAAA,SAAA;GACtC,MAAA,SAAe,QAAO,MAAM,cAAe,UAAS,OAAQ,EAA0B,KAAvE;IAAA;IAAA,MAAgE;GAAO;GASzE,OACN;IAAA;IAAA,OATO,eAAe,QAAQ,SAAS,MASvC;IAAA,MAPH,OAAM,SAAU,WAAhB,OAEM,kBAAkB,QAAQ,OAAO;KAAA;KAAA,SAEpB,iBAAiB,QAAQ,SAAS,MAAM;KAAC,gBACnC,UAAW,OAAO,GAAY,GAAN,UAAb;IAC9B,CAAC;GACc;EAAC,CAC7B;EAAC,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAZF,MAAA,QAAc;CAad,MAAA,SAAe,MAAM,KAAA,KAAa,MAAM,KAAzB,IAAA;CACf,IAAI,MAAK,WAAY,KAAK,WAAW,MAAI,OAC9B;CACV,IAAA;CAAA,IAAA,EAAA,OAAA,MAAA;EAGuB,KAAA,KAAI,cAAe,SAAQ,aAAc;EAAC,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,QAAA,EAAA,QAAA,iBAAA,EAAA,QAAA,QAAA;EACrD,KAAA,WAAW,OACR,qBAAA,MAAA;GAAe,WAAAC,uBAAM;GAArB,UAAA,CACI,oBAAA,QAAA;IAAiB,WAAAA,uBAAM;IAClB,UAAA,KAAI,cAAe,SAAQ,YAAa,EAAA,GAAK,OAAO,CAAC;GACnD,CAAA,GACP,oBAAC,YAAD;IACUP,MAAA;IACD,MAAA;IACQ,aAAA;IACN,OAAA,KAAI,cAAe,SAAQ,cAAe,EAAA,QACrC,KAAI,cAAe,SAAQ,YAAa,EAAA,GAAK,OAAO,CAAC,EACjE,CAAC;IACQC,SAAA;GAAa,CAAA,CAEzB;EAdR,CAAA,IAAA;EAeO,EAAA,KAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,QAAA,SAAA,EAAA,QAAA,QAAA,EAAA,QAAA,UAAA;EACP,KAAA,MAAK,KAAK,OAAA;GAAC,MAAA,EAAA,IAAA,MAAA,OAAA,SAAA,MAAA,WAAA;GACR,MAAA,OAAaC,WAAS,OAAT,GAAmBC,QAAK,IAAKD,WAA7B;GAA4C,OAErD,qBAAA,MAAA;IAAwB,WAAAK,uBAAM;IAA9B,UAAA,CACI,oBAAA,QAAA;KAAiB,WAAAA,uBAAM;KAClBL,UAAAA,WAAS,OAAT,qBAAAM,UAAA,EAAA,UAAA;MAEO,qBAAA,QAAA;OAAiB,WAAAD,uBAAM;OAAvB,UAAA,CAAoCJ,SAAM,GAAQ;;MAAA;MAAED;KAAI,EAAA,CAAA,IAF/D;IAOE,CAAA,GACP,oBAAC,YAAD;KACUF,MAAA;KACD,MAAA;KACQ,aAAA;KACN,OAAA,KAAI,cAAe,SAAQ,cAAe,EAAA,QAAU,KAAK,CAAC;KACxD,eAAM,SAASI,IAAE;IAAC,CAAA,CAE9B;GAjBIA,GAAAA,IAiBJ;EAAA,CAEZ;EAAC,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,QAAA,MAAA,EAAA,QAAA,MAAA,EAAA,QAAA,IAAA;EAvCN,KAAA,qBAAA,MAAA;GAAgB,cAAA;GAAuD,WAAAG,uBAAM;GAA7E,UAAA,CACK,IAgBA,EAuBA;;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,QAAA,MAAA;EAEA,KAAA,KAAI,cAAe,SAAQ,YAAa;EAAC,EAAA,MAAA;EAAA,EAAA,MAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,QAAA,WAAA,EAAA,QAAA,IAAA;EAD9C,KAAA,oBAAC,QAAD;GAAgB,SAAA;GAAa,MAAA;GAAcF,SAAA;GACtC,UAAA;EADE,CAAA;EAEE,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,QAAA,MAAA,EAAA,QAAA,IAAA;EA5Cb,KAAA,qBAAA,OAAA;GAAgB,WAAAE,uBAAM;GAAtB,UAAA,CACI,IAyCA,EAGE;;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OA7CN;AA6CM"}
1
+ {"version":3,"file":"Filters.js","names":["X","useState","Field","Filter","FilterValue","Button","IconButton","usePanneauIntl","messages","FilterEntry","ListColumn","styles","builtInFilters","formatFilterValue","getFilterLabel","getFilterOptions","FilterLabels","Readonly","Record","useFilterLabels","$","_c","t0","Symbol","for","labels","setLabels","t1","filter","value","label","current","t2","remember","FilterContext","columns","fields","FilterControlsProps","filters","values","onChange","id","onLabel","controls","FilterControls","intl","formatMessage","t3","Control","type","text","undefined","value_0","value_1","map","FilterChipsProps","q","onRemove","onClearSearch","onClear","FilterChips","Object","entries","find","candidate","options","getValueLabel","entry","chips","search","length","activeFilters","chip","chipText","searchChip","removeFilter","t4","t5","id_0","label_0","text_0","name","chipLabel","t6","clearFilters","t7","t8","_c","styles","_Fragment"],"sources":["../../src/filters/Filters.tsx"],"sourcesContent":["import { X } from 'lucide-react';\nimport { useState } from 'react';\n\nimport type { Field, Filter, FilterValue } from '@panneau/protocol';\nimport { Button, IconButton, usePanneauIntl } from '@panneau/ui';\n\nimport { messages } from '../messages';\nimport type { FilterEntry, ListColumn } from '../types';\nimport styles from './Filters.module.css';\nimport { builtInFilters } from './controls';\nimport { formatFilterValue, getFilterLabel, getFilterOptions } from './format';\n\n/** Labels of filter values (relation ids), by filter id, for the chips. */\nexport type FilterLabels = Readonly<Record<string, Readonly<Record<string, string>>>>;\n\n/** Remembers the labels of filter values, for the chips of active filters. */\nexport function useFilterLabels(): {\n labels: FilterLabels;\n remember: (filter: string, value: string, label: string) => void;\n} {\n const [labels, setLabels] = useState<FilterLabels>({});\n return {\n labels,\n remember: (filter, value, label) =>\n setLabels((current) =>\n current[filter]?.[value] === label\n ? current\n : { ...current, [filter]: { ...current[filter], [value]: label } },\n ),\n };\n}\n\ninterface FilterContext {\n columns: readonly ListColumn[];\n fields: readonly Field[];\n labels: FilterLabels;\n}\n\nexport interface FilterControlsProps extends FilterContext {\n filters: readonly Filter[];\n /** The current filter values, by filter id. */\n values: Readonly<Record<string, FilterValue>>;\n onChange: (id: string, value: FilterValue | undefined) => void;\n onLabel: (filter: string, value: string, label: string) => void;\n /** Controls by filter type, over the built-in ones. */\n controls?: Readonly<Record<string, FilterEntry>> | undefined;\n}\n\n/** A control for each filter of the list. */\nexport function FilterControls({\n filters,\n values,\n onChange,\n onLabel,\n controls,\n columns,\n fields,\n labels,\n}: FilterControlsProps) {\n const intl = usePanneauIntl();\n return (\n <div\n role=\"group\"\n aria-label={intl.formatMessage(messages.filters)}\n className={styles.filters}\n >\n {filters.map((filter) => {\n const Control =\n controls?.[filter.type] ?? builtInFilters[filter.type] ?? builtInFilters.text;\n if (Control === undefined) {\n return null;\n }\n return (\n <Control\n key={filter.id}\n filter={filter}\n label={getFilterLabel(filter, columns, fields)}\n options={getFilterOptions(filter, columns, fields)}\n value={values[filter.id]}\n onChange={(value) => onChange(filter.id, value)}\n onLabel={(value, label) => onLabel(filter.id, value, label)}\n getValueLabel={(value) => labels[filter.id]?.[value] ?? null}\n />\n );\n })}\n </div>\n );\n}\n\nexport interface FilterChipsProps extends FilterContext {\n filters: readonly Filter[];\n values: Readonly<Record<string, FilterValue>>;\n /** The search, shown as a chip too. */\n q?: string | undefined;\n onRemove: (id: string) => void;\n onClearSearch: () => void;\n onClear: () => void;\n}\n\n/** The active filters and the search, as chips that remove them, and a button to clear them all. */\nexport function FilterChips({\n filters,\n values,\n q,\n onRemove,\n onClearSearch,\n onClear,\n columns,\n fields,\n labels,\n}: FilterChipsProps) {\n const intl = usePanneauIntl();\n const chips = Object.entries(values).map(([id, value]) => {\n const filter = filters.find((candidate) => candidate.id === id) ?? { id, type: 'text' };\n const label = getFilterLabel(filter, columns, fields);\n const text =\n filter.type === 'toggle'\n ? null\n : formatFilterValue(filter, value, {\n intl,\n options: getFilterOptions(filter, columns, fields),\n getValueLabel: (entry) => labels[id]?.[entry] ?? null,\n });\n return { id, label, text };\n });\n const search = q !== undefined && q !== '' ? q : null;\n if (chips.length === 0 && search === null) {\n return null;\n }\n return (\n <div className={styles.chips}>\n <ul aria-label={intl.formatMessage(messages.activeFilters)} className={styles.chips}>\n {search !== null ? (\n <li className={styles.chip}>\n <span className={styles.chipText}>\n {intl.formatMessage(messages.searchChip, { q: search })}\n </span>\n <IconButton\n icon={X}\n size=\"sm\"\n showTooltip={false}\n label={intl.formatMessage(messages.removeFilter, {\n filter: intl.formatMessage(messages.searchChip, { q: search }),\n })}\n onPress={onClearSearch}\n />\n </li>\n ) : null}\n {chips.map(({ id, label, text }) => {\n const name = text !== null ? `${label}: ${text}` : label;\n return (\n <li key={id} className={styles.chip}>\n <span className={styles.chipText}>\n {text !== null ? (\n <>\n <span className={styles.chipLabel}>{label}:</span> {text}\n </>\n ) : (\n label\n )}\n </span>\n <IconButton\n icon={X}\n size=\"sm\"\n showTooltip={false}\n label={intl.formatMessage(messages.removeFilter, { filter: name })}\n onPress={() => onRemove(id)}\n />\n </li>\n );\n })}\n </ul>\n <Button variant=\"ghost\" size=\"sm\" onPress={onClear}>\n {intl.formatMessage(messages.clearFilters)}\n </Button>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,24 +1,28 @@
1
1
  import "./Filters.css";
2
2
  //#region src/filters/Filters.module.css
3
- var filters = "panneau-filters-9H41r8";
4
- var control = "panneau-control-vD-jl2";
5
- var toggle = "panneau-toggle-aBWzSX";
6
- var range = "panneau-range-lY9OdJ";
7
- var chips = "panneau-chips-zPj5hD";
8
- var chip = "panneau-chip-RQRPo6";
9
- var chipText = "panneau-chipText-Uofas9";
10
- var chipLabel = "panneau-chipLabel-QsALcI";
3
+ var filters = "panneau-filters";
4
+ var control = "panneau-filters-control";
5
+ var toggle = "panneau-filters-toggle";
6
+ var range = "panneau-filters-range";
7
+ var rangeInputs = "panneau-filters-range-inputs";
8
+ var rangeDash = "panneau-filters-range-dash";
9
+ var chips = "panneau-filters-chips";
10
+ var chip = "panneau-filters-chip";
11
+ var chipText = "panneau-filters-chip-text";
12
+ var chipLabel = "panneau-filters-chip-label";
11
13
  var Filters_module_default = {
12
14
  filters,
13
15
  control,
14
16
  toggle,
15
17
  range,
18
+ rangeInputs,
19
+ rangeDash,
16
20
  chips,
17
21
  chip,
18
22
  chipText,
19
23
  chipLabel
20
24
  };
21
25
  //#endregion
22
- export { chip, chipLabel, chipText, chips, control, Filters_module_default as default, filters, range, toggle };
26
+ export { chip, chipLabel, chipText, chips, control, Filters_module_default as default, filters, range, rangeDash, rangeInputs, toggle };
23
27
 
24
28
  //# sourceMappingURL=Filters.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Filters.module.js","names":[],"sources":["../../src/filters/Filters.module.css"],"sourcesContent":[".filters {\n display: flex;\n flex-wrap: wrap;\n align-items: flex-end;\n gap: var(--panneau-space-3);\n}\n\n.control {\n width: 12rem;\n max-width: 100%;\n}\n\n.toggle {\n align-self: center;\n min-height: var(--panneau-control-height);\n display: flex;\n align-items: center;\n}\n\n.range {\n display: flex;\n flex-wrap: wrap;\n gap: var(--panneau-space-2);\n max-width: 100%;\n}\n\n.range > :not(legend) {\n width: 11rem;\n max-width: 100%;\n}\n\n.chips {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--panneau-space-2);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.chip {\n display: inline-flex;\n align-items: center;\n gap: var(--panneau-space-1);\n max-width: 100%;\n padding-inline-start: var(--panneau-space-3);\n font-size: var(--panneau-font-size-sm);\n background-color: var(--panneau-color-surface-sunken);\n border: var(--panneau-border-width) solid var(--panneau-color-border);\n border-radius: var(--panneau-radius-full);\n}\n\n.chipText {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.chipLabel {\n color: var(--panneau-color-text-muted);\n}\n\n@container panneau-list (max-width: 40rem) {\n .filters,\n .control,\n .range,\n .range > :not(legend) {\n width: 100%;\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"Filters.module.js","names":[],"sources":["../../src/filters/Filters.module.css"],"sourcesContent":[".filters {\n display: flex;\n flex-wrap: wrap;\n align-items: flex-end;\n gap: var(--panneau-space-3);\n}\n\n.control {\n width: 12rem;\n max-width: 100%;\n}\n\n/* On the line of the controls, below the labels of the other filters. The switch's own wrapper\n * is a column: two classes outweigh it. */\n.filters .toggle {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-self: flex-end;\n min-height: var(--panneau-control-height);\n}\n\n.range {\n max-width: 100%;\n}\n\n.rangeInputs {\n display: flex;\n align-items: center;\n gap: var(--panneau-space-2);\n}\n\n.rangeInputs > :not(.rangeDash) {\n width: 10.5rem;\n min-width: 0;\n}\n\n.rangeDash {\n color: var(--panneau-color-text-muted);\n}\n\n.chips {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--panneau-space-2);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.chip {\n display: inline-flex;\n align-items: center;\n gap: var(--panneau-space-1);\n max-width: 100%;\n padding-inline-start: var(--panneau-space-3);\n font-size: var(--panneau-font-size-sm);\n background-color: var(--panneau-color-surface-sunken);\n border: var(--panneau-border-width) solid var(--panneau-color-border);\n border-radius: var(--panneau-radius-full);\n}\n\n.chipText {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.chipLabel {\n color: var(--panneau-color-text-muted);\n}\n\n@container panneau-list (max-width: 40rem) {\n .filters,\n .control,\n .range {\n width: 100%;\n }\n\n .rangeInputs > :not(.rangeDash) {\n flex: 1 1 0;\n width: auto;\n }\n}\n"],"mappings":""}
@@ -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`. */
@@ -8,8 +8,8 @@ export declare function ToggleFilter({ label, value, onChange }: FilterControlPr
8
8
  /** A day (`2026-10-15`). */
9
9
  export declare function DateFilter({ label, value, onChange }: FilterControlProps): import("react").JSX.Element;
10
10
  /**
11
- * A range of days, sent as `[from, to]` (`filter[published_at][]=2026-01-01&…`). An open end is an
12
- * empty string.
11
+ * A range of days, sent as its bounds (`filter[published_at][from]=2026-01-01&…[to]=…`). Either end
12
+ * can be open: it is left out.
13
13
  */
14
14
  export declare function DateRangeFilter({ label, value, onChange }: FilterControlProps): import("react").JSX.Element;
15
15
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"controls.d.ts","sourceRoot":"","sources":["../../src/filters/controls.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAWhE,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,kBAAkB,+BAmBxE;AAED,8DAA8D;AAC9D,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,kBAAkB,+BAgC3F;AAED,iEAAiE;AACjE,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,kBAAkB,+BAU1E;AAED,4BAA4B;AAC5B,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,kBAAkB,+BASxE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,kBAAkB,+BAmB7E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAC3B,MAAM,EACN,KAAK,EACL,KAAK,EACL,QAAQ,EACR,OAAO,EACP,aAAa,GAChB,EAAE,kBAAkB,+BAmCpB;AAED,oFAAoF;AACpF,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAOhE,CAAC"}
1
+ {"version":3,"file":"controls.d.ts","sourceRoot":"","sources":["../../src/filters/controls.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAchE,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,kBAAkB,+BAmBxE;AAED,8DAA8D;AAC9D,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,kBAAkB,+BAgC3F;AAED,iEAAiE;AACjE,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,kBAAkB,+BAU1E;AAED,4BAA4B;AAC5B,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,kBAAkB,+BASxE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,kBAAkB,+BAmC7E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAC3B,MAAM,EACN,KAAK,EACL,KAAK,EACL,QAAQ,EACR,OAAO,EACP,aAAa,GAChB,EAAE,kBAAkB,+BA8CpB;AAED,oFAAoF;AACpF,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAOhE,CAAC"}