@difizen/libro-core 0.3.2 → 0.3.4

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.
Files changed (37) hide show
  1. package/es/components/dnd-component/default-dnd-content.d.ts.map +1 -1
  2. package/es/components/dnd-component/default-dnd-content.js +88 -165
  3. package/es/components/dnd-component/dnd-list.d.ts +12 -0
  4. package/es/components/dnd-component/dnd-list.d.ts.map +1 -1
  5. package/es/components/dnd-component/dnd-list.js +306 -62
  6. package/es/components/dnd-component/index.d.ts +0 -2
  7. package/es/components/dnd-component/index.d.ts.map +1 -1
  8. package/es/components/dnd-component/index.js +0 -2
  9. package/es/components/dnd-component/index.less +84 -0
  10. package/es/components/dnd-component/virtualized-manager.d.ts.map +1 -1
  11. package/es/components/dnd-component/virtualized-manager.js +2 -8
  12. package/es/formatter/libro-formatter-json-contribution.d.ts +1 -1
  13. package/es/formatter/libro-formatter-string-contribution.d.ts +1 -1
  14. package/es/index.less +0 -22
  15. package/es/libro-model.js +1 -1
  16. package/es/libro-view.d.ts.map +1 -1
  17. package/es/libro-view.js +122 -135
  18. package/es/virtualized-manager.d.ts.map +1 -1
  19. package/es/virtualized-manager.js +1 -8
  20. package/package.json +10 -6
  21. package/src/components/dnd-component/default-dnd-content.tsx +99 -163
  22. package/src/components/dnd-component/dnd-list.tsx +303 -34
  23. package/src/components/dnd-component/index.less +84 -0
  24. package/src/components/dnd-component/index.tsx +0 -2
  25. package/src/components/dnd-component/virtualized-manager.ts +10 -7
  26. package/src/index.less +0 -22
  27. package/src/libro-model.ts +1 -1
  28. package/src/libro-view.tsx +22 -29
  29. package/src/virtualized-manager.ts +9 -7
  30. package/es/components/dnd-component/custom-drag-layer.d.ts +0 -9
  31. package/es/components/dnd-component/custom-drag-layer.d.ts.map +0 -1
  32. package/es/components/dnd-component/custom-drag-layer.js +0 -140
  33. package/es/components/dnd-component/dnd-context.d.ts +0 -3
  34. package/es/components/dnd-component/dnd-context.d.ts.map +0 -1
  35. package/es/components/dnd-component/dnd-context.js +0 -20
  36. package/src/components/dnd-component/custom-drag-layer.tsx +0 -144
  37. package/src/components/dnd-component/dnd-context.tsx +0 -28
@@ -1 +1 @@
1
- {"version":3,"file":"default-dnd-content.d.ts","sourceRoot":"","sources":["../../../src/components/dnd-component/default-dnd-content.tsx"],"names":[],"mappings":"AAKA,OAAO,KAQN,MAAM,OAAO,CAAC;AAGf,OAAO,0BAA0B,CAAC;AAMlC,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAIzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA4StD,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,mBAIrC,CAAC"}
1
+ {"version":3,"file":"default-dnd-content.d.ts","sourceRoot":"","sources":["../../../src/components/dnd-component/default-dnd-content.tsx"],"names":[],"mappings":"AAIA,OAAO,KAQN,MAAM,OAAO,CAAC;AACf,OAAO,0BAA0B,CAAC;AAGlC,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAIzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAI1D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAgPtD,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,mBAIrC,CAAC"}
@@ -1,8 +1,3 @@
1
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
5
- function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
6
1
  function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
7
2
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
8
3
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -14,20 +9,16 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
14
9
  import { getOrigin, useInject, ViewInstance } from '@difizen/mana-app';
15
10
  import { useConfigurationValue } from '@difizen/mana-app';
16
11
  import { Button } from 'antd';
17
- import React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, forwardRef } from 'react';
18
- import { useDrag, useDragDropManager, useDrop } from 'react-dnd';
19
- import { getEmptyImage } from 'react-dnd-html5-backend';
12
+ import React, { useCallback, useLayoutEffect, useMemo, useRef, useState, forwardRef, useContext } from 'react';
20
13
  import 'resize-observer-polyfill';
