@ng-prism/core 22.2.1 → 22.4.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 +34 -36
- package/builders.json +11 -11
- package/dist/app/canvas/canvas-bg.styles.d.ts +7 -12
- package/dist/app/canvas/canvas-bg.styles.d.ts.map +1 -1
- package/dist/app/canvas/canvas-bg.styles.js +37 -22
- package/dist/app/canvas/measure-geometry.d.ts +140 -0
- package/dist/app/canvas/measure-geometry.d.ts.map +1 -0
- package/dist/app/canvas/measure-geometry.js +217 -0
- package/dist/app/canvas/measure-keyboard.d.ts +20 -0
- package/dist/app/canvas/measure-keyboard.d.ts.map +1 -0
- package/dist/app/canvas/measure-keyboard.js +34 -0
- package/dist/app/canvas/measure-quad.d.ts +114 -0
- package/dist/app/canvas/measure-quad.d.ts.map +1 -0
- package/dist/app/canvas/measure-quad.js +173 -0
- package/dist/app/canvas/measure-snap.d.ts +35 -0
- package/dist/app/canvas/measure-snap.d.ts.map +1 -0
- package/dist/app/canvas/measure-snap.js +63 -0
- package/dist/app/canvas/prism-canvas-bg-pill.component.d.ts.map +1 -1
- package/dist/app/canvas/prism-canvas-bg-pill.component.js +3 -18
- package/dist/app/canvas/prism-canvas-measure.component.d.ts +142 -0
- package/dist/app/canvas/prism-canvas-measure.component.d.ts.map +1 -0
- package/dist/app/canvas/prism-canvas-measure.component.js +554 -0
- package/dist/app/canvas/prism-canvas-pin-row.component.d.ts +23 -0
- package/dist/app/canvas/prism-canvas-pin-row.component.d.ts.map +1 -0
- package/dist/app/canvas/prism-canvas-pin-row.component.js +64 -0
- package/dist/app/canvas/prism-canvas-rulers.component.d.ts +1 -0
- package/dist/app/canvas/prism-canvas-rulers.component.d.ts.map +1 -1
- package/dist/app/canvas/prism-canvas-rulers.component.js +9 -14
- package/dist/app/canvas/prism-canvas-toolbar.component.d.ts +28 -28
- package/dist/app/canvas/prism-canvas-toolbar.component.d.ts.map +1 -1
- package/dist/app/canvas/prism-canvas-toolbar.component.js +124 -162
- package/dist/app/canvas/prism-template-popover.component.d.ts.map +1 -1
- package/dist/app/canvas/prism-template-popover.component.js +8 -49
- package/dist/app/canvas/viewport-snap.d.ts +12 -0
- package/dist/app/canvas/viewport-snap.d.ts.map +1 -0
- package/dist/app/canvas/viewport-snap.js +23 -0
- package/dist/app/component-head/head-metrics.d.ts +2 -2
- package/dist/app/component-head/head-metrics.d.ts.map +1 -1
- package/dist/app/component-head/head-metrics.js +3 -3
- package/dist/app/component-head/prism-component-head.component.d.ts +3 -3
- package/dist/app/component-head/prism-component-head.component.d.ts.map +1 -1
- package/dist/app/component-head/prism-component-head.component.js +24 -64
- package/dist/app/component-head/prism-head-gauge.component.d.ts.map +1 -1
- package/dist/app/component-head/prism-head-gauge.component.js +4 -36
- package/dist/app/component-head/prism-head-info.component.d.ts +1 -1
- package/dist/app/component-head/prism-head-info.component.d.ts.map +1 -1
- package/dist/app/component-head/prism-head-info.component.js +4 -37
- package/dist/app/component-head/prism-stat.component.d.ts +1 -1
- package/dist/app/component-head/prism-stat.component.d.ts.map +1 -1
- package/dist/app/component-head/prism-stat.component.js +4 -15
- package/dist/app/controls/boolean-control.component.d.ts.map +1 -1
- package/dist/app/controls/boolean-control.component.js +4 -12
- package/dist/app/controls/json-control.component.d.ts.map +1 -1
- package/dist/app/controls/json-control.component.js +4 -24
- package/dist/app/controls/number-control.component.d.ts.map +1 -1
- package/dist/app/controls/number-control.component.js +4 -11
- package/dist/app/controls/string-control.component.d.ts.map +1 -1
- package/dist/app/controls/string-control.component.js +4 -11
- package/dist/app/controls/union-control.component.d.ts.map +1 -1
- package/dist/app/controls/union-control.component.js +4 -16
- package/dist/app/directives/prism-resizer.directive.d.ts +24 -1
- package/dist/app/directives/prism-resizer.directive.d.ts.map +1 -1
- package/dist/app/directives/prism-resizer.directive.js +44 -7
- package/dist/app/directives/resize-value.d.ts +22 -0
- package/dist/app/directives/resize-value.d.ts.map +1 -0
- package/dist/app/directives/resize-value.js +23 -0
- 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 +16 -22
- package/dist/app/header/prism-header-widget-host.component.d.ts.map +1 -1
- package/dist/app/header/prism-header-widget-host.component.js +4 -8
- package/dist/app/header/prism-header.component.d.ts.map +1 -1
- package/dist/app/header/prism-header.component.js +9 -78
- package/dist/app/hmr.d.ts.map +1 -1
- package/dist/app/icons/icon-registry.d.ts +2 -2
- package/dist/app/icons/icon-registry.d.ts.map +1 -1
- package/dist/app/icons/icon-registry.js +5 -3
- package/dist/app/icons/prism-icon.component.d.ts +2 -2
- package/dist/app/icons/prism-icon.component.d.ts.map +1 -1
- package/dist/app/icons/prism-icon.component.js +9 -9
- package/dist/app/index.d.ts +3 -3
- package/dist/app/index.d.ts.map +1 -1
- package/dist/app/index.js +17 -24
- package/dist/app/layout-menu/prism-layout-menu.component.d.ts.map +1 -1
- package/dist/app/layout-menu/prism-layout-menu.component.js +3 -77
- package/dist/app/overview/overview-panel.js +1 -1
- package/dist/app/overview/overview-visibility.d.ts +1 -1
- package/dist/app/overview/overview-visibility.d.ts.map +1 -1
- package/dist/app/overview/overview-visibility.js +1 -1
- package/dist/app/overview/prism-overview-cell.component.d.ts +2 -2
- package/dist/app/overview/prism-overview-cell.component.d.ts.map +1 -1
- package/dist/app/overview/prism-overview-cell.component.js +17 -25
- package/dist/app/overview/prism-overview.component.d.ts +2 -2
- package/dist/app/overview/prism-overview.component.d.ts.map +1 -1
- package/dist/app/overview/prism-overview.component.js +6 -14
- package/dist/app/page-renderer/prism-page-renderer.component.d.ts.map +1 -1
- package/dist/app/page-renderer/prism-page-renderer.component.js +4 -17
- package/dist/app/panels/a11y/a11y-audit.service.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-audit.service.js +14 -2
- package/dist/app/panels/a11y/a11y-core.plugin.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-core.plugin.js +1 -1
- package/dist/app/panels/a11y/a11y-dom-utils.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-dom-utils.js +9 -6
- package/dist/app/panels/a11y/a11y-header-badge.component.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-header-badge.component.js +6 -22
- package/dist/app/panels/a11y/a11y-keyboard-overlay.component.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-keyboard-overlay.component.js +6 -25
- package/dist/app/panels/a11y/a11y-keyboard.component.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-keyboard.component.js +5 -36
- package/dist/app/panels/a11y/a11y-keyboard.service.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-keyboard.service.js +2 -2
- package/dist/app/panels/a11y/a11y-overlay-host.component.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-overlay-host.component.js +5 -32
- package/dist/app/panels/a11y/a11y-panel-state.service.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-panel.component.d.ts +1 -1
- package/dist/app/panels/a11y/a11y-panel.component.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-panel.component.js +7 -69
- package/dist/app/panels/a11y/a11y-perspective.service.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-score.component.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-score.component.js +4 -31
- package/dist/app/panels/a11y/a11y-sr-overlay.component.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-sr-overlay.component.js +8 -28
- package/dist/app/panels/a11y/a11y-sr.component.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-sr.component.js +5 -28
- package/dist/app/panels/a11y/a11y-sr.service.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-sr.service.js +4 -7
- package/dist/app/panels/a11y/a11y-summary.d.ts +3 -4
- package/dist/app/panels/a11y/a11y-summary.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-summary.js +5 -9
- package/dist/app/panels/a11y/a11y-thresholds.d.ts +1 -1
- package/dist/app/panels/a11y/a11y-thresholds.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-thresholds.js +2 -2
- package/dist/app/panels/a11y/a11y-tree.component.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-tree.component.js +9 -46
- package/dist/app/panels/a11y/a11y-tree.service.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-tree.service.js +3 -5
- package/dist/app/panels/a11y/a11y-violations.component.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-violations.component.js +7 -58
- package/dist/app/panels/a11y/a11y.types.d.ts +1 -1
- package/dist/app/panels/a11y/a11y.types.d.ts.map +1 -1
- package/dist/app/panels/builtin-header-widgets.js +2 -2
- package/dist/app/panels/builtin-navigation-decorations.d.ts +1 -1
- package/dist/app/panels/builtin-navigation-decorations.d.ts.map +1 -1
- package/dist/app/panels/builtin-navigation-decorations.js +3 -3
- package/dist/app/panels/builtin-panels.d.ts.map +1 -1
- package/dist/app/panels/builtin-panels.js +2 -7
- package/dist/app/panels/controls/controls-plugin.js +3 -3
- package/dist/app/panels/controls/non-editable-input-types.d.ts.map +1 -1
- package/dist/app/panels/controls/non-editable-input-types.js +2 -6
- package/dist/app/panels/controls/prism-controls-panel.component.d.ts.map +1 -1
- package/dist/app/panels/controls/prism-controls-panel.component.js +5 -95
- package/dist/app/panels/events/events-plugin.js +3 -3
- package/dist/app/panels/events/prism-events-panel.component.d.ts.map +1 -1
- package/dist/app/panels/events/prism-events-panel.component.js +5 -23
- package/dist/app/panels/events/prism-json-node.component.d.ts.map +1 -1
- package/dist/app/panels/events/prism-json-node.component.js +4 -86
- package/dist/app/panels/events/prism-json-node.utils.d.ts.map +1 -1
- package/dist/app/panels/panel-host/panel-badge.d.ts +1 -1
- package/dist/app/panels/panel-host/panel-badge.d.ts.map +1 -1
- package/dist/app/panels/panel-host/panel-badge.js +2 -4
- package/dist/app/panels/panel-host/prism-panel-host.component.d.ts +1 -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 +12 -67
- package/dist/app/provide-prism.d.ts +1 -1
- package/dist/app/provide-prism.d.ts.map +1 -1
- package/dist/app/provide-prism.js +8 -12
- package/dist/app/renderer/known-inputs.d.ts +1 -1
- package/dist/app/renderer/known-inputs.d.ts.map +1 -1
- package/dist/app/renderer/known-inputs.js +1 -1
- package/dist/app/renderer/overlay-resolver.d.ts +17 -3
- package/dist/app/renderer/overlay-resolver.d.ts.map +1 -1
- package/dist/app/renderer/overlay-resolver.js +10 -5
- package/dist/app/renderer/prism-renderer.component.d.ts +28 -3
- package/dist/app/renderer/prism-renderer.component.d.ts.map +1 -1
- package/dist/app/renderer/prism-renderer.component.js +107 -80
- package/dist/app/renderer/projectable-content.d.ts.map +1 -1
- package/dist/app/renderer/projectable-content.js +4 -6
- package/dist/app/renderer/snippet-generator.d.ts +1 -1
- package/dist/app/renderer/snippet-generator.d.ts.map +1 -1
- package/dist/app/renderer/snippet-generator.js +7 -22
- package/dist/app/services/navigation-item.types.d.ts +1 -1
- package/dist/app/services/navigation-item.types.d.ts.map +1 -1
- package/dist/app/services/prism-canvas.service.d.ts +33 -0
- package/dist/app/services/prism-canvas.service.d.ts.map +1 -1
- package/dist/app/services/prism-canvas.service.js +71 -6
- package/dist/app/services/prism-capture.service.d.ts +24 -50
- package/dist/app/services/prism-capture.service.d.ts.map +1 -1
- package/dist/app/services/prism-capture.service.js +62 -146
- package/dist/app/services/prism-event-log.service.d.ts.map +1 -1
- package/dist/app/services/prism-event-log.service.js +1 -4
- package/dist/app/services/prism-layout.service.d.ts.map +1 -1
- package/dist/app/services/prism-layout.service.js +5 -4
- package/dist/app/services/prism-manifest.service.d.ts +1 -1
- package/dist/app/services/prism-manifest.service.d.ts.map +1 -1
- package/dist/app/services/prism-manifest.service.js +1 -1
- package/dist/app/services/prism-measure.service.d.ts +44 -0
- package/dist/app/services/prism-measure.service.d.ts.map +1 -0
- package/dist/app/services/prism-measure.service.js +91 -0
- package/dist/app/services/prism-navigation.service.d.ts +1 -1
- package/dist/app/services/prism-navigation.service.d.ts.map +1 -1
- package/dist/app/services/prism-navigation.service.js +5 -13
- package/dist/app/services/prism-panel.service.d.ts +2 -2
- package/dist/app/services/prism-panel.service.d.ts.map +1 -1
- package/dist/app/services/prism-panel.service.js +4 -7
- package/dist/app/services/prism-persistence.service.d.ts.map +1 -1
- package/dist/app/services/prism-persistence.service.js +9 -11
- package/dist/app/services/prism-plugin.service.d.ts.map +1 -1
- package/dist/app/services/prism-renderer.service.d.ts.map +1 -1
- package/dist/app/services/prism-renderer.service.js +5 -9
- package/dist/app/services/prism-search.service.d.ts.map +1 -1
- package/dist/app/services/prism-search.service.js +1 -2
- package/dist/app/services/prism-theme.service.d.ts.map +1 -1
- package/dist/app/services/prism-theme.service.js +6 -4
- package/dist/app/services/prism-url-state.service.d.ts.map +1 -1
- package/dist/app/services/prism-url-state.service.js +4 -10
- package/dist/app/services/prism-variant-bg.service.d.ts +10 -24
- package/dist/app/services/prism-variant-bg.service.d.ts.map +1 -1
- package/dist/app/services/prism-variant-bg.service.js +13 -29
- package/dist/app/shared/prism-metric-badge.component.d.ts +9 -15
- package/dist/app/shared/prism-metric-badge.component.d.ts.map +1 -1
- package/dist/app/shared/prism-metric-badge.component.js +13 -32
- package/dist/app/shell/prism-shell.component.d.ts.map +1 -1
- package/dist/app/shell/prism-shell.component.js +26 -125
- package/dist/app/sidebar/navigation-decorations.d.ts +4 -4
- package/dist/app/sidebar/navigation-decorations.d.ts.map +1 -1
- package/dist/app/sidebar/navigation-decorations.js +3 -3
- package/dist/app/sidebar/prism-sidebar.component.d.ts +3 -3
- package/dist/app/sidebar/prism-sidebar.component.d.ts.map +1 -1
- package/dist/app/sidebar/prism-sidebar.component.js +21 -156
- package/dist/app/theme/prism-default-theme.d.ts.map +1 -1
- package/dist/app/theme/prism-default-theme.js +6 -6
- package/dist/app/tokens/prism-tokens.d.ts.map +1 -1
- package/dist/app/tokens/prism-tokens.js +1 -1
- package/dist/app/variant-ribbon/prism-variant-ribbon.component.d.ts.map +1 -1
- package/dist/app/variant-ribbon/prism-variant-ribbon.component.js +4 -49
- package/dist/app/variant-ribbon/spectrum.d.ts +1 -1
- package/dist/app/variant-ribbon/spectrum.d.ts.map +1 -1
- package/dist/app/variant-ribbon/spectrum.js +1 -1
- package/dist/app/view-tab-bar/next-view-id.d.ts +1 -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 +2 -4
- 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 +5 -17
- 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 +4 -27
- package/dist/builder/a11y/a11y-report-reader.d.ts +2 -2
- package/dist/builder/a11y/a11y-report-reader.d.ts.map +1 -1
- package/dist/builder/a11y/a11y-report-reader.js +8 -8
- package/dist/builder/build/index.d.ts.map +1 -1
- package/dist/builder/build/index.js +5 -9
- package/dist/builder/build/schema.d.ts.map +1 -1
- package/dist/builder/config-loader/config-loader.d.ts.map +1 -1
- package/dist/builder/config-loader/config-loader.js +4 -5
- package/dist/builder/manifest/host-parser.d.ts.map +1 -1
- package/dist/builder/manifest/host-parser.js +1 -1
- package/dist/builder/manifest/runtime-manifest.generator.d.ts +1 -1
- package/dist/builder/manifest/runtime-manifest.generator.d.ts.map +1 -1
- package/dist/builder/manifest/runtime-manifest.generator.js +14 -35
- package/dist/builder/plugin-runner/plugin-runner.d.ts.map +1 -1
- package/dist/builder/plugin-runner/plugin-runner.js +2 -4
- package/dist/builder/scanner/ast-utils.d.ts +46 -2
- package/dist/builder/scanner/ast-utils.d.ts.map +1 -1
- package/dist/builder/scanner/ast-utils.js +338 -38
- package/dist/builder/scanner/class-hierarchy.d.ts +33 -0
- package/dist/builder/scanner/class-hierarchy.d.ts.map +1 -0
- package/dist/builder/scanner/class-hierarchy.js +87 -0
- package/dist/builder/scanner/component.scanner.d.ts +7 -1
- package/dist/builder/scanner/component.scanner.d.ts.map +1 -1
- package/dist/builder/scanner/component.scanner.js +113 -72
- package/dist/builder/scanner/entry-point-discovery.d.ts.map +1 -1
- package/dist/builder/scanner/entry-point-discovery.js +3 -5
- package/dist/builder/scanner/entry-point.scanner.d.ts.map +1 -1
- package/dist/builder/scanner/entry-point.scanner.js +1 -3
- package/dist/builder/scanner/index.d.ts +1 -1
- package/dist/builder/scanner/index.d.ts.map +1 -1
- package/dist/builder/scanner/input.extractor.d.ts +7 -4
- package/dist/builder/scanner/input.extractor.d.ts.map +1 -1
- package/dist/builder/scanner/input.extractor.js +157 -76
- package/dist/builder/scanner/manifest.generator.d.ts.map +1 -1
- package/dist/builder/scanner/manifest.generator.js +8 -6
- package/dist/builder/scanner/scanner.d.ts +3 -1
- package/dist/builder/scanner/scanner.d.ts.map +1 -1
- package/dist/builder/scanner/scanner.js +10 -8
- package/dist/builder/scanner/showcase-diagnostics.d.ts +25 -0
- package/dist/builder/scanner/showcase-diagnostics.d.ts.map +1 -0
- package/dist/builder/scanner/showcase-diagnostics.js +96 -0
- package/dist/builder/serve/index.d.ts.map +1 -1
- package/dist/builder/serve/index.js +8 -10
- package/dist/builder/serve/schema.d.ts.map +1 -1
- package/dist/builder/shared/index.d.ts +1 -1
- package/dist/builder/shared/index.d.ts.map +1 -1
- package/dist/builder/shared/index.js +1 -1
- package/dist/builder/shared/prism-pipeline.d.ts +1 -1
- package/dist/builder/shared/prism-pipeline.d.ts.map +1 -1
- package/dist/builder/shared/prism-pipeline.js +29 -38
- package/dist/builder/shared/resolve-cache-dir.d.ts.map +1 -1
- package/dist/builder/shared/resolve-cache-dir.js +1 -1
- package/dist/builder/watcher/index.d.ts +1 -1
- package/dist/builder/watcher/index.d.ts.map +1 -1
- package/dist/builder/watcher/prism-watcher.d.ts.map +1 -1
- package/dist/builder/watcher/prism-watcher.js +14 -12
- package/dist/config/index.d.ts +2 -2
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/decorator/index.d.ts +1 -1
- package/dist/decorator/index.d.ts.map +1 -1
- package/dist/decorator/showcase.decorator.d.ts.map +1 -1
- package/dist/decorator/showcase.types.d.ts +11 -9
- package/dist/decorator/showcase.types.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/plugin/define-config.js +1 -1
- package/dist/plugin/index.d.ts +4 -4
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +7 -11
- package/dist/plugin/page-helpers.d.ts +1 -1
- package/dist/plugin/page-helpers.d.ts.map +1 -1
- package/dist/plugin/page-helpers.js +2 -2
- package/dist/plugin/page.types.d.ts.map +1 -1
- package/dist/plugin/plugin.types.d.ts +31 -14
- package/dist/plugin/plugin.types.d.ts.map +1 -1
- package/dist/schematics/migrations/v21-13-manifest-cache/index.d.ts.map +1 -1
- package/dist/schematics/migrations/v21-13-manifest-cache/index.js +4 -10
- package/dist/schematics/migrations/v22-0-cache-dir-rename/index.d.ts.map +1 -1
- package/dist/schematics/migrations/v22-0-cache-dir-rename/index.js +6 -10
- package/dist/schematics/ng-add/index.d.ts.map +1 -1
- package/dist/schematics/ng-add/index.js +122 -56
- package/dist/schematics/ng-add/schema.d.ts.map +1 -1
- package/dist/schematics/utils/config-ast.d.ts.map +1 -1
- package/dist/schematics/utils/config-ast.js +8 -15
- package/dist/schematics/utils/tsconfig-paths.d.ts.map +1 -1
- package/dist/schematics/utils/tsconfig-paths.js +1 -1
- package/dist/shared/canvas-bg.type.d.ts +5 -6
- package/dist/shared/canvas-bg.type.d.ts.map +1 -1
- package/dist/shared/canvas-bg.type.js +5 -13
- package/dist/shared/canvas-layout.type.d.ts.map +1 -1
- package/dist/shared/canvas-layout.type.js +1 -4
- package/dist/shared/measure.type.d.ts +52 -0
- package/dist/shared/measure.type.d.ts.map +1 -0
- package/dist/shared/measure.type.js +21 -0
- package/dist/shared/variant-bg.d.ts +20 -31
- package/dist/shared/variant-bg.d.ts.map +1 -1
- package/dist/shared/variant-bg.js +20 -31
- package/dist/shared/viewport.type.d.ts +43 -0
- package/dist/shared/viewport.type.d.ts.map +1 -0
- package/dist/shared/viewport.type.js +44 -0
- package/dist/transformer/cli.js +0 -0
- package/dist/transformer/index.d.ts +2 -2
- package/dist/transformer/index.d.ts.map +1 -1
- package/dist/transformer/index.js +2 -2
- package/dist/transformer/showcase-strip.transformer.d.ts.map +1 -1
- package/dist/transformer/showcase-strip.transformer.js +7 -16
- package/dist/transformer/strip-directory.d.ts.map +1 -1
- package/dist/transformer/strip-directory.js +2 -4
- package/package.json +5 -2
- package/schematics/collection.json +7 -7
- package/schematics/migrations.json +12 -12
- package/schematics/ng-add/schema.json +22 -22
- package/src/builder/build/schema.json +36 -36
- package/src/builder/serve/schema.json +37 -37
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Injector, type Type } from '@angular/core';
|
|
2
|
-
import { PrismNavigationService } from '../services/prism-navigation.service.js';
|
|
3
|
-
import { PrismRendererService } from '../services/prism-renderer.service.js';
|
|
4
2
|
import { PrismCanvasService } from '../services/prism-canvas.service.js';
|
|
5
3
|
import { PrismCaptureService } from '../services/prism-capture.service.js';
|
|
4
|
+
import { PrismNavigationService } from '../services/prism-navigation.service.js';
|
|
5
|
+
import { PrismRendererService } from '../services/prism-renderer.service.js';
|
|
6
6
|
import { PrismVariantBgService } from '../services/prism-variant-bg.service.js';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
export declare class PrismRendererComponent {
|
|
@@ -11,6 +11,31 @@ export declare class PrismRendererComponent {
|
|
|
11
11
|
protected readonly canvasService: PrismCanvasService;
|
|
12
12
|
protected readonly capture: PrismCaptureService;
|
|
13
13
|
protected readonly variantBg: PrismVariantBgService;
|
|
14
|
+
/**
|
|
15
|
+
* The width the canvas is actually constrained to, `null` for unconstrained.
|
|
16
|
+
*
|
|
17
|
+
* Every viewport binding reads this rather than the service directly, so
|
|
18
|
+
* capture mode cannot be constrained by any route. Previously only the grips
|
|
19
|
+
* and the dimension line sat behind the capture guard while the attributes
|
|
20
|
+
* that change `.demo-wrap`'s box did not. Safe in practice, because capture
|
|
21
|
+
* never restores a persisted width and every setter is suppressed, but safe
|
|
22
|
+
* by reachability argument rather than by construction. A future caller of
|
|
23
|
+
* `setViewportWidth` during a capture run would have recorded every
|
|
24
|
+
* visual-regression baseline at the constrained width with no visible chrome
|
|
25
|
+
* to reveal it. One computed makes the guarantee structural.
|
|
26
|
+
*/
|
|
27
|
+
protected readonly viewportWidth: import("@angular/core").Signal<number | null>;
|
|
28
|
+
protected readonly VIEWPORT_MIN = 100;
|
|
29
|
+
protected readonly VIEWPORT_MAX = 1600;
|
|
30
|
+
/**
|
|
31
|
+
* A drag on either grip, rested on a preset if it came close enough.
|
|
32
|
+
*
|
|
33
|
+
* The snapping lives here and not in `PrismResizerDirective` because the
|
|
34
|
+
* directive also drives the sidebar and the panel, where there is nothing to
|
|
35
|
+
* snap to, and a generic control that knows about viewport presets would be
|
|
36
|
+
* the wrong shape.
|
|
37
|
+
*/
|
|
38
|
+
protected onViewportResize(width: number): void;
|
|
14
39
|
private readonly eventLogService;
|
|
15
40
|
private readonly manifestService;
|
|
16
41
|
private readonly injector;
|
|
@@ -28,7 +53,7 @@ export declare class PrismRendererComponent {
|
|
|
28
53
|
readonly activeOverlay: import("@angular/core").WritableSignal<Type<unknown> | null>;
|
|
29
54
|
/** Identifier of the currently rendered component/variant (for audit tooling / e2e). */
|
|
30
55
|
protected readonly renderedKey: import("@angular/core").Signal<string | null>;
|
|
31
|
-
/** Resolved canvas layout for the active variant
|
|
56
|
+
/** Resolved canvas layout for the active variant. Variant overrides component config; defaults to 'fit'. */
|
|
32
57
|
protected readonly canvasLayout: import("@angular/core").Signal<import("../../shared/canvas-layout.type.js").CanvasLayout>;
|
|
33
58
|
protected readonly overlayInputs: {
|
|
34
59
|
rendererService: PrismRendererService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prism-renderer.component.d.ts","sourceRoot":"","sources":["../../../src/app/renderer/prism-renderer.component.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prism-renderer.component.d.ts","sourceRoot":"","sources":["../../../src/app/renderer/prism-renderer.component.ts"],"names":[],"mappings":"AACA,OAAO,EASH,QAAQ,EAER,KAAK,IAAI,EAIZ,MAAM,eAAe,CAAC;AAWvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAG3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAGjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;;AAMhF,qBASa,sBAAsB;IAC/B,SAAS,CAAC,QAAQ,CAAC,iBAAiB,yBAAkC;IACtE,SAAS,CAAC,QAAQ,CAAC,eAAe,uBAAgC;IAClE,SAAS,CAAC,QAAQ,CAAC,aAAa,qBAA8B;IAC9D,SAAS,CAAC,QAAQ,CAAC,OAAO,sBAA+B;IACzD,SAAS,CAAC,QAAQ,CAAC,SAAS,wBAAiC;IAE7D;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,QAAQ,CAAC,aAAa,gDAAuF;IAEvH,SAAS,CAAC,QAAQ,CAAC,YAAY,OAAgB;IAC/C,SAAS,CAAC,QAAQ,CAAC,YAAY,QAAgB;IAE/C;;;;;;;OAOG;IACH,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI/C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgC;IAChE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgC;IAChE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmC;IACxD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAE3B;IAEH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAC1D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8B;IAE5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAEpB;IACH,OAAO,CAAC,YAAY,CAAsC;IAC1D,OAAO,CAAC,mBAAmB,CAAsC;IACjE,OAAO,CAAC,oBAAoB,CAA0D;IACtF,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoC;IACjE,QAAQ,CAAC,aAAa,+DAAsC;IAC5D,wFAAwF;IACxF,SAAS,CAAC,QAAQ,CAAC,WAAW,gDAQ3B;IACH,4GAA4G;IAC5G,SAAS,CAAC,QAAQ,CAAC,YAAY,4FAO5B;IACH,SAAS,CAAC,QAAQ,CAAC,aAAa;;MAA6C;IAC7E,SAAS,CAAC,QAAQ,CAAC,eAAe,yFAI/B;;IAgFH,OAAO,CAAC,eAAe;IA8EvB,OAAO,CAAC,OAAO;yCAjPN,sBAAsB;2CAAtB,sBAAsB;CAgQlC"}
|
|
@@ -1,38 +1,80 @@
|
|
|
1
|
-
import { Component, ChangeDetectionStrategy, computed, DestroyRef, effect, ElementRef, inject, Injector, signal, untracked, viewChild, ViewContainerRef, } from '@angular/core';
|
|
2
1
|
import { NgComponentOutlet } from '@angular/common';
|
|
3
|
-
import {
|
|
2
|
+
import { ChangeDetectionStrategy, Component, computed, DestroyRef, effect, ElementRef, inject, Injector, signal, untracked, viewChild, ViewContainerRef } from '@angular/core';
|
|
3
|
+
import { VIEWPORT_MAX, VIEWPORT_MIN } from '../../shared/viewport.type.js';
|
|
4
|
+
import { CANVAS_BG_STYLES } from '../canvas/canvas-bg.styles.js';
|
|
5
|
+
import { PrismCanvasBgPillComponent } from '../canvas/prism-canvas-bg-pill.component.js';
|
|
6
|
+
import { PrismCanvasMeasureComponent } from '../canvas/prism-canvas-measure.component.js';
|
|
7
|
+
import { PrismCanvasRulersComponent } from '../canvas/prism-canvas-rulers.component.js';
|
|
8
|
+
import { snapViewportWidth } from '../canvas/viewport-snap.js';
|
|
9
|
+
import { PrismResizerDirective } from '../directives/prism-resizer.directive.js';
|
|
4
10
|
import { BUILTIN_PANELS } from '../panels/builtin-panels.js';
|
|
5
|
-
import {
|
|
11
|
+
import { PrismCanvasService } from '../services/prism-canvas.service.js';
|
|
12
|
+
import { PrismCaptureService } from '../services/prism-capture.service.js';
|
|
6
13
|
import { PrismEventLogService } from '../services/prism-event-log.service.js';
|
|
14
|
+
import { PrismManifestService } from '../services/prism-manifest.service.js';
|
|
7
15
|
import { PrismNavigationService } from '../services/prism-navigation.service.js';
|
|
8
16
|
import { PrismPanelService } from '../services/prism-panel.service.js';
|
|
9
17
|
import { PrismPluginService } from '../services/prism-plugin.service.js';
|
|
10
18
|
import { PrismRendererService } from '../services/prism-renderer.service.js';
|
|
11
|
-
import { PrismCanvasService } from '../services/prism-canvas.service.js';
|
|
12
|
-
import { PrismCaptureService } from '../services/prism-capture.service.js';
|
|
13
19
|
import { PrismVariantBgService } from '../services/prism-variant-bg.service.js';
|
|
14
|
-
import {
|
|
15
|
-
import { PrismCanvasBgPillComponent } from '../canvas/prism-canvas-bg-pill.component.js';
|
|
16
|
-
import { CANVAS_BG_STYLES } from '../canvas/canvas-bg.styles.js';
|
|
20
|
+
import { PRISM_RENDERER_HOOKS } from '../tokens/prism-tokens.js';
|
|
17
21
|
import { buildKnownInputs } from './known-inputs.js';
|
|
18
22
|
import { resolveOverlay } from './overlay-resolver.js';
|
|
19
23
|
import { parseContentToNodes } from './projectable-content.js';
|
|
20
24
|
import * as i0 from "@angular/core";
|
|
21
25
|
const _c0 = ["outlet"];
|
|
26
|
+
function PrismRendererComponent_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
27
|
+
i0.ɵɵelement(0, "prism-canvas-measure");
|
|
28
|
+
} }
|
|
29
|
+
function PrismRendererComponent_Conditional_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
30
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
31
|
+
i0.ɵɵelementStart(0, "span", 4);
|
|
32
|
+
i0.ɵɵelement(1, "span", 5);
|
|
33
|
+
i0.ɵɵelementStart(2, "span", 6);
|
|
34
|
+
i0.ɵɵtext(3);
|
|
35
|
+
i0.ɵɵelementEnd();
|
|
36
|
+
i0.ɵɵelement(4, "span", 5);
|
|
37
|
+
i0.ɵɵelementEnd();
|
|
38
|
+
i0.ɵɵelementStart(5, "div", 7);
|
|
39
|
+
i0.ɵɵlistener("valueChange", function PrismRendererComponent_Conditional_1_Conditional_4_Template_div_valueChange_5_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onViewportResize($event)); });
|
|
40
|
+
i0.ɵɵelement(6, "span", 8);
|
|
41
|
+
i0.ɵɵelementEnd();
|
|
42
|
+
i0.ɵɵelementStart(7, "div", 9);
|
|
43
|
+
i0.ɵɵlistener("valueChange", function PrismRendererComponent_Conditional_1_Conditional_4_Template_div_valueChange_7_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onViewportResize($event)); });
|
|
44
|
+
i0.ɵɵelement(8, "span", 8);
|
|
45
|
+
i0.ɵɵelementEnd();
|
|
46
|
+
} if (rf & 2) {
|
|
47
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
48
|
+
i0.ɵɵadvance(3);
|
|
49
|
+
i0.ɵɵtextInterpolate1("", ctx_r1.viewportWidth(), " px");
|
|
50
|
+
i0.ɵɵadvance(2);
|
|
51
|
+
i0.ɵɵproperty("scale", -2 / (ctx_r1.canvasService.zoom() || 1))("min", ctx_r1.VIEWPORT_MIN)("max", ctx_r1.VIEWPORT_MAX)("value", ctx_r1.viewportWidth());
|
|
52
|
+
i0.ɵɵattribute("aria-valuenow", ctx_r1.viewportWidth())("aria-valuemin", ctx_r1.VIEWPORT_MIN)("aria-valuemax", ctx_r1.VIEWPORT_MAX);
|
|
53
|
+
i0.ɵɵadvance(2);
|
|
54
|
+
i0.ɵɵproperty("scale", 2 / (ctx_r1.canvasService.zoom() || 1))("min", ctx_r1.VIEWPORT_MIN)("max", ctx_r1.VIEWPORT_MAX)("value", ctx_r1.viewportWidth());
|
|
55
|
+
i0.ɵɵattribute("aria-valuenow", ctx_r1.viewportWidth())("aria-valuemin", ctx_r1.VIEWPORT_MIN)("aria-valuemax", ctx_r1.VIEWPORT_MAX);
|
|
56
|
+
} }
|
|
22
57
|
function PrismRendererComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
23
|
-
i0.ɵɵelement(0, "div", 3)(1, "prism-canvas-rulers")
|
|
58
|
+
i0.ɵɵelement(0, "div", 3)(1, "prism-canvas-rulers");
|
|
59
|
+
i0.ɵɵconditionalCreate(2, PrismRendererComponent_Conditional_1_Conditional_2_Template, 1, 0, "prism-canvas-measure");
|
|
60
|
+
i0.ɵɵelement(3, "prism-canvas-bg-pill");
|
|
61
|
+
i0.ɵɵconditionalCreate(4, PrismRendererComponent_Conditional_1_Conditional_4_Template, 9, 15);
|
|
24
62
|
} if (rf & 2) {
|
|
25
|
-
const
|
|
26
|
-
i0.ɵɵclassProp("visible",
|
|
63
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
64
|
+
i0.ɵɵclassProp("visible", ctx_r1.canvasService.guides());
|
|
65
|
+
i0.ɵɵadvance(2);
|
|
66
|
+
i0.ɵɵconditional(ctx_r1.canvasService.measure() ? 2 : -1);
|
|
67
|
+
i0.ɵɵadvance(2);
|
|
68
|
+
i0.ɵɵconditional(ctx_r1.viewportWidth() !== null ? 4 : -1);
|
|
27
69
|
} }
|
|
28
70
|
function PrismRendererComponent_Conditional_5_ng_container_0_Template(rf, ctx) { if (rf & 1) {
|
|
29
71
|
i0.ɵɵelementContainer(0);
|
|
30
72
|
} }
|
|
31
73
|
function PrismRendererComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
32
|
-
i0.ɵɵtemplate(0, PrismRendererComponent_Conditional_5_ng_container_0_Template, 1, 0, "ng-container",
|
|
74
|
+
i0.ɵɵtemplate(0, PrismRendererComponent_Conditional_5_ng_container_0_Template, 1, 0, "ng-container", 10);
|
|
33
75
|
} if (rf & 2) {
|
|
34
|
-
const
|
|
35
|
-
i0.ɵɵproperty("ngComponentOutlet",
|
|
76
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
77
|
+
i0.ɵɵproperty("ngComponentOutlet", ctx_r1.activeOverlay())("ngComponentOutletInputs", ctx_r1.overlayInputs)("ngComponentOutletInjector", ctx_r1.overlayInjector());
|
|
36
78
|
} }
|
|
37
79
|
export class PrismRendererComponent {
|
|
38
80
|
navigationService = inject(PrismNavigationService);
|
|
@@ -40,13 +82,41 @@ export class PrismRendererComponent {
|
|
|
40
82
|
canvasService = inject(PrismCanvasService);
|
|
41
83
|
capture = inject(PrismCaptureService);
|
|
42
84
|
variantBg = inject(PrismVariantBgService);
|
|
85
|
+
/**
|
|
86
|
+
* The width the canvas is actually constrained to, `null` for unconstrained.
|
|
87
|
+
*
|
|
88
|
+
* Every viewport binding reads this rather than the service directly, so
|
|
89
|
+
* capture mode cannot be constrained by any route. Previously only the grips
|
|
90
|
+
* and the dimension line sat behind the capture guard while the attributes
|
|
91
|
+
* that change `.demo-wrap`'s box did not. Safe in practice, because capture
|
|
92
|
+
* never restores a persisted width and every setter is suppressed, but safe
|
|
93
|
+
* by reachability argument rather than by construction. A future caller of
|
|
94
|
+
* `setViewportWidth` during a capture run would have recorded every
|
|
95
|
+
* visual-regression baseline at the constrained width with no visible chrome
|
|
96
|
+
* to reveal it. One computed makes the guarantee structural.
|
|
97
|
+
*/
|
|
98
|
+
viewportWidth = computed(() => (this.capture.active() ? null : this.canvasService.viewportWidth()), /* @ts-ignore */
|
|
99
|
+
...(ngDevMode ? [{ debugName: "viewportWidth" }] : /* istanbul ignore next */ []));
|
|
100
|
+
VIEWPORT_MIN = VIEWPORT_MIN;
|
|
101
|
+
VIEWPORT_MAX = VIEWPORT_MAX;
|
|
102
|
+
/**
|
|
103
|
+
* A drag on either grip, rested on a preset if it came close enough.
|
|
104
|
+
*
|
|
105
|
+
* The snapping lives here and not in `PrismResizerDirective` because the
|
|
106
|
+
* directive also drives the sidebar and the panel, where there is nothing to
|
|
107
|
+
* snap to, and a generic control that knows about viewport presets would be
|
|
108
|
+
* the wrong shape.
|
|
109
|
+
*/
|
|
110
|
+
onViewportResize(width) {
|
|
111
|
+
this.canvasService.setViewportWidth(snapViewportWidth(width));
|
|
112
|
+
}
|
|
43
113
|
eventLogService = inject(PrismEventLogService);
|
|
44
114
|
manifestService = inject(PrismManifestService);
|
|
45
115
|
injector = inject(Injector);
|
|
46
116
|
destroyRef = inject(DestroyRef);
|
|
47
117
|
host = inject((ElementRef));
|
|
48
118
|
rendererHooks = inject(PRISM_RENDERER_HOOKS, {
|
|
49
|
-
optional: true
|
|
119
|
+
optional: true
|
|
50
120
|
});
|
|
51
121
|
panelService = inject(PrismPanelService);
|
|
52
122
|
pluginService = inject(PrismPluginService);
|
|
@@ -69,13 +139,13 @@ export class PrismRendererComponent {
|
|
|
69
139
|
return `${comp.meta.className}:${this.rendererService.activeVariantIndex()}`;
|
|
70
140
|
}, /* @ts-ignore */
|
|
71
141
|
...(ngDevMode ? [{ debugName: "renderedKey" }] : /* istanbul ignore next */ []));
|
|
72
|
-
/** Resolved canvas layout for the active variant
|
|
142
|
+
/** Resolved canvas layout for the active variant. Variant overrides component config; defaults to 'fit'. */
|
|
73
143
|
canvasLayout = computed(() => {
|
|
74
144
|
const comp = this.navigationService.activeComponent();
|
|
75
145
|
if (!comp)
|
|
76
146
|
return 'fit';
|
|
77
147
|
const variant = comp.meta.showcaseConfig.variants?.[this.rendererService.activeVariantIndex()];
|
|
78
|
-
return
|
|
148
|
+
return variant?.canvasLayout ?? comp.meta.showcaseConfig.canvasLayout ?? 'fit';
|
|
79
149
|
}, /* @ts-ignore */
|
|
80
150
|
...(ngDevMode ? [{ debugName: "canvasLayout" }] : /* istanbul ignore next */ []));
|
|
81
151
|
overlayInputs = { rendererService: this.rendererService };
|
|
@@ -116,7 +186,7 @@ export class PrismRendererComponent {
|
|
|
116
186
|
const knownInputs = buildKnownInputs(comp);
|
|
117
187
|
for (const [key, value] of Object.entries(inputs)) {
|
|
118
188
|
if (!knownInputs.has(key)) {
|
|
119
|
-
console.warn(`[ng-prism] Unknown input "${key}" on <${comp.meta.componentMeta.selector}
|
|
189
|
+
console.warn(`[ng-prism] Unknown input "${key}" on <${comp.meta.componentMeta.selector}>, skipping. Remove it from @Showcase variants.`);
|
|
120
190
|
continue;
|
|
121
191
|
}
|
|
122
192
|
ref.setInput(key, value);
|
|
@@ -127,13 +197,11 @@ export class PrismRendererComponent {
|
|
|
127
197
|
});
|
|
128
198
|
effect(() => {
|
|
129
199
|
const panelId = this.panelService.activePanelId();
|
|
130
|
-
const allPanels = [
|
|
131
|
-
...BUILTIN_PANELS,
|
|
132
|
-
...this.pluginService.panels(),
|
|
133
|
-
];
|
|
200
|
+
const allPanels = [...BUILTIN_PANELS, ...this.pluginService.panels()];
|
|
134
201
|
const resolution = resolveOverlay(allPanels, panelId, {
|
|
135
202
|
captureActive: this.capture.active(),
|
|
136
|
-
|
|
203
|
+
measureActive: this.canvasService.measure(),
|
|
204
|
+
cache: this.overlayCache
|
|
137
205
|
});
|
|
138
206
|
if (resolution.kind === 'eager') {
|
|
139
207
|
this.activeOverlay.set(resolution.component);
|
|
@@ -156,17 +224,15 @@ export class PrismRendererComponent {
|
|
|
156
224
|
this.cleanup();
|
|
157
225
|
const renderPageTitle = comp.meta.showcaseConfig.renderPage;
|
|
158
226
|
if (renderPageTitle) {
|
|
159
|
-
const page = this.manifestService
|
|
160
|
-
.manifest()
|
|
161
|
-
.pages?.find((p) => p.type === 'component' && p.title === renderPageTitle);
|
|
227
|
+
const page = this.manifestService.manifest().pages?.find((p) => p.type === 'component' && p.title === renderPageTitle);
|
|
162
228
|
if (page) {
|
|
163
229
|
this.isRenderPage = true;
|
|
164
230
|
const injector = Injector.create({
|
|
165
231
|
providers: comp.meta.showcaseConfig.providers ?? [],
|
|
166
|
-
parent: this.injector
|
|
232
|
+
parent: this.injector
|
|
167
233
|
});
|
|
168
234
|
this.componentRef = this.outlet().createComponent(page.component, {
|
|
169
|
-
injector
|
|
235
|
+
injector
|
|
170
236
|
});
|
|
171
237
|
this.componentRef.changeDetectorRef.detectChanges();
|
|
172
238
|
this.rendererService.renderedElement.set(this.componentRef.location.nativeElement);
|
|
@@ -180,19 +246,18 @@ export class PrismRendererComponent {
|
|
|
180
246
|
performance.mark('prism:render:start', detail);
|
|
181
247
|
const injector = Injector.create({
|
|
182
248
|
providers: comp.meta.showcaseConfig.providers ?? [],
|
|
183
|
-
parent: this.injector
|
|
249
|
+
parent: this.injector
|
|
184
250
|
});
|
|
185
251
|
const content = this.rendererService.activeContent();
|
|
186
252
|
this.lastProjectedContent = content;
|
|
187
253
|
const projectableNodes = content ? parseContentToNodes(content) : undefined;
|
|
188
254
|
this.componentRef = this.outlet().createComponent(comp.type, {
|
|
189
255
|
injector,
|
|
190
|
-
projectableNodes
|
|
256
|
+
projectableNodes
|
|
191
257
|
});
|
|
192
258
|
for (const output of comp.meta.outputs) {
|
|
193
259
|
const emitter = this.componentRef.instance[output.name];
|
|
194
|
-
if (emitter &&
|
|
195
|
-
typeof emitter.subscribe === 'function') {
|
|
260
|
+
if (emitter && typeof emitter.subscribe === 'function') {
|
|
196
261
|
const sub = emitter.subscribe((v) => this.eventLogService.log(output.name, v));
|
|
197
262
|
this.outputSubscriptions.push(sub);
|
|
198
263
|
}
|
|
@@ -200,7 +265,7 @@ export class PrismRendererComponent {
|
|
|
200
265
|
const knownInputs = buildKnownInputs(comp);
|
|
201
266
|
for (const [key, value] of Object.entries(this.rendererService.inputValues())) {
|
|
202
267
|
if (!knownInputs.has(key)) {
|
|
203
|
-
console.warn(`[ng-prism] Unknown input "${key}" on <${selector}
|
|
268
|
+
console.warn(`[ng-prism] Unknown input "${key}" on <${selector}>, skipping. Remove it from @Showcase variants.`);
|
|
204
269
|
continue;
|
|
205
270
|
}
|
|
206
271
|
this.componentRef.setInput(key, value);
|
|
@@ -230,67 +295,29 @@ export class PrismRendererComponent {
|
|
|
230
295
|
i0.ɵɵviewQuerySignal(ctx.outlet, _c0, 5, ViewContainerRef);
|
|
231
296
|
} if (rf & 2) {
|
|
232
297
|
i0.ɵɵqueryAdvance();
|
|
233
|
-
} }, decls: 6, vars:
|
|
298
|
+
} }, decls: 6, vars: 14, consts: [["outlet", ""], [1, "prism-canvas-stage"], [1, "demo-wrap"], [1, "stage-crosshair"], [1, "vp-dim"], [1, "vp-dim__rule"], [1, "vp-dim__v"], ["prismResizer", "", "axis", "x", "aria-label", "Viewport width, left edge", 1, "vp-grip", 3, "valueChange", "scale", "min", "max", "value"], [1, "vp-grip__bar"], ["prismResizer", "", "axis", "x", "aria-label", "Viewport width, right edge", 1, "vp-grip", "vp-grip--end", 3, "valueChange", "scale", "min", "max", "value"], [4, "ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector"]], template: function PrismRendererComponent_Template(rf, ctx) { if (rf & 1) {
|
|
234
299
|
i0.ɵɵelementStart(0, "div", 1);
|
|
235
|
-
i0.ɵɵconditionalCreate(1, PrismRendererComponent_Conditional_1_Template,
|
|
300
|
+
i0.ɵɵconditionalCreate(1, PrismRendererComponent_Conditional_1_Template, 5, 4);
|
|
236
301
|
i0.ɵɵelementStart(2, "div", 2);
|
|
237
302
|
i0.ɵɵelementContainer(3, null, 0);
|
|
238
303
|
i0.ɵɵconditionalCreate(5, PrismRendererComponent_Conditional_5_Template, 1, 3, "ng-container");
|
|
239
304
|
i0.ɵɵelementEnd()();
|
|
240
305
|
} if (rf & 2) {
|
|
241
|
-
i0.ɵɵ
|
|
306
|
+
i0.ɵɵstyleProp("--%NS%prism-vp-w", ctx.viewportWidth(), "px")("--%NS%zoom", ctx.canvasService.zoom());
|
|
307
|
+
i0.ɵɵattribute("data-bg", ctx.variantBg.effective())("data-rulers", ctx.canvasService.rulers() ? "" : null)("data-viewport", ctx.viewportWidth() !== null ? "" : null);
|
|
242
308
|
i0.ɵɵadvance();
|
|
243
309
|
i0.ɵɵconditional(!ctx.capture.active() ? 1 : -1);
|
|
244
310
|
i0.ɵɵadvance();
|
|
245
311
|
i0.ɵɵstyleProp("--%NS%zoom", ctx.canvasService.zoom());
|
|
246
|
-
i0.ɵɵattribute("data-prism-rendered", ctx.renderedKey())("data-canvas-layout", ctx.canvasLayout());
|
|
312
|
+
i0.ɵɵattribute("data-prism-rendered", ctx.renderedKey())("data-canvas-layout", ctx.canvasLayout())("data-viewport", ctx.viewportWidth() !== null ? "" : null);
|
|
247
313
|
i0.ɵɵadvance(3);
|
|
248
314
|
i0.ɵɵconditional(ctx.activeOverlay() ? 5 : -1);
|
|
249
|
-
} }, dependencies: [PrismCanvasRulersComponent,
|
|
250
|
-
PrismCanvasBgPillComponent,
|
|
251
|
-
NgComponentOutlet], styles: ["[_nghost-%COMP%] {\n display: block;\n min-height: 0;\n flex: 1;\n }\n\n .prism-canvas-stage[_ngcontent-%COMP%] {\n position: relative;\n overflow: auto;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 32px;\n min-height: 200px;\n height: 100%;\n background-color: var(--%NS%prism-stage);\n\n \n\n\n\n\n\n\n\n\n\n\n outline: 1px solid var(--%NS%prism-stage-edge);\n outline-offset: -1px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1),\n 0 8px 24px -12px rgba(0, 0, 0, 0.18);\n transition: filter var(--%NS%dur-base);\n --%NS%prism-canvas-overlay-top: 12px;\n --%NS%prism-canvas-overlay-inline: 20px;\n }\n .prism-canvas-stage[data-rulers][_ngcontent-%COMP%] {\n --%NS%prism-canvas-overlay-top: 28px;\n --%NS%prism-canvas-overlay-inline: 28px;\n }\n\n .stage-crosshair[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n pointer-events: none;\n opacity: 0;\n transition: opacity var(--%NS%dur-base);\n }\n .stage-crosshair.visible[_ngcontent-%COMP%] {\n opacity: 1;\n }\n .stage-crosshair[_ngcontent-%COMP%]::before, \n .stage-crosshair[_ngcontent-%COMP%]::after {\n content: '';\n position: absolute;\n background: color-mix(in srgb, var(--%NS%prism-primary) 20%, transparent);\n }\n .stage-crosshair[_ngcontent-%COMP%]::before {\n left: 0;\n right: 0;\n top: 50%;\n height: 1px;\n }\n .stage-crosshair[_ngcontent-%COMP%]::after {\n top: 0;\n bottom: 0;\n left: 50%;\n width: 1px;\n }\n\n .demo-wrap[_ngcontent-%COMP%] {\n position: relative;\n display: inline-block;\n transform: scale(var(--%NS%zoom, 1));\n transition: transform 0.18s;\n }\n .demo-wrap[data-canvas-layout='stretch'][_ngcontent-%COMP%] {\n display: block;\n width: 100%;\n max-width: 800px;\n }", "[data-bg=\"dots\"][_ngcontent-%COMP%] {\n background-image: radial-gradient(circle, var(--%NS%prism-dot) 1px, transparent 1px);\n background-size: 20px 20px;\n }\n\n [data-bg=\"plain\"][_ngcontent-%COMP%] {\n background-image: none;\n }\n\n \n\n\n\n\n [data-bg=\"light\"][_ngcontent-%COMP%] {\n background-color: var(--%NS%prism-void-light, #f7f5fc);\n background-image: none;\n }\n [data-bg=\"dark\"][_ngcontent-%COMP%] {\n background-color: var(--%NS%prism-void-dark, #07050f);\n background-image: none;\n }\n\n \n\n\n\n\n\n [data-bg=\"checker\"][_ngcontent-%COMP%], \n [data-bg=\"transparent\"][_ngcontent-%COMP%] {\n background-image:\n linear-gradient(45deg, var(--%NS%prism-border) 25%, transparent 25%),\n linear-gradient(-45deg, var(--%NS%prism-border) 25%, transparent 25%),\n linear-gradient(45deg, transparent 75%, var(--%NS%prism-border) 75%),\n linear-gradient(-45deg, transparent 75%, var(--%NS%prism-border) 75%);\n background-size: 16px 16px;\n background-position: 0 0, 0 8px, 8px -8px, -8px 0;\n }"] });
|
|
315
|
+
} }, dependencies: [PrismCanvasRulersComponent, PrismCanvasBgPillComponent, PrismCanvasMeasureComponent, NgComponentOutlet, PrismResizerDirective], styles: ["[_nghost-%COMP%] {\n display: block;\n flex: 1;\n min-height: 0;\n}\n\n.prism-canvas-stage[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n min-height: 200px;\n padding: 32px;\n overflow: auto;\n\n \n\n\n\n\n\n\n\n\n\n\n outline: 1px solid var(--%NS%prism-stage-edge);\n outline-offset: -1px;\n background-color: var(--%NS%prism-stage);\n box-shadow:\n 0 1px 3px rgb(0 0 0 / 10%),\n 0 8px 24px -12px rgb(0 0 0 / 18%);\n transition: filter var(--%NS%dur-base);\n\n --%NS%prism-canvas-overlay-top: 12px;\n --%NS%prism-canvas-overlay-inline: 20px;\n}\n\n.prism-canvas-stage[data-rulers][_ngcontent-%COMP%] {\n --%NS%prism-canvas-overlay-top: 28px;\n --%NS%prism-canvas-overlay-inline: 28px;\n}\n\n.stage-crosshair[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n pointer-events: none;\n opacity: 0;\n transition: opacity var(--%NS%dur-base);\n}\n\n.stage-crosshair.visible[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.stage-crosshair[_ngcontent-%COMP%]::before, \n.stage-crosshair[_ngcontent-%COMP%]::after {\n position: absolute;\n content: '';\n background: color-mix(in srgb, var(--%NS%prism-primary) 20%, transparent);\n}\n\n.stage-crosshair[_ngcontent-%COMP%]::before {\n top: 50%;\n right: 0;\n left: 0;\n height: 1px;\n}\n\n.stage-crosshair[_ngcontent-%COMP%]::after {\n top: 0;\n bottom: 0;\n left: 50%;\n width: 1px;\n}\n\n.demo-wrap[_ngcontent-%COMP%] {\n position: relative;\n display: inline-block;\n transform: scale(var(--%NS%zoom, 1));\n transition: transform 0.18s;\n}\n\n.demo-wrap[data-canvas-layout='stretch'][_ngcontent-%COMP%] {\n display: block;\n width: 100%;\n max-width: 800px;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.demo-wrap[data-viewport][_ngcontent-%COMP%] {\n display: grid;\n\n \n\n\n\n\n\n\n\n\n flex: none;\n\n \n\n\n\n\n\n\n justify-items: safe center;\n width: var(--%NS%prism-vp-w);\n max-width: none;\n container-type: inline-size;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.vp-grip[_ngcontent-%COMP%] {\n position: absolute;\n top: var(--%NS%prism-canvas-overlay-top, 12px);\n bottom: 0;\n left: calc(50% - var(--%NS%prism-vp-w) * var(--%NS%zoom, 1) / 2 - 4.5px);\n z-index: 4;\n display: grid;\n width: 9px;\n\n \n\n\n\n\n\n pointer-events: none;\n background: transparent;\n}\n\n.vp-grip--end[_ngcontent-%COMP%] {\n right: calc(50% - var(--%NS%prism-vp-w) * var(--%NS%zoom, 1) / 2 - 4.5px);\n left: auto;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n.vp-grip__bar[_ngcontent-%COMP%] {\n z-index: 1;\n box-sizing: content-box;\n grid-area: 1 / 1;\n place-self: center center;\n width: 3px;\n height: 34px;\n padding: 5px 3px;\n pointer-events: auto;\n background: color-mix(in srgb, var(--%NS%prism-measure) 80%, transparent);\n background-clip: content-box;\n border-radius: 2px;\n transition: background var(--%NS%dur-fast);\n}\n\n\n\n\n\n\n.vp-grip[_ngcontent-%COMP%]::after {\n grid-area: 1 / 1;\n place-self: stretch center;\n width: 1px;\n content: '';\n background: color-mix(in srgb, var(--%NS%prism-measure) 75%, transparent);\n transition: background var(--%NS%dur-fast);\n}\n\n.vp-grip[_ngcontent-%COMP%]:hover::after, \n.vp-grip.active[_ngcontent-%COMP%]::after, \n.vp-grip[_ngcontent-%COMP%]:focus-visible::after {\n background: color-mix(in srgb, var(--%NS%prism-measure) 55%, transparent);\n}\n\n.vp-grip[_ngcontent-%COMP%]:hover .vp-grip__bar[_ngcontent-%COMP%], \n.vp-grip.active[_ngcontent-%COMP%] .vp-grip__bar[_ngcontent-%COMP%], \n.vp-grip[_ngcontent-%COMP%]:focus-visible .vp-grip__bar[_ngcontent-%COMP%] {\n background: var(--%NS%prism-measure);\n background-clip: content-box;\n}\n\n\n\n\n.vp-grip[_ngcontent-%COMP%]:focus-visible {\n outline: none;\n}\n\n.vp-grip[_ngcontent-%COMP%]:focus-visible .vp-grip__bar[_ngcontent-%COMP%] {\n outline: 2px solid var(--%NS%prism-primary);\n outline-offset: 1px;\n}\n\n\n\n\n\n\n\n\n\n\n.vp-dim[_ngcontent-%COMP%] {\n position: absolute;\n top: var(--%NS%prism-canvas-overlay-top, 12px);\n left: 50%;\n z-index: 4;\n display: flex;\n gap: var(--%NS%sp-3);\n align-items: center;\n width: calc(var(--%NS%prism-vp-w) * var(--%NS%zoom, 1));\n pointer-events: none;\n transform: translateX(-50%);\n}\n\n\n\n\n.vp-dim__rule[_ngcontent-%COMP%] {\n position: relative;\n flex: 1;\n height: 1px;\n background: color-mix(in srgb, var(--%NS%prism-measure) 70%, transparent);\n}\n\n\n\n\n.vp-dim__rule[_ngcontent-%COMP%]::before {\n position: absolute;\n top: -3px;\n width: 1px;\n height: 7px;\n content: '';\n background: color-mix(in srgb, var(--%NS%prism-measure) 90%, transparent);\n}\n\n.vp-dim__rule[_ngcontent-%COMP%]:first-child::before {\n left: 0;\n}\n\n.vp-dim__rule[_ngcontent-%COMP%]:last-child::before {\n right: 0;\n}\n\n.vp-dim__v[_ngcontent-%COMP%] {\n flex: none;\n font-family: var(--%NS%font-mono);\n font-size: 9px;\n color: var(--%NS%prism-measure);\n white-space: nowrap;\n}", "[data-bg=\"dots\"][_ngcontent-%COMP%] {\n background-image: radial-gradient(circle, var(--%NS%prism-dot) 1px, transparent 1px);\n background-size: 20px 20px;\n }\n\n [data-bg=\"plain\"][_ngcontent-%COMP%] {\n background-image: none;\n }\n\n \n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [data-bg=\"light\"][_ngcontent-%COMP%] {\n background-color: var(--%NS%prism-void-light, #f7f5fc);\n background-image: none;\n --%NS%prism-measure: #ca00c1;\n --%NS%prism-measure-plate: var(--%NS%prism-void-light, #f7f5fc);\n }\n [data-bg=\"dark\"][_ngcontent-%COMP%] {\n background-color: var(--%NS%prism-void-dark, #07050f);\n background-image: none;\n --%NS%prism-measure: #f632ff;\n --%NS%prism-measure-plate: var(--%NS%prism-void-dark, #07050f);\n }\n\n \n\n\n [data-bg=\"checker\"][_ngcontent-%COMP%], \n [data-bg=\"transparent\"][_ngcontent-%COMP%] {\n background-image:\n linear-gradient(45deg, var(--%NS%prism-border) 25%, transparent 25%),\n linear-gradient(-45deg, var(--%NS%prism-border) 25%, transparent 25%),\n linear-gradient(45deg, transparent 75%, var(--%NS%prism-border) 75%),\n linear-gradient(-45deg, transparent 75%, var(--%NS%prism-border) 75%);\n background-size: 16px 16px;\n background-position: 0 0, 0 8px, 8px -8px, -8px 0;\n }"] });
|
|
252
316
|
}
|
|
253
317
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismRendererComponent, [{
|
|
254
318
|
type: Component,
|
|
255
|
-
args: [{ selector: 'prism-renderer', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
256
|
-
PrismCanvasRulersComponent,
|
|
257
|
-
PrismCanvasBgPillComponent,
|
|
258
|
-
NgComponentOutlet,
|
|
259
|
-
], template: `
|
|
260
|
-
<div
|
|
261
|
-
class="prism-canvas-stage"
|
|
262
|
-
[attr.data-bg]="variantBg.effective()"
|
|
263
|
-
[attr.data-rulers]="canvasService.rulers() ? '' : null"
|
|
264
|
-
>
|
|
265
|
-
@if (!capture.active()) {
|
|
266
|
-
<div
|
|
267
|
-
class="stage-crosshair"
|
|
268
|
-
[class.visible]="canvasService.guides()"
|
|
269
|
-
></div>
|
|
270
|
-
<prism-canvas-rulers />
|
|
271
|
-
<prism-canvas-bg-pill />
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
<div
|
|
275
|
-
class="demo-wrap"
|
|
276
|
-
[style.--zoom]="canvasService.zoom()"
|
|
277
|
-
[attr.data-prism-rendered]="renderedKey()"
|
|
278
|
-
[attr.data-canvas-layout]="canvasLayout()"
|
|
279
|
-
>
|
|
280
|
-
<ng-container #outlet />
|
|
281
|
-
@if (activeOverlay()) {
|
|
282
|
-
<ng-container
|
|
283
|
-
*ngComponentOutlet="
|
|
284
|
-
activeOverlay()!;
|
|
285
|
-
inputs: overlayInputs;
|
|
286
|
-
injector: overlayInjector()
|
|
287
|
-
"
|
|
288
|
-
/>
|
|
289
|
-
}
|
|
290
|
-
</div>
|
|
291
|
-
</div>
|
|
292
|
-
`, styles: ["\n :host {\n display: block;\n min-height: 0;\n flex: 1;\n }\n\n .prism-canvas-stage {\n position: relative;\n overflow: auto;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 32px;\n min-height: 200px;\n height: 100%;\n background-color: var(--prism-stage);\n\n /* The edge is outline + shadow, never border and never extra padding.\n plugin-visual-regression screenshots .demo-wrap, which is centred in\n this element; a border would shrink the content box by 2px and move\n that centre, shifting all 15 baselines in test-workspace/vrt/baseline\n without a single component having changed. Capture mode resets this\n element's padding but not its border, and this repo has no VRT runner\n to catch the drift. outline and box-shadow do not participate in\n layout, so the box is provably unchanged. Keep it that way.\n They do still paint, and outline-offset is negative, so the line lands\n inside the box: CAPTURE_STYLES in prism-capture.service.ts sets both\n to none, which is only safe because neither is load-bearing here. */\n outline: 1px solid var(--prism-stage-edge);\n outline-offset: -1px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1),\n 0 8px 24px -12px rgba(0, 0, 0, 0.18);\n transition: filter var(--dur-base);\n --prism-canvas-overlay-top: 12px;\n --prism-canvas-overlay-inline: 20px;\n }\n .prism-canvas-stage[data-rulers] {\n --prism-canvas-overlay-top: 28px;\n --prism-canvas-overlay-inline: 28px;\n }\n\n .stage-crosshair {\n position: absolute;\n inset: 0;\n pointer-events: none;\n opacity: 0;\n transition: opacity var(--dur-base);\n }\n .stage-crosshair.visible {\n opacity: 1;\n }\n .stage-crosshair::before,\n .stage-crosshair::after {\n content: '';\n position: absolute;\n background: color-mix(in srgb, var(--prism-primary) 20%, transparent);\n }\n .stage-crosshair::before {\n left: 0;\n right: 0;\n top: 50%;\n height: 1px;\n }\n .stage-crosshair::after {\n top: 0;\n bottom: 0;\n left: 50%;\n width: 1px;\n }\n\n .demo-wrap {\n position: relative;\n display: inline-block;\n transform: scale(var(--zoom, 1));\n transition: transform 0.18s;\n }\n .demo-wrap[data-canvas-layout='stretch'] {\n display: block;\n width: 100%;\n max-width: 800px;\n }\n ", "\n [data-bg=\"dots\"] {\n background-image: radial-gradient(circle, var(--prism-dot) 1px, transparent 1px);\n background-size: 20px 20px;\n }\n\n [data-bg=\"plain\"] {\n background-image: none;\n }\n\n /* Flat, not dotted. \"light\" and \"dark\" name a surface a component was\n designed against \u2014 and they are the two backgrounds whose colour is\n absolute rather than a theme token, which is what makes them the values\n to declare for a screenshot baseline. \"dots\" already exists for anyone\n who wants the grid. */\n [data-bg=\"light\"] {\n background-color: var(--prism-void-light, #f7f5fc);\n background-image: none;\n }\n [data-bg=\"dark\"] {\n background-color: var(--prism-void-dark, #07050f);\n background-image: none;\n }\n\n /* \"transparent\" shares the checkerboard on purpose. The two say the same\n thing in the two media the canvas has: while browsing, the checkerboard\n is already the UI's word for \"no surface here\"; in a capture it becomes\n literal transparency. A stage that were really see-through in the app\n would just show the shell through the canvas, which means nothing. The\n split between the two lives entirely in CAPTURE_STYLES. */\n [data-bg=\"checker\"],\n [data-bg=\"transparent\"] {\n background-image:\n linear-gradient(45deg, var(--prism-border) 25%, transparent 25%),\n linear-gradient(-45deg, var(--prism-border) 25%, transparent 25%),\n linear-gradient(45deg, transparent 75%, var(--prism-border) 75%),\n linear-gradient(-45deg, transparent 75%, var(--prism-border) 75%);\n background-size: 16px 16px;\n background-position: 0 0, 0 8px, 8px -8px, -8px 0;\n }\n"] }]
|
|
319
|
+
args: [{ selector: 'prism-renderer', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [PrismCanvasRulersComponent, PrismCanvasBgPillComponent, PrismCanvasMeasureComponent, NgComponentOutlet, PrismResizerDirective], template: "<div\n class=\"prism-canvas-stage\"\n [attr.data-bg]=\"variantBg.effective()\"\n [attr.data-rulers]=\"canvasService.rulers() ? '' : null\"\n [attr.data-viewport]=\"viewportWidth() !== null ? '' : null\"\n [style.--prism-vp-w.px]=\"viewportWidth()\"\n [style.--zoom]=\"canvasService.zoom()\">\n @if (!capture.active()) {\n <div\n class=\"stage-crosshair\"\n [class.visible]=\"canvasService.guides()\"></div>\n <prism-canvas-rulers />\n @if (canvasService.measure()) {\n <prism-canvas-measure />\n }\n <prism-canvas-bg-pill />\n @if (viewportWidth() !== null) {\n <!-- Grips and the dimension line are siblings of .demo-wrap, never\n children of it: .demo-wrap is what plugin-visual-regression\n screenshots, and anything inside it composites into every baseline.\n They sit inside the capture guard for the same reason the rulers and\n the pill do. -->\n <span class=\"vp-dim\">\n <span class=\"vp-dim__rule\"></span>\n <span class=\"vp-dim__v\">{{ viewportWidth() }} px</span>\n <span class=\"vp-dim__rule\"></span>\n </span>\n <div\n class=\"vp-grip\"\n prismResizer\n axis=\"x\"\n [scale]=\"-2 / (canvasService.zoom() || 1)\"\n [min]=\"VIEWPORT_MIN\"\n [max]=\"VIEWPORT_MAX\"\n [value]=\"viewportWidth()!\"\n (valueChange)=\"onViewportResize($event)\"\n aria-label=\"Viewport width, left edge\"\n [attr.aria-valuenow]=\"viewportWidth()\"\n [attr.aria-valuemin]=\"VIEWPORT_MIN\"\n [attr.aria-valuemax]=\"VIEWPORT_MAX\">\n <span class=\"vp-grip__bar\"></span>\n </div>\n <div\n class=\"vp-grip vp-grip--end\"\n prismResizer\n axis=\"x\"\n [scale]=\"2 / (canvasService.zoom() || 1)\"\n [min]=\"VIEWPORT_MIN\"\n [max]=\"VIEWPORT_MAX\"\n [value]=\"viewportWidth()!\"\n (valueChange)=\"onViewportResize($event)\"\n aria-label=\"Viewport width, right edge\"\n [attr.aria-valuenow]=\"viewportWidth()\"\n [attr.aria-valuemin]=\"VIEWPORT_MIN\"\n [attr.aria-valuemax]=\"VIEWPORT_MAX\">\n <span class=\"vp-grip__bar\"></span>\n </div>\n }\n }\n\n <div\n class=\"demo-wrap\"\n [style.--zoom]=\"canvasService.zoom()\"\n [attr.data-prism-rendered]=\"renderedKey()\"\n [attr.data-canvas-layout]=\"canvasLayout()\"\n [attr.data-viewport]=\"viewportWidth() !== null ? '' : null\">\n <ng-container #outlet />\n @if (activeOverlay()) {\n <ng-container *ngComponentOutlet=\"activeOverlay()!; inputs: overlayInputs; injector: overlayInjector()\" />\n }\n </div>\n</div>\n", styles: [":host {\n display: block;\n flex: 1;\n min-height: 0;\n}\n\n.prism-canvas-stage {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n min-height: 200px;\n padding: 32px;\n overflow: auto;\n\n /* The edge is outline + shadow, never border and never extra padding.\n plugin-visual-regression screenshots .demo-wrap, which is centred in\n this element; a border would shrink the content box by 2px and move\n that centre, shifting all 15 baselines in test-workspace/vrt/baseline\n without a single component having changed. Capture mode resets this\n element's padding but not its border, and this repo has no VRT runner\n to catch the drift. outline and box-shadow do not participate in\n layout, so the box is provably unchanged. Keep it that way.\n They do still paint, and outline-offset is negative, so the line lands\n inside the box: CAPTURE_STYLES in prism-capture.service.ts sets both\n to none, which is only safe because neither affects layout here. */\n outline: 1px solid var(--prism-stage-edge);\n outline-offset: -1px;\n background-color: var(--prism-stage);\n box-shadow:\n 0 1px 3px rgb(0 0 0 / 10%),\n 0 8px 24px -12px rgb(0 0 0 / 18%);\n transition: filter var(--dur-base);\n\n --prism-canvas-overlay-top: 12px;\n --prism-canvas-overlay-inline: 20px;\n}\n\n.prism-canvas-stage[data-rulers] {\n --prism-canvas-overlay-top: 28px;\n --prism-canvas-overlay-inline: 28px;\n}\n\n.stage-crosshair {\n position: absolute;\n inset: 0;\n pointer-events: none;\n opacity: 0;\n transition: opacity var(--dur-base);\n}\n\n.stage-crosshair.visible {\n opacity: 1;\n}\n\n.stage-crosshair::before,\n.stage-crosshair::after {\n position: absolute;\n content: '';\n background: color-mix(in srgb, var(--prism-primary) 20%, transparent);\n}\n\n.stage-crosshair::before {\n top: 50%;\n right: 0;\n left: 0;\n height: 1px;\n}\n\n.stage-crosshair::after {\n top: 0;\n bottom: 0;\n left: 50%;\n width: 1px;\n}\n\n.demo-wrap {\n position: relative;\n display: inline-block;\n transform: scale(var(--zoom, 1));\n transition: transform 0.18s;\n}\n\n.demo-wrap[data-canvas-layout='stretch'] {\n display: block;\n width: 100%;\n max-width: 800px;\n}\n\n/* max-width: none rather than min(800px, var(--prism-vp-w)): an explicitly\n requested width beats a layout default, and min() would silently cap a\n 1024 viewport at 800 on any component declaring canvasLayout:\n 'stretch'.\n\n container-type must stay confined to this rule. It implies contain: inline-size, which on the width:auto\n inline-block .demo-wrap is at rest would decouple its width from its\n contents, collapsing the box and shifting every baseline in\n test-workspace/vrt/baseline without a component having changed. Here\n the width is explicit, so containment costs nothing and is what makes\n a component's own @container rules respond. Media queries do not and\n cannot: they read the real browser viewport.\n\n grid + justify-items: center, and not text-align: center, which is the\n obvious way to centre an inline-level child and the wrong one. The\n showcase component is created through ViewContainerRef, so its host\n element carries none of this component's _ngcontent attribute and no\n scoped rule here can reach it to undo an inherited value. text-align\n would therefore leak all the way into the specimen and silently\n re-align its own text the moment the viewport is switched on. That is a\n canvas that lies about what it is showing. Centring at the container\n instead touches nothing inside.\n\n Shrinking is not a side effect of that choice, it is the resting\n behaviour preserved: at rest .demo-wrap is an inline-block that\n already shrink-wraps its child, so a block-level specimen sizes to its\n content here the same as with the constraint off. The implicit\n auto column still fills the declared width, so a component that asks\n for width: 100% (the canvasLayout: 'stretch' case) keeps getting the\n whole viewport. */\n.demo-wrap[data-viewport] {\n display: grid;\n\n /* flex: none is required. The stage is a flex container\n and this is its only item, so the default flex-shrink: 1 lets the\n box render narrower than the width just asked for whenever the\n canvas is the smaller of the two, and container-type below drops\n the automatic minimum size to zero, so nothing stops the shrink.\n The result is the one failure this whole feature cannot afford:\n the dimension line states 1024 while every @container rule in the\n specimen answers whatever the canvas happened to allow. The stage\n is overflow: auto, so refusing to shrink scrolls instead. */\n flex: none;\n\n /* safe center, not bare center. Centring is right while the specimen\n fits and wrong the moment it does not: bare centring spills an\n over-wide specimen equally past both edges, where a real viewport of\n that width clips at zero and scrolls in one direction. The safe\n keyword falls back to start only when the item overflows, which\n is the browser making a case distinction CSS cannot otherwise\n express. */\n justify-items: safe center;\n width: var(--prism-vp-w);\n max-width: none;\n container-type: inline-size;\n}\n\n/* Both grips derive their position arithmetically, because .demo-wrap is\n centred by the stage's own flexbox and then scaled in place by\n transform: scale(var(--zoom)): the transform preserves that centre, so\n each edge sits half the *painted* width (--prism-vp-w times --zoom) away\n from the middle. No measurement, no ResizeObserver, and nothing to\n fall out of step when either the width or the zoom changes.\n\n The grip's own [scale] input (in the template) undoes the same factor\n in the other direction: a pointer that has moved dx across the painted\n box must change --prism-vp-w by dx / zoom for the grip to stay under the\n cursor, so the directive multiplier is 2 / zoom on the right grip and\n -2 / zoom on the left, not the flat \u00B12 a permanent zoom of 1 would\n need. */\n.vp-grip {\n position: absolute;\n top: var(--prism-canvas-overlay-top, 12px);\n bottom: 0;\n left: calc(50% - var(--prism-vp-w) * var(--zoom, 1) / 2 - 4.5px);\n z-index: 4;\n display: grid;\n width: 9px;\n\n /* The element is the guide line's full-height track and must not be\n clickable. It runs from the overlay band to the\n bottom of the stage at z-index 4, straight over prism-canvas-bg-pill\n at z-index 2, so leaving it hit-testable made part of the pill's\n Reset button unreachable whenever a viewport was on. Only the bar\n below takes pointer events back. */\n pointer-events: none;\n background: transparent;\n}\n\n.vp-grip--end {\n right: calc(50% - var(--prism-vp-w) * var(--zoom, 1) / 2 - 4.5px);\n left: auto;\n}\n\n/* The part you grab, and the only part of the grip that takes pointer\n events back. It shares the guide line's grid cell (hence the matching\n grid-area) and is raised above it so the 1px rule does not paint a\n seam down the middle of the 3px bar.\n\n The padding is the hit box and the background is the bar: content-box\n sizing plus background-clip: content-box paints 3x34 while leaving\n 9x44 clickable, so the target is comfortable without the mark growing\n to match. It is still narrow for WCAG 2.5.8, which the Width chooser\n in the tools menu answers: the same widths are reachable there, and\n both grips take Home/End and the arrow keys. */\n.vp-grip__bar {\n z-index: 1;\n box-sizing: content-box;\n grid-area: 1 / 1;\n place-self: center center;\n width: 3px;\n height: 34px;\n padding: 5px 3px;\n pointer-events: auto;\n background: color-mix(in srgb, var(--prism-measure) 80%, transparent);\n background-clip: content-box;\n border-radius: 2px;\n transition: background var(--dur-fast);\n}\n\n/* The edge itself, carried the whole height of the stage. Without it a\n grip is a floating nub that says where you may pull but not what it is\n pulling: the line is what makes the constrained region legible as a\n region rather than as two loose handles. Kept faint because it crosses\n the specimen, so it has to stay readable as chrome. */\n.vp-grip::after {\n grid-area: 1 / 1;\n place-self: stretch center;\n width: 1px;\n content: '';\n background: color-mix(in srgb, var(--prism-measure) 75%, transparent);\n transition: background var(--dur-fast);\n}\n\n.vp-grip:hover::after,\n.vp-grip.active::after,\n.vp-grip:focus-visible::after {\n background: color-mix(in srgb, var(--prism-measure) 55%, transparent);\n}\n\n.vp-grip:hover .vp-grip__bar,\n.vp-grip.active .vp-grip__bar,\n.vp-grip:focus-visible .vp-grip__bar {\n background: var(--prism-measure);\n background-clip: content-box;\n}\n\n/* The ring goes on the bar, not on the host: the host is the full-height\n track, and outlining that would draw a rule the length of the stage\n for a control 34px tall. */\n.vp-grip:focus-visible {\n outline: none;\n}\n\n.vp-grip:focus-visible .vp-grip__bar {\n outline: 2px solid var(--prism-primary);\n outline-offset: 1px;\n}\n\n/* The third resident of the overlay band: pill left, dimension centre,\n rail right. It reads the same --prism-canvas-overlay-top the other two\n do, so switching rulers on moves all three together.\n\n Spans the painted width rather than sitting in the middle of it as a\n badge, and carries the same --prism-vp-w * --zoom the grips do so the\n three stay locked together. A badge states a number; a dimension line\n states which distance the number measures, and that is the whole\n claim this overlay makes. */\n.vp-dim {\n position: absolute;\n top: var(--prism-canvas-overlay-top, 12px);\n left: 50%;\n z-index: 4;\n display: flex;\n gap: var(--sp-3);\n align-items: center;\n width: calc(var(--prism-vp-w) * var(--zoom, 1));\n pointer-events: none;\n transform: translateX(-50%);\n}\n\n/* Two halves with the value in the gap, rather than one rule behind it:\n a line running under the digits would need a background plate to stay\n readable, and the plate is the badge this replaced. */\n.vp-dim__rule {\n position: relative;\n flex: 1;\n height: 1px;\n background: color-mix(in srgb, var(--prism-measure) 70%, transparent);\n}\n\n/* The end ticks. They are what make the rule read as a measurement of\n the span between them instead of as a divider laid across the canvas,\n and they mark the two edges the grips can be dragged to. */\n.vp-dim__rule::before {\n position: absolute;\n top: -3px;\n width: 1px;\n height: 7px;\n content: '';\n background: color-mix(in srgb, var(--prism-measure) 90%, transparent);\n}\n\n.vp-dim__rule:first-child::before {\n left: 0;\n}\n\n.vp-dim__rule:last-child::before {\n right: 0;\n}\n\n.vp-dim__v {\n flex: none;\n font-family: var(--font-mono);\n font-size: 9px;\n color: var(--prism-measure);\n white-space: nowrap;\n}\n", "\n [data-bg=\"dots\"] {\n background-image: radial-gradient(circle, var(--prism-dot) 1px, transparent 1px);\n background-size: 20px 20px;\n }\n\n [data-bg=\"plain\"] {\n background-image: none;\n }\n\n /* Flat, not dotted. \"light\" and \"dark\" name the surface a component was\n designed against, and their colour is absolute rather than a theme token,\n which makes them the values to declare for a screenshot baseline. Use\n \"dots\" for the grid. */\n /* These two also re-point --prism-measure. Other overlays use theme colours\n on theme surfaces, but these grounds ignore the theme: \"light\" stays\n near-white in the dark theme and \"dark\" stays near-black in the light one.\n The dark theme's magenta reaches only 2.85:1 on the light ground, under the\n 4.5:1 its 9px readout needs, so the measurement colour has to follow the\n ground, not the theme.\n\n --prism-measure-plate follows it for the same reason. It is the surface\n the measuring tool's value label paints itself on, so the label reads as a\n gap in the measurement line rather than a badge on top of it. At its\n --prism-stage fallback it would be the theme's stage under a re-pointed\n foreground: the light theme's magenta on the dark theme's stage reads\n 3.71:1, the dark theme's on white 3.08:1. Pinned to the ground the same way,\n the pairs reach 4.54:1 and 6.57:1. A color-mix against the ground would\n work too, but this file already states both grounds literally, and one\n mechanism per decision is enough.\n\n Literal values because this file is theme-independent, like the two\n grounds below. Keep them in step with --prism-measure in\n prism-default-theme.ts; semantic-colours.spec.ts fails if they drift. */\n [data-bg=\"light\"] {\n background-color: var(--prism-void-light, #f7f5fc);\n background-image: none;\n --prism-measure: #ca00c1;\n --prism-measure-plate: var(--prism-void-light, #f7f5fc);\n }\n [data-bg=\"dark\"] {\n background-color: var(--prism-void-dark, #07050f);\n background-image: none;\n --prism-measure: #f632ff;\n --prism-measure-plate: var(--prism-void-dark, #07050f);\n }\n\n /* \"transparent\" shares the checkerboard. In the app the checkerboard is\n already the UI's sign for \"no surface\", and a see-through stage would only\n show the shell behind it. Only CAPTURE_STYLES tells the two apart. */\n [data-bg=\"checker\"],\n [data-bg=\"transparent\"] {\n background-image:\n linear-gradient(45deg, var(--prism-border) 25%, transparent 25%),\n linear-gradient(-45deg, var(--prism-border) 25%, transparent 25%),\n linear-gradient(45deg, transparent 75%, var(--prism-border) 75%),\n linear-gradient(-45deg, transparent 75%, var(--prism-border) 75%);\n background-size: 16px 16px;\n background-position: 0 0, 0 8px, 8px -8px, -8px 0;\n }\n"] }]
|
|
293
320
|
}], () => [], { outlet: [{ type: i0.ViewChild, args: ['outlet', { ...{
|
|
294
|
-
read: ViewContainerRef
|
|
321
|
+
read: ViewContainerRef
|
|
295
322
|
}, isSignal: true }] }] }); })();
|
|
296
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismRendererComponent, { className: "PrismRendererComponent", filePath: "app/renderer/prism-renderer.component.ts", lineNumber:
|
|
323
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismRendererComponent, { className: "PrismRendererComponent", filePath: "app/renderer/prism-renderer.component.ts", lineNumber: 51 }); })();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectable-content.d.ts","sourceRoot":"","sources":["../../../src/app/renderer/projectable-content.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,wBAAgB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"projectable-content.d.ts","sourceRoot":"","sources":["../../../src/app/renderer/projectable-content.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE,EAAE,CAsCtF"}
|
|
@@ -14,20 +14,18 @@ export function parseContentToNodes(content) {
|
|
|
14
14
|
if (typeof content === 'string') {
|
|
15
15
|
return [htmlToNodes(content)];
|
|
16
16
|
}
|
|
17
|
-
const defaultNodes = content['default']
|
|
18
|
-
? htmlToNodes(content['default'])
|
|
19
|
-
: [];
|
|
17
|
+
const defaultNodes = content['default'] ? htmlToNodes(content['default']) : [];
|
|
20
18
|
const result = [defaultNodes];
|
|
21
19
|
for (const [selector, html] of Object.entries(content)) {
|
|
22
20
|
if (selector === 'default')
|
|
23
21
|
continue;
|
|
24
22
|
const wrapper = document.createElement('div');
|
|
25
|
-
// SAFETY: trusted developer-authored HTML
|
|
23
|
+
// SAFETY: trusted developer-authored HTML, see SECURITY.md.
|
|
26
24
|
wrapper.innerHTML = html;
|
|
27
25
|
const nodes = [];
|
|
28
26
|
for (const child of Array.from(wrapper.childNodes)) {
|
|
29
27
|
const el = document.createElement('div');
|
|
30
|
-
// SAFETY: trusted developer-authored HTML
|
|
28
|
+
// SAFETY: trusted developer-authored HTML (see SECURITY.md).
|
|
31
29
|
el.innerHTML = child.outerHTML ?? child.textContent ?? '';
|
|
32
30
|
const projected = el.firstChild;
|
|
33
31
|
if (projected && projected instanceof Element) {
|
|
@@ -45,7 +43,7 @@ export function parseContentToNodes(content) {
|
|
|
45
43
|
}
|
|
46
44
|
return result;
|
|
47
45
|
}
|
|
48
|
-
// SAFETY: see `parseContentToNodes` above and SECURITY.md
|
|
46
|
+
// SAFETY: see `parseContentToNodes` above and SECURITY.md. `html` is trusted
|
|
49
47
|
// developer-authored variant content from the `@Showcase` decorator.
|
|
50
48
|
function htmlToNodes(html) {
|
|
51
49
|
const wrapper = document.createElement('div');
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { InputMeta } from '../../plugin/plugin.types.js';
|
|
2
1
|
import type { DirectiveHost } from '../../decorator/showcase.types.js';
|
|
2
|
+
import type { InputMeta } from '../../plugin/plugin.types.js';
|
|
3
3
|
export interface SnippetDirectiveOptions {
|
|
4
4
|
host?: string | DirectiveHost;
|
|
5
5
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snippet-generator.d.ts","sourceRoot":"","sources":["../../../src/app/renderer/snippet-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"snippet-generator.d.ts","sourceRoot":"","sources":["../../../src/app/renderer/snippet-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAE9D,MAAM,WAAW,uBAAuB;IACpC,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;CACjC;AAoBD,wBAAgB,eAAe,CAC3B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,EAAE,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,EAClC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,gBAAgB,CAAC,EAAE,uBAAuB,GAC3C,MAAM,CA4DR"}
|
|
@@ -29,15 +29,11 @@ export function generateSnippet(selector, inputs, values, explicitKeys, content,
|
|
|
29
29
|
const value = values[input.name];
|
|
30
30
|
if (value === undefined)
|
|
31
31
|
continue;
|
|
32
|
-
if (input.defaultValue !== undefined &&
|
|
33
|
-
value === input.defaultValue &&
|
|
34
|
-
!explicitKeys?.has(input.name))
|
|
32
|
+
if (input.defaultValue !== undefined && value === input.defaultValue && !explicitKeys?.has(input.name))
|
|
35
33
|
continue;
|
|
36
34
|
// Only a guess, and only sound when no default is known: a boolean input
|
|
37
35
|
// that defaults to `true` has to show its explicit `false`.
|
|
38
|
-
if (input.defaultValue === undefined &&
|
|
39
|
-
typeof value === 'boolean' &&
|
|
40
|
-
!value)
|
|
36
|
+
if (input.defaultValue === undefined && typeof value === 'boolean' && !value)
|
|
41
37
|
continue;
|
|
42
38
|
pushAttribute(attributes, input.name, value);
|
|
43
39
|
}
|
|
@@ -80,9 +76,7 @@ function directiveSelectorToAttr(selector) {
|
|
|
80
76
|
return match ? match[1] : selector;
|
|
81
77
|
}
|
|
82
78
|
function parseHostStringSimple(host) {
|
|
83
|
-
const match = host
|
|
84
|
-
.trim()
|
|
85
|
-
.match(/^<\s*([a-zA-Z][a-zA-Z0-9-]*)((?:\s+[^>]*?)?)\s*\/?\s*>$/);
|
|
79
|
+
const match = host.trim().match(/^<\s*([a-zA-Z][a-zA-Z0-9-]*)((?:\s+[^>]*?)?)\s*\/?\s*>$/);
|
|
86
80
|
if (!match)
|
|
87
81
|
return { tag: 'div', attrs: '' };
|
|
88
82
|
return { tag: match[1], attrs: match[2].trim() };
|
|
@@ -112,15 +106,11 @@ function generateDirectiveSnippet(selector, inputs, values, explicitKeys, conten
|
|
|
112
106
|
const value = values[input.name];
|
|
113
107
|
if (value === undefined)
|
|
114
108
|
continue;
|
|
115
|
-
if (input.defaultValue !== undefined &&
|
|
116
|
-
value === input.defaultValue &&
|
|
117
|
-
!explicitKeys?.has(input.name))
|
|
109
|
+
if (input.defaultValue !== undefined && value === input.defaultValue && !explicitKeys?.has(input.name))
|
|
118
110
|
continue;
|
|
119
111
|
// Only a guess, and only sound when no default is known: a boolean input
|
|
120
112
|
// that defaults to `true` has to show its explicit `false`.
|
|
121
|
-
if (input.defaultValue === undefined &&
|
|
122
|
-
typeof value === 'boolean' &&
|
|
123
|
-
!value)
|
|
113
|
+
if (input.defaultValue === undefined && typeof value === 'boolean' && !value)
|
|
124
114
|
continue;
|
|
125
115
|
pushAttribute(attributes, input.name, value);
|
|
126
116
|
}
|
|
@@ -133,10 +123,7 @@ function generateDirectiveSnippet(selector, inputs, values, explicitKeys, conten
|
|
|
133
123
|
continue;
|
|
134
124
|
pushAttribute(attributes, name, value);
|
|
135
125
|
}
|
|
136
|
-
const projectedContent = content ??
|
|
137
|
-
(typeof values['__prismContent__'] === 'string'
|
|
138
|
-
? values['__prismContent__']
|
|
139
|
-
: undefined);
|
|
126
|
+
const projectedContent = content ?? (typeof values['__prismContent__'] === 'string' ? values['__prismContent__'] : undefined);
|
|
140
127
|
const allAttrs = [...hostAttrs, directiveAttr, ...attributes].join(' ');
|
|
141
128
|
const contentHtml = resolveContentHtml(projectedContent);
|
|
142
129
|
if (!contentHtml) {
|
|
@@ -145,9 +132,7 @@ function generateDirectiveSnippet(selector, inputs, values, explicitKeys, conten
|
|
|
145
132
|
const singleLine = `<${tag} ${allAttrs} />`;
|
|
146
133
|
if (singleLine.length <= 80)
|
|
147
134
|
return singleLine;
|
|
148
|
-
const indented = [...hostAttrs, directiveAttr, ...attributes]
|
|
149
|
-
.map((a) => ` ${a}`)
|
|
150
|
-
.join('\n');
|
|
135
|
+
const indented = [...hostAttrs, directiveAttr, ...attributes].map((a) => ` ${a}`).join('\n');
|
|
151
136
|
return `<${tag}\n${indented} />`;
|
|
152
137
|
}
|
|
153
138
|
const openTag = `<${tag} ${allAttrs}>`;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { RuntimeComponent } from '../../plugin/plugin.types.js';
|
|
2
1
|
import type { StyleguidePage } from '../../plugin/page.types.js';
|
|
2
|
+
import type { RuntimeComponent } from '../../plugin/plugin.types.js';
|
|
3
3
|
export type NavigationItem = {
|
|
4
4
|
kind: 'component';
|
|
5
5
|
data: RuntimeComponent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation-item.types.d.ts","sourceRoot":"","sources":["../../../src/app/services/navigation-item.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"navigation-item.types.d.ts","sourceRoot":"","sources":["../../../src/app/services/navigation-item.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAErE,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC"}
|
|
@@ -6,12 +6,45 @@ export declare class PrismCanvasService {
|
|
|
6
6
|
readonly zoom: import("@angular/core").WritableSignal<number>;
|
|
7
7
|
readonly guides: import("@angular/core").WritableSignal<boolean>;
|
|
8
8
|
readonly rulers: import("@angular/core").WritableSignal<boolean>;
|
|
9
|
+
/**
|
|
10
|
+
* Whether the measuring tool is active.
|
|
11
|
+
*
|
|
12
|
+
* Lives here rather than in `PrismMeasureService` because it is the same
|
|
13
|
+
* kind of state as `guides` and `rulers`: a preference about the working
|
|
14
|
+
* environment, not a statement about this variant. That also means the
|
|
15
|
+
* toggle inherits the constructor's capture-mode behaviour below for
|
|
16
|
+
* free, without having to repeat it.
|
|
17
|
+
*/
|
|
18
|
+
readonly measure: import("@angular/core").WritableSignal<boolean>;
|
|
19
|
+
/**
|
|
20
|
+
* The width `.demo-wrap` is constrained to, or `null` for "as wide as it
|
|
21
|
+
* wants".
|
|
22
|
+
*
|
|
23
|
+
* Nullable rather than a `0`/`-1` sentinel because "off" is a
|
|
24
|
+
* different state and not a width: the renderer keys a whole set of CSS off
|
|
25
|
+
* `[data-viewport]`, and a falsy number would make `viewportWidth() ? ... `
|
|
26
|
+
* silently treat a legal narrow width as "off" the moment the floor ever
|
|
27
|
+
* moved to 0.
|
|
28
|
+
*/
|
|
29
|
+
readonly viewportWidth: import("@angular/core").WritableSignal<number | null>;
|
|
9
30
|
private readonly capture;
|
|
31
|
+
/**
|
|
32
|
+
* What `toggleViewport()` restores.
|
|
33
|
+
*
|
|
34
|
+
* Kept in a field rather than persisted: it exists so that flicking the rail
|
|
35
|
+
* button off and on again does not throw away a width you just dragged to,
|
|
36
|
+
* which is a within-session concern. The width that *is* worth carrying
|
|
37
|
+
* across sessions is the live one, and that is already in `viewportWidth`.
|
|
38
|
+
*/
|
|
39
|
+
private lastViewportWidth;
|
|
10
40
|
constructor();
|
|
11
41
|
setBg(bg: CanvasBg): void;
|
|
12
42
|
setZoom(z: number): void;
|
|
13
43
|
toggleGuides(): void;
|
|
14
44
|
toggleRulers(): void;
|
|
45
|
+
toggleMeasure(): void;
|
|
46
|
+
setViewportWidth(w: number | null): void;
|
|
47
|
+
toggleViewport(): void;
|
|
15
48
|
private loadFromStorage;
|
|
16
49
|
private save;
|
|
17
50
|
static ɵfac: i0.ɵɵFactoryDeclaration<PrismCanvasService, never>;
|