@flozy/editor 6.0.5 → 6.0.7

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 (129) hide show
  1. package/dist/Editor/ChatEditor.js +7 -7
  2. package/dist/Editor/CommonEditor.js +81 -25
  3. package/dist/Editor/DialogWrapper.js +31 -25
  4. package/dist/Editor/Editor.css +22 -16
  5. package/dist/Editor/Elements/AI/PopoverAIInput.js +2 -12
  6. package/dist/Editor/Elements/AppHeader/AppHeader.js +3 -3
  7. package/dist/Editor/Elements/Button/EditorButton.js +26 -9
  8. package/dist/Editor/Elements/Color Picker/ColorButtons.js +57 -12
  9. package/dist/Editor/Elements/Color Picker/ColorPicker.css +25 -1
  10. package/dist/Editor/Elements/Color Picker/ColorPicker.js +4 -4
  11. package/dist/Editor/Elements/Color Picker/Styles.js +1 -1
  12. package/dist/Editor/Elements/DataView/DataView.js +4 -3
  13. package/dist/Editor/Elements/DataView/Layouts/DataTypes/NumberType.js +5 -1
  14. package/dist/Editor/Elements/DataView/Layouts/DataTypes/TextType.js +5 -1
  15. package/dist/Editor/Elements/DataView/Layouts/FilterView.js +23 -19
  16. package/dist/Editor/Elements/DataView/Providers/DataViewProvider.js +1 -1
  17. package/dist/Editor/Elements/Embed/Image.js +2 -2
  18. package/dist/Editor/Elements/Form/Form.js +1 -0
  19. package/dist/Editor/Elements/FreeGrid/FreeGrid.js +0 -14
  20. package/dist/Editor/Elements/FreeGrid/styles.js +4 -0
  21. package/dist/Editor/Elements/Grid/GridItem.js +2 -3
  22. package/dist/Editor/Elements/Link/Link.js +70 -43
  23. package/dist/Editor/Elements/List/CheckList.js +2 -1
  24. package/dist/Editor/Elements/Search/SearchAttachment.js +1 -0
  25. package/dist/Editor/Elements/Search/SearchList.js +8 -1
  26. package/dist/Editor/Elements/SimpleText/index.js +8 -1
  27. package/dist/Editor/Elements/SimpleText/style.js +5 -1
  28. package/dist/Editor/Elements/Table/Table.js +3 -3
  29. package/dist/Editor/Elements/Table/TableCell.js +14 -9
  30. package/dist/Editor/Elements/Title/title.js +13 -1
  31. package/dist/Editor/Elements/Variables/Style.js +28 -2
  32. package/dist/Editor/Elements/Variables/VariableButton.js +17 -4
  33. package/dist/Editor/MiniEditor.js +4 -2
  34. package/dist/Editor/Toolbar/FormatTools/Dropdown.js +27 -3
  35. package/dist/Editor/Toolbar/FormatTools/FontFamilyAutocomplete.js +4 -3
  36. package/dist/Editor/Toolbar/FormatTools/MarkButton.js +2 -2
  37. package/dist/Editor/Toolbar/FormatTools/TextSize.js +7 -15
  38. package/dist/Editor/Toolbar/PopupTool/AddTemplates.js +46 -36
  39. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectAlignment.js +3 -1
  40. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectFontSize.js +6 -13
  41. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectList.js +3 -1
  42. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectTypography.js +211 -91
  43. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/index.js +11 -4
  44. package/dist/Editor/Toolbar/PopupTool/PopupToolStyle.js +16 -12
  45. package/dist/Editor/Toolbar/PopupTool/TemplateCard.js +1 -1
  46. package/dist/Editor/Toolbar/PopupTool/TextFormat.js +99 -7
  47. package/dist/Editor/Toolbar/PopupTool/ThemeTextFormat.js +438 -0
  48. package/dist/Editor/Toolbar/PopupTool/index.js +2 -0
  49. package/dist/Editor/Toolbar/toolbarGroups.js +48 -6
  50. package/dist/Editor/assets/svg/ThemeIcons.js +291 -0
  51. package/dist/Editor/common/ColorPickerButton.js +32 -9
  52. package/dist/Editor/common/CustomColorPicker/index.js +106 -0
  53. package/dist/Editor/common/CustomColorPicker/style.js +53 -0
  54. package/dist/Editor/common/CustomDialog/index.js +94 -0
  55. package/dist/Editor/common/CustomDialog/style.js +67 -0
  56. package/dist/Editor/common/CustomSelect.js +33 -0
  57. package/dist/Editor/common/DnD/DragHandleButton.js +1 -1
  58. package/dist/Editor/common/DnD/Draggable.js +0 -1
  59. package/dist/Editor/common/FontLoader/FontList.js +1 -9
  60. package/dist/Editor/common/FontLoader/FontLoader.js +6 -4
  61. package/dist/Editor/common/Icon.js +28 -0
  62. package/dist/Editor/common/ImageSelector/Styles.js +3 -9
  63. package/dist/Editor/common/MentionsPopup/Styles.js +3 -9
  64. package/dist/Editor/common/RnD/ElementSettings/OtherSettings/Settings.js +2 -1
  65. package/dist/Editor/common/RnD/ElementSettings/Settings/AppHeaderSettings.js +3 -2
  66. package/dist/Editor/common/RnD/ElementSettings/Settings/BoxSettings.js +3 -2
  67. package/dist/Editor/common/RnD/ElementSettings/Settings/ButtonSettings.js +3 -2
  68. package/dist/Editor/common/RnD/ElementSettings/Settings/CodeSettings.js +3 -2
  69. package/dist/Editor/common/RnD/ElementSettings/Settings/FormSettings.js +4 -2
  70. package/dist/Editor/common/RnD/ElementSettings/Settings/ImageSettings.js +3 -2
  71. package/dist/Editor/common/RnD/ElementSettings/Settings/TableSettings.js +3 -2
  72. package/dist/Editor/common/RnD/ElementSettings/Settings/VideoSettings.js +3 -2
  73. package/dist/Editor/common/RnD/SwitchViewport/SwitchViewport.js +14 -2
  74. package/dist/Editor/common/RnD/Theme/MainThemeProvider.js +17 -0
  75. package/dist/Editor/common/RnD/Theme/ViewportStimulator.js +6 -3
  76. package/dist/Editor/common/RnD/Utils/gridDropItem.js +5 -4
  77. package/dist/Editor/common/RnD/Utils/index.js +40 -0
  78. package/dist/Editor/common/RnD/index.js +23 -3
  79. package/dist/Editor/common/Shorthands/elements.js +54 -0
  80. package/dist/Editor/common/StyleBuilder/buttonStyle.js +4 -2
  81. package/dist/Editor/common/StyleBuilder/fieldTypes/backgroundImage.js +5 -0
  82. package/dist/Editor/common/StyleBuilder/fieldTypes/bannerSpacing.js +12 -2
  83. package/dist/Editor/common/StyleBuilder/fieldTypes/borderRadius.js +15 -7
  84. package/dist/Editor/common/StyleBuilder/fieldTypes/card.js +10 -2
  85. package/dist/Editor/common/StyleBuilder/fieldTypes/color.js +35 -11
  86. package/dist/Editor/common/StyleBuilder/fieldTypes/fontSize.js +13 -4
  87. package/dist/Editor/common/StyleBuilder/fieldTypes/index.js +3 -1
  88. package/dist/Editor/common/StyleBuilder/fieldTypes/lineSpacing.js +79 -0
  89. package/dist/Editor/common/StyleBuilder/fieldTypes/textOptions.js +15 -7
  90. package/dist/Editor/common/StyleBuilder/pageSettingsStyle.js +4 -0
  91. package/dist/Editor/common/Uploader.js +8 -0
  92. package/dist/Editor/commonStyle.js +58 -63
  93. package/dist/Editor/helper/deserialize/index.js +1 -1
  94. package/dist/Editor/helper/ensureWrappedVariables.js +28 -0
  95. package/dist/Editor/helper/index.js +2 -2
  96. package/dist/Editor/helper/theme.js +224 -3
  97. package/dist/Editor/hooks/useEditorTheme.js +153 -0
  98. package/dist/Editor/hooks/useMouseMove.js +13 -5
  99. package/dist/Editor/plugins/withEmbeds.js +1 -1
  100. package/dist/Editor/plugins/withHTML.js +2 -2
  101. package/dist/Editor/plugins/withLayout.js +1 -1
  102. package/dist/Editor/plugins/withTable.js +1 -1
  103. package/dist/Editor/theme/ThemeList.js +50 -173
  104. package/dist/Editor/theme/index.js +144 -0
  105. package/dist/Editor/themeSettings/ActiveTheme.js +72 -0
  106. package/dist/Editor/themeSettings/buttons/index.js +283 -0
  107. package/dist/Editor/themeSettings/buttons/style.js +21 -0
  108. package/dist/Editor/themeSettings/colorTheme/index.js +292 -0
  109. package/dist/Editor/themeSettings/colorTheme/style.js +77 -0
  110. package/dist/Editor/themeSettings/fonts/PreviewElement.js +121 -0
  111. package/dist/Editor/themeSettings/fonts/index.js +220 -0
  112. package/dist/Editor/themeSettings/fonts/style.js +44 -0
  113. package/dist/Editor/themeSettings/icons.js +60 -0
  114. package/dist/Editor/themeSettings/index.js +320 -0
  115. package/dist/Editor/themeSettings/style.js +152 -0
  116. package/dist/Editor/themeSettingsAI/icons.js +96 -0
  117. package/dist/Editor/themeSettingsAI/index.js +356 -0
  118. package/dist/Editor/themeSettingsAI/saveTheme.js +197 -0
  119. package/dist/Editor/themeSettingsAI/style.js +250 -0
  120. package/dist/Editor/utils/SlateUtilityFunctions.js +161 -42
  121. package/dist/Editor/utils/button.js +0 -14
  122. package/dist/Editor/utils/customHooks/useTableResize.js +2 -1
  123. package/dist/Editor/utils/draftToSlate.js +3 -2
  124. package/dist/Editor/utils/font.js +40 -37
  125. package/dist/Editor/utils/helper.js +88 -19
  126. package/dist/Editor/utils/link.js +1 -1
  127. package/dist/Editor/utils/pageSettings.js +14 -2
  128. package/dist/Editor/utils/table.js +21 -0
  129. package/package.json +5 -2
