@frontify/guideline-blocks-settings 0.32.1 → 0.33.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.
Files changed (100) hide show
  1. package/CHANGELOG.md +147 -0
  2. package/dist/components/Attachments/AttachmentItem.es.js +128 -109
  3. package/dist/components/Attachments/AttachmentItem.es.js.map +1 -1
  4. package/dist/components/Attachments/Attachments.es.js +9 -1
  5. package/dist/components/Attachments/Attachments.es.js.map +1 -1
  6. package/dist/components/Attachments/AttachmentsButtonTrigger.es.js +17 -9
  7. package/dist/components/Attachments/AttachmentsButtonTrigger.es.js.map +1 -1
  8. package/dist/components/BlockItemWrapper/BlockItemWrapper.es.js +38 -44
  9. package/dist/components/BlockItemWrapper/BlockItemWrapper.es.js.map +1 -1
  10. package/dist/components/BlockItemWrapper/Toolbar/AttachmentsToolbarButton/AttachmentsToolbarButton.es.js +33 -0
  11. package/dist/components/BlockItemWrapper/Toolbar/AttachmentsToolbarButton/AttachmentsToolbarButton.es.js.map +1 -0
  12. package/dist/components/BlockItemWrapper/Toolbar/AttachmentsToolbarButton/AttachmentsToolbarButtonTrigger.es.js +26 -0
  13. package/dist/components/BlockItemWrapper/Toolbar/AttachmentsToolbarButton/AttachmentsToolbarButtonTrigger.es.js.map +1 -0
  14. package/dist/components/BlockItemWrapper/Toolbar/BaseToolbarButton.es.js +28 -0
  15. package/dist/components/BlockItemWrapper/Toolbar/BaseToolbarButton.es.js.map +1 -0
  16. package/dist/components/BlockItemWrapper/Toolbar/DragHandleToolbarButton/DragHandleToolbarButton.es.js +35 -0
  17. package/dist/components/BlockItemWrapper/Toolbar/DragHandleToolbarButton/DragHandleToolbarButton.es.js.map +1 -0
  18. package/dist/components/BlockItemWrapper/Toolbar/FlyoutToolbarButton/FlyoutToolbarButton.es.js +44 -0
  19. package/dist/components/BlockItemWrapper/Toolbar/FlyoutToolbarButton/FlyoutToolbarButton.es.js.map +1 -0
  20. package/dist/components/BlockItemWrapper/Toolbar/MenuToolbarButton/MenuToolbarButton.es.js +25 -0
  21. package/dist/components/BlockItemWrapper/Toolbar/MenuToolbarButton/MenuToolbarButton.es.js.map +1 -0
  22. package/dist/components/BlockItemWrapper/Toolbar/MenuToolbarButton/ToolbarFlyoutMenu.es.js +29 -0
  23. package/dist/components/BlockItemWrapper/Toolbar/MenuToolbarButton/ToolbarFlyoutMenu.es.js.map +1 -0
  24. package/dist/components/BlockItemWrapper/Toolbar/Toolbar.es.js +11 -112
  25. package/dist/components/BlockItemWrapper/Toolbar/Toolbar.es.js.map +1 -1
  26. package/dist/components/BlockItemWrapper/Toolbar/ToolbarButton/ToolbarButton.es.js +12 -0
  27. package/dist/components/BlockItemWrapper/Toolbar/ToolbarButton/ToolbarButton.es.js.map +1 -0
  28. package/dist/components/BlockItemWrapper/Toolbar/ToolbarButtonTooltip.es.js +20 -0
  29. package/dist/components/BlockItemWrapper/Toolbar/ToolbarButtonTooltip.es.js.map +1 -0
  30. package/dist/components/BlockItemWrapper/Toolbar/context/DragPreviewContext.es.js +11 -0
  31. package/dist/components/BlockItemWrapper/Toolbar/context/DragPreviewContext.es.js.map +1 -0
  32. package/dist/components/BlockItemWrapper/Toolbar/context/MultiFlyoutContext.es.js +18 -0
  33. package/dist/components/BlockItemWrapper/Toolbar/context/MultiFlyoutContext.es.js.map +1 -0
  34. package/dist/components/BlockItemWrapper/Toolbar/helpers.es.js +1 -1
  35. package/dist/components/BlockItemWrapper/Toolbar/helpers.es.js.map +1 -1
  36. package/dist/components/BlockItemWrapper/Toolbar/hooks/useMultiFlyoutState.es.js +18 -0
  37. package/dist/components/BlockItemWrapper/Toolbar/hooks/useMultiFlyoutState.es.js.map +1 -0
  38. package/dist/helpers/mapColorPalettes.es.js +20 -8
  39. package/dist/helpers/mapColorPalettes.es.js.map +1 -1
  40. package/dist/index.cjs.js +3 -3
  41. package/dist/index.cjs.js.map +1 -1
  42. package/dist/index.d.ts +92 -27
  43. package/dist/index.es.js +205 -187
  44. package/dist/index.es.js.map +1 -1
  45. package/dist/index.umd.js +3 -3
  46. package/dist/index.umd.js.map +1 -1
  47. package/dist/styles.css +1 -1
  48. package/package.json +4 -2
  49. package/setupTests.ts +7 -2
  50. package/src/components/Attachments/AttachmentItem.tsx +21 -0
  51. package/src/components/Attachments/Attachments.spec.ct.tsx +20 -1
  52. package/src/components/Attachments/Attachments.tsx +8 -4
  53. package/src/components/Attachments/AttachmentsButtonTrigger.tsx +11 -3
  54. package/src/components/Attachments/types.ts +4 -2
  55. package/src/components/BlockItemWrapper/BlockItemWrapper.spec.ct.tsx +37 -38
  56. package/src/components/BlockItemWrapper/BlockItemWrapper.tsx +44 -48
  57. package/src/components/BlockItemWrapper/Toolbar/AttachmentsToolbarButton/AttachmentsToolbarButton.spec.tsx +96 -0
  58. package/src/components/BlockItemWrapper/Toolbar/AttachmentsToolbarButton/AttachmentsToolbarButton.tsx +42 -0
  59. package/src/components/BlockItemWrapper/Toolbar/AttachmentsToolbarButton/AttachmentsToolbarButtonTrigger.spec.tsx +44 -0
  60. package/src/components/BlockItemWrapper/Toolbar/AttachmentsToolbarButton/AttachmentsToolbarButtonTrigger.tsx +24 -0
  61. package/src/components/BlockItemWrapper/Toolbar/AttachmentsToolbarButton/index.ts +3 -0
  62. package/src/components/BlockItemWrapper/Toolbar/BaseToolbarButton.spec.tsx +40 -0
  63. package/src/components/BlockItemWrapper/Toolbar/BaseToolbarButton.tsx +37 -0
  64. package/src/components/BlockItemWrapper/Toolbar/DragHandleToolbarButton/DragHandleToolbarButton.spec.tsx +89 -0
  65. package/src/components/BlockItemWrapper/Toolbar/DragHandleToolbarButton/DragHandleToolbarButton.tsx +40 -0
  66. package/src/components/BlockItemWrapper/Toolbar/DragHandleToolbarButton/index.ts +3 -0
  67. package/src/components/BlockItemWrapper/Toolbar/FlyoutToolbarButton/FlyoutToolbarButton.spec.tsx +140 -0
  68. package/src/components/BlockItemWrapper/Toolbar/FlyoutToolbarButton/FlyoutToolbarButton.tsx +61 -0
  69. package/src/components/BlockItemWrapper/Toolbar/FlyoutToolbarButton/index.ts +3 -0
  70. package/src/components/BlockItemWrapper/Toolbar/MenuToolbarButton/MenuToolbarButton.spec.tsx +77 -0
  71. package/src/components/BlockItemWrapper/Toolbar/MenuToolbarButton/MenuToolbarButton.tsx +30 -0
  72. package/src/components/BlockItemWrapper/Toolbar/MenuToolbarButton/ToolbarFlyoutMenu.spec.tsx +63 -0
  73. package/src/components/BlockItemWrapper/Toolbar/MenuToolbarButton/ToolbarFlyoutMenu.tsx +40 -0
  74. package/src/components/BlockItemWrapper/Toolbar/MenuToolbarButton/index.ts +3 -0
  75. package/src/components/BlockItemWrapper/Toolbar/Toolbar.spec.tsx +189 -57
  76. package/src/components/BlockItemWrapper/Toolbar/Toolbar.tsx +29 -126
  77. package/src/components/BlockItemWrapper/Toolbar/ToolbarButton/ToolbarButton.spec.tsx +70 -0
  78. package/src/components/BlockItemWrapper/Toolbar/ToolbarButton/ToolbarButton.tsx +19 -0
  79. package/src/components/BlockItemWrapper/Toolbar/ToolbarButton/index.ts +3 -0
  80. package/src/components/BlockItemWrapper/Toolbar/ToolbarButtonTooltip.tsx +25 -0
  81. package/src/components/BlockItemWrapper/Toolbar/context/DragPreviewContext.tsx +15 -0
  82. package/src/components/BlockItemWrapper/Toolbar/context/MultiFlyoutContext.tsx +25 -0
  83. package/src/components/BlockItemWrapper/Toolbar/context/index.ts +4 -0
  84. package/src/components/BlockItemWrapper/Toolbar/helpers.ts +1 -1
  85. package/src/components/BlockItemWrapper/Toolbar/hooks/index.ts +3 -0
  86. package/src/components/BlockItemWrapper/Toolbar/hooks/useMultiFlyoutState.spec.tsx +59 -0
  87. package/src/components/BlockItemWrapper/Toolbar/hooks/useMultiFlyoutState.ts +24 -0
  88. package/src/components/BlockItemWrapper/Toolbar/index.ts +6 -0
  89. package/src/components/BlockItemWrapper/Toolbar/types.ts +10 -30
  90. package/src/components/BlockItemWrapper/types.ts +1 -2
  91. package/src/helpers/mapColorPalettes.spec.ts +14 -113
  92. package/src/helpers/mapColorPalettes.ts +51 -8
  93. package/src/hooks/useAttachments.spec.tsx +1 -0
  94. package/tsconfig.json +1 -1
  95. package/dist/components/BlockItemWrapper/Toolbar/ToolbarAttachments.es.js +0 -27
  96. package/dist/components/BlockItemWrapper/Toolbar/ToolbarAttachments.es.js.map +0 -1
  97. package/dist/components/BlockItemWrapper/Toolbar/ToolbarAttachmentsTrigger.es.js +0 -12
  98. package/dist/components/BlockItemWrapper/Toolbar/ToolbarAttachmentsTrigger.es.js.map +0 -1
  99. package/src/components/BlockItemWrapper/Toolbar/ToolbarAttachments.tsx +0 -29
  100. package/src/components/BlockItemWrapper/Toolbar/ToolbarAttachmentsTrigger.tsx +0 -14
