@jotforminc/dnd-builder 3.4.2 → 3.4.5

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 (109) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/index.d.ts +2 -0
  3. package/lib/cjs/assets/svg/angle_down.svg.js +22 -0
  4. package/lib/cjs/assets/svg/angle_down.svg.js.map +1 -0
  5. package/lib/cjs/assets/svg/angle_left.svg.js +22 -0
  6. package/lib/cjs/assets/svg/angle_left.svg.js.map +1 -0
  7. package/lib/cjs/assets/svg/angle_right.svg.js +22 -0
  8. package/lib/cjs/assets/svg/angle_right.svg.js.map +1 -0
  9. package/lib/cjs/assets/svg/angle_up.svg.js +22 -0
  10. package/lib/cjs/assets/svg/angle_up.svg.js.map +1 -0
  11. package/lib/cjs/assets/svg/contextmenu/moveToBack.svg.js +9 -18
  12. package/lib/cjs/assets/svg/contextmenu/moveToBack.svg.js.map +1 -1
  13. package/lib/cjs/assets/svg/contextmenu/moveToBackward.svg.js +12 -18
  14. package/lib/cjs/assets/svg/contextmenu/moveToBackward.svg.js.map +1 -1
  15. package/lib/cjs/assets/svg/contextmenu/moveToForward.svg.js +12 -18
  16. package/lib/cjs/assets/svg/contextmenu/moveToForward.svg.js.map +1 -1
  17. package/lib/cjs/assets/svg/contextmenu/moveToFront.svg.js +9 -18
  18. package/lib/cjs/assets/svg/contextmenu/moveToFront.svg.js.map +1 -1
  19. package/lib/cjs/components/Builder/Builder.js +3 -0
  20. package/lib/cjs/components/Builder/Builder.js.map +1 -1
  21. package/lib/cjs/components/Builder/ContextMenu.js +1 -1
  22. package/lib/cjs/components/Builder/ContextMenu.js.map +1 -1
  23. package/lib/cjs/components/Builder/PageActions.js +19 -19
  24. package/lib/cjs/components/Builder/PageActions.js.map +1 -1
  25. package/lib/cjs/components/Builder/ZoomControls.js +8 -8
  26. package/lib/cjs/components/Builder/ZoomControls.js.map +1 -1
  27. package/lib/cjs/components/DraggableItem/DraggableItemActions.js +12 -12
  28. package/lib/cjs/components/DraggableItem/DraggableItemActions.js.map +1 -1
  29. package/lib/cjs/components/DraggableItem/DraggableItemLayer.js +1 -1
  30. package/lib/cjs/components/DraggableItem/DraggableItemLayer.js.map +1 -1
  31. package/lib/cjs/components/PageItemResizer.js +1 -1
  32. package/lib/cjs/components/PageItemResizer.js.map +1 -1
  33. package/lib/cjs/components/Panels/RightPanel/RightPanel.js +10 -3
  34. package/lib/cjs/components/Panels/RightPanel/RightPanel.js.map +1 -1
  35. package/lib/cjs/components/TextEditor/QuillEditor.js +8 -10
  36. package/lib/cjs/components/TextEditor/QuillEditor.js.map +1 -1
  37. package/lib/cjs/components/TextEditor/TextEditor.js +2 -10
  38. package/lib/cjs/components/TextEditor/TextEditor.js.map +1 -1
  39. package/lib/cjs/components/withClickOutside.js +7 -1
  40. package/lib/cjs/components/withClickOutside.js.map +1 -1
  41. package/lib/cjs/constants/eventIgnoredRoles.js +2 -0
  42. package/lib/cjs/constants/eventIgnoredRoles.js.map +1 -1
  43. package/lib/cjs/contexts/BuilderContext.js +1 -0
  44. package/lib/cjs/contexts/BuilderContext.js.map +1 -1
  45. package/lib/cjs/contexts/Providers.js +6 -1
  46. package/lib/cjs/contexts/Providers.js.map +1 -1
  47. package/lib/cjs/styles/_jfReportsFloatings.scss +109 -2
  48. package/lib/cjs/styles/_jfReportsPages.scss +21 -28
  49. package/lib/cjs/styles/_jfReportsReportItem.scss +79 -53
  50. package/lib/cjs/styles/_jfReportsTextEditor.scss +2 -2
  51. package/lib/cjs/styles/_jfReportsViewModes.scss +4 -4
  52. package/lib/cjs/utils/icons.js +8 -0
  53. package/lib/cjs/utils/icons.js.map +1 -1
  54. package/lib/cjs/utils/useKeyboardActions.js +3 -0
  55. package/lib/cjs/utils/useKeyboardActions.js.map +1 -1
  56. package/lib/esm/assets/svg/angle_down.svg.js +20 -0
  57. package/lib/esm/assets/svg/angle_down.svg.js.map +1 -0
  58. package/lib/esm/assets/svg/angle_left.svg.js +20 -0
  59. package/lib/esm/assets/svg/angle_left.svg.js.map +1 -0
  60. package/lib/esm/assets/svg/angle_right.svg.js +20 -0
  61. package/lib/esm/assets/svg/angle_right.svg.js.map +1 -0
  62. package/lib/esm/assets/svg/angle_up.svg.js +20 -0
  63. package/lib/esm/assets/svg/angle_up.svg.js.map +1 -0
  64. package/lib/esm/assets/svg/contextmenu/moveToBack.svg.js +9 -18
  65. package/lib/esm/assets/svg/contextmenu/moveToBack.svg.js.map +1 -1
  66. package/lib/esm/assets/svg/contextmenu/moveToBackward.svg.js +12 -18
  67. package/lib/esm/assets/svg/contextmenu/moveToBackward.svg.js.map +1 -1
  68. package/lib/esm/assets/svg/contextmenu/moveToForward.svg.js +12 -18
  69. package/lib/esm/assets/svg/contextmenu/moveToForward.svg.js.map +1 -1
  70. package/lib/esm/assets/svg/contextmenu/moveToFront.svg.js +9 -18
  71. package/lib/esm/assets/svg/contextmenu/moveToFront.svg.js.map +1 -1
  72. package/lib/esm/components/Builder/Builder.js +3 -0
  73. package/lib/esm/components/Builder/Builder.js.map +1 -1
  74. package/lib/esm/components/Builder/ContextMenu.js +1 -1
  75. package/lib/esm/components/Builder/ContextMenu.js.map +1 -1
  76. package/lib/esm/components/Builder/PageActions.js +19 -19
  77. package/lib/esm/components/Builder/PageActions.js.map +1 -1
  78. package/lib/esm/components/Builder/ZoomControls.js +8 -8
  79. package/lib/esm/components/Builder/ZoomControls.js.map +1 -1
  80. package/lib/esm/components/DraggableItem/DraggableItemActions.js +12 -12
  81. package/lib/esm/components/DraggableItem/DraggableItemActions.js.map +1 -1
  82. package/lib/esm/components/DraggableItem/DraggableItemLayer.js +1 -1
  83. package/lib/esm/components/DraggableItem/DraggableItemLayer.js.map +1 -1
  84. package/lib/esm/components/PageItemResizer.js +1 -1
  85. package/lib/esm/components/PageItemResizer.js.map +1 -1
  86. package/lib/esm/components/Panels/RightPanel/RightPanel.js +10 -3
  87. package/lib/esm/components/Panels/RightPanel/RightPanel.js.map +1 -1
  88. package/lib/esm/components/TextEditor/QuillEditor.js +8 -10
  89. package/lib/esm/components/TextEditor/QuillEditor.js.map +1 -1
  90. package/lib/esm/components/TextEditor/TextEditor.js +3 -11
  91. package/lib/esm/components/TextEditor/TextEditor.js.map +1 -1
  92. package/lib/esm/components/withClickOutside.js +7 -1
  93. package/lib/esm/components/withClickOutside.js.map +1 -1
  94. package/lib/esm/constants/eventIgnoredRoles.js +2 -1
  95. package/lib/esm/constants/eventIgnoredRoles.js.map +1 -1
  96. package/lib/esm/contexts/BuilderContext.js +1 -0
  97. package/lib/esm/contexts/BuilderContext.js.map +1 -1
  98. package/lib/esm/contexts/Providers.js +6 -1
  99. package/lib/esm/contexts/Providers.js.map +1 -1
  100. package/lib/esm/styles/_jfReportsFloatings.scss +109 -2
  101. package/lib/esm/styles/_jfReportsPages.scss +21 -28
  102. package/lib/esm/styles/_jfReportsReportItem.scss +79 -53
  103. package/lib/esm/styles/_jfReportsTextEditor.scss +2 -2
  104. package/lib/esm/styles/_jfReportsViewModes.scss +4 -4
  105. package/lib/esm/utils/icons.js +4 -0
  106. package/lib/esm/utils/icons.js.map +1 -1
  107. package/lib/esm/utils/useKeyboardActions.js +4 -1
  108. package/lib/esm/utils/useKeyboardActions.js.map +1 -1
  109. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Providers.js","sources":["../../../src/contexts/Providers.js"],"sourcesContent":["import PropTypes from 'prop-types';\nimport { BuilderProvider } from './BuilderContext';\nimport { PresentationProvider } from './PresentationContext';\nimport { PropProvider } from './PropContext';\n\nconst Providers = ({\n children,\n lastScrollPosition,\n mode,\n onRightPanelsToggled,\n presentationBarActions,\n shouldShowRightPanelInitially,\n useFixedPresentationBar,\n ...props\n}) => {\n return (\n <BuilderProvider\n lastScrollPosition={lastScrollPosition}\n onRightPanelsToggled={onRightPanelsToggled}\n shouldShowRightPanelInitially={shouldShowRightPanelInitially}\n >\n <PropProvider {...props}>\n {mode === 'customize' ? children : (\n <PresentationProvider\n presentationBarActions={presentationBarActions}\n useFixedPresentationBar={useFixedPresentationBar}\n >\n {children}\n </PresentationProvider>\n )}\n </PropProvider>\n </BuilderProvider>\n );\n};\n\nProviders.propTypes = {\n children: PropTypes.node.isRequired,\n /** Last scroll position */\n lastScrollPosition: PropTypes.number,\n /** Mode of the report */\n mode: PropTypes.oneOf(['customize', 'presentation', 'preview', 'print']),\n /** Function called when the slides or the right panel is\n * toggled takes a boolean value to indicate whether or\n * not the panel is toggled open.\n */\n onRightPanelsToggled: PropTypes.func,\n /** To pass in action definitions that will be rendered as buttons */\n presentationBarActions: PropTypes.arrayOf(PropTypes.shape({})),\n /** Flag for fixed action bar */\n shouldShowRightPanelInitially: PropTypes.bool,\n /** Flag for whether to show the right panel initially */\n useFixedPresentationBar: PropTypes.bool,\n};\n\nexport default Providers;\n"],"names":["Providers","children","lastScrollPosition","mode","onRightPanelsToggled","presentationBarActions","shouldShowRightPanelInitially","useFixedPresentationBar","props","_jsx","propTypes","PropTypes","node","isRequired","number","oneOf","func","arrayOf","shape","bool"],"mappings":";;;;;;;;;;;;;;;;;;IAKMA,SAAS,GAAG,SAAZA,SAAY,OASZ;AAAA,MARJC,QAQI,QARJA,QAQI;AAAA,MAPJC,kBAOI,QAPJA,kBAOI;AAAA,MANJC,IAMI,QANJA,IAMI;AAAA,MALJC,oBAKI,QALJA,oBAKI;AAAA,MAJJC,sBAII,QAJJA,sBAII;AAAA,MAHJC,6BAGI,QAHJA,6BAGI;AAAA,MAFJC,uBAEI,QAFJA,uBAEI;AAAA,MADDC,KACC;;AACJ,sBACEC,IAAC,eAAD;AACE,IAAA,kBAAkB,EAAEP,kBADtB;AAEE,IAAA,oBAAoB,EAAEE,oBAFxB;AAGE,IAAA,6BAA6B,EAAEE,6BAHjC;AAAA,2BAKEG,IAAC,YAAD,kCAAkBD,KAAlB;AAAA,gBACGL,IAAI,KAAK,WAAT,GAAuBF,QAAvB,gBACCQ,IAAC,oBAAD;AACE,QAAA,sBAAsB,EAAEJ,sBAD1B;AAEE,QAAA,uBAAuB,EAAEE,uBAF3B;AAAA,kBAIGN;AAJH;AAFJ;AALF,IADF;AAkBD;;AAEDD,SAAS,CAACU,SAAV,GAAsB;AACpBT,EAAAA,QAAQ,EAAEU,SAAS,CAACC,IAAV,CAAeC,UADL;;AAEpB;AACAX,EAAAA,kBAAkB,EAAES,SAAS,CAACG,MAHV;;AAIpB;AACAX,EAAAA,IAAI,EAAEQ,SAAS,CAACI,KAAV,CAAgB,CAAC,WAAD,EAAc,cAAd,EAA8B,SAA9B,EAAyC,OAAzC,CAAhB,CALc;;AAMpB;AACF;AACA;AACA;AACEX,EAAAA,oBAAoB,EAAEO,SAAS,CAACK,IAVZ;;AAWpB;AACAX,EAAAA,sBAAsB,EAAEM,SAAS,CAACM,OAAV,CAAkBN,SAAS,CAACO,KAAV,CAAgB,EAAhB,CAAlB,CAZJ;;AAapB;AACAZ,EAAAA,6BAA6B,EAAEK,SAAS,CAACQ,IAdrB;;AAepB;AACAZ,EAAAA,uBAAuB,EAAEI,SAAS,CAACQ;AAhBf,CAAtB;;;;"}
