@antglobal/copilot-cards-web 1.0.8 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -1
- package/dist/index.d.ts +20 -1
- package/dist/index.js +794 -109
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getBuiltinIcon, cloneJsonData, createLifecycleManager, materializeCard, findAffectedRepeatOwners, createA2UIParameterResolver, createExpressionContext, replaceRootContents, resolveA2UIDeep, resolveDeep, resolveExpressionValue, resolveActionRef, isBoundRenderTreeNode, hasExpression, resolveExpression, runActionSteps, normalizeSchema, validateSchema, requiresBindingMaterialization, parseSchema, StreamingParser, StreamingEngine, bindingTopologyFingerprint, findTemplateRepeatOwners, extractPartialSchema, runActionStep, registry } from '@antglobal/copilot-cards-core';
|
|
1
|
+
import { getBuiltinIcon, cloneJsonData, createLifecycleManager, materializeCard, findAffectedRepeatOwners, createA2UIParameterResolver, createExpressionContext, replaceRootContents, getByJsonPointer, resolveA2UIDeep, resolveDeep, resolveExpressionValue, resolveActionRef, isBoundRenderTreeNode, hasExpression, resolveExpression, runActionSteps, normalizeSchema, validateSchema, requiresBindingMaterialization, parseSchema, StreamingParser, StreamingEngine, bindingTopologyFingerprint, findTemplateRepeatOwners, extractPartialSchema, runActionStep, registry } from '@antglobal/copilot-cards-core';
|
|
2
2
|
export { ActionRegistry, a2uiComponentToElement, a2uiToCommand, convertLegacySchema, createLifecycleManager, hasExpression, isA2UIEnvelope, isLegacySchema, normalizeSchema, parseSchema, registerActionHandler, registry, resolveActionRef, resolveDeep, resolveExpression, resolveExpressionValue, runActionStep, runActionSteps, validateSchema } from '@antglobal/copilot-cards-core';
|
|
3
3
|
import * as echarts from 'echarts/core';
|
|
4
4
|
import { LineChart, BarChart, PieChart, ScatterChart, FunnelChart, HeatmapChart } from 'echarts/charts';
|
|
@@ -763,9 +763,33 @@ const CAROUSEL_HOST_PRESENTATION_OWNERSHIP = {
|
|
|
763
763
|
attributes: [CAROUSEL_SCROLL_ID_ATTRIBUTE],
|
|
764
764
|
styleProperties: Object.keys(carouselHostStyles(0)).map(toCSSPropertyName),
|
|
765
765
|
};
|
|
766
|
+
function getNonDefaultSlotKeys(props) {
|
|
767
|
+
const slots = props.slots;
|
|
768
|
+
return slots
|
|
769
|
+
? Object.keys(slots).filter(key => key !== SLOT_LAYOUT.DEFAULT)
|
|
770
|
+
: [];
|
|
771
|
+
}
|
|
766
772
|
function findSpecialSlotKey(props) {
|
|
773
|
+
return getNonDefaultSlotKeys(props)[0];
|
|
774
|
+
}
|
|
775
|
+
/**
|
|
776
|
+
* Report whether a materialized Repeat slot maps directly onto its owner host.
|
|
777
|
+
* Ambiguous and wrapper/controller layouts deliberately fail closed.
|
|
778
|
+
*/
|
|
779
|
+
function getDirectChildRepeatAppendLayout(props, repeatSlot) {
|
|
767
780
|
const slots = props.slots;
|
|
768
|
-
|
|
781
|
+
if (!slots || slots[repeatSlot] == null)
|
|
782
|
+
return undefined;
|
|
783
|
+
const nonDefaultKeys = getNonDefaultSlotKeys(props);
|
|
784
|
+
if (nonDefaultKeys.length > 1)
|
|
785
|
+
return undefined;
|
|
786
|
+
const effectiveSlot = findSpecialSlotKey(props) ?? SLOT_LAYOUT.DEFAULT;
|
|
787
|
+
if (effectiveSlot !== repeatSlot)
|
|
788
|
+
return undefined;
|
|
789
|
+
return effectiveSlot === SLOT_LAYOUT.DEFAULT
|
|
790
|
+
|| effectiveSlot === SLOT_LAYOUT.FLEX
|
|
791
|
+
? effectiveSlot
|
|
792
|
+
: undefined;
|
|
769
793
|
}
|
|
770
794
|
/** Host attributes/styles owned by the active slot renderer after shell render. */
|
|
771
795
|
function getSlotHostPresentationOwnership(props) {
|
|
@@ -2662,7 +2686,7 @@ class CardText extends BaseElement {
|
|
|
2662
2686
|
word-break: break-word;
|
|
2663
2687
|
}
|
|
2664
2688
|
:host([data-disabled]) .card-text {
|
|
2665
|
-
color: var(--card-disabled-
|
|
2689
|
+
color: var(--card-disabled-foreground, #C0C0C0) !important;
|
|
2666
2690
|
}
|
|
2667
2691
|
.card-text {
|
|
2668
2692
|
/* Block-level so line boxes form inside this element and its own
|
|
@@ -3268,8 +3292,11 @@ class CardButton extends BaseElement {
|
|
|
3268
3292
|
background: transparent !important;
|
|
3269
3293
|
}
|
|
3270
3294
|
:host([data-disabled]) .card-btn {
|
|
3271
|
-
background-color:
|
|
3272
|
-
|
|
3295
|
+
background-color: var(
|
|
3296
|
+
--card-disabled-background,
|
|
3297
|
+
#F5F5F5
|
|
3298
|
+
) !important;
|
|
3299
|
+
color: var(--card-disabled-foreground, #C0C0C0) !important;
|
|
3273
3300
|
border: none !important;
|
|
3274
3301
|
cursor: default;
|
|
3275
3302
|
pointer-events: none;
|
|
@@ -7052,7 +7079,7 @@ class CardHtml extends BaseElement {
|
|
|
7052
7079
|
word-break: break-word;
|
|
7053
7080
|
}
|
|
7054
7081
|
:host([data-disabled]) .card-html {
|
|
7055
|
-
color: var(--card-disabled-
|
|
7082
|
+
color: var(--card-disabled-foreground, #C0C0C0) !important;
|
|
7056
7083
|
}
|
|
7057
7084
|
.card-html img { max-width: 100%; } /* keep images from bursting the card */
|
|
7058
7085
|
</style>
|
|
@@ -7084,12 +7111,14 @@ if (typeof customElements !== 'undefined' && !customElements.get(CardHtml.is)) {
|
|
|
7084
7111
|
* as a string so it can be injected into each component's Shadow DOM.
|
|
7085
7112
|
* Global stylesheets cannot pierce shadow roots, and shipping a raw
|
|
7086
7113
|
* `.css` import would push CSS-loader requirements onto every consumer
|
|
7087
|
-
* bundler, so the CSS is vendored at dev time instead.
|
|
7114
|
+
* bundler, so the CSS is vendored at dev time instead. Upstream rem lengths
|
|
7115
|
+
* are normalized to their 16px-based pixel values so mobile host root sizing
|
|
7116
|
+
* cannot scale the calendar internals.
|
|
7088
7117
|
*
|
|
7089
7118
|
* Regenerate after upgrading vanilla-calendar-pro:
|
|
7090
7119
|
* npm run sync:vcp-css --workspace=packages/copilot-cards-web
|
|
7091
7120
|
*/
|
|
7092
|
-
const VCP_CSS = "/*! name: vanilla-calendar-pro v3.1.0 | url: https://github.com/uvarov-frontend/vanilla-calendar-pro */[data-vc=calendar]{border-radius:.75rem;box-sizing:border-box;display:flex;flex-direction:column;min-width:272px;opacity:1;padding:1rem;position:relative;transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}[data-vc=calendar] [tabindex=\"0\"]:focus-visible,[data-vc=calendar] button:focus-visible,[data-vc=calendar]:focus-visible{border-radius:.5rem;outline-offset:-1px;outline-style:solid;outline-width:1px}[data-vc=calendar][data-vc-type=multiple] [data-vc=dates]{flex-grow:0}[data-vc=calendar][data-vc-calendar-hidden]{opacity:0;pointer-events:none}[data-vc=calendar][data-vc-calendar-hidden] *{pointer-events:none!important}[data-vc=calendar][data-vc-input]{position:absolute}[data-vc=calendar][data-vc-input][data-vc-position=bottom]{margin-top:.25rem}[data-vc=calendar][data-vc-input][data-vc-position=top]{margin-top:-.25rem}[data-vc=controls]{align-items:center;box-sizing:content-box;display:flex;justify-content:space-between;left:0;padding-left:1rem;padding-right:1rem;padding-top:1.25rem;pointer-events:none;position:absolute;right:0;top:0;z-index:20}[data-vc-arrow]{background-color:transparent;border-width:0;cursor:pointer;display:block;height:1.5rem;pointer-events:auto;position:relative;width:1.5rem}[data-vc-arrow]:before{background-position:50%;background-repeat:no-repeat;height:100%;left:0;position:absolute;top:0;width:100%;--tw-content:\"\";content:var(--tw-content)}[data-vc-arrow=prev]:before{transform:rotate(90deg)}[data-vc-arrow=next]:before{transform:rotate(-90deg)}[data-vc=grid]{display:flex;flex-grow:1;flex-wrap:wrap;gap:1.75rem}[data-vc=grid][data-vc-grid=hidden] [data-vc=column]{opacity:.3;pointer-events:none}[data-vc=grid][data-vc-grid=hidden] [data-vc=column][data-vc-column=month],[data-vc=grid][data-vc-grid=hidden] [data-vc=column][data-vc-column=year]{opacity:1;pointer-events:auto}[data-vc=column]{display:flex;flex-direction:column;flex-grow:1;min-width:240px}[data-vc=header]{align-items:center;display:flex;margin-bottom:.75rem;position:relative}[data-vc-header=content]{align-items:center;display:grid;flex-grow:1;grid-auto-columns:max-content;grid-auto-flow:column;justify-content:center;padding-left:1rem;padding-right:1rem;white-space:pre-wrap}[data-vc=month],[data-vc=year]{background-color:transparent;border-radius:.25rem;border-width:0;cursor:pointer;font-size:1rem;font-weight:700;line-height:1.5rem;padding:.25rem}[data-vc=month]:disabled,[data-vc=year]:disabled{pointer-events:none}[data-vc=content],[data-vc=wrapper]{display:flex;flex-grow:1}[data-vc=content]{flex-direction:column}[data-vc=months]{grid-template-columns:repeat(4,minmax(0,1fr))}[data-vc=months],[data-vc=years]{align-items:center;-moz-column-gap:.25rem;column-gap:.25rem;display:grid;flex-grow:1;row-gap:1rem}[data-vc=years]{grid-template-columns:repeat(5,minmax(0,1fr))}[data-vc-months-month],[data-vc-years-year]{align-items:center;border-radius:.5rem;border-width:0;cursor:pointer;display:flex;font-size:.75rem;font-weight:600;height:2.5rem;justify-content:center;line-height:1rem;padding:.25rem;text-align:center;word-break:break-all}[data-vc-months-month]:disabled,[data-vc-years-year]:disabled{pointer-events:none}[data-vc-week=numbers]{display:flex;flex-direction:column}[data-vc-week-numbers=title]{align-items:center;display:flex;font-size:.75rem;font-weight:700;justify-content:center;line-height:1rem;margin-bottom:.5rem}[data-vc-week-numbers=content]{align-items:center;display:grid;grid-auto-flow:row;justify-items:center;row-gap:.25rem}[data-vc-week-number]{align-items:center;background-color:transparent;border-style:none;cursor:pointer;display:flex;font-size:.75rem;font-weight:600;justify-content:center;line-height:1rem;margin:0;min-height:1.875rem;min-width:1.875rem;padding:0;width:100%}[data-vc=week]{display:grid;grid-template-columns:repeat(7,1fr);justify-items:center;margin-bottom:.5rem}[data-vc-week-day]{align-items:center;background-color:transparent;border-style:none;display:flex;font-size:.75rem;font-weight:700;justify-content:center;line-height:1rem;margin:0;min-width:1.875rem;padding:0;width:100%}button[data-vc-week-day]{cursor:pointer}[data-vc=dates]{align-items:center;display:grid;flex-grow:1;grid-template-columns:repeat(1,minmax(0,1fr));grid-template-rows:auto;justify-items:center;pointer-events:none}[data-vc=dates][data-vc-dates-disabled] [data-vc-date-btn]{cursor:default}[data-vc-dates=row]{align-items:center;display:grid;grid-template-columns:repeat(7,1fr);justify-items:center;width:100%}[data-vc-date]{align-items:center;display:flex;justify-content:center;padding-bottom:.125rem;padding-top:.125rem;pointer-events:auto;position:relative;width:100%}[data-vc-date]:not(:has([data-vc-date-btn])),[data-vc-date][data-vc-date-disabled],[data-vc-date][data-vc-date-disabled] [data-vc-date-btn]{pointer-events:none}[data-vc-date][data-vc-date-hover] [data-vc-date-btn]{border-radius:0}[data-vc-date][data-vc-date-hover=first] [data-vc-date-btn]{border-bottom-left-radius:.5rem;border-bottom-right-radius:0;border-top-left-radius:.5rem;border-top-right-radius:0}[data-vc-date][data-vc-date-hover=last] [data-vc-date-btn]{border-bottom-left-radius:0;border-bottom-right-radius:.5rem;border-top-left-radius:0;border-top-right-radius:.5rem}[data-vc-date][data-vc-date-hover=first-and-last] [data-vc-date-btn]{border-radius:.5rem}[data-vc-date][data-vc-date-hover=first][data-vc-date-selected] [data-vc-date-btn]{border-bottom-left-radius:.5rem;border-top-left-radius:.5rem}[data-vc-date][data-vc-date-hover=last][data-vc-date-selected] [data-vc-date-btn]{border-bottom-right-radius:.5rem;border-top-right-radius:.5rem}[data-vc-date][data-vc-date-selected=first] [data-vc-date-btn]{border-bottom-left-radius:.5rem;border-bottom-right-radius:0;border-top-left-radius:.5rem;border-top-right-radius:0}[data-vc-date][data-vc-date-selected=last] [data-vc-date-btn]{border-bottom-left-radius:0;border-bottom-right-radius:.5rem;border-top-left-radius:0;border-top-right-radius:.5rem}[data-vc-date][data-vc-date-selected=first-and-last] [data-vc-date-btn]{border-bottom-left-radius:.5rem;border-bottom-right-radius:.5rem;border-top-left-radius:.5rem;border-top-right-radius:.5rem}[data-vc-date][data-vc-date-selected=middle] [data-vc-date-btn]{border-radius:0}[data-vc-date][data-vc-date-disabled]+[data-vc-date-hover] [data-vc-date-btn],[data-vc-date][data-vc-date-disabled]+[data-vc-date-selected] [data-vc-date-btn]{border-bottom-left-radius:.5rem;border-top-left-radius:.5rem}[data-vc-date][data-vc-date-hover]:has(+[data-vc-date-disabled]) [data-vc-date-btn],[data-vc-date][data-vc-date-selected]:has(+[data-vc-date-disabled]) [data-vc-date-btn]{border-bottom-right-radius:.5rem;border-top-right-radius:.5rem}[data-vc-date-btn]:focus-visible+[data-vc-date-popup],[data-vc-date-btn]:hover+[data-vc-date-popup],[data-vc-date-popup]:focus-visible,[data-vc-date-popup]:hover{opacity:1;pointer-events:auto}[data-vc-date-btn]{align-items:center;border-radius:.5rem;border-width:0;cursor:pointer;display:flex;font-size:.75rem;font-weight:400;height:100%;justify-content:center;line-height:1rem;min-height:1.875rem;min-width:1.875rem;padding:0;transition-duration:75ms;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);width:100%}[data-vc-date][data-vc-date-today] [data-vc-date-btn]{font-weight:700}[data-vc-date-popup]{max-width:9rem;min-width:5rem;pointer-events:none;position:absolute;z-index:20;--tw-translate-x:-50%;border-radius:.5rem;font-size:.75rem;font-weight:400;line-height:1rem;opacity:0;padding:.25rem .5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-duration:75ms;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}[data-vc-date-popup]:hover{opacity:1;pointer-events:auto}[data-vc-date-range-tooltip]{max-width:9rem;pointer-events:none;position:absolute;z-index:30;--tw-translate-x:-50%;--tw-translate-y:-100%;border-radius:.375rem;font-size:.75rem;font-weight:400;line-height:1rem;padding:.25rem .5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}[data-vc-date-range-tooltip=hidden]{opacity:0}[data-vc-date-range-tooltip=visible]{opacity:1}[data-vc=time]{border-style:solid;border-width:1px 0 0;display:grid;gap:.75rem;grid-template-columns:auto 1fr;margin-top:.75rem;padding-top:.75rem}[data-vc-time=content]{align-items:center;display:grid;grid-auto-flow:column}[data-vc-time-input=hour]{margin-right:.35rem;position:relative;width:1.75rem}[data-vc-time-input=hour]:after{display:block;margin-top:calc(-50% + 1px);position:absolute;right:-5px;top:50%;--tw-content:\":\";content:var(--tw-content)}[data-vc-time-input=minute]{width:1.75rem}[data-vc-time-input=hour] input,[data-vc-time-input=minute] input{border-radius:.25rem;border-width:0;box-sizing:border-box;display:block;font-size:1.125rem;font-weight:600;line-height:1.125rem;margin:0;padding:.125rem;position:relative;text-align:center;width:100%}[data-vc-time-input=hour] input:focus-visible,[data-vc-time-input=minute] input:focus-visible{outline-style:solid;outline-width:1px}[data-vc-time-input=hour] input:disabled,[data-vc-time-input=minute] input:disabled{cursor:default}[data-vc-time-input=hour] input:hover:disabled,[data-vc-time-input=minute] input:hover:disabled,[data-vc-time=keeping]{background-color:transparent}[data-vc-time=keeping]{border-radius:.25rem;border-width:0;cursor:pointer;font-size:.69rem;margin-left:1px;margin-top:.25rem;padding:0;width:22px}[data-vc-time=keeping]:focus-visible{outline-style:solid;outline-width:1px}[data-vc-time=keeping]:disabled{cursor:default}[data-vc-time=keeping]:hover:disabled{background-color:transparent}[data-vc-time=ranges]{display:grid;grid-auto-flow:row}[data-vc-time-range]{font-size:0;position:relative;z-index:10}[data-vc-time-range]:before{content:var(--tw-content);left:0}[data-vc-time-range]:after{content:var(--tw-content);right:0}[data-vc-time-range]:after,[data-vc-time-range]:before{content:\"\";height:.5rem;pointer-events:none;position:absolute;top:50%;transform:translateY(-50%);width:1px;z-index:10}[data-vc-time-range] input{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;height:1.25rem;margin:0;outline-width:0;position:relative;width:100%}[data-vc-time-range] input::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;border-radius:.25rem;border-style:solid;border-width:1px;box-sizing:border-box;cursor:pointer;height:1rem;margin-top:-.5rem;position:relative;width:.75rem;z-index:20;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}[data-vc-time-range] input::-moz-range-thumb{border-radius:.25rem;border-style:solid;border-width:1px;box-sizing:border-box;cursor:pointer;height:1rem;position:relative;width:.75rem;z-index:20;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}[data-vc-time-range] input::-webkit-slider-runnable-track{box-sizing:border-box;cursor:pointer;height:1px;margin-top:1px;width:100%;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}[data-vc-time-range] input::-moz-range-track{box-sizing:border-box;cursor:pointer;height:1px;margin-top:1px;width:100%;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}\n/*! name: vanilla-calendar-pro v3.1.0 | url: https://github.com/uvarov-frontend/vanilla-calendar-pro */[data-vc-theme=light].vc{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));color:#0f172a}[data-vc-theme=light].vc[data-vc-input]{--tw-shadow:0 9px 20px rgba(0,0,0,.1);--tw-shadow-colored:0 9px 20px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}[data-vc-theme=light].vc [tabindex=\"0\"]:focus-visible,[data-vc-theme=light].vc button:focus-visible,[data-vc-theme=light].vc:focus-visible{outline-color:#fdba74}[data-vc-theme=light] .vc-arrow{background-color:transparent}[data-vc-theme=light] .vc-arrow:before{background-image:url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0iIzBmMTcyYSIgZD0iTTEyIDE2Yy0uMyAwLS41LS4xLS43LS4zbC02LTZjLS40LS40LS40LTEgMC0xLjRzMS0uNCAxLjQgMGw1LjMgNS4zIDUuMy01LjNjLjQtLjQgMS0uNCAxLjQgMHMuNCAxIDAgMS40bC02IDZjLS4yLjItLjQuMy0uNy4zIi8+PC9zdmc+\");content:var(--tw-content)}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-arrow:hover:before{content:var(--tw-content);opacity:.6}}[data-vc-theme=light] .vc-header__content,[data-vc-theme=light] .vc-month,[data-vc-theme=light] .vc-year{color:#0f172a}[data-vc-theme=light] .vc-month:disabled,[data-vc-theme=light] .vc-year:disabled{color:#cbd5e1}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-month:hover,[data-vc-theme=light] .vc-year:hover{color:#64748b}}[data-vc-theme=light] .vc-months__month,[data-vc-theme=light] .vc-years__year{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));color:#64748b}[data-vc-theme=light] .vc-months__month:disabled,[data-vc-theme=light] .vc-years__year:disabled{color:#cbd5e1}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-months__month:hover,[data-vc-theme=light] .vc-years__year:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}[data-vc-theme=light] .vc-months__month:hover:disabled,[data-vc-theme=light] .vc-years__year:hover:disabled{color:#cbd5e1}}[data-vc-theme=light] .vc-months__month[data-vc-months-month-selected],[data-vc-theme=light] .vc-years__year[data-vc-years-year-selected]{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity));color:#fff}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-months__month[data-vc-months-month-selected]:hover,[data-vc-theme=light] .vc-years__year[data-vc-years-year-selected]:hover{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity));color:#fff}}[data-vc-theme=light] .vc-week-number,[data-vc-theme=light] .vc-week-numbers__title{color:#64748b}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-week-number:hover{color:#475569}}[data-vc-theme=light] .vc-week__day{color:#64748b}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] button.vc-week__day:hover{color:#475569}}[data-vc-theme=light] .vc-week__day[data-vc-week-day-off]{color:#f43f5e}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] button.vc-week__day[data-vc-week-day-off]:hover{color:#e11d48}}[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-holiday][data-vc-date-selected] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-weekend][data-vc-date-selected] .vc-date__btn{background-color:rgb(244 63 94/var(--tw-bg-opacity));--tw-bg-opacity:0.7;color:#fff}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-holiday][data-vc-date-selected] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-weekend][data-vc-date-selected] .vc-date__btn:hover{background-color:rgb(244 63 94/var(--tw-bg-opacity));--tw-bg-opacity:0.7;color:#fff}}[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-holiday][data-vc-date-month=next][data-vc-date-selected] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-holiday][data-vc-date-month=prev][data-vc-date-selected] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-weekend][data-vc-date-month=next][data-vc-date-selected] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-weekend][data-vc-date-month=prev][data-vc-date-selected] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));color:#64748b}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-holiday][data-vc-date-month=next][data-vc-date-selected] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-holiday][data-vc-date-month=prev][data-vc-date-selected] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-weekend][data-vc-date-month=next][data-vc-date-selected] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-weekend][data-vc-date-month=prev][data-vc-date-selected] .vc-date__btn:hover{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));color:#64748b}}[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-selected] .vc-date__btn{background-color:rgb(6 182 212/var(--tw-bg-opacity));--tw-bg-opacity:0.7;color:#fff}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-selected] .vc-date__btn:hover{background-color:rgb(6 182 212/var(--tw-bg-opacity));--tw-bg-opacity:0.7;color:#fff}}[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-month=next][data-vc-date-selected] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-month=prev][data-vc-date-selected] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));color:#64748b}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-month=next][data-vc-date-selected] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-month=prev][data-vc-date-selected] .vc-date__btn:hover{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));color:#64748b}}[data-vc-theme=light] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));color:#0f172a}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date__btn:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}}[data-vc-theme=light] .vc-date[data-vc-date-today] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity));color:#06b6d4}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-today] .vc-date__btn:hover{color:#06b6d4}}[data-vc-theme=light] .vc-date[data-vc-date-today][data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-today][data-vc-date-month=prev] .vc-date__btn{color:#64748b}[data-vc-theme=light] .vc-date[data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-month=prev] .vc-date__btn{color:#94a3b8}[data-vc-theme=light] .vc-date[data-vc-date-disabled] .vc-date__btn{color:#cbd5e1}[data-vc-theme=light] .vc-date[data-vc-date-hover] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}[data-vc-theme=light] .vc-date[data-vc-date-hover=first] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-hover=last] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-hover=first] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-hover=last] .vc-date__btn:hover{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}}[data-vc-theme=light] .vc-date[data-vc-date-holiday] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend] .vc-date__btn{color:#f43f5e}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-holiday] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-weekend] .vc-date__btn:hover{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity))}}[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-hover] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-hover] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity))}[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-hover=first] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-hover=last] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-hover=first] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-hover=last] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity))}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-hover=first] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-hover=last] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-hover=first] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-hover=last] .vc-date__btn:hover{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity))}}[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-disabled] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-disabled] .vc-date__btn{color:#cbd5e1}[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-today] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-today] .vc-date__btn{color:#f43f5e}[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-today][data-vc-date-disabled] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-today][data-vc-date-disabled] .vc-date__btn{color:#cbd5e1}[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-month=prev] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-month=prev] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));color:#94a3b8}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-month=next] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-month=prev] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-month=next] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-month=prev] .vc-date__btn:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}}[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-hover][data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-hover][data-vc-date-month=prev] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-hover][data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-hover][data-vc-date-month=prev] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-today][data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-today][data-vc-date-month=prev] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-today][data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-today][data-vc-date-month=prev] .vc-date__btn{color:#94a3b8}[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-disabled][data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-disabled][data-vc-date-month=prev] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-disabled][data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-disabled][data-vc-date-month=prev] .vc-date__btn{color:#cbd5e1}[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-selected] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-selected] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity));color:#fff}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-selected] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-selected] .vc-date__btn:hover{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity));color:#fff}}[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-selected][data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-selected][data-vc-date-month=prev] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-selected][data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-selected][data-vc-date-month=prev] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity));color:#64748b}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-selected][data-vc-date-month=next] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-selected][data-vc-date-month=prev] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-selected][data-vc-date-month=next] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-selected][data-vc-date-month=prev] .vc-date__btn:hover{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity));color:#64748b}}[data-vc-theme=light] .vc-date[data-vc-date-selected] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity));color:#fff}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-selected] .vc-date__btn:hover{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity));color:#fff}}[data-vc-theme=light] .vc-date[data-vc-date-selected][data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-selected][data-vc-date-month=prev] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity));color:#64748b}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-selected][data-vc-date-month=next] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-selected][data-vc-date-month=prev] .vc-date__btn:hover{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity));color:#64748b}}[data-vc-theme=light] .vc-date__popup{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));color:#0f172a;--tw-shadow:0 3px 15px rgba(85,85,85,.2);--tw-shadow-colored:0 3px 15px var(--tw-shadow-color)}[data-vc-theme=light] .vc-date-range-tooltip,[data-vc-theme=light] .vc-date__popup{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}[data-vc-theme=light] .vc-date-range-tooltip{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity));color:#64748b;--tw-shadow:0px 1px 4px rgba(85,85,85,.2);--tw-shadow-colored:0px 1px 4px var(--tw-shadow-color)}[data-vc-theme=light] .vc-time{border-color:#cbd5e1}[data-vc-theme=light] .vc-time__hour:after,[data-vc-theme=light] .vc-time__minute:after{color:#0f172a;content:var(--tw-content)}[data-vc-theme=light] .vc-time__hour input,[data-vc-theme=light] .vc-time__minute input{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));color:#0f172a}[data-vc-theme=light] .vc-time__hour input:focus-visible,[data-vc-theme=light] .vc-time__minute input:focus-visible{outline-color:#fdba74}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-time__hour input:hover,[data-vc-theme=light] .vc-time__minute input:hover{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity))}}[data-vc-theme=light] .vc-time__hour input[data-vc-input-focus],[data-vc-theme=light] .vc-time__minute input[data-vc-input-focus]{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity))}[data-vc-theme=light] .vc-time__keeping{color:#64748b}[data-vc-theme=light] .vc-time__keeping:focus-visible{outline-color:#fdba74}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-time__keeping:hover{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity))}}[data-vc-theme=light] .vc-time__range input{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}[data-vc-theme=light] .vc-time__range:after,[data-vc-theme=light] .vc-time__range:before{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}[data-vc-theme=light] .vc-time__range:hover input::-webkit-slider-thumb{border-color:#94a3b8}[data-vc-theme=light] .vc-time__range:hover input::-moz-range-thumb{border-color:#94a3b8}[data-vc-theme=light] .vc-time__range input:focus-visible::-webkit-slider-thumb{border-color:#fdba74}[data-vc-theme=light] .vc-time__range input:focus-visible::-moz-range-thumb{border-color:#fdba74}[data-vc-theme=light] .vc-time__range input::-webkit-slider-thumb{border-color:#cbd5e1;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}[data-vc-theme=light] .vc-time__range input::-moz-range-thumb{border-color:#cbd5e1;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}[data-vc-theme=light] .vc-time__range input::-webkit-slider-runnable-track{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}[data-vc-theme=light] .vc-time__range input::-moz-range-track{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}";
|
|
7121
|
+
const VCP_CSS = "/*! name: vanilla-calendar-pro v3.1.0 | url: https://github.com/uvarov-frontend/vanilla-calendar-pro */[data-vc=calendar]{border-radius:12px;box-sizing:border-box;display:flex;flex-direction:column;min-width:272px;opacity:1;padding:16px;position:relative;transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}[data-vc=calendar] [tabindex=\"0\"]:focus-visible,[data-vc=calendar] button:focus-visible,[data-vc=calendar]:focus-visible{border-radius:8px;outline-offset:-1px;outline-style:solid;outline-width:1px}[data-vc=calendar][data-vc-type=multiple] [data-vc=dates]{flex-grow:0}[data-vc=calendar][data-vc-calendar-hidden]{opacity:0;pointer-events:none}[data-vc=calendar][data-vc-calendar-hidden] *{pointer-events:none!important}[data-vc=calendar][data-vc-input]{position:absolute}[data-vc=calendar][data-vc-input][data-vc-position=bottom]{margin-top:4px}[data-vc=calendar][data-vc-input][data-vc-position=top]{margin-top:-4px}[data-vc=controls]{align-items:center;box-sizing:content-box;display:flex;justify-content:space-between;left:0;padding-left:16px;padding-right:16px;padding-top:20px;pointer-events:none;position:absolute;right:0;top:0;z-index:20}[data-vc-arrow]{background-color:transparent;border-width:0;cursor:pointer;display:block;height:24px;pointer-events:auto;position:relative;width:24px}[data-vc-arrow]:before{background-position:50%;background-repeat:no-repeat;height:100%;left:0;position:absolute;top:0;width:100%;--tw-content:\"\";content:var(--tw-content)}[data-vc-arrow=prev]:before{transform:rotate(90deg)}[data-vc-arrow=next]:before{transform:rotate(-90deg)}[data-vc=grid]{display:flex;flex-grow:1;flex-wrap:wrap;gap:28px}[data-vc=grid][data-vc-grid=hidden] [data-vc=column]{opacity:.3;pointer-events:none}[data-vc=grid][data-vc-grid=hidden] [data-vc=column][data-vc-column=month],[data-vc=grid][data-vc-grid=hidden] [data-vc=column][data-vc-column=year]{opacity:1;pointer-events:auto}[data-vc=column]{display:flex;flex-direction:column;flex-grow:1;min-width:240px}[data-vc=header]{align-items:center;display:flex;margin-bottom:12px;position:relative}[data-vc-header=content]{align-items:center;display:grid;flex-grow:1;grid-auto-columns:max-content;grid-auto-flow:column;justify-content:center;padding-left:16px;padding-right:16px;white-space:pre-wrap}[data-vc=month],[data-vc=year]{background-color:transparent;border-radius:4px;border-width:0;cursor:pointer;font-size:16px;font-weight:700;line-height:24px;padding:4px}[data-vc=month]:disabled,[data-vc=year]:disabled{pointer-events:none}[data-vc=content],[data-vc=wrapper]{display:flex;flex-grow:1}[data-vc=content]{flex-direction:column}[data-vc=months]{grid-template-columns:repeat(4,minmax(0,1fr))}[data-vc=months],[data-vc=years]{align-items:center;-moz-column-gap:4px;column-gap:4px;display:grid;flex-grow:1;row-gap:16px}[data-vc=years]{grid-template-columns:repeat(5,minmax(0,1fr))}[data-vc-months-month],[data-vc-years-year]{align-items:center;border-radius:8px;border-width:0;cursor:pointer;display:flex;font-size:12px;font-weight:600;height:40px;justify-content:center;line-height:16px;padding:4px;text-align:center;word-break:break-all}[data-vc-months-month]:disabled,[data-vc-years-year]:disabled{pointer-events:none}[data-vc-week=numbers]{display:flex;flex-direction:column}[data-vc-week-numbers=title]{align-items:center;display:flex;font-size:12px;font-weight:700;justify-content:center;line-height:16px;margin-bottom:8px}[data-vc-week-numbers=content]{align-items:center;display:grid;grid-auto-flow:row;justify-items:center;row-gap:4px}[data-vc-week-number]{align-items:center;background-color:transparent;border-style:none;cursor:pointer;display:flex;font-size:12px;font-weight:600;justify-content:center;line-height:16px;margin:0;min-height:30px;min-width:30px;padding:0;width:100%}[data-vc=week]{display:grid;grid-template-columns:repeat(7,1fr);justify-items:center;margin-bottom:8px}[data-vc-week-day]{align-items:center;background-color:transparent;border-style:none;display:flex;font-size:12px;font-weight:700;justify-content:center;line-height:16px;margin:0;min-width:30px;padding:0;width:100%}button[data-vc-week-day]{cursor:pointer}[data-vc=dates]{align-items:center;display:grid;flex-grow:1;grid-template-columns:repeat(1,minmax(0,1fr));grid-template-rows:auto;justify-items:center;pointer-events:none}[data-vc=dates][data-vc-dates-disabled] [data-vc-date-btn]{cursor:default}[data-vc-dates=row]{align-items:center;display:grid;grid-template-columns:repeat(7,1fr);justify-items:center;width:100%}[data-vc-date]{align-items:center;display:flex;justify-content:center;padding-bottom:2px;padding-top:2px;pointer-events:auto;position:relative;width:100%}[data-vc-date]:not(:has([data-vc-date-btn])),[data-vc-date][data-vc-date-disabled],[data-vc-date][data-vc-date-disabled] [data-vc-date-btn]{pointer-events:none}[data-vc-date][data-vc-date-hover] [data-vc-date-btn]{border-radius:0}[data-vc-date][data-vc-date-hover=first] [data-vc-date-btn]{border-bottom-left-radius:8px;border-bottom-right-radius:0;border-top-left-radius:8px;border-top-right-radius:0}[data-vc-date][data-vc-date-hover=last] [data-vc-date-btn]{border-bottom-left-radius:0;border-bottom-right-radius:8px;border-top-left-radius:0;border-top-right-radius:8px}[data-vc-date][data-vc-date-hover=first-and-last] [data-vc-date-btn]{border-radius:8px}[data-vc-date][data-vc-date-hover=first][data-vc-date-selected] [data-vc-date-btn]{border-bottom-left-radius:8px;border-top-left-radius:8px}[data-vc-date][data-vc-date-hover=last][data-vc-date-selected] [data-vc-date-btn]{border-bottom-right-radius:8px;border-top-right-radius:8px}[data-vc-date][data-vc-date-selected=first] [data-vc-date-btn]{border-bottom-left-radius:8px;border-bottom-right-radius:0;border-top-left-radius:8px;border-top-right-radius:0}[data-vc-date][data-vc-date-selected=last] [data-vc-date-btn]{border-bottom-left-radius:0;border-bottom-right-radius:8px;border-top-left-radius:0;border-top-right-radius:8px}[data-vc-date][data-vc-date-selected=first-and-last] [data-vc-date-btn]{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top-left-radius:8px;border-top-right-radius:8px}[data-vc-date][data-vc-date-selected=middle] [data-vc-date-btn]{border-radius:0}[data-vc-date][data-vc-date-disabled]+[data-vc-date-hover] [data-vc-date-btn],[data-vc-date][data-vc-date-disabled]+[data-vc-date-selected] [data-vc-date-btn]{border-bottom-left-radius:8px;border-top-left-radius:8px}[data-vc-date][data-vc-date-hover]:has(+[data-vc-date-disabled]) [data-vc-date-btn],[data-vc-date][data-vc-date-selected]:has(+[data-vc-date-disabled]) [data-vc-date-btn]{border-bottom-right-radius:8px;border-top-right-radius:8px}[data-vc-date-btn]:focus-visible+[data-vc-date-popup],[data-vc-date-btn]:hover+[data-vc-date-popup],[data-vc-date-popup]:focus-visible,[data-vc-date-popup]:hover{opacity:1;pointer-events:auto}[data-vc-date-btn]{align-items:center;border-radius:8px;border-width:0;cursor:pointer;display:flex;font-size:12px;font-weight:400;height:100%;justify-content:center;line-height:16px;min-height:30px;min-width:30px;padding:0;transition-duration:75ms;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);width:100%}[data-vc-date][data-vc-date-today] [data-vc-date-btn]{font-weight:700}[data-vc-date-popup]{max-width:144px;min-width:80px;pointer-events:none;position:absolute;z-index:20;--tw-translate-x:-50%;border-radius:8px;font-size:12px;font-weight:400;line-height:16px;opacity:0;padding:4px 8px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-duration:75ms;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}[data-vc-date-popup]:hover{opacity:1;pointer-events:auto}[data-vc-date-range-tooltip]{max-width:144px;pointer-events:none;position:absolute;z-index:30;--tw-translate-x:-50%;--tw-translate-y:-100%;border-radius:6px;font-size:12px;font-weight:400;line-height:16px;padding:4px 8px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}[data-vc-date-range-tooltip=hidden]{opacity:0}[data-vc-date-range-tooltip=visible]{opacity:1}[data-vc=time]{border-style:solid;border-width:1px 0 0;display:grid;gap:12px;grid-template-columns:auto 1fr;margin-top:12px;padding-top:12px}[data-vc-time=content]{align-items:center;display:grid;grid-auto-flow:column}[data-vc-time-input=hour]{margin-right:5.6px;position:relative;width:28px}[data-vc-time-input=hour]:after{display:block;margin-top:calc(-50% + 1px);position:absolute;right:-5px;top:50%;--tw-content:\":\";content:var(--tw-content)}[data-vc-time-input=minute]{width:28px}[data-vc-time-input=hour] input,[data-vc-time-input=minute] input{border-radius:4px;border-width:0;box-sizing:border-box;display:block;font-size:18px;font-weight:600;line-height:18px;margin:0;padding:2px;position:relative;text-align:center;width:100%}[data-vc-time-input=hour] input:focus-visible,[data-vc-time-input=minute] input:focus-visible{outline-style:solid;outline-width:1px}[data-vc-time-input=hour] input:disabled,[data-vc-time-input=minute] input:disabled{cursor:default}[data-vc-time-input=hour] input:hover:disabled,[data-vc-time-input=minute] input:hover:disabled,[data-vc-time=keeping]{background-color:transparent}[data-vc-time=keeping]{border-radius:4px;border-width:0;cursor:pointer;font-size:11.04px;margin-left:1px;margin-top:4px;padding:0;width:22px}[data-vc-time=keeping]:focus-visible{outline-style:solid;outline-width:1px}[data-vc-time=keeping]:disabled{cursor:default}[data-vc-time=keeping]:hover:disabled{background-color:transparent}[data-vc-time=ranges]{display:grid;grid-auto-flow:row}[data-vc-time-range]{font-size:0;position:relative;z-index:10}[data-vc-time-range]:before{content:var(--tw-content);left:0}[data-vc-time-range]:after{content:var(--tw-content);right:0}[data-vc-time-range]:after,[data-vc-time-range]:before{content:\"\";height:8px;pointer-events:none;position:absolute;top:50%;transform:translateY(-50%);width:1px;z-index:10}[data-vc-time-range] input{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;height:20px;margin:0;outline-width:0;position:relative;width:100%}[data-vc-time-range] input::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;border-radius:4px;border-style:solid;border-width:1px;box-sizing:border-box;cursor:pointer;height:16px;margin-top:-8px;position:relative;width:12px;z-index:20;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}[data-vc-time-range] input::-moz-range-thumb{border-radius:4px;border-style:solid;border-width:1px;box-sizing:border-box;cursor:pointer;height:16px;position:relative;width:12px;z-index:20;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}[data-vc-time-range] input::-webkit-slider-runnable-track{box-sizing:border-box;cursor:pointer;height:1px;margin-top:1px;width:100%;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}[data-vc-time-range] input::-moz-range-track{box-sizing:border-box;cursor:pointer;height:1px;margin-top:1px;width:100%;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}\n/*! name: vanilla-calendar-pro v3.1.0 | url: https://github.com/uvarov-frontend/vanilla-calendar-pro */[data-vc-theme=light].vc{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));color:#0f172a}[data-vc-theme=light].vc[data-vc-input]{--tw-shadow:0 9px 20px rgba(0,0,0,.1);--tw-shadow-colored:0 9px 20px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}[data-vc-theme=light].vc [tabindex=\"0\"]:focus-visible,[data-vc-theme=light].vc button:focus-visible,[data-vc-theme=light].vc:focus-visible{outline-color:#fdba74}[data-vc-theme=light] .vc-arrow{background-color:transparent}[data-vc-theme=light] .vc-arrow:before{background-image:url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0iIzBmMTcyYSIgZD0iTTEyIDE2Yy0uMyAwLS41LS4xLS43LS4zbC02LTZjLS40LS40LS40LTEgMC0xLjRzMS0uNCAxLjQgMGw1LjMgNS4zIDUuMy01LjNjLjQtLjQgMS0uNCAxLjQgMHMuNCAxIDAgMS40bC02IDZjLS4yLjItLjQuMy0uNy4zIi8+PC9zdmc+\");content:var(--tw-content)}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-arrow:hover:before{content:var(--tw-content);opacity:.6}}[data-vc-theme=light] .vc-header__content,[data-vc-theme=light] .vc-month,[data-vc-theme=light] .vc-year{color:#0f172a}[data-vc-theme=light] .vc-month:disabled,[data-vc-theme=light] .vc-year:disabled{color:#cbd5e1}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-month:hover,[data-vc-theme=light] .vc-year:hover{color:#64748b}}[data-vc-theme=light] .vc-months__month,[data-vc-theme=light] .vc-years__year{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));color:#64748b}[data-vc-theme=light] .vc-months__month:disabled,[data-vc-theme=light] .vc-years__year:disabled{color:#cbd5e1}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-months__month:hover,[data-vc-theme=light] .vc-years__year:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}[data-vc-theme=light] .vc-months__month:hover:disabled,[data-vc-theme=light] .vc-years__year:hover:disabled{color:#cbd5e1}}[data-vc-theme=light] .vc-months__month[data-vc-months-month-selected],[data-vc-theme=light] .vc-years__year[data-vc-years-year-selected]{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity));color:#fff}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-months__month[data-vc-months-month-selected]:hover,[data-vc-theme=light] .vc-years__year[data-vc-years-year-selected]:hover{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity));color:#fff}}[data-vc-theme=light] .vc-week-number,[data-vc-theme=light] .vc-week-numbers__title{color:#64748b}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-week-number:hover{color:#475569}}[data-vc-theme=light] .vc-week__day{color:#64748b}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] button.vc-week__day:hover{color:#475569}}[data-vc-theme=light] .vc-week__day[data-vc-week-day-off]{color:#f43f5e}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] button.vc-week__day[data-vc-week-day-off]:hover{color:#e11d48}}[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-holiday][data-vc-date-selected] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-weekend][data-vc-date-selected] .vc-date__btn{background-color:rgb(244 63 94/var(--tw-bg-opacity));--tw-bg-opacity:0.7;color:#fff}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-holiday][data-vc-date-selected] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-weekend][data-vc-date-selected] .vc-date__btn:hover{background-color:rgb(244 63 94/var(--tw-bg-opacity));--tw-bg-opacity:0.7;color:#fff}}[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-holiday][data-vc-date-month=next][data-vc-date-selected] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-holiday][data-vc-date-month=prev][data-vc-date-selected] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-weekend][data-vc-date-month=next][data-vc-date-selected] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-weekend][data-vc-date-month=prev][data-vc-date-selected] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));color:#64748b}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-holiday][data-vc-date-month=next][data-vc-date-selected] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-holiday][data-vc-date-month=prev][data-vc-date-selected] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-weekend][data-vc-date-month=next][data-vc-date-selected] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-weekend][data-vc-date-month=prev][data-vc-date-selected] .vc-date__btn:hover{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));color:#64748b}}[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-selected] .vc-date__btn{background-color:rgb(6 182 212/var(--tw-bg-opacity));--tw-bg-opacity:0.7;color:#fff}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-selected] .vc-date__btn:hover{background-color:rgb(6 182 212/var(--tw-bg-opacity));--tw-bg-opacity:0.7;color:#fff}}[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-month=next][data-vc-date-selected] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-month=prev][data-vc-date-selected] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));color:#64748b}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-month=next][data-vc-date-selected] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-selected=middle][data-vc-date-month=prev][data-vc-date-selected] .vc-date__btn:hover{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));color:#64748b}}[data-vc-theme=light] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));color:#0f172a}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date__btn:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}}[data-vc-theme=light] .vc-date[data-vc-date-today] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity));color:#06b6d4}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-today] .vc-date__btn:hover{color:#06b6d4}}[data-vc-theme=light] .vc-date[data-vc-date-today][data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-today][data-vc-date-month=prev] .vc-date__btn{color:#64748b}[data-vc-theme=light] .vc-date[data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-month=prev] .vc-date__btn{color:#94a3b8}[data-vc-theme=light] .vc-date[data-vc-date-disabled] .vc-date__btn{color:#cbd5e1}[data-vc-theme=light] .vc-date[data-vc-date-hover] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}[data-vc-theme=light] .vc-date[data-vc-date-hover=first] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-hover=last] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-hover=first] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-hover=last] .vc-date__btn:hover{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}}[data-vc-theme=light] .vc-date[data-vc-date-holiday] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend] .vc-date__btn{color:#f43f5e}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-holiday] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-weekend] .vc-date__btn:hover{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity))}}[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-hover] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-hover] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity))}[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-hover=first] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-hover=last] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-hover=first] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-hover=last] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity))}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-hover=first] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-hover=last] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-hover=first] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-hover=last] .vc-date__btn:hover{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity))}}[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-disabled] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-disabled] .vc-date__btn{color:#cbd5e1}[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-today] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-today] .vc-date__btn{color:#f43f5e}[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-today][data-vc-date-disabled] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-today][data-vc-date-disabled] .vc-date__btn{color:#cbd5e1}[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-month=prev] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-month=prev] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));color:#94a3b8}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-month=next] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-month=prev] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-month=next] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-month=prev] .vc-date__btn:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}}[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-hover][data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-hover][data-vc-date-month=prev] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-hover][data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-hover][data-vc-date-month=prev] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-today][data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-today][data-vc-date-month=prev] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-today][data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-today][data-vc-date-month=prev] .vc-date__btn{color:#94a3b8}[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-disabled][data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-disabled][data-vc-date-month=prev] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-disabled][data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-disabled][data-vc-date-month=prev] .vc-date__btn{color:#cbd5e1}[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-selected] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-selected] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity));color:#fff}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-selected] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-selected] .vc-date__btn:hover{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity));color:#fff}}[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-selected][data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-selected][data-vc-date-month=prev] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-selected][data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-selected][data-vc-date-month=prev] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity));color:#64748b}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-selected][data-vc-date-month=next] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-holiday][data-vc-date-selected][data-vc-date-month=prev] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-selected][data-vc-date-month=next] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-weekend][data-vc-date-selected][data-vc-date-month=prev] .vc-date__btn:hover{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity));color:#64748b}}[data-vc-theme=light] .vc-date[data-vc-date-selected] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity));color:#fff}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-selected] .vc-date__btn:hover{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity));color:#fff}}[data-vc-theme=light] .vc-date[data-vc-date-selected][data-vc-date-month=next] .vc-date__btn,[data-vc-theme=light] .vc-date[data-vc-date-selected][data-vc-date-month=prev] .vc-date__btn{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity));color:#64748b}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-date[data-vc-date-selected][data-vc-date-month=next] .vc-date__btn:hover,[data-vc-theme=light] .vc-date[data-vc-date-selected][data-vc-date-month=prev] .vc-date__btn:hover{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity));color:#64748b}}[data-vc-theme=light] .vc-date__popup{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));color:#0f172a;--tw-shadow:0 3px 15px rgba(85,85,85,.2);--tw-shadow-colored:0 3px 15px var(--tw-shadow-color)}[data-vc-theme=light] .vc-date-range-tooltip,[data-vc-theme=light] .vc-date__popup{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}[data-vc-theme=light] .vc-date-range-tooltip{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity));color:#64748b;--tw-shadow:0px 1px 4px rgba(85,85,85,.2);--tw-shadow-colored:0px 1px 4px var(--tw-shadow-color)}[data-vc-theme=light] .vc-time{border-color:#cbd5e1}[data-vc-theme=light] .vc-time__hour:after,[data-vc-theme=light] .vc-time__minute:after{color:#0f172a;content:var(--tw-content)}[data-vc-theme=light] .vc-time__hour input,[data-vc-theme=light] .vc-time__minute input{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));color:#0f172a}[data-vc-theme=light] .vc-time__hour input:focus-visible,[data-vc-theme=light] .vc-time__minute input:focus-visible{outline-color:#fdba74}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-time__hour input:hover,[data-vc-theme=light] .vc-time__minute input:hover{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity))}}[data-vc-theme=light] .vc-time__hour input[data-vc-input-focus],[data-vc-theme=light] .vc-time__minute input[data-vc-input-focus]{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity))}[data-vc-theme=light] .vc-time__keeping{color:#64748b}[data-vc-theme=light] .vc-time__keeping:focus-visible{outline-color:#fdba74}@media (hover:hover) and (pointer:fine){[data-vc-theme=light] .vc-time__keeping:hover{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity))}}[data-vc-theme=light] .vc-time__range input{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}[data-vc-theme=light] .vc-time__range:after,[data-vc-theme=light] .vc-time__range:before{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}[data-vc-theme=light] .vc-time__range:hover input::-webkit-slider-thumb{border-color:#94a3b8}[data-vc-theme=light] .vc-time__range:hover input::-moz-range-thumb{border-color:#94a3b8}[data-vc-theme=light] .vc-time__range input:focus-visible::-webkit-slider-thumb{border-color:#fdba74}[data-vc-theme=light] .vc-time__range input:focus-visible::-moz-range-thumb{border-color:#fdba74}[data-vc-theme=light] .vc-time__range input::-webkit-slider-thumb{border-color:#cbd5e1;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}[data-vc-theme=light] .vc-time__range input::-moz-range-thumb{border-color:#cbd5e1;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}[data-vc-theme=light] .vc-time__range input::-webkit-slider-runnable-track{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}[data-vc-theme=light] .vc-time__range input::-moz-range-track{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}";
|
|
7093
7122
|
|
|
7094
7123
|
/**
|
|
7095
7124
|
* CardDatePicker — Custom Element for a single-date picker.
|
|
@@ -8912,12 +8941,14 @@ const FOCUS_TARGET_SELECTOR = [
|
|
|
8912
8941
|
*/
|
|
8913
8942
|
function createCardNodeAccess(container) {
|
|
8914
8943
|
const handles = new Map();
|
|
8915
|
-
const
|
|
8944
|
+
const focusListeners = new Set();
|
|
8945
|
+
const scrollSubscriptions = new Map();
|
|
8916
8946
|
let focusedId = null;
|
|
8917
8947
|
let focusSyncScheduled = false;
|
|
8918
|
-
let
|
|
8948
|
+
let focusObserving = false;
|
|
8949
|
+
let scrollObserving = false;
|
|
8919
8950
|
let observationEpoch = 0;
|
|
8920
|
-
let
|
|
8951
|
+
let focusObserver = null;
|
|
8921
8952
|
let disposed = false;
|
|
8922
8953
|
const resolveElement = (id) => {
|
|
8923
8954
|
if (disposed)
|
|
@@ -8988,7 +9019,7 @@ function createCardNodeAccess(container) {
|
|
|
8988
9019
|
return null;
|
|
8989
9020
|
};
|
|
8990
9021
|
const syncFocus = () => {
|
|
8991
|
-
if (disposed || !
|
|
9022
|
+
if (disposed || !focusObserving)
|
|
8992
9023
|
return;
|
|
8993
9024
|
const nextId = resolveFocusedId();
|
|
8994
9025
|
if (nextId === focusedId)
|
|
@@ -8996,7 +9027,7 @@ function createCardNodeAccess(container) {
|
|
|
8996
9027
|
const previousNode = focusedId ? getNode(focusedId) : null;
|
|
8997
9028
|
const node = nextId ? getNode(nextId) : null;
|
|
8998
9029
|
focusedId = nextId;
|
|
8999
|
-
for (const listener of [...
|
|
9030
|
+
for (const listener of [...focusListeners]) {
|
|
9000
9031
|
try {
|
|
9001
9032
|
listener({ node, previousNode });
|
|
9002
9033
|
}
|
|
@@ -9006,7 +9037,7 @@ function createCardNodeAccess(container) {
|
|
|
9006
9037
|
}
|
|
9007
9038
|
};
|
|
9008
9039
|
const scheduleFocusSync = () => {
|
|
9009
|
-
if (disposed || !
|
|
9040
|
+
if (disposed || !focusObserving || focusSyncScheduled)
|
|
9010
9041
|
return;
|
|
9011
9042
|
focusSyncScheduled = true;
|
|
9012
9043
|
const scheduledEpoch = observationEpoch;
|
|
@@ -9017,29 +9048,29 @@ function createCardNodeAccess(container) {
|
|
|
9017
9048
|
syncFocus();
|
|
9018
9049
|
});
|
|
9019
9050
|
};
|
|
9020
|
-
const
|
|
9021
|
-
if (disposed ||
|
|
9051
|
+
const startFocusObserving = () => {
|
|
9052
|
+
if (disposed || focusObserving)
|
|
9022
9053
|
return;
|
|
9023
|
-
|
|
9054
|
+
focusObserving = true;
|
|
9024
9055
|
observationEpoch += 1;
|
|
9025
9056
|
focusedId = resolveFocusedId();
|
|
9026
9057
|
container.addEventListener('focusin', scheduleFocusSync, true);
|
|
9027
9058
|
container.addEventListener('focusout', scheduleFocusSync, true);
|
|
9028
9059
|
if (typeof MutationObserver !== 'undefined') {
|
|
9029
|
-
|
|
9030
|
-
|
|
9060
|
+
focusObserver ?? (focusObserver = new MutationObserver(scheduleFocusSync));
|
|
9061
|
+
focusObserver.observe(container, { childList: true, subtree: true });
|
|
9031
9062
|
}
|
|
9032
9063
|
};
|
|
9033
|
-
const
|
|
9034
|
-
if (!
|
|
9064
|
+
const stopFocusObserving = () => {
|
|
9065
|
+
if (!focusObserving)
|
|
9035
9066
|
return;
|
|
9036
|
-
|
|
9067
|
+
focusObserving = false;
|
|
9037
9068
|
observationEpoch += 1;
|
|
9038
9069
|
focusSyncScheduled = false;
|
|
9039
9070
|
const cleanupSteps = [
|
|
9040
9071
|
() => container.removeEventListener('focusin', scheduleFocusSync, true),
|
|
9041
9072
|
() => container.removeEventListener('focusout', scheduleFocusSync, true),
|
|
9042
|
-
() =>
|
|
9073
|
+
() => focusObserver?.disconnect(),
|
|
9043
9074
|
];
|
|
9044
9075
|
for (const cleanup of cleanupSteps) {
|
|
9045
9076
|
try {
|
|
@@ -9051,36 +9082,139 @@ function createCardNodeAccess(container) {
|
|
|
9051
9082
|
}
|
|
9052
9083
|
focusedId = null;
|
|
9053
9084
|
};
|
|
9085
|
+
const handleScroll = (event) => {
|
|
9086
|
+
if (disposed || !scrollObserving)
|
|
9087
|
+
return;
|
|
9088
|
+
const path = typeof event.composedPath === 'function'
|
|
9089
|
+
? event.composedPath()
|
|
9090
|
+
: [];
|
|
9091
|
+
const target = path[0] ?? event.target;
|
|
9092
|
+
if (!(target instanceof HTMLElement)
|
|
9093
|
+
|| !target.matches(CARD_NODE_SELECTOR)) {
|
|
9094
|
+
return;
|
|
9095
|
+
}
|
|
9096
|
+
const nodeId = target.getAttribute('data-card-id');
|
|
9097
|
+
if (!nodeId || resolveElement(nodeId) !== target)
|
|
9098
|
+
return;
|
|
9099
|
+
const subscriptions = scrollSubscriptions.get(nodeId);
|
|
9100
|
+
if (!subscriptions?.size)
|
|
9101
|
+
return;
|
|
9102
|
+
const snapshot = Object.freeze({
|
|
9103
|
+
node: getNode(nodeId),
|
|
9104
|
+
scrollTop: target.scrollTop,
|
|
9105
|
+
scrollLeft: target.scrollLeft,
|
|
9106
|
+
scrollHeight: target.scrollHeight,
|
|
9107
|
+
scrollWidth: target.scrollWidth,
|
|
9108
|
+
clientHeight: target.clientHeight,
|
|
9109
|
+
clientWidth: target.clientWidth,
|
|
9110
|
+
});
|
|
9111
|
+
for (const subscription of [...subscriptions]) {
|
|
9112
|
+
try {
|
|
9113
|
+
subscription.listener(snapshot);
|
|
9114
|
+
}
|
|
9115
|
+
catch (error) {
|
|
9116
|
+
console.error('[CardInstance] scroll listener failed', error);
|
|
9117
|
+
}
|
|
9118
|
+
}
|
|
9119
|
+
};
|
|
9120
|
+
const startScrollObserving = () => {
|
|
9121
|
+
if (disposed || scrollObserving)
|
|
9122
|
+
return;
|
|
9123
|
+
scrollObserving = true;
|
|
9124
|
+
container.addEventListener('scroll', handleScroll, {
|
|
9125
|
+
capture: true,
|
|
9126
|
+
passive: true,
|
|
9127
|
+
});
|
|
9128
|
+
};
|
|
9129
|
+
const stopScrollObserving = () => {
|
|
9130
|
+
if (!scrollObserving)
|
|
9131
|
+
return;
|
|
9132
|
+
scrollObserving = false;
|
|
9133
|
+
try {
|
|
9134
|
+
container.removeEventListener('scroll', handleScroll, true);
|
|
9135
|
+
}
|
|
9136
|
+
catch (error) {
|
|
9137
|
+
console.error('[CardInstance] Scroll observation cleanup failed', error);
|
|
9138
|
+
}
|
|
9139
|
+
};
|
|
9054
9140
|
return {
|
|
9055
9141
|
getNode,
|
|
9056
9142
|
onFocusChange(listener) {
|
|
9057
9143
|
if (disposed)
|
|
9058
9144
|
return () => { };
|
|
9059
|
-
|
|
9060
|
-
if (
|
|
9061
|
-
|
|
9145
|
+
focusListeners.add(listener);
|
|
9146
|
+
if (focusListeners.size === 1)
|
|
9147
|
+
startFocusObserving();
|
|
9148
|
+
let subscribed = true;
|
|
9149
|
+
return () => {
|
|
9150
|
+
if (!subscribed)
|
|
9151
|
+
return;
|
|
9152
|
+
subscribed = false;
|
|
9153
|
+
focusListeners.delete(listener);
|
|
9154
|
+
if (focusListeners.size === 0)
|
|
9155
|
+
stopFocusObserving();
|
|
9156
|
+
};
|
|
9157
|
+
},
|
|
9158
|
+
onScroll(nodeId, listener) {
|
|
9159
|
+
if (disposed)
|
|
9160
|
+
return () => { };
|
|
9161
|
+
const subscription = { listener };
|
|
9162
|
+
let subscriptions = scrollSubscriptions.get(nodeId);
|
|
9163
|
+
if (!subscriptions) {
|
|
9164
|
+
subscriptions = new Set();
|
|
9165
|
+
scrollSubscriptions.set(nodeId, subscriptions);
|
|
9166
|
+
}
|
|
9167
|
+
subscriptions.add(subscription);
|
|
9168
|
+
startScrollObserving();
|
|
9062
9169
|
let subscribed = true;
|
|
9063
9170
|
return () => {
|
|
9064
9171
|
if (!subscribed)
|
|
9065
9172
|
return;
|
|
9066
9173
|
subscribed = false;
|
|
9067
|
-
|
|
9068
|
-
|
|
9069
|
-
|
|
9174
|
+
const active = scrollSubscriptions.get(nodeId);
|
|
9175
|
+
active?.delete(subscription);
|
|
9176
|
+
if (active?.size === 0)
|
|
9177
|
+
scrollSubscriptions.delete(nodeId);
|
|
9178
|
+
if (scrollSubscriptions.size === 0)
|
|
9179
|
+
stopScrollObserving();
|
|
9070
9180
|
};
|
|
9071
9181
|
},
|
|
9072
9182
|
dispose() {
|
|
9073
9183
|
if (disposed)
|
|
9074
9184
|
return;
|
|
9075
|
-
|
|
9185
|
+
stopFocusObserving();
|
|
9186
|
+
stopScrollObserving();
|
|
9076
9187
|
disposed = true;
|
|
9077
|
-
|
|
9188
|
+
focusListeners.clear();
|
|
9189
|
+
scrollSubscriptions.clear();
|
|
9078
9190
|
handles.clear();
|
|
9079
9191
|
},
|
|
9080
9192
|
};
|
|
9081
9193
|
}
|
|
9082
9194
|
|
|
9195
|
+
const DISABLED_MARKER = 'data-copilot-card-disabled';
|
|
9196
|
+
function applyDisabledState(element, disabled) {
|
|
9197
|
+
if (!disabled)
|
|
9198
|
+
return;
|
|
9199
|
+
element.setAttribute('data-disabled', 'true');
|
|
9200
|
+
element.setAttribute(DISABLED_MARKER, 'true');
|
|
9201
|
+
// Inline declarations work inside host ShadowRoots too. Use the shorthand
|
|
9202
|
+
// to mask background images/gradients, matching the historical disabled state.
|
|
9203
|
+
element.style.background = 'var(--card-disabled-background, #F5F5F5)';
|
|
9204
|
+
element.style.color = 'var(--card-disabled-foreground, #C0C0C0)';
|
|
9205
|
+
element.style.pointerEvents = 'none';
|
|
9206
|
+
element.style.cursor = 'default';
|
|
9207
|
+
}
|
|
9208
|
+
function applyDisabledDescendants(element, disabled) {
|
|
9209
|
+
if (!disabled)
|
|
9210
|
+
return;
|
|
9211
|
+
element.querySelectorAll('*').forEach((child) => {
|
|
9212
|
+
child.setAttribute('data-disabled', 'true');
|
|
9213
|
+
});
|
|
9214
|
+
}
|
|
9215
|
+
|
|
9083
9216
|
const FORCE_REPLACE = Symbol('bound-force-replace');
|
|
9217
|
+
const REPEAT_APPEND = Symbol('bound-repeat-append');
|
|
9084
9218
|
/**
|
|
9085
9219
|
* Render the scoped/materialized branch of a card.
|
|
9086
9220
|
*
|
|
@@ -9200,25 +9334,6 @@ function renderBoundCard(container, schema, options) {
|
|
|
9200
9334
|
bindingFingerprint: nodeBindingFingerprint(node, resolvedProps, disabled),
|
|
9201
9335
|
};
|
|
9202
9336
|
}
|
|
9203
|
-
function applyDisabledState(element, disabled) {
|
|
9204
|
-
if (!disabled)
|
|
9205
|
-
return;
|
|
9206
|
-
element.setAttribute('data-disabled', 'true');
|
|
9207
|
-
element.style.background = '#F5F5F5';
|
|
9208
|
-
element.style.color = '#C0C0C0';
|
|
9209
|
-
element.style.setProperty('--card-disabled-color', '#C0C0C0');
|
|
9210
|
-
element.style.pointerEvents = 'none';
|
|
9211
|
-
element.style.cursor = 'default';
|
|
9212
|
-
}
|
|
9213
|
-
function applyDisabledDescendants(element, disabled) {
|
|
9214
|
-
if (!disabled)
|
|
9215
|
-
return;
|
|
9216
|
-
element.querySelectorAll('*').forEach((child) => {
|
|
9217
|
-
const htmlChild = child;
|
|
9218
|
-
htmlChild.setAttribute('data-disabled', 'true');
|
|
9219
|
-
htmlChild.style.setProperty('--card-disabled-color', '#C0C0C0');
|
|
9220
|
-
});
|
|
9221
|
-
}
|
|
9222
9337
|
function disposeBoundElement(element) {
|
|
9223
9338
|
const cleanupSteps = [
|
|
9224
9339
|
() => clearSlotOwnerBehaviorsIn(element),
|
|
@@ -9366,9 +9481,12 @@ function renderBoundCard(container, schema, options) {
|
|
|
9366
9481
|
collectMountedOccurrences(child, occurrences);
|
|
9367
9482
|
}
|
|
9368
9483
|
}
|
|
9369
|
-
function prepareBoundNode(node, occurrenceKey, renderVariables, forcedOwnerIds, current) {
|
|
9484
|
+
function prepareBoundNode(node, occurrenceKey, renderVariables, forcedOwnerIds, appendPlans, current) {
|
|
9370
9485
|
const metadata = resolveBoundMetadata(node, occurrenceKey, renderVariables);
|
|
9371
9486
|
const forceReplace = forcedOwnerIds.has(node.id);
|
|
9487
|
+
const appendPlan = current
|
|
9488
|
+
? appendPlans.get(current.occurrenceKey)
|
|
9489
|
+
: undefined;
|
|
9372
9490
|
if (!metadata.visible || forceReplace) {
|
|
9373
9491
|
return {
|
|
9374
9492
|
...metadata,
|
|
@@ -9394,14 +9512,17 @@ function renderBoundCard(container, schema, options) {
|
|
|
9394
9512
|
const ordinal = nextChildOrdinals.get(currentChild.nodeId) ?? 0;
|
|
9395
9513
|
nextChildOrdinals.set(currentChild.nodeId, ordinal + 1);
|
|
9396
9514
|
const child = matching[Math.min(ordinal, matching.length - 1)];
|
|
9397
|
-
children.push(prepareBoundNode(child, currentChild.occurrenceKey, renderVariables, forcedOwnerIds, currentChild));
|
|
9515
|
+
children.push(prepareBoundNode(child, currentChild.occurrenceKey, renderVariables, forcedOwnerIds, appendPlans, currentChild));
|
|
9398
9516
|
}
|
|
9399
9517
|
return {
|
|
9400
9518
|
...metadata,
|
|
9519
|
+
...(appendPlan ? { [REPEAT_APPEND]: true } : {}),
|
|
9401
9520
|
children,
|
|
9402
9521
|
};
|
|
9403
9522
|
}
|
|
9404
9523
|
function decideBoundUpdate(current, next) {
|
|
9524
|
+
if (next[REPEAT_APPEND])
|
|
9525
|
+
return 'retain';
|
|
9405
9526
|
if (next[FORCE_REPLACE]
|
|
9406
9527
|
|| current.occurrenceKey !== next.occurrenceKey
|
|
9407
9528
|
|| current.nodeId !== next.nodeId
|
|
@@ -9463,11 +9584,308 @@ function renderBoundCard(container, schema, options) {
|
|
|
9463
9584
|
}
|
|
9464
9585
|
return changed;
|
|
9465
9586
|
}
|
|
9466
|
-
function
|
|
9467
|
-
|
|
9468
|
-
|
|
9587
|
+
function pointerOverlaps(left, right) {
|
|
9588
|
+
return left === right
|
|
9589
|
+
|| left === ''
|
|
9590
|
+
|| right === ''
|
|
9591
|
+
|| left.startsWith(`${right}/`)
|
|
9592
|
+
|| right.startsWith(`${left}/`);
|
|
9593
|
+
}
|
|
9594
|
+
function changedPointersOutsideSuffix(before, draft, sourcePath) {
|
|
9595
|
+
const changed = collectChangedPointers(before, draft)
|
|
9596
|
+
.filter(pointer => pointer !== sourcePath);
|
|
9597
|
+
changed.push(`${sourcePath}/length`);
|
|
9598
|
+
return [...new Set(changed)];
|
|
9599
|
+
}
|
|
9600
|
+
function repeatOwnerIdentityEqual(current, next) {
|
|
9601
|
+
return current.key === next.key
|
|
9602
|
+
&& current.parentKey === next.parentKey
|
|
9603
|
+
&& current.runtimeOwnerId === next.runtimeOwnerId
|
|
9604
|
+
&& current.sourceOwnerId === next.sourceOwnerId
|
|
9605
|
+
&& current.slot === next.slot
|
|
9606
|
+
&& current.templateId === next.templateId
|
|
9607
|
+
&& current.emptyTemplateId === next.emptyTemplateId
|
|
9608
|
+
&& current.sourcePath === next.sourcePath
|
|
9609
|
+
&& current.dataPath === next.dataPath
|
|
9610
|
+
&& current.instancePath === next.instancePath
|
|
9611
|
+
&& current.depth === next.depth;
|
|
9612
|
+
}
|
|
9613
|
+
function hasStrictJsonPrefix(previous, next) {
|
|
9614
|
+
return next.length > previous.length
|
|
9615
|
+
&& previous.every((value, index) => jsonDataEqual(value, next[index]));
|
|
9616
|
+
}
|
|
9617
|
+
function childNodeSequenceEqual(parent, expected) {
|
|
9618
|
+
const actual = Array.from(parent.childNodes);
|
|
9619
|
+
return actual.length === expected.length
|
|
9620
|
+
&& actual.every((node, index) => node === expected[index]);
|
|
9621
|
+
}
|
|
9622
|
+
function occurrenceKeysForChildren(parentOccurrenceKey, children) {
|
|
9623
|
+
const ordinals = new Map();
|
|
9624
|
+
return children.map((child) => {
|
|
9625
|
+
const ordinal = ordinals.get(child.id) ?? 0;
|
|
9626
|
+
ordinals.set(child.id, ordinal + 1);
|
|
9627
|
+
return childOccurrenceKey(parentOccurrenceKey, child.id, ordinal);
|
|
9628
|
+
});
|
|
9629
|
+
}
|
|
9630
|
+
function findMountedByOccurrenceKey(root, occurrenceKey) {
|
|
9631
|
+
if (root.occurrenceKey === occurrenceKey)
|
|
9632
|
+
return root;
|
|
9633
|
+
for (const child of root.children) {
|
|
9634
|
+
const match = findMountedByOccurrenceKey(child, occurrenceKey);
|
|
9635
|
+
if (match)
|
|
9636
|
+
return match;
|
|
9637
|
+
}
|
|
9638
|
+
return null;
|
|
9639
|
+
}
|
|
9640
|
+
function replaceMountedByOccurrenceKey(root, occurrenceKey, replacement) {
|
|
9641
|
+
if (root.occurrenceKey === occurrenceKey)
|
|
9642
|
+
return replacement;
|
|
9643
|
+
for (let index = 0; index < root.children.length; index += 1) {
|
|
9644
|
+
const replacedChild = replaceMountedByOccurrenceKey(root.children[index], occurrenceKey, replacement);
|
|
9645
|
+
if (!replacedChild)
|
|
9646
|
+
continue;
|
|
9647
|
+
const children = root.children.slice();
|
|
9648
|
+
children[index] = replacedChild;
|
|
9649
|
+
return { ...root, children };
|
|
9650
|
+
}
|
|
9651
|
+
return null;
|
|
9652
|
+
}
|
|
9653
|
+
function mountedNodesById(root, nodeId) {
|
|
9654
|
+
const matches = [];
|
|
9655
|
+
const visit = (node) => {
|
|
9656
|
+
if (node.nodeId === nodeId)
|
|
9657
|
+
matches.push(node);
|
|
9658
|
+
for (const child of node.children)
|
|
9659
|
+
visit(child);
|
|
9660
|
+
};
|
|
9661
|
+
visit(root);
|
|
9662
|
+
return matches;
|
|
9663
|
+
}
|
|
9664
|
+
function mountedTreeOrderMatchesDom(root) {
|
|
9665
|
+
if (root.element.parentNode !== container
|
|
9666
|
+
|| container.childNodes.length !== 1
|
|
9667
|
+
|| container.firstChild !== root.element) {
|
|
9668
|
+
return false;
|
|
9669
|
+
}
|
|
9670
|
+
const visit = (node) => {
|
|
9671
|
+
let previous = null;
|
|
9672
|
+
for (const child of node.children) {
|
|
9673
|
+
if (!node.element.contains(child.element))
|
|
9674
|
+
return false;
|
|
9675
|
+
if (previous
|
|
9676
|
+
&& previous.compareDocumentPosition(child.element)
|
|
9677
|
+
!== Node.DOCUMENT_POSITION_FOLLOWING) {
|
|
9678
|
+
return false;
|
|
9679
|
+
}
|
|
9680
|
+
previous = child.element;
|
|
9681
|
+
if (!visit(child))
|
|
9682
|
+
return false;
|
|
9683
|
+
}
|
|
9684
|
+
return true;
|
|
9685
|
+
};
|
|
9686
|
+
return visit(root);
|
|
9687
|
+
}
|
|
9688
|
+
function retainedSubtreeEquivalent(current, next) {
|
|
9689
|
+
return current.occurrenceKey === next.occurrenceKey
|
|
9690
|
+
&& current.nodeId === next.nodeId
|
|
9691
|
+
&& current.nodeType === next.nodeType
|
|
9692
|
+
&& current.node.sourceId === next.node.sourceId
|
|
9693
|
+
&& current.node.instancePath === next.node.instancePath
|
|
9694
|
+
&& current.node.dataPath === next.node.dataPath
|
|
9695
|
+
&& current.node.bindingDialect === next.node.bindingDialect
|
|
9696
|
+
&& current.rendererToken === next.rendererToken
|
|
9697
|
+
&& current.visible === next.visible
|
|
9698
|
+
&& current.disabled === next.disabled
|
|
9699
|
+
&& current.propsFingerprint === next.propsFingerprint
|
|
9700
|
+
&& current.layoutFingerprint === next.layoutFingerprint
|
|
9701
|
+
&& current.bindingFingerprint === next.bindingFingerprint
|
|
9702
|
+
&& current.children.length === next.children.length
|
|
9703
|
+
&& current.children.every((child, index) => (retainedSubtreeEquivalent(child, next.children[index])));
|
|
9704
|
+
}
|
|
9705
|
+
function prepareComparableRetainedNode(node, occurrenceKey, renderVariables, current) {
|
|
9706
|
+
const expectedKeys = occurrenceKeysForChildren(occurrenceKey, node.children);
|
|
9707
|
+
if (current.children.length !== node.children.length
|
|
9708
|
+
|| current.children.some((child, index) => (child.occurrenceKey !== expectedKeys[index]))) {
|
|
9709
|
+
return null;
|
|
9710
|
+
}
|
|
9711
|
+
const children = [];
|
|
9712
|
+
for (let index = 0; index < node.children.length; index += 1) {
|
|
9713
|
+
const child = prepareComparableRetainedNode(node.children[index], expectedKeys[index], renderVariables, current.children[index]);
|
|
9714
|
+
if (!child)
|
|
9715
|
+
return null;
|
|
9716
|
+
children.push(child);
|
|
9717
|
+
}
|
|
9718
|
+
return {
|
|
9719
|
+
...resolveBoundMetadata(node, occurrenceKey, renderVariables),
|
|
9720
|
+
children,
|
|
9721
|
+
};
|
|
9722
|
+
}
|
|
9723
|
+
function projectRepeatOwnerPrefix(node, owner, current) {
|
|
9724
|
+
const slots = node.props.slots;
|
|
9725
|
+
const slot = slots?.[owner.slot];
|
|
9726
|
+
const currentSlots = current.node.props.slots;
|
|
9727
|
+
const currentSlot = currentSlots?.[owner.slot];
|
|
9728
|
+
if (!slots
|
|
9729
|
+
|| !slot
|
|
9730
|
+
|| !Array.isArray(slot.children)
|
|
9731
|
+
|| !currentSlot
|
|
9732
|
+
|| !Array.isArray(currentSlot.children)
|
|
9733
|
+
|| currentSlot.children.length >= slot.children.length
|
|
9734
|
+
|| currentSlot.children.some((childId, index) => (childId !== slot.children[index]))) {
|
|
9735
|
+
return null;
|
|
9736
|
+
}
|
|
9737
|
+
const appendedChildIds = new Set(slot.children.slice(currentSlot.children.length));
|
|
9738
|
+
const children = node.children.filter(child => (!appendedChildIds.has(child.id)));
|
|
9739
|
+
if (children.length !== current.children.length
|
|
9740
|
+
|| node.children.length - children.length !== appendedChildIds.size) {
|
|
9741
|
+
return null;
|
|
9742
|
+
}
|
|
9743
|
+
return {
|
|
9744
|
+
...node,
|
|
9745
|
+
props: {
|
|
9746
|
+
...node.props,
|
|
9747
|
+
slots: {
|
|
9748
|
+
...slots,
|
|
9749
|
+
[owner.slot]: {
|
|
9750
|
+
...slot,
|
|
9751
|
+
children: slot.children.slice(0, currentSlot.children.length),
|
|
9752
|
+
},
|
|
9753
|
+
},
|
|
9754
|
+
},
|
|
9755
|
+
children,
|
|
9756
|
+
};
|
|
9757
|
+
}
|
|
9758
|
+
function collectRetainedRepeatOwnerKeys(materialized, outerOwner) {
|
|
9759
|
+
const retained = new Set([outerOwner.key]);
|
|
9760
|
+
for (const candidate of materialized.repeatOwners.values()) {
|
|
9761
|
+
let parentKey = candidate.parentKey;
|
|
9762
|
+
while (parentKey) {
|
|
9763
|
+
if (parentKey === outerOwner.key) {
|
|
9764
|
+
retained.add(candidate.key);
|
|
9765
|
+
break;
|
|
9766
|
+
}
|
|
9767
|
+
parentKey = materialized.repeatOwners.get(parentKey)?.parentKey;
|
|
9768
|
+
}
|
|
9769
|
+
}
|
|
9770
|
+
return retained;
|
|
9771
|
+
}
|
|
9772
|
+
function retainedOwnersConsumeChangedPointer(materialized, retainedOwnerKeys, pointers) {
|
|
9773
|
+
for (const [key, dependencyOwners] of materialized.valueDependencies) {
|
|
9774
|
+
if (!key.startsWith('data:')
|
|
9775
|
+
|| ![...dependencyOwners].some(ownerKey => (retainedOwnerKeys.has(ownerKey)))) {
|
|
9776
|
+
continue;
|
|
9777
|
+
}
|
|
9778
|
+
const dependency = key.slice('data:'.length);
|
|
9779
|
+
if (pointers.some(pointer => pointerOverlaps(pointer, dependency))) {
|
|
9780
|
+
return true;
|
|
9781
|
+
}
|
|
9782
|
+
}
|
|
9783
|
+
return false;
|
|
9784
|
+
}
|
|
9785
|
+
function createRepeatAppendPlan(currentOwner, nextMaterialized, before, draft) {
|
|
9786
|
+
if (!currentMountedTree || !mountedTreeOrderMatchesDom(currentMountedTree)) {
|
|
9787
|
+
return null;
|
|
9788
|
+
}
|
|
9789
|
+
const nextOwner = nextMaterialized.repeatOwners.get(currentOwner.key);
|
|
9790
|
+
if (!nextOwner || !repeatOwnerIdentityEqual(currentOwner, nextOwner)) {
|
|
9791
|
+
return null;
|
|
9792
|
+
}
|
|
9793
|
+
const currentOwnerCount = [...currentMaterialized.repeatOwners.values()]
|
|
9794
|
+
.filter(owner => owner.runtimeOwnerId === currentOwner.runtimeOwnerId)
|
|
9795
|
+
.length;
|
|
9796
|
+
const nextOwnerCount = [...nextMaterialized.repeatOwners.values()]
|
|
9797
|
+
.filter(owner => owner.runtimeOwnerId === nextOwner.runtimeOwnerId)
|
|
9798
|
+
.length;
|
|
9799
|
+
if (currentOwnerCount !== 1 || nextOwnerCount !== 1)
|
|
9800
|
+
return null;
|
|
9801
|
+
const mountedMatches = mountedNodesById(currentMountedTree, currentOwner.runtimeOwnerId);
|
|
9802
|
+
if (mountedMatches.length !== 1)
|
|
9803
|
+
return null;
|
|
9804
|
+
const current = mountedMatches[0];
|
|
9805
|
+
const nextNode = nextMaterialized.instances
|
|
9806
|
+
.get(nextOwner.runtimeOwnerId)?.node;
|
|
9807
|
+
if (!nextNode
|
|
9808
|
+
|| current.nodeType !== 'Container'
|
|
9809
|
+
|| nextNode.type !== 'Container'
|
|
9810
|
+
|| current.rendererToken !== componentRenderers._default
|
|
9811
|
+
|| !current.visible
|
|
9812
|
+
|| !current.resolvedProps
|
|
9813
|
+
|| !currentOwner.sourcePath
|
|
9814
|
+
|| !nextOwner.sourcePath) {
|
|
9815
|
+
return null;
|
|
9816
|
+
}
|
|
9817
|
+
const nextMetadata = resolveBoundMetadata(nextNode, current.occurrenceKey, draft);
|
|
9818
|
+
const currentLayout = getDirectChildRepeatAppendLayout(current.resolvedProps, currentOwner.slot);
|
|
9819
|
+
const nextLayout = nextMetadata.resolvedProps
|
|
9820
|
+
? getDirectChildRepeatAppendLayout(nextMetadata.resolvedProps, nextOwner.slot)
|
|
9821
|
+
: undefined;
|
|
9822
|
+
if (!currentLayout || currentLayout !== nextLayout)
|
|
9823
|
+
return null;
|
|
9824
|
+
let previousSource;
|
|
9825
|
+
let nextSource;
|
|
9826
|
+
try {
|
|
9827
|
+
previousSource = getByJsonPointer(lastPublishedVariables, currentOwner.sourcePath);
|
|
9828
|
+
nextSource = getByJsonPointer(draft, nextOwner.sourcePath);
|
|
9829
|
+
}
|
|
9830
|
+
catch {
|
|
9831
|
+
return null;
|
|
9832
|
+
}
|
|
9833
|
+
if (!Array.isArray(previousSource)
|
|
9834
|
+
|| !Array.isArray(nextSource)
|
|
9835
|
+
|| !hasStrictJsonPrefix(previousSource, nextSource)) {
|
|
9836
|
+
return null;
|
|
9837
|
+
}
|
|
9838
|
+
const nextOccurrenceKeys = occurrenceKeysForChildren(current.occurrenceKey, nextNode.children);
|
|
9839
|
+
if (current.children.length >= nextNode.children.length
|
|
9840
|
+
|| current.children.some((child, index) => (child.occurrenceKey !== nextOccurrenceKeys[index]))
|
|
9841
|
+
|| !childNodeSequenceEqual(current.element, current.children.map(child => child.element))) {
|
|
9842
|
+
return null;
|
|
9469
9843
|
}
|
|
9470
|
-
const
|
|
9844
|
+
const projectedOwner = projectRepeatOwnerPrefix(nextNode, nextOwner, current);
|
|
9845
|
+
if (!projectedOwner)
|
|
9846
|
+
return null;
|
|
9847
|
+
const comparableOwner = prepareComparableRetainedNode(projectedOwner, current.occurrenceKey, draft, current);
|
|
9848
|
+
if (!comparableOwner || !retainedSubtreeEquivalent(current, comparableOwner)) {
|
|
9849
|
+
return null;
|
|
9850
|
+
}
|
|
9851
|
+
const retainedOwnerKeys = collectRetainedRepeatOwnerKeys(currentMaterialized, currentOwner);
|
|
9852
|
+
if (retainedOwnersConsumeChangedPointer(currentMaterialized, retainedOwnerKeys, changedPointersOutsideSuffix(before, draft, currentOwner.sourcePath))) {
|
|
9853
|
+
return null;
|
|
9854
|
+
}
|
|
9855
|
+
return { currentOwner, nextOwner, current, nextNode };
|
|
9856
|
+
}
|
|
9857
|
+
function classifyRepeatOwners(before, draft, nextMaterialized) {
|
|
9858
|
+
let isolatedUnresolvedAppendKey;
|
|
9859
|
+
if (currentMaterialized.repeatOwners.size === 1
|
|
9860
|
+
&& nextMaterialized.repeatOwners.size === 1
|
|
9861
|
+
&& currentMaterialized.unresolvedRepeatOwners.size === 1
|
|
9862
|
+
&& nextMaterialized.unresolvedRepeatOwners.size === 1) {
|
|
9863
|
+
const [currentKey] = currentMaterialized.unresolvedRepeatOwners;
|
|
9864
|
+
const [nextKey] = nextMaterialized.unresolvedRepeatOwners;
|
|
9865
|
+
const currentOwner = currentMaterialized.repeatOwners.get(currentKey);
|
|
9866
|
+
const nextOwner = nextMaterialized.repeatOwners.get(nextKey);
|
|
9867
|
+
const changedPointers = collectChangedPointers(before, draft);
|
|
9868
|
+
if (currentKey === nextKey
|
|
9869
|
+
&& currentOwner?.sourcePath
|
|
9870
|
+
&& currentOwner.sourcePath === nextOwner?.sourcePath
|
|
9871
|
+
&& changedPointers.length === 1
|
|
9872
|
+
&& changedPointers[0] === currentOwner.sourcePath) {
|
|
9873
|
+
// Complex expressions inside one Repeat are conservatively unresolved.
|
|
9874
|
+
// A source-only update may still enter the existing append proof: the
|
|
9875
|
+
// strict JSON prefix and retained-subtree comparison below must both
|
|
9876
|
+
// succeed before any live DOM is adopted.
|
|
9877
|
+
isolatedUnresolvedAppendKey = currentKey;
|
|
9878
|
+
}
|
|
9879
|
+
}
|
|
9880
|
+
if ((currentMaterialized.unresolvedRepeatOwners.size > 0
|
|
9881
|
+
|| nextMaterialized.unresolvedRepeatOwners.size > 0)
|
|
9882
|
+
&& isolatedUnresolvedAppendKey === undefined) {
|
|
9883
|
+
return {
|
|
9884
|
+
forcedOwnerIds: new Set([currentMaterialized.root.id]),
|
|
9885
|
+
appendPlans: new Map(),
|
|
9886
|
+
};
|
|
9887
|
+
}
|
|
9888
|
+
const selectedKeys = new Set(isolatedUnresolvedAppendKey ? [isolatedUnresolvedAppendKey] : []);
|
|
9471
9889
|
for (const pointer of collectChangedPointers(before, draft)) {
|
|
9472
9890
|
for (const owner of findAffectedRepeatOwners(currentMaterialized, pointer)) {
|
|
9473
9891
|
selectedKeys.add(owner.key);
|
|
@@ -9483,10 +9901,19 @@ function renderBoundCard(container, schema, options) {
|
|
|
9483
9901
|
parentKey = currentMaterialized.repeatOwners.get(parentKey)?.parentKey;
|
|
9484
9902
|
}
|
|
9485
9903
|
}
|
|
9486
|
-
|
|
9487
|
-
|
|
9488
|
-
|
|
9489
|
-
|
|
9904
|
+
const forcedOwnerIds = new Set();
|
|
9905
|
+
const appendPlans = new Map();
|
|
9906
|
+
for (const key of selectedKeys) {
|
|
9907
|
+
const owner = currentMaterialized.repeatOwners.get(key);
|
|
9908
|
+
if (!owner)
|
|
9909
|
+
continue;
|
|
9910
|
+
const plan = createRepeatAppendPlan(owner, nextMaterialized, before, draft);
|
|
9911
|
+
if (plan)
|
|
9912
|
+
appendPlans.set(plan.current.occurrenceKey, plan);
|
|
9913
|
+
else
|
|
9914
|
+
forcedOwnerIds.add(owner.runtimeOwnerId);
|
|
9915
|
+
}
|
|
9916
|
+
return { forcedOwnerIds, appendPlans };
|
|
9490
9917
|
}
|
|
9491
9918
|
function collectMountedLifecycleIds(root) {
|
|
9492
9919
|
const ids = new Set();
|
|
@@ -9518,15 +9945,82 @@ function renderBoundCard(container, schema, options) {
|
|
|
9518
9945
|
prepareReplacementRoots(current.children[index], next.children[index], draft, replacements);
|
|
9519
9946
|
}
|
|
9520
9947
|
}
|
|
9948
|
+
function findPreparedByOccurrenceKey(root, occurrenceKey) {
|
|
9949
|
+
if (root.occurrenceKey === occurrenceKey)
|
|
9950
|
+
return root;
|
|
9951
|
+
for (const child of root.children) {
|
|
9952
|
+
const match = findPreparedByOccurrenceKey(child, occurrenceKey);
|
|
9953
|
+
if (match)
|
|
9954
|
+
return match;
|
|
9955
|
+
}
|
|
9956
|
+
return null;
|
|
9957
|
+
}
|
|
9958
|
+
function disposePreparedRepeatAppend(candidate) {
|
|
9959
|
+
if (candidate.state === 'disposed' || candidate.state === 'adopted')
|
|
9960
|
+
return;
|
|
9961
|
+
for (const suffix of candidate.suffix) {
|
|
9962
|
+
disposeBoundSubtreeWithoutThrow(suffix);
|
|
9963
|
+
}
|
|
9964
|
+
candidate.fragment.replaceChildren();
|
|
9965
|
+
candidate.state = 'disposed';
|
|
9966
|
+
}
|
|
9967
|
+
function prepareRepeatAppendCandidates(preparedRoot, appendPlans, draft) {
|
|
9968
|
+
const candidates = new Map();
|
|
9969
|
+
try {
|
|
9970
|
+
for (const [occurrenceKey, plan] of appendPlans) {
|
|
9971
|
+
const prepared = findPreparedByOccurrenceKey(preparedRoot, occurrenceKey);
|
|
9972
|
+
// Hidden or force-replaced ancestors prune their descendants from the
|
|
9973
|
+
// prepared tree. Their normal replacement commits the new variables;
|
|
9974
|
+
// there is no live descendant append to prepare in this transaction.
|
|
9975
|
+
if (!prepared)
|
|
9976
|
+
continue;
|
|
9977
|
+
if (!prepared[REPEAT_APPEND]) {
|
|
9978
|
+
throw new Error(`[renderCard] Missing prepared repeat append owner "${occurrenceKey}"`);
|
|
9979
|
+
}
|
|
9980
|
+
const nextOccurrenceKeys = occurrenceKeysForChildren(plan.current.occurrenceKey, plan.nextNode.children);
|
|
9981
|
+
const suffix = [];
|
|
9982
|
+
const fragment = document.createDocumentFragment();
|
|
9983
|
+
const candidate = {
|
|
9984
|
+
occurrenceKey,
|
|
9985
|
+
current: plan.current,
|
|
9986
|
+
next: prepared,
|
|
9987
|
+
suffix,
|
|
9988
|
+
fragment,
|
|
9989
|
+
previousChildNodes: Array.from(plan.current.element.childNodes),
|
|
9990
|
+
expectedChildNodes: [],
|
|
9991
|
+
state: 'prepared',
|
|
9992
|
+
};
|
|
9993
|
+
candidates.set(occurrenceKey, candidate);
|
|
9994
|
+
for (let index = plan.current.children.length; index < plan.nextNode.children.length; index += 1) {
|
|
9995
|
+
const mounted = mountBoundSubtree(plan.nextNode.children[index], nextOccurrenceKeys[index], draft);
|
|
9996
|
+
suffix.push(mounted);
|
|
9997
|
+
fragment.appendChild(mounted.element);
|
|
9998
|
+
}
|
|
9999
|
+
candidate.expectedChildNodes = [
|
|
10000
|
+
...candidate.previousChildNodes,
|
|
10001
|
+
...suffix.map(node => node.element),
|
|
10002
|
+
];
|
|
10003
|
+
}
|
|
10004
|
+
return candidates;
|
|
10005
|
+
}
|
|
10006
|
+
catch (error) {
|
|
10007
|
+
for (const candidate of candidates.values()) {
|
|
10008
|
+
disposePreparedRepeatAppend(candidate);
|
|
10009
|
+
}
|
|
10010
|
+
throw error;
|
|
10011
|
+
}
|
|
10012
|
+
}
|
|
9521
10013
|
function prepareIncrementalCandidate(before, draft) {
|
|
9522
10014
|
const materialized = materializeCard(schema, draft);
|
|
9523
|
-
const
|
|
9524
|
-
?
|
|
9525
|
-
|
|
9526
|
-
:
|
|
9527
|
-
|
|
9528
|
-
|
|
10015
|
+
const classification = currentMountedTree
|
|
10016
|
+
? classifyRepeatOwners(before, draft, materialized)
|
|
10017
|
+
: {
|
|
10018
|
+
forcedOwnerIds: new Set(),
|
|
10019
|
+
appendPlans: new Map(),
|
|
10020
|
+
};
|
|
10021
|
+
const preparedRoot = prepareBoundNode(materialized.root, `${materialized.root.id}#0`, draft, classification.forcedOwnerIds, classification.appendPlans, currentMountedTree);
|
|
9529
10022
|
const replacementRoots = new Map();
|
|
10023
|
+
const repeatAppends = prepareRepeatAppendCandidates(preparedRoot, classification.appendPlans, draft);
|
|
9530
10024
|
try {
|
|
9531
10025
|
if (currentMountedTree) {
|
|
9532
10026
|
prepareReplacementRoots(currentMountedTree, preparedRoot, draft, replacementRoots);
|
|
@@ -9538,6 +10032,7 @@ function renderBoundCard(container, schema, options) {
|
|
|
9538
10032
|
materialized,
|
|
9539
10033
|
preparedRoot,
|
|
9540
10034
|
replacementRoots,
|
|
10035
|
+
repeatAppends,
|
|
9541
10036
|
autoFocusIds: currentMountedTree
|
|
9542
10037
|
? collectAutoFocusRevealIds(currentMaterialized, materialized, draft)
|
|
9543
10038
|
: new Set(),
|
|
@@ -9547,6 +10042,9 @@ function renderBoundCard(container, schema, options) {
|
|
|
9547
10042
|
for (const replacement of replacementRoots.values()) {
|
|
9548
10043
|
disposeBoundSubtreeWithoutThrow(replacement);
|
|
9549
10044
|
}
|
|
10045
|
+
for (const append of repeatAppends.values()) {
|
|
10046
|
+
disposePreparedRepeatAppend(append);
|
|
10047
|
+
}
|
|
9550
10048
|
throw error;
|
|
9551
10049
|
}
|
|
9552
10050
|
}
|
|
@@ -9800,6 +10298,10 @@ function renderBoundCard(container, schema, options) {
|
|
|
9800
10298
|
disposeBoundSubtreeWithoutThrow(replacement);
|
|
9801
10299
|
}
|
|
9802
10300
|
candidate.replacementRoots.clear();
|
|
10301
|
+
for (const append of candidate.repeatAppends.values()) {
|
|
10302
|
+
disposePreparedRepeatAppend(append);
|
|
10303
|
+
}
|
|
10304
|
+
candidate.repeatAppends.clear();
|
|
9803
10305
|
}
|
|
9804
10306
|
function restoreChangedSubtreeState(previous, next, scrollPositions, mediaStates) {
|
|
9805
10307
|
if (previous.element !== next.element) {
|
|
@@ -9848,6 +10350,111 @@ function renderBoundCard(container, schema, options) {
|
|
|
9848
10350
|
throw adoptionError;
|
|
9849
10351
|
throw new Error(failureMessage);
|
|
9850
10352
|
}
|
|
10353
|
+
function rollbackRepeatAppend(candidate) {
|
|
10354
|
+
for (let index = candidate.suffix.length - 1; index >= 0; index -= 1) {
|
|
10355
|
+
const element = candidate.suffix[index].element;
|
|
10356
|
+
if (element.parentNode !== candidate.current.element)
|
|
10357
|
+
continue;
|
|
10358
|
+
try {
|
|
10359
|
+
candidate.current.element.removeChild(element);
|
|
10360
|
+
}
|
|
10361
|
+
catch {
|
|
10362
|
+
// The exact previous-sequence postcondition below decides success.
|
|
10363
|
+
}
|
|
10364
|
+
}
|
|
10365
|
+
const restored = childNodeSequenceEqual(candidate.current.element, candidate.previousChildNodes);
|
|
10366
|
+
candidate.state = restored ? 'rolled-back' : 'rollback-failed';
|
|
10367
|
+
return restored;
|
|
10368
|
+
}
|
|
10369
|
+
function tryAdoptRepeatAppend(candidate) {
|
|
10370
|
+
let adoptionError;
|
|
10371
|
+
try {
|
|
10372
|
+
candidate.current.element.appendChild(candidate.fragment);
|
|
10373
|
+
}
|
|
10374
|
+
catch (error) {
|
|
10375
|
+
adoptionError = error;
|
|
10376
|
+
}
|
|
10377
|
+
if (childNodeSequenceEqual(candidate.current.element, candidate.expectedChildNodes)) {
|
|
10378
|
+
candidate.state = 'adopted';
|
|
10379
|
+
return { status: 'adopted' };
|
|
10380
|
+
}
|
|
10381
|
+
const error = adoptionError ?? new Error('[renderCard] Bound repeat append postcondition failed');
|
|
10382
|
+
if (rollbackRepeatAppend(candidate)) {
|
|
10383
|
+
return { status: 'rolled-back', error };
|
|
10384
|
+
}
|
|
10385
|
+
return { status: 'rollback-failed', error };
|
|
10386
|
+
}
|
|
10387
|
+
function mountedSnapshotStillMatches(previous, working) {
|
|
10388
|
+
const appendOwner = Boolean(working[REPEAT_APPEND]);
|
|
10389
|
+
if (previous.element !== working.element
|
|
10390
|
+
|| previous.occurrenceKey !== working.occurrenceKey
|
|
10391
|
+
|| previous.nodeId !== working.nodeId
|
|
10392
|
+
|| previous.nodeType !== working.nodeType
|
|
10393
|
+
|| previous.rendererToken !== working.rendererToken
|
|
10394
|
+
|| previous.visible !== working.visible
|
|
10395
|
+
|| previous.disabled !== working.disabled
|
|
10396
|
+
|| previous.bindingFingerprint !== working.bindingFingerprint
|
|
10397
|
+
|| previous.children.length !== working.children.length
|
|
10398
|
+
|| (!appendOwner && (previous.propsFingerprint !== working.propsFingerprint
|
|
10399
|
+
|| previous.layoutFingerprint !== working.layoutFingerprint))) {
|
|
10400
|
+
return false;
|
|
10401
|
+
}
|
|
10402
|
+
if (appendOwner
|
|
10403
|
+
&& !childNodeSequenceEqual(previous.element, previous.children.map(child => child.element))) {
|
|
10404
|
+
return false;
|
|
10405
|
+
}
|
|
10406
|
+
return previous.children.every((child, index) => (mountedSnapshotStillMatches(child, working.children[index])));
|
|
10407
|
+
}
|
|
10408
|
+
function adoptCompleteNextEmergencyRoot(candidate, renderVariables, previous, working, scrollPositions, mediaStates) {
|
|
10409
|
+
const emergency = mountBoundSubtree(candidate.materialized.root, candidate.preparedRoot.occurrenceKey, renderVariables);
|
|
10410
|
+
let adopted = false;
|
|
10411
|
+
try {
|
|
10412
|
+
syncMountedBindings(emergency);
|
|
10413
|
+
replaceContainerRoot(emergency.element, '[renderCard] Bound emergency root was not adopted');
|
|
10414
|
+
adopted = true;
|
|
10415
|
+
}
|
|
10416
|
+
finally {
|
|
10417
|
+
if (!adopted)
|
|
10418
|
+
disposeBoundSubtreeWithoutThrow(emergency);
|
|
10419
|
+
}
|
|
10420
|
+
disposeBoundSubtreeWithoutThrow(working);
|
|
10421
|
+
try {
|
|
10422
|
+
restoreChangedSubtreeState(previous, emergency, scrollPositions, mediaStates);
|
|
10423
|
+
}
|
|
10424
|
+
catch {
|
|
10425
|
+
// Presentation restoration cannot undo an adopted complete next root.
|
|
10426
|
+
}
|
|
10427
|
+
restoreDisabledDescendantPresentation(emergency);
|
|
10428
|
+
return emergency;
|
|
10429
|
+
}
|
|
10430
|
+
function recoverPreviousCommittedRoot(previous, working, scrollPositions, mediaStates) {
|
|
10431
|
+
const recovery = mountBoundSubtree(currentMaterialized.root, previous.occurrenceKey, lastPublishedVariables);
|
|
10432
|
+
let adopted = false;
|
|
10433
|
+
try {
|
|
10434
|
+
syncMountedBindings(recovery);
|
|
10435
|
+
replaceContainerRoot(recovery.element, '[renderCard] Previous bound root recovery was not adopted');
|
|
10436
|
+
adopted = true;
|
|
10437
|
+
}
|
|
10438
|
+
finally {
|
|
10439
|
+
if (!adopted)
|
|
10440
|
+
disposeBoundSubtreeWithoutThrow(recovery);
|
|
10441
|
+
}
|
|
10442
|
+
disposeBoundSubtreeWithoutThrow(working);
|
|
10443
|
+
try {
|
|
10444
|
+
restoreChangedSubtreeState(previous, recovery, scrollPositions, mediaStates);
|
|
10445
|
+
}
|
|
10446
|
+
catch {
|
|
10447
|
+
// Recovery validity is the adopted previous tree, not presentation state.
|
|
10448
|
+
}
|
|
10449
|
+
restoreDisabledDescendantPresentation(recovery);
|
|
10450
|
+
currentMountedTree = recovery;
|
|
10451
|
+
return recovery;
|
|
10452
|
+
}
|
|
10453
|
+
function repeatAppendUnreconciledError(failures) {
|
|
10454
|
+
const error = new Error('[renderCard] Bound repeat append unreconciled');
|
|
10455
|
+
error.failures = failures;
|
|
10456
|
+
return error;
|
|
10457
|
+
}
|
|
9851
10458
|
function commitIncrementalCandidate(candidate, renderVariables) {
|
|
9852
10459
|
const replacements = candidate.replacementRoots;
|
|
9853
10460
|
try {
|
|
@@ -9869,7 +10476,10 @@ function renderBoundCard(container, schema, options) {
|
|
|
9869
10476
|
const scrollPositions = captureScrollPositions$1(container);
|
|
9870
10477
|
const mediaStates = captureMediaStates$1(container);
|
|
9871
10478
|
let unreconciled = false;
|
|
9872
|
-
|
|
10479
|
+
let previousRecoveryRequired = false;
|
|
10480
|
+
let appendFailure;
|
|
10481
|
+
let repeatAppendTransaction = false;
|
|
10482
|
+
let next = reconcileIncrementalNode(previous, candidate.preparedRoot, {
|
|
9873
10483
|
decide: (current, prepared) => decideBoundUpdate(current, prepared),
|
|
9874
10484
|
update: (current, prepared) => updateBoundNode(current, prepared),
|
|
9875
10485
|
mountReplacement: (prepared) => {
|
|
@@ -9903,6 +10513,60 @@ function renderBoundCard(container, schema, options) {
|
|
|
9903
10513
|
unreconciled = true;
|
|
9904
10514
|
},
|
|
9905
10515
|
});
|
|
10516
|
+
if (!unreconciled) {
|
|
10517
|
+
for (const appendCandidate of candidate.repeatAppends.values()) {
|
|
10518
|
+
const reconciledOwner = findMountedByOccurrenceKey(next, appendCandidate.occurrenceKey);
|
|
10519
|
+
if (!reconciledOwner
|
|
10520
|
+
|| reconciledOwner.element !== appendCandidate.current.element) {
|
|
10521
|
+
disposePreparedRepeatAppend(appendCandidate);
|
|
10522
|
+
candidate.repeatAppends.delete(appendCandidate.occurrenceKey);
|
|
10523
|
+
continue;
|
|
10524
|
+
}
|
|
10525
|
+
repeatAppendTransaction = true;
|
|
10526
|
+
const grafted = {
|
|
10527
|
+
...appendCandidate.next,
|
|
10528
|
+
element: reconciledOwner.element,
|
|
10529
|
+
children: [
|
|
10530
|
+
...reconciledOwner.children,
|
|
10531
|
+
...appendCandidate.suffix,
|
|
10532
|
+
],
|
|
10533
|
+
};
|
|
10534
|
+
const graftedRoot = replaceMountedByOccurrenceKey(next, appendCandidate.occurrenceKey, grafted);
|
|
10535
|
+
if (!graftedRoot) {
|
|
10536
|
+
disposePreparedRepeatAppend(appendCandidate);
|
|
10537
|
+
candidate.repeatAppends.delete(appendCandidate.occurrenceKey);
|
|
10538
|
+
unreconciled = true;
|
|
10539
|
+
appendFailure = new Error('[renderCard] Bound repeat append owner disappeared before adoption');
|
|
10540
|
+
break;
|
|
10541
|
+
}
|
|
10542
|
+
const result = tryAdoptRepeatAppend(appendCandidate);
|
|
10543
|
+
if (result.status === 'adopted') {
|
|
10544
|
+
next = graftedRoot;
|
|
10545
|
+
candidate.repeatAppends.delete(appendCandidate.occurrenceKey);
|
|
10546
|
+
continue;
|
|
10547
|
+
}
|
|
10548
|
+
appendFailure = result.error;
|
|
10549
|
+
if (result.status === 'rolled-back') {
|
|
10550
|
+
unreconciled = true;
|
|
10551
|
+
}
|
|
10552
|
+
else {
|
|
10553
|
+
previousRecoveryRequired = true;
|
|
10554
|
+
}
|
|
10555
|
+
break;
|
|
10556
|
+
}
|
|
10557
|
+
}
|
|
10558
|
+
if (previousRecoveryRequired) {
|
|
10559
|
+
try {
|
|
10560
|
+
recoverPreviousCommittedRoot(previous, next, scrollPositions, mediaStates);
|
|
10561
|
+
}
|
|
10562
|
+
catch (recoveryError) {
|
|
10563
|
+
throw repeatAppendUnreconciledError([
|
|
10564
|
+
appendFailure,
|
|
10565
|
+
recoveryError,
|
|
10566
|
+
]);
|
|
10567
|
+
}
|
|
10568
|
+
throw appendFailure;
|
|
10569
|
+
}
|
|
9906
10570
|
if (!unreconciled
|
|
9907
10571
|
&& (next.element.parentNode !== container
|
|
9908
10572
|
|| container.firstElementChild !== next.element)) {
|
|
@@ -9916,7 +10580,7 @@ function renderBoundCard(container, schema, options) {
|
|
|
9916
10580
|
unreconciled = true;
|
|
9917
10581
|
}
|
|
9918
10582
|
}
|
|
9919
|
-
if (unreconciled) {
|
|
10583
|
+
if (unreconciled && !repeatAppendTransaction) {
|
|
9920
10584
|
let emergency;
|
|
9921
10585
|
try {
|
|
9922
10586
|
emergency = mountBoundSubtree(candidate.materialized.root, candidate.preparedRoot.occurrenceKey, renderVariables);
|
|
@@ -9947,6 +10611,29 @@ function renderBoundCard(container, schema, options) {
|
|
|
9947
10611
|
restoreDisabledDescendantPresentation(emergency);
|
|
9948
10612
|
return emergency;
|
|
9949
10613
|
}
|
|
10614
|
+
if (unreconciled) {
|
|
10615
|
+
try {
|
|
10616
|
+
return adoptCompleteNextEmergencyRoot(candidate, renderVariables, previous, next, scrollPositions, mediaStates);
|
|
10617
|
+
}
|
|
10618
|
+
catch (emergencyError) {
|
|
10619
|
+
if (mountedTreeOrderMatchesDom(previous)
|
|
10620
|
+
&& mountedSnapshotStillMatches(previous, next)) {
|
|
10621
|
+
syncMountedBindings(previous);
|
|
10622
|
+
throw appendFailure ?? emergencyError;
|
|
10623
|
+
}
|
|
10624
|
+
try {
|
|
10625
|
+
recoverPreviousCommittedRoot(previous, next, scrollPositions, mediaStates);
|
|
10626
|
+
}
|
|
10627
|
+
catch (recoveryError) {
|
|
10628
|
+
throw repeatAppendUnreconciledError([
|
|
10629
|
+
appendFailure,
|
|
10630
|
+
emergencyError,
|
|
10631
|
+
recoveryError,
|
|
10632
|
+
]);
|
|
10633
|
+
}
|
|
10634
|
+
throw appendFailure ?? emergencyError;
|
|
10635
|
+
}
|
|
10636
|
+
}
|
|
9950
10637
|
try {
|
|
9951
10638
|
restoreChangedSubtreeState(previous, next, scrollPositions, mediaStates);
|
|
9952
10639
|
}
|
|
@@ -10201,6 +10888,7 @@ function renderBoundCard(container, schema, options) {
|
|
|
10201
10888
|
return {
|
|
10202
10889
|
getNode: nodeAccess.getNode,
|
|
10203
10890
|
onFocusChange: nodeAccess.onFocusChange,
|
|
10891
|
+
onScroll: nodeAccess.onScroll,
|
|
10204
10892
|
dispose() {
|
|
10205
10893
|
if (disposed || disposeRequested)
|
|
10206
10894
|
return;
|
|
@@ -10564,25 +11252,6 @@ function renderStaticCard(container, schema, options) {
|
|
|
10564
11252
|
bindingFingerprint: nodeBindingFingerprint(node, resolvedProps, disabled),
|
|
10565
11253
|
};
|
|
10566
11254
|
}
|
|
10567
|
-
function applyDisabledState(element, disabled) {
|
|
10568
|
-
if (!disabled)
|
|
10569
|
-
return;
|
|
10570
|
-
element.setAttribute('data-disabled', 'true');
|
|
10571
|
-
element.style.background = '#F5F5F5';
|
|
10572
|
-
element.style.color = '#C0C0C0';
|
|
10573
|
-
element.style.setProperty('--card-disabled-color', '#C0C0C0');
|
|
10574
|
-
element.style.pointerEvents = 'none';
|
|
10575
|
-
element.style.cursor = 'default';
|
|
10576
|
-
}
|
|
10577
|
-
function applyDisabledDescendants(element, disabled) {
|
|
10578
|
-
if (!disabled)
|
|
10579
|
-
return;
|
|
10580
|
-
element.querySelectorAll('*').forEach((child) => {
|
|
10581
|
-
const htmlChild = child;
|
|
10582
|
-
htmlChild.setAttribute('data-disabled', 'true');
|
|
10583
|
-
htmlChild.style.setProperty('--card-disabled-color', '#C0C0C0');
|
|
10584
|
-
});
|
|
10585
|
-
}
|
|
10586
11255
|
function runStaticEventActions(steps, detail) {
|
|
10587
11256
|
if (disposed)
|
|
10588
11257
|
return;
|
|
@@ -11046,6 +11715,7 @@ function renderStaticCard(container, schema, options) {
|
|
|
11046
11715
|
return {
|
|
11047
11716
|
getNode: nodeAccess.getNode,
|
|
11048
11717
|
onFocusChange: nodeAccess.onFocusChange,
|
|
11718
|
+
onScroll: nodeAccess.onScroll,
|
|
11049
11719
|
dispose() {
|
|
11050
11720
|
if (disposed || disposeRequested)
|
|
11051
11721
|
return;
|
|
@@ -11419,13 +12089,7 @@ function renderStreamingCard(container, options = {}) {
|
|
|
11419
12089
|
const isDisabled = computeBoundDisabled(node, renderVariables);
|
|
11420
12090
|
const renderer = (componentRenderers[node.type] ?? componentRenderers._default);
|
|
11421
12091
|
const element = renderer(node, resolvedProps, isMobile, options.responsive);
|
|
11422
|
-
|
|
11423
|
-
element.setAttribute('data-disabled', 'true');
|
|
11424
|
-
element.style.background = '#F5F5F5';
|
|
11425
|
-
element.style.color = '#C0C0C0';
|
|
11426
|
-
element.style.setProperty('--card-disabled-color', '#C0C0C0');
|
|
11427
|
-
element.style.pointerEvents = 'none';
|
|
11428
|
-
}
|
|
12092
|
+
applyDisabledState(element, isDisabled);
|
|
11429
12093
|
const variableKey = resolvedProps.variableKey;
|
|
11430
12094
|
if (variableKey) {
|
|
11431
12095
|
element.addEventListener('input', ((event) => {
|
|
@@ -11469,6 +12133,7 @@ function renderStreamingCard(container, options = {}) {
|
|
|
11469
12133
|
element.appendChild(renderChild(child));
|
|
11470
12134
|
}
|
|
11471
12135
|
}
|
|
12136
|
+
applyDisabledDescendants(element, isDisabled);
|
|
11472
12137
|
applyResponsiveStyles(element, createResponsiveContext(isMobile, options.responsive));
|
|
11473
12138
|
return element;
|
|
11474
12139
|
}
|
|
@@ -11501,25 +12166,12 @@ function renderStreamingCard(container, options = {}) {
|
|
|
11501
12166
|
hiddenSet.delete(node.id);
|
|
11502
12167
|
propsCache.set(node.id, fingerprint(resolvedProps, node.directives));
|
|
11503
12168
|
// Check disabled
|
|
11504
|
-
|
|
11505
|
-
if (node.directives?.disabled) {
|
|
11506
|
-
const disabledExpr = node.directives.disabled;
|
|
11507
|
-
const resolved = hasExpression(disabledExpr)
|
|
11508
|
-
? resolveExpression(disabledExpr, variables)
|
|
11509
|
-
: disabledExpr;
|
|
11510
|
-
isDisabled = resolved === true || resolved === 'true' || resolved === 1;
|
|
11511
|
-
}
|
|
12169
|
+
const isDisabled = computeDisabled(node);
|
|
11512
12170
|
// Create element
|
|
11513
12171
|
const renderer = componentRenderers[node.type] ?? componentRenderers['_default'];
|
|
11514
12172
|
const el = renderer(node, resolvedProps, isMobile, options.responsive);
|
|
11515
12173
|
// Apply disabled
|
|
11516
|
-
|
|
11517
|
-
el.setAttribute('data-disabled', 'true');
|
|
11518
|
-
el.style.background = '#F5F5F5';
|
|
11519
|
-
el.style.color = '#C0C0C0';
|
|
11520
|
-
el.style.setProperty('--card-disabled-color', '#C0C0C0');
|
|
11521
|
-
el.style.pointerEvents = 'none';
|
|
11522
|
-
}
|
|
12174
|
+
applyDisabledState(el, isDisabled);
|
|
11523
12175
|
// variableKey auto-sync
|
|
11524
12176
|
const variableKey = resolvedProps.variableKey;
|
|
11525
12177
|
if (variableKey) {
|
|
@@ -11571,6 +12223,7 @@ function renderStreamingCard(container, options = {}) {
|
|
|
11571
12223
|
el.appendChild(renderChild(child));
|
|
11572
12224
|
}
|
|
11573
12225
|
}
|
|
12226
|
+
applyDisabledDescendants(el, isDisabled);
|
|
11574
12227
|
applyResponsiveStyles(el, createResponsiveContext(isMobile, options.responsive));
|
|
11575
12228
|
return el;
|
|
11576
12229
|
}
|
|
@@ -11603,6 +12256,16 @@ function renderStreamingCard(container, options = {}) {
|
|
|
11603
12256
|
: visibleExpr;
|
|
11604
12257
|
return !(resolved === false || resolved === 'false' || resolved === '' || resolved === 0);
|
|
11605
12258
|
}
|
|
12259
|
+
/** Evaluate `directives.disabled` for an element against current variables. */
|
|
12260
|
+
function computeDisabled(element) {
|
|
12261
|
+
const disabledExpr = element.directives?.disabled;
|
|
12262
|
+
if (!disabledExpr)
|
|
12263
|
+
return false;
|
|
12264
|
+
const resolved = hasExpression(disabledExpr)
|
|
12265
|
+
? resolveExpression(disabledExpr, variables)
|
|
12266
|
+
: disabledExpr;
|
|
12267
|
+
return resolved === true || resolved === 'true' || resolved === 1;
|
|
12268
|
+
}
|
|
11606
12269
|
function collectLegacyAutoFocusRevealIds(schema, previousVariables) {
|
|
11607
12270
|
let tree;
|
|
11608
12271
|
try {
|
|
@@ -11680,6 +12343,7 @@ function renderStreamingCard(container, options = {}) {
|
|
|
11680
12343
|
if (!subtree)
|
|
11681
12344
|
return false;
|
|
11682
12345
|
const newEl = renderNode(subtree, schema.actions ?? {});
|
|
12346
|
+
disposeChartsIn(oldEl);
|
|
11683
12347
|
oldEl.replaceWith(newEl);
|
|
11684
12348
|
return true;
|
|
11685
12349
|
}
|
|
@@ -11738,12 +12402,23 @@ function renderStreamingCard(container, options = {}) {
|
|
|
11738
12402
|
}
|
|
11739
12403
|
if (!nowVisible)
|
|
11740
12404
|
continue; // still hidden — resolved props don't matter
|
|
12405
|
+
const wasDisabled = el.getAttribute('data-copilot-card-disabled') === 'true';
|
|
12406
|
+
if (computeDisabled(element) !== wasDisabled) {
|
|
12407
|
+
if (!replaceSubtree(schema, id, el)) {
|
|
12408
|
+
safeRenderFull();
|
|
12409
|
+
applyAutoFocusIds(autoFocusIds);
|
|
12410
|
+
return;
|
|
12411
|
+
}
|
|
12412
|
+
continue;
|
|
12413
|
+
}
|
|
11741
12414
|
const resolved = resolveNodeProps(element);
|
|
11742
12415
|
const key = fingerprint(resolved, element.directives);
|
|
11743
12416
|
if (propsCache.get(id) === key)
|
|
11744
12417
|
continue;
|
|
11745
12418
|
if ('updateProps' in el) {
|
|
11746
12419
|
el.updateProps(resolved, isMobile, options.responsive);
|
|
12420
|
+
// Some components replace host cssText while updating their props.
|
|
12421
|
+
applyDisabledState(el, wasDisabled);
|
|
11747
12422
|
propsCache.set(id, key);
|
|
11748
12423
|
}
|
|
11749
12424
|
else if (!replaceSubtree(schema, id, el)) {
|
|
@@ -12900,6 +13575,14 @@ function renderStreamingCard(container, options = {}) {
|
|
|
12900
13575
|
}
|
|
12901
13576
|
if (!nowVisible)
|
|
12902
13577
|
continue;
|
|
13578
|
+
const wasDisabled = el.getAttribute('data-copilot-card-disabled') === 'true';
|
|
13579
|
+
if (computeDisabled(element) !== wasDisabled) {
|
|
13580
|
+
if (!replaceSubtree(schema, id, el)) {
|
|
13581
|
+
needFull = true;
|
|
13582
|
+
break;
|
|
13583
|
+
}
|
|
13584
|
+
continue;
|
|
13585
|
+
}
|
|
12903
13586
|
const resolved = resolveNodeProps(element);
|
|
12904
13587
|
const key = fingerprint(resolved, element.directives);
|
|
12905
13588
|
if (propsCache.get(id) === key)
|
|
@@ -12907,6 +13590,7 @@ function renderStreamingCard(container, options = {}) {
|
|
|
12907
13590
|
const typeChanged = el.getAttribute('data-card-type') !== element.type;
|
|
12908
13591
|
if (!typeChanged && 'updateProps' in el) {
|
|
12909
13592
|
el.updateProps(resolved, isMobile, options.responsive);
|
|
13593
|
+
applyDisabledState(el, wasDisabled);
|
|
12910
13594
|
propsCache.set(id, key);
|
|
12911
13595
|
}
|
|
12912
13596
|
else if (!typeChanged && isChildrenOnlyChange(propsCache.get(id), key, element)) {
|
|
@@ -13062,6 +13746,7 @@ function renderStreamingCard(container, options = {}) {
|
|
|
13062
13746
|
return {
|
|
13063
13747
|
getNode: nodeAccess.getNode,
|
|
13064
13748
|
onFocusChange: nodeAccess.onFocusChange,
|
|
13749
|
+
onScroll: nodeAccess.onScroll,
|
|
13065
13750
|
applyCommand(command) {
|
|
13066
13751
|
if (!lockMode('commands'))
|
|
13067
13752
|
return;
|