package/dist/index.d.ts CHANGED
@@ -16,6 +16,7 @@ import { Color as Color_2 } from '@frontify/sidebar-settings';
16
16
  import type { ColorInputBlock as ColorInputBlock_2 } from '@frontify/sidebar-settings';
17
17
  import { ColorPalette } from '@frontify/app-bridge';
18
18
  import { CSSProperties } from 'react';
19
+ import { Dispatch } from 'react';
19
20
  import type { Document as Document_2 } from '@frontify/app-bridge';
20
21
  import type { DocumentPage } from '@frontify/app-bridge';
21
22
  import type { DocumentSection } from '@frontify/app-bridge';
@@ -25,6 +26,7 @@ import type { DynamicSupportedBlock as DynamicSupportedBlock_2 } from '@frontify
25
26
  import type { FC } from 'react';
26
27
  import type { FileType } from '@frontify/app-bridge';
27
28
  import type { FontInputBlock as FontInputBlock_2 } from '@frontify/sidebar-settings';
29
+ import { HTMLAttributes } from 'react';
28
30
  import type { InputBlock as InputBlock_2 } from '@frontify/sidebar-settings';
29
31
  import { InsertNodesOptions } from '@udecode/plate';
30
32
  import { JSX as JSX_2 } from 'react/jsx-runtime';