1
+ {"version":3,"file":"Providers.js","sources":["../../../src/contexts/Providers.js"],"sourcesContent":["import PropTypes from 'prop-types';\nimport { BuilderProvider } from './BuilderContext';\nimport { PresentationProvider } from './PresentationContext';\nimport { PropProvider } from './PropContext';\n\nconst Providers = ({\n children,\n clickOutsideIgnoreSelectors,\n lastScrollPosition,\n mode,\n onRightPanelsToggled,\n presentationBarActions,\n shouldShowRightPanelInitially,\n useFixedPresentationBar,\n ...props\n}) => {\n return (\n <BuilderProvider\n clickOutsideIgnoreSelectors={clickOutsideIgnoreSelectors}\n lastScrollPosition={lastScrollPosition}\n onRightPanelsToggled={onRightPanelsToggled}\n shouldShowRightPanelInitially={shouldShowRightPanelInitially}\n >\n <PropProvider {...props}>\n {mode === 'customize' ? children : (\n <PresentationProvider\n presentationBarActions={presentationBarActions}\n useFixedPresentationBar={useFixedPresentationBar}\n >\n {children}\n </PresentationProvider>\n )}\n </PropProvider>\n </BuilderProvider>\n );\n};\n\nProviders.propTypes = {\n children: PropTypes.node.isRequired,\n /** CSS selectors ignored by right panel click-outside logic */\n clickOutsideIgnoreSelectors: PropTypes.arrayOf(PropTypes.string),\n /** Last scroll position */\n lastScrollPosition: PropTypes.number,\n /** Mode of the report */\n mode: PropTypes.oneOf(['customize', 'presentation', 'preview', 'print']),\n /** Function called when the slides or the right panel is\n * toggled takes a boolean value to indicate whether or\n * not the panel is toggled open.\n */\n onRightPanelsToggled: PropTypes.func,\n /** To pass in action definitions that will be rendered as buttons */\n presentationBarActions: PropTypes.arrayOf(PropTypes.shape({})),\n /** Flag for fixed action bar */\n shouldShowRightPanelInitially: PropTypes.bool,\n /** Flag for whether to show the right panel initially */\n useFixedPresentationBar: PropTypes.bool,\n};\n\nexport default Providers;\n"],"names":["Providers","children","clickOutsideIgnoreSelectors","lastScrollPosition","mode","onRightPanelsToggled","presentationBarActions","shouldShowRightPanelInitially","useFixedPresentationBar","props","_jsx","propTypes","PropTypes","node","isRequired","arrayOf","string","number","oneOf","func","shape","bool"],"mappings":";;;;;;;;;;;;;;;;;;IAKMA,SAAS,GAAG,SAAZA,SAAY,OAUZ;AAAA,MATJC,QASI,QATJA,QASI;AAAA,MARJC,2BAQI,QARJA,2BAQI;AAAA,MAPJC,kBAOI,QAPJA,kBAOI;AAAA,MANJC,IAMI,QANJA,IAMI;AAAA,MALJC,oBAKI,QALJA,oBAKI;AAAA,MAJJC,sBAII,QAJJA,sBAII;AAAA,MAHJC,6BAGI,QAHJA,6BAGI;AAAA,MAFJC,uBAEI,QAFJA,uBAEI;AAAA,MADDC,KACC;;AACJ,sBACEC,IAAC,eAAD;AACE,IAAA,2BAA2B,EAAER,2BAD/B;AAEE,IAAA,kBAAkB,EAAEC,kBAFtB;AAGE,IAAA,oBAAoB,EAAEE,oBAHxB;AAIE,IAAA,6BAA6B,EAAEE,6BAJjC;AAAA,2BAMEG,IAAC,YAAD,kCAAkBD,KAAlB;AAAA,gBACGL,IAAI,KAAK,WAAT,GAAuBH,QAAvB,gBACCS,IAAC,oBAAD;AACE,QAAA,sBAAsB,EAAEJ,sBAD1B;AAEE,QAAA,uBAAuB,EAAEE,uBAF3B;AAAA,kBAIGP;AAJH;AAFJ;AANF,IADF;AAmBD;;AAEDD,SAAS,CAACW,SAAV,GAAsB;AACpBV,EAAAA,QAAQ,EAAEW,SAAS,CAACC,IAAV,CAAeC,UADL;;AAEpB;AACAZ,EAAAA,2BAA2B,EAAEU,SAAS,CAACG,OAAV,CAAkBH,SAAS,CAACI,MAA5B,CAHT;;AAIpB;AACAb,EAAAA,kBAAkB,EAAES,SAAS,CAACK,MALV;;AAMpB;AACAb,EAAAA,IAAI,EAAEQ,SAAS,CAACM,KAAV,CAAgB,CAAC,WAAD,EAAc,cAAd,EAA8B,SAA9B,EAAyC,OAAzC,CAAhB,CAPc;;AAQpB;AACF;AACA;AACA;AACEb,EAAAA,oBAAoB,EAAEO,SAAS,CAACO,IAZZ;;AAapB;AACAb,EAAAA,sBAAsB,EAAEM,SAAS,CAACG,OAAV,CAAkBH,SAAS,CAACQ,KAAV,CAAgB,EAAhB,CAAlB,CAdJ;;AAepB;AACAb,EAAAA,6BAA6B,EAAEK,SAAS,CAACS,IAhBrB;;AAiBpB;AACAb,EAAAA,uBAAuB,EAAEI,SAAS,CAACS;AAlBf,CAAtB;;;;"}
@@ -151,13 +151,13 @@
151
151
  }
