@shijiu/jsview-vue 2.1.200 → 2.1.339-test.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/browser/BrowserApic.vue.mjs +124 -0
- package/bin/browser/BrowserApic2.vue.mjs +118 -0
- package/bin/browser/BrowserApicLib.mjs +424 -0
- package/bin/browser/BrowserAudio.vue.mjs +263 -0
- package/bin/browser/BrowserJsvLatex.vue.mjs +110 -0
- package/bin/browser/BrowserJsvPlayer.vue.mjs +573 -0
- package/bin/browser/BrowserPreload.vue.mjs +154 -0
- package/bin/browser/BrowserQrcode.vue.mjs +178 -0
- package/bin/browser/BrowserSpray.vue.mjs +66 -0
- package/bin/browser/BrowserTextureAnim.vue.mjs +324 -0
- package/bin/export-sfc.mjs +12 -0
- package/bin/jsview-common.mjs +39 -0
- package/bin/jsview-vue.mjs +21106 -0
- package/index.js +3 -4
- package/package.json +1 -2
- package/tools/config/rollup.config.mjs +52 -0
- package/tools/config/tsconfig.json +18 -0
- package/tools/config/vite.config.ts +60 -0
- package/tools/jsview-vue-build.mjs +125 -0
- package/utils/JsViewEngineWidget/{JsvFocusBlock.vue → JsvFocus/JsvFocusBlock.vue} +11 -11
- package/utils/JsViewEngineWidget/{JsvFocusHub.ts → JsvFocus/JsvFocusHub.ts} +9 -3
- package/utils/JsViewEngineWidget/{JsvFocusManager.js → JsvFocus/JsvFocusManager.js} +6 -5
- package/utils/JsViewEngineWidget/MetroWidget/AnimationManager.ts +33 -10
- package/utils/JsViewEngineWidget/MetroWidget/ListWidget.vue +89 -57
- package/utils/JsViewEngineWidget/MetroWidget/MetroWidget.vue +118 -62
- package/utils/JsViewEngineWidget/MetroWidget/MetroWidgetSetup.js +504 -60
- package/utils/JsViewEngineWidget/MetroWidget/RenderItem.ts +11 -1
- package/utils/JsViewEngineWidget/MetroWidget/SlotComponent.vue +13 -0
- package/utils/JsViewEngineWidget/TemplateParser/CommonMetroTemplate.ts +1 -1
- package/utils/JsViewEngineWidget/TemplateParser/ListMetroTemplate.ts +1 -1
- package/utils/JsViewEngineWidget/TemplateParser/MetroTemplate.ts +34 -1
- package/utils/JsViewEngineWidget/TemplateParser/TemplateItemAdder.ts +52 -11
- package/utils/JsViewEngineWidget/index.js +3 -3
- package/utils/JsViewPlugin/JsvAudio/AudioProxy.js +9 -0
- package/utils/JsViewPlugin/JsvAudio/BrowserAudio/BrowserAudio.vue +11 -3
- package/utils/JsViewPlugin/JsvAudio/JsvAudio.vue +1 -0
- package/utils/JsViewPlugin/JsvAudio/JsvAudioBridgeProxy.js +8 -0
- package/utils/JsViewPlugin/JsvAudio/ScreenLockManager.js +16 -0
- package/utils/JsViewPlugin/JsvAudio/version.js +3 -3
- package/utils/JsViewPlugin/JsvAudio/version.mjs +3 -3
- package/utils/JsViewPlugin/JsvLatex/index.js +1 -1
- package/utils/JsViewPlugin/JsvPlayer/JsvPlayer.vue +1 -1
- package/utils/JsViewPlugin/JsvPlayer/index-0.9.js +3 -3
- package/utils/JsViewPlugin/JsvPlayer/index.js +2 -2
- package/utils/JsViewVueTools/DebugTool.js +2 -2
- package/utils/JsViewVueTools/DefaultKeyMap.js +1 -1
- package/utils/JsViewVueTools/JsvDynamicCssStyle.js +1 -1
- package/utils/JsViewVueTools/JsvDynamicKeyFrames.js +2 -2
- package/utils/JsViewVueTools/JsvImpactTracer.js +7 -7
- package/utils/JsViewVueTools/JsvPreDownloader.ts +1 -1
- package/utils/JsViewVueTools/JsvRefTaker.js +2 -1
- package/utils/JsViewVueTools/JsvRuntimeBridge.js +29 -29
- package/utils/JsViewVueTools/JsvStyleClass.js +3 -3
- package/utils/JsViewVueTools/JsvStyleSheetsDeclarer.js +1 -1
- package/utils/JsViewVueTools/JsvTextTools.js +4 -4
- package/utils/JsViewVueTools/JsvTextureStore/CanvasTexture/CanvasTexture.ts +29 -1
- package/utils/JsViewVueTools/JsvTextureStore/CanvasTexture/CommandList.ts +6 -5
- package/utils/JsViewVueTools/JsvTextureStore/JsvTextureStore.ts +60 -2
- package/utils/JsViewVueTools/NinePatchHelper.js +1 -1
- package/utils/JsViewVueWidget/JsvActorMove/ActorControlBase.js +1 -1
- package/utils/JsViewVueWidget/JsvActorMove/JsvActorMoveControl.js +1 -1
- package/utils/JsViewVueWidget/JsvApic/{BrowserApic → JsvApic}/BrowserApic.vue +20 -23
- package/utils/JsViewVueWidget/JsvApic/{JsvApic.vue → JsvApic/JsvApic.vue} +3 -14
- package/utils/JsViewVueWidget/JsvApic/{index.js → JsvApic/index.js} +2 -4
- package/utils/JsViewVueWidget/JsvApic/JsvApic2/BrowserApic2.vue +116 -0
- package/utils/JsViewVueWidget/JsvApic/JsvApic2/JsvApic2.vue +137 -0
- package/utils/JsViewVueWidget/JsvApic/JsvApic2/index.js +17 -0
- package/utils/JsViewVueWidget/JsvApic/JsvBrowserApicLib/BrowserApicLib.js +4 -0
- package/utils/JsViewVueWidget/JsvApic/{BrowserApic → JsvBrowserApicLib}/NormalLoopTool.js +16 -18
- package/utils/JsViewVueWidget/JsvApic/JsvBrowserApicLib/PartLoopTool.js +90 -0
- package/utils/JsViewVueWidget/JsvApic/JsvBrowserApicLib/SingleLoopTool.js +17 -0
- package/utils/JsViewVueWidget/JsvApic/JsvBrowserApicLib/Viewer.js +111 -0
- package/utils/JsViewVueWidget/JsvApic/JsvCommonLoopToolBase.js +48 -0
- package/utils/JsViewVueWidget/JsvConnectLine/ArcLineManager.js +71 -0
- package/utils/JsViewVueWidget/JsvConnectLine/JsvConnectLine.vue +354 -0
- package/utils/JsViewVueWidget/JsvConnectLine/index.js +2 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorControl.ts +37 -18
- package/utils/JsViewVueWidget/JsvFreeMoveActor/ForgeTypeDefine.ts +7 -3
- package/utils/JsViewVueWidget/JsvFreeMoveActor/FreeMoveActor.vue +28 -2
- package/utils/JsViewVueWidget/JsvFreeMoveActor/JsvEnvBlocker.vue +12 -5
- package/utils/JsViewVueWidget/JsvFreeMoveActor/NexusNode.ts +21 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/SetAction.ts +47 -59
- package/utils/JsViewVueWidget/JsvFreeMoveActor/SetCondition.ts +129 -12
- package/utils/JsViewVueWidget/JsvFreeMoveActor/SetState.ts +45 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/index.js +10 -2
- package/utils/JsViewVueWidget/JsvGrid.vue +1 -1
- package/utils/JsViewVueWidget/JsvHole.js +1 -1
- package/utils/JsViewVueWidget/JsvInput/JsvInput.vue +1 -1
- package/utils/JsViewVueWidget/JsvLine/JsvLine.vue +2 -2
- package/utils/JsViewVueWidget/JsvLine/LineManager.js +6 -4
- package/utils/JsViewVueWidget/JsvMarquee.vue +7 -4
- package/utils/JsViewVueWidget/JsvPieChart.vue +1 -1
- package/utils/JsViewVueWidget/JsvPreload/JsvPreload.vue +1 -1
- package/utils/JsViewVueWidget/JsvPreload/index.js +1 -1
- package/utils/JsViewVueWidget/JsvProgressBar.vue +172 -0
- package/utils/JsViewVueWidget/JsvQrcode/JsvQrcode.vue +0 -1
- package/utils/JsViewVueWidget/JsvQrcode/index.js +1 -1
- package/utils/JsViewVueWidget/JsvRadarChart.vue +1 -1
- package/utils/JsViewVueWidget/JsvScaleTextBox.vue +0 -2
- package/utils/JsViewVueWidget/JsvSector.vue +1 -1
- package/utils/JsViewVueWidget/JsvSoundPool.js +1 -1
- package/utils/JsViewVueWidget/JsvSpray/index.js +1 -1
- package/utils/JsViewVueWidget/JsvSpriteAnim/FrameBuidler.ts +235 -0
- package/utils/JsViewVueWidget/JsvSpriteAnim/JsvSpriteAnim.vue +433 -401
- package/utils/JsViewVueWidget/JsvSpriteAnim/JsvSpriteLoader.vue +120 -0
- package/utils/JsViewVueWidget/JsvSpriteAnim/index.js +2 -2
- package/utils/JsViewVueWidget/JsvSwiper/JsvSwiper.vue +5 -5
- package/utils/JsViewVueWidget/JsvSwiper3D/JsvSwiper.vue +425 -422
- package/utils/JsViewVueWidget/JsvVisibleSensor/index.js +1 -1
- package/utils/JsViewVueWidget/index.js +7 -3
- package/utils/index.js +4 -0
- package/utils/JsViewVueWidget/JsvApic/BrowserApic/LoopToolBase.js +0 -25
- package/utils/JsViewVueWidget/JsvApic/BrowserApic/PartLoopTool.js +0 -119
- package/utils/JsViewVueWidget/JsvApic/BrowserApic/Viewer.js +0 -106
- /package/utils/JsViewPlugin/JsvLatex/{JsvLatexBrowser.vue → BrowserJsvLatex.vue} +0 -0
- /package/utils/JsViewPlugin/JsvPlayer/{JsvPlayerBrowser-0.9.vue → BrowserJsvPlayer-0.9.vue} +0 -0
- /package/utils/JsViewPlugin/JsvPlayer/{JsvPlayerBrowser.vue → BrowserJsvPlayer.vue} +0 -0
- /package/utils/JsViewVueWidget/JsvApic/{BrowserApic → JsvBrowserApicLib}/ApicDataBase.js +0 -0
- /package/utils/JsViewVueWidget/JsvApic/{BrowserApic → JsvBrowserApicLib}/GifData.js +0 -0
- /package/utils/JsViewVueWidget/JsvApic/{BrowserApic → JsvBrowserApicLib}/WebpData.js +0 -0
|
@@ -69,7 +69,8 @@
|
|
|
69
69
|
METRO_WIDGET_CONST.ITEM_SLIDE.DISABLE 不滚动
|
|
70
70
|
METRO_WIDGET_CONST.ITEM_SLIDE.ACT_ITEM_FOCUS 按照SlideSetting滚动
|
|
71
71
|
METRO_WIDGET_CONST.ITEM_SLIDE.ACT_FOCUS_RECT_EVENT 按照子组件发送的focusRect事件滚动
|
|
72
|
-
zIndex {int | object}: item的zIndex, 为object时可以分别设置{focus: 0, normal: 0}, 为number时则同时设置获焦和不获焦的zIndex
|
|
72
|
+
zIndex {int | object}: item的zIndex, 为object时可以分别设置{focus: 0, normal: 0}, 为number时则同时设置获焦和不获焦的zIndex,
|
|
73
|
+
uid {string}: item的uid, 可以通过uid来设置焦点
|
|
73
74
|
}
|
|
74
75
|
*
|
|
75
76
|
* onFocus {function} 控件获取焦点的回调
|
|
@@ -83,7 +84,8 @@
|
|
|
83
84
|
visibleStart: 可视区域的起点
|
|
84
85
|
visibleRange: 可视区域大小(不含padding)
|
|
85
86
|
totalSize: 所有item的总长
|
|
86
|
-
*
|
|
87
|
+
* onFocusRectChange {() => void} 焦点区域变化的回调
|
|
88
|
+
* onAllItemResizeDone {() => void} 所有item resize完成的回调
|
|
87
89
|
* loadAll {boolean} 加载不显示的view,触控场景使用
|
|
88
90
|
* flingPageWidth {}
|
|
89
91
|
* flingPageEdge {}
|
|
@@ -100,6 +102,10 @@
|
|
|
100
102
|
@description 滚动到指定item
|
|
101
103
|
@params {int} index 目标item的index, 注意与item的id区别, id是可获焦item的序号
|
|
102
104
|
@params {boolean} doAnim 是否做动画
|
|
105
|
+
slideToDiv
|
|
106
|
+
@description 滚动到指定div, div必需是MetroWidget的子
|
|
107
|
+
@params {object} div 目标div
|
|
108
|
+
@params {boolean} doAnim 是否做动画
|
|
103
109
|
setEnterFocusId
|
|
104
110
|
@description 设置落焦时的焦点
|
|
105
111
|
@params {int} id 落焦时的焦点id
|
|
@@ -124,8 +130,17 @@
|
|
|
124
130
|
{
|
|
125
131
|
lockChildSlideEvent: {boolean} 设置焦点时忽略子发过来的滚动事件
|
|
126
132
|
}
|
|
133
|
+
setFocusByUid
|
|
134
|
+
@description 通过uid设置焦点
|
|
135
|
+
@params {int} id 焦点id
|
|
136
|
+
@params {boolean} needSlide 是否需要滚动
|
|
137
|
+
@params {boolean} doAnim 滚动时是否做动画
|
|
138
|
+
@params {object} extraSetting 额外的参数设置
|
|
139
|
+
{
|
|
140
|
+
lockChildSlideEvent: {boolean} 设置焦点时忽略子发过来的滚动事件
|
|
141
|
+
}
|
|
127
142
|
refreshData
|
|
128
|
-
@description 刷新数据, 只有存在provideData
|
|
143
|
+
@description 刷新数据, 只有存在provideData时才会生效. refresh时对比的array里的object, 所以可以建一个新的array, 只要保证数据成员还是之前的那个object就行
|
|
129
144
|
@params {boolean} forceUpdate 是否强制刷新
|
|
130
145
|
getVisibleItems
|
|
131
146
|
@description 获取可视item的列表信息
|
|
@@ -153,6 +168,14 @@
|
|
|
153
168
|
@params {int} index: item的index
|
|
154
169
|
@params {int} blurZIndex: blur状态下的zIndex
|
|
155
170
|
@params {int} focusZIndex: focus状态下的zIndex, 缺省时采用blurZIndex相同的值
|
|
171
|
+
getTemplatePosition
|
|
172
|
+
@description 获取item的template位置
|
|
173
|
+
@params {int} index: item的index
|
|
174
|
+
@return {object} {left: number, top: number, width: number, height: number,}
|
|
175
|
+
lockSlide
|
|
176
|
+
@description 锁定滚动
|
|
177
|
+
unlockSlide
|
|
178
|
+
@description 取消锁定
|
|
156
179
|
|
|
157
180
|
slots:
|
|
158
181
|
renderItem: 该slot用于描画每个单元格
|
|
@@ -213,8 +236,9 @@
|
|
|
213
236
|
-->
|
|
214
237
|
|
|
215
238
|
<script setup>
|
|
216
|
-
import { ref, shallowRef, computed } from "vue";
|
|
239
|
+
import { ref, shallowRef, computed, reactive } from "vue";
|
|
217
240
|
import { setup } from "./MetroWidgetSetup";
|
|
241
|
+
import SlotComponent from "./SlotComponent.vue";
|
|
218
242
|
import {
|
|
219
243
|
VERTICAL,
|
|
220
244
|
HORIZONTAL,
|
|
@@ -351,6 +375,16 @@ const props = defineProps({
|
|
|
351
375
|
type: Boolean,
|
|
352
376
|
default: false,
|
|
353
377
|
},
|
|
378
|
+
onFocusRectChange: {
|
|
379
|
+
type: Function,
|
|
380
|
+
},
|
|
381
|
+
onAllItemResizeDone: {
|
|
382
|
+
type: Function,
|
|
383
|
+
},
|
|
384
|
+
// enableTouch: {
|
|
385
|
+
// type: Boolean,
|
|
386
|
+
// default: false,
|
|
387
|
+
// },
|
|
354
388
|
});
|
|
355
389
|
|
|
356
390
|
const renderBreakKey = props.enableItemRenderBreak ? RENDER_ITEM_BREAK_KEY : "";
|
|
@@ -363,6 +397,12 @@ const slideDivTop = ref(0);
|
|
|
363
397
|
const focusNode = shallowRef(null);
|
|
364
398
|
const pageUpdateToken = ref(0);
|
|
365
399
|
|
|
400
|
+
const touchDiv = shallowRef(null);
|
|
401
|
+
const touchDivSize = reactive({
|
|
402
|
+
width: 0,
|
|
403
|
+
height: 0,
|
|
404
|
+
});
|
|
405
|
+
|
|
366
406
|
const normalizedPlaceHolder = computed(() => {
|
|
367
407
|
return {
|
|
368
408
|
gap: props.placeHolderSetting.gap ?? 0,
|
|
@@ -379,9 +419,12 @@ const {
|
|
|
379
419
|
focusBlockOnFocus,
|
|
380
420
|
focusBlockOnBlur,
|
|
381
421
|
focusBlockOnKeyDown,
|
|
382
|
-
|
|
422
|
+
focusBlockOnCustomEvent,
|
|
383
423
|
_onFocusableItemEdge,
|
|
384
424
|
exportObject,
|
|
425
|
+
onTouchDown,
|
|
426
|
+
onTouchRelease,
|
|
427
|
+
currentFocusIndex,
|
|
385
428
|
} = setup(
|
|
386
429
|
props,
|
|
387
430
|
itemRender,
|
|
@@ -392,9 +435,10 @@ const {
|
|
|
392
435
|
slideDivTop,
|
|
393
436
|
focusNode,
|
|
394
437
|
pageUpdateToken,
|
|
438
|
+
touchDiv,
|
|
439
|
+
touchDivSize,
|
|
395
440
|
"common"
|
|
396
441
|
);
|
|
397
|
-
|
|
398
442
|
defineExpose(exportObject);
|
|
399
443
|
</script>
|
|
400
444
|
|
|
@@ -423,67 +467,79 @@ defineExpose(exportObject);
|
|
|
423
467
|
top: slideDivTop,
|
|
424
468
|
}"
|
|
425
469
|
>
|
|
426
|
-
<div
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
top: item.templateInfo.top,
|
|
447
|
-
width: item.templateInfo.width,
|
|
448
|
-
height: item.templateInfo.height,
|
|
449
|
-
zIndex: item.renderStyle.zIndex,
|
|
470
|
+
<div
|
|
471
|
+
ref="touchDiv"
|
|
472
|
+
:style="{
|
|
473
|
+
width: touchDivSize.width,
|
|
474
|
+
height: touchDivSize.height,
|
|
475
|
+
}"
|
|
476
|
+
@jsv-touchend="onTouchRelease"
|
|
477
|
+
>
|
|
478
|
+
<div>
|
|
479
|
+
<slot name="background"></slot>
|
|
480
|
+
</div>
|
|
481
|
+
<div ref="locateDiv">
|
|
482
|
+
<jsv-focus-block
|
|
483
|
+
ref="focusNode"
|
|
484
|
+
:name="name"
|
|
485
|
+
:onAction="{
|
|
486
|
+
onFocus: focusBlockOnFocus,
|
|
487
|
+
onBlur: focusBlockOnBlur,
|
|
488
|
+
onKeyDown: focusBlockOnKeyDown,
|
|
489
|
+
onCustomEvent: focusBlockOnCustomEvent,
|
|
450
490
|
}"
|
|
451
491
|
>
|
|
452
492
|
<div
|
|
453
|
-
v-
|
|
454
|
-
|
|
455
|
-
"
|
|
456
|
-
:key="renderBreakKey"
|
|
457
|
-
:ref="item.slotRef"
|
|
458
|
-
:id="`${name}_${index}`"
|
|
459
|
-
>
|
|
460
|
-
<slot
|
|
461
|
-
name="renderItem"
|
|
462
|
-
:data="item.customerData"
|
|
463
|
-
:onEdge="_onFocusableItemEdge"
|
|
464
|
-
:onAction="item.registerObj"
|
|
465
|
-
:query="item.query"
|
|
466
|
-
:onItemEdge="_onFocusableItemEdge"
|
|
467
|
-
></slot>
|
|
468
|
-
</div>
|
|
469
|
-
<div
|
|
470
|
-
v-if="
|
|
471
|
-
enableItemRenderBreak &&
|
|
472
|
-
placeHolderSetting &&
|
|
473
|
-
!item.mounted.value
|
|
474
|
-
"
|
|
493
|
+
v-for="(item, index) in renderData"
|
|
494
|
+
:key="pageUpdateToken + '_' + item.index"
|
|
495
|
+
:ref="item.divRef"
|
|
475
496
|
:style="{
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
: normalizedPlaceHolder.backgroundColor,
|
|
482
|
-
borderRadius: normalizedPlaceHolder.borderRadius,
|
|
497
|
+
left: item.templateInfo.left,
|
|
498
|
+
top: item.templateInfo.top,
|
|
499
|
+
width: item.templateInfo.width,
|
|
500
|
+
height: item.templateInfo.height,
|
|
501
|
+
zIndex: item.renderStyle.zIndex,
|
|
483
502
|
}"
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
503
|
+
@click="item.onTap.value"
|
|
504
|
+
>
|
|
505
|
+
<div
|
|
506
|
+
v-if="
|
|
507
|
+
!enableItemRenderBreak || item.mounted.value || itemRender
|
|
508
|
+
"
|
|
509
|
+
:key="renderBreakKey"
|
|
510
|
+
:ref="item.slotRef"
|
|
511
|
+
:id="`${name}_${index}`"
|
|
512
|
+
>
|
|
513
|
+
<slot-component key="__QcodeJsviewFreezeComponent">
|
|
514
|
+
<slot
|
|
515
|
+
name="renderItem"
|
|
516
|
+
:data="item.customerData"
|
|
517
|
+
:onEdge="_onFocusableItemEdge"
|
|
518
|
+
:onAction="item.registerObj"
|
|
519
|
+
:query="item.query"
|
|
520
|
+
:onItemEdge="_onFocusableItemEdge"
|
|
521
|
+
></slot>
|
|
522
|
+
</slot-component>
|
|
523
|
+
</div>
|
|
524
|
+
<div
|
|
525
|
+
v-if="
|
|
526
|
+
enableItemRenderBreak &&
|
|
527
|
+
placeHolderSetting &&
|
|
528
|
+
!item.mounted.value
|
|
529
|
+
"
|
|
530
|
+
:style="{
|
|
531
|
+
width: item.renderStyle.width - normalizedPlaceHolder.gap,
|
|
532
|
+
height: item.renderStyle.height - normalizedPlaceHolder.gap,
|
|
533
|
+
backgroundColor:
|
|
534
|
+
currentFocusIndex == item.index
|
|
535
|
+
? normalizedPlaceHolder.focusBackgroundColor
|
|
536
|
+
: normalizedPlaceHolder.backgroundColor,
|
|
537
|
+
borderRadius: normalizedPlaceHolder.borderRadius,
|
|
538
|
+
}"
|
|
539
|
+
></div>
|
|
540
|
+
</div>
|
|
541
|
+
</jsv-focus-block>
|
|
542
|
+
</div>
|
|
487
543
|
</div>
|
|
488
544
|
<div>
|
|
489
545
|
<slot name="foreground"></slot>
|