@@ -35,6 +37,7 @@ import type { LinkChooserBlock as LinkChooserBlock_2 } from '@frontify/sidebar-s
35
37
  import { MarkupElement } from '@frontify/fondue';
36
38
  import { MenuItemStyle } from '@frontify/fondue';
37
39
  import type { MultiInputBlock as MultiInputBlock_2 } from '@frontify/sidebar-settings';
40
+ import { MutableRefObject } from 'react';
38
41
  import type { NotificationBlock as NotificationBlock_2 } from '@frontify/sidebar-settings';
39
42
  import { Palette } from '@frontify/fondue';
40
43
  import { PlateEditor } from '@udecode/plate';
@@ -49,6 +52,7 @@ import type { SectionHeadingBlock as SectionHeadingBlock_2 } from '@frontify/sid
49
52
  import type { SegmentedControlsBlock as SegmentedControlsBlock_2 } from '@frontify/sidebar-settings';
50
53
  import { SensorDescriptor } from '@dnd-kit/core';
51
54
  import { SensorOptions } from '@dnd-kit/core';
55
+ import { SetStateAction } from 'react';
52
56
  import type { SettingBlock as SettingBlock_2 } from '@frontify/sidebar-settings';
53
57
  import type { SimpleSettingBlock as SimpleSettingBlock_2 } from '@frontify/sidebar-settings';
