@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,71 @@
|
|
|
1
|
+
import { CrossCircledIcon } from "@rowsncolumns/icons";
|
|
2
|
+
import React, { useMemo } from "react";
|
|
3
|
+
import { IconButton } from "../icon-button";
|
|
4
|
+
import { Separator } from "../separator";
|
|
5
|
+
import { tokenizeFunctionSyntax } from "./helpers";
|
|
6
|
+
import { StyledFunctionParameterTitle, StyledFunctionSubtitle } from "./style";
|
|
7
|
+
var ACTIVE_COLOR = "#008000";
|
|
8
|
+
export var FunctionInfo = function (_a) {
|
|
9
|
+
var activeFunction = _a.activeFunction, _b = _a.parameterIndex, parameterIndex = _b === void 0 ? 0 : _b, onHideFormulaHelp = _a.onHideFormulaHelp;
|
|
10
|
+
var _c = activeFunction !== null && activeFunction !== void 0 ? activeFunction : {}, syntax = _c.syntax, example = _c.example, description = _c.description, parameters = _c.parameters;
|
|
11
|
+
/**
|
|
12
|
+
* It can happen that formula list does not contain
|
|
13
|
+
* parameters, but syntax has
|
|
14
|
+
* Use syntax
|
|
15
|
+
*/
|
|
16
|
+
var paramLen = useMemo(function () {
|
|
17
|
+
return tokenizeFunctionSyntax(syntax !== null && syntax !== void 0 ? syntax : "").parameters.length;
|
|
18
|
+
}, [syntax]);
|
|
19
|
+
var paramIndex = Math.min(parameterIndex, paramLen - 1);
|
|
20
|
+
/**
|
|
21
|
+
* If Function is not documented,
|
|
22
|
+
*/
|
|
23
|
+
if (!syntax) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
return (React.createElement("div", { className: "break-words text-rnc-foreground" },
|
|
27
|
+
React.createElement("div", { className: "py-1 px-2 text-sm rounded-t-sm place-items-center flex bg-rnc-accent -mt-1 font-formula" },
|
|
28
|
+
React.createElement("div", { className: "flex-1" },
|
|
29
|
+
React.createElement(TokenizedFunction, { syntax: syntax, parameterIndex: paramIndex })),
|
|
30
|
+
React.createElement(IconButton, { onClick: onHideFormulaHelp, title: "Hide formula suggestions for this cell" },
|
|
31
|
+
React.createElement(CrossCircledIcon, null))),
|
|
32
|
+
React.createElement(Separator, { orientation: "horizontal", color: "$gray7" }),
|
|
33
|
+
React.createElement("div", { className: "overflow-auto max-h-[300px]" },
|
|
34
|
+
example ? (React.createElement("div", { className: "px-2 py-2" },
|
|
35
|
+
React.createElement(StyledFunctionSubtitle, null, "Example"),
|
|
36
|
+
React.createElement(StyledFunctionParameterTitle, { active: true }, example))) : null,
|
|
37
|
+
React.createElement("div", { className: "px-2 py-2" },
|
|
38
|
+
React.createElement(StyledFunctionSubtitle, null, "About"),
|
|
39
|
+
React.createElement("div", { className: "text-xs font-system" }, description)),
|
|
40
|
+
(parameters === null || parameters === void 0 ? void 0 : parameters.length) ? (React.createElement(Separator, { orientation: "horizontal", color: "$gray7" })) : null, parameters === null || parameters === void 0 ? void 0 :
|
|
41
|
+
parameters.map(function (_a, index) {
|
|
42
|
+
var title = _a.title, description = _a.description;
|
|
43
|
+
return (React.createElement("div", { className: "px-2 py-2", key: title },
|
|
44
|
+
React.createElement(StyledFunctionParameterTitle, { active: paramIndex === index }, title),
|
|
45
|
+
React.createElement("div", { className: "text-xs font-system" }, description)));
|
|
46
|
+
}))));
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Convert string function to tokens
|
|
50
|
+
* @param param0
|
|
51
|
+
*/
|
|
52
|
+
var TokenizedFunction = function (_a) {
|
|
53
|
+
var syntax = _a.syntax, parameterIndex = _a.parameterIndex;
|
|
54
|
+
if (!syntax) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
var _b = tokenizeFunctionSyntax(syntax), functionOpen = _b.functionOpen, parameters = _b.parameters, functionClose = _b.functionClose;
|
|
58
|
+
var paramLen = parameters.length;
|
|
59
|
+
return (React.createElement(React.Fragment, null,
|
|
60
|
+
React.createElement("span", null, functionOpen),
|
|
61
|
+
parameters.map(function (param, i) {
|
|
62
|
+
var sep = i < paramLen - 1 ? ", " : "";
|
|
63
|
+
return (React.createElement(React.Fragment, { key: i },
|
|
64
|
+
React.createElement("span", { style: {
|
|
65
|
+
color: parameterIndex === i ? ACTIVE_COLOR : void 0,
|
|
66
|
+
fontWeight: parameterIndex === i ? "bold" : "normal",
|
|
67
|
+
} }, param),
|
|
68
|
+
sep));
|
|
69
|
+
}),
|
|
70
|
+
React.createElement("span", null, functionClose)));
|
|
71
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ComponentProps } from "react";
|
|
2
|
+
import React from "react";
|
|
3
|
+
export declare const StyledFunctionSubtitle: ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => React.JSX.Element;
|
|
4
|
+
export declare const StyledFunctionParameterTitle: ({ className, active, ...props }: ComponentProps<typeof StyledFunctionSubtitle> & {
|
|
5
|
+
active?: boolean;
|
|
6
|
+
}) => React.JSX.Element;
|
|
7
|
+
//# sourceMappingURL=style.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../../function-info/style.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,eAAO,MAAM,sBAAsB,GAAI,yBAGpC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,sBAUtC,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAI,iCAI1C,cAAc,CAAC,OAAO,sBAAsB,CAAC,GAAG;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,sBAatE,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { __assign, __rest } from "tslib";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { cn } from "../utils";
|
|
4
|
+
export var StyledFunctionSubtitle = function (_a) {
|
|
5
|
+
var className = _a.className, props = __rest(_a, ["className"]);
|
|
6
|
+
return (React.createElement("div", __assign({ className: cn("uppercase pb-1 font-formula font-semibold text-xs text-rnc-foreground/60 tracking-wide", className) }, props)));
|
|
7
|
+
};
|
|
8
|
+
export var StyledFunctionParameterTitle = function (_a) {
|
|
9
|
+
var className = _a.className, active = _a.active, props = __rest(_a, ["className", "active"]);
|
|
10
|
+
return (React.createElement(StyledFunctionSubtitle, __assign({ className: cn("normal-case text-sm", active
|
|
11
|
+
? "text-green-700 font-semibold tracking-wide font-formula"
|
|
12
|
+
: undefined, className) }, props)));
|
|
13
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
type HexColorPickerProps = {
|
|
3
|
+
value?: string;
|
|
4
|
+
onChange?(color: string): void;
|
|
5
|
+
};
|
|
6
|
+
export declare const HexColorPicker: ({ value, onChange }: HexColorPickerProps) => React.JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../hex-color-picker/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AASxC,KAAK,mBAAmB,GAAG;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,qBAAqB,mBAAmB,sBAwBtE,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { __read } from "tslib";
|
|
2
|
+
import React, { useState } from "react";
|
|
3
|
+
import { IconButton } from "../icon-button";
|
|
4
|
+
import { PlusCircledIcon } from "@rowsncolumns/icons";
|
|
5
|
+
import { Popover, PopoverContent, PopoverTrigger } from "../popover";
|
|
6
|
+
import { Button } from "../button";
|
|
7
|
+
import isNil from "lodash/isNil";
|
|
8
|
+
import { HexColorPicker as ReactColorPicker } from "react-colorful";
|
|
9
|
+
import { Input } from "../input";
|
|
10
|
+
export var HexColorPicker = function (_a) {
|
|
11
|
+
var value = _a.value, onChange = _a.onChange;
|
|
12
|
+
var _b = __read(useState(false), 2), isOpen = _b[0], onOpenChange = _b[1];
|
|
13
|
+
var close = function () { return onOpenChange(false); };
|
|
14
|
+
return (React.createElement(Popover, { open: isOpen, onOpenChange: onOpenChange, modal: true },
|
|
15
|
+
React.createElement(PopoverTrigger, { asChild: true },
|
|
16
|
+
React.createElement(IconButton, { tooltip: "Add a custom color" },
|
|
17
|
+
React.createElement(PlusCircledIcon, null))),
|
|
18
|
+
React.createElement(PopoverContent, null,
|
|
19
|
+
React.createElement(ColorPickerContent, { initialValue: value, onCancel: function () {
|
|
20
|
+
close();
|
|
21
|
+
}, onSubmit: function (value) {
|
|
22
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(value);
|
|
23
|
+
close();
|
|
24
|
+
} }))));
|
|
25
|
+
};
|
|
26
|
+
var ColorPickerContent = function (_a) {
|
|
27
|
+
var initialValue = _a.initialValue, onCancel = _a.onCancel, onSubmit = _a.onSubmit;
|
|
28
|
+
var defaultColor = isNil(initialValue) || initialValue === "transparent"
|
|
29
|
+
? "#000000"
|
|
30
|
+
: initialValue;
|
|
31
|
+
var _b = __read(useState(defaultColor), 2), value = _b[0], onChange = _b[1];
|
|
32
|
+
return (React.createElement("div", { className: "flex flex-col gap-2" },
|
|
33
|
+
React.createElement(ReactColorPicker, { className: "rnc-colorpicker", color: value, onChange: function (color) { return onChange(color); } }),
|
|
34
|
+
React.createElement(Input, { value: value, onChange: function (e) {
|
|
35
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(e.target.value);
|
|
36
|
+
}, onFocus: function (e) {
|
|
37
|
+
// Select on focus
|
|
38
|
+
e.target.select();
|
|
39
|
+
}, className: "text-xs" }),
|
|
40
|
+
React.createElement("div", { className: "flex gap-2 justify-end" },
|
|
41
|
+
React.createElement(Button, { size: "xs", onClick: function () {
|
|
42
|
+
onCancel === null || onCancel === void 0 ? void 0 : onCancel();
|
|
43
|
+
} }, "Cancel"),
|
|
44
|
+
React.createElement(Button, { size: "xs", variant: "primary", onClick: function () {
|
|
45
|
+
onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(value);
|
|
46
|
+
} }, "OK"))));
|
|
47
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ParsedToken } from "@rowsncolumns/calculator";
|
|
2
|
+
type UseCycleFormulaReferenceProps = {
|
|
3
|
+
onUpdate: (address: string, selectionMode?: string) => void;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Detect the current reference type from a cell address
|
|
7
|
+
* e.g. $A$1 -> absolute, A$1 -> absolute-row, $A1 -> absolute-column, A1 -> relative
|
|
8
|
+
*/
|
|
9
|
+
export declare const detectReferenceType: (address: string) => string;
|
|
10
|
+
/**
|
|
11
|
+
* Get the next reference type in the cycle based on the current address
|
|
12
|
+
*/
|
|
13
|
+
export declare const getNextReference: (currentAddress: string) => string;
|
|
14
|
+
export declare const useCycleFormulaReference: ({ onUpdate, }: UseCycleFormulaReferenceProps) => (token: ParsedToken | undefined) => void;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=use-cycle-reference.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-cycle-reference.d.ts","sourceRoot":"","sources":["../../../hooks/use-cycle-reference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAS5D,KAAK,6BAA6B,GAAG;IACnC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7D,CAAC;AASF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,SAAS,MAAM,KAAG,MAUrD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,gBAAgB,MAAM,KAAG,MAKzD,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,eAEtC,6BAA6B,aAEpB,WAAW,GAAG,SAAS,SA8ClC,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { __read } from "tslib";
|
|
2
|
+
import { tokenVocabulary } from "@rowsncolumns/fast-formula-parser";
|
|
3
|
+
import { addressToCell, cellToAddress, sanitizeSheetName, } from "@rowsncolumns/utils";
|
|
4
|
+
import { useCallback } from "react";
|
|
5
|
+
var referenceCycleOrder = [
|
|
6
|
+
"absolute",
|
|
7
|
+
"absolute-row",
|
|
8
|
+
"absolute-column",
|
|
9
|
+
"relative",
|
|
10
|
+
];
|
|
11
|
+
/**
|
|
12
|
+
* Detect the current reference type from a cell address
|
|
13
|
+
* e.g. $A$1 -> absolute, A$1 -> absolute-row, $A1 -> absolute-column, A1 -> relative
|
|
14
|
+
*/
|
|
15
|
+
export var detectReferenceType = function (address) {
|
|
16
|
+
// Check if column is absolute ($ before the letter)
|
|
17
|
+
var hasAbsoluteColumn = address.startsWith("$");
|
|
18
|
+
// Check if row is absolute ($ before the number)
|
|
19
|
+
var hasAbsoluteRow = /\$\d/.test(address);
|
|
20
|
+
if (hasAbsoluteColumn && hasAbsoluteRow)
|
|
21
|
+
return "absolute";
|
|
22
|
+
if (hasAbsoluteRow)
|
|
23
|
+
return "absolute-row";
|
|
24
|
+
if (hasAbsoluteColumn)
|
|
25
|
+
return "absolute-column";
|
|
26
|
+
return "relative";
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Get the next reference type in the cycle based on the current address
|
|
30
|
+
*/
|
|
31
|
+
export var getNextReference = function (currentAddress) {
|
|
32
|
+
var currentType = detectReferenceType(currentAddress);
|
|
33
|
+
var currentIndex = referenceCycleOrder.indexOf(currentType);
|
|
34
|
+
var nextIndex = (currentIndex + 1) % referenceCycleOrder.length;
|
|
35
|
+
return referenceCycleOrder[nextIndex];
|
|
36
|
+
};
|
|
37
|
+
export var useCycleFormulaReference = function (_a) {
|
|
38
|
+
var onUpdate = _a.onUpdate;
|
|
39
|
+
return useCallback(function (token) {
|
|
40
|
+
// Cell token
|
|
41
|
+
if ((token === null || token === void 0 ? void 0 : token.tokenType.name) === tokenVocabulary.Cell.name && token.image) {
|
|
42
|
+
var sheetName = token.sheetName;
|
|
43
|
+
var sheetNameStr = sheetName
|
|
44
|
+
? sanitizeSheetName(sheetName) + "!"
|
|
45
|
+
: "";
|
|
46
|
+
var _a = __read(token.image.split(":"), 2), from = _a[0], to = _a[1];
|
|
47
|
+
// Detect current reference type and get the next one in cycle
|
|
48
|
+
var reference = getNextReference(from);
|
|
49
|
+
var fromCell = addressToCell(from);
|
|
50
|
+
var toCell = to ? addressToCell(to) : undefined;
|
|
51
|
+
var fromCellAddress = null;
|
|
52
|
+
var toCellAddress = "";
|
|
53
|
+
fromCellAddress = cellToAddress(fromCell, reference === "relative"
|
|
54
|
+
? false
|
|
55
|
+
: reference === "absolute" || reference === "absolute-column", reference === "relative"
|
|
56
|
+
? false
|
|
57
|
+
: reference === "absolute" || reference === "absolute-row");
|
|
58
|
+
if (toCell) {
|
|
59
|
+
toCellAddress = cellToAddress(toCell, reference === "relative"
|
|
60
|
+
? false
|
|
61
|
+
: reference === "absolute" || reference === "absolute-column", reference === "relative"
|
|
62
|
+
? false
|
|
63
|
+
: reference === "absolute" || reference === "absolute-row");
|
|
64
|
+
}
|
|
65
|
+
var address = "".concat(sheetNameStr).concat(fromCellAddress).concat(toCellAddress ? ":" + toCellAddress : "");
|
|
66
|
+
onUpdate(address, "modify");
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
console.log("Token not processed - not a Cell token or missing image");
|
|
70
|
+
}
|
|
71
|
+
}, [onUpdate]);
|
|
72
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CalculatorFunction } from "@rowsncolumns/common-types";
|
|
2
|
+
import { OptionItem } from "../editor-pm/types";
|
|
3
|
+
type InputProps = {
|
|
4
|
+
items: (OptionItem | CalculatorFunction)[];
|
|
5
|
+
formulaMode?: boolean;
|
|
6
|
+
};
|
|
7
|
+
export declare const useDropdownCategories: ({ items, formulaMode }: InputProps) => [OptionItem[], OptionItem[], CalculatorFunction[], OptionItem[], OptionItem[], OptionItem[]];
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=use-dropdown-categories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-dropdown-categories.d.ts","sourceRoot":"","sources":["../../../hooks/use-dropdown-categories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,KAAK,UAAU,GAAG;IAChB,KAAK,EAAE,CAAC,UAAU,GAAG,kBAAkB,CAAC,EAAE,CAAC;IAC3C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,wBAAwB,UAAU,iGAgEvE,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { useMemo } from "react";
|
|
2
|
+
export var useDropdownCategories = function (_a) {
|
|
3
|
+
var items = _a.items, formulaMode = _a.formulaMode;
|
|
4
|
+
return useMemo(function () {
|
|
5
|
+
// Structured references: table, column, specialitem
|
|
6
|
+
var structuredReferences = items.filter(function (item) {
|
|
7
|
+
return item.category === "table" ||
|
|
8
|
+
item.category === "column" ||
|
|
9
|
+
item.category === "specialitem" ||
|
|
10
|
+
item.category === "thisrow";
|
|
11
|
+
});
|
|
12
|
+
// Named ranges
|
|
13
|
+
var namedRanges = items.filter(function (item) { return item.category === "namedrange"; });
|
|
14
|
+
// Property references
|
|
15
|
+
var propertyReferences = items.filter(function (item) { return item.category === "property"; });
|
|
16
|
+
// Parameter references
|
|
17
|
+
var parameterSuggestions = items.filter(function (item) { return item.category === "parameter"; });
|
|
18
|
+
// Function suggestions (only CalculatorFunctions)
|
|
19
|
+
var functionSuggestions = formulaMode
|
|
20
|
+
? items.filter(function (item) {
|
|
21
|
+
return item.title !== undefined &&
|
|
22
|
+
!("category" in item);
|
|
23
|
+
})
|
|
24
|
+
: [];
|
|
25
|
+
// Dropdown options: everything else that is not structured, named, property, or function
|
|
26
|
+
var dropdownOptions = formulaMode
|
|
27
|
+
? []
|
|
28
|
+
: items.filter(function (item) {
|
|
29
|
+
return !structuredReferences.includes(item) &&
|
|
30
|
+
!namedRanges.includes(item) &&
|
|
31
|
+
!propertyReferences.includes(item) &&
|
|
32
|
+
!parameterSuggestions.includes(item) &&
|
|
33
|
+
item.title !== undefined &&
|
|
34
|
+
!("category" in item);
|
|
35
|
+
});
|
|
36
|
+
return [
|
|
37
|
+
structuredReferences,
|
|
38
|
+
dropdownOptions,
|
|
39
|
+
functionSuggestions,
|
|
40
|
+
namedRanges,
|
|
41
|
+
propertyReferences,
|
|
42
|
+
parameterSuggestions,
|
|
43
|
+
];
|
|
44
|
+
}, [items, formulaMode]);
|
|
45
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import { Maybe } from "@rowsncolumns/common-types";
|
|
3
|
+
import { OptionItem } from "../editor-pm/types.js";
|
|
4
|
+
type UseDropdownProps<T> = {
|
|
5
|
+
items: T[] | undefined;
|
|
6
|
+
initialQuery?: string;
|
|
7
|
+
initialOpen: boolean;
|
|
8
|
+
initialHighlightedIndex: number;
|
|
9
|
+
limit?: number;
|
|
10
|
+
showAllIfEmpty?: boolean;
|
|
11
|
+
isNewValue?: boolean;
|
|
12
|
+
itemsWhenEmpty?: T[];
|
|
13
|
+
itemToString(item: T): string;
|
|
14
|
+
onChange(value: T): void;
|
|
15
|
+
/**
|
|
16
|
+
* Marks the item that matches the current (pre-edit) value so the dropdown
|
|
17
|
+
* opens with it highlighted — e.g. a data-validation list highlighting the
|
|
18
|
+
* cell's current entry (Excel behavior). Only applied while the user hasn't
|
|
19
|
+
* typed yet; typing hands the highlight to the filter.
|
|
20
|
+
*/
|
|
21
|
+
isItemSelected?(item: T): boolean;
|
|
22
|
+
};
|
|
23
|
+
export declare const sortByUnderscore: <T extends OptionItem>(a: Maybe<T>, b: Maybe<T>) => 0 | 1 | -1;
|
|
24
|
+
export declare const sanitizeDropdownQuery: (value: string) => string;
|
|
25
|
+
export declare const useDropdown: <T extends OptionItem>({ initialOpen, initialHighlightedIndex, initialQuery, onChange, items, isNewValue, itemToString, limit, showAllIfEmpty, itemsWhenEmpty, isItemSelected, }: UseDropdownProps<T>) => {
|
|
26
|
+
isOpen: boolean;
|
|
27
|
+
highlightedIndex: number;
|
|
28
|
+
onKeyDown: (e: React.KeyboardEvent<HTMLDivElement>) => void;
|
|
29
|
+
onSelect: (value: T) => void;
|
|
30
|
+
onChangeHighlightedIndex: React.Dispatch<React.SetStateAction<number>>;
|
|
31
|
+
items: T[];
|
|
32
|
+
setQuery: (value: string) => void;
|
|
33
|
+
openMenu: () => void;
|
|
34
|
+
closeMenu: () => void;
|
|
35
|
+
query: string;
|
|
36
|
+
};
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=use-dropdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-dropdown.d.ts","sourceRoot":"","sources":["../../../hooks/use-dropdown.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,KAAK,gBAAgB,CAAC,CAAC,IAAI;IACzB,KAAK,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,uBAAuB,EAAE,MAAM,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC;IACrB,YAAY,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACzB;;;;;OAKG;IACH,cAAc,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC;CACnC,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,UAAU,EACnD,GAAG,KAAK,CAAC,CAAC,CAAC,EACX,GAAG,KAAK,CAAC,CAAC,CAAC,eAQZ,CAAC;AAuDF,eAAO,MAAM,qBAAqB,GAAI,OAAO,MAAM,WACtB,CAAC;AAE9B,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,UAAU,EAAE,2JAY/C,gBAAgB,CAAC,CAAC,CAAC;;;mBAgGd,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC;sBAd/B,CAAC;;;sBAoGgC,MAAM;;;;CAoBlD,CAAC"}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import { __read, __spreadArray } from "tslib";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
3
|
+
import { useIsomorphicLayoutEffect } from "./use-isomorphic-layout-effect.ts";
|
|
4
|
+
import { matchSorter } from "match-sorter";
|
|
5
|
+
export var sortByUnderscore = function (a, b) {
|
|
6
|
+
var _a, _b;
|
|
7
|
+
var aUnderscore = (_a = String(a === null || a === void 0 ? void 0 : a.title)) === null || _a === void 0 ? void 0 : _a.startsWith("_");
|
|
8
|
+
var bUnderscore = (_b = String(b === null || b === void 0 ? void 0 : b.title)) === null || _b === void 0 ? void 0 : _b.startsWith("_");
|
|
9
|
+
if (aUnderscore === bUnderscore) {
|
|
10
|
+
return 0;
|
|
11
|
+
}
|
|
12
|
+
return aUnderscore ? 1 : -1;
|
|
13
|
+
};
|
|
14
|
+
// Keep dropdown ordering consistent with our UI grouping so keyboard selection
|
|
15
|
+
// lines up with what the user sees.
|
|
16
|
+
var reorderByPriority = function (list) {
|
|
17
|
+
var buckets = {
|
|
18
|
+
0: [], // structured references
|
|
19
|
+
1: [], // properties
|
|
20
|
+
2: [], // parameters
|
|
21
|
+
3: [], // named ranges
|
|
22
|
+
4: [], // functions
|
|
23
|
+
5: [], // everything else
|
|
24
|
+
};
|
|
25
|
+
list.forEach(function (item) {
|
|
26
|
+
var category = item === null || item === void 0 ? void 0 : item.category;
|
|
27
|
+
if (category === "table" ||
|
|
28
|
+
category === "column" ||
|
|
29
|
+
category === "specialitem" ||
|
|
30
|
+
category === "thisrow") {
|
|
31
|
+
buckets[0].push(item);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (category === "property") {
|
|
35
|
+
buckets[1].push(item);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (category === "parameter") {
|
|
39
|
+
buckets[2].push(item);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (category === "namedrange") {
|
|
43
|
+
buckets[3].push(item);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
// Functions are CalculatorFunction (no category) or explicit category
|
|
47
|
+
if (category === "function" || "syntax" in item) {
|
|
48
|
+
buckets[4].push(item);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
buckets[5].push(item);
|
|
52
|
+
});
|
|
53
|
+
return __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read(buckets[0]), false), __read(buckets[1]), false), __read(buckets[2]), false), __read(buckets[3]), false), __read(buckets[4]), false), __read(buckets[5]), false);
|
|
54
|
+
};
|
|
55
|
+
export var sanitizeDropdownQuery = function (value) {
|
|
56
|
+
return value.replace(/["'`]/g, "");
|
|
57
|
+
};
|
|
58
|
+
export var useDropdown = function (_a) {
|
|
59
|
+
var initialOpen = _a.initialOpen, initialHighlightedIndex = _a.initialHighlightedIndex, initialQuery = _a.initialQuery, onChange = _a.onChange, _b = _a.items, items = _b === void 0 ? [] : _b, isNewValue = _a.isNewValue, itemToString = _a.itemToString, _c = _a.limit, limit = _c === void 0 ? 10 : _c, showAllIfEmpty = _a.showAllIfEmpty, itemsWhenEmpty = _a.itemsWhenEmpty, isItemSelected = _a.isItemSelected;
|
|
60
|
+
var _d = __read(useState(initialOpen), 2), isOpen = _d[0], setIsOpen = _d[1];
|
|
61
|
+
var _e = __read(useState(initialQuery !== null && initialQuery !== void 0 ? initialQuery : ""), 2), query = _e[0], setQuery = _e[1];
|
|
62
|
+
var _f = __read(useState(initialHighlightedIndex), 2), highlightedIndex = _f[0], setHighlightedIndex = _f[1];
|
|
63
|
+
var openMenu = useCallback(function () { return setIsOpen(true); }, []);
|
|
64
|
+
var closeMenu = useCallback(function () { return setIsOpen(false); }, []);
|
|
65
|
+
// Refs
|
|
66
|
+
var isDirty = useRef(isNewValue);
|
|
67
|
+
var initialQueryRef = useRef(undefined);
|
|
68
|
+
var highlightedIndexRef = useRef(undefined);
|
|
69
|
+
var queryRef = useRef(undefined);
|
|
70
|
+
var filteredItemsRef = useRef(undefined);
|
|
71
|
+
useIsomorphicLayoutEffect(function () {
|
|
72
|
+
queryRef.current = query;
|
|
73
|
+
}, [query]);
|
|
74
|
+
useIsomorphicLayoutEffect(function () {
|
|
75
|
+
highlightedIndexRef.current = highlightedIndex;
|
|
76
|
+
}, [highlightedIndex]);
|
|
77
|
+
useIsomorphicLayoutEffect(function () {
|
|
78
|
+
initialQueryRef.current = initialQuery !== null && initialQuery !== void 0 ? initialQuery : "";
|
|
79
|
+
isDirty.current = Boolean(isNewValue);
|
|
80
|
+
// The hosting editor stays mounted (hidden) between editing sessions, so
|
|
81
|
+
// the query must be re-seeded when a new session starts — otherwise the
|
|
82
|
+
// previous session's filter narrows the next dropdown open.
|
|
83
|
+
setQuery(initialQuery !== null && initialQuery !== void 0 ? initialQuery : "");
|
|
84
|
+
}, [initialQuery, isNewValue]);
|
|
85
|
+
// Filtered items
|
|
86
|
+
var filteredItems = useMemo(function () {
|
|
87
|
+
if (!query) {
|
|
88
|
+
if (itemsWhenEmpty === null || itemsWhenEmpty === void 0 ? void 0 : itemsWhenEmpty.length) {
|
|
89
|
+
return reorderByPriority(__spreadArray([], __read(itemsWhenEmpty), false));
|
|
90
|
+
}
|
|
91
|
+
if (!showAllIfEmpty) {
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
return reorderByPriority(__spreadArray([], __read(items), false).sort(sortByUnderscore));
|
|
95
|
+
}
|
|
96
|
+
if (!isDirty.current) {
|
|
97
|
+
return reorderByPriority(__spreadArray([], __read(items), false).sort(sortByUnderscore));
|
|
98
|
+
}
|
|
99
|
+
var cleanedQuery = sanitizeDropdownQuery(query);
|
|
100
|
+
// Break ties (e.g. "SU" matching both SUM and SUBSTITUTE) by preferring
|
|
101
|
+
// an exact-prefix match, then the shorter name, before the default
|
|
102
|
+
// alphabetical order — so the closest function is highlighted first.
|
|
103
|
+
var queryLower = cleanedQuery.toLowerCase();
|
|
104
|
+
var dropdownBaseSort = function (a, b) {
|
|
105
|
+
var _a, _b;
|
|
106
|
+
var aValue = String((_a = a.rankedValue) !== null && _a !== void 0 ? _a : "");
|
|
107
|
+
var bValue = String((_b = b.rankedValue) !== null && _b !== void 0 ? _b : "");
|
|
108
|
+
var aPrefix = aValue.toLowerCase().startsWith(queryLower);
|
|
109
|
+
var bPrefix = bValue.toLowerCase().startsWith(queryLower);
|
|
110
|
+
if (aPrefix !== bPrefix) {
|
|
111
|
+
return aPrefix ? -1 : 1;
|
|
112
|
+
}
|
|
113
|
+
if (aValue.length !== bValue.length) {
|
|
114
|
+
return aValue.length - bValue.length;
|
|
115
|
+
}
|
|
116
|
+
return aValue.localeCompare(bValue);
|
|
117
|
+
};
|
|
118
|
+
var sorted = matchSorter(items, cleanedQuery, {
|
|
119
|
+
keys: ["title"],
|
|
120
|
+
baseSort: dropdownBaseSort,
|
|
121
|
+
});
|
|
122
|
+
return reorderByPriority(sorted).slice(0, limit);
|
|
123
|
+
}, [items, query, limit, itemToString, showAllIfEmpty, itemsWhenEmpty]);
|
|
124
|
+
useIsomorphicLayoutEffect(function () {
|
|
125
|
+
filteredItemsRef.current = filteredItems;
|
|
126
|
+
}, [filteredItems]);
|
|
127
|
+
// User selects a value from the dropdown
|
|
128
|
+
var onSelect = useCallback(function (value) {
|
|
129
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(value);
|
|
130
|
+
// Selecting an item consumes the filter; without this the selected
|
|
131
|
+
// text keeps filtering the list on the next dropdown open (e.g. a
|
|
132
|
+
// data-validation dropdown showing only the previously picked option).
|
|
133
|
+
isDirty.current = false;
|
|
134
|
+
setQuery("");
|
|
135
|
+
setHighlightedIndex(-1);
|
|
136
|
+
}, [onChange]);
|
|
137
|
+
var handleKeyDown = useCallback(function (e) {
|
|
138
|
+
var _a;
|
|
139
|
+
var query = queryRef.current;
|
|
140
|
+
var index = highlightedIndexRef.current;
|
|
141
|
+
var activeItems = (_a = filteredItemsRef.current) !== null && _a !== void 0 ? _a : [];
|
|
142
|
+
var hasValue = activeItems.length || query;
|
|
143
|
+
var len = activeItems.length - 1;
|
|
144
|
+
// If there are no items, lets skip hiding showing menu
|
|
145
|
+
if (!activeItems.length) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
switch (e.key) {
|
|
149
|
+
case "ArrowDown": {
|
|
150
|
+
if (!isOpen && hasValue) {
|
|
151
|
+
openMenu();
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
setHighlightedIndex(function (prev) {
|
|
155
|
+
if (prev === len) {
|
|
156
|
+
return 0;
|
|
157
|
+
}
|
|
158
|
+
return Math.min(prev + 1, len);
|
|
159
|
+
});
|
|
160
|
+
e.preventDefault();
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
case "ArrowUp":
|
|
164
|
+
if (!isOpen && hasValue) {
|
|
165
|
+
openMenu();
|
|
166
|
+
}
|
|
167
|
+
setHighlightedIndex(function (prev) {
|
|
168
|
+
if (prev === 0) {
|
|
169
|
+
return len;
|
|
170
|
+
}
|
|
171
|
+
return Math.max(0, prev - 1);
|
|
172
|
+
});
|
|
173
|
+
e.preventDefault();
|
|
174
|
+
break;
|
|
175
|
+
case "Escape":
|
|
176
|
+
if (isOpen) {
|
|
177
|
+
closeMenu();
|
|
178
|
+
e.preventDefault();
|
|
179
|
+
}
|
|
180
|
+
break;
|
|
181
|
+
case "Tab":
|
|
182
|
+
case "Enter": {
|
|
183
|
+
if (index === -1 || index === undefined) {
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
var selectedItem = activeItems[index];
|
|
187
|
+
onSelect(selectedItem);
|
|
188
|
+
e.preventDefault();
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}, [isOpen, openMenu, onSelect, closeMenu]);
|
|
193
|
+
useEffect(function () {
|
|
194
|
+
if (filteredItems.length) {
|
|
195
|
+
openMenu();
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
closeMenu();
|
|
199
|
+
}
|
|
200
|
+
// If user clears the
|
|
201
|
+
if (!query) {
|
|
202
|
+
setHighlightedIndex(-1);
|
|
203
|
+
}
|
|
204
|
+
}, [query, filteredItems, closeMenu, openMenu]);
|
|
205
|
+
// Pre-select the item matching the current value (e.g. a data-validation
|
|
206
|
+
// dropdown highlighting the cell's current entry — Excel behavior). Runs
|
|
207
|
+
// only while the session is pristine (`isDirty` flips on the first typed
|
|
208
|
+
// change, handing the highlight to the filter). Declared AFTER the reset
|
|
209
|
+
// effect above so the seed wins the mount-time ordering when the query is
|
|
210
|
+
// empty (a blank cell selecting the list's empty/text-prefix entry).
|
|
211
|
+
useEffect(function () {
|
|
212
|
+
if (!isItemSelected || isDirty.current) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
setHighlightedIndex(filteredItems.findIndex(isItemSelected));
|
|
216
|
+
}, [filteredItems, isItemSelected]);
|
|
217
|
+
var handleSetQuery = useCallback(function (value) {
|
|
218
|
+
setQuery(value);
|
|
219
|
+
setHighlightedIndex(0);
|
|
220
|
+
if (value !== initialQueryRef.current) {
|
|
221
|
+
isDirty.current = true;
|
|
222
|
+
}
|
|
223
|
+
}, []);
|
|
224
|
+
return {
|
|
225
|
+
isOpen: isOpen,
|
|
226
|
+
highlightedIndex: highlightedIndex,
|
|
227
|
+
onKeyDown: handleKeyDown,
|
|
228
|
+
onSelect: onSelect,
|
|
229
|
+
onChangeHighlightedIndex: setHighlightedIndex,
|
|
230
|
+
items: filteredItems,
|
|
231
|
+
setQuery: handleSetQuery,
|
|
232
|
+
openMenu: openMenu,
|
|
233
|
+
closeMenu: closeMenu,
|
|
234
|
+
query: query,
|
|
235
|
+
};
|
|
236
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-isomorphic-layout-effect.ts.d.ts","sourceRoot":"","sources":["../../../hooks/use-isomorphic-layout-effect.ts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAmB,MAAM,OAAO,CAAC;AAEnD;;GAEG;AAEH,eAAO,MAAM,yBAAyB,kBAEzB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { canUseDOM } from "@rowsncolumns/utils";
|
|
2
|
+
import { useEffect, useLayoutEffect } from "react";
|
|
3
|
+
/**
|
|
4
|
+
* Prevent warning on SSR by falling back to useEffect when DOM isn't available
|
|
5
|
+
*/
|
|
6
|
+
export var useIsomorphicLayoutEffect = canUseDOM
|
|
7
|
+
? useLayoutEffect
|
|
8
|
+
: useEffect;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
type ConfirmOptions = {
|
|
3
|
+
title?: string;
|
|
4
|
+
description?: React.ReactNode;
|
|
5
|
+
confirmText?: string;
|
|
6
|
+
cancelText?: string;
|
|
7
|
+
container?: HTMLElement | HTMLDivElement | null;
|
|
8
|
+
};
|
|
9
|
+
type PromptOptions = {
|
|
10
|
+
title?: string;
|
|
11
|
+
description?: React.ReactNode;
|
|
12
|
+
confirmText?: string;
|
|
13
|
+
cancelText?: string;
|
|
14
|
+
placeholder?: string;
|
|
15
|
+
inputType?: "text" | "password";
|
|
16
|
+
defaultValue?: string;
|
|
17
|
+
container?: HTMLElement | HTMLDivElement | null;
|
|
18
|
+
};
|
|
19
|
+
type ModalContextValue = {
|
|
20
|
+
confirm: (message: string, options?: ConfirmOptions) => Promise<boolean>;
|
|
21
|
+
prompt: (message: string, options?: PromptOptions) => Promise<string | null>;
|
|
22
|
+
};
|
|
23
|
+
export declare const ModalProvider: ({ children }: {
|
|
24
|
+
children: React.ReactNode;
|
|
25
|
+
}) => React.JSX.Element;
|
|
26
|
+
export declare const useModal: () => ModalContextValue;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=use-modal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-modal.d.ts","sourceRoot":"","sources":["../../../hooks/use-modal.tsx"],"names":[],"mappings":"AACA,OAAO,KAON,MAAM,OAAO,CAAC;AAgBf,KAAK,cAAc,GAAG;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,WAAW,GAAG,cAAc,GAAG,IAAI,CAAC;CACjD,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,WAAW,GAAG,cAAc,GAAG,IAAI,CAAC;CACjD,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC9E,CAAC;AAIF,eAAO,MAAM,aAAa,GAAI,cAAc;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,sBAoKxE,CAAC;AAEF,eAAO,MAAM,QAAQ,QAAO,iBAM3B,CAAC"}
|