21
- import { LibroCellService } from "../../cell/index.js";
22
14
  import { CellCollapsible } from "../../collapse-service.js";
23
- import { DragAreaKey, isCellView } from "../../libro-protocol.js";
24
15
  import { MultiSelectionWhenShiftClick } from "../../libro-setting.js";
25
16
  import { HolderOutlined, PlusOutlined } from "../../material-from-designer.js";
26
17
  import { BetweenCellProvider } from "../cell-protocol.js";
18
+ import { DragContext } from "./dnd-list.js";
27
19
  import { jsx as _jsx } from "react/jsx-runtime";
28
20
  import { jsxs as _jsxs } from "react/jsx-runtime";
29
21
  export var DndCellContainer = function DndCellContainer(_ref) {
30
- var _instance$container;
31
22
  var cell = _ref.cell,
32
23
  index = _ref.index,
33
24
  position = _ref.position;
@@ -37,10 +28,24 @@ export var DndCellContainer = function DndCellContainer(_ref) {
37
28
  _useConfigurationValu2 = _slicedToArray(_useConfigurationValu, 1),
38
29
  multiSelectionWhenShiftClick = _useConfigurationValu2[0];
39
30
  var BetweenCellContent = useInject(BetweenCellProvider);
40
- var cellService = useInject(LibroCellService);
41
- var dragDropManager = useDragDropManager();
42
- var dragDropMonitor = dragDropManager.getMonitor();
31
+ var _useState = useState(false),
32
+ _useState2 = _slicedToArray(_useState, 2),
33
+ isMouseOverDragArea = _useState2[0],
34
+ setIsMouseOverDragArea = _useState2[1];
35
+ var _useState3 = useState(false),
36
+ _useState4 = _slicedToArray(_useState3, 2),
37
+ isDragDown = _useState4[0],
38
+ setIsDragDown = _useState4[1];
43
39
  var ItemRender = getOrigin(instance.dndItemRender);
40
+ var _useContext = useContext(DragContext),
41
+ dragOverIndex = _useContext.dragOverIndex,
42
+ isDraging = _useContext.isDraging,
43
+ sourceIndex = _useContext.sourceIndex,
44
+ onDragStart = _useContext.onDragStart,
45
+ onDragOver = _useContext.onDragOver,
46
+ onDrop = _useContext.onDrop,
47
+ onDragEnd = _useContext.onDragEnd,
48
+ fragFromRef = _useContext.fragFromRef;
44
49
  useLayoutEffect(function () {
45
50
  if (_typeof(ref) !== 'object') {
46
51
  return function () {
@@ -93,176 +98,92 @@ export var DndCellContainer = function DndCellContainer(_ref) {
93
98
  return;
94
99
  }
95
100
  instance.model.selectCell(cell);
96
- instance.model.selections = [];
101
+ if (instance.model.selections.length !== 0) {
102
+ instance.model.selections = [];
103
+ }
97
104
  }, [instance, cell]);
98
- var scrollTimer = useRef(null);
99
- var unsubscribe = useRef(null);
100
- var _useDrag = useDrag({
101
- type: DragAreaKey,
102
- item: {
103
- cell: cell,
104
- index: index
105
- },
106
- collect: function collect(monitor) {
107
- return {
108
- isDrag: monitor.isDragging()
109
- };
110
- },
111
- end: function end() {
112
- instance.isDragging = false;
113
- if (scrollTimer.current) {
114
- clearInterval(scrollTimer.current);
115
- }
116
- }
117
- }, [cell, index]),
118
- _useDrag2 = _slicedToArray(_useDrag, 3),
119
- isDrag = _useDrag2[0].isDrag,
120
- drag = _useDrag2[1],
121
- preview = _useDrag2[2];
122
- var libroViewContent = (_instance$container = instance.container) === null || _instance$container === void 0 || (_instance$container = _instance$container.current) === null || _instance$container === void 0 ? void 0 : _instance$container.getElementsByClassName('libro-view-content')[0];
123
- useEffect(function () {
124
- unsubscribe.current = dragDropMonitor.subscribeToStateChange(function () {
125
- instance.isDragging = dragDropMonitor.isDragging();
126
- scrollTimer.current = setInterval(function () {
127
- var currentOffset = dragDropMonitor.getClientOffset();
128
- if (libroViewContent && instance.isDragging && currentOffset) {
129
- var libroViewClientRect = libroViewContent.getBoundingClientRect();
130
- var top = libroViewClientRect.top,
131
- bottom = libroViewClientRect.bottom;
132
- var y = currentOffset.y;
133
- var topLimit = top + 30;
134
- var bottomLimit = bottom - 50;
135
- if (y < topLimit) {
136
- libroViewContent.scrollTop -= 0.5;
137
- } else if (y > bottomLimit) {
138
- libroViewContent.scrollTop += 0.5;
139
- }
140
- }
141
- }, 10);
142
- return function () {
143
- if (scrollTimer.current) {
144
- clearInterval(scrollTimer.current);
145
- }
146
- if (unsubscribe.current) {
147
- unsubscribe.current();
148
- }
149
- };
150
- });
151
- }, [dragDropMonitor]);
152
- useEffect(function () {
153
- // This gets called after every render, by default
154
- // (the first one, and every one after that)
155
-
156
- // Use empty image as a drag preview so browsers don't draw it
157
- // and we can draw whatever we want on the custom drag layer instead.
158
- preview(getEmptyImage(), {
159
- // IE fallback: specify that we'd rather screenshot the node
160
- // when it already knows it's being dragged so we can hide it with CSS.
161
- captureDraggingState: true
162
- });
163
- }, [preview]);
164
- var _useDrop = useDrop({
165
- accept: DragAreaKey,
166
- drop: function drop(item, monitor) {
167
- cellService.getOrCreateView(_objectSpread(_objectSpread({}, item.cell.model.options), {}, {
168
- modelId: item.cell.model.id,
169
- singleSelectionDragPreview: true
170
- }), item.cell.parent.id).then(function (view) {
171
- view.dispose();
172
- return;
173
- }).catch(function (e) {
174
- //
175
- });
176
- if (isCellView(item.cell)) {
177
- var didDrop = monitor.didDrop();
178
- if (didDrop) {
179
- return;
180
- }
181
- var dragIndex = instance.findCellIndex(item.cell);
182
- var dropIndex = instance.findCellIndex(cell);
183
- if (instance.model.selections.length > 0) {
184
- var isDragInSelections = instance.model.selections.findIndex(function (selection) {
185
- return selection.id === item.cell.id;
186
- }) > -1 ? true : false;
187
- var isDropInSelections = instance.model.selections.findIndex(function (selection) {
188
- return selection.id === cell.id;
189
- }) > -1 ? true : false;
190
- if (isDragInSelections && isDropInSelections) {
191
- return;
192
- }
193
- if (isDragInSelections) {
194
- instance.model.exchangeCells(instance.model.selections, dropIndex);
195
- instance.model.scrollToView(cell);
196
- return;
197
- }
198
- }
199
- if (dragIndex < dropIndex) {
200
- instance.model.exchangeCell(dragIndex, dropIndex - 1);
201
- instance.model.scrollToView(cell);
202
- }
203
- if (dragIndex > dropIndex) {
204
- instance.model.exchangeCell(dragIndex, dropIndex);
205
- instance.model.scrollToView(cell);
206
- }
207
- }
208
- return;
209
- },
210
- collect: function collect(monitor) {
211
- return {
212
- isDragOver: monitor.isOver(),
213
- canDrop: monitor.canDrop(),
214
- handlerId: monitor.getHandlerId()
215
- };
216
- }
217
- }),
218
- _useDrop2 = _slicedToArray(_useDrop, 2),
219
- _useDrop2$ = _useDrop2[0],
220
- handlerId = _useDrop2$.handlerId,
221
- isDragOver = _useDrop2$.isDragOver,
222
- drop = _useDrop2[1];
223
- var opacity = isDrag ? 0.4 : 1;
224
- if (instance.model.cellsEditable) {
225
- drop(ref);
226
- }
227
- if (isDrag) {
228
- instance.model.mouseMode = 'drag';
229
- }
230
105
  var isMultiSelected = instance.model.selections.length !== 0 && instance.isSelected(cell);
106
+ var isDragOver = useMemo(function () {
107
+ return index === dragOverIndex;
108
+ }, [index, dragOverIndex]);
109
+ var handleDragStart = useCallback(function (e) {
110
+ if (!instance.model.cellsEditable) {
111
+ e.preventDefault();
112
+ return;
113
+ }
114
+ onDragStart === null || onDragStart === void 0 || onDragStart(e, index);
115
+ }, [index, instance.model.cellsEditable, onDragStart]);
116
+ var handleDragOver = useCallback(function (e) {
117
+ //判断拖拽来源是否cell
118
+ if (fragFromRef.current !== 'cell') {
119
+ return;
120
+ }
121
+ e.preventDefault();
122
+ instance.model.mouseMode = 'drag';
123
+ //判断是向下拖拽还是向上拖拽
124
+ if (sourceIndex < index) {
125
+ setIsDragDown(true);
126
+ } else {
127
+ setIsDragDown(false);
128
+ }
129
+ onDragOver(e, index);
130
+ }, [fragFromRef, index, instance.model, onDragOver, sourceIndex]);
131
+ var handleDrop = useCallback(function (e) {
132
+ e.preventDefault();
133
+ if (fragFromRef.current !== 'cell') {
134
+ return;
135
+ }
136
+ onDrop(e, index);
137
+ }, [fragFromRef, index, onDrop]);
138
+ var handleDragEnd = useCallback(function (e) {
139
+ if (fragFromRef.current !== 'cell') {
140
+ return;
141
+ }
142
+ onDragEnd(e, index);
143
+ }, [fragFromRef, index, onDragEnd]);
144
+ var opacity = useMemo(function () {
145
+ return {
146
+ opacity: isDraging && sourceIndex === index ? 0.4 : 1
147
+ };
148
+ }, [index, isDraging, sourceIndex]);
149
+ var onMouseOver = useCallback(function () {
150
+ setIsMouseOverDragArea(true);
151
+ }, []);
152
+ var onMouseLeave = useCallback(function () {
153
+ setIsMouseOverDragArea(false);
154
+ }, []);
155
+
231
156
  // let isMouseOver = false;
232
- var _useState = useState(false),
233
- _useState2 = _slicedToArray(_useState, 2),
234
- isMouseOverDragArea = _useState2[0],
235
- setIsMouseOverDragArea = _useState2[1];
236
157
  var hasCellHidden = useMemo(function () {
237
158
  return cell.hasCellHidden();
238
159
  }, [cell]);
239
160
  var isCollapsible = CellCollapsible.is(cell);
161
+ var wrapperclassName = useMemo(function () {
162
+ return "libro-dnd-cell-container ".concat(isMultiSelected ? 'multi-selected' : '', " ").concat(hasCellHidden ? 'hidden' : '');
163
+ }, [isMultiSelected]);
240
164
  return /*#__PURE__*/_jsxs("div", {
241
- className: "libro-dnd-cell-container ".concat(isMultiSelected ? 'multi-selected' : '', " ").concat(hasCellHidden ? 'hidden' : ''),
242
- "data-handler-id": handlerId,
243
- style: {
244
- opacity: opacity
245
- },
165
+ className: wrapperclassName,
166
+ onDragOver: handleDragOver,
167
+ onDrop: handleDrop,
168
+ onDragEnd: handleDragEnd,
169
+ style: opacity,
246
170
  ref: ref,
247
171
  id: cell.id,
248
172
  children: [/*#__PURE__*/_jsx(BetweenCellContent, {
249
173
  index: position || index,
250
174
  addCell: cell.parent.addCellAbove
251
- }), isDragOver && /*#__PURE__*/_jsx("div", {
175
+ }), !isDragDown && isDragOver && /*#__PURE__*/_jsx("div", {
252
176
  className: "libro-drag-hoverline"
253
177
  }), isMouseOverDragArea && /*#__PURE__*/_jsx(HolderOutlined, {
254
178
  className: "libro-handle-style"
255
179
  }), /*#__PURE__*/_jsx("div", {
256
180
  className: "libro-drag-area",
257
- ref: drag,
181
+ onDragStart: handleDragStart,
182
+ draggable: instance.model.cellsEditable,
258
183
  onMouseDown: handleMouseDown,
259
184
  onMouseUp: handleMouseUp,
260
- onMouseOver: function onMouseOver() {
261
- return setIsMouseOverDragArea(true);
262
- },
263
- onMouseLeave: function onMouseLeave() {
264
- return setIsMouseOverDragArea(false);
265
- }
185
+ onMouseOver: onMouseOver,
186
+ onMouseLeave: onMouseLeave
266
187
  }), /*#__PURE__*/_jsx("div", {
267
188
  tabIndex: -1,
268
189
  onFocus: handleFocus
@@ -271,7 +192,7 @@ export var DndCellContainer = function DndCellContainer(_ref) {
271
192
  className: "libro-dnd-cell-content",
272
193
  children: /*#__PURE__*/_jsx(ItemRender, {
273
194
  isDragOver: !!isDragOver,
274
- isDrag: !!isDrag,
195
+ isDrag: !!isDraging,
275
196
  cell: cell,
276
197
  isMouseOverDragArea: isMouseOverDragArea
277
198
  })
@@ -288,6 +209,8 @@ export var DndCellContainer = function DndCellContainer(_ref) {
288
209
  type: "default",
289
210
  children: [cell.collapsibleChildNumber, " cell hidden"]
290
211
  })
212
+ }), isDragDown && isDragOver && /*#__PURE__*/_jsx("div", {
213
+ className: "libro-drag-hoverline-last-one"
291
214
  })]
292
215
  });
293
216
  };
@@ -2,6 +2,17 @@ import type { FC, ReactNode } from 'react';
2
2
  import type { DndContentProps } from '../../libro-protocol.js';
3
3
  import type { LibroView } from '../../libro-view.js';
4
4
  import './index.less';
5
+ interface IDragContextType {
6
+ dragOverIndex?: number;
7
+ isDraging: boolean;
8
+ sourceIndex?: number;
9
+ onDragStart: (e: React.DragEvent, index: number) => void;
10
+ onDragOver: (e: React.DragEvent, index: number) => void;
11
+ onDrop: (e: React.DragEvent, index: number) => void;
12
+ onDragEnd: (e?: React.DragEvent, index?: number) => void;
13
+ fragFromRef: any;
14
+ }
15
+ export declare const DragContext: import("react").Context<IDragContextType>;
5
16
  export declare const DndCellRender: FC<DndContentProps>;
6
17
  export declare const DndCellsRender: import("react").ForwardRefExoticComponent<{
7
18
  libroView: LibroView;
@@ -11,4 +22,5 @@ export declare const DndList: import("react").ForwardRefExoticComponent<{
11
22
  libroView: LibroView;
12
23
  children: ReactNode;
13
24
  } & import("react").RefAttributes<HTMLDivElement>>;
25
+ export {};
14
26
  //# sourceMappingURL=dnd-list.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dnd-list.d.ts","sourceRoot":"","sources":["../../../src/components/dnd-component/dnd-list.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAO3C,OAAO,KAAK,EAAY,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAEzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAKrD,OAAO,cAAc,CAAC;AAEtB,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,eAAe,CAY5C,CAAC;AA2BH,eAAO,MAAM,cAAc;eAEZ,SAAS;oBAAkB,SAAS;kDAsFjD,CAAC;AAEH,eAAO,MAAM,OAAO;eAEL,SAAS;cAAY,SAAS;kDA2E3C,CAAC"}
1
+ {"version":3,"file":"dnd-list.d.ts","sourceRoot":"","sources":["../../../src/components/dnd-component/dnd-list.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAgB3C,OAAO,KAAK,EAAY,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAEzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAIrD,OAAO,cAAc,CAAC;AAEtB,UAAU,gBAAgB;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,UAAU,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxD,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,WAAW,EAAE,GAAG,CAAC;CAClB;AAED,eAAO,MAAM,WAAW,2CAiBtB,CAAC;AA6CH,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,eAAe,CAY5C,CAAC;AA2BH,eAAO,MAAM,cAAc;eAEZ,SAAS;oBAAkB,SAAS;kDAsFjD,CAAC;AAEH,eAAO,MAAM,OAAO;eAEL,SAAS;cAAY,SAAS;kDAsQ3C,CAAC"}