pptx-angular-viewer 1.1.49 → 1.1.51

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pptx-angular-viewer",
3
- "version": "1.1.49",
3
+ "version": "1.1.51",
4
4
  "description": "Angular PowerPoint viewer and editor component: render, edit, and export PPTX slides in the browser.",
5
5
  "keywords": [
6
6
  "angular",
@@ -45,7 +45,7 @@
45
45
  "html2canvas-pro": "^2.0.4",
46
46
  "jspdf": "^4.2.1",
47
47
  "jszip": "^3.10.1",
48
- "pptx-viewer-core": "^1.1.38",
48
+ "pptx-viewer-core": "^1.1.42",
49
49
  "tslib": "^2.8.1"
50
50
  },
51
51
  "peerDependencies": {
@@ -1,2 +1,2 @@
1
1
  /*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-ease:initial;--tw-content:""}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-amber-500:oklch(76.9% .188 70.08);--color-blue-600:oklch(54.6% .245 262.881);--color-purple-600:oklch(55.8% .288 302.321);--color-slate-900:oklch(20.8% .042 265.755);--color-stone-100:oklch(97% .001 106.424);--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wider:.05em;--leading-tight:1.25;--radius-sm:calc(var(--pptx-radius,.5rem) - 4px);--radius-lg:var(--pptx-radius,.5rem);--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-foreground:var(--pptx-foreground,#f3f4f6);--color-card:var(--pptx-card,#111827);--color-popover:var(--pptx-popover,#111827);--color-primary:var(--pptx-primary,#6366f1);--color-primary-foreground:var(--pptx-primary-foreground,#fff);--color-secondary:var(--pptx-secondary,#1f2937);--color-muted:var(--pptx-muted,#1f2937);--color-muted-foreground:var(--pptx-muted-foreground,#9ca3af);--color-accent:var(--pptx-accent,#1f2937);--color-border:var(--pptx-border,#374151)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components{.pptx-rb-icon{height:calc(var(--spacing) * 7);min-width:calc(var(--spacing) * 7);color:var(--color-foreground);border-radius:.25rem;justify-content:center;align-items:center;font-size:.95rem;display:inline-flex}@media (hover:hover){.pptx-rb-icon:hover{background-color:var(--color-accent)}}.pptx-rb-icon:disabled{cursor:not-allowed;opacity:.4}.pptx-rb-pill{align-items:center;gap:calc(var(--spacing) * 1.5);background-color:var(--color-muted);padding-inline:calc(var(--spacing) * 2.5);padding-block:calc(var(--spacing) * 1.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-foreground);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));border-radius:.25rem;display:inline-flex}@media (hover:hover){.pptx-rb-pill:hover{background-color:var(--color-accent)}}.pptx-rb-pill:disabled{cursor:not-allowed;opacity:.4}.pptx-rb-grp{background-color:var(--color-muted);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-foreground);border-radius:.25rem;align-items:center;display:inline-flex;overflow:hidden}.pptx-rb-gb{border-right-style:var(--tw-border-style);border-right-width:1px;border-color:var(--color-border);padding-inline:calc(var(--spacing) * 2.5);padding-block:calc(var(--spacing) * 1.5);justify-content:center;align-items:center;display:inline-flex}@media (hover:hover){.pptx-rb-gb:hover{background-color:var(--color-accent)}}.pptx-rb-gb:disabled{cursor:not-allowed;opacity:.4}.pptx-rb-gl{padding-inline:calc(var(--spacing) * 2.5);padding-block:calc(var(--spacing) * 1.5);justify-content:center;align-items:center;display:inline-flex}@media (hover:hover){.pptx-rb-gl:hover{background-color:var(--color-accent)}}.pptx-rb-gl:disabled{cursor:not-allowed;opacity:.4}.pptx-rb-sep{margin-inline:var(--spacing);background-color:var(--color-border);align-self:stretch;width:1px}@supports (color:color-mix(in lab, red, red)){.pptx-rb-sep{background-color:color-mix(in oklab, var(--color-border) 40%, transparent)}}.pptx-rb-select{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border);background-color:var(--color-card);padding-inline:var(--spacing);padding-block:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-foreground);border-radius:.25rem}}@layer utilities{.collapse{visibility:collapse}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:0}.top-1{top:var(--spacing)}.top-full{top:100%}.right-1{right:var(--spacing)}.left-0{left:0}.z-20{z-index:20}.z-50{z-index:50}.z-\[1100\]{z-index:1100}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-1{margin-inline:var(--spacing)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mr-1{margin-right:var(--spacing)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.table-cell{display:table-cell}.h-1{height:var(--spacing)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-12{height:calc(var(--spacing) * 12)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-6{width:calc(var(--spacing) * 6)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-28{width:calc(var(--spacing) * 28)}.w-44{width:calc(var(--spacing) * 44)}.w-\[640px\]{width:640px}.w-full{width:100%}.w-px{width:1px}.max-w-\[90vw\]{max-width:90vw}.max-w-\[420px\]{max-width:420px}.min-w-12{min-width:calc(var(--spacing) * 12)}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.border-collapse{border-collapse:collapse}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-nowrap{flex-wrap:nowrap}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.self-center{align-self:center}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:.25rem}.rounded-lg{border-radius:var(--radius-lg)}.rounded-sm{border-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-border,.border-border\/60{border-color:var(--color-border)}@supports (color:color-mix(in lab, red, red)){.border-border\/60{border-color:color-mix(in oklab, var(--color-border) 60%, transparent)}}.border-primary{border-color:var(--color-primary)}.bg-accent{background-color:var(--color-accent)}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab, red, red)){.bg-black\/40{background-color:color-mix(in oklab, var(--color-black) 40%, transparent)}}.bg-border\/50{background-color:var(--color-border)}@supports (color:color-mix(in lab, red, red)){.bg-border\/50{background-color:color-mix(in oklab, var(--color-border) 50%, transparent)}}.bg-card{background-color:var(--color-card)}.bg-muted{background-color:var(--color-muted)}.bg-popover{background-color:var(--color-popover)}.bg-primary,.bg-primary\/10{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/10{background-color:color-mix(in oklab, var(--color-primary) 10%, transparent)}}.bg-secondary\/50{background-color:var(--color-secondary)}@supports (color:color-mix(in lab, red, red)){.bg-secondary\/50{background-color:color-mix(in oklab, var(--color-secondary) 50%, transparent)}}.bg-transparent{background-color:#0000}.p-4{padding:calc(var(--spacing) * 4)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.pt-1{padding-top:var(--spacing)}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-12{padding-top:calc(var(--spacing) * 12)}.pt-20{padding-top:calc(var(--spacing) * 20)}.pb-0\.5{padding-bottom:calc(var(--spacing) * .5)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-nowrap{white-space:nowrap}.text-foreground{color:var(--color-foreground)}.text-muted-foreground{color:var(--color-muted-foreground)}.text-primary{color:var(--color-primary)}.text-primary-foreground{color:var(--color-primary-foreground)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.accent-primary{accent-color:var(--color-primary)}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-primary{--tw-ring-color:var(--color-primary)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a)) drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a) drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.select-all{-webkit-user-select:all;user-select:all}@media (hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:right-0:after{content:var(--tw-content);right:0}.after\:-bottom-px:after{content:var(--tw-content);bottom:-1px}.after\:left-0:after{content:var(--tw-content);left:0}.after\:h-\[2\.5px\]:after{content:var(--tw-content);height:2.5px}.after\:bg-primary:after{content:var(--tw-content);background-color:var(--color-primary)}@media (hover:hover){.hover\:border-primary:hover{border-color:var(--color-primary)}.hover\:bg-accent:hover,.hover\:bg-accent\/30:hover{background-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/30:hover{background-color:color-mix(in oklab, var(--color-accent) 30%, transparent)}}.hover\:bg-muted:hover{background-color:var(--color-muted)}.hover\:bg-primary\/80:hover{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/80:hover{background-color:color-mix(in oklab, var(--color-primary) 80%, transparent)}}.hover\:text-foreground:hover{color:var(--color-foreground)}}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}}.pptx-ng-viewer{--pptx-background:#030712;--pptx-foreground:#f3f4f6;--pptx-card:#111827;--pptx-border:#374151;--pptx-primary:#6366f1;--pptx-muted-foreground:#9ca3af;background:var(--pptx-background);width:100%;height:100%;min-height:0;color:var(--pptx-foreground);flex-direction:column;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;display:flex}.pptx-ng-state{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:.75rem;padding:2rem;display:flex}.pptx-ng-error-detail{background:var(--pptx-card);max-width:40rem;color:var(--pptx-muted-foreground);white-space:pre-wrap;border-radius:.5rem;padding:.75rem;font-size:.8rem;overflow:auto}.pptx-ng-spinner{border:3px solid var(--pptx-border);border-top-color:var(--pptx-primary);border-radius:50%;width:2rem;height:2rem;animation:.8s linear infinite pptx-ng-spin}@keyframes pptx-ng-spin{to{transform:rotate(360deg)}}.pptx-ng-toolbar{border-bottom:1px solid var(--pptx-border);background:var(--pptx-card);justify-content:space-between;align-items:center;gap:1rem;padding:.5rem .75rem;display:flex}.pptx-ng-nav,.pptx-ng-zoom{align-items:center;gap:.5rem;display:flex}.pptx-ng-toolbar button{border:1px solid var(--pptx-border);min-width:2rem;height:2rem;color:var(--pptx-foreground);cursor:pointer;background:0 0;border-radius:.375rem;padding:0 .5rem;font-size:1rem;line-height:1}.pptx-ng-toolbar button:hover:not(:disabled){border-color:var(--pptx-primary)}.pptx-ng-toolbar button:disabled{opacity:.4;cursor:not-allowed}.pptx-ng-slide-counter,.pptx-ng-zoom-value{font-variant-numeric:tabular-nums;font-size:.85rem}.pptx-ng-body{flex:1;min-height:0;display:flex}.pptx-ng-thumbnails{border-right:1px solid var(--pptx-border);background:var(--pptx-card);flex-direction:column;gap:.5rem;width:8rem;padding:.75rem;display:flex;overflow-y:auto}.pptx-ng-thumb{aspect-ratio:16/9;border:2px solid var(--pptx-border);cursor:pointer;background:#fff;border-radius:.375rem;position:relative}.pptx-ng-thumb.is-active{border-color:var(--pptx-primary)}.pptx-ng-thumb-index{color:#111827;font-size:.7rem;position:absolute;bottom:.15rem;right:.3rem}.pptx-ng-main{background:#1e293b;flex:1;min-width:0;overflow:auto}.pptx-ng-canvas-viewport{width:100%;height:100%}.pptx-ng-element{box-sizing:border-box}.pptx-ng-canvas-stage.is-editable{cursor:default}.pptx-ng-canvas-stage.is-editable .pptx-ng-element{cursor:pointer}.pptx-ng-selection{box-sizing:border-box;outline-offset:1px;pointer-events:none;z-index:10000;background:#4f86ff14;outline:2px solid #4f86ff;position:absolute}.pptx-ng-handle{box-sizing:border-box;pointer-events:auto;touch-action:none;z-index:10001;background:#fff;border:1px solid #4f86ff;border-radius:2px;position:absolute}.pptx-ng-text-editor{box-sizing:border-box;color:#000;font:inherit;resize:none;z-index:10002;white-space:pre-wrap;background:#fffffff5;border:2px solid #4f86ff;margin:0;padding:2px;line-height:1.2;position:absolute;overflow:auto}.pptx-ng-marquee{box-sizing:border-box;pointer-events:none;z-index:9999;background:#4f86ff1f;border:1px dashed #4f86ff;position:absolute}.pptx-ng-snap-guide{box-sizing:border-box;pointer-events:none;z-index:10003;border-top:1px solid #f43f8e;border-left:1px solid #f43f8e;position:absolute}.pptx-ng-rotate-handle{box-sizing:border-box;cursor:grab;pointer-events:auto;touch-action:none;z-index:10001;background:#fff;border:1px solid #4f86ff;border-radius:50%;position:absolute}.pptx-ng-adjust-handle{box-sizing:border-box;cursor:crosshair;pointer-events:auto;touch-action:none;z-index:10001;background:#fcd34d;border:1px solid #b45309;position:absolute;transform:rotate(45deg)}.pptx-ng-inspector-host{background:#00000005;border-left:1px solid #0000001a;flex:0 0 240px;width:240px;overflow:auto}.pptx-ng-idrawer-grab{display:none}.pptx-ng-idrawer-handle{background:#00000040;border-radius:9999px;width:40px;height:4px}.pptx-ng-slide-props{flex-direction:column;gap:.5rem;padding:.75rem;font-size:.8125rem;display:flex}.pptx-ng-prop-row{justify-content:space-between;align-items:center;gap:.5rem;display:flex}.pptx-ng-prop-row.pptx-ng-prop-col{flex-direction:column;align-items:stretch}.pptx-ng-prop-row textarea{resize:vertical;width:100%;font:inherit}.pptx-ng-img{object-fit:contain;width:100%;height:100%;display:block}.pptx-ng-para{margin:0}.pptx-ng-bullet{white-space:pre}.pptx-ng-link{color:inherit;cursor:pointer;text-decoration:underline}.pptx-ng-actions{align-items:center;gap:.25rem;display:flex}.pptx-ng-notes{background:#00000005;border-top:1px solid #0000001a;max-height:30%;margin:.5rem 1rem 1rem;padding:.5rem .75rem;font-size:.875rem;line-height:1.4;overflow:auto}.pptx-ng-notes-title{text-transform:uppercase;letter-spacing:.04em;opacity:.6;margin:0 0 .25rem;font-size:.75rem;font-weight:600}.pptx-ng-notes-body{white-space:pre-wrap;word-break:break-word;margin:0}.pptx-ng-mobile-notes-sheet{background:#fff;border-top:1px solid #00000026;flex:none;max-height:50vh;overflow:auto;box-shadow:0 -6px 20px #0000002e}.pptx-ng-mnotes-grab{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;padding:8px 0 4px;display:flex}.pptx-ng-mnotes-grab:active{cursor:grabbing}.pptx-ng-mnotes-handle{background:#00000040;border-radius:9999px;width:40px;height:4px}.pptx-ng-table-wrapper{width:100%;height:100%;overflow:hidden}.pptx-ng-table-wrapper>.pptx-ng-table{border-collapse:collapse;table-layout:fixed;width:100%;height:100%}.pptx-ng-table-wrapper>.pptx-ng-table td{word-break:break-word;vertical-align:middle;overflow:hidden}.pptx-ng-table-wrapper>.pptx-ng-table td .pptx-ng-cell-input{box-sizing:border-box;width:100%;color:inherit;font:inherit;background:0 0;border:none;outline:none;margin:0;padding:0}.pptx-ng-chart svg{width:100%;height:100%;display:block}.pptx-ng-placeholder{color:#6366f1cc;background:#6366f10f;border:1px dashed #6366f180;justify-content:center;align-items:center;width:100%;height:100%;font-size:.75rem;display:flex}.pptx-ng-overlay-grid{pointer-events:none;z-index:2;position:absolute;inset:0}.pptx-ng-overlay-guides{pointer-events:none;z-index:3;position:absolute;inset:0}.pptx-ng-ruler-corner{pointer-events:none;z-index:52;background:#1e293b;border-bottom:1px solid #ffffff1a;border-right:1px solid #ffffff1a;width:20px;height:20px;position:absolute;top:0;left:0}.pptx-ng-ruler-h{z-index:51;height:20px;position:absolute;top:0;left:20px;overflow:hidden}.pptx-ng-ruler-v{z-index:51;width:20px;position:absolute;top:20px;left:0;overflow:hidden}.pptx-ng-ruler-guide-line{pointer-events:none;z-index:49;background:#facc15d9;position:absolute}.pptx-ng-ruler-guide-handle{pointer-events:auto;touch-action:none;z-index:50;position:absolute}.pptx-rb-eyedropper-active{background-color:var(--color-purple-600);color:var(--color-white)}.pptx-rb-template-active{background-color:var(--color-amber-500);color:var(--color-white)}@media (max-width:640px),(pointer:coarse){.pptx-ng-toolbar{flex-wrap:wrap;gap:.5rem;padding:.5rem}.pptx-ng-actions{-webkit-overflow-scrolling:touch;scrollbar-width:thin;flex:100%;gap:.5rem;padding-bottom:.15rem;overflow-x:auto}.pptx-ng-actions button{flex:none}.pptx-ng-nav button,.pptx-ng-zoom button,.pptx-ng-actions button{min-width:44px;height:auto;min-height:44px;padding:0 .65rem;font-size:1.1rem}.pptx-ng-nav button{font-size:1.5rem;font-weight:600}.pptx-ng-thumbnails{border-right:none;border-bottom:1px solid var(--pptx-border);flex-direction:row;width:auto;max-width:100%;padding:.5rem;overflow:auto hidden}.pptx-ng-thumbnails .pptx-ng-thumb{flex:0 0 4.5rem;width:4.5rem}.pptx-ng-body{flex-direction:column}.pptx-ng-body>pptx-slides-panel{flex:none;max-height:30vh}.pptx-ng-inspector-host{border-left:none;border-top:1px solid var(--pptx-border);flex:none;width:100%;max-height:40vh}.pptx-ng-idrawer-grab{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;background:inherit;justify-content:center;align-items:center;padding:8px 0 4px;display:flex;position:sticky;top:0}.pptx-ng-main{flex:auto;min-height:50vh}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-ease:initial;--tw-content:""}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-amber-500:oklch(76.9% .188 70.08);--color-blue-600:oklch(54.6% .245 262.881);--color-purple-600:oklch(55.8% .288 302.321);--color-slate-900:oklch(20.8% .042 265.755);--color-stone-100:oklch(97% .001 106.424);--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wider:.05em;--leading-tight:1.25;--radius-sm:calc(var(--pptx-radius,.5rem) - 4px);--radius-lg:var(--pptx-radius,.5rem);--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-foreground:var(--pptx-foreground,#f3f4f6);--color-card:var(--pptx-card,#111827);--color-popover:var(--pptx-popover,#111827);--color-primary:var(--pptx-primary,#6366f1);--color-primary-foreground:var(--pptx-primary-foreground,#fff);--color-secondary:var(--pptx-secondary,#1f2937);--color-muted:var(--pptx-muted,#1f2937);--color-muted-foreground:var(--pptx-muted-foreground,#9ca3af);--color-accent:var(--pptx-accent,#1f2937);--color-border:var(--pptx-border,#374151)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components{.pptx-rb-icon{height:calc(var(--spacing) * 7);min-width:calc(var(--spacing) * 7);color:var(--color-foreground);border-radius:.25rem;justify-content:center;align-items:center;font-size:.95rem;display:inline-flex}@media (hover:hover){.pptx-rb-icon:hover{background-color:var(--color-accent)}}.pptx-rb-icon:disabled{cursor:not-allowed;opacity:.4}.pptx-rb-pill{align-items:center;gap:calc(var(--spacing) * 1.5);background-color:var(--color-muted);padding-inline:calc(var(--spacing) * 2.5);padding-block:calc(var(--spacing) * 1.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-foreground);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));border-radius:.25rem;display:inline-flex}@media (hover:hover){.pptx-rb-pill:hover{background-color:var(--color-accent)}}.pptx-rb-pill:disabled{cursor:not-allowed;opacity:.4}.pptx-rb-grp{background-color:var(--color-muted);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-foreground);border-radius:.25rem;align-items:center;display:inline-flex;overflow:hidden}.pptx-rb-gb{border-right-style:var(--tw-border-style);border-right-width:1px;border-color:var(--color-border);padding-inline:calc(var(--spacing) * 2.5);padding-block:calc(var(--spacing) * 1.5);justify-content:center;align-items:center;display:inline-flex}@media (hover:hover){.pptx-rb-gb:hover{background-color:var(--color-accent)}}.pptx-rb-gb:disabled{cursor:not-allowed;opacity:.4}.pptx-rb-gl{padding-inline:calc(var(--spacing) * 2.5);padding-block:calc(var(--spacing) * 1.5);justify-content:center;align-items:center;display:inline-flex}@media (hover:hover){.pptx-rb-gl:hover{background-color:var(--color-accent)}}.pptx-rb-gl:disabled{cursor:not-allowed;opacity:.4}.pptx-rb-sep{margin-inline:var(--spacing);background-color:var(--color-border);align-self:stretch;width:1px}@supports (color:color-mix(in lab, red, red)){.pptx-rb-sep{background-color:color-mix(in oklab, var(--color-border) 40%, transparent)}}.pptx-rb-select{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border);background-color:var(--color-card);padding-inline:var(--spacing);padding-block:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-foreground);border-radius:.25rem}}@layer utilities{.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:0}.top-1{top:var(--spacing)}.top-full{top:100%}.right-1{right:var(--spacing)}.left-0{left:0}.z-20{z-index:20}.z-50{z-index:50}.z-\[1100\]{z-index:1100}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-1{margin-inline:var(--spacing)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mr-1{margin-right:var(--spacing)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.table-cell{display:table-cell}.h-1{height:var(--spacing)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-12{height:calc(var(--spacing) * 12)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-6{width:calc(var(--spacing) * 6)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-28{width:calc(var(--spacing) * 28)}.w-44{width:calc(var(--spacing) * 44)}.w-\[640px\]{width:640px}.w-full{width:100%}.w-px{width:1px}.max-w-\[90vw\]{max-width:90vw}.max-w-\[420px\]{max-width:420px}.min-w-12{min-width:calc(var(--spacing) * 12)}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.border-collapse{border-collapse:collapse}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-nowrap{flex-wrap:nowrap}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.self-center{align-self:center}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:.25rem}.rounded-lg{border-radius:var(--radius-lg)}.rounded-sm{border-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-border,.border-border\/60{border-color:var(--color-border)}@supports (color:color-mix(in lab, red, red)){.border-border\/60{border-color:color-mix(in oklab, var(--color-border) 60%, transparent)}}.border-primary{border-color:var(--color-primary)}.bg-accent{background-color:var(--color-accent)}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab, red, red)){.bg-black\/40{background-color:color-mix(in oklab, var(--color-black) 40%, transparent)}}.bg-border\/50{background-color:var(--color-border)}@supports (color:color-mix(in lab, red, red)){.bg-border\/50{background-color:color-mix(in oklab, var(--color-border) 50%, transparent)}}.bg-card{background-color:var(--color-card)}.bg-muted{background-color:var(--color-muted)}.bg-popover{background-color:var(--color-popover)}.bg-primary,.bg-primary\/10{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/10{background-color:color-mix(in oklab, var(--color-primary) 10%, transparent)}}.bg-secondary\/50{background-color:var(--color-secondary)}@supports (color:color-mix(in lab, red, red)){.bg-secondary\/50{background-color:color-mix(in oklab, var(--color-secondary) 50%, transparent)}}.bg-transparent{background-color:#0000}.p-4{padding:calc(var(--spacing) * 4)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.pt-1{padding-top:var(--spacing)}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-12{padding-top:calc(var(--spacing) * 12)}.pt-20{padding-top:calc(var(--spacing) * 20)}.pb-0\.5{padding-bottom:calc(var(--spacing) * .5)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-nowrap{white-space:nowrap}.text-foreground{color:var(--color-foreground)}.text-muted-foreground{color:var(--color-muted-foreground)}.text-primary{color:var(--color-primary)}.text-primary-foreground{color:var(--color-primary-foreground)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.accent-primary{accent-color:var(--color-primary)}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-primary{--tw-ring-color:var(--color-primary)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a)) drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a) drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.select-all{-webkit-user-select:all;user-select:all}@media (hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:right-0:after{content:var(--tw-content);right:0}.after\:-bottom-px:after{content:var(--tw-content);bottom:-1px}.after\:left-0:after{content:var(--tw-content);left:0}.after\:h-\[2\.5px\]:after{content:var(--tw-content);height:2.5px}.after\:bg-primary:after{content:var(--tw-content);background-color:var(--color-primary)}@media (hover:hover){.hover\:border-primary:hover{border-color:var(--color-primary)}.hover\:bg-accent:hover,.hover\:bg-accent\/30:hover{background-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/30:hover{background-color:color-mix(in oklab, var(--color-accent) 30%, transparent)}}.hover\:bg-muted:hover{background-color:var(--color-muted)}.hover\:bg-primary\/80:hover{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/80:hover{background-color:color-mix(in oklab, var(--color-primary) 80%, transparent)}}.hover\:text-foreground:hover{color:var(--color-foreground)}}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}}.pptx-ng-viewer{--pptx-background:#030712;--pptx-foreground:#f3f4f6;--pptx-card:#111827;--pptx-border:#374151;--pptx-primary:#6366f1;--pptx-muted-foreground:#9ca3af;background:var(--pptx-background);width:100%;height:100%;min-height:0;color:var(--pptx-foreground);flex-direction:column;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;display:flex}.pptx-ng-state{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:.75rem;padding:2rem;display:flex}.pptx-ng-error-detail{background:var(--pptx-card);max-width:40rem;color:var(--pptx-muted-foreground);white-space:pre-wrap;border-radius:.5rem;padding:.75rem;font-size:.8rem;overflow:auto}.pptx-ng-spinner{border:3px solid var(--pptx-border);border-top-color:var(--pptx-primary);border-radius:50%;width:2rem;height:2rem;animation:.8s linear infinite pptx-ng-spin}@keyframes pptx-ng-spin{to{transform:rotate(360deg)}}.pptx-ng-toolbar{border-bottom:1px solid var(--pptx-border);background:var(--pptx-card);justify-content:space-between;align-items:center;gap:1rem;padding:.5rem .75rem;display:flex}.pptx-ng-nav,.pptx-ng-zoom{align-items:center;gap:.5rem;display:flex}.pptx-ng-toolbar button{border:1px solid var(--pptx-border);min-width:2rem;height:2rem;color:var(--pptx-foreground);cursor:pointer;background:0 0;border-radius:.375rem;padding:0 .5rem;font-size:1rem;line-height:1}.pptx-ng-toolbar button:hover:not(:disabled){border-color:var(--pptx-primary)}.pptx-ng-toolbar button:disabled{opacity:.4;cursor:not-allowed}.pptx-ng-slide-counter,.pptx-ng-zoom-value{font-variant-numeric:tabular-nums;font-size:.85rem}.pptx-ng-body{flex:1;min-height:0;display:flex}.pptx-ng-thumbnails{border-right:1px solid var(--pptx-border);background:var(--pptx-card);flex-direction:column;gap:.5rem;width:8rem;padding:.75rem;display:flex;overflow-y:auto}.pptx-ng-thumb{aspect-ratio:16/9;border:2px solid var(--pptx-border);cursor:pointer;background:#fff;border-radius:.375rem;position:relative}.pptx-ng-thumb.is-active{border-color:var(--pptx-primary)}.pptx-ng-thumb-index{color:#111827;font-size:.7rem;position:absolute;bottom:.15rem;right:.3rem}.pptx-ng-main{background:#1e293b;flex:1;min-width:0;overflow:auto}.pptx-ng-canvas-viewport{width:100%;height:100%}.pptx-ng-element{box-sizing:border-box}.pptx-ng-canvas-stage.is-editable{cursor:default}.pptx-ng-canvas-stage.is-editable .pptx-ng-element{cursor:pointer}.pptx-ng-selection{box-sizing:border-box;outline-offset:1px;pointer-events:none;z-index:10000;background:#4f86ff14;outline:2px solid #4f86ff;position:absolute}.pptx-ng-handle{box-sizing:border-box;pointer-events:auto;touch-action:none;z-index:10001;background:#fff;border:1px solid #4f86ff;border-radius:2px;position:absolute}.pptx-ng-text-editor{box-sizing:border-box;color:#000;font:inherit;resize:none;z-index:10002;white-space:pre-wrap;background:#fffffff5;border:2px solid #4f86ff;margin:0;padding:2px;line-height:1.2;position:absolute;overflow:auto}.pptx-ng-marquee{box-sizing:border-box;pointer-events:none;z-index:9999;background:#4f86ff1f;border:1px dashed #4f86ff;position:absolute}.pptx-ng-snap-guide{box-sizing:border-box;pointer-events:none;z-index:10003;border-top:1px solid #f43f8e;border-left:1px solid #f43f8e;position:absolute}.pptx-ng-rotate-handle{box-sizing:border-box;cursor:grab;pointer-events:auto;touch-action:none;z-index:10001;background:#fff;border:1px solid #4f86ff;border-radius:50%;position:absolute}.pptx-ng-adjust-handle{box-sizing:border-box;cursor:crosshair;pointer-events:auto;touch-action:none;z-index:10001;background:#fcd34d;border:1px solid #b45309;position:absolute;transform:rotate(45deg)}.pptx-ng-inspector-host{background:#00000005;border-left:1px solid #0000001a;flex:0 0 240px;width:240px;overflow:auto}.pptx-ng-idrawer-grab{display:none}.pptx-ng-idrawer-handle{background:#00000040;border-radius:9999px;width:40px;height:4px}.pptx-ng-slide-props{flex-direction:column;gap:.5rem;padding:.75rem;font-size:.8125rem;display:flex}.pptx-ng-prop-row{justify-content:space-between;align-items:center;gap:.5rem;display:flex}.pptx-ng-prop-row.pptx-ng-prop-col{flex-direction:column;align-items:stretch}.pptx-ng-prop-row textarea{resize:vertical;width:100%;font:inherit}.pptx-ng-img{object-fit:contain;width:100%;height:100%;display:block}.pptx-ng-para{margin:0}.pptx-ng-bullet{white-space:pre}.pptx-ng-link{color:inherit;cursor:pointer;text-decoration:underline}.pptx-ng-actions{align-items:center;gap:.25rem;display:flex}.pptx-ng-notes{background:#00000005;border-top:1px solid #0000001a;max-height:30%;margin:.5rem 1rem 1rem;padding:.5rem .75rem;font-size:.875rem;line-height:1.4;overflow:auto}.pptx-ng-notes-title{text-transform:uppercase;letter-spacing:.04em;opacity:.6;margin:0 0 .25rem;font-size:.75rem;font-weight:600}.pptx-ng-notes-body{white-space:pre-wrap;word-break:break-word;margin:0}.pptx-ng-mobile-notes-sheet{background:#fff;border-top:1px solid #00000026;flex:none;max-height:50vh;overflow:auto;box-shadow:0 -6px 20px #0000002e}.pptx-ng-mnotes-grab{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;padding:8px 0 4px;display:flex}.pptx-ng-mnotes-grab:active{cursor:grabbing}.pptx-ng-mnotes-handle{background:#00000040;border-radius:9999px;width:40px;height:4px}.pptx-ng-table-wrapper{width:100%;height:100%;overflow:hidden}.pptx-ng-table-wrapper>.pptx-ng-table{border-collapse:collapse;table-layout:fixed;width:100%;height:100%}.pptx-ng-table-wrapper>.pptx-ng-table td{word-break:break-word;vertical-align:middle;overflow:hidden}.pptx-ng-table-wrapper>.pptx-ng-table td .pptx-ng-cell-input{box-sizing:border-box;width:100%;color:inherit;font:inherit;background:0 0;border:none;outline:none;margin:0;padding:0}.pptx-ng-chart svg{width:100%;height:100%;display:block}.pptx-ng-placeholder{color:#6366f1cc;background:#6366f10f;border:1px dashed #6366f180;justify-content:center;align-items:center;width:100%;height:100%;font-size:.75rem;display:flex}.pptx-ng-overlay-grid{pointer-events:none;z-index:2;position:absolute;inset:0}.pptx-ng-overlay-guides{pointer-events:none;z-index:3;position:absolute;inset:0}.pptx-ng-ruler-corner{pointer-events:none;z-index:52;background:#1e293b;border-bottom:1px solid #ffffff1a;border-right:1px solid #ffffff1a;width:20px;height:20px;position:absolute;top:0;left:0}.pptx-ng-ruler-h{z-index:51;height:20px;position:absolute;top:0;left:20px;overflow:hidden}.pptx-ng-ruler-v{z-index:51;width:20px;position:absolute;top:20px;left:0;overflow:hidden}.pptx-ng-ruler-guide-line{pointer-events:none;z-index:49;background:#facc15d9;position:absolute}.pptx-ng-ruler-guide-handle{pointer-events:auto;touch-action:none;z-index:50;position:absolute}.pptx-rb-eyedropper-active{background-color:var(--color-purple-600);color:var(--color-white)}.pptx-rb-template-active{background-color:var(--color-amber-500);color:var(--color-white)}@media (max-width:640px),(pointer:coarse){.pptx-ng-toolbar{flex-wrap:wrap;gap:.5rem;padding:.5rem}.pptx-ng-actions{-webkit-overflow-scrolling:touch;scrollbar-width:thin;flex:100%;gap:.5rem;padding-bottom:.15rem;overflow-x:auto}.pptx-ng-actions button{flex:none}.pptx-ng-nav button,.pptx-ng-zoom button,.pptx-ng-actions button{min-width:44px;height:auto;min-height:44px;padding:0 .65rem;font-size:1.1rem}.pptx-ng-nav button{font-size:1.5rem;font-weight:600}.pptx-ng-thumbnails{border-right:none;border-bottom:1px solid var(--pptx-border);flex-direction:row;width:auto;max-width:100%;padding:.5rem;overflow:auto hidden}.pptx-ng-thumbnails .pptx-ng-thumb{flex:0 0 4.5rem;width:4.5rem}.pptx-ng-body{flex-direction:column}.pptx-ng-body>pptx-slides-panel{flex:none;max-height:30vh}.pptx-ng-inspector-host{border-left:none;border-top:1px solid var(--pptx-border);flex:none;width:100%;max-height:40vh}.pptx-ng-idrawer-grab{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;background:inherit;justify-content:center;align-items:center;padding:8px 0 4px;display:flex;position:sticky;top:0}.pptx-ng-main{flex:auto;min-height:50vh}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}
@@ -649,6 +649,31 @@ declare function revealedElementStyles(groups: readonly AnimationClickGroup[], s
649
649
  */
650
650
  declare function pendingElementStyles(groups: readonly AnimationClickGroup[], step: number): Map<string, CSSProperties>;
651
651
 
652
+ /**
653
+ * Framework-agnostic helpers for inline (on-canvas) SmartArt node text editing.
654
+ *
655
+ * The actual text mutation lives in `pptx-viewer-core`
656
+ * (`updateSmartArtNodeText`); these helpers cover the pure, binding-independent
657
+ * concerns around it:
658
+ *
659
+ * - `findSmartArtNodeText`: look up a node's current text by id.
660
+ * - `shouldCommitSmartArtNodeText`: decide whether a new value differs from the
661
+ * current one (so a no-op blur does not push a history entry).
662
+ * - `computeInlineEditorRect`: project a node's on-screen bounding box into
663
+ * coordinates relative to the SmartArt container so an HTML editor overlay can
664
+ * be positioned exactly over the node.
665
+ *
666
+ * @module smartart-inline-edit
667
+ */
668
+
669
+ /** A minimal rectangle (DOMRect-compatible) used for overlay positioning. */
670
+ interface InlineEditRect {
671
+ left: number;
672
+ top: number;
673
+ width: number;
674
+ height: number;
675
+ }
676
+
652
677
  /**
653
678
  * Pure geometry helpers for the align / distribute editor operations.
654
679
  *
@@ -3279,6 +3304,7 @@ declare class PowerPointViewerComponent {
3279
3304
  protected readonly print: PrintService;
3280
3305
  protected readonly mobile: IsMobileService;
3281
3306
  private readonly smartArt3DSvc;
3307
+ private readonly zoomTarget;
3282
3308
  /** The `<main>` host; used to locate the live `.pptx-ng-canvas-stage`. */
3283
3309
  private readonly mainEl;
3284
3310
  /** True while a PNG/PDF export is in progress (disables the buttons). */
@@ -3565,12 +3591,16 @@ declare class PowerPointViewerComponent {
3565
3591
  /** Receive an eraser hit and delete the targeted ink element. */
3566
3592
  protected onEraserHit(id: string): void;
3567
3593
  /**
3568
- * Activate the native EyeDropper API to pick a colour from the screen.
3594
+ * Activate the eyedropper to pick a colour from the screen. Uses the native
3595
+ * EyeDropper API where available (Chrome/Edge); on Firefox/Safari it falls
3596
+ * back to a one-shot click that samples the slide DOM under the pointer.
3569
3597
  * When a shape/text/connector/image element is selected, applies the colour
3570
- * to its fill. Otherwise copies the colour to the clipboard. No-ops when
3571
- * the EyeDropper API is not available or the user cancels.
3598
+ * to its fill; otherwise copies it to the clipboard. No-ops when the user
3599
+ * cancels (Escape) or nothing paintable is under the pointer.
3572
3600
  */
3573
3601
  protected onToggleEyedropper(): Promise<void>;
3602
+ /** Apply a picked colour to the selected shape's fill, else copy to clipboard. */
3603
+ private applyEyedropperColor;
3574
3604
  /** Append a comment to the active slide (one history entry). */
3575
3605
  onCommentAdd(text: string): void;
3576
3606
  /** Remove a comment from the active slide. */
@@ -4446,20 +4476,44 @@ interface InlineEditState {
4446
4476
  text: string;
4447
4477
  }
4448
4478
 
4479
+ /**
4480
+ * Pure narrowing and text-layout helpers for SmartArtRendererComponent.
4481
+ * Extracted to keep the component file within the per-file line budget.
4482
+ * Re-imported as class-property function references so Angular template
4483
+ * type-checking continues to work without changes to the template.
4484
+ */
4485
+
4486
+ /** Narrow a RenderedNode to a circle, or undefined. */
4487
+ declare function narrowToCircle(node: RenderedNode): RenderedCircleNode | undefined;
4488
+ /** Narrow a RenderedNode to a polygon, or undefined. */
4489
+ declare function narrowToPolygon(node: RenderedNode): RenderedPolygonNode | undefined;
4490
+ /** Narrow a RenderedNode to a rect, or undefined. */
4491
+ declare function narrowToRect(node: RenderedNode): RenderedRectNode | undefined;
4492
+ /**
4493
+ * Split node text on newlines and compute per-line y offsets (in SVG px)
4494
+ * that centre the block around the node centre y (offset 0). Single-line
4495
+ * text produces one entry with offsetY=0, preserving the existing
4496
+ * dominant-baseline="central" behaviour exactly.
4497
+ */
4498
+ declare function computeTextLines(text: string, fontSize: number): Array<{
4499
+ text: string;
4500
+ offsetY: number;
4501
+ }>;
4502
+
4449
4503
  /**
4450
4504
  * SmartArtRendererComponent: Angular SmartArt renderer.
4451
4505
  *
4452
4506
  * Data path mirrors the Vue `SmartArtRenderer.vue` and the React renderer:
4453
- * 1. **Drawing shapes** (`smartArtData.drawingShapes`) the preferred path
4507
+ * 1. **Drawing shapes** (`smartArtData.drawingShapes`) -- the preferred path
4454
4508
  * when the core extracted per-shape geometry from `ppt/diagrams/drawing*.xml`.
4455
- * 2. **Shared SVG-fallback engine** (`computeSmartArtLayout`) when no drawing
4509
+ * 2. **Shared SVG-fallback engine** (`computeSmartArtLayout`) -- when no drawing
4456
4510
  * shapes exist, the framework-agnostic engine in `pptx-viewer-shared`
4457
4511
  * positions/styles the node tree across all 10 layout families (list /
4458
4512
  * process / cycle / hierarchy / matrix / radial / pyramid / venn / funnel /
4459
4513
  * target), returning `RenderedNode[]` (rect / circle / polygon) +
4460
4514
  * `RenderedConnector[]` view-models. Every binding renders the same
4461
4515
  * geometry; this maps those view-models to SVG exactly as Vue does.
4462
- * 3. **Placeholder** when there is neither data nor any nodes/shapes.
4516
+ * 3. **Placeholder** -- when there is neither data nor any nodes/shapes.
4463
4517
  */
4464
4518
  declare class SmartArtRendererComponent {
4465
4519
  /** The smartArt element to render. Must be `type === 'smartArt'`. */
@@ -4483,6 +4537,8 @@ declare class SmartArtRendererComponent {
4483
4537
  protected readonly editState: _angular_core.WritableSignal<InlineEditState | null>;
4484
4538
  /** The mounted `<textarea>` for the active node edit, if any. */
4485
4539
  private readonly nodeEditor;
4540
+ /** Container div ref used to project hover rects into local coordinates. */
4541
+ private readonly smartartContainer;
4486
4542
  /**
4487
4543
  * Guards against a cancel-triggered DOM-removal blur committing the edit.
4488
4544
  * Set to true before programmatic cancellation; reset to false on each new edit.
@@ -4504,6 +4560,12 @@ declare class SmartArtRendererComponent {
4504
4560
  /** `viewBox` attribute string for the drawing-shapes `<svg>`. */
4505
4561
  readonly svgViewBox: _angular_core.Signal<string>;
4506
4562
  readonly renderedShapes: _angular_core.Signal<RenderedShape[]>;
4563
+ /**
4564
+ * Node id for each drawing shape (index-aligned with `renderedShapes`).
4565
+ * Used to tag `<g>` elements with `data-smartart-node-id` so the 3D
4566
+ * renderer's hit-test overlay can resolve a click to a node.
4567
+ */
4568
+ readonly drawingShapeNodeIds: _angular_core.Signal<(string | undefined)[]>;
4507
4569
  readonly layout: _angular_core.Signal<SmartArtLayoutResult>;
4508
4570
  readonly hasLayout: _angular_core.Signal<boolean>;
4509
4571
  /**
@@ -4514,6 +4576,12 @@ declare class SmartArtRendererComponent {
4514
4576
  readonly a11y: _angular_core.Signal<SmartArtA11y | undefined>;
4515
4577
  /** Map of node id -> accessibility label (for per-node `<title>` lookup). */
4516
4578
  private readonly a11yLabelById;
4579
+ /**
4580
+ * Parsed data-model node id for a rendered node (or `null` when the key does
4581
+ * not map to one). Exposed as a method so the template can use it: Angular
4582
+ * AOT templates can only call component members, not imported functions.
4583
+ */
4584
+ nodeKeyId(node: RenderedNode): string | null;
4517
4585
  /** Resolve the accessibility label for a rendered node (by parsed node id). */
4518
4586
  nodeAriaLabel(node: RenderedNode): string | null;
4519
4587
  /**
@@ -4521,22 +4589,13 @@ declare class SmartArtRendererComponent {
4521
4589
  * Empty between commits so assistive tech only speaks on change.
4522
4590
  */
4523
4591
  readonly liveMessage: _angular_core.WritableSignal<string>;
4524
- /** Narrow a `RenderedNode` to a circle, or `undefined`. */
4525
- asCircle(node: RenderedNode): RenderedCircleNode | undefined;
4526
- /** Narrow a `RenderedNode` to a polygon, or `undefined`. */
4527
- asPolygon(node: RenderedNode): RenderedPolygonNode | undefined;
4528
- /** Narrow a `RenderedNode` to a rect, or `undefined`. */
4529
- asRect(node: RenderedNode): RenderedRectNode | undefined;
4530
- /**
4531
- * Split node text on `\n` and compute per-line y offsets (in SVG px) that
4532
- * centre the block around the node centre y (offset 0). Single-line text
4533
- * produces one entry with offsetY=0, preserving the existing
4534
- * `dominant-baseline="central"` behaviour exactly.
4535
- */
4536
- protected textLines(text: string, fontSize: number): Array<{
4537
- text: string;
4538
- offsetY: number;
4539
- }>;
4592
+ protected readonly hoveredNodeId: _angular_core.WritableSignal<string | null>;
4593
+ protected readonly hoveredNodeRect: _angular_core.WritableSignal<InlineEditRect | null>;
4594
+ /** Narrowing helpers bound as class properties for template type-checking. */
4595
+ protected readonly asCircle: typeof narrowToCircle;
4596
+ protected readonly asPolygon: typeof narrowToPolygon;
4597
+ protected readonly asRect: typeof narrowToRect;
4598
+ protected readonly textLines: typeof computeTextLines;
4540
4599
  /** Double-click a node enters inline edit mode (when editable). */
4541
4600
  onNodeDblClick(event: Event, node: RenderedNode): void;
4542
4601
  /** Enter / F2 on a focused node enters inline edit mode (when editable). */
@@ -4551,6 +4610,11 @@ declare class SmartArtRendererComponent {
4551
4610
  private rawNodeText;
4552
4611
  /** Commit edited text through the shared editor state (one history entry). */
4553
4612
  private applyCommit;
4613
+ protected readonly styleBarStyle: _angular_core.Signal<Record<string, string> | null>;
4614
+ protected onMouseMove(event: MouseEvent): void;
4615
+ protected onMouseLeave(): void;
4616
+ private findNodeEl;
4617
+ protected handleChangeNodeStyle(nodeId: string, fill: string): void;
4554
4618
  readonly isEmpty: _angular_core.Signal<boolean>;
4555
4619
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SmartArtRendererComponent, never>;
4556
4620
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SmartArtRendererComponent, "pptx-smart-art-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -4789,6 +4853,16 @@ interface ZoomViewModel {
4789
4853
  readonly slideLabel: string;
4790
4854
  /** Accessible label for the element. */
4791
4855
  readonly ariaLabel: string;
4856
+ /**
4857
+ * Fallback-thumbnail background colour: the target slide's own background when
4858
+ * known, else a neutral grey. Mirrors React's `ZoomSlideThumbnail`.
4859
+ */
4860
+ readonly thumbnailBackground: string;
4861
+ /**
4862
+ * Friendly section caption for the fallback thumbnail: the target slide's
4863
+ * section name when resolved, else the raw `targetSectionId` (GUID).
4864
+ */
4865
+ readonly sectionCaption: string | undefined;
4792
4866
  }
4793
4867
 
4794
4868
  /**
@@ -4803,9 +4877,15 @@ interface ZoomViewModel {
4803
4877
  * In presentation mode the overlay provides a {@link ZoomNavigationService}, so
4804
4878
  * clicking (or Enter/Space) jumps to the target slide. Outside presentation mode
4805
4879
  * the service is not provided (optional injection yields `null`) and the tile
4806
- * stays a static link, exactly as before. Live target-slide preview rendering is
4807
- * still NOT ported; the `slides` array is not threaded through, so the fallback
4808
- * uses the target slide index rather than the real target background.
4880
+ * stays a static link, exactly as before.
4881
+ *
4882
+ * The fallback thumbnail (no embedded preview image) matches React's
4883
+ * `ZoomSlideThumbnail`: when a {@link ZoomTargetService} is provided (by the
4884
+ * viewer), it looks up the target slide and uses that slide's real background
4885
+ * colour, its own 1-based number, and its friendly section name. A live
4886
+ * mini-rendering of the target slide is intentionally NOT drawn. When the
4887
+ * service is absent the tile keeps the neutral grey / index / section-GUID
4888
+ * fallback.
4809
4889
  *
4810
4890
  * All non-trivial pure computation lives in `zoom-renderer-helpers.ts` (no
4811
4891
  * Angular dependency) so it can be unit-tested without TestBed.
@@ -4815,6 +4895,12 @@ declare class ZoomRendererComponent {
4815
4895
  readonly zIndex: _angular_core.InputSignal<number>;
4816
4896
  readonly mediaDataUrls: _angular_core.InputSignal<Map<string, string>>;
4817
4897
  readonly containerStyle: _angular_core.Signal<StyleMap>;
4898
+ /**
4899
+ * Target-slide lookup, provided by the viewer. `null` in trees that do not
4900
+ * provide it (e.g. isolated component tests), where the fallback thumbnail
4901
+ * stays on the neutral grey / index / section-GUID placeholder.
4902
+ */
4903
+ private readonly zoomTarget;
4818
4904
  readonly vm: _angular_core.Signal<ZoomViewModel>;
4819
4905
  /**
4820
4906
  * Zoom-navigation context, present only inside a running presentation (the
@@ -5347,6 +5433,8 @@ declare class InspectorPanelComponent {
5347
5433
  textColor: string;
5348
5434
  fontSize: number;
5349
5435
  }>;
5436
+ /** Whether the element has lock flags preventing move/select. */
5437
+ protected readonly isLocked: _angular_core.Signal<boolean>;
5350
5438
  /** Whether the element supports shape-style (fill/stroke) editing. */
5351
5439
  protected readonly hasShape: _angular_core.Signal<boolean>;
5352
5440
  /** Whether the element supports text-style editing. */
@@ -5369,6 +5457,8 @@ declare class InspectorPanelComponent {
5369
5457
  * identically.
5370
5458
  */
5371
5459
  protected onSmartArtDataChange(smartArtData: PptxSmartArtData): void;
5460
+ /** Toggle element lock (noMove + noResize + noSelect). */
5461
+ protected onLockToggle(): void;
5372
5462
  /** Commit a partial-element patch from an advanced sub-panel as one history entry. */
5373
5463
  protected onPatch(patch: Partial<PptxElement>): void;
5374
5464
  /** Commit a fully-replaced element (table/chart data editors) as one history entry. */
@@ -1 +0,0 @@
1
- {"version":3,"file":"pptx-angular-viewer-index-BfKeZbQy.mjs","sources":["../../src/internal/shared-src/smartart-3d/text-texture.ts","../../src/internal/shared-src/smartart-3d/meshes.ts","../../src/internal/shared-src/smartart-3d/scene.ts","../../src/internal/shared-src/smartart-3d/index.ts"],"sourcesContent":["/**\n * Three.js SmartArt renderer - front-face text textures.\n *\n * Renders a node label onto an offscreen 2D canvas and wraps it as a\n * `THREE.CanvasTexture`, sized to sit on the extruded block's front face. Text\n * is word-wrapped and auto-shrunk to fit the node footprint. Returns `null` in\n * non-DOM environments (SSR / unit tests).\n */\n\nimport { CanvasTexture, LinearFilter, SRGBColorSpace } from 'three';\n\n/** A built label texture plus the world-space plane size it should fill. */\nexport interface SmartArtTextTexture {\n\ttexture: CanvasTexture;\n\t/** Plane width in world (layout-pixel) units. */\n\tworldWidth: number;\n\t/** Plane height in world units. */\n\tworldHeight: number;\n}\n\n/** Supersampling factor for crisp text at oblique camera angles. */\nconst SUPERSAMPLE = 4;\n/** Fraction of the footprint the text plane occupies (inset padding). */\nconst FILL = 0.86;\n\n/** Greedily word-wrap `text` to lines that fit `maxWidth` at the given font. */\nfunction wrapLines(ctx: CanvasRenderingContext2D, text: string, maxWidth: number): string[] {\n\tconst words = text.split(/\\s+/u).filter(Boolean);\n\tif (words.length === 0) {\n\t\treturn [];\n\t}\n\tconst lines: string[] = [];\n\tlet line = words[0];\n\tfor (let i = 1; i < words.length; i++) {\n\t\tconst candidate = `${line} ${words[i]}`;\n\t\tif (ctx.measureText(candidate).width <= maxWidth) {\n\t\t\tline = candidate;\n\t\t} else {\n\t\t\tlines.push(line);\n\t\t\tline = words[i];\n\t\t}\n\t}\n\tlines.push(line);\n\treturn lines;\n}\n\n/**\n * Build a label texture for a node's front face.\n *\n * @param text Label text.\n * @param color CSS colour for the text.\n * @param fontSize Requested font size in layout pixels.\n * @param footW Node footprint width (layout pixels).\n * @param footH Node footprint height (layout pixels).\n * @returns The texture + plane size, or `null` when no DOM / empty text.\n */\nexport function makeTextTexture(\n\ttext: string,\n\tcolor: string,\n\tfontSize: number,\n\tfootW: number,\n\tfootH: number,\n): SmartArtTextTexture | null {\n\tif (typeof document === 'undefined' || !text.trim() || footW <= 0 || footH <= 0) {\n\t\treturn null;\n\t}\n\n\tconst worldWidth = footW * FILL;\n\tconst worldHeight = footH * FILL;\n\tconst canvas = document.createElement('canvas');\n\tcanvas.width = Math.max(8, Math.round(worldWidth * SUPERSAMPLE));\n\tcanvas.height = Math.max(8, Math.round(worldHeight * SUPERSAMPLE));\n\tconst ctx = canvas.getContext('2d');\n\tif (!ctx) {\n\t\treturn null;\n\t}\n\n\tconst family = 'system-ui, -apple-system, Segoe UI, Roboto, sans-serif';\n\tconst maxTextWidth = canvas.width * 0.94;\n\n\t// Shrink the font until the wrapped block fits the canvas height.\n\tlet px = Math.max(6, fontSize) * SUPERSAMPLE;\n\tlet lines: string[] = [];\n\tfor (let attempt = 0; attempt < 12; attempt++) {\n\t\tctx.font = `600 ${px}px ${family}`;\n\t\tlines = wrapLines(ctx, text, maxTextWidth);\n\t\tconst lineHeight = px * 1.2;\n\t\tif (lines.length * lineHeight <= canvas.height * 0.96 || px <= 6 * SUPERSAMPLE) {\n\t\t\tbreak;\n\t\t}\n\t\tpx *= 0.88;\n\t}\n\n\tctx.clearRect(0, 0, canvas.width, canvas.height);\n\tctx.fillStyle = color;\n\tctx.textAlign = 'center';\n\tctx.textBaseline = 'middle';\n\tctx.font = `600 ${px}px ${family}`;\n\tconst lineHeight = px * 1.2;\n\tconst blockHeight = lines.length * lineHeight;\n\tconst startY = canvas.height / 2 - blockHeight / 2 + lineHeight / 2;\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tctx.fillText(lines[i], canvas.width / 2, startY + i * lineHeight);\n\t}\n\n\tconst texture = new CanvasTexture(canvas);\n\ttexture.colorSpace = SRGBColorSpace;\n\ttexture.minFilter = LinearFilter;\n\ttexture.magFilter = LinearFilter;\n\ttexture.needsUpdate = true;\n\n\treturn { texture, worldWidth, worldHeight };\n}\n","/**\n * Three.js SmartArt renderer - mesh-group construction.\n *\n * Turns a pure {@link SmartArt3DModel} into a `THREE.Group` of extruded blocks\n * (with bevels, edge outlines, and front-face text planes) plus connector\n * lines. All allocated GPU resources are tracked so the caller can dispose them\n * deterministically.\n */\n\nimport {\n\tBufferGeometry,\n\tColor,\n\tEdgesGeometry,\n\tEuler,\n\tExtrudeGeometry,\n\tGroup,\n\tLine,\n\tLineBasicMaterial,\n\tLineSegments,\n\tMesh,\n\tMeshBasicMaterial,\n\tMeshStandardMaterial,\n\tPlaneGeometry,\n\tShape,\n\tVector3,\n} from 'three';\n\nimport type { SmartArt3DMesh, SmartArt3DModel } from '../render/smartart-3d-types';\nimport { makeTextTexture } from './text-texture';\n\n/** A disposable GPU resource (geometry, material, or texture). */\ninterface Disposable {\n\tdispose: () => void;\n}\n\n/** A built mesh group plus its teardown hook. */\nexport interface BuiltMeshGroup {\n\tgroup: Group;\n\tdispose: () => void;\n}\n\n/** Build the extruded geometry for one node. */\nfunction extrudeGeometry(m: SmartArt3DMesh): ExtrudeGeometry {\n\tconst shape = new Shape();\n\tm.outline.forEach((p, i) => {\n\t\tif (i === 0) {\n\t\t\tshape.moveTo(p.x, p.y);\n\t\t} else {\n\t\t\tshape.lineTo(p.x, p.y);\n\t\t}\n\t});\n\tshape.closePath();\n\n\tconst bevelEnabled = m.bevel > 0;\n\treturn new ExtrudeGeometry(shape, {\n\t\tdepth: m.depth,\n\t\tbevelEnabled,\n\t\tbevelThickness: m.bevel,\n\t\tbevelSize: m.bevel,\n\t\tbevelSegments: 2,\n\t\tcurveSegments: m.rounded ? 24 : 1,\n\t\tsteps: 1,\n\t});\n}\n\n/** Add the extruded block + edge outline for one node to the group. */\nfunction addBlock(group: Group, disposables: Disposable[], m: SmartArt3DMesh): ExtrudeGeometry {\n\tconst geo = extrudeGeometry(m);\n\tconst material = new MeshStandardMaterial({\n\t\tcolor: new Color(m.fill),\n\t\tmetalness: 0.12,\n\t\troughness: 0.52,\n\t\ttransparent: m.opacity < 1,\n\t\topacity: m.opacity,\n\t});\n\tconst mesh = new Mesh(geo, material);\n\tmesh.position.set(m.position.x, m.position.y, m.position.z);\n\tmesh.rotation.set(m.rotation.x, m.rotation.y, m.rotation.z);\n\tgroup.add(mesh);\n\tdisposables.push(geo, material);\n\n\tif (m.strokeWidth > 0) {\n\t\tconst edges = new EdgesGeometry(geo, 30);\n\t\tconst lineMaterial = new LineBasicMaterial({ color: new Color(m.stroke) });\n\t\tconst line = new LineSegments(edges, lineMaterial);\n\t\tline.position.copy(mesh.position);\n\t\tline.rotation.copy(mesh.rotation);\n\t\tgroup.add(line);\n\t\tdisposables.push(edges, lineMaterial);\n\t}\n\treturn geo;\n}\n\n/** Add a front-face text plane for one node, if it has a label. */\nfunction addLabel(group: Group, disposables: Disposable[], m: SmartArt3DMesh): void {\n\tif (!m.text) {\n\t\treturn;\n\t}\n\tconst tex = makeTextTexture(m.text, m.textColor, m.fontSize, m.halfWidth * 2, m.halfHeight * 2);\n\tif (!tex) {\n\t\treturn;\n\t}\n\tconst planeGeo = new PlaneGeometry(tex.worldWidth, tex.worldHeight);\n\tconst planeMaterial = new MeshBasicMaterial({\n\t\tmap: tex.texture,\n\t\ttransparent: true,\n\t\tdepthWrite: false,\n\t});\n\tconst plane = new Mesh(planeGeo, planeMaterial);\n\t// Float just past the front (+z) face, clearing any bevel, following the\n\t// mesh's rotation so the label sits flat on the (possibly rotated) face.\n\tconst euler = new Euler(m.rotation.x, m.rotation.y, m.rotation.z);\n\tconst offset = new Vector3(0, 0, m.depth + m.bevel + 0.4).applyEuler(euler);\n\tplane.position.set(m.position.x + offset.x, m.position.y + offset.y, m.position.z + offset.z);\n\tplane.rotation.copy(euler);\n\tgroup.add(plane);\n\tdisposables.push(planeGeo, planeMaterial, tex.texture);\n}\n\n/** Add a connector poly-line on the base plane. */\nfunction addConnectors(group: Group, disposables: Disposable[], model: SmartArt3DModel): void {\n\tfor (const c of model.connectors) {\n\t\tif (c.points.length < 2) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst geo = new BufferGeometry().setFromPoints(c.points.map((p) => new Vector3(p.x, p.y, p.z)));\n\t\tconst material = new LineBasicMaterial({\n\t\t\tcolor: new Color(c.color),\n\t\t\ttransparent: true,\n\t\t\topacity: 0.7,\n\t\t});\n\t\tgroup.add(new Line(geo, material));\n\t\tdisposables.push(geo, material);\n\t}\n}\n\n/**\n * Build a `THREE.Group` for a SmartArt 3D model. The group is centred on the\n * origin (the model positions already are); callers add it to the scene.\n */\nexport function buildMeshGroup(model: SmartArt3DModel): BuiltMeshGroup {\n\tconst group = new Group();\n\tconst disposables: Disposable[] = [];\n\n\tfor (const m of model.meshes) {\n\t\taddBlock(group, disposables, m);\n\t\taddLabel(group, disposables, m);\n\t}\n\taddConnectors(group, disposables, model);\n\n\treturn {\n\t\tgroup,\n\t\tdispose() {\n\t\t\tfor (const d of disposables) {\n\t\t\t\td.dispose();\n\t\t\t}\n\t\t},\n\t};\n}\n","/**\n * Three.js SmartArt renderer - vanilla scene runtime.\n *\n * Frames a {@link SmartArt3DModel} in a WebGL scene (lights, perspective\n * camera, optional OrbitControls, render loop) on a caller-provided canvas.\n * Pure vanilla three.js - no framework code - so the React, Vue, and Angular\n * bindings all mount it through a thin canvas wrapper. `three` is imported here\n * only; this module lives behind the `pptx-viewer-shared/smartart-3d` subpath so\n * it is lazily loaded and `three` stays an optional dependency.\n */\n\nimport {\n\tAmbientLight,\n\tColor,\n\tDirectionalLight,\n\tPerspectiveCamera,\n\tScene,\n\tWebGLRenderer,\n} from 'three';\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\n\nimport type { SmartArt3DModel } from '../render/smartart-3d-types';\nimport { buildMeshGroup } from './meshes';\n\n/** Tunables for the mounted 3D view. */\nexport interface SmartArt3DViewOptions {\n\t/** Enable OrbitControls (rotate/zoom). Default `false`. */\n\tinteractive?: boolean;\n\t/** Slowly auto-rotate the model. Default `false`. */\n\tautoRotate?: boolean;\n\t/** Solid background colour `#rrggbb`; omit for transparent. */\n\tbackground?: string;\n\t/** Device pixel-ratio cap. Default `2`. */\n\tmaxPixelRatio?: number;\n}\n\n/** Imperative handle to a mounted SmartArt 3D view. */\nexport interface SmartArt3DHandle {\n\t/** Resize the renderer + camera to new pixel dimensions. */\n\tresize: (width: number, height: number) => void;\n\t/** Toggle interactive orbit controls at runtime. */\n\tsetInteractive: (on: boolean) => void;\n\t/** Tear down the renderer, controls, and all GPU resources. */\n\tdispose: () => void;\n}\n\nconst FOV = 42;\n\n/** A bounding sphere of the 3D content (centre + radius). */\ninterface ContentSphere {\n\tcx: number;\n\tcy: number;\n\tcz: number;\n\tradius: number;\n}\n\n/** Bounding sphere of all meshes (expanded by footprint/depth) + connectors. */\nfunction contentSphere(model: SmartArt3DModel): ContentSphere {\n\tlet minX = Infinity;\n\tlet minY = Infinity;\n\tlet minZ = Infinity;\n\tlet maxX = -Infinity;\n\tlet maxY = -Infinity;\n\tlet maxZ = -Infinity;\n\tconst expand = (x: number, y: number, z: number, r: number): void => {\n\t\tminX = Math.min(minX, x - r);\n\t\tminY = Math.min(minY, y - r);\n\t\tminZ = Math.min(minZ, z - r);\n\t\tmaxX = Math.max(maxX, x + r);\n\t\tmaxY = Math.max(maxY, y + r);\n\t\tmaxZ = Math.max(maxZ, z + r);\n\t};\n\tfor (const m of model.meshes) {\n\t\tconst r = Math.max(m.halfWidth, m.halfHeight) + m.depth + m.bevel;\n\t\texpand(m.position.x, m.position.y, m.position.z, r);\n\t}\n\tfor (const c of model.connectors) {\n\t\tfor (const p of c.points) {\n\t\t\texpand(p.x, p.y, p.z, 1);\n\t\t}\n\t}\n\tif (!Number.isFinite(minX)) {\n\t\tconst fallback = Math.max(model.bounds.width, model.bounds.height) / 2 || 1;\n\t\treturn { cx: 0, cy: 0, cz: 0, radius: fallback };\n\t}\n\treturn {\n\t\tcx: (minX + maxX) / 2,\n\t\tcy: (minY + maxY) / 2,\n\t\tcz: (minZ + maxZ) / 2,\n\t\tradius: 0.5 * Math.hypot(maxX - minX, maxY - minY, maxZ - minZ) || 1,\n\t};\n}\n\n/** Camera distance that frames a bounding sphere of `radius` at the given FOV. */\nfunction frameDistance(radius: number, aspect: number): number {\n\tconst vFov = (FOV * Math.PI) / 180;\n\tconst hFov = 2 * Math.atan(Math.tan(vFov / 2) * aspect);\n\tconst minFov = Math.min(vFov, hFov);\n\treturn (radius / Math.sin(minFov / 2)) * 1.1;\n}\n\n/**\n * Mount a SmartArt 3D model onto a canvas and start rendering.\n *\n * @returns a handle for resizing, toggling interactivity, and disposal.\n */\nexport function mountSmartArt3D(\n\tcanvas: HTMLCanvasElement,\n\tmodel: SmartArt3DModel,\n\twidth: number,\n\theight: number,\n\toptions: SmartArt3DViewOptions = {},\n): SmartArt3DHandle {\n\tconst renderer = new WebGLRenderer({ canvas, antialias: true, alpha: !options.background });\n\trenderer.setPixelRatio(\n\t\tMath.min(\n\t\t\ttypeof window === 'undefined' ? 1 : window.devicePixelRatio || 1,\n\t\t\toptions.maxPixelRatio ?? 2,\n\t\t),\n\t);\n\trenderer.setSize(width, height, false);\n\n\tconst scene = new Scene();\n\tif (options.background) {\n\t\tscene.background = new Color(options.background);\n\t}\n\n\tconst { cx, cy, cz, radius } = contentSphere(model);\n\tconst aspect = width / Math.max(1, height);\n\tconst dist = frameDistance(radius, aspect);\n\n\tconst camera = new PerspectiveCamera(FOV, aspect, 0.1, dist * 8 + radius * 4);\n\t// A slight elevation + offset gives the extrusion/spatial depth a readable\n\t// three-quarter presence, framing the content's own centroid.\n\tcamera.position.set(cx + radius * 0.25, cy + radius * 0.3, cz + dist);\n\tcamera.lookAt(cx, cy, cz);\n\n\tscene.add(new AmbientLight(0xffffff, 0.62));\n\tconst key = new DirectionalLight(0xffffff, 0.95);\n\tkey.position.set(cx + radius, cy + radius * 1.4, cz + dist);\n\tscene.add(key);\n\tconst fill = new DirectionalLight(0xffffff, 0.3);\n\tfill.position.set(cx - radius, cy - radius * 0.6, cz + dist * 0.6);\n\tscene.add(fill);\n\n\tconst built = buildMeshGroup(model);\n\tscene.add(built.group);\n\n\tlet controls: OrbitControls | null = null;\n\tconst enableControls = (on: boolean): void => {\n\t\tif (on && !controls) {\n\t\t\tcontrols = new OrbitControls(camera, canvas);\n\t\t\tcontrols.enablePan = false;\n\t\t\tcontrols.target.set(cx, cy, cz);\n\t\t\tcontrols.minDistance = dist * 0.4;\n\t\t\tcontrols.maxDistance = dist * 3;\n\t\t\tcontrols.update();\n\t\t} else if (!on && controls) {\n\t\t\tcontrols.dispose();\n\t\t\tcontrols = null;\n\t\t}\n\t\tif (controls) {\n\t\t\tcontrols.autoRotate = Boolean(options.autoRotate);\n\t\t\tcontrols.autoRotateSpeed = 1.2;\n\t\t}\n\t};\n\tenableControls(Boolean(options.interactive));\n\n\tlet frame = 0;\n\tlet disposed = false;\n\tconst renderLoop = (): void => {\n\t\tif (disposed) {\n\t\t\treturn;\n\t\t}\n\t\tframe = requestAnimationFrame(renderLoop);\n\t\tcontrols?.update();\n\t\trenderer.render(scene, camera);\n\t};\n\tframe = requestAnimationFrame(renderLoop);\n\n\treturn {\n\t\tresize(w: number, h: number) {\n\t\t\tcamera.aspect = w / Math.max(1, h);\n\t\t\tcamera.updateProjectionMatrix();\n\t\t\trenderer.setSize(w, h, false);\n\t\t},\n\t\tsetInteractive(on: boolean) {\n\t\t\tenableControls(on);\n\t\t},\n\t\tdispose() {\n\t\t\tdisposed = true;\n\t\t\tcancelAnimationFrame(frame);\n\t\t\tcontrols?.dispose();\n\t\t\tbuilt.dispose();\n\t\t\trenderer.dispose();\n\t\t},\n\t};\n}\n","/**\n * `pptx-viewer-shared/smartart-3d` - vanilla three.js SmartArt scene runtime.\n *\n * Lazily imported by each binding's SmartArt 3D wrapper so `three` stays an\n * optional dependency: when it is not installed the dynamic import rejects and\n * the binding falls back to the SVG `SmartArtRenderer`. The pure model builder\n * (`buildSmartArt3DModel`) and its types live in the main barrel\n * (`pptx-viewer-shared`) and should be imported from there directly.\n */\n\nexport { mountSmartArt3D } from './scene';\nexport type { SmartArt3DHandle, SmartArt3DViewOptions } from './scene';\nexport type {\n\tSmartArt3DModel,\n\tSmartArt3DModelOptions,\n\tSmartArt3DMesh,\n\tSmartArt3DConnector,\n} from '../render/smartart-3d-types';\n"],"names":[],"mappings":"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"}