152
152
  }
153
153
 
154
- .controllerItem {
154
+ :where(.controllerItem) {
155
155
  background: #343C6A;
156
156
  border-radius: 3px;
157
157
  border: none;
158
158
  transition: $transition;
159
159
 
160
- &:hover {
160
+ &:where(:hover) {
161
161
  background: rgba(111, 118, 167, 0.6);
162
162
  }
163
163
  }
@@ -197,6 +197,113 @@
197
197
  }
198
198
  }
199
199
 
200
+ // Page Toolbar new styles //
201
+ &.page-toolbar {
202
+ position: absolute;
203
+ top: 58px;
204
+ right: -40px;
205
+ gap: 4px;
206
+
207
+ .controllerItem {
208
+ max-width: 24px;
209
+ max-height: 24px;
210
+ min-width: 24px;
211
+ min-height: 24px;
212
+
213
+ .toolbar-icon {
214
+ width: 16px;
215
+ height: 16px;
216
+ }
217
+ }
218
+ }
219
+
220
+ // Zoom Toolbar new styles //
221
+ &.zoom-toolbar {
222
+ position: absolute;
223
+ bottom: 20px;
224
+ left: 20px;
225
+ gap: 4px;
226
+ z-index: 2;
227
+
228
+ .controllerItem {
229
+ max-width: 32px;
230
+ max-height: 32px;
231
+ min-width: 32px;
232
+ min-height: 32px;
233
+
234
+ .toolbar-icon {
235
+ width: 20px;
236
+ height: 20px;
237
+ }
238
+ }
239
+ }
240
+
241
+ &.page-toolbar, &.zoom-toolbar {
242
+ display: flex;
243
+ flex-direction: column;
244
+ align-items: flex-start;
245
+ justify-content: flex-start;
246
+ transition: $transition;
247
+ border-radius: 3px;
248
+
249
+ .floatingController-container {
250
+ display: flex;
251
+ padding: 4px;
252
+ flex-direction: column;
253
+ justify-content: center;
254
+ align-items: center;
255
+ gap: 4px;
256
+ box-shadow: 0 4px 8px 0 rgba(84, 95, 111, 0.15), 0 0 2px 0 rgba(37, 45, 91, 0.1);
257
+ }
258
+
259
+ :where(.floatingController-container + .floatingController-container) {
260
+ margin-top: 0;
261
+ }
262
+
263
+ .controllerItem {
264
+ width: 100%;
265
+ height: 100%;
266
+ display: flex;
267
+ padding: 4px;
268
+ flex-shrink: 0;
269
+ flex-direction: column;
270
+ justify-content: center;
271
+ align-items: center;
272
+ border-radius: 4px;
273
+ background-color: #F9F9FF;
274
+ transition: $transition;
275
+
276
+ .toolbar-icon {
277
+ color: #0A1551;
278
+ fill: #0A1551;
279
+ transition: $transition;
280
+ }
281
+
282
+ &:where(:hover) {
283
+ background-color: #E3E5F5;
284
+ transition: $transition;
285
+ }
286
+
287
+ &:hover.primary {
288
+ background-color: #EDF8FF;
289
+
290
+ .toolbar-icon {
291
+ color: #0075E3;
292
+ fill: #0075E3;
293
+ }
294
+ }
295
+
296
+ &:hover.error {
297
+ background-color: #FEF2F2;
298
+
299
+ .toolbar-icon {
300
+ color: #DC2626;
301
+ fill: #DC2626;
302
+ }
303
+ }
304
+ }
305
+ }
306
+
200
307
 
201
308
  &.forZoom {
202
309
  left: 15px;
@@ -153,43 +153,40 @@
153
153
 
154
154
 
155
155
  .contextMenu-wrapper {
156
- border-radius: 3px;
157
- background: #fff;
158
- color: #fff;
159
- display: block;
156
+ display: flex;
157
+ padding: 4px;
158
+ flex-direction: column;
159
+ justify-content: center;
160
+ align-items: flex-start;
160
161
  position: absolute;
161
162
  width: 225px;
162
163
  z-index: 10;
163
- box-shadow: 0 0 8px 1px rgba(0, 0, 0, 0.2);
164
+ border-radius: 4px;
165
+ background: #252D5B;
166
+ color: #FFFFFF;
164
167
  }
165
168
 
166
169
  .contextMenu-button {
167
- transition: .2s ease-in-out;
168
170
  cursor: pointer;
169
171
  display: flex;
170
172
  align-items: center;
171
173
  justify-content: flex-start;
172
174
  background: none;
173
175
  border: none;
174
- height: 45px;
176
+ height: 40px;
175
177
  width: 100%;
176
178
  font-size: 0.875rem;
177
- padding-left: 14px;
179
+ padding: 0 8px;
178
180
  text-align: left;
181
+ color: #FFFFFF;
182
+ transition: .2s ease-in-out;
179
183
 
180
184
  .contextMenu-icon {
185
+ color: #FFFFFF;
181
186
  margin-right: 9px;
182
- width: 15px;
183
- height: 14px;
184
-
185
- .icon-lock {
186
- width: 16px;
187
- height: 14px;
188
- fill: $blue;
189
- stroke: $blue;
190
-
191
- > path { fill: $blue; }
192
- }
187
+ width: 16px;
188
+ height: 16px;
189
+ fill: #FFFFFF;
193
190
  }
194
191
 
195
192
  .contextMenu-text {
@@ -200,20 +197,16 @@
200
197
  }
201
198
 
202
199
  &:hover {
203
- background: #f0f0f0;
200
+ background-color: #454E80;
201
+ transition: all 0.3s ease;
204
202
  }
205
203
  }
206
204
 
207
205
  .contextMenu-button.isDanger {
206
+ color: #DC2626;
208
207
 
209
208
  .contextMenu-icon {
210
- svg {
211
- width: 16px;
212
- height: 16px;
213
- }
209
+ color: #DC2626;
210
+ fill: #DC2626;
214
211
  }
215
212
  }
216
-
217
- .contextMenu-button + .contextMenu-button {
218
- border-top: 1px solid #F0F0F0;
219
- }
@@ -74,17 +74,16 @@
74
74
  content: "";
75
75
  position: absolute;
76
76
  display: block;
77
- background-color: #ddefff;
78
- border: 1px solid $blue;
77
+ background-color: #FFFFFF;
78
+ border: 3px solid #0099FF;
79
79
  transition: .3s ease-in-out;
80
80
  }
