@gravity-ui/markdown-editor 15.19.0 → 15.20.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.
- package/build/cjs/bundle/config/action-names.d.ts +1 -1
- package/build/cjs/bundle/toolbar/ToolbarButtonWithPopupMenu.d.ts +2 -2
- package/build/cjs/bundle/toolbar/ToolbarButtonWithPopupMenu.js.map +1 -1
- package/build/cjs/bundle/toolbar/custom/ToolbarColors.js +1 -1
- package/build/cjs/bundle/toolbar/custom/ToolbarColors.js.map +1 -1
- package/build/cjs/bundle/wysiwyg-preset.js +5 -1
- package/build/cjs/bundle/wysiwyg-preset.js.map +1 -1
- package/build/cjs/extensions/markdown/Lists/ListsSpecs/schema.js +2 -3
- package/build/cjs/extensions/markdown/Lists/ListsSpecs/schema.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/index.d.ts +15 -1
- package/build/cjs/extensions/yfm/YfmTable/index.js +4 -2
- package/build/cjs/extensions/yfm/YfmTable/index.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/actions.d.ts +6 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/actions.js +5 -8
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/actions.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/clear-cells.d.ts +7 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/clear-cells.js +41 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/clear-cells.js.map +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-column.d.ts +6 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-column.js +59 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-column.js.map +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-row.d.ts +6 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-row.js +54 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-row.js.map +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-column-range.d.ts +6 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-column-range.js +77 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-column-range.js.map +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-row-range.d.ts +6 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-row-range.js +74 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-row-range.js.map +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/FloatingMenu.d.ts +10 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/FloatingMenu.js +45 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/FloatingMenu.js.map +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/index.d.ts +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/index.js +5 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/index.js.map +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.d.ts +15 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.js +67 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.js.map +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/index.d.ts +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/index.js +5 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/index.js.map +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/FloatingPlusButton.d.ts +4 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/FloatingPlusButton.js +26 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/FloatingPlusButton.js.map +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.d.ts +6 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.js +68 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.js.map +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/PlusButton.d.ts +6 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/PlusButton.js +26 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/PlusButton.js.map +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/index.d.ts +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/index.js +5 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/index.js.map +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.d.ts +9 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.js +38 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.js.map +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/index.d.ts +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/index.js +5 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/index.js.map +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.css +14 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.d.ts +13 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js +58 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js.map +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/index.d.ts +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/index.js +5 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/index.js.map +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/const.d.ts +13 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/const.js +18 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/const.js.map +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-drop-cursor.d.ts +36 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-drop-cursor.js +144 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-drop-cursor.js.map +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd.css +19 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd.d.ts +31 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd.js +467 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd.js.map +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/index.d.ts +12 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/index.js +11 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/index.js.map +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-cell-view.d.ts +6 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-cell-view.js +288 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-cell-view.js.map +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-view.css +4 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-view.d.ts +3 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-view.js +100 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-view.js.map +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/plugins/dnd-plugin.d.ts +23 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/plugins/dnd-plugin.js +119 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/plugins/dnd-plugin.js.map +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/plugins/focus-plugin.d.ts +17 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/plugins/focus-plugin.js +158 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/plugins/focus-plugin.js.map +1 -0
- package/build/cjs/i18n/yfm-table/en.json +3 -0
- package/build/cjs/i18n/yfm-table/index.d.ts +4 -1
- package/build/cjs/i18n/yfm-table/ru.json +3 -0
- package/build/cjs/icons/index.d.ts +2 -5
- package/build/cjs/icons/index.js +5 -8
- package/build/cjs/icons/index.js.map +1 -1
- package/build/cjs/lodash.d.ts +3 -1
- package/build/cjs/lodash.js +5 -1
- package/build/cjs/lodash.js.map +1 -1
- package/build/cjs/table-utils/table-desc.d.ts +50 -6
- package/build/cjs/table-utils/table-desc.js +196 -3
- package/build/cjs/table-utils/table-desc.js.map +1 -1
- package/build/cjs/toolbar/ToolbarButtonPopup.js +2 -2
- package/build/cjs/toolbar/ToolbarButtonPopup.js.map +1 -1
- package/build/cjs/toolbar/ToolbarListButton.js +1 -1
- package/build/cjs/toolbar/ToolbarListButton.js.map +1 -1
- package/build/cjs/version.js +1 -1
- package/build/cjs/version.js.map +1 -1
- package/build/esm/bundle/config/action-names.d.ts +1 -1
- package/build/esm/bundle/toolbar/ToolbarButtonWithPopupMenu.d.ts +2 -2
- package/build/esm/bundle/toolbar/ToolbarButtonWithPopupMenu.js.map +1 -1
- package/build/esm/bundle/toolbar/custom/ToolbarColors.js +1 -1
- package/build/esm/bundle/toolbar/custom/ToolbarColors.js.map +1 -1
- package/build/esm/bundle/wysiwyg-preset.js +5 -1
- package/build/esm/bundle/wysiwyg-preset.js.map +1 -1
- package/build/esm/extensions/markdown/Lists/ListsSpecs/schema.js +2 -3
- package/build/esm/extensions/markdown/Lists/ListsSpecs/schema.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/index.d.ts +15 -1
- package/build/esm/extensions/yfm/YfmTable/index.js +4 -2
- package/build/esm/extensions/yfm/YfmTable/index.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/actions.d.ts +7 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/actions.js +2 -6
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/actions.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/clear-cells.d.ts +7 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/clear-cells.js +37 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/clear-cells.js.map +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-column.d.ts +6 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-column.js +55 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-column.js.map +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-row.d.ts +6 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-row.js +50 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-row.js.map +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-column-range.d.ts +6 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-column-range.js +73 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-column-range.js.map +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-row-range.d.ts +6 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-row-range.js +70 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-row-range.js.map +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/FloatingMenu.d.ts +10 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/FloatingMenu.js +41 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/FloatingMenu.js.map +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/index.d.ts +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/index.js +2 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/index.js.map +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.d.ts +15 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.js +63 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.js.map +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/index.d.ts +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/index.js +2 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/index.js.map +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/FloatingPlusButton.d.ts +4 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/FloatingPlusButton.js +22 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/FloatingPlusButton.js.map +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.d.ts +6 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.js +64 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.js.map +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/PlusButton.d.ts +6 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/PlusButton.js +22 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/PlusButton.js.map +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/index.d.ts +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/index.js +2 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/index.js.map +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.d.ts +9 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.js +35 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.js.map +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/index.d.ts +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/index.js +2 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/index.js.map +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.css +14 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.d.ts +13 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js +54 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js.map +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/index.d.ts +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/index.js +2 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/index.js.map +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/const.d.ts +13 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/const.js +15 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/const.js.map +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-drop-cursor.d.ts +36 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-drop-cursor.js +139 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-drop-cursor.js.map +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd.css +19 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd.d.ts +31 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd.js +463 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd.js.map +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/index.d.ts +12 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/index.js +7 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/index.js.map +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-cell-view.d.ts +6 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-cell-view.js +284 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-cell-view.js.map +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-view.css +4 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-view.d.ts +3 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-view.js +96 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-view.js.map +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/plugins/dnd-plugin.d.ts +23 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/plugins/dnd-plugin.js +108 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/plugins/dnd-plugin.js.map +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/plugins/focus-plugin.d.ts +17 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/plugins/focus-plugin.js +153 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/plugins/focus-plugin.js.map +1 -0
- package/build/esm/i18n/yfm-table/en.json +3 -0
- package/build/esm/i18n/yfm-table/index.d.ts +4 -1
- package/build/esm/i18n/yfm-table/ru.json +3 -0
- package/build/esm/icons/index.d.ts +2 -5
- package/build/esm/icons/index.js +4 -7
- package/build/esm/icons/index.js.map +1 -1
- package/build/esm/lodash.d.ts +3 -1
- package/build/esm/lodash.js +3 -1
- package/build/esm/lodash.js.map +1 -1
- package/build/esm/table-utils/table-desc.d.ts +50 -6
- package/build/esm/table-utils/table-desc.js +196 -3
- package/build/esm/table-utils/table-desc.js.map +1 -1
- package/build/esm/toolbar/ToolbarButtonPopup.js +2 -2
- package/build/esm/toolbar/ToolbarButtonPopup.js.map +1 -1
- package/build/esm/toolbar/ToolbarListButton.js +1 -1
- package/build/esm/toolbar/ToolbarListButton.js.map +1 -1
- package/build/esm/version.js +1 -1
- package/build/esm/version.js.map +1 -1
- package/build/styles.css +31 -116
- package/package.json +2 -2
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/buttons.d.ts +0 -14
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/buttons.js +0 -97
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/buttons.js.map +0 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/view.css +0 -85
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/view.d.ts +0 -4
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/view.js +0 -62
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/view.js.map +0 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.css +0 -37
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.d.ts +0 -4
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.js +0 -212
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.js.map +0 -1
- package/build/cjs/icons/Mermaid.d.ts +0 -3
- package/build/cjs/icons/Mermaid.js +0 -11
- package/build/cjs/icons/Mermaid.js.map +0 -1
- package/build/cjs/icons/Mono.d.ts +0 -3
- package/build/cjs/icons/Mono.js +0 -6
- package/build/cjs/icons/Mono.js.map +0 -1
- package/build/cjs/icons/Tabs.d.ts +0 -3
- package/build/cjs/icons/Tabs.js +0 -6
- package/build/cjs/icons/Tabs.js.map +0 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/buttons.d.ts +0 -14
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/buttons.js +0 -95
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/buttons.js.map +0 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/view.css +0 -85
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/view.d.ts +0 -4
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/view.js +0 -58
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/view.js.map +0 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.css +0 -37
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.d.ts +0 -4
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.js +0 -208
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.js.map +0 -1
- package/build/esm/icons/Mermaid.d.ts +0 -3
- package/build/esm/icons/Mermaid.js +0 -9
- package/build/esm/icons/Mermaid.js.map +0 -1
- package/build/esm/icons/Mono.d.ts +0 -3
- package/build/esm/icons/Mono.js +0 -4
- package/build/esm/icons/Mono.js.map +0 -1
- package/build/esm/icons/Tabs.d.ts +0 -3
- package/build/esm/icons/Tabs.js +0 -4
- package/build/esm/icons/Tabs.js.map +0 -1
package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-row-range.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Fragment } from "../../../../../../pm/model.js";
|
|
2
|
+
import { TableDesc, } from "../../../../../../table-utils/table-desc.js";
|
|
3
|
+
import { yfmTableCellType } from "../../../YfmTableSpecs/utils.js";
|
|
4
|
+
export const removeRowRange = (params) => {
|
|
5
|
+
return (state, dispatch) => {
|
|
6
|
+
const table = state.doc.nodeAt(params.tablePos);
|
|
7
|
+
const tableDesc = table && TableDesc.create(table)?.bind(params.tablePos);
|
|
8
|
+
if (!tableDesc || tableDesc.rows < 2)
|
|
9
|
+
return false;
|
|
10
|
+
const range = tableDesc.base.getRowRanges()[params.rangeIdx];
|
|
11
|
+
if (!range)
|
|
12
|
+
return false;
|
|
13
|
+
if (dispatch) {
|
|
14
|
+
const { tr } = state;
|
|
15
|
+
{
|
|
16
|
+
const from = tableDesc.getPosForRow(range.startIdx).from;
|
|
17
|
+
const to = tableDesc.getPosForRow(range.endIdx).to;
|
|
18
|
+
tr.replaceWith(from, to, Fragment.empty);
|
|
19
|
+
}
|
|
20
|
+
const diffRowspan = {};
|
|
21
|
+
for (let colIdx = 0; colIdx < tableDesc.cols; colIdx++) {
|
|
22
|
+
// calculate colspan diff for merged cells that end in this range
|
|
23
|
+
for (let rowIdx = range.startIdx; rowIdx <= range.endIdx; rowIdx++) {
|
|
24
|
+
const cell = tableDesc.base.rowsDesc[rowIdx].cells[colIdx];
|
|
25
|
+
if (cell.type === 'virtual' &&
|
|
26
|
+
cell.rowspan?.[1] === colIdx &&
|
|
27
|
+
cell.rowspan[0] < range.startIdx) {
|
|
28
|
+
diffRowspan[`${cell.rowspan[0]},${cell.rowspan[1]}`] ??= 0;
|
|
29
|
+
diffRowspan[`${cell.rowspan[0]},${cell.rowspan[1]}`]--;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// insert new cells into the resulting gaps after current range
|
|
33
|
+
if (range.endIdx + 1 < tableDesc.rows) {
|
|
34
|
+
const cell = tableDesc.base.rowsDesc[range.endIdx + 1].cells[colIdx];
|
|
35
|
+
if (cell.type === 'virtual' &&
|
|
36
|
+
cell.rowspan?.[1] === colIdx &&
|
|
37
|
+
cell.rowspan[0] >= range.startIdx) {
|
|
38
|
+
const insertPos = tableDesc.getPosForCell(range.endIdx + 1, colIdx).closestPos;
|
|
39
|
+
const realCell = tableDesc.base.rowsDesc[cell.rowspan[0]].cells[cell.rowspan[1]];
|
|
40
|
+
const newRowspan = realCell.rowspan - (range.endIdx + 1 - cell.rowspan[0]);
|
|
41
|
+
tr.insert(tr.mapping.map(insertPos), yfmTableCellType(state.schema).createAndFill({
|
|
42
|
+
rowspan: newRowspan > 1 ? newRowspan : null,
|
|
43
|
+
colspan: realCell.colspan ? realCell.colspan : null,
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
updateRowspan(tr, tableDesc, diffRowspan);
|
|
49
|
+
dispatch(tr);
|
|
50
|
+
}
|
|
51
|
+
return true;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
function updateRowspan(tr, tableDesc, diffMap) {
|
|
55
|
+
for (const key of keys(diffMap)) {
|
|
56
|
+
const [row, col] = key.split(',');
|
|
57
|
+
const rowIdx = Number.parseInt(row, 10);
|
|
58
|
+
const colIdx = Number.parseInt(col, 10);
|
|
59
|
+
const cell = tableDesc.base.rowsDesc[rowIdx].cells[colIdx];
|
|
60
|
+
if (cell.type === 'real' && cell.rowspan) {
|
|
61
|
+
const pos = tableDesc.getPosForCell(rowIdx, colIdx);
|
|
62
|
+
const newRowspan = cell.rowspan + diffMap[key];
|
|
63
|
+
tr.setNodeAttribute(tr.mapping.map(pos.from), 'rowspan', newRowspan > 1 ? newRowspan : null);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function keys(obj) {
|
|
68
|
+
return Object.keys(obj);
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=remove-row-range.js.map
|
package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-row-range.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-row-range.js","sourceRoot":"../../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-row-range.ts"],"names":[],"mappings":"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","sourcesContent":["import {Fragment} from '#pm/model';\nimport type {Command, Transaction} from '#pm/state';\nimport {\n type RealCellPos,\n type TableCellRealDesc,\n TableDesc,\n type TableDescBinded,\n type VirtualCellPos,\n} from 'src/table-utils/table-desc';\n\nimport {yfmTableCellType} from '../../../YfmTableSpecs/utils';\n\nexport type RemoveRowRangeParams = {\n tablePos: number;\n rangeIdx: number;\n};\n\nexport const removeRowRange = (params: RemoveRowRangeParams): Command => {\n return (state, dispatch) => {\n const table = state.doc.nodeAt(params.tablePos);\n const tableDesc = table && TableDesc.create(table)?.bind(params.tablePos);\n if (!tableDesc || tableDesc.rows < 2) return false;\n\n const range = tableDesc.base.getRowRanges()[params.rangeIdx];\n if (!range) return false;\n\n if (dispatch) {\n const {tr} = state;\n {\n const from = tableDesc.getPosForRow(range.startIdx).from;\n const to = tableDesc.getPosForRow(range.endIdx).to;\n tr.replaceWith(from, to, Fragment.empty);\n }\n\n const diffRowspan: Record<`${number},${number}`, number> = {};\n\n for (let colIdx = 0; colIdx < tableDesc.cols; colIdx++) {\n // calculate colspan diff for merged cells that end in this range\n for (let rowIdx = range.startIdx; rowIdx <= range.endIdx; rowIdx++) {\n const cell = tableDesc.base.rowsDesc[rowIdx].cells[colIdx];\n if (\n cell.type === 'virtual' &&\n cell.rowspan?.[1] === colIdx &&\n cell.rowspan[0] < range.startIdx\n ) {\n diffRowspan[`${cell.rowspan[0]},${cell.rowspan[1]}`] ??= 0;\n diffRowspan[`${cell.rowspan[0]},${cell.rowspan[1]}`]--;\n }\n }\n\n // insert new cells into the resulting gaps after current range\n if (range.endIdx + 1 < tableDesc.rows) {\n const cell = tableDesc.base.rowsDesc[range.endIdx + 1].cells[colIdx];\n if (\n cell.type === 'virtual' &&\n cell.rowspan?.[1] === colIdx &&\n cell.rowspan[0] >= range.startIdx\n ) {\n const insertPos = (\n tableDesc.getPosForCell(range.endIdx + 1, colIdx) as VirtualCellPos\n ).closestPos;\n const realCell = tableDesc.base.rowsDesc[cell.rowspan[0]].cells[\n cell.rowspan[1]\n ] as TableCellRealDesc;\n const newRowspan = realCell.rowspan! - (range.endIdx + 1 - cell.rowspan[0]);\n tr.insert(\n tr.mapping.map(insertPos),\n yfmTableCellType(state.schema).createAndFill({\n rowspan: newRowspan > 1 ? newRowspan : null,\n colspan: realCell.colspan ? realCell.colspan : null,\n })!,\n );\n }\n }\n }\n\n updateRowspan(tr, tableDesc, diffRowspan);\n\n dispatch(tr);\n }\n\n return true;\n };\n};\n\nfunction updateRowspan(\n tr: Transaction,\n tableDesc: TableDescBinded,\n diffMap: Record<`${number},${number}`, number>,\n) {\n for (const key of keys(diffMap)) {\n const [row, col] = key.split(',');\n const rowIdx = Number.parseInt(row, 10);\n const colIdx = Number.parseInt(col, 10);\n\n const cell = tableDesc.base.rowsDesc[rowIdx].cells[colIdx];\n if (cell.type === 'real' && cell.rowspan) {\n const pos = tableDesc.getPosForCell(rowIdx, colIdx) as RealCellPos;\n const newRowspan = cell.rowspan + diffMap[key];\n tr.setNodeAttribute(\n tr.mapping.map(pos.from),\n 'rowspan',\n newRowspan > 1 ? newRowspan : null,\n );\n }\n }\n}\nfunction keys<O extends object>(obj: O): (keyof O)[] {\n return Object.keys(obj) as (keyof O)[];\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type ButtonButtonProps, type DropdownMenuProps } from '@gravity-ui/uikit';
|
|
2
|
+
export type FloatingMenuProps = {
|
|
3
|
+
dirtype: 'row' | 'column';
|
|
4
|
+
canDrag: boolean;
|
|
5
|
+
anchorElement: Element;
|
|
6
|
+
dropdownItems: DropdownMenuProps<unknown>['items'];
|
|
7
|
+
switcherMouseProps?: Pick<ButtonButtonProps, 'onMouseDown' | 'onMouseMove' | 'onMouseUp'>;
|
|
8
|
+
onOpenToggle: NonNullable<DropdownMenuProps<unknown>['onOpenToggle']>;
|
|
9
|
+
};
|
|
10
|
+
export declare const FloatingMenu: React.FC<FloatingMenuProps>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { Ellipsis as DotsColumn, GripHorizontal as GripColumn } from '@gravity-ui/icons';
|
|
4
|
+
import { Button, DropdownMenu, Flex, Icon, } from '@gravity-ui/uikit';
|
|
5
|
+
import { useBooleanState } from "../../../../../../../react-utils/index.js";
|
|
6
|
+
import { FloatingPopup } from "../FloatingPopup/index.js";
|
|
7
|
+
const popupOffset = {
|
|
8
|
+
mainAxis: -9.5,
|
|
9
|
+
};
|
|
10
|
+
export const FloatingMenu = function YfmTableFloatingMenu(props) {
|
|
11
|
+
const { dirtype, canDrag, anchorElement, dropdownItems, switcherMouseProps, onOpenToggle } = props;
|
|
12
|
+
const [isMenuOpened, setMenuOpened] = useState(false);
|
|
13
|
+
const [isHovered, setHovered, unsetHovered] = useBooleanState(false);
|
|
14
|
+
const showActionView = isMenuOpened || isHovered;
|
|
15
|
+
const isRowType = dirtype === 'row';
|
|
16
|
+
return (_jsx(FloatingPopup, { open: true, offset: popupOffset, anchorElement: anchorElement, placement: isRowType ? 'left' : 'top', floatingStyles: {
|
|
17
|
+
lineHeight: 'initial',
|
|
18
|
+
}, style: {
|
|
19
|
+
backgroundColor: 'transparent',
|
|
20
|
+
}, children: _jsx(DropdownMenu, { onOpenToggle: (...args) => {
|
|
21
|
+
setMenuOpened(...args);
|
|
22
|
+
onOpenToggle(...args);
|
|
23
|
+
}, renderSwitcher: (switcherProps) => (_jsx(Flex, { centerContent: true, width: 20, height: 20, style: {
|
|
24
|
+
borderRadius: 'var(--g-border-radius-xs)',
|
|
25
|
+
backgroundColor: showActionView
|
|
26
|
+
? 'var(--g-color-base-background)'
|
|
27
|
+
: undefined,
|
|
28
|
+
}, onMouseEnter: setHovered, onMouseLeave: unsetHovered, children: _jsx(Button, { style: {
|
|
29
|
+
cursor: canDrag ? 'grab' : undefined,
|
|
30
|
+
transform: isRowType ? 'rotate(90deg)' : undefined,
|
|
31
|
+
'--g-button-height': showActionView ? undefined : '5px',
|
|
32
|
+
'--_--background-color': showActionView
|
|
33
|
+
? undefined
|
|
34
|
+
: 'var(--g-color-base-background)',
|
|
35
|
+
}, view: isMenuOpened ? 'outlined-action' : 'outlined', pin: showActionView ? 'round-round' : 'circle-circle', size: "xs", qa: isRowType ? 'g-md-yfm-table-row-btn' : 'g-md-yfm-table-column-btn', ...switcherProps, ...switcherMouseProps, children: showActionView ? (_jsx(Icon, { data: canDrag ? GripColumn : DotsColumn })) : (String.fromCharCode(8194) // en space
|
|
36
|
+
) }) })), popupProps: {
|
|
37
|
+
zIndex: 1010,
|
|
38
|
+
placement: isRowType ? 'right-start' : 'bottom-start',
|
|
39
|
+
}, menuProps: { qa: `g-md-yfm-table-${dirtype}-menu` }, items: dropdownItems }) }));
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=FloatingMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FloatingMenu.js","sourceRoot":"../../../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/FloatingMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["import {useState} from 'react';\n\nimport {Ellipsis as DotsColumn, GripHorizontal as GripColumn} from '@gravity-ui/icons';\nimport {\n Button,\n type ButtonButtonProps,\n DropdownMenu,\n type DropdownMenuProps,\n Flex,\n Icon,\n} from '@gravity-ui/uikit';\n\nimport {useBooleanState} from 'src/react-utils';\n\nimport {FloatingPopup, type FloatingPopupProps} from '../FloatingPopup';\n\nconst popupOffset: FloatingPopupProps['offset'] = {\n mainAxis: -9.5,\n};\n\nexport type FloatingMenuProps = {\n dirtype: 'row' | 'column';\n canDrag: boolean;\n anchorElement: Element;\n dropdownItems: DropdownMenuProps<unknown>['items'];\n switcherMouseProps?: Pick<ButtonButtonProps, 'onMouseDown' | 'onMouseMove' | 'onMouseUp'>;\n onOpenToggle: NonNullable<DropdownMenuProps<unknown>['onOpenToggle']>;\n};\n\nexport const FloatingMenu: React.FC<FloatingMenuProps> = function YfmTableFloatingMenu(props) {\n const {dirtype, canDrag, anchorElement, dropdownItems, switcherMouseProps, onOpenToggle} =\n props;\n\n const [isMenuOpened, setMenuOpened] = useState(false);\n const [isHovered, setHovered, unsetHovered] = useBooleanState(false);\n\n const showActionView = isMenuOpened || isHovered;\n const isRowType = dirtype === 'row';\n\n return (\n <FloatingPopup\n open\n offset={popupOffset}\n anchorElement={anchorElement}\n placement={isRowType ? 'left' : 'top'}\n floatingStyles={{\n lineHeight: 'initial',\n }}\n style={{\n backgroundColor: 'transparent',\n }}\n >\n <DropdownMenu\n onOpenToggle={(...args) => {\n setMenuOpened(...args);\n onOpenToggle(...args);\n }}\n renderSwitcher={(switcherProps) => (\n <Flex\n centerContent\n width={20} // xs button\n height={20} // xs button\n style={{\n borderRadius: 'var(--g-border-radius-xs)',\n backgroundColor: showActionView\n ? 'var(--g-color-base-background)'\n : undefined,\n }}\n onMouseEnter={setHovered}\n onMouseLeave={unsetHovered}\n >\n <Button\n style={{\n cursor: canDrag ? 'grab' : undefined,\n transform: isRowType ? 'rotate(90deg)' : undefined,\n '--g-button-height': showActionView ? undefined : '5px',\n '--_--background-color': showActionView\n ? undefined\n : 'var(--g-color-base-background)',\n }}\n view={isMenuOpened ? 'outlined-action' : 'outlined'}\n pin={showActionView ? 'round-round' : 'circle-circle'}\n size=\"xs\"\n qa={isRowType ? 'g-md-yfm-table-row-btn' : 'g-md-yfm-table-column-btn'}\n {...switcherProps}\n {...switcherMouseProps}\n >\n {showActionView ? (\n <Icon data={canDrag ? GripColumn : DotsColumn} />\n ) : (\n String.fromCharCode(8194) // en space\n )}\n </Button>\n </Flex>\n )}\n popupProps={{\n zIndex: 1010,\n placement: isRowType ? 'right-start' : 'bottom-start',\n }}\n menuProps={{qa: `g-md-yfm-table-${dirtype}-menu`}}\n items={dropdownItems}\n />\n </FloatingPopup>\n );\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./FloatingMenu.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/index.ts"],"names":[],"mappings":"AAAA,kCAA+B","sourcesContent":["export * from './FloatingMenu';\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { DnDControlHandler } from "../../dnd/dnd.js";
|
|
2
|
+
import { type FloatingMenuProps } from "../FloatingMenu/FloatingMenu.js";
|
|
3
|
+
export type FloatingMenuControlProps = {
|
|
4
|
+
acnhorElement: Element;
|
|
5
|
+
multiple: boolean;
|
|
6
|
+
type: FloatingMenuProps['dirtype'];
|
|
7
|
+
dndHandler?: DnDControlHandler;
|
|
8
|
+
onMenuOpenToggle: FloatingMenuProps['onOpenToggle'];
|
|
9
|
+
onClearCellsClick: () => void;
|
|
10
|
+
onInsertBeforeClick: () => void;
|
|
11
|
+
onInsertAfterClick: () => void;
|
|
12
|
+
onRemoveRangeClick: () => void;
|
|
13
|
+
onRemoveTableClick: () => void;
|
|
14
|
+
};
|
|
15
|
+
export declare const FloatingMenuControl: React.FC<FloatingMenuControlProps>;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { ArrowDown, ArrowLeft, ArrowRight, ArrowUp, BroomMotion as ClearCells, TrashBin, Xmark, } from '@gravity-ui/icons';
|
|
4
|
+
import { Icon } from '@gravity-ui/uikit';
|
|
5
|
+
import { i18n } from "../../../../../../../i18n/yfm-table/index.js";
|
|
6
|
+
import { FloatingMenu } from "../FloatingMenu/FloatingMenu.js";
|
|
7
|
+
export const FloatingMenuControl = function YfmTableFloatingMenuControl({ type, multiple, dndHandler, acnhorElement, onMenuOpenToggle, onClearCellsClick, onInsertBeforeClick, onInsertAfterClick, onRemoveRangeClick, onRemoveTableClick, }) {
|
|
8
|
+
const dropdownItems = useMemo(() => [
|
|
9
|
+
[
|
|
10
|
+
{
|
|
11
|
+
text: i18n(`${type}.add.before`),
|
|
12
|
+
qa: `g-md-yfm-table-action-add-${type}-before`,
|
|
13
|
+
action: onInsertBeforeClick,
|
|
14
|
+
iconStart: _jsx(Icon, { data: type === 'row' ? ArrowUp : ArrowLeft }),
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
text: i18n(`${type}.add.after`),
|
|
18
|
+
qa: `g-md-yfm-table-action-add-${type}-after`,
|
|
19
|
+
action: onInsertAfterClick,
|
|
20
|
+
iconStart: _jsx(Icon, { data: type === 'row' ? ArrowDown : ArrowRight }),
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
[
|
|
24
|
+
{
|
|
25
|
+
text: i18n('cells.clear'),
|
|
26
|
+
qa: `g-md-yfm-table-${type}-clear-cells`,
|
|
27
|
+
action: onClearCellsClick,
|
|
28
|
+
iconStart: _jsx(Icon, { data: ClearCells }),
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
[
|
|
32
|
+
{
|
|
33
|
+
text: i18n(`${type}.remove${multiple ? '.multiple' : ''}`),
|
|
34
|
+
qa: `g-md-yfm-table-action-remove-${type}`,
|
|
35
|
+
action: onRemoveRangeClick,
|
|
36
|
+
iconStart: _jsx(Icon, { data: Xmark }),
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
theme: 'danger',
|
|
40
|
+
text: i18n('table.remove'),
|
|
41
|
+
qa: 'g-md-yfm-table-action-remove-table',
|
|
42
|
+
action: onRemoveTableClick,
|
|
43
|
+
iconStart: _jsx(Icon, { data: TrashBin }),
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
], [
|
|
47
|
+
type,
|
|
48
|
+
multiple,
|
|
49
|
+
onClearCellsClick,
|
|
50
|
+
onInsertAfterClick,
|
|
51
|
+
onInsertBeforeClick,
|
|
52
|
+
onRemoveRangeClick,
|
|
53
|
+
onRemoveTableClick,
|
|
54
|
+
]);
|
|
55
|
+
return (_jsx(FloatingMenu, { dirtype: type, canDrag: dndHandler ? dndHandler.canDrag() : false, onOpenToggle: onMenuOpenToggle, anchorElement: acnhorElement, switcherMouseProps: dndHandler
|
|
56
|
+
? {
|
|
57
|
+
onMouseDown: dndHandler.control_handleMouseDown,
|
|
58
|
+
onMouseMove: dndHandler.control_handleMouseMove,
|
|
59
|
+
onMouseUp: dndHandler.control_handleMouseUp,
|
|
60
|
+
}
|
|
61
|
+
: undefined, dropdownItems: dropdownItems }));
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=FloatingMenuControl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FloatingMenuControl.js","sourceRoot":"../../../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAE9B,OAAO,EACH,SAAS,EACT,SAAS,EACT,UAAU,EACV,OAAO,EACP,WAAW,IAAI,UAAU,EACzB,QAAQ,EACR,KAAK,GACR,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAC,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAEvC,OAAO,EAAC,IAAI,EAAC,qDAA2B;AAGxC,OAAO,EAAC,YAAY,EAAyB,wCAAqC;AAelF,MAAM,CAAC,MAAM,mBAAmB,GAC5B,SAAS,2BAA2B,CAAC,EACjC,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACrB;IACG,MAAM,aAAa,GAAG,OAAO,CACzB,GAAG,EAAE,CACD;QACI;YACI;gBACI,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,aAAa,CAAC;gBAChC,EAAE,EAAE,6BAA6B,IAAI,SAAS;gBAC9C,MAAM,EAAE,mBAAmB;gBAC3B,SAAS,EAAE,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,GAAI;aAClE;YACD;gBACI,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,YAAY,CAAC;gBAC/B,EAAE,EAAE,6BAA6B,IAAI,QAAQ;gBAC7C,MAAM,EAAE,kBAAkB;gBAC1B,SAAS,EAAE,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,GAAI;aACrE;SACJ;QACD;YACI;gBACI,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC;gBACzB,EAAE,EAAE,kBAAkB,IAAI,cAAc;gBACxC,MAAM,EAAE,iBAAiB;gBACzB,SAAS,EAAE,KAAC,IAAI,IAAC,IAAI,EAAE,UAAU,GAAI;aACxC;SACJ;QACD;YACI;gBACI,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,UAAU,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC1D,EAAE,EAAE,gCAAgC,IAAI,EAAE;gBAC1C,MAAM,EAAE,kBAAkB;gBAC1B,SAAS,EAAE,KAAC,IAAI,IAAC,IAAI,EAAE,KAAK,GAAI;aACnC;YACD;gBACI,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC;gBAC1B,EAAE,EAAE,oCAAoC;gBACxC,MAAM,EAAE,kBAAkB;gBAC1B,SAAS,EAAE,KAAC,IAAI,IAAC,IAAI,EAAE,QAAQ,GAAI;aACtC;SACJ;KACyC,EAClD;QACI,IAAI;QACJ,QAAQ;QACR,iBAAiB;QACjB,kBAAkB;QAClB,mBAAmB;QACnB,kBAAkB;QAClB,kBAAkB;KACrB,CACJ,CAAC;IAEF,OAAO,CACH,KAAC,YAAY,IACT,OAAO,EAAE,IAAI,EACb,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,EAClD,YAAY,EAAE,gBAAgB,EAC9B,aAAa,EAAE,aAAa,EAC5B,kBAAkB,EACd,UAAU;YACN,CAAC,CAAC;gBACI,WAAW,EAAE,UAAU,CAAC,uBAAuB;gBAC/C,WAAW,EAAE,UAAU,CAAC,uBAAuB;gBAC/C,SAAS,EAAE,UAAU,CAAC,qBAAqB;aAC9C;YACH,CAAC,CAAC,SAAS,EAEnB,aAAa,EAAE,aAAa,GAC9B,CACL,CAAC;AACN,CAAC,CAAC","sourcesContent":["import {useMemo} from 'react';\n\nimport {\n ArrowDown,\n ArrowLeft,\n ArrowRight,\n ArrowUp,\n BroomMotion as ClearCells,\n TrashBin,\n Xmark,\n} from '@gravity-ui/icons';\nimport {Icon} from '@gravity-ui/uikit';\n\nimport {i18n} from 'src/i18n/yfm-table';\n\nimport type {DnDControlHandler} from '../../dnd/dnd';\nimport {FloatingMenu, type FloatingMenuProps} from '../FloatingMenu/FloatingMenu';\n\nexport type FloatingMenuControlProps = {\n acnhorElement: Element;\n multiple: boolean;\n type: FloatingMenuProps['dirtype'];\n dndHandler?: DnDControlHandler;\n onMenuOpenToggle: FloatingMenuProps['onOpenToggle'];\n onClearCellsClick: () => void;\n onInsertBeforeClick: () => void;\n onInsertAfterClick: () => void;\n onRemoveRangeClick: () => void;\n onRemoveTableClick: () => void;\n};\n\nexport const FloatingMenuControl: React.FC<FloatingMenuControlProps> =\n function YfmTableFloatingMenuControl({\n type,\n multiple,\n dndHandler,\n acnhorElement,\n onMenuOpenToggle,\n onClearCellsClick,\n onInsertBeforeClick,\n onInsertAfterClick,\n onRemoveRangeClick,\n onRemoveTableClick,\n }) {\n const dropdownItems = useMemo<FloatingMenuProps['dropdownItems']>(\n () =>\n [\n [\n {\n text: i18n(`${type}.add.before`),\n qa: `g-md-yfm-table-action-add-${type}-before`,\n action: onInsertBeforeClick,\n iconStart: <Icon data={type === 'row' ? ArrowUp : ArrowLeft} />,\n },\n {\n text: i18n(`${type}.add.after`),\n qa: `g-md-yfm-table-action-add-${type}-after`,\n action: onInsertAfterClick,\n iconStart: <Icon data={type === 'row' ? ArrowDown : ArrowRight} />,\n },\n ],\n [\n {\n text: i18n('cells.clear'),\n qa: `g-md-yfm-table-${type}-clear-cells`,\n action: onClearCellsClick,\n iconStart: <Icon data={ClearCells} />,\n },\n ],\n [\n {\n text: i18n(`${type}.remove${multiple ? '.multiple' : ''}`),\n qa: `g-md-yfm-table-action-remove-${type}`,\n action: onRemoveRangeClick,\n iconStart: <Icon data={Xmark} />,\n },\n {\n theme: 'danger',\n text: i18n('table.remove'),\n qa: 'g-md-yfm-table-action-remove-table',\n action: onRemoveTableClick,\n iconStart: <Icon data={TrashBin} />,\n },\n ],\n ] satisfies FloatingMenuProps['dropdownItems'],\n [\n type,\n multiple,\n onClearCellsClick,\n onInsertAfterClick,\n onInsertBeforeClick,\n onRemoveRangeClick,\n onRemoveTableClick,\n ],\n );\n\n return (\n <FloatingMenu\n dirtype={type}\n canDrag={dndHandler ? dndHandler.canDrag() : false}\n onOpenToggle={onMenuOpenToggle}\n anchorElement={acnhorElement}\n switcherMouseProps={\n dndHandler\n ? {\n onMouseDown: dndHandler.control_handleMouseDown,\n onMouseMove: dndHandler.control_handleMouseMove,\n onMouseUp: dndHandler.control_handleMouseUp,\n }\n : undefined\n }\n dropdownItems={dropdownItems}\n />\n );\n };\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./FloatingMenuControl.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/index.ts"],"names":[],"mappings":"AAAA,yCAAsC","sourcesContent":["export * from './FloatingMenuControl';\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type InsertCursorProps } from "./InsertCursor.js";
|
|
2
|
+
import { type PlusButtonProps } from "./PlusButton.js";
|
|
3
|
+
export type FloatingPlusButtonProps = Pick<PlusButtonProps, 'onClick'> & Pick<InsertCursorProps, 'type' | 'anchor'>;
|
|
4
|
+
export declare const FloatingPlusButton: React.FC<FloatingPlusButtonProps>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { FloatingPopup } from "../FloatingPopup/index.js";
|
|
4
|
+
import { InsertCursor } from "./InsertCursor.js";
|
|
5
|
+
import { PlusButton } from "./PlusButton.js";
|
|
6
|
+
const styles = {
|
|
7
|
+
borderRadius: '100px', // button circle border radius
|
|
8
|
+
background: 'transparent',
|
|
9
|
+
};
|
|
10
|
+
const placementByType = {
|
|
11
|
+
row: 'left-end',
|
|
12
|
+
column: 'top-end',
|
|
13
|
+
};
|
|
14
|
+
const offsetByType = {
|
|
15
|
+
row: { alignmentAxis: -10 },
|
|
16
|
+
column: { alignmentAxis: -10 },
|
|
17
|
+
};
|
|
18
|
+
export const FloatingPlusButton = function YfmTableFloatingPlusButton({ anchor, type, ...btnProps }) {
|
|
19
|
+
const [hovered, setHovered] = useState(false);
|
|
20
|
+
return (_jsxs(_Fragment, { children: [_jsx(FloatingPopup, { open: true, anchorElement: anchor, placement: placementByType[type], offset: offsetByType[type], style: styles, children: _jsx(PlusButton, { ...btnProps, onHoverChange: setHovered, qa: `g-md-yfm-table-plus-${type}` }) }), hovered && _jsx(InsertCursor, { anchor: anchor, type: type })] }));
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=FloatingPlusButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FloatingPlusButton.js","sourceRoot":"../../../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/FloatingPlusButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAC,aAAa,EAA0B,kCAAyB;AAExE,OAAO,EAAC,YAAY,EAAyB,0BAAuB;AACpE,OAAO,EAAC,UAAU,EAAuB,wBAAqB;AAE9D,MAAM,MAAM,GAAwB;IAChC,YAAY,EAAE,OAAO,EAAE,8BAA8B;IACrD,UAAU,EAAE,aAAa;CAC5B,CAAC;AACF,MAAM,eAAe,GAAuE;IACxF,GAAG,EAAE,UAAU;IACf,MAAM,EAAE,SAAS;CACpB,CAAC;AACF,MAAM,YAAY,GAAoE;IAClF,GAAG,EAAE,EAAC,aAAa,EAAE,CAAC,EAAE,EAAC;IACzB,MAAM,EAAE,EAAC,aAAa,EAAE,CAAC,EAAE,EAAC;CAC/B,CAAC;AAKF,MAAM,CAAC,MAAM,kBAAkB,GAC3B,SAAS,0BAA0B,CAAC,EAAC,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAC;IAC3D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE9C,OAAO,CACH,8BACI,KAAC,aAAa,IACV,IAAI,QACJ,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,EAChC,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,EAC1B,KAAK,EAAE,MAAM,YAEb,KAAC,UAAU,OACH,QAAQ,EACZ,aAAa,EAAE,UAAU,EACzB,EAAE,EAAE,uBAAuB,IAAI,EAAE,GACnC,GACU,EACf,OAAO,IAAI,KAAC,YAAY,IAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAI,IACzD,CACN,CAAC;AACN,CAAC,CAAC","sourcesContent":["import {useState} from 'react';\n\nimport {FloatingPopup, type FloatingPopupProps} from '../FloatingPopup';\n\nimport {InsertCursor, type InsertCursorProps} from './InsertCursor';\nimport {PlusButton, type PlusButtonProps} from './PlusButton';\n\nconst styles: React.CSSProperties = {\n borderRadius: '100px', // button circle border radius\n background: 'transparent',\n};\nconst placementByType: Record<InsertCursorProps['type'], FloatingPopupProps['placement']> = {\n row: 'left-end',\n column: 'top-end',\n};\nconst offsetByType: Record<InsertCursorProps['type'], FloatingPopupProps['offset']> = {\n row: {alignmentAxis: -10},\n column: {alignmentAxis: -10},\n};\n\nexport type FloatingPlusButtonProps = Pick<PlusButtonProps, 'onClick'> &\n Pick<InsertCursorProps, 'type' | 'anchor'>;\n\nexport const FloatingPlusButton: React.FC<FloatingPlusButtonProps> =\n function YfmTableFloatingPlusButton({anchor, type, ...btnProps}) {\n const [hovered, setHovered] = useState(false);\n\n return (\n <>\n <FloatingPopup\n open\n anchorElement={anchor}\n placement={placementByType[type]}\n offset={offsetByType[type]}\n style={styles}\n >\n <PlusButton\n {...btnProps}\n onHoverChange={setHovered}\n qa={`g-md-yfm-table-plus-${type}`}\n />\n </FloatingPopup>\n {hovered && <InsertCursor anchor={anchor} type={type} />}\n </>\n );\n };\n"]}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
3
|
+
// eslint-disable-next-line import/no-extraneous-dependencies
|
|
4
|
+
import { autoUpdate, computePosition } from '@floating-ui/dom';
|
|
5
|
+
import { Portal } from '@gravity-ui/uikit';
|
|
6
|
+
import { useLatest } from 'react-use';
|
|
7
|
+
import { useElementState } from "../../../../../../../react-utils/index.js";
|
|
8
|
+
const placementByType = {
|
|
9
|
+
row: 'bottom-start',
|
|
10
|
+
column: 'right-start',
|
|
11
|
+
};
|
|
12
|
+
export const InsertCursor = function YfmTableInsertCursor({ type, anchor: referenceEl, }) {
|
|
13
|
+
const [floatingEl, setFloatingEl] = useElementState();
|
|
14
|
+
const { width, height, updateRect } = useSize(type, () => referenceEl.getBoundingClientRect());
|
|
15
|
+
const widhtRef = useLatest(width);
|
|
16
|
+
const [floatingStyles, setFloatingStyles] = useState({ top: -9999, left: -9999 });
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
if (referenceEl && floatingEl) {
|
|
19
|
+
return autoUpdate(referenceEl, floatingEl, () => {
|
|
20
|
+
updateRect(referenceEl.getBoundingClientRect());
|
|
21
|
+
computePosition(referenceEl, floatingEl, {
|
|
22
|
+
placement: placementByType[type],
|
|
23
|
+
}).then(({ x, y }) => {
|
|
24
|
+
if (type === 'row')
|
|
25
|
+
setFloatingStyles({ left: x, top: y - 1 });
|
|
26
|
+
else
|
|
27
|
+
setFloatingStyles({ left: x - 1, top: y });
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
return undefined;
|
|
32
|
+
}, [referenceEl, floatingEl, widhtRef, type, updateRect]);
|
|
33
|
+
return (_jsx(Portal, { children: _jsx("div", { ref: setFloatingEl, style: {
|
|
34
|
+
position: 'absolute',
|
|
35
|
+
zIndex: 1005,
|
|
36
|
+
width,
|
|
37
|
+
height,
|
|
38
|
+
pointerEvents: 'auto',
|
|
39
|
+
outline: 'none',
|
|
40
|
+
backgroundColor: 'var(--g-color-line-brand)',
|
|
41
|
+
...floatingStyles,
|
|
42
|
+
} }) }));
|
|
43
|
+
};
|
|
44
|
+
function useSize(type, getRect) {
|
|
45
|
+
const [size, setSize] = useState(() => getSize(type, getRect()));
|
|
46
|
+
const sizeRef = useLatest(size);
|
|
47
|
+
return {
|
|
48
|
+
width: size.width,
|
|
49
|
+
height: size.height,
|
|
50
|
+
updateRect: useCallback((rect) => {
|
|
51
|
+
const newSize = getSize(type, rect);
|
|
52
|
+
if (type === 'row' && newSize.width !== sizeRef.current.width)
|
|
53
|
+
setSize(newSize);
|
|
54
|
+
if (type === 'column' && newSize.height !== sizeRef.current.height)
|
|
55
|
+
setSize(newSize);
|
|
56
|
+
}, [sizeRef, type]),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function getSize(type, rect) {
|
|
60
|
+
if (type === 'row')
|
|
61
|
+
return { height: 2, width: rect.width };
|
|
62
|
+
return { width: 2, height: rect.height };
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=InsertCursor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InsertCursor.js","sourceRoot":"../../../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.tsx"],"names":[],"mappings":"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","sourcesContent":["import {useCallback, useEffect, useState} from 'react';\n\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport {type Placement, type ReferenceElement, autoUpdate, computePosition} from '@floating-ui/dom';\nimport {Portal} from '@gravity-ui/uikit';\nimport {useLatest} from 'react-use';\n\nimport {useElementState} from 'src/react-utils';\n\nconst placementByType: Record<InsertCursorProps['type'], Placement> = {\n row: 'bottom-start',\n column: 'right-start',\n};\n\nexport type InsertCursorProps = {\n anchor: ReferenceElement;\n type: 'row' | 'column';\n};\n\nexport const InsertCursor: React.FC<InsertCursorProps> = function YfmTableInsertCursor({\n type,\n anchor: referenceEl,\n}) {\n const [floatingEl, setFloatingEl] = useElementState();\n const {width, height, updateRect} = useSize(type, () => referenceEl.getBoundingClientRect());\n const widhtRef = useLatest(width);\n const [floatingStyles, setFloatingStyles] = useState({top: -9999, left: -9999});\n\n useEffect(() => {\n if (referenceEl && floatingEl) {\n return autoUpdate(referenceEl, floatingEl, () => {\n updateRect(referenceEl.getBoundingClientRect());\n\n computePosition(referenceEl, floatingEl, {\n placement: placementByType[type],\n }).then(({x, y}) => {\n if (type === 'row') setFloatingStyles({left: x, top: y - 1});\n else setFloatingStyles({left: x - 1, top: y});\n });\n });\n }\n return undefined;\n }, [referenceEl, floatingEl, widhtRef, type, updateRect]);\n\n return (\n <Portal>\n <div\n ref={setFloatingEl}\n style={{\n position: 'absolute',\n zIndex: 1005,\n width,\n height,\n pointerEvents: 'auto',\n outline: 'none',\n backgroundColor: 'var(--g-color-line-brand)',\n ...floatingStyles,\n }}\n />\n </Portal>\n );\n};\n\ntype Size = {\n width: number;\n height: number;\n};\n\nfunction useSize(type: InsertCursorProps['type'], getRect: () => Size) {\n const [size, setSize] = useState<Size>(() => getSize(type, getRect()));\n const sizeRef = useLatest(size);\n\n return {\n width: size.width,\n height: size.height,\n updateRect: useCallback(\n (rect: Size) => {\n const newSize = getSize(type, rect);\n if (type === 'row' && newSize.width !== sizeRef.current.width) setSize(newSize);\n if (type === 'column' && newSize.height !== sizeRef.current.height)\n setSize(newSize);\n },\n [sizeRef, type],\n ),\n };\n}\n\nfunction getSize(type: InsertCursorProps['type'], rect: Size): Size {\n if (type === 'row') return {height: 2, width: rect.width};\n return {width: 2, height: rect.height};\n}\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect } from 'react';
|
|
3
|
+
import { Plus as PlusIcon } from '@gravity-ui/icons';
|
|
4
|
+
import { Button, Flex, Icon } from '@gravity-ui/uikit';
|
|
5
|
+
import { useBooleanState } from "../../../../../../../react-utils/index.js";
|
|
6
|
+
export const PlusButton = function YfmTablePlusButton({ qa, onClick, onHoverChange, }) {
|
|
7
|
+
const [hovered, setHovered, unsetHovered] = useBooleanState(false);
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
onHoverChange(hovered);
|
|
10
|
+
}, [hovered, onHoverChange]);
|
|
11
|
+
return (_jsx(Flex, { centerContent: true, width: 20, height: 20, onMouseEnter: setHovered, onMouseLeave: unsetHovered, style: {
|
|
12
|
+
borderRadius: '100px', // button circle border radius
|
|
13
|
+
backgroundColor: hovered ? 'var(--g-color-base-background)' : undefined,
|
|
14
|
+
}, children: _jsx(Button, { qa: qa, size: "xs", pin: "circle-circle", view: hovered ? 'outlined-action' : 'normal', onClick: onClick, style: {
|
|
15
|
+
'--g-button-height': hovered ? undefined : '4px',
|
|
16
|
+
'--_--background-color-hover': hovered
|
|
17
|
+
? 'var(--g-color-base-background)'
|
|
18
|
+
: undefined,
|
|
19
|
+
color: hovered ? undefined : 'var(--g-color-base-generic)',
|
|
20
|
+
}, children: _jsx(Icon, { data: PlusIcon }) }) }));
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=PlusButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlusButton.js","sourceRoot":"../../../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/PlusButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAC,IAAI,IAAI,QAAQ,EAAC,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAe,MAAM,mBAAmB,CAAC;AAEnE,OAAO,EAAC,eAAe,EAAC,kDAAwB;AAOhD,MAAM,CAAC,MAAM,UAAU,GAA8B,SAAS,kBAAkB,CAAC,EAC7E,EAAE,EACF,OAAO,EACP,aAAa,GAChB;IACG,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACnE,SAAS,CAAC,GAAG,EAAE;QACX,aAAa,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;IAE7B,OAAO,CACH,KAAC,IAAI,IACD,aAAa,QACb,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,EACV,YAAY,EAAE,UAAU,EACxB,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE;YACH,YAAY,EAAE,OAAO,EAAE,8BAA8B;YACrD,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,SAAS;SAC1E,YAED,KAAC,MAAM,IACH,EAAE,EAAE,EAAE,EACN,IAAI,EAAC,IAAI,EACT,GAAG,EAAC,eAAe,EACnB,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,EAC5C,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE;gBACH,mBAAmB,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;gBAChD,6BAA6B,EAAE,OAAO;oBAClC,CAAC,CAAC,gCAAgC;oBAClC,CAAC,CAAC,SAAS;gBACf,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,6BAA6B;aAC7D,YAED,KAAC,IAAI,IAAC,IAAI,EAAE,QAAQ,GAAI,GACnB,GACN,CACV,CAAC;AACN,CAAC,CAAC","sourcesContent":["import {useEffect} from 'react';\n\nimport {Plus as PlusIcon} from '@gravity-ui/icons';\nimport {Button, Flex, Icon, type QAProps} from '@gravity-ui/uikit';\n\nimport {useBooleanState} from 'src/react-utils';\n\nexport type PlusButtonProps = QAProps & {\n onClick: () => void;\n onHoverChange: (hover: boolean) => void;\n};\n\nexport const PlusButton: React.FC<PlusButtonProps> = function YfmTablePlusButton({\n qa,\n onClick,\n onHoverChange,\n}) {\n const [hovered, setHovered, unsetHovered] = useBooleanState(false);\n useEffect(() => {\n onHoverChange(hovered);\n }, [hovered, onHoverChange]);\n\n return (\n <Flex\n centerContent\n width={20} // xs button\n height={20} // xs button\n onMouseEnter={setHovered}\n onMouseLeave={unsetHovered}\n style={{\n borderRadius: '100px', // button circle border radius\n backgroundColor: hovered ? 'var(--g-color-base-background)' : undefined,\n }}\n >\n <Button\n qa={qa}\n size=\"xs\"\n pin=\"circle-circle\"\n view={hovered ? 'outlined-action' : 'normal'}\n onClick={onClick}\n style={{\n '--g-button-height': hovered ? undefined : '4px',\n '--_--background-color-hover': hovered\n ? 'var(--g-color-base-background)'\n : undefined,\n color: hovered ? undefined : 'var(--g-color-base-generic)',\n }}\n >\n <Icon data={PlusIcon} />\n </Button>\n </Flex>\n );\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./FloatingPlusButton.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/index.ts"],"names":[],"mappings":"AAAA,wCAAqC","sourcesContent":["export * from './FloatingPlusButton';\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type FloatingPlusButtonProps } from "../FloatingPlusButton/index.js";
|
|
2
|
+
export type FloatingPlusControlProps = {
|
|
3
|
+
type: FloatingPlusButtonProps['type'];
|
|
4
|
+
index: number;
|
|
5
|
+
cellElem: Element;
|
|
6
|
+
tableElem: Element;
|
|
7
|
+
onClick: (rowIdx: number) => void;
|
|
8
|
+
};
|
|
9
|
+
export declare const FloatingPlusControl: import("react").NamedExoticComponent<FloatingPlusControlProps>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { memo, useMemo } from 'react';
|
|
3
|
+
import { FloatingPlusButton } from "../FloatingPlusButton/index.js";
|
|
4
|
+
export const FloatingPlusControl = memo(function YfmTableRowFloatingPlusControl({ type, index, cellElem, tableElem, onClick }) {
|
|
5
|
+
const anchor = useMemo(() => ({
|
|
6
|
+
contextElement: tableElem,
|
|
7
|
+
getBoundingClientRect() {
|
|
8
|
+
const cellRect = cellElem.getBoundingClientRect();
|
|
9
|
+
const tableRect = tableElem.getBoundingClientRect();
|
|
10
|
+
return type === 'row'
|
|
11
|
+
? {
|
|
12
|
+
x: tableRect.x,
|
|
13
|
+
y: cellRect.y,
|
|
14
|
+
width: tableRect.width,
|
|
15
|
+
height: cellRect.height,
|
|
16
|
+
top: cellRect.top,
|
|
17
|
+
left: tableRect.left,
|
|
18
|
+
right: tableRect.right,
|
|
19
|
+
bottom: cellRect.top,
|
|
20
|
+
}
|
|
21
|
+
: {
|
|
22
|
+
x: cellRect.x,
|
|
23
|
+
y: tableRect.y,
|
|
24
|
+
width: cellRect.width,
|
|
25
|
+
height: tableRect.height,
|
|
26
|
+
top: tableRect.top,
|
|
27
|
+
left: cellRect.left,
|
|
28
|
+
right: cellRect.right,
|
|
29
|
+
bottom: tableRect.top,
|
|
30
|
+
};
|
|
31
|
+
},
|
|
32
|
+
}), [cellElem, tableElem, type]);
|
|
33
|
+
return _jsx(FloatingPlusButton, { anchor: anchor, type: type, onClick: () => onClick(index) });
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=FloatingPlusControl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FloatingPlusControl.js","sourceRoot":"../../../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,IAAI,EAAE,OAAO,EAAC,MAAM,OAAO,CAAC;AAKpC,OAAO,EAAC,kBAAkB,EAA+B,uCAA8B;AAUvF,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CACnC,SAAS,8BAA8B,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAC;IAC/E,MAAM,MAAM,GAAG,OAAO,CAClB,GAAG,EAAE,CAAC,CAAC;QACH,cAAc,EAAE,SAAS;QACzB,qBAAqB;YACjB,MAAM,QAAQ,GAAG,QAAQ,CAAC,qBAAqB,EAAE,CAAC;YAClD,MAAM,SAAS,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC;YAEpD,OAAO,IAAI,KAAK,KAAK;gBACjB,CAAC,CAAC;oBACI,CAAC,EAAE,SAAS,CAAC,CAAC;oBACd,CAAC,EAAE,QAAQ,CAAC,CAAC;oBACb,KAAK,EAAE,SAAS,CAAC,KAAK;oBACtB,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,GAAG,EAAE,QAAQ,CAAC,GAAG;oBACjB,IAAI,EAAE,SAAS,CAAC,IAAI;oBACpB,KAAK,EAAE,SAAS,CAAC,KAAK;oBACtB,MAAM,EAAE,QAAQ,CAAC,GAAG;iBACvB;gBACH,CAAC,CAAC;oBACI,CAAC,EAAE,QAAQ,CAAC,CAAC;oBACb,CAAC,EAAE,SAAS,CAAC,CAAC;oBACd,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,MAAM,EAAE,SAAS,CAAC,MAAM;oBACxB,GAAG,EAAE,SAAS,CAAC,GAAG;oBAClB,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,MAAM,EAAE,SAAS,CAAC,GAAG;iBACxB,CAAC;QACZ,CAAC;KACJ,CAAC,EACF,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,CAC9B,CAAC;IAEF,OAAO,KAAC,kBAAkB,IAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAI,CAAC;AAC7F,CAAC,CACJ,CAAC","sourcesContent":["import {memo, useMemo} from 'react';\n\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport type {VirtualElement} from '@floating-ui/dom';\n\nimport {FloatingPlusButton, type FloatingPlusButtonProps} from '../FloatingPlusButton';\n\nexport type FloatingPlusControlProps = {\n type: FloatingPlusButtonProps['type'];\n index: number;\n cellElem: Element;\n tableElem: Element;\n onClick: (rowIdx: number) => void;\n};\n\nexport const FloatingPlusControl = memo<FloatingPlusControlProps>(\n function YfmTableRowFloatingPlusControl({type, index, cellElem, tableElem, onClick}) {\n const anchor = useMemo<VirtualElement>(\n () => ({\n contextElement: tableElem,\n getBoundingClientRect() {\n const cellRect = cellElem.getBoundingClientRect();\n const tableRect = tableElem.getBoundingClientRect();\n\n return type === 'row'\n ? {\n x: tableRect.x,\n y: cellRect.y,\n width: tableRect.width,\n height: cellRect.height,\n top: cellRect.top,\n left: tableRect.left,\n right: tableRect.right,\n bottom: cellRect.top,\n }\n : {\n x: cellRect.x,\n y: tableRect.y,\n width: cellRect.width,\n height: tableRect.height,\n top: tableRect.top,\n left: cellRect.left,\n right: cellRect.right,\n bottom: tableRect.top,\n };\n },\n }),\n [cellElem, tableElem, type],\n );\n\n return <FloatingPlusButton anchor={anchor} type={type} onClick={() => onClick(index)} />;\n },\n);\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./FloatingPlusControl.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/index.ts"],"names":[],"mappings":"AAAA,yCAAsC","sourcesContent":["export * from './FloatingPlusControl';\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
.g-md-yfm-table-floating-popup {
|
|
2
|
+
position: relative;
|
|
3
|
+
border-radius: var(--g-border-radius-xs);
|
|
4
|
+
outline: none;
|
|
5
|
+
background-color: var(--g-color-base-float);
|
|
6
|
+
}
|
|
7
|
+
.g-md-yfm-table-floating-popup > :first-child {
|
|
8
|
+
border-start-start-radius: inherit;
|
|
9
|
+
border-start-end-radius: inherit;
|
|
10
|
+
}
|
|
11
|
+
.g-md-yfm-table-floating-popup > :last-child {
|
|
12
|
+
border-end-end-radius: inherit;
|
|
13
|
+
border-end-start-radius: inherit;
|
|
14
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type OffsetOptions, type Placement, type ReferenceType } from '@floating-ui/react';
|
|
2
|
+
import { type DOMProps, type QAProps } from '@gravity-ui/uikit';
|
|
3
|
+
import "./FloatingPopup.css";
|
|
4
|
+
export type FloatingPopupProps = QAProps & DOMProps & {
|
|
5
|
+
open?: boolean;
|
|
6
|
+
zIndex?: number;
|
|
7
|
+
placement: Placement;
|
|
8
|
+
offset?: OffsetOptions;
|
|
9
|
+
anchorElement: ReferenceType | undefined | null;
|
|
10
|
+
children: React.ReactNode;
|
|
11
|
+
floatingStyles?: React.CSSProperties;
|
|
12
|
+
};
|
|
13
|
+
export declare const FloatingPopup: React.FC<FloatingPopupProps>;
|