54
58
  import type { SwitchBlock as SwitchBlock_2 } from '@frontify/sidebar-settings';
@@ -90,7 +94,7 @@ export declare type AttachmentsProps = {
90
94
  onUpload: (uploadedAttachments: Asset[]) => Promise<void>;
91
95
  onBrowse: (browserAttachments: Asset[]) => void;
92
96
  onSorted: (sortedAttachments: Asset[]) => void;
93
- triggerComponent?: (props: AttachmentsTriggerProps) => JSX.Element;
97
+ triggerComponent?: (props: AttachmentsTriggerProps) => ReactElement;
94
98
  } & ({
95
99
  isOpen?: never;
96
100
  onOpenChange?: never;
@@ -105,9 +109,17 @@ export declare const AttachmentsProvider: ({ appBridge, children, assetId, }: {
105
109
  assetId: string;
106
110
  }) => JSX_2.Element;
107
111
 
112
+ export declare const AttachmentsToolbarButton: ({ flyoutId, }: AttachmentsToolbarButtonProps) => JSX_2.Element;
113
+
114
+ declare type AttachmentsToolbarButtonProps = {
115
+ flyoutId?: string;
116
+ };
117
+
108
118
  export declare type AttachmentsTriggerProps = {
109
119
  children: ReactNode;
110
120
  isFlyoutOpen: boolean;
121
+ triggerProps: HTMLAttributes<HTMLButtonElement>;
122
+ triggerRef: MutableRefObject<HTMLButtonElement>;
111
123
  };
112
124
 
113
125
  declare type BackgroundSettingsType = {
@@ -121,11 +133,6 @@ declare type BackgroundSettingsType = {
121
133
 
122
134
  export declare type BaseBlock<T = undefined> = BaseBlock_2<AppBridgeBlock, T>;
123
135
 
124
- declare type BaseToolbarItem = {
125
- icon: JSX.Element;
126
- tooltip?: string;
127
- };
128
-
129
136
  export declare const BlockButtonStyles: Record<string, CSSProperties & {
130
137
  hover?: CSSProperties;
131
138
  }>;
@@ -180,14 +187,13 @@ export declare type BlockInjectButtonProps = {
180
187
  verticalLayout?: boolean;
181
188
  };
182
189
 
183
- export declare const BlockItemWrapper: ({ children, toolbarFlyoutItems, toolbarItems, shouldHideWrapper, shouldHideComponent, isDragging, shouldFillContainer, outlineOffset, shouldBeShown, showAttachments, }: BlockItemWrapperProps) => ReactElement;
190
+ export declare const BlockItemWrapper: ({ children, toolbarItems, shouldHideWrapper, shouldHideComponent, isDragging, shouldFillContainer, outlineOffset, shouldBeShown, showAttachments, }: BlockItemWrapperProps) => ReactElement;
184
191
 
185
192
  export declare type BlockItemWrapperProps = {
186
193
  children: ReactNode;
187
194
  shouldHideWrapper?: boolean;
188
195
  shouldHideComponent?: boolean;
189
196
  toolbarItems: (ToolbarItem | undefined)[];
190
- toolbarFlyoutItems: FlyoutToolbarItem[][];
191
197
  isDragging?: boolean;
192
198
  shouldFillContainer?: boolean;
193
199
  outlineOffset?: number;
@@ -335,9 +341,9 @@ export declare type ButtonPluginProps = Omit<PluginProps, 'styles'> & {
335
341
  appBridge: AppBridgeBlock;
336
342
  };
337
343
 
338
- declare type ButtonToolbarItem = BaseToolbarItem & {
339
- onClick: () => void;
340
- };
344
+ export declare type ButtonToolbarItem = {
345
+ type: 'button';
346
+ } & ToolbarButtonProps;
341
347
 
342
348
  export declare type ChecklistBlock = ChecklistBlock_2<AppBridgeBlock>;
343
349
 
@@ -388,10 +394,14 @@ export declare class Custom3Plugin extends Plugin_2 {
388
394
 
389
395
  export declare const customCoordinatesGetterFactory: (columnGap: number, rowGap: number) => KeyboardCoordinateGetter;
390
396
 
397
+ export declare const DEFAULT_ATTACHMENTS_BUTTON_ID = "attachments";
398
+
391
399
  export declare const DEFAULT_DRAG_TOOLTIP = "Drag or press \u21B5 to move";
392
400
 
393
401
  export declare const DEFAULT_DRAGGING_TOOLTIP = "Move with \u2191\u2193\u2190\u2192 and confirm with \u21B5";
394
402
 
403
+ export declare const DEFAULT_MENU_BUTTON_ID = "menu";
404
+
395
405
  /**
396
406
  * Type helper to make it easier to export a theme, accepts a direct {@link BlockConfigExport} object.
397
407
  */
@@ -409,11 +419,24 @@ declare type DownloadButtonProps = {
409
419
  onDownload: () => void;
410
420
  };
411
421
 
412
- declare type DraghandleToolbarItem = BaseToolbarItem & {
422
+ export declare const DragHandleToolbarButton: ({ tooltip, icon, setActivatorNodeRef, draggableProps, }: DragHandleToolbarButtonProps) => JSX_2.Element;
423
+
424
+ export declare type DragHandleToolbarButtonProps = {
425
+ icon?: ReactNode;
426
+ tooltip?: string;
413
427
  draggableProps: Record<string, unknown>;
414
428
  setActivatorNodeRef?: (node: HTMLElement | null) => void;
415
429
  };
416
430
 
431
+ export declare type DragHandleToolbarItem = {
432
+ type: 'dragHandle';
433
+ } & DragHandleToolbarButtonProps;
434
+
435
+ export declare const DragPreviewContextProvider: ({ children, isDragPreview, }: {
436
+ children: ReactNode;
437
+ isDragPreview: boolean;
438
+ }) => JSX_2.Element;
439
+
417
440
  export declare type DropdownBlock = DropdownBlock_2<AppBridgeBlock>;
418
441
 
419
442
  export declare type DynamicSettingBlock<Block extends DynamicSupportedBlock = DynamicSupportedBlock> = DynamicSettingBlock_2<AppBridgeBlock, Block>;
@@ -422,13 +445,21 @@ export declare type DynamicSupportedBlock = DynamicSupportedBlock_2<AppBridgeBlo
422
445
 
423
446
  export declare const ELEMENT_BUTTON = "button";
424
447
 
425
- export declare type FlyoutToolbarItem = {
426
- title: string;
427
- onClick: () => void;
428
- icon: JSX.Element;
429
- style?: MenuItemStyle;
448
+ export declare const FlyoutToolbarButton: ({ content, icon, tooltip, flyoutId, flyoutFooter, flyoutHeader, }: FlyoutToolbarButtonProps) => JSX_2.Element;
449
+
450
+ export declare type FlyoutToolbarButtonProps = {
451
+ content: ReactNode;
452
+ icon: ReactNode;
453
+ tooltip: ReactNode;
454
+ flyoutId: string;
455
+ flyoutFooter?: ReactNode;
456
+ flyoutHeader?: ReactNode;
430
457
  };
431
458
 
459
+ export declare type FlyoutToolbarItem = {
460
+ type: 'flyout';
461
+ } & FlyoutToolbarButtonProps;
462
+
432
463
  export declare type FontInputBlock = FontInputBlock_2<AppBridgeBlock>;
433
464
 
434
465
  export declare const getBackgroundColorStyles: (backgroundColor: Color) => CSSProperties;
@@ -703,6 +734,18 @@ declare type MarginSettingsType_2 = {
703
734
 
704
735
  export declare const marginStyleMap: Record<Margin, string>;
705
736
 
737
+ export declare const MenuToolbarButton: ({ items, flyoutId, tooltip, }: MenuToolbarButtonProps) => JSX_2.Element;
738
+
739
+ export declare type MenuToolbarButtonProps = {
740
+ items: ToolbarFlyoutMenuItem[][];
741
+ flyoutId?: string;
742
+ tooltip?: string;
743
+ };
744
+
745
+ export declare type MenuToolbarItem = {
746
+ type: 'menu';
747
+ } & MenuToolbarButtonProps;
748
+
706
749
  /**
707
750
  * Moves an item from the 'from' position to the 'to' position and updates the array
708
751
  *
@@ -713,6 +756,15 @@ export declare const marginStyleMap: Record<Margin, string>;
713
756
  */
714
757
  export declare const moveItemInArray: <T>(array: T[], from: number, to: number) => T[];
715
758
 
759
+ export declare const MultiFlyoutContextProvider: ({ children, openFlyoutIds, setOpenFlyoutIds, }: {
760
+ children: ReactNode;
761
+ } & MultiFlyoutContextType) => JSX_2.Element;
762
+
763
+ export declare type MultiFlyoutContextType = {
764
+ openFlyoutIds: string[];
765
+ setOpenFlyoutIds: Dispatch<SetStateAction<string[]>>;
766
+ };
767
+
716
768
  export declare type MultiInputBlock = MultiInputBlock_2<AppBridgeBlock>;
717
769
 
718
770
  export declare type NotificationBlock = NotificationBlock_2<AppBridgeBlock>;
@@ -940,24 +992,28 @@ export declare const toHex8String: (color: Color) => string;
940
992
  */
941
993
  export declare const toHexString: (color: Color) => string;
942
994
 
943
- export declare const Toolbar: ({ items, flyoutMenu, attachments, isDragging }: ToolbarProps) => JSX_2.Element;
995
+ export declare const Toolbar: ({ items, attachments }: ToolbarProps) => JSX_2.Element;
944
996
 
945
- export declare type ToolbarFlyoutState = {
946
- isOpen: boolean;
947
- onOpenChange: (isOpen: boolean) => void;
997
+ declare type ToolbarButtonProps = {
998
+ icon: JSX_2.Element;
999
+ tooltip?: string;
1000
+ onClick: () => void;
948
1001
  };
949
1002
 
950
- export declare type ToolbarItem = DraghandleToolbarItem | ButtonToolbarItem;
1003
+ declare type ToolbarFlyoutMenuItem = {
1004
+ title: string;
1005
+ onClick: () => void;
1006
+ icon: JSX_2.Element;
1007
+ style?: MenuItemStyle;
1008
+ };
1009
+
1010
+ export declare type ToolbarItem = DragHandleToolbarItem | ButtonToolbarItem | FlyoutToolbarItem | MenuToolbarItem;
951
1011
 
952
1012
  export declare type ToolbarProps = {
953
1013
  items: ToolbarItem[];
954
- flyoutMenu: ToolbarFlyoutState & {
955
- items: FlyoutToolbarItem[][];
956
- };
957
- attachments: ToolbarFlyoutState & {
1014
+ attachments: {
958
1015
  isEnabled: boolean;
959
1016
  };
960
- isDragging?: boolean;
961
1017
  };
962
1018
 
963
1019
  /**
@@ -1079,6 +1135,15 @@ export declare const useAttachmentsContext: () => {
1079
1135
 
1080
1136
  export declare const useDndSensors: (columnGap?: number, rowGap?: number) => SensorDescriptor<SensorOptions>[];
1081
1137
 
1138
+ export declare const useDragPreviewContext: () => boolean;
1139
+
1140
+ export declare const useMultiFlyoutContext: () => MultiFlyoutContextType;
1141
+
1142
+ export declare const useMultiFlyoutState: (flyoutId: string) => {
1143
+ isOpen: boolean;
1144
+ onOpenChange: (isFlyoutOpen: boolean) => void;
1145
+ };
1146
+
1082
1147
  export declare type ValueOrPromisedValue<T> = ValueOrPromisedValue_2<AppBridgeBlock, T>;
1083
1148
 
1084
1149
  /**