81
81
 
82
82
  &:not(.forLine):after {
83
- left: 2px;
84
- top: 2px;
85
- right: 2px;
86
- bottom: 2px;
87
- border-radius: 2px;
83
+ inset: 2px;
84
+ width: 3px;
85
+ height: 3px;
86
+ border-radius: 3px;
88
87
  }
89
88
 
90
89
  &.forLine {
@@ -93,26 +92,28 @@
93
92
  }
94
93
  &:not(.isVertical) {
95
94
  &:after {
96
- top: 1px;
95
+ top: -0.5px;
97
96
  bottom: 1px;
98
- left: calc(50% - 10px);
99
- width: 18px;
97
+ left: calc(50% - 6px);
98
+ width: 8px;
99
+ height: 4px;
100
100
  }
101
101
  }
102
102
 
103
103
  &.isVertical {
104
104
  &:after {
105
- top: calc(50% - 10px);
106
- left: 1px;
107
- right: 1px;
108
- height: 18px;
105
+ top: calc(50% - 6px);
106
+ left: -0.5px;
107
+ right: -0.5px;
108
+ height: 8px;
109
+ width: 4px;
109
110
  }
110
111
  }
111
112
  }
112
113
 
113
114
  &:hover {
114
115
  &:after {
115
- background-color: #B4DCFF;
116
+ background-color: #FFFFFF;
116
117
  }
117
118
  }
118
119
  }
@@ -123,7 +124,7 @@
123
124
  top: -50px;
124
125
  padding: 5px;
125
126
  background-color: #ddefff;
126
- border: 1px solid $blue;
127
+ border: 2px solid #0099FF;
127
128
  border-radius: 50%;
128
129
 
129
130
  &:before {
@@ -148,8 +149,7 @@
148
149
  }
149
150
 
