@ng-prism/core 22.5.0 → 22.7.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -9
- package/dist/app/canvas/canvas-bg.styles.d.ts +1 -1
- package/dist/app/canvas/canvas-bg.styles.d.ts.map +1 -1
- package/dist/app/canvas/canvas-bg.styles.js +1 -1
- package/dist/app/canvas/canvas-overlay-tokens.d.ts +12 -0
- package/dist/app/canvas/canvas-overlay-tokens.d.ts.map +1 -0
- package/dist/app/canvas/canvas-overlay-tokens.js +52 -0
- package/dist/app/canvas/prism-canvas-bg-pill.component.js +2 -2
- package/dist/app/canvas/prism-canvas-pin-row.component.js +2 -2
- package/dist/app/canvas/prism-canvas-rulers.component.d.ts +2 -0
- package/dist/app/canvas/prism-canvas-rulers.component.d.ts.map +1 -1
- package/dist/app/canvas/prism-canvas-rulers.component.js +17 -12
- package/dist/app/canvas/prism-canvas-toolbar.component.d.ts +25 -3
- package/dist/app/canvas/prism-canvas-toolbar.component.d.ts.map +1 -1
- package/dist/app/canvas/prism-canvas-toolbar.component.js +154 -89
- package/dist/app/canvas/prism-template-popover.component.d.ts.map +1 -1
- package/dist/app/canvas/prism-template-popover.component.js +16 -7
- package/dist/app/canvas/state-chips.d.ts +50 -0
- package/dist/app/canvas/state-chips.d.ts.map +1 -0
- package/dist/app/canvas/state-chips.js +40 -0
- package/dist/app/component-head/head-metrics.d.ts +35 -19
- package/dist/app/component-head/head-metrics.d.ts.map +1 -1
- package/dist/app/component-head/head-metrics.js +57 -27
- package/dist/app/component-head/pipe-facts.d.ts +9 -0
- package/dist/app/component-head/pipe-facts.d.ts.map +1 -0
- package/dist/app/component-head/pipe-facts.js +15 -0
- package/dist/app/component-head/prism-component-head.component.d.ts +20 -22
- package/dist/app/component-head/prism-component-head.component.d.ts.map +1 -1
- package/dist/app/component-head/prism-component-head.component.js +85 -96
- package/dist/app/component-head/prism-head-gauge.component.d.ts +8 -12
- package/dist/app/component-head/prism-head-gauge.component.d.ts.map +1 -1
- package/dist/app/component-head/prism-head-gauge.component.js +51 -67
- package/dist/app/component-head/prism-head-info.component.d.ts +14 -2
- package/dist/app/component-head/prism-head-info.component.d.ts.map +1 -1
- package/dist/app/component-head/prism-head-info.component.js +84 -20
- package/dist/app/component-head/prism-stat.component.d.ts +4 -5
- package/dist/app/component-head/prism-stat.component.d.ts.map +1 -1
- package/dist/app/component-head/prism-stat.component.js +16 -12
- package/dist/app/component-head/service-facts.d.ts +8 -0
- package/dist/app/component-head/service-facts.d.ts.map +1 -0
- package/dist/app/component-head/service-facts.js +11 -0
- package/dist/app/controls/boolean-control.component.js +2 -2
- package/dist/app/controls/json-control.component.js +2 -2
- package/dist/app/controls/union-control.component.js +4 -3
- package/dist/app/directives/resize-value.d.ts +1 -1
- package/dist/app/directives/resize-value.js +1 -1
- package/dist/app/discovery-manifest.d.ts +2 -2
- package/dist/app/discovery-manifest.d.ts.map +1 -1
- package/dist/app/discovery-manifest.js +15 -3
- package/dist/app/header/header-brand.d.ts +25 -0
- package/dist/app/header/header-brand.d.ts.map +1 -0
- package/dist/app/header/header-brand.js +10 -0
- package/dist/app/header/prism-header.component.d.ts +2 -2
- package/dist/app/header/prism-header.component.d.ts.map +1 -1
- package/dist/app/header/prism-header.component.js +73 -57
- package/dist/app/icons/icon-registry.d.ts.map +1 -1
- package/dist/app/icons/icon-registry.js +4 -1
- package/dist/app/index.d.ts +12 -0
- package/dist/app/index.d.ts.map +1 -1
- package/dist/app/index.js +12 -1
- package/dist/app/layout-menu/prism-layout-menu.component.d.ts +3 -0
- package/dist/app/layout-menu/prism-layout-menu.component.d.ts.map +1 -1
- package/dist/app/layout-menu/prism-layout-menu.component.js +72 -58
- package/dist/app/overview/open-in-playground.d.ts +19 -0
- package/dist/app/overview/open-in-playground.d.ts.map +1 -0
- package/dist/app/overview/open-in-playground.js +25 -0
- package/dist/app/overview/overview-matrix.d.ts +85 -0
- package/dist/app/overview/overview-matrix.d.ts.map +1 -0
- package/dist/app/overview/overview-matrix.js +98 -0
- package/dist/app/overview/overview-visibility.d.ts +10 -2
- package/dist/app/overview/overview-visibility.d.ts.map +1 -1
- package/dist/app/overview/overview-visibility.js +14 -3
- package/dist/app/overview/prism-overview-cell.component.d.ts +27 -2
- package/dist/app/overview/prism-overview-cell.component.d.ts.map +1 -1
- package/dist/app/overview/prism-overview-cell.component.js +145 -28
- package/dist/app/overview/prism-overview-matrix.component.d.ts +29 -0
- package/dist/app/overview/prism-overview-matrix.component.d.ts.map +1 -0
- package/dist/app/overview/prism-overview-matrix.component.js +155 -0
- package/dist/app/overview/prism-overview.component.d.ts +4 -0
- package/dist/app/overview/prism-overview.component.d.ts.map +1 -1
- package/dist/app/overview/prism-overview.component.js +37 -14
- package/dist/app/page-renderer/prism-page-renderer.component.js +2 -2
- package/dist/app/panels/a11y/a11y-core.plugin.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-core.plugin.js +0 -1
- package/dist/app/panels/a11y/a11y-header-badge.component.d.ts +1 -4
- package/dist/app/panels/a11y/a11y-header-badge.component.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-header-badge.component.js +8 -19
- package/dist/app/panels/a11y/a11y-keyboard-overlay.component.js +2 -2
- package/dist/app/panels/a11y/a11y-overlay-host.component.d.ts +1 -0
- package/dist/app/panels/a11y/a11y-overlay-host.component.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-overlay-host.component.js +4 -3
- package/dist/app/panels/a11y/a11y-panel.component.d.ts +4 -1
- package/dist/app/panels/a11y/a11y-panel.component.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-panel.component.js +32 -54
- package/dist/app/panels/a11y/a11y-score.component.d.ts +8 -3
- package/dist/app/panels/a11y/a11y-score.component.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-score.component.js +19 -35
- package/dist/app/panels/a11y/a11y-sr-overlay.component.js +2 -2
- package/dist/app/panels/a11y/a11y-sr.component.js +2 -2
- package/dist/app/panels/a11y/a11y-summary.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-summary.js +8 -1
- package/dist/app/panels/a11y/a11y-tree.component.js +2 -2
- package/dist/app/panels/a11y/a11y-violations.component.d.ts +23 -2
- package/dist/app/panels/a11y/a11y-violations.component.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-violations.component.js +104 -89
- package/dist/app/panels/a11y/severity.d.ts +9 -0
- package/dist/app/panels/a11y/severity.d.ts.map +1 -0
- package/dist/app/panels/a11y/severity.js +12 -0
- package/dist/app/panels/controls/controls-plugin.d.ts.map +1 -1
- package/dist/app/panels/controls/controls-plugin.js +1 -2
- package/dist/app/panels/controls/non-editable-input-types.d.ts +9 -1
- package/dist/app/panels/controls/non-editable-input-types.d.ts.map +1 -1
- package/dist/app/panels/controls/non-editable-input-types.js +18 -0
- package/dist/app/panels/controls/prism-controls-panel.component.d.ts +2 -1
- package/dist/app/panels/controls/prism-controls-panel.component.d.ts.map +1 -1
- package/dist/app/panels/controls/prism-controls-panel.component.js +77 -59
- package/dist/app/panels/events/events-plugin.d.ts.map +1 -1
- package/dist/app/panels/events/events-plugin.js +1 -2
- package/dist/app/panels/events/prism-events-panel.component.d.ts +2 -0
- package/dist/app/panels/events/prism-events-panel.component.d.ts.map +1 -1
- package/dist/app/panels/events/prism-events-panel.component.js +20 -7
- package/dist/app/panels/events/prism-json-node.utils.d.ts +6 -0
- package/dist/app/panels/events/prism-json-node.utils.d.ts.map +1 -1
- package/dist/app/panels/events/prism-json-node.utils.js +8 -0
- package/dist/app/panels/panel-host/addon-panels.d.ts +11 -0
- package/dist/app/panels/panel-host/addon-panels.d.ts.map +1 -0
- package/dist/app/panels/panel-host/addon-panels.js +12 -0
- package/dist/app/panels/panel-host/panel-badge.d.ts +22 -0
- package/dist/app/panels/panel-host/panel-badge.d.ts.map +1 -1
- package/dist/app/panels/panel-host/panel-badge.js +56 -11
- package/dist/app/panels/panel-host/prism-panel-host.component.d.ts +4 -1
- package/dist/app/panels/panel-host/prism-panel-host.component.d.ts.map +1 -1
- package/dist/app/panels/panel-host/prism-panel-host.component.js +36 -70
- package/dist/app/pseudo/pseudo-state-marker.d.ts +32 -10
- package/dist/app/pseudo/pseudo-state-marker.d.ts.map +1 -1
- package/dist/app/pseudo/pseudo-state-marker.js +83 -67
- package/dist/app/pseudo/pseudo-targets.d.ts +11 -0
- package/dist/app/pseudo/pseudo-targets.d.ts.map +1 -0
- package/dist/app/pseudo/pseudo-targets.js +46 -0
- package/dist/app/pseudo/state-fit.d.ts +28 -0
- package/dist/app/pseudo/state-fit.d.ts.map +1 -0
- package/dist/app/pseudo/state-fit.js +97 -0
- package/dist/app/renderer/composition.d.ts +20 -0
- package/dist/app/renderer/composition.d.ts.map +1 -0
- package/dist/app/renderer/composition.js +26 -0
- package/dist/app/renderer/input-bindings.d.ts +28 -0
- package/dist/app/renderer/input-bindings.d.ts.map +1 -0
- package/dist/app/renderer/input-bindings.js +42 -0
- package/dist/app/renderer/known-inputs.d.ts +8 -1
- package/dist/app/renderer/known-inputs.d.ts.map +1 -1
- package/dist/app/renderer/known-inputs.js +13 -5
- package/dist/app/renderer/prism-renderer.component.d.ts +18 -4
- package/dist/app/renderer/prism-renderer.component.d.ts.map +1 -1
- package/dist/app/renderer/prism-renderer.component.js +78 -44
- package/dist/app/renderer/projectable-content.d.ts +8 -1
- package/dist/app/renderer/projectable-content.d.ts.map +1 -1
- package/dist/app/renderer/projectable-content.js +40 -29
- package/dist/app/renderer/rendered-key.d.ts +20 -6
- package/dist/app/renderer/rendered-key.d.ts.map +1 -1
- package/dist/app/renderer/rendered-key.js +25 -8
- package/dist/app/renderer/snippet-generator.d.ts +14 -2
- package/dist/app/renderer/snippet-generator.d.ts.map +1 -1
- package/dist/app/renderer/snippet-generator.js +138 -81
- package/dist/app/services/navigation-item.d.ts +10 -0
- package/dist/app/services/navigation-item.d.ts.map +1 -0
- package/dist/app/services/navigation-item.js +20 -0
- package/dist/app/services/navigation-item.types.d.ts +8 -0
- package/dist/app/services/navigation-item.types.d.ts.map +1 -1
- package/dist/app/services/prism-layout.service.d.ts +12 -0
- package/dist/app/services/prism-layout.service.d.ts.map +1 -1
- package/dist/app/services/prism-layout.service.js +17 -7
- package/dist/app/services/prism-manifest.service.d.ts +4 -0
- package/dist/app/services/prism-manifest.service.d.ts.map +1 -1
- package/dist/app/services/prism-manifest.service.js +4 -0
- package/dist/app/services/prism-navigation.service.d.ts +12 -0
- package/dist/app/services/prism-navigation.service.d.ts.map +1 -1
- package/dist/app/services/prism-navigation.service.js +85 -19
- package/dist/app/services/prism-panel.service.d.ts +7 -3
- package/dist/app/services/prism-panel.service.d.ts.map +1 -1
- package/dist/app/services/prism-panel.service.js +13 -4
- package/dist/app/services/prism-pseudo-state.service.d.ts +59 -14
- package/dist/app/services/prism-pseudo-state.service.d.ts.map +1 -1
- package/dist/app/services/prism-pseudo-state.service.js +86 -29
- package/dist/app/services/prism-renderer.service.d.ts +23 -0
- package/dist/app/services/prism-renderer.service.d.ts.map +1 -1
- package/dist/app/services/prism-renderer.service.js +77 -8
- package/dist/app/services/prism-search.service.d.ts +4 -0
- package/dist/app/services/prism-search.service.d.ts.map +1 -1
- package/dist/app/services/prism-search.service.js +29 -6
- package/dist/app/services/prism-theme.service.d.ts +11 -3
- package/dist/app/services/prism-theme.service.d.ts.map +1 -1
- package/dist/app/services/prism-theme.service.js +27 -19
- package/dist/app/services/prism-url-state.service.d.ts.map +1 -1
- package/dist/app/services/prism-url-state.service.js +81 -12
- package/dist/app/shared/badge.types.d.ts +7 -0
- package/dist/app/shared/badge.types.d.ts.map +1 -0
- package/dist/app/shared/badge.types.js +9 -0
- package/dist/app/shared/brand-mark.d.ts +35 -0
- package/dist/app/shared/brand-mark.d.ts.map +1 -0
- package/dist/app/shared/brand-mark.js +52 -0
- package/dist/app/shared/metric-bar.d.ts +6 -0
- package/dist/app/shared/metric-bar.d.ts.map +1 -0
- package/dist/app/shared/metric-bar.js +7 -0
- package/dist/app/shared/prism-badge.component.d.ts +21 -0
- package/dist/app/shared/prism-badge.component.d.ts.map +1 -0
- package/dist/app/shared/prism-badge.component.js +68 -0
- package/dist/app/shared/prism-button.component.d.ts +12 -0
- package/dist/app/shared/prism-button.component.d.ts.map +1 -0
- package/dist/app/shared/prism-button.component.js +28 -0
- package/dist/app/shared/prism-icon-button.component.d.ts +17 -0
- package/dist/app/shared/prism-icon-button.component.d.ts.map +1 -0
- package/dist/app/shared/prism-icon-button.component.js +37 -0
- package/dist/app/shared/prism-list-row.component.d.ts +17 -0
- package/dist/app/shared/prism-list-row.component.d.ts.map +1 -0
- package/dist/app/shared/prism-list-row.component.js +57 -0
- package/dist/app/shared/prism-logo.component.d.ts +24 -0
- package/dist/app/shared/prism-logo.component.d.ts.map +1 -0
- package/dist/app/shared/prism-logo.component.js +77 -0
- package/dist/app/shared/prism-metric-badge.component.d.ts +9 -4
- package/dist/app/shared/prism-metric-badge.component.d.ts.map +1 -1
- package/dist/app/shared/prism-metric-badge.component.js +33 -12
- package/dist/app/shared/prism-metric-card.component.d.ts +30 -0
- package/dist/app/shared/prism-metric-card.component.d.ts.map +1 -0
- package/dist/app/shared/prism-metric-card.component.js +111 -0
- package/dist/app/shared/prism-panel-toolbar.component.d.ts +13 -0
- package/dist/app/shared/prism-panel-toolbar.component.d.ts.map +1 -0
- package/dist/app/shared/prism-panel-toolbar.component.js +28 -0
- package/dist/app/shared/prism-segmented.component.d.ts +25 -0
- package/dist/app/shared/prism-segmented.component.d.ts.map +1 -0
- package/dist/app/shared/prism-segmented.component.js +77 -0
- package/dist/app/shared/prism-tabs.component.d.ts +44 -0
- package/dist/app/shared/prism-tabs.component.d.ts.map +1 -0
- package/dist/app/shared/prism-tabs.component.js +134 -0
- package/dist/app/shared/roving-focus.d.ts +13 -0
- package/dist/app/shared/roving-focus.d.ts.map +1 -0
- package/dist/app/shared/roving-focus.js +34 -0
- package/dist/app/shell/prism-shell.component.d.ts +13 -0
- package/dist/app/shell/prism-shell.component.d.ts.map +1 -1
- package/dist/app/shell/prism-shell.component.js +57 -28
- package/dist/app/shell/should-select-first.d.ts +17 -0
- package/dist/app/shell/should-select-first.d.ts.map +1 -0
- package/dist/app/shell/should-select-first.js +13 -0
- package/dist/app/sidebar/navigation-decorations.d.ts +23 -1
- package/dist/app/sidebar/navigation-decorations.d.ts.map +1 -1
- package/dist/app/sidebar/navigation-decorations.js +33 -2
- package/dist/app/sidebar/prism-sidebar.component.d.ts +5 -15
- package/dist/app/sidebar/prism-sidebar.component.d.ts.map +1 -1
- package/dist/app/sidebar/prism-sidebar.component.js +89 -77
- package/dist/app/theme/deprecated-tokens.d.ts +15 -0
- package/dist/app/theme/deprecated-tokens.d.ts.map +1 -0
- package/dist/app/theme/deprecated-tokens.js +22 -0
- package/dist/app/theme/favicon.d.ts +3 -0
- package/dist/app/theme/favicon.d.ts.map +1 -0
- package/dist/app/theme/favicon.js +3 -0
- package/dist/app/theme/prism-default-theme.d.ts.map +1 -1
- package/dist/app/theme/prism-default-theme.js +122 -66
- package/dist/app/theme/resolve-theme-tokens.d.ts +29 -0
- package/dist/app/theme/resolve-theme-tokens.d.ts.map +1 -0
- package/dist/app/theme/resolve-theme-tokens.js +43 -0
- package/dist/app/variant-ribbon/prism-variant-ribbon.component.d.ts +4 -7
- package/dist/app/variant-ribbon/prism-variant-ribbon.component.d.ts.map +1 -1
- package/dist/app/variant-ribbon/prism-variant-ribbon.component.js +31 -69
- package/dist/app/view-tab-bar/next-view-id.d.ts +7 -1
- package/dist/app/view-tab-bar/next-view-id.d.ts.map +1 -1
- package/dist/app/view-tab-bar/next-view-id.js +9 -1
- package/dist/app/view-tab-bar/panel-inputs.d.ts +28 -0
- package/dist/app/view-tab-bar/panel-inputs.d.ts.map +1 -0
- package/dist/app/view-tab-bar/panel-inputs.js +41 -0
- package/dist/app/view-tab-bar/prism-view-panel-host.component.d.ts +2 -3
- package/dist/app/view-tab-bar/prism-view-panel-host.component.d.ts.map +1 -1
- package/dist/app/view-tab-bar/prism-view-panel-host.component.js +9 -9
- package/dist/app/view-tab-bar/prism-view-tab-bar.component.d.ts +6 -0
- package/dist/app/view-tab-bar/prism-view-tab-bar.component.d.ts.map +1 -1
- package/dist/app/view-tab-bar/prism-view-tab-bar.component.js +22 -29
- package/dist/builder/config-loader/deprecated-options.d.ts +9 -0
- package/dist/builder/config-loader/deprecated-options.d.ts.map +1 -0
- package/dist/builder/config-loader/deprecated-options.js +34 -0
- package/dist/builder/manifest/composition-wrapper.generator.d.ts +14 -0
- package/dist/builder/manifest/composition-wrapper.generator.d.ts.map +1 -0
- package/dist/builder/manifest/composition-wrapper.generator.js +66 -0
- package/dist/builder/manifest/host-parser.d.ts +2 -0
- package/dist/builder/manifest/host-parser.d.ts.map +1 -1
- package/dist/builder/manifest/host-parser.js +9 -4
- package/dist/builder/manifest/manifest-imports.d.ts +34 -0
- package/dist/builder/manifest/manifest-imports.d.ts.map +1 -0
- package/dist/builder/manifest/manifest-imports.js +91 -0
- package/dist/builder/manifest/runtime-manifest.generator.d.ts +13 -0
- package/dist/builder/manifest/runtime-manifest.generator.d.ts.map +1 -1
- package/dist/builder/manifest/runtime-manifest.generator.js +137 -65
- package/dist/builder/manifest/selector-element.d.ts +16 -0
- package/dist/builder/manifest/selector-element.d.ts.map +1 -0
- package/dist/builder/manifest/selector-element.js +46 -0
- package/dist/builder/manifest/template-literal.d.ts +3 -0
- package/dist/builder/manifest/template-literal.d.ts.map +1 -0
- package/dist/builder/manifest/template-literal.js +4 -0
- package/dist/builder/plugin-runner/plugin-runner.d.ts.map +1 -1
- package/dist/builder/plugin-runner/plugin-runner.js +29 -26
- package/dist/builder/scanner/api/angular-decorators.d.ts +84 -0
- package/dist/builder/scanner/api/angular-decorators.d.ts.map +1 -0
- package/dist/builder/scanner/api/angular-decorators.js +157 -0
- package/dist/builder/scanner/api/component-api.extractor.d.ts +13 -0
- package/dist/builder/scanner/api/component-api.extractor.d.ts.map +1 -0
- package/dist/builder/scanner/api/component-api.extractor.js +104 -0
- package/dist/builder/scanner/api/doc-tags.d.ts +13 -0
- package/dist/builder/scanner/api/doc-tags.d.ts.map +1 -0
- package/dist/builder/scanner/api/doc-tags.js +101 -0
- package/dist/builder/scanner/api/export-index.d.ts +18 -0
- package/dist/builder/scanner/api/export-index.d.ts.map +1 -0
- package/dist/builder/scanner/api/export-index.js +22 -0
- package/dist/builder/scanner/api/member.extractor.d.ts +90 -0
- package/dist/builder/scanner/api/member.extractor.d.ts.map +1 -0
- package/dist/builder/scanner/api/member.extractor.js +270 -0
- package/dist/builder/scanner/api/pipe-api.extractor.d.ts +12 -0
- package/dist/builder/scanner/api/pipe-api.extractor.d.ts.map +1 -0
- package/dist/builder/scanner/api/pipe-api.extractor.js +52 -0
- package/dist/builder/scanner/api/service-api.extractor.d.ts +14 -0
- package/dist/builder/scanner/api/service-api.extractor.d.ts.map +1 -0
- package/dist/builder/scanner/api/service-api.extractor.js +119 -0
- package/dist/builder/scanner/api/setup.reader.d.ts +26 -0
- package/dist/builder/scanner/api/setup.reader.d.ts.map +1 -0
- package/dist/builder/scanner/api/setup.reader.js +89 -0
- package/dist/builder/scanner/api/type-collector.d.ts +24 -0
- package/dist/builder/scanner/api/type-collector.d.ts.map +1 -0
- package/dist/builder/scanner/api/type-collector.js +211 -0
- package/dist/builder/scanner/ast-utils.d.ts +8 -0
- package/dist/builder/scanner/ast-utils.d.ts.map +1 -1
- package/dist/builder/scanner/ast-utils.js +37 -1
- package/dist/builder/scanner/class-hierarchy.d.ts +5 -3
- package/dist/builder/scanner/class-hierarchy.d.ts.map +1 -1
- package/dist/builder/scanner/class-hierarchy.js +12 -6
- package/dist/builder/scanner/component.scanner.d.ts +60 -6
- package/dist/builder/scanner/component.scanner.d.ts.map +1 -1
- package/dist/builder/scanner/component.scanner.js +229 -58
- package/dist/builder/scanner/composition/compose-template.d.ts +36 -0
- package/dist/builder/scanner/composition/compose-template.d.ts.map +1 -0
- package/dist/builder/scanner/composition/compose-template.js +187 -0
- package/dist/builder/scanner/composition/declarables.d.ts +54 -0
- package/dist/builder/scanner/composition/declarables.d.ts.map +1 -0
- package/dist/builder/scanner/composition/declarables.js +182 -0
- package/dist/builder/scanner/composition/match-declarables.d.ts +43 -0
- package/dist/builder/scanner/composition/match-declarables.d.ts.map +1 -0
- package/dist/builder/scanner/composition/match-declarables.js +131 -0
- package/dist/builder/scanner/composition/read-composition.d.ts +77 -0
- package/dist/builder/scanner/composition/read-composition.d.ts.map +1 -0
- package/dist/builder/scanner/composition/read-composition.js +302 -0
- package/dist/builder/scanner/composition/template-elements.d.ts +12 -0
- package/dist/builder/scanner/composition/template-elements.d.ts.map +1 -0
- package/dist/builder/scanner/composition/template-elements.js +41 -0
- package/dist/builder/scanner/entry-point-discovery.d.ts +5 -0
- package/dist/builder/scanner/entry-point-discovery.d.ts.map +1 -1
- package/dist/builder/scanner/entry-point-discovery.js +14 -0
- package/dist/builder/scanner/entry-point.scanner.d.ts +3 -1
- package/dist/builder/scanner/entry-point.scanner.d.ts.map +1 -1
- package/dist/builder/scanner/entry-point.scanner.js +7 -6
- package/dist/builder/scanner/index.d.ts +4 -0
- package/dist/builder/scanner/index.d.ts.map +1 -1
- package/dist/builder/scanner/index.js +2 -0
- package/dist/builder/scanner/input.extractor.d.ts +31 -2
- package/dist/builder/scanner/input.extractor.d.ts.map +1 -1
- package/dist/builder/scanner/input.extractor.js +73 -17
- package/dist/builder/scanner/pipe.scanner.d.ts +29 -0
- package/dist/builder/scanner/pipe.scanner.d.ts.map +1 -0
- package/dist/builder/scanner/pipe.scanner.js +65 -0
- package/dist/builder/scanner/pseudo-states.d.ts +1 -0
- package/dist/builder/scanner/pseudo-states.d.ts.map +1 -1
- package/dist/builder/scanner/pseudo-states.js +1 -1
- package/dist/builder/scanner/scanner.d.ts +27 -3
- package/dist/builder/scanner/scanner.d.ts.map +1 -1
- package/dist/builder/scanner/scanner.js +68 -24
- package/dist/builder/scanner/service/angular-decorators.d.ts +80 -0
- package/dist/builder/scanner/service/angular-decorators.d.ts.map +1 -0
- package/dist/builder/scanner/service/angular-decorators.js +154 -0
- package/dist/builder/scanner/service/doc-tags.d.ts +13 -0
- package/dist/builder/scanner/service/doc-tags.d.ts.map +1 -0
- package/dist/builder/scanner/service/doc-tags.js +97 -0
- package/dist/builder/scanner/service/export-index.d.ts +18 -0
- package/dist/builder/scanner/service/export-index.d.ts.map +1 -0
- package/dist/builder/scanner/service/export-index.js +22 -0
- package/dist/builder/scanner/service/member.extractor.d.ts +65 -0
- package/dist/builder/scanner/service/member.extractor.d.ts.map +1 -0
- package/dist/builder/scanner/service/member.extractor.js +216 -0
- package/dist/builder/scanner/service/pipe-api.extractor.d.ts +12 -0
- package/dist/builder/scanner/service/pipe-api.extractor.d.ts.map +1 -0
- package/dist/builder/scanner/service/pipe-api.extractor.js +72 -0
- package/dist/builder/scanner/service/service-api.extractor.d.ts +14 -0
- package/dist/builder/scanner/service/service-api.extractor.d.ts.map +1 -0
- package/dist/builder/scanner/service/service-api.extractor.js +119 -0
- package/dist/builder/scanner/service/setup.reader.d.ts +26 -0
- package/dist/builder/scanner/service/setup.reader.d.ts.map +1 -0
- package/dist/builder/scanner/service/setup.reader.js +89 -0
- package/dist/builder/scanner/service/type-collector.d.ts +23 -0
- package/dist/builder/scanner/service/type-collector.d.ts.map +1 -0
- package/dist/builder/scanner/service/type-collector.js +210 -0
- package/dist/builder/scanner/service.scanner.d.ts +26 -0
- package/dist/builder/scanner/service.scanner.d.ts.map +1 -0
- package/dist/builder/scanner/service.scanner.js +61 -0
- package/dist/builder/scanner/showcase-diagnostics.d.ts +60 -1
- package/dist/builder/scanner/showcase-diagnostics.d.ts.map +1 -1
- package/dist/builder/scanner/showcase-diagnostics.js +123 -10
- package/dist/builder/scanner/showcase-states.d.ts +17 -0
- package/dist/builder/scanner/showcase-states.d.ts.map +1 -0
- package/dist/builder/scanner/showcase-states.js +58 -0
- package/dist/builder/scanner/source-file-cache.d.ts +26 -0
- package/dist/builder/scanner/source-file-cache.d.ts.map +1 -0
- package/dist/builder/scanner/source-file-cache.js +60 -0
- package/dist/builder/shared/prism-pipeline.d.ts +6 -0
- package/dist/builder/shared/prism-pipeline.d.ts.map +1 -1
- package/dist/builder/shared/prism-pipeline.js +71 -18
- package/dist/decorator/index.d.ts +1 -1
- package/dist/decorator/index.d.ts.map +1 -1
- package/dist/decorator/showcase.types.d.ts +102 -9
- package/dist/decorator/showcase.types.d.ts.map +1 -1
- package/dist/plugin/index.d.ts +6 -1
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +4 -0
- package/dist/plugin/pipe.types.d.ts +36 -0
- package/dist/plugin/pipe.types.d.ts.map +1 -0
- package/dist/plugin/pipe.types.js +1 -0
- package/dist/plugin/plugin.types.d.ts +184 -8
- package/dist/plugin/plugin.types.d.ts.map +1 -1
- package/dist/plugin/service.types.d.ts +124 -0
- package/dist/plugin/service.types.d.ts.map +1 -0
- package/dist/plugin/service.types.js +1 -0
- package/dist/plugin/status.d.ts +27 -0
- package/dist/plugin/status.d.ts.map +1 -0
- package/dist/plugin/status.js +26 -0
- package/dist/shared/composition.d.ts +30 -0
- package/dist/shared/composition.d.ts.map +1 -0
- package/dist/shared/composition.js +29 -0
- package/dist/shared/pseudo-state.type.d.ts +2 -1
- package/dist/shared/pseudo-state.type.d.ts.map +1 -1
- package/dist/shared/void-elements.d.ts +3 -0
- package/dist/shared/void-elements.d.ts.map +1 -0
- package/dist/shared/void-elements.js +2 -0
- package/package.json +1 -1
- package/src/builder/build/schema.json +6 -6
- package/src/builder/serve/schema.json +6 -6
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import ts from 'typescript';
|
|
2
|
-
import { evaluateStatic, findDecorator, getDecoratorArgument, getJsDocComment } from './ast-utils.js';
|
|
2
|
+
import { evaluateExpression, evaluateStatic, findDecorator, getDecoratorArgument, getJsDocComment, UNEVALUABLE } from './ast-utils.js';
|
|
3
3
|
import { getClassHierarchy } from './class-hierarchy.js';
|
|
4
4
|
/**
|
|
5
5
|
* Extract all @Input(), input() and model() signal metadata from a class
|
|
@@ -28,11 +28,9 @@ export function extractInputs(classDecl, checker, hierarchy = getClassHierarchy(
|
|
|
28
28
|
}
|
|
29
29
|
const initializedBy = reinitialized.get(name);
|
|
30
30
|
if (initializedBy) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
else
|
|
35
|
-
input.defaultValue = defaultValue;
|
|
31
|
+
delete input.defaultValue;
|
|
32
|
+
delete input.defaultUnreadable;
|
|
33
|
+
Object.assign(input, defaultFields(readInitialValue(initializedBy, checker)));
|
|
36
34
|
}
|
|
37
35
|
seen.add(name);
|
|
38
36
|
inputs.push(input);
|
|
@@ -40,16 +38,53 @@ export function extractInputs(classDecl, checker, hierarchy = getClassHierarchy(
|
|
|
40
38
|
}
|
|
41
39
|
return inputs;
|
|
42
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* The declaration Angular takes an input from: the member of that name in the
|
|
43
|
+
* nearest class that defines metadata and declares it an input, the one
|
|
44
|
+
* {@link extractInputs} reads.
|
|
45
|
+
*/
|
|
46
|
+
export function findInputDeclaration(hierarchy, name) {
|
|
47
|
+
return findDeclaration(hierarchy, name, (member) => !isStatic(member) && (!!findDecorator(member, 'Input') || !!getInputSignalCall(member)));
|
|
48
|
+
}
|
|
49
|
+
/** The declaration Angular takes an output from, as {@link findInputDeclaration} for an input. */
|
|
50
|
+
export function findOutputDeclaration(hierarchy, name) {
|
|
51
|
+
return findDeclaration(hierarchy, name, (member) => !!findDecorator(member, 'Output') || isOutputSignal(member));
|
|
52
|
+
}
|
|
53
|
+
/** Whether an input is a `model()` or `model.required()`, for which Angular adds a change output. */
|
|
54
|
+
export function isModelInput(member) {
|
|
55
|
+
const call = getInputSignalCall(member);
|
|
56
|
+
const callee = call && (ts.isPropertyAccessExpression(call.expression) ? call.expression.expression : call.expression);
|
|
57
|
+
return !!callee && ts.isIdentifier(callee) && callee.text === 'model';
|
|
58
|
+
}
|
|
59
|
+
function findDeclaration(hierarchy, name, declares) {
|
|
60
|
+
for (const { classDecl: owner, definesMetadata } of hierarchy.classes) {
|
|
61
|
+
if (!definesMetadata)
|
|
62
|
+
continue;
|
|
63
|
+
const member = owner.members.find((m) => ts.isPropertyDeclaration(m) && ts.isIdentifier(m.name) && m.name.text === name && declares(m));
|
|
64
|
+
if (member)
|
|
65
|
+
return { member, owner };
|
|
66
|
+
}
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
43
69
|
function isStatic(member) {
|
|
44
70
|
return !!ts.getModifiers(member)?.some((m) => m.kind === ts.SyntaxKind.StaticKeyword);
|
|
45
71
|
}
|
|
46
|
-
/**
|
|
72
|
+
/**
|
|
73
|
+
* What a field starts out with: its initializer, or for `input()` and `model()` the value passed to them. `undefined`
|
|
74
|
+
* when there is none, {@link UNEVALUABLE} when there is one the scan cannot read.
|
|
75
|
+
*/
|
|
47
76
|
function readInitialValue(member, checker) {
|
|
48
77
|
const signalCall = getInputSignalCall(member);
|
|
49
78
|
if (!signalCall)
|
|
50
79
|
return member.initializer ? evaluateDefault(member.initializer, checker) : undefined;
|
|
51
80
|
return !isSignalInputRequired(signalCall) && signalCall.arguments.length > 0 ? evaluateDefault(signalCall.arguments[0], checker) : undefined;
|
|
52
81
|
}
|
|
82
|
+
/** How {@link InputMeta} carries what {@link readInitialValue} found: a value, or that there is one that could not be read. */
|
|
83
|
+
function defaultFields(initial) {
|
|
84
|
+
if (initial === UNEVALUABLE)
|
|
85
|
+
return { defaultUnreadable: true };
|
|
86
|
+
return initial === undefined ? {} : { defaultValue: initial };
|
|
87
|
+
}
|
|
53
88
|
/**
|
|
54
89
|
* `owner` declares the member. `subclass` is the showcased class when that is
|
|
55
90
|
* a different one, which decides what the type parameters of `owner` stand for.
|
|
@@ -58,17 +93,19 @@ function readInput(member, name, checker, owner, subclass) {
|
|
|
58
93
|
const inputDecorator = findDecorator(member, 'Input');
|
|
59
94
|
if (inputDecorator) {
|
|
60
95
|
const required = isDecoratorInputRequired(inputDecorator);
|
|
61
|
-
const
|
|
96
|
+
const alias = readAlias(getDecoratorArgument(inputDecorator), name, checker);
|
|
97
|
+
const initial = readInitialValue(member, checker);
|
|
62
98
|
const doc = getJsDocComment(member, checker);
|
|
63
99
|
const instantiated = subclass && usesTypeParameters(member.type ?? member.initializer, owner, checker) ? getInstantiatedType(name, subclass, checker) : undefined;
|
|
64
100
|
const { type, values, rawType } = instantiated ? mapType(instantiated, checker) : resolveDecoratorInputType(member, checker);
|
|
65
101
|
return {
|
|
66
102
|
name,
|
|
103
|
+
...(alias && { alias }),
|
|
67
104
|
type,
|
|
68
105
|
rawType,
|
|
69
106
|
required,
|
|
70
107
|
...(values && { values }),
|
|
71
|
-
...(
|
|
108
|
+
...defaultFields(initial),
|
|
72
109
|
...(doc && { doc })
|
|
73
110
|
};
|
|
74
111
|
}
|
|
@@ -76,7 +113,9 @@ function readInput(member, name, checker, owner, subclass) {
|
|
|
76
113
|
if (!signalCall)
|
|
77
114
|
return undefined;
|
|
78
115
|
const required = isSignalInputRequired(signalCall);
|
|
79
|
-
|
|
116
|
+
// `input(initial, options)`, but `input.required(options)`.
|
|
117
|
+
const alias = readAlias(signalCall.arguments[required ? 0 : 1], name, checker);
|
|
118
|
+
const initial = readInitialValue(member, checker);
|
|
80
119
|
const doc = getJsDocComment(member, checker);
|
|
81
120
|
const declaredType = signalCall.typeArguments?.[0] ?? signalCall.arguments[0];
|
|
82
121
|
// A signal is a getter function, so its call signature returns the value type.
|
|
@@ -84,14 +123,26 @@ function readInput(member, name, checker, owner, subclass) {
|
|
|
84
123
|
const { type, values, rawType } = instantiated ? mapType(instantiated, checker) : resolveSignalInputType(signalCall, checker);
|
|
85
124
|
return {
|
|
86
125
|
name,
|
|
126
|
+
...(alias && { alias }),
|
|
87
127
|
type,
|
|
88
128
|
rawType,
|
|
89
129
|
required,
|
|
90
130
|
...(values && { values }),
|
|
91
|
-
...(
|
|
131
|
+
...defaultFields(initial),
|
|
92
132
|
...(doc && { doc })
|
|
93
133
|
};
|
|
94
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* The `alias` of an input or output, from a decorator argument (`'x'` or
|
|
137
|
+
* `{ alias: 'x' }`) or the options of `input()`, `model()` and `output()`.
|
|
138
|
+
* It counts when the builder can evaluate it statically to a string (a literal
|
|
139
|
+
* or a constant) that differs from the member name.
|
|
140
|
+
*/
|
|
141
|
+
function readAlias(arg, name, checker) {
|
|
142
|
+
const value = arg ? evaluateExpression(arg, checker) : undefined;
|
|
143
|
+
const alias = typeof value === 'object' && value !== null ? value['alias'] : value;
|
|
144
|
+
return typeof alias === 'string' && alias !== name ? alias : undefined;
|
|
145
|
+
}
|
|
95
146
|
/**
|
|
96
147
|
* Extract all @Output() and output() signal metadata from a class declaration
|
|
97
148
|
* and the base classes Angular inherits outputs from.
|
|
@@ -108,11 +159,14 @@ export function extractOutputs(classDecl, checker, hierarchy = getClassHierarchy
|
|
|
108
159
|
const name = member.name && ts.isIdentifier(member.name) ? member.name.text : undefined;
|
|
109
160
|
if (!name || seen.has(name))
|
|
110
161
|
continue;
|
|
111
|
-
|
|
162
|
+
const outputDecorator = findDecorator(member, 'Output');
|
|
163
|
+
if (!outputDecorator && !isOutputSignal(member))
|
|
112
164
|
continue;
|
|
113
165
|
const doc = getJsDocComment(member, checker);
|
|
166
|
+
const options = outputDecorator ? getDecoratorArgument(outputDecorator) : member.initializer.arguments[0];
|
|
167
|
+
const alias = readAlias(options, name, checker);
|
|
114
168
|
seen.add(name);
|
|
115
|
-
outputs.push({ name, ...(doc && { doc }) });
|
|
169
|
+
outputs.push({ name, ...(alias && { alias }), ...(doc && { doc }) });
|
|
116
170
|
}
|
|
117
171
|
}
|
|
118
172
|
return outputs;
|
|
@@ -122,7 +176,7 @@ export function extractOutputs(classDecl, checker, hierarchy = getClassHierarchy
|
|
|
122
176
|
* mentions a type parameter of the class that declares it. Only then does the
|
|
123
177
|
* subclass change the type; otherwise the source text stays, alias names included.
|
|
124
178
|
*/
|
|
125
|
-
function usesTypeParameters(node, owner, checker) {
|
|
179
|
+
export function usesTypeParameters(node, owner, checker) {
|
|
126
180
|
const parameters = owner.typeParameters;
|
|
127
181
|
if (!node || !parameters?.length)
|
|
128
182
|
return false;
|
|
@@ -155,19 +209,21 @@ function typeMentions(type, isOwnParameter, checker, visited = new Set()) {
|
|
|
155
209
|
* sees it: `items = input.required<T[]>()` in `Field<T>` is an
|
|
156
210
|
* `InputSignal<Country[]>` on `Picker extends Field<Country>`.
|
|
157
211
|
*/
|
|
158
|
-
function getInstantiatedType(name, subclass, checker) {
|
|
212
|
+
export function getInstantiatedType(name, subclass, checker) {
|
|
159
213
|
const property = checker.getPropertyOfType(checker.getTypeAtLocation(subclass), name);
|
|
160
214
|
return property && checker.getTypeOfSymbolAtLocation(property, subclass);
|
|
161
215
|
}
|
|
162
216
|
/**
|
|
163
217
|
* A default is all or nothing. The renderer applies it to the component, so
|
|
164
218
|
* the part of `{ ...shared, size: 'm' }` that can be read would overwrite the
|
|
165
|
-
* whole default the component actually declares
|
|
219
|
+
* whole default the component actually declares: it is {@link UNEVALUABLE}
|
|
220
|
+
* instead, so that a default the scan could not read stays apart from one that
|
|
221
|
+
* is `undefined`.
|
|
166
222
|
*/
|
|
167
223
|
function evaluateDefault(node, checker) {
|
|
168
224
|
let complete = true;
|
|
169
225
|
const value = evaluateStatic(node, { checker, report: () => (complete = false) });
|
|
170
|
-
return complete ? value :
|
|
226
|
+
return complete ? value : UNEVALUABLE;
|
|
171
227
|
}
|
|
172
228
|
function getInputSignalCall(member) {
|
|
173
229
|
const init = member.initializer;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ScannedPipe } from '../../plugin/pipe.types.js';
|
|
3
|
+
import type { ExportIndex } from './api/export-index.js';
|
|
4
|
+
import { type ShowcasedClass } from './component.scanner.js';
|
|
5
|
+
export interface ScanPipesOptions {
|
|
6
|
+
/** Built from every entry point of the library, since a setup function or a type is often exported by another one than the pipe. */
|
|
7
|
+
exportIndex: ExportIndex;
|
|
8
|
+
/** Shared with {@link scanComponents} and {@link scanServices}, and across entry points, so that a pipe exported from several of them does not repeat its warnings. */
|
|
9
|
+
diagnostics: string[];
|
|
10
|
+
notices: Set<string>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Read the pipes among the showcased classes of an entry point: classes with
|
|
14
|
+
* `@Pipe` from `@angular/core`, unless they declare fields only a component
|
|
15
|
+
* can use. Components are left to {@link scanComponents}, services to
|
|
16
|
+
* {@link scanServices}.
|
|
17
|
+
*
|
|
18
|
+
* A pipe the styleguide cannot call from a template is reported and dropped:
|
|
19
|
+
* one declared with `standalone: false`, and one whose `name` the source does
|
|
20
|
+
* not give as a constant. A `pure` that cannot be read is left out instead,
|
|
21
|
+
* since the pipe is still worth showing.
|
|
22
|
+
*
|
|
23
|
+
* Nothing is run and the class is never imported: the pipe is read from the
|
|
24
|
+
* source, its API from the declarations, its `setup` from the array literal
|
|
25
|
+
* the arrow function returns. A pipe whose API cannot be read is left out with
|
|
26
|
+
* a notice, so that it does not take the whole scan down.
|
|
27
|
+
*/
|
|
28
|
+
export declare function scanPipes(showcased: ShowcasedClass[], checker: ts.TypeChecker, { exportIndex, diagnostics, notices }: ScanPipesOptions): ScannedPipe[];
|
|
29
|
+
//# sourceMappingURL=pipe.scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipe.scanner.d.ts","sourceRoot":"","sources":["../../../src/builder/scanner/pipe.scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGzD,OAAO,EAA0C,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAIrG,MAAM,WAAW,gBAAgB;IAC7B,oIAAoI;IACpI,WAAW,EAAE,WAAW,CAAC;IACzB,uKAAuK;IACvK,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACxB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,gBAAgB,GAAG,WAAW,EAAE,CAiDtJ"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { readPipeOptions } from './api/angular-decorators.js';
|
|
2
|
+
import { extractPipeApi } from './api/pipe-api.extractor.js';
|
|
3
|
+
import { readSetupRefs } from './api/setup.reader.js';
|
|
4
|
+
import { createReporters, extractShowcaseConfig } from './component.scanner.js';
|
|
5
|
+
import { pickServiceFields } from './service.scanner.js';
|
|
6
|
+
import { describePipeNameUnreadable, describePipeNotStandalone, describeUnreadableApi } from './showcase-diagnostics.js';
|
|
7
|
+
/**
|
|
8
|
+
* Read the pipes among the showcased classes of an entry point: classes with
|
|
9
|
+
* `@Pipe` from `@angular/core`, unless they declare fields only a component
|
|
10
|
+
* can use. Components are left to {@link scanComponents}, services to
|
|
11
|
+
* {@link scanServices}.
|
|
12
|
+
*
|
|
13
|
+
* A pipe the styleguide cannot call from a template is reported and dropped:
|
|
14
|
+
* one declared with `standalone: false`, and one whose `name` the source does
|
|
15
|
+
* not give as a constant. A `pure` that cannot be read is left out instead,
|
|
16
|
+
* since the pipe is still worth showing.
|
|
17
|
+
*
|
|
18
|
+
* Nothing is run and the class is never imported: the pipe is read from the
|
|
19
|
+
* source, its API from the declarations, its `setup` from the array literal
|
|
20
|
+
* the arrow function returns. A pipe whose API cannot be read is left out with
|
|
21
|
+
* a notice, so that it does not take the whole scan down.
|
|
22
|
+
*/
|
|
23
|
+
export function scanPipes(showcased, checker, { exportIndex, diagnostics, notices }) {
|
|
24
|
+
const pipes = [];
|
|
25
|
+
const { report, notify } = createReporters(diagnostics, notices);
|
|
26
|
+
for (const { symbol, classDecl, decorator, argument, kind: classKind } of showcased) {
|
|
27
|
+
if (classKind.kind !== 'pipe')
|
|
28
|
+
continue;
|
|
29
|
+
const className = classDecl.name?.text ?? 'Anonymous';
|
|
30
|
+
const showcaseConfig = extractShowcaseConfig(decorator, className, report, checker);
|
|
31
|
+
if (!showcaseConfig || !argument)
|
|
32
|
+
continue;
|
|
33
|
+
const options = readPipeOptions(classKind.decorator, checker);
|
|
34
|
+
if (!options.standalone) {
|
|
35
|
+
report(describePipeNotStandalone(className, classKind.decorator));
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (options.name === undefined) {
|
|
39
|
+
report(describePipeNameUnreadable(className, classKind.decorator));
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
let api;
|
|
43
|
+
try {
|
|
44
|
+
api = extractPipeApi(classDecl, readSetupRefs(argument, className, checker, exportIndex, report), checker, exportIndex);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
notify(describeUnreadableApi(className, error, 'pipe'));
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
const pipe = {
|
|
51
|
+
className,
|
|
52
|
+
filePath: classDecl.getSourceFile().fileName,
|
|
53
|
+
showcaseConfig: pickServiceFields(showcaseConfig),
|
|
54
|
+
pipeName: options.name,
|
|
55
|
+
api
|
|
56
|
+
};
|
|
57
|
+
const importPath = exportIndex.get(symbol);
|
|
58
|
+
if (options.pure !== undefined)
|
|
59
|
+
pipe.pure = options.pure;
|
|
60
|
+
if (importPath !== undefined)
|
|
61
|
+
pipe.importPath = importPath;
|
|
62
|
+
pipes.push(pipe);
|
|
63
|
+
}
|
|
64
|
+
return pipes;
|
|
65
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type ForcedPseudoStates } from '../../shared/pseudo-state.type.js';
|
|
2
|
+
export declare function describeValue(value: unknown): string;
|
|
2
3
|
/**
|
|
3
4
|
* `Variant.pseudo` as the scanner evaluated it, with everything it cannot use
|
|
4
5
|
* reported and dropped: a value that is no object, an unknown state, and a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pseudo-states.d.ts","sourceRoot":"","sources":["../../../src/builder/scanner/pseudo-states.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAsD,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"pseudo-states.d.ts","sourceRoot":"","sources":["../../../src/builder/scanner/pseudo-states.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAsD,MAAM,mCAAmC,CAAC;AAUhI,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGpD;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,kBAAkB,GAAG,SAAS,CAmBjI"}
|
|
@@ -5,7 +5,7 @@ function isPseudoState(value) {
|
|
|
5
5
|
function isSelector(value) {
|
|
6
6
|
return typeof value === 'string' && value.trim() !== '';
|
|
7
7
|
}
|
|
8
|
-
function describeValue(value) {
|
|
8
|
+
export function describeValue(value) {
|
|
9
9
|
if (typeof value === 'string' || (typeof value === 'object' && value !== null))
|
|
10
10
|
return JSON.stringify(value) ?? String(value);
|
|
11
11
|
return String(value);
|
|
@@ -1,18 +1,42 @@
|
|
|
1
1
|
import ts from 'typescript';
|
|
2
|
+
import type { ScannedPipe } from '../../plugin/pipe.types.js';
|
|
2
3
|
import type { ScannedComponent } from '../../plugin/plugin.types.js';
|
|
4
|
+
import type { ScannedService } from '../../plugin/service.types.js';
|
|
3
5
|
import { type EntryPointInput } from './entry-point.scanner.js';
|
|
4
6
|
export interface CreateScannerOptions {
|
|
5
7
|
entryPoints: ReadonlyArray<EntryPointInput>;
|
|
6
8
|
compilerOptions?: ts.CompilerOptions;
|
|
7
9
|
}
|
|
10
|
+
/**
|
|
11
|
+
* What the scan reads beyond the components, each `true` when not given. The
|
|
12
|
+
* build reads only what a plugin in the config uses: services and pipes are
|
|
13
|
+
* then only counted, and components come without `api`.
|
|
14
|
+
*/
|
|
15
|
+
export interface ScanOptions {
|
|
16
|
+
/** {@link ScannedComponent.api}, read for a plugin with `componentApi`. */
|
|
17
|
+
componentApi?: boolean;
|
|
18
|
+
/** Services, read for a plugin with a view panel that applies to them. */
|
|
19
|
+
services?: boolean;
|
|
20
|
+
/** Pipes, read for a plugin with a view panel that applies to them. */
|
|
21
|
+
pipes?: boolean;
|
|
22
|
+
}
|
|
8
23
|
export interface ScanResult {
|
|
9
24
|
components: ScannedComponent[];
|
|
25
|
+
/** Empty when {@link ScanOptions.services} is `false`. */
|
|
26
|
+
services: ScannedService[];
|
|
27
|
+
/** Empty when {@link ScanOptions.pipes} is `false`. */
|
|
28
|
+
pipes: ScannedPipe[];
|
|
29
|
+
/** The showcased services and pipes the options left unread, counted once each however many entry points export them. */
|
|
30
|
+
unread: {
|
|
31
|
+
services: number;
|
|
32
|
+
pipes: number;
|
|
33
|
+
};
|
|
10
34
|
/** One message per @Showcase value the scan had to drop, already printed as a warning. */
|
|
11
35
|
diagnostics: string[];
|
|
12
36
|
}
|
|
13
37
|
export interface Scanner {
|
|
14
38
|
/** Scan all entry points. Reuses TypeScript program state from previous scans. */
|
|
15
|
-
scan(): ScanResult;
|
|
39
|
+
scan(options?: ScanOptions): ScanResult;
|
|
16
40
|
}
|
|
17
41
|
/**
|
|
18
42
|
* Create a stateful multi-entry scanner that retains the previous ts.Program between scans.
|
|
@@ -20,8 +44,8 @@ export interface Scanner {
|
|
|
20
44
|
* transitive type graph (Angular framework typings, etc.) is parsed once and shared via
|
|
21
45
|
* the program's `TypeChecker`, instead of N programs that each load Material/CDK/RxJS.
|
|
22
46
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
47
|
+
* On rebuild, the source-file cache hands TypeScript the already parsed SourceFile of
|
|
48
|
+
* every unchanged file, so only the changed files are parsed again.
|
|
25
49
|
*/
|
|
26
50
|
export declare function createScanner(options: CreateScannerOptions): Scanner;
|
|
27
51
|
//# sourceMappingURL=scanner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../../src/builder/scanner/scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../../src/builder/scanner/scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAKpE,OAAO,EAAE,KAAK,eAAe,EAA4B,MAAM,0BAA0B,CAAC;AAK1F,MAAM,WAAW,oBAAoB;IACjC,WAAW,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAC5C,eAAe,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;CACxC;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IACxB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACvB,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,0DAA0D;IAC1D,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,uDAAuD;IACvD,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,yHAAyH;IACzH,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,0FAA0F;IAC1F,WAAW,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,OAAO;IACpB,kFAAkF;IAClF,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC;CAC3C;AAkBD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CA4DpE"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import ts from 'typescript';
|
|
2
|
-
import {
|
|
2
|
+
import { buildExportIndex } from './api/export-index.js';
|
|
3
|
+
import { createReporters, findShowcasedClasses, scanComponents } from './component.scanner.js';
|
|
4
|
+
import { buildDeclarableIndex } from './composition/declarables.js';
|
|
5
|
+
import { createCompositionContext } from './composition/read-composition.js';
|
|
3
6
|
import { resolveEntryPointExports } from './entry-point.scanner.js';
|
|
7
|
+
import { scanPipes } from './pipe.scanner.js';
|
|
8
|
+
import { scanServices } from './service.scanner.js';
|
|
9
|
+
import { createSourceFileCache } from './source-file-cache.js';
|
|
4
10
|
const DEFAULT_COMPILER_OPTIONS = {
|
|
5
11
|
target: ts.ScriptTarget.ES2022,
|
|
6
12
|
module: ts.ModuleKind.ES2022,
|
|
@@ -22,46 +28,84 @@ const DEFAULT_COMPILER_OPTIONS = {
|
|
|
22
28
|
* transitive type graph (Angular framework typings, etc.) is parsed once and shared via
|
|
23
29
|
* the program's `TypeChecker`, instead of N programs that each load Material/CDK/RxJS.
|
|
24
30
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
31
|
+
* On rebuild, the source-file cache hands TypeScript the already parsed SourceFile of
|
|
32
|
+
* every unchanged file, so only the changed files are parsed again.
|
|
27
33
|
*/
|
|
28
34
|
export function createScanner(options) {
|
|
29
35
|
const compilerOptions = {
|
|
30
36
|
...DEFAULT_COMPILER_OPTIONS,
|
|
31
37
|
...options.compilerOptions
|
|
32
38
|
};
|
|
39
|
+
const sourceFiles = createSourceFileCache(compilerOptions);
|
|
33
40
|
let previousProgram;
|
|
34
41
|
return {
|
|
35
|
-
scan() {
|
|
36
|
-
const { program, entries } = resolveEntryPointExports(options.entryPoints, compilerOptions, previousProgram);
|
|
42
|
+
scan({ componentApi = true, services: readServices = true, pipes: readPipes = true } = {}) {
|
|
43
|
+
const { program, entries } = resolveEntryPointExports(options.entryPoints, compilerOptions, previousProgram, sourceFiles.host);
|
|
37
44
|
previousProgram = program;
|
|
45
|
+
sourceFiles.prune(program);
|
|
38
46
|
const checker = program.getTypeChecker();
|
|
39
47
|
const allComponents = [];
|
|
48
|
+
const allServices = [];
|
|
49
|
+
const allPipes = [];
|
|
50
|
+
const unreadServices = new Set();
|
|
51
|
+
const unreadPipes = new Set();
|
|
40
52
|
const diagnostics = [];
|
|
41
53
|
const notices = new Set();
|
|
42
|
-
|
|
43
|
-
|
|
54
|
+
// A setup function or a type is often exported by another entry point than the component, service or pipe that names it.
|
|
55
|
+
const exportIndex = buildExportIndex(entries, checker);
|
|
56
|
+
const context = { exportIndex, diagnostics, notices };
|
|
57
|
+
// A showcase's templates use what any entry point exports, not only its own. Read for the first one that composes.
|
|
58
|
+
const composition = createCompositionContext(() => buildDeclarableIndex(entries, checker), compilerOptions, createReporters(diagnostics, notices));
|
|
59
|
+
const fromPrimary = new Set();
|
|
60
|
+
for (const { exports, importPath, primary } of entries) {
|
|
61
|
+
const showcased = findShowcasedClasses(exports, checker);
|
|
62
|
+
const components = scanComponents(showcased, checker, { ...context, api: componentApi, composition });
|
|
63
|
+
const services = readServices ? scanServices(showcased, checker, context) : [];
|
|
64
|
+
const pipes = readPipes ? scanPipes(showcased, checker, context) : [];
|
|
65
|
+
for (const { classDecl, kind } of showcased) {
|
|
66
|
+
if (!readServices && kind.kind === 'service')
|
|
67
|
+
unreadServices.add(classDecl);
|
|
68
|
+
if (!readPipes && kind.kind === 'pipe')
|
|
69
|
+
unreadPipes.add(classDecl);
|
|
70
|
+
}
|
|
44
71
|
for (const c of components)
|
|
45
72
|
c.importPath = importPath;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
// multiple entry points (e.g. atoms/button + barrel index.ts), we keep the first
|
|
50
|
-
// occurrence. The duplicate would otherwise produce duplicate imports in the
|
|
51
|
-
// generated manifest and a runtime collision in the Prism shell.
|
|
52
|
-
const seen = new Set();
|
|
53
|
-
const unique = [];
|
|
54
|
-
for (const c of allComponents) {
|
|
55
|
-
const key = `${c.filePath}::${c.className}`;
|
|
56
|
-
if (seen.has(key)) {
|
|
57
|
-
console.warn(`⚠ ng-prism: ${c.className} is exported by multiple entry points; ` +
|
|
58
|
-
`keeping the first occurrence (importPath: ${unique.find((u) => u.className === c.className && u.filePath === c.filePath)?.importPath}).`);
|
|
59
|
-
continue;
|
|
73
|
+
if (primary) {
|
|
74
|
+
for (const item of [...components, ...services, ...pipes])
|
|
75
|
+
fromPrimary.add(item);
|
|
60
76
|
}
|
|
61
|
-
|
|
62
|
-
|
|
77
|
+
allComponents.push(...components);
|
|
78
|
+
allServices.push(...services);
|
|
79
|
+
allPipes.push(...pipes);
|
|
63
80
|
}
|
|
64
|
-
return {
|
|
81
|
+
return {
|
|
82
|
+
components: dedupe(allComponents, fromPrimary),
|
|
83
|
+
services: dedupe(allServices, fromPrimary),
|
|
84
|
+
pipes: dedupe(allPipes, fromPrimary),
|
|
85
|
+
unread: { services: unreadServices.size, pipes: unreadPipes.size },
|
|
86
|
+
diagnostics
|
|
87
|
+
};
|
|
65
88
|
}
|
|
66
89
|
};
|
|
67
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Dedupe by (filePath, className): if a class is re-exported from multiple
|
|
93
|
+
* entry points (e.g. atoms/button + barrel index.ts), we keep the first
|
|
94
|
+
* occurrence. The duplicate would otherwise produce duplicate imports in the
|
|
95
|
+
* generated manifest and a runtime collision in the Prism shell. The primary
|
|
96
|
+
* entry point comes last and re-exporting its secondaries is normal there.
|
|
97
|
+
*/
|
|
98
|
+
function dedupe(items, fromPrimary) {
|
|
99
|
+
const first = new Map();
|
|
100
|
+
for (const item of items) {
|
|
101
|
+
const key = `${item.filePath}::${item.className}`;
|
|
102
|
+
const kept = first.get(key);
|
|
103
|
+
if (!kept) {
|
|
104
|
+
first.set(key, item);
|
|
105
|
+
}
|
|
106
|
+
else if (!fromPrimary.has(item)) {
|
|
107
|
+
console.warn(`⚠ ng-prism: ${item.className} is exported by multiple entry points; ` + `keeping the first occurrence (importPath: ${kept.importPath}).`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return [...first.values()];
|
|
111
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ServiceProvision } from '../../../plugin/service.types.js';
|
|
3
|
+
export type ShowcaseClassKind = {
|
|
4
|
+
kind: 'component';
|
|
5
|
+
}
|
|
6
|
+
/** `decorator` is the `@Injectable` or `@Service` that makes it one. */
|
|
7
|
+
| {
|
|
8
|
+
kind: 'service';
|
|
9
|
+
decorator: ts.Decorator;
|
|
10
|
+
}
|
|
11
|
+
/** `decorator` is the `@Pipe` that makes it one; whether the pipe is shown is for the pipe scan to decide. */
|
|
12
|
+
| {
|
|
13
|
+
kind: 'pipe';
|
|
14
|
+
decorator: ts.Decorator;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* An `@Injectable`, `@Service` or `@Pipe` that still declares component-only `fields`, so it stays a component for now.
|
|
18
|
+
* `source` says which decorator would make it a service or a pipe; `standalone: false` only for a pipe declared in an NgModule.
|
|
19
|
+
*/
|
|
20
|
+
| {
|
|
21
|
+
kind: 'legacy-component';
|
|
22
|
+
fields: string[];
|
|
23
|
+
source: 'injectable' | 'pipe';
|
|
24
|
+
standalone?: false;
|
|
25
|
+
};
|
|
26
|
+
/** What the `@Pipe` metadata says, as far as the source can be read. */
|
|
27
|
+
export interface PipeOptions {
|
|
28
|
+
/** Missing when the source does not give it as a string constant: the pipe cannot be shown without its name. */
|
|
29
|
+
name?: string;
|
|
30
|
+
/** `true` when the metadata does not say, missing when it says something the scan cannot read. */
|
|
31
|
+
pure?: boolean;
|
|
32
|
+
/** Only `false` when the metadata statically says `standalone: false`; Angular's default is `true`. */
|
|
33
|
+
standalone: boolean;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* {@link findDecorator} for an Angular decorator: it only counts if the
|
|
37
|
+
* identifier is imported from `@angular/core`. A `@Service` from a
|
|
38
|
+
* dependency-injection package of another name has nothing to do with Angular's.
|
|
39
|
+
*
|
|
40
|
+
* The scanner never imports `Service` itself, since Angular 20 has none: the
|
|
41
|
+
* decorator is recognised in the source alone.
|
|
42
|
+
*/
|
|
43
|
+
export declare function findAngularCoreDecorator(classDecl: ts.ClassDeclaration, name: 'Injectable' | 'Service' | 'Component' | 'Directive' | 'Pipe', checker: ts.TypeChecker): ts.Decorator | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* Tell a service or a pipe from a component. They all carry `@Showcase`, and
|
|
46
|
+
* the only thing that tells them apart is the Angular decorator beside it.
|
|
47
|
+
*
|
|
48
|
+
* A class with `@Component` or `@Directive` is a component, whatever else it
|
|
49
|
+
* carries. Otherwise `@Pipe` makes it a pipe, and `@Service` or `@Injectable`
|
|
50
|
+
* a service, so that a pipe that is also injectable stays a pipe. Either is
|
|
51
|
+
* overruled by the `@Showcase` argument declaring a component-only field: such
|
|
52
|
+
* a class has been shown as a component so far, so it stays one
|
|
53
|
+
* (`legacy-component`) until 23.0.0, and the scan says why. That check comes
|
|
54
|
+
* first, before anything is said about the pipe itself.
|
|
55
|
+
*
|
|
56
|
+
* `showcaseArg` is read from the literal and from the evaluated value, since a
|
|
57
|
+
* constant or a spread can bring the field in and a field the evaluator cannot
|
|
58
|
+
* read is still in the literal.
|
|
59
|
+
*/
|
|
60
|
+
export declare function classifyShowcaseClass(classDecl: ts.ClassDeclaration, showcaseArg: ts.Expression | undefined, checker: ts.TypeChecker): ShowcaseClassKind;
|
|
61
|
+
/**
|
|
62
|
+
* Whether Angular provides the service on its own (`auto`) or the user has to
|
|
63
|
+
* list it in a providers array (`manual`).
|
|
64
|
+
*
|
|
65
|
+
* `@Service()` is auto-provided unless it says `autoProvided: false`;
|
|
66
|
+
* `@Injectable` is when `providedIn` is `'root'`, `'platform'` or `'any'`.
|
|
67
|
+
* Anything else, such as no argument, no `providedIn`, a module class or a value
|
|
68
|
+
* the scan cannot read, is `manual`, without a warning: a service nobody
|
|
69
|
+
* provides is a normal thing to document.
|
|
70
|
+
*/
|
|
71
|
+
export declare function readProvision(decorator: ts.Decorator, checker: ts.TypeChecker): ServiceProvision;
|
|
72
|
+
/**
|
|
73
|
+
* Read `name`, `pure` and `standalone` from the `@Pipe` metadata.
|
|
74
|
+
*
|
|
75
|
+
* Nothing that cannot be read is guessed: a `name` or `pure` the source does not
|
|
76
|
+
* give as a constant is left out, so that the caller can say so, while
|
|
77
|
+
* `standalone` only counts as `false` when the source says exactly that.
|
|
78
|
+
*/
|
|
79
|
+
export declare function readPipeOptions(decorator: ts.Decorator, checker: ts.TypeChecker): PipeOptions;
|
|
80
|
+
//# sourceMappingURL=angular-decorators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"angular-decorators.d.ts","sourceRoot":"","sources":["../../../../src/builder/scanner/service/angular-decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAezE,MAAM,MAAM,iBAAiB,GACvB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE;AACvB,wEAAwE;GACtE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAA;CAAE;AAC9C,8GAA8G;GAC5G;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAA;CAAE;AAC3C;;;GAGG;GACD;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAExG,wEAAwE;AACxE,MAAM,WAAW,WAAW;IACxB,gHAAgH;IAChH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kGAAkG;IAClG,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,uGAAuG;IACvG,UAAU,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACpC,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAC9B,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,WAAW,GAAG,MAAM,EACnE,OAAO,EAAE,EAAE,CAAC,WAAW,GACxB,EAAE,CAAC,SAAS,GAAG,SAAS,CAI1B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,WAAW,EAAE,EAAE,CAAC,UAAU,GAAG,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,iBAAiB,CAuBxJ;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,gBAAgB,CAsBhG;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,WAAW,CAqB7F"}
|