@pie-lib/math-input-mathlive 1.0.0 → 1.0.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_propTypes","_Button","_IconButton","_styles","_debug","_lodashEs","_renderUi","_keys","_keysLayout","_commonStyles","_mathliveInstance","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","Reflect","construct","constructor","Boolean","prototype","valueOf","call","log","debug","LabelHolder","styled","pointerEvents","textTransform","color","text","display","alignItems","justifyContent","lineHeight","backgroundColor","keypadEmptyPlaceholder","LatexLabel","exports","_React$Component","props","_this","_classCallCheck2","state","markup","latexToMarkup","latex","_inherits2","_createClass2","key","value","_componentDidMount","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_context","prev","next","loadMathLive","unmounted","setState","stop","componentDidMount","componentDidUpdate","prevProps","componentWillUnmount","render","createElement","dangerouslySetInnerHTML","__html","React","Component","PropTypes","string","isRequired","createCustomLayout","layoutObj","gridTemplateColumns","concat","columns","gridTemplateRows","rows","gridAutoFlow","KeyPadContainer","commonKeyboardStyles","width","gridRowGap","gridColumnGap","fontFamily","buttonBackground","category","keypadButtonOperator","keypadButton","keypadButtonOperatorHover","keypadButtonHover","StyledButton","Button","_ref","isDelete","isComma","isDot","minWidth","fontSize","borderRadius","StyledLatexButtonWrapper","_ref2","padding","margin","StyledIconButton","IconButton","_ref3","height","KeyPad","_React$Component2","_this2","setKeypadInteraction","onPress","base","extras","flatten","_toConsumableArray2","sortKeys","noDecimal","write","label","keypadRef","createRef","_this$keypadRef","keyPadElement","current","mainContainer","closest","currentToolbar","controlledKeypadMode","mainContainerPosition","getBoundingClientRect","currentToolbarPosition","difference","top","totalHeight","style","addEventListener","handleKeypadInteraction","_this$keypadRef2","removeEventListener","_this3","_this$props","className","baseSet","additionalKeys","layoutForKeyPad","onFocus","mode","noBaseSet","keysWithoutBaseSet","includes","allKeys","flowKeys","shift","Math","floor","ref","join","map","k","index","command","undefined","extra","actions","extraProps","onClick","buttonClick","bind","disabled","keyIsNotAllowed","ariaLabel","name","_extends2","Icon","icon","tabIndex","size","bool","array","object","func","oneOfType","number","_default"],"sources":["../../src/keypad/index.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Button from '@mui/material/Button';\nimport IconButton from '@mui/material/IconButton';\nimport { styled } from '@mui/material/styles';\nimport debug from 'debug';\nimport { flatten } from 'lodash-es';\nimport { color } from '@pie-lib/render-ui';\n\nimport { baseSet } from '../keys';\nimport { sortKeys } from './keys-layout';\nimport { commonKeyboardStyles } from '../mf/common-styles';\nimport { loadMathLive, latexToMarkup } from '../mathlive-instance';\n\nconst log = debug('pie-lib:math-input-mathlive:keypad');\n\n/**\n * A LaTeX keypad label.\n *\n * The MathQuill implementation rendered every LaTeX label as its own\n * `MQ.StaticMath` instance. Here each label is static HTML produced once by\n * `convertLatexToMarkup`, so a 40-key keypad no longer creates 40 live math\n * instances.\n */\nconst LabelHolder = styled('span')({\n pointerEvents: 'none',\n textTransform: 'none',\n color: color.text(),\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n lineHeight: 1,\n // Answer-block / empty-slot boxes inside a label.\n '& .ML__placeholder': {\n backgroundColor: color.keypadEmptyPlaceholder(),\n },\n});\n\nexport class LatexLabel extends React.Component {\n static propTypes = {\n latex: PropTypes.string.isRequired,\n };\n\n constructor(props) {\n super(props);\n this.state = { markup: latexToMarkup(props.latex) };\n }\n\n async componentDidMount() {\n // MathLive may not have finished loading when the keypad first mounts.\n if (!this.state.markup) {\n await loadMathLive();\n\n if (!this.unmounted) {\n this.setState({ markup: latexToMarkup(this.props.latex) });\n }\n }\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.latex !== this.props.latex) {\n this.setState({ markup: latexToMarkup(this.props.latex) });\n }\n }\n\n componentWillUnmount() {\n this.unmounted = true;\n }\n\n render() {\n const { markup } = this.state;\n\n // Fall back to the raw latex so a button is never blank.\n return markup ? (\n // eslint-disable-next-line react/no-danger\n <LabelHolder dangerouslySetInnerHTML={{ __html: markup }} />\n ) : (\n <LabelHolder>{this.props.latex}</LabelHolder>\n );\n }\n}\n\nconst createCustomLayout = (layoutObj) => {\n if (layoutObj) {\n return {\n gridTemplateColumns: `repeat(${layoutObj.columns}, minmax(min-content, 150px))`,\n gridTemplateRows: `repeat(${layoutObj.rows}, minmax(40px, 60px))`,\n gridAutoFlow: 'initial',\n };\n }\n\n return {};\n};\n\nconst KeyPadContainer = styled('div')(() => ({\n ...commonKeyboardStyles,\n width: '100%',\n display: 'grid',\n gridTemplateRows: 'repeat(5, minmax(40px, 60px))',\n gridRowGap: '0px',\n gridColumnGap: '0px',\n gridAutoFlow: 'column',\n '&.character': {\n textTransform: 'initial !important',\n gridTemplateRows: 'repeat(5, minmax(40px, 50px)) !important',\n },\n '&.language': {\n gridTemplateRows: 'repeat(4, minmax(40px, 50px)) !important',\n '& *': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif !important',\n },\n },\n}));\n\nconst buttonBackground = (category) => ({\n backgroundColor: category === 'operators' ? color.keypadButtonOperator() : color.keypadButton(),\n '&:hover': {\n backgroundColor: category === 'operators' ? color.keypadButtonOperatorHover() : color.keypadButtonHover(),\n },\n});\n\nconst StyledButton = styled(Button)(({ category, isDelete, isComma, isDot }) => ({\n minWidth: 'auto',\n textTransform: 'none',\n fontSize: isComma || isDot ? '200% !important' : '140% !important',\n lineHeight: isComma || isDot ? '100%' : 'normal',\n color: color.text(),\n ...buttonBackground(category),\n borderRadius: 0,\n ...(isDelete && {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif !important',\n }),\n}));\n\nconst StyledLatexButtonWrapper = styled(Button)(({ category }) => ({\n textTransform: 'none',\n padding: 0,\n margin: 0,\n fontSize: '110% !important',\n minWidth: 'auto',\n borderRadius: 0,\n ...buttonBackground(category),\n}));\n\nconst StyledIconButton = styled(IconButton)(({ category }) => ({\n minWidth: 'auto',\n ...buttonBackground(category),\n borderRadius: 0,\n '& .icon': {\n height: '30px',\n },\n}));\n\nexport class KeyPad extends React.Component {\n static propTypes = {\n className: PropTypes.string,\n controlledKeypadMode: PropTypes.bool,\n baseSet: PropTypes.array,\n additionalKeys: PropTypes.array,\n layoutForKeyPad: PropTypes.object,\n onPress: PropTypes.func.isRequired,\n onFocus: PropTypes.func,\n noDecimal: PropTypes.bool,\n setKeypadInteraction: PropTypes.func,\n mode: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n };\n\n static defaultProps = {\n baseSet: baseSet,\n noDecimal: false,\n };\n\n constructor(props) {\n super(props);\n this.keypadRef = React.createRef();\n }\n\n componentDidMount() {\n // Ensure MathLive is available for the LaTeX labels.\n loadMathLive();\n\n const keyPadElement = this.keypadRef?.current;\n const mainContainer = keyPadElement?.closest('.main-container');\n const currentToolbar = keyPadElement?.closest('.pie-toolbar');\n\n // need only for math keyboard so we need also controlledKeypadMode\n if (this.props.controlledKeypadMode && mainContainer && currentToolbar) {\n const mainContainerPosition = mainContainer.getBoundingClientRect();\n const currentToolbarPosition = currentToolbar.getBoundingClientRect();\n const difference =\n mainContainerPosition.top +\n mainContainerPosition.height -\n (currentToolbarPosition.top + currentToolbarPosition.height);\n\n if (difference < 0) {\n const totalHeight = mainContainerPosition.height + mainContainerPosition.top - difference;\n\n mainContainer.style.height = `${totalHeight}px`;\n }\n }\n\n if (keyPadElement) {\n keyPadElement.addEventListener('touchstart', this.handleKeypadInteraction, true);\n keyPadElement.addEventListener('mousedown', this.handleKeypadInteraction, true);\n }\n }\n\n componentWillUnmount() {\n const keyPadElement = this.keypadRef?.current;\n\n if (this.props.controlledKeypadMode && keyPadElement) {\n const mainContainer = keyPadElement.closest('.main-container');\n\n if (mainContainer) {\n mainContainer.style.height = 'unset';\n }\n }\n\n if (keyPadElement) {\n keyPadElement.removeEventListener('touchstart', this.handleKeypadInteraction, true);\n keyPadElement.removeEventListener('mousedown', this.handleKeypadInteraction, true);\n }\n }\n\n handleKeypadInteraction = () => {\n if (this.props.setKeypadInteraction) {\n this.props.setKeypadInteraction(true);\n }\n };\n\n buttonClick = (key) => {\n log('[buttonClick]', key);\n this.props.onPress(key);\n };\n\n flowKeys = (base, extras) => flatten([...sortKeys(base), ...sortKeys(extras)]);\n\n keyIsNotAllowed = (key) => {\n const { noDecimal } = this.props;\n\n return !!(\n ((key.write === '.' && key.label === '.') || (key.write === ',' && key.label === ',')) &&\n noDecimal\n );\n };\n\n render() {\n const { className, baseSet: base, additionalKeys, layoutForKeyPad, onFocus, mode } = this.props;\n\n const noBaseSet = ['non-negative-integers', 'integers', 'decimals', 'fractions', 'item-authoring', 'language'];\n const keysWithoutBaseSet = noBaseSet.includes(mode);\n const allKeys = keysWithoutBaseSet\n ? this.flowKeys([], additionalKeys || [])\n : this.flowKeys(base, additionalKeys || []);\n\n const shift = allKeys.length % 5 ? 1 : 0;\n const style = {\n gridTemplateColumns: `repeat(${Math.floor(allKeys.length / 5) + shift}, minmax(min-content, 150px))`,\n ...createCustomLayout(layoutForKeyPad),\n };\n\n return (\n <KeyPadContainer\n ref={this.keypadRef}\n className={[className, mode].filter(Boolean).join(' ')}\n style={style}\n onFocus={onFocus}\n >\n {allKeys.map((k, index) => {\n if (!k) {\n return <span key={`empty-${index}`} />;\n }\n\n const key = `${k.label || k.latex || k.command}-${index}`;\n const category = !keysWithoutBaseSet ? k.category : undefined;\n const extra = { ...(k.actions || {}), ...(k.extraProps || {}) };\n const onClick = this.buttonClick.bind(this, k);\n const disabled = this.keyIsNotAllowed(k);\n const ariaLabel = k.ariaLabel ? k.ariaLabel : k.name || k.label;\n\n if (k.latex) {\n return (\n <StyledLatexButtonWrapper\n key={key}\n onClick={onClick}\n disabled={disabled}\n category={category}\n aria-label={ariaLabel}\n {...extra}\n >\n <LatexLabel latex={k.latex} />\n </StyledLatexButtonWrapper>\n );\n }\n\n if (k.label) {\n return (\n <StyledButton\n key={key}\n onClick={onClick}\n disabled={disabled}\n category={category}\n isDelete={k.label === '⌫'}\n isComma={k.label === ','}\n isDot={k.label === '.'}\n aria-label={ariaLabel}\n {...extra}\n >\n {k.label}\n </StyledButton>\n );\n }\n\n const Icon = k.icon ? k.icon : 'div';\n\n return (\n <StyledIconButton\n key={key}\n tabIndex={'-1'}\n onClick={onClick}\n disabled={disabled}\n category={category}\n size=\"large\"\n {...extra}\n >\n <Icon className=\"icon\" />\n </StyledIconButton>\n );\n })}\n </KeyPadContainer>\n );\n }\n}\n\nexport default KeyPad;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_propTypes","_Button","_IconButton","_styles","_debug","_lodashEs","_renderUi","_keys","_keysLayout","_commonStyles","_mathliveInstance","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","Reflect","construct","constructor","Boolean","prototype","valueOf","call","log","debug","LabelHolder","styled","pointerEvents","textTransform","color","text","display","alignItems","justifyContent","lineHeight","backgroundColor","keypadEmptyPlaceholder","undefined","LatexLabel","exports","_React$Component","props","_this","_classCallCheck2","state","markup","latexToMarkup","latex","_inherits2","_createClass2","key","value","_componentDidMount","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_context","prev","next","loadMathLive","unmounted","setState","stop","componentDidMount","componentDidUpdate","prevProps","componentWillUnmount","render","createElement","dangerouslySetInnerHTML","__html","React","Component","PropTypes","string","isRequired","createCustomLayout","layoutObj","gridTemplateColumns","concat","columns","gridTemplateRows","rows","gridAutoFlow","KeyPadContainer","commonKeyboardStyles","width","gridRowGap","gridColumnGap","fontFamily","buttonBackground","category","keypadButtonOperator","keypadButton","keypadButtonOperatorHover","keypadButtonHover","StyledButton","Button","_ref","isDelete","isComma","isDot","minWidth","fontSize","borderRadius","StyledLatexButtonWrapper","_ref2","padding","margin","StyledIconButton","IconButton","_ref3","height","KeyPad","_React$Component2","_this2","setKeypadInteraction","onPress","base","extras","flatten","_toConsumableArray2","sortKeys","noDecimal","write","label","keypadRef","createRef","_this$keypadRef","keyPadElement","current","mainContainer","closest","currentToolbar","controlledKeypadMode","mainContainerPosition","getBoundingClientRect","currentToolbarPosition","difference","top","totalHeight","style","addEventListener","handleKeypadInteraction","_this$keypadRef2","removeEventListener","_this3","_this$props","className","baseSet","additionalKeys","layoutForKeyPad","onFocus","mode","noBaseSet","keysWithoutBaseSet","includes","allKeys","flowKeys","shift","Math","floor","ref","join","map","k","index","command","extra","actions","extraProps","onClick","buttonClick","bind","disabled","keyIsNotAllowed","ariaLabel","name","_extends2","Icon","icon","tabIndex","size","bool","array","object","func","oneOfType","number","_default"],"sources":["../../src/keypad/index.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Button from '@mui/material/Button';\nimport IconButton from '@mui/material/IconButton';\nimport { styled } from '@mui/material/styles';\nimport debug from 'debug';\nimport { flatten } from 'lodash-es';\nimport { color } from '@pie-lib/render-ui';\n\nimport { baseSet } from '../keys';\nimport { sortKeys } from './keys-layout';\nimport { commonKeyboardStyles } from '../mf/common-styles';\nimport { loadMathLive, latexToMarkup } from '../mathlive-instance';\n\nconst log = debug('pie-lib:math-input-mathlive:keypad');\n\n/**\n * A LaTeX keypad label.\n *\n * The MathQuill implementation rendered every LaTeX label as its own\n * `MQ.StaticMath` instance. Here each label is static HTML produced once by\n * `convertLatexToMarkup`, so a 40-key keypad no longer creates 40 live math\n * instances.\n */\n// The `color.*()` helpers must be called lazily, inside the styled callback.\n// Evaluating them in a plain object literal runs them at module load, which\n// breaks any consumer that mocks a subset of @pie-lib/render-ui.\nconst LabelHolder = styled('span')(() => ({\n pointerEvents: 'none',\n textTransform: 'none',\n color: color.text(),\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n lineHeight: 1,\n // Answer-block / empty-slot boxes inside a label.\n '& .ML__placeholder': {\n backgroundColor: color.keypadEmptyPlaceholder ? color.keypadEmptyPlaceholder() : undefined,\n },\n}));\n\nexport class LatexLabel extends React.Component {\n static propTypes = {\n latex: PropTypes.string.isRequired,\n };\n\n constructor(props) {\n super(props);\n this.state = { markup: latexToMarkup(props.latex) };\n }\n\n async componentDidMount() {\n // MathLive may not have finished loading when the keypad first mounts.\n if (!this.state.markup) {\n await loadMathLive();\n\n if (!this.unmounted) {\n this.setState({ markup: latexToMarkup(this.props.latex) });\n }\n }\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.latex !== this.props.latex) {\n this.setState({ markup: latexToMarkup(this.props.latex) });\n }\n }\n\n componentWillUnmount() {\n this.unmounted = true;\n }\n\n render() {\n const { markup } = this.state;\n\n // Fall back to the raw latex so a button is never blank.\n return markup ? (\n // eslint-disable-next-line react/no-danger\n <LabelHolder dangerouslySetInnerHTML={{ __html: markup }} />\n ) : (\n <LabelHolder>{this.props.latex}</LabelHolder>\n );\n }\n}\n\nconst createCustomLayout = (layoutObj) => {\n if (layoutObj) {\n return {\n gridTemplateColumns: `repeat(${layoutObj.columns}, minmax(min-content, 150px))`,\n gridTemplateRows: `repeat(${layoutObj.rows}, minmax(40px, 60px))`,\n gridAutoFlow: 'initial',\n };\n }\n\n return {};\n};\n\nconst KeyPadContainer = styled('div')(() => ({\n ...commonKeyboardStyles,\n width: '100%',\n display: 'grid',\n gridTemplateRows: 'repeat(5, minmax(40px, 60px))',\n gridRowGap: '0px',\n gridColumnGap: '0px',\n gridAutoFlow: 'column',\n '&.character': {\n textTransform: 'initial !important',\n gridTemplateRows: 'repeat(5, minmax(40px, 50px)) !important',\n },\n '&.language': {\n gridTemplateRows: 'repeat(4, minmax(40px, 50px)) !important',\n '& *': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif !important',\n },\n },\n}));\n\nconst buttonBackground = (category) => ({\n backgroundColor: category === 'operators' ? color.keypadButtonOperator() : color.keypadButton(),\n '&:hover': {\n backgroundColor: category === 'operators' ? color.keypadButtonOperatorHover() : color.keypadButtonHover(),\n },\n});\n\nconst StyledButton = styled(Button)(({ category, isDelete, isComma, isDot }) => ({\n minWidth: 'auto',\n textTransform: 'none',\n fontSize: isComma || isDot ? '200% !important' : '140% !important',\n lineHeight: isComma || isDot ? '100%' : 'normal',\n color: color.text(),\n ...buttonBackground(category),\n borderRadius: 0,\n ...(isDelete && {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif !important',\n }),\n}));\n\nconst StyledLatexButtonWrapper = styled(Button)(({ category }) => ({\n textTransform: 'none',\n padding: 0,\n margin: 0,\n fontSize: '110% !important',\n minWidth: 'auto',\n borderRadius: 0,\n ...buttonBackground(category),\n}));\n\nconst StyledIconButton = styled(IconButton)(({ category }) => ({\n minWidth: 'auto',\n ...buttonBackground(category),\n borderRadius: 0,\n '& .icon': {\n height: '30px',\n },\n}));\n\nexport class KeyPad extends React.Component {\n static propTypes = {\n className: PropTypes.string,\n controlledKeypadMode: PropTypes.bool,\n baseSet: PropTypes.array,\n additionalKeys: PropTypes.array,\n layoutForKeyPad: PropTypes.object,\n onPress: PropTypes.func.isRequired,\n onFocus: PropTypes.func,\n noDecimal: PropTypes.bool,\n setKeypadInteraction: PropTypes.func,\n mode: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n };\n\n static defaultProps = {\n baseSet: baseSet,\n noDecimal: false,\n };\n\n constructor(props) {\n super(props);\n this.keypadRef = React.createRef();\n }\n\n componentDidMount() {\n // Ensure MathLive is available for the LaTeX labels.\n loadMathLive();\n\n const keyPadElement = this.keypadRef?.current;\n const mainContainer = keyPadElement?.closest('.main-container');\n const currentToolbar = keyPadElement?.closest('.pie-toolbar');\n\n // need only for math keyboard so we need also controlledKeypadMode\n if (this.props.controlledKeypadMode && mainContainer && currentToolbar) {\n const mainContainerPosition = mainContainer.getBoundingClientRect();\n const currentToolbarPosition = currentToolbar.getBoundingClientRect();\n const difference =\n mainContainerPosition.top +\n mainContainerPosition.height -\n (currentToolbarPosition.top + currentToolbarPosition.height);\n\n if (difference < 0) {\n const totalHeight = mainContainerPosition.height + mainContainerPosition.top - difference;\n\n mainContainer.style.height = `${totalHeight}px`;\n }\n }\n\n if (keyPadElement) {\n keyPadElement.addEventListener('touchstart', this.handleKeypadInteraction, true);\n keyPadElement.addEventListener('mousedown', this.handleKeypadInteraction, true);\n }\n }\n\n componentWillUnmount() {\n const keyPadElement = this.keypadRef?.current;\n\n if (this.props.controlledKeypadMode && keyPadElement) {\n const mainContainer = keyPadElement.closest('.main-container');\n\n if (mainContainer) {\n mainContainer.style.height = 'unset';\n }\n }\n\n if (keyPadElement) {\n keyPadElement.removeEventListener('touchstart', this.handleKeypadInteraction, true);\n keyPadElement.removeEventListener('mousedown', this.handleKeypadInteraction, true);\n }\n }\n\n handleKeypadInteraction = () => {\n if (this.props.setKeypadInteraction) {\n this.props.setKeypadInteraction(true);\n }\n };\n\n buttonClick = (key) => {\n log('[buttonClick]', key);\n this.props.onPress(key);\n };\n\n flowKeys = (base, extras) => flatten([...sortKeys(base), ...sortKeys(extras)]);\n\n keyIsNotAllowed = (key) => {\n const { noDecimal } = this.props;\n\n return !!(((key.write === '.' && key.label === '.') || (key.write === ',' && key.label === ',')) && noDecimal);\n };\n\n render() {\n const { className, baseSet: base, additionalKeys, layoutForKeyPad, onFocus, mode } = this.props;\n\n const noBaseSet = ['non-negative-integers', 'integers', 'decimals', 'fractions', 'item-authoring', 'language'];\n const keysWithoutBaseSet = noBaseSet.includes(mode);\n const allKeys = keysWithoutBaseSet\n ? this.flowKeys([], additionalKeys || [])\n : this.flowKeys(base, additionalKeys || []);\n\n const shift = allKeys.length % 5 ? 1 : 0;\n const style = {\n gridTemplateColumns: `repeat(${Math.floor(allKeys.length / 5) + shift}, minmax(min-content, 150px))`,\n ...createCustomLayout(layoutForKeyPad),\n };\n\n return (\n <KeyPadContainer\n ref={this.keypadRef}\n className={[className, mode].filter(Boolean).join(' ')}\n style={style}\n onFocus={onFocus}\n >\n {allKeys.map((k, index) => {\n if (!k) {\n return <span key={`empty-${index}`} />;\n }\n\n const key = `${k.label || k.latex || k.command}-${index}`;\n const category = !keysWithoutBaseSet ? k.category : undefined;\n const extra = { ...(k.actions || {}), ...(k.extraProps || {}) };\n const onClick = this.buttonClick.bind(this, k);\n const disabled = this.keyIsNotAllowed(k);\n const ariaLabel = k.ariaLabel ? k.ariaLabel : k.name || k.label;\n\n if (k.latex) {\n return (\n <StyledLatexButtonWrapper\n key={key}\n onClick={onClick}\n disabled={disabled}\n category={category}\n aria-label={ariaLabel}\n {...extra}\n >\n <LatexLabel latex={k.latex} />\n </StyledLatexButtonWrapper>\n );\n }\n\n if (k.label) {\n return (\n <StyledButton\n key={key}\n onClick={onClick}\n disabled={disabled}\n category={category}\n isDelete={k.label === '⌫'}\n isComma={k.label === ','}\n isDot={k.label === '.'}\n aria-label={ariaLabel}\n {...extra}\n >\n {k.label}\n </StyledButton>\n );\n }\n\n const Icon = k.icon ? k.icon : 'div';\n\n return (\n <StyledIconButton\n key={key}\n tabIndex={'-1'}\n onClick={onClick}\n disabled={disabled}\n category={category}\n size=\"large\"\n {...extra}\n >\n <Icon className=\"icon\" />\n </StyledIconButton>\n );\n })}\n </KeyPadContainer>\n );\n }\n}\n\nexport default KeyPad;\n"],"mappings":"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","ignoreList":[]}
package/lib/mf/input.js CHANGED
@@ -163,6 +163,56 @@ var Input = exports.Input = /*#__PURE__*/function (_React$Component) {
163
163
  function latex() {
164
164
  return this.mathField ? (0, _latexBridge.fromMathLive)(this.mathField.getValue('latex')) : '';
165
165
  }
166
+
167
+ /**
168
+ * The underlying `<math-field>` element, or undefined until MathLive has
169
+ * finished loading. Exposed for callers that need the real element.
170
+ *
171
+ * NOTE: this is NOT a MathQuill field. Code written against
172
+ * `@pie-lib/math-input` often did `input.mathField.latex()`; that shape is
173
+ * provided by `mqCompat` below, and `latex()` on this component is the
174
+ * supported replacement.
175
+ */
176
+ }, {
177
+ key: "element",
178
+ get: function get() {
179
+ return this.mathField;
180
+ }
181
+
182
+ /**
183
+ * MathQuill-shaped facade, so existing `input.mathField.latex()` /
184
+ * `.el()` call sites keep working instead of throwing. Only the members that
185
+ * consumers actually used are provided; MathQuill internals such as
186
+ * `__controller` have no MathLive equivalent and are deliberately absent.
187
+ */
188
+ }, {
189
+ key: "mqCompat",
190
+ get: function get() {
191
+ var _this2 = this;
192
+ return {
193
+ latex: function latex(v) {
194
+ return v === undefined ? _this2.latex() : (_this2.setLatex(v), v);
195
+ },
196
+ el: function el() {
197
+ return _this2.mathField;
198
+ },
199
+ focus: function focus() {
200
+ return _this2.focus();
201
+ },
202
+ blur: function blur() {
203
+ return _this2.blur();
204
+ }
205
+ };
206
+ }
207
+
208
+ /** Programmatically replace the content. */
209
+ }, {
210
+ key: "setLatex",
211
+ value: function setLatex(v) {
212
+ if (this.mathField) {
213
+ this.mathField.value = (0, _latexBridge.toMathLive)(v || '');
214
+ }
215
+ }
166
216
  }, {
167
217
  key: "clear",
168
218
  value: function clear() {
@@ -184,33 +234,52 @@ var Input = exports.Input = /*#__PURE__*/function (_React$Component) {
184
234
  this.mathField && this.mathField.focus();
185
235
  }
186
236
 
187
- /** MathQuill `cmd()` equivalent. */
237
+ /**
238
+ * MathQuill `cmd()` equivalent.
239
+ *
240
+ * Callers pass MathQuill command names (`'\\frac'`, `'\\sqrt'`, `'^'`, or an
241
+ * array of them). Those must be expanded into latex with `#?` placeholders,
242
+ * otherwise inserting a bare `\frac` produces no editable slots.
243
+ */
188
244
  }, {
189
245
  key: "command",
190
246
  value: function command(v) {
191
- var _this2 = this;
192
247
  log('command: ', v);
193
248
  if (!this.mathField) {
194
249
  return '';
195
250
  }
196
- var values = Array.isArray(v) ? v : [v];
197
- values.forEach(function (vv) {
198
- return _this2.mathField.insert(vv, {
251
+ var action = (0, _latexBridge.keyToAction)({
252
+ command: v
253
+ });
254
+ if (action) {
255
+ this.mathField.insert(action.value, {
199
256
  focus: true
200
257
  });
201
- });
258
+ }
202
259
  this.mathField.focus();
203
260
  return this.latex();
204
261
  }
205
262
 
206
- /** MathQuill `keystroke()` equivalent - takes a MathLive selector. */
263
+ /**
264
+ * MathQuill `keystroke()` equivalent.
265
+ *
266
+ * Accepts MathQuill keystroke names (`'Left'`, `'Right'`, `'Backspace'`) as
267
+ * the keypad emits them, and passes anything else through as a MathLive
268
+ * selector.
269
+ */
207
270
  }, {
208
271
  key: "keystroke",
209
- value: function keystroke(selector) {
272
+ value: function keystroke(v) {
273
+ log('keystroke: ', v);
210
274
  if (!this.mathField) {
211
275
  return '';
212
276
  }
213
- this.mathField.executeCommand(selector);
277
+ var selector = _latexBridge.KEYSTROKES[v] || v;
278
+ try {
279
+ this.mathField.executeCommand(selector);
280
+ } catch (e) {
281
+ log('unknown keystroke/selector "%s": %s', v, e && e.message);
282
+ }
214
283
  this.mathField.focus();
215
284
  return this.latex();
216
285
  }
@@ -1 +1 @@
1
- {"version":3,"file":"input.js","names":["_react","_interopRequireDefault","require","_propTypes","_styles","_debug","_mathliveInstance","_latexBridge","_callSuper","t","o","e","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","Reflect","construct","constructor","apply","Boolean","prototype","valueOf","call","log","debug","Holder","styled","display","width","Input","exports","_React$Component","props","_this","_classCallCheck2","_defineProperty2","onChange","mathField","latex","fromMathLive","getValue","lastEmitted","event","key","preventDefault","holderRef","React","createRef","undefined","_inherits2","_createClass2","value","_componentDidMount","_asyncToGenerator2","_regenerator","mark","_callee","_this$setState","ml","wrap","_context","prev","next","loadMathLive","sent","current","abrupt","MathfieldElement","macros","getMacros","toMathLive","readOnly","mathVirtualKeyboardPolicy","addEventListener","onInputEdit","appendChild","innerRef","setState","stop","componentDidMount","arguments","componentDidUpdate","prevProps","_this$props","componentWillUnmount","removeEventListener","remove","clear","blur","focus","command","v","_this2","values","Array","isArray","forEach","vv","insert","keystroke","selector","executeCommand","write","_this3","render","_this$props2","className","onFocus","onBlur","onClick","createElement","onKeyDown","ref","Component","PropTypes","string","func","bool","_default"],"sources":["../../src/mf/input.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { styled } from '@mui/material/styles';\nimport debug from 'debug';\nimport { loadMathLive, getMacros } from '../mathlive-instance';\nimport { toMathLive, fromMathLive } from '../latex-bridge';\n\nconst log = debug('pie-lib:math-input-mathlive:input');\n\nconst Holder = styled('span')({\n display: 'inline-block',\n '& math-field': {\n display: 'block',\n width: '100%',\n },\n // MathLive ships its own virtual keyboard toggle; pie supplies its own keypad.\n '& math-field::part(virtual-keyboard-toggle)': {\n display: 'none',\n },\n '& math-field::part(menu-toggle)': {\n display: 'none',\n },\n});\n\n/**\n * Editable math field. Drop-in replacement for @pie-lib/math-input's `mq.Input`.\n *\n * Keeps the same imperative surface used by MathInput's keypad\n * (`write`, `command`, `keystroke`, `clear`, `focus`, `blur`) so callers do not\n * change, and the same `latex` / `onChange` props.\n */\nexport class Input extends React.Component {\n static propTypes = {\n className: PropTypes.string,\n latex: PropTypes.string,\n onChange: PropTypes.func,\n onClick: PropTypes.func,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n readOnly: PropTypes.bool,\n innerRef: PropTypes.func,\n };\n\n constructor(props) {\n super(props);\n this.holderRef = React.createRef();\n // Tracks the last latex we emitted, so prop echoes don't reset the cursor.\n this.lastEmitted = undefined;\n }\n\n async componentDidMount() {\n const ml = await loadMathLive();\n\n if (!ml || !this.holderRef.current) {\n return;\n }\n\n this.mathField = new ml.MathfieldElement({ macros: getMacros() });\n this.mathField.value = toMathLive(this.props.latex || '');\n\n if (this.props.readOnly) {\n this.mathField.readOnly = true;\n }\n\n // pie drives input through its own keypad, so suppress MathLive's.\n this.mathField.mathVirtualKeyboardPolicy = 'manual';\n\n this.mathField.addEventListener('input', this.onInputEdit);\n this.holderRef.current.appendChild(this.mathField);\n\n if (this.props.innerRef) {\n this.props.innerRef(this);\n }\n\n this.setState?.({});\n }\n\n componentDidUpdate(prevProps) {\n if (!this.mathField) {\n return;\n }\n\n const { latex, readOnly } = this.props;\n\n if (readOnly !== prevProps.readOnly) {\n this.mathField.readOnly = !!readOnly;\n }\n\n // Only push the prop back into the field when it genuinely differs from\n // what the field already holds. This is the analogue of the old\n // shouldComponentUpdate latex-equality guard and prevents cursor thrash.\n if (latex !== undefined && latex !== null && latex !== this.lastEmitted) {\n const next = toMathLive(latex);\n\n if (next !== this.mathField.value) {\n this.mathField.value = next;\n }\n }\n }\n\n componentWillUnmount() {\n if (this.mathField) {\n this.mathField.removeEventListener('input', this.onInputEdit);\n this.mathField.remove();\n this.mathField = undefined;\n }\n\n if (this.props.innerRef) {\n this.props.innerRef(null);\n }\n }\n\n onInputEdit = () => {\n const { onChange } = this.props;\n\n if (!this.mathField) {\n return;\n }\n\n const latex = fromMathLive(this.mathField.getValue('latex'));\n\n this.lastEmitted = latex;\n\n if (onChange) {\n onChange(latex);\n }\n };\n\n /** Current latex, in stored (MathQuill-compatible) form. */\n latex() {\n return this.mathField ? fromMathLive(this.mathField.getValue('latex')) : '';\n }\n\n clear() {\n if (this.mathField) {\n this.mathField.value = '';\n }\n\n return '';\n }\n\n blur() {\n log('blur mathfield');\n this.mathField && this.mathField.blur();\n }\n\n focus() {\n log('focus mathfield...');\n this.mathField && this.mathField.focus();\n }\n\n /** MathQuill `cmd()` equivalent. */\n command(v) {\n log('command: ', v);\n\n if (!this.mathField) {\n return '';\n }\n\n const values = Array.isArray(v) ? v : [v];\n\n values.forEach((vv) => this.mathField.insert(vv, { focus: true }));\n this.mathField.focus();\n\n return this.latex();\n }\n\n /** MathQuill `keystroke()` equivalent - takes a MathLive selector. */\n keystroke(selector) {\n if (!this.mathField) {\n return '';\n }\n\n this.mathField.executeCommand(selector);\n this.mathField.focus();\n\n return this.latex();\n }\n\n /** MathQuill `write()` equivalent. Accepts an array, as `cmd()` did. */\n write(v) {\n log('write: ', v);\n\n if (!this.mathField) {\n return '';\n }\n\n const values = Array.isArray(v) ? v : [v];\n\n values.forEach((vv) => this.mathField.insert(vv, { focus: true }));\n this.mathField.focus();\n\n return this.latex();\n }\n\n /**\n * Enter must not insert a line break: math input is single-expression, and\n * the MathQuill version swallowed charCode 13 for the same reason. Newlines\n * are authored explicitly through the newLine embed, not the Enter key.\n */\n onKeyDown = (event) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n }\n };\n\n render() {\n const { className, onFocus, onBlur, onClick } = this.props;\n\n return (\n <Holder\n className={className}\n onFocus={onFocus}\n onBlur={onBlur}\n onClick={onClick}\n onKeyDown={this.onKeyDown}\n ref={this.holderRef}\n />\n );\n }\n}\n\nexport default Input;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"input.js","names":["_react","_interopRequireDefault","require","_propTypes","_styles","_debug","_mathliveInstance","_latexBridge","_callSuper","t","o","e","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","Reflect","construct","constructor","apply","Boolean","prototype","valueOf","call","log","debug","Holder","styled","display","width","Input","exports","_React$Component","props","_this","_classCallCheck2","_defineProperty2","onChange","mathField","latex","fromMathLive","getValue","lastEmitted","event","key","preventDefault","holderRef","React","createRef","undefined","_inherits2","_createClass2","value","_componentDidMount","_asyncToGenerator2","_regenerator","mark","_callee","_this$setState","ml","wrap","_context","prev","next","loadMathLive","sent","current","abrupt","MathfieldElement","macros","getMacros","toMathLive","readOnly","mathVirtualKeyboardPolicy","addEventListener","onInputEdit","appendChild","innerRef","setState","stop","componentDidMount","arguments","componentDidUpdate","prevProps","_this$props","componentWillUnmount","removeEventListener","remove","get","_this2","v","setLatex","el","focus","blur","clear","command","action","keyToAction","insert","keystroke","selector","KEYSTROKES","executeCommand","message","write","_this3","values","Array","isArray","forEach","vv","render","_this$props2","className","onFocus","onBlur","onClick","createElement","onKeyDown","ref","Component","PropTypes","string","func","bool","_default"],"sources":["../../src/mf/input.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { styled } from '@mui/material/styles';\nimport debug from 'debug';\nimport { loadMathLive, getMacros } from '../mathlive-instance';\nimport { toMathLive, fromMathLive, keyToAction, KEYSTROKES } from '../latex-bridge';\n\nconst log = debug('pie-lib:math-input-mathlive:input');\n\nconst Holder = styled('span')({\n display: 'inline-block',\n '& math-field': {\n display: 'block',\n width: '100%',\n },\n // MathLive ships its own virtual keyboard toggle; pie supplies its own keypad.\n '& math-field::part(virtual-keyboard-toggle)': {\n display: 'none',\n },\n '& math-field::part(menu-toggle)': {\n display: 'none',\n },\n});\n\n/**\n * Editable math field. Drop-in replacement for @pie-lib/math-input's `mq.Input`.\n *\n * Keeps the same imperative surface used by MathInput's keypad\n * (`write`, `command`, `keystroke`, `clear`, `focus`, `blur`) so callers do not\n * change, and the same `latex` / `onChange` props.\n */\nexport class Input extends React.Component {\n static propTypes = {\n className: PropTypes.string,\n latex: PropTypes.string,\n onChange: PropTypes.func,\n onClick: PropTypes.func,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n readOnly: PropTypes.bool,\n innerRef: PropTypes.func,\n };\n\n constructor(props) {\n super(props);\n this.holderRef = React.createRef();\n // Tracks the last latex we emitted, so prop echoes don't reset the cursor.\n this.lastEmitted = undefined;\n }\n\n async componentDidMount() {\n const ml = await loadMathLive();\n\n if (!ml || !this.holderRef.current) {\n return;\n }\n\n this.mathField = new ml.MathfieldElement({ macros: getMacros() });\n this.mathField.value = toMathLive(this.props.latex || '');\n\n if (this.props.readOnly) {\n this.mathField.readOnly = true;\n }\n\n // pie drives input through its own keypad, so suppress MathLive's.\n this.mathField.mathVirtualKeyboardPolicy = 'manual';\n\n this.mathField.addEventListener('input', this.onInputEdit);\n this.holderRef.current.appendChild(this.mathField);\n\n if (this.props.innerRef) {\n this.props.innerRef(this);\n }\n\n this.setState?.({});\n }\n\n componentDidUpdate(prevProps) {\n if (!this.mathField) {\n return;\n }\n\n const { latex, readOnly } = this.props;\n\n if (readOnly !== prevProps.readOnly) {\n this.mathField.readOnly = !!readOnly;\n }\n\n // Only push the prop back into the field when it genuinely differs from\n // what the field already holds. This is the analogue of the old\n // shouldComponentUpdate latex-equality guard and prevents cursor thrash.\n if (latex !== undefined && latex !== null && latex !== this.lastEmitted) {\n const next = toMathLive(latex);\n\n if (next !== this.mathField.value) {\n this.mathField.value = next;\n }\n }\n }\n\n componentWillUnmount() {\n if (this.mathField) {\n this.mathField.removeEventListener('input', this.onInputEdit);\n this.mathField.remove();\n this.mathField = undefined;\n }\n\n if (this.props.innerRef) {\n this.props.innerRef(null);\n }\n }\n\n onInputEdit = () => {\n const { onChange } = this.props;\n\n if (!this.mathField) {\n return;\n }\n\n const latex = fromMathLive(this.mathField.getValue('latex'));\n\n this.lastEmitted = latex;\n\n if (onChange) {\n onChange(latex);\n }\n };\n\n /** Current latex, in stored (MathQuill-compatible) form. */\n latex() {\n return this.mathField ? fromMathLive(this.mathField.getValue('latex')) : '';\n }\n\n /**\n * The underlying `<math-field>` element, or undefined until MathLive has\n * finished loading. Exposed for callers that need the real element.\n *\n * NOTE: this is NOT a MathQuill field. Code written against\n * `@pie-lib/math-input` often did `input.mathField.latex()`; that shape is\n * provided by `mqCompat` below, and `latex()` on this component is the\n * supported replacement.\n */\n get element() {\n return this.mathField;\n }\n\n /**\n * MathQuill-shaped facade, so existing `input.mathField.latex()` /\n * `.el()` call sites keep working instead of throwing. Only the members that\n * consumers actually used are provided; MathQuill internals such as\n * `__controller` have no MathLive equivalent and are deliberately absent.\n */\n get mqCompat() {\n return {\n latex: (v) => (v === undefined ? this.latex() : (this.setLatex(v), v)),\n el: () => this.mathField,\n focus: () => this.focus(),\n blur: () => this.blur(),\n };\n }\n\n /** Programmatically replace the content. */\n setLatex(v) {\n if (this.mathField) {\n this.mathField.value = toMathLive(v || '');\n }\n }\n\n clear() {\n if (this.mathField) {\n this.mathField.value = '';\n }\n\n return '';\n }\n\n blur() {\n log('blur mathfield');\n this.mathField && this.mathField.blur();\n }\n\n focus() {\n log('focus mathfield...');\n this.mathField && this.mathField.focus();\n }\n\n /**\n * MathQuill `cmd()` equivalent.\n *\n * Callers pass MathQuill command names (`'\\\\frac'`, `'\\\\sqrt'`, `'^'`, or an\n * array of them). Those must be expanded into latex with `#?` placeholders,\n * otherwise inserting a bare `\\frac` produces no editable slots.\n */\n command(v) {\n log('command: ', v);\n\n if (!this.mathField) {\n return '';\n }\n\n const action = keyToAction({ command: v });\n\n if (action) {\n this.mathField.insert(action.value, { focus: true });\n }\n\n this.mathField.focus();\n\n return this.latex();\n }\n\n /**\n * MathQuill `keystroke()` equivalent.\n *\n * Accepts MathQuill keystroke names (`'Left'`, `'Right'`, `'Backspace'`) as\n * the keypad emits them, and passes anything else through as a MathLive\n * selector.\n */\n keystroke(v) {\n log('keystroke: ', v);\n\n if (!this.mathField) {\n return '';\n }\n\n const selector = KEYSTROKES[v] || v;\n\n try {\n this.mathField.executeCommand(selector);\n } catch (e) {\n log('unknown keystroke/selector \"%s\": %s', v, e && e.message);\n }\n\n this.mathField.focus();\n\n return this.latex();\n }\n\n /** MathQuill `write()` equivalent. Accepts an array, as `cmd()` did. */\n write(v) {\n log('write: ', v);\n\n if (!this.mathField) {\n return '';\n }\n\n const values = Array.isArray(v) ? v : [v];\n\n values.forEach((vv) => this.mathField.insert(vv, { focus: true }));\n this.mathField.focus();\n\n return this.latex();\n }\n\n /**\n * Enter must not insert a line break: math input is single-expression, and\n * the MathQuill version swallowed charCode 13 for the same reason. Newlines\n * are authored explicitly through the newLine embed, not the Enter key.\n */\n onKeyDown = (event) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n }\n };\n\n render() {\n const { className, onFocus, onBlur, onClick } = this.props;\n\n return (\n <Holder\n className={className}\n onFocus={onFocus}\n onBlur={onBlur}\n onClick={onClick}\n onKeyDown={this.onKeyDown}\n ref={this.holderRef}\n />\n );\n }\n}\n\nexport default Input;\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "1.0.0",
6
+ "version": "1.0.2",
7
7
  "description": "MathLive-based math input (drop-in alternative to @pie-lib/math-input)",
8
8
  "main": "lib/index.js",
9
9
  "module": "src/index.jsx",
@@ -0,0 +1,112 @@
1
+ import React from 'react';
2
+ import { render } from '@testing-library/react';
3
+ import { styled } from '@mui/material/styles';
4
+
5
+ import { mq } from '../index';
6
+
7
+ /**
8
+ * Exercises the exact call patterns real consumers use against
9
+ * @pie-lib/math-input, to catch drop-in incompatibilities.
10
+ *
11
+ * Sources:
12
+ * - packages/math-toolbar/src/editor-and-pad.jsx:16,185
13
+ * - packages/math-toolbar/src/math-preview.jsx:8,156
14
+ * - packages/editable-html/src/plugins/respArea/math-templated/index.jsx:92
15
+ * - packages/editable-html-tip-tap/src/components/respArea/MathTemplated.jsx:111
16
+ */
17
+ describe('drop-in compatibility with @pie-lib/math-input consumers', () => {
18
+ describe('mq.CommonMqStyles destructuring', () => {
19
+ it('math-preview.jsx: { commonMqFontStyles, longdivStyles, supsubStyles }', () => {
20
+ const { commonMqFontStyles, longdivStyles, supsubStyles } = mq.CommonMqStyles;
21
+
22
+ expect(commonMqFontStyles).toBeDefined();
23
+ expect(longdivStyles).toBeDefined();
24
+ expect(supsubStyles).toBeDefined();
25
+ });
26
+
27
+ it('editor-and-pad.jsx: also { commonMqKeyboardStyles }', () => {
28
+ const { commonMqFontStyles, commonMqKeyboardStyles, longdivStyles, supsubStyles } = mq.CommonMqStyles;
29
+
30
+ expect(commonMqKeyboardStyles).toBeDefined();
31
+ // All four must be spreadable into an emotion style object.
32
+ expect(() => ({
33
+ ...commonMqFontStyles,
34
+ ...commonMqKeyboardStyles,
35
+ ...longdivStyles,
36
+ ...supsubStyles,
37
+ })).not.toThrow();
38
+ });
39
+
40
+ it('the destructured groups survive being spread into a styled component', () => {
41
+ const { commonMqFontStyles, longdivStyles, supsubStyles } = mq.CommonMqStyles;
42
+ const Styled = styled('div')({ ...commonMqFontStyles, ...longdivStyles, ...supsubStyles });
43
+
44
+ expect(() => render(<Styled />)).not.toThrow();
45
+ });
46
+ });
47
+
48
+ describe('mq.Input', () => {
49
+ it('editor-and-pad.jsx: styled(mq.Input) renders', () => {
50
+ const MathEditor = styled(mq.Input)(() => ({ width: '100%' }));
51
+
52
+ expect(() => render(<MathEditor latex="\\frac{1}{2}" onChange={() => {}} />)).not.toThrow();
53
+ });
54
+
55
+ it('accepts the className that styled() injects', () => {
56
+ const Styled = styled(mq.Input)({ padding: 4 });
57
+ const { container } = render(<Styled latex="x" onChange={() => {}} />);
58
+
59
+ expect(container.firstChild).toBeTruthy();
60
+ expect(container.firstChild.className).toBeTruthy();
61
+ });
62
+ });
63
+
64
+ describe('mq.Static', () => {
65
+ it('math-preview.jsx: <mq.Static latex onFocus onBlur />', () => {
66
+ expect(() => render(<mq.Static latex={'\\frac{1}{2}'} onFocus={() => {}} onBlur={() => {}} />)).not.toThrow();
67
+ });
68
+
69
+ it('math-templated respArea: <mq.Static latex={value} />', () => {
70
+ expect(() => render(<mq.Static latex={'x=1'} />)).not.toThrow();
71
+ });
72
+
73
+ it('renders answer-block latex (the templated-math case) without throwing', () => {
74
+ expect(() =>
75
+ render(<mq.Static latex={'x=\\MathQuillMathField[r1]{}'} onSubFieldChange={() => {}} />),
76
+ ).not.toThrow();
77
+ });
78
+
79
+ it('is styleable, as keypad labels were in math-input', () => {
80
+ const Styled = styled(mq.Static)({ pointerEvents: 'none' });
81
+
82
+ expect(() => render(<Styled latex={'\\pi'} />)).not.toThrow();
83
+ });
84
+ });
85
+
86
+ describe('surface parity', () => {
87
+ it('exposes exactly the names math-input exported', () => {
88
+ // eslint-disable-next-line global-require
89
+ const pkg = require('../index');
90
+
91
+ [
92
+ 'keysForGrade',
93
+ 'addBrackets',
94
+ 'removeBrackets',
95
+ 'keys',
96
+ 'HorizontalKeypad',
97
+ 'mq',
98
+ 'updateSpans',
99
+ 'registerEmbed',
100
+ 'applyStaticMath',
101
+ ].forEach((name) => {
102
+ expect(pkg[name]).toBeDefined();
103
+ });
104
+ });
105
+
106
+ it('mq exposes Input, Static and CommonMqStyles', () => {
107
+ ['Input', 'Static', 'CommonMqStyles'].forEach((name) => {
108
+ expect(mq[name]).toBeDefined();
109
+ });
110
+ });
111
+ });
112
+ });
@@ -0,0 +1,144 @@
1
+ import { KEYSTROKES, keyToAction } from '../latex-bridge';
2
+ import Input from '../mf/input';
3
+
4
+ /**
5
+ * The imperative surface that @pie-lib/math-toolbar drives
6
+ * (editor-and-pad.jsx: clear/command/keystroke/write/latex).
7
+ *
8
+ * These call the methods against a stub mathfield, because a real
9
+ * <math-field> needs a browser. What matters here is the *translation*:
10
+ * MathQuill-era arguments must become valid MathLive operations.
11
+ */
12
+ const stubField = () => {
13
+ const calls = { insert: [], executeCommand: [], focus: 0 };
14
+
15
+ return {
16
+ calls,
17
+ value: '',
18
+ getValue: () => '',
19
+ insert(v) {
20
+ calls.insert.push(v);
21
+ },
22
+ executeCommand(v) {
23
+ calls.executeCommand.push(v);
24
+ },
25
+ focus() {
26
+ calls.focus++;
27
+ },
28
+ blur() {},
29
+ };
30
+ };
31
+
32
+ const withField = () => {
33
+ const input = new Input({});
34
+ const f = stubField();
35
+
36
+ input.mathField = f;
37
+
38
+ return { input, f };
39
+ };
40
+
41
+ describe('Input imperative API (drives math-toolbar)', () => {
42
+ describe('keystroke', () => {
43
+ it('maps MathQuill keystroke names to MathLive selectors', () => {
44
+ const { input, f } = withField();
45
+
46
+ input.keystroke('Left');
47
+ input.keystroke('Right');
48
+ input.keystroke('Backspace');
49
+
50
+ expect(f.calls.executeCommand).toEqual(['moveToPreviousChar', 'moveToNextChar', 'deleteBackward']);
51
+ });
52
+
53
+ it('passes an unknown value through as a selector', () => {
54
+ const { input, f } = withField();
55
+
56
+ input.keystroke('deleteForward');
57
+
58
+ expect(f.calls.executeCommand).toEqual(['deleteForward']);
59
+ });
60
+
61
+ it('does not throw when the engine rejects the selector', () => {
62
+ const { input } = withField();
63
+
64
+ input.mathField.executeCommand = () => {
65
+ throw new Error('unknown command');
66
+ };
67
+
68
+ expect(() => input.keystroke('Nonsense')).not.toThrow();
69
+ });
70
+
71
+ it('covers every keystroke the keypad emits', () => {
72
+ // navigation.js / edit.js only produce these three
73
+ ['Left', 'Right', 'Backspace'].forEach((k) => expect(KEYSTROKES[k]).toBeDefined());
74
+ });
75
+ });
76
+
77
+ describe('command', () => {
78
+ it('expands argument-taking commands into placeholders', () => {
79
+ const { input, f } = withField();
80
+
81
+ input.command('\\frac');
82
+
83
+ // a bare \frac would give no editable slots
84
+ expect(f.calls.insert).toEqual(['\\frac{#?}{#?}']);
85
+ });
86
+
87
+ it('handles array commands', () => {
88
+ const { input, f } = withField();
89
+
90
+ input.command(['\\log', '_']);
91
+
92
+ expect(f.calls.insert).toEqual(['\\log_{#?}']);
93
+ });
94
+
95
+ it('passes argument-less commands through', () => {
96
+ const { input, f } = withField();
97
+
98
+ input.command('\\pi');
99
+
100
+ expect(f.calls.insert).toEqual(['\\pi']);
101
+ });
102
+
103
+ it('agrees with keyToAction', () => {
104
+ expect(keyToAction({ command: '\\sqrt' }).value).toEqual('\\sqrt{#?}');
105
+ });
106
+ });
107
+
108
+ describe('safety before MathLive loads', () => {
109
+ it('every method is a no-op rather than a crash', () => {
110
+ const input = new Input({});
111
+
112
+ // mathField is undefined until loadMathLive() resolves
113
+ expect(input.latex()).toEqual('');
114
+ expect(input.clear()).toEqual('');
115
+ expect(input.command('\\frac')).toEqual('');
116
+ expect(input.keystroke('Left')).toEqual('');
117
+ expect(input.write('x')).toEqual('');
118
+ expect(() => input.focus()).not.toThrow();
119
+ expect(() => input.blur()).not.toThrow();
120
+ expect(() => input.setLatex('x')).not.toThrow();
121
+ expect(input.element).toBeUndefined();
122
+ });
123
+ });
124
+
125
+ describe('mqCompat facade', () => {
126
+ // math-toolbar used to call this.input.mathField.latex(); external
127
+ // consumers may still do the same.
128
+ it('exposes latex() as a getter', () => {
129
+ const { input } = withField();
130
+
131
+ input.mathField.getValue = () => '\\frac{1}{2}';
132
+
133
+ expect(input.mqCompat.latex()).toEqual('\\frac{1}{2}');
134
+ });
135
+
136
+ it('exposes latex(v) as a setter and el()', () => {
137
+ const { input, f } = withField();
138
+
139
+ input.mqCompat.latex('x+1');
140
+ expect(f.value).toEqual('x+1');
141
+ expect(input.mqCompat.el()).toBe(f);
142
+ });
143
+ });
144
+ });
@@ -1,11 +1,4 @@
1
- import {
2
- toMathLive,
3
- fromMathLive,
4
- fieldIds,
5
- keyToAction,
6
- NEWLINE_EMBED,
7
- DEFAULT_FIELD_ID,
8
- } from '../latex-bridge';
1
+ import { toMathLive, fromMathLive, fieldIds, keyToAction, NEWLINE_EMBED, DEFAULT_FIELD_ID } from '../latex-bridge';
9
2
 
10
3
  describe('latex-bridge', () => {
11
4
  describe('toMathLive', () => {
@@ -40,9 +40,11 @@ describe('mathlive-instance', () => {
40
40
  });
41
41
 
42
42
  it('does not throw when the factory throws', () => {
43
- expect(() => instance.registerEmbed('bad', () => {
44
- throw new Error('boom');
45
- })).not.toThrow();
43
+ expect(() =>
44
+ instance.registerEmbed('bad', () => {
45
+ throw new Error('boom');
46
+ }),
47
+ ).not.toThrow();
46
48
 
47
49
  expect(instance.registeredEmbeds()).toEqual(['bad']);
48
50
  });