pptx-angular-viewer 1.1.34 → 1.1.35
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.
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { NgStyle, NgClass, NgTemplateOutlet } from '@angular/common';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
3
|
import { InjectionToken, input, output, computed, ChangeDetectionStrategy, Component, signal, Injectable, HostListener, effect, inject, DestroyRef, ElementRef, viewChild, afterNextRender, Injector } from '@angular/core';
|
|
4
|
-
import { guideEmuToPx, getShapeClipPath, getAdjustmentAwareShapeClipPath, getShapeClipPathFromPreset, getCloudPathForRendering, hasShapeProperties, applyDrawingColorTransforms as applyDrawingColorTransforms$1, hslToRgb as hslToRgb$1, PRESET_COLOR_MAP, isImageLikeElement, hasTextProperties, MIN_ELEMENT_SIZE as MIN_ELEMENT_SIZE$2, THEME_COLOR_SCHEME_KEYS, getLinkedTextBoxSegments, deobfuscateFont, detectFontFormat, getSubstituteFontFamily, checkMissingAltText, checkMissingSlideTitle, checkLowContrast, checkComplexTables, checkBlankSlide, checkDuplicateTitles, createChartElement, formatCommentTimestamp, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, chartDataAddSeries, chartDataRemoveSeries, chartDataAddCategory, chartDataRemoveCategory, chartDataUpdatePoint, chartDataChangeType, PptxHandler, EncryptedFileError, parseSignatureXml, isInkElement, isZoomElement, THEME_PRESETS, applyThemeToData, getAnimationPresetInfo } from 'pptx-viewer-core';
|
|
4
|
+
import { guideEmuToPx, getShapeClipPath, getAdjustmentAwareShapeClipPath, getShapeClipPathFromPreset, getCloudPathForRendering, hasShapeProperties, applyDrawingColorTransforms as applyDrawingColorTransforms$1, hslToRgb as hslToRgb$1, PRESET_COLOR_MAP, isImageLikeElement, hasTextProperties, MIN_ELEMENT_SIZE as MIN_ELEMENT_SIZE$2, THEME_COLOR_SCHEME_KEYS, getLinkedTextBoxSegments, deobfuscateFont, detectFontFormat, getSubstituteFontFamily, checkMissingAltText, checkMissingSlideTitle, checkLowContrast, checkComplexTables, checkBlankSlide, checkDuplicateTitles, createChartElement, formatCommentTimestamp, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, chartDataAddSeries, chartDataRemoveSeries, chartDataAddCategory, chartDataRemoveCategory, chartDataUpdatePoint, chartDataChangeType, updateSmartArtNodeText, addSmartArtNodeAsChild, removeSmartArtNode, promoteSmartArtNode, demoteSmartArtNode, reorderSmartArtNode, switchSmartArtLayout, SWITCHABLE_LAYOUT_TYPES, PptxHandler, EncryptedFileError, parseSignatureXml, isInkElement, isZoomElement, THEME_PRESETS, applyThemeToData, getAnimationPresetInfo } from 'pptx-viewer-core';
|
|
5
5
|
import { jsPDF } from 'jspdf';
|
|
6
6
|
import html2canvasPro from 'html2canvas-pro';
|
|
7
7
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
@@ -24354,6 +24354,57 @@ const PRESETS = [
|
|
|
24354
24354
|
category: 'process',
|
|
24355
24355
|
defaultItems: ['Phase 1', 'Phase 2', 'Phase 3'],
|
|
24356
24356
|
},
|
|
24357
|
+
{
|
|
24358
|
+
layout: 'basicTimeline',
|
|
24359
|
+
label: 'Basic Timeline',
|
|
24360
|
+
category: 'process',
|
|
24361
|
+
defaultItems: ['2021', '2022', '2023'],
|
|
24362
|
+
},
|
|
24363
|
+
{
|
|
24364
|
+
layout: 'bendingProcess',
|
|
24365
|
+
label: 'Bending Process',
|
|
24366
|
+
category: 'process',
|
|
24367
|
+
defaultItems: ['Step 1', 'Step 2', 'Step 3', 'Step 4'],
|
|
24368
|
+
},
|
|
24369
|
+
// Relationship: target / matrix / pyramid / funnel / gear families.
|
|
24370
|
+
// These share the dialog's "relationship" sidebar tab (PowerPoint groups
|
|
24371
|
+
// matrix/pyramid under separate tabs, which this gallery folds into one).
|
|
24372
|
+
{
|
|
24373
|
+
layout: 'basicTarget',
|
|
24374
|
+
label: 'Basic Target',
|
|
24375
|
+
category: 'relationship',
|
|
24376
|
+
defaultItems: ['Outer', 'Middle', 'Inner'],
|
|
24377
|
+
},
|
|
24378
|
+
{
|
|
24379
|
+
layout: 'interlockingGears',
|
|
24380
|
+
label: 'Interlocking Gears',
|
|
24381
|
+
category: 'relationship',
|
|
24382
|
+
defaultItems: ['Gear 1', 'Gear 2', 'Gear 3'],
|
|
24383
|
+
},
|
|
24384
|
+
{
|
|
24385
|
+
layout: 'basicMatrix',
|
|
24386
|
+
label: 'Basic Matrix',
|
|
24387
|
+
category: 'relationship',
|
|
24388
|
+
defaultItems: ['Quadrant 1', 'Quadrant 2', 'Quadrant 3', 'Quadrant 4'],
|
|
24389
|
+
},
|
|
24390
|
+
{
|
|
24391
|
+
layout: 'basicPyramid',
|
|
24392
|
+
label: 'Basic Pyramid',
|
|
24393
|
+
category: 'relationship',
|
|
24394
|
+
defaultItems: ['Top', 'Middle', 'Base'],
|
|
24395
|
+
},
|
|
24396
|
+
{
|
|
24397
|
+
layout: 'invertedPyramid',
|
|
24398
|
+
label: 'Inverted Pyramid',
|
|
24399
|
+
category: 'relationship',
|
|
24400
|
+
defaultItems: ['Wide', 'Narrower', 'Tip'],
|
|
24401
|
+
},
|
|
24402
|
+
{
|
|
24403
|
+
layout: 'basicFunnel',
|
|
24404
|
+
label: 'Basic Funnel',
|
|
24405
|
+
category: 'relationship',
|
|
24406
|
+
defaultItems: ['Input 1', 'Input 2', 'Input 3', 'Result'],
|
|
24407
|
+
},
|
|
24357
24408
|
];
|
|
24358
24409
|
/** Sidebar tabs, in display order. `label` is a (best-effort) i18n key. */
|
|
24359
24410
|
const CATEGORIES = [
|
|
@@ -35190,6 +35241,555 @@ function stringFromEvent$2(event) {
|
|
|
35190
35241
|
* preserves the historical Angular import surface.
|
|
35191
35242
|
*/
|
|
35192
35243
|
|
|
35244
|
+
/**
|
|
35245
|
+
* smart-art-properties-helpers.ts: pure logic for the Angular SmartArt inspector.
|
|
35246
|
+
*
|
|
35247
|
+
* The presentational `SmartArtPropertiesComponent` is intentionally thin: every
|
|
35248
|
+
* mutation it performs is delegated to one of the pure functions below, which in
|
|
35249
|
+
* turn wrap the framework-agnostic SmartArt editing operations re-exported from
|
|
35250
|
+
* `editor-insert.ts` (sourced from `pptx-viewer-core`). Keeping this logic out of
|
|
35251
|
+
* the component lets it be unit-tested in plain vitest (the Angular package's
|
|
35252
|
+
* vitest setup has no Angular compiler, so TestBed component tests are not
|
|
35253
|
+
* available - see PORTING.md).
|
|
35254
|
+
*
|
|
35255
|
+
* Mirrors the React inspector:
|
|
35256
|
+
* packages/react/src/viewer/components/inspector/SmartArtPropertiesPanel.tsx
|
|
35257
|
+
* packages/react/src/viewer/components/inspector/SmartArtLayoutSwitcher.tsx
|
|
35258
|
+
*
|
|
35259
|
+
* @module angular-viewer/smart-art-properties-helpers
|
|
35260
|
+
*/
|
|
35261
|
+
// ── Option constants (mirror the React panel) ───────────────────────────────
|
|
35262
|
+
/** Selectable colour schemes, in display order. */
|
|
35263
|
+
const SMART_ART_COLOR_SCHEMES = [
|
|
35264
|
+
'colorful1',
|
|
35265
|
+
'colorful2',
|
|
35266
|
+
'colorful3',
|
|
35267
|
+
'monochromatic1',
|
|
35268
|
+
'monochromatic2',
|
|
35269
|
+
];
|
|
35270
|
+
/** Selectable style intensities, in display order. */
|
|
35271
|
+
const SMART_ART_STYLE_OPTIONS = [
|
|
35272
|
+
'flat',
|
|
35273
|
+
'moderate',
|
|
35274
|
+
'intense',
|
|
35275
|
+
];
|
|
35276
|
+
/** Default colour scheme used when the data has none set. */
|
|
35277
|
+
const DEFAULT_COLOR_SCHEME = 'colorful1';
|
|
35278
|
+
/** Default style used when the data has none set. */
|
|
35279
|
+
const DEFAULT_STYLE = 'flat';
|
|
35280
|
+
/** Default resolved layout used when the data has none set. */
|
|
35281
|
+
const DEFAULT_LAYOUT = 'list';
|
|
35282
|
+
/** Default label for a newly added sub-item (matches the React panel). */
|
|
35283
|
+
const SUB_ITEM_LABEL = 'Sub-item';
|
|
35284
|
+
// ── Read helpers ─────────────────────────────────────────────────────────────
|
|
35285
|
+
/** The diagram's nodes, or an empty array when none are present. */
|
|
35286
|
+
function smartArtNodes(data) {
|
|
35287
|
+
return data.nodes ?? [];
|
|
35288
|
+
}
|
|
35289
|
+
/** Whether a node has a parent (is a child / sub-item). */
|
|
35290
|
+
function isChildNode(node) {
|
|
35291
|
+
return Boolean(node.parentId);
|
|
35292
|
+
}
|
|
35293
|
+
/** Current colour scheme, falling back to the default. */
|
|
35294
|
+
function currentColorScheme(data) {
|
|
35295
|
+
return data.colorScheme ?? DEFAULT_COLOR_SCHEME;
|
|
35296
|
+
}
|
|
35297
|
+
/** Current style intensity, falling back to the default. */
|
|
35298
|
+
function currentStyle(data) {
|
|
35299
|
+
return data.style ?? DEFAULT_STYLE;
|
|
35300
|
+
}
|
|
35301
|
+
/** Current resolved layout, falling back to the default. */
|
|
35302
|
+
function currentLayout(data) {
|
|
35303
|
+
return data.resolvedLayoutType ?? DEFAULT_LAYOUT;
|
|
35304
|
+
}
|
|
35305
|
+
// ── Mutation helpers (all return new immutable PptxSmartArtData) ──────────────
|
|
35306
|
+
/** Update a single node's text. */
|
|
35307
|
+
function setNodeText(data, nodeId, text) {
|
|
35308
|
+
return updateSmartArtNodeText(data, nodeId, text);
|
|
35309
|
+
}
|
|
35310
|
+
/** Append a new top-level item. */
|
|
35311
|
+
function addItem(data) {
|
|
35312
|
+
return addSmartArtNodeAsChild(data);
|
|
35313
|
+
}
|
|
35314
|
+
/** Add a sub-item beneath the given parent node. */
|
|
35315
|
+
function addSubItem(data, parentId) {
|
|
35316
|
+
return addSmartArtNodeAsChild(data, parentId, SUB_ITEM_LABEL);
|
|
35317
|
+
}
|
|
35318
|
+
/** Remove a node by id (no-op when it would empty the diagram). */
|
|
35319
|
+
function removeNode(data, nodeId) {
|
|
35320
|
+
if (smartArtNodes(data).length <= 1) {
|
|
35321
|
+
return data;
|
|
35322
|
+
}
|
|
35323
|
+
return removeSmartArtNode(data, nodeId);
|
|
35324
|
+
}
|
|
35325
|
+
/** Promote a node up one level in the hierarchy. */
|
|
35326
|
+
function promoteNode(data, nodeId) {
|
|
35327
|
+
return promoteSmartArtNode(data, nodeId);
|
|
35328
|
+
}
|
|
35329
|
+
/** Demote a node beneath its preceding sibling. */
|
|
35330
|
+
function demoteNode(data, nodeId) {
|
|
35331
|
+
return demoteSmartArtNode(data, nodeId);
|
|
35332
|
+
}
|
|
35333
|
+
/** Move a node up among its siblings. */
|
|
35334
|
+
function moveNodeUp(data, nodeId) {
|
|
35335
|
+
return reorderSmartArtNode(data, nodeId, -1);
|
|
35336
|
+
}
|
|
35337
|
+
/** Move a node down among its siblings. */
|
|
35338
|
+
function moveNodeDown(data, nodeId) {
|
|
35339
|
+
return reorderSmartArtNode(data, nodeId, 1);
|
|
35340
|
+
}
|
|
35341
|
+
/** Apply a new colour scheme; clears stale drawing shapes for reflow. */
|
|
35342
|
+
function setColorScheme(data, scheme) {
|
|
35343
|
+
return { ...data, colorScheme: scheme, drawingShapes: undefined };
|
|
35344
|
+
}
|
|
35345
|
+
/** Apply a new style intensity; clears stale drawing shapes for reflow. */
|
|
35346
|
+
function setStyle(data, style) {
|
|
35347
|
+
return { ...data, style, drawingShapes: undefined };
|
|
35348
|
+
}
|
|
35349
|
+
/**
|
|
35350
|
+
* Switch the diagram to a new layout, preserving node data and connections.
|
|
35351
|
+
* Returns the original data unchanged when the target equals the current layout.
|
|
35352
|
+
*/
|
|
35353
|
+
function setLayout(data, layout) {
|
|
35354
|
+
if (currentLayout(data) === layout) {
|
|
35355
|
+
return data;
|
|
35356
|
+
}
|
|
35357
|
+
return switchSmartArtLayout(data, layout);
|
|
35358
|
+
}
|
|
35359
|
+
|
|
35360
|
+
/**
|
|
35361
|
+
* smart-art-properties.component.ts: SmartArt editing inspector (Angular).
|
|
35362
|
+
*
|
|
35363
|
+
* Selector: `pptx-smart-art-properties`
|
|
35364
|
+
*
|
|
35365
|
+
* Presentational panel for editing a selected SmartArt element's data model:
|
|
35366
|
+
* per-node text editing, add item / add sub-item, remove, promote / demote,
|
|
35367
|
+
* reorder up / down, colour-scheme select, style toggle (flat / moderate /
|
|
35368
|
+
* intense), and a layout switcher. All mutations are delegated to the pure
|
|
35369
|
+
* helpers in `smart-art-properties-helpers.ts` (which wrap the core editing ops
|
|
35370
|
+
* re-exported via `editor-insert.ts`); no editing logic lives here. Every edit
|
|
35371
|
+
* is emitted as a complete new `PptxSmartArtData` via `smartArtDataChange`, so
|
|
35372
|
+
* the parent (`InspectorPanelComponent`) can commit it through
|
|
35373
|
+
* `EditorStateService.updateElement()` as a single undo/redo history entry.
|
|
35374
|
+
*
|
|
35375
|
+
* Ported from the React inspector:
|
|
35376
|
+
* packages/react/src/viewer/components/inspector/SmartArtPropertiesPanel.tsx
|
|
35377
|
+
* packages/react/src/viewer/components/inspector/SmartArtLayoutSwitcher.tsx
|
|
35378
|
+
*
|
|
35379
|
+
* Usage:
|
|
35380
|
+
* ```html
|
|
35381
|
+
* <pptx-smart-art-properties
|
|
35382
|
+
* [smartArtData]="data"
|
|
35383
|
+
* [canEdit]="canEdit"
|
|
35384
|
+
* (smartArtDataChange)="onSmartArtChange($event)"
|
|
35385
|
+
* />
|
|
35386
|
+
* ```
|
|
35387
|
+
*
|
|
35388
|
+
* @module angular-viewer/smart-art-properties
|
|
35389
|
+
*/
|
|
35390
|
+
class SmartArtPropertiesComponent {
|
|
35391
|
+
/** The SmartArt data model being edited. */
|
|
35392
|
+
smartArtData = input.required(/* @ts-ignore */
|
|
35393
|
+
...(ngDevMode ? [{ debugName: "smartArtData" }] : /* istanbul ignore next */ []));
|
|
35394
|
+
/** Whether editing is enabled (read-only when false). */
|
|
35395
|
+
canEdit = input(true, /* @ts-ignore */
|
|
35396
|
+
...(ngDevMode ? [{ debugName: "canEdit" }] : /* istanbul ignore next */ []));
|
|
35397
|
+
/** Emits a complete new data model after any edit. */
|
|
35398
|
+
smartArtDataChange = output();
|
|
35399
|
+
// ── Static option lists (template-bound) ─────────────────────────────────
|
|
35400
|
+
layoutTypes = SWITCHABLE_LAYOUT_TYPES;
|
|
35401
|
+
colorSchemes = SMART_ART_COLOR_SCHEMES;
|
|
35402
|
+
styleOptions = SMART_ART_STYLE_OPTIONS;
|
|
35403
|
+
// ── Derived state ─────────────────────────────────────────────────────────
|
|
35404
|
+
nodes = computed(() => smartArtNodes(this.smartArtData()), /* @ts-ignore */
|
|
35405
|
+
...(ngDevMode ? [{ debugName: "nodes" }] : /* istanbul ignore next */ []));
|
|
35406
|
+
activeLayout = computed(() => currentLayout(this.smartArtData()), /* @ts-ignore */
|
|
35407
|
+
...(ngDevMode ? [{ debugName: "activeLayout" }] : /* istanbul ignore next */ []));
|
|
35408
|
+
activeColorScheme = computed(() => currentColorScheme(this.smartArtData()), /* @ts-ignore */
|
|
35409
|
+
...(ngDevMode ? [{ debugName: "activeColorScheme" }] : /* istanbul ignore next */ []));
|
|
35410
|
+
activeStyle = computed(() => currentStyle(this.smartArtData()), /* @ts-ignore */
|
|
35411
|
+
...(ngDevMode ? [{ debugName: "activeStyle" }] : /* istanbul ignore next */ []));
|
|
35412
|
+
isChild = isChildNode;
|
|
35413
|
+
// ── Event handlers (each emits a fresh data model) ───────────────────────
|
|
35414
|
+
onLayout(layout) {
|
|
35415
|
+
this.commit(setLayout(this.smartArtData(), layout));
|
|
35416
|
+
}
|
|
35417
|
+
onColorScheme(event) {
|
|
35418
|
+
const value = selectValue(event);
|
|
35419
|
+
if (value === null) {
|
|
35420
|
+
return;
|
|
35421
|
+
}
|
|
35422
|
+
this.commit(setColorScheme(this.smartArtData(), value));
|
|
35423
|
+
}
|
|
35424
|
+
onStyle(style) {
|
|
35425
|
+
this.commit(setStyle(this.smartArtData(), style));
|
|
35426
|
+
}
|
|
35427
|
+
onAddItem() {
|
|
35428
|
+
this.commit(addItem(this.smartArtData()));
|
|
35429
|
+
}
|
|
35430
|
+
onAddSubItem(parentId) {
|
|
35431
|
+
this.commit(addSubItem(this.smartArtData(), parentId));
|
|
35432
|
+
}
|
|
35433
|
+
onRemove(nodeId) {
|
|
35434
|
+
this.commit(removeNode(this.smartArtData(), nodeId));
|
|
35435
|
+
}
|
|
35436
|
+
onPromote(nodeId) {
|
|
35437
|
+
this.commit(promoteNode(this.smartArtData(), nodeId));
|
|
35438
|
+
}
|
|
35439
|
+
onDemote(nodeId) {
|
|
35440
|
+
this.commit(demoteNode(this.smartArtData(), nodeId));
|
|
35441
|
+
}
|
|
35442
|
+
onMoveUp(nodeId) {
|
|
35443
|
+
this.commit(moveNodeUp(this.smartArtData(), nodeId));
|
|
35444
|
+
}
|
|
35445
|
+
onMoveDown(nodeId) {
|
|
35446
|
+
this.commit(moveNodeDown(this.smartArtData(), nodeId));
|
|
35447
|
+
}
|
|
35448
|
+
onNodeText(event, nodeId) {
|
|
35449
|
+
const value = inputValue(event);
|
|
35450
|
+
if (value === null) {
|
|
35451
|
+
return;
|
|
35452
|
+
}
|
|
35453
|
+
this.commit(setNodeText(this.smartArtData(), nodeId, value));
|
|
35454
|
+
}
|
|
35455
|
+
onNodeKeydown(event, nodeId) {
|
|
35456
|
+
if (event.key !== 'Tab') {
|
|
35457
|
+
return;
|
|
35458
|
+
}
|
|
35459
|
+
event.preventDefault();
|
|
35460
|
+
const next = event.shiftKey
|
|
35461
|
+
? promoteNode(this.smartArtData(), nodeId)
|
|
35462
|
+
: demoteNode(this.smartArtData(), nodeId);
|
|
35463
|
+
this.commit(next);
|
|
35464
|
+
}
|
|
35465
|
+
/** Emit a new data model only when it differs from the current one. */
|
|
35466
|
+
commit(next) {
|
|
35467
|
+
if (!this.canEdit() || next === this.smartArtData()) {
|
|
35468
|
+
return;
|
|
35469
|
+
}
|
|
35470
|
+
this.smartArtDataChange.emit(next);
|
|
35471
|
+
}
|
|
35472
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: SmartArtPropertiesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
35473
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: SmartArtPropertiesComponent, isStandalone: true, selector: "pptx-smart-art-properties", inputs: { smartArtData: { classPropertyName: "smartArtData", publicName: "smartArtData", isSignal: true, isRequired: true, transformFunction: null }, canEdit: { classPropertyName: "canEdit", publicName: "canEdit", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { smartArtDataChange: "smartArtDataChange" }, ngImport: i0, template: `
|
|
35474
|
+
<section class="pptx-sa-props" aria-label="SmartArt properties">
|
|
35475
|
+
<h3 class="pptx-sa-props__heading">SmartArt</h3>
|
|
35476
|
+
|
|
35477
|
+
<!-- ── Layout switcher ──────────────────────────────────────────── -->
|
|
35478
|
+
<div class="pptx-sa-props__field">
|
|
35479
|
+
<span class="pptx-sa-props__label">Layout</span>
|
|
35480
|
+
<div class="pptx-sa-props__layouts" role="group" aria-label="Switch layout">
|
|
35481
|
+
@for (layout of layoutTypes; track layout) {
|
|
35482
|
+
<button
|
|
35483
|
+
type="button"
|
|
35484
|
+
class="pptx-sa-props__layout"
|
|
35485
|
+
[class.is-active]="activeLayout() === layout"
|
|
35486
|
+
[disabled]="!canEdit()"
|
|
35487
|
+
[attr.aria-pressed]="activeLayout() === layout"
|
|
35488
|
+
(click)="onLayout(layout)"
|
|
35489
|
+
>
|
|
35490
|
+
{{ layout }}
|
|
35491
|
+
</button>
|
|
35492
|
+
}
|
|
35493
|
+
</div>
|
|
35494
|
+
</div>
|
|
35495
|
+
|
|
35496
|
+
<!-- ── Colour scheme ────────────────────────────────────────────── -->
|
|
35497
|
+
<label class="pptx-sa-props__field">
|
|
35498
|
+
<span class="pptx-sa-props__label">Color scheme</span>
|
|
35499
|
+
<select
|
|
35500
|
+
class="pptx-sa-props__select"
|
|
35501
|
+
[disabled]="!canEdit()"
|
|
35502
|
+
[value]="activeColorScheme()"
|
|
35503
|
+
(change)="onColorScheme($event)"
|
|
35504
|
+
>
|
|
35505
|
+
@for (scheme of colorSchemes; track scheme) {
|
|
35506
|
+
<option [value]="scheme">{{ scheme }}</option>
|
|
35507
|
+
}
|
|
35508
|
+
</select>
|
|
35509
|
+
</label>
|
|
35510
|
+
|
|
35511
|
+
<!-- ── Style intensity ──────────────────────────────────────────── -->
|
|
35512
|
+
<div class="pptx-sa-props__field">
|
|
35513
|
+
<span class="pptx-sa-props__label">Style</span>
|
|
35514
|
+
<div class="pptx-sa-props__styles" role="group" aria-label="Style intensity">
|
|
35515
|
+
@for (styleOpt of styleOptions; track styleOpt) {
|
|
35516
|
+
<button
|
|
35517
|
+
type="button"
|
|
35518
|
+
class="pptx-sa-props__style"
|
|
35519
|
+
[class.is-active]="activeStyle() === styleOpt"
|
|
35520
|
+
[disabled]="!canEdit()"
|
|
35521
|
+
[attr.aria-pressed]="activeStyle() === styleOpt"
|
|
35522
|
+
(click)="onStyle(styleOpt)"
|
|
35523
|
+
>
|
|
35524
|
+
{{ styleOpt }}
|
|
35525
|
+
</button>
|
|
35526
|
+
}
|
|
35527
|
+
</div>
|
|
35528
|
+
</div>
|
|
35529
|
+
|
|
35530
|
+
<!-- ── Text pane / node list ────────────────────────────────────── -->
|
|
35531
|
+
<div class="pptx-sa-props__pane-header">
|
|
35532
|
+
<span class="pptx-sa-props__label">Text pane ({{ nodes().length }})</span>
|
|
35533
|
+
<button
|
|
35534
|
+
type="button"
|
|
35535
|
+
class="pptx-sa-props__btn"
|
|
35536
|
+
[disabled]="!canEdit()"
|
|
35537
|
+
(click)="onAddItem()"
|
|
35538
|
+
>
|
|
35539
|
+
+ Item
|
|
35540
|
+
</button>
|
|
35541
|
+
</div>
|
|
35542
|
+
|
|
35543
|
+
<ul class="pptx-sa-props__nodes" role="list">
|
|
35544
|
+
@for (node of nodes(); track node.id; let i = $index) {
|
|
35545
|
+
<li
|
|
35546
|
+
class="pptx-sa-props__node"
|
|
35547
|
+
[class.pptx-sa-props__node--child]="isChild(node)"
|
|
35548
|
+
[attr.data-node-id]="node.id"
|
|
35549
|
+
>
|
|
35550
|
+
<span class="pptx-sa-props__bullet">{{ isChild(node) ? '•' : i + 1 }}</span>
|
|
35551
|
+
<input
|
|
35552
|
+
type="text"
|
|
35553
|
+
class="pptx-sa-props__node-input"
|
|
35554
|
+
[disabled]="!canEdit()"
|
|
35555
|
+
[value]="node.text"
|
|
35556
|
+
placeholder="Type here"
|
|
35557
|
+
(change)="onNodeText($event, node.id)"
|
|
35558
|
+
(keydown)="onNodeKeydown($event, node.id)"
|
|
35559
|
+
/>
|
|
35560
|
+
<div class="pptx-sa-props__node-actions">
|
|
35561
|
+
@if (!isChild(node)) {
|
|
35562
|
+
<button
|
|
35563
|
+
type="button"
|
|
35564
|
+
class="pptx-sa-props__icon"
|
|
35565
|
+
title="Add sub-item"
|
|
35566
|
+
[disabled]="!canEdit()"
|
|
35567
|
+
(click)="onAddSubItem(node.id)"
|
|
35568
|
+
>
|
|
35569
|
+
+Sub
|
|
35570
|
+
</button>
|
|
35571
|
+
}
|
|
35572
|
+
<button
|
|
35573
|
+
type="button"
|
|
35574
|
+
class="pptx-sa-props__icon"
|
|
35575
|
+
title="Promote"
|
|
35576
|
+
[disabled]="!canEdit() || isChild(node) === false"
|
|
35577
|
+
(click)="onPromote(node.id)"
|
|
35578
|
+
>
|
|
35579
|
+
←
|
|
35580
|
+
</button>
|
|
35581
|
+
<button
|
|
35582
|
+
type="button"
|
|
35583
|
+
class="pptx-sa-props__icon"
|
|
35584
|
+
title="Demote"
|
|
35585
|
+
[disabled]="!canEdit()"
|
|
35586
|
+
(click)="onDemote(node.id)"
|
|
35587
|
+
>
|
|
35588
|
+
→
|
|
35589
|
+
</button>
|
|
35590
|
+
<button
|
|
35591
|
+
type="button"
|
|
35592
|
+
class="pptx-sa-props__icon"
|
|
35593
|
+
title="Move up"
|
|
35594
|
+
[disabled]="!canEdit()"
|
|
35595
|
+
(click)="onMoveUp(node.id)"
|
|
35596
|
+
>
|
|
35597
|
+
↑
|
|
35598
|
+
</button>
|
|
35599
|
+
<button
|
|
35600
|
+
type="button"
|
|
35601
|
+
class="pptx-sa-props__icon"
|
|
35602
|
+
title="Move down"
|
|
35603
|
+
[disabled]="!canEdit()"
|
|
35604
|
+
(click)="onMoveDown(node.id)"
|
|
35605
|
+
>
|
|
35606
|
+
↓
|
|
35607
|
+
</button>
|
|
35608
|
+
<button
|
|
35609
|
+
type="button"
|
|
35610
|
+
class="pptx-sa-props__icon pptx-sa-props__icon--danger"
|
|
35611
|
+
title="Remove"
|
|
35612
|
+
[disabled]="!canEdit() || nodes().length <= 1"
|
|
35613
|
+
(click)="onRemove(node.id)"
|
|
35614
|
+
>
|
|
35615
|
+
×
|
|
35616
|
+
</button>
|
|
35617
|
+
</div>
|
|
35618
|
+
</li>
|
|
35619
|
+
}
|
|
35620
|
+
</ul>
|
|
35621
|
+
|
|
35622
|
+
<p class="pptx-sa-props__hint">Tab to demote, Shift+Tab to promote.</p>
|
|
35623
|
+
</section>
|
|
35624
|
+
`, isInline: true, styles: [".pptx-sa-props{display:flex;flex-direction:column;gap:.4rem;padding:.5rem 0}.pptx-sa-props__heading{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--pptx-inspector-muted, #888);margin:0}.pptx-sa-props__field{display:flex;flex-direction:column;gap:.2rem}.pptx-sa-props__label{font-size:10px;color:var(--pptx-inspector-muted, #888)}.pptx-sa-props__layouts,.pptx-sa-props__styles{display:flex;flex-wrap:wrap;gap:.25rem}.pptx-sa-props__layout,.pptx-sa-props__style,.pptx-sa-props__btn,.pptx-sa-props__icon{background:var(--pptx-inspector-input-bg, #2d2d2d);border:1px solid var(--pptx-inspector-border, #444);color:inherit;border-radius:3px;cursor:pointer;font-size:10px;padding:2px 6px;white-space:nowrap}.pptx-sa-props__layout,.pptx-sa-props__style{flex:1 0 auto;text-transform:capitalize}.pptx-sa-props__layout.is-active,.pptx-sa-props__style.is-active{background:var(--pptx-inspector-active, #0078d4);border-color:var(--pptx-inspector-active, #0078d4);color:#fff}.pptx-sa-props__select{background:var(--pptx-inspector-input-bg, #2d2d2d);border:1px solid var(--pptx-inspector-border, #444);color:inherit;border-radius:3px;padding:2px 4px;font-size:11px}.pptx-sa-props__pane-header{display:flex;align-items:center;justify-content:space-between;gap:.35rem;margin-top:.2rem}.pptx-sa-props__nodes{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.2rem;max-height:14rem;overflow-y:auto}.pptx-sa-props__node{display:flex;align-items:center;gap:.25rem;padding:2px;border:1px solid var(--pptx-inspector-border, #333);border-radius:3px}.pptx-sa-props__node--child{margin-left:1rem;border-color:var(--pptx-inspector-border, #2a2a2a)}.pptx-sa-props__bullet{font-size:9px;color:var(--pptx-inspector-muted, #888);min-width:12px;text-align:center;flex-shrink:0}.pptx-sa-props__node-input{flex:1;min-width:0;background:var(--pptx-inspector-input-bg, #2d2d2d);border:1px solid var(--pptx-inspector-border, #444);color:inherit;border-radius:3px;padding:2px 4px;font-size:11px}.pptx-sa-props__node-actions{display:flex;gap:1px;flex-shrink:0}.pptx-sa-props__icon{padding:1px 3px;font-size:10px;line-height:1.2}.pptx-sa-props__icon--danger{color:var(--pptx-inspector-danger, #f47c7c)}.pptx-sa-props__layout:disabled,.pptx-sa-props__style:disabled,.pptx-sa-props__btn:disabled,.pptx-sa-props__icon:disabled,.pptx-sa-props__select:disabled,.pptx-sa-props__node-input:disabled{opacity:.45;cursor:not-allowed}.pptx-sa-props__hint{font-size:9px;color:var(--pptx-inspector-muted, #888);margin:.1rem 0 0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
35625
|
+
}
|
|
35626
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: SmartArtPropertiesComponent, decorators: [{
|
|
35627
|
+
type: Component,
|
|
35628
|
+
args: [{ selector: 'pptx-smart-art-properties', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
35629
|
+
<section class="pptx-sa-props" aria-label="SmartArt properties">
|
|
35630
|
+
<h3 class="pptx-sa-props__heading">SmartArt</h3>
|
|
35631
|
+
|
|
35632
|
+
<!-- ── Layout switcher ──────────────────────────────────────────── -->
|
|
35633
|
+
<div class="pptx-sa-props__field">
|
|
35634
|
+
<span class="pptx-sa-props__label">Layout</span>
|
|
35635
|
+
<div class="pptx-sa-props__layouts" role="group" aria-label="Switch layout">
|
|
35636
|
+
@for (layout of layoutTypes; track layout) {
|
|
35637
|
+
<button
|
|
35638
|
+
type="button"
|
|
35639
|
+
class="pptx-sa-props__layout"
|
|
35640
|
+
[class.is-active]="activeLayout() === layout"
|
|
35641
|
+
[disabled]="!canEdit()"
|
|
35642
|
+
[attr.aria-pressed]="activeLayout() === layout"
|
|
35643
|
+
(click)="onLayout(layout)"
|
|
35644
|
+
>
|
|
35645
|
+
{{ layout }}
|
|
35646
|
+
</button>
|
|
35647
|
+
}
|
|
35648
|
+
</div>
|
|
35649
|
+
</div>
|
|
35650
|
+
|
|
35651
|
+
<!-- ── Colour scheme ────────────────────────────────────────────── -->
|
|
35652
|
+
<label class="pptx-sa-props__field">
|
|
35653
|
+
<span class="pptx-sa-props__label">Color scheme</span>
|
|
35654
|
+
<select
|
|
35655
|
+
class="pptx-sa-props__select"
|
|
35656
|
+
[disabled]="!canEdit()"
|
|
35657
|
+
[value]="activeColorScheme()"
|
|
35658
|
+
(change)="onColorScheme($event)"
|
|
35659
|
+
>
|
|
35660
|
+
@for (scheme of colorSchemes; track scheme) {
|
|
35661
|
+
<option [value]="scheme">{{ scheme }}</option>
|
|
35662
|
+
}
|
|
35663
|
+
</select>
|
|
35664
|
+
</label>
|
|
35665
|
+
|
|
35666
|
+
<!-- ── Style intensity ──────────────────────────────────────────── -->
|
|
35667
|
+
<div class="pptx-sa-props__field">
|
|
35668
|
+
<span class="pptx-sa-props__label">Style</span>
|
|
35669
|
+
<div class="pptx-sa-props__styles" role="group" aria-label="Style intensity">
|
|
35670
|
+
@for (styleOpt of styleOptions; track styleOpt) {
|
|
35671
|
+
<button
|
|
35672
|
+
type="button"
|
|
35673
|
+
class="pptx-sa-props__style"
|
|
35674
|
+
[class.is-active]="activeStyle() === styleOpt"
|
|
35675
|
+
[disabled]="!canEdit()"
|
|
35676
|
+
[attr.aria-pressed]="activeStyle() === styleOpt"
|
|
35677
|
+
(click)="onStyle(styleOpt)"
|
|
35678
|
+
>
|
|
35679
|
+
{{ styleOpt }}
|
|
35680
|
+
</button>
|
|
35681
|
+
}
|
|
35682
|
+
</div>
|
|
35683
|
+
</div>
|
|
35684
|
+
|
|
35685
|
+
<!-- ── Text pane / node list ────────────────────────────────────── -->
|
|
35686
|
+
<div class="pptx-sa-props__pane-header">
|
|
35687
|
+
<span class="pptx-sa-props__label">Text pane ({{ nodes().length }})</span>
|
|
35688
|
+
<button
|
|
35689
|
+
type="button"
|
|
35690
|
+
class="pptx-sa-props__btn"
|
|
35691
|
+
[disabled]="!canEdit()"
|
|
35692
|
+
(click)="onAddItem()"
|
|
35693
|
+
>
|
|
35694
|
+
+ Item
|
|
35695
|
+
</button>
|
|
35696
|
+
</div>
|
|
35697
|
+
|
|
35698
|
+
<ul class="pptx-sa-props__nodes" role="list">
|
|
35699
|
+
@for (node of nodes(); track node.id; let i = $index) {
|
|
35700
|
+
<li
|
|
35701
|
+
class="pptx-sa-props__node"
|
|
35702
|
+
[class.pptx-sa-props__node--child]="isChild(node)"
|
|
35703
|
+
[attr.data-node-id]="node.id"
|
|
35704
|
+
>
|
|
35705
|
+
<span class="pptx-sa-props__bullet">{{ isChild(node) ? '•' : i + 1 }}</span>
|
|
35706
|
+
<input
|
|
35707
|
+
type="text"
|
|
35708
|
+
class="pptx-sa-props__node-input"
|
|
35709
|
+
[disabled]="!canEdit()"
|
|
35710
|
+
[value]="node.text"
|
|
35711
|
+
placeholder="Type here"
|
|
35712
|
+
(change)="onNodeText($event, node.id)"
|
|
35713
|
+
(keydown)="onNodeKeydown($event, node.id)"
|
|
35714
|
+
/>
|
|
35715
|
+
<div class="pptx-sa-props__node-actions">
|
|
35716
|
+
@if (!isChild(node)) {
|
|
35717
|
+
<button
|
|
35718
|
+
type="button"
|
|
35719
|
+
class="pptx-sa-props__icon"
|
|
35720
|
+
title="Add sub-item"
|
|
35721
|
+
[disabled]="!canEdit()"
|
|
35722
|
+
(click)="onAddSubItem(node.id)"
|
|
35723
|
+
>
|
|
35724
|
+
+Sub
|
|
35725
|
+
</button>
|
|
35726
|
+
}
|
|
35727
|
+
<button
|
|
35728
|
+
type="button"
|
|
35729
|
+
class="pptx-sa-props__icon"
|
|
35730
|
+
title="Promote"
|
|
35731
|
+
[disabled]="!canEdit() || isChild(node) === false"
|
|
35732
|
+
(click)="onPromote(node.id)"
|
|
35733
|
+
>
|
|
35734
|
+
←
|
|
35735
|
+
</button>
|
|
35736
|
+
<button
|
|
35737
|
+
type="button"
|
|
35738
|
+
class="pptx-sa-props__icon"
|
|
35739
|
+
title="Demote"
|
|
35740
|
+
[disabled]="!canEdit()"
|
|
35741
|
+
(click)="onDemote(node.id)"
|
|
35742
|
+
>
|
|
35743
|
+
→
|
|
35744
|
+
</button>
|
|
35745
|
+
<button
|
|
35746
|
+
type="button"
|
|
35747
|
+
class="pptx-sa-props__icon"
|
|
35748
|
+
title="Move up"
|
|
35749
|
+
[disabled]="!canEdit()"
|
|
35750
|
+
(click)="onMoveUp(node.id)"
|
|
35751
|
+
>
|
|
35752
|
+
↑
|
|
35753
|
+
</button>
|
|
35754
|
+
<button
|
|
35755
|
+
type="button"
|
|
35756
|
+
class="pptx-sa-props__icon"
|
|
35757
|
+
title="Move down"
|
|
35758
|
+
[disabled]="!canEdit()"
|
|
35759
|
+
(click)="onMoveDown(node.id)"
|
|
35760
|
+
>
|
|
35761
|
+
↓
|
|
35762
|
+
</button>
|
|
35763
|
+
<button
|
|
35764
|
+
type="button"
|
|
35765
|
+
class="pptx-sa-props__icon pptx-sa-props__icon--danger"
|
|
35766
|
+
title="Remove"
|
|
35767
|
+
[disabled]="!canEdit() || nodes().length <= 1"
|
|
35768
|
+
(click)="onRemove(node.id)"
|
|
35769
|
+
>
|
|
35770
|
+
×
|
|
35771
|
+
</button>
|
|
35772
|
+
</div>
|
|
35773
|
+
</li>
|
|
35774
|
+
}
|
|
35775
|
+
</ul>
|
|
35776
|
+
|
|
35777
|
+
<p class="pptx-sa-props__hint">Tab to demote, Shift+Tab to promote.</p>
|
|
35778
|
+
</section>
|
|
35779
|
+
`, styles: [".pptx-sa-props{display:flex;flex-direction:column;gap:.4rem;padding:.5rem 0}.pptx-sa-props__heading{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--pptx-inspector-muted, #888);margin:0}.pptx-sa-props__field{display:flex;flex-direction:column;gap:.2rem}.pptx-sa-props__label{font-size:10px;color:var(--pptx-inspector-muted, #888)}.pptx-sa-props__layouts,.pptx-sa-props__styles{display:flex;flex-wrap:wrap;gap:.25rem}.pptx-sa-props__layout,.pptx-sa-props__style,.pptx-sa-props__btn,.pptx-sa-props__icon{background:var(--pptx-inspector-input-bg, #2d2d2d);border:1px solid var(--pptx-inspector-border, #444);color:inherit;border-radius:3px;cursor:pointer;font-size:10px;padding:2px 6px;white-space:nowrap}.pptx-sa-props__layout,.pptx-sa-props__style{flex:1 0 auto;text-transform:capitalize}.pptx-sa-props__layout.is-active,.pptx-sa-props__style.is-active{background:var(--pptx-inspector-active, #0078d4);border-color:var(--pptx-inspector-active, #0078d4);color:#fff}.pptx-sa-props__select{background:var(--pptx-inspector-input-bg, #2d2d2d);border:1px solid var(--pptx-inspector-border, #444);color:inherit;border-radius:3px;padding:2px 4px;font-size:11px}.pptx-sa-props__pane-header{display:flex;align-items:center;justify-content:space-between;gap:.35rem;margin-top:.2rem}.pptx-sa-props__nodes{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.2rem;max-height:14rem;overflow-y:auto}.pptx-sa-props__node{display:flex;align-items:center;gap:.25rem;padding:2px;border:1px solid var(--pptx-inspector-border, #333);border-radius:3px}.pptx-sa-props__node--child{margin-left:1rem;border-color:var(--pptx-inspector-border, #2a2a2a)}.pptx-sa-props__bullet{font-size:9px;color:var(--pptx-inspector-muted, #888);min-width:12px;text-align:center;flex-shrink:0}.pptx-sa-props__node-input{flex:1;min-width:0;background:var(--pptx-inspector-input-bg, #2d2d2d);border:1px solid var(--pptx-inspector-border, #444);color:inherit;border-radius:3px;padding:2px 4px;font-size:11px}.pptx-sa-props__node-actions{display:flex;gap:1px;flex-shrink:0}.pptx-sa-props__icon{padding:1px 3px;font-size:10px;line-height:1.2}.pptx-sa-props__icon--danger{color:var(--pptx-inspector-danger, #f47c7c)}.pptx-sa-props__layout:disabled,.pptx-sa-props__style:disabled,.pptx-sa-props__btn:disabled,.pptx-sa-props__icon:disabled,.pptx-sa-props__select:disabled,.pptx-sa-props__node-input:disabled{opacity:.45;cursor:not-allowed}.pptx-sa-props__hint{font-size:9px;color:var(--pptx-inspector-muted, #888);margin:.1rem 0 0}\n"] }]
|
|
35780
|
+
}], propDecorators: { smartArtData: [{ type: i0.Input, args: [{ isSignal: true, alias: "smartArtData", required: true }] }], canEdit: [{ type: i0.Input, args: [{ isSignal: true, alias: "canEdit", required: false }] }], smartArtDataChange: [{ type: i0.Output, args: ["smartArtDataChange"] }] } });
|
|
35781
|
+
// ── Module-private helpers ───────────────────────────────────────────────────
|
|
35782
|
+
/** Read the value of a `<select>` change event. */
|
|
35783
|
+
function selectValue(event) {
|
|
35784
|
+
const target = event.target;
|
|
35785
|
+
return target instanceof HTMLSelectElement ? target.value : null;
|
|
35786
|
+
}
|
|
35787
|
+
/** Read the value of an `<input>` change event. */
|
|
35788
|
+
function inputValue(event) {
|
|
35789
|
+
const target = event.target;
|
|
35790
|
+
return target instanceof HTMLInputElement ? target.value : null;
|
|
35791
|
+
}
|
|
35792
|
+
|
|
35193
35793
|
/**
|
|
35194
35794
|
* table-data-helpers.ts: Pure immutable helpers for table data editing.
|
|
35195
35795
|
*
|
|
@@ -36385,6 +36985,23 @@ class InspectorPanelComponent {
|
|
|
36385
36985
|
/** The selected element narrowed to a chart, or undefined. */
|
|
36386
36986
|
chartEl = computed(() => this.el().type === 'chart' ? this.el() : undefined, /* @ts-ignore */
|
|
36387
36987
|
...(ngDevMode ? [{ debugName: "chartEl" }] : /* istanbul ignore next */ []));
|
|
36988
|
+
/** The selected element narrowed to SmartArt, or undefined. */
|
|
36989
|
+
smartArtEl = computed(() => this.el().type === 'smartArt' ? this.el() : undefined, /* @ts-ignore */
|
|
36990
|
+
...(ngDevMode ? [{ debugName: "smartArtEl" }] : /* istanbul ignore next */ []));
|
|
36991
|
+
/** The selected SmartArt element's data model, or undefined. */
|
|
36992
|
+
smartArtData = computed(() => this.smartArtEl()?.smartArtData, /* @ts-ignore */
|
|
36993
|
+
...(ngDevMode ? [{ debugName: "smartArtData" }] : /* istanbul ignore next */ []));
|
|
36994
|
+
/**
|
|
36995
|
+
* Commit an updated SmartArt data model as one history entry. Patching only
|
|
36996
|
+
* `smartArtData` routes through the same `EditorStateService.updateElement`
|
|
36997
|
+
* path as every other inspector section, so undo/redo and persistence work
|
|
36998
|
+
* identically.
|
|
36999
|
+
*/
|
|
37000
|
+
onSmartArtDataChange(smartArtData) {
|
|
37001
|
+
this.editor.updateElement(this.slideIndex(), this.el().id, {
|
|
37002
|
+
smartArtData,
|
|
37003
|
+
});
|
|
37004
|
+
}
|
|
36388
37005
|
/** Commit a partial-element patch from an advanced sub-panel as one history entry. */
|
|
36389
37006
|
onPatch(patch) {
|
|
36390
37007
|
this.editor.updateElement(this.slideIndex(), this.el().id, patch);
|
|
@@ -36740,6 +37357,16 @@ class InspectorPanelComponent {
|
|
|
36740
37357
|
</details>
|
|
36741
37358
|
}
|
|
36742
37359
|
|
|
37360
|
+
<!-- ── SmartArt editing ───────────────────────────────────────────── -->
|
|
37361
|
+
@if (smartArtData(); as sa) {
|
|
37362
|
+
<section class="pptx-ng-inspector__section">
|
|
37363
|
+
<pptx-smart-art-properties
|
|
37364
|
+
[smartArtData]="sa"
|
|
37365
|
+
(smartArtDataChange)="onSmartArtDataChange($event)"
|
|
37366
|
+
/>
|
|
37367
|
+
</section>
|
|
37368
|
+
}
|
|
37369
|
+
|
|
36743
37370
|
<!-- ── Animation authoring ────────────────────────────────────────── -->
|
|
36744
37371
|
<details class="pptx-ng-inspector__details">
|
|
36745
37372
|
<summary class="pptx-ng-inspector__summary">Animation</summary>
|
|
@@ -36771,7 +37398,7 @@ class InspectorPanelComponent {
|
|
|
36771
37398
|
</div>
|
|
36772
37399
|
</section>
|
|
36773
37400
|
</aside>
|
|
36774
|
-
`, isInline: true, styles: [".pptx-ng-inspector{display:flex;flex-direction:column;gap:0;padding:.5rem;background:var(--pptx-inspector-bg, #1e1e1e);color:var(--pptx-inspector-fg, #e0e0e0);font-size:12px;min-width:220px;overflow-y:auto}.pptx-ng-inspector__section{padding:.5rem 0;border-bottom:1px solid var(--pptx-inspector-border, #333)}.pptx-ng-inspector__section:last-child{border-bottom:none}.pptx-ng-inspector__heading{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--pptx-inspector-muted, #888);margin:0 0 .35rem}.pptx-ng-inspector__details{border-bottom:1px solid var(--pptx-inspector-border, #333)}.pptx-ng-inspector__summary{padding:.5rem 0;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--pptx-inspector-muted, #888);cursor:pointer;-webkit-user-select:none;user-select:none}.pptx-ng-inspector__row{display:flex;align-items:center;gap:.35rem;margin-bottom:.35rem}.pptx-ng-inspector__row:last-child{margin-bottom:0}.pptx-ng-inspector__row--toggles{gap:.25rem}.pptx-ng-inspector__label{font-size:10px;color:var(--pptx-inspector-muted, #888);min-width:32px;text-align:right;flex-shrink:0}.pptx-ng-inspector__input{background:var(--pptx-inspector-input-bg, #2d2d2d);border:1px solid var(--pptx-inspector-border, #444);color:inherit;border-radius:3px;padding:2px 4px;font-size:12px}.pptx-ng-inspector__input--number{width:62px;text-align:right}.pptx-ng-inspector__color{width:32px;height:22px;border:1px solid var(--pptx-inspector-border, #444);border-radius:3px;padding:1px;cursor:pointer;background:transparent;flex-shrink:0}.pptx-ng-inspector__toggle{width:26px;height:22px;background:var(--pptx-inspector-input-bg, #2d2d2d);border:1px solid var(--pptx-inspector-border, #444);color:inherit;border-radius:3px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:12px}@media(pointer:coarse),(max-width:640px){.pptx-ng-inspector{width:100%;min-width:0;box-sizing:border-box;font-size:14px}.pptx-ng-inspector__row{flex-wrap:wrap;gap:.5rem}.pptx-ng-inspector__label{min-width:28px}.pptx-ng-inspector__input{flex:1 1 auto;min-height:40px;font-size:16px;padding:6px 8px}.pptx-ng-inspector__input--number{width:auto;min-width:72px}.pptx-ng-inspector__color{width:44px;height:40px}.pptx-ng-inspector__toggle{min-width:44px;width:auto;flex:1 1 auto;height:40px;font-size:15px}.pptx-ng-inspector__btn{min-height:40px;padding:8px 10px;font-size:13px}}.pptx-ng-inspector__toggle.is-active{background:var(--pptx-inspector-active, #0078d4);border-color:var(--pptx-inspector-active, #0078d4);color:#fff}.pptx-ng-inspector__btn{flex:1;padding:3px 6px;background:var(--pptx-inspector-input-bg, #2d2d2d);border:1px solid var(--pptx-inspector-border, #444);color:inherit;border-radius:3px;cursor:pointer;font-size:11px;white-space:nowrap}.pptx-ng-inspector__btn:hover{background:var(--pptx-inspector-hover, #3a3a3a)}.pptx-ng-inspector__btn--danger{color:var(--pptx-inspector-danger, #f47c7c);border-color:var(--pptx-inspector-danger-border, #6b2a2a)}.pptx-ng-inspector__btn--danger:hover{background:var(--pptx-inspector-danger-hover, #4a1a1a)}\n"], dependencies: [{ kind: "component", type: GradientPickerComponent, selector: "pptx-gradient-picker", inputs: ["element"], outputs: ["patch"] }, { kind: "component", type: EffectsPanelComponent, selector: "pptx-effects-panel", inputs: ["element"], outputs: ["patch"] }, { kind: "component", type: TextAdvancedPanelComponent, selector: "pptx-text-advanced-panel", inputs: ["element"], outputs: ["patch"] }, { kind: "component", type: TableDataEditorComponent, selector: "pptx-table-data-editor", inputs: ["element", "canEdit"], outputs: ["elementChange"] }, { kind: "component", type: ChartDataEditorComponent, selector: "pptx-chart-data-editor", inputs: ["element", "canEdit"], outputs: ["elementChange"] }, { kind: "component", type: AnimationAuthorPanelComponent, selector: "pptx-animation-author-panel", inputs: ["element", "slideIndex", "animations", "canEdit"], outputs: ["animationsChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
37401
|
+
`, isInline: true, styles: [".pptx-ng-inspector{display:flex;flex-direction:column;gap:0;padding:.5rem;background:var(--pptx-inspector-bg, #1e1e1e);color:var(--pptx-inspector-fg, #e0e0e0);font-size:12px;min-width:220px;overflow-y:auto}.pptx-ng-inspector__section{padding:.5rem 0;border-bottom:1px solid var(--pptx-inspector-border, #333)}.pptx-ng-inspector__section:last-child{border-bottom:none}.pptx-ng-inspector__heading{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--pptx-inspector-muted, #888);margin:0 0 .35rem}.pptx-ng-inspector__details{border-bottom:1px solid var(--pptx-inspector-border, #333)}.pptx-ng-inspector__summary{padding:.5rem 0;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--pptx-inspector-muted, #888);cursor:pointer;-webkit-user-select:none;user-select:none}.pptx-ng-inspector__row{display:flex;align-items:center;gap:.35rem;margin-bottom:.35rem}.pptx-ng-inspector__row:last-child{margin-bottom:0}.pptx-ng-inspector__row--toggles{gap:.25rem}.pptx-ng-inspector__label{font-size:10px;color:var(--pptx-inspector-muted, #888);min-width:32px;text-align:right;flex-shrink:0}.pptx-ng-inspector__input{background:var(--pptx-inspector-input-bg, #2d2d2d);border:1px solid var(--pptx-inspector-border, #444);color:inherit;border-radius:3px;padding:2px 4px;font-size:12px}.pptx-ng-inspector__input--number{width:62px;text-align:right}.pptx-ng-inspector__color{width:32px;height:22px;border:1px solid var(--pptx-inspector-border, #444);border-radius:3px;padding:1px;cursor:pointer;background:transparent;flex-shrink:0}.pptx-ng-inspector__toggle{width:26px;height:22px;background:var(--pptx-inspector-input-bg, #2d2d2d);border:1px solid var(--pptx-inspector-border, #444);color:inherit;border-radius:3px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:12px}@media(pointer:coarse),(max-width:640px){.pptx-ng-inspector{width:100%;min-width:0;box-sizing:border-box;font-size:14px}.pptx-ng-inspector__row{flex-wrap:wrap;gap:.5rem}.pptx-ng-inspector__label{min-width:28px}.pptx-ng-inspector__input{flex:1 1 auto;min-height:40px;font-size:16px;padding:6px 8px}.pptx-ng-inspector__input--number{width:auto;min-width:72px}.pptx-ng-inspector__color{width:44px;height:40px}.pptx-ng-inspector__toggle{min-width:44px;width:auto;flex:1 1 auto;height:40px;font-size:15px}.pptx-ng-inspector__btn{min-height:40px;padding:8px 10px;font-size:13px}}.pptx-ng-inspector__toggle.is-active{background:var(--pptx-inspector-active, #0078d4);border-color:var(--pptx-inspector-active, #0078d4);color:#fff}.pptx-ng-inspector__btn{flex:1;padding:3px 6px;background:var(--pptx-inspector-input-bg, #2d2d2d);border:1px solid var(--pptx-inspector-border, #444);color:inherit;border-radius:3px;cursor:pointer;font-size:11px;white-space:nowrap}.pptx-ng-inspector__btn:hover{background:var(--pptx-inspector-hover, #3a3a3a)}.pptx-ng-inspector__btn--danger{color:var(--pptx-inspector-danger, #f47c7c);border-color:var(--pptx-inspector-danger-border, #6b2a2a)}.pptx-ng-inspector__btn--danger:hover{background:var(--pptx-inspector-danger-hover, #4a1a1a)}\n"], dependencies: [{ kind: "component", type: GradientPickerComponent, selector: "pptx-gradient-picker", inputs: ["element"], outputs: ["patch"] }, { kind: "component", type: EffectsPanelComponent, selector: "pptx-effects-panel", inputs: ["element"], outputs: ["patch"] }, { kind: "component", type: TextAdvancedPanelComponent, selector: "pptx-text-advanced-panel", inputs: ["element"], outputs: ["patch"] }, { kind: "component", type: TableDataEditorComponent, selector: "pptx-table-data-editor", inputs: ["element", "canEdit"], outputs: ["elementChange"] }, { kind: "component", type: ChartDataEditorComponent, selector: "pptx-chart-data-editor", inputs: ["element", "canEdit"], outputs: ["elementChange"] }, { kind: "component", type: SmartArtPropertiesComponent, selector: "pptx-smart-art-properties", inputs: ["smartArtData", "canEdit"], outputs: ["smartArtDataChange"] }, { kind: "component", type: AnimationAuthorPanelComponent, selector: "pptx-animation-author-panel", inputs: ["element", "slideIndex", "animations", "canEdit"], outputs: ["animationsChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
36775
37402
|
}
|
|
36776
37403
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: InspectorPanelComponent, decorators: [{
|
|
36777
37404
|
type: Component,
|
|
@@ -36781,6 +37408,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
36781
37408
|
TextAdvancedPanelComponent,
|
|
36782
37409
|
TableDataEditorComponent,
|
|
36783
37410
|
ChartDataEditorComponent,
|
|
37411
|
+
SmartArtPropertiesComponent,
|
|
36784
37412
|
AnimationAuthorPanelComponent,
|
|
36785
37413
|
], template: `
|
|
36786
37414
|
<!--
|
|
@@ -37034,6 +37662,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
37034
37662
|
</details>
|
|
37035
37663
|
}
|
|
37036
37664
|
|
|
37665
|
+
<!-- ── SmartArt editing ───────────────────────────────────────────── -->
|
|
37666
|
+
@if (smartArtData(); as sa) {
|
|
37667
|
+
<section class="pptx-ng-inspector__section">
|
|
37668
|
+
<pptx-smart-art-properties
|
|
37669
|
+
[smartArtData]="sa"
|
|
37670
|
+
(smartArtDataChange)="onSmartArtDataChange($event)"
|
|
37671
|
+
/>
|
|
37672
|
+
</section>
|
|
37673
|
+
}
|
|
37674
|
+
|
|
37037
37675
|
<!-- ── Animation authoring ────────────────────────────────────────── -->
|
|
37038
37676
|
<details class="pptx-ng-inspector__details">
|
|
37039
37677
|
<summary class="pptx-ng-inspector__summary">Animation</summary>
|