@teppen/react-ui 1.8.6 → 1.8.7
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/dist/cjs/src/table/operation/components/keyboard-setting.js +1 -1
- package/dist/cjs/src/table/range/hooks.js +1 -1
- package/dist/cjs/src/table/range/hooks.js.map +1 -1
- package/dist/cjs/src/table/range/provider.js +1 -1
- package/dist/cjs/src/table/range/provider.js.map +1 -1
- package/dist/esm/src/table/operation/components/keyboard-setting.js +1 -1
- package/dist/esm/src/table/range/hooks.js +1 -1
- package/dist/esm/src/table/range/hooks.js.map +1 -1
- package/dist/esm/src/table/range/provider.js +1 -1
- package/dist/esm/src/table/range/provider.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
"use strict";var e=require("react/jsx-runtime"),t=require("react"),n=require("../../edit/provider.js"),r=require("../../sheet/providers.js"),i=require("../../range/provider.js"),o=require("../../copy/provider.js"),
|
|
2
|
+
"use strict";var e=require("react/jsx-runtime"),t=require("react"),n=require("../../edit/provider.js"),r=require("../../sheet/providers.js"),i=require("../../range/provider.js"),o=require("../../copy/provider.js"),d=require("../../id/provider.js"),s=function(e,t){var n,r=document.getElementById(t);if(r){var i=null===(n=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"value"))||void 0===n?void 0:n.set;i&&i.call(r,e);var o=new Event("input",{bubbles:!0});r.dispatchEvent(o)}};exports.KeyboardSetting=function(a){var u=d.useTableIdGenerator(),c=n.useEditContext(),p=i.useRangeContext(),y=o.useCopyActionContext().copy,l=r.useColumnsContext()[p.isSelecting?p.start.colIndex:0];return t.useEffect((function(){var e=function(e){c.isEditing?"Escape"===e.key&&(e.preventDefault(),c.endEditing()):p.isSelecting&&("Enter"===e.key?(e.preventDefault(),p.moveDown()):"Escape"===e.key?(e.preventDefault(),p.reset()):"ArrowRight"===e.key?(e.preventDefault(),e.ctrlKey&&e.shiftKey?p.extendRightEnd():e.ctrlKey?p.moveRightEnd():e.shiftKey?p.extendRight():p.moveRight()):"ArrowLeft"===e.key?(e.preventDefault(),e.ctrlKey&&e.shiftKey?p.extendLeftEnd():e.ctrlKey?p.moveLeftEnd():e.shiftKey?p.extendLeft():p.moveLeft()):"ArrowUp"===e.key?(e.preventDefault(),e.ctrlKey&&e.shiftKey?p.extendTop():e.ctrlKey?p.moveTop():e.shiftKey?p.extendUp():p.moveUp()):"ArrowDown"===e.key?(e.preventDefault(),e.ctrlKey&&e.shiftKey?p.extendBottom():e.ctrlKey?p.moveBottom():e.shiftKey?p.extendDown():p.moveDown()):"F2"===e.key?(e.preventDefault(),c.startEditing()):e.ctrlKey&&"c"===e.key.toLowerCase()?(e.preventDefault(),y({enableDeprecatedCopy:null==a?void 0:a.enableDeprecatedCopy})):e.altKey||e.ctrlKey||!/^[a-zA-Z0-9]$/.test(e.key)?"Backspace"!==e.key&&"Delete"!==e.key||(e.preventDefault(),e.stopPropagation(),c.startEditing(),setTimeout((function(){s("",u.getEditorId())}),10)):(e.preventDefault(),e.stopPropagation(),c.startEditing(),setTimeout((function(){s(e.key,u.getEditorId())}),10)))};return document.addEventListener("keydown",e),function(){document.removeEventListener("keydown",e)}}),[p,c.isEditing]),t.useEffect((function(){c.isEditing&&!l.editable&&c.endEditing()}),[c,l]),e.jsx(e.Fragment,{})};
|
|
3
3
|
//# sourceMappingURL=keyboard-setting.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("../../../node_modules/tslib/tslib.es6.js"),
|
|
1
|
+
"use strict";var e=require("../../../node_modules/tslib/tslib.es6.js"),n=require("react"),t=require("../id/provider.js");function o(e){return{maxColIndex:e.maxColIndex<-1?-1:e.maxColIndex,maxRowIndex:e.maxRowIndex<-1?-1:e.maxRowIndex}}function s(e){var n=e.rowIndex,t=e.colIndex;return n<0?n=0:e.constraint.maxRowIndex<n&&(n=e.constraint.maxRowIndex),t<0?t=0:e.constraint.maxColIndex<t&&(t=e.constraint.maxColIndex),{rowIndex:n,colIndex:t}}function i(e,n){return e.rowIndex===n.rowIndex&&e.colIndex===n.colIndex}var a={UP:{deltaRow:-1,deltaCol:0},DOWN:{deltaRow:1,deltaCol:0},LEFT:{deltaRow:0,deltaCol:-1},RIGHT:{deltaRow:0,deltaCol:1}};function r(e){var n=e.index,t=e.direction,o=e.constraint,i=a[t],r=i.deltaRow,d=i.deltaCol;return s({rowIndex:n.rowIndex+r,colIndex:n.colIndex+d,constraint:o})}var d=function(n,t){switch(t.type){case"setMax":return e.__assign(e.__assign({},n),{constraint:o(t.payload)});case"startSelectRange":var a=s({rowIndex:t.payload.rowIndex,colIndex:t.payload.colIndex,constraint:n.constraint});return n.isSelecting&&i(n.start,a)&&i(n.end,a)&&n.inProgress?n:e.__assign(e.__assign({},n),{isSelecting:!0,inProgress:!0,start:a,end:a});case"moveSelectRange":if(!n.isSelecting||!n.inProgress)return n;var d=s({rowIndex:t.payload.rowIndex,colIndex:t.payload.colIndex,constraint:n.constraint});return i(n.end,d)?n:e.__assign(e.__assign({},n),{end:d});case"endSelectRange":return n.isSelecting&&n.inProgress?e.__assign(e.__assign({},n),{inProgress:!1}):n;case"moveUp":return n.isSelecting?i(a=r({index:n.start,direction:"UP",constraint:n.constraint}),n.start)&&i(a,n.end)?n:e.__assign(e.__assign({},n),{start:a,end:a}):n;case"moveDown":return n.isSelecting?i(a=r({index:n.start,direction:"DOWN",constraint:n.constraint}),n.start)&&i(a,n.end)?n:e.__assign(e.__assign({},n),{start:a,end:a}):n;case"moveLeft":return n.isSelecting?i(a=r({index:n.start,direction:"LEFT",constraint:n.constraint}),n.start)&&i(a,n.end)?n:e.__assign(e.__assign({},n),{start:a,end:a}):n;case"moveRight":return n.isSelecting?i(a=r({index:n.start,direction:"RIGHT",constraint:n.constraint}),n.start)&&i(a,n.end)?n:e.__assign(e.__assign({},n),{start:a,end:a}):n;case"moveTop":return n.isSelecting?i(a=s({rowIndex:0,colIndex:n.start.colIndex,constraint:n.constraint}),n.start)&&i(a,n.end)?n:e.__assign(e.__assign({},n),{start:a,end:a}):n;case"moveBottom":return n.isSelecting?i(a=s({rowIndex:n.constraint.maxRowIndex,colIndex:n.start.colIndex,constraint:n.constraint}),n.start)&&i(a,n.end)?n:e.__assign(e.__assign({},n),{start:a,end:a}):n;case"moveLeftEnd":return n.isSelecting?i(a=s({rowIndex:n.start.rowIndex,colIndex:0,constraint:n.constraint}),n.start)&&i(a,n.end)?n:e.__assign(e.__assign({},n),{start:a,end:a}):n;case"moveRightEnd":return n.isSelecting?i(a=s({rowIndex:n.start.rowIndex,colIndex:n.constraint.maxColIndex,constraint:n.constraint}),n.start)&&i(a,n.end)?n:e.__assign(e.__assign({},n),{start:a,end:a}):n;case"extendUp":return n.isSelecting?i(d=r({index:n.end,direction:"UP",constraint:n.constraint}),n.end)?n:e.__assign(e.__assign({},n),{end:d}):n;case"extendDown":return n.isSelecting?i(d=r({index:n.end,direction:"DOWN",constraint:n.constraint}),n.end)?n:e.__assign(e.__assign({},n),{end:d}):n;case"extendLeft":return n.isSelecting?i(d=r({index:n.end,direction:"LEFT",constraint:n.constraint}),n.end)?n:e.__assign(e.__assign({},n),{end:d}):n;case"extendRight":return n.isSelecting?i(d=r({index:n.end,direction:"RIGHT",constraint:n.constraint}),n.end)?n:e.__assign(e.__assign({},n),{end:d}):n;case"extendTop":return n.isSelecting?i(d=s({rowIndex:0,colIndex:n.end.colIndex,constraint:n.constraint}),n.end)?n:e.__assign(e.__assign({},n),{end:d}):n;case"extendBottom":return n.isSelecting?i(d=s({rowIndex:n.constraint.maxRowIndex,colIndex:n.end.colIndex,constraint:n.constraint}),n.end)?n:e.__assign(e.__assign({},n),{end:d}):n;case"extendLeftEnd":return n.isSelecting?i(d=s({rowIndex:n.end.rowIndex,colIndex:0,constraint:n.constraint}),n.end)?n:e.__assign(e.__assign({},n),{end:d}):n;case"extendRightEnd":return n.isSelecting?i(d=s({rowIndex:n.end.rowIndex,colIndex:n.constraint.maxColIndex,constraint:n.constraint}),n.end)?n:e.__assign(e.__assign({},n),{end:d}):n;case"reset":return{constraint:n.constraint,isSelecting:!1};case"setRange":return e.__assign(e.__assign({},n),{isSelecting:!0,inProgress:!1,start:t.payload.start,end:t.payload.end})}};exports.rangeReducer=d,exports.useRangeReducer=function(){var s=t.useTableIdGenerator(),i=n.useReducer(d,{constraint:o({maxColIndex:0,maxRowIndex:0}),isSelecting:!1}),a=i[0],r=i[1],c=n.useMemo((function(){return{setMax:function(e){r({type:"setMax",payload:e})},startSelectRange:function(e){r({type:"startSelectRange",payload:e})},moveSelectRange:function(e){r({type:"moveSelectRange",payload:e})},endSelectRange:function(){r({type:"endSelectRange"})},moveUp:function(){r({type:"moveUp"})},moveDown:function(){r({type:"moveDown"})},moveLeft:function(){r({type:"moveLeft"})},moveRight:function(){r({type:"moveRight"})},moveTop:function(){r({type:"moveTop"})},moveBottom:function(){r({type:"moveBottom"})},moveRightEnd:function(){r({type:"moveRightEnd"})},moveLeftEnd:function(){r({type:"moveLeftEnd"})},extendUp:function(){r({type:"extendUp"})},extendDown:function(){r({type:"extendDown"})},extendLeft:function(){r({type:"extendLeft"})},extendRight:function(){r({type:"extendRight"})},extendTop:function(){r({type:"extendTop"})},extendBottom:function(){r({type:"extendBottom"})},extendRightEnd:function(){r({type:"extendRightEnd"})},extendLeftEnd:function(){r({type:"extendLeftEnd"})},reset:function(){r({type:"reset"})},setRange:function(e){r({type:"setRange",payload:e})}}}),[]);return n.useEffect((function(){var e=function(e){var n=document.getElementById(s.getTableId()),t=e.target;t instanceof Node&&(null==n?void 0:n.contains(t))||r({type:"reset"})};return document.addEventListener("mousedown",e),function(){document.removeEventListener("mousedown",e)}}),[]),{state:n.useMemo((function(){if(!a.isSelecting)return a;var n=document.getElementById(s.getTableCellId({rowIndex:a.start.rowIndex,columnIndex:a.start.colIndex})),t=document.getElementById(s.getTableCellId({rowIndex:a.end.rowIndex,columnIndex:a.end.colIndex})),o=document.getElementById(s.getTableId());if(!n||!t||!o)return r({type:"reset"}),{isSelecting:!1};var i=n.getBoundingClientRect(),d=t.getBoundingClientRect(),c=o.getBoundingClientRect(),l=c.top-o.scrollTop,g=c.left-o.scrollLeft,x={top:i.top-l,left:i.left-g,width:i.width,height:i.height},u={top:d.top-l,left:d.left-g,width:d.width,height:d.height};return{isSelecting:!0,start:e.__assign(e.__assign({},a.start),{xStart:x.left,xEnd:x.left+x.width,yStart:x.top,yEnd:x.top+x.height}),end:e.__assign(e.__assign({},a.end),{xStart:u.left,xEnd:u.left+u.width,yStart:u.top,yEnd:u.top+u.height}),rangeBox:{top:Math.min(x.top,u.top),left:Math.min(x.left,u.left),width:Math.abs(x.left-u.left)+(x.left<=u.left?u.width:x.width),height:Math.abs(x.top-u.top)+(x.top<=u.top?u.height:x.height)}}}),[a]),actions:c}};
|
|
2
2
|
//# sourceMappingURL=hooks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sources":["../../../../../src/table/range/hooks.ts"],"sourcesContent":["import { useEffect, useMemo, useReducer } from \"react\";\nimport {\n IIndex,\n TRangeReducer,\n IRangeConstraint,\n TReturnRangeReducer,\n} from \"./type\";\nimport { useTableIdGenerator } from \"../id\";\n\nfunction newRangeConstraint(props: {\n maxColIndex: number;\n maxRowIndex: number;\n}): IRangeConstraint {\n return {\n maxColIndex: props.maxColIndex < -1 ? -1 : props.maxColIndex,\n maxRowIndex: props.maxRowIndex < -1 ? -1 : props.maxRowIndex,\n };\n}\n\nfunction newIndex(props: {\n rowIndex: number;\n colIndex: number;\n constraint: IRangeConstraint;\n}): IIndex {\n let rowIndex = props.rowIndex;\n let colIndex = props.colIndex;\n\n if (rowIndex < 0) {\n rowIndex = 0;\n } else if (props.constraint.maxRowIndex < rowIndex) {\n rowIndex = props.constraint.maxRowIndex;\n }\n\n if (colIndex < 0) {\n colIndex = 0;\n } else if (props.constraint.maxColIndex < colIndex) {\n colIndex = props.constraint.maxColIndex;\n }\n\n return { rowIndex, colIndex };\n}\n\nfunction equalIndex(a: IIndex, b: IIndex): boolean {\n return a.rowIndex === b.rowIndex && a.colIndex === b.colIndex;\n}\n\nconst MOVE_ACTION = {\n UP: { deltaRow: -1, deltaCol: 0 },\n DOWN: { deltaRow: 1, deltaCol: 0 },\n LEFT: { deltaRow: 0, deltaCol: -1 },\n RIGHT: { deltaRow: 0, deltaCol: 1 },\n} as const;\n\ntype TMoveAction = keyof typeof MOVE_ACTION;\n\nfunction moveIndex({\n index,\n direction,\n constraint,\n}: {\n index: IIndex;\n direction: TMoveAction;\n constraint: IRangeConstraint;\n}): IIndex {\n const { deltaRow, deltaCol } = MOVE_ACTION[direction];\n\n const newRow = index.rowIndex + deltaRow;\n const newCol = index.colIndex + deltaCol;\n\n return newIndex({\n rowIndex: newRow,\n colIndex: newCol,\n constraint,\n });\n}\n\nexport const rangeReducer: TRangeReducer = (state, action) => {\n switch (action.type) {\n /**\n * Actionが\"setMax\"の場合の説明:\n * - Actionのtypeが\"setMax\"の場合、選択範囲の最大値を設定します。\n * - payloadのmaxRowIndexとmaxColIndexが範囲外の場合、OutOfRangeErrorをスローします。\n * - 範囲内の場合、constraintを新しい範囲制約に設定します。\n */\n case \"setMax\":\n return {\n ...state,\n constraint: newRangeConstraint(action.payload),\n };\n\n /**\n * Actionが\"start\"の場合の説明:\n * - Actionのtypeが\"start\"の場合、選択範囲の開始位置を設定します。\n * - payloadのrowIndexとcolIndexが範囲外の場合、OutOfRangeErrorをスローします。\n * - 範囲内の場合、isSelectingをtrueに設定し、startとendの位置をpayloadの位置に設定します。\n */\n case \"startSelectRange\": {\n const startIndex = newIndex({\n rowIndex: action.payload.rowIndex,\n colIndex: action.payload.colIndex,\n constraint: state.constraint,\n });\n\n if (\n state.isSelecting &&\n equalIndex(state.start, startIndex) &&\n equalIndex(state.end, startIndex) &&\n state.inProgress\n ) {\n return state;\n }\n\n return {\n ...state,\n isSelecting: true,\n inProgress: true,\n start: startIndex,\n end: startIndex,\n };\n }\n\n case \"moveSelectRange\": {\n if (!state.isSelecting || !state.inProgress) {\n return state;\n }\n\n const endIndex = newIndex({\n rowIndex: action.payload.rowIndex,\n colIndex: action.payload.colIndex,\n constraint: state.constraint,\n });\n\n if (equalIndex(state.end, endIndex)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"end\"の場合の説明:\n * - Actionのtypeが\"end\"の場合、選択範囲の終了位置を設定します。\n * - payloadのrowIndexとcolIndexが範囲外の場合、OutOfRangeErrorをスローします。\n * - 範囲内の場合、endの位置をpayloadの位置に設定します。\n * - この場合、isSelectingはtrueのままです。\n */\n case \"endSelectRange\": {\n if (!state.isSelecting || !state.inProgress) {\n return state;\n }\n\n return {\n ...state,\n inProgress: false,\n };\n }\n\n /**\n * Actionが\"moveUp\"の場合の説明:\n * - Actionのtypeが\"moveUp\"の場合、選択範囲を上に移動します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ上に移動します。\n */\n case \"moveUp\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const startIndex = moveIndex({\n index: state.start,\n direction: \"UP\",\n constraint: state.constraint,\n });\n\n if (\n equalIndex(startIndex, state.start) &&\n equalIndex(startIndex, state.end)\n ) {\n return state;\n }\n\n return {\n ...state,\n start: startIndex,\n end: startIndex,\n };\n }\n\n /**\n * Actionが\"moveDown\"の場合の説明:\n * - Actionのtypeが\"moveDown\"の場合、選択範囲を下に移動します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ下に移動します。\n */\n case \"moveDown\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const startIndex = moveIndex({\n index: state.start,\n direction: \"DOWN\",\n constraint: state.constraint,\n });\n\n if (\n equalIndex(startIndex, state.start) &&\n equalIndex(startIndex, state.end)\n ) {\n return state;\n }\n\n return {\n ...state,\n start: startIndex,\n end: startIndex,\n };\n }\n\n /**\n * Actionが\"moveLeft\"の場合の説明:\n * - Actionのtypeが\"moveLeft\"の場合、選択範囲を左に移動します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ左に移動します。\n */\n case \"moveLeft\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const startIndex = moveIndex({\n index: state.start,\n direction: \"LEFT\",\n constraint: state.constraint,\n });\n\n if (\n equalIndex(startIndex, state.start) &&\n equalIndex(startIndex, state.end)\n ) {\n return state;\n }\n\n return {\n ...state,\n start: startIndex,\n end: startIndex,\n };\n }\n\n /**\n * Actionが\"moveRight\"の場合の説明:\n * - Actionのtypeが\"moveRight\"の場合、選択範囲を右に移動します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ右に移動します。\n */\n case \"moveRight\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const startIndex = moveIndex({\n index: state.start,\n direction: \"RIGHT\",\n constraint: state.constraint,\n });\n\n if (\n equalIndex(startIndex, state.start) &&\n equalIndex(startIndex, state.end)\n ) {\n return state;\n }\n\n return {\n ...state,\n start: startIndex,\n end: startIndex,\n };\n }\n\n /**\n * Actionが\"extendUp\"の場合の説明:\n * - Actionのtypeが\"extendUp\"の場合、選択範囲を上に拡張します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ上に拡張します。\n */\n case \"extendUp\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const endIndex = moveIndex({\n index: state.end,\n direction: \"UP\",\n constraint: state.constraint,\n });\n\n if (equalIndex(endIndex, state.end)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"extendDown\"の場合の説明:\n * - Actionのtypeが\"extendDown\"の場合、選択範囲を下に拡張します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ下に拡張します。\n */\n case \"extendDown\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const endIndex = moveIndex({\n index: state.end,\n direction: \"DOWN\",\n constraint: state.constraint,\n });\n\n if (equalIndex(endIndex, state.end)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"extendLeft\"の場合の説明:\n * - Actionのtypeが\"extendLeft\"の場合、選択範囲を左に拡張します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ左に拡張します。\n */\n case \"extendLeft\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const endIndex = moveIndex({\n index: state.end,\n direction: \"LEFT\",\n constraint: state.constraint,\n });\n\n if (equalIndex(endIndex, state.end)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"extendRight\"の場合の説明:\n * - Actionのtypeが\"extendRight\"の場合、選択範囲を右に拡張します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ右に拡張します。\n */\n case \"extendRight\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const endIndex = moveIndex({\n index: state.end,\n direction: \"RIGHT\",\n constraint: state.constraint,\n });\n\n if (equalIndex(endIndex, state.end)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"reset\"の場合の説明:\n * - Actionのtypeが\"reset\"の場合、選択範囲をリセットします。\n * - isSelectingをfalseに設定します。\n */\n case \"reset\":\n return {\n constraint: state.constraint,\n isSelecting: false,\n };\n\n /**\n * Actionが\"setRange\"の場合の説明:\n * - Actionのtypeが\"setRange\"の場合、選択範囲を設定します。\n * - payloadのstartとendの位置を設定します。\n */\n case \"setRange\":\n return {\n ...state,\n isSelecting: true,\n inProgress: false,\n start: action.payload.start,\n end: action.payload.end,\n };\n }\n};\n\nexport function useRangeReducer(): TReturnRangeReducer {\n const IdGenerator = useTableIdGenerator();\n const [state, dispatch] = useReducer(rangeReducer, {\n constraint: newRangeConstraint({ maxColIndex: 0, maxRowIndex: 0 }),\n isSelecting: false,\n });\n\n const actions = useMemo(\n () => ({\n setMax: (payload: { maxRowIndex: number; maxColIndex: number }) => {\n dispatch({ type: \"setMax\", payload });\n },\n startSelectRange: (payload: { rowIndex: number; colIndex: number }) => {\n dispatch({ type: \"startSelectRange\", payload });\n },\n moveSelectRange: (payload: { rowIndex: number; colIndex: number }) => {\n dispatch({ type: \"moveSelectRange\", payload });\n },\n endSelectRange: () => {\n dispatch({ type: \"endSelectRange\" });\n },\n moveUp: () => {\n dispatch({ type: \"moveUp\" });\n },\n moveDown: () => {\n dispatch({ type: \"moveDown\" });\n },\n moveLeft: () => {\n dispatch({ type: \"moveLeft\" });\n },\n moveRight: () => {\n dispatch({ type: \"moveRight\" });\n },\n extendUp: () => {\n dispatch({ type: \"extendUp\" });\n },\n extendDown: () => {\n dispatch({ type: \"extendDown\" });\n },\n extendLeft: () => {\n dispatch({ type: \"extendLeft\" });\n },\n extendRight: () => {\n dispatch({ type: \"extendRight\" });\n },\n reset: () => {\n dispatch({ type: \"reset\" });\n },\n setRange: (payload: { start: IIndex; end: IIndex }) => {\n dispatch({ type: \"setRange\", payload });\n },\n }),\n []\n );\n\n useEffect(() => {\n const onClickOutOfTable = (e: MouseEvent) => {\n const element = document.getElementById(IdGenerator.getTableId());\n const ele = e.target;\n if (ele instanceof Node && element?.contains(ele)) return;\n dispatch({ type: \"reset\" });\n };\n\n document.addEventListener(\"mousedown\", onClickOutOfTable);\n\n return () => {\n document.removeEventListener(\"mousedown\", onClickOutOfTable);\n };\n }, []);\n\n const exState = useMemo<TReturnRangeReducer[\"state\"]>(() => {\n if (!state.isSelecting) {\n return state;\n }\n\n const startElement = document.getElementById(\n IdGenerator.getTableCellId({\n rowIndex: state.start.rowIndex,\n columnIndex: state.start.colIndex,\n })\n );\n const endElement = document.getElementById(\n IdGenerator.getTableCellId({\n rowIndex: state.end.rowIndex,\n columnIndex: state.end.colIndex,\n })\n );\n const tableElement = document.getElementById(IdGenerator.getTableId());\n\n if (!startElement || !endElement || !tableElement) {\n dispatch({ type: \"reset\" });\n return { isSelecting: false };\n }\n\n const startRect = startElement.getBoundingClientRect();\n const endRect = endElement.getBoundingClientRect();\n const rectTable = tableElement.getBoundingClientRect();\n\n const adjustSize = {\n y: rectTable.top - tableElement.scrollTop,\n x: rectTable.left - tableElement.scrollLeft,\n };\n\n const startDivProps = {\n top: startRect.top - adjustSize.y,\n left: startRect.left - adjustSize.x,\n width: startRect.width,\n height: startRect.height,\n };\n\n const endDivProps = {\n top: endRect.top - adjustSize.y,\n left: endRect.left - adjustSize.x,\n width: endRect.width,\n height: endRect.height,\n };\n\n return {\n isSelecting: true,\n start: {\n ...state.start,\n xStart: startDivProps.left,\n xEnd: startDivProps.left + startDivProps.width,\n yStart: startDivProps.top,\n yEnd: startDivProps.top + startDivProps.height,\n },\n end: {\n ...state.end,\n xStart: endDivProps.left,\n xEnd: endDivProps.left + endDivProps.width,\n yStart: endDivProps.top,\n yEnd: endDivProps.top + endDivProps.height,\n },\n rangeBox: {\n top: Math.min(startDivProps.top, endDivProps.top),\n left: Math.min(startDivProps.left, endDivProps.left),\n width:\n Math.abs(startDivProps.left - endDivProps.left) +\n (startDivProps.left <= endDivProps.left\n ? endDivProps.width\n : startDivProps.width),\n height:\n Math.abs(startDivProps.top - endDivProps.top) +\n (startDivProps.top <= endDivProps.top\n ? endDivProps.height\n : startDivProps.height),\n },\n };\n }, [state]);\n\n return {\n state: exState,\n actions,\n };\n}\n"],"names":["newRangeConstraint","props","maxColIndex","maxRowIndex","newIndex","rowIndex","colIndex","constraint","equalIndex","a","b","MOVE_ACTION","UP","deltaRow","deltaCol","DOWN","LEFT","RIGHT","moveIndex","_a","index","direction","_b","rangeReducer","state","action","type","__assign","payload","startIndex","isSelecting","start","end","inProgress","endIndex","IdGenerator","useTableIdGenerator","useReducer","dispatch","actions","useMemo","setMax","startSelectRange","moveSelectRange","endSelectRange","moveUp","moveDown","moveLeft","moveRight","extendUp","extendDown","extendLeft","extendRight","reset","setRange","useEffect","onClickOutOfTable","e","element","document","getElementById","getTableId","ele","target","Node","contains","addEventListener","removeEventListener","startElement","getTableCellId","columnIndex","endElement","tableElement","startRect","getBoundingClientRect","endRect","rectTable","adjustSize","top","scrollTop","left","scrollLeft","startDivProps","width","height","endDivProps","xStart","xEnd","yStart","yEnd","rangeBox","Math","min","abs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hooks.js","sources":["../../../../../src/table/range/hooks.ts"],"sourcesContent":["import { useEffect, useMemo, useReducer } from \"react\";\nimport {\n IIndex,\n TRangeReducer,\n IRangeConstraint,\n TReturnRangeReducer,\n} from \"./type\";\nimport { useTableIdGenerator } from \"../id\";\n\nfunction newRangeConstraint(props: {\n maxColIndex: number;\n maxRowIndex: number;\n}): IRangeConstraint {\n return {\n maxColIndex: props.maxColIndex < -1 ? -1 : props.maxColIndex,\n maxRowIndex: props.maxRowIndex < -1 ? -1 : props.maxRowIndex,\n };\n}\n\nfunction newIndex(props: {\n rowIndex: number;\n colIndex: number;\n constraint: IRangeConstraint;\n}): IIndex {\n let rowIndex = props.rowIndex;\n let colIndex = props.colIndex;\n\n if (rowIndex < 0) {\n rowIndex = 0;\n } else if (props.constraint.maxRowIndex < rowIndex) {\n rowIndex = props.constraint.maxRowIndex;\n }\n\n if (colIndex < 0) {\n colIndex = 0;\n } else if (props.constraint.maxColIndex < colIndex) {\n colIndex = props.constraint.maxColIndex;\n }\n\n return { rowIndex, colIndex };\n}\n\nfunction equalIndex(a: IIndex, b: IIndex): boolean {\n return a.rowIndex === b.rowIndex && a.colIndex === b.colIndex;\n}\n\nconst MOVE_ACTION = {\n UP: { deltaRow: -1, deltaCol: 0 },\n DOWN: { deltaRow: 1, deltaCol: 0 },\n LEFT: { deltaRow: 0, deltaCol: -1 },\n RIGHT: { deltaRow: 0, deltaCol: 1 },\n} as const;\n\ntype TMoveAction = keyof typeof MOVE_ACTION;\n\nfunction moveIndex({\n index,\n direction,\n constraint,\n}: {\n index: IIndex;\n direction: TMoveAction;\n constraint: IRangeConstraint;\n}): IIndex {\n const { deltaRow, deltaCol } = MOVE_ACTION[direction];\n\n const newRow = index.rowIndex + deltaRow;\n const newCol = index.colIndex + deltaCol;\n\n return newIndex({\n rowIndex: newRow,\n colIndex: newCol,\n constraint,\n });\n}\n\nexport const rangeReducer: TRangeReducer = (state, action) => {\n switch (action.type) {\n /**\n * Actionが\"setMax\"の場合の説明:\n * - Actionのtypeが\"setMax\"の場合、選択範囲の最大値を設定します。\n * - payloadのmaxRowIndexとmaxColIndexが範囲外の場合、OutOfRangeErrorをスローします。\n * - 範囲内の場合、constraintを新しい範囲制約に設定します。\n */\n case \"setMax\":\n return {\n ...state,\n constraint: newRangeConstraint(action.payload),\n };\n\n /**\n * Actionが\"start\"の場合の説明:\n * - Actionのtypeが\"start\"の場合、選択範囲の開始位置を設定します。\n * - payloadのrowIndexとcolIndexが範囲外の場合、OutOfRangeErrorをスローします。\n * - 範囲内の場合、isSelectingをtrueに設定し、startとendの位置をpayloadの位置に設定します。\n */\n case \"startSelectRange\": {\n const startIndex = newIndex({\n rowIndex: action.payload.rowIndex,\n colIndex: action.payload.colIndex,\n constraint: state.constraint,\n });\n\n if (\n state.isSelecting &&\n equalIndex(state.start, startIndex) &&\n equalIndex(state.end, startIndex) &&\n state.inProgress\n ) {\n return state;\n }\n\n return {\n ...state,\n isSelecting: true,\n inProgress: true,\n start: startIndex,\n end: startIndex,\n };\n }\n\n case \"moveSelectRange\": {\n if (!state.isSelecting || !state.inProgress) {\n return state;\n }\n\n const endIndex = newIndex({\n rowIndex: action.payload.rowIndex,\n colIndex: action.payload.colIndex,\n constraint: state.constraint,\n });\n\n if (equalIndex(state.end, endIndex)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"end\"の場合の説明:\n * - Actionのtypeが\"end\"の場合、選択範囲の終了位置を設定します。\n * - payloadのrowIndexとcolIndexが範囲外の場合、OutOfRangeErrorをスローします。\n * - 範囲内の場合、endの位置をpayloadの位置に設定します。\n * - この場合、isSelectingはtrueのままです。\n */\n case \"endSelectRange\": {\n if (!state.isSelecting || !state.inProgress) {\n return state;\n }\n\n return {\n ...state,\n inProgress: false,\n };\n }\n\n /**\n * Actionが\"moveUp\"の場合の説明:\n * - Actionのtypeが\"moveUp\"の場合、選択範囲を上に移動します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ上に移動します。\n */\n case \"moveUp\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const startIndex = moveIndex({\n index: state.start,\n direction: \"UP\",\n constraint: state.constraint,\n });\n\n if (\n equalIndex(startIndex, state.start) &&\n equalIndex(startIndex, state.end)\n ) {\n return state;\n }\n\n return {\n ...state,\n start: startIndex,\n end: startIndex,\n };\n }\n\n /**\n * Actionが\"moveDown\"の場合の説明:\n * - Actionのtypeが\"moveDown\"の場合、選択範囲を下に移動します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ下に移動します。\n */\n case \"moveDown\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const startIndex = moveIndex({\n index: state.start,\n direction: \"DOWN\",\n constraint: state.constraint,\n });\n\n if (\n equalIndex(startIndex, state.start) &&\n equalIndex(startIndex, state.end)\n ) {\n return state;\n }\n\n return {\n ...state,\n start: startIndex,\n end: startIndex,\n };\n }\n\n /**\n * Actionが\"moveLeft\"の場合の説明:\n * - Actionのtypeが\"moveLeft\"の場合、選択範囲を左に移動します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ左に移動します。\n */\n case \"moveLeft\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const startIndex = moveIndex({\n index: state.start,\n direction: \"LEFT\",\n constraint: state.constraint,\n });\n\n if (\n equalIndex(startIndex, state.start) &&\n equalIndex(startIndex, state.end)\n ) {\n return state;\n }\n\n return {\n ...state,\n start: startIndex,\n end: startIndex,\n };\n }\n\n /**\n * Actionが\"moveRight\"の場合の説明:\n * - Actionのtypeが\"moveRight\"の場合、選択範囲を右に移動します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ右に移動します。\n */\n case \"moveRight\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const startIndex = moveIndex({\n index: state.start,\n direction: \"RIGHT\",\n constraint: state.constraint,\n });\n\n if (\n equalIndex(startIndex, state.start) &&\n equalIndex(startIndex, state.end)\n ) {\n return state;\n }\n\n return {\n ...state,\n start: startIndex,\n end: startIndex,\n };\n }\n\n /**\n * Actionが\"moveTop\"の場合の説明:\n * - Actionのtypeが\"moveTop\"の場合、選択範囲を一番上に移動します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、startとendの位置を一番上に設定します。\n */\n case \"moveTop\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const startIndex = newIndex({\n rowIndex: 0,\n colIndex: state.start.colIndex,\n constraint: state.constraint,\n });\n\n if (\n equalIndex(startIndex, state.start) &&\n equalIndex(startIndex, state.end)\n ) {\n return state;\n }\n\n return {\n ...state,\n start: startIndex,\n end: startIndex,\n };\n }\n\n /**\n * Actionが\"moveBottom\"の場合の説明:\n * - Actionのtypeが\"moveBottom\"の場合、選択範囲を一番下に移動します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、startとendの位置を一番下に設定します。\n */\n case \"moveBottom\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const startIndex = newIndex({\n rowIndex: state.constraint.maxRowIndex,\n colIndex: state.start.colIndex,\n constraint: state.constraint,\n });\n\n if (\n equalIndex(startIndex, state.start) &&\n equalIndex(startIndex, state.end)\n ) {\n return state;\n }\n\n return {\n ...state,\n start: startIndex,\n end: startIndex,\n };\n }\n\n /**\n * Actionが\"moveRightEnd\"の場合の説明:\n * - Actionのtypeが\"moveRightEnd\"の場合、選択範囲を一番右に移動します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、startとendの位置を一番右に設定します。\n */\n case \"moveLeftEnd\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const startIndex = newIndex({\n rowIndex: state.start.rowIndex,\n colIndex: 0,\n constraint: state.constraint,\n });\n\n if (\n equalIndex(startIndex, state.start) &&\n equalIndex(startIndex, state.end)\n ) {\n return state;\n }\n\n return {\n ...state,\n start: startIndex,\n end: startIndex,\n };\n }\n\n /**\n * Actionが\"moveRightEnd\"の場合の説明:\n * - Actionのtypeが\"moveRightEnd\"の場合、選択範囲を一番右に移動します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、startとendの位置を一番右に設定します。\n */\n case \"moveRightEnd\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const startIndex = newIndex({\n rowIndex: state.start.rowIndex,\n colIndex: state.constraint.maxColIndex,\n constraint: state.constraint,\n });\n\n if (\n equalIndex(startIndex, state.start) &&\n equalIndex(startIndex, state.end)\n ) {\n return state;\n }\n\n return {\n ...state,\n start: startIndex,\n end: startIndex,\n };\n }\n\n /**\n * Actionが\"extendUp\"の場合の説明:\n * - Actionのtypeが\"extendUp\"の場合、選択範囲を上に拡張します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ上に拡張します。\n */\n case \"extendUp\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const endIndex = moveIndex({\n index: state.end,\n direction: \"UP\",\n constraint: state.constraint,\n });\n\n if (equalIndex(endIndex, state.end)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"extendDown\"の場合の説明:\n * - Actionのtypeが\"extendDown\"の場合、選択範囲を下に拡張します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ下に拡張します。\n */\n case \"extendDown\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const endIndex = moveIndex({\n index: state.end,\n direction: \"DOWN\",\n constraint: state.constraint,\n });\n\n if (equalIndex(endIndex, state.end)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"extendLeft\"の場合の説明:\n * - Actionのtypeが\"extendLeft\"の場合、選択範囲を左に拡張します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ左に拡張します。\n */\n case \"extendLeft\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const endIndex = moveIndex({\n index: state.end,\n direction: \"LEFT\",\n constraint: state.constraint,\n });\n\n if (equalIndex(endIndex, state.end)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"extendRight\"の場合の説明:\n * - Actionのtypeが\"extendRight\"の場合、選択範囲を右に拡張します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ右に拡張します。\n */\n case \"extendRight\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const endIndex = moveIndex({\n index: state.end,\n direction: \"RIGHT\",\n constraint: state.constraint,\n });\n\n if (equalIndex(endIndex, state.end)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"extendTop\"の場合の説明:\n * - Actionのtypeが\"extendTop\"の場合、選択範囲を一番上に拡張します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を一番上に拡張します。\n */\n case \"extendTop\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const endIndex = newIndex({\n rowIndex: 0,\n colIndex: state.end.colIndex,\n constraint: state.constraint,\n });\n\n if (equalIndex(endIndex, state.end)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"extendBottom\"の場合の説明:\n * - Actionのtypeが\"extendBottom\"の場合、選択範囲を一番下に拡張します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を一番下に拡張します。\n */\n case \"extendBottom\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const endIndex = newIndex({\n rowIndex: state.constraint.maxRowIndex,\n colIndex: state.end.colIndex,\n constraint: state.constraint,\n });\n\n if (equalIndex(endIndex, state.end)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"extendRightEnd\"の場合の説明:\n * - Actionのtypeが\"extendRightEnd\"の場合、選択範囲を一番右に拡張します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を一番右に拡張します。\n */\n case \"extendLeftEnd\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const endIndex = newIndex({\n rowIndex: state.end.rowIndex,\n colIndex: 0,\n constraint: state.constraint,\n });\n\n if (equalIndex(endIndex, state.end)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"extendRightEnd\"の場合の説明:\n * - Actionのtypeが\"extendRightEnd\"の場合、選択範囲を一番右に拡張します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を一番右に拡張します。\n */\n case \"extendRightEnd\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const endIndex = newIndex({\n rowIndex: state.end.rowIndex,\n colIndex: state.constraint.maxColIndex,\n constraint: state.constraint,\n });\n\n if (equalIndex(endIndex, state.end)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"reset\"の場合の説明:\n * - Actionのtypeが\"reset\"の場合、選択範囲をリセットします。\n * - isSelectingをfalseに設定します。\n */\n case \"reset\":\n return {\n constraint: state.constraint,\n isSelecting: false,\n };\n\n /**\n * Actionが\"setRange\"の場合の説明:\n * - Actionのtypeが\"setRange\"の場合、選択範囲を設定します。\n * - payloadのstartとendの位置を設定します。\n */\n case \"setRange\":\n return {\n ...state,\n isSelecting: true,\n inProgress: false,\n start: action.payload.start,\n end: action.payload.end,\n };\n }\n};\n\nexport function useRangeReducer(): TReturnRangeReducer {\n const IdGenerator = useTableIdGenerator();\n const [state, dispatch] = useReducer(rangeReducer, {\n constraint: newRangeConstraint({ maxColIndex: 0, maxRowIndex: 0 }),\n isSelecting: false,\n });\n\n const actions = useMemo(\n () => ({\n setMax: (payload: { maxRowIndex: number; maxColIndex: number }) => {\n dispatch({ type: \"setMax\", payload });\n },\n startSelectRange: (payload: { rowIndex: number; colIndex: number }) => {\n dispatch({ type: \"startSelectRange\", payload });\n },\n moveSelectRange: (payload: { rowIndex: number; colIndex: number }) => {\n dispatch({ type: \"moveSelectRange\", payload });\n },\n endSelectRange: () => {\n dispatch({ type: \"endSelectRange\" });\n },\n moveUp: () => {\n dispatch({ type: \"moveUp\" });\n },\n moveDown: () => {\n dispatch({ type: \"moveDown\" });\n },\n moveLeft: () => {\n dispatch({ type: \"moveLeft\" });\n },\n moveRight: () => {\n dispatch({ type: \"moveRight\" });\n },\n moveTop: () => {\n dispatch({ type: \"moveTop\" });\n },\n moveBottom: () => {\n dispatch({ type: \"moveBottom\" });\n },\n moveRightEnd: () => {\n dispatch({ type: \"moveRightEnd\" });\n },\n moveLeftEnd: () => {\n dispatch({ type: \"moveLeftEnd\" });\n },\n extendUp: () => {\n dispatch({ type: \"extendUp\" });\n },\n extendDown: () => {\n dispatch({ type: \"extendDown\" });\n },\n extendLeft: () => {\n dispatch({ type: \"extendLeft\" });\n },\n extendRight: () => {\n dispatch({ type: \"extendRight\" });\n },\n extendTop: () => {\n dispatch({ type: \"extendTop\" });\n },\n extendBottom: () => {\n dispatch({ type: \"extendBottom\" });\n },\n extendRightEnd: () => {\n dispatch({ type: \"extendRightEnd\" });\n },\n extendLeftEnd: () => {\n dispatch({ type: \"extendLeftEnd\" });\n },\n reset: () => {\n dispatch({ type: \"reset\" });\n },\n setRange: (payload: { start: IIndex; end: IIndex }) => {\n dispatch({ type: \"setRange\", payload });\n },\n }),\n []\n );\n\n useEffect(() => {\n const onClickOutOfTable = (e: MouseEvent) => {\n const element = document.getElementById(IdGenerator.getTableId());\n const ele = e.target;\n if (ele instanceof Node && element?.contains(ele)) return;\n dispatch({ type: \"reset\" });\n };\n\n document.addEventListener(\"mousedown\", onClickOutOfTable);\n\n return () => {\n document.removeEventListener(\"mousedown\", onClickOutOfTable);\n };\n }, []);\n\n const exState = useMemo<TReturnRangeReducer[\"state\"]>(() => {\n if (!state.isSelecting) {\n return state;\n }\n\n const startElement = document.getElementById(\n IdGenerator.getTableCellId({\n rowIndex: state.start.rowIndex,\n columnIndex: state.start.colIndex,\n })\n );\n const endElement = document.getElementById(\n IdGenerator.getTableCellId({\n rowIndex: state.end.rowIndex,\n columnIndex: state.end.colIndex,\n })\n );\n const tableElement = document.getElementById(IdGenerator.getTableId());\n\n if (!startElement || !endElement || !tableElement) {\n dispatch({ type: \"reset\" });\n return { isSelecting: false };\n }\n\n const startRect = startElement.getBoundingClientRect();\n const endRect = endElement.getBoundingClientRect();\n const rectTable = tableElement.getBoundingClientRect();\n\n const adjustSize = {\n y: rectTable.top - tableElement.scrollTop,\n x: rectTable.left - tableElement.scrollLeft,\n };\n\n const startDivProps = {\n top: startRect.top - adjustSize.y,\n left: startRect.left - adjustSize.x,\n width: startRect.width,\n height: startRect.height,\n };\n\n const endDivProps = {\n top: endRect.top - adjustSize.y,\n left: endRect.left - adjustSize.x,\n width: endRect.width,\n height: endRect.height,\n };\n\n return {\n isSelecting: true,\n start: {\n ...state.start,\n xStart: startDivProps.left,\n xEnd: startDivProps.left + startDivProps.width,\n yStart: startDivProps.top,\n yEnd: startDivProps.top + startDivProps.height,\n },\n end: {\n ...state.end,\n xStart: endDivProps.left,\n xEnd: endDivProps.left + endDivProps.width,\n yStart: endDivProps.top,\n yEnd: endDivProps.top + endDivProps.height,\n },\n rangeBox: {\n top: Math.min(startDivProps.top, endDivProps.top),\n left: Math.min(startDivProps.left, endDivProps.left),\n width:\n Math.abs(startDivProps.left - endDivProps.left) +\n (startDivProps.left <= endDivProps.left\n ? endDivProps.width\n : startDivProps.width),\n height:\n Math.abs(startDivProps.top - endDivProps.top) +\n (startDivProps.top <= endDivProps.top\n ? endDivProps.height\n : startDivProps.height),\n },\n };\n }, [state]);\n\n return {\n state: exState,\n actions,\n };\n}\n"],"names":["newRangeConstraint","props","maxColIndex","maxRowIndex","newIndex","rowIndex","colIndex","constraint","equalIndex","a","b","MOVE_ACTION","UP","deltaRow","deltaCol","DOWN","LEFT","RIGHT","moveIndex","_a","index","direction","_b","rangeReducer","state","action","type","__assign","payload","startIndex","isSelecting","start","end","inProgress","endIndex","IdGenerator","useTableIdGenerator","useReducer","dispatch","actions","useMemo","setMax","startSelectRange","moveSelectRange","endSelectRange","moveUp","moveDown","moveLeft","moveRight","moveTop","moveBottom","moveRightEnd","moveLeftEnd","extendUp","extendDown","extendLeft","extendRight","extendTop","extendBottom","extendRightEnd","extendLeftEnd","reset","setRange","useEffect","onClickOutOfTable","e","element","document","getElementById","getTableId","ele","target","Node","contains","addEventListener","removeEventListener","startElement","getTableCellId","columnIndex","endElement","tableElement","startRect","getBoundingClientRect","endRect","rectTable","adjustSize","top","scrollTop","left","scrollLeft","startDivProps","width","height","endDivProps","xStart","xEnd","yStart","yEnd","rangeBox","Math","min","abs"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("../../../node_modules/tslib/tslib.es6.js"),n=require("react/jsx-runtime"),t=require("react"),o=require("../lib/errors.js"),r=require("./hooks.js"),i=require("../table-property/provider.js"),
|
|
1
|
+
"use strict";var e=require("../../../node_modules/tslib/tslib.es6.js"),n=require("react/jsx-runtime"),t=require("react"),o=require("../lib/errors.js"),r=require("./hooks.js"),i=require("../table-property/provider.js"),m=require("../id/provider.js"),s=t.createContext({isSelecting:!1}),u=t.createContext({setMax:o.NoImplementeFunction,startSelectRange:o.NoImplementeFunction,moveSelectRange:o.NoImplementeFunction,endSelectRange:o.NoImplementeFunction,moveUp:o.NoImplementeFunction,moveDown:o.NoImplementeFunction,moveLeft:o.NoImplementeFunction,moveRight:o.NoImplementeFunction,moveTop:o.NoImplementeFunction,moveBottom:o.NoImplementeFunction,moveRightEnd:o.NoImplementeFunction,moveLeftEnd:o.NoImplementeFunction,extendUp:o.NoImplementeFunction,extendDown:o.NoImplementeFunction,extendLeft:o.NoImplementeFunction,extendRight:o.NoImplementeFunction,extendTop:o.NoImplementeFunction,extendBottom:o.NoImplementeFunction,extendRightEnd:o.NoImplementeFunction,extendLeftEnd:o.NoImplementeFunction,reset:o.NoImplementeFunction,setRange:o.NoImplementeFunction});function l(){return t.useContext(s)}function c(){return t.useContext(u)}function a(){var e=c().setMax,o=i.useTablePropertyStateContext(),r=o.maxDisplayRowCount,m=o.maxDisplayColCount;return t.useEffect((function(){e({maxRowIndex:r-1,maxColIndex:m-1})}),[r,m]),n.jsx(n.Fragment,{})}exports.RangeProvider=function(e){var t=e.children,o=r.useRangeReducer(),i=o.state,m=o.actions;return n.jsx(s.Provider,{value:i,children:n.jsxs(u.Provider,{value:m,children:[n.jsx(a,{}),t]})})},exports.TestRange=function(e){var o=m.useTableIdGenerator(),r=l();if(t.useEffect((function(){if(r.isSelecting){var e=document.getElementById(o.getTableCellId({rowIndex:r.end.rowIndex,columnIndex:r.end.colIndex}));e&&(e.scrollIntoView({behavior:"instant",block:"nearest",inline:"nearest"}),e.focus())}}),[r]),!r.isSelecting)return n.jsx(n.Fragment,{});var i=r.rangeBox,s=r.start,u=r.end;return s.xEnd<u.xEnd?u.xEnd:s.xEnd,s.yEnd<u.yEnd?u.yEnd:s.yEnd,n.jsx(n.Fragment,{children:n.jsx("div",{className:"absolute border border-gray-500 bg-gray-500 bg-opacity-10 ".concat(e.isCopied?"border-dashed":"border-solid"),style:{top:i.top,left:i.left,width:i.width,height:i.height,pointerEvents:"none"}})})},exports.useRangeActionContext=c,exports.useRangeContext=function(){return e.__assign(e.__assign({},l()),c())},exports.useRangeStateContext=l;
|
|
2
2
|
//# sourceMappingURL=provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sources":["../../../../../src/table/range/provider.tsx"],"sourcesContent":["import { createContext, useContext, useEffect } from \"react\";\nimport { TRangeActionContext, TRangeStateContext } from \"./type\";\nimport { NoImplementeFunction } from \"../lib/errors\";\nimport { useRangeReducer } from \"./hooks\";\nimport { useTablePropertyStateContext } from \"../table-property/provider\";\nimport { useTableIdGenerator } from \"../id\";\n\nconst RangeStateContext = createContext<TRangeStateContext>({\n isSelecting: false,\n});\n\nconst RangeActionContext = createContext<TRangeActionContext>({\n setMax: NoImplementeFunction,\n startSelectRange: NoImplementeFunction,\n moveSelectRange: NoImplementeFunction,\n endSelectRange: NoImplementeFunction,\n moveUp: NoImplementeFunction,\n moveDown: NoImplementeFunction,\n moveLeft: NoImplementeFunction,\n moveRight: NoImplementeFunction,\n extendUp: NoImplementeFunction,\n extendDown: NoImplementeFunction,\n extendLeft: NoImplementeFunction,\n extendRight: NoImplementeFunction,\n reset: NoImplementeFunction,\n setRange: NoImplementeFunction,\n});\n\nexport function useRangeStateContext() {\n return useContext(RangeStateContext);\n}\n\nexport function useRangeActionContext() {\n return useContext(RangeActionContext);\n}\n\nexport function useRangeContext() {\n return { ...useRangeStateContext(), ...useRangeActionContext() };\n}\n\nfunction EffectSetMax() {\n const { setMax } = useRangeActionContext();\n const { maxDisplayRowCount, maxDisplayColCount } =\n useTablePropertyStateContext();\n\n useEffect(() => {\n setMax({\n maxRowIndex: maxDisplayRowCount - 1,\n maxColIndex: maxDisplayColCount - 1,\n });\n }, [maxDisplayRowCount, maxDisplayColCount]);\n\n return <></>;\n}\n\nexport function TestRange(props: { isCopied?: boolean }) {\n const IdGenerator = useTableIdGenerator();\n const state = useRangeStateContext();\n\n useEffect(() => {\n if (state.isSelecting) {\n const endElement = document.getElementById(\n IdGenerator.getTableCellId({\n rowIndex: state.end.rowIndex,\n columnIndex: state.end.colIndex,\n })\n );\n\n if (endElement) {\n endElement.scrollIntoView({\n behavior: \"instant\",\n block: \"nearest\",\n inline: \"nearest\",\n });\n endElement.focus();\n }\n }\n }, [state]);\n\n if (!state.isSelecting) {\n return <></>;\n }\n\n const { rangeBox, start, end } = state;\n\n const clickboxPoint = {\n x: start.xEnd < end.xEnd ? end.xEnd : start.xEnd,\n y: start.yEnd < end.yEnd ? end.yEnd : start.yEnd,\n };\n\n return (\n <>\n <div\n className={`absolute border border-gray-500 bg-gray-500 bg-opacity-10 ${\n props.isCopied ? \"border-dashed\" : \"border-solid\"\n }`}\n style={{\n top: rangeBox.top,\n left: rangeBox.left,\n width: rangeBox.width,\n height: rangeBox.height,\n pointerEvents: \"none\",\n }}\n ></div>\n {/* <div\n className=\"absolute bg-gray-700\"\n style={{\n top: clickboxPoint.y - 5,\n left: clickboxPoint.x - 5,\n width: 10,\n height: 10,\n pointerEvents: \"none\",\n }}\n /> */}\n </>\n );\n}\n\nexport function RangeProvider({\n children,\n}: {\n children: JSX.Element | JSX.Element[];\n}) {\n const { state, actions } = useRangeReducer();\n\n return (\n <RangeStateContext.Provider value={state}>\n <RangeActionContext.Provider value={actions}>\n <EffectSetMax />\n {children}\n </RangeActionContext.Provider>\n </RangeStateContext.Provider>\n );\n}\n"],"names":["RangeStateContext","createContext","isSelecting","RangeActionContext","setMax","NoImplementeFunction","startSelectRange","moveSelectRange","endSelectRange","moveUp","moveDown","moveLeft","moveRight","extendUp","extendDown","extendLeft","extendRight","reset","setRange","useRangeStateContext","useContext","useRangeActionContext","EffectSetMax","_a","useTablePropertyStateContext","maxDisplayRowCount","maxDisplayColCount","useEffect","maxRowIndex","maxColIndex","_jsx","children","_b","useRangeReducer","state","actions","jsx","Provider","value","_jsxs","props","IdGenerator","useTableIdGenerator","endElement","document","getElementById","getTableCellId","rowIndex","end","columnIndex","colIndex","scrollIntoView","behavior","block","inline","focus","rangeBox","start","xEnd","yEnd","className","concat","isCopied","style","top","left","width","height","pointerEvents","__assign"],"mappings":"yPAOMA,EAAoBC,EAAAA,cAAkC,CAC1DC,aAAa,IAGTC,EAAqBF,EAAAA,cAAmC,CAC5DG,OAAQC,EAAoBA,qBAC5BC,iBAAkBD,EAAoBA,qBACtCE,gBAAiBF,EAAoBA,qBACrCG,eAAgBH,EAAoBA,qBACpCI,OAAQJ,EAAoBA,qBAC5BK,SAAUL,EAAoBA,qBAC9BM,SAAUN,EAAoBA,qBAC9BO,UAAWP,EAAoBA,qBAC/BQ,
|
|
1
|
+
{"version":3,"file":"provider.js","sources":["../../../../../src/table/range/provider.tsx"],"sourcesContent":["import { createContext, useContext, useEffect } from \"react\";\nimport { TRangeActionContext, TRangeStateContext } from \"./type\";\nimport { NoImplementeFunction } from \"../lib/errors\";\nimport { useRangeReducer } from \"./hooks\";\nimport { useTablePropertyStateContext } from \"../table-property/provider\";\nimport { useTableIdGenerator } from \"../id\";\n\nconst RangeStateContext = createContext<TRangeStateContext>({\n isSelecting: false,\n});\n\nconst RangeActionContext = createContext<TRangeActionContext>({\n setMax: NoImplementeFunction,\n startSelectRange: NoImplementeFunction,\n moveSelectRange: NoImplementeFunction,\n endSelectRange: NoImplementeFunction,\n moveUp: NoImplementeFunction,\n moveDown: NoImplementeFunction,\n moveLeft: NoImplementeFunction,\n moveRight: NoImplementeFunction,\n moveTop: NoImplementeFunction,\n moveBottom: NoImplementeFunction,\n moveRightEnd: NoImplementeFunction,\n moveLeftEnd: NoImplementeFunction,\n extendUp: NoImplementeFunction,\n extendDown: NoImplementeFunction,\n extendLeft: NoImplementeFunction,\n extendRight: NoImplementeFunction,\n extendTop: NoImplementeFunction,\n extendBottom: NoImplementeFunction,\n extendRightEnd: NoImplementeFunction,\n extendLeftEnd: NoImplementeFunction,\n reset: NoImplementeFunction,\n setRange: NoImplementeFunction,\n});\n\nexport function useRangeStateContext() {\n return useContext(RangeStateContext);\n}\n\nexport function useRangeActionContext() {\n return useContext(RangeActionContext);\n}\n\nexport function useRangeContext() {\n return { ...useRangeStateContext(), ...useRangeActionContext() };\n}\n\nfunction EffectSetMax() {\n const { setMax } = useRangeActionContext();\n const { maxDisplayRowCount, maxDisplayColCount } =\n useTablePropertyStateContext();\n\n useEffect(() => {\n setMax({\n maxRowIndex: maxDisplayRowCount - 1,\n maxColIndex: maxDisplayColCount - 1,\n });\n }, [maxDisplayRowCount, maxDisplayColCount]);\n\n return <></>;\n}\n\nexport function TestRange(props: { isCopied?: boolean }) {\n const IdGenerator = useTableIdGenerator();\n const state = useRangeStateContext();\n\n useEffect(() => {\n if (state.isSelecting) {\n const endElement = document.getElementById(\n IdGenerator.getTableCellId({\n rowIndex: state.end.rowIndex,\n columnIndex: state.end.colIndex,\n })\n );\n\n if (endElement) {\n endElement.scrollIntoView({\n behavior: \"instant\",\n block: \"nearest\",\n inline: \"nearest\",\n });\n endElement.focus();\n }\n }\n }, [state]);\n\n if (!state.isSelecting) {\n return <></>;\n }\n\n const { rangeBox, start, end } = state;\n\n const clickboxPoint = {\n x: start.xEnd < end.xEnd ? end.xEnd : start.xEnd,\n y: start.yEnd < end.yEnd ? end.yEnd : start.yEnd,\n };\n\n return (\n <>\n <div\n className={`absolute border border-gray-500 bg-gray-500 bg-opacity-10 ${\n props.isCopied ? \"border-dashed\" : \"border-solid\"\n }`}\n style={{\n top: rangeBox.top,\n left: rangeBox.left,\n width: rangeBox.width,\n height: rangeBox.height,\n pointerEvents: \"none\",\n }}\n ></div>\n {/* <div\n className=\"absolute bg-gray-700\"\n style={{\n top: clickboxPoint.y - 5,\n left: clickboxPoint.x - 5,\n width: 10,\n height: 10,\n pointerEvents: \"none\",\n }}\n /> */}\n </>\n );\n}\n\nexport function RangeProvider({\n children,\n}: {\n children: JSX.Element | JSX.Element[];\n}) {\n const { state, actions } = useRangeReducer();\n\n return (\n <RangeStateContext.Provider value={state}>\n <RangeActionContext.Provider value={actions}>\n <EffectSetMax />\n {children}\n </RangeActionContext.Provider>\n </RangeStateContext.Provider>\n );\n}\n"],"names":["RangeStateContext","createContext","isSelecting","RangeActionContext","setMax","NoImplementeFunction","startSelectRange","moveSelectRange","endSelectRange","moveUp","moveDown","moveLeft","moveRight","moveTop","moveBottom","moveRightEnd","moveLeftEnd","extendUp","extendDown","extendLeft","extendRight","extendTop","extendBottom","extendRightEnd","extendLeftEnd","reset","setRange","useRangeStateContext","useContext","useRangeActionContext","EffectSetMax","_a","useTablePropertyStateContext","maxDisplayRowCount","maxDisplayColCount","useEffect","maxRowIndex","maxColIndex","_jsx","children","_b","useRangeReducer","state","actions","jsx","Provider","value","_jsxs","props","IdGenerator","useTableIdGenerator","endElement","document","getElementById","getTableCellId","rowIndex","end","columnIndex","colIndex","scrollIntoView","behavior","block","inline","focus","rangeBox","start","xEnd","yEnd","className","concat","isCopied","style","top","left","width","height","pointerEvents","__assign"],"mappings":"yPAOMA,EAAoBC,EAAAA,cAAkC,CAC1DC,aAAa,IAGTC,EAAqBF,EAAAA,cAAmC,CAC5DG,OAAQC,EAAoBA,qBAC5BC,iBAAkBD,EAAoBA,qBACtCE,gBAAiBF,EAAoBA,qBACrCG,eAAgBH,EAAoBA,qBACpCI,OAAQJ,EAAoBA,qBAC5BK,SAAUL,EAAoBA,qBAC9BM,SAAUN,EAAoBA,qBAC9BO,UAAWP,EAAoBA,qBAC/BQ,QAASR,EAAoBA,qBAC7BS,WAAYT,EAAoBA,qBAChCU,aAAcV,EAAoBA,qBAClCW,YAAaX,EAAoBA,qBACjCY,SAAUZ,EAAoBA,qBAC9Ba,WAAYb,EAAoBA,qBAChCc,WAAYd,EAAoBA,qBAChCe,YAAaf,EAAoBA,qBACjCgB,UAAWhB,EAAoBA,qBAC/BiB,aAAcjB,EAAoBA,qBAClCkB,eAAgBlB,EAAoBA,qBACpCmB,cAAenB,EAAoBA,qBACnCoB,MAAOpB,EAAoBA,qBAC3BqB,SAAUrB,EAAoBA,gCAGhBsB,IACd,OAAOC,EAAAA,WAAW5B,EACpB,UAEgB6B,IACd,OAAOD,EAAAA,WAAWzB,EACpB,CAMA,SAAS2B,IACC,IAAA1B,EAAWyB,WACbE,EACJC,EAA4BA,+BADtBC,EAAkBF,EAAAE,mBAAEC,EAAkBH,EAAAG,mBAU9C,OAPAC,EAAAA,WAAU,WACR/B,EAAO,CACLgC,YAAaH,EAAqB,EAClCI,YAAaH,EAAqB,GAEtC,GAAG,CAACD,EAAoBC,IAEjBI,oBACT,uBAiEM,SAAwBP,GAC5B,IAAAQ,EAAQR,EAAAQ,SAIFC,EAAqBC,EAAeA,kBAAlCC,EAAKF,EAAAE,MAAEC,EAAOH,EAAAG,QAEtB,OACEL,EAACM,IAAA5C,EAAkB6C,SAAS,CAAAC,MAAOJ,EACjCH,SAAAQ,OAAC5C,EAAmB0C,SAAQ,CAACC,MAAOH,EAAOJ,SAAA,CACzCD,MAACR,EAAe,CAAA,GACfS,MAIT,oBA9EM,SAAoBS,GACxB,IAAMC,EAAcC,EAAAA,sBACdR,EAAQf,IAsBd,GApBAQ,EAAAA,WAAU,WACR,GAAIO,EAAMxC,YAAa,CACrB,IAAMiD,EAAaC,SAASC,eAC1BJ,EAAYK,eAAe,CACzBC,SAAUb,EAAMc,IAAID,SACpBE,YAAaf,EAAMc,IAAIE,YAIvBP,IACFA,EAAWQ,eAAe,CACxBC,SAAU,UACVC,MAAO,UACPC,OAAQ,YAEVX,EAAWY,QAEd,CACH,GAAG,CAACrB,KAECA,EAAMxC,YACT,OAAOoC,qBAGD,IAAA0B,EAAyBtB,EAAKsB,SAApBC,EAAevB,EAAKuB,MAAbT,EAAQd,MAOjC,OAJKuB,EAAMC,KAAOV,EAAIU,KAAOV,EAAIU,KAAOD,EAAMC,KACzCD,EAAME,KAAOX,EAAIW,KAAOX,EAAIW,KAAOF,EAAME,KAI5C7B,EAAAA,yBACEA,EACEM,IAAA,MAAA,CAAAwB,UAAW,6DACTC,OAAArB,EAAMsB,SAAW,gBAAkB,gBAErCC,MAAO,CACLC,IAAKR,EAASQ,IACdC,KAAMT,EAASS,KACfC,MAAOV,EAASU,MAChBC,OAAQX,EAASW,OACjBC,cAAe,WAezB,qEA/EE,OAAAC,EAAAA,SAAAA,EAAAA,SAAA,CAAA,EAAYlD,KAA2BE,IACzC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import{jsx as e,Fragment as t}from"react/jsx-runtime";import{useEffect as r}from"react";import{useEditContext as n}from"../../edit/provider.js";import{useColumnsContext as
|
|
2
|
+
import{jsx as e,Fragment as t}from"react/jsx-runtime";import{useEffect as r}from"react";import{useEditContext as n}from"../../edit/provider.js";import{useColumnsContext as o}from"../../sheet/providers.js";import{useRangeContext as i}from"../../range/provider.js";import{useCopyActionContext as d}from"../../copy/provider.js";import{useTableIdGenerator as p}from"../../id/provider.js";var a=function(e,t){var r,n=document.getElementById(t);if(n){var o=null===(r=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"value"))||void 0===r?void 0:r.set;o&&o.call(n,e);var i=new Event("input",{bubbles:!0});n.dispatchEvent(i)}};function s(s){var y=p(),f=n(),v=i(),c=d().copy,l=o()[v.isSelecting?v.start.colIndex:0];return r((function(){var e=function(e){f.isEditing?"Escape"===e.key&&(e.preventDefault(),f.endEditing()):v.isSelecting&&("Enter"===e.key?(e.preventDefault(),v.moveDown()):"Escape"===e.key?(e.preventDefault(),v.reset()):"ArrowRight"===e.key?(e.preventDefault(),e.ctrlKey&&e.shiftKey?v.extendRightEnd():e.ctrlKey?v.moveRightEnd():e.shiftKey?v.extendRight():v.moveRight()):"ArrowLeft"===e.key?(e.preventDefault(),e.ctrlKey&&e.shiftKey?v.extendLeftEnd():e.ctrlKey?v.moveLeftEnd():e.shiftKey?v.extendLeft():v.moveLeft()):"ArrowUp"===e.key?(e.preventDefault(),e.ctrlKey&&e.shiftKey?v.extendTop():e.ctrlKey?v.moveTop():e.shiftKey?v.extendUp():v.moveUp()):"ArrowDown"===e.key?(e.preventDefault(),e.ctrlKey&&e.shiftKey?v.extendBottom():e.ctrlKey?v.moveBottom():e.shiftKey?v.extendDown():v.moveDown()):"F2"===e.key?(e.preventDefault(),f.startEditing()):e.ctrlKey&&"c"===e.key.toLowerCase()?(e.preventDefault(),c({enableDeprecatedCopy:null==s?void 0:s.enableDeprecatedCopy})):e.altKey||e.ctrlKey||!/^[a-zA-Z0-9]$/.test(e.key)?"Backspace"!==e.key&&"Delete"!==e.key||(e.preventDefault(),e.stopPropagation(),f.startEditing(),setTimeout((function(){a("",y.getEditorId())}),10)):(e.preventDefault(),e.stopPropagation(),f.startEditing(),setTimeout((function(){a(e.key,y.getEditorId())}),10)))};return document.addEventListener("keydown",e),function(){document.removeEventListener("keydown",e)}}),[v,f.isEditing]),r((function(){f.isEditing&&!l.editable&&f.endEditing()}),[f,l]),e(t,{})}export{s as KeyboardSetting};
|
|
3
3
|
//# sourceMappingURL=keyboard-setting.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{__assign as e}from"../../../node_modules/tslib/tslib.es6.js";import{useReducer as t,useMemo as n,useEffect as o}from"react";import{useTableIdGenerator as
|
|
1
|
+
import{__assign as e}from"../../../node_modules/tslib/tslib.es6.js";import{useReducer as t,useMemo as n,useEffect as o}from"react";import{useTableIdGenerator as d}from"../id/provider.js";function r(e){return{maxColIndex:e.maxColIndex<-1?-1:e.maxColIndex,maxRowIndex:e.maxRowIndex<-1?-1:e.maxRowIndex}}function i(e){var t=e.rowIndex,n=e.colIndex;return t<0?t=0:e.constraint.maxRowIndex<t&&(t=e.constraint.maxRowIndex),n<0?n=0:e.constraint.maxColIndex<n&&(n=e.constraint.maxColIndex),{rowIndex:t,colIndex:n}}function a(e,t){return e.rowIndex===t.rowIndex&&e.colIndex===t.colIndex}var c={UP:{deltaRow:-1,deltaCol:0},DOWN:{deltaRow:1,deltaCol:0},LEFT:{deltaRow:0,deltaCol:-1},RIGHT:{deltaRow:0,deltaCol:1}};function s(e){var t=e.index,n=e.direction,o=e.constraint,d=c[n],r=d.deltaRow,a=d.deltaCol;return i({rowIndex:t.rowIndex+r,colIndex:t.colIndex+a,constraint:o})}var l=function(t,n){switch(n.type){case"setMax":return e(e({},t),{constraint:r(n.payload)});case"startSelectRange":var o=i({rowIndex:n.payload.rowIndex,colIndex:n.payload.colIndex,constraint:t.constraint});return t.isSelecting&&a(t.start,o)&&a(t.end,o)&&t.inProgress?t:e(e({},t),{isSelecting:!0,inProgress:!0,start:o,end:o});case"moveSelectRange":if(!t.isSelecting||!t.inProgress)return t;var d=i({rowIndex:n.payload.rowIndex,colIndex:n.payload.colIndex,constraint:t.constraint});return a(t.end,d)?t:e(e({},t),{end:d});case"endSelectRange":return t.isSelecting&&t.inProgress?e(e({},t),{inProgress:!1}):t;case"moveUp":return t.isSelecting?a(o=s({index:t.start,direction:"UP",constraint:t.constraint}),t.start)&&a(o,t.end)?t:e(e({},t),{start:o,end:o}):t;case"moveDown":return t.isSelecting?a(o=s({index:t.start,direction:"DOWN",constraint:t.constraint}),t.start)&&a(o,t.end)?t:e(e({},t),{start:o,end:o}):t;case"moveLeft":return t.isSelecting?a(o=s({index:t.start,direction:"LEFT",constraint:t.constraint}),t.start)&&a(o,t.end)?t:e(e({},t),{start:o,end:o}):t;case"moveRight":return t.isSelecting?a(o=s({index:t.start,direction:"RIGHT",constraint:t.constraint}),t.start)&&a(o,t.end)?t:e(e({},t),{start:o,end:o}):t;case"moveTop":return t.isSelecting?a(o=i({rowIndex:0,colIndex:t.start.colIndex,constraint:t.constraint}),t.start)&&a(o,t.end)?t:e(e({},t),{start:o,end:o}):t;case"moveBottom":return t.isSelecting?a(o=i({rowIndex:t.constraint.maxRowIndex,colIndex:t.start.colIndex,constraint:t.constraint}),t.start)&&a(o,t.end)?t:e(e({},t),{start:o,end:o}):t;case"moveLeftEnd":return t.isSelecting?a(o=i({rowIndex:t.start.rowIndex,colIndex:0,constraint:t.constraint}),t.start)&&a(o,t.end)?t:e(e({},t),{start:o,end:o}):t;case"moveRightEnd":return t.isSelecting?a(o=i({rowIndex:t.start.rowIndex,colIndex:t.constraint.maxColIndex,constraint:t.constraint}),t.start)&&a(o,t.end)?t:e(e({},t),{start:o,end:o}):t;case"extendUp":return t.isSelecting?a(d=s({index:t.end,direction:"UP",constraint:t.constraint}),t.end)?t:e(e({},t),{end:d}):t;case"extendDown":return t.isSelecting?a(d=s({index:t.end,direction:"DOWN",constraint:t.constraint}),t.end)?t:e(e({},t),{end:d}):t;case"extendLeft":return t.isSelecting?a(d=s({index:t.end,direction:"LEFT",constraint:t.constraint}),t.end)?t:e(e({},t),{end:d}):t;case"extendRight":return t.isSelecting?a(d=s({index:t.end,direction:"RIGHT",constraint:t.constraint}),t.end)?t:e(e({},t),{end:d}):t;case"extendTop":return t.isSelecting?a(d=i({rowIndex:0,colIndex:t.end.colIndex,constraint:t.constraint}),t.end)?t:e(e({},t),{end:d}):t;case"extendBottom":return t.isSelecting?a(d=i({rowIndex:t.constraint.maxRowIndex,colIndex:t.end.colIndex,constraint:t.constraint}),t.end)?t:e(e({},t),{end:d}):t;case"extendLeftEnd":return t.isSelecting?a(d=i({rowIndex:t.end.rowIndex,colIndex:0,constraint:t.constraint}),t.end)?t:e(e({},t),{end:d}):t;case"extendRightEnd":return t.isSelecting?a(d=i({rowIndex:t.end.rowIndex,colIndex:t.constraint.maxColIndex,constraint:t.constraint}),t.end)?t:e(e({},t),{end:d}):t;case"reset":return{constraint:t.constraint,isSelecting:!1};case"setRange":return e(e({},t),{isSelecting:!0,inProgress:!1,start:n.payload.start,end:n.payload.end})}};function x(){var i=d(),a=t(l,{constraint:r({maxColIndex:0,maxRowIndex:0}),isSelecting:!1}),c=a[0],s=a[1],x=n((function(){return{setMax:function(e){s({type:"setMax",payload:e})},startSelectRange:function(e){s({type:"startSelectRange",payload:e})},moveSelectRange:function(e){s({type:"moveSelectRange",payload:e})},endSelectRange:function(){s({type:"endSelectRange"})},moveUp:function(){s({type:"moveUp"})},moveDown:function(){s({type:"moveDown"})},moveLeft:function(){s({type:"moveLeft"})},moveRight:function(){s({type:"moveRight"})},moveTop:function(){s({type:"moveTop"})},moveBottom:function(){s({type:"moveBottom"})},moveRightEnd:function(){s({type:"moveRightEnd"})},moveLeftEnd:function(){s({type:"moveLeftEnd"})},extendUp:function(){s({type:"extendUp"})},extendDown:function(){s({type:"extendDown"})},extendLeft:function(){s({type:"extendLeft"})},extendRight:function(){s({type:"extendRight"})},extendTop:function(){s({type:"extendTop"})},extendBottom:function(){s({type:"extendBottom"})},extendRightEnd:function(){s({type:"extendRightEnd"})},extendLeftEnd:function(){s({type:"extendLeftEnd"})},reset:function(){s({type:"reset"})},setRange:function(e){s({type:"setRange",payload:e})}}}),[]);return o((function(){var e=function(e){var t=document.getElementById(i.getTableId()),n=e.target;n instanceof Node&&(null==t?void 0:t.contains(n))||s({type:"reset"})};return document.addEventListener("mousedown",e),function(){document.removeEventListener("mousedown",e)}}),[]),{state:n((function(){if(!c.isSelecting)return c;var t=document.getElementById(i.getTableCellId({rowIndex:c.start.rowIndex,columnIndex:c.start.colIndex})),n=document.getElementById(i.getTableCellId({rowIndex:c.end.rowIndex,columnIndex:c.end.colIndex})),o=document.getElementById(i.getTableId());if(!t||!n||!o)return s({type:"reset"}),{isSelecting:!1};var d=t.getBoundingClientRect(),r=n.getBoundingClientRect(),a=o.getBoundingClientRect(),l=a.top-o.scrollTop,x=a.left-o.scrollLeft,g={top:d.top-l,left:d.left-x,width:d.width,height:d.height},u={top:r.top-l,left:r.left-x,width:r.width,height:r.height};return{isSelecting:!0,start:e(e({},c.start),{xStart:g.left,xEnd:g.left+g.width,yStart:g.top,yEnd:g.top+g.height}),end:e(e({},c.end),{xStart:u.left,xEnd:u.left+u.width,yStart:u.top,yEnd:u.top+u.height}),rangeBox:{top:Math.min(g.top,u.top),left:Math.min(g.left,u.left),width:Math.abs(g.left-u.left)+(g.left<=u.left?u.width:g.width),height:Math.abs(g.top-u.top)+(g.top<=u.top?u.height:g.height)}}}),[c]),actions:x}}export{l as rangeReducer,x as useRangeReducer};
|
|
2
2
|
//# sourceMappingURL=hooks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sources":["../../../../../src/table/range/hooks.ts"],"sourcesContent":["import { useEffect, useMemo, useReducer } from \"react\";\nimport {\n IIndex,\n TRangeReducer,\n IRangeConstraint,\n TReturnRangeReducer,\n} from \"./type\";\nimport { useTableIdGenerator } from \"../id\";\n\nfunction newRangeConstraint(props: {\n maxColIndex: number;\n maxRowIndex: number;\n}): IRangeConstraint {\n return {\n maxColIndex: props.maxColIndex < -1 ? -1 : props.maxColIndex,\n maxRowIndex: props.maxRowIndex < -1 ? -1 : props.maxRowIndex,\n };\n}\n\nfunction newIndex(props: {\n rowIndex: number;\n colIndex: number;\n constraint: IRangeConstraint;\n}): IIndex {\n let rowIndex = props.rowIndex;\n let colIndex = props.colIndex;\n\n if (rowIndex < 0) {\n rowIndex = 0;\n } else if (props.constraint.maxRowIndex < rowIndex) {\n rowIndex = props.constraint.maxRowIndex;\n }\n\n if (colIndex < 0) {\n colIndex = 0;\n } else if (props.constraint.maxColIndex < colIndex) {\n colIndex = props.constraint.maxColIndex;\n }\n\n return { rowIndex, colIndex };\n}\n\nfunction equalIndex(a: IIndex, b: IIndex): boolean {\n return a.rowIndex === b.rowIndex && a.colIndex === b.colIndex;\n}\n\nconst MOVE_ACTION = {\n UP: { deltaRow: -1, deltaCol: 0 },\n DOWN: { deltaRow: 1, deltaCol: 0 },\n LEFT: { deltaRow: 0, deltaCol: -1 },\n RIGHT: { deltaRow: 0, deltaCol: 1 },\n} as const;\n\ntype TMoveAction = keyof typeof MOVE_ACTION;\n\nfunction moveIndex({\n index,\n direction,\n constraint,\n}: {\n index: IIndex;\n direction: TMoveAction;\n constraint: IRangeConstraint;\n}): IIndex {\n const { deltaRow, deltaCol } = MOVE_ACTION[direction];\n\n const newRow = index.rowIndex + deltaRow;\n const newCol = index.colIndex + deltaCol;\n\n return newIndex({\n rowIndex: newRow,\n colIndex: newCol,\n constraint,\n });\n}\n\nexport const rangeReducer: TRangeReducer = (state, action) => {\n switch (action.type) {\n /**\n * Actionが\"setMax\"の場合の説明:\n * - Actionのtypeが\"setMax\"の場合、選択範囲の最大値を設定します。\n * - payloadのmaxRowIndexとmaxColIndexが範囲外の場合、OutOfRangeErrorをスローします。\n * - 範囲内の場合、constraintを新しい範囲制約に設定します。\n */\n case \"setMax\":\n return {\n ...state,\n constraint: newRangeConstraint(action.payload),\n };\n\n /**\n * Actionが\"start\"の場合の説明:\n * - Actionのtypeが\"start\"の場合、選択範囲の開始位置を設定します。\n * - payloadのrowIndexとcolIndexが範囲外の場合、OutOfRangeErrorをスローします。\n * - 範囲内の場合、isSelectingをtrueに設定し、startとendの位置をpayloadの位置に設定します。\n */\n case \"startSelectRange\": {\n const startIndex = newIndex({\n rowIndex: action.payload.rowIndex,\n colIndex: action.payload.colIndex,\n constraint: state.constraint,\n });\n\n if (\n state.isSelecting &&\n equalIndex(state.start, startIndex) &&\n equalIndex(state.end, startIndex) &&\n state.inProgress\n ) {\n return state;\n }\n\n return {\n ...state,\n isSelecting: true,\n inProgress: true,\n start: startIndex,\n end: startIndex,\n };\n }\n\n case \"moveSelectRange\": {\n if (!state.isSelecting || !state.inProgress) {\n return state;\n }\n\n const endIndex = newIndex({\n rowIndex: action.payload.rowIndex,\n colIndex: action.payload.colIndex,\n constraint: state.constraint,\n });\n\n if (equalIndex(state.end, endIndex)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"end\"の場合の説明:\n * - Actionのtypeが\"end\"の場合、選択範囲の終了位置を設定します。\n * - payloadのrowIndexとcolIndexが範囲外の場合、OutOfRangeErrorをスローします。\n * - 範囲内の場合、endの位置をpayloadの位置に設定します。\n * - この場合、isSelectingはtrueのままです。\n */\n case \"endSelectRange\": {\n if (!state.isSelecting || !state.inProgress) {\n return state;\n }\n\n return {\n ...state,\n inProgress: false,\n };\n }\n\n /**\n * Actionが\"moveUp\"の場合の説明:\n * - Actionのtypeが\"moveUp\"の場合、選択範囲を上に移動します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ上に移動します。\n */\n case \"moveUp\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const startIndex = moveIndex({\n index: state.start,\n direction: \"UP\",\n constraint: state.constraint,\n });\n\n if (\n equalIndex(startIndex, state.start) &&\n equalIndex(startIndex, state.end)\n ) {\n return state;\n }\n\n return {\n ...state,\n start: startIndex,\n end: startIndex,\n };\n }\n\n /**\n * Actionが\"moveDown\"の場合の説明:\n * - Actionのtypeが\"moveDown\"の場合、選択範囲を下に移動します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ下に移動します。\n */\n case \"moveDown\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const startIndex = moveIndex({\n index: state.start,\n direction: \"DOWN\",\n constraint: state.constraint,\n });\n\n if (\n equalIndex(startIndex, state.start) &&\n equalIndex(startIndex, state.end)\n ) {\n return state;\n }\n\n return {\n ...state,\n start: startIndex,\n end: startIndex,\n };\n }\n\n /**\n * Actionが\"moveLeft\"の場合の説明:\n * - Actionのtypeが\"moveLeft\"の場合、選択範囲を左に移動します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ左に移動します。\n */\n case \"moveLeft\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const startIndex = moveIndex({\n index: state.start,\n direction: \"LEFT\",\n constraint: state.constraint,\n });\n\n if (\n equalIndex(startIndex, state.start) &&\n equalIndex(startIndex, state.end)\n ) {\n return state;\n }\n\n return {\n ...state,\n start: startIndex,\n end: startIndex,\n };\n }\n\n /**\n * Actionが\"moveRight\"の場合の説明:\n * - Actionのtypeが\"moveRight\"の場合、選択範囲を右に移動します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ右に移動します。\n */\n case \"moveRight\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const startIndex = moveIndex({\n index: state.start,\n direction: \"RIGHT\",\n constraint: state.constraint,\n });\n\n if (\n equalIndex(startIndex, state.start) &&\n equalIndex(startIndex, state.end)\n ) {\n return state;\n }\n\n return {\n ...state,\n start: startIndex,\n end: startIndex,\n };\n }\n\n /**\n * Actionが\"extendUp\"の場合の説明:\n * - Actionのtypeが\"extendUp\"の場合、選択範囲を上に拡張します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ上に拡張します。\n */\n case \"extendUp\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const endIndex = moveIndex({\n index: state.end,\n direction: \"UP\",\n constraint: state.constraint,\n });\n\n if (equalIndex(endIndex, state.end)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"extendDown\"の場合の説明:\n * - Actionのtypeが\"extendDown\"の場合、選択範囲を下に拡張します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ下に拡張します。\n */\n case \"extendDown\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const endIndex = moveIndex({\n index: state.end,\n direction: \"DOWN\",\n constraint: state.constraint,\n });\n\n if (equalIndex(endIndex, state.end)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"extendLeft\"の場合の説明:\n * - Actionのtypeが\"extendLeft\"の場合、選択範囲を左に拡張します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ左に拡張します。\n */\n case \"extendLeft\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const endIndex = moveIndex({\n index: state.end,\n direction: \"LEFT\",\n constraint: state.constraint,\n });\n\n if (equalIndex(endIndex, state.end)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"extendRight\"の場合の説明:\n * - Actionのtypeが\"extendRight\"の場合、選択範囲を右に拡張します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ右に拡張します。\n */\n case \"extendRight\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const endIndex = moveIndex({\n index: state.end,\n direction: \"RIGHT\",\n constraint: state.constraint,\n });\n\n if (equalIndex(endIndex, state.end)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"reset\"の場合の説明:\n * - Actionのtypeが\"reset\"の場合、選択範囲をリセットします。\n * - isSelectingをfalseに設定します。\n */\n case \"reset\":\n return {\n constraint: state.constraint,\n isSelecting: false,\n };\n\n /**\n * Actionが\"setRange\"の場合の説明:\n * - Actionのtypeが\"setRange\"の場合、選択範囲を設定します。\n * - payloadのstartとendの位置を設定します。\n */\n case \"setRange\":\n return {\n ...state,\n isSelecting: true,\n inProgress: false,\n start: action.payload.start,\n end: action.payload.end,\n };\n }\n};\n\nexport function useRangeReducer(): TReturnRangeReducer {\n const IdGenerator = useTableIdGenerator();\n const [state, dispatch] = useReducer(rangeReducer, {\n constraint: newRangeConstraint({ maxColIndex: 0, maxRowIndex: 0 }),\n isSelecting: false,\n });\n\n const actions = useMemo(\n () => ({\n setMax: (payload: { maxRowIndex: number; maxColIndex: number }) => {\n dispatch({ type: \"setMax\", payload });\n },\n startSelectRange: (payload: { rowIndex: number; colIndex: number }) => {\n dispatch({ type: \"startSelectRange\", payload });\n },\n moveSelectRange: (payload: { rowIndex: number; colIndex: number }) => {\n dispatch({ type: \"moveSelectRange\", payload });\n },\n endSelectRange: () => {\n dispatch({ type: \"endSelectRange\" });\n },\n moveUp: () => {\n dispatch({ type: \"moveUp\" });\n },\n moveDown: () => {\n dispatch({ type: \"moveDown\" });\n },\n moveLeft: () => {\n dispatch({ type: \"moveLeft\" });\n },\n moveRight: () => {\n dispatch({ type: \"moveRight\" });\n },\n extendUp: () => {\n dispatch({ type: \"extendUp\" });\n },\n extendDown: () => {\n dispatch({ type: \"extendDown\" });\n },\n extendLeft: () => {\n dispatch({ type: \"extendLeft\" });\n },\n extendRight: () => {\n dispatch({ type: \"extendRight\" });\n },\n reset: () => {\n dispatch({ type: \"reset\" });\n },\n setRange: (payload: { start: IIndex; end: IIndex }) => {\n dispatch({ type: \"setRange\", payload });\n },\n }),\n []\n );\n\n useEffect(() => {\n const onClickOutOfTable = (e: MouseEvent) => {\n const element = document.getElementById(IdGenerator.getTableId());\n const ele = e.target;\n if (ele instanceof Node && element?.contains(ele)) return;\n dispatch({ type: \"reset\" });\n };\n\n document.addEventListener(\"mousedown\", onClickOutOfTable);\n\n return () => {\n document.removeEventListener(\"mousedown\", onClickOutOfTable);\n };\n }, []);\n\n const exState = useMemo<TReturnRangeReducer[\"state\"]>(() => {\n if (!state.isSelecting) {\n return state;\n }\n\n const startElement = document.getElementById(\n IdGenerator.getTableCellId({\n rowIndex: state.start.rowIndex,\n columnIndex: state.start.colIndex,\n })\n );\n const endElement = document.getElementById(\n IdGenerator.getTableCellId({\n rowIndex: state.end.rowIndex,\n columnIndex: state.end.colIndex,\n })\n );\n const tableElement = document.getElementById(IdGenerator.getTableId());\n\n if (!startElement || !endElement || !tableElement) {\n dispatch({ type: \"reset\" });\n return { isSelecting: false };\n }\n\n const startRect = startElement.getBoundingClientRect();\n const endRect = endElement.getBoundingClientRect();\n const rectTable = tableElement.getBoundingClientRect();\n\n const adjustSize = {\n y: rectTable.top - tableElement.scrollTop,\n x: rectTable.left - tableElement.scrollLeft,\n };\n\n const startDivProps = {\n top: startRect.top - adjustSize.y,\n left: startRect.left - adjustSize.x,\n width: startRect.width,\n height: startRect.height,\n };\n\n const endDivProps = {\n top: endRect.top - adjustSize.y,\n left: endRect.left - adjustSize.x,\n width: endRect.width,\n height: endRect.height,\n };\n\n return {\n isSelecting: true,\n start: {\n ...state.start,\n xStart: startDivProps.left,\n xEnd: startDivProps.left + startDivProps.width,\n yStart: startDivProps.top,\n yEnd: startDivProps.top + startDivProps.height,\n },\n end: {\n ...state.end,\n xStart: endDivProps.left,\n xEnd: endDivProps.left + endDivProps.width,\n yStart: endDivProps.top,\n yEnd: endDivProps.top + endDivProps.height,\n },\n rangeBox: {\n top: Math.min(startDivProps.top, endDivProps.top),\n left: Math.min(startDivProps.left, endDivProps.left),\n width:\n Math.abs(startDivProps.left - endDivProps.left) +\n (startDivProps.left <= endDivProps.left\n ? endDivProps.width\n : startDivProps.width),\n height:\n Math.abs(startDivProps.top - endDivProps.top) +\n (startDivProps.top <= endDivProps.top\n ? endDivProps.height\n : startDivProps.height),\n },\n };\n }, [state]);\n\n return {\n state: exState,\n actions,\n };\n}\n"],"names":["newRangeConstraint","props","maxColIndex","maxRowIndex","newIndex","rowIndex","colIndex","constraint","equalIndex","a","b","MOVE_ACTION","UP","deltaRow","deltaCol","DOWN","LEFT","RIGHT","moveIndex","_a","index","direction","_b","rangeReducer","state","action","type","__assign","payload","startIndex","isSelecting","start","end","inProgress","endIndex","useRangeReducer","IdGenerator","useTableIdGenerator","useReducer","dispatch","actions","useMemo","setMax","startSelectRange","moveSelectRange","endSelectRange","moveUp","moveDown","moveLeft","moveRight","extendUp","extendDown","extendLeft","extendRight","reset","setRange","useEffect","onClickOutOfTable","e","element","document","getElementById","getTableId","ele","target","Node","contains","addEventListener","removeEventListener","startElement","getTableCellId","columnIndex","endElement","tableElement","startRect","getBoundingClientRect","endRect","rectTable","adjustSize","top","scrollTop","left","scrollLeft","startDivProps","width","height","endDivProps","xStart","xEnd","yStart","yEnd","rangeBox","Math","min","abs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hooks.js","sources":["../../../../../src/table/range/hooks.ts"],"sourcesContent":["import { useEffect, useMemo, useReducer } from \"react\";\nimport {\n IIndex,\n TRangeReducer,\n IRangeConstraint,\n TReturnRangeReducer,\n} from \"./type\";\nimport { useTableIdGenerator } from \"../id\";\n\nfunction newRangeConstraint(props: {\n maxColIndex: number;\n maxRowIndex: number;\n}): IRangeConstraint {\n return {\n maxColIndex: props.maxColIndex < -1 ? -1 : props.maxColIndex,\n maxRowIndex: props.maxRowIndex < -1 ? -1 : props.maxRowIndex,\n };\n}\n\nfunction newIndex(props: {\n rowIndex: number;\n colIndex: number;\n constraint: IRangeConstraint;\n}): IIndex {\n let rowIndex = props.rowIndex;\n let colIndex = props.colIndex;\n\n if (rowIndex < 0) {\n rowIndex = 0;\n } else if (props.constraint.maxRowIndex < rowIndex) {\n rowIndex = props.constraint.maxRowIndex;\n }\n\n if (colIndex < 0) {\n colIndex = 0;\n } else if (props.constraint.maxColIndex < colIndex) {\n colIndex = props.constraint.maxColIndex;\n }\n\n return { rowIndex, colIndex };\n}\n\nfunction equalIndex(a: IIndex, b: IIndex): boolean {\n return a.rowIndex === b.rowIndex && a.colIndex === b.colIndex;\n}\n\nconst MOVE_ACTION = {\n UP: { deltaRow: -1, deltaCol: 0 },\n DOWN: { deltaRow: 1, deltaCol: 0 },\n LEFT: { deltaRow: 0, deltaCol: -1 },\n RIGHT: { deltaRow: 0, deltaCol: 1 },\n} as const;\n\ntype TMoveAction = keyof typeof MOVE_ACTION;\n\nfunction moveIndex({\n index,\n direction,\n constraint,\n}: {\n index: IIndex;\n direction: TMoveAction;\n constraint: IRangeConstraint;\n}): IIndex {\n const { deltaRow, deltaCol } = MOVE_ACTION[direction];\n\n const newRow = index.rowIndex + deltaRow;\n const newCol = index.colIndex + deltaCol;\n\n return newIndex({\n rowIndex: newRow,\n colIndex: newCol,\n constraint,\n });\n}\n\nexport const rangeReducer: TRangeReducer = (state, action) => {\n switch (action.type) {\n /**\n * Actionが\"setMax\"の場合の説明:\n * - Actionのtypeが\"setMax\"の場合、選択範囲の最大値を設定します。\n * - payloadのmaxRowIndexとmaxColIndexが範囲外の場合、OutOfRangeErrorをスローします。\n * - 範囲内の場合、constraintを新しい範囲制約に設定します。\n */\n case \"setMax\":\n return {\n ...state,\n constraint: newRangeConstraint(action.payload),\n };\n\n /**\n * Actionが\"start\"の場合の説明:\n * - Actionのtypeが\"start\"の場合、選択範囲の開始位置を設定します。\n * - payloadのrowIndexとcolIndexが範囲外の場合、OutOfRangeErrorをスローします。\n * - 範囲内の場合、isSelectingをtrueに設定し、startとendの位置をpayloadの位置に設定します。\n */\n case \"startSelectRange\": {\n const startIndex = newIndex({\n rowIndex: action.payload.rowIndex,\n colIndex: action.payload.colIndex,\n constraint: state.constraint,\n });\n\n if (\n state.isSelecting &&\n equalIndex(state.start, startIndex) &&\n equalIndex(state.end, startIndex) &&\n state.inProgress\n ) {\n return state;\n }\n\n return {\n ...state,\n isSelecting: true,\n inProgress: true,\n start: startIndex,\n end: startIndex,\n };\n }\n\n case \"moveSelectRange\": {\n if (!state.isSelecting || !state.inProgress) {\n return state;\n }\n\n const endIndex = newIndex({\n rowIndex: action.payload.rowIndex,\n colIndex: action.payload.colIndex,\n constraint: state.constraint,\n });\n\n if (equalIndex(state.end, endIndex)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"end\"の場合の説明:\n * - Actionのtypeが\"end\"の場合、選択範囲の終了位置を設定します。\n * - payloadのrowIndexとcolIndexが範囲外の場合、OutOfRangeErrorをスローします。\n * - 範囲内の場合、endの位置をpayloadの位置に設定します。\n * - この場合、isSelectingはtrueのままです。\n */\n case \"endSelectRange\": {\n if (!state.isSelecting || !state.inProgress) {\n return state;\n }\n\n return {\n ...state,\n inProgress: false,\n };\n }\n\n /**\n * Actionが\"moveUp\"の場合の説明:\n * - Actionのtypeが\"moveUp\"の場合、選択範囲を上に移動します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ上に移動します。\n */\n case \"moveUp\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const startIndex = moveIndex({\n index: state.start,\n direction: \"UP\",\n constraint: state.constraint,\n });\n\n if (\n equalIndex(startIndex, state.start) &&\n equalIndex(startIndex, state.end)\n ) {\n return state;\n }\n\n return {\n ...state,\n start: startIndex,\n end: startIndex,\n };\n }\n\n /**\n * Actionが\"moveDown\"の場合の説明:\n * - Actionのtypeが\"moveDown\"の場合、選択範囲を下に移動します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ下に移動します。\n */\n case \"moveDown\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const startIndex = moveIndex({\n index: state.start,\n direction: \"DOWN\",\n constraint: state.constraint,\n });\n\n if (\n equalIndex(startIndex, state.start) &&\n equalIndex(startIndex, state.end)\n ) {\n return state;\n }\n\n return {\n ...state,\n start: startIndex,\n end: startIndex,\n };\n }\n\n /**\n * Actionが\"moveLeft\"の場合の説明:\n * - Actionのtypeが\"moveLeft\"の場合、選択範囲を左に移動します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ左に移動します。\n */\n case \"moveLeft\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const startIndex = moveIndex({\n index: state.start,\n direction: \"LEFT\",\n constraint: state.constraint,\n });\n\n if (\n equalIndex(startIndex, state.start) &&\n equalIndex(startIndex, state.end)\n ) {\n return state;\n }\n\n return {\n ...state,\n start: startIndex,\n end: startIndex,\n };\n }\n\n /**\n * Actionが\"moveRight\"の場合の説明:\n * - Actionのtypeが\"moveRight\"の場合、選択範囲を右に移動します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ右に移動します。\n */\n case \"moveRight\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const startIndex = moveIndex({\n index: state.start,\n direction: \"RIGHT\",\n constraint: state.constraint,\n });\n\n if (\n equalIndex(startIndex, state.start) &&\n equalIndex(startIndex, state.end)\n ) {\n return state;\n }\n\n return {\n ...state,\n start: startIndex,\n end: startIndex,\n };\n }\n\n /**\n * Actionが\"moveTop\"の場合の説明:\n * - Actionのtypeが\"moveTop\"の場合、選択範囲を一番上に移動します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、startとendの位置を一番上に設定します。\n */\n case \"moveTop\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const startIndex = newIndex({\n rowIndex: 0,\n colIndex: state.start.colIndex,\n constraint: state.constraint,\n });\n\n if (\n equalIndex(startIndex, state.start) &&\n equalIndex(startIndex, state.end)\n ) {\n return state;\n }\n\n return {\n ...state,\n start: startIndex,\n end: startIndex,\n };\n }\n\n /**\n * Actionが\"moveBottom\"の場合の説明:\n * - Actionのtypeが\"moveBottom\"の場合、選択範囲を一番下に移動します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、startとendの位置を一番下に設定します。\n */\n case \"moveBottom\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const startIndex = newIndex({\n rowIndex: state.constraint.maxRowIndex,\n colIndex: state.start.colIndex,\n constraint: state.constraint,\n });\n\n if (\n equalIndex(startIndex, state.start) &&\n equalIndex(startIndex, state.end)\n ) {\n return state;\n }\n\n return {\n ...state,\n start: startIndex,\n end: startIndex,\n };\n }\n\n /**\n * Actionが\"moveRightEnd\"の場合の説明:\n * - Actionのtypeが\"moveRightEnd\"の場合、選択範囲を一番右に移動します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、startとendの位置を一番右に設定します。\n */\n case \"moveLeftEnd\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const startIndex = newIndex({\n rowIndex: state.start.rowIndex,\n colIndex: 0,\n constraint: state.constraint,\n });\n\n if (\n equalIndex(startIndex, state.start) &&\n equalIndex(startIndex, state.end)\n ) {\n return state;\n }\n\n return {\n ...state,\n start: startIndex,\n end: startIndex,\n };\n }\n\n /**\n * Actionが\"moveRightEnd\"の場合の説明:\n * - Actionのtypeが\"moveRightEnd\"の場合、選択範囲を一番右に移動します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、startとendの位置を一番右に設定します。\n */\n case \"moveRightEnd\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const startIndex = newIndex({\n rowIndex: state.start.rowIndex,\n colIndex: state.constraint.maxColIndex,\n constraint: state.constraint,\n });\n\n if (\n equalIndex(startIndex, state.start) &&\n equalIndex(startIndex, state.end)\n ) {\n return state;\n }\n\n return {\n ...state,\n start: startIndex,\n end: startIndex,\n };\n }\n\n /**\n * Actionが\"extendUp\"の場合の説明:\n * - Actionのtypeが\"extendUp\"の場合、選択範囲を上に拡張します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ上に拡張します。\n */\n case \"extendUp\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const endIndex = moveIndex({\n index: state.end,\n direction: \"UP\",\n constraint: state.constraint,\n });\n\n if (equalIndex(endIndex, state.end)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"extendDown\"の場合の説明:\n * - Actionのtypeが\"extendDown\"の場合、選択範囲を下に拡張します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ下に拡張します。\n */\n case \"extendDown\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const endIndex = moveIndex({\n index: state.end,\n direction: \"DOWN\",\n constraint: state.constraint,\n });\n\n if (equalIndex(endIndex, state.end)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"extendLeft\"の場合の説明:\n * - Actionのtypeが\"extendLeft\"の場合、選択範囲を左に拡張します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ左に拡張します。\n */\n case \"extendLeft\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const endIndex = moveIndex({\n index: state.end,\n direction: \"LEFT\",\n constraint: state.constraint,\n });\n\n if (equalIndex(endIndex, state.end)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"extendRight\"の場合の説明:\n * - Actionのtypeが\"extendRight\"の場合、選択範囲を右に拡張します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を1つ右に拡張します。\n */\n case \"extendRight\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const endIndex = moveIndex({\n index: state.end,\n direction: \"RIGHT\",\n constraint: state.constraint,\n });\n\n if (equalIndex(endIndex, state.end)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"extendTop\"の場合の説明:\n * - Actionのtypeが\"extendTop\"の場合、選択範囲を一番上に拡張します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を一番上に拡張します。\n */\n case \"extendTop\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const endIndex = newIndex({\n rowIndex: 0,\n colIndex: state.end.colIndex,\n constraint: state.constraint,\n });\n\n if (equalIndex(endIndex, state.end)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"extendBottom\"の場合の説明:\n * - Actionのtypeが\"extendBottom\"の場合、選択範囲を一番下に拡張します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を一番下に拡張します。\n */\n case \"extendBottom\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const endIndex = newIndex({\n rowIndex: state.constraint.maxRowIndex,\n colIndex: state.end.colIndex,\n constraint: state.constraint,\n });\n\n if (equalIndex(endIndex, state.end)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"extendRightEnd\"の場合の説明:\n * - Actionのtypeが\"extendRightEnd\"の場合、選択範囲を一番右に拡張します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を一番右に拡張します。\n */\n case \"extendLeftEnd\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const endIndex = newIndex({\n rowIndex: state.end.rowIndex,\n colIndex: 0,\n constraint: state.constraint,\n });\n\n if (equalIndex(endIndex, state.end)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"extendRightEnd\"の場合の説明:\n * - Actionのtypeが\"extendRightEnd\"の場合、選択範囲を一番右に拡張します。\n * - isSelectingがfalseの場合、InvalidOperationErrorをスローします。\n * - 移動後の位置がstartとendが同じ場合、stateをそのまま返します。\n * - それ以外の場合、endの位置を一番右に拡張します。\n */\n case \"extendRightEnd\": {\n if (!state.isSelecting) {\n return state;\n }\n\n const endIndex = newIndex({\n rowIndex: state.end.rowIndex,\n colIndex: state.constraint.maxColIndex,\n constraint: state.constraint,\n });\n\n if (equalIndex(endIndex, state.end)) {\n return state;\n }\n\n return {\n ...state,\n end: endIndex,\n };\n }\n\n /**\n * Actionが\"reset\"の場合の説明:\n * - Actionのtypeが\"reset\"の場合、選択範囲をリセットします。\n * - isSelectingをfalseに設定します。\n */\n case \"reset\":\n return {\n constraint: state.constraint,\n isSelecting: false,\n };\n\n /**\n * Actionが\"setRange\"の場合の説明:\n * - Actionのtypeが\"setRange\"の場合、選択範囲を設定します。\n * - payloadのstartとendの位置を設定します。\n */\n case \"setRange\":\n return {\n ...state,\n isSelecting: true,\n inProgress: false,\n start: action.payload.start,\n end: action.payload.end,\n };\n }\n};\n\nexport function useRangeReducer(): TReturnRangeReducer {\n const IdGenerator = useTableIdGenerator();\n const [state, dispatch] = useReducer(rangeReducer, {\n constraint: newRangeConstraint({ maxColIndex: 0, maxRowIndex: 0 }),\n isSelecting: false,\n });\n\n const actions = useMemo(\n () => ({\n setMax: (payload: { maxRowIndex: number; maxColIndex: number }) => {\n dispatch({ type: \"setMax\", payload });\n },\n startSelectRange: (payload: { rowIndex: number; colIndex: number }) => {\n dispatch({ type: \"startSelectRange\", payload });\n },\n moveSelectRange: (payload: { rowIndex: number; colIndex: number }) => {\n dispatch({ type: \"moveSelectRange\", payload });\n },\n endSelectRange: () => {\n dispatch({ type: \"endSelectRange\" });\n },\n moveUp: () => {\n dispatch({ type: \"moveUp\" });\n },\n moveDown: () => {\n dispatch({ type: \"moveDown\" });\n },\n moveLeft: () => {\n dispatch({ type: \"moveLeft\" });\n },\n moveRight: () => {\n dispatch({ type: \"moveRight\" });\n },\n moveTop: () => {\n dispatch({ type: \"moveTop\" });\n },\n moveBottom: () => {\n dispatch({ type: \"moveBottom\" });\n },\n moveRightEnd: () => {\n dispatch({ type: \"moveRightEnd\" });\n },\n moveLeftEnd: () => {\n dispatch({ type: \"moveLeftEnd\" });\n },\n extendUp: () => {\n dispatch({ type: \"extendUp\" });\n },\n extendDown: () => {\n dispatch({ type: \"extendDown\" });\n },\n extendLeft: () => {\n dispatch({ type: \"extendLeft\" });\n },\n extendRight: () => {\n dispatch({ type: \"extendRight\" });\n },\n extendTop: () => {\n dispatch({ type: \"extendTop\" });\n },\n extendBottom: () => {\n dispatch({ type: \"extendBottom\" });\n },\n extendRightEnd: () => {\n dispatch({ type: \"extendRightEnd\" });\n },\n extendLeftEnd: () => {\n dispatch({ type: \"extendLeftEnd\" });\n },\n reset: () => {\n dispatch({ type: \"reset\" });\n },\n setRange: (payload: { start: IIndex; end: IIndex }) => {\n dispatch({ type: \"setRange\", payload });\n },\n }),\n []\n );\n\n useEffect(() => {\n const onClickOutOfTable = (e: MouseEvent) => {\n const element = document.getElementById(IdGenerator.getTableId());\n const ele = e.target;\n if (ele instanceof Node && element?.contains(ele)) return;\n dispatch({ type: \"reset\" });\n };\n\n document.addEventListener(\"mousedown\", onClickOutOfTable);\n\n return () => {\n document.removeEventListener(\"mousedown\", onClickOutOfTable);\n };\n }, []);\n\n const exState = useMemo<TReturnRangeReducer[\"state\"]>(() => {\n if (!state.isSelecting) {\n return state;\n }\n\n const startElement = document.getElementById(\n IdGenerator.getTableCellId({\n rowIndex: state.start.rowIndex,\n columnIndex: state.start.colIndex,\n })\n );\n const endElement = document.getElementById(\n IdGenerator.getTableCellId({\n rowIndex: state.end.rowIndex,\n columnIndex: state.end.colIndex,\n })\n );\n const tableElement = document.getElementById(IdGenerator.getTableId());\n\n if (!startElement || !endElement || !tableElement) {\n dispatch({ type: \"reset\" });\n return { isSelecting: false };\n }\n\n const startRect = startElement.getBoundingClientRect();\n const endRect = endElement.getBoundingClientRect();\n const rectTable = tableElement.getBoundingClientRect();\n\n const adjustSize = {\n y: rectTable.top - tableElement.scrollTop,\n x: rectTable.left - tableElement.scrollLeft,\n };\n\n const startDivProps = {\n top: startRect.top - adjustSize.y,\n left: startRect.left - adjustSize.x,\n width: startRect.width,\n height: startRect.height,\n };\n\n const endDivProps = {\n top: endRect.top - adjustSize.y,\n left: endRect.left - adjustSize.x,\n width: endRect.width,\n height: endRect.height,\n };\n\n return {\n isSelecting: true,\n start: {\n ...state.start,\n xStart: startDivProps.left,\n xEnd: startDivProps.left + startDivProps.width,\n yStart: startDivProps.top,\n yEnd: startDivProps.top + startDivProps.height,\n },\n end: {\n ...state.end,\n xStart: endDivProps.left,\n xEnd: endDivProps.left + endDivProps.width,\n yStart: endDivProps.top,\n yEnd: endDivProps.top + endDivProps.height,\n },\n rangeBox: {\n top: Math.min(startDivProps.top, endDivProps.top),\n left: Math.min(startDivProps.left, endDivProps.left),\n width:\n Math.abs(startDivProps.left - endDivProps.left) +\n (startDivProps.left <= endDivProps.left\n ? endDivProps.width\n : startDivProps.width),\n height:\n Math.abs(startDivProps.top - endDivProps.top) +\n (startDivProps.top <= endDivProps.top\n ? endDivProps.height\n : startDivProps.height),\n },\n };\n }, [state]);\n\n return {\n state: exState,\n actions,\n };\n}\n"],"names":["newRangeConstraint","props","maxColIndex","maxRowIndex","newIndex","rowIndex","colIndex","constraint","equalIndex","a","b","MOVE_ACTION","UP","deltaRow","deltaCol","DOWN","LEFT","RIGHT","moveIndex","_a","index","direction","_b","rangeReducer","state","action","type","__assign","payload","startIndex","isSelecting","start","end","inProgress","endIndex","useRangeReducer","IdGenerator","useTableIdGenerator","useReducer","dispatch","actions","useMemo","setMax","startSelectRange","moveSelectRange","endSelectRange","moveUp","moveDown","moveLeft","moveRight","moveTop","moveBottom","moveRightEnd","moveLeftEnd","extendUp","extendDown","extendLeft","extendRight","extendTop","extendBottom","extendRightEnd","extendLeftEnd","reset","setRange","useEffect","onClickOutOfTable","e","element","document","getElementById","getTableId","ele","target","Node","contains","addEventListener","removeEventListener","startElement","getTableCellId","columnIndex","endElement","tableElement","startRect","getBoundingClientRect","endRect","rectTable","adjustSize","top","scrollTop","left","scrollLeft","startDivProps","width","height","endDivProps","xStart","xEnd","yStart","yEnd","rangeBox","Math","min","abs"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{__assign as e}from"../../../node_modules/tslib/tslib.es6.js";import{jsx as t,jsxs as n,Fragment as
|
|
1
|
+
import{__assign as e}from"../../../node_modules/tslib/tslib.es6.js";import{jsx as t,jsxs as n,Fragment as o}from"react/jsx-runtime";import{createContext as r,useContext as i,useEffect as d}from"react";import{NoImplementeFunction as a}from"../lib/errors.js";import{useRangeReducer as s}from"./hooks.js";import{useTablePropertyStateContext as l}from"../table-property/provider.js";import{useTableIdGenerator as m}from"../id/provider.js";var c=r({isSelecting:!1}),x=r({setMax:a,startSelectRange:a,moveSelectRange:a,endSelectRange:a,moveUp:a,moveDown:a,moveLeft:a,moveRight:a,moveTop:a,moveBottom:a,moveRightEnd:a,moveLeftEnd:a,extendUp:a,extendDown:a,extendLeft:a,extendRight:a,extendTop:a,extendBottom:a,extendRightEnd:a,extendLeftEnd:a,reset:a,setRange:a});function u(){return i(c)}function f(){return i(x)}function v(){return e(e({},u()),f())}function p(){var e=f().setMax,n=l(),r=n.maxDisplayRowCount,i=n.maxDisplayColCount;return d((function(){e({maxRowIndex:r-1,maxColIndex:i-1})}),[r,i]),t(o,{})}function g(e){var n=m(),r=u();if(d((function(){if(r.isSelecting){var e=document.getElementById(n.getTableCellId({rowIndex:r.end.rowIndex,columnIndex:r.end.colIndex}));e&&(e.scrollIntoView({behavior:"instant",block:"nearest",inline:"nearest"}),e.focus())}}),[r]),!r.isSelecting)return t(o,{});var i=r.rangeBox,a=r.start,s=r.end;return a.xEnd<s.xEnd?s.xEnd:a.xEnd,a.yEnd<s.yEnd?s.yEnd:a.yEnd,t(o,{children:t("div",{className:"absolute border border-gray-500 bg-gray-500 bg-opacity-10 ".concat(e.isCopied?"border-dashed":"border-solid"),style:{top:i.top,left:i.left,width:i.width,height:i.height,pointerEvents:"none"}})})}function h(e){var o=e.children,r=s(),i=r.state,d=r.actions;return t(c.Provider,{value:i,children:n(x.Provider,{value:d,children:[t(p,{}),o]})})}export{h as RangeProvider,g as TestRange,f as useRangeActionContext,v as useRangeContext,u as useRangeStateContext};
|
|
2
2
|
//# sourceMappingURL=provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sources":["../../../../../src/table/range/provider.tsx"],"sourcesContent":["import { createContext, useContext, useEffect } from \"react\";\nimport { TRangeActionContext, TRangeStateContext } from \"./type\";\nimport { NoImplementeFunction } from \"../lib/errors\";\nimport { useRangeReducer } from \"./hooks\";\nimport { useTablePropertyStateContext } from \"../table-property/provider\";\nimport { useTableIdGenerator } from \"../id\";\n\nconst RangeStateContext = createContext<TRangeStateContext>({\n isSelecting: false,\n});\n\nconst RangeActionContext = createContext<TRangeActionContext>({\n setMax: NoImplementeFunction,\n startSelectRange: NoImplementeFunction,\n moveSelectRange: NoImplementeFunction,\n endSelectRange: NoImplementeFunction,\n moveUp: NoImplementeFunction,\n moveDown: NoImplementeFunction,\n moveLeft: NoImplementeFunction,\n moveRight: NoImplementeFunction,\n extendUp: NoImplementeFunction,\n extendDown: NoImplementeFunction,\n extendLeft: NoImplementeFunction,\n extendRight: NoImplementeFunction,\n reset: NoImplementeFunction,\n setRange: NoImplementeFunction,\n});\n\nexport function useRangeStateContext() {\n return useContext(RangeStateContext);\n}\n\nexport function useRangeActionContext() {\n return useContext(RangeActionContext);\n}\n\nexport function useRangeContext() {\n return { ...useRangeStateContext(), ...useRangeActionContext() };\n}\n\nfunction EffectSetMax() {\n const { setMax } = useRangeActionContext();\n const { maxDisplayRowCount, maxDisplayColCount } =\n useTablePropertyStateContext();\n\n useEffect(() => {\n setMax({\n maxRowIndex: maxDisplayRowCount - 1,\n maxColIndex: maxDisplayColCount - 1,\n });\n }, [maxDisplayRowCount, maxDisplayColCount]);\n\n return <></>;\n}\n\nexport function TestRange(props: { isCopied?: boolean }) {\n const IdGenerator = useTableIdGenerator();\n const state = useRangeStateContext();\n\n useEffect(() => {\n if (state.isSelecting) {\n const endElement = document.getElementById(\n IdGenerator.getTableCellId({\n rowIndex: state.end.rowIndex,\n columnIndex: state.end.colIndex,\n })\n );\n\n if (endElement) {\n endElement.scrollIntoView({\n behavior: \"instant\",\n block: \"nearest\",\n inline: \"nearest\",\n });\n endElement.focus();\n }\n }\n }, [state]);\n\n if (!state.isSelecting) {\n return <></>;\n }\n\n const { rangeBox, start, end } = state;\n\n const clickboxPoint = {\n x: start.xEnd < end.xEnd ? end.xEnd : start.xEnd,\n y: start.yEnd < end.yEnd ? end.yEnd : start.yEnd,\n };\n\n return (\n <>\n <div\n className={`absolute border border-gray-500 bg-gray-500 bg-opacity-10 ${\n props.isCopied ? \"border-dashed\" : \"border-solid\"\n }`}\n style={{\n top: rangeBox.top,\n left: rangeBox.left,\n width: rangeBox.width,\n height: rangeBox.height,\n pointerEvents: \"none\",\n }}\n ></div>\n {/* <div\n className=\"absolute bg-gray-700\"\n style={{\n top: clickboxPoint.y - 5,\n left: clickboxPoint.x - 5,\n width: 10,\n height: 10,\n pointerEvents: \"none\",\n }}\n /> */}\n </>\n );\n}\n\nexport function RangeProvider({\n children,\n}: {\n children: JSX.Element | JSX.Element[];\n}) {\n const { state, actions } = useRangeReducer();\n\n return (\n <RangeStateContext.Provider value={state}>\n <RangeActionContext.Provider value={actions}>\n <EffectSetMax />\n {children}\n </RangeActionContext.Provider>\n </RangeStateContext.Provider>\n );\n}\n"],"names":["RangeStateContext","createContext","isSelecting","RangeActionContext","setMax","NoImplementeFunction","startSelectRange","moveSelectRange","endSelectRange","moveUp","moveDown","moveLeft","moveRight","extendUp","extendDown","extendLeft","extendRight","reset","setRange","useRangeStateContext","useContext","useRangeActionContext","useRangeContext","__assign","EffectSetMax","_a","useTablePropertyStateContext","maxDisplayRowCount","maxDisplayColCount","useEffect","maxRowIndex","maxColIndex","_jsx","TestRange","props","IdGenerator","useTableIdGenerator","state","endElement","document","getElementById","getTableCellId","rowIndex","end","columnIndex","colIndex","scrollIntoView","behavior","block","inline","focus","rangeBox","start","xEnd","yEnd","className","concat","isCopied","style","top","left","width","height","pointerEvents","RangeProvider","children","_b","useRangeReducer","actions","Provider","value","_jsxs"],"mappings":"mbAOA,IAAMA,EAAoBC,EAAkC,CAC1DC,aAAa,IAGTC,EAAqBF,EAAmC,CAC5DG,OAAQC,EACRC,iBAAkBD,EAClBE,gBAAiBF,EACjBG,eAAgBH,EAChBI,OAAQJ,EACRK,SAAUL,EACVM,SAAUN,EACVO,UAAWP,EACXQ,
|
|
1
|
+
{"version":3,"file":"provider.js","sources":["../../../../../src/table/range/provider.tsx"],"sourcesContent":["import { createContext, useContext, useEffect } from \"react\";\nimport { TRangeActionContext, TRangeStateContext } from \"./type\";\nimport { NoImplementeFunction } from \"../lib/errors\";\nimport { useRangeReducer } from \"./hooks\";\nimport { useTablePropertyStateContext } from \"../table-property/provider\";\nimport { useTableIdGenerator } from \"../id\";\n\nconst RangeStateContext = createContext<TRangeStateContext>({\n isSelecting: false,\n});\n\nconst RangeActionContext = createContext<TRangeActionContext>({\n setMax: NoImplementeFunction,\n startSelectRange: NoImplementeFunction,\n moveSelectRange: NoImplementeFunction,\n endSelectRange: NoImplementeFunction,\n moveUp: NoImplementeFunction,\n moveDown: NoImplementeFunction,\n moveLeft: NoImplementeFunction,\n moveRight: NoImplementeFunction,\n moveTop: NoImplementeFunction,\n moveBottom: NoImplementeFunction,\n moveRightEnd: NoImplementeFunction,\n moveLeftEnd: NoImplementeFunction,\n extendUp: NoImplementeFunction,\n extendDown: NoImplementeFunction,\n extendLeft: NoImplementeFunction,\n extendRight: NoImplementeFunction,\n extendTop: NoImplementeFunction,\n extendBottom: NoImplementeFunction,\n extendRightEnd: NoImplementeFunction,\n extendLeftEnd: NoImplementeFunction,\n reset: NoImplementeFunction,\n setRange: NoImplementeFunction,\n});\n\nexport function useRangeStateContext() {\n return useContext(RangeStateContext);\n}\n\nexport function useRangeActionContext() {\n return useContext(RangeActionContext);\n}\n\nexport function useRangeContext() {\n return { ...useRangeStateContext(), ...useRangeActionContext() };\n}\n\nfunction EffectSetMax() {\n const { setMax } = useRangeActionContext();\n const { maxDisplayRowCount, maxDisplayColCount } =\n useTablePropertyStateContext();\n\n useEffect(() => {\n setMax({\n maxRowIndex: maxDisplayRowCount - 1,\n maxColIndex: maxDisplayColCount - 1,\n });\n }, [maxDisplayRowCount, maxDisplayColCount]);\n\n return <></>;\n}\n\nexport function TestRange(props: { isCopied?: boolean }) {\n const IdGenerator = useTableIdGenerator();\n const state = useRangeStateContext();\n\n useEffect(() => {\n if (state.isSelecting) {\n const endElement = document.getElementById(\n IdGenerator.getTableCellId({\n rowIndex: state.end.rowIndex,\n columnIndex: state.end.colIndex,\n })\n );\n\n if (endElement) {\n endElement.scrollIntoView({\n behavior: \"instant\",\n block: \"nearest\",\n inline: \"nearest\",\n });\n endElement.focus();\n }\n }\n }, [state]);\n\n if (!state.isSelecting) {\n return <></>;\n }\n\n const { rangeBox, start, end } = state;\n\n const clickboxPoint = {\n x: start.xEnd < end.xEnd ? end.xEnd : start.xEnd,\n y: start.yEnd < end.yEnd ? end.yEnd : start.yEnd,\n };\n\n return (\n <>\n <div\n className={`absolute border border-gray-500 bg-gray-500 bg-opacity-10 ${\n props.isCopied ? \"border-dashed\" : \"border-solid\"\n }`}\n style={{\n top: rangeBox.top,\n left: rangeBox.left,\n width: rangeBox.width,\n height: rangeBox.height,\n pointerEvents: \"none\",\n }}\n ></div>\n {/* <div\n className=\"absolute bg-gray-700\"\n style={{\n top: clickboxPoint.y - 5,\n left: clickboxPoint.x - 5,\n width: 10,\n height: 10,\n pointerEvents: \"none\",\n }}\n /> */}\n </>\n );\n}\n\nexport function RangeProvider({\n children,\n}: {\n children: JSX.Element | JSX.Element[];\n}) {\n const { state, actions } = useRangeReducer();\n\n return (\n <RangeStateContext.Provider value={state}>\n <RangeActionContext.Provider value={actions}>\n <EffectSetMax />\n {children}\n </RangeActionContext.Provider>\n </RangeStateContext.Provider>\n );\n}\n"],"names":["RangeStateContext","createContext","isSelecting","RangeActionContext","setMax","NoImplementeFunction","startSelectRange","moveSelectRange","endSelectRange","moveUp","moveDown","moveLeft","moveRight","moveTop","moveBottom","moveRightEnd","moveLeftEnd","extendUp","extendDown","extendLeft","extendRight","extendTop","extendBottom","extendRightEnd","extendLeftEnd","reset","setRange","useRangeStateContext","useContext","useRangeActionContext","useRangeContext","__assign","EffectSetMax","_a","useTablePropertyStateContext","maxDisplayRowCount","maxDisplayColCount","useEffect","maxRowIndex","maxColIndex","_jsx","TestRange","props","IdGenerator","useTableIdGenerator","state","endElement","document","getElementById","getTableCellId","rowIndex","end","columnIndex","colIndex","scrollIntoView","behavior","block","inline","focus","rangeBox","start","xEnd","yEnd","className","concat","isCopied","style","top","left","width","height","pointerEvents","RangeProvider","children","_b","useRangeReducer","actions","Provider","value","_jsxs"],"mappings":"mbAOA,IAAMA,EAAoBC,EAAkC,CAC1DC,aAAa,IAGTC,EAAqBF,EAAmC,CAC5DG,OAAQC,EACRC,iBAAkBD,EAClBE,gBAAiBF,EACjBG,eAAgBH,EAChBI,OAAQJ,EACRK,SAAUL,EACVM,SAAUN,EACVO,UAAWP,EACXQ,QAASR,EACTS,WAAYT,EACZU,aAAcV,EACdW,YAAaX,EACbY,SAAUZ,EACVa,WAAYb,EACZc,WAAYd,EACZe,YAAaf,EACbgB,UAAWhB,EACXiB,aAAcjB,EACdkB,eAAgBlB,EAChBmB,cAAenB,EACfoB,MAAOpB,EACPqB,SAAUrB,aAGIsB,IACd,OAAOC,EAAW5B,EACpB,UAEgB6B,IACd,OAAOD,EAAWzB,EACpB,UAEgB2B,IACd,OAAAC,EAAAA,EAAA,CAAA,EAAYJ,KAA2BE,IACzC,CAEA,SAASG,IACC,IAAA5B,EAAWyB,WACbI,EACJC,IADMC,EAAkBF,EAAAE,mBAAEC,EAAkBH,EAAAG,mBAU9C,OAPAC,GAAU,WACRjC,EAAO,CACLkC,YAAaH,EAAqB,EAClCI,YAAaH,EAAqB,GAEtC,GAAG,CAACD,EAAoBC,IAEjBI,OACT,CAEM,SAAUC,EAAUC,GACxB,IAAMC,EAAcC,IACdC,EAAQlB,IAsBd,GApBAU,GAAU,WACR,GAAIQ,EAAM3C,YAAa,CACrB,IAAM4C,EAAaC,SAASC,eAC1BL,EAAYM,eAAe,CACzBC,SAAUL,EAAMM,IAAID,SACpBE,YAAaP,EAAMM,IAAIE,YAIvBP,IACFA,EAAWQ,eAAe,CACxBC,SAAU,UACVC,MAAO,UACPC,OAAQ,YAEVX,EAAWY,QAEd,CACH,GAAG,CAACb,KAECA,EAAM3C,YACT,OAAOsC,QAGD,IAAAmB,EAAyBd,EAAKc,SAApBC,EAAef,EAAKe,MAAbT,EAAQN,MAOjC,OAJKe,EAAMC,KAAOV,EAAIU,KAAOV,EAAIU,KAAOD,EAAMC,KACzCD,EAAME,KAAOX,EAAIW,KAAOX,EAAIW,KAAOF,EAAME,KAI5CtB,cACEA,EACE,MAAA,CAAAuB,UAAW,6DACTC,OAAAtB,EAAMuB,SAAW,gBAAkB,gBAErCC,MAAO,CACLC,IAAKR,EAASQ,IACdC,KAAMT,EAASS,KACfC,MAAOV,EAASU,MAChBC,OAAQX,EAASW,OACjBC,cAAe,WAezB,CAEM,SAAUC,EAAcvC,GAC5B,IAAAwC,EAAQxC,EAAAwC,SAIFC,EAAqBC,IAAnB9B,EAAK6B,EAAA7B,MAAE+B,EAAOF,EAAAE,QAEtB,OACEpC,EAACxC,EAAkB6E,SAAS,CAAAC,MAAOjC,EACjC4B,SAAAM,EAAC5E,EAAmB0E,SAAQ,CAACC,MAAOF,EAAOH,SAAA,CACzCjC,EAACR,EAAe,CAAA,GACfyC,MAIT"}
|