pptx-angular-viewer 1.1.58 → 1.1.59
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.
|
|
3
|
+
"version": "1.1.59",
|
|
4
4
|
"description": "Angular PowerPoint viewer and editor component: render, edit, and export PPTX slides in the browser.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"angular",
|
|
@@ -53,11 +53,23 @@
|
|
|
53
53
|
"@angular/core": "^22.0.1",
|
|
54
54
|
"@ngx-translate/core": "^18.0.0",
|
|
55
55
|
"rxjs": "^7.8.0",
|
|
56
|
-
"three": "^0.185.0"
|
|
56
|
+
"three": "^0.185.0",
|
|
57
|
+
"y-webrtc": "^10.3.0",
|
|
58
|
+
"y-websocket": "^3.0.0",
|
|
59
|
+
"yjs": "^13.6.31"
|
|
57
60
|
},
|
|
58
61
|
"peerDependenciesMeta": {
|
|
59
62
|
"three": {
|
|
60
63
|
"optional": true
|
|
64
|
+
},
|
|
65
|
+
"y-webrtc": {
|
|
66
|
+
"optional": true
|
|
67
|
+
},
|
|
68
|
+
"y-websocket": {
|
|
69
|
+
"optional": true
|
|
70
|
+
},
|
|
71
|
+
"yjs": {
|
|
72
|
+
"optional": true
|
|
61
73
|
}
|
|
62
74
|
},
|
|
63
75
|
"module": "fesm2022/pptx-angular-viewer.mjs",
|
package/pptx-angular-viewer.css
CHANGED
|
@@ -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-space-y-reverse:0;--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:"";--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@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-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--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-background:var(--pptx-background,#030712);--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}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:0}.-top-0\.5{top:calc(var(--spacing) * -.5)}.top-1{top:var(--spacing)}.top-full{top:100%}.-right-0\.5{right:calc(var(--spacing) * -.5)}.right-0{right:0}.right-1{right:var(--spacing)}.left-0{left:0}.z-20{z-index:20}.z-50{z-index:50}.z-\[1100\]{z-index:1100}.z-\[9999\]{z-index:9999}.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-0\.5{margin-inline:calc(var(--spacing) * .5)}.mx-1{margin-inline:var(--spacing)}.my-1{margin-block:var(--spacing)}.-mt-0\.5{margin-top:calc(var(--spacing) * -.5)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mr-1{margin-right:var(--spacing)}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.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{height:calc(var(--spacing) * 3)}.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-10{height:calc(var(--spacing) * 10)}.h-24{height:calc(var(--spacing) * 24)}.h-px{height:1px}.w-1\/3{width:33.3333%}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.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-36{width:calc(var(--spacing) * 36)}.w-44{width:calc(var(--spacing) * 44)}.w-48{width:calc(var(--spacing) * 48)}.w-52{width:calc(var(--spacing) * 52)}.w-72{width:calc(var(--spacing) * 72)}.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-2{min-width:calc(var(--spacing) * 2)}.min-w-\[3rem\]{min-width:3rem}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.scale-\[1\.02\]{scale:1.02}.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))}.grid-cols-5{grid-template-columns:repeat(5,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)}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}.self-center{align-self:center}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.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-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-border,.border-border\/40{border-color:var(--color-border)}@supports (color:color-mix(in lab, red, red)){.border-border\/40{border-color:color-mix(in oklab, var(--color-border) 40%, transparent)}}.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-background{background-color:var(--color-background)}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.bg-black\/30{background-color:color-mix(in oklab, var(--color-black) 30%, transparent)}}.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\/40{background-color:var(--color-border)}@supports (color:color-mix(in lab, red, red)){.bg-border\/40{background-color:color-mix(in oklab, var(--color-border) 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-border\/60{background-color:var(--color-border)}@supports (color:color-mix(in lab, red, red)){.bg-border\/60{background-color:color-mix(in oklab, var(--color-border) 60%, transparent)}}.bg-card{background-color:var(--color-card)}.bg-green-600{background-color:var(--color-green-600)}.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-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.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-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.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-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-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.leading-none{--tw-leading:1;line-height:1}.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)}.text-white{color:var(--color-white)}.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)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px 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)}.ring,.ring-1{--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-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-all{transition-property:all;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))}.transition-transform{transition-property:transform,translate,scale,rotate;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)}.outline-none{--tw-outline-style:none;outline-style:none}.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\:scale-125:hover{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-primary\/50:hover{border-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.hover\:border-primary\/50:hover{border-color:color-mix(in oklab, var(--color-primary) 50%, transparent)}}.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-accent\/60:hover{background-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/60:hover{background-color:color-mix(in oklab, var(--color-accent) 60%, transparent)}}.hover\:bg-green-500:hover{background-color:var(--color-green-500)}.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\:bg-primary\/90:hover{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, var(--color-primary) 90%, transparent)}}.hover\:text-foreground:hover{color:var(--color-foreground)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px 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)}}.focus\:border-primary:focus{border-color:var(--color-primary)}.focus\:ring-1:focus{--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)}.focus\:ring-primary:focus{--tw-ring-color:var(--color-primary)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}}pptx-ribbon-file-section,pptx-ribbon-home-section,pptx-ribbon-insert-section,pptx-ribbon-arrange-section,pptx-ribbon-slideshow-section,pptx-ribbon-review-section,pptx-ribbon-view-section,pptx-ribbon-draw-section,pptx-ribbon-design-section,pptx-ribbon-transitions-section,pptx-ribbon-animations-section,pptx-ribbon-paragraph-controls,pptx-ribbon-insert-fields,pptx-ribbon-font-controls{display:contents}.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-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@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:""}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}
|
|
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-space-y-reverse:0;--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:"";--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@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-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--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-background:var(--pptx-background,#030712);--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}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:0}.-top-0\.5{top:calc(var(--spacing) * -.5)}.top-1{top:var(--spacing)}.top-full{top:100%}.-right-0\.5{right:calc(var(--spacing) * -.5)}.right-0{right:0}.right-1{right:var(--spacing)}.left-0{left:0}.z-20{z-index:20}.z-50{z-index:50}.z-\[1100\]{z-index:1100}.z-\[9999\]{z-index:9999}.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-0\.5{margin-inline:calc(var(--spacing) * .5)}.mx-1{margin-inline:var(--spacing)}.my-1{margin-block:var(--spacing)}.-mt-0\.5{margin-top:calc(var(--spacing) * -.5)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mr-1{margin-right:var(--spacing)}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.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{height:calc(var(--spacing) * 3)}.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-10{height:calc(var(--spacing) * 10)}.h-24{height:calc(var(--spacing) * 24)}.h-px{height:1px}.w-1\/3{width:33.3333%}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.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-36{width:calc(var(--spacing) * 36)}.w-44{width:calc(var(--spacing) * 44)}.w-48{width:calc(var(--spacing) * 48)}.w-52{width:calc(var(--spacing) * 52)}.w-72{width:calc(var(--spacing) * 72)}.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-2{min-width:calc(var(--spacing) * 2)}.min-w-\[3rem\]{min-width:3rem}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.scale-\[1\.02\]{scale:1.02}.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))}.grid-cols-5{grid-template-columns:repeat(5,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)}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}.self-center{align-self:center}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.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-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-border,.border-border\/40{border-color:var(--color-border)}@supports (color:color-mix(in lab, red, red)){.border-border\/40{border-color:color-mix(in oklab, var(--color-border) 40%, transparent)}}.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-background{background-color:var(--color-background)}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.bg-black\/30{background-color:color-mix(in oklab, var(--color-black) 30%, transparent)}}.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\/40{background-color:var(--color-border)}@supports (color:color-mix(in lab, red, red)){.bg-border\/40{background-color:color-mix(in oklab, var(--color-border) 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-border\/60{background-color:var(--color-border)}@supports (color:color-mix(in lab, red, red)){.bg-border\/60{background-color:color-mix(in oklab, var(--color-border) 60%, transparent)}}.bg-card{background-color:var(--color-card)}.bg-green-600{background-color:var(--color-green-600)}.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-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.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-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.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-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-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.leading-none{--tw-leading:1;line-height:1}.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)}.text-white{color:var(--color-white)}.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)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px 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)}.ring,.ring-1{--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-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-all{transition-property:all;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))}.transition-transform{transition-property:transform,translate,scale,rotate;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)}.outline-none{--tw-outline-style:none;outline-style:none}.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\:scale-125:hover{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-primary\/50:hover{border-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.hover\:border-primary\/50:hover{border-color:color-mix(in oklab, var(--color-primary) 50%, transparent)}}.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-accent\/60:hover{background-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/60:hover{background-color:color-mix(in oklab, var(--color-accent) 60%, transparent)}}.hover\:bg-green-500:hover{background-color:var(--color-green-500)}.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\:bg-primary\/90:hover{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, var(--color-primary) 90%, transparent)}}.hover\:text-foreground:hover{color:var(--color-foreground)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px 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)}}.focus\:border-primary:focus{border-color:var(--color-primary)}.focus\:ring-1:focus{--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)}.focus\:ring-primary:focus{--tw-ring-color:var(--color-primary)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}}pptx-ribbon-file-section,pptx-ribbon-home-section,pptx-ribbon-insert-section,pptx-ribbon-arrange-section,pptx-ribbon-slideshow-section,pptx-ribbon-review-section,pptx-ribbon-view-section,pptx-ribbon-draw-section,pptx-ribbon-design-section,pptx-ribbon-transitions-section,pptx-ribbon-animations-section,pptx-ribbon-paragraph-controls,pptx-ribbon-insert-fields,pptx-ribbon-font-controls{display:contents}.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;position:relative;overflow:auto}.pptx-ng-collab-follow{z-index:9998;pointer-events:auto;position:absolute;top:.5rem;left:50%;transform:translate(-50%)}.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-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@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:""}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import * as pptx_angular_viewer from 'pptx-angular-viewer';
|
|
1
2
|
import * as _angular_core from '@angular/core';
|
|
2
3
|
import { Signal, WritableSignal, OnDestroy, OnInit, OnChanges, SimpleChanges, InjectionToken, Provider } from '@angular/core';
|
|
3
4
|
import * as pptx_viewer_core from 'pptx-viewer-core';
|
|
4
5
|
import { PptxElement, ShapeStyle, PptxTextWarpPreset, XmlObject, PptxElementAnimation, PptxSlide, TextSegment, TextStyle, PptxTransitionType, PptxEmbeddedFont, AccessibilityIssueSeverity, AccessibilityIssue, AccessibilityIssueType, AccessibilityCheckOptions, PptxComment, SmartArtLayout, PptxTheme, PptxSlideMaster, PptxCoreProperties, PptxCustomProperty, PptxHeaderFooter, ParsedSignature, PptxTableCell, PptxTableData, PptxCustomShow, PptxPresentationProperties, PptxThemePreset, InkPptxElement, Model3DPptxElement, ZoomPptxElement, PptxSlideTransition, TablePptxElement, ChartPptxElement, SmartArtPptxElement, PptxSmartArtData, PptxTableCellStyle, PptxChartDataLabelOptions, PptxChartAxisType, PptxChartAxisFormatting, PptxChartSeries, PptxChartType, PptxChartDataPoint, PptxChartTrendline, PptxChartErrBars, PptxAnimationPreset, PptxAnimationTrigger, PptxAnimationTimingCurve, PptxAnimationRepeatMode, PptxAnimationDirection, PptxAnimationSequence, SignatureStatus } from 'pptx-viewer-core';
|
|
5
|
-
import * as pptx_angular_viewer from 'pptx-angular-viewer';
|
|
6
6
|
import { Options } from 'html2canvas-pro';
|
|
7
7
|
import { SafeHtml } from '@angular/platform-browser';
|
|
8
8
|
|
|
@@ -125,18 +125,37 @@ interface CanvasSize {
|
|
|
125
125
|
}
|
|
126
126
|
/** Collaboration role within a session. */
|
|
127
127
|
type CollaborationRole = 'owner' | 'collaborator' | 'viewer';
|
|
128
|
+
/**
|
|
129
|
+
* Collaboration transport.
|
|
130
|
+
*
|
|
131
|
+
* - `'websocket'` (default): y-websocket against `serverUrl`.
|
|
132
|
+
* - `'webrtc'`: y-webrtc peer-to-peer; needs no document server. Peers meet
|
|
133
|
+
* through the `signaling` servers (WebRTC signaling only, no document data)
|
|
134
|
+
* and same-browser tabs additionally sync via BroadcastChannel even without
|
|
135
|
+
* any signaling server, which makes this mode usable from static hosting.
|
|
136
|
+
*/
|
|
137
|
+
type CollaborationTransport = 'websocket' | 'webrtc';
|
|
128
138
|
/**
|
|
129
139
|
* Real-time collaboration configuration.
|
|
130
140
|
*
|
|
131
|
-
* The
|
|
132
|
-
* type exists so the public prop surface stays identical across React, Vue,
|
|
133
|
-
* and Angular.
|
|
141
|
+
* The same shape is accepted by the React, Vue, and Angular bindings.
|
|
134
142
|
*/
|
|
135
143
|
interface CollaborationConfig {
|
|
136
144
|
/** Unique identifier for the collaboration room (alphanumeric, hyphens, underscores). */
|
|
137
145
|
roomId: string;
|
|
138
|
-
/**
|
|
146
|
+
/**
|
|
147
|
+
* WebSocket server URL for the Yjs provider (e.g. "wss://collab.example.com").
|
|
148
|
+
* Ignored (may be empty) when `transport` is `'webrtc'`.
|
|
149
|
+
*/
|
|
139
150
|
serverUrl: string;
|
|
151
|
+
/** Transport to use. Defaults to `'websocket'`. */
|
|
152
|
+
transport?: CollaborationTransport;
|
|
153
|
+
/**
|
|
154
|
+
* WebRTC signaling server URLs (only used when `transport` is `'webrtc'`).
|
|
155
|
+
* Defaults to y-webrtc's built-in public signaling list. Same-browser tabs
|
|
156
|
+
* sync via BroadcastChannel regardless of signaling availability.
|
|
157
|
+
*/
|
|
158
|
+
signaling?: string[];
|
|
140
159
|
/** Display name for the local user. */
|
|
141
160
|
userName: string;
|
|
142
161
|
/** Avatar URL for the local user (optional). */
|
|
@@ -145,7 +164,7 @@ interface CollaborationConfig {
|
|
|
145
164
|
userColor?: string;
|
|
146
165
|
/** Optional authentication token sent with the WebSocket handshake. */
|
|
147
166
|
authToken?: string;
|
|
148
|
-
/** Role in the session
|
|
167
|
+
/** Role in the session; defaults to `'collaborator'`. */
|
|
149
168
|
role?: CollaborationRole;
|
|
150
169
|
/**
|
|
151
170
|
* Elected-writer write-back callback (Area 3 of the C3 hardening plan).
|
|
@@ -1396,6 +1415,8 @@ declare function resolveHyperlinkHref(url: string | undefined): string | undefin
|
|
|
1396
1415
|
* the Angular `collaboration-helpers.ts` (which predates this shared copy).
|
|
1397
1416
|
*/
|
|
1398
1417
|
|
|
1418
|
+
/** Connection lifecycle states for the Yjs WebSocket provider. */
|
|
1419
|
+
type ConnectionStatus = 'disconnected' | 'connecting' | 'connected' | 'error';
|
|
1399
1420
|
/** A single remote collaborator's cursor, in unscaled slide coordinates. */
|
|
1400
1421
|
interface RemoteCursor {
|
|
1401
1422
|
/** Stable id for the remote client (awareness clientId or peer id). */
|
|
@@ -1964,6 +1985,7 @@ declare function formatRelativeTime(ts: number): string;
|
|
|
1964
1985
|
* ng-packagr lib target). `Math.random` is read inside the generator at call
|
|
1965
1986
|
* time, never at module eval.
|
|
1966
1987
|
*/
|
|
1988
|
+
|
|
1967
1989
|
/** Default y-websocket server URL used when no default is supplied. */
|
|
1968
1990
|
declare const DEFAULT_BROADCAST_SERVER_URL = "ws://localhost:1234";
|
|
1969
1991
|
/** Optional seed values for the broadcast start form. */
|
|
@@ -1975,6 +1997,8 @@ interface BroadcastDefaults {
|
|
|
1975
1997
|
interface BroadcastConfig {
|
|
1976
1998
|
roomId: string;
|
|
1977
1999
|
serverUrl: string;
|
|
2000
|
+
/** Derived from serverUrl: empty server means peer-to-peer (webrtc). */
|
|
2001
|
+
transport?: CollaborationTransport;
|
|
1978
2002
|
}
|
|
1979
2003
|
/** Generate a fresh, broadcast-scoped room id (`broadcast-<suffix>`). */
|
|
1980
2004
|
declare function generateBroadcastRoomId(): string;
|
|
@@ -1983,16 +2007,21 @@ declare function generateBroadcastRoomId(): string;
|
|
|
1983
2007
|
* when none is supplied and falling back to the default server URL.
|
|
1984
2008
|
*/
|
|
1985
2009
|
declare function seedBroadcastFields(defaults?: BroadcastDefaults): BroadcastConfig;
|
|
1986
|
-
/**
|
|
2010
|
+
/**
|
|
2011
|
+
* Whether the form can start: the room id is required; the server URL may be
|
|
2012
|
+
* blank, which selects the serverless webrtc transport.
|
|
2013
|
+
*/
|
|
1987
2014
|
declare function canStartBroadcast(fields: BroadcastConfig): boolean;
|
|
1988
2015
|
/**
|
|
1989
2016
|
* Assemble a {@link BroadcastConfig} from the (trimmed) form fields, or `null`
|
|
1990
|
-
* when incomplete.
|
|
2017
|
+
* when incomplete. A blank server URL yields `transport: 'webrtc'`.
|
|
1991
2018
|
*/
|
|
1992
2019
|
declare function buildBroadcastConfig(fields: BroadcastConfig): BroadcastConfig | null;
|
|
1993
2020
|
/**
|
|
1994
2021
|
* Build the shareable viewer follow-link for a broadcast. Returns just the
|
|
1995
2022
|
* room id when no `origin`/`pathname` are available (non-browser environments).
|
|
2023
|
+
* A blank server URL produces a `transport=webrtc` link instead of a
|
|
2024
|
+
* `server=` parameter.
|
|
1996
2025
|
*/
|
|
1997
2026
|
declare function buildBroadcastViewerUrl(roomId: string, serverUrl: string, location?: {
|
|
1998
2027
|
origin: string;
|
|
@@ -2602,11 +2631,20 @@ interface ConnectOptions {
|
|
|
2602
2631
|
getTemplateElements?: () => TemplateElementsBySlideId;
|
|
2603
2632
|
}
|
|
2604
2633
|
declare class CollaborationService {
|
|
2605
|
-
readonly
|
|
2634
|
+
readonly status: _angular_core.WritableSignal<ConnectionStatus>;
|
|
2635
|
+
readonly connected: _angular_core.Signal<boolean>;
|
|
2606
2636
|
readonly active: _angular_core.WritableSignal<boolean>;
|
|
2637
|
+
/** Role of the local user in the active session, or undefined when idle. */
|
|
2638
|
+
readonly activeRole: _angular_core.WritableSignal<CollaborationRole | undefined>;
|
|
2607
2639
|
readonly presence: _angular_core.WritableSignal<SanitizedPresence[]>;
|
|
2608
2640
|
readonly cursors: _angular_core.Signal<RemoteCursor[]>;
|
|
2609
2641
|
readonly connectedCount: _angular_core.Signal<number>;
|
|
2642
|
+
/** The client id the local user is currently following (null when free). */
|
|
2643
|
+
readonly followedClientId: _angular_core.WritableSignal<number | null>;
|
|
2644
|
+
/** Active-slide index of the followed peer, or null when not following. */
|
|
2645
|
+
readonly followedSlideIndex: _angular_core.Signal<number | null>;
|
|
2646
|
+
/** Active-slide index of the first `owner` peer (the broadcaster), or null. */
|
|
2647
|
+
readonly broadcasterSlideIndex: _angular_core.Signal<number | null>;
|
|
2610
2648
|
private ydoc;
|
|
2611
2649
|
private provider;
|
|
2612
2650
|
private awareness;
|
|
@@ -2614,28 +2652,50 @@ declare class CollaborationService {
|
|
|
2614
2652
|
private applyingRemote;
|
|
2615
2653
|
private yFactories;
|
|
2616
2654
|
private lastSynced;
|
|
2617
|
-
private
|
|
2655
|
+
private connectTimer;
|
|
2618
2656
|
private unobserveSlides;
|
|
2657
|
+
private readonly writeBack;
|
|
2619
2658
|
private onRemoteSlides;
|
|
2620
2659
|
private canvasWidth;
|
|
2621
2660
|
private canvasHeight;
|
|
2622
2661
|
private getSourceBytes;
|
|
2623
2662
|
private getTemplateElements;
|
|
2624
|
-
private userName;
|
|
2625
|
-
private userColor;
|
|
2626
|
-
private userAvatar;
|
|
2627
|
-
private role;
|
|
2628
2663
|
private currentConfig;
|
|
2664
|
+
private lastConfig;
|
|
2665
|
+
private lastOptions;
|
|
2666
|
+
private localPresence;
|
|
2629
2667
|
private readonly refreshPresence;
|
|
2630
2668
|
constructor();
|
|
2631
2669
|
connect(config: CollaborationConfig, options?: ConnectOptions): Promise<void>;
|
|
2670
|
+
/** Reconnect using the configuration from the most recent {@link connect}. */
|
|
2671
|
+
retry(): Promise<void>;
|
|
2672
|
+
/** Wire the provider status events + (websocket-only) connection timeout. */
|
|
2673
|
+
private wireStatus;
|
|
2674
|
+
/** Handle a remote Y.Doc change, skipping our own local-origin transactions. */
|
|
2675
|
+
private onRemoteChange;
|
|
2632
2676
|
disconnect(): void;
|
|
2633
|
-
/**
|
|
2677
|
+
/**
|
|
2678
|
+
* Broadcast the local slide set to peers, reconciling only what changed into
|
|
2679
|
+
* the pptx:slides Y.Array. An empty deck is never written (so a late-joiner
|
|
2680
|
+
* that has not yet received the doc cannot clobber it), and an unchanged deck
|
|
2681
|
+
* is skipped.
|
|
2682
|
+
*/
|
|
2683
|
+
/**
|
|
2684
|
+
* Record the current local deck as the sync baseline so the first (unchanged)
|
|
2685
|
+
* broadcast after connecting is suppressed. Call right after {@link connect}
|
|
2686
|
+
* for a joiner whose local deck is a placeholder awaiting remote sync, so it
|
|
2687
|
+
* never overwrites the shared document before receiving it.
|
|
2688
|
+
*/
|
|
2689
|
+
seedBaseline(slides: readonly PptxSlide[]): void;
|
|
2634
2690
|
broadcastSlides(slides: readonly PptxSlide[]): void;
|
|
2635
2691
|
setCursor(x: number, y: number, activeSlideIndex?: number): void;
|
|
2636
2692
|
setSelection(selectedElementId: string | undefined, activeSlideIndex?: number): void;
|
|
2637
|
-
|
|
2638
|
-
|
|
2693
|
+
/** Publish the local active-slide index (drives follow-along). */
|
|
2694
|
+
setActiveSlide(index: number): void;
|
|
2695
|
+
/** Follow the given peer's active slide, or `null` to stop following. */
|
|
2696
|
+
followUser(clientId: number | null): void;
|
|
2697
|
+
private clearConnectTimer;
|
|
2698
|
+
private scheduleWriteBack;
|
|
2639
2699
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CollaborationService, never>;
|
|
2640
2700
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<CollaborationService>;
|
|
2641
2701
|
}
|
|
@@ -2686,6 +2746,13 @@ declare class EditorStateService {
|
|
|
2686
2746
|
* preserves history and selection.
|
|
2687
2747
|
*/
|
|
2688
2748
|
applyReplacement(newSlides: readonly PptxSlide[], label?: string): void;
|
|
2749
|
+
/**
|
|
2750
|
+
* Apply a remote collaborator's slide set (already template-free, as broadcast
|
|
2751
|
+
* over the CRDT) to the editable deck. Selection, history, and this peer's own
|
|
2752
|
+
* separated template store are left untouched; remote edits are not local undo
|
|
2753
|
+
* steps.
|
|
2754
|
+
*/
|
|
2755
|
+
applyRemoteSlides(slides: readonly PptxSlide[]): void;
|
|
2689
2756
|
/** Capture the current deck + template store as one undo/redo snapshot. */
|
|
2690
2757
|
private captureSnapshot;
|
|
2691
2758
|
/** Restore both the deck and the template store from a snapshot. */
|
|
@@ -3439,6 +3506,17 @@ interface CollaborationSessionHost {
|
|
|
3439
3506
|
readonly authorName: () => string | undefined;
|
|
3440
3507
|
readonly shareDefaults: () => ShareDefaults$1 | undefined;
|
|
3441
3508
|
readonly getTemplateElements: () => TemplateElementsBySlideId;
|
|
3509
|
+
/** Apply a remote peer's slide set to the editable deck (echo-guarded in the service). */
|
|
3510
|
+
readonly applyRemoteSlides: (slides: PptxSlide[]) => void;
|
|
3511
|
+
/** Current slide-canvas size (presence bounds). */
|
|
3512
|
+
readonly canvasSize: () => {
|
|
3513
|
+
width: number;
|
|
3514
|
+
height: number;
|
|
3515
|
+
};
|
|
3516
|
+
/** The loaded source `.pptx` bytes for elected-writer write-back, if any. */
|
|
3517
|
+
readonly getSourceBytes: () => Uint8Array | null;
|
|
3518
|
+
/** The current editable deck (seeds the sync baseline after connecting). */
|
|
3519
|
+
readonly currentSlides: () => readonly PptxSlide[];
|
|
3442
3520
|
readonly emitStart: (config: CollaborationConfig) => void;
|
|
3443
3521
|
readonly emitStop: () => void;
|
|
3444
3522
|
}
|
|
@@ -3463,6 +3541,20 @@ declare class ViewerCollaborationSessionService {
|
|
|
3463
3541
|
readonly shareUrl: _angular_core.Signal<string>;
|
|
3464
3542
|
/** Shareable follow link for the active broadcast. */
|
|
3465
3543
|
readonly broadcastViewerUrl: _angular_core.Signal<string>;
|
|
3544
|
+
/** Whether the active session is serverless (peer-to-peer / webrtc). */
|
|
3545
|
+
readonly activeSessionP2p: _angular_core.Signal<boolean>;
|
|
3546
|
+
/**
|
|
3547
|
+
* Assemble the {@link ConnectOptions} shared by every connect call site: apply
|
|
3548
|
+
* remote slides to the editor, size the presence bounds to the canvas, and
|
|
3549
|
+
* expose the source bytes + separated template elements for write-back.
|
|
3550
|
+
*/
|
|
3551
|
+
private connectOptions;
|
|
3552
|
+
/**
|
|
3553
|
+
* Connect and immediately seed the sync baseline with the current deck, so a
|
|
3554
|
+
* joiner whose deck is still a placeholder never broadcasts (and overwrites)
|
|
3555
|
+
* the shared document before the first remote sync arrives.
|
|
3556
|
+
*/
|
|
3557
|
+
private connectWithBaseline;
|
|
3466
3558
|
/**
|
|
3467
3559
|
* Seed values for the Share dialog: the host-supplied `shareDefaults`, with
|
|
3468
3560
|
* `userName` falling back to `authorName` (then "You") so the local user's
|
|
@@ -3888,6 +3980,13 @@ declare class PowerPointViewerComponent {
|
|
|
3888
3980
|
protected readonly rootStyle: _angular_core.Signal<Record<string, string>>;
|
|
3889
3981
|
protected readonly zoom: _angular_core.WritableSignal<number>;
|
|
3890
3982
|
protected readonly zoomPercent: _angular_core.Signal<number>;
|
|
3983
|
+
/**
|
|
3984
|
+
* Remote cursors filtered to the slide the local user is viewing, so peers'
|
|
3985
|
+
* cursors only appear on the shared slide (mirrors React/Vue).
|
|
3986
|
+
*/
|
|
3987
|
+
protected readonly collabCursors: _angular_core.Signal<pptx_angular_viewer.RemoteCursor[]>;
|
|
3988
|
+
/** Timestamp of the last cursor broadcast (throttle gate). */
|
|
3989
|
+
private lastCursorBroadcast;
|
|
3891
3990
|
/** Fullscreen presentation-mode overlay visibility. */
|
|
3892
3991
|
protected readonly presenting: _angular_core.WritableSignal<boolean>;
|
|
3893
3992
|
/** Presenter-view (speaker) overlay visibility. */
|
|
@@ -3994,6 +4093,15 @@ declare class PowerPointViewerComponent {
|
|
|
3994
4093
|
goTo(index: number): void;
|
|
3995
4094
|
goPrev(): void;
|
|
3996
4095
|
goNext(): void;
|
|
4096
|
+
/**
|
|
4097
|
+
* Publish the local cursor while the pointer moves over the canvas. Throttled
|
|
4098
|
+
* to {@link BROADCAST_THROTTLE_MS}; coordinates are mapped from client space
|
|
4099
|
+
* into unscaled slide space (dividing by zoom, matching the cursor overlay)
|
|
4100
|
+
* and clamped to the canvas bounds.
|
|
4101
|
+
*/
|
|
4102
|
+
protected onCollabPointerMove(event: PointerEvent): void;
|
|
4103
|
+
/** The loaded source `.pptx` bytes (for elected-writer write-back), if any. */
|
|
4104
|
+
private currentSourceBytes;
|
|
3997
4105
|
/**
|
|
3998
4106
|
* Apply a built-in theme preset to the whole deck.
|
|
3999
4107
|
*
|
|
@@ -7498,11 +7606,16 @@ interface ShareFormFields {
|
|
|
7498
7606
|
}
|
|
7499
7607
|
/** Seed the form fields from the (optional) defaults, coercing absent values. */
|
|
7500
7608
|
declare function seedShareFields(defaults?: ShareDefaults): ShareFormFields;
|
|
7501
|
-
/**
|
|
7609
|
+
/**
|
|
7610
|
+
* Whether the required fields are non-blank (after trimming). The server URL is
|
|
7611
|
+
* optional: a blank server selects the serverless (webrtc) peer-to-peer
|
|
7612
|
+
* transport, so only the room id and display name are required.
|
|
7613
|
+
*/
|
|
7502
7614
|
declare function canStartShare(fields: ShareFormFields): boolean;
|
|
7503
7615
|
/**
|
|
7504
7616
|
* Assemble a {@link CollaborationConfig} from the (trimmed) form fields, or
|
|
7505
|
-
* `null` when the form is incomplete.
|
|
7617
|
+
* `null` when the form is incomplete. A blank server URL yields
|
|
7618
|
+
* `transport: 'webrtc'`; otherwise the default websocket transport is used.
|
|
7506
7619
|
*/
|
|
7507
7620
|
declare function buildCollaborationConfig(fields: ShareFormFields): CollaborationConfig | null;
|
|
7508
7621
|
/**
|
|
@@ -7527,6 +7640,8 @@ declare class ShareDialogComponent {
|
|
|
7527
7640
|
readonly userCount: _angular_core.InputSignal<number>;
|
|
7528
7641
|
/** Shareable join link surfaced while the session is active. */
|
|
7529
7642
|
readonly shareUrl: _angular_core.InputSignal<string>;
|
|
7643
|
+
/** Whether the active session is peer-to-peer (serverless webrtc). */
|
|
7644
|
+
readonly p2p: _angular_core.InputSignal<boolean>;
|
|
7530
7645
|
/** Fired with the assembled config when the user starts sharing. */
|
|
7531
7646
|
readonly start: _angular_core.OutputEmitterRef<CollaborationConfig>;
|
|
7532
7647
|
/** Fired when the user stops an active session. */
|
|
@@ -7538,6 +7653,8 @@ declare class ShareDialogComponent {
|
|
|
7538
7653
|
readonly serverUrl: _angular_core.WritableSignal<string>;
|
|
7539
7654
|
readonly copied: _angular_core.WritableSignal<boolean>;
|
|
7540
7655
|
readonly canStart: _angular_core.Signal<boolean>;
|
|
7656
|
+
/** Blank server URL selects the serverless peer-to-peer (webrtc) transport. */
|
|
7657
|
+
readonly isP2p: _angular_core.Signal<boolean>;
|
|
7541
7658
|
readonly canCopy: _angular_core.Signal<boolean>;
|
|
7542
7659
|
constructor();
|
|
7543
7660
|
asValue(event: Event): string;
|
|
@@ -7546,7 +7663,7 @@ declare class ShareDialogComponent {
|
|
|
7546
7663
|
handleStart(): void;
|
|
7547
7664
|
handleStop(): void;
|
|
7548
7665
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ShareDialogComponent, never>;
|
|
7549
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ShareDialogComponent, "pptx-share-dialog", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "defaults": { "alias": "defaults"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "connected": { "alias": "connected"; "required": false; "isSignal": true; }; "userCount": { "alias": "userCount"; "required": false; "isSignal": true; }; "shareUrl": { "alias": "shareUrl"; "required": false; "isSignal": true; }; }, { "start": "start"; "stop": "stop"; "close": "close"; }, never, never, true, never>;
|
|
7666
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ShareDialogComponent, "pptx-share-dialog", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "defaults": { "alias": "defaults"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "connected": { "alias": "connected"; "required": false; "isSignal": true; }; "userCount": { "alias": "userCount"; "required": false; "isSignal": true; }; "shareUrl": { "alias": "shareUrl"; "required": false; "isSignal": true; }; "p2p": { "alias": "p2p"; "required": false; "isSignal": true; }; }, { "start": "start"; "stop": "stop"; "close": "close"; }, never, never, true, never>;
|
|
7550
7667
|
}
|
|
7551
7668
|
|
|
7552
7669
|
declare class HyperlinkDialogComponent {
|
|
@@ -7585,6 +7702,8 @@ declare class BroadcastDialogComponent {
|
|
|
7585
7702
|
readonly viewerCount: _angular_core.InputSignal<number>;
|
|
7586
7703
|
/** The shareable follow link (shown while `active`). */
|
|
7587
7704
|
readonly viewerUrl: _angular_core.InputSignal<string | undefined>;
|
|
7705
|
+
/** Whether the active broadcast is peer-to-peer (serverless webrtc). */
|
|
7706
|
+
readonly p2p: _angular_core.InputSignal<boolean>;
|
|
7588
7707
|
/** Fired when the presenter starts a broadcast. */
|
|
7589
7708
|
readonly start: _angular_core.OutputEmitterRef<BroadcastConfig>;
|
|
7590
7709
|
/** Fired when the presenter stops the active broadcast. */
|
|
@@ -7595,6 +7714,8 @@ declare class BroadcastDialogComponent {
|
|
|
7595
7714
|
readonly serverUrl: _angular_core.WritableSignal<string>;
|
|
7596
7715
|
readonly copied: _angular_core.WritableSignal<boolean>;
|
|
7597
7716
|
readonly canStart: _angular_core.Signal<boolean>;
|
|
7717
|
+
/** Blank server URL selects the serverless peer-to-peer (webrtc) transport. */
|
|
7718
|
+
readonly isP2p: _angular_core.Signal<boolean>;
|
|
7598
7719
|
private readonly broadcastingTitle;
|
|
7599
7720
|
private readonly startTitle;
|
|
7600
7721
|
readonly dialogTitle: _angular_core.Signal<any>;
|
|
@@ -7607,7 +7728,7 @@ declare class BroadcastDialogComponent {
|
|
|
7607
7728
|
onStop(): void;
|
|
7608
7729
|
onCopyLink(): void;
|
|
7609
7730
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BroadcastDialogComponent, never>;
|
|
7610
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BroadcastDialogComponent, "pptx-broadcast-dialog", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "defaults": { "alias": "defaults"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "connected": { "alias": "connected"; "required": false; "isSignal": true; }; "viewerCount": { "alias": "viewerCount"; "required": false; "isSignal": true; }; "viewerUrl": { "alias": "viewerUrl"; "required": false; "isSignal": true; }; }, { "start": "start"; "stop": "stop"; "close": "close"; }, never, never, true, never>;
|
|
7731
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BroadcastDialogComponent, "pptx-broadcast-dialog", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "defaults": { "alias": "defaults"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "connected": { "alias": "connected"; "required": false; "isSignal": true; }; "viewerCount": { "alias": "viewerCount"; "required": false; "isSignal": true; }; "viewerUrl": { "alias": "viewerUrl"; "required": false; "isSignal": true; }; "p2p": { "alias": "p2p"; "required": false; "isSignal": true; }; }, { "start": "start"; "stop": "stop"; "close": "close"; }, never, never, true, never>;
|
|
7611
7732
|
}
|
|
7612
7733
|
|
|
7613
7734
|
declare class ViewerCompareService {
|