ooxml-core 0.19.0 → 0.21.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 +21 -43
- package/dist/automation/index.cjs +195 -193
- package/dist/automation/index.mjs +195 -193
- package/dist/chart/axis-nice.d.ts +97 -0
- package/dist/chart/axis-nice.d.ts.map +1 -0
- package/dist/chart/histogram-binning.d.ts +40 -0
- package/dist/chart/histogram-binning.d.ts.map +1 -0
- package/dist/chart/index.cjs +167 -0
- package/dist/chart/index.d.ts +2 -0
- package/dist/chart/index.d.ts.map +1 -1
- package/dist/chart/index.mjs +162 -1
- package/dist/diagram/index.cjs +2 -1
- package/dist/diagram/index.mjs +2 -1
- package/dist/docx/attr-units.d.ts +11 -0
- package/dist/docx/attr-units.d.ts.map +1 -0
- package/dist/docx/block-parser.d.ts.map +1 -1
- package/dist/docx/case-transform.d.ts +9 -0
- package/dist/docx/case-transform.d.ts.map +1 -0
- package/dist/docx/embedded.cjs +2 -1
- package/dist/docx/embedded.mjs +2 -1
- package/dist/docx/index.cjs +289 -3
- package/dist/docx/index.d.ts +5 -0
- package/dist/docx/index.d.ts.map +1 -1
- package/dist/docx/index.mjs +269 -4
- package/dist/docx/layout/adapter.d.ts.map +1 -1
- package/dist/docx/layout/table-layout.d.ts.map +1 -1
- package/dist/docx/load/index.cjs +2 -1
- package/dist/docx/load/index.mjs +2 -1
- package/dist/docx/page-setup-model.d.ts +29 -0
- package/dist/docx/page-setup-model.d.ts.map +1 -0
- package/dist/docx/page-size.d.ts +11 -0
- package/dist/docx/page-size.d.ts.map +1 -0
- package/dist/docx/parse.d.ts.map +1 -1
- package/dist/docx/section-edit.d.ts +19 -0
- package/dist/docx/section-edit.d.ts.map +1 -0
- package/dist/docx/tab-stops.d.ts.map +1 -1
- package/dist/docx/ui/backstage-focus.d.ts +6 -0
- package/dist/docx/ui/backstage-focus.d.ts.map +1 -0
- package/dist/docx/ui/break-note-schema.d.ts +11 -0
- package/dist/docx/ui/break-note-schema.d.ts.map +1 -0
- package/dist/docx/ui/collaboration-authority.d.ts +31 -0
- package/dist/docx/ui/collaboration-authority.d.ts.map +1 -0
- package/dist/docx/ui/collaboration-identity.d.ts +8 -0
- package/dist/docx/ui/collaboration-identity.d.ts.map +1 -0
- package/dist/docx/ui/collaboration-protocol.d.ts +25 -0
- package/dist/docx/ui/collaboration-protocol.d.ts.map +1 -0
- package/dist/docx/ui/collaboration.d.ts +30 -0
- package/dist/docx/ui/collaboration.d.ts.map +1 -0
- package/dist/docx/ui/defined.d.ts +3 -0
- package/dist/docx/ui/defined.d.ts.map +1 -0
- package/dist/docx/ui/dirty-state.d.ts +9 -0
- package/dist/docx/ui/dirty-state.d.ts.map +1 -0
- package/dist/docx/ui/field-guard.d.ts +21 -0
- package/dist/docx/ui/field-guard.d.ts.map +1 -0
- package/dist/docx/ui/header-footer-history.d.ts +15 -0
- package/dist/docx/ui/header-footer-history.d.ts.map +1 -0
- package/dist/docx/ui/index.cjs +2380 -0
- package/dist/docx/ui/index.d.ts +30 -0
- package/dist/docx/ui/index.d.ts.map +1 -0
- package/dist/docx/ui/index.mjs +2317 -0
- package/dist/docx/ui/inline-content-schema.d.ts +15 -0
- package/dist/docx/ui/inline-content-schema.d.ts.map +1 -0
- package/dist/docx/ui/ligature-style.d.ts +4 -0
- package/dist/docx/ui/ligature-style.d.ts.map +1 -0
- package/dist/docx/ui/node-numbering.d.ts +8 -0
- package/dist/docx/ui/node-numbering.d.ts.map +1 -0
- package/dist/docx/ui/review-schema.d.ts +90 -0
- package/dist/docx/ui/review-schema.d.ts.map +1 -0
- package/dist/docx/ui/ribbon-action-ids.d.ts +26 -0
- package/dist/docx/ui/ribbon-action-ids.d.ts.map +1 -0
- package/dist/docx/ui/ribbon-colors.d.ts +3 -0
- package/dist/docx/ui/ribbon-colors.d.ts.map +1 -0
- package/dist/docx/ui/ribbon-legacy-labels.d.ts +6 -0
- package/dist/docx/ui/ribbon-legacy-labels.d.ts.map +1 -0
- package/dist/docx/ui/run-compare.d.ts +5 -0
- package/dist/docx/ui/run-compare.d.ts.map +1 -0
- package/dist/docx/ui/run-extra-mark.d.ts +17 -0
- package/dist/docx/ui/run-extra-mark.d.ts.map +1 -0
- package/dist/docx/ui/schema-marks.d.ts +273 -0
- package/dist/docx/ui/schema-marks.d.ts.map +1 -0
- package/dist/docx/ui/smartart-theme.d.ts +21 -0
- package/dist/docx/ui/smartart-theme.d.ts.map +1 -0
- package/dist/docx/ui/table-render.d.ts +24 -0
- package/dist/docx/ui/table-render.d.ts.map +1 -0
- package/dist/docx/ui/table-visuals.d.ts +3 -0
- package/dist/docx/ui/table-visuals.d.ts.map +1 -0
- package/dist/docx/ui/theme/css-vars.d.ts +6 -0
- package/dist/docx/ui/theme/css-vars.d.ts.map +1 -0
- package/dist/docx/ui/theme/defaults.d.ts +12 -0
- package/dist/docx/ui/theme/defaults.d.ts.map +1 -0
- package/dist/docx/ui/theme/element.d.ts +9 -0
- package/dist/docx/ui/theme/element.d.ts.map +1 -0
- package/dist/docx/ui/theme/index.d.ts +5 -0
- package/dist/docx/ui/theme/index.d.ts.map +1 -0
- package/dist/docx/ui/theme/types.d.ts +42 -0
- package/dist/docx/ui/theme/types.d.ts.map +1 -0
- package/dist/docx/ui/word-count.d.ts +3 -0
- package/dist/docx/ui/word-count.d.ts.map +1 -0
- package/dist/docx/ui/zoom-fit.d.ts +16 -0
- package/dist/docx/ui/zoom-fit.d.ts.map +1 -0
- package/dist/docx/validate-paragraph.d.ts.map +1 -1
- package/dist/index.cjs +169 -1
- package/dist/index.mjs +169 -1
- package/dist/math/index.cjs +2 -1
- package/dist/math/index.mjs +2 -1
- package/dist/opc/index.cjs +2 -1
- package/dist/opc/index.mjs +2 -1
- package/dist/pptx/automation/index.cjs +1572 -863
- package/dist/pptx/automation/index.d.ts +4 -3
- package/dist/pptx/automation/index.d.ts.map +1 -1
- package/dist/pptx/automation/index.mjs +1572 -863
- package/dist/pptx/chunks/color-ref-BM66NGFP.d.ts +42 -0
- package/dist/pptx/chunks/color-ref-BM66NGFP.d.ts.map +1 -0
- package/dist/pptx/chunks/{index-D0yGoLyw.d.ts → index-CcQTCBnT.d.ts} +63 -479
- package/dist/pptx/chunks/index-CcQTCBnT.d.ts.map +1 -0
- package/dist/pptx/chunks/{index-BtBj3VG1.d.ts → index-DHoPgFcH.d.ts} +529 -11
- package/dist/pptx/chunks/index-DHoPgFcH.d.ts.map +1 -0
- package/dist/pptx/chunks/{text-operations-GuisjlbR.d.ts → text-operations-BzdehTeY.d.ts} +50 -51
- package/dist/pptx/chunks/text-operations-BzdehTeY.d.ts.map +1 -0
- package/dist/pptx/cli/index.cjs +1204 -489
- package/dist/pptx/cli/index.d.ts +1 -1
- package/dist/pptx/cli/index.mjs +1204 -489
- package/dist/pptx/converter/index.cjs +8 -5
- package/dist/pptx/converter/index.d.ts +1 -1
- package/dist/pptx/converter/index.mjs +8 -5
- package/dist/pptx/index.cjs +1699 -989
- package/dist/pptx/index.d.ts +5 -4
- package/dist/pptx/index.mjs +1698 -990
- package/dist/pptx/ui/index.cjs +510 -0
- package/dist/pptx/ui/index.d.ts +80 -0
- package/dist/pptx/ui/index.d.ts.map +1 -0
- package/dist/pptx/ui/index.mjs +499 -0
- package/dist/visio/index.cjs +2 -1
- package/dist/visio/index.mjs +2 -1
- package/dist/visio/ui/contract.d.ts +33 -0
- package/dist/visio/ui/contract.d.ts.map +1 -0
- package/dist/visio/ui/demo-document.d.ts +4 -0
- package/dist/visio/ui/demo-document.d.ts.map +1 -0
- package/dist/visio/ui/diagnostics.d.ts +10 -0
- package/dist/visio/ui/diagnostics.d.ts.map +1 -0
- package/dist/visio/ui/document-history.d.ts +43 -0
- package/dist/visio/ui/document-history.d.ts.map +1 -0
- package/dist/visio/ui/document-text-search.d.ts +45 -0
- package/dist/visio/ui/document-text-search.d.ts.map +1 -0
- package/dist/visio/ui/edit-commands.d.ts +4 -0
- package/dist/visio/ui/edit-commands.d.ts.map +1 -0
- package/dist/visio/ui/edit-error.d.ts +5 -0
- package/dist/visio/ui/edit-error.d.ts.map +1 -0
- package/dist/visio/ui/foreign-vector-budget.d.ts +25 -0
- package/dist/visio/ui/foreign-vector-budget.d.ts.map +1 -0
- package/dist/visio/ui/index.cjs +1523 -0
- package/dist/visio/ui/index.d.ts +12 -0
- package/dist/visio/ui/index.d.ts.map +1 -0
- package/dist/visio/ui/index.mjs +1498 -0
- package/dist/visio/ui/scene-details.d.ts +8 -0
- package/dist/visio/ui/scene-details.d.ts.map +1 -0
- package/dist/visio/ui/scene-validation.d.ts +5 -0
- package/dist/visio/ui/scene-validation.d.ts.map +1 -0
- package/dist/visio/ui/snapshot-scene.d.ts +9 -0
- package/dist/visio/ui/snapshot-scene.d.ts.map +1 -0
- package/dist/xlsx/index.cjs +100 -98
- package/dist/xlsx/index.mjs +100 -98
- package/dist/xlsx/load/index.cjs +68 -66
- package/dist/xlsx/load/index.mjs +68 -66
- package/dist/xlsx/ui/backstage/templates.d.ts +16 -0
- package/dist/xlsx/ui/backstage/templates.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/alignment.d.ts +4 -0
- package/dist/xlsx/ui/commands/alignment.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/cells.d.ts +3 -0
- package/dist/xlsx/ui/commands/cells.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/cf-presets.d.ts +15 -0
- package/dist/xlsx/ui/commands/cf-presets.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/clipboard.d.ts +22 -0
- package/dist/xlsx/ui/commands/clipboard.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/contextual.d.ts +13 -0
- package/dist/xlsx/ui/commands/contextual.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/data.d.ts +3 -0
- package/dist/xlsx/ui/commands/data.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/editing.d.ts +13 -0
- package/dist/xlsx/ui/commands/editing.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/font.d.ts +21 -0
- package/dist/xlsx/ui/commands/font.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/formulas.d.ts +15 -0
- package/dist/xlsx/ui/commands/formulas.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/i18n/core-features.d.ts +3 -0
- package/dist/xlsx/ui/commands/i18n/core-features.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/i18n/format-cells.d.ts +3 -0
- package/dist/xlsx/ui/commands/i18n/format-cells.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/i18n/index.d.ts +4 -0
- package/dist/xlsx/ui/commands/i18n/index.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/i18n/messages.d.ts +3 -0
- package/dist/xlsx/ui/commands/i18n/messages.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/i18n/navigation.d.ts +3 -0
- package/dist/xlsx/ui/commands/i18n/navigation.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/i18n/ribbon-home.d.ts +3 -0
- package/dist/xlsx/ui/commands/i18n/ribbon-home.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/i18n/ribbon-tabs.d.ts +3 -0
- package/dist/xlsx/ui/commands/i18n/ribbon-tabs.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/i18n/rules.d.ts +3 -0
- package/dist/xlsx/ui/commands/i18n/rules.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/i18n/tools.d.ts +3 -0
- package/dist/xlsx/ui/commands/i18n/tools.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/i18n/types.d.ts +5 -0
- package/dist/xlsx/ui/commands/i18n/types.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/icons.d.ts +4 -0
- package/dist/xlsx/ui/commands/icons.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/number.d.ts +11 -0
- package/dist/xlsx/ui/commands/number.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/page-layout.d.ts +10 -0
- package/dist/xlsx/ui/commands/page-layout.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/select-special.d.ts +12 -0
- package/dist/xlsx/ui/commands/select-special.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/sort-filter.d.ts +3 -0
- package/dist/xlsx/ui/commands/sort-filter.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/style-presets.d.ts +21 -0
- package/dist/xlsx/ui/commands/style-presets.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/util.d.ts +59 -0
- package/dist/xlsx/ui/commands/util.d.ts.map +1 -0
- package/dist/xlsx/ui/commands.d.ts +36 -0
- package/dist/xlsx/ui/commands.d.ts.map +1 -0
- package/dist/xlsx/ui/context-menu/items.d.ts +36 -0
- package/dist/xlsx/ui/context-menu/items.d.ts.map +1 -0
- package/dist/xlsx/ui/context.d.ts +65 -0
- package/dist/xlsx/ui/context.d.ts.map +1 -0
- package/dist/xlsx/ui/dialogs/format-cells/number-categories.d.ts +28 -0
- package/dist/xlsx/ui/dialogs/format-cells/number-categories.d.ts.map +1 -0
- package/dist/xlsx/ui/dialogs/format-cells/types.d.ts +40 -0
- package/dist/xlsx/ui/dialogs/format-cells/types.d.ts.map +1 -0
- package/dist/xlsx/ui/dialogs/insert-chart-model.d.ts +9 -0
- package/dist/xlsx/ui/dialogs/insert-chart-model.d.ts.map +1 -0
- package/dist/xlsx/ui/dialogs.d.ts +9 -0
- package/dist/xlsx/ui/dialogs.d.ts.map +1 -0
- package/dist/xlsx/ui/dirty-state.d.ts +9 -0
- package/dist/xlsx/ui/dirty-state.d.ts.map +1 -0
- package/dist/xlsx/ui/formula-bar/name-resolve.d.ts +23 -0
- package/dist/xlsx/ui/formula-bar/name-resolve.d.ts.map +1 -0
- package/dist/xlsx/ui/grid/cell-items.d.ts +42 -0
- package/dist/xlsx/ui/grid/cell-items.d.ts.map +1 -0
- package/dist/xlsx/ui/grid/cell-paint.d.ts +26 -0
- package/dist/xlsx/ui/grid/cell-paint.d.ts.map +1 -0
- package/dist/xlsx/ui/grid/edit-bridge.d.ts +47 -0
- package/dist/xlsx/ui/grid/edit-bridge.d.ts.map +1 -0
- package/dist/xlsx/ui/grid/geometry.d.ts +76 -0
- package/dist/xlsx/ui/grid/geometry.d.ts.map +1 -0
- package/dist/xlsx/ui/grid/icon-sets.d.ts +3 -0
- package/dist/xlsx/ui/grid/icon-sets.d.ts.map +1 -0
- package/dist/xlsx/ui/grid/number-fit.d.ts +3 -0
- package/dist/xlsx/ui/grid/number-fit.d.ts.map +1 -0
- package/dist/xlsx/ui/grid/selection-ops.d.ts +32 -0
- package/dist/xlsx/ui/grid/selection-ops.d.ts.map +1 -0
- package/dist/xlsx/ui/grid/view-cache.d.ts +15 -0
- package/dist/xlsx/ui/grid/view-cache.d.ts.map +1 -0
- package/dist/xlsx/ui/index.cjs +28484 -0
- package/dist/xlsx/ui/index.d.ts +56 -0
- package/dist/xlsx/ui/index.d.ts.map +1 -0
- package/dist/xlsx/ui/index.mjs +28290 -0
- package/dist/xlsx/ui/locales/de/commands.d.ts +2 -0
- package/dist/xlsx/ui/locales/de/commands.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/de/grid.d.ts +2 -0
- package/dist/xlsx/ui/locales/de/grid.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/de/index.d.ts +2 -0
- package/dist/xlsx/ui/locales/de/index.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/de/shell.d.ts +2 -0
- package/dist/xlsx/ui/locales/de/shell.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/en/commands.d.ts +2 -0
- package/dist/xlsx/ui/locales/en/commands.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/en/grid.d.ts +2 -0
- package/dist/xlsx/ui/locales/en/grid.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/en/index.d.ts +2 -0
- package/dist/xlsx/ui/locales/en/index.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/en/shell.d.ts +2 -0
- package/dist/xlsx/ui/locales/en/shell.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/es/commands.d.ts +2 -0
- package/dist/xlsx/ui/locales/es/commands.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/es/grid.d.ts +2 -0
- package/dist/xlsx/ui/locales/es/grid.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/es/index.d.ts +2 -0
- package/dist/xlsx/ui/locales/es/index.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/es/shell.d.ts +2 -0
- package/dist/xlsx/ui/locales/es/shell.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/fr/commands.d.ts +2 -0
- package/dist/xlsx/ui/locales/fr/commands.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/fr/grid.d.ts +2 -0
- package/dist/xlsx/ui/locales/fr/grid.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/fr/index.d.ts +2 -0
- package/dist/xlsx/ui/locales/fr/index.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/fr/shell.d.ts +2 -0
- package/dist/xlsx/ui/locales/fr/shell.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/merge.d.ts +7 -0
- package/dist/xlsx/ui/locales/merge.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/zh-CN/commands.d.ts +2 -0
- package/dist/xlsx/ui/locales/zh-CN/commands.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/zh-CN/grid.d.ts +2 -0
- package/dist/xlsx/ui/locales/zh-CN/grid.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/zh-CN/index.d.ts +2 -0
- package/dist/xlsx/ui/locales/zh-CN/index.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/zh-CN/shell.d.ts +2 -0
- package/dist/xlsx/ui/locales/zh-CN/shell.d.ts.map +1 -0
- package/dist/xlsx/ui/localization.d.ts +23 -0
- package/dist/xlsx/ui/localization.d.ts.map +1 -0
- package/dist/xlsx/ui/ribbon/icon-paths.d.ts +9 -0
- package/dist/xlsx/ui/ribbon/icon-paths.d.ts.map +1 -0
- package/dist/xlsx/ui/ribbon/parts.d.ts +88 -0
- package/dist/xlsx/ui/ribbon/parts.d.ts.map +1 -0
- package/dist/xlsx/ui/ribbon/tab-api.d.ts +21 -0
- package/dist/xlsx/ui/ribbon/tab-api.d.ts.map +1 -0
- package/dist/xlsx/ui/ribbon/tabs/review-view.d.ts +5 -0
- package/dist/xlsx/ui/ribbon/tabs/review-view.d.ts.map +1 -0
- package/dist/xlsx/ui/ribbon/tabs/theme-palette.d.ts +8 -0
- package/dist/xlsx/ui/ribbon/tabs/theme-palette.d.ts.map +1 -0
- package/dist/xlsx/ui/ribbon/tell-me.d.ts +16 -0
- package/dist/xlsx/ui/ribbon/tell-me.d.ts.map +1 -0
- package/dist/xlsx/ui/selection.d.ts +34 -0
- package/dist/xlsx/ui/selection.d.ts.map +1 -0
- package/dist/xlsx/ui/theme/css-vars.d.ts +6 -0
- package/dist/xlsx/ui/theme/css-vars.d.ts.map +1 -0
- package/dist/xlsx/ui/theme/defaults.d.ts +6 -0
- package/dist/xlsx/ui/theme/defaults.d.ts.map +1 -0
- package/dist/xlsx/ui/theme/element.d.ts +9 -0
- package/dist/xlsx/ui/theme/element.d.ts.map +1 -0
- package/dist/xlsx/ui/theme/types.d.ts +54 -0
- package/dist/xlsx/ui/theme/types.d.ts.map +1 -0
- package/dist/xml/index.cjs +2 -1
- package/dist/xml/index.mjs +2 -1
- package/package.json +42 -4
- package/dist/pptx/chunks/index-BtBj3VG1.d.ts.map +0 -1
- package/dist/pptx/chunks/index-D0yGoLyw.d.ts.map +0 -1
- package/dist/pptx/chunks/text-operations-GuisjlbR.d.ts.map +0 -1
|
@@ -0,0 +1,499 @@
|
|
|
1
|
+
// src/color/color-primitives.ts
|
|
2
|
+
function clampUnitInterval(value) {
|
|
3
|
+
return Math.min(1, Math.max(0, value));
|
|
4
|
+
}
|
|
5
|
+
function normalizeHexColor(value, fallback = "#111827") {
|
|
6
|
+
if (!value || value === "transparent") {
|
|
7
|
+
return fallback;
|
|
8
|
+
}
|
|
9
|
+
const candidate = value.startsWith("#") ? value : `#${value}`;
|
|
10
|
+
return /^#[0-9A-Fa-f]{6}$/.test(candidate) ? candidate : fallback;
|
|
11
|
+
}
|
|
12
|
+
function hexToRgbChannels(color) {
|
|
13
|
+
const normalized = color.replace("#", "");
|
|
14
|
+
if (!/^[0-9a-fA-F]{6}$/.test(normalized)) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
r: Number.parseInt(normalized.slice(0, 2), 16),
|
|
19
|
+
g: Number.parseInt(normalized.slice(2, 4), 16),
|
|
20
|
+
b: Number.parseInt(normalized.slice(4, 6), 16)
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function percentDivisorFor(text) {
|
|
24
|
+
return text.endsWith("%") ? 100 : 1e5;
|
|
25
|
+
}
|
|
26
|
+
function parseOoxmlPercent(value) {
|
|
27
|
+
const text = String(value ?? "").trim();
|
|
28
|
+
const divisor = percentDivisorFor(text);
|
|
29
|
+
const magnitude = Number.parseFloat(divisor === 100 ? text.slice(0, -1) : text);
|
|
30
|
+
if (!Number.isFinite(magnitude)) {
|
|
31
|
+
return void 0;
|
|
32
|
+
}
|
|
33
|
+
return magnitude / divisor;
|
|
34
|
+
}
|
|
35
|
+
function parseDrawingPercent(value) {
|
|
36
|
+
const parsed = parseOoxmlPercent(value);
|
|
37
|
+
return parsed === void 0 ? void 0 : clampUnitInterval(parsed);
|
|
38
|
+
}
|
|
39
|
+
function toHex(value) {
|
|
40
|
+
return Math.min(255, Math.max(0, Math.round(value))).toString(16).padStart(2, "0").toUpperCase();
|
|
41
|
+
}
|
|
42
|
+
function rgbToHsl(r, g, b) {
|
|
43
|
+
const rN = r / 255;
|
|
44
|
+
const gN = g / 255;
|
|
45
|
+
const bN = b / 255;
|
|
46
|
+
const cMax = Math.max(rN, gN, bN);
|
|
47
|
+
const cMin = Math.min(rN, gN, bN);
|
|
48
|
+
const delta = cMax - cMin;
|
|
49
|
+
const l = (cMax + cMin) / 2;
|
|
50
|
+
let s = 0;
|
|
51
|
+
if (delta !== 0) {
|
|
52
|
+
s = delta / (1 - Math.abs(2 * l - 1));
|
|
53
|
+
}
|
|
54
|
+
let h = 0;
|
|
55
|
+
if (delta !== 0) {
|
|
56
|
+
if (cMax === rN) {
|
|
57
|
+
h = 60 * ((gN - bN) / delta % 6);
|
|
58
|
+
} else if (cMax === gN) {
|
|
59
|
+
h = 60 * ((bN - rN) / delta + 2);
|
|
60
|
+
} else {
|
|
61
|
+
h = 60 * ((rN - gN) / delta + 4);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (h < 0) {
|
|
65
|
+
h += 360;
|
|
66
|
+
}
|
|
67
|
+
return { h, s: clampUnitInterval(s), l: clampUnitInterval(l) };
|
|
68
|
+
}
|
|
69
|
+
function hslToRgb(h, s, l) {
|
|
70
|
+
const sC = clampUnitInterval(s);
|
|
71
|
+
const lC = clampUnitInterval(l);
|
|
72
|
+
const hN = (h % 360 + 360) % 360;
|
|
73
|
+
const c = (1 - Math.abs(2 * lC - 1)) * sC;
|
|
74
|
+
const x = c * (1 - Math.abs(hN / 60 % 2 - 1));
|
|
75
|
+
const m = lC - c / 2;
|
|
76
|
+
let rP = 0;
|
|
77
|
+
let gP = 0;
|
|
78
|
+
let bP = 0;
|
|
79
|
+
if (hN < 60) {
|
|
80
|
+
rP = c;
|
|
81
|
+
gP = x;
|
|
82
|
+
bP = 0;
|
|
83
|
+
} else if (hN < 120) {
|
|
84
|
+
rP = x;
|
|
85
|
+
gP = c;
|
|
86
|
+
bP = 0;
|
|
87
|
+
} else if (hN < 180) {
|
|
88
|
+
rP = 0;
|
|
89
|
+
gP = c;
|
|
90
|
+
bP = x;
|
|
91
|
+
} else if (hN < 240) {
|
|
92
|
+
rP = 0;
|
|
93
|
+
gP = x;
|
|
94
|
+
bP = c;
|
|
95
|
+
} else if (hN < 300) {
|
|
96
|
+
rP = x;
|
|
97
|
+
gP = 0;
|
|
98
|
+
bP = c;
|
|
99
|
+
} else {
|
|
100
|
+
rP = c;
|
|
101
|
+
gP = 0;
|
|
102
|
+
bP = x;
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
r: Math.round((rP + m) * 255),
|
|
106
|
+
g: Math.round((gP + m) * 255),
|
|
107
|
+
b: Math.round((bP + m) * 255)
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function parseDrawingFraction(value) {
|
|
111
|
+
return parseOoxmlPercent(value);
|
|
112
|
+
}
|
|
113
|
+
function parseDrawingHueDegrees(value) {
|
|
114
|
+
const parsed = Number.parseFloat(String(value ?? "").trim());
|
|
115
|
+
if (!Number.isFinite(parsed)) {
|
|
116
|
+
return void 0;
|
|
117
|
+
}
|
|
118
|
+
return parsed / 6e4;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// src/color/color-linear.ts
|
|
122
|
+
function srgb255ToLinear(channel) {
|
|
123
|
+
const c = clampUnitInterval(channel / 255);
|
|
124
|
+
return c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
|
|
125
|
+
}
|
|
126
|
+
function linearToSrgb255(linear) {
|
|
127
|
+
const c = clampUnitInterval(linear);
|
|
128
|
+
return 255 * (c <= 31308e-7 ? c * 12.92 : 1.055 * c ** (1 / 2.4) - 0.055);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// src/pptx/core/color/color-transforms.ts
|
|
132
|
+
function applyDrawingColorTransforms(baseColor, colorNode) {
|
|
133
|
+
const rgb = hexToRgbChannels(baseColor);
|
|
134
|
+
if (!rgb) {
|
|
135
|
+
return baseColor;
|
|
136
|
+
}
|
|
137
|
+
let r = rgb.r;
|
|
138
|
+
let g = rgb.g;
|
|
139
|
+
let b = rgb.b;
|
|
140
|
+
const getVal = (key) => colorNode[key]?.["@_val"];
|
|
141
|
+
if (colorNode["a:gamma"] !== void 0) {
|
|
142
|
+
const out = applySrgbGammaEncode(r, g, b);
|
|
143
|
+
r = out.r;
|
|
144
|
+
g = out.g;
|
|
145
|
+
b = out.b;
|
|
146
|
+
}
|
|
147
|
+
if (colorNode["a:invGamma"] !== void 0) {
|
|
148
|
+
const out = applySrgbGammaDecode(r, g, b);
|
|
149
|
+
r = out.r;
|
|
150
|
+
g = out.g;
|
|
151
|
+
b = out.b;
|
|
152
|
+
}
|
|
153
|
+
if (colorNode["a:comp"] !== void 0) {
|
|
154
|
+
const hsl = rgbToHsl(r, g, b);
|
|
155
|
+
hsl.h = (hsl.h + 180) % 360;
|
|
156
|
+
const out = hslToRgb(hsl.h, hsl.s, hsl.l);
|
|
157
|
+
r = out.r;
|
|
158
|
+
g = out.g;
|
|
159
|
+
b = out.b;
|
|
160
|
+
}
|
|
161
|
+
if (colorNode["a:inv"] !== void 0) {
|
|
162
|
+
r = 255 - r;
|
|
163
|
+
g = 255 - g;
|
|
164
|
+
b = 255 - b;
|
|
165
|
+
}
|
|
166
|
+
if (colorNode["a:gray"] !== void 0) {
|
|
167
|
+
const gray = Math.round(0.299 * r + 0.587 * g + 0.114 * b);
|
|
168
|
+
r = gray;
|
|
169
|
+
g = gray;
|
|
170
|
+
b = gray;
|
|
171
|
+
}
|
|
172
|
+
const shade = parseDrawingPercent(getVal("a:shade"));
|
|
173
|
+
if (shade !== void 0) {
|
|
174
|
+
r = linearToSrgb255(srgb255ToLinear(r) * shade);
|
|
175
|
+
g = linearToSrgb255(srgb255ToLinear(g) * shade);
|
|
176
|
+
b = linearToSrgb255(srgb255ToLinear(b) * shade);
|
|
177
|
+
}
|
|
178
|
+
const tint = parseDrawingPercent(getVal("a:tint"));
|
|
179
|
+
if (tint !== void 0) {
|
|
180
|
+
r = linearToSrgb255(1 - (1 - srgb255ToLinear(r)) * tint);
|
|
181
|
+
g = linearToSrgb255(1 - (1 - srgb255ToLinear(g)) * tint);
|
|
182
|
+
b = linearToSrgb255(1 - (1 - srgb255ToLinear(b)) * tint);
|
|
183
|
+
}
|
|
184
|
+
const hslKeys = [
|
|
185
|
+
"a:hue",
|
|
186
|
+
"a:hueMod",
|
|
187
|
+
"a:hueOff",
|
|
188
|
+
"a:sat",
|
|
189
|
+
"a:satMod",
|
|
190
|
+
"a:satOff",
|
|
191
|
+
"a:lum",
|
|
192
|
+
"a:lumMod",
|
|
193
|
+
"a:lumOff"
|
|
194
|
+
];
|
|
195
|
+
const hasHsl = hslKeys.some((k) => colorNode[k] !== void 0);
|
|
196
|
+
if (hasHsl) {
|
|
197
|
+
const hsl = rgbToHsl(r, g, b);
|
|
198
|
+
const hueAbs = parseDrawingHueDegrees(getVal("a:hue"));
|
|
199
|
+
if (hueAbs !== void 0) {
|
|
200
|
+
hsl.h = (hueAbs % 360 + 360) % 360;
|
|
201
|
+
}
|
|
202
|
+
const hueMod = parseDrawingFraction(getVal("a:hueMod"));
|
|
203
|
+
if (hueMod !== void 0) {
|
|
204
|
+
hsl.h = (hsl.h * hueMod % 360 + 360) % 360;
|
|
205
|
+
}
|
|
206
|
+
const hueOff = parseDrawingHueDegrees(getVal("a:hueOff"));
|
|
207
|
+
if (hueOff !== void 0) {
|
|
208
|
+
hsl.h = ((hsl.h + hueOff) % 360 + 360) % 360;
|
|
209
|
+
}
|
|
210
|
+
const satAbs = parseDrawingFraction(getVal("a:sat"));
|
|
211
|
+
if (satAbs !== void 0) {
|
|
212
|
+
hsl.s = clampUnitInterval(satAbs);
|
|
213
|
+
}
|
|
214
|
+
const satMod = parseDrawingFraction(getVal("a:satMod"));
|
|
215
|
+
if (satMod !== void 0) {
|
|
216
|
+
hsl.s = clampUnitInterval(hsl.s * satMod);
|
|
217
|
+
}
|
|
218
|
+
const satOff = parseDrawingFraction(getVal("a:satOff"));
|
|
219
|
+
if (satOff !== void 0) {
|
|
220
|
+
hsl.s = clampUnitInterval(hsl.s + satOff);
|
|
221
|
+
}
|
|
222
|
+
const lumAbs = parseDrawingFraction(getVal("a:lum"));
|
|
223
|
+
if (lumAbs !== void 0) {
|
|
224
|
+
hsl.l = clampUnitInterval(lumAbs);
|
|
225
|
+
}
|
|
226
|
+
const lumMod = parseDrawingFraction(getVal("a:lumMod"));
|
|
227
|
+
if (lumMod !== void 0) {
|
|
228
|
+
hsl.l = clampUnitInterval(hsl.l * lumMod);
|
|
229
|
+
}
|
|
230
|
+
const lumOff = parseDrawingFraction(getVal("a:lumOff"));
|
|
231
|
+
if (lumOff !== void 0) {
|
|
232
|
+
hsl.l = clampUnitInterval(hsl.l + lumOff);
|
|
233
|
+
}
|
|
234
|
+
const out = hslToRgb(hsl.h, hsl.s, hsl.l);
|
|
235
|
+
r = out.r;
|
|
236
|
+
g = out.g;
|
|
237
|
+
b = out.b;
|
|
238
|
+
}
|
|
239
|
+
const redAbs = parseDrawingFraction(getVal("a:red"));
|
|
240
|
+
if (redAbs !== void 0) {
|
|
241
|
+
r = Math.round(clampUnitInterval(redAbs) * 255);
|
|
242
|
+
}
|
|
243
|
+
const redMod = parseDrawingFraction(getVal("a:redMod"));
|
|
244
|
+
if (redMod !== void 0) {
|
|
245
|
+
r = Math.min(255, Math.max(0, Math.round(r * redMod)));
|
|
246
|
+
}
|
|
247
|
+
const redOff = parseDrawingFraction(getVal("a:redOff"));
|
|
248
|
+
if (redOff !== void 0) {
|
|
249
|
+
r = Math.min(255, Math.max(0, Math.round(r + 255 * redOff)));
|
|
250
|
+
}
|
|
251
|
+
const greenAbs = parseDrawingFraction(getVal("a:green"));
|
|
252
|
+
if (greenAbs !== void 0) {
|
|
253
|
+
g = Math.round(clampUnitInterval(greenAbs) * 255);
|
|
254
|
+
}
|
|
255
|
+
const greenMod = parseDrawingFraction(getVal("a:greenMod"));
|
|
256
|
+
if (greenMod !== void 0) {
|
|
257
|
+
g = Math.min(255, Math.max(0, Math.round(g * greenMod)));
|
|
258
|
+
}
|
|
259
|
+
const greenOff = parseDrawingFraction(getVal("a:greenOff"));
|
|
260
|
+
if (greenOff !== void 0) {
|
|
261
|
+
g = Math.min(255, Math.max(0, Math.round(g + 255 * greenOff)));
|
|
262
|
+
}
|
|
263
|
+
const blueAbs = parseDrawingFraction(getVal("a:blue"));
|
|
264
|
+
if (blueAbs !== void 0) {
|
|
265
|
+
b = Math.round(clampUnitInterval(blueAbs) * 255);
|
|
266
|
+
}
|
|
267
|
+
const blueMod = parseDrawingFraction(getVal("a:blueMod"));
|
|
268
|
+
if (blueMod !== void 0) {
|
|
269
|
+
b = Math.min(255, Math.max(0, Math.round(b * blueMod)));
|
|
270
|
+
}
|
|
271
|
+
const blueOff = parseDrawingFraction(getVal("a:blueOff"));
|
|
272
|
+
if (blueOff !== void 0) {
|
|
273
|
+
b = Math.min(255, Math.max(0, Math.round(b + 255 * blueOff)));
|
|
274
|
+
}
|
|
275
|
+
return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
|
|
276
|
+
}
|
|
277
|
+
function srgbEncodeChannel(channel) {
|
|
278
|
+
const linear = Math.min(1, Math.max(0, channel / 255));
|
|
279
|
+
const companded = linear <= 31308e-7 ? 12.92 * linear : 1.055 * linear ** (1 / 2.4) - 0.055;
|
|
280
|
+
return Math.min(255, Math.max(0, Math.round(companded * 255)));
|
|
281
|
+
}
|
|
282
|
+
function srgbDecodeChannel(channel) {
|
|
283
|
+
const companded = Math.min(1, Math.max(0, channel / 255));
|
|
284
|
+
const linear = companded <= 0.04045 ? companded / 12.92 : ((companded + 0.055) / 1.055) ** 2.4;
|
|
285
|
+
return Math.min(255, Math.max(0, Math.round(linear * 255)));
|
|
286
|
+
}
|
|
287
|
+
function applySrgbGammaEncode(r, g, b) {
|
|
288
|
+
return { r: srgbEncodeChannel(r), g: srgbEncodeChannel(g), b: srgbEncodeChannel(b) };
|
|
289
|
+
}
|
|
290
|
+
function applySrgbGammaDecode(r, g, b) {
|
|
291
|
+
return { r: srgbDecodeChannel(r), g: srgbDecodeChannel(g), b: srgbDecodeChannel(b) };
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
// src/pptx/core/color/theme-color-ref.ts
|
|
295
|
+
var DEFAULT_ALIASES = {
|
|
296
|
+
bg1: "lt1",
|
|
297
|
+
tx1: "dk1",
|
|
298
|
+
bg2: "lt2",
|
|
299
|
+
tx2: "dk2"
|
|
300
|
+
};
|
|
301
|
+
function percentVal(fraction) {
|
|
302
|
+
return String(Math.round(fraction * 1e5));
|
|
303
|
+
}
|
|
304
|
+
function themeColorRefToXml(ref) {
|
|
305
|
+
const node = { "@_val": ref.scheme };
|
|
306
|
+
if (ref.tint !== void 0) {
|
|
307
|
+
node["a:tint"] = { "@_val": percentVal(ref.tint) };
|
|
308
|
+
}
|
|
309
|
+
if (ref.shade !== void 0) {
|
|
310
|
+
node["a:shade"] = { "@_val": percentVal(ref.shade) };
|
|
311
|
+
}
|
|
312
|
+
if (ref.lumMod !== void 0) {
|
|
313
|
+
node["a:lumMod"] = { "@_val": percentVal(ref.lumMod) };
|
|
314
|
+
}
|
|
315
|
+
if (ref.lumOff !== void 0) {
|
|
316
|
+
node["a:lumOff"] = { "@_val": percentVal(ref.lumOff) };
|
|
317
|
+
}
|
|
318
|
+
if (ref.alpha !== void 0) {
|
|
319
|
+
node["a:alpha"] = { "@_val": percentVal(ref.alpha) };
|
|
320
|
+
}
|
|
321
|
+
return node;
|
|
322
|
+
}
|
|
323
|
+
function resolveThemeColorRef(ref, themeColorMap) {
|
|
324
|
+
if (!themeColorMap) {
|
|
325
|
+
return void 0;
|
|
326
|
+
}
|
|
327
|
+
const base = themeColorMap[ref.scheme] ?? themeColorMap[DEFAULT_ALIASES[ref.scheme] ?? ""];
|
|
328
|
+
if (!base) {
|
|
329
|
+
return void 0;
|
|
330
|
+
}
|
|
331
|
+
const node = themeColorRefToXml(ref);
|
|
332
|
+
delete node["a:alpha"];
|
|
333
|
+
return normalizeHexColor(
|
|
334
|
+
applyDrawingColorTransforms(normalizeHexColor(base), node)
|
|
335
|
+
).toLowerCase();
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// src/pptx/core/types/color-ref.ts
|
|
339
|
+
var THEME_COLOR_PALETTE_COLUMNS = [
|
|
340
|
+
"bg1",
|
|
341
|
+
"tx1",
|
|
342
|
+
"bg2",
|
|
343
|
+
"tx2",
|
|
344
|
+
"accent1",
|
|
345
|
+
"accent2",
|
|
346
|
+
"accent3",
|
|
347
|
+
"accent4",
|
|
348
|
+
"accent5",
|
|
349
|
+
"accent6"
|
|
350
|
+
];
|
|
351
|
+
|
|
352
|
+
// src/pptx/ui/theme-color-swatches.ts
|
|
353
|
+
var COLUMN_LABELS = {
|
|
354
|
+
bg1: "Background 1",
|
|
355
|
+
tx1: "Text 1",
|
|
356
|
+
bg2: "Background 2",
|
|
357
|
+
tx2: "Text 2",
|
|
358
|
+
accent1: "Accent 1",
|
|
359
|
+
accent2: "Accent 2",
|
|
360
|
+
accent3: "Accent 3",
|
|
361
|
+
accent4: "Accent 4",
|
|
362
|
+
accent5: "Accent 5",
|
|
363
|
+
accent6: "Accent 6",
|
|
364
|
+
dk1: "Text 1",
|
|
365
|
+
lt1: "Background 1",
|
|
366
|
+
dk2: "Text 2",
|
|
367
|
+
lt2: "Background 2",
|
|
368
|
+
hlink: "Hyperlink",
|
|
369
|
+
folHlink: "Followed Hyperlink"
|
|
370
|
+
};
|
|
371
|
+
function lighter(percent) {
|
|
372
|
+
return { kind: "lighter", percent };
|
|
373
|
+
}
|
|
374
|
+
function darker(percent) {
|
|
375
|
+
return { kind: "darker", percent };
|
|
376
|
+
}
|
|
377
|
+
function themeColorVariantsForLuminance(l) {
|
|
378
|
+
if (l < 0.05) {
|
|
379
|
+
return [lighter(50), lighter(35), lighter(25), lighter(15), lighter(5)];
|
|
380
|
+
}
|
|
381
|
+
if (l < 0.25) {
|
|
382
|
+
return [lighter(90), lighter(75), lighter(50), lighter(25), lighter(10)];
|
|
383
|
+
}
|
|
384
|
+
if (l < 0.75) {
|
|
385
|
+
return [lighter(80), lighter(60), lighter(40), darker(25), darker(50)];
|
|
386
|
+
}
|
|
387
|
+
if (l < 0.95) {
|
|
388
|
+
return [darker(10), darker(25), darker(50), darker(75), darker(90)];
|
|
389
|
+
}
|
|
390
|
+
return [darker(5), darker(15), darker(25), darker(35), darker(50)];
|
|
391
|
+
}
|
|
392
|
+
function themeColorVariantToRef(scheme, variant) {
|
|
393
|
+
const fraction = variant.percent / 100;
|
|
394
|
+
const lumMod = Math.round((1 - fraction) * 1e5) / 1e5;
|
|
395
|
+
return variant.kind === "lighter" ? { scheme, lumMod, lumOff: fraction } : { scheme, lumMod };
|
|
396
|
+
}
|
|
397
|
+
function describeThemeColorSwatch(ref, variant) {
|
|
398
|
+
const column = COLUMN_LABELS[ref.scheme] ?? ref.scheme;
|
|
399
|
+
if (!variant) {
|
|
400
|
+
return column;
|
|
401
|
+
}
|
|
402
|
+
const word = variant.kind === "lighter" ? "Lighter" : "Darker";
|
|
403
|
+
return `${column}, ${word} ${variant.percent}%`;
|
|
404
|
+
}
|
|
405
|
+
function themeColorVariantOfRef(ref) {
|
|
406
|
+
if (ref.lumMod === void 0 || ref.tint !== void 0 || ref.shade !== void 0) {
|
|
407
|
+
return void 0;
|
|
408
|
+
}
|
|
409
|
+
const percent = Math.round((1 - ref.lumMod) * 100);
|
|
410
|
+
if (ref.lumOff !== void 0) {
|
|
411
|
+
return Math.round(ref.lumOff * 100) === percent ? lighter(percent) : void 0;
|
|
412
|
+
}
|
|
413
|
+
return darker(percent);
|
|
414
|
+
}
|
|
415
|
+
function buildThemeColorSwatchGrid(themeColorMap) {
|
|
416
|
+
if (!themeColorMap) {
|
|
417
|
+
return [];
|
|
418
|
+
}
|
|
419
|
+
const columns = [];
|
|
420
|
+
for (const scheme of THEME_COLOR_PALETTE_COLUMNS) {
|
|
421
|
+
const baseRef = { scheme };
|
|
422
|
+
const baseHex = resolveThemeColorRef(baseRef, themeColorMap);
|
|
423
|
+
const rgb = baseHex ? hexToRgbChannels(baseHex) : null;
|
|
424
|
+
if (!baseHex || !rgb) {
|
|
425
|
+
continue;
|
|
426
|
+
}
|
|
427
|
+
const { l } = rgbToHsl(rgb.r, rgb.g, rgb.b);
|
|
428
|
+
const variants = [];
|
|
429
|
+
for (const variant of themeColorVariantsForLuminance(l)) {
|
|
430
|
+
const ref = themeColorVariantToRef(scheme, variant);
|
|
431
|
+
const hex = resolveThemeColorRef(ref, themeColorMap);
|
|
432
|
+
if (hex) {
|
|
433
|
+
variants.push({ ref, hex, label: describeThemeColorSwatch(ref, variant), variant });
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
columns.push({
|
|
437
|
+
scheme,
|
|
438
|
+
base: {
|
|
439
|
+
ref: baseRef,
|
|
440
|
+
hex: baseHex,
|
|
441
|
+
label: describeThemeColorSwatch(baseRef, void 0),
|
|
442
|
+
variant: void 0
|
|
443
|
+
},
|
|
444
|
+
variants
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
return columns;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
// src/pptx/ui/theme-color-picker-state.ts
|
|
451
|
+
function themeColorRefsEqual(a, b) {
|
|
452
|
+
if (!a || !b) {
|
|
453
|
+
return a === b;
|
|
454
|
+
}
|
|
455
|
+
return a.scheme === b.scheme && a.lumMod === b.lumMod && a.lumOff === b.lumOff && a.tint === b.tint && a.shade === b.shade;
|
|
456
|
+
}
|
|
457
|
+
function findSelectedThemeSwatch(columns, ref, hex) {
|
|
458
|
+
if (ref) {
|
|
459
|
+
for (const column of columns) {
|
|
460
|
+
const swatches = [column.base, ...column.variants];
|
|
461
|
+
const match = swatches.find((swatch) => themeColorRefsEqual(swatch.ref, ref));
|
|
462
|
+
if (match) {
|
|
463
|
+
return match;
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
return void 0;
|
|
467
|
+
}
|
|
468
|
+
if (!hex) {
|
|
469
|
+
return void 0;
|
|
470
|
+
}
|
|
471
|
+
const normalized = hex.trim().toLowerCase();
|
|
472
|
+
for (const column of columns) {
|
|
473
|
+
const swatches = [column.base, ...column.variants];
|
|
474
|
+
const match = swatches.find((swatch) => swatch.hex.toLowerCase() === normalized);
|
|
475
|
+
if (match) {
|
|
476
|
+
return match;
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
return void 0;
|
|
480
|
+
}
|
|
481
|
+
function themeSwatchCommit(swatch) {
|
|
482
|
+
return { hex: swatch.hex, ref: swatch.ref };
|
|
483
|
+
}
|
|
484
|
+
function customColorCommit(hex) {
|
|
485
|
+
return { hex, ref: void 0 };
|
|
486
|
+
}
|
|
487
|
+
function themeColorSwatchRows(columns) {
|
|
488
|
+
if (columns.length === 0) {
|
|
489
|
+
return [];
|
|
490
|
+
}
|
|
491
|
+
const variantRowCount = Math.max(...columns.map((column) => column.variants.length));
|
|
492
|
+
const rows = [columns.map((column) => column.base)];
|
|
493
|
+
for (let i = 0; i < variantRowCount; i++) {
|
|
494
|
+
rows.push(columns.map((column) => column.variants[i]));
|
|
495
|
+
}
|
|
496
|
+
return rows;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
export { buildThemeColorSwatchGrid, customColorCommit, describeThemeColorSwatch, findSelectedThemeSwatch, themeColorRefsEqual, themeColorSwatchRows, themeColorVariantOfRef, themeColorVariantToRef, themeColorVariantsForLuminance, themeSwatchCommit };
|
package/dist/visio/index.cjs
CHANGED
|
@@ -25,7 +25,8 @@ function parseXml(xml, options = {}) {
|
|
|
25
25
|
}).parseFromString(xml, "application/xml");
|
|
26
26
|
} catch (error) {
|
|
27
27
|
throw new Error(
|
|
28
|
-
`Invalid ${label} XML: ${error instanceof Error ? error.message : String(error)}
|
|
28
|
+
`Invalid ${label} XML: ${error instanceof Error ? error.message : String(error)}`,
|
|
29
|
+
{ cause: error }
|
|
29
30
|
);
|
|
30
31
|
}
|
|
31
32
|
if (parseError || !parsed.documentElement)
|
package/dist/visio/index.mjs
CHANGED
|
@@ -19,7 +19,8 @@ function parseXml(xml, options = {}) {
|
|
|
19
19
|
}).parseFromString(xml, "application/xml");
|
|
20
20
|
} catch (error) {
|
|
21
21
|
throw new Error(
|
|
22
|
-
`Invalid ${label} XML: ${error instanceof Error ? error.message : String(error)}
|
|
22
|
+
`Invalid ${label} XML: ${error instanceof Error ? error.message : String(error)}`,
|
|
23
|
+
{ cause: error }
|
|
23
24
|
);
|
|
24
25
|
}
|
|
25
26
|
if (parseError || !parsed.documentElement)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { VisioDocument } from '../index.js';
|
|
2
|
+
export interface ViewerProperties {
|
|
3
|
+
document: VisioDocument | null;
|
|
4
|
+
pageIndex: number;
|
|
5
|
+
zoom: number;
|
|
6
|
+
showToolbar: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface ViewerEvents {
|
|
9
|
+
'document-load': VisioDocument;
|
|
10
|
+
'document-change': {
|
|
11
|
+
document: VisioDocument;
|
|
12
|
+
dirty: boolean;
|
|
13
|
+
kind: 'edit' | 'undo' | 'redo' | 'remote';
|
|
14
|
+
};
|
|
15
|
+
'document-error': Error;
|
|
16
|
+
'page-change': number;
|
|
17
|
+
'zoom-change': number;
|
|
18
|
+
'shape-select': {
|
|
19
|
+
id: string;
|
|
20
|
+
name: string;
|
|
21
|
+
pageId?: string;
|
|
22
|
+
} | null;
|
|
23
|
+
}
|
|
24
|
+
export type ViewerCallbacks = {
|
|
25
|
+
[K in keyof ViewerEvents]?: (detail: ViewerEvents[K]) => void;
|
|
26
|
+
};
|
|
27
|
+
export declare const propertyKeys: readonly ["document", "pageIndex", "zoom", "showToolbar"];
|
|
28
|
+
export declare const eventKeys: readonly ["document-load", "document-change", "document-error", "page-change", "zoom-change", "shape-select"];
|
|
29
|
+
export type VsdxSource = ArrayBuffer | Uint8Array | Blob;
|
|
30
|
+
export interface ViewerOptions extends Partial<ViewerProperties> {
|
|
31
|
+
events?: ViewerCallbacks;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../src/visio/ui/contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,gBAAgB;IAChC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;CACrB;AACD,MAAM,WAAW,YAAY;IAC5B,eAAe,EAAE,aAAa,CAAC;IAC/B,iBAAiB,EAAE;QAClB,QAAQ,EAAE,aAAa,CAAC;QACxB,KAAK,EAAE,OAAO,CAAC;QACf,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;KAC1C,CAAC;IACF,gBAAgB,EAAE,KAAK,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACrE;AACD,MAAM,MAAM,eAAe,GAAG;KAC5B,CAAC,IAAI,MAAM,YAAY,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI;CAC7D,CAAC;AACF,eAAO,MAAM,YAAY,2DAK+B,CAAC;AACzD,eAAO,MAAM,SAAS,+GAO8B,CAAC;AASrD,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,IAAI,CAAC;AACzD,MAAM,WAAW,aAAc,SAAQ,OAAO,CAAC,gBAAgB,CAAC;IAC/D,MAAM,CAAC,EAAE,eAAe,CAAC;CACzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo-document.d.ts","sourceRoot":"","sources":["../../../src/visio/ui/demo-document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,aAAa,CAAC;AAyD7D,qEAAqE;AACrE,eAAO,MAAM,YAAY,EAAE,aAwD1B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { VisioDiagnostic } from '../index.js';
|
|
2
|
+
export interface CompatibilityNote {
|
|
3
|
+
message: string;
|
|
4
|
+
count: number;
|
|
5
|
+
severity: 'info' | 'warning';
|
|
6
|
+
}
|
|
7
|
+
/** Presentation-only grouping keeps repeated per-shape diagnostics readable without losing counts. */
|
|
8
|
+
export declare function compatibilityNotes(diagnostics: readonly VisioDiagnostic[], renderWarnings?: readonly string[]): CompatibilityNote[];
|
|
9
|
+
export declare function compatibilityText(note: CompatibilityNote): string;
|
|
10
|
+
//# sourceMappingURL=diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../../src/visio/ui/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,MAAM,WAAW,iBAAiB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AACD,sGAAsG;AACtG,wBAAgB,kBAAkB,CACjC,WAAW,EAAE,SAAS,eAAe,EAAE,EACvC,cAAc,GAAE,SAAS,MAAM,EAAO,GACpC,iBAAiB,EAAE,CAwBrB;AACD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAEjE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** Source snapshots only. No document model is serialized by the viewer. */
|
|
2
|
+
export interface EditDiagnostic {
|
|
3
|
+
readonly code: string;
|
|
4
|
+
readonly message: string;
|
|
5
|
+
}
|
|
6
|
+
export interface VsdxExportResult {
|
|
7
|
+
bytes: Uint8Array;
|
|
8
|
+
dirty: boolean;
|
|
9
|
+
diagnostics: readonly EditDiagnostic[];
|
|
10
|
+
}
|
|
11
|
+
export interface ViewerEditState {
|
|
12
|
+
readonly sourceAvailable: boolean;
|
|
13
|
+
readonly busy: boolean;
|
|
14
|
+
readonly dirty: boolean;
|
|
15
|
+
readonly canUndo: boolean;
|
|
16
|
+
readonly canRedo: boolean;
|
|
17
|
+
readonly historyTruncated: boolean;
|
|
18
|
+
readonly error: Error | null;
|
|
19
|
+
readonly diagnostics: readonly EditDiagnostic[];
|
|
20
|
+
}
|
|
21
|
+
export declare const EMPTY_EDIT_STATE: ViewerEditState;
|
|
22
|
+
export declare const EDIT_HISTORY_LIMITS: Readonly<{
|
|
23
|
+
maxBytes: number;
|
|
24
|
+
maxEntries: 20;
|
|
25
|
+
}>;
|
|
26
|
+
export interface SourceSnapshot {
|
|
27
|
+
readonly bytes: Uint8Array;
|
|
28
|
+
readonly diagnostics: readonly EditDiagnostic[];
|
|
29
|
+
}
|
|
30
|
+
/** Private controller-owned bytes; transient worker copies and models are separate from this budget. */
|
|
31
|
+
export declare class DocumentHistory {
|
|
32
|
+
#private;
|
|
33
|
+
readonly original: SourceSnapshot;
|
|
34
|
+
constructor(bytes: Uint8Array);
|
|
35
|
+
get current(): SourceSnapshot;
|
|
36
|
+
get undoTarget(): SourceSnapshot | undefined;
|
|
37
|
+
get redoTarget(): SourceSnapshot | undefined;
|
|
38
|
+
get state(): ViewerEditState;
|
|
39
|
+
append(bytes: Uint8Array, diagnostics: readonly EditDiagnostic[]): void;
|
|
40
|
+
move(target: SourceSnapshot): void;
|
|
41
|
+
export(): VsdxExportResult;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=document-history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-history.d.ts","sourceRoot":"","sources":["../../../src/visio/ui/document-history.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB;AACD,MAAM,WAAW,gBAAgB;IAChC,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,SAAS,cAAc,EAAE,CAAC;CACvC;AACD,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,SAAS,cAAc,EAAE,CAAC;CAChD;AACD,eAAO,MAAM,gBAAgB,EAAE,eAS7B,CAAC;AACH,eAAO,MAAM,mBAAmB;;;EAAgE,CAAC;AACjG,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,SAAS,cAAc,EAAE,CAAC;CAChD;AACD,wGAAwG;AACxG,qBAAa,eAAe;;IAC3B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAIlC,YAAY,KAAK,EAAE,UAAU,EAG5B;IACD,IAAI,OAAO,IAAI,cAAc,CAE5B;IACD,IAAI,UAAU,IAAI,cAAc,GAAG,SAAS,CAE3C;IACD,IAAI,UAAU,IAAI,cAAc,GAAG,SAAS,CAE3C;IACD,IAAI,KAAK,IAAI,eAAe,CAU3B;IACD,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,cAAc,EAAE,GAAG,IAAI,CAsBtE;IACD,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAKjC;IACD,MAAM,IAAI,gBAAgB,CAMzB;CACD"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { VisioDocument, VisioShape } from '../index.js';
|
|
2
|
+
/** UTF-16 character bounds, applied before copying or case conversion. */
|
|
3
|
+
export declare const TEXT_SEARCH_LIMITS: Readonly<{
|
|
4
|
+
queryCharacters: 256;
|
|
5
|
+
results: 500;
|
|
6
|
+
indexedCharacters: 2000000;
|
|
7
|
+
shapeCharacters: 32768;
|
|
8
|
+
previewCharacters: 160;
|
|
9
|
+
shapes: 25000;
|
|
10
|
+
depth: 64;
|
|
11
|
+
}>;
|
|
12
|
+
export interface TextSearchResult {
|
|
13
|
+
readonly pageIndex: number;
|
|
14
|
+
readonly pageId: string;
|
|
15
|
+
readonly pageName: string;
|
|
16
|
+
readonly shapeId: string;
|
|
17
|
+
readonly shapeName: string;
|
|
18
|
+
/** Bounded start-of-text preview, not a match offset or highlighted excerpt. */
|
|
19
|
+
readonly preview: string;
|
|
20
|
+
}
|
|
21
|
+
export interface TextSearchState {
|
|
22
|
+
readonly query: string;
|
|
23
|
+
readonly results: readonly TextSearchResult[];
|
|
24
|
+
/** -1 until the user explicitly navigates, or after manual page/shape selection. */
|
|
25
|
+
readonly activeIndex: number;
|
|
26
|
+
readonly indexTruncated: boolean;
|
|
27
|
+
readonly resultsTruncated: boolean;
|
|
28
|
+
}
|
|
29
|
+
interface SearchEntry {
|
|
30
|
+
readonly result: TextSearchResult;
|
|
31
|
+
readonly foldedText: string;
|
|
32
|
+
}
|
|
33
|
+
export interface DocumentTextIndex {
|
|
34
|
+
readonly entries: readonly SearchEntry[];
|
|
35
|
+
readonly truncated: boolean;
|
|
36
|
+
}
|
|
37
|
+
export declare const EMPTY_TEXT_SEARCH: TextSearchState;
|
|
38
|
+
/** Index canonical text for the current display state. No XML, DOM or layout parsing. */
|
|
39
|
+
export declare function indexDocumentText(model: VisioDocument | null, isVisible?: (shape: VisioShape) => boolean): DocumentTextIndex;
|
|
40
|
+
export declare function validateSearchQuery(query: string): void;
|
|
41
|
+
/** One match per shape, literal ECMAScript lowercase comparison; no regex or language collation. */
|
|
42
|
+
export declare function searchDocumentText(index: DocumentTextIndex, query: string): TextSearchState;
|
|
43
|
+
export declare function textSearchStatus(search: TextSearchState): string;
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=document-text-search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-text-search.d.ts","sourceRoot":"","sources":["../../../src/visio/ui/document-text-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE7D,0EAA0E;AAC1E,eAAO,MAAM,kBAAkB;;;;;;;;EAQ7B,CAAC;AACH,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,gFAAgF;IAChF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB;AACD,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC9C,oFAAoF;IACpF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;CACnC;AACD,UAAU,WAAW;IACpB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC5B;AACD,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC5B;AACD,eAAO,MAAM,iBAAiB,EAAE,eAM9B,CAAC;AAEH,yFAAyF;AACzF,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,aAAa,GAAG,IAAI,EAC3B,SAAS,GAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAkC,GAClE,iBAAiB,CAmDnB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAKvD;AACD,oGAAoG;AACpG,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe,CAsB3F;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAQhE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit-commands.d.ts","sourceRoot":"","sources":["../../../src/visio/ui/edit-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,8FAA8F;AAC9F,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,EAAE,CAqDtE"}
|