@pie-lib/math-input-mathlive 1.1.4 → 1.1.5-beta.10

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.
Files changed (50) hide show
  1. package/README.md +14 -5
  2. package/lib/__tests__/composites.test.js +255 -0
  3. package/lib/__tests__/drop-in-compat.test.js +133 -0
  4. package/lib/__tests__/embedded-fonts.test.js +121 -0
  5. package/lib/__tests__/index.test.js +118 -0
  6. package/lib/__tests__/input-imperative.test.js +155 -0
  7. package/lib/__tests__/keypad-label.test.js +231 -0
  8. package/lib/__tests__/keypad-render.test.js +206 -0
  9. package/lib/__tests__/latex-bridge.test.js +386 -0
  10. package/lib/__tests__/mathlive-instance.test.js +419 -0
  11. package/lib/__tests__/mount-race.test.js +218 -0
  12. package/lib/__tests__/static-prompts.test.js +405 -0
  13. package/lib/__tests__/tmp-markup.test.js +26 -0
  14. package/lib/keypad/index.js +50 -28
  15. package/lib/keypad/index.js.map +1 -1
  16. package/lib/keys/geometry.js +7 -4
  17. package/lib/keys/geometry.js.map +1 -1
  18. package/lib/keys/misc.js +9 -2
  19. package/lib/keys/misc.js.map +1 -1
  20. package/lib/latex-bridge.js +207 -7
  21. package/lib/latex-bridge.js.map +1 -1
  22. package/lib/mathlive-instance.js +176 -12
  23. package/lib/mathlive-instance.js.map +1 -1
  24. package/lib/mf/common-styles.js +89 -10
  25. package/lib/mf/common-styles.js.map +1 -1
  26. package/lib/mf/index.js +12 -0
  27. package/lib/mf/index.js.map +1 -1
  28. package/lib/mf/input.js +34 -5
  29. package/lib/mf/input.js.map +1 -1
  30. package/lib/mf/static.js +107 -7
  31. package/lib/mf/static.js.map +1 -1
  32. package/package.json +3 -4
  33. package/src/__tests__/composites.test.jsx +220 -0
  34. package/src/__tests__/keypad-label.test.jsx +229 -2
  35. package/src/__tests__/keypad-render.test.jsx +123 -0
  36. package/src/__tests__/latex-bridge.test.js +159 -0
  37. package/src/__tests__/mathlive-instance.test.js +237 -0
  38. package/src/__tests__/mount-race.test.jsx +142 -0
  39. package/src/__tests__/static-prompts.test.jsx +364 -0
  40. package/src/keypad/index.jsx +33 -17
  41. package/src/keys/geometry.js +7 -2
  42. package/src/keys/misc.js +8 -2
  43. package/src/latex-bridge.js +223 -7
  44. package/src/mathlive-instance.js +196 -11
  45. package/src/mf/common-styles.js +97 -8
  46. package/src/mf/index.js +4 -0
  47. package/src/mf/input.jsx +42 -5
  48. package/src/mf/static.jsx +124 -6
  49. package/CHANGELOG.md +0 -30
  50. package/LICENSE.md +0 -5
