@blazes/data-visualization 0.0.0-stage → 1.0.0-alpha.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 (170) hide show
  1. package/README.md +238 -2
  2. package/dist/.vite/manifest.json +129 -0
  3. package/dist/PivotTableS2Renderer-C-Urwhuv.js +109 -0
  4. package/dist/PivotTableS2Renderer-C-Urwhuv.js.map +1 -0
  5. package/dist/WordCloudRenderer-7tzJz57a.js +96 -0
  6. package/dist/WordCloudRenderer-7tzJz57a.js.map +1 -0
  7. package/dist/core/adapter/index.d.ts +5 -0
  8. package/dist/core/adapter/index.d.ts.map +1 -0
  9. package/dist/core/adapter/standard-adapters.d.ts +211 -0
  10. package/dist/core/adapter/standard-adapters.d.ts.map +1 -0
  11. package/dist/core/adapter/standard-definitions.d.ts +230 -0
  12. package/dist/core/adapter/standard-definitions.d.ts.map +1 -0
  13. package/dist/core/adapter/types.d.ts +44 -0
  14. package/dist/core/adapter/types.d.ts.map +1 -0
  15. package/dist/core/adapter/view-models.d.ts +101 -0
  16. package/dist/core/adapter/view-models.d.ts.map +1 -0
  17. package/dist/core/config/config-validator.d.ts +27 -0
  18. package/dist/core/config/config-validator.d.ts.map +1 -0
  19. package/dist/core/config/dashboard-config-schema.d.ts +1360 -0
  20. package/dist/core/config/dashboard-config-schema.d.ts.map +1 -0
  21. package/dist/core/config/dashboard-config.d.ts +410 -0
  22. package/dist/core/config/dashboard-config.d.ts.map +1 -0
  23. package/dist/core/config/index.d.ts +9 -0
  24. package/dist/core/config/index.d.ts.map +1 -0
  25. package/dist/core/config/json-value.d.ts +5 -0
  26. package/dist/core/config/json-value.d.ts.map +1 -0
  27. package/dist/core/config/runtime-schema.d.ts +28 -0
  28. package/dist/core/config/runtime-schema.d.ts.map +1 -0
  29. package/dist/core/config/schema-version.d.ts +3 -0
  30. package/dist/core/config/schema-version.d.ts.map +1 -0
  31. package/dist/core/config/serializable.d.ts +6 -0
  32. package/dist/core/config/serializable.d.ts.map +1 -0
  33. package/dist/core/config/value-path.d.ts +2 -0
  34. package/dist/core/config/value-path.d.ts.map +1 -0
  35. package/dist/core/dataset/dataset-runner.d.ts +28 -0
  36. package/dist/core/dataset/dataset-runner.d.ts.map +1 -0
  37. package/dist/core/dataset/index.d.ts +4 -0
  38. package/dist/core/dataset/index.d.ts.map +1 -0
  39. package/dist/core/dataset/normalize.d.ts +8 -0
  40. package/dist/core/dataset/normalize.d.ts.map +1 -0
  41. package/dist/core/dataset/types.d.ts +37 -0
  42. package/dist/core/dataset/types.d.ts.map +1 -0
  43. package/dist/core/export/csv.d.ts +11 -0
  44. package/dist/core/export/csv.d.ts.map +1 -0
  45. package/dist/core/export/index.d.ts +2 -0
  46. package/dist/core/export/index.d.ts.map +1 -0
  47. package/dist/core/formatter/index.d.ts +2 -0
  48. package/dist/core/formatter/index.d.ts.map +1 -0
  49. package/dist/core/formatter/value-formatter.d.ts +14 -0
  50. package/dist/core/formatter/value-formatter.d.ts.map +1 -0
  51. package/dist/core/index.d.ts +11 -0
  52. package/dist/core/index.d.ts.map +1 -0
  53. package/dist/core/index.js +111 -0
  54. package/dist/core/index.js.map +1 -0
  55. package/dist/core/provider/data-provider.d.ts +18 -0
  56. package/dist/core/provider/data-provider.d.ts.map +1 -0
  57. package/dist/core/provider/index.d.ts +5 -0
  58. package/dist/core/provider/index.d.ts.map +1 -0
  59. package/dist/core/provider/request-executor.d.ts +48 -0
  60. package/dist/core/provider/request-executor.d.ts.map +1 -0
  61. package/dist/core/provider/request-value-codec.d.ts +15 -0
  62. package/dist/core/provider/request-value-codec.d.ts.map +1 -0
  63. package/dist/core/provider/resolve-request-input.d.ts +12 -0
  64. package/dist/core/provider/resolve-request-input.d.ts.map +1 -0
  65. package/dist/core/registry/core-registries.d.ts +15 -0
  66. package/dist/core/registry/core-registries.d.ts.map +1 -0
  67. package/dist/core/registry/index.d.ts +4 -0
  68. package/dist/core/registry/index.d.ts.map +1 -0
  69. package/dist/core/registry/plugin-registry.d.ts +28 -0
  70. package/dist/core/registry/plugin-registry.d.ts.map +1 -0
  71. package/dist/core/registry/register-standard.d.ts +4 -0
  72. package/dist/core/registry/register-standard.d.ts.map +1 -0
  73. package/dist/core/runtime/dashboard-data-runtime.d.ts +26 -0
  74. package/dist/core/runtime/dashboard-data-runtime.d.ts.map +1 -0
  75. package/dist/core/runtime/dashboard-runtime.d.ts +458 -0
  76. package/dist/core/runtime/dashboard-runtime.d.ts.map +1 -0
  77. package/dist/core/runtime/dependency-graph.d.ts +11 -0
  78. package/dist/core/runtime/dependency-graph.d.ts.map +1 -0
  79. package/dist/core/runtime/index.d.ts +5 -0
  80. package/dist/core/runtime/index.d.ts.map +1 -0
  81. package/dist/core/runtime/types.d.ts +47 -0
  82. package/dist/core/runtime/types.d.ts.map +1 -0
  83. package/dist/core/telemetry/index.d.ts +2 -0
  84. package/dist/core/telemetry/index.d.ts.map +1 -0
  85. package/dist/core/telemetry/telemetry.d.ts +15 -0
  86. package/dist/core/telemetry/telemetry.d.ts.map +1 -0
  87. package/dist/core/variable/dashboard-context.d.ts +22 -0
  88. package/dist/core/variable/dashboard-context.d.ts.map +1 -0
  89. package/dist/core/variable/index.d.ts +3 -0
  90. package/dist/core/variable/index.d.ts.map +1 -0
  91. package/dist/core/variable/url-state.d.ts +17 -0
  92. package/dist/core/variable/url-state.d.ts.map +1 -0
  93. package/dist/csv-Dyrr2yMA.js +254 -0
  94. package/dist/csv-Dyrr2yMA.js.map +1 -0
  95. package/dist/dashboard-runtime-8a-9P8Ku.js +1540 -0
  96. package/dist/dashboard-runtime-8a-9P8Ku.js.map +1 -0
  97. package/dist/experimental/s2/PivotTableS2Renderer.vue.d.ts +18 -0
  98. package/dist/experimental/s2/PivotTableS2Renderer.vue.d.ts.map +1 -0
  99. package/dist/experimental/s2/index.d.ts +13 -0
  100. package/dist/experimental/s2/index.d.ts.map +1 -0
  101. package/dist/experimental/s2/index.js +66 -0
  102. package/dist/experimental/s2/index.js.map +1 -0
  103. package/dist/experimental/s2/pivot-table-s2.d.ts +23 -0
  104. package/dist/experimental/s2/pivot-table-s2.d.ts.map +1 -0
  105. package/dist/index.css +1 -0
  106. package/dist/index.d.ts +2 -0
  107. package/dist/index.d.ts.map +1 -0
  108. package/dist/index.js +111 -0
  109. package/dist/index.js.map +1 -0
  110. package/dist/renderers/word-cloud/WordCloudRenderer.vue.d.ts +20 -0
  111. package/dist/renderers/word-cloud/WordCloudRenderer.vue.d.ts.map +1 -0
  112. package/dist/renderers/word-cloud/index.d.ts +8 -0
  113. package/dist/renderers/word-cloud/index.d.ts.map +1 -0
  114. package/dist/renderers/word-cloud/index.js +17 -0
  115. package/dist/renderers/word-cloud/index.js.map +1 -0
  116. package/dist/runtime-schema-BO2qLlvE.js +580 -0
  117. package/dist/runtime-schema-BO2qLlvE.js.map +1 -0
  118. package/dist/serializable-DOOpLZyk.js +36 -0
  119. package/dist/serializable-DOOpLZyk.js.map +1 -0
  120. package/dist/standard-definitions-DHtaLAf1.js +351 -0
  121. package/dist/standard-definitions-DHtaLAf1.js.map +1 -0
  122. package/dist/value-formatter-D5QmLSMG.js +47 -0
  123. package/dist/value-formatter-D5QmLSMG.js.map +1 -0
  124. package/dist/visual-theme-DH-k3L51.js +23 -0
  125. package/dist/visual-theme-DH-k3L51.js.map +1 -0
  126. package/dist/vue/components/DashboardFilterBar.vue.d.ts +23 -0
  127. package/dist/vue/components/DashboardFilterBar.vue.d.ts.map +1 -0
  128. package/dist/vue/components/DashboardPanel.vue.d.ts +39 -0
  129. package/dist/vue/components/DashboardPanel.vue.d.ts.map +1 -0
  130. package/dist/vue/components/DashboardRenderer.vue.d.ts +57 -0
  131. package/dist/vue/components/DashboardRenderer.vue.d.ts.map +1 -0
  132. package/dist/vue/components/index.d.ts +4 -0
  133. package/dist/vue/components/index.d.ts.map +1 -0
  134. package/dist/vue/composables/index.d.ts +2 -0
  135. package/dist/vue/composables/index.d.ts.map +1 -0
  136. package/dist/vue/composables/use-dashboard-runtime.d.ts +17 -0
  137. package/dist/vue/composables/use-dashboard-runtime.d.ts.map +1 -0
  138. package/dist/vue/export/browser-download.d.ts +3 -0
  139. package/dist/vue/export/browser-download.d.ts.map +1 -0
  140. package/dist/vue/export/index.d.ts +2 -0
  141. package/dist/vue/export/index.d.ts.map +1 -0
  142. package/dist/vue/index.d.ts +7 -0
  143. package/dist/vue/index.d.ts.map +1 -0
  144. package/dist/vue/index.js +1064 -0
  145. package/dist/vue/index.js.map +1 -0
  146. package/dist/vue/registry/index.d.ts +3 -0
  147. package/dist/vue/registry/index.d.ts.map +1 -0
  148. package/dist/vue/registry/register-standard.d.ts +3 -0
  149. package/dist/vue/registry/register-standard.d.ts.map +1 -0
  150. package/dist/vue/registry/renderer-registry.d.ts +12 -0
  151. package/dist/vue/registry/renderer-registry.d.ts.map +1 -0
  152. package/dist/vue/renderers/BarRenderer.vue.d.ts +24 -0
  153. package/dist/vue/renderers/BarRenderer.vue.d.ts.map +1 -0
  154. package/dist/vue/renderers/LineRenderer.vue.d.ts +24 -0
  155. package/dist/vue/renderers/LineRenderer.vue.d.ts.map +1 -0
  156. package/dist/vue/renderers/MetricRenderer.vue.d.ts +17 -0
  157. package/dist/vue/renderers/MetricRenderer.vue.d.ts.map +1 -0
  158. package/dist/vue/renderers/PieRenderer.vue.d.ts +24 -0
  159. package/dist/vue/renderers/PieRenderer.vue.d.ts.map +1 -0
  160. package/dist/vue/renderers/TableRenderer.vue.d.ts +21 -0
  161. package/dist/vue/renderers/TableRenderer.vue.d.ts.map +1 -0
  162. package/dist/vue/renderers/chart-format.d.ts +8 -0
  163. package/dist/vue/renderers/chart-format.d.ts.map +1 -0
  164. package/dist/vue/renderers/index.d.ts +7 -0
  165. package/dist/vue/renderers/index.d.ts.map +1 -0
  166. package/dist/vue/theme/index.d.ts +2 -0
  167. package/dist/vue/theme/index.d.ts.map +1 -0
  168. package/dist/vue/theme/visual-theme.d.ts +46 -0
  169. package/dist/vue/theme/visual-theme.d.ts.map +1 -0
  170. package/package.json +129 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-runtime-8a-9P8Ku.js","sources":["../src/core/config/dashboard-config.ts","../src/core/config/config-validator.ts","../src/core/config/value-path.ts","../src/core/provider/resolve-request-input.ts","../src/core/provider/request-executor.ts","../src/core/registry/core-registries.ts","../src/core/registry/register-standard.ts","../src/core/provider/request-value-codec.ts","../src/core/dataset/normalize.ts","../src/core/dataset/types.ts","../src/core/dataset/dataset-runner.ts","../src/core/runtime/dashboard-data-runtime.ts","../src/core/runtime/dependency-graph.ts","../src/core/runtime/dashboard-runtime.ts"],"sourcesContent":["import { DashboardConfigSchema, JsonValueSchema, type DashboardConfig } from \"./dashboard-config-schema\";\nimport { createTypeBoxRuntimeSchema, RuntimeSchemaValidationError } from \"./runtime-schema\";\nimport { isJsonValue } from \"./serializable\";\n\nexport const dashboardConfigRuntimeSchema = createTypeBoxRuntimeSchema(DashboardConfigSchema, [JsonValueSchema]);\n\nexport function parseDashboardConfig(value: unknown): DashboardConfig {\n if (!isJsonValue(value)) {\n throw new RuntimeSchemaValidationError([\n {\n path: \"/\",\n keyword: \"jsonSerializable\",\n message: \"must contain only finite JSON values and must not contain cycles or class instances\",\n params: {}\n }\n ]);\n }\n return dashboardConfigRuntimeSchema.assert(value);\n}\n","import type { VisualizationRendererDefinition } from \"../adapter\";\nimport type { CoreRegistries } from \"../registry\";\nimport type { VisualizationTelemetrySink } from \"../telemetry\";\nimport { emitTelemetry } from \"../telemetry\";\nimport { dashboardConfigRuntimeSchema } from \"./dashboard-config\";\nimport type { DashboardConfig, DatasetFieldConfig, PanelBinding, PanelConfig } from \"./dashboard-config-schema\";\nimport { isJsonValue, stableSerializeJson } from \"./serializable\";\n\nexport interface ConfigDiagnostic {\n level: \"error\";\n code: string;\n message: string;\n path: string;\n}\n\nexport type DashboardConfigValidationResult =\n | { valid: true; config: DashboardConfig; diagnostics: readonly [] }\n | { valid: false; diagnostics: ReadonlyArray<ConfigDiagnostic> };\n\nexport interface ValidateDashboardConfigOptions {\n telemetry?: VisualizationTelemetrySink;\n}\n\nexport class DashboardConfigValidationError extends Error {\n readonly diagnostics: ReadonlyArray<ConfigDiagnostic>;\n\n constructor(diagnostics: ReadonlyArray<ConfigDiagnostic>) {\n super(diagnostics.map((diagnostic) => `${diagnostic.path}: ${diagnostic.message}`).join(\"\\n\"));\n this.name = \"DashboardConfigValidationError\";\n this.diagnostics = diagnostics;\n }\n}\n\nfunction findDuplicates(values: ReadonlyArray<string>): string[] {\n const seen = new Set<string>();\n const duplicates = new Set<string>();\n values.forEach((value) => (seen.has(value) ? duplicates.add(value) : seen.add(value)));\n return Array.from(duplicates);\n}\n\nfunction bindingFields(binding: PanelBinding): string[] {\n switch (binding.type) {\n case \"metric\":\n return [binding.valueField, binding.compareField].filter((field): field is string => Boolean(field));\n case \"line\":\n return [binding.xField, ...binding.yFields, binding.seriesField].filter((field): field is string =>\n Boolean(field)\n );\n case \"bar\":\n return [binding.categoryField, ...binding.valueFields, binding.seriesField].filter((field): field is string =>\n Boolean(field)\n );\n case \"pie\":\n return [binding.nameField, binding.valueField];\n case \"table\":\n return binding.columns;\n case \"wordCloud\":\n return [...binding.labelFields, binding.valueField, binding.semanticField].filter((field): field is string =>\n Boolean(field)\n );\n case \"pivotTableS2\":\n return [...binding.rowFields, ...binding.columnFields, ...binding.valueFields];\n }\n}\n\nfunction addFieldSemanticDiagnostic(\n diagnostics: ConfigDiagnostic[],\n panelIndex: number,\n field: DatasetFieldConfig | undefined,\n fieldId: string,\n expectation: string,\n predicate: (field: DatasetFieldConfig) => boolean\n): void {\n if (!field || predicate(field)) return;\n diagnostics.push({\n level: \"error\",\n code: \"panel_field_semantics_invalid\",\n message: `Field ${fieldId} must be ${expectation}; received ${field.role}/${field.dataType}.`,\n path: `/panels/${panelIndex}/binding`\n });\n}\n\nfunction addBindingSemanticDiagnostics(\n diagnostics: ConfigDiagnostic[],\n panel: PanelConfig,\n panelIndex: number,\n fieldsById: ReadonlyMap<string, DatasetFieldConfig>\n): void {\n const metricNumber = (field: DatasetFieldConfig) => field.role === \"metric\" && field.dataType === \"number\";\n const category = (field: DatasetFieldConfig) => field.role === \"dimension\" || field.role === \"time\";\n const dimension = (field: DatasetFieldConfig) => field.role === \"dimension\";\n const check = (fieldId: string, expectation: string, predicate: (field: DatasetFieldConfig) => boolean) =>\n addFieldSemanticDiagnostic(diagnostics, panelIndex, fieldsById.get(fieldId), fieldId, expectation, predicate);\n\n switch (panel.binding.type) {\n case \"metric\":\n check(panel.binding.valueField, \"a numeric metric\", metricNumber);\n if (panel.binding.compareField) check(panel.binding.compareField, \"a numeric metric\", metricNumber);\n break;\n case \"line\":\n check(panel.binding.xField, \"a dimension or time field\", category);\n panel.binding.yFields.forEach((fieldId) => check(fieldId, \"a numeric metric\", metricNumber));\n if (panel.binding.seriesField) {\n check(panel.binding.seriesField, \"a dimension field\", dimension);\n if (panel.binding.yFields.length !== 1) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_series_value_arity_invalid\",\n message: \"Line binding with seriesField must contain exactly one yField.\",\n path: `/panels/${panelIndex}/binding/yFields`\n });\n }\n }\n const axisKeys = new Set(\n panel.binding.yFields.flatMap((fieldId) => {\n const field = fieldsById.get(fieldId);\n if (!field) return [];\n const format = panel.enhancement?.common?.formatOverrides?.[fieldId] ?? field.format ?? { type: \"number\" };\n return [stableSerializeJson({ format, unit: field.unit ?? null })];\n })\n );\n if (axisKeys.size > 2) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_line_axis_count_invalid\",\n message: \"Line binding supports at most two distinct format and unit axis groups.\",\n path: `/panels/${panelIndex}/binding/yFields`\n });\n }\n break;\n case \"bar\":\n check(panel.binding.categoryField, \"a dimension or time field\", category);\n panel.binding.valueFields.forEach((fieldId) => check(fieldId, \"a numeric metric\", metricNumber));\n if (panel.binding.seriesField) {\n check(panel.binding.seriesField, \"a dimension field\", dimension);\n if (panel.binding.valueFields.length !== 1) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_series_value_arity_invalid\",\n message: \"Bar binding with seriesField must contain exactly one valueField.\",\n path: `/panels/${panelIndex}/binding/valueFields`\n });\n }\n }\n break;\n case \"pie\":\n check(panel.binding.nameField, \"a dimension or time field\", category);\n check(panel.binding.valueField, \"a numeric metric\", metricNumber);\n break;\n case \"wordCloud\":\n panel.binding.labelFields.forEach((fieldId) => check(fieldId, \"a dimension field\", dimension));\n check(panel.binding.valueField, \"a numeric metric\", metricNumber);\n if (panel.binding.semanticField) check(panel.binding.semanticField, \"a dimension field\", dimension);\n break;\n case \"pivotTableS2\": {\n panel.binding.rowFields.forEach((fieldId) => check(fieldId, \"a dimension or time field\", category));\n panel.binding.columnFields.forEach((fieldId) => check(fieldId, \"a dimension or time field\", category));\n panel.binding.valueFields.forEach((fieldId) => check(fieldId, \"a numeric metric\", metricNumber));\n const rowFields = new Set(panel.binding.rowFields);\n const duplicateDimension = panel.binding.columnFields.find((fieldId) => rowFields.has(fieldId));\n if (duplicateDimension) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_pivot_dimension_duplicate\",\n message: `Pivot table field ${duplicateDimension} cannot be used as both a row and column dimension.`,\n path: `/panels/${panelIndex}/binding`\n });\n }\n break;\n }\n case \"table\": {\n const columnDisplays = panel.enhancement?.type === \"table\" ? panel.enhancement.table?.columnDisplays : undefined;\n Object.entries(columnDisplays ?? {}).forEach(([fieldId, display]) => {\n if (display.type === \"progress\" || display.type === \"trend\") {\n check(fieldId, `a numeric field for ${display.type} display`, (field) => field.dataType === \"number\");\n }\n });\n break;\n }\n }\n}\n\nfunction addPluginSchemaDiagnostics(\n diagnostics: ConfigDiagnostic[],\n definition: VisualizationRendererDefinition,\n panel: DashboardConfig[\"panels\"][number],\n panelIndex: number\n): void {\n const bindingResult = definition.bindingSchema.validate(panel.binding);\n if (!bindingResult.success) {\n bindingResult.issues.forEach((issue) =>\n diagnostics.push({\n level: \"error\",\n code: \"panel_binding_schema_invalid\",\n message: issue.message,\n path: `/panels/${panelIndex}/binding${issue.path === \"/\" ? \"\" : issue.path}`\n })\n );\n }\n if (panel.enhancement) {\n const enhancementResult = definition.enhancementSchema.validate(panel.enhancement);\n if (!enhancementResult.success) {\n enhancementResult.issues.forEach((issue) =>\n diagnostics.push({\n level: \"error\",\n code: \"panel_enhancement_schema_invalid\",\n message: issue.message,\n path: `/panels/${panelIndex}/enhancement${issue.path === \"/\" ? \"\" : issue.path}`\n })\n );\n }\n }\n}\n\nexport function validateDashboardConfig(\n value: unknown,\n registries: CoreRegistries,\n options: ValidateDashboardConfigOptions = {}\n): DashboardConfigValidationResult {\n if (!isJsonValue(value)) {\n return {\n valid: false,\n diagnostics: [\n {\n level: \"error\",\n code: \"config_not_serializable\",\n message:\n \"DashboardConfig must contain only finite JSON values and must not contain cycles or class instances.\",\n path: \"/\"\n }\n ]\n };\n }\n\n const structureResult = dashboardConfigRuntimeSchema.validate(value);\n if (!structureResult.success) {\n return {\n valid: false,\n diagnostics: structureResult.issues.map((issue) => ({\n level: \"error\",\n code: \"config_schema_invalid\",\n message: issue.message,\n path: issue.path\n }))\n };\n }\n\n const config = structureResult.value;\n const diagnostics: ConfigDiagnostic[] = [];\n const variables = config.variables ?? [];\n const variableIds = new Set(variables.map((variable) => variable.id));\n const requestIds = new Set(config.requests.map((request) => request.id));\n const datasetsById = new Map(config.datasets.map((dataset) => [dataset.id, dataset]));\n\n const idGroups = [\n [\"variable_id_duplicate\", \"/variables\", variables.map((item) => item.id)],\n [\"filter_control_id_duplicate\", \"/filterBar/controls\", (config.filterBar?.controls ?? []).map((item) => item.id)],\n [\"request_id_duplicate\", \"/requests\", config.requests.map((item) => item.id)],\n [\"dataset_id_duplicate\", \"/datasets\", config.datasets.map((item) => item.id)],\n [\"panel_id_duplicate\", \"/panels\", config.panels.map((item) => item.id)]\n ] as const;\n idGroups.forEach(([code, path, ids]) =>\n findDuplicates(ids).forEach((id) =>\n diagnostics.push({ level: \"error\", code, message: `Duplicate ID: ${id}`, path })\n )\n );\n\n findDuplicates(variables.flatMap((variable) => (variable.urlKey ? [variable.urlKey] : []))).forEach((urlKey) =>\n diagnostics.push({\n level: \"error\",\n code: \"variable_url_key_duplicate\",\n message: `Duplicate variable URL key: ${urlKey}`,\n path: \"/variables\"\n })\n );\n\n (config.filterBar?.controls ?? []).forEach((control, index) => {\n const ids = control.type === \"date-range\" ? [control.startVariableId, control.endVariableId] : [control.variableId];\n ids.forEach((variableId) => {\n if (!variableIds.has(variableId)) {\n diagnostics.push({\n level: \"error\",\n code: \"filter_variable_not_found\",\n message: `Filter control ${control.id} references missing variable: ${variableId}`,\n path: `/filterBar/controls/${index}`\n });\n }\n });\n if (control.type === \"date-range\") {\n findDuplicates((control.presets ?? []).map((preset) => preset.id)).forEach((presetId) =>\n diagnostics.push({\n level: \"error\",\n code: \"filter_preset_id_duplicate\",\n message: `Duplicate preset ID in filter ${control.id}: ${presetId}`,\n path: `/filterBar/controls/${index}/presets`\n })\n );\n } else {\n const optionValues = control.options.map((option) => stableSerializeJson(option.value));\n findDuplicates(optionValues).forEach((optionValue) =>\n diagnostics.push({\n level: \"error\",\n code: \"filter_option_value_duplicate\",\n message: `Duplicate option value in filter ${control.id}: ${optionValue}`,\n path: `/filterBar/controls/${index}/options`\n })\n );\n }\n });\n\n config.requests.forEach((request, requestIndex) => {\n const provider = registries.providers.get(request.providerId);\n if (!provider) {\n diagnostics.push({\n level: \"error\",\n code: \"request_provider_not_found\",\n message: `Provider is not registered: ${request.providerId}`,\n path: `/requests/${requestIndex}/providerId`\n });\n } else if (!provider.operations[request.operationId]) {\n diagnostics.push({\n level: \"error\",\n code: \"request_operation_not_found\",\n message: `Provider operation is not registered: ${request.providerId}/${request.operationId}`,\n path: `/requests/${requestIndex}/operationId`\n });\n }\n\n Object.entries(request.input ?? {}).forEach(([inputName, binding]) => {\n if (binding.source !== \"variable\") return;\n if (!variableIds.has(binding.variableId)) {\n diagnostics.push({\n level: \"error\",\n code: \"request_variable_not_found\",\n message: `Request input references missing variable: ${binding.variableId}`,\n path: `/requests/${requestIndex}/input/${inputName}/variableId`\n });\n }\n if (binding.codecId && !registries.requestValueCodecs.has(binding.codecId)) {\n diagnostics.push({\n level: \"error\",\n code: \"request_codec_not_found\",\n message: `Request value codec is not registered: ${binding.codecId}`,\n path: `/requests/${requestIndex}/input/${inputName}/codecId`\n });\n }\n });\n });\n\n config.datasets.forEach((dataset, datasetIndex) => {\n findDuplicates(dataset.fields.map((field) => field.key)).forEach((fieldKey) =>\n diagnostics.push({\n level: \"error\",\n code: \"dataset_field_key_duplicate\",\n message: `Duplicate field key in dataset ${dataset.id}: ${fieldKey}`,\n path: `/datasets/${datasetIndex}/fields`\n })\n );\n const inputReferences =\n dataset.input.type === \"single\" ? ([[\"default\", dataset.input]] as const) : Object.entries(dataset.input.inputs);\n inputReferences.forEach(([inputName, input]) => {\n if (!requestIds.has(input.requestId)) {\n diagnostics.push({\n level: \"error\",\n code: \"dataset_request_not_found\",\n message: `Dataset input references missing request: ${input.requestId}`,\n path: `/datasets/${datasetIndex}/input/${inputName}`\n });\n }\n });\n if (dataset.input.type === \"multiple\" && !dataset.transformerId) {\n diagnostics.push({\n level: \"error\",\n code: \"dataset_transformer_required\",\n message: `Dataset ${dataset.id} has multiple inputs and requires a transformer.`,\n path: `/datasets/${datasetIndex}/transformerId`\n });\n }\n if (dataset.transformerId && !registries.transformers.has(dataset.transformerId)) {\n diagnostics.push({\n level: \"error\",\n code: \"dataset_transformer_not_found\",\n message: `Dataset transformer is not registered: ${dataset.transformerId}`,\n path: `/datasets/${datasetIndex}/transformerId`\n });\n }\n dataset.fields.forEach((field, fieldIndex) => {\n const expectedType =\n field.coerce === \"number-string\"\n ? \"number\"\n : field.coerce === \"boolean-string\"\n ? \"boolean\"\n : field.coerce === \"iso-date\"\n ? \"date-or-datetime\"\n : undefined;\n if (\n expectedType &&\n (expectedType === \"date-or-datetime\"\n ? field.dataType !== \"date\" && field.dataType !== \"datetime\"\n : field.dataType !== expectedType)\n ) {\n diagnostics.push({\n level: \"error\",\n code: \"dataset_coercion_type_mismatch\",\n message: `Coercion ${field.coerce} is not compatible with data type ${field.dataType}.`,\n path: `/datasets/${datasetIndex}/fields/${fieldIndex}/coerce`\n });\n }\n });\n });\n\n config.panels.forEach((panel, panelIndex) => {\n const dataset = datasetsById.get(panel.binding.datasetId);\n if (!dataset) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_dataset_not_found\",\n message: `Panel references missing dataset: ${panel.binding.datasetId}`,\n path: `/panels/${panelIndex}/binding/datasetId`\n });\n } else {\n const fieldsById = new Map(dataset.fields.map((field) => [field.key, field]));\n const fieldIds = new Set(fieldsById.keys());\n bindingFields(panel.binding).forEach((fieldId) => {\n if (!fieldIds.has(fieldId)) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_field_not_found\",\n message: `Panel binding references missing field ${fieldId} in dataset ${dataset.id}.`,\n path: `/panels/${panelIndex}/binding`\n });\n }\n });\n Object.keys(panel.enhancement?.common?.formatOverrides ?? {}).forEach((fieldId) => {\n if (!fieldIds.has(fieldId)) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_format_field_not_found\",\n message: `Panel format override references missing field ${fieldId} in dataset ${dataset.id}.`,\n path: `/panels/${panelIndex}/enhancement/common/formatOverrides/${fieldId}`\n });\n }\n });\n addBindingSemanticDiagnostics(diagnostics, panel, panelIndex, fieldsById);\n if (panel.enhancement?.type === \"table\") {\n const configuredFields = new Set([\n ...(panel.enhancement.table?.sortableFields ?? []),\n ...(panel.enhancement.table?.filterableFields ?? []),\n ...Object.keys(panel.enhancement.table?.columnWidths ?? {}),\n ...Object.keys(panel.enhancement.table?.columnDisplays ?? {})\n ]);\n configuredFields.forEach((fieldId) => {\n if (!panel.binding.type || panel.binding.type !== \"table\" || !panel.binding.columns.includes(fieldId)) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_table_enhancement_field_invalid\",\n message: `Table enhancement field ${fieldId} must be included in the table columns.`,\n path: `/panels/${panelIndex}/enhancement/table`\n });\n }\n });\n }\n if (panel.enhancement?.type === \"wordCloud\") {\n const minFontSize = panel.enhancement.wordCloud?.minFontSize;\n const maxFontSize = panel.enhancement.wordCloud?.maxFontSize;\n if (minFontSize !== undefined && maxFontSize !== undefined && minFontSize > maxFontSize) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_word_cloud_font_range_invalid\",\n message: \"Word cloud minFontSize cannot be greater than maxFontSize.\",\n path: `/panels/${panelIndex}/enhancement/wordCloud`\n });\n }\n }\n }\n\n if (panel.enhancement && panel.enhancement.type !== panel.binding.type) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_enhancement_type_mismatch\",\n message: `Panel enhancement type ${panel.enhancement.type} does not match binding type ${panel.binding.type}.`,\n path: `/panels/${panelIndex}/enhancement/type`\n });\n }\n\n const definition = registries.rendererDefinitions.get(panel.rendererId);\n if (!definition) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_renderer_not_found\",\n message: `Renderer definition is not registered: ${panel.rendererId}`,\n path: `/panels/${panelIndex}/rendererId`\n });\n } else {\n addPluginSchemaDiagnostics(diagnostics, definition, panel, panelIndex);\n const adapterId = panel.adapterId ?? definition.defaultAdapterId;\n if (!registries.adapters.has(adapterId)) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_adapter_not_found\",\n message: `Visualization adapter is not registered: ${adapterId}`,\n path: `/panels/${panelIndex}/adapterId`\n });\n }\n }\n\n (panel.enhancement?.common?.presetIds ?? []).forEach((presetId) => {\n const preset = registries.presets.get(presetId);\n if (!preset) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_preset_not_found\",\n message: `Visualization preset is not registered: ${presetId}`,\n path: `/panels/${panelIndex}/enhancement/common/presetIds`\n });\n } else if (preset.rendererId && preset.rendererId !== panel.rendererId) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_preset_renderer_mismatch\",\n message: `Preset ${presetId} belongs to renderer ${preset.rendererId}, not ${panel.rendererId}.`,\n path: `/panels/${panelIndex}/enhancement/common/presetIds`\n });\n }\n });\n (panel.enhancement?.common?.interactions ?? []).forEach((interaction) => {\n if (!registries.actions.has(interaction.actionId)) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_action_not_found\",\n message: `Visualization action is not registered: ${interaction.actionId}`,\n path: `/panels/${panelIndex}/enhancement/common/interactions`\n });\n }\n });\n findDuplicates((panel.actions ?? []).map((action) => action.id)).forEach((actionId) =>\n diagnostics.push({\n level: \"error\",\n code: \"panel_action_id_duplicate\",\n message: `Duplicate panel action ID: ${actionId}`,\n path: `/panels/${panelIndex}/actions`\n })\n );\n (panel.actions ?? []).forEach((action, actionIndex) => {\n if (!registries.actions.has(action.actionId)) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_action_not_found\",\n message: `Visualization action is not registered: ${action.actionId}`,\n path: `/panels/${panelIndex}/actions/${actionIndex}/actionId`\n });\n }\n });\n });\n\n emitTelemetry(options.telemetry, {\n name: \"config_validated\",\n dashboardId: config.id,\n ...(diagnostics.length ? { errorCode: \"config_reference_invalid\" } : {})\n });\n\n return diagnostics.length\n ? { valid: false, diagnostics: Object.freeze(diagnostics) }\n : { valid: true, config, diagnostics: [] };\n}\n\nexport function assertDashboardConfig(\n value: unknown,\n registries: CoreRegistries,\n options: ValidateDashboardConfigOptions = {}\n): DashboardConfig {\n const result = validateDashboardConfig(value, registries, options);\n if (!result.valid) {\n throw new DashboardConfigValidationError(result.diagnostics);\n }\n return result.config;\n}\n","const blockedPathSegments = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\n\nexport function readValueAtPath(source: unknown, path?: string): unknown {\n if (!path) {\n return source;\n }\n\n return path.split(\".\").reduce<unknown>((current, segment) => {\n if (!segment || blockedPathSegments.has(segment) || current === null || typeof current !== \"object\") {\n return undefined;\n }\n\n return (current as Record<string, unknown>)[segment];\n }, source);\n}\n","import {\n cloneJsonValue,\n type DashboardConfig,\n isJsonValue,\n readValueAtPath,\n type DataRequestConfig,\n type JsonValue\n} from \"../config\";\nimport type { ReadonlyRegistry } from \"../registry\";\nimport { readDashboardVariable, type DashboardContext } from \"../variable\";\nimport type { RequestValueCodec } from \"./request-value-codec\";\n\nexport class RequestInputError extends Error {\n readonly code: \"request_input_missing\" | \"request_input_not_serializable\";\n readonly requestId: string;\n readonly inputName: string;\n\n constructor(code: RequestInputError[\"code\"], requestId: string, inputName: string, message: string) {\n super(message);\n this.name = \"RequestInputError\";\n this.code = code;\n this.requestId = requestId;\n this.inputName = inputName;\n }\n}\n\nfunction isEmptyValue(value: JsonValue): boolean {\n return value === null || value === \"\" || (Array.isArray(value) && value.length === 0);\n}\n\nexport function resolveDataRequestInput(\n request: DataRequestConfig,\n config: DashboardConfig,\n context: DashboardContext,\n codecs: ReadonlyRegistry<RequestValueCodec>\n): Readonly<Record<string, JsonValue>> {\n const result: Record<string, JsonValue> = {};\n\n for (const [inputName, binding] of Object.entries(request.input ?? {})) {\n if (binding.source === \"constant\") {\n result[inputName] = cloneJsonValue(binding.value);\n continue;\n }\n\n let value: unknown = readDashboardVariable(config, context, binding.variableId);\n value = readValueAtPath(value, binding.select);\n\n if (value === undefined) {\n if (binding.omitWhenEmpty) continue;\n throw new RequestInputError(\n \"request_input_missing\",\n request.id,\n inputName,\n `DataRequest ${request.id} input ${inputName} resolved to undefined.`\n );\n }\n if (!isJsonValue(value)) {\n throw new RequestInputError(\n \"request_input_not_serializable\",\n request.id,\n inputName,\n `DataRequest ${request.id} input ${inputName} is not JSON serializable.`\n );\n }\n if (binding.omitWhenEmpty && isEmptyValue(value)) {\n continue;\n }\n\n const encoded = binding.codecId ? codecs.require(binding.codecId).encode(value, context) : value;\n if (encoded === undefined) {\n if (binding.omitWhenEmpty) continue;\n throw new RequestInputError(\n \"request_input_missing\",\n request.id,\n inputName,\n `DataRequest ${request.id} input ${inputName} was omitted by codec ${binding.codecId}.`\n );\n }\n result[inputName] = cloneJsonValue(encoded);\n }\n\n return Object.freeze(result);\n}\n","import {\n stableSerializeJson,\n type DashboardConfig,\n type DataRequestConfig,\n type JsonValue,\n type RuntimeSchemaIssue\n} from \"../config\";\nimport type { ReadonlyRegistry } from \"../registry\";\nimport { emitTelemetry, type VisualizationTelemetrySink } from \"../telemetry\";\nimport type { DashboardContext } from \"../variable\";\nimport type { DataProvider } from \"./data-provider\";\nimport { resolveDataRequestInput } from \"./resolve-request-input\";\nimport type { RequestValueCodec } from \"./request-value-codec\";\n\ninterface RequestCacheEntry {\n response: unknown;\n version: number;\n updatedAt: string;\n}\n\ninterface InflightRequest {\n controller: AbortController;\n promise: Promise<RequestCacheEntry>;\n}\n\nexport interface RequestExecutionResult extends RequestCacheEntry {\n requestConfigId: string;\n executionId: string;\n cacheKey: string;\n input: Readonly<Record<string, JsonValue>>;\n fromCache: boolean;\n}\n\nexport interface ExecuteRequestOptions {\n signal?: AbortSignal;\n force?: boolean;\n isolated?: boolean;\n}\n\nexport interface RequestExecutorOptions {\n telemetry?: VisualizationTelemetrySink;\n}\n\nexport class ProviderInputValidationError extends Error {\n readonly code = \"provider_input_invalid\";\n readonly providerId: string;\n readonly operationId: string;\n readonly issues: ReadonlyArray<RuntimeSchemaIssue>;\n\n constructor(providerId: string, operationId: string, issues: ReadonlyArray<RuntimeSchemaIssue>) {\n super(`Provider input validation failed: ${providerId}/${operationId}`);\n this.name = \"ProviderInputValidationError\";\n this.providerId = providerId;\n this.operationId = operationId;\n this.issues = issues;\n }\n}\n\nfunction createAbortError(): DOMException {\n return new DOMException(\"The request was aborted.\", \"AbortError\");\n}\n\nfunction isAbortError(error: unknown, signal: AbortSignal): boolean {\n return signal.aborted || (error instanceof DOMException && error.name === \"AbortError\");\n}\n\nexport function createRequestCacheKey(\n request: Pick<DataRequestConfig, \"providerId\" | \"operationId\">,\n input: Readonly<Record<string, JsonValue>>\n): string {\n return `${request.providerId}:${request.operationId}:${stableSerializeJson(input)}`;\n}\n\nexport class RequestExecutor {\n readonly #cache = new Map<string, RequestCacheEntry>();\n readonly #inflight = new Map<string, InflightRequest>();\n readonly #isolatedControllers = new Set<AbortController>();\n readonly #keysByRequestId = new Map<string, Set<string>>();\n #version = 0;\n #executionSequence = 0;\n\n constructor(\n readonly config: DashboardConfig,\n readonly providers: ReadonlyRegistry<DataProvider>,\n readonly codecs: ReadonlyRegistry<RequestValueCodec>,\n readonly options: RequestExecutorOptions = {}\n ) {}\n\n async execute(\n requestConfigId: string,\n context: DashboardContext,\n options: ExecuteRequestOptions = {}\n ): Promise<RequestExecutionResult> {\n const request = this.config.requests.find((candidate) => candidate.id === requestConfigId);\n if (!request) {\n throw new Error(`DataRequest not found: ${requestConfigId}`);\n }\n\n const callerSignal = options.signal;\n if (callerSignal?.aborted) throw createAbortError();\n const input = resolveDataRequestInput(request, this.config, context, this.codecs);\n const cacheKey = createRequestCacheKey(request, input);\n const isolated = options.isolated ?? false;\n if (!isolated) this.trackCacheKey(request.id, cacheKey);\n const executionId = `${request.id}:${++this.#executionSequence}`;\n\n const cached = isolated ? undefined : this.#cache.get(cacheKey);\n if (!options.force && cached) {\n emitTelemetry(this.options.telemetry, {\n name: \"request_cache_hit\",\n dashboardId: context.dashboardId,\n requestId: executionId,\n providerId: request.providerId,\n operationId: request.operationId\n });\n return { ...cached, requestConfigId, executionId, cacheKey, input, fromCache: true };\n }\n\n let existing = isolated ? undefined : this.#inflight.get(cacheKey);\n if (options.force && existing) {\n existing.controller.abort();\n this.#inflight.delete(cacheKey);\n existing = undefined;\n }\n if (existing) {\n const abortExisting = () => existing.controller.abort();\n callerSignal?.addEventListener(\"abort\", abortExisting, { once: true });\n emitTelemetry(this.options.telemetry, {\n name: \"request_cache_hit\",\n dashboardId: context.dashboardId,\n requestId: executionId,\n providerId: request.providerId,\n operationId: request.operationId\n });\n try {\n const entry = await existing.promise;\n return { ...entry, requestConfigId, executionId, cacheKey, input, fromCache: true };\n } finally {\n callerSignal?.removeEventListener(\"abort\", abortExisting);\n }\n }\n\n const provider = this.providers.require(request.providerId);\n const operation = provider.operations[request.operationId];\n if (!operation) {\n throw new Error(`Provider operation not found: ${request.providerId}/${request.operationId}`);\n }\n const inputValidation = operation.inputSchema?.validate(input);\n if (inputValidation && !inputValidation.success) {\n throw new ProviderInputValidationError(request.providerId, request.operationId, inputValidation.issues);\n }\n\n const startedAt = Date.now();\n const controller = new AbortController();\n if (isolated) this.#isolatedControllers.add(controller);\n const abortRequest = () => controller.abort();\n callerSignal?.addEventListener(\"abort\", abortRequest, { once: true });\n emitTelemetry(this.options.telemetry, {\n name: \"request_started\",\n dashboardId: context.dashboardId,\n requestId: executionId,\n providerId: request.providerId,\n operationId: request.operationId\n });\n\n const promise = Promise.resolve()\n .then(() =>\n operation.execute(input, {\n signal: controller.signal,\n requestId: executionId,\n timezone: context.timezone,\n locale: context.locale,\n emit: (event) => emitTelemetry(this.options.telemetry, event)\n })\n )\n .then((response): RequestCacheEntry => {\n if (controller.signal.aborted) throw createAbortError();\n const entry = {\n response,\n version: ++this.#version,\n updatedAt: new Date().toISOString()\n };\n if (!isolated) this.#cache.set(cacheKey, entry);\n emitTelemetry(this.options.telemetry, {\n name: \"request_succeeded\",\n dashboardId: context.dashboardId,\n requestId: executionId,\n providerId: request.providerId,\n operationId: request.operationId,\n durationMs: Date.now() - startedAt\n });\n return entry;\n })\n .catch((error: unknown) => {\n const aborted = isAbortError(error, controller.signal);\n emitTelemetry(this.options.telemetry, {\n name: aborted ? \"request_cancelled\" : \"request_failed\",\n dashboardId: context.dashboardId,\n requestId: executionId,\n providerId: request.providerId,\n operationId: request.operationId,\n durationMs: Date.now() - startedAt,\n errorCode: aborted ? \"request_cancelled\" : \"request_failed\"\n });\n throw error;\n })\n .finally(() => {\n callerSignal?.removeEventListener(\"abort\", abortRequest);\n if (isolated) {\n this.#isolatedControllers.delete(controller);\n } else if (this.#inflight.get(cacheKey)?.promise === promise) {\n this.#inflight.delete(cacheKey);\n }\n });\n\n if (!isolated) this.#inflight.set(cacheKey, { controller, promise });\n const entry = await promise;\n return { ...entry, requestConfigId, executionId, cacheKey, input, fromCache: false };\n }\n\n invalidateRequest(requestConfigId: string): void {\n for (const key of this.#keysByRequestId.get(requestConfigId) ?? []) {\n this.#cache.delete(key);\n this.#inflight.get(key)?.controller.abort();\n this.#inflight.delete(key);\n }\n this.#keysByRequestId.delete(requestConfigId);\n }\n\n clear(): void {\n this.#inflight.forEach(({ controller }) => controller.abort());\n this.#isolatedControllers.forEach((controller) => controller.abort());\n this.#inflight.clear();\n this.#isolatedControllers.clear();\n this.#cache.clear();\n this.#keysByRequestId.clear();\n }\n\n private trackCacheKey(requestConfigId: string, cacheKey: string): void {\n const keys = this.#keysByRequestId.get(requestConfigId) ?? new Set<string>();\n keys.add(cacheKey);\n this.#keysByRequestId.set(requestConfigId, keys);\n }\n}\n","import type {\n VisualizationAction,\n VisualizationAdapter,\n VisualizationPreset,\n VisualizationRendererDefinition\n} from \"../adapter\";\nimport type { DatasetTransformer } from \"../dataset\";\nimport type { DataProvider, RequestValueCodec } from \"../provider\";\nimport { createRequestValueCodecRegistry } from \"../provider\";\nimport { PluginRegistry } from \"./plugin-registry\";\n\nexport interface CoreRegistries {\n providers: PluginRegistry<DataProvider>;\n transformers: PluginRegistry<DatasetTransformer>;\n adapters: PluginRegistry<VisualizationAdapter>;\n rendererDefinitions: PluginRegistry<VisualizationRendererDefinition>;\n presets: PluginRegistry<VisualizationPreset>;\n actions: PluginRegistry<VisualizationAction>;\n requestValueCodecs: PluginRegistry<RequestValueCodec>;\n}\n\nexport function createCoreRegistries(): CoreRegistries {\n return {\n providers: new PluginRegistry<DataProvider>(\"DataProvider\"),\n transformers: new PluginRegistry<DatasetTransformer>(\"DatasetTransformer\"),\n adapters: new PluginRegistry<VisualizationAdapter>(\"VisualizationAdapter\"),\n rendererDefinitions: new PluginRegistry<VisualizationRendererDefinition>(\"VisualizationRendererDefinition\"),\n presets: new PluginRegistry<VisualizationPreset>(\"VisualizationPreset\"),\n actions: new PluginRegistry<VisualizationAction>(\"VisualizationAction\"),\n requestValueCodecs: createRequestValueCodecRegistry()\n };\n}\n","import { STANDARD_ADAPTERS, STANDARD_RENDERER_DEFINITIONS } from \"../adapter\";\nimport { createCoreRegistries, type CoreRegistries } from \"./core-registries\";\n\nexport function registerStandardCore(registries: CoreRegistries): CoreRegistries {\n registries.adapters.registerMany(STANDARD_ADAPTERS);\n registries.rendererDefinitions.registerMany(STANDARD_RENDERER_DEFINITIONS);\n return registries;\n}\n\nexport function createStandardCoreRegistries(): CoreRegistries {\n return registerStandardCore(createCoreRegistries());\n}\n","import { isJsonValue, type JsonValue } from \"../config\";\nimport { PluginRegistry } from \"../registry\";\nimport type { DashboardContext } from \"../variable\";\n\nexport interface RequestValueCodec {\n id: string;\n encode(value: JsonValue, context: DashboardContext): JsonValue | undefined;\n}\n\nexport class RequestValueCodecError extends Error {\n readonly code = \"request_value_codec_failed\";\n readonly codecId: string;\n\n constructor(codecId: string, message: string) {\n super(message);\n this.name = \"RequestValueCodecError\";\n this.codecId = codecId;\n }\n}\n\nfunction requireFiniteNumber(value: JsonValue, codecId: string): number {\n const result =\n typeof value === \"number\" ? value : typeof value === \"string\" && value.trim() !== \"\" ? Number(value) : Number.NaN;\n if (!Number.isFinite(result)) {\n throw new RequestValueCodecError(codecId, `Value cannot be encoded as a finite number by ${codecId}.`);\n }\n return result;\n}\n\nfunction isValidDateOnly(value: string): boolean {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(value);\n if (!match) return false;\n const year = Number(match[1]);\n const month = Number(match[2]);\n const day = Number(match[3]);\n const date = new Date(Date.UTC(year, month - 1, day));\n return date.getUTCFullYear() === year && date.getUTCMonth() === month - 1 && date.getUTCDate() === day;\n}\n\nexport const BUILT_IN_REQUEST_VALUE_CODECS: ReadonlyArray<RequestValueCodec> = Object.freeze([\n {\n id: \"string\",\n encode(value) {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n throw new RequestValueCodecError(\"string\", \"Value cannot be encoded as a string.\");\n }\n },\n {\n id: \"number\",\n encode(value) {\n return requireFiniteNumber(value, \"number\");\n }\n },\n {\n id: \"boolean\",\n encode(value) {\n if (typeof value === \"boolean\") return value;\n if (value === \"true\") return true;\n if (value === \"false\") return false;\n throw new RequestValueCodecError(\"boolean\", \"Value cannot be encoded as a boolean.\");\n }\n },\n {\n id: \"string-array\",\n encode(value) {\n if (!Array.isArray(value)) {\n throw new RequestValueCodecError(\"string-array\", \"Value must be an array.\");\n }\n return value.map((item) => {\n if (typeof item === \"string\" || typeof item === \"number\" || typeof item === \"boolean\") {\n return String(item);\n }\n throw new RequestValueCodecError(\"string-array\", \"Array entries must be primitive values.\");\n });\n }\n },\n {\n id: \"number-array\",\n encode(value) {\n if (!Array.isArray(value)) {\n throw new RequestValueCodecError(\"number-array\", \"Value must be an array.\");\n }\n return value.map((item) => requireFiniteNumber(item, \"number-array\"));\n }\n },\n {\n id: \"iso-date\",\n encode(value) {\n if (typeof value !== \"string\") {\n throw new RequestValueCodecError(\"iso-date\", \"ISO date input must be a string.\");\n }\n const dateOnly = /^(\\d{4}-\\d{2}-\\d{2})/.exec(value)?.[1];\n if (dateOnly) {\n if (isValidDateOnly(dateOnly)) return dateOnly;\n throw new RequestValueCodecError(\"iso-date\", \"Value contains an invalid calendar date.\");\n }\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n throw new RequestValueCodecError(\"iso-date\", \"Value cannot be encoded as an ISO date.\");\n }\n return parsed.toISOString().slice(0, 10);\n }\n },\n {\n id: \"json\",\n encode(value) {\n if (!isJsonValue(value)) {\n throw new RequestValueCodecError(\"json\", \"Value is not JSON serializable.\");\n }\n return value;\n }\n }\n]);\n\nexport function createRequestValueCodecRegistry(): PluginRegistry<RequestValueCodec> {\n return new PluginRegistry<RequestValueCodec>(\"RequestValueCodec\").registerMany(BUILT_IN_REQUEST_VALUE_CODECS);\n}\n","import { readValueAtPath, type DatasetConfig, type DatasetFieldConfig } from \"../config\";\nimport type { DatasetDiagnostic } from \"./types\";\n\nexport interface NormalizeDatasetRowsResult {\n rows: ReadonlyArray<Readonly<Record<string, unknown>>>;\n diagnostics: ReadonlyArray<DatasetDiagnostic>;\n}\n\nfunction isValidDateOnly(value: string): boolean {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(value);\n if (!match) return false;\n const year = Number(match[1]);\n const month = Number(match[2]);\n const day = Number(match[3]);\n const date = new Date(Date.UTC(year, month - 1, day));\n return date.getUTCFullYear() === year && date.getUTCMonth() === month - 1 && date.getUTCDate() === day;\n}\n\nfunction normalizeDate(value: unknown, dataType: \"date\" | \"datetime\"): string | undefined {\n if (typeof value !== \"string\") return undefined;\n if (dataType === \"date\" && isValidDateOnly(value)) return value;\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) return undefined;\n return dataType === \"date\" ? parsed.toISOString().slice(0, 10) : parsed.toISOString();\n}\n\nfunction normalizeFieldValue(value: unknown, field: DatasetFieldConfig): unknown | undefined {\n if (value === null || value === undefined || value === \"\") {\n return undefined;\n }\n\n switch (field.coerce) {\n case \"number-string\": {\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value !== \"string\") return undefined;\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n case \"boolean-string\":\n if (typeof value === \"boolean\") return value;\n return value === \"true\" ? true : value === \"false\" ? false : undefined;\n case \"iso-date\":\n return field.dataType === \"date\" || field.dataType === \"datetime\"\n ? normalizeDate(value, field.dataType)\n : undefined;\n }\n\n switch (field.dataType) {\n case \"string\":\n return typeof value === \"string\" ? value : undefined;\n case \"number\":\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n case \"boolean\":\n return typeof value === \"boolean\" ? value : undefined;\n case \"date\":\n case \"datetime\":\n return normalizeDate(value, field.dataType);\n }\n}\n\nexport function normalizeDatasetRows(\n candidateRows: ReadonlyArray<unknown>,\n dataset: DatasetConfig,\n initialDiagnostics: ReadonlyArray<DatasetDiagnostic> = []\n): NormalizeDatasetRowsResult {\n const diagnostics: DatasetDiagnostic[] = [...initialDiagnostics];\n const rows = candidateRows.map((candidate, rowIndex) => {\n const source =\n candidate !== null && typeof candidate === \"object\" && !Array.isArray(candidate) ? candidate : undefined;\n const output: Record<string, unknown> = {};\n\n for (const field of dataset.fields) {\n const rawValue = source ? readValueAtPath(source, field.sourcePath ?? field.key) : undefined;\n const value = normalizeFieldValue(rawValue, field);\n if (value === undefined) {\n diagnostics.push({\n level: field.required ? \"error\" : \"warning\",\n code: field.required ? \"dataset_required_field_invalid\" : \"dataset_optional_field_invalid\",\n message: `Dataset ${dataset.id} row ${rowIndex + 1} has an invalid value for ${field.key}.`,\n field: field.key,\n rowIndex\n });\n output[field.key] = null;\n } else {\n output[field.key] = value;\n }\n }\n\n return Object.freeze(output);\n });\n\n return {\n rows: Object.freeze(rows),\n diagnostics: Object.freeze(diagnostics)\n };\n}\n","import type { DatasetFieldConfig } from \"../config\";\n\nexport interface DatasetDiagnostic {\n level: \"info\" | \"warning\" | \"error\";\n code: string;\n message: string;\n field?: string;\n rowIndex?: number;\n inputName?: string;\n}\n\nexport interface DatasetResult {\n datasetId: string;\n fields: ReadonlyArray<DatasetFieldConfig>;\n rows: ReadonlyArray<Readonly<Record<string, unknown>>>;\n updatedAt: string;\n requestVersions: Readonly<Record<string, number>>;\n diagnostics: ReadonlyArray<DatasetDiagnostic>;\n}\n\nexport interface DatasetTransformOutput {\n rows: ReadonlyArray<Record<string, unknown>>;\n diagnostics?: ReadonlyArray<DatasetDiagnostic>;\n}\n\nexport interface DatasetTransformContext {\n datasetId: string;\n timezone: string;\n locale: string;\n}\n\nexport interface DatasetTransformer {\n id: string;\n transform(\n inputs: Readonly<Record<string, unknown>>,\n context: Readonly<DatasetTransformContext>\n ): DatasetTransformOutput;\n}\n\nexport class DatasetExecutionError extends Error {\n readonly code: string;\n readonly datasetId: string;\n readonly diagnostics: ReadonlyArray<DatasetDiagnostic>;\n\n constructor(datasetId: string, code: string, message: string, diagnostics: ReadonlyArray<DatasetDiagnostic> = []) {\n super(message);\n this.name = \"DatasetExecutionError\";\n this.datasetId = datasetId;\n this.code = code;\n this.diagnostics = diagnostics;\n }\n}\n","import {\n readValueAtPath,\n stableSerializeJson,\n type DashboardConfig,\n type DatasetConfig,\n type JsonValue\n} from \"../config\";\nimport type { ReadonlyRegistry } from \"../registry\";\nimport { RequestExecutor, type RequestExecutionResult } from \"../provider\";\nimport { emitTelemetry, type VisualizationTelemetrySink } from \"../telemetry\";\nimport type { DashboardContext } from \"../variable\";\nimport { normalizeDatasetRows } from \"./normalize\";\nimport { DatasetExecutionError, type DatasetDiagnostic, type DatasetResult, type DatasetTransformer } from \"./types\";\n\nexport interface RunDatasetOptions {\n signal?: AbortSignal;\n force?: boolean;\n isolated?: boolean;\n}\n\nexport interface DatasetRunnerOptions {\n telemetry?: VisualizationTelemetrySink;\n}\n\ninterface ResolvedDatasetInput {\n name: string;\n requestId: string;\n responsePath?: string;\n execution: RequestExecutionResult;\n value: unknown;\n}\n\nfunction getInputDefinitions(dataset: DatasetConfig) {\n if (dataset.input.type === \"single\") {\n return [[\"default\", dataset.input]] as const;\n }\n return Object.entries(dataset.input.inputs);\n}\n\nfunction toCandidateRows(value: unknown, datasetId: string): ReadonlyArray<unknown> {\n if (value === null || value === undefined) return [];\n if (Array.isArray(value)) return value;\n if (typeof value === \"object\") return [value];\n throw new DatasetExecutionError(\n datasetId,\n \"dataset_input_invalid\",\n `Dataset ${datasetId} input must resolve to an object or an array of objects.`\n );\n}\n\nfunction latestUpdatedAt(inputs: ReadonlyArray<ResolvedDatasetInput>): string {\n const timestamps = inputs.map((input) => Date.parse(input.execution.updatedAt)).filter(Number.isFinite);\n return timestamps.length ? new Date(Math.max(...timestamps)).toISOString() : new Date().toISOString();\n}\n\nexport class DatasetRunner {\n readonly #datasetCache = new Map<string, DatasetResult>();\n readonly #cacheKeysByDatasetId = new Map<string, Set<string>>();\n\n constructor(\n readonly config: DashboardConfig,\n readonly requestExecutor: RequestExecutor,\n readonly transformers: ReadonlyRegistry<DatasetTransformer>,\n readonly options: DatasetRunnerOptions = {}\n ) {}\n\n async run(datasetId: string, context: DashboardContext, options: RunDatasetOptions = {}): Promise<DatasetResult> {\n if (context.dashboardId !== this.config.id) {\n throw new DatasetExecutionError(\n datasetId,\n \"dashboard_context_mismatch\",\n `DashboardContext ${context.dashboardId} cannot be used with dashboard ${this.config.id}.`\n );\n }\n const dataset = this.config.datasets.find((candidate) => candidate.id === datasetId);\n if (!dataset) {\n throw new DatasetExecutionError(datasetId, \"dataset_not_found\", `Dataset not found: ${datasetId}`);\n }\n\n const startedAt = Date.now();\n const isolated = options.isolated ?? false;\n try {\n const resolvedInputs = await Promise.all(\n getInputDefinitions(dataset).map(async ([name, input]): Promise<ResolvedDatasetInput> => {\n const execution = await this.requestExecutor.execute(input.requestId, context, options);\n const value = readValueAtPath(execution.response, input.responsePath);\n if (input.responsePath && value === undefined) {\n throw new DatasetExecutionError(\n dataset.id,\n \"dataset_input_path_missing\",\n `Dataset ${dataset.id} input ${name} path was not found: ${input.responsePath}`,\n [\n {\n level: \"error\",\n code: \"dataset_input_path_missing\",\n message: `Response path was not found: ${input.responsePath}`,\n inputName: name\n }\n ]\n );\n }\n return {\n name,\n requestId: input.requestId,\n ...(input.responsePath ? { responsePath: input.responsePath } : {}),\n execution,\n value\n };\n })\n );\n\n const requestVersions = Object.freeze(\n Object.fromEntries(resolvedInputs.map((input) => [input.requestId, input.execution.version]))\n );\n const cacheKey = stableSerializeJson({\n datasetId: dataset.id,\n requestVersions,\n transformerId: dataset.transformerId ?? null\n } as JsonValue);\n if (!isolated) this.trackCacheKey(dataset.id, cacheKey);\n\n const cached = isolated ? undefined : this.#datasetCache.get(cacheKey);\n if (!options.force && cached) {\n emitTelemetry(this.options.telemetry, {\n name: \"dataset_cache_hit\",\n dashboardId: context.dashboardId,\n datasetId: dataset.id\n });\n return cached;\n }\n\n const namedInputs = Object.freeze(Object.fromEntries(resolvedInputs.map((input) => [input.name, input.value])));\n let candidateRows: ReadonlyArray<unknown>;\n let transformerDiagnostics: ReadonlyArray<DatasetDiagnostic> = [];\n\n if (dataset.transformerId) {\n const transformed = this.transformers.require(dataset.transformerId).transform(namedInputs, {\n datasetId: dataset.id,\n timezone: context.timezone,\n locale: context.locale\n });\n if (!Array.isArray(transformed.rows)) {\n throw new DatasetExecutionError(\n dataset.id,\n \"dataset_transform_invalid\",\n `Dataset transformer ${dataset.transformerId} did not return a rows array.`\n );\n }\n candidateRows = transformed.rows;\n transformerDiagnostics = transformed.diagnostics ?? [];\n } else {\n if (dataset.input.type === \"multiple\") {\n throw new DatasetExecutionError(\n dataset.id,\n \"dataset_transformer_required\",\n `Dataset ${dataset.id} has multiple inputs and requires a transformer.`\n );\n }\n candidateRows = toCandidateRows(resolvedInputs[0]?.value, dataset.id);\n }\n\n const normalized = normalizeDatasetRows(candidateRows, dataset, transformerDiagnostics);\n if (normalized.diagnostics.some((diagnostic) => diagnostic.level === \"error\")) {\n throw new DatasetExecutionError(\n dataset.id,\n \"dataset_validation_failed\",\n `Dataset ${dataset.id} failed field validation.`,\n normalized.diagnostics\n );\n }\n\n const result: DatasetResult = Object.freeze({\n datasetId: dataset.id,\n fields: Object.freeze([...dataset.fields]),\n rows: normalized.rows,\n updatedAt: latestUpdatedAt(resolvedInputs),\n requestVersions,\n diagnostics: normalized.diagnostics\n });\n if (!isolated) this.#datasetCache.set(cacheKey, result);\n emitTelemetry(this.options.telemetry, {\n name: \"dataset_succeeded\",\n dashboardId: context.dashboardId,\n datasetId: dataset.id,\n durationMs: Date.now() - startedAt\n });\n return result;\n } catch (error) {\n emitTelemetry(this.options.telemetry, {\n name: \"dataset_failed\",\n dashboardId: context.dashboardId,\n datasetId,\n durationMs: Date.now() - startedAt,\n errorCode: error instanceof DatasetExecutionError ? error.code : \"dataset_failed\"\n });\n throw error;\n }\n }\n\n async refresh(datasetId: string, context: DashboardContext, signal?: AbortSignal): Promise<DatasetResult> {\n const dataset = this.config.datasets.find((candidate) => candidate.id === datasetId);\n if (!dataset) {\n throw new DatasetExecutionError(datasetId, \"dataset_not_found\", `Dataset not found: ${datasetId}`);\n }\n this.invalidateDataset(datasetId);\n for (const [, input] of getInputDefinitions(dataset)) {\n this.requestExecutor.invalidateRequest(input.requestId);\n }\n return this.run(datasetId, context, { ...(signal ? { signal } : {}), force: true });\n }\n\n invalidateDataset(datasetId: string): void {\n for (const key of this.#cacheKeysByDatasetId.get(datasetId) ?? []) {\n this.#datasetCache.delete(key);\n }\n this.#cacheKeysByDatasetId.delete(datasetId);\n }\n\n clear(): void {\n this.#datasetCache.clear();\n this.#cacheKeysByDatasetId.clear();\n this.requestExecutor.clear();\n }\n\n private trackCacheKey(datasetId: string, cacheKey: string): void {\n const keys = this.#cacheKeysByDatasetId.get(datasetId) ?? new Set<string>();\n keys.add(cacheKey);\n this.#cacheKeysByDatasetId.set(datasetId, keys);\n }\n}\n","import { assertDashboardConfig, type DashboardConfig } from \"../config\";\nimport { DatasetRunner, type DatasetResult, type RunDatasetOptions } from \"../dataset\";\nimport { RequestExecutor } from \"../provider\";\nimport type { CoreRegistries } from \"../registry\";\nimport type { VisualizationTelemetrySink } from \"../telemetry\";\nimport {\n createDashboardContext,\n restoreDashboardContextFromSearch,\n type CreateDashboardContextOptions,\n type DashboardContext,\n type RestoreDashboardContextResult\n} from \"../variable\";\n\nexport interface DashboardDataRuntimeOptions {\n config: unknown;\n registries: CoreRegistries;\n timezone: string;\n locale: string;\n telemetry?: VisualizationTelemetrySink;\n}\n\nexport class DashboardDataRuntime {\n readonly config: DashboardConfig;\n readonly datasetRunner: DatasetRunner;\n readonly #registries: CoreRegistries;\n readonly #contextDefaults: Pick<CreateDashboardContextOptions, \"timezone\" | \"locale\">;\n readonly #telemetry: VisualizationTelemetrySink | undefined;\n\n constructor(options: DashboardDataRuntimeOptions) {\n try {\n new Intl.DateTimeFormat(options.locale, { timeZone: options.timezone }).format(0);\n } catch {\n throw new TypeError(`Invalid locale or timezone: ${options.locale}/${options.timezone}`);\n }\n this.#registries = options.registries;\n this.#telemetry = options.telemetry;\n const telemetryOptions = options.telemetry ? { telemetry: options.telemetry } : {};\n this.config = assertDashboardConfig(options.config, options.registries, telemetryOptions);\n this.#contextDefaults = { timezone: options.timezone, locale: options.locale };\n const requestExecutor = new RequestExecutor(\n this.config,\n options.registries.providers,\n options.registries.requestValueCodecs,\n telemetryOptions\n );\n this.datasetRunner = new DatasetRunner(\n this.config,\n requestExecutor,\n options.registries.transformers,\n telemetryOptions\n );\n }\n\n createContext(variables?: CreateDashboardContextOptions[\"variables\"]): DashboardContext {\n return createDashboardContext(this.config, {\n ...this.#contextDefaults,\n ...(variables ? { variables } : {})\n });\n }\n\n restoreContext(\n search: string,\n variables?: CreateDashboardContextOptions[\"variables\"]\n ): RestoreDashboardContextResult {\n return restoreDashboardContextFromSearch(\n this.config,\n search,\n { ...this.#contextDefaults, ...(variables ? { variables } : {}) },\n this.#telemetry\n );\n }\n\n runDataset(datasetId: string, context: DashboardContext, options?: RunDatasetOptions): Promise<DatasetResult> {\n return this.datasetRunner.run(datasetId, context, options);\n }\n\n refreshDataset(datasetId: string, context: DashboardContext, signal?: AbortSignal): Promise<DatasetResult> {\n return this.datasetRunner.refresh(datasetId, context, signal);\n }\n\n clear(): void {\n this.datasetRunner.clear();\n }\n\n get registries(): CoreRegistries {\n return this.#registries;\n }\n}\n\nexport function createDashboardDataRuntime(options: DashboardDataRuntimeOptions): DashboardDataRuntime {\n return new DashboardDataRuntime(options);\n}\n","import type { DashboardConfig, DatasetConfig } from \"../config\";\n\nexport interface DashboardDependencyGraph {\n readonly requestIdsByDatasetId: ReadonlyMap<string, ReadonlySet<string>>;\n readonly datasetIdsByRequestId: ReadonlyMap<string, ReadonlySet<string>>;\n readonly panelIdsByDatasetId: ReadonlyMap<string, ReadonlySet<string>>;\n readonly datasetIdByPanelId: ReadonlyMap<string, string>;\n}\n\nfunction requestIdsForDataset(dataset: DatasetConfig): string[] {\n return dataset.input.type === \"single\"\n ? [dataset.input.requestId]\n : Object.values(dataset.input.inputs).map((input) => input.requestId);\n}\n\nfunction addToSetMap(map: Map<string, Set<string>>, key: string, value: string): void {\n const values = map.get(key) ?? new Set<string>();\n values.add(value);\n map.set(key, values);\n}\n\nexport function createDashboardDependencyGraph(config: DashboardConfig): DashboardDependencyGraph {\n const requestIdsByDatasetId = new Map<string, ReadonlySet<string>>();\n const datasetIdsByRequestId = new Map<string, Set<string>>();\n const panelIdsByDatasetId = new Map<string, Set<string>>();\n const datasetIdByPanelId = new Map<string, string>();\n\n config.datasets.forEach((dataset) => {\n const requestIds = new Set(requestIdsForDataset(dataset));\n requestIdsByDatasetId.set(dataset.id, requestIds);\n requestIds.forEach((requestId) => addToSetMap(datasetIdsByRequestId, requestId, dataset.id));\n });\n config.panels.forEach((panel) => {\n datasetIdByPanelId.set(panel.id, panel.binding.datasetId);\n addToSetMap(panelIdsByDatasetId, panel.binding.datasetId, panel.id);\n });\n\n return Object.freeze({\n requestIdsByDatasetId,\n datasetIdsByRequestId,\n panelIdsByDatasetId,\n datasetIdByPanelId\n });\n}\n\nexport function collectDownstreamDatasetIds(\n graph: DashboardDependencyGraph,\n requestIds: ReadonlySet<string>\n): Set<string> {\n const datasetIds = new Set<string>();\n requestIds.forEach((requestId) =>\n graph.datasetIdsByRequestId.get(requestId)?.forEach((datasetId) => datasetIds.add(datasetId))\n );\n return datasetIds;\n}\n\nexport function collectDownstreamPanelIds(\n graph: DashboardDependencyGraph,\n datasetIds: ReadonlySet<string>\n): Set<string> {\n const panelIds = new Set<string>();\n datasetIds.forEach((datasetId) =>\n graph.panelIdsByDatasetId.get(datasetId)?.forEach((panelId) => panelIds.add(panelId))\n );\n return panelIds;\n}\n","import type { PanelBinding, PanelConfig, VisualizationEnhancement } from \"../config\";\nimport type { VisualizationAdapter, VisualizationEvent, VisualizationViewModelBase } from \"../adapter\";\nimport type { DatasetResult } from \"../dataset\";\nimport { emitTelemetry } from \"../telemetry\";\nimport { writeDashboardVariable, type DashboardContext } from \"../variable\";\nimport { DashboardDataRuntime, type DashboardDataRuntimeOptions } from \"./dashboard-data-runtime\";\nimport {\n collectDownstreamDatasetIds,\n collectDownstreamPanelIds,\n createDashboardDependencyGraph,\n type DashboardDependencyGraph\n} from \"./dependency-graph\";\nimport type {\n DashboardRuntimeListener,\n DashboardRuntimeSnapshot,\n DashboardVariablePatch,\n DatasetRuntimeState,\n LoadStatus,\n PanelRuntimeState,\n RequestRuntimeState,\n RuntimeError\n} from \"./types\";\n\nexport interface DashboardRuntimeOptions extends DashboardDataRuntimeOptions {\n variables?: DashboardVariablePatch;\n}\n\nexport interface RefreshPanelsOptions {\n deferUnselected?: boolean;\n}\n\nfunction now(): string {\n return new Date().toISOString();\n}\n\nfunction toRuntimeError(error: unknown, fallbackCode: string): RuntimeError {\n const candidate = error as { code?: unknown; message?: unknown };\n return Object.freeze({\n code: typeof candidate?.code === \"string\" ? candidate.code : fallbackCode,\n message: typeof candidate?.message === \"string\" ? candidate.message : String(error),\n cause: error\n });\n}\n\nfunction isAbortError(error: unknown): boolean {\n return error instanceof DOMException && error.name === \"AbortError\";\n}\n\nfunction toRecord<T extends { id: string }>(states: ReadonlyMap<string, T>): Readonly<Record<string, T>> {\n return Object.freeze(Object.fromEntries(states));\n}\n\ninterface PanelRefreshOperation {\n controller: AbortController;\n generation: number;\n previousState: PanelRuntimeState;\n}\n\ninterface DatasetLoadOperation {\n controller: AbortController;\n context: DashboardContext;\n generation: number;\n startedAt: string;\n promise: Promise<void>;\n}\n\nexport class DashboardRuntime {\n readonly dataRuntime: DashboardDataRuntime;\n readonly graph: DashboardDependencyGraph;\n readonly #listeners = new Set<DashboardRuntimeListener>();\n readonly #requestStates = new Map<string, RequestRuntimeState>();\n readonly #datasetStates = new Map<string, DatasetRuntimeState>();\n readonly #panelStates = new Map<string, PanelRuntimeState>();\n readonly #panelRefreshes = new Map<string, PanelRefreshOperation>();\n readonly #panelLoads = new Map<string, DatasetLoadOperation>();\n #context: DashboardContext;\n #generation = 0;\n #panelGeneration = 0;\n #activeController: AbortController | undefined;\n #activeDatasetIds = new Set<string>();\n #activeShowsGlobalLoading = false;\n #destroyed = false;\n\n constructor(readonly options: DashboardRuntimeOptions) {\n this.dataRuntime = new DashboardDataRuntime(options);\n this.graph = createDashboardDependencyGraph(this.dataRuntime.config);\n this.#context = this.dataRuntime.createContext(options.variables);\n this.dataRuntime.config.requests.forEach((request) =>\n this.#requestStates.set(request.id, { id: request.id, status: \"idle\", generation: 0 })\n );\n this.dataRuntime.config.datasets.forEach((dataset) =>\n this.#datasetStates.set(dataset.id, { id: dataset.id, status: \"idle\", generation: 0 })\n );\n this.dataRuntime.config.panels.forEach((panel) =>\n this.#panelStates.set(panel.id, { id: panel.id, status: \"idle\", generation: 0, isRefreshing: false })\n );\n }\n\n get config() {\n return this.dataRuntime.config;\n }\n\n get context(): DashboardContext {\n return this.#context;\n }\n\n get snapshot(): DashboardRuntimeSnapshot {\n return Object.freeze({\n generation: this.#generation,\n isGlobalLoading: Boolean(this.#activeController && this.#activeShowsGlobalLoading),\n context: this.#context,\n requestStates: toRecord(this.#requestStates),\n datasetStates: toRecord(this.#datasetStates),\n panelStates: toRecord(this.#panelStates)\n });\n }\n\n subscribe(listener: DashboardRuntimeListener): () => void {\n this.#listeners.add(listener);\n return () => this.#listeners.delete(listener);\n }\n\n load(): Promise<DashboardRuntimeSnapshot> {\n return this.schedule(new Set(this.config.datasets.map((dataset) => dataset.id)), false);\n }\n\n refreshAll(): Promise<DashboardRuntimeSnapshot> {\n return this.schedule(new Set(this.config.datasets.map((dataset) => dataset.id)), true);\n }\n\n refreshDataset(datasetId: string): Promise<DashboardRuntimeSnapshot> {\n const requestIds = this.graph.requestIdsByDatasetId.get(datasetId);\n if (!requestIds) throw new Error(`Dataset not found: ${datasetId}`);\n return this.schedule(collectDownstreamDatasetIds(this.graph, requestIds), true);\n }\n\n loadPanels(panelIds: Iterable<string>): Promise<DashboardRuntimeSnapshot> {\n return this.loadPanelDatasets(this.datasetIdsForPanels(panelIds));\n }\n\n refreshPanels(panelIds: Iterable<string>, options: RefreshPanelsOptions = {}): Promise<DashboardRuntimeSnapshot> {\n const datasetIds = this.datasetIdsForPanels(panelIds);\n if (!datasetIds.size && !options.deferUnselected) return Promise.resolve(this.snapshot);\n this.#activeDatasetIds.forEach((datasetId) => datasetIds.add(datasetId));\n const deferredDatasetIds = options.deferUnselected\n ? this.deferUnselectedDatasets(datasetIds, this.#generation + 1)\n : new Set<string>();\n if (!datasetIds.size) {\n if (deferredDatasetIds.size) {\n this.#generation += 1;\n this.notify();\n }\n return Promise.resolve(this.snapshot);\n }\n const requestIds = this.requestIdsForDatasets(datasetIds);\n const inactiveSharedDatasetIds = collectDownstreamDatasetIds(this.graph, requestIds);\n datasetIds.forEach((datasetId) => inactiveSharedDatasetIds.delete(datasetId));\n this.resetDatasets(inactiveSharedDatasetIds);\n return this.schedule(datasetIds, true);\n }\n\n refreshPanel(panelId: string): Promise<DashboardRuntimeSnapshot> {\n const panel = this.requirePanel(panelId);\n if (this.#activeController || this.#panelLoads.has(panel.binding.datasetId)) return Promise.resolve(this.snapshot);\n return this.schedulePanel(panel);\n }\n\n retryPanel(panelId: string): Promise<DashboardRuntimeSnapshot> {\n return this.refreshPanel(panelId);\n }\n\n setVariables(patch: DashboardVariablePatch, panelIds?: Iterable<string>): Promise<DashboardRuntimeSnapshot> {\n let context = this.#context;\n Object.entries(patch).forEach(([variableId, value]) => {\n context = writeDashboardVariable(this.config, context, variableId, value);\n });\n this.#context = context;\n if (panelIds === undefined) return this.refreshAll();\n\n const activeDatasetIds = this.datasetIdsForPanels(panelIds);\n this.cancelPanelRefreshes(new Set(this.#panelRefreshes.keys()));\n this.cancelPanelLoads(new Set(this.#panelLoads.keys()));\n this.#activeController?.abort();\n this.#activeController = undefined;\n this.#activeDatasetIds.clear();\n this.#activeShowsGlobalLoading = false;\n const generation = ++this.#generation;\n this.#requestStates.forEach((state, requestId) => {\n this.#requestStates.set(requestId, Object.freeze({ id: state.id, status: \"idle\", generation }));\n });\n const inactiveDatasetIds = new Set(this.config.datasets.map((dataset) => dataset.id));\n activeDatasetIds.forEach((datasetId) => inactiveDatasetIds.delete(datasetId));\n this.resetDatasets(inactiveDatasetIds, generation);\n\n if (!activeDatasetIds.size) {\n this.notify();\n return Promise.resolve(this.snapshot);\n }\n return this.schedule(activeDatasetIds, true);\n }\n\n restoreContext(search: string, variables?: DashboardVariablePatch): DashboardRuntimeSnapshot {\n this.cancelPanelRefreshes(new Set(this.#panelRefreshes.keys()), true);\n this.resetDatasets(new Set(this.#panelLoads.keys()));\n this.#context = this.dataRuntime.restoreContext(search, variables).context;\n this.notify();\n return this.snapshot;\n }\n\n async dispatchEvent(event: VisualizationEvent): Promise<void> {\n const panel = this.requirePanel(event.panelId);\n const actions = panel.enhancement?.common?.interactions?.filter((item) => item.event === event.type) ?? [];\n await Promise.all(\n actions.map((item) => this.dataRuntime.registries.actions.require(item.actionId).execute(event, this.#context))\n );\n }\n\n async executePanelAction(panelId: string, actionItemId: string): Promise<void> {\n const panel = this.requirePanel(panelId);\n const action = panel.actions?.find((item) => item.id === actionItemId);\n if (!action) throw new Error(`Panel action not found: ${panelId}/${actionItemId}`);\n await this.dataRuntime.registries.actions.require(action.actionId).execute(\n {\n type: \"dataPointClick\",\n panelId,\n datasetId: panel.binding.datasetId,\n fields: Object.freeze({})\n },\n this.#context\n );\n }\n\n destroy(): void {\n this.#destroyed = true;\n this.#activeController?.abort();\n this.#activeController = undefined;\n this.#activeDatasetIds.clear();\n this.#activeShowsGlobalLoading = false;\n this.cancelPanelLoads(new Set(this.#panelLoads.keys()));\n this.cancelPanelRefreshes(new Set(this.#panelRefreshes.keys()));\n this.#listeners.clear();\n this.dataRuntime.clear();\n }\n\n private requirePanel(panelId: string): PanelConfig {\n const panel = this.config.panels.find((candidate) => candidate.id === panelId);\n if (!panel) throw new Error(`Panel not found: ${panelId}`);\n return panel;\n }\n\n private notify(): void {\n if (this.#destroyed) return;\n const snapshot = this.snapshot;\n this.#listeners.forEach((listener) => listener(snapshot));\n }\n\n private requestIdsForDatasets(datasetIds: ReadonlySet<string>): Set<string> {\n const requestIds = new Set<string>();\n datasetIds.forEach((datasetId) =>\n this.graph.requestIdsByDatasetId.get(datasetId)?.forEach((requestId) => requestIds.add(requestId))\n );\n return requestIds;\n }\n\n private datasetIdsForPanels(panelIds: Iterable<string>): Set<string> {\n const datasetIds = new Set<string>();\n for (const panelId of panelIds) {\n this.requirePanel(panelId);\n const datasetId = this.graph.datasetIdByPanelId.get(panelId);\n if (datasetId) datasetIds.add(datasetId);\n }\n return datasetIds;\n }\n\n private resetDatasets(datasetIds: ReadonlySet<string>, generation = this.#generation): void {\n const panelIds = collectDownstreamPanelIds(this.graph, datasetIds);\n this.cancelPanelRefreshes(panelIds);\n this.cancelPanelLoads(datasetIds);\n datasetIds.forEach((datasetId) => {\n this.#datasetStates.set(datasetId, Object.freeze({ id: datasetId, status: \"idle\", generation }));\n });\n panelIds.forEach((panelId) => {\n this.#panelStates.set(panelId, Object.freeze({ id: panelId, status: \"idle\", generation, isRefreshing: false }));\n });\n }\n\n private deferUnselectedDatasets(selectedDatasetIds: ReadonlySet<string>, generation: number): Set<string> {\n const deferredDatasetIds = new Set(this.config.datasets.map((dataset) => dataset.id));\n selectedDatasetIds.forEach((datasetId) => deferredDatasetIds.delete(datasetId));\n if (!deferredDatasetIds.size) return deferredDatasetIds;\n\n const selectedRequestIds = this.requestIdsForDatasets(selectedDatasetIds);\n const deferredRequestIds = this.requestIdsForDatasets(deferredDatasetIds);\n deferredRequestIds.forEach((requestId) => {\n this.dataRuntime.datasetRunner.requestExecutor.invalidateRequest(requestId);\n if (!selectedRequestIds.has(requestId)) {\n this.#requestStates.set(requestId, Object.freeze({ id: requestId, status: \"idle\", generation }));\n }\n });\n deferredDatasetIds.forEach((datasetId) => {\n this.dataRuntime.datasetRunner.invalidateDataset(datasetId);\n });\n this.resetDatasets(deferredDatasetIds, generation);\n return deferredDatasetIds;\n }\n\n private loadPanelDatasets(datasetIds: ReadonlySet<string>): Promise<DashboardRuntimeSnapshot> {\n if (this.#destroyed) return Promise.reject(new Error(\"DashboardRuntime has been destroyed.\"));\n const operations: Promise<void>[] = [];\n datasetIds.forEach((datasetId) => {\n const existing = this.#panelLoads.get(datasetId);\n if (existing) {\n operations.push(existing.promise);\n return;\n }\n const status = this.#datasetStates.get(datasetId)?.status;\n if (status !== \"idle\" && status !== \"cancelled\") return;\n operations.push(this.schedulePanelLoad(datasetId));\n });\n if (!operations.length) return Promise.resolve(this.snapshot);\n return Promise.all(operations).then(() => this.snapshot);\n }\n\n private schedulePanelLoad(datasetId: string): Promise<void> {\n const controller = new AbortController();\n const generation = ++this.#panelGeneration;\n const context = this.#context;\n const startedAt = now();\n const operation: DatasetLoadOperation = {\n controller,\n context,\n generation,\n startedAt,\n promise: Promise.resolve()\n };\n this.#panelLoads.set(datasetId, operation);\n\n const requestIds = this.graph.requestIdsByDatasetId.get(datasetId) ?? new Set<string>();\n const panelIds = this.graph.panelIdsByDatasetId.get(datasetId) ?? new Set<string>();\n requestIds.forEach((requestId) => {\n this.#requestStates.set(requestId, Object.freeze({ id: requestId, status: \"loading\", generation, startedAt }));\n });\n const previousDataset = this.#datasetStates.get(datasetId)!;\n const { error: _datasetError, ...datasetWithoutError } = previousDataset;\n this.#datasetStates.set(datasetId, Object.freeze({ ...datasetWithoutError, status: \"loading\", generation }));\n panelIds.forEach((panelId) => {\n const previous = this.#panelStates.get(panelId)!;\n const { error: _panelError, ...stateWithoutError } = previous;\n this.#panelStates.set(\n panelId,\n Object.freeze({\n ...stateWithoutError,\n status: previous.viewModel ? previous.status : \"loading\",\n generation,\n isRefreshing: Boolean(previous.viewModel)\n })\n );\n });\n this.notify();\n\n operation.promise = this.executePanelLoad(datasetId, operation, requestIds, panelIds);\n return operation.promise;\n }\n\n private async executePanelLoad(\n datasetId: string,\n operation: DatasetLoadOperation,\n requestIds: ReadonlySet<string>,\n panelIds: ReadonlySet<string>\n ): Promise<void> {\n try {\n const result = await this.dataRuntime.runDataset(datasetId, operation.context, {\n signal: operation.controller.signal\n });\n if (this.#panelLoads.get(datasetId) !== operation || this.#destroyed) return;\n this.#datasetStates.set(\n datasetId,\n Object.freeze({\n id: datasetId,\n status: result.rows.length ? \"success\" : \"empty\",\n generation: operation.generation,\n result,\n lastSuccessfulAt: result.updatedAt\n })\n );\n requestIds.forEach((requestId) => {\n this.#requestStates.set(\n requestId,\n Object.freeze({\n id: requestId,\n status: \"success\",\n generation: operation.generation,\n startedAt: operation.startedAt,\n completedAt: now()\n })\n );\n });\n this.config.panels\n .filter((panel) => panel.binding.datasetId === datasetId && panelIds.has(panel.id))\n .forEach((panel) => this.adaptPanel(panel, result, operation.generation, operation.context));\n } catch (error) {\n if (this.#panelLoads.get(datasetId) !== operation || this.#destroyed || operation.controller.signal.aborted) {\n return;\n }\n const status: LoadStatus = isAbortError(error) ? \"cancelled\" : \"error\";\n const previous = this.#datasetStates.get(datasetId)!;\n this.#datasetStates.set(\n datasetId,\n Object.freeze({\n ...previous,\n status: previous.result && !isAbortError(error) ? \"stale\" : status,\n generation: operation.generation,\n error: toRuntimeError(error, \"dataset_failed\")\n })\n );\n requestIds.forEach((requestId) => {\n this.#requestStates.set(\n requestId,\n Object.freeze({\n id: requestId,\n status,\n generation: operation.generation,\n startedAt: operation.startedAt,\n completedAt: now(),\n error: toRuntimeError(error, \"request_failed\")\n })\n );\n });\n panelIds.forEach((panelId) => this.failPanel(panelId, operation.generation, error, \"dataset_failed\"));\n } finally {\n if (this.#panelLoads.get(datasetId) === operation) {\n this.#panelLoads.delete(datasetId);\n this.notify();\n }\n }\n }\n\n private cancelPanelLoads(datasetIds: ReadonlySet<string>): void {\n datasetIds.forEach((datasetId) => {\n const operation = this.#panelLoads.get(datasetId);\n if (!operation) return;\n this.#panelLoads.delete(datasetId);\n operation.controller.abort();\n });\n }\n\n private applyPresets(panel: PanelConfig): VisualizationEnhancement | undefined {\n let enhancement = panel.enhancement;\n panel.enhancement?.common?.presetIds?.forEach((presetId) => {\n enhancement = this.dataRuntime.registries.presets.require(presetId).apply(enhancement);\n });\n return enhancement;\n }\n\n private adaptPanel(\n panel: PanelConfig,\n dataset: DatasetResult,\n generation: number,\n context: DashboardContext = this.#context\n ): void {\n try {\n const definition = this.dataRuntime.registries.rendererDefinitions.require(panel.rendererId);\n const adapter = this.dataRuntime.registries.adapters.require(\n panel.adapterId ?? definition.defaultAdapterId\n ) as VisualizationAdapter<PanelBinding, VisualizationEnhancement, VisualizationViewModelBase>;\n const enhancement = this.applyPresets(panel);\n const viewModel = adapter.adapt({\n dataset,\n binding: panel.binding,\n ...(enhancement ? { enhancement } : {}),\n context\n });\n const status: LoadStatus = viewModel.empty ? \"empty\" : \"success\";\n this.#panelStates.set(\n panel.id,\n Object.freeze({\n id: panel.id,\n status,\n generation,\n isRefreshing: false,\n viewModel,\n dataset,\n lastSuccessfulAt: dataset.updatedAt\n })\n );\n } catch (error) {\n emitTelemetry(this.options.telemetry, {\n name: \"adapter_failed\",\n dashboardId: this.config.id,\n panelId: panel.id,\n datasetId: panel.binding.datasetId,\n errorCode: \"adapter_failed\"\n });\n this.failPanel(panel.id, generation, error, \"adapter_failed\");\n }\n }\n\n private failPanel(panelId: string, generation: number, error: unknown, code: string): void {\n const previous = this.#panelStates.get(panelId)!;\n this.#panelStates.set(\n panelId,\n Object.freeze({\n ...previous,\n status: previous.viewModel ? \"stale\" : isAbortError(error) ? \"cancelled\" : \"error\",\n generation,\n isRefreshing: false,\n error: toRuntimeError(error, code)\n })\n );\n }\n\n private cancelPanelRefreshes(panelIds: ReadonlySet<string>, restore = false): void {\n panelIds.forEach((panelId) => {\n const operation = this.#panelRefreshes.get(panelId);\n if (!operation) return;\n this.#panelRefreshes.delete(panelId);\n operation.controller.abort();\n if (restore && this.#panelStates.get(panelId)?.generation === operation.generation) {\n this.#panelStates.set(panelId, operation.previousState);\n }\n });\n }\n\n private async schedulePanel(panel: PanelConfig): Promise<DashboardRuntimeSnapshot> {\n if (this.#destroyed) throw new Error(\"DashboardRuntime has been destroyed.\");\n const datasetId = panel.binding.datasetId;\n const previousOperation = this.#panelRefreshes.get(panel.id);\n const previousState = previousOperation?.previousState ?? this.#panelStates.get(panel.id)!;\n if (previousOperation) {\n this.#panelRefreshes.delete(panel.id);\n previousOperation.controller.abort();\n }\n\n const controller = new AbortController();\n const generation = ++this.#panelGeneration;\n const context = this.#context;\n const operation = { controller, generation, previousState };\n this.#panelRefreshes.set(panel.id, operation);\n\n const { error: _error, viewModel, dataset, ...stateWithoutResult } = previousState;\n const hasVisibleViewModel = Boolean(viewModel && !viewModel.empty);\n this.#panelStates.set(\n panel.id,\n Object.freeze({\n ...stateWithoutResult,\n ...(hasVisibleViewModel && viewModel ? { viewModel } : {}),\n ...(hasVisibleViewModel && dataset ? { dataset } : {}),\n status: hasVisibleViewModel ? (previousState.status === \"stale\" ? \"success\" : previousState.status) : \"loading\",\n generation,\n isRefreshing: hasVisibleViewModel\n })\n );\n this.notify();\n\n try {\n const result = await this.dataRuntime.runDataset(datasetId, context, {\n signal: controller.signal,\n force: true,\n isolated: true\n });\n if (this.#panelRefreshes.get(panel.id) !== operation || this.#destroyed) return this.snapshot;\n this.adaptPanel(panel, result, generation, context);\n } catch (error) {\n if (this.#panelRefreshes.get(panel.id) !== operation || this.#destroyed || controller.signal.aborted) {\n return this.snapshot;\n }\n this.failPanel(panel.id, generation, error, \"dataset_failed\");\n } finally {\n if (this.#panelRefreshes.get(panel.id) === operation) {\n this.#panelRefreshes.delete(panel.id);\n this.notify();\n }\n }\n return this.snapshot;\n }\n\n private async schedule(\n datasetIds: Set<string>,\n invalidate: boolean,\n showGlobalLoading = true\n ): Promise<DashboardRuntimeSnapshot> {\n if (this.#destroyed) throw new Error(\"DashboardRuntime has been destroyed.\");\n const requestIds = this.requestIdsForDatasets(datasetIds);\n const panelIds = collectDownstreamPanelIds(this.graph, datasetIds);\n this.cancelPanelRefreshes(panelIds);\n this.cancelPanelLoads(datasetIds);\n this.#activeController?.abort();\n const controller = new AbortController();\n this.#activeController = controller;\n this.#activeDatasetIds = new Set(datasetIds);\n this.#activeShowsGlobalLoading = showGlobalLoading;\n const generation = ++this.#generation;\n const startedAt = now();\n\n if (invalidate) {\n requestIds.forEach((requestId) => this.dataRuntime.datasetRunner.requestExecutor.invalidateRequest(requestId));\n datasetIds.forEach((datasetId) => this.dataRuntime.datasetRunner.invalidateDataset(datasetId));\n }\n\n requestIds.forEach((requestId) => {\n this.#requestStates.set(requestId, Object.freeze({ id: requestId, status: \"loading\", generation, startedAt }));\n });\n datasetIds.forEach((datasetId) => {\n const previous = this.#datasetStates.get(datasetId)!;\n const { error: _error, ...stateWithoutError } = previous;\n this.#datasetStates.set(\n datasetId,\n Object.freeze({\n ...stateWithoutError,\n status: \"loading\",\n generation\n })\n );\n });\n panelIds.forEach((panelId) => {\n const previous = this.#panelStates.get(panelId)!;\n const { error: _error, viewModel, dataset, ...stateWithoutResult } = previous;\n const hasVisibleViewModel = Boolean(viewModel && !viewModel.empty);\n this.#panelStates.set(\n panelId,\n Object.freeze({\n ...stateWithoutResult,\n ...(hasVisibleViewModel && viewModel ? { viewModel } : {}),\n ...(hasVisibleViewModel && dataset ? { dataset } : {}),\n status: hasVisibleViewModel ? previous.status : \"loading\",\n generation,\n isRefreshing: hasVisibleViewModel\n })\n );\n });\n this.notify();\n\n await Promise.all(\n Array.from(datasetIds, async (datasetId) => {\n try {\n const result = await this.dataRuntime.runDataset(datasetId, this.#context, { signal: controller.signal });\n if (generation !== this.#generation || this.#destroyed) return;\n this.#datasetStates.set(\n datasetId,\n Object.freeze({\n id: datasetId,\n status: result.rows.length ? \"success\" : \"empty\",\n generation,\n result,\n lastSuccessfulAt: result.updatedAt\n })\n );\n this.graph.requestIdsByDatasetId.get(datasetId)?.forEach((requestId) => {\n this.#requestStates.set(\n requestId,\n Object.freeze({\n id: requestId,\n status: \"success\",\n generation,\n startedAt,\n completedAt: now()\n })\n );\n });\n this.config.panels\n .filter((panel) => panel.binding.datasetId === datasetId && panelIds.has(panel.id))\n .forEach((panel) => this.adaptPanel(panel, result, generation));\n } catch (error) {\n if (generation !== this.#generation || this.#destroyed) return;\n const status: LoadStatus = isAbortError(error) ? \"cancelled\" : \"error\";\n const previous = this.#datasetStates.get(datasetId)!;\n this.#datasetStates.set(\n datasetId,\n Object.freeze({\n ...previous,\n status: previous.result && !isAbortError(error) ? \"stale\" : status,\n generation,\n error: toRuntimeError(error, \"dataset_failed\")\n })\n );\n this.graph.requestIdsByDatasetId.get(datasetId)?.forEach((requestId) => {\n this.#requestStates.set(\n requestId,\n Object.freeze({\n id: requestId,\n status,\n generation,\n startedAt,\n completedAt: now(),\n error: toRuntimeError(error, \"request_failed\")\n })\n );\n });\n this.config.panels\n .filter((panel) => panel.binding.datasetId === datasetId && panelIds.has(panel.id))\n .forEach((panel) => this.failPanel(panel.id, generation, error, \"dataset_failed\"));\n } finally {\n if (generation === this.#generation && this.#activeController === controller && !this.#destroyed) {\n this.notify();\n }\n }\n })\n );\n\n if (generation === this.#generation && this.#activeController === controller) {\n this.#activeController = undefined;\n this.#activeDatasetIds.clear();\n this.#activeShowsGlobalLoading = false;\n this.notify();\n }\n return this.snapshot;\n }\n}\n\nexport function createDashboardRuntime(options: DashboardRuntimeOptions): DashboardRuntime {\n return new DashboardRuntime(options);\n}\n"],"names":["dashboardConfigRuntimeSchema","createTypeBoxRuntimeSchema","DashboardConfigSchema","JsonValueSchema","parseDashboardConfig","value","isJsonValue","RuntimeSchemaValidationError","DashboardConfigValidationError","diagnostics","diagnostic","__publicField","findDuplicates","values","seen","duplicates","bindingFields","binding","field","addFieldSemanticDiagnostic","panelIndex","fieldId","expectation","predicate","addBindingSemanticDiagnostics","panel","fieldsById","metricNumber","category","dimension","check","format","_c","_b","_a","stableSerializeJson","rowFields","duplicateDimension","columnDisplays","display","addPluginSchemaDiagnostics","definition","bindingResult","issue","enhancementResult","validateDashboardConfig","registries","options","structureResult","config","variables","variableIds","variable","requestIds","request","datasetsById","dataset","item","code","path","ids","id","urlKey","control","index","variableId","preset","presetId","optionValues","option","optionValue","requestIndex","provider","inputName","datasetIndex","fieldKey","input","fieldIndex","expectedType","fieldIds","_d","_e","_f","_g","_h","minFontSize","_i","maxFontSize","_j","adapterId","_l","_k","_n","_m","interaction","action","actionId","actionIndex","emitTelemetry","assertDashboardConfig","result","blockedPathSegments","readValueAtPath","source","current","segment","RequestInputError","requestId","message","isEmptyValue","resolveDataRequestInput","context","codecs","cloneJsonValue","readDashboardVariable","encoded","ProviderInputValidationError","providerId","operationId","issues","createAbortError","isAbortError","error","signal","createRequestCacheKey","RequestExecutor","providers","__privateAdd","_cache","_inflight","_isolatedControllers","_keysByRequestId","_version","_executionSequence","requestConfigId","candidate","callerSignal","cacheKey","isolated","executionId","__privateWrapper","cached","__privateGet","existing","abortExisting","operation","inputValidation","startedAt","controller","abortRequest","promise","event","response","entry","aborted","key","keys","createCoreRegistries","PluginRegistry","createRequestValueCodecRegistry","registerStandardCore","STANDARD_ADAPTERS","STANDARD_RENDERER_DEFINITIONS","createStandardCoreRegistries","RequestValueCodecError","codecId","requireFiniteNumber","isValidDateOnly","match","year","month","day","date","BUILT_IN_REQUEST_VALUE_CODECS","dateOnly","parsed","normalizeDate","dataType","normalizeFieldValue","normalizeDatasetRows","candidateRows","initialDiagnostics","rows","rowIndex","output","rawValue","DatasetExecutionError","datasetId","getInputDefinitions","toCandidateRows","latestUpdatedAt","inputs","timestamps","DatasetRunner","requestExecutor","transformers","_datasetCache","_cacheKeysByDatasetId","resolvedInputs","name","execution","requestVersions","namedInputs","transformerDiagnostics","transformed","normalized","DashboardDataRuntime","_registries","_contextDefaults","_telemetry","__privateSet","telemetryOptions","createDashboardContext","search","restoreDashboardContextFromSearch","createDashboardDataRuntime","requestIdsForDataset","addToSetMap","map","createDashboardDependencyGraph","requestIdsByDatasetId","datasetIdsByRequestId","panelIdsByDatasetId","datasetIdByPanelId","collectDownstreamDatasetIds","graph","datasetIds","collectDownstreamPanelIds","panelIds","panelId","now","toRuntimeError","fallbackCode","toRecord","states","DashboardRuntime","_listeners","_requestStates","_datasetStates","_panelStates","_panelRefreshes","_panelLoads","_context","_generation","_panelGeneration","_activeController","_activeDatasetIds","_activeShowsGlobalLoading","_destroyed","listener","deferredDatasetIds","inactiveSharedDatasetIds","patch","writeDashboardVariable","activeDatasetIds","generation","state","inactiveDatasetIds","actions","actionItemId","snapshot","selectedDatasetIds","selectedRequestIds","operations","status","previousDataset","_datasetError","datasetWithoutError","previous","_panelError","stateWithoutError","enhancement","adapter","viewModel","restore","previousOperation","previousState","_error","stateWithoutResult","hasVisibleViewModel","invalidate","showGlobalLoading","createDashboardRuntime"],"mappings":";;;;;;;;;;;;;;;;;;;AAIO,MAAMA,KAA+BC,GAA2BC,IAAuB,CAACC,EAAe,CAAC;AAExG,SAASC,GAAqBC,GAAiC;AACpE,MAAI,CAACC,GAAYD,CAAK;AACpB,UAAM,IAAIE,GAA6B;AAAA,MACrC;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ,CAAA;AAAA,MAAC;AAAA,IACX,CACD;AAEH,SAAOP,GAA6B,OAAOK,CAAK;AAClD;ACKO,MAAMG,WAAuC,MAAM;AAAA,EAGxD,YAAYC,GAA8C;AACxD,UAAMA,EAAY,IAAI,CAACC,MAAe,GAAGA,EAAW,IAAI,KAAKA,EAAW,OAAO,EAAE,EAAE,KAAK;AAAA,CAAI,CAAC;AAHtF,IAAAC,EAAA;AAIP,SAAK,OAAO,kCACZ,KAAK,cAAcF;AAAA,EACrB;AACF;AAEA,SAASG,EAAeC,GAAyC;AAC/D,QAAMC,wBAAW,IAAA,GACXC,wBAAiB,IAAA;AACvB,SAAAF,EAAO,QAAQ,CAACR,MAAWS,EAAK,IAAIT,CAAK,IAAIU,EAAW,IAAIV,CAAK,IAAIS,EAAK,IAAIT,CAAK,CAAE,GAC9E,MAAM,KAAKU,CAAU;AAC9B;AAEA,SAASC,GAAcC,GAAiC;AACtD,UAAQA,EAAQ,MAAA;AAAA,IACd,KAAK;AACH,aAAO,CAACA,EAAQ,YAAYA,EAAQ,YAAY,EAAE,OAAO,CAACC,MAA2B,EAAQA,CAAM;AAAA,IACrG,KAAK;AACH,aAAO,CAACD,EAAQ,QAAQ,GAAGA,EAAQ,SAASA,EAAQ,WAAW,EAAE;AAAA,QAAO,CAACC,MACvE,EAAQA;AAAA,MAAK;AAAA,IAEjB,KAAK;AACH,aAAO,CAACD,EAAQ,eAAe,GAAGA,EAAQ,aAAaA,EAAQ,WAAW,EAAE;AAAA,QAAO,CAACC,MAClF,EAAQA;AAAA,MAAK;AAAA,IAEjB,KAAK;AACH,aAAO,CAACD,EAAQ,WAAWA,EAAQ,UAAU;AAAA,IAC/C,KAAK;AACH,aAAOA,EAAQ;AAAA,IACjB,KAAK;AACH,aAAO,CAAC,GAAGA,EAAQ,aAAaA,EAAQ,YAAYA,EAAQ,aAAa,EAAE;AAAA,QAAO,CAACC,MACjF,EAAQA;AAAA,MAAK;AAAA,IAEjB,KAAK;AACH,aAAO,CAAC,GAAGD,EAAQ,WAAW,GAAGA,EAAQ,cAAc,GAAGA,EAAQ,WAAW;AAAA,EAAA;AAEnF;AAEA,SAASE,GACPV,GACAW,GACAF,GACAG,GACAC,GACAC,GACM;AACN,EAAI,CAACL,KAASK,EAAUL,CAAK,KAC7BT,EAAY,KAAK;AAAA,IACf,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS,SAASY,CAAO,YAAYC,CAAW,cAAcJ,EAAM,IAAI,IAAIA,EAAM,QAAQ;AAAA,IAC1F,MAAM,WAAWE,CAAU;AAAA,EAAA,CAC5B;AACH;AAEA,SAASI,GACPf,GACAgB,GACAL,GACAM,GACM;;AACN,QAAMC,IAAe,CAACT,MAA8BA,EAAM,SAAS,YAAYA,EAAM,aAAa,UAC5FU,IAAW,CAACV,MAA8BA,EAAM,SAAS,eAAeA,EAAM,SAAS,QACvFW,IAAY,CAACX,MAA8BA,EAAM,SAAS,aAC1DY,IAAQ,CAACT,GAAiBC,GAAqBC,MACnDJ,GAA2BV,GAAaW,GAAYM,EAAW,IAAIL,CAAO,GAAGA,GAASC,GAAaC,CAAS;AAE9G,UAAQE,EAAM,QAAQ,MAAA;AAAA,IACpB,KAAK;AACH,MAAAK,EAAML,EAAM,QAAQ,YAAY,oBAAoBE,CAAY,GAC5DF,EAAM,QAAQ,gBAAcK,EAAML,EAAM,QAAQ,cAAc,oBAAoBE,CAAY;AAClG;AAAA,IACF,KAAK;AACH,MAAAG,EAAML,EAAM,QAAQ,QAAQ,6BAA6BG,CAAQ,GACjEH,EAAM,QAAQ,QAAQ,QAAQ,CAACJ,MAAYS,EAAMT,GAAS,oBAAoBM,CAAY,CAAC,GACvFF,EAAM,QAAQ,gBAChBK,EAAML,EAAM,QAAQ,aAAa,qBAAqBI,CAAS,GAC3DJ,EAAM,QAAQ,QAAQ,WAAW,KACnChB,EAAY,KAAK;AAAA,QACf,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,QACT,MAAM,WAAWW,CAAU;AAAA,MAAA,CAC5B,IAGY,IAAI;AAAA,QACnBK,EAAM,QAAQ,QAAQ,QAAQ,CAACJ,MAAY;;AACzC,gBAAMH,IAAQQ,EAAW,IAAIL,CAAO;AACpC,cAAI,CAACH,EAAO,QAAO,CAAA;AACnB,gBAAMa,MAASC,KAAAC,KAAAC,IAAAT,EAAM,gBAAN,gBAAAS,EAAmB,WAAnB,gBAAAD,EAA2B,oBAA3B,gBAAAD,EAA6CX,OAAYH,EAAM,UAAU,EAAE,MAAM,SAAA;AAChG,iBAAO,CAACiB,GAAoB,EAAE,QAAAJ,GAAQ,MAAMb,EAAM,QAAQ,KAAA,CAAM,CAAC;AAAA,QACnE,CAAC;AAAA,MAAA,EAEU,OAAO,KAClBT,EAAY,KAAK;AAAA,QACf,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,QACT,MAAM,WAAWW,CAAU;AAAA,MAAA,CAC5B;AAEH;AAAA,IACF,KAAK;AACH,MAAAU,EAAML,EAAM,QAAQ,eAAe,6BAA6BG,CAAQ,GACxEH,EAAM,QAAQ,YAAY,QAAQ,CAACJ,MAAYS,EAAMT,GAAS,oBAAoBM,CAAY,CAAC,GAC3FF,EAAM,QAAQ,gBAChBK,EAAML,EAAM,QAAQ,aAAa,qBAAqBI,CAAS,GAC3DJ,EAAM,QAAQ,YAAY,WAAW,KACvChB,EAAY,KAAK;AAAA,QACf,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,QACT,MAAM,WAAWW,CAAU;AAAA,MAAA,CAC5B;AAGL;AAAA,IACF,KAAK;AACH,MAAAU,EAAML,EAAM,QAAQ,WAAW,6BAA6BG,CAAQ,GACpEE,EAAML,EAAM,QAAQ,YAAY,oBAAoBE,CAAY;AAChE;AAAA,IACF,KAAK;AACH,MAAAF,EAAM,QAAQ,YAAY,QAAQ,CAACJ,MAAYS,EAAMT,GAAS,qBAAqBQ,CAAS,CAAC,GAC7FC,EAAML,EAAM,QAAQ,YAAY,oBAAoBE,CAAY,GAC5DF,EAAM,QAAQ,iBAAeK,EAAML,EAAM,QAAQ,eAAe,qBAAqBI,CAAS;AAClG;AAAA,IACF,KAAK,gBAAgB;AACnB,MAAAJ,EAAM,QAAQ,UAAU,QAAQ,CAACJ,MAAYS,EAAMT,GAAS,6BAA6BO,CAAQ,CAAC,GAClGH,EAAM,QAAQ,aAAa,QAAQ,CAACJ,MAAYS,EAAMT,GAAS,6BAA6BO,CAAQ,CAAC,GACrGH,EAAM,QAAQ,YAAY,QAAQ,CAACJ,MAAYS,EAAMT,GAAS,oBAAoBM,CAAY,CAAC;AAC/F,YAAMS,IAAY,IAAI,IAAIX,EAAM,QAAQ,SAAS,GAC3CY,IAAqBZ,EAAM,QAAQ,aAAa,KAAK,CAACJ,MAAYe,EAAU,IAAIf,CAAO,CAAC;AAC9F,MAAIgB,KACF5B,EAAY,KAAK;AAAA,QACf,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,qBAAqB4B,CAAkB;AAAA,QAChD,MAAM,WAAWjB,CAAU;AAAA,MAAA,CAC5B;AAEH;AAAA,IACF;AAAA,IACA,KAAK,SAAS;AACZ,YAAMkB,MAAiBJ,IAAAT,EAAM,gBAAN,gBAAAS,EAAmB,UAAS,WAAUD,IAAAR,EAAM,YAAY,UAAlB,gBAAAQ,EAAyB,iBAAiB;AACvG,aAAO,QAAQK,KAAkB,CAAA,CAAE,EAAE,QAAQ,CAAC,CAACjB,GAASkB,CAAO,MAAM;AACnE,SAAIA,EAAQ,SAAS,cAAcA,EAAQ,SAAS,YAClDT,EAAMT,GAAS,uBAAuBkB,EAAQ,IAAI,YAAY,CAACrB,MAAUA,EAAM,aAAa,QAAQ;AAAA,MAExG,CAAC;AACD;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,SAASsB,GACP/B,GACAgC,GACAhB,GACAL,GACM;AACN,QAAMsB,IAAgBD,EAAW,cAAc,SAAShB,EAAM,OAAO;AAWrE,MAVKiB,EAAc,WACjBA,EAAc,OAAO;AAAA,IAAQ,CAACC,MAC5BlC,EAAY,KAAK;AAAA,MACf,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAASkC,EAAM;AAAA,MACf,MAAM,WAAWvB,CAAU,WAAWuB,EAAM,SAAS,MAAM,KAAKA,EAAM,IAAI;AAAA,IAAA,CAC3E;AAAA,EAAA,GAGDlB,EAAM,aAAa;AACrB,UAAMmB,IAAoBH,EAAW,kBAAkB,SAAShB,EAAM,WAAW;AACjF,IAAKmB,EAAkB,WACrBA,EAAkB,OAAO;AAAA,MAAQ,CAACD,MAChClC,EAAY,KAAK;AAAA,QACf,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAASkC,EAAM;AAAA,QACf,MAAM,WAAWvB,CAAU,eAAeuB,EAAM,SAAS,MAAM,KAAKA,EAAM,IAAI;AAAA,MAAA,CAC/E;AAAA,IAAA;AAAA,EAGP;AACF;AAEO,SAASE,GACdxC,GACAyC,GACAC,IAA0C,CAAA,GACT;;AACjC,MAAI,CAACzC,GAAYD,CAAK;AACpB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,aAAa;AAAA,QACX;AAAA,UACE,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SACE;AAAA,UACF,MAAM;AAAA,QAAA;AAAA,MACR;AAAA,IACF;AAIJ,QAAM2C,IAAkBhD,GAA6B,SAASK,CAAK;AACnE,MAAI,CAAC2C,EAAgB;AACnB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,aAAaA,EAAgB,OAAO,IAAI,CAACL,OAAW;AAAA,QAClD,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAASA,EAAM;AAAA,QACf,MAAMA,EAAM;AAAA,MAAA,EACZ;AAAA,IAAA;AAIN,QAAMM,IAASD,EAAgB,OACzBvC,IAAkC,CAAA,GAClCyC,IAAYD,EAAO,aAAa,CAAA,GAChCE,IAAc,IAAI,IAAID,EAAU,IAAI,CAACE,MAAaA,EAAS,EAAE,CAAC,GAC9DC,IAAa,IAAI,IAAIJ,EAAO,SAAS,IAAI,CAACK,MAAYA,EAAQ,EAAE,CAAC,GACjEC,IAAe,IAAI,IAAIN,EAAO,SAAS,IAAI,CAACO,MAAY,CAACA,EAAQ,IAAIA,CAAO,CAAC,CAAC;AASpF,SAPiB;AAAA,IACf,CAAC,yBAAyB,cAAcN,EAAU,IAAI,CAACO,MAASA,EAAK,EAAE,CAAC;AAAA,IACxE,CAAC,+BAA+B,0BAAwBvB,IAAAe,EAAO,cAAP,gBAAAf,EAAkB,aAAY,CAAA,GAAI,IAAI,CAACuB,MAASA,EAAK,EAAE,CAAC;AAAA,IAChH,CAAC,wBAAwB,aAAaR,EAAO,SAAS,IAAI,CAACQ,MAASA,EAAK,EAAE,CAAC;AAAA,IAC5E,CAAC,wBAAwB,aAAaR,EAAO,SAAS,IAAI,CAACQ,MAASA,EAAK,EAAE,CAAC;AAAA,IAC5E,CAAC,sBAAsB,WAAWR,EAAO,OAAO,IAAI,CAACQ,MAASA,EAAK,EAAE,CAAC;AAAA,EAAA,EAE/D;AAAA,IAAQ,CAAC,CAACC,GAAMC,GAAMC,CAAG,MAChChD,EAAegD,CAAG,EAAE;AAAA,MAAQ,CAACC,MAC3BpD,EAAY,KAAK,EAAE,OAAO,SAAS,MAAAiD,GAAM,SAAS,iBAAiBG,CAAE,IAAI,MAAAF,GAAM;AAAA,IAAA;AAAA,EACjF,GAGF/C,EAAesC,EAAU,QAAQ,CAACE,MAAcA,EAAS,SAAS,CAACA,EAAS,MAAM,IAAI,CAAA,CAAG,CAAC,EAAE;AAAA,IAAQ,CAACU,MACnGrD,EAAY,KAAK;AAAA,MACf,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,+BAA+BqD,CAAM;AAAA,MAC9C,MAAM;AAAA,IAAA,CACP;AAAA,EAAA,MAGF7B,IAAAgB,EAAO,cAAP,gBAAAhB,EAAkB,aAAY,CAAA,GAAI,QAAQ,CAAC8B,GAASC,MAAU;AAY7D,SAXYD,EAAQ,SAAS,eAAe,CAACA,EAAQ,iBAAiBA,EAAQ,aAAa,IAAI,CAACA,EAAQ,UAAU,GAC9G,QAAQ,CAACE,MAAe;AAC1B,MAAKd,EAAY,IAAIc,CAAU,KAC7BxD,EAAY,KAAK;AAAA,QACf,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,kBAAkBsD,EAAQ,EAAE,iCAAiCE,CAAU;AAAA,QAChF,MAAM,uBAAuBD,CAAK;AAAA,MAAA,CACnC;AAAA,IAEL,CAAC,GACGD,EAAQ,SAAS;AACnB,MAAAnD,GAAgBmD,EAAQ,WAAW,IAAI,IAAI,CAACG,MAAWA,EAAO,EAAE,CAAC,EAAE;AAAA,QAAQ,CAACC,MAC1E1D,EAAY,KAAK;AAAA,UACf,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SAAS,iCAAiCsD,EAAQ,EAAE,KAAKI,CAAQ;AAAA,UACjE,MAAM,uBAAuBH,CAAK;AAAA,QAAA,CACnC;AAAA,MAAA;AAAA,SAEE;AACL,YAAMI,IAAeL,EAAQ,QAAQ,IAAI,CAACM,MAAWlC,GAAoBkC,EAAO,KAAK,CAAC;AACtF,MAAAzD,EAAewD,CAAY,EAAE;AAAA,QAAQ,CAACE,MACpC7D,EAAY,KAAK;AAAA,UACf,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SAAS,oCAAoCsD,EAAQ,EAAE,KAAKO,CAAW;AAAA,UACvE,MAAM,uBAAuBN,CAAK;AAAA,QAAA,CACnC;AAAA,MAAA;AAAA,IAEL;AAAA,EACF,CAAC,GAEDf,EAAO,SAAS,QAAQ,CAACK,GAASiB,MAAiB;AACjD,UAAMC,IAAW1B,EAAW,UAAU,IAAIQ,EAAQ,UAAU;AAC5D,IAAKkB,IAOOA,EAAS,WAAWlB,EAAQ,WAAW,KACjD7C,EAAY,KAAK;AAAA,MACf,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,yCAAyC6C,EAAQ,UAAU,IAAIA,EAAQ,WAAW;AAAA,MAC3F,MAAM,aAAaiB,CAAY;AAAA,IAAA,CAChC,IAZD9D,EAAY,KAAK;AAAA,MACf,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,+BAA+B6C,EAAQ,UAAU;AAAA,MAC1D,MAAM,aAAaiB,CAAY;AAAA,IAAA,CAChC,GAUH,OAAO,QAAQjB,EAAQ,SAAS,CAAA,CAAE,EAAE,QAAQ,CAAC,CAACmB,GAAWxD,CAAO,MAAM;AACpE,MAAIA,EAAQ,WAAW,eAClBkC,EAAY,IAAIlC,EAAQ,UAAU,KACrCR,EAAY,KAAK;AAAA,QACf,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,8CAA8CQ,EAAQ,UAAU;AAAA,QACzE,MAAM,aAAasD,CAAY,UAAUE,CAAS;AAAA,MAAA,CACnD,GAECxD,EAAQ,WAAW,CAAC6B,EAAW,mBAAmB,IAAI7B,EAAQ,OAAO,KACvER,EAAY,KAAK;AAAA,QACf,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,0CAA0CQ,EAAQ,OAAO;AAAA,QAClE,MAAM,aAAasD,CAAY,UAAUE,CAAS;AAAA,MAAA,CACnD;AAAA,IAEL,CAAC;AAAA,EACH,CAAC,GAEDxB,EAAO,SAAS,QAAQ,CAACO,GAASkB,MAAiB;AACjD,IAAA9D,EAAe4C,EAAQ,OAAO,IAAI,CAACtC,MAAUA,EAAM,GAAG,CAAC,EAAE;AAAA,MAAQ,CAACyD,MAChElE,EAAY,KAAK;AAAA,QACf,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,kCAAkC+C,EAAQ,EAAE,KAAKmB,CAAQ;AAAA,QAClE,MAAM,aAAaD,CAAY;AAAA,MAAA,CAChC;AAAA,IAAA,IAGDlB,EAAQ,MAAM,SAAS,WAAY,CAAC,CAAC,WAAWA,EAAQ,KAAK,CAAC,IAAc,OAAO,QAAQA,EAAQ,MAAM,MAAM,GACjG,QAAQ,CAAC,CAACiB,GAAWG,CAAK,MAAM;AAC9C,MAAKvB,EAAW,IAAIuB,EAAM,SAAS,KACjCnE,EAAY,KAAK;AAAA,QACf,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,6CAA6CmE,EAAM,SAAS;AAAA,QACrE,MAAM,aAAaF,CAAY,UAAUD,CAAS;AAAA,MAAA,CACnD;AAAA,IAEL,CAAC,GACGjB,EAAQ,MAAM,SAAS,cAAc,CAACA,EAAQ,iBAChD/C,EAAY,KAAK;AAAA,MACf,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,WAAW+C,EAAQ,EAAE;AAAA,MAC9B,MAAM,aAAakB,CAAY;AAAA,IAAA,CAChC,GAEClB,EAAQ,iBAAiB,CAACV,EAAW,aAAa,IAAIU,EAAQ,aAAa,KAC7E/C,EAAY,KAAK;AAAA,MACf,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,0CAA0C+C,EAAQ,aAAa;AAAA,MACxE,MAAM,aAAakB,CAAY;AAAA,IAAA,CAChC,GAEHlB,EAAQ,OAAO,QAAQ,CAACtC,GAAO2D,MAAe;AAC5C,YAAMC,IACJ5D,EAAM,WAAW,kBACb,WACAA,EAAM,WAAW,mBACf,YACAA,EAAM,WAAW,aACf,qBACA;AACV,MACE4D,MACCA,MAAiB,qBACd5D,EAAM,aAAa,UAAUA,EAAM,aAAa,aAChDA,EAAM,aAAa4D,MAEvBrE,EAAY,KAAK;AAAA,QACf,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,YAAYS,EAAM,MAAM,qCAAqCA,EAAM,QAAQ;AAAA,QACpF,MAAM,aAAawD,CAAY,WAAWG,CAAU;AAAA,MAAA,CACrD;AAAA,IAEL,CAAC;AAAA,EACH,CAAC,GAED5B,EAAO,OAAO,QAAQ,CAACxB,GAAOL,MAAe;;AAC3C,UAAMoC,IAAUD,EAAa,IAAI9B,EAAM,QAAQ,SAAS;AACxD,QAAI,CAAC+B;AACH,MAAA/C,EAAY,KAAK;AAAA,QACf,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,qCAAqCgB,EAAM,QAAQ,SAAS;AAAA,QACrE,MAAM,WAAWL,CAAU;AAAA,MAAA,CAC5B;AAAA,SACI;AACL,YAAMM,IAAa,IAAI,IAAI8B,EAAQ,OAAO,IAAI,CAACtC,MAAU,CAACA,EAAM,KAAKA,CAAK,CAAC,CAAC,GACtE6D,IAAW,IAAI,IAAIrD,EAAW,MAAM;AAwC1C,UAvCAV,GAAcS,EAAM,OAAO,EAAE,QAAQ,CAACJ,MAAY;AAChD,QAAK0D,EAAS,IAAI1D,CAAO,KACvBZ,EAAY,KAAK;AAAA,UACf,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SAAS,0CAA0CY,CAAO,eAAemC,EAAQ,EAAE;AAAA,UACnF,MAAM,WAAWpC,CAAU;AAAA,QAAA,CAC5B;AAAA,MAEL,CAAC,GACD,OAAO,OAAKa,KAAAC,IAAAT,EAAM,gBAAN,gBAAAS,EAAmB,WAAnB,gBAAAD,EAA2B,oBAAmB,EAAE,EAAE,QAAQ,CAACZ,MAAY;AACjF,QAAK0D,EAAS,IAAI1D,CAAO,KACvBZ,EAAY,KAAK;AAAA,UACf,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SAAS,kDAAkDY,CAAO,eAAemC,EAAQ,EAAE;AAAA,UAC3F,MAAM,WAAWpC,CAAU,uCAAuCC,CAAO;AAAA,QAAA,CAC1E;AAAA,MAEL,CAAC,GACDG,GAA8Bf,GAAagB,GAAOL,GAAYM,CAAU,KACpEM,IAAAP,EAAM,gBAAN,gBAAAO,EAAmB,UAAS,gCACD,IAAI;AAAA,QAC/B,KAAIgD,IAAAvD,EAAM,YAAY,UAAlB,gBAAAuD,EAAyB,mBAAkB,CAAA;AAAA,QAC/C,KAAIC,IAAAxD,EAAM,YAAY,UAAlB,gBAAAwD,EAAyB,qBAAoB,CAAA;AAAA,QACjD,GAAG,OAAO,OAAKC,IAAAzD,EAAM,YAAY,UAAlB,gBAAAyD,EAAyB,iBAAgB,EAAE;AAAA,QAC1D,GAAG,OAAO,OAAKC,KAAA1D,EAAM,YAAY,UAAlB,gBAAA0D,GAAyB,mBAAkB,CAAA,CAAE;AAAA,MAAA,CAC7D,GACgB,QAAQ,CAAC9D,OAAY;AACpC,SAAI,CAACI,EAAM,QAAQ,QAAQA,EAAM,QAAQ,SAAS,WAAW,CAACA,EAAM,QAAQ,QAAQ,SAASJ,EAAO,MAClGZ,EAAY,KAAK;AAAA,UACf,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SAAS,2BAA2BY,EAAO;AAAA,UAC3C,MAAM,WAAWD,CAAU;AAAA,QAAA,CAC5B;AAAA,MAEL,CAAC,KAECgE,KAAA3D,EAAM,gBAAN,gBAAA2D,GAAmB,UAAS,aAAa;AAC3C,cAAMC,KAAcC,KAAA7D,EAAM,YAAY,cAAlB,gBAAA6D,GAA6B,aAC3CC,MAAcC,KAAA/D,EAAM,YAAY,cAAlB,gBAAA+D,GAA6B;AACjD,QAAIH,MAAgB,UAAaE,OAAgB,UAAaF,IAAcE,MAC1E9E,EAAY,KAAK;AAAA,UACf,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SAAS;AAAA,UACT,MAAM,WAAWW,CAAU;AAAA,QAAA,CAC5B;AAAA,MAEL;AAAA,IACF;AAEA,IAAIK,EAAM,eAAeA,EAAM,YAAY,SAASA,EAAM,QAAQ,QAChEhB,EAAY,KAAK;AAAA,MACf,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,0BAA0BgB,EAAM,YAAY,IAAI,gCAAgCA,EAAM,QAAQ,IAAI;AAAA,MAC3G,MAAM,WAAWL,CAAU;AAAA,IAAA,CAC5B;AAGH,UAAMqB,IAAaK,EAAW,oBAAoB,IAAIrB,EAAM,UAAU;AACtE,QAAI,CAACgB;AACH,MAAAhC,EAAY,KAAK;AAAA,QACf,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,0CAA0CgB,EAAM,UAAU;AAAA,QACnE,MAAM,WAAWL,CAAU;AAAA,MAAA,CAC5B;AAAA,SACI;AACL,MAAAoB,GAA2B/B,GAAagC,GAAYhB,GAAOL,CAAU;AACrE,YAAMqE,IAAYhE,EAAM,aAAagB,EAAW;AAChD,MAAKK,EAAW,SAAS,IAAI2C,CAAS,KACpChF,EAAY,KAAK;AAAA,QACf,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,4CAA4CgF,CAAS;AAAA,QAC9D,MAAM,WAAWrE,CAAU;AAAA,MAAA,CAC5B;AAAA,IAEL;AAEA,OAACsE,MAAAC,KAAAlE,EAAM,gBAAN,gBAAAkE,GAAmB,WAAnB,gBAAAD,GAA2B,cAAa,IAAI,QAAQ,CAACvB,MAAa;AACjE,YAAMD,IAASpB,EAAW,QAAQ,IAAIqB,CAAQ;AAC9C,MAAKD,IAOMA,EAAO,cAAcA,EAAO,eAAezC,EAAM,cAC1DhB,EAAY,KAAK;AAAA,QACf,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,UAAU0D,CAAQ,wBAAwBD,EAAO,UAAU,SAASzC,EAAM,UAAU;AAAA,QAC7F,MAAM,WAAWL,CAAU;AAAA,MAAA,CAC5B,IAZDX,EAAY,KAAK;AAAA,QACf,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,2CAA2C0D,CAAQ;AAAA,QAC5D,MAAM,WAAW/C,CAAU;AAAA,MAAA,CAC5B;AAAA,IASL,CAAC,MACAwE,MAAAC,KAAApE,EAAM,gBAAN,gBAAAoE,GAAmB,WAAnB,gBAAAD,GAA2B,iBAAgB,IAAI,QAAQ,CAACE,MAAgB;AACvE,MAAKhD,EAAW,QAAQ,IAAIgD,EAAY,QAAQ,KAC9CrF,EAAY,KAAK;AAAA,QACf,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,2CAA2CqF,EAAY,QAAQ;AAAA,QACxE,MAAM,WAAW1E,CAAU;AAAA,MAAA,CAC5B;AAAA,IAEL,CAAC,GACDR,GAAgBa,EAAM,WAAW,IAAI,IAAI,CAACsE,MAAWA,EAAO,EAAE,CAAC,EAAE;AAAA,MAAQ,CAACC,MACxEvF,EAAY,KAAK;AAAA,QACf,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,8BAA8BuF,CAAQ;AAAA,QAC/C,MAAM,WAAW5E,CAAU;AAAA,MAAA,CAC5B;AAAA,IAAA,IAEFK,EAAM,WAAW,CAAA,GAAI,QAAQ,CAACsE,GAAQE,MAAgB;AACrD,MAAKnD,EAAW,QAAQ,IAAIiD,EAAO,QAAQ,KACzCtF,EAAY,KAAK;AAAA,QACf,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,2CAA2CsF,EAAO,QAAQ;AAAA,QACnE,MAAM,WAAW3E,CAAU,YAAY6E,CAAW;AAAA,MAAA,CACnD;AAAA,IAEL,CAAC;AAAA,EACH,CAAC,GAEDC,EAAcnD,EAAQ,WAAW;AAAA,IAC/B,MAAM;AAAA,IACN,aAAaE,EAAO;AAAA,IACpB,GAAIxC,EAAY,SAAS,EAAE,WAAW,2BAAA,IAA+B,CAAA;AAAA,EAAC,CACvE,GAEMA,EAAY,SACf,EAAE,OAAO,IAAO,aAAa,OAAO,OAAOA,CAAW,EAAA,IACtD,EAAE,OAAO,IAAM,QAAAwC,GAAQ,aAAa,GAAC;AAC3C;AAEO,SAASkD,GACd9F,GACAyC,GACAC,IAA0C,CAAA,GACzB;AACjB,QAAMqD,IAASvD,GAAwBxC,GAAOyC,GAAYC,CAAO;AACjE,MAAI,CAACqD,EAAO;AACV,UAAM,IAAI5F,GAA+B4F,EAAO,WAAW;AAE7D,SAAOA,EAAO;AAChB;AC/jBA,MAAMC,KAAsB,oBAAI,IAAI,CAAC,aAAa,eAAe,WAAW,CAAC;AAEtE,SAASC,GAAgBC,GAAiB5C,GAAwB;AACvE,SAAKA,IAIEA,EAAK,MAAM,GAAG,EAAE,OAAgB,CAAC6C,GAASC,MAAY;AAC3D,QAAI,GAACA,KAAWJ,GAAoB,IAAII,CAAO,KAAKD,MAAY,QAAQ,OAAOA,KAAY;AAI3F,aAAQA,EAAoCC,CAAO;AAAA,EACrD,GAAGF,CAAM,IATAA;AAUX;ACFO,MAAMG,WAA0B,MAAM;AAAA,EAK3C,YAAYhD,GAAiCiD,GAAmBlC,GAAmBmC,GAAiB;AAClG,UAAMA,CAAO;AALN,IAAAjG,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AAIP,SAAK,OAAO,qBACZ,KAAK,OAAO+C,GACZ,KAAK,YAAYiD,GACjB,KAAK,YAAYlC;AAAA,EACnB;AACF;AAEA,SAASoC,GAAaxG,GAA2B;AAC/C,SAAOA,MAAU,QAAQA,MAAU,MAAO,MAAM,QAAQA,CAAK,KAAKA,EAAM,WAAW;AACrF;AAEO,SAASyG,GACdxD,GACAL,GACA8D,GACAC,GACqC;AACrC,QAAMZ,IAAoC,CAAA;AAE1C,aAAW,CAAC3B,GAAWxD,CAAO,KAAK,OAAO,QAAQqC,EAAQ,SAAS,CAAA,CAAE,GAAG;AACtE,QAAIrC,EAAQ,WAAW,YAAY;AACjC,MAAAmF,EAAO3B,CAAS,IAAIwC,GAAehG,EAAQ,KAAK;AAChD;AAAA,IACF;AAEA,QAAIZ,IAAiB6G,GAAsBjE,GAAQ8D,GAAS9F,EAAQ,UAAU;AAG9E,QAFAZ,IAAQiG,GAAgBjG,GAAOY,EAAQ,MAAM,GAEzCZ,MAAU,QAAW;AACvB,UAAIY,EAAQ,cAAe;AAC3B,YAAM,IAAIyF;AAAA,QACR;AAAA,QACApD,EAAQ;AAAA,QACRmB;AAAA,QACA,eAAenB,EAAQ,EAAE,UAAUmB,CAAS;AAAA,MAAA;AAAA,IAEhD;AACA,QAAI,CAACnE,GAAYD,CAAK;AACpB,YAAM,IAAIqG;AAAA,QACR;AAAA,QACApD,EAAQ;AAAA,QACRmB;AAAA,QACA,eAAenB,EAAQ,EAAE,UAAUmB,CAAS;AAAA,MAAA;AAGhD,QAAIxD,EAAQ,iBAAiB4F,GAAaxG,CAAK;AAC7C;AAGF,UAAM8G,IAAUlG,EAAQ,UAAU+F,EAAO,QAAQ/F,EAAQ,OAAO,EAAE,OAAOZ,GAAO0G,CAAO,IAAI1G;AAC3F,QAAI8G,MAAY,QAAW;AACzB,UAAIlG,EAAQ,cAAe;AAC3B,YAAM,IAAIyF;AAAA,QACR;AAAA,QACApD,EAAQ;AAAA,QACRmB;AAAA,QACA,eAAenB,EAAQ,EAAE,UAAUmB,CAAS,yBAAyBxD,EAAQ,OAAO;AAAA,MAAA;AAAA,IAExF;AACA,IAAAmF,EAAO3B,CAAS,IAAIwC,GAAeE,CAAO;AAAA,EAC5C;AAEA,SAAO,OAAO,OAAOf,CAAM;AAC7B;ACvCO,MAAMgB,WAAqC,MAAM;AAAA,EAMtD,YAAYC,GAAoBC,GAAqBC,GAA2C;AAC9F,UAAM,qCAAqCF,CAAU,IAAIC,CAAW,EAAE;AAN/D,IAAA3G,EAAA,cAAO;AACP,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AAIP,SAAK,OAAO,gCACZ,KAAK,aAAa0G,GAClB,KAAK,cAAcC,GACnB,KAAK,SAASC;AAAA,EAChB;AACF;AAEA,SAASC,KAAiC;AACxC,SAAO,IAAI,aAAa,4BAA4B,YAAY;AAClE;AAEA,SAASC,GAAaC,GAAgBC,GAA8B;AAClE,SAAOA,EAAO,WAAYD,aAAiB,gBAAgBA,EAAM,SAAS;AAC5E;AAEO,SAASE,GACdtE,GACAsB,GACQ;AACR,SAAO,GAAGtB,EAAQ,UAAU,IAAIA,EAAQ,WAAW,IAAInB,GAAoByC,CAAK,CAAC;AACnF;;AAEO,MAAMiD,GAAgB;AAAA,EAQ3B,YACW5E,GACA6E,GACAd,GACAjE,IAAkC,CAAA,GAC3C;AAZO,IAAAgF,EAAA,MAAAC,uBAAa,IAAA;AACb,IAAAD,EAAA,MAAAE,uBAAgB,IAAA;AAChB,IAAAF,EAAA,MAAAG,uBAA2B,IAAA;AAC3B,IAAAH,EAAA,MAAAI,uBAAuB,IAAA;AAChC,IAAAJ,EAAA,MAAAK,IAAW;AACX,IAAAL,EAAA,MAAAM,IAAqB;AAGV,SAAA,SAAApF,GACA,KAAA,YAAA6E,GACA,KAAA,SAAAd,GACA,KAAA,UAAAjE;AAAA,EACR;AAAA,EAEH,MAAM,QACJuF,GACAvB,GACAhE,IAAiC,CAAA,GACA;;AACjC,UAAMO,IAAU,KAAK,OAAO,SAAS,KAAK,CAACiF,MAAcA,EAAU,OAAOD,CAAe;AACzF,QAAI,CAAChF;AACH,YAAM,IAAI,MAAM,0BAA0BgF,CAAe,EAAE;AAG7D,UAAME,IAAezF,EAAQ;AAC7B,QAAIyF,KAAA,QAAAA,EAAc,QAAS,OAAMhB,GAAA;AACjC,UAAM5C,IAAQkC,GAAwBxD,GAAS,KAAK,QAAQyD,GAAS,KAAK,MAAM,GAC1E0B,IAAWb,GAAsBtE,GAASsB,CAAK,GAC/C8D,IAAW3F,EAAQ,YAAY;AACrC,IAAK2F,KAAU,KAAK,cAAcpF,EAAQ,IAAImF,CAAQ;AACtD,UAAME,IAAc,GAAGrF,EAAQ,EAAE,IAAW,EAALsF,EAAA,MAAKP,IAAL,CAAuB,IAExDQ,IAASH,IAAW,SAAYI,EAAA,MAAKd,GAAO,IAAIS,CAAQ;AAC9D,QAAI,CAAC1F,EAAQ,SAAS8F;AACpB,aAAA3C,EAAc,KAAK,QAAQ,WAAW;AAAA,QACpC,MAAM;AAAA,QACN,aAAaa,EAAQ;AAAA,QACrB,WAAW4B;AAAA,QACX,YAAYrF,EAAQ;AAAA,QACpB,aAAaA,EAAQ;AAAA,MAAA,CACtB,GACM,EAAE,GAAGuF,GAAQ,iBAAAP,GAAiB,aAAAK,GAAa,UAAAF,GAAU,OAAA7D,GAAO,WAAW,GAAA;AAGhF,QAAImE,IAAWL,IAAW,SAAYI,EAAA,MAAKb,GAAU,IAAIQ,CAAQ;AAMjE,QALI1F,EAAQ,SAASgG,MACnBA,EAAS,WAAW,MAAA,GACpBD,EAAA,MAAKb,GAAU,OAAOQ,CAAQ,GAC9BM,IAAW,SAETA,GAAU;AACZ,YAAMC,IAAgB,MAAMD,EAAS,WAAW,MAAA;AAChD,MAAAP,KAAA,QAAAA,EAAc,iBAAiB,SAASQ,GAAe,EAAE,MAAM,OAC/D9C,EAAc,KAAK,QAAQ,WAAW;AAAA,QACpC,MAAM;AAAA,QACN,aAAaa,EAAQ;AAAA,QACrB,WAAW4B;AAAA,QACX,YAAYrF,EAAQ;AAAA,QACpB,aAAaA,EAAQ;AAAA,MAAA,CACtB;AACD,UAAI;AAEF,eAAO,EAAE,GADK,MAAMyF,EAAS,SACV,iBAAAT,GAAiB,aAAAK,GAAa,UAAAF,GAAU,OAAA7D,GAAO,WAAW,GAAA;AAAA,MAC/E,UAAA;AACE,QAAA4D,KAAA,QAAAA,EAAc,oBAAoB,SAASQ;AAAA,MAC7C;AAAA,IACF;AAGA,UAAMC,IADW,KAAK,UAAU,QAAQ3F,EAAQ,UAAU,EAC/B,WAAWA,EAAQ,WAAW;AACzD,QAAI,CAAC2F;AACH,YAAM,IAAI,MAAM,iCAAiC3F,EAAQ,UAAU,IAAIA,EAAQ,WAAW,EAAE;AAE9F,UAAM4F,KAAkBhH,IAAA+G,EAAU,gBAAV,gBAAA/G,EAAuB,SAAS0C;AACxD,QAAIsE,KAAmB,CAACA,EAAgB;AACtC,YAAM,IAAI9B,GAA6B9D,EAAQ,YAAYA,EAAQ,aAAa4F,EAAgB,MAAM;AAGxG,UAAMC,IAAY,KAAK,IAAA,GACjBC,IAAa,IAAI,gBAAA;AACvB,IAAIV,KAAUI,EAAA,MAAKZ,GAAqB,IAAIkB,CAAU;AACtD,UAAMC,IAAe,MAAMD,EAAW,MAAA;AACtC,IAAAZ,KAAA,QAAAA,EAAc,iBAAiB,SAASa,GAAc,EAAE,MAAM,OAC9DnD,EAAc,KAAK,QAAQ,WAAW;AAAA,MACpC,MAAM;AAAA,MACN,aAAaa,EAAQ;AAAA,MACrB,WAAW4B;AAAA,MACX,YAAYrF,EAAQ;AAAA,MACpB,aAAaA,EAAQ;AAAA,IAAA,CACtB;AAED,UAAMgG,IAAU,QAAQ,QAAA,EACrB;AAAA,MAAK,MACJL,EAAU,QAAQrE,GAAO;AAAA,QACvB,QAAQwE,EAAW;AAAA,QACnB,WAAWT;AAAA,QACX,UAAU5B,EAAQ;AAAA,QAClB,QAAQA,EAAQ;AAAA,QAChB,MAAM,CAACwC,MAAUrD,EAAc,KAAK,QAAQ,WAAWqD,CAAK;AAAA,MAAA,CAC7D;AAAA,IAAA,EAEF,KAAK,CAACC,MAAgC;AACrC,UAAIJ,EAAW,OAAO,QAAS,OAAM5B,GAAA;AACrC,YAAMiC,IAAQ;AAAA,QACZ,UAAAD;AAAA,QACA,SAAgB,EAALZ,EAAA,MAAKR,IAAL;AAAA,QACX,YAAW,oBAAI,KAAA,GAAO,YAAA;AAAA,MAAY;AAEpC,aAAKM,KAAUI,EAAA,MAAKd,GAAO,IAAIS,GAAUgB,CAAK,GAC9CvD,EAAc,KAAK,QAAQ,WAAW;AAAA,QACpC,MAAM;AAAA,QACN,aAAaa,EAAQ;AAAA,QACrB,WAAW4B;AAAA,QACX,YAAYrF,EAAQ;AAAA,QACpB,aAAaA,EAAQ;AAAA,QACrB,YAAY,KAAK,QAAQ6F;AAAA,MAAA,CAC1B,GACMM;AAAAA,IACT,CAAC,EACA,MAAM,CAAC/B,MAAmB;AACzB,YAAMgC,IAAUjC,GAAaC,GAAO0B,EAAW,MAAM;AACrD,YAAAlD,EAAc,KAAK,QAAQ,WAAW;AAAA,QACpC,MAAMwD,IAAU,sBAAsB;AAAA,QACtC,aAAa3C,EAAQ;AAAA,QACrB,WAAW4B;AAAA,QACX,YAAYrF,EAAQ;AAAA,QACpB,aAAaA,EAAQ;AAAA,QACrB,YAAY,KAAK,IAAA,IAAQ6F;AAAA,QACzB,WAAWO,IAAU,sBAAsB;AAAA,MAAA,CAC5C,GACKhC;AAAA,IACR,CAAC,EACA,QAAQ,MAAM;;AACb,MAAAc,KAAA,QAAAA,EAAc,oBAAoB,SAASa,IACvCX,IACFI,EAAA,MAAKZ,GAAqB,OAAOkB,CAAU,MAClClH,IAAA4G,EAAA,MAAKb,GAAU,IAAIQ,CAAQ,MAA3B,gBAAAvG,EAA8B,aAAYoH,KACnDR,EAAA,MAAKb,GAAU,OAAOQ,CAAQ;AAAA,IAElC,CAAC;AAEH,WAAKC,KAAUI,EAAA,MAAKb,GAAU,IAAIQ,GAAU,EAAE,YAAAW,GAAY,SAAAE,GAAS,GAE5D,EAAE,GADK,MAAMA,GACD,iBAAAhB,GAAiB,aAAAK,GAAa,UAAAF,GAAU,OAAA7D,GAAO,WAAW,GAAA;AAAA,EAC/E;AAAA,EAEA,kBAAkB0D,GAA+B;;AAC/C,eAAWqB,KAAOb,EAAA,MAAKX,GAAiB,IAAIG,CAAe,KAAK;AAC9D,MAAAQ,EAAA,MAAKd,GAAO,OAAO2B,CAAG,IACtBzH,IAAA4G,EAAA,MAAKb,GAAU,IAAI0B,CAAG,MAAtB,QAAAzH,EAAyB,WAAW,SACpC4G,EAAA,MAAKb,GAAU,OAAO0B,CAAG;AAE3B,IAAAb,EAAA,MAAKX,GAAiB,OAAOG,CAAe;AAAA,EAC9C;AAAA,EAEA,QAAc;AACZ,IAAAQ,EAAA,MAAKb,GAAU,QAAQ,CAAC,EAAE,YAAAmB,QAAiBA,EAAW,OAAO,GAC7DN,EAAA,MAAKZ,GAAqB,QAAQ,CAACkB,MAAeA,EAAW,OAAO,GACpEN,EAAA,MAAKb,GAAU,MAAA,GACfa,EAAA,MAAKZ,GAAqB,MAAA,GAC1BY,EAAA,MAAKd,GAAO,MAAA,GACZc,EAAA,MAAKX,GAAiB,MAAA;AAAA,EACxB;AAAA,EAEQ,cAAcG,GAAyBG,GAAwB;AACrE,UAAMmB,IAAOd,EAAA,MAAKX,GAAiB,IAAIG,CAAe,yBAAS,IAAA;AAC/D,IAAAsB,EAAK,IAAInB,CAAQ,GACjBK,EAAA,MAAKX,GAAiB,IAAIG,GAAiBsB,CAAI;AAAA,EACjD;AACF;AAzKW5B,IAAA,eACAC,IAAA,eACAC,IAAA,eACAC,IAAA,eACTC,KAAA,eACAC,KAAA;AC1DK,SAASwB,KAAuC;AACrD,SAAO;AAAA,IACL,WAAW,IAAIC,EAA6B,cAAc;AAAA,IAC1D,cAAc,IAAIA,EAAmC,oBAAoB;AAAA,IACzE,UAAU,IAAIA,EAAqC,sBAAsB;AAAA,IACzE,qBAAqB,IAAIA,EAAgD,iCAAiC;AAAA,IAC1G,SAAS,IAAIA,EAAoC,qBAAqB;AAAA,IACtE,SAAS,IAAIA,EAAoC,qBAAqB;AAAA,IACtE,oBAAoBC,GAAA;AAAA,EAAgC;AAExD;AC5BO,SAASC,GAAqBlH,GAA4C;AAC/E,SAAAA,EAAW,SAAS,aAAamH,EAAiB,GAClDnH,EAAW,oBAAoB,aAAaoH,EAA6B,GAClEpH;AACT;AAEO,SAASqH,KAA+C;AAC7D,SAAOH,GAAqBH,IAAsB;AACpD;ACFO,MAAMO,UAA+B,MAAM;AAAA,EAIhD,YAAYC,GAAiBzD,GAAiB;AAC5C,UAAMA,CAAO;AAJN,IAAAjG,EAAA,cAAO;AACP,IAAAA,EAAA;AAIP,SAAK,OAAO,0BACZ,KAAK,UAAU0J;AAAA,EACjB;AACF;AAEA,SAASC,GAAoBjK,GAAkBgK,GAAyB;AACtE,QAAMjE,IACJ,OAAO/F,KAAU,WAAWA,IAAQ,OAAOA,KAAU,YAAYA,EAAM,WAAW,KAAK,OAAOA,CAAK,IAAI,OAAO;AAChH,MAAI,CAAC,OAAO,SAAS+F,CAAM;AACzB,UAAM,IAAIgE,EAAuBC,GAAS,iDAAiDA,CAAO,GAAG;AAEvG,SAAOjE;AACT;AAEA,SAASmE,GAAgBlK,GAAwB;AAC/C,QAAMmK,IAAQ,4BAA4B,KAAKnK,CAAK;AACpD,MAAI,CAACmK,EAAO,QAAO;AACnB,QAAMC,IAAO,OAAOD,EAAM,CAAC,CAAC,GACtBE,IAAQ,OAAOF,EAAM,CAAC,CAAC,GACvBG,IAAM,OAAOH,EAAM,CAAC,CAAC,GACrBI,IAAO,IAAI,KAAK,KAAK,IAAIH,GAAMC,IAAQ,GAAGC,CAAG,CAAC;AACpD,SAAOC,EAAK,qBAAqBH,KAAQG,EAAK,kBAAkBF,IAAQ,KAAKE,EAAK,WAAA,MAAiBD;AACrG;AAEO,MAAME,KAAkE,OAAO,OAAO;AAAA,EAC3F;AAAA,IACE,IAAI;AAAA,IACJ,OAAOxK,GAAO;AACZ,UAAI,OAAOA,KAAU,SAAU,QAAOA;AACtC,UAAI,OAAOA,KAAU,YAAY,OAAOA,KAAU,UAAW,QAAO,OAAOA,CAAK;AAChF,YAAM,IAAI+J,EAAuB,UAAU,sCAAsC;AAAA,IACnF;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,IAAI;AAAA,IACJ,OAAO/J,GAAO;AACZ,aAAOiK,GAAoBjK,GAAO,QAAQ;AAAA,IAC5C;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,IAAI;AAAA,IACJ,OAAOA,GAAO;AACZ,UAAI,OAAOA,KAAU,UAAW,QAAOA;AACvC,UAAIA,MAAU,OAAQ,QAAO;AAC7B,UAAIA,MAAU,QAAS,QAAO;AAC9B,YAAM,IAAI+J,EAAuB,WAAW,uCAAuC;AAAA,IACrF;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,IAAI;AAAA,IACJ,OAAO/J,GAAO;AACZ,UAAI,CAAC,MAAM,QAAQA,CAAK;AACtB,cAAM,IAAI+J,EAAuB,gBAAgB,yBAAyB;AAE5E,aAAO/J,EAAM,IAAI,CAACoD,MAAS;AACzB,YAAI,OAAOA,KAAS,YAAY,OAAOA,KAAS,YAAY,OAAOA,KAAS;AAC1E,iBAAO,OAAOA,CAAI;AAEpB,cAAM,IAAI2G,EAAuB,gBAAgB,yCAAyC;AAAA,MAC5F,CAAC;AAAA,IACH;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,IAAI;AAAA,IACJ,OAAO/J,GAAO;AACZ,UAAI,CAAC,MAAM,QAAQA,CAAK;AACtB,cAAM,IAAI+J,EAAuB,gBAAgB,yBAAyB;AAE5E,aAAO/J,EAAM,IAAI,CAACoD,MAAS6G,GAAoB7G,GAAM,cAAc,CAAC;AAAA,IACtE;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,IAAI;AAAA,IACJ,OAAOpD,GAAO;;AACZ,UAAI,OAAOA,KAAU;AACnB,cAAM,IAAI+J,EAAuB,YAAY,kCAAkC;AAEjF,YAAMU,KAAW5I,IAAA,uBAAuB,KAAK7B,CAAK,MAAjC,gBAAA6B,EAAqC;AACtD,UAAI4I,GAAU;AACZ,YAAIP,GAAgBO,CAAQ,EAAG,QAAOA;AACtC,cAAM,IAAIV,EAAuB,YAAY,0CAA0C;AAAA,MACzF;AACA,YAAMW,IAAS,IAAI,KAAK1K,CAAK;AAC7B,UAAI,OAAO,MAAM0K,EAAO,QAAA,CAAS;AAC/B,cAAM,IAAIX,EAAuB,YAAY,yCAAyC;AAExF,aAAOW,EAAO,YAAA,EAAc,MAAM,GAAG,EAAE;AAAA,IACzC;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,IAAI;AAAA,IACJ,OAAO1K,GAAO;AACZ,UAAI,CAACC,GAAYD,CAAK;AACpB,cAAM,IAAI+J,EAAuB,QAAQ,iCAAiC;AAE5E,aAAO/J;AAAA,IACT;AAAA,EAAA;AAEJ,CAAC;AAEM,SAAS0J,KAAqE;AACnF,SAAO,IAAID,EAAkC,mBAAmB,EAAE,aAAae,EAA6B;AAC9G;AC7GA,SAASN,GAAgBlK,GAAwB;AAC/C,QAAMmK,IAAQ,4BAA4B,KAAKnK,CAAK;AACpD,MAAI,CAACmK,EAAO,QAAO;AACnB,QAAMC,IAAO,OAAOD,EAAM,CAAC,CAAC,GACtBE,IAAQ,OAAOF,EAAM,CAAC,CAAC,GACvBG,IAAM,OAAOH,EAAM,CAAC,CAAC,GACrBI,IAAO,IAAI,KAAK,KAAK,IAAIH,GAAMC,IAAQ,GAAGC,CAAG,CAAC;AACpD,SAAOC,EAAK,qBAAqBH,KAAQG,EAAK,kBAAkBF,IAAQ,KAAKE,EAAK,WAAA,MAAiBD;AACrG;AAEA,SAASK,GAAc3K,GAAgB4K,GAAmD;AACxF,MAAI,OAAO5K,KAAU,SAAU;AAC/B,MAAI4K,MAAa,UAAUV,GAAgBlK,CAAK,EAAG,QAAOA;AAC1D,QAAM0K,IAAS,IAAI,KAAK1K,CAAK;AAC7B,MAAI,QAAO,MAAM0K,EAAO,QAAA,CAAS;AACjC,WAAOE,MAAa,SAASF,EAAO,YAAA,EAAc,MAAM,GAAG,EAAE,IAAIA,EAAO,YAAA;AAC1E;AAEA,SAASG,GAAoB7K,GAAgBa,GAAgD;AAC3F,MAAI,EAAAb,KAAU,QAA+BA,MAAU,KAIvD;AAAA,YAAQa,EAAM,QAAA;AAAA,MACZ,KAAK,iBAAiB;AACpB,YAAI,OAAOb,KAAU,YAAY,OAAO,SAASA,CAAK,EAAG,QAAOA;AAChE,YAAI,OAAOA,KAAU,SAAU;AAC/B,cAAM0K,IAAS,OAAO1K,CAAK;AAC3B,eAAO,OAAO,SAAS0K,CAAM,IAAIA,IAAS;AAAA,MAC5C;AAAA,MACA,KAAK;AACH,eAAI,OAAO1K,KAAU,YAAkBA,IAChCA,MAAU,SAAS,KAAOA,MAAU,UAAU,KAAQ;AAAA,MAC/D,KAAK;AACH,eAAOa,EAAM,aAAa,UAAUA,EAAM,aAAa,aACnD8J,GAAc3K,GAAOa,EAAM,QAAQ,IACnC;AAAA,IAAA;AAGR,YAAQA,EAAM,UAAA;AAAA,MACZ,KAAK;AACH,eAAO,OAAOb,KAAU,WAAWA,IAAQ;AAAA,MAC7C,KAAK;AACH,eAAO,OAAOA,KAAU,YAAY,OAAO,SAASA,CAAK,IAAIA,IAAQ;AAAA,MACvE,KAAK;AACH,eAAO,OAAOA,KAAU,YAAYA,IAAQ;AAAA,MAC9C,KAAK;AAAA,MACL,KAAK;AACH,eAAO2K,GAAc3K,GAAOa,EAAM,QAAQ;AAAA,IAAA;AAAA;AAEhD;AAEO,SAASiK,GACdC,GACA5H,GACA6H,IAAuD,CAAA,GAC3B;AAC5B,QAAM5K,IAAmC,CAAC,GAAG4K,CAAkB,GACzDC,IAAOF,EAAc,IAAI,CAAC7C,GAAWgD,MAAa;AACtD,UAAMhF,IACJgC,MAAc,QAAQ,OAAOA,KAAc,YAAY,CAAC,MAAM,QAAQA,CAAS,IAAIA,IAAY,QAC3FiD,IAAkC,CAAA;AAExC,eAAWtK,KAASsC,EAAQ,QAAQ;AAClC,YAAMiI,IAAWlF,IAASD,GAAgBC,GAAQrF,EAAM,cAAcA,EAAM,GAAG,IAAI,QAC7Eb,IAAQ6K,GAAoBO,GAAUvK,CAAK;AACjD,MAAIb,MAAU,UACZI,EAAY,KAAK;AAAA,QACf,OAAOS,EAAM,WAAW,UAAU;AAAA,QAClC,MAAMA,EAAM,WAAW,mCAAmC;AAAA,QAC1D,SAAS,WAAWsC,EAAQ,EAAE,QAAQ+H,IAAW,CAAC,6BAA6BrK,EAAM,GAAG;AAAA,QACxF,OAAOA,EAAM;AAAA,QACb,UAAAqK;AAAA,MAAA,CACD,GACDC,EAAOtK,EAAM,GAAG,IAAI,QAEpBsK,EAAOtK,EAAM,GAAG,IAAIb;AAAA,IAExB;AAEA,WAAO,OAAO,OAAOmL,CAAM;AAAA,EAC7B,CAAC;AAED,SAAO;AAAA,IACL,MAAM,OAAO,OAAOF,CAAI;AAAA,IACxB,aAAa,OAAO,OAAO7K,CAAW;AAAA,EAAA;AAE1C;ACxDO,MAAMiL,UAA8B,MAAM;AAAA,EAK/C,YAAYC,GAAmBjI,GAAckD,GAAiBnG,IAAgD,CAAA,GAAI;AAChH,UAAMmG,CAAO;AALN,IAAAjG,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AAIP,SAAK,OAAO,yBACZ,KAAK,YAAYgL,GACjB,KAAK,OAAOjI,GACZ,KAAK,cAAcjD;AAAA,EACrB;AACF;ACnBA,SAASmL,GAAoBpI,GAAwB;AACnD,SAAIA,EAAQ,MAAM,SAAS,WAClB,CAAC,CAAC,WAAWA,EAAQ,KAAK,CAAC,IAE7B,OAAO,QAAQA,EAAQ,MAAM,MAAM;AAC5C;AAEA,SAASqI,GAAgBxL,GAAgBsL,GAA2C;AAClF,MAAItL,KAAU,aAAoC,CAAA;AAClD,MAAI,MAAM,QAAQA,CAAK,EAAG,QAAOA;AACjC,MAAI,OAAOA,KAAU,SAAU,QAAO,CAACA,CAAK;AAC5C,QAAM,IAAIqL;AAAA,IACRC;AAAA,IACA;AAAA,IACA,WAAWA,CAAS;AAAA,EAAA;AAExB;AAEA,SAASG,GAAgBC,GAAqD;AAC5E,QAAMC,IAAaD,EAAO,IAAI,CAACnH,MAAU,KAAK,MAAMA,EAAM,UAAU,SAAS,CAAC,EAAE,OAAO,OAAO,QAAQ;AACtG,SAAOoH,EAAW,SAAS,IAAI,KAAK,KAAK,IAAI,GAAGA,CAAU,CAAC,EAAE,YAAA,KAAgB,oBAAI,KAAA,GAAO,YAAA;AAC1F;;AAEO,MAAMC,GAAc;AAAA,EAIzB,YACWhJ,GACAiJ,GACAC,GACApJ,IAAgC,CAAA,GACzC;AARO,IAAAgF,EAAA,MAAAqE,uBAAoB,IAAA;AACpB,IAAArE,EAAA,MAAAsE,uBAA4B,IAAA;AAG1B,SAAA,SAAApJ,GACA,KAAA,kBAAAiJ,GACA,KAAA,eAAAC,GACA,KAAA,UAAApJ;AAAA,EACR;AAAA,EAEH,MAAM,IAAI4I,GAAmB5E,GAA2BhE,IAA6B,CAAA,GAA4B;;AAC/G,QAAIgE,EAAQ,gBAAgB,KAAK,OAAO;AACtC,YAAM,IAAI2E;AAAA,QACRC;AAAA,QACA;AAAA,QACA,oBAAoB5E,EAAQ,WAAW,kCAAkC,KAAK,OAAO,EAAE;AAAA,MAAA;AAG3F,UAAMvD,IAAU,KAAK,OAAO,SAAS,KAAK,CAAC+E,MAAcA,EAAU,OAAOoD,CAAS;AACnF,QAAI,CAACnI;AACH,YAAM,IAAIkI,EAAsBC,GAAW,qBAAqB,sBAAsBA,CAAS,EAAE;AAGnG,UAAMxC,IAAY,KAAK,IAAA,GACjBT,IAAW3F,EAAQ,YAAY;AACrC,QAAI;AACF,YAAMuJ,IAAiB,MAAM,QAAQ;AAAA,QACnCV,GAAoBpI,CAAO,EAAE,IAAI,OAAO,CAAC+I,GAAM3H,CAAK,MAAqC;AACvF,gBAAM4H,IAAY,MAAM,KAAK,gBAAgB,QAAQ5H,EAAM,WAAWmC,GAAShE,CAAO,GAChF1C,IAAQiG,GAAgBkG,EAAU,UAAU5H,EAAM,YAAY;AACpE,cAAIA,EAAM,gBAAgBvE,MAAU;AAClC,kBAAM,IAAIqL;AAAA,cACRlI,EAAQ;AAAA,cACR;AAAA,cACA,WAAWA,EAAQ,EAAE,UAAU+I,CAAI,wBAAwB3H,EAAM,YAAY;AAAA,cAC7E;AAAA,gBACE;AAAA,kBACE,OAAO;AAAA,kBACP,MAAM;AAAA,kBACN,SAAS,gCAAgCA,EAAM,YAAY;AAAA,kBAC3D,WAAW2H;AAAA,gBAAA;AAAA,cACb;AAAA,YACF;AAGJ,iBAAO;AAAA,YACL,MAAAA;AAAA,YACA,WAAW3H,EAAM;AAAA,YACjB,GAAIA,EAAM,eAAe,EAAE,cAAcA,EAAM,aAAA,IAAiB,CAAA;AAAA,YAChE,WAAA4H;AAAA,YACA,OAAAnM;AAAA,UAAA;AAAA,QAEJ,CAAC;AAAA,MAAA,GAGGoM,IAAkB,OAAO;AAAA,QAC7B,OAAO,YAAYH,EAAe,IAAI,CAAC1H,MAAU,CAACA,EAAM,WAAWA,EAAM,UAAU,OAAO,CAAC,CAAC;AAAA,MAAA,GAExF6D,IAAWtG,GAAoB;AAAA,QACnC,WAAWqB,EAAQ;AAAA,QACnB,iBAAAiJ;AAAA,QACA,eAAejJ,EAAQ,iBAAiB;AAAA,MAAA,CAC5B;AACd,MAAKkF,KAAU,KAAK,cAAclF,EAAQ,IAAIiF,CAAQ;AAEtD,YAAMI,IAASH,IAAW,SAAYI,EAAA,MAAKsD,GAAc,IAAI3D,CAAQ;AACrE,UAAI,CAAC1F,EAAQ,SAAS8F;AACpB,eAAA3C,EAAc,KAAK,QAAQ,WAAW;AAAA,UACpC,MAAM;AAAA,UACN,aAAaa,EAAQ;AAAA,UACrB,WAAWvD,EAAQ;AAAA,QAAA,CACpB,GACMqF;AAGT,YAAM6D,IAAc,OAAO,OAAO,OAAO,YAAYJ,EAAe,IAAI,CAAC1H,MAAU,CAACA,EAAM,MAAMA,EAAM,KAAK,CAAC,CAAC,CAAC;AAC9G,UAAIwG,GACAuB,IAA2D,CAAA;AAE/D,UAAInJ,EAAQ,eAAe;AACzB,cAAMoJ,IAAc,KAAK,aAAa,QAAQpJ,EAAQ,aAAa,EAAE,UAAUkJ,GAAa;AAAA,UAC1F,WAAWlJ,EAAQ;AAAA,UACnB,UAAUuD,EAAQ;AAAA,UAClB,QAAQA,EAAQ;AAAA,QAAA,CACjB;AACD,YAAI,CAAC,MAAM,QAAQ6F,EAAY,IAAI;AACjC,gBAAM,IAAIlB;AAAA,YACRlI,EAAQ;AAAA,YACR;AAAA,YACA,uBAAuBA,EAAQ,aAAa;AAAA,UAAA;AAGhD,QAAA4H,IAAgBwB,EAAY,MAC5BD,IAAyBC,EAAY,eAAe,CAAA;AAAA,MACtD,OAAO;AACL,YAAIpJ,EAAQ,MAAM,SAAS;AACzB,gBAAM,IAAIkI;AAAA,YACRlI,EAAQ;AAAA,YACR;AAAA,YACA,WAAWA,EAAQ,EAAE;AAAA,UAAA;AAGzB,QAAA4H,IAAgBS,IAAgB3J,IAAAoK,EAAe,CAAC,MAAhB,gBAAApK,EAAmB,OAAOsB,EAAQ,EAAE;AAAA,MACtE;AAEA,YAAMqJ,IAAa1B,GAAqBC,GAAe5H,GAASmJ,CAAsB;AACtF,UAAIE,EAAW,YAAY,KAAK,CAACnM,MAAeA,EAAW,UAAU,OAAO;AAC1E,cAAM,IAAIgL;AAAA,UACRlI,EAAQ;AAAA,UACR;AAAA,UACA,WAAWA,EAAQ,EAAE;AAAA,UACrBqJ,EAAW;AAAA,QAAA;AAIf,YAAMzG,IAAwB,OAAO,OAAO;AAAA,QAC1C,WAAW5C,EAAQ;AAAA,QACnB,QAAQ,OAAO,OAAO,CAAC,GAAGA,EAAQ,MAAM,CAAC;AAAA,QACzC,MAAMqJ,EAAW;AAAA,QACjB,WAAWf,GAAgBQ,CAAc;AAAA,QACzC,iBAAAG;AAAA,QACA,aAAaI,EAAW;AAAA,MAAA,CACzB;AACD,aAAKnE,KAAUI,EAAA,MAAKsD,GAAc,IAAI3D,GAAUrC,CAAM,GACtDF,EAAc,KAAK,QAAQ,WAAW;AAAA,QACpC,MAAM;AAAA,QACN,aAAaa,EAAQ;AAAA,QACrB,WAAWvD,EAAQ;AAAA,QACnB,YAAY,KAAK,QAAQ2F;AAAA,MAAA,CAC1B,GACM/C;AAAA,IACT,SAASsB,GAAO;AACd,YAAAxB,EAAc,KAAK,QAAQ,WAAW;AAAA,QACpC,MAAM;AAAA,QACN,aAAaa,EAAQ;AAAA,QACrB,WAAA4E;AAAA,QACA,YAAY,KAAK,IAAA,IAAQxC;AAAA,QACzB,WAAWzB,aAAiBgE,IAAwBhE,EAAM,OAAO;AAAA,MAAA,CAClE,GACKA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,QAAQiE,GAAmB5E,GAA2BY,GAA8C;AACxG,UAAMnE,IAAU,KAAK,OAAO,SAAS,KAAK,CAAC+E,MAAcA,EAAU,OAAOoD,CAAS;AACnF,QAAI,CAACnI;AACH,YAAM,IAAIkI,EAAsBC,GAAW,qBAAqB,sBAAsBA,CAAS,EAAE;AAEnG,SAAK,kBAAkBA,CAAS;AAChC,eAAW,CAAA,EAAG/G,CAAK,KAAKgH,GAAoBpI,CAAO;AACjD,WAAK,gBAAgB,kBAAkBoB,EAAM,SAAS;AAExD,WAAO,KAAK,IAAI+G,GAAW5E,GAAS,EAAE,GAAIY,IAAS,EAAE,QAAAA,EAAA,IAAW,CAAA,GAAK,OAAO,IAAM;AAAA,EACpF;AAAA,EAEA,kBAAkBgE,GAAyB;AACzC,eAAWhC,KAAOb,EAAA,MAAKuD,GAAsB,IAAIV,CAAS,KAAK;AAC7D,MAAA7C,EAAA,MAAKsD,GAAc,OAAOzC,CAAG;AAE/B,IAAAb,EAAA,MAAKuD,GAAsB,OAAOV,CAAS;AAAA,EAC7C;AAAA,EAEA,QAAc;AACZ,IAAA7C,EAAA,MAAKsD,GAAc,MAAA,GACnBtD,EAAA,MAAKuD,GAAsB,MAAA,GAC3B,KAAK,gBAAgB,MAAA;AAAA,EACvB;AAAA,EAEQ,cAAcV,GAAmBlD,GAAwB;AAC/D,UAAMmB,IAAOd,EAAA,MAAKuD,GAAsB,IAAIV,CAAS,yBAAS,IAAA;AAC9D,IAAA/B,EAAK,IAAInB,CAAQ,GACjBK,EAAA,MAAKuD,GAAsB,IAAIV,GAAW/B,CAAI;AAAA,EAChD;AACF;AA7KWwC,IAAA,eACAC,IAAA;;ACpCJ,MAAMS,GAAqB;AAAA,EAOhC,YAAY/J,GAAsC;AANzC,IAAApC,EAAA;AACA,IAAAA,EAAA;AACA,IAAAoH,EAAA,MAAAgF;AACA,IAAAhF,EAAA,MAAAiF;AACA,IAAAjF,EAAA,MAAAkF;AAGP,QAAI;AACF,UAAI,KAAK,eAAelK,EAAQ,QAAQ,EAAE,UAAUA,EAAQ,SAAA,CAAU,EAAE,OAAO,CAAC;AAAA,IAClF,QAAQ;AACN,YAAM,IAAI,UAAU,+BAA+BA,EAAQ,MAAM,IAAIA,EAAQ,QAAQ,EAAE;AAAA,IACzF;AACA,IAAAmK,EAAA,MAAKH,IAAchK,EAAQ,aAC3BmK,EAAA,MAAKD,IAAalK,EAAQ;AAC1B,UAAMoK,IAAmBpK,EAAQ,YAAY,EAAE,WAAWA,EAAQ,UAAA,IAAc,CAAA;AAChF,SAAK,SAASoD,GAAsBpD,EAAQ,QAAQA,EAAQ,YAAYoK,CAAgB,GACxFD,EAAA,MAAKF,IAAmB,EAAE,UAAUjK,EAAQ,UAAU,QAAQA,EAAQ,OAAA;AACtE,UAAMmJ,IAAkB,IAAIrE;AAAA,MAC1B,KAAK;AAAA,MACL9E,EAAQ,WAAW;AAAA,MACnBA,EAAQ,WAAW;AAAA,MACnBoK;AAAA,IAAA;AAEF,SAAK,gBAAgB,IAAIlB;AAAA,MACvB,KAAK;AAAA,MACLC;AAAA,MACAnJ,EAAQ,WAAW;AAAA,MACnBoK;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEA,cAAcjK,GAA0E;AACtF,WAAOkK,GAAuB,KAAK,QAAQ;AAAA,MACzC,GAAGtE,EAAA,MAAKkE;AAAA,MACR,GAAI9J,IAAY,EAAE,WAAAA,MAAc,CAAA;AAAA,IAAC,CAClC;AAAA,EACH;AAAA,EAEA,eACEmK,GACAnK,GAC+B;AAC/B,WAAOoK;AAAA,MACL,KAAK;AAAA,MACLD;AAAA,MACA,EAAE,GAAGvE,EAAA,MAAKkE,KAAkB,GAAI9J,IAAY,EAAE,WAAAA,EAAA,IAAc,GAAC;AAAA,MAC7D4F,EAAA,MAAKmE;AAAA,IAAA;AAAA,EAET;AAAA,EAEA,WAAWtB,GAAmB5E,GAA2BhE,GAAqD;AAC5G,WAAO,KAAK,cAAc,IAAI4I,GAAW5E,GAAShE,CAAO;AAAA,EAC3D;AAAA,EAEA,eAAe4I,GAAmB5E,GAA2BY,GAA8C;AACzG,WAAO,KAAK,cAAc,QAAQgE,GAAW5E,GAASY,CAAM;AAAA,EAC9D;AAAA,EAEA,QAAc;AACZ,SAAK,cAAc,MAAA;AAAA,EACrB;AAAA,EAEA,IAAI,aAA6B;AAC/B,WAAOmB,EAAA,MAAKiE;AAAA,EACd;AACF;AA/DWA,KAAA,eACAC,KAAA,eACAC,KAAA;AA+DJ,SAASM,GAA2BxK,GAA4D;AACrG,SAAO,IAAI+J,GAAqB/J,CAAO;AACzC;AClFA,SAASyK,GAAqBhK,GAAkC;AAC9D,SAAOA,EAAQ,MAAM,SAAS,WAC1B,CAACA,EAAQ,MAAM,SAAS,IACxB,OAAO,OAAOA,EAAQ,MAAM,MAAM,EAAE,IAAI,CAACoB,MAAUA,EAAM,SAAS;AACxE;AAEA,SAAS6I,GAAYC,GAA+B/D,GAAatJ,GAAqB;AACpF,QAAMQ,IAAS6M,EAAI,IAAI/D,CAAG,yBAAS,IAAA;AACnC,EAAA9I,EAAO,IAAIR,CAAK,GAChBqN,EAAI,IAAI/D,GAAK9I,CAAM;AACrB;AAEO,SAAS8M,GAA+B1K,GAAmD;AAChG,QAAM2K,wBAA4B,IAAA,GAC5BC,wBAA4B,IAAA,GAC5BC,wBAA0B,IAAA,GAC1BC,wBAAyB,IAAA;AAE/B,SAAA9K,EAAO,SAAS,QAAQ,CAACO,MAAY;AACnC,UAAMH,IAAa,IAAI,IAAImK,GAAqBhK,CAAO,CAAC;AACxD,IAAAoK,EAAsB,IAAIpK,EAAQ,IAAIH,CAAU,GAChDA,EAAW,QAAQ,CAACsD,MAAc8G,GAAYI,GAAuBlH,GAAWnD,EAAQ,EAAE,CAAC;AAAA,EAC7F,CAAC,GACDP,EAAO,OAAO,QAAQ,CAACxB,MAAU;AAC/B,IAAAsM,EAAmB,IAAItM,EAAM,IAAIA,EAAM,QAAQ,SAAS,GACxDgM,GAAYK,GAAqBrM,EAAM,QAAQ,WAAWA,EAAM,EAAE;AAAA,EACpE,CAAC,GAEM,OAAO,OAAO;AAAA,IACnB,uBAAAmM;AAAA,IACA,uBAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,oBAAAC;AAAA,EAAA,CACD;AACH;AAEO,SAASC,GACdC,GACA5K,GACa;AACb,QAAM6K,wBAAiB,IAAA;AACvB,SAAA7K,EAAW;AAAA,IAAQ,CAACsD,MAAA;;AAClB,cAAAzE,IAAA+L,EAAM,sBAAsB,IAAItH,CAAS,MAAzC,gBAAAzE,EAA4C,QAAQ,CAACyJ,MAAcuC,EAAW,IAAIvC,CAAS;AAAA;AAAA,EAAC,GAEvFuC;AACT;AAEO,SAASC,GACdF,GACAC,GACa;AACb,QAAME,wBAAe,IAAA;AACrB,SAAAF,EAAW;AAAA,IAAQ,CAACvC,MAAA;;AAClB,cAAAzJ,IAAA+L,EAAM,oBAAoB,IAAItC,CAAS,MAAvC,gBAAAzJ,EAA0C,QAAQ,CAACmM,MAAYD,EAAS,IAAIC,CAAO;AAAA;AAAA,EAAC,GAE/ED;AACT;AClCA,SAASE,KAAc;AACrB,UAAO,oBAAI,KAAA,GAAO,YAAA;AACpB;AAEA,SAASC,GAAe7G,GAAgB8G,GAAoC;AAC1E,QAAMjG,IAAYb;AAClB,SAAO,OAAO,OAAO;AAAA,IACnB,MAAM,QAAOa,KAAA,gBAAAA,EAAW,SAAS,WAAWA,EAAU,OAAOiG;AAAA,IAC7D,SAAS,QAAOjG,KAAA,gBAAAA,EAAW,YAAY,WAAWA,EAAU,UAAU,OAAOb,CAAK;AAAA,IAClF,OAAOA;AAAA,EAAA,CACR;AACH;AAEA,SAASD,GAAaC,GAAyB;AAC7C,SAAOA,aAAiB,gBAAgBA,EAAM,SAAS;AACzD;AAEA,SAAS+G,GAAmCC,GAA6D;AACvG,SAAO,OAAO,OAAO,OAAO,YAAYA,CAAM,CAAC;AACjD;;AAgBO,MAAMC,GAAiB;AAAA,EAiB5B,YAAqB5L,GAAkC;AAhB9C,IAAApC,EAAA;AACA,IAAAA,EAAA;AACA,IAAAoH,EAAA,MAAA6G,uBAAiB,IAAA;AACjB,IAAA7G,EAAA,MAAA8G,uBAAqB,IAAA;AACrB,IAAA9G,EAAA,MAAA+G,uBAAqB,IAAA;AACrB,IAAA/G,EAAA,MAAAgH,uBAAmB,IAAA;AACnB,IAAAhH,EAAA,MAAAiH,uBAAsB,IAAA;AACtB,IAAAjH,EAAA,MAAAkH,uBAAkB,IAAA;AAC3B,IAAAlH,EAAA,MAAAmH;AACA,IAAAnH,EAAA,MAAAoH,GAAc;AACd,IAAApH,EAAA,MAAAqH,IAAmB;AACnB,IAAArH,EAAA,MAAAsH;AACA,IAAAtH,EAAA,MAAAuH,uBAAwB,IAAA;AACxB,IAAAvH,EAAA,MAAAwH,GAA4B;AAC5B,IAAAxH,EAAA,MAAAyH,GAAa;AAEQ,SAAA,UAAAzM,GACnB,KAAK,cAAc,IAAI+J,GAAqB/J,CAAO,GACnD,KAAK,QAAQ4K,GAA+B,KAAK,YAAY,MAAM,GACnET,EAAA,MAAKgC,GAAW,KAAK,YAAY,cAAcnM,EAAQ,SAAS,IAChE,KAAK,YAAY,OAAO,SAAS;AAAA,MAAQ,CAACO,MACxCwF,EAAA,MAAK+F,GAAe,IAAIvL,EAAQ,IAAI,EAAE,IAAIA,EAAQ,IAAI,QAAQ,QAAQ,YAAY,GAAG;AAAA,IAAA,GAEvF,KAAK,YAAY,OAAO,SAAS;AAAA,MAAQ,CAACE,MACxCsF,EAAA,MAAKgG,GAAe,IAAItL,EAAQ,IAAI,EAAE,IAAIA,EAAQ,IAAI,QAAQ,QAAQ,YAAY,GAAG;AAAA,IAAA,GAEvF,KAAK,YAAY,OAAO,OAAO;AAAA,MAAQ,CAAC/B,MACtCqH,EAAA,MAAKiG,GAAa,IAAItN,EAAM,IAAI,EAAE,IAAIA,EAAM,IAAI,QAAQ,QAAQ,YAAY,GAAG,cAAc,IAAO;AAAA,IAAA;AAAA,EAExG;AAAA,EAEA,IAAI,SAAS;AACX,WAAO,KAAK,YAAY;AAAA,EAC1B;AAAA,EAEA,IAAI,UAA4B;AAC9B,WAAOqH,EAAA,MAAKoG;AAAA,EACd;AAAA,EAEA,IAAI,WAAqC;AACvC,WAAO,OAAO,OAAO;AAAA,MACnB,YAAYpG,EAAA,MAAKqG;AAAA,MACjB,iBAAiB,GAAQrG,EAAA,MAAKuG,MAAqBvG,EAAA,MAAKyG;AAAA,MACxD,SAASzG,EAAA,MAAKoG;AAAA,MACd,eAAeT,GAAS3F,EAAA,MAAK+F,EAAc;AAAA,MAC3C,eAAeJ,GAAS3F,EAAA,MAAKgG,EAAc;AAAA,MAC3C,aAAaL,GAAS3F,EAAA,MAAKiG,EAAY;AAAA,IAAA,CACxC;AAAA,EACH;AAAA,EAEA,UAAUU,GAAgD;AACxD,WAAA3G,EAAA,MAAK8F,GAAW,IAAIa,CAAQ,GACrB,MAAM3G,EAAA,MAAK8F,GAAW,OAAOa,CAAQ;AAAA,EAC9C;AAAA,EAEA,OAA0C;AACxC,WAAO,KAAK,SAAS,IAAI,IAAI,KAAK,OAAO,SAAS,IAAI,CAACjM,MAAYA,EAAQ,EAAE,CAAC,GAAG,EAAK;AAAA,EACxF;AAAA,EAEA,aAAgD;AAC9C,WAAO,KAAK,SAAS,IAAI,IAAI,KAAK,OAAO,SAAS,IAAI,CAACA,MAAYA,EAAQ,EAAE,CAAC,GAAG,EAAI;AAAA,EACvF;AAAA,EAEA,eAAemI,GAAsD;AACnE,UAAMtI,IAAa,KAAK,MAAM,sBAAsB,IAAIsI,CAAS;AACjE,QAAI,CAACtI,EAAY,OAAM,IAAI,MAAM,sBAAsBsI,CAAS,EAAE;AAClE,WAAO,KAAK,SAASqC,GAA4B,KAAK,OAAO3K,CAAU,GAAG,EAAI;AAAA,EAChF;AAAA,EAEA,WAAW+K,GAA+D;AACxE,WAAO,KAAK,kBAAkB,KAAK,oBAAoBA,CAAQ,CAAC;AAAA,EAClE;AAAA,EAEA,cAAcA,GAA4BrL,IAAgC,IAAuC;AAC/G,UAAMmL,IAAa,KAAK,oBAAoBE,CAAQ;AACpD,QAAI,CAACF,EAAW,QAAQ,CAACnL,EAAQ,gBAAiB,QAAO,QAAQ,QAAQ,KAAK,QAAQ;AACtF,IAAA+F,EAAA,MAAKwG,GAAkB,QAAQ,CAAC3D,MAAcuC,EAAW,IAAIvC,CAAS,CAAC;AACvE,UAAM+D,IAAqB3M,EAAQ,kBAC/B,KAAK,wBAAwBmL,GAAYpF,EAAA,MAAKqG,KAAc,CAAC,IAC7D,oBAAI,IAAA;AACR,QAAI,CAACjB,EAAW;AACd,aAAIwB,EAAmB,SACrBxC,EAAA,MAAKiC,GAALrG,EAAA,MAAKqG,KAAe,IACpB,KAAK,OAAA,IAEA,QAAQ,QAAQ,KAAK,QAAQ;AAEtC,UAAM9L,IAAa,KAAK,sBAAsB6K,CAAU,GAClDyB,IAA2B3B,GAA4B,KAAK,OAAO3K,CAAU;AACnF,WAAA6K,EAAW,QAAQ,CAACvC,MAAcgE,EAAyB,OAAOhE,CAAS,CAAC,GAC5E,KAAK,cAAcgE,CAAwB,GACpC,KAAK,SAASzB,GAAY,EAAI;AAAA,EACvC;AAAA,EAEA,aAAaG,GAAoD;AAC/D,UAAM5M,IAAQ,KAAK,aAAa4M,CAAO;AACvC,WAAIvF,EAAA,MAAKuG,MAAqBvG,EAAA,MAAKmG,GAAY,IAAIxN,EAAM,QAAQ,SAAS,IAAU,QAAQ,QAAQ,KAAK,QAAQ,IAC1G,KAAK,cAAcA,CAAK;AAAA,EACjC;AAAA,EAEA,WAAW4M,GAAoD;AAC7D,WAAO,KAAK,aAAaA,CAAO;AAAA,EAClC;AAAA,EAEA,aAAauB,GAA+BxB,GAAgE;;AAC1G,QAAIrH,IAAU+B,EAAA,MAAKoG;AAKnB,QAJA,OAAO,QAAQU,CAAK,EAAE,QAAQ,CAAC,CAAC3L,GAAY5D,CAAK,MAAM;AACrD,MAAA0G,IAAU8I,GAAuB,KAAK,QAAQ9I,GAAS9C,GAAY5D,CAAK;AAAA,IAC1E,CAAC,GACD6M,EAAA,MAAKgC,GAAWnI,IACZqH,MAAa,OAAW,QAAO,KAAK,WAAA;AAExC,UAAM0B,IAAmB,KAAK,oBAAoB1B,CAAQ;AAC1D,SAAK,qBAAqB,IAAI,IAAItF,EAAA,MAAKkG,GAAgB,KAAA,CAAM,CAAC,GAC9D,KAAK,iBAAiB,IAAI,IAAIlG,EAAA,MAAKmG,GAAY,KAAA,CAAM,CAAC,IACtD/M,IAAA4G,EAAA,MAAKuG,OAAL,QAAAnN,EAAwB,SACxBgL,EAAA,MAAKmC,GAAoB,SACzBvG,EAAA,MAAKwG,GAAkB,MAAA,GACvBpC,EAAA,MAAKqC,GAA4B;AACjC,UAAMQ,IAAoB,EAALnH,EAAA,MAAKuG,GAAL;AACrB,IAAArG,EAAA,MAAK+F,GAAe,QAAQ,CAACmB,GAAOrJ,MAAc;AAChD,MAAAmC,EAAA,MAAK+F,GAAe,IAAIlI,GAAW,OAAO,OAAO,EAAE,IAAIqJ,EAAM,IAAI,QAAQ,QAAQ,YAAAD,EAAA,CAAY,CAAC;AAAA,IAChG,CAAC;AACD,UAAME,IAAqB,IAAI,IAAI,KAAK,OAAO,SAAS,IAAI,CAACzM,MAAYA,EAAQ,EAAE,CAAC;AAIpF,WAHAsM,EAAiB,QAAQ,CAACnE,MAAcsE,EAAmB,OAAOtE,CAAS,CAAC,GAC5E,KAAK,cAAcsE,GAAoBF,CAAU,GAE5CD,EAAiB,OAIf,KAAK,SAASA,GAAkB,EAAI,KAHzC,KAAK,OAAA,GACE,QAAQ,QAAQ,KAAK,QAAQ;AAAA,EAGxC;AAAA,EAEA,eAAezC,GAAgBnK,GAA8D;AAC3F,gBAAK,qBAAqB,IAAI,IAAI4F,EAAA,MAAKkG,GAAgB,KAAA,CAAM,GAAG,EAAI,GACpE,KAAK,cAAc,IAAI,IAAIlG,EAAA,MAAKmG,GAAY,KAAA,CAAM,CAAC,GACnD/B,EAAA,MAAKgC,GAAW,KAAK,YAAY,eAAe7B,GAAQnK,CAAS,EAAE,UACnE,KAAK,OAAA,GACE,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,cAAcqG,GAA0C;;AAE5D,UAAM2G,MAAUlO,KAAAC,KAAAC,IADF,KAAK,aAAaqH,EAAM,OAAO,EACvB,gBAAN,gBAAArH,EAAmB,WAAnB,gBAAAD,EAA2B,iBAA3B,gBAAAD,EAAyC,OAAO,CAACyB,MAASA,EAAK,UAAU8F,EAAM,UAAS,CAAA;AACxG,UAAM,QAAQ;AAAA,MACZ2G,EAAQ,IAAI,CAACzM,MAAS,KAAK,YAAY,WAAW,QAAQ,QAAQA,EAAK,QAAQ,EAAE,QAAQ8F,GAAOT,EAAA,MAAKoG,EAAQ,CAAC;AAAA,IAAA;AAAA,EAElH;AAAA,EAEA,MAAM,mBAAmBb,GAAiB8B,GAAqC;;AAC7E,UAAM1O,IAAQ,KAAK,aAAa4M,CAAO,GACjCtI,KAAS7D,IAAAT,EAAM,YAAN,gBAAAS,EAAe,KAAK,CAACuB,MAASA,EAAK,OAAO0M;AACzD,QAAI,CAACpK,EAAQ,OAAM,IAAI,MAAM,2BAA2BsI,CAAO,IAAI8B,CAAY,EAAE;AACjF,UAAM,KAAK,YAAY,WAAW,QAAQ,QAAQpK,EAAO,QAAQ,EAAE;AAAA,MACjE;AAAA,QACE,MAAM;AAAA,QACN,SAAAsI;AAAA,QACA,WAAW5M,EAAM,QAAQ;AAAA,QACzB,QAAQ,OAAO,OAAO,CAAA,CAAE;AAAA,MAAA;AAAA,MAE1BqH,EAAA,MAAKoG;AAAA,IAAA;AAAA,EAET;AAAA,EAEA,UAAgB;;AACd,IAAAhC,EAAA,MAAKsC,GAAa,MAClBtN,IAAA4G,EAAA,MAAKuG,OAAL,QAAAnN,EAAwB,SACxBgL,EAAA,MAAKmC,GAAoB,SACzBvG,EAAA,MAAKwG,GAAkB,MAAA,GACvBpC,EAAA,MAAKqC,GAA4B,KACjC,KAAK,iBAAiB,IAAI,IAAIzG,EAAA,MAAKmG,GAAY,KAAA,CAAM,CAAC,GACtD,KAAK,qBAAqB,IAAI,IAAInG,EAAA,MAAKkG,GAAgB,KAAA,CAAM,CAAC,GAC9DlG,EAAA,MAAK8F,GAAW,MAAA,GAChB,KAAK,YAAY,MAAA;AAAA,EACnB;AAAA,EAEQ,aAAaP,GAA8B;AACjD,UAAM5M,IAAQ,KAAK,OAAO,OAAO,KAAK,CAAC8G,MAAcA,EAAU,OAAO8F,CAAO;AAC7E,QAAI,CAAC5M,EAAO,OAAM,IAAI,MAAM,oBAAoB4M,CAAO,EAAE;AACzD,WAAO5M;AAAA,EACT;AAAA,EAEQ,SAAe;AACrB,QAAIqH,EAAA,MAAK0G,GAAY;AACrB,UAAMY,IAAW,KAAK;AACtB,IAAAtH,EAAA,MAAK8F,GAAW,QAAQ,CAACa,MAAaA,EAASW,CAAQ,CAAC;AAAA,EAC1D;AAAA,EAEQ,sBAAsBlC,GAA8C;AAC1E,UAAM7K,wBAAiB,IAAA;AACvB,WAAA6K,EAAW;AAAA,MAAQ,CAACvC,MAAA;;AAClB,gBAAAzJ,IAAA,KAAK,MAAM,sBAAsB,IAAIyJ,CAAS,MAA9C,gBAAAzJ,EAAiD,QAAQ,CAACyE,MAActD,EAAW,IAAIsD,CAAS;AAAA;AAAA,IAAC,GAE5FtD;AAAA,EACT;AAAA,EAEQ,oBAAoB+K,GAAyC;AACnE,UAAMF,wBAAiB,IAAA;AACvB,eAAWG,KAAWD,GAAU;AAC9B,WAAK,aAAaC,CAAO;AACzB,YAAM1C,IAAY,KAAK,MAAM,mBAAmB,IAAI0C,CAAO;AAC3D,MAAI1C,KAAWuC,EAAW,IAAIvC,CAAS;AAAA,IACzC;AACA,WAAOuC;AAAA,EACT;AAAA,EAEQ,cAAcA,GAAiC6B,IAAajH,EAAA,MAAKqG,IAAmB;AAC1F,UAAMf,IAAWD,GAA0B,KAAK,OAAOD,CAAU;AACjE,SAAK,qBAAqBE,CAAQ,GAClC,KAAK,iBAAiBF,CAAU,GAChCA,EAAW,QAAQ,CAACvC,MAAc;AAChC,MAAA7C,EAAA,MAAKgG,GAAe,IAAInD,GAAW,OAAO,OAAO,EAAE,IAAIA,GAAW,QAAQ,QAAQ,YAAAoE,EAAA,CAAY,CAAC;AAAA,IACjG,CAAC,GACD3B,EAAS,QAAQ,CAACC,MAAY;AAC5B,MAAAvF,EAAA,MAAKiG,GAAa,IAAIV,GAAS,OAAO,OAAO,EAAE,IAAIA,GAAS,QAAQ,QAAQ,YAAA0B,GAAY,cAAc,GAAA,CAAO,CAAC;AAAA,IAChH,CAAC;AAAA,EACH;AAAA,EAEQ,wBAAwBM,GAAyCN,GAAiC;AACxG,UAAML,IAAqB,IAAI,IAAI,KAAK,OAAO,SAAS,IAAI,CAAClM,MAAYA,EAAQ,EAAE,CAAC;AAEpF,QADA6M,EAAmB,QAAQ,CAAC1E,MAAc+D,EAAmB,OAAO/D,CAAS,CAAC,GAC1E,CAAC+D,EAAmB,KAAM,QAAOA;AAErC,UAAMY,IAAqB,KAAK,sBAAsBD,CAAkB;AAExE,WAD2B,KAAK,sBAAsBX,CAAkB,EACrD,QAAQ,CAAC/I,MAAc;AACxC,WAAK,YAAY,cAAc,gBAAgB,kBAAkBA,CAAS,GACrE2J,EAAmB,IAAI3J,CAAS,KACnCmC,EAAA,MAAK+F,GAAe,IAAIlI,GAAW,OAAO,OAAO,EAAE,IAAIA,GAAW,QAAQ,QAAQ,YAAAoJ,EAAA,CAAY,CAAC;AAAA,IAEnG,CAAC,GACDL,EAAmB,QAAQ,CAAC/D,MAAc;AACxC,WAAK,YAAY,cAAc,kBAAkBA,CAAS;AAAA,IAC5D,CAAC,GACD,KAAK,cAAc+D,GAAoBK,CAAU,GAC1CL;AAAA,EACT;AAAA,EAEQ,kBAAkBxB,GAAoE;AAC5F,QAAIpF,EAAA,MAAK0G,GAAY,QAAO,QAAQ,OAAO,IAAI,MAAM,sCAAsC,CAAC;AAC5F,UAAMe,IAA8B,CAAA;AAWpC,WAVArC,EAAW,QAAQ,CAACvC,MAAc;;AAChC,YAAM5C,IAAWD,EAAA,MAAKmG,GAAY,IAAItD,CAAS;AAC/C,UAAI5C,GAAU;AACZ,QAAAwH,EAAW,KAAKxH,EAAS,OAAO;AAChC;AAAA,MACF;AACA,YAAMyH,KAAStO,IAAA4G,EAAA,MAAKgG,GAAe,IAAInD,CAAS,MAAjC,gBAAAzJ,EAAoC;AACnD,MAAIsO,MAAW,UAAUA,MAAW,eACpCD,EAAW,KAAK,KAAK,kBAAkB5E,CAAS,CAAC;AAAA,IACnD,CAAC,GACI4E,EAAW,SACT,QAAQ,IAAIA,CAAU,EAAE,KAAK,MAAM,KAAK,QAAQ,IADxB,QAAQ,QAAQ,KAAK,QAAQ;AAAA,EAE9D;AAAA,EAEQ,kBAAkB5E,GAAkC;AAC1D,UAAMvC,IAAa,IAAI,gBAAA,GACjB2G,IAAoB,EAALnH,EAAA,MAAKwG,IAAL,GACfrI,IAAU+B,EAAA,MAAKoG,IACf/F,IAAYmF,GAAA,GACZrF,IAAkC;AAAA,MACtC,YAAAG;AAAA,MACA,SAAArC;AAAA,MACA,YAAAgJ;AAAA,MACA,WAAA5G;AAAA,MACA,SAAS,QAAQ,QAAA;AAAA,IAAQ;AAE3B,IAAAL,EAAA,MAAKmG,GAAY,IAAItD,GAAW1C,CAAS;AAEzC,UAAM5F,IAAa,KAAK,MAAM,sBAAsB,IAAIsI,CAAS,yBAAS,IAAA,GACpEyC,IAAW,KAAK,MAAM,oBAAoB,IAAIzC,CAAS,yBAAS,IAAA;AACtE,IAAAtI,EAAW,QAAQ,CAACsD,MAAc;AAChC,MAAAmC,EAAA,MAAK+F,GAAe,IAAIlI,GAAW,OAAO,OAAO,EAAE,IAAIA,GAAW,QAAQ,WAAW,YAAAoJ,GAAY,WAAA5G,EAAA,CAAW,CAAC;AAAA,IAC/G,CAAC;AACD,UAAMsH,IAAkB3H,EAAA,MAAKgG,GAAe,IAAInD,CAAS,GACnD,EAAE,OAAO+E,GAAe,GAAGC,MAAwBF;AACzD,WAAA3H,EAAA,MAAKgG,GAAe,IAAInD,GAAW,OAAO,OAAO,EAAE,GAAGgF,GAAqB,QAAQ,WAAW,YAAAZ,EAAA,CAAY,CAAC,GAC3G3B,EAAS,QAAQ,CAACC,MAAY;AAC5B,YAAMuC,IAAW9H,EAAA,MAAKiG,GAAa,IAAIV,CAAO,GACxC,EAAE,OAAOwC,GAAa,GAAGC,MAAsBF;AACrD,MAAA9H,EAAA,MAAKiG,GAAa;AAAA,QAChBV;AAAA,QACA,OAAO,OAAO;AAAA,UACZ,GAAGyC;AAAA,UACH,QAAQF,EAAS,YAAYA,EAAS,SAAS;AAAA,UAC/C,YAAAb;AAAA,UACA,cAAc,EAAQa,EAAS;AAAA,QAAS,CACzC;AAAA,MAAA;AAAA,IAEL,CAAC,GACD,KAAK,OAAA,GAEL3H,EAAU,UAAU,KAAK,iBAAiB0C,GAAW1C,GAAW5F,GAAY+K,CAAQ,GAC7EnF,EAAU;AAAA,EACnB;AAAA,EAEA,MAAc,iBACZ0C,GACA1C,GACA5F,GACA+K,GACe;AACf,QAAI;AACF,YAAMhI,IAAS,MAAM,KAAK,YAAY,WAAWuF,GAAW1C,EAAU,SAAS;AAAA,QAC7E,QAAQA,EAAU,WAAW;AAAA,MAAA,CAC9B;AACD,UAAIH,EAAA,MAAKmG,GAAY,IAAItD,CAAS,MAAM1C,KAAaH,EAAA,MAAK0G,GAAY;AACtE,MAAA1G,EAAA,MAAKgG,GAAe;AAAA,QAClBnD;AAAA,QACA,OAAO,OAAO;AAAA,UACZ,IAAIA;AAAA,UACJ,QAAQvF,EAAO,KAAK,SAAS,YAAY;AAAA,UACzC,YAAY6C,EAAU;AAAA,UACtB,QAAA7C;AAAA,UACA,kBAAkBA,EAAO;AAAA,QAAA,CAC1B;AAAA,MAAA,GAEH/C,EAAW,QAAQ,CAACsD,MAAc;AAChC,QAAAmC,EAAA,MAAK+F,GAAe;AAAA,UAClBlI;AAAA,UACA,OAAO,OAAO;AAAA,YACZ,IAAIA;AAAA,YACJ,QAAQ;AAAA,YACR,YAAYsC,EAAU;AAAA,YACtB,WAAWA,EAAU;AAAA,YACrB,aAAaqF,GAAA;AAAA,UAAI,CAClB;AAAA,QAAA;AAAA,MAEL,CAAC,GACD,KAAK,OAAO,OACT,OAAO,CAAC7M,MAAUA,EAAM,QAAQ,cAAckK,KAAayC,EAAS,IAAI3M,EAAM,EAAE,CAAC,EACjF,QAAQ,CAACA,MAAU,KAAK,WAAWA,GAAO2E,GAAQ6C,EAAU,YAAYA,EAAU,OAAO,CAAC;AAAA,IAC/F,SAASvB,GAAO;AACd,UAAIoB,EAAA,MAAKmG,GAAY,IAAItD,CAAS,MAAM1C,KAAaH,EAAA,MAAK0G,MAAcvG,EAAU,WAAW,OAAO;AAClG;AAEF,YAAMuH,IAAqB/I,GAAaC,CAAK,IAAI,cAAc,SACzDkJ,IAAW9H,EAAA,MAAKgG,GAAe,IAAInD,CAAS;AAClD,MAAA7C,EAAA,MAAKgG,GAAe;AAAA,QAClBnD;AAAA,QACA,OAAO,OAAO;AAAA,UACZ,GAAGiF;AAAA,UACH,QAAQA,EAAS,UAAU,CAACnJ,GAAaC,CAAK,IAAI,UAAU8I;AAAA,UAC5D,YAAYvH,EAAU;AAAA,UACtB,OAAOsF,GAAe7G,GAAO,gBAAgB;AAAA,QAAA,CAC9C;AAAA,MAAA,GAEHrE,EAAW,QAAQ,CAACsD,MAAc;AAChC,QAAAmC,EAAA,MAAK+F,GAAe;AAAA,UAClBlI;AAAA,UACA,OAAO,OAAO;AAAA,YACZ,IAAIA;AAAA,YACJ,QAAA6J;AAAA,YACA,YAAYvH,EAAU;AAAA,YACtB,WAAWA,EAAU;AAAA,YACrB,aAAaqF,GAAA;AAAA,YACb,OAAOC,GAAe7G,GAAO,gBAAgB;AAAA,UAAA,CAC9C;AAAA,QAAA;AAAA,MAEL,CAAC,GACD0G,EAAS,QAAQ,CAACC,MAAY,KAAK,UAAUA,GAASpF,EAAU,YAAYvB,GAAO,gBAAgB,CAAC;AAAA,IACtG,UAAA;AACE,MAAIoB,EAAA,MAAKmG,GAAY,IAAItD,CAAS,MAAM1C,MACtCH,EAAA,MAAKmG,GAAY,OAAOtD,CAAS,GACjC,KAAK,OAAA;AAAA,IAET;AAAA,EACF;AAAA,EAEQ,iBAAiBuC,GAAuC;AAC9D,IAAAA,EAAW,QAAQ,CAACvC,MAAc;AAChC,YAAM1C,IAAYH,EAAA,MAAKmG,GAAY,IAAItD,CAAS;AAChD,MAAK1C,MACLH,EAAA,MAAKmG,GAAY,OAAOtD,CAAS,GACjC1C,EAAU,WAAW,MAAA;AAAA,IACvB,CAAC;AAAA,EACH;AAAA,EAEQ,aAAaxH,GAA0D;;AAC7E,QAAIsP,IAActP,EAAM;AACxB,YAAAO,KAAAC,KAAAC,IAAAT,EAAM,gBAAN,gBAAAS,EAAmB,WAAnB,gBAAAD,EAA2B,cAA3B,QAAAD,EAAsC,QAAQ,CAACmC,MAAa;AAC1D,MAAA4M,IAAc,KAAK,YAAY,WAAW,QAAQ,QAAQ5M,CAAQ,EAAE,MAAM4M,CAAW;AAAA,IACvF,IACOA;AAAA,EACT;AAAA,EAEQ,WACNtP,GACA+B,GACAuM,GACAhJ,IAA4B+B,EAAA,MAAKoG,IAC3B;AACN,QAAI;AACF,YAAMzM,IAAa,KAAK,YAAY,WAAW,oBAAoB,QAAQhB,EAAM,UAAU,GACrFuP,IAAU,KAAK,YAAY,WAAW,SAAS;AAAA,QACnDvP,EAAM,aAAagB,EAAW;AAAA,MAAA,GAE1BsO,IAAc,KAAK,aAAatP,CAAK,GACrCwP,IAAYD,EAAQ,MAAM;AAAA,QAC9B,SAAAxN;AAAA,QACA,SAAS/B,EAAM;AAAA,QACf,GAAIsP,IAAc,EAAE,aAAAA,EAAA,IAAgB,CAAA;AAAA,QACpC,SAAAhK;AAAA,MAAA,CACD,GACKyJ,IAAqBS,EAAU,QAAQ,UAAU;AACvD,MAAAnI,EAAA,MAAKiG,GAAa;AAAA,QAChBtN,EAAM;AAAA,QACN,OAAO,OAAO;AAAA,UACZ,IAAIA,EAAM;AAAA,UACV,QAAA+O;AAAA,UACA,YAAAT;AAAA,UACA,cAAc;AAAA,UACd,WAAAkB;AAAA,UACA,SAAAzN;AAAA,UACA,kBAAkBA,EAAQ;AAAA,QAAA,CAC3B;AAAA,MAAA;AAAA,IAEL,SAASkE,GAAO;AACd,MAAAxB,EAAc,KAAK,QAAQ,WAAW;AAAA,QACpC,MAAM;AAAA,QACN,aAAa,KAAK,OAAO;AAAA,QACzB,SAASzE,EAAM;AAAA,QACf,WAAWA,EAAM,QAAQ;AAAA,QACzB,WAAW;AAAA,MAAA,CACZ,GACD,KAAK,UAAUA,EAAM,IAAIsO,GAAYrI,GAAO,gBAAgB;AAAA,IAC9D;AAAA,EACF;AAAA,EAEQ,UAAU2G,GAAiB0B,GAAoBrI,GAAgBhE,GAAoB;AACzF,UAAMkN,IAAW9H,EAAA,MAAKiG,GAAa,IAAIV,CAAO;AAC9C,IAAAvF,EAAA,MAAKiG,GAAa;AAAA,MAChBV;AAAA,MACA,OAAO,OAAO;AAAA,QACZ,GAAGuC;AAAA,QACH,QAAQA,EAAS,YAAY,UAAUnJ,GAAaC,CAAK,IAAI,cAAc;AAAA,QAC3E,YAAAqI;AAAA,QACA,cAAc;AAAA,QACd,OAAOxB,GAAe7G,GAAOhE,CAAI;AAAA,MAAA,CAClC;AAAA,IAAA;AAAA,EAEL;AAAA,EAEQ,qBAAqB0K,GAA+B8C,IAAU,IAAa;AACjF,IAAA9C,EAAS,QAAQ,CAACC,MAAY;;AAC5B,YAAMpF,IAAYH,EAAA,MAAKkG,GAAgB,IAAIX,CAAO;AAClD,MAAKpF,MACLH,EAAA,MAAKkG,GAAgB,OAAOX,CAAO,GACnCpF,EAAU,WAAW,MAAA,GACjBiI,OAAWhP,IAAA4G,EAAA,MAAKiG,GAAa,IAAIV,CAAO,MAA7B,gBAAAnM,EAAgC,gBAAe+G,EAAU,cACtEH,EAAA,MAAKiG,GAAa,IAAIV,GAASpF,EAAU,aAAa;AAAA,IAE1D,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,cAAcxH,GAAuD;AACjF,QAAIqH,EAAA,MAAK0G,GAAY,OAAM,IAAI,MAAM,sCAAsC;AAC3E,UAAM7D,IAAYlK,EAAM,QAAQ,WAC1B0P,IAAoBrI,EAAA,MAAKkG,GAAgB,IAAIvN,EAAM,EAAE,GACrD2P,KAAgBD,KAAA,gBAAAA,EAAmB,kBAAiBrI,EAAA,MAAKiG,GAAa,IAAItN,EAAM,EAAE;AACxF,IAAI0P,MACFrI,EAAA,MAAKkG,GAAgB,OAAOvN,EAAM,EAAE,GACpC0P,EAAkB,WAAW,MAAA;AAG/B,UAAM/H,IAAa,IAAI,gBAAA,GACjB2G,IAAoB,EAALnH,EAAA,MAAKwG,IAAL,GACfrI,IAAU+B,EAAA,MAAKoG,IACfjG,IAAY,EAAE,YAAAG,GAAY,YAAA2G,GAAY,eAAAqB,EAAA;AAC5C,IAAAtI,EAAA,MAAKkG,GAAgB,IAAIvN,EAAM,IAAIwH,CAAS;AAE5C,UAAM,EAAE,OAAOoI,GAAQ,WAAAJ,GAAW,SAAAzN,GAAS,GAAG8N,MAAuBF,GAC/DG,IAAsB,GAAQN,KAAa,CAACA,EAAU;AAC5D,IAAAnI,EAAA,MAAKiG,GAAa;AAAA,MAChBtN,EAAM;AAAA,MACN,OAAO,OAAO;AAAA,QACZ,GAAG6P;AAAA,QACH,GAAIC,KAAuBN,IAAY,EAAE,WAAAA,EAAA,IAAc,CAAA;AAAA,QACvD,GAAIM,KAAuB/N,IAAU,EAAE,SAAAA,EAAA,IAAY,CAAA;AAAA,QACnD,QAAQ+N,IAAuBH,EAAc,WAAW,UAAU,YAAYA,EAAc,SAAU;AAAA,QACtG,YAAArB;AAAA,QACA,cAAcwB;AAAA,MAAA,CACf;AAAA,IAAA,GAEH,KAAK,OAAA;AAEL,QAAI;AACF,YAAMnL,IAAS,MAAM,KAAK,YAAY,WAAWuF,GAAW5E,GAAS;AAAA,QACnE,QAAQqC,EAAW;AAAA,QACnB,OAAO;AAAA,QACP,UAAU;AAAA,MAAA,CACX;AACD,UAAIN,EAAA,MAAKkG,GAAgB,IAAIvN,EAAM,EAAE,MAAMwH,KAAaH,EAAA,MAAK0G,GAAY,QAAO,KAAK;AACrF,WAAK,WAAW/N,GAAO2E,GAAQ2J,GAAYhJ,CAAO;AAAA,IACpD,SAASW,GAAO;AACd,UAAIoB,EAAA,MAAKkG,GAAgB,IAAIvN,EAAM,EAAE,MAAMwH,KAAaH,EAAA,MAAK0G,MAAcpG,EAAW,OAAO;AAC3F,eAAO,KAAK;AAEd,WAAK,UAAU3H,EAAM,IAAIsO,GAAYrI,GAAO,gBAAgB;AAAA,IAC9D,UAAA;AACE,MAAIoB,EAAA,MAAKkG,GAAgB,IAAIvN,EAAM,EAAE,MAAMwH,MACzCH,EAAA,MAAKkG,GAAgB,OAAOvN,EAAM,EAAE,GACpC,KAAK,OAAA;AAAA,IAET;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAc,SACZyM,GACAsD,GACAC,IAAoB,IACe;;AACnC,QAAI3I,EAAA,MAAK0G,GAAY,OAAM,IAAI,MAAM,sCAAsC;AAC3E,UAAMnM,IAAa,KAAK,sBAAsB6K,CAAU,GAClDE,IAAWD,GAA0B,KAAK,OAAOD,CAAU;AACjE,SAAK,qBAAqBE,CAAQ,GAClC,KAAK,iBAAiBF,CAAU,IAChChM,IAAA4G,EAAA,MAAKuG,OAAL,QAAAnN,EAAwB;AACxB,UAAMkH,IAAa,IAAI,gBAAA;AACvB,IAAA8D,EAAA,MAAKmC,GAAoBjG,IACzB8D,EAAA,MAAKoC,GAAoB,IAAI,IAAIpB,CAAU,IAC3ChB,EAAA,MAAKqC,GAA4BkC;AACjC,UAAM1B,IAAoB,EAALnH,EAAA,MAAKuG,GAAL,GACfhG,IAAYmF,GAAA;AAElB,WAAIkD,MACFnO,EAAW,QAAQ,CAACsD,MAAc,KAAK,YAAY,cAAc,gBAAgB,kBAAkBA,CAAS,CAAC,GAC7GuH,EAAW,QAAQ,CAACvC,MAAc,KAAK,YAAY,cAAc,kBAAkBA,CAAS,CAAC,IAG/FtI,EAAW,QAAQ,CAACsD,MAAc;AAChC,MAAAmC,EAAA,MAAK+F,GAAe,IAAIlI,GAAW,OAAO,OAAO,EAAE,IAAIA,GAAW,QAAQ,WAAW,YAAAoJ,GAAY,WAAA5G,EAAA,CAAW,CAAC;AAAA,IAC/G,CAAC,GACD+E,EAAW,QAAQ,CAACvC,MAAc;AAChC,YAAMiF,IAAW9H,EAAA,MAAKgG,GAAe,IAAInD,CAAS,GAC5C,EAAE,OAAO0F,GAAQ,GAAGP,MAAsBF;AAChD,MAAA9H,EAAA,MAAKgG,GAAe;AAAA,QAClBnD;AAAA,QACA,OAAO,OAAO;AAAA,UACZ,GAAGmF;AAAA,UACH,QAAQ;AAAA,UACR,YAAAf;AAAA,QAAA,CACD;AAAA,MAAA;AAAA,IAEL,CAAC,GACD3B,EAAS,QAAQ,CAACC,MAAY;AAC5B,YAAMuC,IAAW9H,EAAA,MAAKiG,GAAa,IAAIV,CAAO,GACxC,EAAE,OAAOgD,GAAQ,WAAAJ,GAAW,SAAAzN,GAAS,GAAG8N,MAAuBV,GAC/DW,IAAsB,GAAQN,KAAa,CAACA,EAAU;AAC5D,MAAAnI,EAAA,MAAKiG,GAAa;AAAA,QAChBV;AAAA,QACA,OAAO,OAAO;AAAA,UACZ,GAAGiD;AAAA,UACH,GAAIC,KAAuBN,IAAY,EAAE,WAAAA,EAAA,IAAc,CAAA;AAAA,UACvD,GAAIM,KAAuB/N,IAAU,EAAE,SAAAA,EAAA,IAAY,CAAA;AAAA,UACnD,QAAQ+N,IAAsBX,EAAS,SAAS;AAAA,UAChD,YAAAb;AAAA,UACA,cAAcwB;AAAA,QAAA,CACf;AAAA,MAAA;AAAA,IAEL,CAAC,GACD,KAAK,OAAA,GAEL,MAAM,QAAQ;AAAA,MACZ,MAAM,KAAKrD,GAAY,OAAOvC,MAAc;;AAC1C,YAAI;AACF,gBAAMvF,IAAS,MAAM,KAAK,YAAY,WAAWuF,GAAW7C,EAAA,MAAKoG,IAAU,EAAE,QAAQ9F,EAAW,OAAA,CAAQ;AACxG,cAAI2G,MAAejH,EAAA,MAAKqG,MAAerG,EAAA,MAAK0G,GAAY;AACxD,UAAA1G,EAAA,MAAKgG,GAAe;AAAA,YAClBnD;AAAA,YACA,OAAO,OAAO;AAAA,cACZ,IAAIA;AAAA,cACJ,QAAQvF,EAAO,KAAK,SAAS,YAAY;AAAA,cACzC,YAAA2J;AAAA,cACA,QAAA3J;AAAA,cACA,kBAAkBA,EAAO;AAAA,YAAA,CAC1B;AAAA,UAAA,IAEHlE,IAAA,KAAK,MAAM,sBAAsB,IAAIyJ,CAAS,MAA9C,QAAAzJ,EAAiD,QAAQ,CAACyE,MAAc;AACtE,YAAAmC,EAAA,MAAK+F,GAAe;AAAA,cAClBlI;AAAA,cACA,OAAO,OAAO;AAAA,gBACZ,IAAIA;AAAA,gBACJ,QAAQ;AAAA,gBACR,YAAAoJ;AAAA,gBACA,WAAA5G;AAAA,gBACA,aAAamF,GAAA;AAAA,cAAI,CAClB;AAAA,YAAA;AAAA,UAEL,IACA,KAAK,OAAO,OACT,OAAO,CAAC7M,MAAUA,EAAM,QAAQ,cAAckK,KAAayC,EAAS,IAAI3M,EAAM,EAAE,CAAC,EACjF,QAAQ,CAACA,MAAU,KAAK,WAAWA,GAAO2E,GAAQ2J,CAAU,CAAC;AAAA,QAClE,SAASrI,GAAO;AACd,cAAIqI,MAAejH,EAAA,MAAKqG,MAAerG,EAAA,MAAK0G,GAAY;AACxD,gBAAMgB,IAAqB/I,GAAaC,CAAK,IAAI,cAAc,SACzDkJ,IAAW9H,EAAA,MAAKgG,GAAe,IAAInD,CAAS;AAClD,UAAA7C,EAAA,MAAKgG,GAAe;AAAA,YAClBnD;AAAA,YACA,OAAO,OAAO;AAAA,cACZ,GAAGiF;AAAA,cACH,QAAQA,EAAS,UAAU,CAACnJ,GAAaC,CAAK,IAAI,UAAU8I;AAAA,cAC5D,YAAAT;AAAA,cACA,OAAOxB,GAAe7G,GAAO,gBAAgB;AAAA,YAAA,CAC9C;AAAA,UAAA,IAEHzF,IAAA,KAAK,MAAM,sBAAsB,IAAI0J,CAAS,MAA9C,QAAA1J,EAAiD,QAAQ,CAAC0E,MAAc;AACtE,YAAAmC,EAAA,MAAK+F,GAAe;AAAA,cAClBlI;AAAA,cACA,OAAO,OAAO;AAAA,gBACZ,IAAIA;AAAA,gBACJ,QAAA6J;AAAA,gBACA,YAAAT;AAAA,gBACA,WAAA5G;AAAA,gBACA,aAAamF,GAAA;AAAA,gBACb,OAAOC,GAAe7G,GAAO,gBAAgB;AAAA,cAAA,CAC9C;AAAA,YAAA;AAAA,UAEL,IACA,KAAK,OAAO,OACT,OAAO,CAACjG,MAAUA,EAAM,QAAQ,cAAckK,KAAayC,EAAS,IAAI3M,EAAM,EAAE,CAAC,EACjF,QAAQ,CAACA,MAAU,KAAK,UAAUA,EAAM,IAAIsO,GAAYrI,GAAO,gBAAgB,CAAC;AAAA,QACrF,UAAA;AACE,UAAIqI,MAAejH,EAAA,MAAKqG,MAAerG,EAAA,MAAKuG,OAAsBjG,KAAc,CAACN,EAAA,MAAK0G,MACpF,KAAK,OAAA;AAAA,QAET;AAAA,MACF,CAAC;AAAA,IAAA,GAGCO,MAAejH,EAAA,MAAKqG,MAAerG,EAAA,MAAKuG,OAAsBjG,MAChE8D,EAAA,MAAKmC,GAAoB,SACzBvG,EAAA,MAAKwG,GAAkB,MAAA,GACvBpC,EAAA,MAAKqC,GAA4B,KACjC,KAAK,OAAA,IAEA,KAAK;AAAA,EACd;AACF;AA9nBWX,IAAA,eACAC,IAAA,eACAC,IAAA,eACAC,IAAA,eACAC,IAAA,eACAC,IAAA,eACTC,IAAA,eACAC,IAAA,eACAC,KAAA,eACAC,IAAA,eACAC,IAAA,eACAC,IAAA,eACAC,IAAA;AAonBK,SAASkC,GAAuB3O,GAAoD;AACzF,SAAO,IAAI4L,GAAiB5L,CAAO;AACrC;"}