150
151
  .reportItemResizer {
151
- border: 1px solid $blue;
152
- box-shadow: 0 0 0 3px rgba(106, 110, 143, 0.15);
152
+ border: 3px solid #0099FF;
153
153
  border-radius: 3px;
154
154
 
155
155
  &.hideVerticalHandle {
@@ -216,56 +216,82 @@
216
216
  }
217
217
 
218
218
  .jfReport {
219
- .reportItemMenu {
219
+ .report-item-toolbar {
220
220
  position: absolute;
221
- top: 0;
221
+ top: 50%;
222
+ transform: translateY(-50%);
222
223
  right: -24px;
223
- background-color: $blue;
224
- border-radius: 4px;
224
+ background-color: #FFFFFF;
225
+ padding: 4px;
226
+ border-radius: 3px;
227
+ display: flex;
228
+ flex-direction: column;
229
+ align-items: center;
230
+ justify-content: center;
225
231
  text-align: center;
226
232
  pointer-events: all;
233
+ z-index: 2;
227
234
  animation: .2s fadeRight forwards;
235
+ gap: 4px;
236
+ box-shadow: 0 4px 8px 0 rgba(84, 95, 111, 0.15), 0 0 2px 0 rgba(37, 45, 91, 0.1);
228
237
 
229
238
  &-item {
230
- display: inline-block;
231
- padding: 6px 5px;
232
- background-color: transparent;
233
-
234
- svg {
235
- width: 14px;
236
- height: 14px;
237
- backface-visibility: hidden;
238
- transition: .3s ease-in-out;
239
- transform: translateZ(0);
239
+ max-width: 24px;
240
+ max-height: 24px;
241
+ min-width: 24px;
242
+ min-height: 24px;
243
+ width: 100%;
244
+ height: 100%;
245
+ display: flex;
246
+ padding: 4px;
247
+ flex-shrink: 0;
248
+ flex-direction: column;
249
+ justify-content: center;
250
+ align-items: center;
251
+ border-radius: 4px;
252
+ background-color: #F9F9FF;
253
+ transition: $transition;
254
+
255
+ .toolbar-icon {
256
+ width: 16px;
257
+ height: 16px;
258
+ color: #0A1551;
259
+ fill: #0A1551;
260
+ transition: $transition;
240
261
  }
241
- }
242
262
 
243
- &:not(.forLocked) {
244
- padding: 0 4px;
245
- .reportItemMenu-item {
246
- display: inline-flex;
247
- align-items: center;
248
- justify-content: center;
249
- width: 20px;
250
- height: 20px;
251
- padding: 0;
252
- border-radius: 3px;
253
- transition: 0.3s ease-in;
263
+ &:where(:hover) {
264
+ background-color: #E3E5F5;
265
+ transition: $transition;
266
+ }
254
267
 
255
- + .reportItemMenu-item {
256
- margin-top: 4px;
257
- }
268
+ &:hover.primary {
269
+ background-color: #EDF8FF;
258
270
 
259
- &:first-child {
260
- margin-top: 4px;
271
+ .toolbar-icon {
272
+ color: #0075E3;
273
+ fill: #0075E3;
261
274
  }
275
+ }
276
+
277
+ &:hover.error {
278
+ background-color: #FEF2F2;
262
279
 
263
- &:last-child {
264
- margin-bottom: 4px;
280
+ .toolbar-icon {
281
+ color: #DC2626;
282
+ fill: #DC2626;
265
283
  }
284
+ }
285
+ }
286
+
287
+ &.isLocked.forLocked {
288
+ background-color: #C8CEED;
289
+
290
+ .report-item-toolbar-item {
291
+ background-color: #C8CEED;
266
292
 
267
293
  &:hover {
268
- background-color: rgba(255, 255, 255, 0.2);
294
+ background-color: #E3E5F5;
269
295
  }
270
296
  }
271
297
  }
@@ -277,7 +303,7 @@
277
303
  opacity: 0;
278
304
  }
279
305
  100% {
280
- right: -35px;
306
+ right: -38px;
281
307
  opacity: 1;
282
308
  }
283
309
  }
@@ -291,7 +291,7 @@
291
291
  }
292
292
  }
293
293
 
294
- .reportItemMenu + .ql-toolbar.ql-snow {
294
+ .report-item-toolbar + .ql-toolbar.ql-snow {
295
295
  .ql-stroke {
296
296
  /* stylelint-disable-next-line declaration-no-important */
297
297
  stroke: #6F76A7 !important;
@@ -304,6 +304,6 @@
304
304
  }
305
305
  }
306
306
 
307
- .reportItemMenu + .ql-toolbar.ql-snow .ql-button:hover {
307
+ .report-item-toolbar + .ql-toolbar.ql-snow .ql-button:hover {
308
308
  background-color: #F3F3FE;
309
309
  }
@@ -44,21 +44,21 @@
44
44
  fill: $additionalGray;
45
45
  }
46
46
 
47
- .reportItemMenu-item:hover .isWhite {
47
+ .report-item-toolbar-item:hover .isWhite {
48
48
  fill: darken($additionalGray, 10);
49
49
  opacity: 1;
50
50
  }
51
51
  }
52
52
 
53
53
  .reportItem {
54
- outline: 1px solid transparent;
54
+ outline: 3px solid transparent;
55
55
  outline-offset: -1px;
56
56
  }
57
57
 
58
58
  [data-zoom="0.5"] .reportItem,
59
59
  [data-zoom="0.6"] .reportItem,
60
60
  [data-zoom="0.7"] .reportItem {
61
- outline-width: 2px;
61
+ outline-width: 3px;
62
62
  }
63
63
 
64
64
  .reportItemWrapper.isSelected:hover .isLocked {
@@ -70,6 +70,6 @@
70
70
  }
71
71
 
72
72
  .reportItemWrapper:not(.isSelected) .reportItem:not(.isLocked):hover {
73
- outline-color: $blue;
73
+ outline-color: #0099FF;
74
74
  }
75
75
  }
@@ -48,6 +48,10 @@ export { default as settings } from '../assets/svg/settings.svg.js';
48
48
  export { default as arrowUp } from '../assets/svg/arrow_up.svg.js';
49
49
  export { default as arrowLeft } from '../assets/svg/arrow_left.svg.js';
50
50
  export { default as arrowRight } from '../assets/svg/arrow_right.svg.js';
51
+ export { default as angleDown } from '../assets/svg/angle_down.svg.js';
52
+ export { default as angleUp } from '../assets/svg/angle_up.svg.js';
53
+ export { default as angleLeft } from '../assets/svg/angle_left.svg.js';
54
+ export { default as angleRight } from '../assets/svg/angle_right.svg.js';
51
55
  export { default as duplicateLine } from '../assets/svg/page-actions/duplicate_line.svg.js';
52
56
  export { default as plus } from '../assets/svg/plus.svg.js';
53
57
  export { default as minus } from '../assets/svg/minus.svg.js';
@@ -1 +1 @@
1
- {"version":3,"file":"icons.js","sources":["../../../src/utils/icons.js"],"sourcesContent":["// General //\n\nexport { default as down } from '../assets/svg/arrow_down.svg';\nexport { default as drag } from '../assets/svg/settings/drag.svg';\nexport { default as trash } from '../assets/svg/trash.svg';\nexport { default as close } from '../assets/svg/close.svg';\nexport { default as rotate } from '../assets/svg/rotate.svg';\nexport { default as customize } from '../assets/svg/customize.svg';\nexport { default as slides } from '../assets/svg/slides.svg';\nexport { default as allSlides } from '../assets/svg/all_slides.svg';\nexport { default as settingsToggle } from '../assets/svg/settings_toggle.svg';\n\n// Elements //\n\nexport { default as header } from '../assets/svg/toolbox/header.svg';\nexport { default as icon } from '../assets/svg/toolbox/icon.svg';\nexport { default as image } from '../assets/svg/toolbox/image.svg';\nexport { default as label } from '../assets/svg/toolbox/label.svg';\nexport { default as shapes } from '../assets/svg/toolbox/shapes.svg';\nexport { default as table } from '../assets/svg/toolbox/table.svg';\nexport { default as textElement } from '../assets/svg/toolbox/text_element.svg';\nexport { default as text } from '../assets/svg/toolbox/text.svg';\nexport { default as star } from '../assets/svg/toolbox/star.svg';\nexport { default as email } from '../assets/svg/toolbox/email.svg';\nexport { default as singleChoice } from '../assets/svg/toolbox/single_choice.svg';\nexport { default as multipleChoice } from '../assets/svg/toolbox/multiple_choice.svg';\nexport { default as lock } from '../assets/svg/settings/lock.svg';\nexport { default as unlock } from '../assets/svg/settings/unlock.svg';\n\n// Settings //\n\nexport { default as bold } from '../assets/svg/settings/font_bold.svg';\nexport { default as italic } from '../assets/svg/settings/font_italic.svg';\nexport { default as underline } from '../assets/svg/settings/font_underline.svg';\nexport { default as alignLeft } from '../assets/svg/settings/align_left.svg';\nexport { default as alignCenter } from '../assets/svg/settings/align_center.svg';\nexport { default as alignRight } from '../assets/svg/settings/align_right.svg';\n\n// Chart Settings //\n\nexport { default as pie } from '../assets/svg/settings/chart_pie.svg';\nexport { default as bar } from '../assets/svg/settings/chart_bar.svg';\nexport { default as line } from '../assets/svg/settings/chart_line.svg';\nexport { default as basic } from '../assets/svg/settings/chart_basic.svg';\nexport { default as donut } from '../assets/svg/settings/chart_donut.svg';\nexport { default as grid } from '../assets/svg/settings/chart_grid.svg';\nexport { default as textGrid } from '../assets/svg/settings/chart_textGrid.svg';\nexport { default as column } from '../assets/svg/settings/chart_column.svg';\nexport { default as layout } from '../assets/svg/settings/layout.svg';\nexport { default as starRating } from '../assets/svg/star_rating.svg';\nexport { default as heartRating } from '../assets/svg/heart_rating.svg';\n\n// Shape Settings //\n\nexport { default as rectangleIcon } from '../assets/svg/settings/rectangle.svg';\nexport { default as ellipseIcon } from '../assets/svg/settings/ellipse.svg';\nexport { default as triangleIcon } from '../assets/svg/settings/triangle.svg';\nexport { default as starIcon } from '../assets/svg/settings/star.svg';\nexport { default as lineIcon } from '../assets/svg/settings/line.svg';\n\n// Element Menu //\n\nexport { default as duplicate } from '../assets/svg/duplicate.svg';\nexport { default as settings } from '../assets/svg/settings.svg';\n\n// Page Menu //\n\nexport { default as arrowDown } from '../assets/svg/arrow_down.svg';\nexport { default as arrowUp } from '../assets/svg/arrow_up.svg';\nexport { default as arrowLeft } from '../assets/svg/arrow_left.svg';\nexport { default as arrowRight } from '../assets/svg/arrow_right.svg';\nexport { default as duplicateLine } from '../assets/svg/page-actions/duplicate_line.svg';\nexport { default as plus } from '../assets/svg/plus.svg';\nexport { default as minus } from '../assets/svg/minus.svg';\nexport { default as trashLine } from '../assets/svg/page-actions/trash_line.svg';\nexport { default as pageSettings } from '../assets/svg/page_settings.svg';\n\n// Context Menu //\n\nexport { default as moveToFront } from '../assets/svg/contextmenu/moveToFront.svg';\nexport { default as moveToForward } from '../assets/svg/contextmenu/moveToForward.svg';\nexport { default as moveToBackward } from '../assets/svg/contextmenu/moveToBackward.svg';\nexport { default as moveToBack } from '../assets/svg/contextmenu/moveToBack.svg';\n\n// Presentation //\n\nexport { default as print } from '../assets/svg/presentation/print.svg';\nexport { default as download } from '../assets/svg/presentation/download.svg';\nexport { default as play } from '../assets/svg/presentation/play.svg';\nexport { default as enterFullscreen } from '../assets/svg/presentation/enter_fullscreen.svg';\nexport { default as exitFullscreen } from '../assets/svg/presentation/exit_fullscreen.svg';\nexport { default as pause } from '../assets/svg/presentation/pause.svg';\nexport { default as share } from '../assets/svg/presentation/share.svg';\nexport { default as attachment } from '../assets/svg/presentation/attachment.svg';\nexport { default as pen } from '../assets/svg/presentation/pen.svg';\n\n// Password Modal //\n\nexport { default as key } from '../assets/svg/presentation/key.svg';\nexport { default as eye } from '../assets/svg/presentation/eye.svg';\n\n// Placeholder //\n\nexport { default as piePlaceholder } from '../assets/svg/placeholder/pie.svg';\nexport { default as barPlaceholder } from '../assets/svg/placeholder/bar.svg';\nexport { default as linePlaceholder } from '../assets/svg/placeholder/bar.svg';\nexport { default as columnPlaceholder } from '../assets/svg/placeholder/column.svg';\nexport { default as basicPlaceholder } from '../assets/svg/placeholder/basic.svg';\nexport { default as donutPlaceholder } from '../assets/svg/placeholder/donut.svg';\nexport { default as textGridPlaceholder } from '../assets/svg/placeholder/grid.svg';\n\n// Placeholder //\n\n// Zoom //\n\nexport { default as fit } from '../assets/svg/fit_screen.svg';\n\n// Zoom //\n\n// Loading //\nexport { default as loadingCircle } from '../assets/svg/loading_circle.svg';\n\n// Error Boundary //\n\nexport { default as exclamationIcon } from '../assets/svg/exclamation.svg';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA"}
1
+ {"version":3,"file":"icons.js","sources":["../../../src/utils/icons.js"],"sourcesContent":["// General //\n\nexport { default as down } from '../assets/svg/arrow_down.svg';\nexport { default as drag } from '../assets/svg/settings/drag.svg';\nexport { default as trash } from '../assets/svg/trash.svg';\nexport { default as close } from '../assets/svg/close.svg';\nexport { default as rotate } from '../assets/svg/rotate.svg';\nexport { default as customize } from '../assets/svg/customize.svg';\nexport { default as slides } from '../assets/svg/slides.svg';\nexport { default as allSlides } from '../assets/svg/all_slides.svg';\nexport { default as settingsToggle } from '../assets/svg/settings_toggle.svg';\n\n// Elements //\n\nexport { default as header } from '../assets/svg/toolbox/header.svg';\nexport { default as icon } from '../assets/svg/toolbox/icon.svg';\nexport { default as image } from '../assets/svg/toolbox/image.svg';\nexport { default as label } from '../assets/svg/toolbox/label.svg';\nexport { default as shapes } from '../assets/svg/toolbox/shapes.svg';\nexport { default as table } from '../assets/svg/toolbox/table.svg';\nexport { default as textElement } from '../assets/svg/toolbox/text_element.svg';\nexport { default as text } from '../assets/svg/toolbox/text.svg';\nexport { default as star } from '../assets/svg/toolbox/star.svg';\nexport { default as email } from '../assets/svg/toolbox/email.svg';\nexport { default as singleChoice } from '../assets/svg/toolbox/single_choice.svg';\nexport { default as multipleChoice } from '../assets/svg/toolbox/multiple_choice.svg';\nexport { default as lock } from '../assets/svg/settings/lock.svg';\nexport { default as unlock } from '../assets/svg/settings/unlock.svg';\n\n// Settings //\n\nexport { default as bold } from '../assets/svg/settings/font_bold.svg';\nexport { default as italic } from '../assets/svg/settings/font_italic.svg';\nexport { default as underline } from '../assets/svg/settings/font_underline.svg';\nexport { default as alignLeft } from '../assets/svg/settings/align_left.svg';\nexport { default as alignCenter } from '../assets/svg/settings/align_center.svg';\nexport { default as alignRight } from '../assets/svg/settings/align_right.svg';\n\n// Chart Settings //\n\nexport { default as pie } from '../assets/svg/settings/chart_pie.svg';\nexport { default as bar } from '../assets/svg/settings/chart_bar.svg';\nexport { default as line } from '../assets/svg/settings/chart_line.svg';\nexport { default as basic } from '../assets/svg/settings/chart_basic.svg';\nexport { default as donut } from '../assets/svg/settings/chart_donut.svg';\nexport { default as grid } from '../assets/svg/settings/chart_grid.svg';\nexport { default as textGrid } from '../assets/svg/settings/chart_textGrid.svg';\nexport { default as column } from '../assets/svg/settings/chart_column.svg';\nexport { default as layout } from '../assets/svg/settings/layout.svg';\nexport { default as starRating } from '../assets/svg/star_rating.svg';\nexport { default as heartRating } from '../assets/svg/heart_rating.svg';\n\n// Shape Settings //\n\nexport { default as rectangleIcon } from '../assets/svg/settings/rectangle.svg';\nexport { default as ellipseIcon } from '../assets/svg/settings/ellipse.svg';\nexport { default as triangleIcon } from '../assets/svg/settings/triangle.svg';\nexport { default as starIcon } from '../assets/svg/settings/star.svg';\nexport { default as lineIcon } from '../assets/svg/settings/line.svg';\n\n// Element Menu //\n\nexport { default as duplicate } from '../assets/svg/duplicate.svg';\nexport { default as settings } from '../assets/svg/settings.svg';\n\n// Page Menu //\n\nexport { default as arrowDown } from '../assets/svg/arrow_down.svg';\nexport { default as arrowUp } from '../assets/svg/arrow_up.svg';\nexport { default as arrowLeft } from '../assets/svg/arrow_left.svg';\nexport { default as arrowRight } from '../assets/svg/arrow_right.svg';\nexport { default as angleDown } from '../assets/svg/angle_down.svg';\nexport { default as angleUp } from '../assets/svg/angle_up.svg';\nexport { default as angleLeft } from '../assets/svg/angle_left.svg';\nexport { default as angleRight } from '../assets/svg/angle_right.svg';\nexport { default as duplicateLine } from '../assets/svg/page-actions/duplicate_line.svg';\nexport { default as plus } from '../assets/svg/plus.svg';\nexport { default as minus } from '../assets/svg/minus.svg';\nexport { default as trashLine } from '../assets/svg/page-actions/trash_line.svg';\nexport { default as pageSettings } from '../assets/svg/page_settings.svg';\n\n// Context Menu //\n\nexport { default as moveToFront } from '../assets/svg/contextmenu/moveToFront.svg';\nexport { default as moveToForward } from '../assets/svg/contextmenu/moveToForward.svg';\nexport { default as moveToBackward } from '../assets/svg/contextmenu/moveToBackward.svg';\nexport { default as moveToBack } from '../assets/svg/contextmenu/moveToBack.svg';\n\n// Presentation //\n\nexport { default as print } from '../assets/svg/presentation/print.svg';\nexport { default as download } from '../assets/svg/presentation/download.svg';\nexport { default as play } from '../assets/svg/presentation/play.svg';\nexport { default as enterFullscreen } from '../assets/svg/presentation/enter_fullscreen.svg';\nexport { default as exitFullscreen } from '../assets/svg/presentation/exit_fullscreen.svg';\nexport { default as pause } from '../assets/svg/presentation/pause.svg';\nexport { default as share } from '../assets/svg/presentation/share.svg';\nexport { default as attachment } from '../assets/svg/presentation/attachment.svg';\nexport { default as pen } from '../assets/svg/presentation/pen.svg';\n\n// Password Modal //\n\nexport { default as key } from '../assets/svg/presentation/key.svg';\nexport { default as eye } from '../assets/svg/presentation/eye.svg';\n\n// Placeholder //\n\nexport { default as piePlaceholder } from '../assets/svg/placeholder/pie.svg';\nexport { default as barPlaceholder } from '../assets/svg/placeholder/bar.svg';\nexport { default as linePlaceholder } from '../assets/svg/placeholder/bar.svg';\nexport { default as columnPlaceholder } from '../assets/svg/placeholder/column.svg';\nexport { default as basicPlaceholder } from '../assets/svg/placeholder/basic.svg';\nexport { default as donutPlaceholder } from '../assets/svg/placeholder/donut.svg';\nexport { default as textGridPlaceholder } from '../assets/svg/placeholder/grid.svg';\n\n// Placeholder //\n\n// Zoom //\n\nexport { default as fit } from '../assets/svg/fit_screen.svg';\n\n// Zoom //\n\n// Loading //\nexport { default as loadingCircle } from '../assets/svg/loading_circle.svg';\n\n// Error Boundary //\n\nexport { default as exclamationIcon } from '../assets/svg/exclamation.svg';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA"}
@@ -7,7 +7,7 @@ import { useBuilderStore } from '../contexts/BuilderContext.js';
7
7
  import { usePropStore } from '../contexts/PropContext.js';
8
8
  import { findItemById, getMostVisiblePage, getDimensions } from './functions.js';
9
9
  import { useSelectedElements, useEventListener } from './hooks.js';
10
- import { EVENT_IGNORED_ROLES } from '../constants/eventIgnoredRoles.js';
10
+ import { EVENT_IGNORED_ROLES, EVENT_IGNORED_FIELDS } from '../constants/eventIgnoredRoles.js';
11
11
  import generateId from './generateId.js';
12
12
 
13
13
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
@@ -110,6 +110,7 @@ var useKeyboardActions = function useKeyboardActions() {
110
110
  var onItemRemoveFromPage = function onItemRemoveFromPage(e) {
111
111
  // Firefox updates browser history on backspace
112
112
  e.preventDefault();
113
+ if (isRightPanelOpen) return;
113
114
  if (isMultipleItemSelected) return;
114
115
 
115
116
  if (foundItem.isLocked) {
@@ -232,6 +233,8 @@ var useKeyboardActions = function useKeyboardActions() {
232
233
  var shouldSuppressKeyboardEvent = function shouldSuppressKeyboardEvent(e) {
233
234
  return EVENT_IGNORED_ROLES.some(function (role) {
234
235
  return e.target.closest("[role=".concat(role, "]"));
236
+ }) || EVENT_IGNORED_FIELDS.some(function (field) {
237
+ return e.target.closest(field);
235
238
  });
236
239
  };
237
240
 
@@ -1 +1 @@
1
- {"version":3,"file":"useKeyboardActions.js","sources":["../../../src/utils/useKeyboardActions.js"],"sourcesContent":["/* eslint-disable complexity */\nimport { useRef, useState } from 'react';\nimport { useBuilderStore } from '../contexts/BuilderContext';\nimport { usePropStore } from '../contexts/PropContext';\nimport { findItemById, getDimensions, getMostVisiblePage } from './functions';\nimport { useEventListener, useSelectedElements } from './hooks';\nimport { EVENT_IGNORED_ROLES } from '../constants/eventIgnoredRoles';\nimport generateId from './generateId';\n\nconst useKeyboardActions = () => {\n const [itemToPaste, setItemToPaste] = useState(null);\n const keyDownCount = useRef(null);\n\n const activeElements = useBuilderStore(state => state.activeElements);\n const isRightPanelOpen = useBuilderStore(state => state.isRightPanelOpen);\n const setActiveElements = useBuilderStore(state => state.setActiveElements);\n const setIsRightPanelOpen = useBuilderStore(state => state.setIsRightPanelOpen);\n const resetActiveElements = useBuilderStore(state => state.resetActiveElements);\n\n const pages = usePropStore(state => state.pages);\n const onItemAdd = usePropStore(state => state.onItemAdd);\n const onItemRemove = usePropStore(state => state.onItemRemove);\n const onItemChange = usePropStore(state => state.onItemChange);\n const onAnEventTrigger = usePropStore(state => state.onAnEventTrigger);\n\n const isMultipleItemSelected = activeElements.length > 1;\n\n const foundItem = findItemById(activeElements.length ? activeElements[0] : null, pages);\n\n const selectedItems = useSelectedElements();\n const moveItemWithKeyboard = (event, direction, value) => {\n event.preventDefault();\n selectedItems.forEach(item => {\n if (item.isLocked) {\n return false;\n }\n onItemChange(\n { id: item.id },\n {\n ...getDimensions(item),\n [direction]: item[direction] + value,\n pageID: item.pageID,\n },\n );\n });\n };\n\n const selectNextOrPrevElement = (event, deletedItem) => {\n if (event.preventDefault) event.preventDefault();\n const referenceItem = deletedItem ? deletedItem : foundItem;\n\n const page = pages.find(_page => _page.id === referenceItem.pageID);\n if (!page || (page && !page.items.length)) return resetActiveElements();\n const { items } = page;\n\n const currentIndex = items.findIndex(item => item.id === referenceItem.id);\n\n // Pages are not updated in time so here is an unnecessary check\n if (items.length === 1 && deletedItem) {\n return resetActiveElements();\n }\n\n if (event.shiftKey) {\n if (items[currentIndex - 1]) setActiveElements(items[currentIndex - 1].id);\n else setActiveElements(items[items.length - 1].id);\n } else if (items[currentIndex + 1]) {\n setActiveElements(items[currentIndex + 1].id);\n } else setActiveElements(items[0].id);\n };\n\n const onItemRemoveFromPage = e => {\n // Firefox updates browser history on backspace\n e.preventDefault();\n if (isMultipleItemSelected) return;\n if (foundItem.isLocked) {\n return false;\n }\n resetActiveElements();\n onItemRemove(foundItem);\n selectNextOrPrevElement({ shiftKey: false }, foundItem);\n onAnEventTrigger('removeItem', foundItem.itemType);\n };\n\n const handlePaste = () => {\n if (isMultipleItemSelected) return;\n const itemID = generateId();\n const pageID = getMostVisiblePage(true);\n const offset = itemToPaste.pageID === pageID ? 50 : 0;\n\n const item = {\n ...itemToPaste,\n id: itemID,\n left: itemToPaste.left + offset,\n pageID,\n top: itemToPaste.top + offset,\n };\n\n onItemAdd(item);\n\n onAnEventTrigger('pasteItem', itemToPaste.itemType);\n setActiveElements(itemID);\n // set as last reference to paste\n setItemToPaste(item);\n };\n\n const keyboardActions = event => {\n const {\n key,\n metaKey,\n shiftKey,\n } = event;\n\n if (metaKey) {\n if (key === 'l') {\n // Lock\n if (isMultipleItemSelected) return;\n event.preventDefault(); // Dont focus to URL bar\n onAnEventTrigger(\n foundItem.isLocked ? 'unlockReportItem' : 'lockReportItem',\n foundItem.itemType,\n );\n onItemChange(\n { id: foundItem.id },\n { isLocked: foundItem.isLocked ? false : true },\n );\n return;\n }\n\n if (key === 'c' || key === 'x') {\n if (isMultipleItemSelected) return;\n // Copy or Cut\n if (key === 'x') {\n onItemRemoveFromPage(event);\n onAnEventTrigger('cutItem', foundItem.itemType);\n } else {\n onAnEventTrigger('copyItem', foundItem.itemType);\n }\n\n setItemToPaste(foundItem);\n return;\n }\n\n if (foundItem && key === 'd') {\n if (isMultipleItemSelected) return;\n // Duplicate\n event.preventDefault();\n const itemID = generateId();\n onItemAdd({\n ...foundItem,\n id: itemID,\n left: foundItem.left + 50,\n top: foundItem.top + 50,\n });\n onAnEventTrigger('duplicateItem', foundItem.itemType);\n setActiveElements(itemID);\n if (!isRightPanelOpen) {\n setIsRightPanelOpen(true);\n }\n return;\n }\n }\n\n keyDownCount.current++;\n const movementValue = shiftKey ? 10 : 1 + keyDownCount.current;\n\n // Others\n switch (key) {\n case 'Backspace': return onItemRemoveFromPage(event);\n case 'Delete': return onItemRemoveFromPage(event);\n case 'Escape': return resetActiveElements();\n case 'ArrowLeft': return moveItemWithKeyboard(event, 'left', -movementValue);\n case 'ArrowUp': return moveItemWithKeyboard(event, 'top', -movementValue);\n case 'ArrowRight': return moveItemWithKeyboard(event, 'left', movementValue);\n case 'ArrowDown': return moveItemWithKeyboard(event, 'top', movementValue);\n case 'Tab': return selectNextOrPrevElement(event);\n default:\n }\n };\n\n const shouldSuppressKeyboardEvent = e => (\n EVENT_IGNORED_ROLES.some(role => e.target.closest(`[role=${role}]`))\n );\n\n const handleKeyboardEvent = e => {\n const shouldPaste = itemToPaste && e.key === 'v' && e.metaKey;\n\n if (shouldSuppressKeyboardEvent(e)) {\n return;\n }\n\n if (activeElements.length && !shouldPaste) {\n const arrowKeyCodes = ['ArrowLeft', 'ArrowUp', 'ArrowDown', 'ArrowBottom'];\n if (arrowKeyCodes.includes(e.key)) e.preventDefault();\n keyboardActions(e);\n } else if (shouldPaste) {\n handlePaste();\n }\n };\n\n useEventListener('keydown', handleKeyboardEvent);\n useEventListener('keyup', () => { keyDownCount.current = 0; });\n};\n\nexport default useKeyboardActions;\n"],"names":["useKeyboardActions","useState","itemToPaste","setItemToPaste","keyDownCount","useRef","activeElements","useBuilderStore","state","isRightPanelOpen","setActiveElements","setIsRightPanelOpen","resetActiveElements","pages","usePropStore","onItemAdd","onItemRemove","onItemChange","onAnEventTrigger","isMultipleItemSelected","length","foundItem","findItemById","selectedItems","useSelectedElements","moveItemWithKeyboard","event","direction","value","preventDefault","forEach","item","isLocked","id","getDimensions","pageID","selectNextOrPrevElement","deletedItem","referenceItem","page","find","_page","items","currentIndex","findIndex","shiftKey","onItemRemoveFromPage","e","itemType","handlePaste","itemID","generateId","getMostVisiblePage","offset","left","top","keyboardActions","key","metaKey","current","movementValue","shouldSuppressKeyboardEvent","EVENT_IGNORED_ROLES","some","role","target","closest","handleKeyboardEvent","shouldPaste","arrowKeyCodes","includes","useEventListener"],"mappings":"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"}
1
+ {"version":3,"file":"useKeyboardActions.js","sources":["../../../src/utils/useKeyboardActions.js"],"sourcesContent":["/* eslint-disable complexity */\nimport { useRef, useState } from 'react';\nimport { useBuilderStore } from '../contexts/BuilderContext';\nimport { usePropStore } from '../contexts/PropContext';\nimport { findItemById, getDimensions, getMostVisiblePage } from './functions';\nimport { useEventListener, useSelectedElements } from './hooks';\nimport { EVENT_IGNORED_FIELDS, EVENT_IGNORED_ROLES } from '../constants/eventIgnoredRoles';\nimport generateId from './generateId';\n\nconst useKeyboardActions = () => {\n const [itemToPaste, setItemToPaste] = useState(null);\n const keyDownCount = useRef(null);\n\n const activeElements = useBuilderStore(state => state.activeElements);\n const isRightPanelOpen = useBuilderStore(state => state.isRightPanelOpen);\n const setActiveElements = useBuilderStore(state => state.setActiveElements);\n const setIsRightPanelOpen = useBuilderStore(state => state.setIsRightPanelOpen);\n const resetActiveElements = useBuilderStore(state => state.resetActiveElements);\n\n const pages = usePropStore(state => state.pages);\n const onItemAdd = usePropStore(state => state.onItemAdd);\n const onItemRemove = usePropStore(state => state.onItemRemove);\n const onItemChange = usePropStore(state => state.onItemChange);\n const onAnEventTrigger = usePropStore(state => state.onAnEventTrigger);\n\n const isMultipleItemSelected = activeElements.length > 1;\n\n const foundItem = findItemById(activeElements.length ? activeElements[0] : null, pages);\n\n const selectedItems = useSelectedElements();\n const moveItemWithKeyboard = (event, direction, value) => {\n event.preventDefault();\n selectedItems.forEach(item => {\n if (item.isLocked) {\n return false;\n }\n onItemChange(\n { id: item.id },\n {\n ...getDimensions(item),\n [direction]: item[direction] + value,\n pageID: item.pageID,\n },\n );\n });\n };\n\n const selectNextOrPrevElement = (event, deletedItem) => {\n if (event.preventDefault) event.preventDefault();\n const referenceItem = deletedItem ? deletedItem : foundItem;\n\n const page = pages.find(_page => _page.id === referenceItem.pageID);\n if (!page || (page && !page.items.length)) return resetActiveElements();\n const { items } = page;\n\n const currentIndex = items.findIndex(item => item.id === referenceItem.id);\n\n // Pages are not updated in time so here is an unnecessary check\n if (items.length === 1 && deletedItem) {\n return resetActiveElements();\n }\n\n if (event.shiftKey) {\n if (items[currentIndex - 1]) setActiveElements(items[currentIndex - 1].id);\n else setActiveElements(items[items.length - 1].id);\n } else if (items[currentIndex + 1]) {\n setActiveElements(items[currentIndex + 1].id);\n } else setActiveElements(items[0].id);\n };\n\n const onItemRemoveFromPage = e => {\n // Firefox updates browser history on backspace\n e.preventDefault();\n if (isRightPanelOpen) return;\n if (isMultipleItemSelected) return;\n if (foundItem.isLocked) {\n return false;\n }\n resetActiveElements();\n onItemRemove(foundItem);\n selectNextOrPrevElement({ shiftKey: false }, foundItem);\n onAnEventTrigger('removeItem', foundItem.itemType);\n };\n\n const handlePaste = () => {\n if (isMultipleItemSelected) return;\n const itemID = generateId();\n const pageID = getMostVisiblePage(true);\n const offset = itemToPaste.pageID === pageID ? 50 : 0;\n\n const item = {\n ...itemToPaste,\n id: itemID,\n left: itemToPaste.left + offset,\n pageID,\n top: itemToPaste.top + offset,\n };\n\n onItemAdd(item);\n\n onAnEventTrigger('pasteItem', itemToPaste.itemType);\n setActiveElements(itemID);\n // set as last reference to paste\n setItemToPaste(item);\n };\n\n const keyboardActions = event => {\n const {\n key,\n metaKey,\n shiftKey,\n } = event;\n\n if (metaKey) {\n if (key === 'l') {\n // Lock\n if (isMultipleItemSelected) return;\n event.preventDefault(); // Dont focus to URL bar\n onAnEventTrigger(\n foundItem.isLocked ? 'unlockReportItem' : 'lockReportItem',\n foundItem.itemType,\n );\n onItemChange(\n { id: foundItem.id },\n { isLocked: foundItem.isLocked ? false : true },\n );\n return;\n }\n\n if (key === 'c' || key === 'x') {\n if (isMultipleItemSelected) return;\n // Copy or Cut\n if (key === 'x') {\n onItemRemoveFromPage(event);\n onAnEventTrigger('cutItem', foundItem.itemType);\n } else {\n onAnEventTrigger('copyItem', foundItem.itemType);\n }\n\n setItemToPaste(foundItem);\n return;\n }\n\n if (foundItem && key === 'd') {\n if (isMultipleItemSelected) return;\n // Duplicate\n event.preventDefault();\n const itemID = generateId();\n onItemAdd({\n ...foundItem,\n id: itemID,\n left: foundItem.left + 50,\n top: foundItem.top + 50,\n });\n onAnEventTrigger('duplicateItem', foundItem.itemType);\n setActiveElements(itemID);\n if (!isRightPanelOpen) {\n setIsRightPanelOpen(true);\n }\n return;\n }\n }\n\n keyDownCount.current++;\n const movementValue = shiftKey ? 10 : 1 + keyDownCount.current;\n\n // Others\n switch (key) {\n case 'Backspace': return onItemRemoveFromPage(event);\n case 'Delete': return onItemRemoveFromPage(event);\n case 'Escape': return resetActiveElements();\n case 'ArrowLeft': return moveItemWithKeyboard(event, 'left', -movementValue);\n case 'ArrowUp': return moveItemWithKeyboard(event, 'top', -movementValue);\n case 'ArrowRight': return moveItemWithKeyboard(event, 'left', movementValue);\n case 'ArrowDown': return moveItemWithKeyboard(event, 'top', movementValue);\n case 'Tab': return selectNextOrPrevElement(event);\n default:\n }\n };\n\n const shouldSuppressKeyboardEvent = e => (\n EVENT_IGNORED_ROLES.some(role => e.target.closest(`[role=${role}]`))\n || EVENT_IGNORED_FIELDS.some(field => e.target.closest(field))\n );\n\n const handleKeyboardEvent = e => {\n const shouldPaste = itemToPaste && e.key === 'v' && e.metaKey;\n\n if (shouldSuppressKeyboardEvent(e)) {\n return;\n }\n\n if (activeElements.length && !shouldPaste) {\n const arrowKeyCodes = ['ArrowLeft', 'ArrowUp', 'ArrowDown', 'ArrowBottom'];\n if (arrowKeyCodes.includes(e.key)) e.preventDefault();\n keyboardActions(e);\n } else if (shouldPaste) {\n handlePaste();\n }\n };\n\n useEventListener('keydown', handleKeyboardEvent);\n useEventListener('keyup', () => { keyDownCount.current = 0; });\n};\n\nexport default useKeyboardActions;\n"],"names":["useKeyboardActions","useState","itemToPaste","setItemToPaste","keyDownCount","useRef","activeElements","useBuilderStore","state","isRightPanelOpen","setActiveElements","setIsRightPanelOpen","resetActiveElements","pages","usePropStore","onItemAdd","onItemRemove","onItemChange","onAnEventTrigger","isMultipleItemSelected","length","foundItem","findItemById","selectedItems","useSelectedElements","moveItemWithKeyboard","event","direction","value","preventDefault","forEach","item","isLocked","id","getDimensions","pageID","selectNextOrPrevElement","deletedItem","referenceItem","page","find","_page","items","currentIndex","findIndex","shiftKey","onItemRemoveFromPage","e","itemType","handlePaste","itemID","generateId","getMostVisiblePage","offset","left","top","keyboardActions","key","metaKey","current","movementValue","shouldSuppressKeyboardEvent","EVENT_IGNORED_ROLES","some","role","target","closest","EVENT_IGNORED_FIELDS","field","handleKeyboardEvent","shouldPaste","arrowKeyCodes","includes","useEventListener"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jotforminc/dnd-builder",
3
- "version": "3.4.2",
3
+ "version": "3.4.5",
4
4
  "files": [
5
5
  "lib",
6
6
  "index.d.ts"