@@ -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","maxWidth","overflow","position","width","backgroundColor","keypadEmptyPlaceholder","undefined","opacity","LatexLabel","exports","_React$Component","props","_this","_classCallCheck2","state","markup","latexToMarkup","latex","_inherits2","_createClass2","key","value","_componentDidMount","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_context","prev","next","abrupt","loadMathLive","unmounted","setState","warned","stop","componentDidMount","componentDidUpdate","prevProps","componentWillUnmount","render","createElement","dangerouslySetInnerHTML","__html","React","Component","PropTypes","string","isRequired","createCustomLayout","layoutObj","gridTemplateColumns","concat","columns","gridTemplateRows","rows","gridAutoFlow","KeyPadContainer","commonKeyboardStyles","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 // Never let a label size its grid column. Stretchy accents\n // (\\overrightarrow, \\overleftrightarrow, \\overarc) render an <svg> that\n // mathlive-static.css positions absolutely at width:100%; if that stylesheet\n // is missing the svg lays out statically and expands without bound, dragging\n // the whole column across the screen. `overflow: hidden` also collapses the\n // label's min-content contribution, so the grid can't blow out either way.\n maxWidth: '100%',\n overflow: 'hidden',\n '& svg': {\n position: 'absolute',\n width: '100%',\n },\n // Answer-block / empty-slot boxes inside a label.\n '& .ML__placeholder': {\n backgroundColor: color.keypadEmptyPlaceholder ? color.keypadEmptyPlaceholder() : undefined,\n },\n // The stand-in glyph for an empty argument slot (see EMPTY_SLOT). Muted so it\n // reads as \"a slot goes here\" rather than as part of the symbol, matching how\n // MathQuill shaded `.mq-empty`.\n '& [data-pie-empty]': {\n opacity: 0.5,\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 return;\n }\n\n await loadMathLive();\n\n if (this.unmounted) {\n return;\n }\n\n const markup = latexToMarkup(this.props.latex);\n\n if (markup) {\n this.setState({ markup });\n return;\n }\n\n // Still nothing: the engine is genuinely unavailable (a missing chunk, a\n // blocked request). Keep the raw-latex fallback visible rather than an\n // empty button, and log once so this is diagnosable.\n if (!LatexLabel.warned) {\n LatexLabel.warned = true;\n log('MathLive unavailable - keypad labels are falling back to raw latex');\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":[]}
1
+ {"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_propTypes","_Button","_IconButton","_styles","_debug","_lodashEs","_renderUi","_keys","_keysLayout","_commonStyles","_mathliveInstance","_callSuper","t","o","e","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","Reflect","construct","constructor","apply","Boolean","prototype","valueOf","call","ownKeys","r","Object","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","enumerable","push","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","log","debug","SLANTED_LABELS","SLANT","SLANTED_STROKE","SLANTED_SCALE_Y","LabelHolder","styled","shouldForwardProp","prop","_ref","slanted","transform","concat","WebkitTextStroke","pointerEvents","textTransform","color","text","display","textAlign","lineHeight","maxWidth","overflow","backgroundColor","keypadEmptyPlaceholder","undefined","opacity","rootIndexStyles","LatexLabel","exports","_React$Component","props","_this","_classCallCheck2","state","markup","latexToMarkup","latex","_inherits2","_createClass2","key","value","_componentDidMount","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_context","prev","next","abrupt","loadMathLive","unmounted","setState","warned","stop","componentDidMount","componentDidUpdate","prevProps","componentWillUnmount","render","createElement","includes","dangerouslySetInnerHTML","__html","React","Component","PropTypes","string","isRequired","createCustomLayout","layoutObj","gridTemplateColumns","columns","gridTemplateRows","rows","gridAutoFlow","KeyPadContainer","commonKeyboardStyles","width","gridRowGap","gridColumnGap","fontFamily","buttonBackground","category","keypadButtonOperator","keypadButton","keypadButtonOperatorHover","keypadButtonHover","StyledButton","Button","_ref2","isDelete","isComma","isDot","minWidth","fontSize","borderRadius","StyledLatexButtonWrapper","_ref3","padding","margin","StyledIconButton","IconButton","_ref4","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","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, rootIndexStyles } 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// Labels that the legacy keypad drew slanted. MathQuill styled `\\parallel` as\n// italic, which slants the two bars; MathLive draws it upright. A skew is used\n// rather than `font-style: italic` so the slant does not depend on the font\n// having an italic face for this glyph.\nconst SLANTED_LABELS = ['\\\\parallel'];\nconst SLANT = 'skewX(-15deg)';\n// MathLive's `∥` has hairline bars next to the radical sign and the other keys, so\n// they are thickened with a text stroke and stretched a little taller.\nconst SLANTED_STROKE = '0.03em currentColor';\nconst SLANTED_SCALE_Y = 1.25;\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', { shouldForwardProp: (prop) => prop !== 'slanted' })(({ slanted }) => ({\n ...(slanted && {\n transform: `${SLANT} scaleY(${SLANTED_SCALE_Y})`,\n '& *': { WebkitTextStroke: SLANTED_STROKE },\n }),\n pointerEvents: 'none',\n textTransform: 'none',\n color: color.text(),\n // Deliberately inline-block, NOT inline-flex: MathLive's markup relies on\n // normal inline flow. Making its spans flex items collapses their width, and\n // stretchy accents render an <svg width=\"100%\" preserveAspectRatio=\"none\">\n // that then squeezes into a spike instead of spanning the content.\n display: 'inline-block',\n textAlign: 'center',\n lineHeight: 1,\n // Keep a label from sizing its grid column. `overflow: hidden` also collapses\n // the label's min-content contribution, so a wide accent cannot drag the\n // column across the screen. The svg's own positioning is left to\n // mathlive-static.css (injected by the package) - duplicating it here broke\n // the accent's containing block.\n maxWidth: '100%',\n overflow: 'hidden',\n // Answer-block / empty-slot boxes inside a label.\n '& .ML__placeholder': {\n backgroundColor: color.keypadEmptyPlaceholder ? color.keypadEmptyPlaceholder() : undefined,\n },\n // The stand-in glyph for an empty argument slot (see EMPTY_SLOT). Muted so it\n // reads as \"a slot goes here\" rather than as part of the symbol, matching how\n // MathQuill shaded `.mq-empty`.\n '& [data-pie-empty]': {\n opacity: 0.5,\n },\n // A readable index on the nth-root key. Carried by the label itself, not only\n // by the keypad container, so it holds wherever a LatexLabel is mounted.\n ...rootIndexStyles,\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 return;\n }\n\n await loadMathLive();\n\n if (this.unmounted) {\n return;\n }\n\n const markup = latexToMarkup(this.props.latex);\n\n if (markup) {\n this.setState({ markup });\n return;\n }\n\n // Still nothing: the engine is genuinely unavailable (a missing chunk, a\n // blocked request). Keep the raw-latex fallback visible rather than an\n // empty button, and log once so this is diagnosable.\n if (!LatexLabel.warned) {\n LatexLabel.warned = true;\n log('MathLive unavailable - keypad labels are falling back to raw latex');\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 slanted={SLANTED_LABELS.includes(this.props.latex)} dangerouslySetInnerHTML={{ __html: markup }} />\n ) : (\n <LabelHolder slanted={SLANTED_LABELS.includes(this.props.latex)}>{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":[]}
@@ -25,8 +25,10 @@ var overRightArrow = exports.overRightArrow = set({
25
25
  });
26
26
  var overLeftRightArrow = exports.overLeftRightArrow = set({
27
27
  name: 'Segment',
28
- latex: '\\overleftrightarrow{\\overline{}}',
29
- // used this notation to display the pink box
28
+ // MathQuill needed a nested \overline{} to draw the empty box; MathLive
29
+ // renders that as a real line, so the label showed a spurious bar under the
30
+ // arrows. `withVisibleEmptySlots` supplies the box for `{}` instead.
31
+ latex: '\\overleftrightarrow{}',
30
32
  symbol: 'AB',
31
33
  command: '\\overleftrightarrow'
32
34
  });
@@ -58,8 +60,9 @@ var angle = exports.angle = set({
58
60
  });
59
61
  var overArc = exports.overArc = set({
60
62
  name: 'Over arc',
61
- latex: '\\overarc{\\overline{}}',
62
- // used this notation to display the pink box
63
+ // See the note on Segment above: the nested \overline{} drew a straight line
64
+ // instead of leaving the arc visible.
65
+ latex: '\\overarc{}',
63
66
  command: '\\overarc'
64
67
  });
