ooxml-ui 1.6.2 → 1.8.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 +90 -37
- package/custom-elements.json +303 -4
- package/dist/chrome/ruler.d.ts +7 -1
- package/dist/chrome/ruler.d.ts.map +1 -1
- package/dist/chrome/status-bar.d.ts.map +1 -1
- package/dist/chrome/tab-strip.d.ts +3 -1
- package/dist/chrome/tab-strip.d.ts.map +1 -1
- package/dist/chrome/task-pane.d.ts +29 -0
- package/dist/chrome/task-pane.d.ts.map +1 -0
- package/dist/chrome/title-bar.d.ts +2 -1
- package/dist/chrome/title-bar.d.ts.map +1 -1
- package/dist/{chunk-QAIVGTQZ.js → chunk-7US5GCXF.js} +158 -153
- package/dist/{chunk-Z7CS3UUK.js → chunk-KF72ZA6V.js} +5 -2
- package/dist/{chunk-QHAE6Y5B.js → chunk-O7APCA5N.js} +680 -98
- package/dist/chunk-W6AV3GHC.js +112 -0
- package/dist/controls.d.ts +9 -2
- package/dist/controls.d.ts.map +1 -1
- package/dist/controls.js +1 -1
- package/dist/dialog/dialog-footer.d.ts.map +1 -1
- package/dist/dialog/options-dialog.d.ts.map +1 -1
- package/dist/docx/editor-core.d.ts +3 -0
- package/dist/docx/editor-shell.d.ts +2 -0
- package/dist/docx/element-api.d.ts +7 -0
- package/dist/docx/events.d.ts +4 -1
- package/dist/docx/index.d.ts +1 -0
- package/dist/docx/ribbon-color-grid.d.ts +3 -4
- package/dist/docx.js +46 -78
- package/dist/edit-worker.js +52 -3
- package/dist/form/color-custom.d.ts +79 -0
- package/dist/form/color-custom.d.ts.map +1 -0
- package/dist/form/color-grid.d.ts +125 -0
- package/dist/form/color-grid.d.ts.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +4 -3
- package/dist/menu/context-menu.d.ts.map +1 -1
- package/dist/menu/menu-button.d.ts +2 -1
- package/dist/menu/menu-button.d.ts.map +1 -1
- package/dist/notices/paste-options.d.ts.map +1 -1
- package/dist/notices/toasts.d.ts.map +1 -1
- package/dist/pptx/{chart-3d-view-scene-ERX2GRCD.mjs → chart-3d-view-scene-P6MAFEGL.mjs} +2 -2
- package/dist/pptx/{chart-3d-view-scene-55WDENSO.cjs → chart-3d-view-scene-V74F7ZOC.cjs} +38 -38
- package/dist/pptx/{chunk-G2YUKLRX.cjs → chunk-526IHNIH.cjs} +1 -1
- package/dist/pptx/{chunk-SVN6OBG4.mjs → chunk-DPOES4WM.mjs} +26 -11
- package/dist/pptx/{chunk-BLAJIEXA.cjs → chunk-GCS5KBMR.cjs} +511 -653
- package/dist/pptx/{chunk-RPRC2EG5.cjs → chunk-K3S2A64B.cjs} +13 -13
- package/dist/pptx/{chunk-E55NU4BF.mjs → chunk-MCHPNO42.mjs} +289 -493
- package/dist/pptx/{chunk-AWQRQUPL.mjs → chunk-NAFUYAQP.mjs} +1 -1
- package/dist/pptx/{chunk-LCIXR7WE.cjs → chunk-VFPVEVF4.cjs} +26 -11
- package/dist/pptx/{chunk-TKATCPOK.mjs → chunk-ZAOYPCAM.mjs} +1 -1
- package/dist/pptx/dom/activex-controls-overlay.d.ts.map +1 -1
- package/dist/pptx/dom/elements/image.d.ts.map +1 -1
- package/dist/pptx/dom/elements/media.d.ts.map +1 -1
- package/dist/pptx/dom/elements/text-block.d.ts.map +1 -1
- package/dist/pptx/dom/elements/zoom.d.ts.map +1 -1
- package/dist/pptx/dom/index.cjs +252 -247
- package/dist/pptx/dom/index.mjs +11 -6
- package/dist/pptx/export/html2canvas-clone.cjs +2 -2
- package/dist/pptx/export/html2canvas-clone.mjs +1 -1
- package/dist/pptx/index.cjs +3059 -3023
- package/dist/pptx/index.mjs +4 -4
- package/dist/pptx/render/chart-combo-series.d.ts.map +1 -1
- package/dist/pptx/render/chart-combo-stock.cjs +3 -3
- package/dist/pptx/render/chart-combo-stock.mjs +1 -1
- package/dist/pptx/render/chart-marker-shape.d.ts.map +1 -1
- package/dist/pptx/render/chart-overlays.cjs +7 -7
- package/dist/pptx/render/chart-overlays.mjs +1 -1
- package/dist/pptx/render/chart-surface-treemap.cjs +4 -4
- package/dist/pptx/render/chart-surface-treemap.mjs +1 -1
- package/dist/pptx/render/chart-view-model.cjs +44 -44
- package/dist/pptx/render/chart-view-model.mjs +1 -1
- package/dist/pptx/render/chart-waterfall-map.cjs +6 -6
- package/dist/pptx/render/chart-waterfall-map.mjs +1 -1
- package/dist/pptx/render/connector-router-types.d.ts +4 -52
- package/dist/pptx/render/connector-router-types.d.ts.map +1 -1
- package/dist/pptx/render/connector-router.d.ts +4 -32
- package/dist/pptx/render/connector-router.d.ts.map +1 -1
- package/dist/pptx/render/editor-keymap-arrows.d.ts +0 -7
- package/dist/pptx/render/editor-keymap-arrows.d.ts.map +1 -1
- package/dist/pptx/render/element-interaction.d.ts +2 -6
- package/dist/pptx/render/element-interaction.d.ts.map +1 -1
- package/dist/pptx/render/index.d.ts +1 -0
- package/dist/pptx/render/index.d.ts.map +1 -1
- package/dist/pptx/render/ribbon-add-ins.d.ts +53 -0
- package/dist/pptx/render/ribbon-add-ins.d.ts.map +1 -0
- package/dist/pptx/web-components/index.d.ts +1 -0
- package/dist/pptx/web-components/index.d.ts.map +1 -1
- package/dist/pptx/web-components/ribbon-add-in.d.ts +20 -0
- package/dist/pptx/web-components/ribbon-add-in.d.ts.map +1 -0
- package/dist/ribbon/add-in-tabs.d.ts +36 -0
- package/dist/ribbon/group-overflow.d.ts +37 -0
- package/dist/ribbon/group-overflow.d.ts.map +1 -0
- package/dist/ribbon/ribbon-tabs.d.ts.map +1 -1
- package/dist/teams/app/index.d.ts +1 -1
- package/dist/teams.js +2 -2
- package/dist/visio/format-pane-fields.d.ts +42 -0
- package/dist/visio/format-pane-view.d.ts +44 -0
- package/dist/visio/index.d.ts +1 -0
- package/dist/visio/page-setup-action.d.ts +4 -0
- package/dist/visio/ribbon-action.d.ts +20 -7
- package/dist/visio/ribbon-change-shape.d.ts +17 -6
- package/dist/visio/ribbon-color-menu.d.ts +29 -0
- package/dist/visio/ribbon-inline-galleries.d.ts +20 -0
- package/dist/visio/ribbon-overflow.d.ts +7 -0
- package/dist/visio/ribbon-review.d.ts +5 -2
- package/dist/visio/ribbon-router.d.ts +3 -3
- package/dist/visio/ribbon-shape-styles.d.ts +4 -1
- package/dist/visio/ribbon-style-options.d.ts +4 -3
- package/dist/visio/ribbon.d.ts +2 -2
- package/dist/visio/shapes-document.d.ts +29 -0
- package/dist/visio/shapes-sections.d.ts +19 -5
- package/dist/visio/shapes-storage.d.ts +15 -0
- package/dist/visio/shapes-window.d.ts +9 -2
- package/dist/visio/status-bar.d.ts +7 -4
- package/dist/visio/stencil-catalog.d.ts +4 -0
- package/dist/visio/styles/theme.d.ts +1 -1
- package/dist/visio/styles.d.ts +1 -1
- package/dist/visio/text-measurer.d.ts +25 -0
- package/dist/visio/title-bar.d.ts +9 -0
- package/dist/visio/viewer-auto-connect-parts.d.ts +12 -0
- package/dist/visio/viewer-auto-connect.d.ts +33 -0
- package/dist/visio/viewer-backstage.d.ts +2 -1
- package/dist/visio/viewer-canvas.d.ts +1 -1
- package/dist/visio/viewer-change-shape.d.ts +8 -4
- package/dist/visio/viewer-chrome.d.ts +13 -5
- package/dist/visio/viewer-color-menus.d.ts +34 -0
- package/dist/visio/viewer-commands.d.ts +4 -1
- package/dist/visio/viewer-connector-tool.d.ts +5 -3
- package/dist/visio/viewer-data-window.d.ts +5 -1
- package/dist/visio/viewer-draw-tool.d.ts +1 -11
- package/dist/visio/viewer-element.d.ts +16 -0
- package/dist/visio/viewer-format-pane.d.ts +26 -0
- package/dist/visio/viewer-guides.d.ts +7 -4
- package/dist/visio/viewer-inline-text.d.ts +31 -0
- package/dist/visio/viewer-input.d.ts +5 -1
- package/dist/visio/viewer-layer-properties.d.ts +18 -0
- package/dist/visio/viewer-layout-commands.d.ts +8 -2
- package/dist/visio/viewer-more-colors.d.ts +16 -0
- package/dist/visio/viewer-options.d.ts +18 -4
- package/dist/visio/viewer-page-setup.d.ts +6 -0
- package/dist/visio/viewer-ruler-grid.d.ts +25 -0
- package/dist/visio/viewer-ruler.d.ts +11 -3
- package/dist/visio/viewer-snap-glue.d.ts +23 -0
- package/dist/visio/viewer-stencil.d.ts +4 -1
- package/dist/visio.js +7595 -5944
- package/dist/xlsx/component.d.ts +8 -0
- package/dist/xlsx/dialogs/format-cells/color-swatches.d.ts +4 -2
- package/dist/xlsx/dialogs/styles.d.ts +1 -1
- package/dist/xlsx/events.d.ts +4 -1
- package/dist/xlsx/index.d.ts +1 -0
- package/dist/xlsx/ribbon/color-grid.d.ts +25 -7
- package/dist/xlsx/ribbon/ribbon.d.ts +3 -0
- package/dist/xlsx.js +121 -163
- package/package.json +3 -2
- package/dist/pptx/render/connector-router-astar.d.ts +0 -24
- package/dist/pptx/render/connector-router-astar.d.ts.map +0 -1
- package/dist/pptx/render/connector-router-graph.d.ts +0 -38
- package/dist/pptx/render/connector-router-graph.d.ts.map +0 -1
- package/dist/visio/format-shape-dialog.d.ts +0 -21
- package/dist/visio/viewer-edit-controls.d.ts +0 -12
- package/dist/visio/viewer-format-shape.d.ts +0 -16
- package/dist/visio/viewer-geometry-controls.d.ts +0 -14
- package/dist/visio/viewer-layer-controls.d.ts +0 -5
- package/dist/visio/viewer-paint-dialog.d.ts +0 -28
- package/dist/visio/viewer-paint-properties.d.ts +0 -13
package/dist/xlsx.js
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
import './chunk-
|
|
1
|
+
import './chunk-KF72ZA6V.js';
|
|
2
|
+
import { syncRibbonAddIns } from './chunk-W6AV3GHC.js';
|
|
3
|
+
export { RIBBON_ADD_IN_EVENT } from './chunk-W6AV3GHC.js';
|
|
2
4
|
import { defineSmartArt } from './chunk-PXIYHFZ5.js';
|
|
3
|
-
import { withExtension, saveExtension, downloadBytes, emit, emitEvent, blobFor, announceFileCommand, pickFile } from './chunk-
|
|
4
|
-
export { XLSX_EDITOR_EVENTS } from './chunk-
|
|
5
|
+
import { withExtension, saveExtension, downloadBytes, emit, emitEvent, blobFor, announceFileCommand, pickFile } from './chunk-7US5GCXF.js';
|
|
6
|
+
export { XLSX_EDITOR_EVENTS } from './chunk-7US5GCXF.js';
|
|
5
7
|
import './chunk-SNV6YKPC.js';
|
|
6
8
|
import { shadcnBridge } from './chunk-BCH2ZLWI.js';
|
|
7
|
-
import { range_control_default, createRibbonOverflow, defineBackstage, defineRibbon, defineRibbonActions, defineTitleBar, defineStatusBar, defineZoomSlider, rangeControl, defineDialog, runKeyTips, assignKeyTips, defineCheckbox, defineGallery, defineContextMenu, defineCommentsPane, parseSvgPreview } from './chunk-
|
|
9
|
+
import { range_control_default, createRibbonOverflow, defineBackstage, defineRibbon, defineRibbonActions, defineTitleBar, defineStatusBar, defineZoomSlider, rangeControl, defineDialog, runKeyTips, assignKeyTips, defineCheckbox, defineGallery, defineColorGrid, defineContextMenu, defineCommentsPane, parseSvgPreview } from './chunk-O7APCA5N.js';
|
|
8
10
|
import { getIcon, registerIcon } from './chunk-M6GF5ED2.js';
|
|
9
11
|
import { definePresence } from './chunk-L7JV5FVE.js';
|
|
10
12
|
import { withTokens } from './chunk-OGNNNTKI.js';
|
|
11
13
|
import './chunk-SPNWHKSR.js';
|
|
12
14
|
import { SPECIAL_CODES, FRACTION_CODES, AUTOSUM_FUNCTIONS, themeToCssVars, lightTheme, darkTheme, ICON_ACCENTS, ICON_PATHS, normalizeThemeMode, applyThemeColors, parseSelectionRef, selectionRef, normalizeEditorLocale, DirtyState, createCommandRegistry, createDialogRegistry, activeRef, createSelectionModel, SheetSelections, translator, initialSelection, sheetBaseName, historyOf, onRibbonTabsChange, activeChart, editChart, ribbonTabs, isTabHidden, selectTab, setTabHidden, tabButton, searchCommands, formatNumber, TEMPLATES, createTemplateWorkbook, isMenuSeparator, registerRibbonTabs, installFormatPainter, SHEET_ICONS, clipboardCommands, fontCommands, alignmentCommands, numberCommands, cellCommands, editingCommands, pageLayoutCommands, formulaCommands, dataCommands, contextualCommands, reviewTab, viewTab, helpTab, editBridge, CellViewCache, QUADRANTS, columnHeaderHeight, rowHeaderWidth, GridGeometry, cellRange, scrollToReveal, buildItems, fitNumber, cssFont, clampAddress, selectCell, movingEnd, extendSelection, moveWithinSelection, rowsRange, colsRange, ALL_RANGE, tabMenu, editing, icon, DATA_BAR_COLORS, dataBarRule, COLOR_SCALES, colorScaleRule, iconSetRule, target, tableAt, viewing, activeTable, numberFormatOptions, FONT_NAMES, FONT_SIZES, BORDER_PRESETS, ORIENTATIONS, ACCOUNTING_FORMATS, themePaletteItems, MARGIN_PRESETS, PAPER_SIZES, FUNCTION_MENUS, MORE_FUNCTION_CATEGORIES, functionsIn, isSingleCell, spanRange, selectionCellCount, addRange, activeStyle, selectSpecial, insertFunctionCall, guessHeader, regionOf, HIGHLIGHT_STYLES, ICON_SETS, TABLE_STYLES, tableStylePreview, resolveNameBox, absoluteReference, nameForRange, fillPaint, iconSvg, colSelected, rowSelected, rowHeaderMenu, columnHeaderMenu, cellMenu, recentFunctions, evaluateRef, buildChart, detectCategory, CATEGORIES, TIME_CODES, DATE_CODES, DEFAULT_OPTIONS, cellStyleItems, textDecoration, justify, alignItems, textAlign, hasBorders, edgeCss, diagonalSvg, SYMBOLS, buildCode, UNSET, dxfCss, negativeCodes, iconCount, iconThresholds, rowsOf, colsOf } from 'ooxml-core/xlsx/ui';
|
|
13
15
|
export { EDITOR_LOCALES, THEME_KEYS, normalizeEditorLocale, registerRibbonTabs, themeToCssVars, darkTheme as xlsxDarkTheme, lightTheme as xlsxLightTheme } from 'ooxml-core/xlsx/ui';
|
|
14
|
-
import { createWorksheet, createEditSession, approximateMeasure, createWorkbook, MAX_ROW, MAX_COL, chartView, createRefEvaluator, chartBarSpacing, CHART_FILL_PARTS, selectionStats, formatSelectionStat, formatRange, chartSeriesTransparencyPatch, chartSeriesTransparency, chartSeriesGradientPatch, chartSeriesSolidFillPatch, chartSeriesFillPatch, chartWithElementFills, chartElementTransparencyPatch, chartElementTransparency, chartElementGradientPatch, chartElementSolidFillPatch, chartElementFillPatch, chartElementFill, usedRange, chartGradientStopTransparency, createGridMetrics, mergeView, cellView,
|
|
16
|
+
import { createWorksheet, createEditSession, approximateMeasure, createWorkbook, MAX_ROW, MAX_COL, chartView, createRefEvaluator, chartBarSpacing, CHART_FILL_PARTS, selectionStats, formatSelectionStat, formatRange, chartSeriesTransparencyPatch, chartSeriesTransparency, chartSeriesGradientPatch, chartSeriesSolidFillPatch, chartSeriesFillPatch, chartWithElementFills, chartElementTransparencyPatch, chartElementTransparency, chartElementGradientPatch, chartElementSolidFillPatch, chartElementFillPatch, chartElementFill, usedRange, chartGradientStopTransparency, createGridMetrics, mergeView, cellView, resolveColor, DEFAULT_THEME, nextSheetName, FUNCTION_CATALOG, mergeAt, visibleCells, getCell, cellInputText, closeParens, isFormulaText, parseCellInput, referenceTarget, formatAddress, navigate, anchorToPixelBox, renderChartSvg, pixelBoxToAnchor, listValidationOptions, validationAt, getValue, resolvePasteOptions, DEFAULT_COL_WIDTH, nameAtCaret, functionMatches, callAtCaret, splice, acceptsReference, translateFormula, isCellError, layoutRemoteSelections, parseHtmlTable, toggleAbsolute, rangeContains, formatValue, isDateFormat, pictureAnchorAt, validateDefinedName, parseAddress, styleAt, parseRange, rangesIntersect, chartColorScheme, coloredReferences, syntaxParams, activeParam, columnLabel, THEME_SLOTS, normalizeRange, currentRegion, autoFitColumnWidth, validateSheetName, dateToSerial, IMAGE_EXTENSIONS, verifySheetPassword, verifyWorkbookPassword, sheetByName, quoteSheetName, serialToDate, BUILTIN_NUMBER_FORMATS, pixelsToColumnWidth, validateTableName } from 'ooxml-core/xlsx';
|
|
15
17
|
import { hyperlinkPolicy } from 'ooxml-core/opc';
|
|
16
18
|
import { resolveChartGradient, sortGradientStops, withChartGradientDirection, buildChartGradientDef, chartGradientMarkup, CHART_COLOR_PALETTES, chartPaletteColors } from 'ooxml-core/chart';
|
|
17
19
|
import { render } from 'lit';
|
|
@@ -24,7 +26,7 @@ var shell_default = "/* Frame, title bar and status bar. Mirrors docx-viewer's c
|
|
|
24
26
|
var ribbon_default = "/* Ribbon: tabs, panels, groups and controls. Mirrors docx-viewer's styles/ribbon*.css. */\n.xve-ribbon-gallery[data-office-gallery] .trigger {\n flex-direction: column;\n justify-content: center;\n min-width: 56px;\n height: 78px;\n white-space: normal;\n text-align: center;\n}\n.xve-ribbon-gallery[data-office-gallery] .trigger > svg {\n width: 28px;\n height: 28px;\n}\n.xve-ribbon-gallery[data-office-gallery] .trigger > span:not([aria-hidden]) {\n max-width: 56px;\n}\n.xve-ribbon {\n position: relative;\n display: flex;\n flex: none;\n min-width: 0;\n flex-direction: column;\n background: var(--surface);\n border-bottom: 1px solid var(--line);\n}\n/* The tab row, File button and collapse button are the shared office-ui-ribbon; these colour it. */\n.xve-ribbon {\n --office-ribbon-contextual: #0f7b6c;\n}\n.xve-ribbon::part(file) {\n font-weight: 600;\n}\n.ribbon-panel {\n display: flex;\n flex: none;\n box-sizing: border-box;\n height: 104px;\n min-width: 0;\n align-items: stretch;\n gap: 4px;\n padding: 6px 10px 4px;\n overflow-x: auto;\n overflow-y: hidden;\n scrollbar-width: thin;\n}\n.ribbon-group {\n position: relative;\n display: flex;\n flex: 0 0 auto;\n align-items: flex-start;\n min-width: 0;\n gap: 2px;\n padding: 2px 10px 18px 2px;\n border-right: 1px solid var(--line);\n}\n.ribbon-group:last-child {\n border: 0;\n}\n.ribbon-group::after {\n position: absolute;\n right: 0;\n bottom: 2px;\n left: 0;\n color: var(--muted);\n font-size: 10px;\n line-height: 1.1;\n text-align: center;\n white-space: nowrap;\n content: attr(data-caption);\n}\n.ribbon-caption-sizer {\n position: absolute;\n visibility: hidden;\n font-size: 10px;\n white-space: nowrap;\n}\n.ribbon-stack {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 2px;\n}\n.ribbon-stack > .ribbon-stack {\n flex-direction: row;\n align-items: center;\n}\n.ribbon-separator {\n align-self: stretch;\n width: 1px;\n margin: 2px 3px;\n background: var(--line);\n}\n.ribbon-stack > .ribbon-separator {\n width: auto;\n height: 1px;\n}\n.ribbon-stack > .ribbon-stack > .ribbon-separator {\n width: 1px;\n height: 20px;\n}\n\n/* Buttons */\n.ribbon-group button {\n flex: none;\n min-width: 28px;\n height: 28px;\n max-width: 100%;\n padding: 0 4px;\n overflow: hidden;\n border: 1px solid transparent;\n border-radius: 4px;\n background: transparent;\n color: var(--ink);\n font:\n 400 12px 'Segoe UI',\n Arial,\n sans-serif;\n text-overflow: ellipsis;\n white-space: nowrap;\n cursor: pointer;\n}\n.ribbon-group button:hover:not(:disabled) {\n border-color: var(--line);\n background: var(--accent-soft);\n}\n.ribbon-group button[aria-pressed='true'],\n.ribbon-group button[aria-expanded='true'] {\n border-color: color-mix(in srgb, var(--xl) 45%, transparent);\n background: color-mix(in srgb, var(--xl) 20%, transparent);\n}\n.ribbon-group button:active:not(:disabled) {\n background: color-mix(in srgb, var(--xl) 28%, transparent);\n}\n.ribbon-group button:focus-visible {\n outline: 2px solid var(--xl);\n outline-offset: -2px;\n}\n.ribbon-group button:disabled,\n.ribbon-group input:disabled {\n opacity: 0.4;\n cursor: default;\n}\n.ribbon-group button.ribbon-small {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n height: 24px;\n padding: 0 3px;\n}\n.ribbon-group button.ribbon-small.ribbon-labelled {\n justify-content: flex-start;\n padding: 0 6px 0 4px;\n}\n.ribbon-group button.ribbon-large {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n gap: 2px;\n width: auto;\n min-width: 48px;\n height: 76px;\n padding: 3px 3px 2px;\n font-size: 11px;\n line-height: 1.15;\n white-space: normal;\n text-align: center;\n}\n.ribbon-large > .ribbon-icon:last-child:not(:first-child) {\n margin-top: auto;\n}\n.ribbon-large > span,\n.ribbon-caption {\n /* Two balanced lines (see ribbon/caption.ts); the button grows to the widest. */\n white-space: pre;\n}\n.ribbon-icon {\n flex: none;\n}\n.ribbon-icon[data-icon$='-caret'],\n.ribbon-icon[data-icon='caret'] {\n opacity: 0.8;\n}\n\n/* Split buttons: a main half and a caret that opens a menu or the colour grid. */\n.ribbon-split {\n display: inline-flex;\n align-items: stretch;\n}\n.ribbon-split.ribbon-split-large {\n flex-direction: column;\n}\n.ribbon-group .ribbon-split > button:first-child {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ribbon-group .ribbon-split > .ribbon-caret {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n min-width: 14px;\n padding: 0;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ribbon-group .ribbon-split-large > button:first-child {\n height: 46px;\n border-radius: 4px 4px 0 0;\n}\n.ribbon-group .ribbon-split-large > .ribbon-caret {\n width: auto;\n height: 26px;\n border-radius: 0 0 4px 4px;\n font-size: 11px;\n flex-direction: column;\n gap: 0;\n}\n.ribbon-color {\n position: relative;\n}\n.ribbon-group button.ribbon-color::after {\n position: absolute;\n right: 4px;\n bottom: 2px;\n left: 4px;\n height: 3px;\n background: var(--bar, transparent);\n outline: 1px solid var(--line);\n content: '';\n}\n\n/* Editable combo boxes (font name and size) and plain selects. */\n.ribbon-combo {\n display: inline-flex;\n align-items: stretch;\n height: 24px;\n border: 1px solid var(--line);\n border-radius: 3px;\n background: var(--surface);\n}\n.ribbon-combo:focus-within {\n border-color: var(--xl);\n outline: 1px solid var(--xl);\n}\n.ribbon-combo input {\n flex: 1;\n min-width: 0;\n padding: 0 6px;\n border: 0;\n background: transparent;\n color: var(--ink);\n font:\n 12px 'Segoe UI',\n Arial,\n sans-serif;\n outline: none;\n}\n.ribbon-group .ribbon-combo .ribbon-caret {\n width: 18px;\n min-width: 18px;\n height: 100%;\n padding: 0;\n border: 0;\n border-radius: 0;\n}\n\n/* Plain drop-downs (Number Format) and gallery previews. */\n.ribbon-group select.ribbon-select {\n height: 24px;\n padding: 0 6px;\n border: 1px solid var(--line);\n border-radius: 3px;\n background: var(--surface);\n color: var(--ink);\n font:\n 12px 'Segoe UI',\n Arial,\n sans-serif;\n text-overflow: ellipsis;\n}\n.ribbon-group select.ribbon-select:focus-visible {\n outline: 2px solid var(--xl);\n outline-offset: -1px;\n}\n.ribbon-gallery-preview {\n display: block;\n height: 36px;\n margin-bottom: 3px;\n border: 1px solid var(--line);\n border-radius: 2px;\n background: #fff;\n color: #1f1f1f;\n font-size: 11px;\n line-height: 36px;\n text-align: center;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ribbon-gallery-preview > svg {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n/* Dialog launcher: the corner arrow of a group. */\n.ribbon-group button.ribbon-launcher {\n position: absolute;\n right: 2px;\n bottom: 0;\n z-index: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n min-width: 14px;\n height: 14px;\n padding: 0;\n color: var(--muted);\n}\n\n/* Collapsed groups: a narrow ribbon folds its rightmost groups into one dropdown each. */\n.ribbon-group > .ribbon-overflow-button {\n display: none;\n}\n.ribbon-group[data-collapsed] {\n padding-right: 4px;\n}\n.ribbon-group[data-collapsed] > :not(.ribbon-overflow-button) {\n display: none !important;\n}\n.ribbon-group[data-collapsed] > button.ribbon-overflow-button {\n display: flex;\n}\n.ribbon-group[data-collapsed]::after {\n display: none;\n}\n.ribbon-overflow-panel .ribbon-group {\n height: 84px;\n padding-right: 2px;\n border: 0;\n}\n\n/* KeyTips */\n.xve-keytip {\n position: absolute;\n bottom: -2px;\n left: 50%;\n z-index: 70;\n min-width: 16px;\n padding: 1px 4px;\n border: 1px solid var(--line);\n border-radius: 3px;\n background: #1f1f1f;\n color: #fff;\n font:\n 600 11px/14px 'Segoe UI',\n Arial,\n sans-serif;\n text-align: center;\n pointer-events: none;\n transform: translateX(-50%);\n}\n.xve-keytip-command {\n position: fixed;\n bottom: auto;\n}\n\n/* Accent hues on command icons, as in Office. */\n:host {\n --ribbon-accent-blue: #2b7cd3;\n --ribbon-accent-green: #2f9e5f;\n --ribbon-accent-red: #d13438;\n --ribbon-accent-orange: #d9822b;\n}\n@media (prefers-color-scheme: dark) {\n :host(:not([theme='light'])) {\n --ribbon-accent-blue: #5ea5f0;\n --ribbon-accent-green: #5cc98a;\n --ribbon-accent-red: #f07a7d;\n --ribbon-accent-orange: #f0a35e;\n }\n}\n:host([theme='dark']) {\n --ribbon-accent-blue: #5ea5f0;\n --ribbon-accent-green: #5cc98a;\n --ribbon-accent-red: #f07a7d;\n --ribbon-accent-orange: #f0a35e;\n}\n.ribbon-icon[data-accent='blue'] {\n color: var(--ribbon-accent-blue);\n}\n.ribbon-icon[data-accent='green'] {\n color: var(--ribbon-accent-green);\n}\n.ribbon-icon[data-accent='red'] {\n color: var(--ribbon-accent-red);\n}\n.ribbon-icon[data-accent='orange'] {\n color: var(--ribbon-accent-orange);\n}\n";
|
|
25
27
|
|
|
26
28
|
// raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/xlsx/theme/popups.css?raw
|
|
27
|
-
var popups_default = "/* Floating surfaces: ribbon popovers, menus, the colour grid, Tell me, toasts and the shell dialogs. */\n.ribbon-popover {\n position: fixed;\n z-index: 1000;\n box-sizing: border-box;\n padding: 4px;\n border: 1px solid var(--line);\n border-radius: 6px;\n background: var(--xve-popover);\n box-shadow: 0 6px 20px rgb(0 0 0 / 0.18);\n color: var(--xve-popover-foreground);\n font:\n 12px 'Segoe UI',\n Arial,\n sans-serif;\n}\n.ribbon-popover.ribbon-menu-list,\n.ribbon-popover.ribbon-list {\n display: flex;\n min-width: 180px;\n max-height: min(70vh, 420px);\n flex-direction: column;\n overflow-y: auto;\n}\n.ribbon-menu-list [role='menuitem'],\n.ribbon-menu-list [role='menuitemcheckbox'],\n.ribbon-list [role='option'] {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 5px 12px 5px 8px;\n border: 0;\n border-radius: 3px;\n background: none;\n color: inherit;\n font: inherit;\n text-align: left;\n white-space: nowrap;\n cursor: pointer;\n}\n.ribbon-menu-list [role^='menuitem']:hover:not(:disabled),\n.ribbon-menu-list [role^='menuitem']:focus-visible,\n.ribbon-list [role='option']:hover,\n.ribbon-list [role='option']:focus-visible {\n background: var(--accent-soft);\n outline: none;\n}\n.ribbon-menu-list [role^='menuitem']:disabled {\n opacity: 0.45;\n cursor: default;\n}\n.ribbon-menu-list [aria-checked='true'] {\n font-weight: 600;\n}\n.ribbon-menu-list .ribbon-menu-icon {\n display: inline-flex;\n width: 16px;\n}\n.ribbon-menu-list .ribbon-menu-shortcut {\n margin-left: auto;\n padding-left: 18px;\n color: var(--muted);\n}\n.ribbon-menu-list [role='separator'] {\n height: 1px;\n margin: 4px 2px;\n background: var(--line);\n}\n.ribbon-list [aria-selected='true'] {\n color: var(--xl);\n font-weight: 600;\n}\n.ribbon-popover.ribbon-gallery-menu {\n display: grid;\n grid-template-columns: repeat(4, 96px);\n gap: 4px;\n max-height: min(70vh, 420px);\n overflow-y: auto;\n}\n.ribbon-gallery-menu button {\n padding: 4px;\n border: 1px solid transparent;\n border-radius: 3px;\n background: none;\n color: inherit;\n font: inherit;\n cursor: pointer;\n}\n.ribbon-gallery-menu button:hover,\n.ribbon-gallery-menu button:focus-visible {\n border-color: var(--line);\n background: var(--accent-soft);\n outline: none;\n}\n\n/* Colour picker:
|
|
29
|
+
var popups_default = "/* Floating surfaces: ribbon popovers, menus, the colour grid, Tell me, toasts and the shell dialogs. */\n.ribbon-popover {\n position: fixed;\n z-index: 1000;\n box-sizing: border-box;\n padding: 4px;\n border: 1px solid var(--line);\n border-radius: 6px;\n background: var(--xve-popover);\n box-shadow: 0 6px 20px rgb(0 0 0 / 0.18);\n color: var(--xve-popover-foreground);\n font:\n 12px 'Segoe UI',\n Arial,\n sans-serif;\n}\n.ribbon-popover.ribbon-menu-list,\n.ribbon-popover.ribbon-list {\n display: flex;\n min-width: 180px;\n max-height: min(70vh, 420px);\n flex-direction: column;\n overflow-y: auto;\n}\n.ribbon-menu-list [role='menuitem'],\n.ribbon-menu-list [role='menuitemcheckbox'],\n.ribbon-list [role='option'] {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 5px 12px 5px 8px;\n border: 0;\n border-radius: 3px;\n background: none;\n color: inherit;\n font: inherit;\n text-align: left;\n white-space: nowrap;\n cursor: pointer;\n}\n.ribbon-menu-list [role^='menuitem']:hover:not(:disabled),\n.ribbon-menu-list [role^='menuitem']:focus-visible,\n.ribbon-list [role='option']:hover,\n.ribbon-list [role='option']:focus-visible {\n background: var(--accent-soft);\n outline: none;\n}\n.ribbon-menu-list [role^='menuitem']:disabled {\n opacity: 0.45;\n cursor: default;\n}\n.ribbon-menu-list [aria-checked='true'] {\n font-weight: 600;\n}\n.ribbon-menu-list .ribbon-menu-icon {\n display: inline-flex;\n width: 16px;\n}\n.ribbon-menu-list .ribbon-menu-shortcut {\n margin-left: auto;\n padding-left: 18px;\n color: var(--muted);\n}\n.ribbon-menu-list [role='separator'] {\n height: 1px;\n margin: 4px 2px;\n background: var(--line);\n}\n.ribbon-list [aria-selected='true'] {\n color: var(--xl);\n font-weight: 600;\n}\n.ribbon-popover.ribbon-gallery-menu {\n display: grid;\n grid-template-columns: repeat(4, 96px);\n gap: 4px;\n max-height: min(70vh, 420px);\n overflow-y: auto;\n}\n.ribbon-gallery-menu button {\n padding: 4px;\n border: 1px solid transparent;\n border-radius: 3px;\n background: none;\n color: inherit;\n font: inherit;\n cursor: pointer;\n}\n.ribbon-gallery-menu button:hover,\n.ribbon-gallery-menu button:focus-visible {\n border-color: var(--line);\n background: var(--accent-soft);\n outline: none;\n}\n\n/* Colour picker: the shared office-ui-color-grid in a ribbon popover. */\n.ribbon-popover.color-grid {\n display: block;\n padding: 4px;\n}\n.color-grid-input {\n position: absolute;\n width: 0;\n height: 0;\n padding: 0;\n border: 0;\n opacity: 0;\n pointer-events: none;\n}\n\n/* Toasts */\n.xve-toasts {\n position: absolute;\n z-index: 90;\n right: 16px;\n bottom: 40px;\n display: flex;\n max-width: min(420px, calc(100% - 32px));\n flex-direction: column;\n gap: 8px;\n pointer-events: none;\n}\n.xve-toast {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 10px 12px;\n border: 1px solid var(--line);\n border-left: 4px solid var(--xl);\n border-radius: 6px;\n background: var(--xve-popover);\n box-shadow: 0 8px 24px #0003;\n color: var(--xve-popover-foreground);\n pointer-events: auto;\n}\n.xve-toast[data-kind='warning'] {\n border-left-color: #b7791f;\n}\n.xve-toast[data-kind='error'] {\n border-left-color: var(--xve-destructive);\n}\n.xve-toast-text {\n flex: 1;\n}\n\n/* Shell dialogs (shortcut help, prompts) */\n.xve-dialog {\n position: absolute;\n z-index: 85;\n top: 120px;\n left: 50%;\n display: grid;\n box-sizing: border-box;\n width: min(440px, calc(100% - 32px));\n gap: 10px;\n padding: 18px 20px;\n border: 1px solid var(--line);\n border-radius: 8px;\n background: var(--xve-popover);\n box-shadow: 0 12px 32px #0003;\n color: var(--ink);\n transform: translateX(-50%);\n}\n.xve-dialog h2 {\n margin: 0 0 4px;\n font-size: 16px;\n font-weight: 600;\n}\n.xve-dialog-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-top: 6px;\n}\n.xve-dialog-actions button {\n min-height: 30px;\n padding: 0 14px;\n border: 1px solid var(--line);\n border-radius: 4px;\n background: var(--surface);\n color: var(--ink);\n font: inherit;\n cursor: pointer;\n}\n.xve-dialog-actions .xve-dialog-primary {\n border-color: var(--xl);\n background: var(--xl);\n color: var(--xve-primary-foreground);\n}\n.xve-shortcut-help {\n width: min(620px, calc(100% - 32px));\n max-height: calc(100% - 160px);\n overflow: auto;\n}\n.xve-shortcut-help p {\n margin: 0;\n color: var(--muted);\n font-size: 12px;\n}\n.xve-shortcut-help table {\n width: 100%;\n border-collapse: collapse;\n}\n.xve-shortcut-help th,\n.xve-shortcut-help td {\n padding: 5px 8px;\n border-bottom: 1px solid var(--line);\n text-align: left;\n vertical-align: top;\n}\n.xve-shortcut-help th {\n color: var(--muted);\n font-size: 12px;\n font-weight: 600;\n}\n.xve-shortcut-help kbd {\n padding: 1px 6px;\n border: 1px solid var(--line);\n border-radius: 4px;\n background: var(--surface);\n font:\n 12px/1.4 ui-monospace,\n Consolas,\n monospace;\n white-space: nowrap;\n}\n";
|
|
28
30
|
|
|
29
31
|
// raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/xlsx/theme/backstage.css?raw
|
|
30
32
|
var backstage_default = "/* File backstage: the shared office-ui-backstage draws the navigation; these style the page content.\n The nav colours come from its tokens. */\n.xve-backstage {\n z-index: 40;\n --office-background: var(--surface);\n --office-backstage-nav-background: var(--xl);\n --office-backstage-nav-foreground: var(--xve-primary-foreground);\n}\n.xve-backstage-content {\n overflow: auto;\n padding: 28px 40px;\n color: var(--ink);\n}\n.xve-backstage-content h2 {\n margin: 0 0 20px;\n font-size: 30px;\n font-weight: 300;\n}\n.xve-backstage-content h3 {\n margin: 24px 0 10px;\n font-size: 15px;\n font-weight: 600;\n}\n.xve-backstage-title {\n margin: 0 0 4px;\n font-size: 26px;\n font-weight: 400;\n overflow-wrap: anywhere;\n}\n.xve-backstage-muted {\n color: var(--muted);\n}\n.xve-backstage-facts {\n display: grid;\n grid-template-columns: max-content minmax(0, 1fr);\n gap: 6px 24px;\n margin: 0;\n}\n.xve-backstage-facts dt {\n color: var(--muted);\n}\n.xve-backstage-facts dd {\n margin: 0;\n overflow-wrap: anywhere;\n}\n.xve-compatibility-notes {\n display: grid;\n gap: 8px;\n max-width: 760px;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.xve-compatibility-notes li {\n display: flex;\n gap: 8px;\n padding: 10px 12px;\n border: 1px solid var(--line);\n border-radius: 6px;\n line-height: 1.45;\n}\n.xve-compatibility-notes .xve-icon {\n margin-top: 2px;\n color: #b7791f;\n}\n.xve-backstage-columns {\n display: grid;\n grid-template-columns: minmax(0, 1fr) 300px;\n gap: 40px;\n align-items: start;\n}\n.xve-backstage-properties {\n padding: 4px 0 0 24px;\n border-left: 1px solid var(--line);\n}\n.xve-backstage-properties h3 {\n margin-top: 0;\n}\n.xve-backstage-tiles {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n}\n.xve-backstage-tile {\n display: inline-flex;\n flex-direction: column;\n gap: 8px;\n padding: 8px;\n border: 1px solid transparent;\n border-radius: 6px;\n background: none;\n color: var(--ink);\n font: inherit;\n cursor: pointer;\n}\n.xve-backstage-tile:hover {\n border-color: var(--line);\n background: var(--xl-soft);\n}\n.xve-backstage-tile-preview {\n display: block;\n width: 150px;\n height: 112px;\n border: 1px solid var(--line);\n background-color: #fff;\n background-image:\n linear-gradient(#e1e1e1 1px, transparent 1px),\n linear-gradient(90deg, #e1e1e1 1px, transparent 1px);\n background-size: 30px 14px;\n box-shadow: 0 1px 3px #0002;\n}\n.xve-backstage-tile-preview[data-template]::before {\n display: block;\n height: 14px;\n background: var(--xl);\n content: '';\n opacity: 0.85;\n}\n.xve-backstage-card {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 24px;\n max-width: 760px;\n margin-bottom: 12px;\n padding: 14px 18px;\n border: 1px solid var(--line);\n border-radius: 6px;\n}\n.xve-backstage-card h3 {\n margin: 0 0 4px;\n}\n.xve-backstage-card p {\n margin: 0;\n}\n.xve-backstage-primary {\n padding: 8px 18px;\n border: 0;\n border-radius: 4px;\n background: var(--xl);\n color: var(--xve-primary-foreground);\n font: inherit;\n cursor: pointer;\n white-space: nowrap;\n}\n.xve-backstage-field {\n display: grid;\n gap: 4px;\n max-width: 420px;\n margin-bottom: 14px;\n color: var(--muted);\n font-size: 12px;\n}\n.xve-backstage-field input,\n.xve-backstage-field select {\n height: 32px;\n padding: 0 8px;\n border: 1px solid var(--line);\n border-radius: 4px;\n background: var(--surface);\n color: var(--ink);\n font:\n 14px 'Segoe UI',\n Arial,\n sans-serif;\n}\n.xve-backstage-check {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 10px;\n}\n.xve-customize-group {\n margin: 0 0 8px;\n padding: 6px 10px 8px;\n border: 1px solid var(--line);\n border-radius: 4px;\n}\n.xve-customize-group legend {\n padding: 0 4px;\n color: var(--muted);\n font-size: 12px;\n}\n.xve-customize-row {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-width: 180px;\n padding: 2px 8px 2px 0;\n font-size: 13px;\n}\n@media (max-width: 760px) {\n .xve-backstage-content {\n padding: 20px;\n }\n .xve-backstage-columns {\n grid-template-columns: minmax(0, 1fr);\n }\n .xve-backstage-properties {\n padding-left: 0;\n border-left: 0;\n }\n}\n";
|
|
@@ -1299,7 +1301,7 @@ var DIALOG_CSS = `
|
|
|
1299
1301
|
border: 1px solid var(--xve-border, #c8c6c4); background: var(--xve-secondary, #fff); color: inherit; font: inherit; }
|
|
1300
1302
|
.xve-btn:hover:not(:disabled) { background: var(--xve-accent, #f3f2f1); }
|
|
1301
1303
|
.xve-btn:focus-visible, .xve-input:focus-visible, .xve-tab:focus-visible, .xve-listbox:focus-visible,
|
|
1302
|
-
.xve-
|
|
1304
|
+
.xve-tile:focus-visible { outline: 2px solid var(--xve-ring, #217346); outline-offset: 1px; }
|
|
1303
1305
|
.xve-btn-primary { background: var(--xve-primary, #217346); color: var(--xve-primary-foreground, #fff);
|
|
1304
1306
|
border-color: var(--xve-primary, #217346); }
|
|
1305
1307
|
.xve-btn-primary:hover:not(:disabled) { background: var(--xve-primary, #1b5e38); filter: brightness(.95); }
|
|
@@ -1329,9 +1331,6 @@ textarea.xve-input { resize: vertical; }
|
|
|
1329
1331
|
.xve-option[aria-selected="true"] { background: var(--xve-selection, #cce8d6); color: inherit; }
|
|
1330
1332
|
.xve-sample { min-height: 40px; display: flex; align-items: center; justify-content: center; padding: 6px;
|
|
1331
1333
|
border: 1px solid var(--xve-border, #e1dfdd); background: var(--xve-sheet-bg, #fff); color: #000; overflow: hidden; }
|
|
1332
|
-
.xve-swatches { display: grid; grid-template-columns: repeat(10, 18px); gap: 3px; }
|
|
1333
|
-
.xve-swatch { width: 18px; height: 18px; border: 1px solid #c8c6c4; padding: 0; cursor: pointer; border-radius: 2px; }
|
|
1334
|
-
.xve-swatch[aria-pressed="true"] { outline: 2px solid var(--xve-primary, #217346); outline-offset: 1px; }
|
|
1335
1334
|
.xve-tiles { display: grid; grid-template-columns: repeat(auto-fill, minmax(84px, 1fr)); gap: 6px; }
|
|
1336
1335
|
.xve-tile { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 6px; cursor: pointer;
|
|
1337
1336
|
border: 1px solid var(--xve-border, #e1dfdd); border-radius: var(--xve-radius, 4px); background: transparent; color: inherit; font: inherit; }
|
|
@@ -2073,23 +2072,17 @@ function openList(anchor, items2, current, choose, options = {}) {
|
|
|
2073
2072
|
|
|
2074
2073
|
// src/xlsx/ribbon/color-grid.ts
|
|
2075
2074
|
var THEME_COLUMNS = [
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
|
|
2075
|
+
"Background 1",
|
|
2076
|
+
"Text 1",
|
|
2077
|
+
"Background 2",
|
|
2078
|
+
"Text 2",
|
|
2079
|
+
"Accent 1",
|
|
2080
|
+
"Accent 2",
|
|
2081
|
+
"Accent 3",
|
|
2082
|
+
"Accent 4",
|
|
2083
|
+
"Accent 5",
|
|
2084
|
+
"Accent 6"
|
|
2086
2085
|
];
|
|
2087
|
-
function themeTints(slot) {
|
|
2088
|
-
if (slot === 0) return [-0.05, -0.15, -0.25, -0.35, -0.5];
|
|
2089
|
-
if (slot === 1) return [0.5, 0.35, 0.25, 0.15, 0.05];
|
|
2090
|
-
if (slot === 2) return [-0.1, -0.25, -0.5, -0.75, -0.9];
|
|
2091
|
-
return [0.8, 0.6, 0.4, -0.25, -0.5];
|
|
2092
|
-
}
|
|
2093
2086
|
var STANDARD_COLORS = [
|
|
2094
2087
|
["C00000", "Dark Red"],
|
|
2095
2088
|
["FF0000", "Red"],
|
|
@@ -2102,170 +2095,101 @@ var STANDARD_COLORS = [
|
|
|
2102
2095
|
["002060", "Dark Blue"],
|
|
2103
2096
|
["7030A0", "Purple"]
|
|
2104
2097
|
];
|
|
2105
|
-
var tintName = (tint, t) => tint > 0 ? t("Lighter {percent}%", { percent: Math.round(tint * 100) }) : t("Darker {percent}%", { percent: Math.round(-tint * 100) });
|
|
2106
2098
|
function cssColor(color, theme = DEFAULT_THEME) {
|
|
2107
2099
|
return resolveColor(color, theme) ?? "transparent";
|
|
2108
2100
|
}
|
|
2101
|
+
var hex = (css) => {
|
|
2102
|
+
const digits = css?.replace(/^#/, "").slice(-6);
|
|
2103
|
+
return digits && /^[0-9a-f]{6}$/i.test(digits) ? `#${digits.toLowerCase()}` : void 0;
|
|
2104
|
+
};
|
|
2105
|
+
function excelColorGrid(doc, theme, t, options = {}) {
|
|
2106
|
+
defineColorGrid();
|
|
2107
|
+
const grid = doc.createElement("office-ui-color-grid");
|
|
2108
|
+
grid.themeColors = THEME_COLUMNS.map((_, slot) => hex(resolveColor({ theme: slot }, theme)));
|
|
2109
|
+
grid.themeNames = THEME_COLUMNS.map((name) => t(name));
|
|
2110
|
+
grid.variantLabel = (column, variant) => `${column}, ${t(variant.kind === "lighter" ? "Lighter {percent}%" : "Darker {percent}%", {
|
|
2111
|
+
percent: variant.percent
|
|
2112
|
+
})}`;
|
|
2113
|
+
grid.standardColors = STANDARD_COLORS.map(([rgb, name]) => ({
|
|
2114
|
+
hex: `#${rgb.toLowerCase()}`,
|
|
2115
|
+
label: t(name)
|
|
2116
|
+
}));
|
|
2117
|
+
grid.themeHeading = t("Theme Colors");
|
|
2118
|
+
grid.standardHeading = t("Standard Colors");
|
|
2119
|
+
if (options.label) grid.label = options.label;
|
|
2120
|
+
if (options.noneLabel) grid.automaticLabel = t(options.noneLabel);
|
|
2121
|
+
if (options.moreLabel) grid.moreLabel = t(options.moreLabel);
|
|
2122
|
+
return grid;
|
|
2123
|
+
}
|
|
2124
|
+
function pickedExcelColor(pick, alpha = false) {
|
|
2125
|
+
if (pick.source === "automatic" || pick.source === "none") return void 0;
|
|
2126
|
+
if (pick.source === "theme" && pick.theme) {
|
|
2127
|
+
const variant = pick.theme.variant;
|
|
2128
|
+
const tint = variant ? (variant.kind === "lighter" ? 1 : -1) * (variant.percent / 100) : 0;
|
|
2129
|
+
return tint ? { theme: pick.theme.column, tint } : { theme: pick.theme.column };
|
|
2130
|
+
}
|
|
2131
|
+
const rgb = pick.color.slice(1).toUpperCase();
|
|
2132
|
+
return { rgb: alpha ? `FF${rgb}` : rgb };
|
|
2133
|
+
}
|
|
2134
|
+
function excelGridValue(color, theme) {
|
|
2135
|
+
return (color ? hex(resolveColor(color, theme)) : void 0) ?? "automatic";
|
|
2136
|
+
}
|
|
2109
2137
|
function openColorGrid(anchor, choose, options) {
|
|
2110
|
-
const { t } = options;
|
|
2111
2138
|
const theme = options.theme ?? DEFAULT_THEME;
|
|
2112
2139
|
const doc = anchor.ownerDocument;
|
|
2113
2140
|
const pop = doc.createElement("div");
|
|
2114
2141
|
pop.className = "ribbon-popover color-grid";
|
|
2115
|
-
pop.setAttribute("role", "menu");
|
|
2116
2142
|
const pick = (color) => {
|
|
2117
2143
|
closeRibbonPopover();
|
|
2118
2144
|
choose(color);
|
|
2119
2145
|
};
|
|
2120
|
-
const
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
item.className = "swatch";
|
|
2125
|
-
item.style.setProperty("--swatch", cssColor(color, theme));
|
|
2126
|
-
item.setAttribute("aria-label", name);
|
|
2127
|
-
item.title = name;
|
|
2128
|
-
item.addEventListener("mousedown", (event) => event.preventDefault());
|
|
2129
|
-
item.addEventListener("click", () => pick(color));
|
|
2130
|
-
return item;
|
|
2131
|
-
};
|
|
2132
|
-
const title = (text3) => {
|
|
2133
|
-
const el3 = doc.createElement("div");
|
|
2134
|
-
el3.className = "color-grid-title";
|
|
2135
|
-
el3.textContent = t(text3);
|
|
2136
|
-
return el3;
|
|
2137
|
-
};
|
|
2138
|
-
const cells = (items2) => {
|
|
2139
|
-
const el3 = doc.createElement("div");
|
|
2140
|
-
el3.className = "color-grid-cells";
|
|
2141
|
-
el3.append(...items2);
|
|
2142
|
-
return el3;
|
|
2143
|
-
};
|
|
2144
|
-
const command = (text3, run) => {
|
|
2145
|
-
const button2 = doc.createElement("button");
|
|
2146
|
-
button2.type = "button";
|
|
2147
|
-
button2.setAttribute("role", "menuitem");
|
|
2148
|
-
button2.className = "color-grid-command";
|
|
2149
|
-
button2.textContent = text3;
|
|
2150
|
-
button2.addEventListener("mousedown", (event) => event.preventDefault());
|
|
2151
|
-
button2.addEventListener("click", run);
|
|
2152
|
-
return button2;
|
|
2153
|
-
};
|
|
2154
|
-
if (options.automaticLabel) pop.append(command(t(options.automaticLabel), () => pick(void 0)));
|
|
2155
|
-
const top = THEME_COLUMNS.map(([slot, name]) => swatch({ theme: slot }, t(name)));
|
|
2156
|
-
const rows = [0, 1, 2, 3, 4].flatMap(
|
|
2157
|
-
(row2) => THEME_COLUMNS.map(([slot, name]) => {
|
|
2158
|
-
const tint = themeTints(slot)[row2] ?? 0;
|
|
2159
|
-
return swatch({ theme: slot, tint }, `${t(name)}, ${tintName(tint, t)}`);
|
|
2160
|
-
})
|
|
2161
|
-
);
|
|
2162
|
-
pop.append(
|
|
2163
|
-
title("Theme Colors"),
|
|
2164
|
-
cells([...top, ...rows]),
|
|
2165
|
-
title("Standard Colors"),
|
|
2166
|
-
cells(STANDARD_COLORS.map(([rgb, name]) => swatch({ rgb }, t(name))))
|
|
2167
|
-
);
|
|
2146
|
+
const grid = excelColorGrid(doc, theme, options.t, {
|
|
2147
|
+
...options.automaticLabel ? { noneLabel: options.automaticLabel } : {},
|
|
2148
|
+
moreLabel: "More Colors..."
|
|
2149
|
+
});
|
|
2168
2150
|
const input = doc.createElement("input");
|
|
2169
2151
|
input.type = "color";
|
|
2170
2152
|
input.className = "color-grid-input";
|
|
2171
2153
|
input.tabIndex = -1;
|
|
2172
2154
|
input.addEventListener("change", () => pick({ rgb: input.value.slice(1).toUpperCase() }));
|
|
2173
|
-
|
|
2174
|
-
|
|
2175
|
-
|
|
2155
|
+
grid.addEventListener(
|
|
2156
|
+
"office-color-pick",
|
|
2157
|
+
(event) => pick(pickedExcelColor(event.detail))
|
|
2176
2158
|
);
|
|
2177
|
-
|
|
2159
|
+
grid.addEventListener("office-color-more", () => input.click());
|
|
2160
|
+
pop.addEventListener("mousedown", (event) => event.preventDefault());
|
|
2161
|
+
pop.append(grid, input);
|
|
2178
2162
|
if (!mountPopover(anchor, pop)) return;
|
|
2179
|
-
|
|
2163
|
+
grid.focus();
|
|
2180
2164
|
}
|
|
2181
2165
|
|
|
2182
2166
|
// src/xlsx/dialogs/format-cells/color-swatches.ts
|
|
2183
|
-
var THEME_NAMES = [
|
|
2184
|
-
[0, "Background 1"],
|
|
2185
|
-
[1, "Text 1"],
|
|
2186
|
-
[2, "Background 2"],
|
|
2187
|
-
[3, "Text 2"],
|
|
2188
|
-
[4, "Accent 1"],
|
|
2189
|
-
[5, "Accent 2"],
|
|
2190
|
-
[6, "Accent 3"],
|
|
2191
|
-
[7, "Accent 4"],
|
|
2192
|
-
[8, "Accent 5"],
|
|
2193
|
-
[9, "Accent 6"]
|
|
2194
|
-
];
|
|
2195
|
-
var colorKey = (color) => color ? JSON.stringify([
|
|
2196
|
-
color.rgb?.slice(-6).toUpperCase(),
|
|
2197
|
-
color.theme,
|
|
2198
|
-
color.tint,
|
|
2199
|
-
color.indexed,
|
|
2200
|
-
color.auto
|
|
2201
|
-
]) : "none";
|
|
2202
2167
|
function swatchGrid(ctx, label, noneLabel, initial, onChange) {
|
|
2203
2168
|
const theme = ctx.workbook()?.theme ?? { colors: [], majorFont: "", minorFont: "" };
|
|
2204
|
-
const
|
|
2205
|
-
|
|
2206
|
-
|
|
2169
|
+
const grid = excelColorGrid(ctx.host.ownerDocument, theme, ctx.t, {
|
|
2170
|
+
noneLabel,
|
|
2171
|
+
label: ctx.t(label)
|
|
2172
|
+
});
|
|
2173
|
+
grid.classList.add("xve-swatch-picker");
|
|
2207
2174
|
let current = initial;
|
|
2208
|
-
const buttons = [];
|
|
2209
2175
|
const paint = () => {
|
|
2210
|
-
|
|
2211
|
-
for (const { button: button2, color } of buttons)
|
|
2212
|
-
button2.setAttribute("aria-pressed", String(colorKey(color) === key));
|
|
2176
|
+
grid.value = excelGridValue(current, theme);
|
|
2213
2177
|
};
|
|
2214
|
-
|
|
2215
|
-
|
|
2178
|
+
grid.addEventListener("office-color-pick", (event) => {
|
|
2179
|
+
event.stopPropagation();
|
|
2180
|
+
current = pickedExcelColor(event.detail, true);
|
|
2216
2181
|
paint();
|
|
2217
|
-
onChange?.(
|
|
2218
|
-
};
|
|
2219
|
-
const none = el(ctx, "button", "xve-btn xve-swatch-none");
|
|
2220
|
-
none.type = "button";
|
|
2221
|
-
none.textContent = ctx.t(noneLabel);
|
|
2222
|
-
none.addEventListener("click", () => choose(void 0));
|
|
2223
|
-
buttons.push({ button: none, color: void 0 });
|
|
2224
|
-
const swatch = (color, name) => {
|
|
2225
|
-
const b = el(ctx, "button", "xve-swatch");
|
|
2226
|
-
b.type = "button";
|
|
2227
|
-
b.style.background = resolveColor(color, theme) ?? "transparent";
|
|
2228
|
-
b.setAttribute("aria-label", name);
|
|
2229
|
-
b.title = name;
|
|
2230
|
-
b.addEventListener("click", () => choose(color));
|
|
2231
|
-
buttons.push({ button: b, color });
|
|
2232
|
-
return b;
|
|
2233
|
-
};
|
|
2234
|
-
const tintName2 = (tint) => tint > 0 ? ctx.t("Lighter {percent}%", { percent: Math.round(tint * 100) }) : ctx.t("Darker {percent}%", { percent: Math.round(-tint * 100) });
|
|
2235
|
-
const themeGrid = el(ctx, "div", "xve-swatches");
|
|
2236
|
-
for (const [slot, name] of THEME_NAMES) themeGrid.append(swatch({ theme: slot }, ctx.t(name)));
|
|
2237
|
-
for (let row2 = 0; row2 < 5; row2++)
|
|
2238
|
-
for (const [slot, name] of THEME_NAMES) {
|
|
2239
|
-
const tint = themeTints(slot)[row2] ?? 0;
|
|
2240
|
-
themeGrid.append(swatch({ theme: slot, tint }, `${ctx.t(name)}, ${tintName2(tint)}`));
|
|
2241
|
-
}
|
|
2242
|
-
const standard = el(ctx, "div", "xve-swatches");
|
|
2243
|
-
for (const [rgb, name] of STANDARD_COLORS)
|
|
2244
|
-
standard.append(swatch({ rgb: `FF${rgb}` }, ctx.t(name)));
|
|
2245
|
-
const cap = (key) => {
|
|
2246
|
-
const d = el(ctx, "div", "xve-note");
|
|
2247
|
-
d.textContent = ctx.t(key);
|
|
2248
|
-
return d;
|
|
2249
|
-
};
|
|
2250
|
-
wrapper.append(none, cap("Theme Colors"), themeGrid, cap("Standard Colors"), standard);
|
|
2251
|
-
wrapper.addEventListener("keydown", (event) => {
|
|
2252
|
-
const list = buttons.map((b) => b.button);
|
|
2253
|
-
const index = list.indexOf(event.target);
|
|
2254
|
-
if (index < 0) return;
|
|
2255
|
-
const delta = { ArrowRight: 1, ArrowLeft: -1, ArrowDown: 10, ArrowUp: -10 }[event.key];
|
|
2256
|
-
if (!delta) return;
|
|
2257
|
-
event.preventDefault();
|
|
2258
|
-
const next = index === 0 ? delta > 0 ? 1 : 0 : Math.max(0, Math.min(list.length - 1, index + delta));
|
|
2259
|
-
list[next]?.focus();
|
|
2182
|
+
onChange?.(current);
|
|
2260
2183
|
});
|
|
2261
2184
|
paint();
|
|
2262
2185
|
return {
|
|
2263
|
-
element:
|
|
2186
|
+
element: grid,
|
|
2264
2187
|
value: () => current,
|
|
2265
2188
|
set(color) {
|
|
2266
2189
|
current = color;
|
|
2267
2190
|
paint();
|
|
2268
|
-
}
|
|
2191
|
+
},
|
|
2192
|
+
focus: () => grid.focus()
|
|
2269
2193
|
};
|
|
2270
2194
|
}
|
|
2271
2195
|
|
|
@@ -2989,7 +2913,7 @@ function openTabColorDialog(ctx) {
|
|
|
2989
2913
|
name: "tab-color",
|
|
2990
2914
|
heading: "Tab Color",
|
|
2991
2915
|
body: grid.element,
|
|
2992
|
-
opened: () => grid.
|
|
2916
|
+
opened: () => grid.focus(),
|
|
2993
2917
|
submit: () => {
|
|
2994
2918
|
const color = grid.value();
|
|
2995
2919
|
session.setTabColor(index, color);
|
|
@@ -4908,7 +4832,7 @@ var TYPES2 = [
|
|
|
4908
4832
|
["percentile", "Percentile"],
|
|
4909
4833
|
["formula", "Formula"]
|
|
4910
4834
|
];
|
|
4911
|
-
var
|
|
4835
|
+
var hex2 = (c, fallback) => `#${(c?.rgb ?? fallback).slice(-6)}`;
|
|
4912
4836
|
var argb = (css) => ({ rgb: `FF${css.replace("#", "").toUpperCase()}` });
|
|
4913
4837
|
function point(ctx, label, types, initial, color) {
|
|
4914
4838
|
const type = select(
|
|
@@ -4947,7 +4871,7 @@ var loadPoint = (p, cfvo, color) => {
|
|
|
4947
4871
|
p.value.value = cfvo.value ?? "";
|
|
4948
4872
|
p.type.dispatchEvent(new Event("change"));
|
|
4949
4873
|
}
|
|
4950
|
-
if (color) p.color.value =
|
|
4874
|
+
if (color) p.color.value = hex2(color, "000000");
|
|
4951
4875
|
};
|
|
4952
4876
|
function valuesPanel(ctx) {
|
|
4953
4877
|
const style = select(
|
|
@@ -5048,7 +4972,7 @@ function valuesPanel(ctx) {
|
|
|
5048
4972
|
style.value = "dataBar";
|
|
5049
4973
|
loadPoint(min, rule.min);
|
|
5050
4974
|
loadPoint(max, rule.max);
|
|
5051
|
-
bar.value =
|
|
4975
|
+
bar.value = hex2(rule.color, "638EC6");
|
|
5052
4976
|
} else if (rule.type === "iconSet") {
|
|
5053
4977
|
style.value = "iconSet";
|
|
5054
4978
|
iconSet.value = rule.iconSet;
|
|
@@ -13918,7 +13842,9 @@ var visibleSheetIndices = (workbook) => workbook.sheets.flatMap((sheet, index) =
|
|
|
13918
13842
|
function renderTabs(doc, strip, options) {
|
|
13919
13843
|
const { workbook, active: active2, focusable } = options;
|
|
13920
13844
|
const previous = /* @__PURE__ */ new Map();
|
|
13921
|
-
for (const node of [...strip.children].filter(
|
|
13845
|
+
for (const node of [...strip.children].filter(
|
|
13846
|
+
(node2) => node2.classList.contains("xst-tab")
|
|
13847
|
+
))
|
|
13922
13848
|
if (node.dataset.sheet !== void 0) previous.set(node.dataset.sheet, node);
|
|
13923
13849
|
const tabs2 = visibleSheetIndices(workbook).map((index) => {
|
|
13924
13850
|
const sheet = workbook.sheets[index];
|
|
@@ -14395,7 +14321,9 @@ function showTabKeyTips(root, select2) {
|
|
|
14395
14321
|
active?.();
|
|
14396
14322
|
const file = root.fileButton();
|
|
14397
14323
|
const targets = file ? [{ key: "F", element: file, activate: () => file.click() }] : [];
|
|
14398
|
-
for (const panel3 of [...root.children].filter(
|
|
14324
|
+
for (const panel3 of [...root.children].filter(
|
|
14325
|
+
(node) => node.classList.contains("ribbon-panel")
|
|
14326
|
+
)) {
|
|
14399
14327
|
const id = panel3.dataset.tab ?? "";
|
|
14400
14328
|
const tab = tabButton(root, id);
|
|
14401
14329
|
if (!tab || isTabHidden(panel3)) continue;
|
|
@@ -14442,7 +14370,9 @@ function applyRibbonVisibility(root, isHidden) {
|
|
|
14442
14370
|
stack.toggleAttribute(HIDDEN, empty(stack));
|
|
14443
14371
|
for (const group of root.querySelectorAll(".ribbon-group"))
|
|
14444
14372
|
group.toggleAttribute(HIDDEN, empty(group));
|
|
14445
|
-
for (const panel3 of [...root.children].filter(
|
|
14373
|
+
for (const panel3 of [...root.children].filter(
|
|
14374
|
+
(node) => node.classList.contains("ribbon-panel")
|
|
14375
|
+
))
|
|
14446
14376
|
setTabHidden(root, panel3.dataset.tab ?? "", "custom", empty(panel3));
|
|
14447
14377
|
}
|
|
14448
14378
|
|
|
@@ -14530,7 +14460,13 @@ function createRibbon(ctx, handlers) {
|
|
|
14530
14460
|
let tabs2 = [];
|
|
14531
14461
|
let stopOverflow = () => {
|
|
14532
14462
|
};
|
|
14533
|
-
|
|
14463
|
+
let addIns = [];
|
|
14464
|
+
const syncAddIns = () => syncRibbonAddIns(root, addIns, { panelClass: "ribbon-panel" });
|
|
14465
|
+
const panels = () => [
|
|
14466
|
+
...[...root.children].filter(
|
|
14467
|
+
(node) => node.classList.contains("ribbon-panel")
|
|
14468
|
+
)
|
|
14469
|
+
];
|
|
14534
14470
|
const panelFor = (id) => panels().find((panel3) => panel3.dataset.tab === id);
|
|
14535
14471
|
const select2 = (id) => {
|
|
14536
14472
|
const panel3 = panelFor(id);
|
|
@@ -14566,6 +14502,7 @@ function createRibbon(ctx, handlers) {
|
|
|
14566
14502
|
}
|
|
14567
14503
|
root.append(panel3);
|
|
14568
14504
|
}
|
|
14505
|
+
syncAddIns();
|
|
14569
14506
|
refresh();
|
|
14570
14507
|
stopOverflow = attachRibbonOverflow(root);
|
|
14571
14508
|
};
|
|
@@ -14589,6 +14526,14 @@ function createRibbon(ctx, handlers) {
|
|
|
14589
14526
|
refresh,
|
|
14590
14527
|
rebuild: build,
|
|
14591
14528
|
selectTab: select2,
|
|
14529
|
+
setAddIns: (next) => {
|
|
14530
|
+
addIns = next;
|
|
14531
|
+
const before = root.querySelector("[data-add-in]");
|
|
14532
|
+
syncAddIns();
|
|
14533
|
+
if (root.querySelector("[data-add-in]") === before) return;
|
|
14534
|
+
stopOverflow();
|
|
14535
|
+
stopOverflow = attachRibbonOverflow(root);
|
|
14536
|
+
},
|
|
14592
14537
|
activeTab: () => root.selected || void 0,
|
|
14593
14538
|
showKeyTips: () => {
|
|
14594
14539
|
root.focusTab();
|
|
@@ -16017,11 +15962,13 @@ var XlsxEditorElement = class extends XlsxEditorApi {
|
|
|
16017
15962
|
return XLSX_EDITOR_ATTRIBUTES;
|
|
16018
15963
|
}
|
|
16019
15964
|
shell;
|
|
15965
|
+
addIns = [];
|
|
16020
15966
|
connectedCallback() {
|
|
16021
15967
|
if (this.shell) return;
|
|
16022
15968
|
this.shell = buildShell(this.core);
|
|
16023
15969
|
this.chrome = this.shell.chrome;
|
|
16024
15970
|
this.openShare = () => this.shell?.backstage.open("share");
|
|
15971
|
+
if (this.addIns.length) this.shell.ribbon.setAddIns(this.addIns);
|
|
16025
15972
|
this.core.requestRender();
|
|
16026
15973
|
}
|
|
16027
15974
|
attributeChangedCallback(name, _old, value) {
|
|
@@ -16103,6 +16050,17 @@ var XlsxEditorElement = class extends XlsxEditorApi {
|
|
|
16103
16050
|
this.core.hiddenActions = [...value ?? []];
|
|
16104
16051
|
this.core.requestRender();
|
|
16105
16052
|
}
|
|
16053
|
+
/**
|
|
16054
|
+
* Tabs a host adds after Excel's own, as an Office add-in does. Each command runs its `run`
|
|
16055
|
+
* callback and dispatches `office-ribbon-add-in` (`{ tab, command }`) from the editor.
|
|
16056
|
+
*/
|
|
16057
|
+
get ribbonAddIns() {
|
|
16058
|
+
return this.addIns;
|
|
16059
|
+
}
|
|
16060
|
+
set ribbonAddIns(value) {
|
|
16061
|
+
this.addIns = value ?? [];
|
|
16062
|
+
this.shell?.ribbon.setAddIns(this.addIns);
|
|
16063
|
+
}
|
|
16106
16064
|
/** The open workbook model, or null. Assigning one shows it with a fresh undo history. */
|
|
16107
16065
|
get workbook() {
|
|
16108
16066
|
return this.core.workbook ?? null;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ooxml-ui",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.0",
|
|
4
4
|
"description": "Shared, format-neutral web components and styles for the Office viewers (Word, PowerPoint, Excel)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"custom-elements",
|
|
@@ -146,7 +146,7 @@
|
|
|
146
146
|
"dompurify": "^3.4.16",
|
|
147
147
|
"emf-converter": "4.11.2",
|
|
148
148
|
"lit": "^3.3.3",
|
|
149
|
-
"ooxml-core": "^1.
|
|
149
|
+
"ooxml-core": "^1.8.0",
|
|
150
150
|
"opentype.js": "^2.0.0",
|
|
151
151
|
"prosemirror-collab": "^1.3.1",
|
|
152
152
|
"prosemirror-commands": "^1.7.2",
|
|
@@ -166,6 +166,7 @@
|
|
|
166
166
|
"@types/three": "^0.186.0",
|
|
167
167
|
"ai": "^7.0.127",
|
|
168
168
|
"fake-indexeddb": "^6.2.5",
|
|
169
|
+
"happy-dom": "^20.14.5",
|
|
169
170
|
"jsdom": "^30.1.2",
|
|
170
171
|
"jszip": "^3.10.2",
|
|
171
172
|
"three": "^0.186.1",
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A*-based orthogonal path search and path simplification.
|
|
3
|
-
*
|
|
4
|
-
* Pure (no framework imports). Deterministic - no Math.random / Date.
|
|
5
|
-
*/
|
|
6
|
-
import type { RouterPoint, RouterRect } from './connector-router-types.js';
|
|
7
|
-
/**
|
|
8
|
-
* Run A* over the navigation graph to find the shortest orthogonal path from
|
|
9
|
-
* `start` to `end` that avoids all `inflated` obstacle rectangles.
|
|
10
|
-
*
|
|
11
|
-
* Returns an array of waypoints (possibly including intermediate bend points
|
|
12
|
-
* when L-shaped edges are taken). Falls back to `[start, end]` when no path is
|
|
13
|
-
* found within {@link MAX_ASTAR_ITERATIONS}.
|
|
14
|
-
*/
|
|
15
|
-
export declare function aStarOrthogonal(nodes: ReadonlyArray<RouterPoint>, start: RouterPoint, end: RouterPoint, inflated: ReadonlyArray<RouterRect>): RouterPoint[];
|
|
16
|
-
/**
|
|
17
|
-
* Remove collinear intermediate waypoints from a path.
|
|
18
|
-
*
|
|
19
|
-
* A waypoint is dropped when the previous and next waypoints are collinear on
|
|
20
|
-
* both axes with it (three consecutive collinear points). Every directional
|
|
21
|
-
* change is preserved.
|
|
22
|
-
*/
|
|
23
|
-
export declare function simplifyPath(points: ReadonlyArray<RouterPoint>): RouterPoint[];
|
|
24
|
-
//# sourceMappingURL=connector-router-astar.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"connector-router-astar.d.ts","sourceRoot":"","sources":["../../../src/pptx/render/connector-router-astar.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAKxE;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC9B,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,EACjC,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,WAAW,EAChB,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,GACjC,WAAW,EAAE,CAkKf;AAMD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,WAAW,EAAE,CAuB9E"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Graph-building helpers for the orthogonal connector router.
|
|
3
|
-
*
|
|
4
|
-
* Provides geometry primitives, collision detection, and navigation-graph
|
|
5
|
-
* construction used by the A* search. Pure (no framework imports).
|
|
6
|
-
*/
|
|
7
|
-
import type { RouterPoint, RouterRect } from './connector-router-types.js';
|
|
8
|
-
export { PADDING_DEFAULT } from './connector-router-types.js';
|
|
9
|
-
/** Expand a rect by `pad` pixels on every side. Returns a new rect. */
|
|
10
|
-
export declare function inflateRect(r: RouterRect, pad: number): RouterRect;
|
|
11
|
-
/** Return true when point `p` lies inside (or on the border of) `r`. */
|
|
12
|
-
export declare function pointInRect(p: RouterPoint, r: RouterRect): boolean;
|
|
13
|
-
/**
|
|
14
|
-
* Return true when the axis-aligned segment `a→b` intersects rectangle `r`.
|
|
15
|
-
*
|
|
16
|
-
* Only horizontal and vertical segments are handled exactly; diagonal segments
|
|
17
|
-
* are treated as intersecting (safe / conservative fallback).
|
|
18
|
-
*/
|
|
19
|
-
export declare function segmentIntersectsRect(a: RouterPoint, b: RouterPoint, r: RouterRect): boolean;
|
|
20
|
-
/**
|
|
21
|
-
* Return true when the direct segment `start→end` is clear of all inflated
|
|
22
|
-
* obstacle rectangles.
|
|
23
|
-
*/
|
|
24
|
-
export declare function directPathClear(start: RouterPoint, end: RouterPoint, inflated: ReadonlyArray<RouterRect>): boolean;
|
|
25
|
-
/** Manhattan-distance heuristic for A*. */
|
|
26
|
-
export declare function heuristic(a: RouterPoint, b: RouterPoint): number;
|
|
27
|
-
/** Stable string key for a point (rounded to nearest pixel). Used as Map keys. */
|
|
28
|
-
export declare function pointKey(p: RouterPoint): string;
|
|
29
|
-
/**
|
|
30
|
-
* Build the set of candidate navigation nodes for A*:
|
|
31
|
-
* - Start and end points.
|
|
32
|
-
* - Corners of each inflated obstacle (with a small clearance margin).
|
|
33
|
-
* - Orthogonal projections of every node onto start/end rows and columns.
|
|
34
|
-
*
|
|
35
|
-
* Nodes that fall inside an obstacle or outside the canvas are discarded.
|
|
36
|
-
*/
|
|
37
|
-
export declare function buildGraphNodes(start: RouterPoint, end: RouterPoint, inflated: ReadonlyArray<RouterRect>, canvasWidth: number, canvasHeight: number): RouterPoint[];
|
|
38
|
-
//# sourceMappingURL=connector-router-graph.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"connector-router-graph.d.ts","sourceRoot":"","sources":["../../../src/pptx/render/connector-router-graph.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAM3D,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAOlE;AAED,wEAAwE;AACxE,wBAAgB,WAAW,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAElE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAyB5F;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC9B,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,WAAW,EAChB,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,GACjC,OAAO,CAOT;AAED,2CAA2C;AAC3C,wBAAgB,SAAS,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,MAAM,CAEhE;AAED,kFAAkF;AAClF,wBAAgB,QAAQ,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAE/C;AAMD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC9B,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,WAAW,EAChB,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,EACnC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GAClB,WAAW,EAAE,CAqDf"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type { PaintButton, PaintDialog, PaintInput } from './viewer-paint-dialog.js';
|
|
2
|
-
/** Format Shape fields: Visio's Fill, Line and Effects sections over the format-shape edit. */
|
|
3
|
-
export declare const FORMAT_SHAPE_FIELDS: {
|
|
4
|
-
readonly Fill: readonly [readonly ['fillColor', 'Color', 'color'], readonly ['fillTransparency', 'Transparency (%)', 'percent']];
|
|
5
|
-
readonly Line: readonly [readonly ['lineColor', 'Color', 'color'], readonly ['lineWeight', 'Width (pt)', 'points'], readonly ['linePattern', 'Dash type', 'pattern'], readonly ['lineTransparency', 'Transparency (%)', 'percent']];
|
|
6
|
-
readonly Effects: readonly [readonly ['shadow', 'Shadow', 'shadow'], readonly ['glowSize', 'Glow size (pt)', 'points'], readonly ['glowColor', 'Glow color', 'color'], readonly ['glowTransparency', 'Glow transparency (%)', 'percent'], readonly ['softEdges', 'Soft edges size (pt)', 'points'], readonly ['reflectionSize', 'Reflection size (%)', 'percent'], readonly ['reflectionTransparency', 'Reflection transparency (%)', 'percent'], readonly ['reflectionDistance', 'Reflection distance (pt)', 'points'], readonly ['reflectionBlur', 'Reflection blur (pt)', 'points']];
|
|
7
|
-
};
|
|
8
|
-
type Section = keyof typeof FORMAT_SHAPE_FIELDS;
|
|
9
|
-
export type FormatShapeField = (typeof FORMAT_SHAPE_FIELDS)[Section][number][0];
|
|
10
|
-
export type FormatShapeKind = (typeof FORMAT_SHAPE_FIELDS)[Section][number][2];
|
|
11
|
-
export declare const FORMAT_SHAPE_UNSUPPORTED = "Arrows, gradients, bevel and 3-D rotation are not available in this pane: arrowheads have no edit command yet, and bevel and 3-D rotation need a 3-D renderer.";
|
|
12
|
-
/** The Format Shape dialog, built from shared `office-ui-*` controls. */
|
|
13
|
-
export declare function createFormatShapeDialog(doc: Document): {
|
|
14
|
-
dialog: PaintDialog;
|
|
15
|
-
fields: Map<"fillColor" | "fillTransparency" | "glowColor" | "glowSize" | "glowTransparency" | "lineColor" | "linePattern" | "lineTransparency" | "lineWeight" | "reflectionBlur" | "reflectionDistance" | "reflectionSize" | "reflectionTransparency" | "shadow" | "softEdges", PaintInput>;
|
|
16
|
-
kinds: Map<"fillColor" | "fillTransparency" | "glowColor" | "glowSize" | "glowTransparency" | "lineColor" | "linePattern" | "lineTransparency" | "lineWeight" | "reflectionBlur" | "reflectionDistance" | "reflectionSize" | "reflectionTransparency" | "shadow" | "softEdges", "color" | "pattern" | "percent" | "points" | "shadow">;
|
|
17
|
-
error: HTMLParagraphElement;
|
|
18
|
-
apply: PaintButton;
|
|
19
|
-
cancel: PaintButton;
|
|
20
|
-
};
|
|
21
|
-
export {};
|