@arbidocs/blocks 0.4.109 → 0.4.111
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/dist/{NativeDocxEditor-WODZAURG.cjs → NativeDocxEditor-AQKRZBIU.cjs} +7 -7
- package/dist/{NativeDocxEditor-WODZAURG.cjs.map → NativeDocxEditor-AQKRZBIU.cjs.map} +1 -1
- package/dist/{NativeDocxEditor-4PY4YZYC.js → NativeDocxEditor-IN2HEO5I.js} +3 -3
- package/dist/{NativeDocxEditor-4PY4YZYC.js.map → NativeDocxEditor-IN2HEO5I.js.map} +1 -1
- package/dist/agents/index.cjs +286 -286
- package/dist/agents/index.js +10 -10
- package/dist/agents/tasks/ConversationListView.d.ts +5 -1
- package/dist/agents/tasks/TaskActivityTimeline.d.ts +5 -1
- package/dist/calendar/EventDetails.d.ts +1 -1
- package/dist/calendar/EventEditor.d.ts +1 -1
- package/dist/calendar/draft.d.ts +7 -1
- package/dist/calendar/index.cjs +71 -10
- package/dist/calendar/index.cjs.map +1 -1
- package/dist/calendar/index.d.ts +1 -1
- package/dist/calendar/index.js +69 -11
- package/dist/calendar/index.js.map +1 -1
- package/dist/calendar/types.d.ts +23 -0
- package/dist/calls/CallSidePanel.d.ts +32 -0
- package/dist/calls/CallStage.d.ts +57 -0
- package/dist/calls/ControlBar.d.ts +113 -0
- package/dist/calls/ControlButton.d.ts +44 -0
- package/dist/calls/PreJoin.d.ts +35 -0
- package/dist/calls/cards.d.ts +58 -0
- package/dist/calls/hooks.d.ts +20 -0
- package/dist/calls/index.cjs +2884 -0
- package/dist/calls/index.cjs.map +1 -0
- package/dist/calls/index.d.ts +21 -0
- package/dist/calls/index.js +2753 -0
- package/dist/calls/index.js.map +1 -0
- package/dist/calls/join-choices.d.ts +11 -0
- package/dist/calls/layout.d.ts +106 -0
- package/dist/calls/panels.d.ts +66 -0
- package/dist/calls/status.d.ts +69 -0
- package/dist/calls/tiles.d.ts +59 -0
- package/dist/calls/webinar/ChatPermissionSetting.d.ts +18 -0
- package/dist/calls/webinar/OnStageCheck.d.ts +23 -0
- package/dist/calls/webinar/QAPanel.d.ts +56 -0
- package/dist/calls/webinar/RaiseHandButton.d.ts +14 -0
- package/dist/calls/webinar/WebinarAudiencePanel.d.ts +23 -0
- package/dist/calls/webinar/WebinarViewer.d.ts +39 -0
- package/dist/calls/webinar/WebinarWaiting.d.ts +19 -0
- package/dist/calls/webinar/hooks.d.ts +13 -0
- package/dist/calls/webinar/index.d.ts +14 -0
- package/dist/calls/webinar/live.d.ts +43 -0
- package/dist/calls/webinar/types.d.ts +49 -0
- package/dist/chat/Message.d.ts +17 -2
- package/dist/chat/TranscriptLine.d.ts +50 -0
- package/dist/chat/index.cjs +147 -126
- package/dist/chat/index.d.ts +3 -1
- package/dist/chat/index.js +5 -4
- package/dist/chat/transcript-runs.d.ts +6 -0
- package/dist/{chunk-GKDWQLVU.js → chunk-2C7TCVQZ.js} +172 -121
- package/dist/chunk-2C7TCVQZ.js.map +1 -0
- package/dist/{chunk-QKWQMOHN.cjs → chunk-2UAJVK3C.cjs} +4 -4
- package/dist/{chunk-QKWQMOHN.cjs.map → chunk-2UAJVK3C.cjs.map} +1 -1
- package/dist/{chunk-54WBIVHV.cjs → chunk-2WO5L7YT.cjs} +5 -5
- package/dist/{chunk-54WBIVHV.cjs.map → chunk-2WO5L7YT.cjs.map} +1 -1
- package/dist/{chunk-7C35WXYB.js → chunk-5HFPRI3W.js} +5 -5
- package/dist/chunk-5HFPRI3W.js.map +1 -0
- package/dist/{chunk-ZSV2NQQP.js → chunk-6RHHMBZ5.js} +158 -5
- package/dist/chunk-6RHHMBZ5.js.map +1 -0
- package/dist/{chunk-FQX6N5G6.js → chunk-6Z7DLJU2.js} +35 -18
- package/dist/chunk-6Z7DLJU2.js.map +1 -0
- package/dist/{chunk-PGDL26TQ.js → chunk-AY32GGKU.js} +10 -4
- package/dist/{chunk-PGDL26TQ.js.map → chunk-AY32GGKU.js.map} +1 -1
- package/dist/{chunk-S55VDTX3.js → chunk-CECWAIHL.js} +3 -3
- package/dist/{chunk-S55VDTX3.js.map → chunk-CECWAIHL.js.map} +1 -1
- package/dist/{chunk-UABPHZWZ.js → chunk-CXZ7FPTQ.js} +3 -3
- package/dist/{chunk-UABPHZWZ.js.map → chunk-CXZ7FPTQ.js.map} +1 -1
- package/dist/{chunk-C2HRZSAT.cjs → chunk-DJM7DLCT.cjs} +5 -5
- package/dist/chunk-DJM7DLCT.cjs.map +1 -0
- package/dist/{chunk-GBYY3PIC.cjs → chunk-FXUQZFAN.cjs} +79 -62
- package/dist/chunk-FXUQZFAN.cjs.map +1 -0
- package/dist/{chunk-W7NZRZ54.js → chunk-GFYGYME3.js} +3 -3
- package/dist/{chunk-W7NZRZ54.js.map → chunk-GFYGYME3.js.map} +1 -1
- package/dist/chunk-GICUGQNN.cjs +76 -0
- package/dist/chunk-GICUGQNN.cjs.map +1 -0
- package/dist/{chunk-I4XQCE6U.cjs → chunk-HBBJYRGI.cjs} +162 -5
- package/dist/{chunk-ZSV2NQQP.js.map → chunk-HBBJYRGI.cjs.map} +1 -1
- package/dist/chunk-JJLMCV3T.js +73 -0
- package/dist/chunk-JJLMCV3T.js.map +1 -0
- package/dist/chunk-MWDW5UBW.cjs +199 -0
- package/dist/chunk-MWDW5UBW.cjs.map +1 -0
- package/dist/{chunk-NUTLXVPX.js → chunk-NRUPUDWB.js} +16 -7
- package/dist/chunk-NRUPUDWB.js.map +1 -0
- package/dist/{chunk-5YXG342J.cjs → chunk-OR4CO743.cjs} +3 -3
- package/dist/{chunk-5YXG342J.cjs.map → chunk-OR4CO743.cjs.map} +1 -1
- package/dist/{chunk-DDF5GPIJ.js → chunk-P5ST47VY.js} +3 -3
- package/dist/{chunk-DDF5GPIJ.js.map → chunk-P5ST47VY.js.map} +1 -1
- package/dist/{chunk-PEHLUB52.js → chunk-Q6B77ZWZ.js} +3 -3
- package/dist/{chunk-PEHLUB52.js.map → chunk-Q6B77ZWZ.js.map} +1 -1
- package/dist/{chunk-ELDUWTRR.cjs → chunk-TF47ATYS.cjs} +4 -4
- package/dist/{chunk-ELDUWTRR.cjs.map → chunk-TF47ATYS.cjs.map} +1 -1
- package/dist/{chunk-PDRYGPZB.cjs → chunk-VP4KJ4LK.cjs} +16 -6
- package/dist/chunk-VP4KJ4LK.cjs.map +1 -0
- package/dist/{chunk-SKSE4OT6.cjs → chunk-WPVIOGDG.cjs} +5 -5
- package/dist/{chunk-SKSE4OT6.cjs.map → chunk-WPVIOGDG.cjs.map} +1 -1
- package/dist/{chunk-JB32KYAH.js → chunk-WTM65ZNG.js} +3 -3
- package/dist/{chunk-JB32KYAH.js.map → chunk-WTM65ZNG.js.map} +1 -1
- package/dist/{chunk-2NIL2ASF.cjs → chunk-XIGWUDOD.cjs} +170 -119
- package/dist/chunk-XIGWUDOD.cjs.map +1 -0
- package/dist/{chunk-3US5OIDQ.cjs → chunk-XSUOEJB3.cjs} +9 -3
- package/dist/chunk-XSUOEJB3.cjs.map +1 -0
- package/dist/chunk-Z3AZ7Q5X.js +177 -0
- package/dist/chunk-Z3AZ7Q5X.js.map +1 -0
- package/dist/{chunk-Z5VUZ6YD.cjs → chunk-ZV3BKLFY.cjs} +3 -3
- package/dist/{chunk-Z5VUZ6YD.cjs.map → chunk-ZV3BKLFY.cjs.map} +1 -1
- package/dist/collaboration/index.cjs +42 -42
- package/dist/collaboration/index.js +2 -2
- package/dist/connect/docx.cjs +6 -6
- package/dist/connect/docx.js +4 -4
- package/dist/connect/index.cjs +72 -72
- package/dist/connect/index.js +18 -18
- package/dist/docx/AgentUndo.d.ts +4 -0
- package/dist/docx/index.cjs +46 -46
- package/dist/docx/index.js +3 -3
- package/dist/facts/index.cjs +4 -4
- package/dist/facts/index.js +4 -4
- package/dist/files/index.cjs +6 -6
- package/dist/files/index.js +6 -6
- package/dist/home/index.cjs +17 -17
- package/dist/home/index.js +3 -3
- package/dist/index.cjs +958 -937
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +24 -23
- package/dist/index.js.map +1 -1
- package/dist/retrieval/index.cjs +1 -1
- package/dist/retrieval/index.js +1 -1
- package/dist/settings/index.cjs +50 -104
- package/dist/settings/index.cjs.map +1 -1
- package/dist/settings/index.js +12 -72
- package/dist/settings/index.js.map +1 -1
- package/dist/shell/index.cjs +12 -12
- package/dist/shell/index.js +4 -4
- package/dist/site/index.cjs +5 -5
- package/dist/site/index.js +1 -1
- package/dist/studio/index.cjs +5 -5
- package/dist/studio/index.js +4 -4
- package/dist/workflow-canvas/index.cjs +53 -53
- package/dist/workflow-canvas/index.js +10 -10
- package/dist/workspaces/index.cjs +2 -2
- package/dist/workspaces/index.js +2 -2
- package/node_modules/@arbidocs/coedit/dist/commands.cjs +179 -9
- package/node_modules/@arbidocs/coedit/dist/commands.cjs.map +1 -1
- package/node_modules/@arbidocs/coedit/dist/commands.d.cts +81 -1
- package/node_modules/@arbidocs/coedit/dist/commands.d.ts +81 -1
- package/node_modules/@arbidocs/coedit/dist/commands.js +173 -11
- package/node_modules/@arbidocs/coedit/dist/commands.js.map +1 -1
- package/node_modules/@arbidocs/coedit/dist/server.cjs +58 -2
- package/node_modules/@arbidocs/coedit/dist/server.cjs.map +1 -1
- package/node_modules/@arbidocs/coedit/dist/server.d.cts +29 -1
- package/node_modules/@arbidocs/coedit/dist/server.d.ts +29 -1
- package/node_modules/@arbidocs/coedit/dist/server.js +58 -3
- package/node_modules/@arbidocs/coedit/dist/server.js.map +1 -1
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +15 -5
- package/src/calls/calls.css +157 -0
- package/dist/chunk-2NIL2ASF.cjs.map +0 -1
- package/dist/chunk-3US5OIDQ.cjs.map +0 -1
- package/dist/chunk-7C35WXYB.js.map +0 -1
- package/dist/chunk-C2HRZSAT.cjs.map +0 -1
- package/dist/chunk-FQX6N5G6.js.map +0 -1
- package/dist/chunk-GBYY3PIC.cjs.map +0 -1
- package/dist/chunk-GKDWQLVU.js.map +0 -1
- package/dist/chunk-I4XQCE6U.cjs.map +0 -1
- package/dist/chunk-NUTLXVPX.js.map +0 -1
- package/dist/chunk-PDRYGPZB.cjs.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arbidocs/coedit",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.111",
|
|
4
4
|
"description": "Real-time collaboration for the ARBI native DOCX editor: a Yjs mirror of the canonical OOXML package, session, and server runtime",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arbidocs/blocks",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.111",
|
|
4
4
|
"description": "Composable, domain-neutral UI blocks for ARBI apps, organised by capability (retrieval, facts, agents, workspaces, citations, collaboration) plus shell, theme and site primitives, on top of @arbidocs/react.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -108,6 +108,12 @@
|
|
|
108
108
|
"require": "./dist/calendar/index.cjs"
|
|
109
109
|
},
|
|
110
110
|
"./calendar.css": "./src/calendar/calendar.css",
|
|
111
|
+
"./calls": {
|
|
112
|
+
"types": "./dist/calls/index.d.ts",
|
|
113
|
+
"import": "./dist/calls/index.js",
|
|
114
|
+
"require": "./dist/calls/index.cjs"
|
|
115
|
+
},
|
|
116
|
+
"./calls.css": "./src/calls/calls.css",
|
|
111
117
|
"./studio": {
|
|
112
118
|
"types": "./dist/studio/index.d.ts",
|
|
113
119
|
"import": "./dist/studio/index.js",
|
|
@@ -214,6 +220,9 @@
|
|
|
214
220
|
"calendar": [
|
|
215
221
|
"./dist/calendar/index.d.ts"
|
|
216
222
|
],
|
|
223
|
+
"calls": [
|
|
224
|
+
"./dist/calls/index.d.ts"
|
|
225
|
+
],
|
|
217
226
|
"studio": [
|
|
218
227
|
"./dist/studio/index.d.ts"
|
|
219
228
|
],
|
|
@@ -257,7 +266,8 @@
|
|
|
257
266
|
"src/docx/styles.css",
|
|
258
267
|
"src/docx/layout/layout.css",
|
|
259
268
|
"src/docx/README.md",
|
|
260
|
-
"src/calendar/calendar.css"
|
|
269
|
+
"src/calendar/calendar.css",
|
|
270
|
+
"src/calls/calls.css"
|
|
261
271
|
],
|
|
262
272
|
"scripts": {
|
|
263
273
|
"build": "rm -rf dist && tsup && tsc -p tsconfig.build.json",
|
|
@@ -270,8 +280,8 @@
|
|
|
270
280
|
"example:test:e2e": "playwright test -c examples/custom-ui/playwright.config.ts"
|
|
271
281
|
},
|
|
272
282
|
"dependencies": {
|
|
273
|
-
"@arbidocs/client": "0.4.
|
|
274
|
-
"@arbidocs/coedit": "0.4.
|
|
283
|
+
"@arbidocs/client": "0.4.111",
|
|
284
|
+
"@arbidocs/coedit": "0.4.111",
|
|
275
285
|
"@dnd-kit/core": "^6.3.1",
|
|
276
286
|
"@dnd-kit/sortable": "^10.0.0",
|
|
277
287
|
"@dnd-kit/utilities": "^3.2.2",
|
|
@@ -313,7 +323,7 @@
|
|
|
313
323
|
"y-protocols": "^1.0.6"
|
|
314
324
|
},
|
|
315
325
|
"peerDependencies": {
|
|
316
|
-
"@arbidocs/react": "0.4.
|
|
326
|
+
"@arbidocs/react": "0.4.111",
|
|
317
327
|
"@lexical/html": "0.35.0",
|
|
318
328
|
"@lexical/link": "0.35.0",
|
|
319
329
|
"@lexical/list": "0.35.0",
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Call tiles (`@arbidocs/blocks/calls.css`). Everything around the tiles is plain ARBI chrome
|
|
3
|
+
* (theme tokens via Tailwind classes); only the video tiles need rules of their own. They sit on
|
|
4
|
+
* the deep brand navy (`--hero`) so video and initials read the same in light and dark.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
.call-tile-box > .call-tile {
|
|
8
|
+
width: 100%;
|
|
9
|
+
height: 100%;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.call-tile {
|
|
13
|
+
position: relative;
|
|
14
|
+
display: flex;
|
|
15
|
+
align-items: center;
|
|
16
|
+
justify-content: center;
|
|
17
|
+
overflow: hidden;
|
|
18
|
+
container-type: size;
|
|
19
|
+
border-radius: var(--radius);
|
|
20
|
+
background-color: hsl(var(--hero));
|
|
21
|
+
color: #fff;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/* Camera video fills its 16:9 tile; a share is letterboxed so nothing on it is cut off. */
|
|
25
|
+
.call-tile video {
|
|
26
|
+
width: 100%;
|
|
27
|
+
height: 100%;
|
|
28
|
+
object-fit: cover;
|
|
29
|
+
object-position: 50% 30%;
|
|
30
|
+
}
|
|
31
|
+
.call-tile[data-source='screen'] video {
|
|
32
|
+
object-fit: contain;
|
|
33
|
+
}
|
|
34
|
+
/* A selfie view flips the <video> element only: names, initials and icons are siblings, never
|
|
35
|
+
* inside the transform (a recording drawn from the <video> stays unmirrored too). */
|
|
36
|
+
.call-tile[data-mirror='true'] > video {
|
|
37
|
+
transform: scaleX(-1);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.call-tile-placeholder {
|
|
41
|
+
display: flex;
|
|
42
|
+
width: 100%;
|
|
43
|
+
height: 100%;
|
|
44
|
+
align-items: center;
|
|
45
|
+
justify-content: center;
|
|
46
|
+
}
|
|
47
|
+
.call-tile-avatar {
|
|
48
|
+
display: flex;
|
|
49
|
+
width: clamp(2.5rem, 22cqmin, 6rem);
|
|
50
|
+
aspect-ratio: 1;
|
|
51
|
+
align-items: center;
|
|
52
|
+
justify-content: center;
|
|
53
|
+
border-radius: 9999px;
|
|
54
|
+
background-color: rgb(255 255 255 / 0.14);
|
|
55
|
+
font-size: clamp(0.875rem, 8cqmin, 1.75rem);
|
|
56
|
+
font-weight: 600;
|
|
57
|
+
letter-spacing: 0.02em;
|
|
58
|
+
}
|
|
59
|
+
.call-tile-avatar-sm {
|
|
60
|
+
width: 2.25rem;
|
|
61
|
+
font-size: 0.8125rem;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/* A tile too short for both (a filmstrip thumbnail): the name chip carries the person; the large
|
|
65
|
+
* initials would sit under it. */
|
|
66
|
+
@container (max-height: 96px) {
|
|
67
|
+
.call-tile-placeholder .call-tile-avatar {
|
|
68
|
+
display: none;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/* The name, once, bottom-left (the app's person pill, on its own surface), and the tile's state
|
|
73
|
+
* icons in a small dark chip beside it. */
|
|
74
|
+
.call-tile-name {
|
|
75
|
+
position: absolute;
|
|
76
|
+
left: 0.5rem;
|
|
77
|
+
bottom: 0.5rem;
|
|
78
|
+
display: flex;
|
|
79
|
+
max-width: calc(100% - 1rem);
|
|
80
|
+
align-items: center;
|
|
81
|
+
gap: 0.25rem;
|
|
82
|
+
font-size: 0.75rem;
|
|
83
|
+
line-height: 1.125rem;
|
|
84
|
+
font-weight: 500;
|
|
85
|
+
}
|
|
86
|
+
.call-tile-chip {
|
|
87
|
+
display: inline-flex;
|
|
88
|
+
align-items: center;
|
|
89
|
+
gap: 0.25rem;
|
|
90
|
+
border-radius: var(--radius);
|
|
91
|
+
background-color: rgb(0 0 0 / 0.6);
|
|
92
|
+
padding: 0.1875rem 0.375rem;
|
|
93
|
+
color: #fff;
|
|
94
|
+
}
|
|
95
|
+
.call-tile-signal {
|
|
96
|
+
position: absolute;
|
|
97
|
+
right: 0.5rem;
|
|
98
|
+
top: 0.5rem;
|
|
99
|
+
display: flex;
|
|
100
|
+
border-radius: var(--radius);
|
|
101
|
+
background-color: rgb(0 0 0 / 0.6);
|
|
102
|
+
padding: 0.125rem;
|
|
103
|
+
color: hsl(var(--yellow-solid));
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/* Who is talking: a brand-cyan frame over the video that thickens with the voice level, and a
|
|
107
|
+
* ring around the avatar that grows with it (camera off). Never colour alone: the name chip also
|
|
108
|
+
* shows a sound icon, and the panel says "Speaking: …". */
|
|
109
|
+
.call-tile::after {
|
|
110
|
+
content: '';
|
|
111
|
+
position: absolute;
|
|
112
|
+
inset: 0;
|
|
113
|
+
border: 0 solid transparent;
|
|
114
|
+
border-radius: inherit;
|
|
115
|
+
pointer-events: none;
|
|
116
|
+
transition:
|
|
117
|
+
border-width 60ms linear,
|
|
118
|
+
border-color 120ms ease-out;
|
|
119
|
+
}
|
|
120
|
+
.call-tile[data-speaking='true']::after {
|
|
121
|
+
border-color: hsl(var(--theme-cyan));
|
|
122
|
+
border-width: calc(2px + var(--call-level, 0) * 4px);
|
|
123
|
+
}
|
|
124
|
+
.call-tile-avatar {
|
|
125
|
+
transition: box-shadow 60ms linear;
|
|
126
|
+
}
|
|
127
|
+
.call-tile[data-speaking='true'] .call-tile-avatar {
|
|
128
|
+
box-shadow:
|
|
129
|
+
0 0 0 3px hsl(var(--theme-cyan)),
|
|
130
|
+
0 0 0 calc(3px + var(--call-level, 0) * 14px) hsl(var(--theme-cyan) / 0.35);
|
|
131
|
+
}
|
|
132
|
+
.call-tile-speaking {
|
|
133
|
+
color: hsl(var(--theme-cyan));
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.call-tile-more {
|
|
137
|
+
flex-direction: column;
|
|
138
|
+
gap: 0.375rem;
|
|
139
|
+
font-size: 0.875rem;
|
|
140
|
+
font-weight: 500;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/* Reduced motion: a steady ring while someone talks, no pulsing with the level. */
|
|
144
|
+
@media (prefers-reduced-motion: reduce) {
|
|
145
|
+
.call-tile::after,
|
|
146
|
+
.call-tile-avatar {
|
|
147
|
+
transition: none;
|
|
148
|
+
}
|
|
149
|
+
.call-tile[data-speaking='true']::after {
|
|
150
|
+
border-width: 4px;
|
|
151
|
+
}
|
|
152
|
+
.call-tile[data-speaking='true'] .call-tile-avatar {
|
|
153
|
+
box-shadow:
|
|
154
|
+
0 0 0 3px hsl(var(--theme-cyan)),
|
|
155
|
+
0 0 0 8px hsl(var(--theme-cyan) / 0.35);
|
|
156
|
+
}
|
|
157
|
+
}
|