65
68
  var measureOfAngle = exports.measureOfAngle = set({
@@ -1 +1 @@
1
- {"version":3,"file":"geometry.js","names":["set","o","_objectSpread","category","overline","exports","name","latex","command","overRightArrow","overLeftRightArrow","symbol","segment","write","label","parallel","notParallel","perpindicular","angle","overArc","measureOfAngle","triangle","square","parallelogram","circledDot","degree","similarTo","congruentTo","notCongruentTo","primeArcminute","doublePrimeArcSecond","leftArrow","rightArrow","leftrightArrow"],"sources":["../../src/keys/geometry.js"],"sourcesContent":["const set = (o) => ({ ...o, category: 'geometry' });\n\nexport const overline = set({\n name: 'Line',\n latex: '\\\\overline{}',\n command: '\\\\overline',\n});\n\nexport const overRightArrow = set({\n name: 'Ray',\n latex: '\\\\overrightarrow{}',\n command: '\\\\overrightarrow',\n});\n\nexport const overLeftRightArrow = set({\n name: 'Segment',\n latex: '\\\\overleftrightarrow{\\\\overline{}}', // used this notation to display the pink box\n symbol: 'AB',\n command: '\\\\overleftrightarrow',\n});\n\nexport const segment = set({\n name: 'Segment',\n latex: '\\\\overleftrightarrow{AB}',\n write: '\\\\overleftrightarrow{AB}',\n label: 'AB',\n});\n\nexport const parallel = set({\n name: 'Parallel',\n latex: '\\\\parallel',\n command: '\\\\parallel',\n});\n\nexport const notParallel = set({\n name: 'Not Parallel',\n latex: '\\\\nparallel',\n command: '\\\\nparallel',\n});\n\nexport const perpindicular = set({\n name: 'Perpendicular',\n latex: '\\\\perp',\n command: '\\\\perpendicular',\n});\n\nexport const angle = set({\n name: 'Angle',\n latex: '\\\\angle',\n command: '\\\\angle',\n});\nexport const overArc = set({\n name: 'Over arc',\n latex: '\\\\overarc{\\\\overline{}}', // used this notation to display the pink box\n command: '\\\\overarc',\n});\nexport const measureOfAngle = set({\n name: 'Measured Angle',\n latex: '\\\\measuredangle',\n command: ['m', '\\\\angle'],\n});\n\nexport const triangle = set({\n name: 'Triangle',\n latex: '\\\\triangle',\n command: '\\\\triangle',\n});\n\nexport const square = set({\n name: 'Square',\n latex: '\\\\square',\n command: '\\\\square',\n});\n\nexport const parallelogram = set({\n name: 'Parallelogram',\n latex: '\\\\parallelogram',\n command: '\\\\parallelogram',\n});\n\nexport const circledDot = set({\n name: 'Circled Dot',\n latex: '\\\\odot',\n command: '\\\\odot',\n});\n\nexport const degree = set({\n name: 'Degree',\n latex: '\\\\degree',\n command: '\\\\degree',\n});\n\nexport const similarTo = set({\n name: 'Similar',\n command: '\\\\sim',\n latex: '\\\\sim',\n});\n\nexport const congruentTo = set({\n name: 'Congruent To',\n command: '\\\\cong',\n latex: '\\\\cong',\n});\n\nexport const notCongruentTo = set({\n name: 'Not Congruent To',\n command: '\\\\ncong',\n latex: '\\\\ncong',\n});\n\nexport const primeArcminute = set({\n name: 'Prime',\n label: 'pam',\n // eslint-disable-next-line\n latex: \"'\",\n // eslint-disable-next-line\n write: \"'\",\n});\n\nexport const doublePrimeArcSecond = set({\n name: 'Double Prime',\n // eslint-disable-next-line\n latex: \"''\",\n // eslint-disable-next-line\n write: \"''\",\n});\n\nexport const leftArrow = set({\n name: 'Left Arrow',\n latex: '\\\\leftarrow',\n command: '\\\\leftarrow',\n});\n\nexport const rightArrow = set({\n name: 'Right Arrow',\n latex: '\\\\rightarrow',\n command: '\\\\rightarrow',\n});\n\nexport const leftrightArrow = set({\n name: 'Left and Right Arrow',\n latex: '\\\\leftrightarrow',\n command: '\\\\leftrightarrow',\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"geometry.js","names":["set","o","_objectSpread","category","overline","exports","name","latex","command","overRightArrow","overLeftRightArrow","symbol","segment","write","label","parallel","notParallel","perpindicular","angle","overArc","measureOfAngle","triangle","square","parallelogram","circledDot","degree","similarTo","congruentTo","notCongruentTo","primeArcminute","doublePrimeArcSecond","leftArrow","rightArrow","leftrightArrow"],"sources":["../../src/keys/geometry.js"],"sourcesContent":["const set = (o) => ({ ...o, category: 'geometry' });\n\nexport const overline = set({\n name: 'Line',\n latex: '\\\\overline{}',\n command: '\\\\overline',\n});\n\nexport const overRightArrow = set({\n name: 'Ray',\n latex: '\\\\overrightarrow{}',\n command: '\\\\overrightarrow',\n});\n\nexport const overLeftRightArrow = set({\n name: 'Segment',\n // MathQuill needed a nested \\overline{} to draw the empty box; MathLive\n // renders that as a real line, so the label showed a spurious bar under the\n // arrows. `withVisibleEmptySlots` supplies the box for `{}` instead.\n latex: '\\\\overleftrightarrow{}',\n symbol: 'AB',\n command: '\\\\overleftrightarrow',\n});\n\nexport const segment = set({\n name: 'Segment',\n latex: '\\\\overleftrightarrow{AB}',\n write: '\\\\overleftrightarrow{AB}',\n label: 'AB',\n});\n\nexport const parallel = set({\n name: 'Parallel',\n latex: '\\\\parallel',\n command: '\\\\parallel',\n});\n\nexport const notParallel = set({\n name: 'Not Parallel',\n latex: '\\\\nparallel',\n command: '\\\\nparallel',\n});\n\nexport const perpindicular = set({\n name: 'Perpendicular',\n latex: '\\\\perp',\n command: '\\\\perpendicular',\n});\n\nexport const angle = set({\n name: 'Angle',\n latex: '\\\\angle',\n command: '\\\\angle',\n});\nexport const overArc = set({\n name: 'Over arc',\n // See the note on Segment above: the nested \\overline{} drew a straight line\n // instead of leaving the arc visible.\n latex: '\\\\overarc{}',\n command: '\\\\overarc',\n});\nexport const measureOfAngle = set({\n name: 'Measured Angle',\n latex: '\\\\measuredangle',\n command: ['m', '\\\\angle'],\n});\n\nexport const triangle = set({\n name: 'Triangle',\n latex: '\\\\triangle',\n command: '\\\\triangle',\n});\n\nexport const square = set({\n name: 'Square',\n latex: '\\\\square',\n command: '\\\\square',\n});\n\nexport const parallelogram = set({\n name: 'Parallelogram',\n latex: '\\\\parallelogram',\n command: '\\\\parallelogram',\n});\n\nexport const circledDot = set({\n name: 'Circled Dot',\n latex: '\\\\odot',\n command: '\\\\odot',\n});\n\nexport const degree = set({\n name: 'Degree',\n latex: '\\\\degree',\n command: '\\\\degree',\n});\n\nexport const similarTo = set({\n name: 'Similar',\n command: '\\\\sim',\n latex: '\\\\sim',\n});\n\nexport const congruentTo = set({\n name: 'Congruent To',\n command: '\\\\cong',\n latex: '\\\\cong',\n});\n\nexport const notCongruentTo = set({\n name: 'Not Congruent To',\n command: '\\\\ncong',\n latex: '\\\\ncong',\n});\n\nexport const primeArcminute = set({\n name: 'Prime',\n label: 'pam',\n // eslint-disable-next-line\n latex: \"'\",\n // eslint-disable-next-line\n write: \"'\",\n});\n\nexport const doublePrimeArcSecond = set({\n name: 'Double Prime',\n // eslint-disable-next-line\n latex: \"''\",\n // eslint-disable-next-line\n write: \"''\",\n});\n\nexport const leftArrow = set({\n name: 'Left Arrow',\n latex: '\\\\leftarrow',\n command: '\\\\leftarrow',\n});\n\nexport const rightArrow = set({\n name: 'Right Arrow',\n latex: '\\\\rightarrow',\n command: '\\\\rightarrow',\n});\n\nexport const leftrightArrow = set({\n name: 'Left and Right Arrow',\n latex: '\\\\leftrightarrow',\n command: '\\\\leftrightarrow',\n});\n"],"mappings":"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","ignoreList":[]}
package/lib/keys/misc.js CHANGED
@@ -29,10 +29,17 @@ var brackets = exports.brackets = set({
29
29
  symbol: '[ ]',
30
30
  command: '['
31
31
  });
32
+
33
+ // `%` must be escaped. MathQuill was not a real LaTeX parser: it defined
34
+ // `LatexCmds['%']` as a symbol that *serialised* to `\%`, so a bare `%` worked
35
+ // both as a label and as a command. MathLive parses LaTeX properly, where `%`
36
+ // begins a comment - it rendered nothing (a blank button) and, once inserted,
37
+ // silently swallowed the rest of the expression. `\%` is what MathQuill stored
38
+ // all along, so this changes the key only, not the saved latex.
32
39
  var percentage = exports.percentage = set({
33
40
  name: 'Percent',
34
- latex: '%',
35
- command: '%'
41
+ latex: '\\%',
42
+ command: '\\%'
36
43
  });
37
44
  var approx = exports.approx = set({
38
45
  latex: '\\approx',
@@ -1 +1 @@
1
- {"version":3,"file":"misc.js","names":["_utils","require","set","mkSet","plusMinus","exports","name","latex","write","absValue","symbol","command","parenthesis","brackets","percentage","approx","ariaLabel","nApprox","notEqual","similar","notSimilar"],"sources":["../../src/keys/misc.js"],"sourcesContent":["import { mkSet } from './utils';\n\nconst set = mkSet('misc');\n\nexport const plusMinus = set({\n name: 'Plus or Minus',\n latex: '\\\\pm',\n write: '\\\\pm',\n});\n\nexport const absValue = set({\n name: 'Absolute Value',\n latex: '\\\\abs{}',\n symbol: '| |',\n command: '|',\n});\n\nexport const parenthesis = set({\n name: 'Parenthesis',\n latex: '\\\\left(\\\\right)',\n symbol: '( )',\n command: '(',\n});\n\nexport const brackets = set({\n name: 'Brackets',\n latex: '\\\\left[\\\\right]',\n symbol: '[ ]',\n command: '[',\n});\n\nexport const percentage = set({\n name: 'Percent',\n latex: '%',\n command: '%',\n});\n\nexport const approx = set({\n latex: '\\\\approx',\n command: '\\\\approx',\n ariaLabel: 'Approximately equal to',\n});\n\nexport const nApprox = set({\n latex: '\\\\napprox',\n command: '\\\\napprox',\n ariaLabel: 'Not pproximately equal to',\n});\n\nexport const notEqual = set({\n latex: '\\\\neq',\n command: '\\\\neq',\n ariaLabel: 'Not equals',\n});\n\nexport const similar = set({\n latex: '\\\\sim',\n command: '\\\\sim',\n ariaLabel: 'Similar',\n});\nexport const notSimilar = set({\n latex: '\\\\nsim',\n command: '\\\\nsim',\n ariaLabel: 'Not similar',\n});\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAMC,GAAG,GAAG,IAAAC,YAAK,EAAC,MAAM,CAAC;AAElB,IAAMC,SAAS,GAAAC,OAAA,CAAAD,SAAA,GAAGF,GAAG,CAAC;EAC3BI,IAAI,EAAE,eAAe;EACrBC,KAAK,EAAE,MAAM;EACbC,KAAK,EAAE;AACT,CAAC,CAAC;AAEK,IAAMC,QAAQ,GAAAJ,OAAA,CAAAI,QAAA,GAAGP,GAAG,CAAC;EAC1BI,IAAI,EAAE,gBAAgB;EACtBC,KAAK,EAAE,SAAS;EAChBG,MAAM,EAAE,KAAK;EACbC,OAAO,EAAE;AACX,CAAC,CAAC;AAEK,IAAMC,WAAW,GAAAP,OAAA,CAAAO,WAAA,GAAGV,GAAG,CAAC;EAC7BI,IAAI,EAAE,aAAa;EACnBC,KAAK,EAAE,iBAAiB;EACxBG,MAAM,EAAE,KAAK;EACbC,OAAO,EAAE;AACX,CAAC,CAAC;AAEK,IAAME,QAAQ,GAAAR,OAAA,CAAAQ,QAAA,GAAGX,GAAG,CAAC;EAC1BI,IAAI,EAAE,UAAU;EAChBC,KAAK,EAAE,iBAAiB;EACxBG,MAAM,EAAE,KAAK;EACbC,OAAO,EAAE;AACX,CAAC,CAAC;AAEK,IAAMG,UAAU,GAAAT,OAAA,CAAAS,UAAA,GAAGZ,GAAG,CAAC;EAC5BI,IAAI,EAAE,SAAS;EACfC,KAAK,EAAE,GAAG;EACVI,OAAO,EAAE;AACX,CAAC,CAAC;AAEK,IAAMI,MAAM,GAAAV,OAAA,CAAAU,MAAA,GAAGb,GAAG,CAAC;EACxBK,KAAK,EAAE,UAAU;EACjBI,OAAO,EAAE,UAAU;EACnBK,SAAS,EAAE;AACb,CAAC,CAAC;AAEK,IAAMC,OAAO,GAAAZ,OAAA,CAAAY,OAAA,GAAGf,GAAG,CAAC;EACzBK,KAAK,EAAE,WAAW;EAClBI,OAAO,EAAE,WAAW;EACpBK,SAAS,EAAE;AACb,CAAC,CAAC;AAEK,IAAME,QAAQ,GAAAb,OAAA,CAAAa,QAAA,GAAGhB,GAAG,CAAC;EAC1BK,KAAK,EAAE,OAAO;EACdI,OAAO,EAAE,OAAO;EAChBK,SAAS,EAAE;AACb,CAAC,CAAC;AAEK,IAAMG,OAAO,GAAAd,OAAA,CAAAc,OAAA,GAAGjB,GAAG,CAAC;EACzBK,KAAK,EAAE,OAAO;EACdI,OAAO,EAAE,OAAO;EAChBK,SAAS,EAAE;AACb,CAAC,CAAC;AACK,IAAMI,UAAU,GAAAf,OAAA,CAAAe,UAAA,GAAGlB,GAAG,CAAC;EAC5BK,KAAK,EAAE,QAAQ;EACfI,OAAO,EAAE,QAAQ;EACjBK,SAAS,EAAE;AACb,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"misc.js","names":["_utils","require","set","mkSet","plusMinus","exports","name","latex","write","absValue","symbol","command","parenthesis","brackets","percentage","approx","ariaLabel","nApprox","notEqual","similar","notSimilar"],"sources":["../../src/keys/misc.js"],"sourcesContent":["import { mkSet } from './utils';\n\nconst set = mkSet('misc');\n\nexport const plusMinus = set({\n name: 'Plus or Minus',\n latex: '\\\\pm',\n write: '\\\\pm',\n});\n\nexport const absValue = set({\n name: 'Absolute Value',\n latex: '\\\\abs{}',\n symbol: '| |',\n command: '|',\n});\n\nexport const parenthesis = set({\n name: 'Parenthesis',\n latex: '\\\\left(\\\\right)',\n symbol: '( )',\n command: '(',\n});\n\nexport const brackets = set({\n name: 'Brackets',\n latex: '\\\\left[\\\\right]',\n symbol: '[ ]',\n command: '[',\n});\n\n// `%` must be escaped. MathQuill was not a real LaTeX parser: it defined\n// `LatexCmds['%']` as a symbol that *serialised* to `\\%`, so a bare `%` worked\n// both as a label and as a command. MathLive parses LaTeX properly, where `%`\n// begins a comment - it rendered nothing (a blank button) and, once inserted,\n// silently swallowed the rest of the expression. `\\%` is what MathQuill stored\n// all along, so this changes the key only, not the saved latex.\nexport const percentage = set({\n name: 'Percent',\n latex: '\\\\%',\n command: '\\\\%',\n});\n\nexport const approx = set({\n latex: '\\\\approx',\n command: '\\\\approx',\n ariaLabel: 'Approximately equal to',\n});\n\nexport const nApprox = set({\n latex: '\\\\napprox',\n command: '\\\\napprox',\n ariaLabel: 'Not pproximately equal to',\n});\n\nexport const notEqual = set({\n latex: '\\\\neq',\n command: '\\\\neq',\n ariaLabel: 'Not equals',\n});\n\nexport const similar = set({\n latex: '\\\\sim',\n command: '\\\\sim',\n ariaLabel: 'Similar',\n});\nexport const notSimilar = set({\n latex: '\\\\nsim',\n command: '\\\\nsim',\n ariaLabel: 'Not similar',\n});\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAMC,GAAG,GAAG,IAAAC,YAAK,EAAC,MAAM,CAAC;AAElB,IAAMC,SAAS,GAAAC,OAAA,CAAAD,SAAA,GAAGF,GAAG,CAAC;EAC3BI,IAAI,EAAE,eAAe;EACrBC,KAAK,EAAE,MAAM;EACbC,KAAK,EAAE;AACT,CAAC,CAAC;AAEK,IAAMC,QAAQ,GAAAJ,OAAA,CAAAI,QAAA,GAAGP,GAAG,CAAC;EAC1BI,IAAI,EAAE,gBAAgB;EACtBC,KAAK,EAAE,SAAS;EAChBG,MAAM,EAAE,KAAK;EACbC,OAAO,EAAE;AACX,CAAC,CAAC;AAEK,IAAMC,WAAW,GAAAP,OAAA,CAAAO,WAAA,GAAGV,GAAG,CAAC;EAC7BI,IAAI,EAAE,aAAa;EACnBC,KAAK,EAAE,iBAAiB;EACxBG,MAAM,EAAE,KAAK;EACbC,OAAO,EAAE;AACX,CAAC,CAAC;AAEK,IAAME,QAAQ,GAAAR,OAAA,CAAAQ,QAAA,GAAGX,GAAG,CAAC;EAC1BI,IAAI,EAAE,UAAU;EAChBC,KAAK,EAAE,iBAAiB;EACxBG,MAAM,EAAE,KAAK;EACbC,OAAO,EAAE;AACX,CAAC,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACO,IAAMG,UAAU,GAAAT,OAAA,CAAAS,UAAA,GAAGZ,GAAG,CAAC;EAC5BI,IAAI,EAAE,SAAS;EACfC,KAAK,EAAE,KAAK;EACZI,OAAO,EAAE;AACX,CAAC,CAAC;AAEK,IAAMI,MAAM,GAAAV,OAAA,CAAAU,MAAA,GAAGb,GAAG,CAAC;EACxBK,KAAK,EAAE,UAAU;EACjBI,OAAO,EAAE,UAAU;EACnBK,SAAS,EAAE;AACb,CAAC,CAAC;AAEK,IAAMC,OAAO,GAAAZ,OAAA,CAAAY,OAAA,GAAGf,GAAG,CAAC;EACzBK,KAAK,EAAE,WAAW;EAClBI,OAAO,EAAE,WAAW;EACpBK,SAAS,EAAE;AACb,CAAC,CAAC;AAEK,IAAME,QAAQ,GAAAb,OAAA,CAAAa,QAAA,GAAGhB,GAAG,CAAC;EAC1BK,KAAK,EAAE,OAAO;EACdI,OAAO,EAAE,OAAO;EAChBK,SAAS,EAAE;AACb,CAAC,CAAC;AAEK,IAAMG,OAAO,GAAAd,OAAA,CAAAc,OAAA,GAAGjB,GAAG,CAAC;EACzBK,KAAK,EAAE,OAAO;EACdI,OAAO,EAAE,OAAO;EAChBK,SAAS,EAAE;AACb,CAAC,CAAC;AACK,IAAMI,UAAU,GAAAf,OAAA,CAAAe,UAAA,GAAGlB,GAAG,CAAC;EAC5BK,KAAK,EAAE,QAAQ;EACfI,OAAO,EAAE,QAAQ;EACjBK,SAAS,EAAE;AACb,CAAC,CAAC","ignoreList":[]}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.withVisibleEmptySlots = exports.toNativeCommands = exports.toMathLive = exports.keyToAction = exports.fromMathLive = exports.fieldIds = exports.NEWLINE_EMBED = exports.KEYSTROKES = exports.DEFAULT_FIELD_ID = exports.COMMANDS_WITH_ARGS = void 0;
6
+ exports.withVisibleEmptySlots = exports.toNativeCommands = exports.toMathLive = exports.toCanonicalCommands = exports.keyToAction = exports.fromMathLive = exports.fieldIds = exports.NEWLINE_EMBED = exports.MATHQUILL_ALIASES = exports.KEYSTROKES = exports.DEFAULT_FIELD_ID = exports.COMMANDS_WITH_ARGS = void 0;
7
7
  /**
8
8
  * LaTeX translation layer between the MathQuill-era content model and MathLive.
9
9
  *
@@ -61,12 +61,49 @@ var DEFAULT_FIELD_ID = exports.DEFAULT_FIELD_ID = 'r1';
61
61
  *
62
62
  * `\placeholder{}` is not usable here: in static markup it renders as a
63
63
  * non-breaking space, because its editable box only exists inside a live
64
- * mathfield. So an actual glyph is required.
64
+ * mathfield. So something with real width is required.
65
+ *
66
+ * It must be a `\rule`, not a unicode glyph. A glyph's width comes from font
67
+ * metrics, and U+25AB is not in the KaTeX fonts - the browser substitutes a
68
+ * wider fallback while MathLive still sizes surrounding accents from its own
69
+ * metrics. That left stretchy accents (`\overarc`, `\overleftrightarrow`)
70
+ * visibly narrower than the box they were meant to span. A rule carries an
71
+ * explicit em width, so accents size correctly - and a filled box is closer to
72
+ * MathQuill's `.mq-empty` anyway.
65
73
  *
66
74
  * Live mathfields need none of this - MathLive manages empty slots itself.
67
75
  */
68
- var EMPTY_SLOT = "\\htmlData{pie-empty=1}{\\unicode{\"25AB}}";
76
+ var EMPTY_SLOT = '\\htmlData{pie-empty=1}{\\rule{0.55em}{0.55em}}';
69
77
  var EMPTY_GROUP_REGEX = /\{\s*\}/g;
78
+ // The segment key (`\overline{}`). The keypad centres every label in its cell, and
79
+ // a thin bar is a much shorter label than the ray and line keys' stretchy arrows,
80
+ // so by default both its bar and its box sit off from theirs: the bar is lower
81
+ // than the arrows' shafts, and the box higher than theirs. Two zero-width struts
82
+ // fix that, found by rendering the three keys at 14-28px and measuring:
83
+ // - inside the bar, above the box: pushes the bar up to the height of the
84
+ // arrows' shafts (the bar-to-box distance then matches theirs);
85
+ // - before the bar, from the baseline: raises the label's top, which moves the
86
+ // whole label down so the box lands where theirs does.
87
+ var EMPTY_OVERLINE_REGEX = /\\overline\{\s*\}/g;
88
+ var EMPTY_OVERLINE_BAR_STRUT = '\\rule{0em}{0.87em}';
89
+ var EMPTY_OVERLINE_LABEL_STRUT = '\\rule{0em}{1.3em}';
90
+ // Empty delimiter pairs: `\abs{}` is converted to `\left|\right|`, and the
91
+ // parenthesis / bracket keys are `\left(\right)` / `\left[\right]`. None has a
92
+ // `{}` group for the rule above to catch, so they would render as bare fences.
93
+ var EMPTY_FENCE_REGEX = /\\left([([|])\s*\\right([)\]|])/g;
94
+ // The same muted fill as the other slots (`pie-empty`), but a tall rectangle
95
+ // rather than a square. It also sets the fences' height: `\left...\right` stretch
96
+ // to their content, so a taller slot gives taller parentheses.
97
+ //
98
+ // A `\rule` stands on the baseline, but the fences are centred on the math axis
99
+ // (0.25em above it), so an un-lifted box sat high between them. `[-0.25em]`
100
+ // lowers it by (axis - height / 2) = 0.25 - 1 / 2, centring it on the axis.
101
+ //
102
+ // Lowering it alone also shrinks the fences, which size themselves to their
103
+ // content (MathLive switches to short bars). The zero-width `\rule{0em}{1em}`
104
+ // strut keeps the content as tall as before, so the bars keep their height and
105
+ // only the box moves.
106
+ var EMPTY_FENCE_SLOT = '\\rule{0em}{1em}\\htmlData{pie-empty=1}{\\rule[-0.25em]{0.55em}{1em}}';
70
107
 
71
108
  /**
72
109
  * Make empty argument slots visible, for static rendering.
@@ -78,7 +115,9 @@ var EMPTY_GROUP_REGEX = /\{\s*\}/g;
78
115
  * @returns {string}
79
116
  */
80
117
  var withVisibleEmptySlots = exports.withVisibleEmptySlots = function withVisibleEmptySlots(latex) {
81
- return (latex || '').replace(EMPTY_GROUP_REGEX, "{".concat(EMPTY_SLOT, "}"));
118
+ return (latex || '').replace(EMPTY_OVERLINE_REGEX, "".concat(EMPTY_OVERLINE_LABEL_STRUT, "\\overline{").concat(EMPTY_OVERLINE_BAR_STRUT).concat(EMPTY_SLOT, "}")).replace(EMPTY_GROUP_REGEX, "{".concat(EMPTY_SLOT, "}")).replace(EMPTY_FENCE_REGEX, function (_m, open, close) {
119
+ return "\\left".concat(open).concat(EMPTY_FENCE_SLOT, "\\right").concat(close);
120
+ });
82
121
  };
83
122
 
84
123
  /**
@@ -113,6 +152,36 @@ var toNativeCommands = exports.toNativeCommands = function toNativeCommands(late
113
152
  out = replaceAbs(out);
114
153
  out = out.replace(/\\longdiv\{/g, '\\enclose{longdiv}{');
115
154
  out = out.replace(/\\overarc\{/g, '\\overparen{');
155
+ out = escapeBareComments(out);
156
+ return out;
157
+ };
158
+
159
+ /**
160
+ * Escape an unescaped `%`.
161
+ *
162
+ * In real LaTeX `%` starts a comment, so MathLive discards it *and everything
163
+ * after it*: `50%` renders as `50`, and `x%y` as just `x`. MathQuill had no
164
+ * such notion - it treated `%` as a symbol - so latex from anywhere outside the
165
+ * keypad may still carry a bare one.
166
+ *
167
+ * Only a `%` preceded by an even number of backslashes is bare: `\%` is already
168
+ * escaped, while the `%` in `\\%` (a line break, then a comment) is not.
169
+ *
170
+ * @param {string} latex
171
+ * @returns {string}
172
+ */
173
+ var escapeBareComments = function escapeBareComments(latex) {
174
+ if (latex.indexOf('%') === -1) {
175
+ return latex;
176
+ }
177
+ var out = '';
178
+ // Consecutive backslashes immediately before the current character.
179
+ var backslashes = 0;
180
+ for (var i = 0; i < latex.length; i++) {
181
+ var ch = latex[i];
182
+ out += ch === '%' && backslashes % 2 === 0 ? '\\%' : ch;
183
+ backslashes = ch === '\\' ? backslashes + 1 : 0;
184
+ }
116
185
  return out;
117
186
  };
118
187
 
@@ -190,6 +259,127 @@ var toMathLive = exports.toMathLive = function toMathLive(latex) {
190
259
  return out;
191
260
  };
192
261
 
262
+ /**
263
+ * Keypad command names that MathQuill treated as ALIASES of a different command.
264
+ *
265
+ * MathQuill registered `\\divide` as another name for `\\div` (and
266
+ * `\\perpendicular` for `\\perp`), so pressing the key stored the real command.
267
+ * MathLive only knows these names through `PIE_MACROS`, and serialises a macro
268
+ * under its own name - so `\\divide` reached storage verbatim, where MathJax
269
+ * (@pie-lib/math-rendering) has no such command and renders it as red text.
270
+ *
271
+ * Every other keypad command already matches what MathQuill stored (`\\degree`,
272
+ * `\\nsim`, `\\ncong`, `\\nparallel`, `\\square`, `\\napprox`,
273
+ * `\\parallelogram`), and MathJax understands those.
274
+ */
275
+ var MATHQUILL_ALIASES = exports.MATHQUILL_ALIASES = {
276
+ '\\divide': '\\div',
277
+ '\\perpendicular': '\\perp'
278
+ };
279
+
280
+ // Whole command names only: `\\divideontimes` is a real AMS symbol.
281
+ var MATHQUILL_ALIAS_REGEX = /\\(divide|perpendicular)(?![a-zA-Z])/g;
282
+
283
+ /**
284
+ * Primes. MathLive turns a prime that follows a base into a superscript atom and
285
+ * serialises it as `^{\\prime}`, or `^{\\doubleprime}` for the keypad's double
286
+ * prime key (`5''` comes back out as `5^{\\doubleprime}`). MathJax has no
287
+ * `\\doubleprime`, and two adjacent `^{\\prime}` groups - what typing `'` twice
288
+ * produces - are a "double exponent" error. MathQuill stored plain apostrophes,
289
+ * which both MathJax and MathLive read as primes, so store those.
290
+ *
291
+ * Only a superscript made of primes alone is rewritten: `x^{\\prime 2}` keeps
292
+ * its group, since it holds more than primes.
293
+ */
294
+ var PRIME_SUPERSCRIPT_REGEX = /\^\{((?:\s*\\(?:prime|doubleprime)(?![a-zA-Z]))+)\s*\}/g;
295
+ var BARE_DOUBLEPRIME_REGEX = /\\doubleprime(?![a-zA-Z])/g;
296
+ var primesToApostrophes = function primesToApostrophes(primes) {
297
+ return (
298
+ // eslint-disable-next-line quotes
299
+ "'".repeat((primes.match(/\\prime(?![a-zA-Z])/g) || []).length + 2 * (primes.match(BARE_DOUBLEPRIME_REGEX) || []).length)
300
+ );
301
+ };
302
+ var BARE_PRIME_COMMAND_REGEX = /^\\(doubleprime|prime)(?![a-zA-Z])/;
303
+
304
+ /**
305
+ * Primes that are *not* in a superscript.
306
+ *
307
+ * MathLive emits bare `\prime` / `\doubleprime` for a `′` or `″` typed or pasted
308
+ * as a character (`5′6″` serialises as `5\prime6\doubleprime`). A bare `\prime`
309
+ * is a full-size glyph in MathJax, while `''` is a superscript, so storing
310
+ * `5\prime6''` drew the single prime visibly larger than each stroke of the
311
+ * double prime. Both become apostrophes, the superscript primes MathQuill
312
+ * stored, so they always match.
313
+ *
314
+ * Inside a script (`x^{\prime 2}`, `x^\prime`) a prime is already a
315
+ * superscript, and an apostrophe there would mean something else, so
316
+ * `\prime` is kept and `\doubleprime` (unknown to MathJax) becomes
317
+ * `\prime\prime`.
318
+ *
319
+ * @param {string} latex
320
+ * @returns {string}
321
+ */
322
+ var barePrimesToApostrophes = function barePrimesToApostrophes(latex) {
323
+ if (latex.indexOf('prime') === -1) {
324
+ return latex;
325
+ }
326
+
327
+ // One entry per open brace: is that group a super/subscript?
328
+ var groups = [];
329
+ var out = '';
330
+ var i = 0;
331
+ while (i < latex.length) {
332
+ var ch = latex[i];
333
+ if (ch === '\\') {
334
+ var match = latex.slice(i).match(BARE_PRIME_COMMAND_REGEX);
335
+ if (match) {
336
+ var isDouble = match[1] === 'doubleprime';
337
+ // `x^\prime`: the command is itself the script.
338
+ var isScriptArgument = /[\^_]\s*$/.test(out);
339
+ var inScript = isScriptArgument || groups.indexOf(true) !== -1;
340
+ if (inScript) {
341
+ out += isDouble ? '\\prime\\prime' : '\\prime';
342
+ } else {
343
+ // eslint-disable-next-line quotes
344
+ out += isDouble ? "''" : "'";
345
+ }
346
+ i += match[0].length;
347
+ continue;
348
+ }
349
+
350
+ // Copy any other command, or an escaped character such as `\{`, whole.
351
+ var command = latex.slice(i).match(/^\\(?:[a-zA-Z]+|.)/);
352
+ var text = command ? command[0] : ch;
353
+ out += text;
354
+ i += text.length;
355
+ continue;
356
+ }
357
+ if (ch === '{') {
358
+ groups.push(/[\^_]\s*$/.test(out));
359
+ } else if (ch === '}') {
360
+ groups.pop();
361
+ }
362
+ out += ch;
363
+ i += 1;
364
+ }
365
+ return out;
366
+ };
367
+
368
+ /**
369
+ * Rewrite what MathLive serialises into the form MathQuill stored: alias
370
+ * command names, and primes.
371
+ *
372
+ * @param {string} latex
373
+ * @returns {string}
374
+ */
375
+ var toCanonicalCommands = exports.toCanonicalCommands = function toCanonicalCommands(latex) {
376
+ return typeof latex === 'string' ? barePrimesToApostrophes(latex.replace(MATHQUILL_ALIAS_REGEX, function (m) {
377
+ return MATHQUILL_ALIASES[m];
378
+ }).replace(PRIME_SUPERSCRIPT_REGEX, function (_m, primes) {
379
+ return primesToApostrophes(primes);
380
+ })) : latex;
381
+ };
382
+
193
383
  /**
194
384
  * Convert latex out of MathLive back into the stored form, so items authored
195
385
  * with the MathLive editor remain readable by @pie-lib/math-rendering and by
@@ -225,7 +415,10 @@ var fromMathLive = exports.fromMathLive = function fromMathLive(latex) {
225
415
  return content;
226
416
  });
227
417
  out = out.replace(BARE_PLACEHOLDER_NO_ARG_REGEX, '');
228
- return out;
418
+
419
+ // Store the command MathQuill stored, not the alias - also heals latex that was
420
+ // saved with `\\divide` before the keypad resolved it.
421
+ return toCanonicalCommands(out);
229
422
  };
230
423
 
231
424
  /**
@@ -234,8 +427,15 @@ var fromMathLive = exports.fromMathLive = function fromMathLive(latex) {
234
427
  * placeholders in the inserted latex.
235
428
  */
236
429
  var COMMANDS_WITH_ARGS = exports.COMMANDS_WITH_ARGS = {
430
+ // An explicit "blank over blank" key: both slots start empty.
237
431
  '\\frac': '\\frac{#?}{#?}',
238
- '/': '\\frac{#?}{#?}',
432
+ // Division, which must behave like MathQuill's `/`: whatever precedes the
433
+ // cursor becomes the numerator and the caret lands in the denominator. `#@`
434
+ // is MathLive's token for "the selection, or the item before the cursor" -
435
+ // this is exactly the template MathLive binds to the `/` key itself. Using
436
+ // `#?` here instead produced an empty fraction and left the typed number
437
+ // stranded outside it.
438
+ '/': '\\frac{#@}{#?}',
239
439
  '\\sqrt': '\\sqrt{#?}',
240
440
  '\\nthroot': '\\sqrt[#?]{#?}',
241
441
  '\\overline': '\\overline{#?}',
@@ -296,7 +496,7 @@ var keyToAction = exports.keyToAction = function keyToAction(key) {
296
496
  // each part and concatenate.
297
497
  var parts = Array.isArray(key.command) ? key.command : [key.command];
298
498
  var value = parts.map(function (c) {
299
- return COMMANDS_WITH_ARGS[c] || c;
499
+ return COMMANDS_WITH_ARGS[c] || MATHQUILL_ALIASES[c] || c;
300
500
  }).join('');
301
501
  return {
302
502
  type: 'insert',