@@ -7,43 +7,43 @@ export const sizeMap = {
7
7
  export const fontFamilyMap = {
8
8
  PoppinsRegular: "PoppinsRegular",
9
9
  PoppinsBold: "PoppinsBold",
10
- sans: "Helvetica,Arial, sans serif",
11
- serif: "Georgia, Times New Roaman,serif",
12
- monospace: "Monaco, Courier New,monospace",
13
- roboto: "'Roboto', sans-serif",
14
- qwitcher: "'Qwitcher Grypen', cursive",
15
- garamond: "'EB Garamond', serif",
16
- anton: "'Anton', sans-serif",
17
- dmserif: "'DM Serif Text', serif",
18
- inter: "'Inter', sans-serif",
19
- libre: "'Libre Baskerville', serif",
20
- montserrat: "'Montserrat', sans-serif",
21
- opensans: "'Open Sans', sans-serif",
22
- publicsans: "'Public Sans', sans-serif",
23
- raleway: "'Raleway', sans-serif",
24
- spacemono: "'Space Mono', sans-serif",
25
- bulgarian: "'Bulgarian Garamond', monospace",
26
- impact: "'Impact', serif",
27
- redacted: "'Redacted Script', cursive",
28
- greatVibes: "'Great Vibes', cursive",
29
- zeyada: "'Zeyada', cursive",
30
- allura: "'Allura', cursive",
31
- pinyon: "'Pinyon Script', cursive",
32
- muellerhoff: "'Herr Von Muellerhoff', cursive",
33
- dawning: "'Dawning of a New Day', cursive",
10
+ sans: 'Helvetica, Arial, "sans serif"',
11
+ serif: 'Georgia, "Times New Roaman", serif',
12
+ monospace: 'Monaco, "Courier New", monospace',
13
+ roboto: "Roboto, sans-serif",
14
+ qwitcher: '"Qwitcher Grypen", cursive',
15
+ garamond: '"EB Garamond", serif',
16
+ anton: "Anton, sans-serif",
17
+ dmserif: '"DM Serif Text", serif',
18
+ inter: "Inter, sans-serif",
19
+ libre: '"Libre Baskerville", serif',
20
+ montserrat: "Montserrat, sans-serif",
21
+ opensans: '"Open Sans", sans-serif',
22
+ publicsans: '"Public Sans", sans-serif',
23
+ raleway: "Raleway, sans-serif",
24
+ spacemono: '"Space Mono", sans-serif',
25
+ bulgarian: '"Bulgarian Garamond", monospace',
26
+ impact: "Impact, serif",
27
+ redacted: '"Redacted Script", cursive',
28
+ greatVibes: '"Great Vibes", cursive',
29
+ zeyada: "Zeyada, cursive",
30
+ allura: "Allura, cursive",
31
+ pinyon: '"Pinyon Script", cursive',
32
+ muellerhoff: '"Herr Von Muellerhoff", cursive',
33
+ dawning: '"Dawning of a New Day", cursive',
34
34
  // New Font Added for Type Signature
35
- comingsoon: "'Coming Soon', cursive",
36
- dancingScript: "'Dancing Script', cursive",
37
- engagement: "'Engagement', cursive",
38
- gaegu: "'Gaegu', cursive",
39
- ingridDarling: "'Ingrid Darling', cursive",
40
- kitaOne: "'Kite One', sans - serif",
41
- laBelleAurore: "'La Belle Aurore', cursive",
42
- lobster: "'Lobster', cursive",
43
- meaCulpa: "'Mea Culpa', cursive",
44
- meddon: "'Meddon', cursive",
45
- merriWeather: "'Merriweather', serif",
46
- theGirlNextDoor: "'The Girl Next Door', cursive"
35
+ comingsoon: '"Coming Soon", cursive',
36
+ dancingScript: '"Dancing Script", cursive',
37
+ engagement: "Engagement, cursive",
38
+ gaegu: "Gaegu, cursive",
39
+ ingridDarling: '"Ingrid Darling", cursive',
40
+ kitaOne: "Times",
41
+ laBelleAurore: '"La Belle Aurore", cursive',
42
+ lobster: "Lobster, cursive",
43
+ meaCulpa: '"Mea Culpa", cursive',
44
+ meddon: "Meddon, cursive",
45
+ merriWeather: "Merriweather, serif",
46
+ theGirlNextDoor: '"The Girl Next Door", cursive'
47
47
  };
48
48
  export const fontOptions = Object.keys(fontFamilyMap).map(m => {
49
49
  return {
@@ -62,7 +62,10 @@ export const signedTextFonts = Object.keys(fontFamilyMap).slice(-12).map(m => {
62
62
  export const headingMap = {
63
63
  headingOne: "32px",
64
64
  headingTwo: "24px",
65
- headingThree: "19px"
65
+ headingThree: "19px",
66
+ headingFour: "16px",
67
+ headingFive: "13px",
68
+ headingSix: "11px"
66
69
  };
67
70
  export const fontWeightOptions = [{
68
71
  text: "Bold",
@@ -464,6 +464,34 @@ export const decodeString = str => {
464
464
  console.log(err);
465
465
  }
466
466
  };
467
+ export const getContrastColor = color => {
468
+ let r, g, b;
469
+
470
+ // Check if the color is in hex format
471
+ if (color.startsWith("#")) {
472
+ r = parseInt(color.substring(1, 3), 16);
473
+ g = parseInt(color.substring(3, 5), 16);
474
+ b = parseInt(color.substring(5, 7), 16);
475
+ }
476
+ // Check if the color is in RGB/RGBA format
477
+ else if (color.startsWith("rgb")) {
478
+ const rgbValues = color.replace(/^rgba?\(|\s+|\)$/g, "") // Remove the rgb/rgba and spaces
479
+ .split(","); // Split the values into an array
480
+
481
+ r = parseInt(rgbValues[0]);
482
+ g = parseInt(rgbValues[1]);
483
+ b = parseInt(rgbValues[2]);
484
+ } else {
485
+ // If the format is not recognized, default to black text
486
+ return "#000000";
487
+ }
488
+
489
+ // Calculate relative luminance
490
+ const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
491
+
492
+ // Return black for light colors, white for dark colors
493
+ return luminance > 0.5 ? "#000000" : "#FFFFFF";
494
+ };
467
495
  export const onDeleteKey = (event, {
468
496
  editor
469
497
  }) => {
@@ -625,6 +653,10 @@ export const isRestrictedNode = (event, editor) => {
625
653
  return isNodeRestricted;
626
654
  }
627
655
  };
656
+ export function capitalizeFirstLetter(str) {
657
+ if (!str) return str;
658
+ return str.charAt(0).toUpperCase() + str.slice(1);
659
+ }
628
660
  export const insertLineBreakAtEndOfPath = (editor, path) => {
629
661
  try {
630
662
  const [node, nodePath] = Editor.node(editor, path); // Get the node at the specified path
@@ -643,6 +675,13 @@ export const insertLineBreakAtEndOfPath = (editor, path) => {
643
675
  console.log(err);
644
676
  }
645
677
  };
678
+ export function isHavingSelection(editor) {
679
+ try {
680
+ return editor?.selection && !Range.isCollapsed(editor.selection);
681
+ } catch (err) {
682
+ console.log(err);
683
+ }
684
+ }
646
685
  const omitNodes = ["site-settings", "page-settings"];
647
686
  export function getInitialValue(value = [], readOnly) {
648
687
  if (readOnly === "readonly" && value?.length) {
@@ -673,20 +712,17 @@ export function getInitialValue(value = [], readOnly) {
673
712
  }
674
713
  return value;
675
714
  }
676
- export function capitalizeFirstLetter(str) {
677
- if (!str) return str;
678
- return str.charAt(0).toUpperCase() + str.slice(1);
679
- }
680
- export function isHavingSelection(editor) {
681
- try {
682
- return editor?.selection && !Range.isCollapsed(editor.selection);
683
- } catch (err) {
684
- console.log(err);
685
- }
686
- }
687
715
  export function getSelectedCls(defaultCls = "", selected, selectedClsName = "selected") {
688
716
  return `${defaultCls} ${selected ? selectedClsName : ""}`;
689
717
  }
718
+ export function handleNegativeInteger(val) {
719
+ return val < 0 ? 0 : val;
720
+ }
721
+ export const containsSurrogatePair = text => {
722
+ // Match surrogate pairs (high and low surrogate)
723
+ const surrogatePairRegex = /[\uD800-\uDBFF][\uDC00-\uDFFF]/;
724
+ return surrogatePairRegex.test(text);
725
+ };
690
726
  export const getNodeWithType = (editor, nodeType = "", otherOptions) => {
691
727
  try {
692
728
  const options = {
@@ -700,11 +736,6 @@ export const getNodeWithType = (editor, nodeType = "", otherOptions) => {
700
736
  return [];
701
737
  }
702
738
  };
703
- export const containsSurrogatePair = text => {
704
- // Match surrogate pairs (high and low surrogate)
705
- const surrogatePairRegex = /[\uD800-\uDBFF][\uDC00-\uDFFF]/;
706
- return surrogatePairRegex.test(text);
707
- };
708
739
  export const getSlateDom = (editor, range) => {
709
740
  try {
710
741
  const slateDom = ReactEditor.toDOMRange(editor, range);
@@ -713,6 +744,44 @@ export const getSlateDom = (editor, range) => {
713
744
  console.log(err);
714
745
  }
715
746
  };
716
- export function handleNegativeInteger(val) {
717
- return val < 0 ? 0 : val;
718
- }
747
+
748
+ // The inputs inside the dynamic table lose focus after calling `setNodes` on the first `onChange` event.
749
+ // To replicate this issue, insert some paragraph nodes above the dynamic table, then type something in the title.
750
+ // After typing the first word, the input loses focus.
751
+ export const focusDynamicTableInput = e => {
752
+ setTimeout(() => {
753
+ const input = document.getElementById(e.target.id);
754
+ if (input) {
755
+ // Check if the input is not already focused
756
+ if (document.activeElement !== input) {
757
+ const length = input.value.length;
758
+ // Focus on the input
759
+ input.focus();
760
+
761
+ // number input not supports selection
762
+ if (e.target.type !== "number") {
763
+ // Set the cursor to the end
764
+ input.setSelectionRange(length, length);
765
+ }
766
+ }
767
+ }
768
+ }, 0);
769
+ };
770
+ export const clearWindowSelection = () => {
771
+ const selection = window.getSelection();
772
+ if (selection) {
773
+ selection.removeAllRanges(); // Clears the selection
774
+ }
775
+ };
776
+
777
+ export const viewSlateSelection = () => {
778
+ // if ai is opened, remove the window selection class and open then slate selection, To resolve: focussing on the ai input removes window selection automatically
779
+ clearWindowSelection();
780
+ const selectionBg = "rgba(35, 131, 226, 0.35)";
781
+ const root = document.documentElement;
782
+ root.style.setProperty("--slate-highlight-bg", selectionBg);
783
+ };
784
+ export const hideSlateSelection = () => {
785
+ const root = document.documentElement;
786
+ root.style.setProperty("--slate-highlight-bg", "none");
787
+ };
@@ -3,7 +3,7 @@ import { isBlockActive } from "./SlateUtilityFunctions";
3
3
  export const createLinkNode = (href, showInNewTab, text, linkType) => ({
4
4
  type: "link",
5
5
  href,
6
- target: showInNewTab ? "_blank" : "_self",
6
+ target: showInNewTab === "_blank" ? "_blank" : "_self",
7
7
  linkType,
8
8
  children: [{
9
9
  text
@@ -9,7 +9,13 @@ export const findPageSettings = editor => {
9
9
  path: null,
10
10
  element: {
11
11
  pageProps: {
12
- pageWidth: "fixed"
12
+ pageWidth: "fixed",
13
+ "lineHeight": {
14
+ "xs": 1.43,
15
+ "sm": 1.43,
16
+ "md": 1.43,
17
+ "lg": 1.43
18
+ }
13
19
  }
14
20
  }
15
21
  };
@@ -34,7 +40,13 @@ export const getPageSettings = editor => {
34
40
  path: null,
35
41
  element: {
36
42
  pageProps: {
37
- pageWidth: "fixed"
43
+ pageWidth: "fixed",
44
+ "lineHeight": {
45
+ "xs": 1.43,
46
+ "sm": 1.43,
47
+ "md": 1.43,
48
+ "lg": 1.43
49
+ }
38
50
  }
39
51
  }
40
52
  };
@@ -753,4 +753,25 @@ export const clearCellText = (editor, currentCellPath) => {
753
753
  } catch (err) {
754
754
  console.log(err);
755
755
  }
756
+ };
757
+ export const getTableColumns = element => {
758
+ const {
759
+ columns,
760
+ children
761
+ } = element || {};
762
+ if (columns) {
763
+ return columns;
764
+ }
765
+ const firstRow = children?.length ? children[0] : {};
766
+ return firstRow?.children?.length || 0;
767
+ };
768
+ export const getTableRows = element => {
769
+ const {
770
+ rows,
771
+ children
772
+ } = element || {};
773
+ if (rows) {
774
+ return rows;
775
+ }
776
+ return children?.length || 0;
756
777
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flozy/editor",
3
- "version": "6.0.5",
3
+ "version": "6.0.7",
4
4
  "description": "An Editor for flozy app brain",
5
5
  "files": [
6
6
  "dist"
@@ -69,7 +69,10 @@
69
69
  "storybook": "storybook dev -p 6006",
70
70
  "build-storybook": "NODE_OPTIONS='--max_old_space_size=4096' storybook build",
71
71
  "publish:npm": "rm -rf dist && mkdir dist && babel src/components -d dist --copy-files",
72
- "publish:local": "rm -rf /Users/agmac03/flozy/client/node_modules/@flozy/editor/dist && babel src/components -d /Users/agmac03/flozy/client/node_modules/@flozy/editor/dist --copy-files"
72
+ "publish:local": "rm -rf /Users/agmac03/flozy/client/node_modules/@flozy/editor/dist && babel src/components -d /Users/agmac03/flozy/client/node_modules/@flozy/editor/dist --copy-files",
73
+ "publish:flozy": "./publish-flozy.sh",
74
+ "publish:flozy2": "./publish-flozy2.sh",
75
+ "publish:permission": "chmod +x publish-flozy.sh && chmod +x publish-flozy2.sh"
73
76
  },
74
77
  "eslintConfig": {
75
78
  "extends": [