d2coreui 23.0.14 → 23.0.15
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/components/clipboard/clipboardUtils.ts +53 -0
- package/components/codemirror/SyntaxHighlighter.tsx +58 -0
- package/components/collapse/expandable.tsx +48 -0
- package/components/color/colorPicker.tsx +121 -0
- package/components/color/colorSwatch.d.ts +18 -13
- package/components/color/colorSwatch.jsx +87 -0
- package/components/color/colorUtils.ts +60 -0
- package/components/date/dateRangeInput.tsx +468 -0
- package/components/date/dateRangeInputAdvancedPanel.tsx +238 -0
- package/components/date/dateRangeInputConfirm.tsx +200 -0
- package/components/date/dateTimeInput.tsx +633 -0
- package/components/date/durationInput.tsx +375 -0
- package/components/form/NiceFormItem.tsx +32 -0
- package/components/grid/cell/beanAccessor.ts +17 -0
- package/components/grid/cell/cellEditorUtils.ts +12 -0
- package/components/grid/cell/customEnumCellEditor.tsx +130 -0
- package/components/grid/cell/dataGridCellEditorComponent.tsx +61 -0
- package/components/grid/cell/dateCellEditor.tsx +83 -0
- package/components/grid/cell/durationCellEditor.tsx +105 -0
- package/components/grid/cell/hexaOctetStringCellEditor.tsx +101 -0
- package/components/grid/cell/hexaValueCellEditor.tsx +92 -0
- package/components/grid/cell/numberCellEditor.tsx +115 -0
- package/components/grid/cell/rangeSelector.d.ts +9 -78
- package/components/grid/cell/rangeSelector.js +674 -527
- package/components/grid/cell/simpleStatusTextCellEditor.tsx +168 -0
- package/components/grid/cell/statusTextCellEditor.tsx +198 -0
- package/components/grid/cell/tableDefaultRowStyleRules.ts +51 -0
- package/components/grid/cell/textCellEditor.tsx +94 -0
- package/components/grid/cell/withAgGridHooks.tsx +15 -0
- package/components/grid/columnUtils.ts +29 -0
- package/components/grid/config/columnTransfer.tsx +258 -0
- package/components/grid/config/dataGridEditor.tsx +328 -0
- package/components/grid/config/rowHeightCalculator.tsx +29 -0
- package/components/grid/config/rowStylePicker.tsx +196 -0
- package/components/grid/dataGrid.tsx +2183 -0
- package/components/grid/detail/detailHeaderPanel.tsx +59 -0
- package/components/grid/export/contextMenu.tsx +154 -0
- package/components/grid/export/progressPopup.tsx +106 -0
- package/components/grid/export/worker/clipboardExport.ts +10 -0
- package/components/grid/export/worker/csvExport.ts +10 -0
- package/components/grid/export/worker/pdfExport.ts +98 -0
- package/components/grid/export/worker/txtExport.ts +21 -0
- package/components/grid/extendedDataGrid.tsx +974 -0
- package/components/grid/filter/customColumnFilter.tsx +14 -0
- package/components/grid/filter/dataGridColumnFilter.tsx +70 -0
- package/components/grid/filter/dateColumnFilter.tsx +34 -0
- package/components/grid/filter/textColumnFilter.tsx +37 -0
- package/components/grid/filter/wildcardQuickFilterEngine.ts +50 -0
- package/components/grid/header/simpleHeader.tsx +270 -0
- package/components/grid/panel/dataGridPagination.tsx +123 -0
- package/components/grid/panel/loadingOverlay.tsx +14 -0
- package/components/grid/panel/noRecordsOverlay.tsx +16 -0
- package/components/grid/panel/tablePagination.tsx +77 -0
- package/components/icons/dropdownArrow.tsx +67 -0
- package/components/icons/undoIcon.tsx +16 -0
- package/components/input/autoCompleteInput.tsx +174 -0
- package/components/input/draftUtils.tsx +62 -0
- package/components/input/draftail.d.ts +186 -1
- package/components/input/draftail.js +1 -2
- package/components/input/hexaFormattedInput.tsx +64 -0
- package/components/input/mask/helpers.ts +154 -0
- package/components/input/mask/inputMaskCore.ts +452 -0
- package/components/input/mask/pattern.ts +122 -0
- package/components/input/maskedInput.tsx +275 -0
- package/components/input/passwordInput.tsx +62 -0
- package/components/input/simpleAutoComplete.tsx +60 -0
- package/components/input/textarea/extractSpansOfClasses.tsx +125 -0
- package/components/input/textarea/getRanges.ts +82 -0
- package/components/input/textarea/getType.ts +23 -0
- package/components/input/textarea/highlighedContents.tsx +20 -0
- package/components/input/textarea/highlightedTextarea.css +61 -0
- package/components/input/textarea/mentionsWithHighlighting.tsx +95 -0
- package/components/keyboard/keyboardUtils.ts +42 -0
- package/components/modal/draggableModalProvider.tsx +37 -0
- package/components/modal/impl/clamp.ts +4 -0
- package/components/modal/impl/draggableModal.tsx +36 -0
- package/components/modal/impl/draggableModalContext.ts +14 -0
- package/components/modal/impl/draggableModalInner.tsx +114 -0
- package/components/modal/impl/draggableModalReducer.ts +285 -0
- package/components/modal/impl/getWindowSize.ts +6 -0
- package/components/modal/impl/index.ts +5 -0
- package/components/modal/impl/resizeHandle.tsx +12 -0
- package/components/modal/impl/useDrag.ts +57 -0
- package/components/modal/impl/usePrevious.ts +11 -0
- package/components/modal/impl/useResize.ts +79 -0
- package/components/modal/modalDialog.tsx +172 -0
- package/components/picker/enumValuePicker.tsx +48 -0
- package/components/platformSpecific.ts +39 -0
- package/components/scrollTo/dom-scroll-into-view.d.ts +1 -0
- package/components/scrollTo/onlyText.ts +36 -0
- package/components/scrollTo/scrollTo.tsx +324 -0
- package/components/style/withCss.tsx +14 -0
- package/components/style/withInputNumberCss.tsx +18 -0
- package/components/svg.d.ts +1 -0
- package/components/table/dragSortingTable.tsx +123 -0
- package/components/text/impl/innerSize.ts +15 -0
- package/components/text/impl/series.ts +37 -0
- package/components/text/impl/shallowEqual.ts +19 -0
- package/components/text/impl/uniqueId.ts +5 -0
- package/components/text/impl/whilst.ts +25 -0
- package/components/text/textFit.tsx +229 -0
- package/i18n/components.cs.json +101 -101
- package/i18n/components.sk.json +101 -101
- package/i18n/components.uk.json +101 -101
- package/i18n/componentsLocaleHolder.js +24 -29
- package/i18n/componentsLocaleLoader.d.ts +9 -0
- package/lib/esm/components/color/colorSwatch.d.ts +13 -0
- package/lib/esm/components/grid/cell/rangeSelector.d.ts +78 -0
- package/lib/esm/components/grid/cell/rangeSelector.js +527 -0
- package/{components → lib/esm/components}/grid/export/contextMenu.js +4 -4
- package/lib/esm/components/input/draftail.d.ts +1 -0
- package/lib/esm/components/input/draftail.js +2 -0
- package/lib/esm/i18n/components.cs.json +101 -0
- package/lib/esm/i18n/components.sk.json +101 -0
- package/lib/esm/i18n/components.uk.json +101 -0
- package/lib/esm/i18n/componentsLocaleHolder.js +29 -0
- package/lib/esm/package.json +70 -0
- package/lib/esm/tsconfig.build.json +24 -0
- package/lib/esm/tsconfig.json +11 -0
- package/package.json +3 -3
- package/tsconfig.build.json +24 -24
- package/tsconfig.json +11 -11
- /package/{components → lib/esm/components}/clipboard/clipboardUtils.d.ts +0 -0
- /package/{components → lib/esm/components}/clipboard/clipboardUtils.js +0 -0
- /package/{components → lib/esm/components}/clipboard/clipboardUtils.js.map +0 -0
- /package/{components → lib/esm/components}/codemirror/SyntaxHighlighter.d.ts +0 -0
- /package/{components → lib/esm/components}/codemirror/SyntaxHighlighter.js +0 -0
- /package/{components → lib/esm/components}/codemirror/SyntaxHighlighter.js.map +0 -0
- /package/{components → lib/esm/components}/collapse/expandable.d.ts +0 -0
- /package/{components → lib/esm/components}/collapse/expandable.js +0 -0
- /package/{components → lib/esm/components}/collapse/expandable.js.map +0 -0
- /package/{components → lib/esm/components}/color/colorPicker.d.ts +0 -0
- /package/{components → lib/esm/components}/color/colorPicker.js +0 -0
- /package/{components → lib/esm/components}/color/colorPicker.js.map +0 -0
- /package/{components → lib/esm/components}/color/colorSwatch.js +0 -0
- /package/{components → lib/esm/components}/color/colorSwatch.js.map +0 -0
- /package/{components → lib/esm/components}/color/colorUtils.d.ts +0 -0
- /package/{components → lib/esm/components}/color/colorUtils.js +0 -0
- /package/{components → lib/esm/components}/color/colorUtils.js.map +0 -0
- /package/{components → lib/esm/components}/date/dateRangeInput.d.ts +0 -0
- /package/{components → lib/esm/components}/date/dateRangeInput.js +0 -0
- /package/{components → lib/esm/components}/date/dateRangeInput.js.map +0 -0
- /package/{components → lib/esm/components}/date/dateRangeInputAdvancedPanel.d.ts +0 -0
- /package/{components → lib/esm/components}/date/dateRangeInputAdvancedPanel.js +0 -0
- /package/{components → lib/esm/components}/date/dateRangeInputAdvancedPanel.js.map +0 -0
- /package/{components → lib/esm/components}/date/dateRangeInputConfirm.d.ts +0 -0
- /package/{components → lib/esm/components}/date/dateRangeInputConfirm.js +0 -0
- /package/{components → lib/esm/components}/date/dateRangeInputConfirm.js.map +0 -0
- /package/{components → lib/esm/components}/date/dateTimeInput.d.ts +0 -0
- /package/{components → lib/esm/components}/date/dateTimeInput.js +0 -0
- /package/{components → lib/esm/components}/date/dateTimeInput.js.map +0 -0
- /package/{components → lib/esm/components}/date/durationInput.d.ts +0 -0
- /package/{components → lib/esm/components}/date/durationInput.js +0 -0
- /package/{components → lib/esm/components}/date/durationInput.js.map +0 -0
- /package/{components → lib/esm/components}/form/NiceFormItem.d.ts +0 -0
- /package/{components → lib/esm/components}/form/NiceFormItem.js +0 -0
- /package/{components → lib/esm/components}/form/NiceFormItem.js.map +0 -0
- /package/{components → lib/esm/components}/grid/cell/beanAccessor.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/cell/beanAccessor.js +0 -0
- /package/{components → lib/esm/components}/grid/cell/beanAccessor.js.map +0 -0
- /package/{components → lib/esm/components}/grid/cell/cellEditorUtils.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/cell/cellEditorUtils.js +0 -0
- /package/{components → lib/esm/components}/grid/cell/cellEditorUtils.js.map +0 -0
- /package/{components → lib/esm/components}/grid/cell/customEnumCellEditor.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/cell/customEnumCellEditor.js +0 -0
- /package/{components → lib/esm/components}/grid/cell/customEnumCellEditor.js.map +0 -0
- /package/{components → lib/esm/components}/grid/cell/dataGridCellEditorComponent.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/cell/dataGridCellEditorComponent.js +0 -0
- /package/{components → lib/esm/components}/grid/cell/dataGridCellEditorComponent.js.map +0 -0
- /package/{components → lib/esm/components}/grid/cell/dateCellEditor.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/cell/dateCellEditor.js +0 -0
- /package/{components → lib/esm/components}/grid/cell/dateCellEditor.js.map +0 -0
- /package/{components → lib/esm/components}/grid/cell/durationCellEditor.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/cell/durationCellEditor.js +0 -0
- /package/{components → lib/esm/components}/grid/cell/durationCellEditor.js.map +0 -0
- /package/{components → lib/esm/components}/grid/cell/hexaOctetStringCellEditor.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/cell/hexaOctetStringCellEditor.js +0 -0
- /package/{components → lib/esm/components}/grid/cell/hexaOctetStringCellEditor.js.map +0 -0
- /package/{components → lib/esm/components}/grid/cell/hexaValueCellEditor.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/cell/hexaValueCellEditor.js +0 -0
- /package/{components → lib/esm/components}/grid/cell/hexaValueCellEditor.js.map +0 -0
- /package/{components → lib/esm/components}/grid/cell/numberCellEditor.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/cell/numberCellEditor.js +0 -0
- /package/{components → lib/esm/components}/grid/cell/numberCellEditor.js.map +0 -0
- /package/{components → lib/esm/components}/grid/cell/rangeSelector.js.map +0 -0
- /package/{components → lib/esm/components}/grid/cell/simpleStatusTextCellEditor.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/cell/simpleStatusTextCellEditor.js +0 -0
- /package/{components → lib/esm/components}/grid/cell/simpleStatusTextCellEditor.js.map +0 -0
- /package/{components → lib/esm/components}/grid/cell/statusTextCellEditor.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/cell/statusTextCellEditor.js +0 -0
- /package/{components → lib/esm/components}/grid/cell/statusTextCellEditor.js.map +0 -0
- /package/{components → lib/esm/components}/grid/cell/tableDefaultRowStyleRules.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/cell/tableDefaultRowStyleRules.js +0 -0
- /package/{components → lib/esm/components}/grid/cell/tableDefaultRowStyleRules.js.map +0 -0
- /package/{components → lib/esm/components}/grid/cell/textCellEditor.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/cell/textCellEditor.js +0 -0
- /package/{components → lib/esm/components}/grid/cell/textCellEditor.js.map +0 -0
- /package/{components → lib/esm/components}/grid/cell/withAgGridHooks.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/cell/withAgGridHooks.js +0 -0
- /package/{components → lib/esm/components}/grid/cell/withAgGridHooks.js.map +0 -0
- /package/{components → lib/esm/components}/grid/columnUtils.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/columnUtils.js +0 -0
- /package/{components → lib/esm/components}/grid/columnUtils.js.map +0 -0
- /package/{components → lib/esm/components}/grid/config/columnTransfer.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/config/columnTransfer.js +0 -0
- /package/{components → lib/esm/components}/grid/config/columnTransfer.js.map +0 -0
- /package/{components → lib/esm/components}/grid/config/dataGridEditor.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/config/dataGridEditor.js +0 -0
- /package/{components → lib/esm/components}/grid/config/dataGridEditor.js.map +0 -0
- /package/{components → lib/esm/components}/grid/config/rowHeightCalculator.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/config/rowHeightCalculator.js +0 -0
- /package/{components → lib/esm/components}/grid/config/rowHeightCalculator.js.map +0 -0
- /package/{components → lib/esm/components}/grid/config/rowStylePicker.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/config/rowStylePicker.js +0 -0
- /package/{components → lib/esm/components}/grid/config/rowStylePicker.js.map +0 -0
- /package/{components → lib/esm/components}/grid/dataGrid.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/dataGrid.js +0 -0
- /package/{components → lib/esm/components}/grid/dataGrid.js.map +0 -0
- /package/{components → lib/esm/components}/grid/detail/detailHeaderPanel.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/detail/detailHeaderPanel.js +0 -0
- /package/{components → lib/esm/components}/grid/detail/detailHeaderPanel.js.map +0 -0
- /package/{components → lib/esm/components}/grid/export/contextMenu.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/export/contextMenu.js.map +0 -0
- /package/{components → lib/esm/components}/grid/export/progressPopup.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/export/progressPopup.js +0 -0
- /package/{components → lib/esm/components}/grid/export/progressPopup.js.map +0 -0
- /package/{components → lib/esm/components}/grid/export/worker/clipboardExport.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/export/worker/clipboardExport.js +0 -0
- /package/{components → lib/esm/components}/grid/export/worker/clipboardExport.js.map +0 -0
- /package/{components → lib/esm/components}/grid/export/worker/csvExport.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/export/worker/csvExport.js +0 -0
- /package/{components → lib/esm/components}/grid/export/worker/csvExport.js.map +0 -0
- /package/{components → lib/esm/components}/grid/export/worker/pdfExport.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/export/worker/pdfExport.js +0 -0
- /package/{components → lib/esm/components}/grid/export/worker/pdfExport.js.map +0 -0
- /package/{components → lib/esm/components}/grid/export/worker/txtExport.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/export/worker/txtExport.js +0 -0
- /package/{components → lib/esm/components}/grid/export/worker/txtExport.js.map +0 -0
- /package/{components → lib/esm/components}/grid/extendedDataGrid.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/extendedDataGrid.js +0 -0
- /package/{components → lib/esm/components}/grid/extendedDataGrid.js.map +0 -0
- /package/{components → lib/esm/components}/grid/filter/customColumnFilter.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/filter/customColumnFilter.js +0 -0
- /package/{components → lib/esm/components}/grid/filter/customColumnFilter.js.map +0 -0
- /package/{components → lib/esm/components}/grid/filter/dataGridColumnFilter.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/filter/dataGridColumnFilter.js +0 -0
- /package/{components → lib/esm/components}/grid/filter/dataGridColumnFilter.js.map +0 -0
- /package/{components → lib/esm/components}/grid/filter/dateColumnFilter.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/filter/dateColumnFilter.js +0 -0
- /package/{components → lib/esm/components}/grid/filter/dateColumnFilter.js.map +0 -0
- /package/{components → lib/esm/components}/grid/filter/textColumnFilter.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/filter/textColumnFilter.js +0 -0
- /package/{components → lib/esm/components}/grid/filter/textColumnFilter.js.map +0 -0
- /package/{components → lib/esm/components}/grid/filter/wildcardQuickFilterEngine.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/filter/wildcardQuickFilterEngine.js +0 -0
- /package/{components → lib/esm/components}/grid/filter/wildcardQuickFilterEngine.js.map +0 -0
- /package/{components → lib/esm/components}/grid/header/simpleHeader.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/header/simpleHeader.js +0 -0
- /package/{components → lib/esm/components}/grid/header/simpleHeader.js.map +0 -0
- /package/{components → lib/esm/components}/grid/panel/dataGridPagination.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/panel/dataGridPagination.js +0 -0
- /package/{components → lib/esm/components}/grid/panel/dataGridPagination.js.map +0 -0
- /package/{components → lib/esm/components}/grid/panel/loadingOverlay.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/panel/loadingOverlay.js +0 -0
- /package/{components → lib/esm/components}/grid/panel/loadingOverlay.js.map +0 -0
- /package/{components → lib/esm/components}/grid/panel/noRecordsOverlay.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/panel/noRecordsOverlay.js +0 -0
- /package/{components → lib/esm/components}/grid/panel/noRecordsOverlay.js.map +0 -0
- /package/{components → lib/esm/components}/grid/panel/tablePagination.d.ts +0 -0
- /package/{components → lib/esm/components}/grid/panel/tablePagination.js +0 -0
- /package/{components → lib/esm/components}/grid/panel/tablePagination.js.map +0 -0
- /package/{components → lib/esm/components}/icons/dropdownArrow.d.ts +0 -0
- /package/{components → lib/esm/components}/icons/dropdownArrow.js +0 -0
- /package/{components → lib/esm/components}/icons/dropdownArrow.js.map +0 -0
- /package/{components → lib/esm/components}/icons/undoIcon.d.ts +0 -0
- /package/{components → lib/esm/components}/icons/undoIcon.js +0 -0
- /package/{components → lib/esm/components}/icons/undoIcon.js.map +0 -0
- /package/{components → lib/esm/components}/input/autoCompleteInput.d.ts +0 -0
- /package/{components → lib/esm/components}/input/autoCompleteInput.js +0 -0
- /package/{components → lib/esm/components}/input/autoCompleteInput.js.map +0 -0
- /package/{components → lib/esm/components}/input/draftUtils.d.ts +0 -0
- /package/{components → lib/esm/components}/input/draftUtils.js +0 -0
- /package/{components → lib/esm/components}/input/draftUtils.js.map +0 -0
- /package/{components → lib/esm/components}/input/draftail.js.map +0 -0
- /package/{components → lib/esm/components}/input/hexaFormattedInput.d.ts +0 -0
- /package/{components → lib/esm/components}/input/hexaFormattedInput.js +0 -0
- /package/{components → lib/esm/components}/input/hexaFormattedInput.js.map +0 -0
- /package/{components → lib/esm/components}/input/mask/helpers.d.ts +0 -0
- /package/{components → lib/esm/components}/input/mask/helpers.js +0 -0
- /package/{components → lib/esm/components}/input/mask/helpers.js.map +0 -0
- /package/{components → lib/esm/components}/input/mask/inputMaskCore.d.ts +0 -0
- /package/{components → lib/esm/components}/input/mask/inputMaskCore.js +0 -0
- /package/{components → lib/esm/components}/input/mask/inputMaskCore.js.map +0 -0
- /package/{components → lib/esm/components}/input/mask/pattern.d.ts +0 -0
- /package/{components → lib/esm/components}/input/mask/pattern.js +0 -0
- /package/{components → lib/esm/components}/input/mask/pattern.js.map +0 -0
- /package/{components → lib/esm/components}/input/maskedInput.d.ts +0 -0
- /package/{components → lib/esm/components}/input/maskedInput.js +0 -0
- /package/{components → lib/esm/components}/input/maskedInput.js.map +0 -0
- /package/{components → lib/esm/components}/input/passwordInput.d.ts +0 -0
- /package/{components → lib/esm/components}/input/passwordInput.js +0 -0
- /package/{components → lib/esm/components}/input/passwordInput.js.map +0 -0
- /package/{components → lib/esm/components}/input/simpleAutoComplete.d.ts +0 -0
- /package/{components → lib/esm/components}/input/simpleAutoComplete.js +0 -0
- /package/{components → lib/esm/components}/input/simpleAutoComplete.js.map +0 -0
- /package/{components → lib/esm/components}/input/textarea/extractSpansOfClasses.d.ts +0 -0
- /package/{components → lib/esm/components}/input/textarea/extractSpansOfClasses.js +0 -0
- /package/{components → lib/esm/components}/input/textarea/extractSpansOfClasses.js.map +0 -0
- /package/{components → lib/esm/components}/input/textarea/getRanges.d.ts +0 -0
- /package/{components → lib/esm/components}/input/textarea/getRanges.js +0 -0
- /package/{components → lib/esm/components}/input/textarea/getRanges.js.map +0 -0
- /package/{components → lib/esm/components}/input/textarea/getType.d.ts +0 -0
- /package/{components → lib/esm/components}/input/textarea/getType.js +0 -0
- /package/{components → lib/esm/components}/input/textarea/getType.js.map +0 -0
- /package/{components → lib/esm/components}/input/textarea/highlighedContents.d.ts +0 -0
- /package/{components → lib/esm/components}/input/textarea/highlighedContents.js +0 -0
- /package/{components → lib/esm/components}/input/textarea/highlighedContents.js.map +0 -0
- /package/{components → lib/esm/components}/input/textarea/mentionsWithHighlighting.d.ts +0 -0
- /package/{components → lib/esm/components}/input/textarea/mentionsWithHighlighting.js +0 -0
- /package/{components → lib/esm/components}/input/textarea/mentionsWithHighlighting.js.map +0 -0
- /package/{components → lib/esm/components}/keyboard/keyboardUtils.d.ts +0 -0
- /package/{components → lib/esm/components}/keyboard/keyboardUtils.js +0 -0
- /package/{components → lib/esm/components}/keyboard/keyboardUtils.js.map +0 -0
- /package/{components → lib/esm/components}/modal/draggableModalProvider.d.ts +0 -0
- /package/{components → lib/esm/components}/modal/draggableModalProvider.js +0 -0
- /package/{components → lib/esm/components}/modal/draggableModalProvider.js.map +0 -0
- /package/{components → lib/esm/components}/modal/impl/clamp.d.ts +0 -0
- /package/{components → lib/esm/components}/modal/impl/clamp.js +0 -0
- /package/{components → lib/esm/components}/modal/impl/clamp.js.map +0 -0
- /package/{components → lib/esm/components}/modal/impl/draggableModal.d.ts +0 -0
- /package/{components → lib/esm/components}/modal/impl/draggableModal.js +0 -0
- /package/{components → lib/esm/components}/modal/impl/draggableModal.js.map +0 -0
- /package/{components → lib/esm/components}/modal/impl/draggableModalContext.d.ts +0 -0
- /package/{components → lib/esm/components}/modal/impl/draggableModalContext.js +0 -0
- /package/{components → lib/esm/components}/modal/impl/draggableModalContext.js.map +0 -0
- /package/{components → lib/esm/components}/modal/impl/draggableModalInner.d.ts +0 -0
- /package/{components → lib/esm/components}/modal/impl/draggableModalInner.js +0 -0
- /package/{components → lib/esm/components}/modal/impl/draggableModalInner.js.map +0 -0
- /package/{components → lib/esm/components}/modal/impl/draggableModalReducer.d.ts +0 -0
- /package/{components → lib/esm/components}/modal/impl/draggableModalReducer.js +0 -0
- /package/{components → lib/esm/components}/modal/impl/draggableModalReducer.js.map +0 -0
- /package/{components → lib/esm/components}/modal/impl/getWindowSize.d.ts +0 -0
- /package/{components → lib/esm/components}/modal/impl/getWindowSize.js +0 -0
- /package/{components → lib/esm/components}/modal/impl/getWindowSize.js.map +0 -0
- /package/{components → lib/esm/components}/modal/impl/index.d.ts +0 -0
- /package/{components → lib/esm/components}/modal/impl/index.js +0 -0
- /package/{components → lib/esm/components}/modal/impl/index.js.map +0 -0
- /package/{components → lib/esm/components}/modal/impl/resizeHandle.d.ts +0 -0
- /package/{components → lib/esm/components}/modal/impl/resizeHandle.js +0 -0
- /package/{components → lib/esm/components}/modal/impl/resizeHandle.js.map +0 -0
- /package/{components → lib/esm/components}/modal/impl/useDrag.d.ts +0 -0
- /package/{components → lib/esm/components}/modal/impl/useDrag.js +0 -0
- /package/{components → lib/esm/components}/modal/impl/useDrag.js.map +0 -0
- /package/{components → lib/esm/components}/modal/impl/usePrevious.d.ts +0 -0
- /package/{components → lib/esm/components}/modal/impl/usePrevious.js +0 -0
- /package/{components → lib/esm/components}/modal/impl/usePrevious.js.map +0 -0
- /package/{components → lib/esm/components}/modal/impl/useResize.d.ts +0 -0
- /package/{components → lib/esm/components}/modal/impl/useResize.js +0 -0
- /package/{components → lib/esm/components}/modal/impl/useResize.js.map +0 -0
- /package/{components → lib/esm/components}/modal/modalDialog.d.ts +0 -0
- /package/{components → lib/esm/components}/modal/modalDialog.js +0 -0
- /package/{components → lib/esm/components}/modal/modalDialog.js.map +0 -0
- /package/{components → lib/esm/components}/picker/enumValuePicker.d.ts +0 -0
- /package/{components → lib/esm/components}/picker/enumValuePicker.js +0 -0
- /package/{components → lib/esm/components}/picker/enumValuePicker.js.map +0 -0
- /package/{components → lib/esm/components}/platformSpecific.d.ts +0 -0
- /package/{components → lib/esm/components}/platformSpecific.js +0 -0
- /package/{components → lib/esm/components}/platformSpecific.js.map +0 -0
- /package/{components → lib/esm/components}/scrollTo/onlyText.d.ts +0 -0
- /package/{components → lib/esm/components}/scrollTo/onlyText.js +0 -0
- /package/{components → lib/esm/components}/scrollTo/onlyText.js.map +0 -0
- /package/{components → lib/esm/components}/scrollTo/scrollTo.d.ts +0 -0
- /package/{components → lib/esm/components}/scrollTo/scrollTo.js +0 -0
- /package/{components → lib/esm/components}/scrollTo/scrollTo.js.map +0 -0
- /package/{components → lib/esm/components}/style/withCss.d.ts +0 -0
- /package/{components → lib/esm/components}/style/withCss.js +0 -0
- /package/{components → lib/esm/components}/style/withCss.js.map +0 -0
- /package/{components → lib/esm/components}/style/withInputNumberCss.d.ts +0 -0
- /package/{components → lib/esm/components}/style/withInputNumberCss.js +0 -0
- /package/{components → lib/esm/components}/style/withInputNumberCss.js.map +0 -0
- /package/{components → lib/esm/components}/table/dragSortingTable.d.ts +0 -0
- /package/{components → lib/esm/components}/table/dragSortingTable.js +0 -0
- /package/{components → lib/esm/components}/table/dragSortingTable.js.map +0 -0
- /package/{components → lib/esm/components}/text/impl/innerSize.d.ts +0 -0
- /package/{components → lib/esm/components}/text/impl/innerSize.js +0 -0
- /package/{components → lib/esm/components}/text/impl/innerSize.js.map +0 -0
- /package/{components → lib/esm/components}/text/impl/series.d.ts +0 -0
- /package/{components → lib/esm/components}/text/impl/series.js +0 -0
- /package/{components → lib/esm/components}/text/impl/series.js.map +0 -0
- /package/{components → lib/esm/components}/text/impl/shallowEqual.d.ts +0 -0
- /package/{components → lib/esm/components}/text/impl/shallowEqual.js +0 -0
- /package/{components → lib/esm/components}/text/impl/shallowEqual.js.map +0 -0
- /package/{components → lib/esm/components}/text/impl/uniqueId.d.ts +0 -0
- /package/{components → lib/esm/components}/text/impl/uniqueId.js +0 -0
- /package/{components → lib/esm/components}/text/impl/uniqueId.js.map +0 -0
- /package/{components → lib/esm/components}/text/impl/whilst.d.ts +0 -0
- /package/{components → lib/esm/components}/text/impl/whilst.js +0 -0
- /package/{components → lib/esm/components}/text/impl/whilst.js.map +0 -0
- /package/{components → lib/esm/components}/text/textFit.d.ts +0 -0
- /package/{components → lib/esm/components}/text/textFit.js +0 -0
- /package/{components → lib/esm/components}/text/textFit.js.map +0 -0
- /package/{i18n → lib/esm/i18n}/componentsLocaleHolder.d.ts +0 -0
- /package/{i18n → lib/esm/i18n}/componentsLocaleHolder.js.map +0 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import getType from './getType';
|
|
2
|
+
|
|
3
|
+
export default function getRanges(input: any, highlight: any): number[][] {
|
|
4
|
+
let type = getType(highlight);
|
|
5
|
+
switch (type) {
|
|
6
|
+
case 'array':
|
|
7
|
+
return getArrayRanges(input, highlight);
|
|
8
|
+
case 'function':
|
|
9
|
+
return getFunctionRanges(input, highlight);
|
|
10
|
+
case 'regexp':
|
|
11
|
+
return getRegExpRanges(input, highlight);
|
|
12
|
+
case 'string':
|
|
13
|
+
return getStringRanges(input, highlight);
|
|
14
|
+
case 'range':
|
|
15
|
+
return getRangeRanges(input, highlight);
|
|
16
|
+
case 'custom':
|
|
17
|
+
return getCustomRanges(input, highlight);
|
|
18
|
+
default:
|
|
19
|
+
if (!highlight) {
|
|
20
|
+
// do nothing for falsey values
|
|
21
|
+
return [];
|
|
22
|
+
} else {
|
|
23
|
+
console.error('unrecognized highlight type');
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function getArrayRanges(input: any[], arr: any[]): number[][] {
|
|
30
|
+
let ranges = arr.map(getRanges.bind(null, input));
|
|
31
|
+
return Array.prototype.concat.apply([], ranges);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function getFunctionRanges(input: string, func: (input: string) => string): number[][] {
|
|
35
|
+
return getRanges(input, func(input));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function getRegExpRanges(input: string, regex: RegExp) {
|
|
39
|
+
let ranges = [];
|
|
40
|
+
let match;
|
|
41
|
+
while (match = regex.exec(input), match !== null) {
|
|
42
|
+
ranges.push([match.index, match.index + match[0].length]);
|
|
43
|
+
if (!regex.global) {
|
|
44
|
+
// non-global regexes do not increase lastIndex, causing an infinite loop,
|
|
45
|
+
// but we can just break manually after the first match
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return ranges;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function getStringRanges(input: string, str: string): number[][] {
|
|
53
|
+
let ranges = [];
|
|
54
|
+
let inputLower = input.toLowerCase();
|
|
55
|
+
let strLower = str.toLowerCase();
|
|
56
|
+
let index = 0;
|
|
57
|
+
while (index = inputLower.indexOf(strLower, index), index !== -1) {
|
|
58
|
+
ranges.push([index, index + strLower.length]);
|
|
59
|
+
index += strLower.length;
|
|
60
|
+
}
|
|
61
|
+
return ranges;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function getRangeRanges(_input: string, range: number[]): number[][] {
|
|
65
|
+
return [range];
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function getCustomRanges(input: string, custom: { className?: string, highlight: any }): number[][] {
|
|
69
|
+
let ranges = getRanges(input, custom.highlight);
|
|
70
|
+
if (custom.className) {
|
|
71
|
+
ranges.forEach(function (range) {
|
|
72
|
+
// persist class name as a property of the array
|
|
73
|
+
let customRange = range as any;
|
|
74
|
+
if (customRange.className) {
|
|
75
|
+
customRange.className = custom.className + ' ' + customRange.className;
|
|
76
|
+
} else {
|
|
77
|
+
customRange.className = custom.className;
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
return ranges;
|
|
82
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// returns identifier strings that aren't necessarily "real" JavaScript types
|
|
2
|
+
export default function getType(instance:any):string {
|
|
3
|
+
let type = typeof instance;
|
|
4
|
+
if (!instance) {
|
|
5
|
+
return 'falsey';
|
|
6
|
+
} else if (Array.isArray(instance)) {
|
|
7
|
+
if (instance.length === 2 && typeof instance[0] === 'number' && typeof instance[1] === 'number') {
|
|
8
|
+
return 'range';
|
|
9
|
+
} else {
|
|
10
|
+
return 'array';
|
|
11
|
+
}
|
|
12
|
+
} else if (type === 'object') {
|
|
13
|
+
if (instance instanceof RegExp) {
|
|
14
|
+
return 'regexp';
|
|
15
|
+
} else if (instance.hasOwnProperty('highlight')) {
|
|
16
|
+
return 'custom';
|
|
17
|
+
}
|
|
18
|
+
} else if (type === 'function' || type === 'string') {
|
|
19
|
+
return type;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return 'other';
|
|
23
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import getRanges from './getRanges';
|
|
3
|
+
import extractSpansOfClasses from './extractSpansOfClasses';
|
|
4
|
+
|
|
5
|
+
// @ts-ignore
|
|
6
|
+
const HighlighedContents = ({value, highlight}) => {
|
|
7
|
+
|
|
8
|
+
let ranges = getRanges(value, highlight);
|
|
9
|
+
let parts = extractSpansOfClasses(value, ranges);
|
|
10
|
+
|
|
11
|
+
return (
|
|
12
|
+
<div>
|
|
13
|
+
<div className={`highlight-highlights highlight-content`} >
|
|
14
|
+
{parts.map(part => part.render())}
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export default HighlighedContents
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
.highlight-container {
|
|
2
|
+
display: inline-block;
|
|
3
|
+
position: relative;
|
|
4
|
+
overflow: hidden !important;
|
|
5
|
+
-webkit-text-size-adjust: none !important;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.highlight-backdrop {
|
|
9
|
+
position: absolute !important;
|
|
10
|
+
top: 0 !important;
|
|
11
|
+
right: calc(2em + 20px) !important; /* important due to style ".dictionary-autocomplete > textarea" externalize if this should be used elsewhere as */
|
|
12
|
+
bottom: 0 !important;
|
|
13
|
+
left: 0 !important;
|
|
14
|
+
overflow-x: hidden !important;
|
|
15
|
+
overflow-y: hidden !important;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.highlight-highlights {
|
|
19
|
+
padding: 4px 11px !important;
|
|
20
|
+
width: auto !important;
|
|
21
|
+
height: auto !important;
|
|
22
|
+
border-color: transparent !important;
|
|
23
|
+
white-space: pre-wrap !important;
|
|
24
|
+
word-wrap: break-word !important;
|
|
25
|
+
color: transparent !important;
|
|
26
|
+
overflow: hidden !important;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.highlight-input textarea{
|
|
30
|
+
display: block !important;
|
|
31
|
+
position: relative !important;
|
|
32
|
+
margin: 0;
|
|
33
|
+
padding: 4px 11px;
|
|
34
|
+
border-radius: 0;
|
|
35
|
+
font: inherit;
|
|
36
|
+
overflow-x: hidden !important;
|
|
37
|
+
white-space: pre-wrap !important;
|
|
38
|
+
word-wrap: break-word !important;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.highlight-content {
|
|
42
|
+
background: none transparent !important;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.highlight-content textarea {
|
|
46
|
+
background: none transparent !important;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.highlight-content mark {
|
|
50
|
+
padding: 0 !important;
|
|
51
|
+
color: transparent;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.highlight-error {
|
|
55
|
+
background-color: #ffccc7;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.highlight-warning {
|
|
59
|
+
background-color: #ffec3d;
|
|
60
|
+
}
|
|
61
|
+
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import React, {CSSProperties} from 'react';
|
|
2
|
+
import './highlightedTextarea.css';
|
|
3
|
+
import HighlighedContents from './highlighedContents';
|
|
4
|
+
import {MentionProps} from "antd/lib/mentions";
|
|
5
|
+
import {Mentions} from "antd";
|
|
6
|
+
|
|
7
|
+
export interface HighlightItem {
|
|
8
|
+
highlight: HighlightType
|
|
9
|
+
className: string
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type AssignHighlightFunction = (value: string) => HighlightType;
|
|
13
|
+
export type HighlightType =
|
|
14
|
+
boolean
|
|
15
|
+
| string
|
|
16
|
+
| RegExp
|
|
17
|
+
| [number, number]
|
|
18
|
+
| HighlightType[]
|
|
19
|
+
| AssignHighlightFunction
|
|
20
|
+
| HighlightItem[];
|
|
21
|
+
|
|
22
|
+
interface MentionsWithHighlightingProps extends MentionProps {
|
|
23
|
+
highlight?: HighlightType
|
|
24
|
+
containerStyle?: CSSProperties
|
|
25
|
+
containerClassName?: string
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
interface MentionsWithHighlightingState {
|
|
29
|
+
fakeValue: string
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Merged antd Mentions component with code from https://github.com/bonafideduck/react-highlight-within-textarea
|
|
34
|
+
*/
|
|
35
|
+
export class MentionsWithHighlighting extends React.Component<MentionsWithHighlightingProps, MentionsWithHighlightingState> {
|
|
36
|
+
mentionsComponent: any | null = null;
|
|
37
|
+
backdropComponent: HTMLDivElement | null = null;
|
|
38
|
+
|
|
39
|
+
constructor(props: Readonly<MentionsWithHighlightingProps>) {
|
|
40
|
+
super(props);
|
|
41
|
+
this.state = {
|
|
42
|
+
fakeValue: props.value ?? ""
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
handleScroll = () => {
|
|
47
|
+
if (this.backdropComponent) {
|
|
48
|
+
if (this.mentionsComponent) {
|
|
49
|
+
const textArea = (this.mentionsComponent as any).textarea as HTMLTextAreaElement
|
|
50
|
+
this.backdropComponent.scrollTop = textArea.scrollTop;
|
|
51
|
+
this.backdropComponent.scrollLeft = textArea.scrollLeft;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
onChange = (value?:string) => {
|
|
57
|
+
// To properly work, value and onChange must be supplied. Give a hint for new users.
|
|
58
|
+
if (value == undefined) {
|
|
59
|
+
value = this.state.fakeValue;
|
|
60
|
+
}
|
|
61
|
+
this.setState({fakeValue: value});
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
get textarea() : HTMLTextAreaElement | undefined {
|
|
65
|
+
return (this.mentionsComponent as any)?.textarea as HTMLTextAreaElement;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
render() {
|
|
69
|
+
let {value, onChange, highlight = {}, className = "", style = {}, containerStyle = {}, containerClassName = "", onScroll, ...restProps} = this.props;
|
|
70
|
+
|
|
71
|
+
className = `highlight-input ${!this.props.disabled ? "highlight-content": ""} ${className}`;
|
|
72
|
+
containerClassName = `highlight-container ${containerClassName}`;
|
|
73
|
+
|
|
74
|
+
// Resizing is currently not supported
|
|
75
|
+
style.resize = "none";
|
|
76
|
+
style.wordWrap = "break-word";
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
return (
|
|
81
|
+
<div className={containerClassName} style={containerStyle}>
|
|
82
|
+
<div className={"highlight-backdrop"} ref={(component)=> {
|
|
83
|
+
this.backdropComponent = component;
|
|
84
|
+
}}>
|
|
85
|
+
<HighlighedContents value={value} highlight={highlight}/>
|
|
86
|
+
</div>
|
|
87
|
+
<Mentions value={value} onChange={onChange} style={{...style}} className={className} {...restProps}
|
|
88
|
+
onScroll={this.handleScroll} ref={(component) => {
|
|
89
|
+
this.mentionsComponent = component
|
|
90
|
+
}}>
|
|
91
|
+
</Mentions>
|
|
92
|
+
</div>
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import {Key} from "ts-key-enum";
|
|
2
|
+
|
|
3
|
+
const pressedKeys: any = {};
|
|
4
|
+
let mouseDown: number = 0;
|
|
5
|
+
|
|
6
|
+
function keyDown(e: KeyboardEvent) {
|
|
7
|
+
pressedKeys[e.key] = true;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
function keyUp(e: KeyboardEvent) {
|
|
11
|
+
pressedKeys[e.key] = false;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function reset() {
|
|
15
|
+
Object.keys(pressedKeys).forEach((key) => {
|
|
16
|
+
pressedKeys[key] = false;
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function onMouseDown() {
|
|
21
|
+
mouseDown++;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function onMouseUp() {
|
|
25
|
+
mouseDown--;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
window.addEventListener("keydown", keyDown);
|
|
29
|
+
window.addEventListener("keyup", keyUp);
|
|
30
|
+
window.addEventListener("blur", reset);
|
|
31
|
+
window.addEventListener("mousedown", onMouseDown);
|
|
32
|
+
window.addEventListener("mouseup", onMouseUp);
|
|
33
|
+
|
|
34
|
+
export default class KeyboardUtils {
|
|
35
|
+
static isKeyPressed(key: Key): boolean {
|
|
36
|
+
return !!pressedKeys[key];
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
static isMouseDown() :boolean {
|
|
40
|
+
return mouseDown > 0;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// https://github.com/CUBETIQ/antd-modal/
|
|
2
|
+
|
|
3
|
+
import * as React from 'react'
|
|
4
|
+
import {useEffect, useReducer} from 'react'
|
|
5
|
+
import {DraggableModalContext} from 'd2coreui/components/modal/impl/draggableModalContext'
|
|
6
|
+
import {getWindowSize} from 'd2coreui/components/modal/impl/getWindowSize'
|
|
7
|
+
import {draggableModalReducer, initialModalsState} from 'd2coreui/components/modal/impl/draggableModalReducer'
|
|
8
|
+
|
|
9
|
+
export const DraggableModalProvider = ({
|
|
10
|
+
children,
|
|
11
|
+
}: {
|
|
12
|
+
children: React.ReactNode
|
|
13
|
+
}): React.ReactElement => {
|
|
14
|
+
const [state, dispatch] = useReducer(draggableModalReducer, initialModalsState)
|
|
15
|
+
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
if (typeof window !== 'object') {
|
|
18
|
+
// @ts-ignore
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const onResize = (): void => dispatch({ type: 'windowResize', size: getWindowSize() })
|
|
22
|
+
window.addEventListener('resize', onResize)
|
|
23
|
+
onResize()
|
|
24
|
+
return () => window.removeEventListener('resize', onResize)
|
|
25
|
+
}, [dispatch])
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
<DraggableModalContext.Provider
|
|
29
|
+
value={{
|
|
30
|
+
state,
|
|
31
|
+
dispatch,
|
|
32
|
+
}}
|
|
33
|
+
>
|
|
34
|
+
{children}
|
|
35
|
+
</DraggableModalContext.Provider>
|
|
36
|
+
)
|
|
37
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// https://github.com/CUBETIQ/antd-modal/
|
|
2
|
+
|
|
3
|
+
import * as React from 'react'
|
|
4
|
+
import {FunctionComponent, useContext} from 'react'
|
|
5
|
+
import {useUID} from 'react-uid'
|
|
6
|
+
import {DraggableModalContext} from './draggableModalContext'
|
|
7
|
+
import {DraggableModalInner} from './draggableModalInner'
|
|
8
|
+
import {getModalState} from './draggableModalReducer'
|
|
9
|
+
import {ModalProps} from 'antd/lib/modal'
|
|
10
|
+
import '../../../style/modal/DraggableModal.css'
|
|
11
|
+
|
|
12
|
+
export interface DraggableModalProps extends Omit<ModalProps, "width"> {
|
|
13
|
+
initialWidth?: number,
|
|
14
|
+
initialHeight?: number
|
|
15
|
+
// resize dialog handler
|
|
16
|
+
onResize?(size: { width: number, height: number }): void
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export const DraggableModal: FunctionComponent<DraggableModalProps> = (props: DraggableModalProps): React.ReactElement => {
|
|
20
|
+
// Get the unique ID of this modal.
|
|
21
|
+
const id = useUID();
|
|
22
|
+
|
|
23
|
+
// Get modal provider.
|
|
24
|
+
const modalProvider = useContext(DraggableModalContext);
|
|
25
|
+
if (!modalProvider) {
|
|
26
|
+
throw new Error('No Provider')
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const {dispatch, state} = modalProvider;
|
|
30
|
+
const modalState = getModalState({state, id, initialWidth: props.initialWidth, initialHeight: props.initialHeight});
|
|
31
|
+
|
|
32
|
+
// We do this so that we don't re-render all modals for every state change.
|
|
33
|
+
// DraggableModalInner uses React.memo, so it only re-renders if
|
|
34
|
+
// if props change (e.g. modalState).
|
|
35
|
+
return <DraggableModalInner id={id} dispatch={dispatch} modalState={modalState} {...props} />
|
|
36
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// https://github.com/CUBETIQ/antd-modal/
|
|
2
|
+
|
|
3
|
+
import * as React from 'react'
|
|
4
|
+
import {Action, ModalsState} from './draggableModalReducer'
|
|
5
|
+
|
|
6
|
+
export interface DraggableModalContextMethods {
|
|
7
|
+
dispatch: (action: Action) => void
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface DraggableModalContextValue extends DraggableModalContextMethods {
|
|
11
|
+
state: ModalsState
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const DraggableModalContext = React.createContext<DraggableModalContextValue | null>(null)
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
// https://github.com/CUBETIQ/antd-modal/
|
|
2
|
+
|
|
3
|
+
import * as React from 'react'
|
|
4
|
+
import {memo, useCallback, useEffect, useMemo} from 'react'
|
|
5
|
+
import {Modal} from 'antd'
|
|
6
|
+
import {ResizeHandle} from './resizeHandle'
|
|
7
|
+
import {useDrag} from './useDrag'
|
|
8
|
+
import {DraggableModalContextMethods} from './draggableModalContext'
|
|
9
|
+
import {usePrevious} from './usePrevious'
|
|
10
|
+
import {ModalID, ModalState} from './draggableModalReducer'
|
|
11
|
+
import {useResize} from './useResize'
|
|
12
|
+
import {DraggableModalProps} from "./draggableModal";
|
|
13
|
+
|
|
14
|
+
const modalStyle: React.CSSProperties = {margin: 0, paddingBottom: 0, pointerEvents: 'auto'}
|
|
15
|
+
|
|
16
|
+
interface ContextProps extends DraggableModalContextMethods {
|
|
17
|
+
id: ModalID
|
|
18
|
+
modalState: ModalState
|
|
19
|
+
initialWidth?: number
|
|
20
|
+
initialHeight?: number
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
//export type DraggableModalInnerProps = ModalProps & { children?: React.ReactNode } & ContextProps
|
|
24
|
+
export interface DraggableModalInnerProps extends DraggableModalProps, ContextProps {
|
|
25
|
+
children?: React.ReactNode
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const DraggableModalInner = memo(
|
|
29
|
+
({
|
|
30
|
+
id,
|
|
31
|
+
modalState,
|
|
32
|
+
dispatch,
|
|
33
|
+
open,
|
|
34
|
+
children,
|
|
35
|
+
title,
|
|
36
|
+
initialWidth,
|
|
37
|
+
initialHeight,
|
|
38
|
+
onResize,
|
|
39
|
+
...otherProps
|
|
40
|
+
}: DraggableModalInnerProps) => {
|
|
41
|
+
// Call on mount and unmount.
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
dispatch({type: 'mount', id, intialState: {initialWidth, initialHeight}});
|
|
44
|
+
return () => dispatch({type: 'unmount', id})
|
|
45
|
+
}, [dispatch, id, initialWidth, initialHeight]);
|
|
46
|
+
|
|
47
|
+
// Bring this to the front if it's been opened with props.
|
|
48
|
+
const visiblePrevious = usePrevious(open);
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
if (open !== visiblePrevious) {
|
|
51
|
+
if (open) {
|
|
52
|
+
dispatch({type: 'show', id})
|
|
53
|
+
} else {
|
|
54
|
+
dispatch({type: 'hide', id})
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}, [open, visiblePrevious, id, dispatch]);
|
|
58
|
+
|
|
59
|
+
const {zIndex, x, y, width, height} = modalState;
|
|
60
|
+
|
|
61
|
+
const style: React.CSSProperties = useMemo(
|
|
62
|
+
() => ({...modalStyle, top: y, left: x, height}),
|
|
63
|
+
[y, x, height],
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
const onFocus = useCallback(() => dispatch({type: 'focus', id}), [id, dispatch])
|
|
67
|
+
|
|
68
|
+
const onDragWithID = useCallback((args: any) => dispatch({type: 'drag', id, ...args}), [
|
|
69
|
+
dispatch,
|
|
70
|
+
id,
|
|
71
|
+
]);
|
|
72
|
+
|
|
73
|
+
const onResizeWithID = useCallback((args: any) => {
|
|
74
|
+
onResize?.({width: args.width, height: args.height});
|
|
75
|
+
return dispatch({type: 'resize', id, ...args})
|
|
76
|
+
}, [dispatch, id,]);
|
|
77
|
+
|
|
78
|
+
const onMouseDrag = useDrag(x, y, onDragWithID);
|
|
79
|
+
const onMouseResize = useResize(x, y, width, height, onResizeWithID);
|
|
80
|
+
|
|
81
|
+
const titleElement = useMemo(
|
|
82
|
+
() => (
|
|
83
|
+
<div
|
|
84
|
+
className="ant-design-draggable-modal-title"
|
|
85
|
+
onMouseDown={onMouseDrag}
|
|
86
|
+
onClick={onFocus}
|
|
87
|
+
>
|
|
88
|
+
{title}
|
|
89
|
+
</div>
|
|
90
|
+
),
|
|
91
|
+
[onMouseDrag, onFocus, title],
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
return (
|
|
95
|
+
<Modal
|
|
96
|
+
wrapClassName="ant-design-draggable-modal"
|
|
97
|
+
style={style}
|
|
98
|
+
destroyOnClose={true}
|
|
99
|
+
width={width}
|
|
100
|
+
zIndex={zIndex}
|
|
101
|
+
title={titleElement}
|
|
102
|
+
open={open}
|
|
103
|
+
{...otherProps}
|
|
104
|
+
>
|
|
105
|
+
{children}
|
|
106
|
+
<ResizeHandle onMouseDown={onMouseResize}/>
|
|
107
|
+
</Modal>
|
|
108
|
+
)
|
|
109
|
+
}
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
113
|
+
DraggableModalInner.displayName = 'DraggableModalInner'
|
|
114
|
+
}
|