@dlh.io/bideux 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +90 -0
  3. package/dist/all.d.ts +14 -0
  4. package/dist/all.js +15 -0
  5. package/dist/all.js.map +1 -0
  6. package/dist/chunk-62IQGXLW.js +11470 -0
  7. package/dist/chunk-62IQGXLW.js.map +1 -0
  8. package/dist/chunk-75CRTQK7.js +315 -0
  9. package/dist/chunk-75CRTQK7.js.map +1 -0
  10. package/dist/chunk-FVO6E22Z.js +225 -0
  11. package/dist/chunk-FVO6E22Z.js.map +1 -0
  12. package/dist/chunk-GRITOB4M.js +337 -0
  13. package/dist/chunk-GRITOB4M.js.map +1 -0
  14. package/dist/chunk-HPFHIZWO.js +40 -0
  15. package/dist/chunk-HPFHIZWO.js.map +1 -0
  16. package/dist/chunk-IMNUQGHE.js +2864 -0
  17. package/dist/chunk-IMNUQGHE.js.map +1 -0
  18. package/dist/chunk-LHD445PJ.js +571 -0
  19. package/dist/chunk-LHD445PJ.js.map +1 -0
  20. package/dist/chunk-LPLBBHOW.js +386 -0
  21. package/dist/chunk-LPLBBHOW.js.map +1 -0
  22. package/dist/chunk-NGM5R3LW.js +881 -0
  23. package/dist/chunk-NGM5R3LW.js.map +1 -0
  24. package/dist/chunk-OMPR32AR.js +1320 -0
  25. package/dist/chunk-OMPR32AR.js.map +1 -0
  26. package/dist/chunk-QDQ5VVTC.js +255 -0
  27. package/dist/chunk-QDQ5VVTC.js.map +1 -0
  28. package/dist/chunk-RRWZKNDZ.js +1004 -0
  29. package/dist/chunk-RRWZKNDZ.js.map +1 -0
  30. package/dist/chunk-SRWIBMEB.js +178 -0
  31. package/dist/chunk-SRWIBMEB.js.map +1 -0
  32. package/dist/element/chunk-AOKCBPMV.js +1646 -0
  33. package/dist/element/chunk-AOKCBPMV.js.map +1 -0
  34. package/dist/element/chunk-B67SYRQP.js +281 -0
  35. package/dist/element/chunk-B67SYRQP.js.map +1 -0
  36. package/dist/element/chunk-FNRVFA2C.js +55 -0
  37. package/dist/element/chunk-FNRVFA2C.js.map +1 -0
  38. package/dist/element/chunk-G3C722QP.js +4707 -0
  39. package/dist/element/chunk-G3C722QP.js.map +1 -0
  40. package/dist/element/chunk-H5IFOSQP.js +346 -0
  41. package/dist/element/chunk-H5IFOSQP.js.map +1 -0
  42. package/dist/element/chunk-LXR3CLCN.js +30 -0
  43. package/dist/element/chunk-LXR3CLCN.js.map +1 -0
  44. package/dist/element/chunk-TFV4CJR4.js +183 -0
  45. package/dist/element/chunk-TFV4CJR4.js.map +1 -0
  46. package/dist/element/chunk-TXSK3CIN.js +859 -0
  47. package/dist/element/chunk-TXSK3CIN.js.map +1 -0
  48. package/dist/element/chunk-WDTTBY3S.js +45 -0
  49. package/dist/element/chunk-WDTTBY3S.js.map +1 -0
  50. package/dist/element/chunk-ZI3RYCAR.js +233 -0
  51. package/dist/element/chunk-ZI3RYCAR.js.map +1 -0
  52. package/dist/element/element.d.ts +3044 -0
  53. package/dist/element/element.js +146554 -0
  54. package/dist/element/element.js.map +1 -0
  55. package/dist/element/revo-grid.entry-7FHEBN3O.js +4817 -0
  56. package/dist/element/revo-grid.entry-7FHEBN3O.js.map +1 -0
  57. package/dist/element/revogr-attribution_7.entry-LSOFVZRA.js +1328 -0
  58. package/dist/element/revogr-attribution_7.entry-LSOFVZRA.js.map +1 -0
  59. package/dist/element/revogr-clipboard_3.entry-V74UIBPJ.js +494 -0
  60. package/dist/element/revogr-clipboard_3.entry-V74UIBPJ.js.map +1 -0
  61. package/dist/element/revogr-data_4.entry-2UBOKTFN.js +1041 -0
  62. package/dist/element/revogr-data_4.entry-2UBOKTFN.js.map +1 -0
  63. package/dist/element/revogr-filter-panel.entry-B24PLQU4.js +552 -0
  64. package/dist/element/revogr-filter-panel.entry-B24PLQU4.js.map +1 -0
  65. package/dist/index.d.ts +1041 -0
  66. package/dist/index.js +10 -0
  67. package/dist/index.js.map +1 -0
  68. package/dist/react.d.ts +1915 -0
  69. package/dist/react.js +14 -0
  70. package/dist/react.js.map +1 -0
  71. package/dist/renderers/echarts.d.ts +44 -0
  72. package/dist/renderers/echarts.js +6 -0
  73. package/dist/renderers/echarts.js.map +1 -0
  74. package/dist/renderers/index.d.ts +48 -0
  75. package/dist/renderers/index.js +12 -0
  76. package/dist/renderers/index.js.map +1 -0
  77. package/dist/renderers/revogrid.d.ts +76 -0
  78. package/dist/renderers/revogrid.js +6 -0
  79. package/dist/renderers/revogrid.js.map +1 -0
  80. package/dist/renderers/tabulator.d.ts +37 -0
  81. package/dist/renderers/tabulator.js +6 -0
  82. package/dist/renderers/tabulator.js.map +1 -0
  83. package/dist/result-table-CPls-277.d.ts +1885 -0
  84. package/dist/schema/dashboard.schema.json +4374 -0
  85. package/dist/schema/semantic-model.schema.json +1200 -0
  86. package/dist/schema/widget.schema.json +1793 -0
  87. package/dist/styles.css +156 -0
  88. package/dist/theme.css +1789 -0
  89. package/dist/types-CHFSsU_X.d.ts +1007 -0
  90. package/package.json +119 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../dashboard-renderer-revogrid/src/model.ts","../../dashboard-renderer-revogrid/src/toolbar.ts","../../dashboard-renderer-revogrid/src/renderer.ts","../../dashboard-renderer-revogrid/src/widget-factory.ts"],"names":[],"mappings":"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","file":"chunk-NGM5R3LW.js","sourcesContent":["import type {\n CellProps,\n CellTemplateProp,\n ColumnData,\n ColumnGrouping,\n ColumnRegular,\n ColumnTemplateFunc,\n HyperFunc,\n VNode,\n} from \"@revolist/revogrid\";\nimport {\n buildPivotColumns,\n buildPivotRows,\n buildPivotTotalRow,\n initialPivotViewState,\n isPivotColumnGroup,\n pivotCellPresentation,\n pivotFilterCount,\n pivotGroupKeys,\n pivotOpenColumnLevels,\n pivotOpenRowLevels,\n pivotRowMeta,\n pivotSortDirection,\n pivotValueColumns,\n pivotVisibleRows,\n type PivotGridColumn,\n type PivotGridColumnDefinition,\n type PivotGridColumnGroup,\n type PivotViewState,\n type ReadyPivotRendererModel,\n} from \"@dlh.io/bideux-dashboard-renderers\";\nimport type { RendererThemeTokens } from \"@dlh.io/bideux-dashboard-renderer-web\";\n\nexport const ROW_INDENT = 14;\nexport const ROW_HEADER_COLUMN_SIZE = 180;\nexport const VALUE_COLUMN_SIZE = 130;\nexport const COLLAPSED_MARK = \"\\u25b8\";\nexport const EXPANDED_MARK = \"\\u25be\";\nconst SORT_MARK = { asc: \"\\u2191\", desc: \"\\u2193\" } as const;\nconst FUNNEL_PATH = \"M22 3H2l8 9.46V19l4 2v-8.54L22 3z\";\n\n/** Where a header funnel sits on screen, so the filter panel can hang under it. */\nexport interface PivotFilterAnchor {\n left: number;\n top: number;\n}\n\n/** What the grid headers ask the renderer to do when a reader clicks them. */\nexport interface PivotHeaderControls {\n toggleColumnGroup(key: string): void;\n openFilter(prop: string, anchor: PivotFilterAnchor): void;\n}\n\nfunction hexToRgb(color: string): string | null {\n const hex = /^#([0-9a-f]{6})$/i.exec(color.trim());\n if (hex === null || hex[1] === undefined) return null;\n const value = Number.parseInt(hex[1], 16);\n return `${(value >> 16) & 255}, ${(value >> 8) & 255}, ${value & 255}`;\n}\n\nfunction headerName(model: ReadyPivotRendererModel, column: PivotGridColumn) {\n const direction = pivotSortDirection(model.view, model.payload, column.prop);\n return direction === null\n ? column.name\n : `${column.name} ${SORT_MARK[direction]}`;\n}\n\nfunction rowHeaderColumn(\n model: ReadyPivotRendererModel,\n column: PivotGridColumn,\n tokens: RendererThemeTokens,\n): ColumnRegular {\n const level = model.payload.row_fields.findIndex(\n (field) => field.key === column.prop,\n );\n return {\n prop: column.prop,\n name: headerName(model, column),\n readonly: true,\n sortable: false,\n pin: \"colPinStart\",\n size: ROW_HEADER_COLUMN_SIZE,\n cellTemplate: (\n createElement: HyperFunc<VNode>,\n props: CellTemplateProp,\n ) => {\n const meta = pivotRowMeta(props.model);\n const text = pivotCellPresentation(model, props.model, column).text;\n if (meta === null || meta.kind !== \"group\" || meta.depth !== level) {\n return createElement(\"span\", null, text);\n }\n const mark = model.view.collapsed.has(meta.key)\n ? COLLAPSED_MARK\n : EXPANDED_MARK;\n return createElement(\"span\", null, `${mark} ${text}`);\n },\n cellProperties: ({ model: row }) => {\n const meta = pivotRowMeta(row);\n const props: CellProps = { style: { color: tokens.foreground } };\n if (meta === null) return props;\n props.style = {\n ...props.style,\n paddingLeft: `${8 + meta.depth * ROW_INDENT}px`,\n };\n if (meta.kind !== \"leaf\") {\n props.style = { ...props.style, fontWeight: \"600\" };\n }\n return props;\n },\n };\n}\n\nfunction filterableHeader(\n model: ReadyPivotRendererModel,\n column: PivotGridColumn,\n tokens: RendererThemeTokens,\n controls: PivotHeaderControls,\n): ColumnTemplateFunc {\n const name = headerName(model, column);\n const active = model.view.filters[column.prop] !== undefined;\n return (createElement) =>\n createElement(\n \"span\",\n {\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"4px\",\n width: \"100%\",\n },\n },\n [\n createElement(\n \"span\",\n {\n style: { flex: \"1\", overflow: \"hidden\", textOverflow: \"ellipsis\" },\n },\n name,\n ),\n createElement(\n \"button\",\n {\n type: \"button\",\n \"aria-label\": `Filter ${column.name}`,\n title: `Filter ${column.name}`,\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n border: \"none\",\n background: \"transparent\",\n cursor: \"pointer\",\n padding: \"0\",\n color: active ? tokens.secondary : \"inherit\",\n opacity: active ? \"1\" : \"0.55\",\n },\n onMouseDown: (event: MouseEvent) => {\n event.stopPropagation();\n },\n onClick: (event: MouseEvent) => {\n event.stopPropagation();\n const anchor = (\n event.currentTarget as HTMLElement\n ).getBoundingClientRect();\n controls.openFilter(column.prop, {\n left: anchor.left,\n top: anchor.bottom + 4,\n });\n },\n },\n createElement(\n \"svg\",\n {\n viewBox: \"0 0 24 24\",\n width: \"11\",\n height: \"11\",\n fill: active ? \"currentColor\" : \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n },\n createElement(\"path\", { d: FUNNEL_PATH }),\n ),\n ),\n ],\n );\n}\n\nfunction measureColumn(\n model: ReadyPivotRendererModel,\n column: PivotGridColumn,\n tokens: RendererThemeTokens,\n controls: PivotHeaderControls | null,\n): ColumnRegular {\n const heatmapRgb = hexToRgb(tokens.primary) ?? \"130, 204, 92\";\n const definition: ColumnRegular = {\n prop: column.prop,\n name: headerName(model, column),\n readonly: true,\n sortable: false,\n size: VALUE_COLUMN_SIZE,\n cellTemplate: (createElement: HyperFunc<VNode>, props: CellTemplateProp) =>\n createElement(\n \"span\",\n null,\n pivotCellPresentation(model, props.model, column).text,\n ),\n cellProperties: ({ model: row }) => {\n const presentation = pivotCellPresentation(model, row, column);\n const props: CellProps = {\n style: { textAlign: \"right\", color: tokens.foreground },\n };\n if (presentation.emphasized) {\n props.style = { ...props.style, fontWeight: \"600\" };\n }\n if (presentation.heatmapIntensity !== null) {\n props.style = {\n ...props.style,\n background: `rgba(${heatmapRgb}, ${(0.08 + presentation.heatmapIntensity * 0.42).toFixed(3)})`,\n };\n }\n return props;\n },\n };\n if (controls !== null && !column.isTotal) {\n definition.columnTemplate = filterableHeader(\n model,\n column,\n tokens,\n controls,\n );\n }\n if (column.pinStart) definition.pin = \"colPinStart\";\n return definition;\n}\n\nfunction groupColumn(\n model: ReadyPivotRendererModel,\n group: PivotGridColumnGroup,\n tokens: RendererThemeTokens,\n controls: PivotHeaderControls | null,\n): ColumnGrouping & { columnTemplate?: ColumnTemplateFunc } {\n const children = group.children.map((child) =>\n gridColumn(model, child, tokens, controls),\n );\n if (controls === null || !group.foldable) {\n return { name: group.name, children };\n }\n const mark = group.folded ? COLLAPSED_MARK : EXPANDED_MARK;\n const count = group.leafCount > 1 ? ` (${group.leafCount})` : \"\";\n return {\n name: group.name,\n children,\n columnTemplate: (createElement: HyperFunc<VNode>) =>\n createElement(\n \"span\",\n {\n style: {\n cursor: \"pointer\",\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"4px\",\n },\n title: group.folded ? `Open ${group.name}` : `Fold ${group.name}`,\n onMouseDown: (event: MouseEvent) => {\n event.stopPropagation();\n },\n onClick: (event: MouseEvent) => {\n event.stopPropagation();\n controls.toggleColumnGroup(group.key);\n },\n },\n `${mark} ${group.name}${count}`,\n ),\n };\n}\n\nfunction gridColumn(\n model: ReadyPivotRendererModel,\n column: PivotGridColumnDefinition,\n tokens: RendererThemeTokens,\n controls: PivotHeaderControls | null,\n): ColumnGrouping | ColumnRegular {\n if (isPivotColumnGroup(column)) {\n return groupColumn(model, column, tokens, controls);\n }\n return column.isRowField\n ? rowHeaderColumn(model, column, tokens)\n : measureColumn(model, column, tokens, controls);\n}\n\nexport function revoGridColumns(\n model: ReadyPivotRendererModel,\n tokens: RendererThemeTokens,\n controls: PivotHeaderControls | null = null,\n): ColumnData {\n return model.columns.map((column) =>\n gridColumn(model, column, tokens, controls),\n );\n}\n\nexport function projectPivotView(\n model: ReadyPivotRendererModel,\n view: PivotViewState,\n): ReadyPivotRendererModel {\n const visibleRows = pivotVisibleRows(model.payload, view);\n return {\n ...model,\n view,\n columns: buildPivotColumns(model.payload, view.collapsedColumns),\n rows: buildPivotRows(model.payload, visibleRows),\n totalRow: buildPivotTotalRow(model.payload),\n valueColumns: pivotValueColumns(model.payload, view.collapsedColumns),\n controls: {\n ...model.controls,\n groupCount: pivotGroupKeys(model.payload).length,\n filterCount: pivotFilterCount(view),\n reordered: view.sort !== null,\n },\n openLevels: {\n rows: pivotOpenRowLevels(model.payload, view),\n columns: pivotOpenColumnLevels(model.payload, view),\n },\n };\n}\n\nexport function resetPivotView(\n model: ReadyPivotRendererModel,\n): ReadyPivotRendererModel {\n return projectPivotView(model, initialPivotViewState(model.payload, false));\n}\n","import {\n pivotGroupKeys,\n setPivotColumnFilter,\n type PivotColumnFilter,\n type PivotFilterOp,\n type PivotViewState,\n type ReadyPivotRendererModel,\n} from \"@dlh.io/bideux-dashboard-renderers\";\nimport {\n setStyles,\n type RendererExportRequest,\n type RendererThemeTokens,\n} from \"@dlh.io/bideux-dashboard-renderer-web\";\n\nimport type { PivotFilterAnchor } from \"./model.js\";\nimport type { RevoGridRendererInput } from \"./types.js\";\n\n/**\n * The reader controls above a pivot grid and the filter panel a header funnel\n * opens. Both are plain DOM styled from the renderer tokens so they read the\n * same under any host: a 28px row of ghost buttons and a 160px search box,\n * the way the origin application's widget draws them with its utility classes.\n */\n\nconst FILTER_OPS: ReadonlyArray<{ op: PivotFilterOp; label: string }> = [\n { op: \"gte\", label: \"At least\" },\n { op: \"gt\", label: \"Greater than\" },\n { op: \"eq\", label: \"Equals\" },\n { op: \"lte\", label: \"At most\" },\n { op: \"lt\", label: \"Less than\" },\n];\n\nconst ICON_PATHS = {\n search: [\"M21 21l-4.34-4.34\", \"M11 3a8 8 0 1 0 0 16 8 8 0 1 0 0-16z\"],\n expand: [\"m7 15 5 5 5-5\", \"m7 9 5-5 5 5\"],\n collapse: [\"m7 20 5-5 5 5\", \"m7 4 5 5 5-5\"],\n reset: [\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\", \"M3 3v5h5\"],\n filter: [\"M22 3H2l8 9.46V19l4 2v-8.54L22 3z\"],\n download: [\n \"M12 15V3\",\n \"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\",\n \"m7 10 5 5 5-5\",\n ],\n spreadsheet: [\n \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7z\",\n \"M14 2v4a2 2 0 0 0 2 2h4\",\n \"M8 13h2\",\n \"M14 13h2\",\n \"M8 17h2\",\n \"M14 17h2\",\n ],\n} as const;\n\ntype IconName = keyof typeof ICON_PATHS;\n\nfunction icon(document: Document, name: IconName, size: number): SVGElement {\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.setAttribute(\"viewBox\", \"0 0 24 24\");\n svg.setAttribute(\"width\", String(size));\n svg.setAttribute(\"height\", String(size));\n svg.setAttribute(\"fill\", \"none\");\n svg.setAttribute(\"stroke\", \"currentColor\");\n svg.setAttribute(\"stroke-width\", \"2\");\n svg.setAttribute(\"stroke-linecap\", \"round\");\n svg.setAttribute(\"stroke-linejoin\", \"round\");\n svg.setAttribute(\"aria-hidden\", \"true\");\n for (const d of ICON_PATHS[name]) {\n const path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n path.setAttribute(\"d\", d);\n svg.append(path);\n }\n svg.style.flexShrink = \"0\";\n return svg;\n}\n\nfunction ghostButton(\n document: Document,\n tokens: RendererThemeTokens,\n label: string,\n glyph: IconName,\n onClick: () => void,\n): HTMLButtonElement {\n const button = document.createElement(\"button\");\n button.type = \"button\";\n button.append(icon(document, glyph, 12), document.createTextNode(label));\n setStyles(button, {\n display: \"inline-flex\",\n \"align-items\": \"center\",\n gap: \"4px\",\n height: \"28px\",\n padding: \"0 8px\",\n border: \"none\",\n \"border-radius\": \"6px\",\n background: \"transparent\",\n color: \"inherit\",\n font: \"inherit\",\n \"font-size\": \"12px\",\n \"line-height\": \"16px\",\n cursor: \"pointer\",\n \"white-space\": \"nowrap\",\n });\n button.addEventListener(\"mouseenter\", () => {\n if (!button.disabled) button.style.background = tokens.border;\n });\n button.addEventListener(\"mouseleave\", () => {\n button.style.background = \"transparent\";\n });\n button.addEventListener(\"click\", onClick);\n return button;\n}\n\nfunction fieldStyles(tokens: RendererThemeTokens): Record<string, string> {\n return {\n height: \"28px\",\n \"box-sizing\": \"border-box\",\n border: `1px solid ${tokens.border}`,\n \"border-radius\": \"6px\",\n background: \"transparent\",\n color: \"inherit\",\n font: \"inherit\",\n \"font-size\": \"12px\",\n \"line-height\": \"16px\",\n padding: \"0 8px\",\n outline: \"none\",\n };\n}\n\nfunction setDisabled(button: HTMLButtonElement, disabled: boolean): void {\n button.disabled = disabled;\n button.style.opacity = disabled ? \"0.5\" : \"1\";\n button.style.cursor = disabled ? \"default\" : \"pointer\";\n}\n\nexport function createPivotToolbar(\n input: () => RevoGridRendererInput,\n model: () => ReadyPivotRendererModel,\n setView: (view: PivotViewState) => void,\n tokens: RendererThemeTokens,\n parent: HTMLElement,\n): HTMLElement {\n const document = parent.ownerDocument;\n const toolbar = document.createElement(\"div\");\n toolbar.dataset.bideuxPart = \"pivot-actions\";\n setStyles(toolbar, {\n display: \"flex\",\n \"align-items\": \"center\",\n gap: \"8px\",\n \"flex-wrap\": \"wrap\",\n flex: \"0 0 auto\",\n });\n\n const searchWrap = document.createElement(\"div\");\n setStyles(searchWrap, { position: \"relative\", display: \"inline-flex\" });\n const glass = document.createElement(\"span\");\n glass.append(icon(document, \"search\", 12));\n setStyles(glass, {\n position: \"absolute\",\n left: \"8px\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n display: \"inline-flex\",\n \"pointer-events\": \"none\",\n color: tokens.mutedForeground,\n });\n const search = document.createElement(\"input\");\n search.type = \"search\";\n search.placeholder = model().controls.searchPlaceholder;\n search.value = model().view.search;\n search.setAttribute(\"aria-label\", \"Find a row\");\n setStyles(search, {\n ...fieldStyles(tokens),\n width: \"160px\",\n \"padding-left\": \"28px\",\n });\n search.addEventListener(\"focus\", () => {\n search.style.borderColor = tokens.primary;\n });\n search.addEventListener(\"blur\", () => {\n search.style.borderColor = tokens.border;\n });\n search.addEventListener(\"input\", () => {\n setView({ ...model().view, search: search.value });\n });\n searchWrap.append(glass, search);\n toolbar.append(searchWrap);\n\n if (model().controls.expandable) {\n const groupCount = pivotGroupKeys(model().payload).length;\n const expand = ghostButton(document, tokens, \"Expand all\", \"expand\", () => {\n setView({ ...model().view, collapsed: new Set<string>() });\n });\n setDisabled(expand, model().view.collapsed.size === 0);\n const collapse = ghostButton(\n document,\n tokens,\n \"Collapse all\",\n \"collapse\",\n () => {\n setView({\n ...model().view,\n collapsed: new Set(pivotGroupKeys(model().payload)),\n });\n },\n );\n setDisabled(collapse, model().view.collapsed.size === groupCount);\n toolbar.append(expand, collapse);\n }\n\n if (model().controls.reordered) {\n toolbar.append(\n ghostButton(document, tokens, \"Reset order\", \"reset\", () => {\n setView({ ...model().view, sort: null });\n }),\n );\n }\n\n const filterCount = model().controls.filterCount;\n if (filterCount > 0) {\n toolbar.append(\n ghostButton(\n document,\n tokens,\n `Clear filters (${filterCount})`,\n \"filter\",\n () => {\n setView({ ...model().view, filters: {} });\n },\n ),\n );\n }\n\n const exports = document.createElement(\"div\");\n setStyles(exports, {\n display: \"inline-flex\",\n \"align-items\": \"center\",\n gap: \"8px\",\n \"margin-left\": \"auto\",\n });\n for (const format of [\"csv\", \"excel\"] as const) {\n if (!model().exports[format]) continue;\n exports.append(\n ghostButton(\n document,\n tokens,\n format === \"csv\" ? \"CSV\" : \"Excel\",\n format === \"csv\" ? \"download\" : \"spreadsheet\",\n () => {\n const request: RendererExportRequest = {\n widgetId: model().frame.widgetId,\n format,\n filename: model().exports.filename,\n };\n void Promise.resolve()\n .then(() => input().callbacks?.onExport?.(request))\n .catch((error) => {\n input().callbacks?.onError?.(\n error instanceof Error\n ? error\n : new Error(\"Pivot export failed\"),\n );\n });\n },\n ),\n );\n }\n if (exports.childElementCount > 0) toolbar.append(exports);\n\n parent.append(toolbar);\n return toolbar;\n}\n\nexport interface PivotFilterPanelHandle {\n prop: string;\n close(): void;\n}\n\nfunction readThreshold(text: string): number | null {\n const trimmed = text.trim();\n if (trimmed === \"\") return null;\n const value = Number(trimmed);\n return Number.isFinite(value) ? value : null;\n}\n\n/**\n * The small dialog a header funnel opens, fixed under the funnel with a\n * click-away backdrop: comparison, value, Clear and Done, applied as typed.\n */\nexport function openPivotFilterPanel(\n document: Document,\n tokens: RendererThemeTokens,\n prop: string,\n label: string,\n anchor: PivotFilterAnchor,\n current: PivotColumnFilter | undefined,\n filters: () => Readonly<Record<string, PivotColumnFilter>>,\n apply: (filters: Record<string, PivotColumnFilter>) => void,\n onClose: () => void,\n): PivotFilterPanelHandle {\n const backdrop = document.createElement(\"div\");\n backdrop.setAttribute(\"aria-hidden\", \"true\");\n setStyles(backdrop, { position: \"fixed\", inset: \"0\", \"z-index\": \"40\" });\n\n const panel = document.createElement(\"div\");\n panel.setAttribute(\"role\", \"dialog\");\n panel.setAttribute(\"aria-label\", `Filter ${label}`);\n panel.dataset.bideuxPart = \"pivot-filter\";\n setStyles(panel, {\n position: \"fixed\",\n left: `${anchor.left}px`,\n top: `${anchor.top}px`,\n \"z-index\": \"50\",\n width: \"224px\",\n \"box-sizing\": \"border-box\",\n padding: \"12px\",\n border: `1px solid ${tokens.border}`,\n \"border-radius\": \"6px\",\n background: tokens.surface,\n color: tokens.surfaceForeground,\n \"box-shadow\":\n \"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)\",\n \"font-family\": tokens.fontFamily,\n });\n\n const title = document.createElement(\"div\");\n title.textContent = label;\n setStyles(title, {\n \"font-size\": \"12px\",\n \"line-height\": \"16px\",\n \"font-weight\": \"500\",\n overflow: \"hidden\",\n \"text-overflow\": \"ellipsis\",\n \"white-space\": \"nowrap\",\n });\n\n const fields = document.createElement(\"div\");\n setStyles(fields, {\n display: \"flex\",\n \"flex-direction\": \"column\",\n gap: \"8px\",\n \"margin-top\": \"8px\",\n });\n const select = document.createElement(\"select\");\n select.setAttribute(\"aria-label\", \"Comparison\");\n for (const option of FILTER_OPS) {\n const entry = document.createElement(\"option\");\n entry.value = option.op;\n entry.textContent = option.label;\n select.append(entry);\n }\n select.value = current?.op ?? \"gte\";\n setStyles(select, fieldStyles(tokens));\n const value = document.createElement(\"input\");\n value.type = \"number\";\n value.placeholder = \"Value\";\n value.value = current === undefined ? \"\" : String(current.value);\n value.setAttribute(\"aria-label\", `Keep rows where ${label} matches`);\n setStyles(value, { ...fieldStyles(tokens), width: \"100%\" });\n fields.append(select, value);\n\n const footer = document.createElement(\"div\");\n setStyles(footer, {\n display: \"flex\",\n \"align-items\": \"center\",\n \"justify-content\": \"space-between\",\n \"margin-top\": \"8px\",\n });\n\n const close = (): void => {\n backdrop.remove();\n panel.remove();\n onClose();\n };\n const commit = (): void => {\n const threshold = readThreshold(value.value);\n const op = FILTER_OPS.find((entry) => entry.op === select.value)?.op;\n if (op === undefined) return;\n apply(\n setPivotColumnFilter(\n filters(),\n prop,\n threshold === null ? null : { op, value: threshold },\n ),\n );\n };\n\n const clear = ghostButton(document, tokens, \"Clear\", \"filter\", () => {\n apply(setPivotColumnFilter(filters(), prop, null));\n close();\n });\n clear.replaceChildren(document.createTextNode(\"Clear\"));\n const done = document.createElement(\"button\");\n done.type = \"button\";\n done.textContent = \"Done\";\n setStyles(done, {\n height: \"28px\",\n padding: \"0 8px\",\n border: `1px solid ${tokens.border}`,\n \"border-radius\": \"6px\",\n background: \"transparent\",\n color: \"inherit\",\n font: \"inherit\",\n \"font-size\": \"12px\",\n cursor: \"pointer\",\n });\n done.addEventListener(\"click\", close);\n footer.append(clear, done);\n\n select.addEventListener(\"change\", commit);\n value.addEventListener(\"input\", commit);\n value.addEventListener(\"keydown\", (event) => {\n if (event.key === \"Enter\" || event.key === \"Escape\") close();\n });\n backdrop.addEventListener(\"mousedown\", close);\n\n panel.append(title, fields, footer);\n document.body.append(backdrop, panel);\n value.focus();\n return { prop, close };\n}\n","import { defineCustomElements } from \"@revolist/revogrid/loader\";\nimport {\n PIVOT_META_PROP,\n isPivotColumnGroup,\n nextPivotSort,\n pivotCellAction,\n togglePivotGroup,\n type PivotGridColumn,\n type PivotGridColumnDefinition,\n type PivotViewState,\n type ReadyPivotRendererModel,\n} from \"@dlh.io/bideux-dashboard-renderers\";\nimport {\n applyWidgetTheme,\n clearElement,\n createLabel,\n createMessage,\n resolveRendererTheme,\n setStyles,\n type BrowserRenderer,\n} from \"@dlh.io/bideux-dashboard-renderer-web\";\n\nimport {\n projectPivotView,\n revoGridColumns,\n type PivotHeaderControls,\n} from \"./model.js\";\nimport {\n createPivotToolbar,\n openPivotFilterPanel,\n type PivotFilterPanelHandle,\n} from \"./toolbar.js\";\nimport type {\n RevoGridCellFocusDetail,\n RevoGridElement,\n RevoGridLicensedController,\n RevoGridRendererInput,\n RevoGridRuntime,\n} from \"./types.js\";\n\nconst defaultRuntime: RevoGridRuntime = {\n define(targetWindow) {\n defineCustomElements(targetWindow);\n },\n create(document) {\n return document.createElement(\"revo-grid\") as RevoGridElement;\n },\n};\n\nfunction findColumn(\n columns: PivotGridColumnDefinition[],\n prop: string,\n): PivotGridColumn | null {\n for (const column of columns) {\n if (isPivotColumnGroup(column)) {\n const nested = findColumn(column.children, prop);\n if (nested !== null) return nested;\n } else if (column.prop === prop) {\n return column;\n }\n }\n return null;\n}\n\nfunction createGrid(\n input: RevoGridRendererInput,\n runtime: RevoGridRuntime,\n model: ReadyPivotRendererModel,\n controls: PivotHeaderControls,\n): RevoGridElement {\n const document = input.element.ownerDocument;\n const targetWindow = document.defaultView;\n if (targetWindow === null) {\n throw new Error(\"RevoGrid requires a browser window\");\n }\n runtime.define(targetWindow);\n const grid = runtime.create(document);\n grid.dataset.bideuxPart = \"revogrid\";\n grid.setAttribute(\"aria-label\", `${model.frame.widgetId} pivot table`);\n grid.source = model.rows;\n grid.pinnedBottomSource = model.totalRow === null ? [] : [model.totalRow];\n grid.columns = revoGridColumns(\n model,\n resolveRendererTheme(input.theme),\n controls,\n );\n grid.theme = \"compact\";\n grid.readonly = true;\n grid.resize = true;\n grid.range = false;\n grid.canFocus = true;\n setStyles(grid, { flex: \"1\", \"min-height\": \"0\", width: \"100%\" });\n return grid;\n}\n\nasync function enableLicensedCapability(\n input: RevoGridRendererInput,\n grid: RevoGridElement,\n model: ReadyPivotRendererModel,\n): Promise<RevoGridLicensedController | void> {\n if (\n input.licensePort === undefined ||\n input.licensedCapability === undefined\n ) {\n return;\n }\n const license = await input.licensePort.getLicense({\n renderer: \"revogrid\",\n capability: \"pivot-pro\",\n });\n if (license === null || license.length === 0) return;\n return input.licensedCapability.enable({ element: grid, license, model });\n}\n\nexport async function createRevoGridRenderer(\n input: RevoGridRendererInput,\n runtime: RevoGridRuntime = defaultRuntime,\n): Promise<BrowserRenderer<RevoGridRendererInput>> {\n let current = input;\n let model = input.model;\n let grid: RevoGridElement;\n let licensed: RevoGridLicensedController | void;\n let filterPanel: PivotFilterPanelHandle | null = null;\n const tokens = resolveRendererTheme(input.theme);\n clearElement(input.element);\n applyWidgetTheme(input.element, model.frame, tokens);\n setStyles(input.element, {\n display: \"flex\",\n \"flex-direction\": \"column\",\n gap: \"4px\",\n overflow: \"hidden\",\n });\n if (\n model.frame.label?.position === \"top\" &&\n model.frame.label.text !== undefined\n ) {\n input.element.append(\n createLabel(input.element.ownerDocument, model.frame.label.text, tokens),\n );\n }\n\n const updateGrid = (notifyHost = false): void => {\n grid.source = model.rows;\n grid.pinnedBottomSource = model.totalRow === null ? [] : [model.totalRow];\n grid.columns = revoGridColumns(\n model,\n resolveRendererTheme(current.theme),\n headerControls,\n );\n if (notifyHost) {\n current.callbacks?.onPivotViewChange?.(model.frame.widgetId, model.view);\n }\n };\n const renderToolbar = (): void => {\n const previousSearch =\n toolbar.querySelector<HTMLInputElement>(\"input[type=search]\");\n const searchFocused =\n previousSearch !== null &&\n previousSearch.ownerDocument.activeElement === previousSearch;\n const caret = previousSearch?.selectionStart ?? null;\n toolbar.remove();\n toolbar = createPivotToolbar(\n () => current,\n () => model,\n setView,\n resolveRendererTheme(current.theme),\n current.element,\n );\n current.element.insertBefore(toolbar, grid);\n if (searchFocused) {\n const search =\n toolbar.querySelector<HTMLInputElement>(\"input[type=search]\");\n if (search !== null) {\n search.focus();\n if (caret !== null) search.setSelectionRange(caret, caret);\n }\n }\n };\n const setView = (view: PivotViewState): void => {\n model = projectPivotView(model, view);\n updateGrid(true);\n renderToolbar();\n licensed?.updateModel(model);\n };\n const headerControls: PivotHeaderControls = {\n toggleColumnGroup: (key) => {\n const collapsedColumns = new Set(model.view.collapsedColumns);\n if (!collapsedColumns.delete(key)) collapsedColumns.add(key);\n setView({ ...model.view, collapsedColumns });\n },\n openFilter: (prop, anchor) => {\n filterPanel?.close();\n const label =\n model.valueColumns.find((column) => column.key === prop)?.label ?? prop;\n filterPanel = openPivotFilterPanel(\n current.element.ownerDocument,\n resolveRendererTheme(current.theme),\n prop,\n label,\n anchor,\n model.view.filters[prop],\n () => model.view.filters,\n (filters) => {\n setView({ ...model.view, filters });\n },\n () => {\n filterPanel = null;\n },\n );\n },\n };\n\n let toolbar = createPivotToolbar(\n () => current,\n () => model,\n setView,\n tokens,\n input.element,\n );\n try {\n grid = createGrid(input, runtime, model, headerControls);\n input.element.append(grid);\n } catch (error) {\n const normalized =\n error instanceof Error ? error : new Error(\"RevoGrid rendering failed\");\n input.callbacks?.onError?.(normalized);\n clearElement(input.element);\n input.element.append(\n createMessage(\n input.element.ownerDocument,\n normalized.message,\n \"error\",\n tokens,\n ),\n );\n throw normalized;\n }\n try {\n licensed = await enableLicensedCapability(input, grid, model);\n } catch (error) {\n input.callbacks?.onError?.(\n error instanceof Error\n ? error\n : new Error(\"RevoGrid licensed capability failed\"),\n );\n }\n\n const handleFocus = (event: Event): void => {\n if (current.widget === undefined || !(event instanceof CustomEvent)) {\n return;\n }\n const detail = event.detail as RevoGridCellFocusDetail;\n const original = detail.originalEvent;\n if (original === undefined) return;\n if (\n original instanceof KeyboardEvent &&\n original.key !== \"Enter\" &&\n original.key !== \" \"\n ) {\n return;\n }\n const prop = String(detail.prop);\n const column = findColumn(model.columns, prop);\n const meta = detail.model[PIVOT_META_PROP];\n if (column === null || meta === undefined) return;\n const action = pivotCellAction(\n model,\n current.widget,\n meta,\n column,\n detail.value,\n current.callbacks?.onPivotDetail !== undefined,\n );\n if (action?.kind === \"toggle-row-group\") {\n setView({\n ...model.view,\n collapsed: togglePivotGroup(model.view.collapsed, action.key),\n });\n } else if (action?.kind === \"interaction\") {\n current.callbacks?.onInteraction?.(action.interaction, action.context);\n } else if (action?.kind === \"detail\") {\n const request = {\n widgetId: model.frame.widgetId,\n filters: action.filters,\n label: action.label,\n };\n void Promise.resolve()\n .then(() => current.callbacks?.onPivotDetail?.(request))\n .catch((error) => {\n current.callbacks?.onError?.(\n error instanceof Error\n ? error\n : new Error(\"Pivot detail request failed\"),\n );\n });\n }\n };\n\n const handleHeaderClick = (event: Event): void => {\n if (!(event instanceof CustomEvent)) return;\n const detail = event.detail as { prop?: string | number };\n if (detail.prop === undefined) return;\n const prop = String(detail.prop);\n if (findColumn(model.columns, prop) === null) return;\n setView({\n ...model.view,\n sort: nextPivotSort(model.view, model.payload, prop),\n });\n };\n\n grid.addEventListener(\"beforecellfocus\", handleFocus);\n grid.addEventListener(\"headerclick\", handleHeaderClick);\n\n if (model.truncation !== null) {\n const notice = createMessage(\n input.element.ownerDocument,\n model.truncation,\n \"notice\",\n tokens,\n );\n setStyles(notice, { height: \"auto\", flex: \"0 0 auto\" });\n input.element.append(notice);\n }\n if (\n model.frame.label?.position === \"bottom\" &&\n model.frame.label.text !== undefined\n ) {\n input.element.append(\n createLabel(input.element.ownerDocument, model.frame.label.text, tokens),\n );\n }\n\n return {\n update(next) {\n if (next.element !== current.element) {\n throw new Error(\n \"RevoGrid renderers cannot move between elements. Create a new renderer.\",\n );\n }\n current = next;\n model = next.model;\n renderToolbar();\n applyWidgetTheme(\n next.element,\n model.frame,\n resolveRendererTheme(next.theme),\n );\n updateGrid();\n licensed?.updateModel(model);\n },\n resize() {\n grid.dispatchEvent(new Event(\"resize\"));\n licensed?.resize();\n },\n destroy() {\n filterPanel?.close();\n grid.removeEventListener(\"beforecellfocus\", handleFocus);\n grid.removeEventListener(\"headerclick\", handleHeaderClick);\n licensed?.destroy();\n clearElement(current.element);\n },\n };\n}\n","import type {\n NativeWidgetRenderInput,\n WidgetRendererFactory,\n WidgetRendererHandle,\n} from \"@dlh.io/bideux-dashboard-renderer-web\";\nimport { buildPivotRendererModel } from \"@dlh.io/bideux-dashboard-renderers\";\n\nimport { createRevoGridRenderer } from \"./renderer.js\";\nimport type { RevoGridRendererInput, RevoGridRuntime } from \"./types.js\";\n\n/**\n * The pivot renderer as a shell factory.\n *\n * The pivot model can refuse to render, in which case the promise rejects with\n * the reason the model gave and the shell shows it in the widget frame.\n */\nexport function createRevoGridWidgetFactory(\n runtime?: RevoGridRuntime,\n): WidgetRendererFactory {\n const pivotInput = (\n input: NativeWidgetRenderInput,\n ): RevoGridRendererInput => {\n const model = buildPivotRendererModel(\n input.widget,\n input.result ?? {},\n input.context ?? {},\n );\n if (model.status !== \"ready\") {\n throw new Error(model.message);\n }\n return {\n element: input.element,\n model,\n widget: input.widget,\n ...(input.callbacks === undefined ? {} : { callbacks: input.callbacks }),\n ...(input.theme === undefined ? {} : { theme: input.theme }),\n };\n };\n\n return async (input): Promise<WidgetRendererHandle> => {\n const first = pivotInput(input);\n const renderer =\n runtime === undefined\n ? await createRevoGridRenderer(first)\n : await createRevoGridRenderer(first, runtime);\n return {\n update: (next) => {\n renderer.update(pivotInput(next));\n },\n resize: () => renderer.resize(),\n destroy: () => renderer.destroy(),\n };\n };\n}\n"]}