@rowsncolumns/ui 15.0.38
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/LICENSE.md +100 -0
- package/dist/cjs/arrow/index.d.ts +17 -0
- package/dist/cjs/arrow/index.d.ts.map +1 -0
- package/dist/cjs/arrow/index.js +46 -0
- package/dist/cjs/button/index.d.ts +14 -0
- package/dist/cjs/button/index.d.ts.map +1 -0
- package/dist/cjs/button/index.js +46 -0
- package/dist/cjs/calendar/index.d.ts +5 -0
- package/dist/cjs/calendar/index.d.ts.map +1 -0
- package/dist/cjs/calendar/index.js +13 -0
- package/dist/cjs/card/index.d.ts +10 -0
- package/dist/cjs/card/index.d.ts.map +1 -0
- package/dist/cjs/card/index.js +32 -0
- package/dist/cjs/cell-tooltip/index.d.ts +17 -0
- package/dist/cjs/cell-tooltip/index.d.ts.map +1 -0
- package/dist/cjs/cell-tooltip/index.js +38 -0
- package/dist/cjs/circular-loader/index.d.ts +9 -0
- package/dist/cjs/circular-loader/index.d.ts.map +1 -0
- package/dist/cjs/circular-loader/index.js +11 -0
- package/dist/cjs/color-picker/index.d.ts +12 -0
- package/dist/cjs/color-picker/index.d.ts.map +1 -0
- package/dist/cjs/color-picker/index.js +101 -0
- package/dist/cjs/color-picker/style.d.ts +5 -0
- package/dist/cjs/color-picker/style.d.ts.map +1 -0
- package/dist/cjs/color-picker/style.js +11 -0
- package/dist/cjs/command/index.d.ts +74 -0
- package/dist/cjs/command/index.d.ts.map +1 -0
- package/dist/cjs/command/index.js +37 -0
- package/dist/cjs/conditional-wrapper/index.d.ts +9 -0
- package/dist/cjs/conditional-wrapper/index.d.ts.map +1 -0
- package/dist/cjs/conditional-wrapper/index.js +4 -0
- package/dist/cjs/dialog/index.d.ts +17 -0
- package/dist/cjs/dialog/index.d.ts.map +1 -0
- package/dist/cjs/dialog/index.js +50 -0
- package/dist/cjs/dropdown/index.d.ts +34 -0
- package/dist/cjs/dropdown/index.d.ts.map +1 -0
- package/dist/cjs/dropdown/index.js +73 -0
- package/dist/cjs/editor/constants.d.ts +7 -0
- package/dist/cjs/editor/constants.d.ts.map +1 -0
- package/dist/cjs/editor/constants.js +50 -0
- package/dist/cjs/editor/editor-error-boundary.d.ts +3 -0
- package/dist/cjs/editor/editor-error-boundary.d.ts.map +1 -0
- package/dist/cjs/editor/editor-error-boundary.js +9 -0
- package/dist/cjs/editor/style.d.ts +12 -0
- package/dist/cjs/editor/style.d.ts.map +1 -0
- package/dist/cjs/editor/style.js +24 -0
- package/dist/cjs/editor/suggestions-dropdown.d.ts +25 -0
- package/dist/cjs/editor/suggestions-dropdown.d.ts.map +1 -0
- package/dist/cjs/editor/suggestions-dropdown.js +120 -0
- package/dist/cjs/editor-pm/constants.d.ts +2 -0
- package/dist/cjs/editor-pm/constants.d.ts.map +1 -0
- package/dist/cjs/editor-pm/constants.js +2 -0
- package/dist/cjs/editor-pm/decoration-plugin.d.ts +15 -0
- package/dist/cjs/editor-pm/decoration-plugin.d.ts.map +1 -0
- package/dist/cjs/editor-pm/decoration-plugin.js +38 -0
- package/dist/cjs/editor-pm/helpers.d.ts +197 -0
- package/dist/cjs/editor-pm/helpers.d.ts.map +1 -0
- package/dist/cjs/editor-pm/helpers.js +1170 -0
- package/dist/cjs/editor-pm/index.d.ts +10 -0
- package/dist/cjs/editor-pm/index.d.ts.map +1 -0
- package/dist/cjs/editor-pm/index.js +9 -0
- package/dist/cjs/editor-pm/mention-nodeview.d.ts +31 -0
- package/dist/cjs/editor-pm/mention-nodeview.d.ts.map +1 -0
- package/dist/cjs/editor-pm/mention-nodeview.js +105 -0
- package/dist/cjs/editor-pm/mentions-dropdown.d.ts +13 -0
- package/dist/cjs/editor-pm/mentions-dropdown.d.ts.map +1 -0
- package/dist/cjs/editor-pm/mentions-dropdown.js +19 -0
- package/dist/cjs/editor-pm/mentions-plugin.d.ts +18 -0
- package/dist/cjs/editor-pm/mentions-plugin.d.ts.map +1 -0
- package/dist/cjs/editor-pm/mentions-plugin.js +72 -0
- package/dist/cjs/editor-pm/placeholder-plugin.d.ts +4 -0
- package/dist/cjs/editor-pm/placeholder-plugin.d.ts.map +1 -0
- package/dist/cjs/editor-pm/placeholder-plugin.js +20 -0
- package/dist/cjs/editor-pm/prosemirror-editor.d.ts +493 -0
- package/dist/cjs/editor-pm/prosemirror-editor.d.ts.map +1 -0
- package/dist/cjs/editor-pm/prosemirror-editor.js +1145 -0
- package/dist/cjs/editor-pm/schema.d.ts +3 -0
- package/dist/cjs/editor-pm/schema.d.ts.map +1 -0
- package/dist/cjs/editor-pm/schema.js +183 -0
- package/dist/cjs/editor-pm/types.d.ts +8 -0
- package/dist/cjs/editor-pm/types.d.ts.map +1 -0
- package/dist/cjs/editor-pm/types.js +1 -0
- package/dist/cjs/editor-pm/unfocused-selection-plugin.d.ts +25 -0
- package/dist/cjs/editor-pm/unfocused-selection-plugin.d.ts.map +1 -0
- package/dist/cjs/editor-pm/unfocused-selection-plugin.js +61 -0
- package/dist/cjs/editor-pm/use-dropdown-change-pm.d.ts +24 -0
- package/dist/cjs/editor-pm/use-dropdown-change-pm.d.ts.map +1 -0
- package/dist/cjs/editor-pm/use-dropdown-change-pm.js +140 -0
- package/dist/cjs/editor-pm/use-editor-change-pm.d.ts +29 -0
- package/dist/cjs/editor-pm/use-editor-change-pm.d.ts.map +1 -0
- package/dist/cjs/editor-pm/use-editor-change-pm.js +154 -0
- package/dist/cjs/editor-pm/use-editor-decorator-pm.d.ts +17 -0
- package/dist/cjs/editor-pm/use-editor-decorator-pm.d.ts.map +1 -0
- package/dist/cjs/editor-pm/use-editor-decorator-pm.js +59 -0
- package/dist/cjs/editor-pm/use-editor-keydown-pm.d.ts +21 -0
- package/dist/cjs/editor-pm/use-editor-keydown-pm.d.ts.map +1 -0
- package/dist/cjs/editor-pm/use-editor-keydown-pm.js +81 -0
- package/dist/cjs/editor-pm/use-mention-keydown.d.ts +11 -0
- package/dist/cjs/editor-pm/use-mention-keydown.d.ts.map +1 -0
- package/dist/cjs/editor-pm/use-mention-keydown.js +59 -0
- package/dist/cjs/editor-pm/use-parameter-suggestions.d.ts +19 -0
- package/dist/cjs/editor-pm/use-parameter-suggestions.d.ts.map +1 -0
- package/dist/cjs/editor-pm/use-parameter-suggestions.js +79 -0
- package/dist/cjs/editor-pm/use-parameter-suggestions.test.d.ts +2 -0
- package/dist/cjs/editor-pm/use-parameter-suggestions.test.d.ts.map +1 -0
- package/dist/cjs/editor-pm/use-parameter-suggestions.test.js +122 -0
- package/dist/cjs/eye-dropper/index.d.ts +10 -0
- package/dist/cjs/eye-dropper/index.d.ts.map +1 -0
- package/dist/cjs/eye-dropper/index.js +24 -0
- package/dist/cjs/function-info/helpers.d.ts +10 -0
- package/dist/cjs/function-info/helpers.d.ts.map +1 -0
- package/dist/cjs/function-info/helpers.js +20 -0
- package/dist/cjs/function-info/index.d.ts +11 -0
- package/dist/cjs/function-info/index.d.ts.map +1 -0
- package/dist/cjs/function-info/index.js +71 -0
- package/dist/cjs/function-info/style.d.ts +7 -0
- package/dist/cjs/function-info/style.d.ts.map +1 -0
- package/dist/cjs/function-info/style.js +13 -0
- package/dist/cjs/hex-color-picker/index.d.ts +8 -0
- package/dist/cjs/hex-color-picker/index.d.ts.map +1 -0
- package/dist/cjs/hex-color-picker/index.js +47 -0
- package/dist/cjs/hooks/use-cycle-reference.d.ts +16 -0
- package/dist/cjs/hooks/use-cycle-reference.d.ts.map +1 -0
- package/dist/cjs/hooks/use-cycle-reference.js +72 -0
- package/dist/cjs/hooks/use-dropdown-categories.d.ts +9 -0
- package/dist/cjs/hooks/use-dropdown-categories.d.ts.map +1 -0
- package/dist/cjs/hooks/use-dropdown-categories.js +45 -0
- package/dist/cjs/hooks/use-dropdown.d.ts +38 -0
- package/dist/cjs/hooks/use-dropdown.d.ts.map +1 -0
- package/dist/cjs/hooks/use-dropdown.js +236 -0
- package/dist/cjs/hooks/use-isomorphic-layout-effect.ts.d.ts +6 -0
- package/dist/cjs/hooks/use-isomorphic-layout-effect.ts.d.ts.map +1 -0
- package/dist/cjs/hooks/use-isomorphic-layout-effect.ts.js +8 -0
- package/dist/cjs/hooks/use-modal.d.ts +28 -0
- package/dist/cjs/hooks/use-modal.d.ts.map +1 -0
- package/dist/cjs/hooks/use-modal.js +101 -0
- package/dist/cjs/hooks/use-visibility.d.ts +2 -0
- package/dist/cjs/hooks/use-visibility.d.ts.map +1 -0
- package/dist/cjs/hooks/use-visibility.js +12 -0
- package/dist/cjs/icon-button/index.d.ts +15 -0
- package/dist/cjs/icon-button/index.d.ts.map +1 -0
- package/dist/cjs/icon-button/index.js +34 -0
- package/dist/cjs/index.d.ts +34 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +33 -0
- package/dist/cjs/input/index.d.ts +9 -0
- package/dist/cjs/input/index.d.ts.map +1 -0
- package/dist/cjs/input/index.js +9 -0
- package/dist/cjs/popover/index.d.ts +13 -0
- package/dist/cjs/popover/index.d.ts.map +1 -0
- package/dist/cjs/popover/index.js +29 -0
- package/dist/cjs/progress/index.d.ts +10 -0
- package/dist/cjs/progress/index.d.ts.map +1 -0
- package/dist/cjs/progress/index.js +15 -0
- package/dist/cjs/select/index.d.ts +14 -0
- package/dist/cjs/select/index.d.ts.map +1 -0
- package/dist/cjs/select/index.js +46 -0
- package/dist/cjs/separator/index.d.ts +5 -0
- package/dist/cjs/separator/index.d.ts.map +1 -0
- package/dist/cjs/separator/index.js +10 -0
- package/dist/cjs/skeleton/index.d.ts +7 -0
- package/dist/cjs/skeleton/index.d.ts.map +1 -0
- package/dist/cjs/skeleton/index.js +11 -0
- package/dist/cjs/stack/index.d.ts +11 -0
- package/dist/cjs/stack/index.d.ts.map +1 -0
- package/dist/cjs/stack/index.js +22 -0
- package/dist/cjs/tabs/index.d.ts +8 -0
- package/dist/cjs/tabs/index.d.ts.map +1 -0
- package/dist/cjs/tabs/index.js +21 -0
- package/dist/cjs/tooltip/index.d.ts +12 -0
- package/dist/cjs/tooltip/index.d.ts.map +1 -0
- package/dist/cjs/tooltip/index.js +20 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/cjs/utils.d.ts +3 -0
- package/dist/cjs/utils.d.ts.map +1 -0
- package/dist/cjs/utils.js +9 -0
- package/dist/cjs/vitest.config.d.ts +3 -0
- package/dist/cjs/vitest.config.d.ts.map +1 -0
- package/dist/cjs/vitest.config.js +21 -0
- package/dist/esm/arrow/index.d.ts +17 -0
- package/dist/esm/arrow/index.d.ts.map +1 -0
- package/dist/esm/arrow/index.js +45 -0
- package/dist/esm/button/index.d.ts +14 -0
- package/dist/esm/button/index.d.ts.map +1 -0
- package/dist/esm/button/index.js +44 -0
- package/dist/esm/calendar/index.d.ts +5 -0
- package/dist/esm/calendar/index.d.ts.map +1 -0
- package/dist/esm/calendar/index.js +34 -0
- package/dist/esm/card/index.d.ts +10 -0
- package/dist/esm/card/index.d.ts.map +1 -0
- package/dist/esm/card/index.js +24 -0
- package/dist/esm/cell-tooltip/index.d.ts +17 -0
- package/dist/esm/cell-tooltip/index.d.ts.map +1 -0
- package/dist/esm/cell-tooltip/index.js +31 -0
- package/dist/esm/circular-loader/index.d.ts +9 -0
- package/dist/esm/circular-loader/index.d.ts.map +1 -0
- package/dist/esm/circular-loader/index.js +7 -0
- package/dist/esm/color-picker/index.d.ts +12 -0
- package/dist/esm/color-picker/index.d.ts.map +1 -0
- package/dist/esm/color-picker/index.js +99 -0
- package/dist/esm/color-picker/style.d.ts +5 -0
- package/dist/esm/color-picker/style.d.ts.map +1 -0
- package/dist/esm/color-picker/style.js +7 -0
- package/dist/esm/command/index.d.ts +74 -0
- package/dist/esm/command/index.d.ts.map +1 -0
- package/dist/esm/command/index.js +18 -0
- package/dist/esm/conditional-wrapper/index.d.ts +9 -0
- package/dist/esm/conditional-wrapper/index.d.ts.map +1 -0
- package/dist/esm/conditional-wrapper/index.js +1 -0
- package/dist/esm/dialog/index.d.ts +17 -0
- package/dist/esm/dialog/index.d.ts.map +1 -0
- package/dist/esm/dialog/index.js +30 -0
- package/dist/esm/dropdown/index.d.ts +34 -0
- package/dist/esm/dropdown/index.d.ts.map +1 -0
- package/dist/esm/dropdown/index.js +42 -0
- package/dist/esm/editor/constants.d.ts +7 -0
- package/dist/esm/editor/constants.d.ts.map +1 -0
- package/dist/esm/editor/constants.js +51 -0
- package/dist/esm/editor/editor-error-boundary.d.ts +3 -0
- package/dist/esm/editor/editor-error-boundary.d.ts.map +1 -0
- package/dist/esm/editor/editor-error-boundary.js +9 -0
- package/dist/esm/editor/style.d.ts +12 -0
- package/dist/esm/editor/style.d.ts.map +1 -0
- package/dist/esm/editor/style.js +17 -0
- package/dist/esm/editor/suggestions-dropdown.d.ts +25 -0
- package/dist/esm/editor/suggestions-dropdown.d.ts.map +1 -0
- package/dist/esm/editor/suggestions-dropdown.js +115 -0
- package/dist/esm/editor-pm/constants.d.ts +2 -0
- package/dist/esm/editor-pm/constants.d.ts.map +1 -0
- package/dist/esm/editor-pm/constants.js +2 -0
- package/dist/esm/editor-pm/decoration-plugin.d.ts +15 -0
- package/dist/esm/editor-pm/decoration-plugin.d.ts.map +1 -0
- package/dist/esm/editor-pm/decoration-plugin.js +38 -0
- package/dist/esm/editor-pm/helpers.d.ts +197 -0
- package/dist/esm/editor-pm/helpers.d.ts.map +1 -0
- package/dist/esm/editor-pm/helpers.js +1113 -0
- package/dist/esm/editor-pm/index.d.ts +10 -0
- package/dist/esm/editor-pm/index.d.ts.map +1 -0
- package/dist/esm/editor-pm/index.js +9 -0
- package/dist/esm/editor-pm/mention-nodeview.d.ts +31 -0
- package/dist/esm/editor-pm/mention-nodeview.d.ts.map +1 -0
- package/dist/esm/editor-pm/mention-nodeview.js +88 -0
- package/dist/esm/editor-pm/mentions-dropdown.d.ts +13 -0
- package/dist/esm/editor-pm/mentions-dropdown.d.ts.map +1 -0
- package/dist/esm/editor-pm/mentions-dropdown.js +17 -0
- package/dist/esm/editor-pm/mentions-plugin.d.ts +18 -0
- package/dist/esm/editor-pm/mentions-plugin.d.ts.map +1 -0
- package/dist/esm/editor-pm/mentions-plugin.js +92 -0
- package/dist/esm/editor-pm/placeholder-plugin.d.ts +4 -0
- package/dist/esm/editor-pm/placeholder-plugin.d.ts.map +1 -0
- package/dist/esm/editor-pm/placeholder-plugin.js +20 -0
- package/dist/esm/editor-pm/prosemirror-editor.d.ts +493 -0
- package/dist/esm/editor-pm/prosemirror-editor.d.ts.map +1 -0
- package/dist/esm/editor-pm/prosemirror-editor.js +1135 -0
- package/dist/esm/editor-pm/schema.d.ts +3 -0
- package/dist/esm/editor-pm/schema.d.ts.map +1 -0
- package/dist/esm/editor-pm/schema.js +179 -0
- package/dist/esm/editor-pm/types.d.ts +8 -0
- package/dist/esm/editor-pm/types.d.ts.map +1 -0
- package/dist/esm/editor-pm/types.js +1 -0
- package/dist/esm/editor-pm/unfocused-selection-plugin.d.ts +25 -0
- package/dist/esm/editor-pm/unfocused-selection-plugin.d.ts.map +1 -0
- package/dist/esm/editor-pm/unfocused-selection-plugin.js +61 -0
- package/dist/esm/editor-pm/use-dropdown-change-pm.d.ts +24 -0
- package/dist/esm/editor-pm/use-dropdown-change-pm.d.ts.map +1 -0
- package/dist/esm/editor-pm/use-dropdown-change-pm.js +137 -0
- package/dist/esm/editor-pm/use-editor-change-pm.d.ts +29 -0
- package/dist/esm/editor-pm/use-editor-change-pm.d.ts.map +1 -0
- package/dist/esm/editor-pm/use-editor-change-pm.js +152 -0
- package/dist/esm/editor-pm/use-editor-decorator-pm.d.ts +17 -0
- package/dist/esm/editor-pm/use-editor-decorator-pm.d.ts.map +1 -0
- package/dist/esm/editor-pm/use-editor-decorator-pm.js +57 -0
- package/dist/esm/editor-pm/use-editor-keydown-pm.d.ts +21 -0
- package/dist/esm/editor-pm/use-editor-keydown-pm.d.ts.map +1 -0
- package/dist/esm/editor-pm/use-editor-keydown-pm.js +79 -0
- package/dist/esm/editor-pm/use-mention-keydown.d.ts +11 -0
- package/dist/esm/editor-pm/use-mention-keydown.d.ts.map +1 -0
- package/dist/esm/editor-pm/use-mention-keydown.js +57 -0
- package/dist/esm/editor-pm/use-parameter-suggestions.d.ts +19 -0
- package/dist/esm/editor-pm/use-parameter-suggestions.d.ts.map +1 -0
- package/dist/esm/editor-pm/use-parameter-suggestions.js +66 -0
- package/dist/esm/editor-pm/use-parameter-suggestions.test.d.ts +2 -0
- package/dist/esm/editor-pm/use-parameter-suggestions.test.d.ts.map +1 -0
- package/dist/esm/editor-pm/use-parameter-suggestions.test.js +66 -0
- package/dist/esm/eye-dropper/index.d.ts +10 -0
- package/dist/esm/eye-dropper/index.d.ts.map +1 -0
- package/dist/esm/eye-dropper/index.js +23 -0
- package/dist/esm/function-info/helpers.d.ts +10 -0
- package/dist/esm/function-info/helpers.d.ts.map +1 -0
- package/dist/esm/function-info/helpers.js +20 -0
- package/dist/esm/function-info/index.d.ts +11 -0
- package/dist/esm/function-info/index.d.ts.map +1 -0
- package/dist/esm/function-info/index.js +68 -0
- package/dist/esm/function-info/style.d.ts +7 -0
- package/dist/esm/function-info/style.d.ts.map +1 -0
- package/dist/esm/function-info/style.js +10 -0
- package/dist/esm/hex-color-picker/index.d.ts +8 -0
- package/dist/esm/hex-color-picker/index.d.ts.map +1 -0
- package/dist/esm/hex-color-picker/index.js +44 -0
- package/dist/esm/hooks/use-cycle-reference.d.ts +16 -0
- package/dist/esm/hooks/use-cycle-reference.d.ts.map +1 -0
- package/dist/esm/hooks/use-cycle-reference.js +70 -0
- package/dist/esm/hooks/use-dropdown-categories.d.ts +9 -0
- package/dist/esm/hooks/use-dropdown-categories.d.ts.map +1 -0
- package/dist/esm/hooks/use-dropdown-categories.js +38 -0
- package/dist/esm/hooks/use-dropdown.d.ts +38 -0
- package/dist/esm/hooks/use-dropdown.d.ts.map +1 -0
- package/dist/esm/hooks/use-dropdown.js +236 -0
- package/dist/esm/hooks/use-isomorphic-layout-effect.ts.d.ts +6 -0
- package/dist/esm/hooks/use-isomorphic-layout-effect.ts.d.ts.map +1 -0
- package/dist/esm/hooks/use-isomorphic-layout-effect.ts.js +8 -0
- package/dist/esm/hooks/use-modal.d.ts +28 -0
- package/dist/esm/hooks/use-modal.d.ts.map +1 -0
- package/dist/esm/hooks/use-modal.js +93 -0
- package/dist/esm/hooks/use-visibility.d.ts +2 -0
- package/dist/esm/hooks/use-visibility.d.ts.map +1 -0
- package/dist/esm/hooks/use-visibility.js +12 -0
- package/dist/esm/icon-button/index.d.ts +15 -0
- package/dist/esm/icon-button/index.d.ts.map +1 -0
- package/dist/esm/icon-button/index.js +32 -0
- package/dist/esm/index.d.ts +34 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +33 -0
- package/dist/esm/input/index.d.ts +9 -0
- package/dist/esm/input/index.d.ts.map +1 -0
- package/dist/esm/input/index.js +7 -0
- package/dist/esm/popover/index.d.ts +13 -0
- package/dist/esm/popover/index.d.ts.map +1 -0
- package/dist/esm/popover/index.js +22 -0
- package/dist/esm/progress/index.d.ts +10 -0
- package/dist/esm/progress/index.d.ts.map +1 -0
- package/dist/esm/progress/index.js +12 -0
- package/dist/esm/select/index.d.ts +14 -0
- package/dist/esm/select/index.d.ts.map +1 -0
- package/dist/esm/select/index.js +30 -0
- package/dist/esm/separator/index.d.ts +5 -0
- package/dist/esm/separator/index.d.ts.map +1 -0
- package/dist/esm/separator/index.js +6 -0
- package/dist/esm/skeleton/index.d.ts +7 -0
- package/dist/esm/skeleton/index.d.ts.map +1 -0
- package/dist/esm/skeleton/index.js +9 -0
- package/dist/esm/stack/index.d.ts +11 -0
- package/dist/esm/stack/index.d.ts.map +1 -0
- package/dist/esm/stack/index.js +20 -0
- package/dist/esm/tabs/index.d.ts +8 -0
- package/dist/esm/tabs/index.d.ts.map +1 -0
- package/dist/esm/tabs/index.js +11 -0
- package/dist/esm/tooltip/index.d.ts +12 -0
- package/dist/esm/tooltip/index.d.ts.map +1 -0
- package/dist/esm/tooltip/index.js +13 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
- package/dist/esm/utils.d.ts +3 -0
- package/dist/esm/utils.d.ts.map +1 -0
- package/dist/esm/utils.js +5 -0
- package/dist/esm/vitest.config.d.ts +3 -0
- package/dist/esm/vitest.config.d.ts.map +1 -0
- package/dist/esm/vitest.config.js +21 -0
- package/package.json +78 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ParsedToken } from "@rowsncolumns/calculator";
|
|
2
|
+
import { EditorState } from "prosemirror-state";
|
|
3
|
+
import { DecorationSet } from "prosemirror-view";
|
|
4
|
+
import { type LeafDecorator } from "./helpers";
|
|
5
|
+
export type DecoratorRange = LeafDecorator & {
|
|
6
|
+
from: number;
|
|
7
|
+
to: number;
|
|
8
|
+
};
|
|
9
|
+
type UseDecoratorPMProps = {
|
|
10
|
+
cursorPosition: number | undefined;
|
|
11
|
+
formulaMode?: boolean;
|
|
12
|
+
isActive?: boolean;
|
|
13
|
+
tokenizer(value: string): ParsedToken[];
|
|
14
|
+
};
|
|
15
|
+
export declare const useEditorDecoratorPM: ({ cursorPosition, formulaMode, tokenizer, isActive, }: UseDecoratorPMProps) => (state: EditorState) => DecorationSet;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=use-editor-decorator-pm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-editor-decorator-pm.d.ts","sourceRoot":"","sources":["../../../editor-pm/use-editor-decorator-pm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAG5D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAc,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,WAAW,CAAC;AAEnB,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;CACzC,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,uDAKlC,mBAAmB,aAEV,WAAW,KAAG,aAoFzB,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { getSelectionColorAtIndex, isNil } from "@rowsncolumns/utils";
|
|
2
|
+
import { useCallback } from "react";
|
|
3
|
+
import { Decoration, DecorationSet } from "prosemirror-view";
|
|
4
|
+
import { isNumberToken, isStringToken, isTableColumnToken, } from "./helpers";
|
|
5
|
+
export var useEditorDecoratorPM = function (_a) {
|
|
6
|
+
var cursorPosition = _a.cursorPosition, formulaMode = _a.formulaMode, tokenizer = _a.tokenizer, isActive = _a.isActive;
|
|
7
|
+
return useCallback(function (state) {
|
|
8
|
+
var decorations = [];
|
|
9
|
+
if (!formulaMode) {
|
|
10
|
+
return DecorationSet.create(state.doc, []);
|
|
11
|
+
}
|
|
12
|
+
// Only for formulas
|
|
13
|
+
var text = state.doc.textContent;
|
|
14
|
+
var tokens = tokenizer(text);
|
|
15
|
+
// Adds a cell suggestion cursor
|
|
16
|
+
if (isActive && cursorPosition !== undefined && text) {
|
|
17
|
+
decorations.push(Decoration.widget(cursorPosition, function () {
|
|
18
|
+
var span = document.createElement("span");
|
|
19
|
+
span.className =
|
|
20
|
+
"bg-contain w-[8px] h-[12px] cursor-default inline-block leading-3 align-bottom";
|
|
21
|
+
span.style.background =
|
|
22
|
+
"url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4IiBoZWlnaHQ9IjMiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNjY2MiPjxwYXRoIGQ9Ik0wLjUgMEwwLjUgM00wIDIuNUw4IDIuNU03LjUgM0w3LjUgMCIvPjwvc3ZnPg==) bottom no-repeat";
|
|
23
|
+
return span;
|
|
24
|
+
}, { side: 0 }));
|
|
25
|
+
}
|
|
26
|
+
var prevToken;
|
|
27
|
+
var offset = 0;
|
|
28
|
+
tokens.forEach(function (token, idx) {
|
|
29
|
+
var _a;
|
|
30
|
+
var add = token.startOffset + (idx === 0 ? 1 : 0) - ((_a = prevToken === null || prevToken === void 0 ? void 0 : prevToken.endColumn) !== null && _a !== void 0 ? _a : 0);
|
|
31
|
+
var from = offset + add;
|
|
32
|
+
var to = from + token.image.length;
|
|
33
|
+
// Get color for the token
|
|
34
|
+
var color = !isNil(token.index)
|
|
35
|
+
? getSelectionColorAtIndex(token.index)
|
|
36
|
+
: isTableColumnToken(token)
|
|
37
|
+
? "#2653BA"
|
|
38
|
+
: isStringToken(token)
|
|
39
|
+
? "#008000"
|
|
40
|
+
: isNumberToken(token)
|
|
41
|
+
? "#15c"
|
|
42
|
+
: undefined;
|
|
43
|
+
if (color) {
|
|
44
|
+
decorations.push(Decoration.inline(from, to, {
|
|
45
|
+
style: "color: ".concat(color),
|
|
46
|
+
}, {}));
|
|
47
|
+
}
|
|
48
|
+
// Handle bold tokens if needed (if the token type supports it)
|
|
49
|
+
if (token.bold) {
|
|
50
|
+
decorations.push(Decoration.inline(from, to, {
|
|
51
|
+
style: "font-weight: bold",
|
|
52
|
+
}, {}));
|
|
53
|
+
}
|
|
54
|
+
prevToken = token;
|
|
55
|
+
offset = to;
|
|
56
|
+
});
|
|
57
|
+
return DecorationSet.create(state.doc, decorations);
|
|
58
|
+
}, [cursorPosition, isActive, formulaMode, tokenizer]);
|
|
59
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { EditorView } from "prosemirror-view";
|
|
2
|
+
import { TextFormatRun } from "./types.js";
|
|
3
|
+
type UseEditorKeyDownPMProps = {
|
|
4
|
+
value: string;
|
|
5
|
+
formulaMode?: boolean;
|
|
6
|
+
isNewValue?: boolean;
|
|
7
|
+
isCursorAtEnd(): boolean;
|
|
8
|
+
onInsertBreak(): void;
|
|
9
|
+
onSubmit?(value: string, textFormatRuns: TextFormatRun[] | undefined | null, e: React.KeyboardEvent<HTMLDivElement>): void;
|
|
10
|
+
onCancel?(e: React.KeyboardEvent<HTMLDivElement>): void;
|
|
11
|
+
onKeyDown?(e: React.KeyboardEvent<HTMLDivElement>): void;
|
|
12
|
+
canSubmit?: boolean;
|
|
13
|
+
canCancel?: boolean;
|
|
14
|
+
isActive?: boolean;
|
|
15
|
+
isDropdownOpen?: boolean;
|
|
16
|
+
isMentionDropdownOpen?: boolean;
|
|
17
|
+
getView(): EditorView | null;
|
|
18
|
+
};
|
|
19
|
+
export declare const useEditorKeyDownPM: ({ formulaMode, isNewValue, isCursorAtEnd, onInsertBreak, onSubmit, onCancel, onKeyDown, getView, isActive, value, canSubmit, canCancel, isDropdownOpen, }: UseEditorKeyDownPMProps) => (e: React.KeyboardEvent<HTMLDivElement>) => void;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=use-editor-keydown-pm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-editor-keydown-pm.d.ts","sourceRoot":"","sources":["../../../editor-pm/use-editor-keydown-pm.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,KAAK,uBAAuB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,IAAI,OAAO,CAAC;IACzB,aAAa,IAAI,IAAI,CAAC;IACtB,QAAQ,CAAC,CACP,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,aAAa,EAAE,GAAG,SAAS,GAAG,IAAI,EAClD,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,GACrC,IAAI,CAAC;IACR,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IACxD,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IACzD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,OAAO,IAAI,UAAU,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,2JAchC,uBAAuB,SASlB,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,SAmF1C,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { isAnArrowKey } from "@rowsncolumns/utils";
|
|
2
|
+
import { useCallback, useRef } from "react";
|
|
3
|
+
import { useIsomorphicLayoutEffect } from "../hooks/use-isomorphic-layout-effect.ts";
|
|
4
|
+
import { extractTextFormatRuns, serializeEditorValue } from "./helpers.js";
|
|
5
|
+
export var useEditorKeyDownPM = function (_a) {
|
|
6
|
+
var formulaMode = _a.formulaMode, isNewValue = _a.isNewValue, isCursorAtEnd = _a.isCursorAtEnd, onInsertBreak = _a.onInsertBreak, onSubmit = _a.onSubmit, onCancel = _a.onCancel, onKeyDown = _a.onKeyDown, getView = _a.getView, isActive = _a.isActive, value = _a.value, _b = _a.canSubmit, canSubmit = _b === void 0 ? true : _b, _c = _a.canCancel, canCancel = _c === void 0 ? true : _c, isDropdownOpen = _a.isDropdownOpen;
|
|
7
|
+
var valueRef = useRef(undefined);
|
|
8
|
+
// Used in keydown handler, closure
|
|
9
|
+
useIsomorphicLayoutEffect(function () {
|
|
10
|
+
valueRef.current = value;
|
|
11
|
+
}, [value]);
|
|
12
|
+
return useCallback(function (e) {
|
|
13
|
+
var _a;
|
|
14
|
+
var nativeEvent = e.nativeEvent;
|
|
15
|
+
var view = getView();
|
|
16
|
+
var isComposing = nativeEvent.isComposing ||
|
|
17
|
+
nativeEvent.keyCode === 229 ||
|
|
18
|
+
nativeEvent.key === "Process" ||
|
|
19
|
+
(view === null || view === void 0 ? void 0 : view.composing);
|
|
20
|
+
if (isComposing &&
|
|
21
|
+
(e.key === "Enter" ||
|
|
22
|
+
e.key === "Tab" ||
|
|
23
|
+
e.key === "Escape" ||
|
|
24
|
+
isAnArrowKey(e.key))) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
// Handle line breaks
|
|
28
|
+
var key = e.key;
|
|
29
|
+
var isEnter = key === "Enter";
|
|
30
|
+
var isTab = key === "Tab";
|
|
31
|
+
var isEscape = key === "Escape";
|
|
32
|
+
var isArrow = isAnArrowKey(key);
|
|
33
|
+
var smartSubmit = !formulaMode &&
|
|
34
|
+
isArrow &&
|
|
35
|
+
isNewValue &&
|
|
36
|
+
isCursorAtEnd() &&
|
|
37
|
+
!isDropdownOpen;
|
|
38
|
+
// Insert an in-cell line break on Alt+Enter (universal Excel/Sheets) or
|
|
39
|
+
// Cmd+Enter (Mac). Ctrl+Enter is deliberately NOT a line break — it
|
|
40
|
+
// commits (and on Windows is the only commit chord), matching Excel.
|
|
41
|
+
// Previously this fired on metaKey||ctrlKey, so Alt+Enter fell through
|
|
42
|
+
// to the submit path and destructively committed instead of newlining.
|
|
43
|
+
if (isEnter && (e.altKey || e.metaKey)) {
|
|
44
|
+
onInsertBreak();
|
|
45
|
+
e.preventDefault();
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
// Submit handler
|
|
49
|
+
if (canSubmit && (isEnter || isTab || smartSubmit)) {
|
|
50
|
+
/* Commit the value from the live ProseMirror doc instead of the
|
|
51
|
+
lagging React-state mirror (valueRef), which dropped fast/long
|
|
52
|
+
type-to-edit input and committed blank cells (and bled the stale
|
|
53
|
+
buffer into the next cell). Formula commits keep valueRef so
|
|
54
|
+
cell-reference token state is unchanged. */
|
|
55
|
+
var submitView = getView();
|
|
56
|
+
var submitValue = !formulaMode && submitView
|
|
57
|
+
? serializeEditorValue(submitView.state.doc)
|
|
58
|
+
: (_a = valueRef.current) !== null && _a !== void 0 ? _a : "";
|
|
59
|
+
onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(submitValue, extractTextFormatRuns(submitView === null || submitView === void 0 ? void 0 : submitView.state.doc), e);
|
|
60
|
+
}
|
|
61
|
+
// Cancel handler
|
|
62
|
+
if (canCancel && isEscape) {
|
|
63
|
+
/* Trigger cancel */
|
|
64
|
+
onCancel === null || onCancel === void 0 ? void 0 : onCancel(e);
|
|
65
|
+
}
|
|
66
|
+
// Callback
|
|
67
|
+
onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(e);
|
|
68
|
+
}, [
|
|
69
|
+
onKeyDown,
|
|
70
|
+
onSubmit,
|
|
71
|
+
onCancel,
|
|
72
|
+
getView,
|
|
73
|
+
isNewValue,
|
|
74
|
+
isCursorAtEnd,
|
|
75
|
+
formulaMode,
|
|
76
|
+
isDropdownOpen,
|
|
77
|
+
onInsertBreak,
|
|
78
|
+
canSubmit,
|
|
79
|
+
canCancel,
|
|
80
|
+
]);
|
|
81
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { MentionState } from "./mentions-plugin";
|
|
2
|
+
import { Mention } from "@rowsncolumns/common-types";
|
|
3
|
+
export declare const useMentionKeyDown: ({ mentions, mentionState, onSelect, }: {
|
|
4
|
+
mentions: Mention[];
|
|
5
|
+
mentionState: MentionState;
|
|
6
|
+
onSelect: (mention: Mention) => void;
|
|
7
|
+
}) => {
|
|
8
|
+
onMentionKeydown: (e: React.KeyboardEvent<HTMLDivElement>) => void;
|
|
9
|
+
highlightedIndex: number;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=use-mention-keydown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-mention-keydown.d.ts","sourceRoot":"","sources":["../../../editor-pm/use-mention-keydown.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAErD,eAAO,MAAM,iBAAiB,GAAI,uCAI/B;IACD,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACtC;0BAOO,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC;;CAsD1C,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { __read } from "tslib";
|
|
2
|
+
import { useCallback, useRef, useState } from "react";
|
|
3
|
+
import { useIsomorphicLayoutEffect } from "../hooks/use-isomorphic-layout-effect.ts";
|
|
4
|
+
export var useMentionKeyDown = function (_a) {
|
|
5
|
+
var mentions = _a.mentions, mentionState = _a.mentionState, onSelect = _a.onSelect;
|
|
6
|
+
var _b = __read(useState(0), 2), highlightedIndex = _b[0], setHighlightedIndex = _b[1];
|
|
7
|
+
var highlightedIndexRef = useRef(undefined);
|
|
8
|
+
useIsomorphicLayoutEffect(function () {
|
|
9
|
+
highlightedIndexRef.current = highlightedIndex;
|
|
10
|
+
}, [highlightedIndex]);
|
|
11
|
+
var onMentionKeydown = useCallback(function (e) {
|
|
12
|
+
var len = mentions.length - 1;
|
|
13
|
+
var index = highlightedIndexRef.current;
|
|
14
|
+
// No items
|
|
15
|
+
if (len === 0) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
switch (e.key) {
|
|
19
|
+
case "ArrowDown": {
|
|
20
|
+
setHighlightedIndex(function (prev) {
|
|
21
|
+
if (prev === len) {
|
|
22
|
+
return 0;
|
|
23
|
+
}
|
|
24
|
+
return Math.min(prev + 1, len);
|
|
25
|
+
});
|
|
26
|
+
e.preventDefault();
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
case "ArrowUp":
|
|
30
|
+
setHighlightedIndex(function (prev) {
|
|
31
|
+
if (prev === 0) {
|
|
32
|
+
return len;
|
|
33
|
+
}
|
|
34
|
+
return Math.max(0, prev - 1);
|
|
35
|
+
});
|
|
36
|
+
e.preventDefault();
|
|
37
|
+
break;
|
|
38
|
+
case "Escape":
|
|
39
|
+
if (mentionState.active) {
|
|
40
|
+
e.preventDefault();
|
|
41
|
+
}
|
|
42
|
+
break;
|
|
43
|
+
case "Tab":
|
|
44
|
+
case "Enter": {
|
|
45
|
+
if (index === -1 || index === undefined) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
var selectedItem = mentions[index];
|
|
49
|
+
onSelect(selectedItem);
|
|
50
|
+
e.preventDefault();
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}, [mentions, mentionState, onSelect]);
|
|
55
|
+
return {
|
|
56
|
+
onMentionKeydown: onMentionKeydown,
|
|
57
|
+
highlightedIndex: highlightedIndex,
|
|
58
|
+
};
|
|
59
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ParsedToken } from "@rowsncolumns/calculator";
|
|
2
|
+
import type { OptionItem } from "./types";
|
|
3
|
+
type Params = {
|
|
4
|
+
functionToken: ParsedToken | undefined;
|
|
5
|
+
parameterIndex: number;
|
|
6
|
+
parameterArguments: string[];
|
|
7
|
+
shouldFetchFunctionParameters?: (functionName: string, parameterIndex: number, parameters: string[]) => boolean;
|
|
8
|
+
getFunctionParameterSuggestions?: (functionName: string, parameterIndex: number, parameters: string[]) => OptionItem[] | undefined | Promise<OptionItem[] | undefined> | Promise<OptionItem[]>;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Fetch parameter suggestions (sync or async) for the active function.
|
|
12
|
+
* Ensures stale responses are ignored when dependency changes mid-flight.
|
|
13
|
+
*/
|
|
14
|
+
export declare const useParameterSuggestions: ({ functionToken, parameterIndex, parameterArguments, shouldFetchFunctionParameters, getFunctionParameterSuggestions, }: Params) => {
|
|
15
|
+
parameterSuggestions: OptionItem[];
|
|
16
|
+
isFetchingParameters: boolean;
|
|
17
|
+
};
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=use-parameter-suggestions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-parameter-suggestions.d.ts","sourceRoot":"","sources":["../../../editor-pm/use-parameter-suggestions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAG5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG1C,KAAK,MAAM,GAAG;IACZ,aAAa,EAAE,WAAW,GAAG,SAAS,CAAC;IACvC,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,6BAA6B,CAAC,EAAE,CAC9B,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAAE,KACjB,OAAO,CAAC;IACb,+BAA+B,CAAC,EAAE,CAChC,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAAE,KAElB,UAAU,EAAE,GACZ,SAAS,GACT,OAAO,CAAC,UAAU,EAAE,GAAG,SAAS,CAAC,GACjC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;CAC3B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAI,wHAMrC,MAAM;;;CA4ER,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { __awaiter, __generator, __read } from "tslib";
|
|
2
|
+
import { useEffect, useMemo, useRef, useState } from "react";
|
|
3
|
+
import { DEFAULT_ARRAY } from "@rowsncolumns/spreadsheet";
|
|
4
|
+
/**
|
|
5
|
+
* Fetch parameter suggestions (sync or async) for the active function.
|
|
6
|
+
* Ensures stale responses are ignored when dependency changes mid-flight.
|
|
7
|
+
*/
|
|
8
|
+
export var useParameterSuggestions = function (_a) {
|
|
9
|
+
var _b;
|
|
10
|
+
var functionToken = _a.functionToken, parameterIndex = _a.parameterIndex, parameterArguments = _a.parameterArguments, shouldFetchFunctionParameters = _a.shouldFetchFunctionParameters, getFunctionParameterSuggestions = _a.getFunctionParameterSuggestions;
|
|
11
|
+
var _c = __read(useState([]), 2), parameterSuggestions = _c[0], setSuggestions = _c[1];
|
|
12
|
+
var _d = __read(useState(false), 2), isFetchingParameters = _d[0], setIsFetchingParameters = _d[1];
|
|
13
|
+
var requestIdRef = useRef(0);
|
|
14
|
+
var functionName = (_b = functionToken === null || functionToken === void 0 ? void 0 : functionToken.image) !== null && _b !== void 0 ? _b : "";
|
|
15
|
+
var hasFunctionToken = Boolean(functionToken);
|
|
16
|
+
var parameterArgsKey = useMemo(function () { return JSON.stringify(parameterArguments !== null && parameterArguments !== void 0 ? parameterArguments : []); }, [parameterArguments]);
|
|
17
|
+
useEffect(function () {
|
|
18
|
+
requestIdRef.current += 1;
|
|
19
|
+
var requestId = requestIdRef.current;
|
|
20
|
+
if (!hasFunctionToken || !getFunctionParameterSuggestions) {
|
|
21
|
+
setIsFetchingParameters(false);
|
|
22
|
+
setSuggestions(DEFAULT_ARRAY);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (shouldFetchFunctionParameters &&
|
|
26
|
+
!shouldFetchFunctionParameters(functionName, parameterIndex, parameterArguments)) {
|
|
27
|
+
setIsFetchingParameters(false);
|
|
28
|
+
setSuggestions(DEFAULT_ARRAY);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
var cancelled = false;
|
|
32
|
+
var run = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
33
|
+
var result, error_1;
|
|
34
|
+
return __generator(this, function (_a) {
|
|
35
|
+
switch (_a.label) {
|
|
36
|
+
case 0:
|
|
37
|
+
_a.trys.push([0, 2, 3, 4]);
|
|
38
|
+
setIsFetchingParameters(true);
|
|
39
|
+
return [4 /*yield*/, getFunctionParameterSuggestions(functionName, parameterIndex, parameterArguments)];
|
|
40
|
+
case 1:
|
|
41
|
+
result = _a.sent();
|
|
42
|
+
if (!cancelled && requestIdRef.current === requestId) {
|
|
43
|
+
setSuggestions(result !== null && result !== void 0 ? result : []);
|
|
44
|
+
}
|
|
45
|
+
return [3 /*break*/, 4];
|
|
46
|
+
case 2:
|
|
47
|
+
error_1 = _a.sent();
|
|
48
|
+
// Keep dropdown stable on errors instead of throwing
|
|
49
|
+
if (!cancelled && requestIdRef.current === requestId) {
|
|
50
|
+
console.warn("Error fetching parameter suggestions", error_1);
|
|
51
|
+
setSuggestions([]);
|
|
52
|
+
}
|
|
53
|
+
return [3 /*break*/, 4];
|
|
54
|
+
case 3:
|
|
55
|
+
if (!cancelled && requestIdRef.current === requestId) {
|
|
56
|
+
setIsFetchingParameters(false);
|
|
57
|
+
}
|
|
58
|
+
return [7 /*endfinally*/];
|
|
59
|
+
case 4: return [2 /*return*/];
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}); };
|
|
63
|
+
run();
|
|
64
|
+
return function () {
|
|
65
|
+
cancelled = true;
|
|
66
|
+
};
|
|
67
|
+
}, [
|
|
68
|
+
functionName,
|
|
69
|
+
hasFunctionToken,
|
|
70
|
+
parameterIndex,
|
|
71
|
+
parameterArgsKey,
|
|
72
|
+
shouldFetchFunctionParameters,
|
|
73
|
+
getFunctionParameterSuggestions,
|
|
74
|
+
]);
|
|
75
|
+
return {
|
|
76
|
+
parameterSuggestions: parameterSuggestions,
|
|
77
|
+
isFetchingParameters: isFetchingParameters,
|
|
78
|
+
};
|
|
79
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-parameter-suggestions.test.d.ts","sourceRoot":"","sources":["../../../editor-pm/use-parameter-suggestions.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { __awaiter, __generator } from "tslib";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { cleanup, render, screen, waitFor, act } from "@testing-library/react";
|
|
4
|
+
import { afterEach, describe, it, expect, vi } from "vitest";
|
|
5
|
+
import { useParameterSuggestions } from "./use-parameter-suggestions";
|
|
6
|
+
var TestHarness = function (_a) {
|
|
7
|
+
var functionToken = _a.functionToken, fetcher = _a.fetcher;
|
|
8
|
+
var parameterSuggestions = useParameterSuggestions({
|
|
9
|
+
functionToken: functionToken,
|
|
10
|
+
parameterIndex: 0,
|
|
11
|
+
parameterArguments: [],
|
|
12
|
+
getFunctionParameterSuggestions: fetcher,
|
|
13
|
+
}).parameterSuggestions;
|
|
14
|
+
return (React.createElement("div", { "data-testid": "items" }, parameterSuggestions.map(function (item) { return item.title; }).join(",")));
|
|
15
|
+
};
|
|
16
|
+
var makeFunctionToken = function (name) {
|
|
17
|
+
if (name === void 0) { name = "SUM"; }
|
|
18
|
+
return ({
|
|
19
|
+
image: name,
|
|
20
|
+
tokenType: { name: "Function", PATTERN: "" },
|
|
21
|
+
startColumn: 0,
|
|
22
|
+
endColumn: 0,
|
|
23
|
+
startOffset: 0,
|
|
24
|
+
endOffset: 0,
|
|
25
|
+
endLine: 0,
|
|
26
|
+
tokenTypeIdx: 0,
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
afterEach(function () { return cleanup(); });
|
|
30
|
+
describe("useParameterSuggestions", function () {
|
|
31
|
+
it("returns async suggestions for an active function", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
32
|
+
var fetcher;
|
|
33
|
+
return __generator(this, function (_a) {
|
|
34
|
+
switch (_a.label) {
|
|
35
|
+
case 0:
|
|
36
|
+
fetcher = vi
|
|
37
|
+
.fn()
|
|
38
|
+
.mockResolvedValue([{ title: "paramA", category: "parameter" }]);
|
|
39
|
+
render(React.createElement(TestHarness, { functionToken: makeFunctionToken(), fetcher: fetcher }));
|
|
40
|
+
return [4 /*yield*/, waitFor(function () {
|
|
41
|
+
return expect(screen.getByTestId("items").textContent).toBe("paramA");
|
|
42
|
+
})];
|
|
43
|
+
case 1:
|
|
44
|
+
_a.sent();
|
|
45
|
+
expect(fetcher).toHaveBeenCalledWith("SUM", 0, []);
|
|
46
|
+
return [2 /*return*/];
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}); });
|
|
50
|
+
it("ignores stale responses when function token changes", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
51
|
+
var resolveFirst, resolveSecond, fetcher, rerender;
|
|
52
|
+
return __generator(this, function (_a) {
|
|
53
|
+
switch (_a.label) {
|
|
54
|
+
case 0:
|
|
55
|
+
resolveFirst = function () { };
|
|
56
|
+
resolveSecond = function () { };
|
|
57
|
+
fetcher = vi
|
|
58
|
+
.fn()
|
|
59
|
+
.mockImplementationOnce(function () {
|
|
60
|
+
return new Promise(function (res) {
|
|
61
|
+
resolveFirst = res;
|
|
62
|
+
});
|
|
63
|
+
})
|
|
64
|
+
.mockImplementationOnce(function () {
|
|
65
|
+
return new Promise(function (res) {
|
|
66
|
+
resolveSecond = res;
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
rerender = render(React.createElement(TestHarness, { functionToken: makeFunctionToken(), fetcher: fetcher })).rerender;
|
|
70
|
+
// Trigger second request with a new token
|
|
71
|
+
rerender(React.createElement(TestHarness, { functionToken: makeFunctionToken("AVG"), fetcher: fetcher }));
|
|
72
|
+
return [4 /*yield*/, act(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
73
|
+
return __generator(this, function (_a) {
|
|
74
|
+
resolveFirst([{ title: "first", category: "parameter" }]);
|
|
75
|
+
return [2 /*return*/];
|
|
76
|
+
});
|
|
77
|
+
}); })];
|
|
78
|
+
case 1:
|
|
79
|
+
_a.sent();
|
|
80
|
+
expect(screen.getByTestId("items").textContent).toBe("");
|
|
81
|
+
return [4 /*yield*/, act(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
82
|
+
return __generator(this, function (_a) {
|
|
83
|
+
resolveSecond([{ title: "second", category: "parameter" }]);
|
|
84
|
+
return [2 /*return*/];
|
|
85
|
+
});
|
|
86
|
+
}); })];
|
|
87
|
+
case 2:
|
|
88
|
+
_a.sent();
|
|
89
|
+
return [4 /*yield*/, waitFor(function () {
|
|
90
|
+
return expect(screen.getByTestId("items").textContent).toBe("second");
|
|
91
|
+
})];
|
|
92
|
+
case 3:
|
|
93
|
+
_a.sent();
|
|
94
|
+
return [2 /*return*/];
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}); });
|
|
98
|
+
it("clears suggestions when there is no active function", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
99
|
+
var fetcher, rerender;
|
|
100
|
+
return __generator(this, function (_a) {
|
|
101
|
+
switch (_a.label) {
|
|
102
|
+
case 0:
|
|
103
|
+
fetcher = vi
|
|
104
|
+
.fn()
|
|
105
|
+
.mockResolvedValue([{ title: "paramA", category: "parameter" }]);
|
|
106
|
+
rerender = render(React.createElement(TestHarness, { functionToken: makeFunctionToken(), fetcher: fetcher })).rerender;
|
|
107
|
+
return [4 /*yield*/, waitFor(function () {
|
|
108
|
+
return expect(screen.getByTestId("items").textContent).toBe("paramA");
|
|
109
|
+
})];
|
|
110
|
+
case 1:
|
|
111
|
+
_a.sent();
|
|
112
|
+
rerender(React.createElement(TestHarness, { fetcher: fetcher }));
|
|
113
|
+
return [4 /*yield*/, waitFor(function () {
|
|
114
|
+
return expect(screen.getByTestId("items").textContent).toBe("");
|
|
115
|
+
})];
|
|
116
|
+
case 2:
|
|
117
|
+
_a.sent();
|
|
118
|
+
return [2 /*return*/];
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}); });
|
|
122
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
type EyeDropperProps = {
|
|
3
|
+
value?: string;
|
|
4
|
+
onBeforeOpen?: () => void;
|
|
5
|
+
onChange?: (value: string) => void;
|
|
6
|
+
onCancel?: () => void;
|
|
7
|
+
};
|
|
8
|
+
export declare const EyeDropper: ({ onChange, onCancel, onBeforeOpen, }: EyeDropperProps) => React.JSX.Element | null;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../eye-dropper/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,KAAK,eAAe,GAAG;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,uCAIxB,eAAe,6BAuBjB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { MdColorize } from "@rowsncolumns/icons";
|
|
2
|
+
import { IconButton } from "../icon-button";
|
|
3
|
+
import React from "react";
|
|
4
|
+
import { canUseDOM } from "@rowsncolumns/utils";
|
|
5
|
+
export var EyeDropper = function (_a) {
|
|
6
|
+
var onChange = _a.onChange, onCancel = _a.onCancel, onBeforeOpen = _a.onBeforeOpen;
|
|
7
|
+
if (!canUseDOM || !window.EyeDropper) {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
var onOpen = function () {
|
|
11
|
+
var eyeDropper = new window.EyeDropper();
|
|
12
|
+
onBeforeOpen === null || onBeforeOpen === void 0 ? void 0 : onBeforeOpen();
|
|
13
|
+
eyeDropper
|
|
14
|
+
.open()
|
|
15
|
+
.then(function (result) {
|
|
16
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(result.sRGBHex);
|
|
17
|
+
})
|
|
18
|
+
.catch(function (err) {
|
|
19
|
+
onCancel === null || onCancel === void 0 ? void 0 : onCancel();
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
return (React.createElement(IconButton, { onClick: onOpen, tooltip: "Pick a custom color" },
|
|
23
|
+
React.createElement(MdColorize, null)));
|
|
24
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../function-info/helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GAAI,QAAQ,MAAM;;;;CAepD,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tokenizes function syntax
|
|
3
|
+
* @param syntax
|
|
4
|
+
*/
|
|
5
|
+
export var tokenizeFunctionSyntax = function (syntax) {
|
|
6
|
+
var openParen = "(";
|
|
7
|
+
var closeParen = ")";
|
|
8
|
+
var index = syntax.indexOf(openParen) + 1;
|
|
9
|
+
var functionOpen = syntax.substr(0, index);
|
|
10
|
+
var parameters = syntax
|
|
11
|
+
.substr(index, syntax.length - index - 1)
|
|
12
|
+
// https://regex101.com/r/ymosUf/1 : Exclude comma inside square braces
|
|
13
|
+
.split(/,\s*(?=[^)^\]^}]*(?:\(|\[|\{|$))/gi)
|
|
14
|
+
.map(function (a) { return a.trim(); });
|
|
15
|
+
return {
|
|
16
|
+
functionOpen: functionOpen,
|
|
17
|
+
parameters: parameters,
|
|
18
|
+
functionClose: closeParen,
|
|
19
|
+
};
|
|
20
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CalculatorFunction } from "@rowsncolumns/common-types";
|
|
2
|
+
import React from "react";
|
|
3
|
+
type FunctionInfoProps = {
|
|
4
|
+
activeFunction?: CalculatorFunction;
|
|
5
|
+
parameterIndex?: number;
|
|
6
|
+
showFormulaHelp?: boolean;
|
|
7
|
+
onHideFormulaHelp?(): void;
|
|
8
|
+
};
|
|
9
|
+
export declare const FunctionInfo: React.FC<FunctionInfoProps>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../function-info/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,KAAkB,MAAM,OAAO,CAAC;AAOvC,KAAK,iBAAiB,GAAG;IACvB,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,IAAI,IAAI,CAAC;CAC5B,CAAC;AASF,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAoEpD,CAAC"}
|