@@ -0,0 +1,18 @@
1
+ import { type DashboardContext, type PanelConfig } from "../../core";
2
+ import type { PivotTableS2ViewModel } from "./pivot-table-s2";
3
+ type __VLS_Props = {
4
+ viewModel: PivotTableS2ViewModel;
5
+ panel: PanelConfig;
6
+ context: DashboardContext;
7
+ };
8
+ declare const _default: import("vue").DefineComponent<__VLS_TypePropsToOption<__VLS_Props>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_TypePropsToOption<__VLS_Props>>>, {}, {}>;
9
+ export default _default;
10
+ type __VLS_TypePropsToOption<T> = {
11
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
12
+ type: import('vue').PropType<T[K]>;
13
+ } : {
14
+ type: import('vue').PropType<T[K]>;
15
+ required: true;
16
+ };
17
+ };
18
+ //# sourceMappingURL=PivotTableS2Renderer.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PivotTableS2Renderer.vue.d.ts","sourceRoot":"","sources":["../../../src/experimental/s2/PivotTableS2Renderer.vue"],"names":[],"mappings":"AA6IA,OAAO,EAAkB,KAAK,gBAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,KAAK,EAA8B,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAI1F,KAAK,WAAW,GAAG;IAAE,SAAS,EAAE,qBAAqB,CAAC;IAAC,KAAK,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,CAAC;;AA4JvG,wBAMG;AAEH,KAAK,uBAAuB,CAAC,CAAC,IAAI;KAChC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GACpC;QAAE,IAAI,EAAE,OAAO,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;KAAE,GACtC;QAAE,IAAI,EAAE,OAAO,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE;CACzD,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { Component } from "vue";
2
+ import type { CoreRegistries } from "../../core";
3
+ import type { VueRendererRegistry } from "../../vue/registry";
4
+ export { PIVOT_TABLE_S2_ADAPTER_ID, S2_RENDERER_ID, pivotTableS2Adapter, pivotTableS2RendererDefinition } from "./pivot-table-s2";
5
+ export type { PivotTableS2FieldViewModel, PivotTableS2ViewModel } from "./pivot-table-s2";
6
+ export declare function registerPivotTableS2Core(registries: CoreRegistries): CoreRegistries;
7
+ export declare function loadPivotTableS2Renderer(): Promise<Component>;
8
+ export declare function registerPivotTableS2VueRenderer(registry: VueRendererRegistry): Promise<VueRendererRegistry>;
9
+ export declare function registerPivotTableS2(registries: CoreRegistries, vueRegistry: VueRendererRegistry): Promise<{
10
+ core: CoreRegistries;
11
+ vue: VueRendererRegistry;
12
+ }>;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/experimental/s2/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAErC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EACL,yBAAyB,EACzB,cAAc,EACd,mBAAmB,EACnB,8BAA8B,EAC/B,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAE1F,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,cAAc,GAAG,cAAc,CAInF;AAED,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,SAAS,CAAC,CAGnE;AAED,wBAAsB,+BAA+B,CAAC,QAAQ,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAIjH;AAED,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,cAAc,EAC1B,WAAW,EAAE,mBAAmB,GAC/B,OAAO,CAAC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,GAAG,EAAE,mBAAmB,CAAA;CAAE,CAAC,CAK7D"}
@@ -0,0 +1,66 @@
1
+ import { H as u, J as m, u as p, s as b } from "../../runtime-schema-BO2qLlvE.js";
2
+ const n = "pivotTableS2", f = "pivotTableS2.default";
3
+ function S(e, t) {
4
+ const o = e.get(t);
5
+ if (!o) throw new Error(`Pivot table field is missing from the dataset: ${t}`);
6
+ return o;
7
+ }
8
+ function c(e, t, o, i) {
9
+ var r, l;
10
+ const a = S(e, t), s = ((l = (r = o == null ? void 0 : o.common) == null ? void 0 : r.formatOverrides) == null ? void 0 : l[a.key]) ?? a.format ?? i;
11
+ return Object.freeze({
12
+ field: a.key,
13
+ label: a.label,
14
+ ...s ? { format: Object.freeze({ ...s }) } : {},
15
+ ...a.unit ? { unit: a.unit } : {}
16
+ });
17
+ }
18
+ const v = {
19
+ id: f,
20
+ adapt({ dataset: e, binding: t, enhancement: o }) {
21
+ const i = new Map(e.fields.map((r) => [r.key, r])), a = [...t.rowFields, ...t.columnFields, ...t.valueFields], s = e.rows.map(
22
+ (r) => Object.freeze(Object.fromEntries(a.map((l) => [l, r[l]])))
23
+ );
24
+ return Object.freeze({
25
+ type: n,
26
+ empty: s.length === 0,
27
+ rowFields: Object.freeze(t.rowFields.map((r) => c(i, r, o))),
28
+ columnFields: Object.freeze(t.columnFields.map((r) => c(i, r, o))),
29
+ valueFields: Object.freeze(
30
+ t.valueFields.map((r) => c(i, r, o, { type: "number" }))
31
+ ),
32
+ rows: Object.freeze(s)
33
+ });
34
+ }
35
+ }, T = Object.freeze({
36
+ id: n,
37
+ defaultAdapterId: f,
38
+ bindingSchema: u(b),
39
+ enhancementSchema: u(p, [m]),
40
+ capabilities: Object.freeze({ responsive: !0, csv: !0, png: !1, selection: !1 })
41
+ });
42
+ function O(e) {
43
+ return e.adapters.register(v), e.rendererDefinitions.register(T), e;
44
+ }
45
+ async function d() {
46
+ return (await import("../../PivotTableS2Renderer-C-Urwhuv.js")).default;
47
+ }
48
+ async function j(e) {
49
+ const t = await d();
50
+ return e.register({ id: n, component: t }), e;
51
+ }
52
+ async function z(e, t) {
53
+ const o = await d();
54
+ return O(e), t.register({ id: n, component: o }), { core: e, vue: t };
55
+ }
56
+ export {
57
+ f as PIVOT_TABLE_S2_ADAPTER_ID,
58
+ n as S2_RENDERER_ID,
59
+ d as loadPivotTableS2Renderer,
60
+ v as pivotTableS2Adapter,
61
+ T as pivotTableS2RendererDefinition,
62
+ z as registerPivotTableS2,
63
+ O as registerPivotTableS2Core,
64
+ j as registerPivotTableS2VueRenderer
65
+ };
66
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/experimental/s2/pivot-table-s2.ts","../../../src/experimental/s2/index.ts"],"sourcesContent":["import {\n JsonValueSchema,\n PivotTableS2BindingSchema,\n PivotTableS2VisualizationEnhancementSchema,\n createTypeBoxRuntimeSchema,\n type DatasetFieldConfig,\n type PivotTableS2Binding,\n type ValueFormat,\n type VisualizationAdapter,\n type VisualizationEnhancement,\n type VisualizationRendererDefinition,\n type VisualizationViewModelBase\n} from \"../../core\";\n\nexport const S2_RENDERER_ID = \"pivotTableS2\" as const;\nexport const PIVOT_TABLE_S2_ADAPTER_ID = \"pivotTableS2.default\" as const;\n\ntype PivotTableS2Enhancement = Extract<VisualizationEnhancement, { type: \"pivotTableS2\" }>;\n\nexport interface PivotTableS2FieldViewModel {\n field: string;\n label: string;\n format?: ValueFormat;\n unit?: string;\n}\n\nexport interface PivotTableS2ViewModel extends VisualizationViewModelBase {\n type: typeof S2_RENDERER_ID;\n rowFields: ReadonlyArray<PivotTableS2FieldViewModel>;\n columnFields: ReadonlyArray<PivotTableS2FieldViewModel>;\n valueFields: ReadonlyArray<PivotTableS2FieldViewModel>;\n rows: ReadonlyArray<Readonly<Record<string, unknown>>>;\n}\n\nfunction requireField(fieldsById: ReadonlyMap<string, DatasetFieldConfig>, fieldId: string): DatasetFieldConfig {\n const field = fieldsById.get(fieldId);\n if (!field) throw new Error(`Pivot table field is missing from the dataset: ${fieldId}`);\n return field;\n}\n\nfunction buildField(\n fieldsById: ReadonlyMap<string, DatasetFieldConfig>,\n fieldId: string,\n enhancement?: PivotTableS2Enhancement,\n defaultFormat?: ValueFormat\n): PivotTableS2FieldViewModel {\n const field = requireField(fieldsById, fieldId);\n const format = enhancement?.common?.formatOverrides?.[field.key] ?? field.format ?? defaultFormat;\n return Object.freeze({\n field: field.key,\n label: field.label,\n ...(format ? { format: Object.freeze({ ...format }) } : {}),\n ...(field.unit ? { unit: field.unit } : {})\n });\n}\n\nexport const pivotTableS2Adapter: VisualizationAdapter<\n PivotTableS2Binding,\n PivotTableS2Enhancement,\n PivotTableS2ViewModel\n> = {\n id: PIVOT_TABLE_S2_ADAPTER_ID,\n adapt({ dataset, binding, enhancement }) {\n const fieldsById = new Map(dataset.fields.map((field) => [field.key, field]));\n const fieldIds = [...binding.rowFields, ...binding.columnFields, ...binding.valueFields];\n const rows = dataset.rows.map((row) =>\n Object.freeze(Object.fromEntries(fieldIds.map((fieldId) => [fieldId, row[fieldId]])))\n );\n\n return Object.freeze({\n type: S2_RENDERER_ID,\n empty: rows.length === 0,\n rowFields: Object.freeze(binding.rowFields.map((fieldId) => buildField(fieldsById, fieldId, enhancement))),\n columnFields: Object.freeze(binding.columnFields.map((fieldId) => buildField(fieldsById, fieldId, enhancement))),\n valueFields: Object.freeze(\n binding.valueFields.map((fieldId) => buildField(fieldsById, fieldId, enhancement, { type: \"number\" }))\n ),\n rows: Object.freeze(rows)\n });\n }\n};\n\nexport const pivotTableS2RendererDefinition: VisualizationRendererDefinition<\n PivotTableS2Binding,\n PivotTableS2Enhancement\n> = Object.freeze({\n id: S2_RENDERER_ID,\n defaultAdapterId: PIVOT_TABLE_S2_ADAPTER_ID,\n bindingSchema: createTypeBoxRuntimeSchema(PivotTableS2BindingSchema),\n enhancementSchema: createTypeBoxRuntimeSchema(PivotTableS2VisualizationEnhancementSchema, [JsonValueSchema]),\n capabilities: Object.freeze({ responsive: true, csv: true, png: false, selection: false })\n});\n","import type { Component } from \"vue\";\n\nimport type { CoreRegistries } from \"../../core\";\nimport type { VueRendererRegistry } from \"../../vue/registry\";\nimport { S2_RENDERER_ID, pivotTableS2Adapter, pivotTableS2RendererDefinition } from \"./pivot-table-s2\";\n\nexport {\n PIVOT_TABLE_S2_ADAPTER_ID,\n S2_RENDERER_ID,\n pivotTableS2Adapter,\n pivotTableS2RendererDefinition\n} from \"./pivot-table-s2\";\nexport type { PivotTableS2FieldViewModel, PivotTableS2ViewModel } from \"./pivot-table-s2\";\n\nexport function registerPivotTableS2Core(registries: CoreRegistries): CoreRegistries {\n registries.adapters.register(pivotTableS2Adapter);\n registries.rendererDefinitions.register(pivotTableS2RendererDefinition);\n return registries;\n}\n\nexport async function loadPivotTableS2Renderer(): Promise<Component> {\n const module = await import(\"./PivotTableS2Renderer.vue\");\n return module.default;\n}\n\nexport async function registerPivotTableS2VueRenderer(registry: VueRendererRegistry): Promise<VueRendererRegistry> {\n const component = await loadPivotTableS2Renderer();\n registry.register({ id: S2_RENDERER_ID, component });\n return registry;\n}\n\nexport async function registerPivotTableS2(\n registries: CoreRegistries,\n vueRegistry: VueRendererRegistry\n): Promise<{ core: CoreRegistries; vue: VueRendererRegistry }> {\n const component = await loadPivotTableS2Renderer();\n registerPivotTableS2Core(registries);\n vueRegistry.register({ id: S2_RENDERER_ID, component });\n return { core: registries, vue: vueRegistry };\n}\n"],"names":["S2_RENDERER_ID","PIVOT_TABLE_S2_ADAPTER_ID","requireField","fieldsById","fieldId","field","buildField","enhancement","defaultFormat","format","_b","_a","pivotTableS2Adapter","dataset","binding","fieldIds","rows","row","pivotTableS2RendererDefinition","createTypeBoxRuntimeSchema","PivotTableS2BindingSchema","PivotTableS2VisualizationEnhancementSchema","JsonValueSchema","registerPivotTableS2Core","registries","loadPivotTableS2Renderer","registerPivotTableS2VueRenderer","registry","component","registerPivotTableS2","vueRegistry"],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { type PivotTableS2Binding, type ValueFormat, type VisualizationAdapter, type VisualizationEnhancement, type VisualizationRendererDefinition, type VisualizationViewModelBase } from "../../core";
2
+ export declare const S2_RENDERER_ID: "pivotTableS2";
3
+ export declare const PIVOT_TABLE_S2_ADAPTER_ID: "pivotTableS2.default";
4
+ type PivotTableS2Enhancement = Extract<VisualizationEnhancement, {
5
+ type: "pivotTableS2";
6
+ }>;
7
+ export interface PivotTableS2FieldViewModel {
8
+ field: string;
9
+ label: string;
10
+ format?: ValueFormat;
11
+ unit?: string;
12
+ }
13
+ export interface PivotTableS2ViewModel extends VisualizationViewModelBase {
14
+ type: typeof S2_RENDERER_ID;
15
+ rowFields: ReadonlyArray<PivotTableS2FieldViewModel>;
16
+ columnFields: ReadonlyArray<PivotTableS2FieldViewModel>;
17
+ valueFields: ReadonlyArray<PivotTableS2FieldViewModel>;
18
+ rows: ReadonlyArray<Readonly<Record<string, unknown>>>;
19
+ }
20
+ export declare const pivotTableS2Adapter: VisualizationAdapter<PivotTableS2Binding, PivotTableS2Enhancement, PivotTableS2ViewModel>;
21
+ export declare const pivotTableS2RendererDefinition: VisualizationRendererDefinition<PivotTableS2Binding, PivotTableS2Enhancement>;
22
+ export {};
23
+ //# sourceMappingURL=pivot-table-s2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pivot-table-s2.d.ts","sourceRoot":"","sources":["../../../src/experimental/s2/pivot-table-s2.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,+BAA+B,EACpC,KAAK,0BAA0B,EAChC,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,cAAc,gBAA0B,CAAC;AACtD,eAAO,MAAM,yBAAyB,wBAAkC,CAAC;AAEzE,KAAK,uBAAuB,GAAG,OAAO,CAAC,wBAAwB,EAAE;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC,CAAC;AAE3F,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAsB,SAAQ,0BAA0B;IACvE,IAAI,EAAE,OAAO,cAAc,CAAC;IAC5B,SAAS,EAAE,aAAa,CAAC,0BAA0B,CAAC,CAAC;IACrD,YAAY,EAAE,aAAa,CAAC,0BAA0B,CAAC,CAAC;IACxD,WAAW,EAAE,aAAa,CAAC,0BAA0B,CAAC,CAAC;IACvD,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CACxD;AAwBD,eAAO,MAAM,mBAAmB,EAAE,oBAAoB,CACpD,mBAAmB,EACnB,uBAAuB,EACvB,qBAAqB,CAqBtB,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,+BAA+B,CAC1E,mBAAmB,EACnB,uBAAuB,CAOvB,CAAC"}
package/dist/index.css ADDED
@@ -0,0 +1 @@
1
+ .dv-filter-bar[data-v-45855b0b]{display:flex;align-items:center;gap:12px;padding:11px 14px;background:#fff;border:1px solid var(--dv-card-border, #e1e6ed);border-radius:7px;box-shadow:0 1px 2px #10182809,0 5px 14px #10182806}.dv-filter-bar__controls[data-v-45855b0b]{flex:1;display:grid;grid-template-columns:repeat(24,minmax(0,1fr));column-gap:16px;row-gap:8px}.dv-filter-bar__control[data-v-45855b0b]{grid-column:span var(--dv-filter-xs);min-width:0}.dv-filter-bar__label[data-v-45855b0b]{display:block;margin-bottom:6px;color:var(--dv-text-secondary, #657184);font-size:12px;font-weight:600;line-height:18px;white-space:nowrap}.dv-filter-bar__control[data-v-45855b0b] .ant-select{width:100%;min-width:0}.dv-filter-bar__control[data-v-45855b0b] .ant-select-single .ant-select-selector,.dv-filter-bar__control[data-v-45855b0b] .ant-select-multiple .ant-select-selector{height:32px;min-height:32px}.dv-filter-bar__control[data-v-45855b0b] .ant-select-multiple .ant-select-selection-overflow{flex-wrap:nowrap;overflow:hidden}.dv-filter-bar__date-range[data-v-45855b0b]{display:flex;width:fit-content;min-width:0;max-width:100%;align-items:center;gap:10px}.dv-filter-bar__range-picker[data-v-45855b0b]{width:320px;min-width:220px;max-width:320px;height:32px;flex:0 1 320px}.dv-filter-bar__presets[data-v-45855b0b]{display:inline-flex;height:32px;flex:none;align-items:center;gap:2px;padding:3px;border:1px solid #e2e7ed;border-radius:6px;background:#f3f5f7}.dv-filter-bar__presets[data-v-45855b0b] .ant-radio-button-wrapper{height:24px;padding:0 8px;border:0;border-radius:4px;color:#737e8e;background:transparent;box-shadow:none;font-size:12px;font-weight:500;line-height:24px}.dv-filter-bar__presets[data-v-45855b0b] .ant-radio-button-wrapper:before{display:none}.dv-filter-bar__presets[data-v-45855b0b] .ant-radio-button-wrapper-checked{color:var(--dv-primary, #315fc4);background:#fff;box-shadow:0 1px 2px #10182814,0 0 0 1px #10182806;font-weight:600}.dv-filter-bar[data-v-45855b0b] .ant-select-selector,.dv-filter-bar[data-v-45855b0b] .ant-picker{border-color:#dce2e9;border-radius:5px;box-shadow:none}.dv-filter-bar__refresh[data-v-45855b0b]{width:78px;height:32px;flex:0 0 78px;border-color:var(--dv-primary, #315fc4);border-radius:6px;background:var(--dv-primary, #315fc4);box-shadow:none}@media (min-width: 576px){.dv-filter-bar__control[data-v-45855b0b]{grid-column:span var(--dv-filter-sm)}}@media (min-width: 768px){.dv-filter-bar__control[data-v-45855b0b]{grid-column:span var(--dv-filter-md);display:flex;align-items:center}.dv-filter-bar__label[data-v-45855b0b]{flex:none;margin:0 8px 0 0}.dv-filter-bar--flow .dv-filter-bar__controls[data-v-45855b0b]{display:flex;flex-wrap:wrap;align-items:center;column-gap:20px}.dv-filter-bar--flow .dv-filter-bar__control[data-v-45855b0b]{width:auto;flex:0 1 auto;grid-column:auto}.dv-filter-bar--flow .dv-filter-bar__control--select[data-v-45855b0b],.dv-filter-bar--flow .dv-filter-bar__control--multi-select[data-v-45855b0b]{width:clamp(220px,20vw,320px);flex-basis:clamp(220px,20vw,320px)}}@media (min-width: 992px){.dv-filter-bar__control[data-v-45855b0b]{grid-column:span var(--dv-filter-lg)}}@media (min-width: 1200px){.dv-filter-bar__control[data-v-45855b0b]{grid-column:span var(--dv-filter-xl)}}@media (min-width: 768px) and (max-width: 1300px){.dv-filter-bar__date-range[data-v-45855b0b]{gap:6px}.dv-filter-bar__range-picker[data-v-45855b0b]{width:288px;min-width:200px;max-width:288px;flex-basis:288px}.dv-filter-bar__presets[data-v-45855b0b] .ant-radio-button-wrapper{padding:0 5px;font-size:11px}}@media (max-width: 767px){.dv-filter-bar[data-v-45855b0b]{align-items:stretch;flex-direction:column}.dv-filter-bar__refresh[data-v-45855b0b]{align-self:flex-end}.dv-filter-bar__controls[data-v-45855b0b]{column-gap:0}.dv-filter-bar__date-range[data-v-45855b0b]{width:100%;align-items:stretch;flex-direction:column}.dv-filter-bar__range-picker[data-v-45855b0b]{width:100%;min-width:0;max-width:none;flex-basis:auto}.dv-filter-bar__refresh[data-v-45855b0b]{flex-basis:32px}.dv-filter-bar__date-popup .ant-picker-panels>.ant-picker-panel:last-child{display:none}.dv-filter-bar__date-popup .ant-picker-panel:first-child .ant-picker-header-next-btn,.dv-filter-bar__date-popup .ant-picker-panel:first-child .ant-picker-header-super-next-btn{visibility:visible!important}}.dv-panel[data-v-912acf36]{height:100%;overflow:hidden;border:1px solid var(--dv-card-border, #e1e6ed);border-radius:7px;background:#fff;box-shadow:0 1px 2px #10182809,0 5px 14px #10182806}.dv-panel[data-v-912acf36] .ant-card-head{min-height:50px;padding:0 16px;border-bottom-color:var(--dv-card-divider, #edf0f4)}.dv-panel[data-v-912acf36] .ant-card-head-title,.dv-panel[data-v-912acf36] .ant-card-extra{padding:10px 0}.dv-panel[data-v-912acf36] .ant-card-head-title{padding:13px 0}.dv-panel[data-v-912acf36] .ant-card-body{position:relative;display:flex;flex-direction:column;box-sizing:border-box;padding:15px 16px}.dv-panel__heading[data-v-912acf36],.dv-panel__title-group[data-v-912acf36],.dv-panel__actions[data-v-912acf36]{display:flex;align-items:center;gap:6px}.dv-panel__heading[data-v-912acf36]{min-width:0;flex-wrap:wrap;row-gap:2px;line-height:20px}.dv-panel__title-group[data-v-912acf36]{min-width:0}.dv-panel__title-group[data-v-912acf36] .anticon{flex-shrink:0}.dv-panel__title-note[data-v-912acf36]{min-width:0;max-width:100%;color:#98a2b3;font-size:12px;font-weight:400;line-height:20px;overflow-wrap:anywhere;white-space:normal}.dv-panel__title[data-v-912acf36]{overflow:hidden;color:var(--dv-text-title, #273244);font-size:14px;font-weight:650;line-height:20px;text-overflow:ellipsis;white-space:nowrap}.dv-panel__heading[data-v-912acf36] svg{color:#8a94a6;font-size:13px}.dv-panel__actions[data-v-912acf36]{gap:4px}.dv-panel__actions[data-v-912acf36] .ant-btn{width:28px;height:28px;padding:0;border-radius:5px;color:#6e7889}.dv-panel__actions[data-v-912acf36] .ant-btn:hover{color:var(--dv-primary, #315fc4);background:#f0f4fa}.dv-panel__filters[data-v-912acf36]{display:none}.dv-panel__warning[data-v-912acf36]{color:#f59e0b;font-size:15px}.dv-panel__state[data-v-912acf36]{min-height:190px;flex:1;display:flex;align-items:center;justify-content:center}.dv-panel[data-v-912acf36] .ant-spin{color:var(--dv-primary, #315fc4)}.dv-panel[data-v-912acf36] .ant-spin-dot-item{background-color:currentColor}.dv-panel__failure[data-v-912acf36]{display:flex;max-width:min(320px,100%);flex-direction:column;align-items:center;color:#667085;text-align:center}.dv-panel__failure-copy[data-v-912acf36]{max-width:100%;min-width:0}.dv-panel__failure-heading[data-v-912acf36]{overflow:hidden;color:#526075;font-size:13px;font-weight:600;line-height:20px;text-overflow:ellipsis;white-space:nowrap}.dv-panel__failure-icon[data-v-912acf36]{margin-bottom:9px;color:#8592a5;font-size:22px}.dv-panel__failure-detail[data-v-912acf36]{max-width:100%;overflow:hidden;margin-top:1px;color:#98a2b3;font-size:12px;line-height:18px;text-overflow:ellipsis;white-space:nowrap}.dv-panel__retry[data-v-912acf36]{width:auto;height:28px;margin-top:10px;padding:0 10px;border-color:#dbe1e8;border-radius:5px;color:#59677a;background:#fff;box-shadow:none;font-size:12px}.dv-panel__retry[data-v-912acf36]:hover,.dv-panel__retry[data-v-912acf36]:focus{border-color:#b8c7e5;color:var(--dv-primary, #315fc4);background:#f7f9fc}.dv-panel__idle[data-v-912acf36]{color:#98a0ad;font-size:12px}.dv-panel__renderer[data-v-912acf36]{position:relative;min-width:0;flex:1}.dv-panel__refreshing[data-v-912acf36]{position:absolute;z-index:1;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;background:#ffffffc2}.dv-panel__updated[data-v-912acf36]{display:none;margin-top:8px;color:#98a0ad;font-size:11px;text-align:right}.dv-panel--metric[data-v-912acf36] .ant-card-head{min-height:40px;border-bottom:0}.dv-panel--metric[data-v-912acf36] .ant-card-head-title{padding:13px 0 4px}.dv-panel--metric[data-v-912acf36] .ant-card-extra{padding:8px 0 0}.dv-panel--metric[data-v-912acf36] .ant-card-body{padding:2px 16px 13px}.dv-panel--metric .dv-panel__state--loading[data-v-912acf36],.dv-panel--metric .dv-panel__state--failure[data-v-912acf36]{min-height:0}.dv-panel--metric .dv-panel__failure[data-v-912acf36]{width:fit-content;max-width:100%;display:grid;grid-template-columns:20px minmax(0,1fr) 28px;column-gap:8px;text-align:left}.dv-panel--metric .dv-panel__failure-icon[data-v-912acf36]{margin-bottom:0;font-size:16px}.dv-panel--metric .dv-panel__failure-detail[data-v-912acf36]{display:none}.dv-panel--metric .dv-panel__retry[data-v-912acf36]{width:28px;margin-top:0;padding:0;border-color:transparent;background:transparent}.dv-panel--metric .dv-panel__retry-label[data-v-912acf36]{display:none}.dv-panel--metric .dv-panel__state--metric-empty[data-v-912acf36]{min-height:0;color:#98a0ad;font-size:12px;line-height:20px}.dv-panel--metric .dv-panel__title[data-v-912acf36]{color:#637083;font-size:13px;font-weight:550}.dv-panel--metric .dv-panel__actions[data-v-912acf36]{opacity:0;transition:opacity .16s ease}.dv-panel--metric:hover .dv-panel__actions[data-v-912acf36],.dv-panel--metric:focus-within .dv-panel__actions[data-v-912acf36]{opacity:1}.dv-dashboard[data-v-6d4b5bdb]{--dv-card-border: #e1e6ed;--dv-card-divider: #edf0f4;--dv-text-title: #273244;--dv-text-body: #182230;--dv-text-secondary: #657184;--dv-text-muted: #8a94a6;width:100%;min-width:0;color:var(--dv-text-body)}.dv-dashboard__header[data-v-6d4b5bdb]{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:16px}.dv-dashboard__header h1[data-v-6d4b5bdb]{margin:0;font-size:22px;font-weight:650;line-height:30px;letter-spacing:0}.dv-dashboard__header p[data-v-6d4b5bdb]{margin:4px 0 0;color:#64748b;font-size:13px}.dv-dashboard__grid[data-v-6d4b5bdb]{display:grid;grid-template-columns:repeat(24,minmax(0,1fr));gap:14px;margin-top:14px}.dv-dashboard__cell[data-v-6d4b5bdb]{grid-column:span var(--dv-panel-xs);min-width:0}@media (min-width: 576px){.dv-dashboard__cell[data-v-6d4b5bdb]{grid-column:span var(--dv-panel-sm)}}@media (min-width: 768px){.dv-dashboard__cell[data-v-6d4b5bdb]{grid-column:span var(--dv-panel-md)}}@media (min-width: 992px){.dv-dashboard__cell[data-v-6d4b5bdb]{grid-column:span var(--dv-panel-lg)}}@media (min-width: 1200px){.dv-dashboard__cell[data-v-6d4b5bdb]{grid-column:span var(--dv-panel-xl)}}@media (max-width: 767px){.dv-dashboard__grid[data-v-6d4b5bdb]{gap:12px}}.dv-chart-renderer[data-v-4f111bdf]{width:100%;min-width:0}.dv-bar-renderer[data-v-4f111bdf] .bar-container{height:320px!important}.dv-bar-renderer[data-v-4f111bdf] .legend{min-height:18px;margin-bottom:2px;padding:0 4px}.dv-bar-renderer[data-v-4f111bdf] .legend-container{justify-content:flex-end}.dv-bar-renderer[data-v-4f111bdf] .legend-item{margin-right:12px;color:#667085;font-size:11px}.dv-bar-renderer[data-v-4f111bdf] .legend-item-color{width:9px;height:9px;border-radius:3px}.dv-chart-renderer[data-v-efc34766]{width:100%;min-width:0}.dv-line-renderer[data-v-efc34766] .line-container{height:320px}.dv-line-renderer[data-v-efc34766] .legend{min-height:18px;margin-bottom:2px;padding:0 4px}.dv-line-renderer[data-v-efc34766] .legend-container{justify-content:flex-end}.dv-line-renderer[data-v-efc34766] .legend-item{margin-right:12px;color:#667085;font-size:11px}.dv-line-renderer[data-v-efc34766] .legend-item-color{width:8px;height:8px;border-radius:50%}.dv-metric[data-v-efa26253]{min-height:62px;display:flex;flex-direction:column;justify-content:flex-start}.dv-metric__value[data-v-efa26253]{display:flex;align-items:baseline;column-gap:4px;color:#172033;font-size:29px;font-weight:650;letter-spacing:0;line-height:1.2;white-space:nowrap}.dv-metric__number[data-v-efa26253]{font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.dv-metric__unit[data-v-efa26253]{position:relative;top:-1px;color:#7d8797;font-size:12px;font-weight:400;line-height:1}.dv-metric__comparison[data-v-efa26253]{display:flex;align-items:center;gap:10px;margin-top:7px;color:#7b8493;font-size:12px;line-height:18px}.dv-metric__comparison strong[data-v-efa26253]{display:inline-flex;align-items:center;gap:3px;font-weight:600}.dv-metric__comparison--favorable[data-v-efa26253]{color:#00a870}.dv-metric__comparison--unfavorable[data-v-efa26253]{color:#f53f3f}.dv-metric__comparison--neutral[data-v-efa26253]{color:#7b8493}.dv-chart-renderer[data-v-ccdee116]{width:100%;min-width:0}.dv-pie-renderer[data-v-ccdee116] .pie-container{height:320px!important;flex-direction:column-reverse}.dv-pie-renderer[data-v-ccdee116] .legend{min-height:18px;margin:4px 0 0;padding:0 4px}.dv-pie-renderer[data-v-ccdee116] .legend-item{margin-right:12px;color:#667085;font-size:11px}.dv-pie-renderer[data-v-ccdee116] .legend-item-color{width:8px;height:8px;border-radius:50%}.dv-table[data-v-c8a717c4] .ant-table{font-size:12px}.dv-table-scroll[data-v-c8a717c4]{width:100%;overflow-x:auto}.dv-table[data-v-c8a717c4]{min-width:720px}.dv-table[data-v-c8a717c4] .ant-table-thead>tr>th{padding:13px 16px;color:#5e6a7d;border-bottom:1px solid #e5eaf0;font-weight:600;background:#f7f9fb}.dv-table[data-v-c8a717c4] .ant-table-tbody>tr>td{padding:14px 16px;color:#344054;border-bottom:1px solid #edf0f4}.dv-table[data-v-c8a717c4] .ant-table-tbody>tr.ant-table-row:hover>td{background:#f8fafc}.dv-table[data-v-c8a717c4] .dv-table__progress-cell{display:grid;min-width:160px;grid-template-columns:minmax(96px,1fr) 48px;align-items:center;gap:8px}.dv-table[data-v-c8a717c4] .dv-table__progress-cell .ant-progress{margin:0;line-height:1}.dv-table[data-v-c8a717c4] .dv-table__progress-cell .ant-progress-inner{background:#edf0f4}.dv-table[data-v-c8a717c4] .dv-table__progress-cell .ant-progress-bg{background:#315fc4}.dv-table[data-v-c8a717c4] .dv-table__cell-value{color:#657184;font-variant-numeric:tabular-nums;text-align:right}.dv-table[data-v-c8a717c4] .dv-table__trend{display:inline-flex;align-items:center;gap:3px;font-weight:600;line-height:18px;white-space:nowrap}.dv-table[data-v-c8a717c4] .dv-table__trend--neutral{color:#7b8493}.dv-table[data-v-c8a717c4] .dv-table__trend--info{color:#315fc4}.dv-table[data-v-c8a717c4] .dv-table__trend--success{color:#00a870}.dv-table[data-v-c8a717c4] .dv-table__trend--warning{color:#c2410c}.dv-table[data-v-c8a717c4] .dv-table__trend--danger{color:#f53f3f}.dv-table[data-v-c8a717c4] .dv-table__tag{display:inline-flex;align-items:center;gap:4px;margin:0;border-radius:4px;font-size:12px;line-height:20px}.dv-table[data-v-c8a717c4] .dv-table__tag--neutral{color:#475467;border-color:#e4e7ec;background:#f2f4f7}.dv-table[data-v-c8a717c4] .dv-table__tag--info{color:#315fc4;border-color:#cbdafa;background:#eff6ff}.dv-table[data-v-c8a717c4] .dv-table__tag--success{color:#027a48;border-color:#abefc6;background:#ecfdf3}.dv-table[data-v-c8a717c4] .dv-table__tag--warning{color:#c2410c;border-color:#fed7aa;background:#fff7ed}.dv-table[data-v-c8a717c4] .dv-table__tag--danger{color:#b42318;border-color:#fecdca;background:#fef3f2}.dv-table[data-v-c8a717c4] .ant-table-pagination.ant-pagination{display:flex;align-items:center;gap:4px;margin:16px 0 0}.dv-table[data-v-c8a717c4] .ant-table-pagination.ant-pagination:after{display:none}.dv-table[data-v-c8a717c4] .ant-table-pagination.ant-pagination>.ant-pagination-item,.dv-table[data-v-c8a717c4] .ant-table-pagination.ant-pagination>.ant-pagination-prev,.dv-table[data-v-c8a717c4] .ant-table-pagination.ant-pagination>.ant-pagination-next,.dv-table[data-v-c8a717c4] .ant-table-pagination.ant-pagination>.ant-pagination-jump-prev,.dv-table[data-v-c8a717c4] .ant-table-pagination.ant-pagination>.ant-pagination-jump-next{display:flex;min-width:28px;height:28px;align-items:center;justify-content:center;margin:0;border-radius:5px;line-height:1}.dv-table[data-v-c8a717c4] .ant-table-pagination .ant-pagination-item>a,.dv-table[data-v-c8a717c4] .ant-table-pagination .ant-pagination-item-link,.dv-table[data-v-c8a717c4] .ant-table-pagination .ant-pagination-item-container{display:flex;width:100%;height:100%;align-items:center;justify-content:center;padding:0;line-height:1}.dv-table[data-v-c8a717c4] .ant-table-pagination .ant-pagination-item-ellipsis{display:flex;align-items:center;justify-content:center;letter-spacing:1px;line-height:1;text-indent:0}.dv-table[data-v-c8a717c4] .ant-table-pagination .anticon{display:inline-flex;align-items:center;justify-content:center;line-height:1}.dv-table[data-v-c8a717c4] .ant-table-pagination .anticon svg{display:block}.dv-table[data-v-c8a717c4] .ant-table-pagination .ant-pagination-item-active{border-color:var(--dv-primary, #315fc4);background:#f0f4fc;background:color-mix(in srgb,var(--dv-primary, #315fc4) 8%,white)}.dv-table[data-v-c8a717c4] .ant-table-pagination .ant-pagination-item-active>a{color:var(--dv-primary, #315fc4)}.dv-table[data-v-c8a717c4] .ant-table-pagination:not(.ant-pagination-disabled) .ant-pagination-item:not(.ant-pagination-item-disabled):hover,.dv-table[data-v-c8a717c4] .ant-table-pagination:not(.ant-pagination-disabled) .ant-pagination-item:not(.ant-pagination-item-disabled):focus-visible{border-color:var(--dv-primary, #315fc4);background:#f0f4fc;background:color-mix(in srgb,var(--dv-primary, #315fc4) 8%,white)}.dv-table[data-v-c8a717c4] .ant-table-pagination:not(.ant-pagination-disabled) .ant-pagination-item:not(.ant-pagination-item-disabled):hover>a,.dv-table[data-v-c8a717c4] .ant-table-pagination:not(.ant-pagination-disabled) .ant-pagination-item:not(.ant-pagination-item-disabled):focus-visible>a,.dv-table[data-v-c8a717c4] .ant-table-pagination .ant-pagination-item-link-icon,.dv-table[data-v-c8a717c4] .ant-table-pagination:not(.ant-pagination-disabled) .ant-pagination-prev:not(.ant-pagination-disabled):hover .ant-pagination-item-link,.dv-table[data-v-c8a717c4] .ant-table-pagination:not(.ant-pagination-disabled) .ant-pagination-prev:not(.ant-pagination-disabled):focus-visible .ant-pagination-item-link,.dv-table[data-v-c8a717c4] .ant-table-pagination:not(.ant-pagination-disabled) .ant-pagination-next:not(.ant-pagination-disabled):hover .ant-pagination-item-link,.dv-table[data-v-c8a717c4] .ant-table-pagination:not(.ant-pagination-disabled) .ant-pagination-next:not(.ant-pagination-disabled):focus-visible .ant-pagination-item-link{color:var(--dv-primary, #315fc4)}.dv-table[data-v-c8a717c4] .ant-table-pagination:not(.ant-pagination-disabled) .ant-pagination-prev:not(.ant-pagination-disabled):hover .ant-pagination-item-link,.dv-table[data-v-c8a717c4] .ant-table-pagination:not(.ant-pagination-disabled) .ant-pagination-prev:not(.ant-pagination-disabled):focus-visible .ant-pagination-item-link,.dv-table[data-v-c8a717c4] .ant-table-pagination:not(.ant-pagination-disabled) .ant-pagination-next:not(.ant-pagination-disabled):hover .ant-pagination-item-link,.dv-table[data-v-c8a717c4] .ant-table-pagination:not(.ant-pagination-disabled) .ant-pagination-next:not(.ant-pagination-disabled):focus-visible .ant-pagination-item-link{border-color:var(--dv-primary, #315fc4)}
@@ -0,0 +1,2 @@
1
+ export * from "./core";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}