@pie-lib/render-ui 7.0.3 → 8.0.0-next.20261002094057

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 (105) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +11 -0
  2. package/dist/assets/enableAudioAutoplayImage.d.ts +10 -0
  3. package/dist/assets/enableAudioAutoplayImage.js +4 -0
  4. package/dist/collapsible/index.d.ts +31 -0
  5. package/dist/collapsible/index.js +53 -0
  6. package/dist/color.d.ts +128 -0
  7. package/dist/color.js +132 -0
  8. package/dist/feedback.d.ts +20 -0
  9. package/dist/feedback.js +65 -0
  10. package/dist/has-media.d.ts +9 -0
  11. package/dist/has-media.js +10 -0
  12. package/dist/has-text.d.ts +9 -0
  13. package/dist/has-text.js +10 -0
  14. package/dist/html-and-math.d.ts +22 -0
  15. package/dist/html-and-math.js +25 -0
  16. package/dist/index.d.ts +26 -0
  17. package/dist/index.js +18 -0
  18. package/dist/inline-menu.d.ts +33 -0
  19. package/dist/inline-menu.js +29 -0
  20. package/dist/input-container.d.ts +23 -0
  21. package/dist/input-container.js +39 -0
  22. package/dist/preview-layout.d.ts +24 -0
  23. package/dist/preview-layout.js +37 -0
  24. package/dist/preview-prompt.d.ts +39 -0
  25. package/dist/preview-prompt.js +153 -0
  26. package/dist/purpose.d.ts +18 -0
  27. package/dist/purpose.js +11 -0
  28. package/dist/readable.d.ts +18 -0
  29. package/dist/readable.js +11 -0
  30. package/dist/response-indicators.d.ts +121 -0
  31. package/dist/response-indicators.js +62 -0
  32. package/{src/transform-headings.js → dist/transform-headings.d.ts} +9 -30
  33. package/dist/transform-headings.js +15 -0
  34. package/dist/ui-layout.d.ts +31 -0
  35. package/dist/ui-layout.js +55 -0
  36. package/dist/withUndoReset.d.ts +47 -0
  37. package/dist/withUndoReset.js +84 -0
  38. package/package.json +29 -20
  39. package/CHANGELOG.json +0 -1
  40. package/CHANGELOG.md +0 -1190
  41. package/LICENSE.md +0 -5
  42. package/lib/assets/enableAudioAutoplayImage.js +0 -8
  43. package/lib/assets/enableAudioAutoplayImage.js.map +0 -1
  44. package/lib/collapsible/index.js +0 -105
  45. package/lib/collapsible/index.js.map +0 -1
  46. package/lib/color.js +0 -253
  47. package/lib/color.js.map +0 -1
  48. package/lib/feedback.js +0 -112
  49. package/lib/feedback.js.map +0 -1
  50. package/lib/has-media.js +0 -22
  51. package/lib/has-media.js.map +0 -1
  52. package/lib/has-text.js +0 -22
  53. package/lib/has-text.js.map +0 -1
  54. package/lib/html-and-math.js +0 -54
  55. package/lib/html-and-math.js.map +0 -1
  56. package/lib/index.js +0 -113
  57. package/lib/index.js.map +0 -1
  58. package/lib/input-container.js +0 -59
  59. package/lib/input-container.js.map +0 -1
  60. package/lib/preview-layout.js +0 -65
  61. package/lib/preview-layout.js.map +0 -1
  62. package/lib/preview-prompt.js +0 -326
  63. package/lib/preview-prompt.js.map +0 -1
  64. package/lib/purpose.js +0 -22
  65. package/lib/purpose.js.map +0 -1
  66. package/lib/readable.js +0 -22
  67. package/lib/readable.js.map +0 -1
  68. package/lib/response-indicators.js +0 -102
  69. package/lib/response-indicators.js.map +0 -1
  70. package/lib/transform-headings.js +0 -53
  71. package/lib/transform-headings.js.map +0 -1
  72. package/lib/ui-layout.js +0 -125
  73. package/lib/ui-layout.js.map +0 -1
  74. package/lib/withUndoReset.js +0 -135
  75. package/lib/withUndoReset.js.map +0 -1
  76. package/src/__tests__/color.test.js +0 -259
  77. package/src/__tests__/feedback.test.jsx +0 -279
  78. package/src/__tests__/has-media.test.js +0 -19
  79. package/src/__tests__/has-text.test.js +0 -20
  80. package/src/__tests__/html-and-math.test.js +0 -36
  81. package/src/__tests__/input-container.test.jsx +0 -328
  82. package/src/__tests__/preview-layout.test.jsx +0 -349
  83. package/src/__tests__/preview-prompt.test.jsx +0 -573
  84. package/src/__tests__/purpose.test.jsx +0 -51
  85. package/src/__tests__/readable.test.jsx +0 -69
  86. package/src/__tests__/response-indicators.test.jsx +0 -111
  87. package/src/__tests__/ui-layout.test.jsx +0 -52
  88. package/src/__tests__/withUndoReset.test.jsx +0 -176
  89. package/src/assets/enableAudioAutoplayImage.js +0 -1
  90. package/src/collapsible/__tests__/index.test.jsx +0 -39
  91. package/src/collapsible/index.jsx +0 -64
  92. package/src/color.js +0 -151
  93. package/src/feedback.jsx +0 -84
  94. package/src/has-media.js +0 -16
  95. package/src/has-text.js +0 -18
  96. package/src/html-and-math.js +0 -21
  97. package/src/index.js +0 -35
  98. package/src/input-container.jsx +0 -47
  99. package/src/preview-layout.jsx +0 -41
  100. package/src/preview-prompt.jsx +0 -308
  101. package/src/purpose.jsx +0 -17
  102. package/src/readable.jsx +0 -19
  103. package/src/response-indicators.jsx +0 -82
  104. package/src/ui-layout.jsx +0 -96
  105. package/src/withUndoReset.jsx +0 -114
package/src/color.js DELETED
@@ -1,151 +0,0 @@
1
- import { green, indigo, orange, pink, red } from '@mui/material/colors';
2
-
3
- export const defaults = {
4
- TEXT: 'black',
5
- DISABLED: 'grey',
6
- DISABLED_SECONDARY: '#ABABAB',
7
- CORRECT: green[500],
8
- CORRECT_SECONDARY: green[50],
9
- CORRECT_TERTIARY: '#0EA449',
10
- CORRECT_WITH_ICON: '#087D38',
11
- INCORRECT: orange[500],
12
- INCORRECT_SECONDARY: red[50],
13
- INCORRECT_WITH_ICON: '#BF0D00',
14
- MISSING: red[700],
15
- MISSING_WITH_ICON: '#6A78A1',
16
- PRIMARY: indigo[500],
17
- PRIMARY_LIGHT: indigo[200],
18
- PRIMARY_DARK: indigo[800],
19
- SECONDARY: pink.A400,
20
- SECONDARY_LIGHT: pink[200],
21
- SECONDARY_DARK: pink[900],
22
- TERTIARY: '#146EB3',
23
- TERTIARY_LIGHT: '#D0E2F0',
24
- BACKGROUND: 'rgba(255,255,255,0)',
25
- BACKGROUND_DARK: '#ECEDF1',
26
- DROPDOWN_BACKGROUND: '#E0E1E6', // this is used for inline-dropdown
27
- // this is only used for multi-trait-rubric, we might want to use BACKGROUND_DARK instead
28
- SECONDARY_BACKGROUND: 'rgba(241,241,241,1)',
29
- BORDER: '#9A9A9A',
30
- BORDER_LIGHT: '#D1D1D1',
31
- BORDER_DARK: '#646464',
32
- BORDER_GRAY: '#7E8494',
33
- // these are used for authored tables
34
- TABLE_GRID: 'black',
35
- TABLE_GRID_LIGHT: '#dfe2e5',
36
- TABLE_STRIPE: '#f6f8fa',
37
- BLACK: '#000000',
38
- WHITE: '#ffffff',
39
- TRANSPARENT: 'transparent',
40
- // this is used for multiple-choice accessibility
41
- FOCUS_CHECKED: '#BBDEFB',
42
- FOCUS_CHECKED_BORDER: '#1565C0',
43
- FOCUS_UNCHECKED: '#E0E0E0',
44
- FOCUS_UNCHECKED_BORDER: '#757575',
45
- // the keyboard focus ring on a button or toolbar control
46
- BUTTON_FOCUS_OUTLINE: '#3B82F6',
47
- // this is used for select text tokens
48
- BLUE_GREY100: '#F3F5F7',
49
- BLUE_GREY300: '#C0C3CF',
50
- BLUE_GREY600: '#7E8494',
51
- BLUE_GREY900: '#152452',
52
- // this is used for charting
53
- FADED_PRIMARY: '#DCDAFB',
54
- // these are used for the math keypad buttons
55
- KEYPAD_BUTTON: 'rgb(188, 194, 229)',
56
- KEYPAD_BUTTON_OPERATOR: 'rgb(255, 159, 192)',
57
- KEYPAD_EMPTY_PLACEHOLDER: 'rgba(245, 0, 87, 0.4)',
58
- KEYPAD_BUTTON_HOVER: 'rgb(214, 218, 239)',
59
- KEYPAD_BUTTON_OPERATOR_HOVER: 'rgb(255, 197, 217)',
60
- KEY_BOARD_FOCUS_INDICATOR: '#2B87FF',
61
- // these are used for graphing UI elements
62
- BUTTON_BORDER: 'rgba(0, 0, 0, 0.23)',
63
- BUTTON_HOVER_BG: 'rgba(0, 0, 0, 0.08)',
64
- };
65
-
66
- Object.freeze(defaults);
67
-
68
- export const v =
69
- (prefix) =>
70
- (...args) => {
71
- const fallback = args.pop();
72
- return args.reduceRight((acc, v) => {
73
- return `var(--${prefix}-${v}, ${acc})`;
74
- }, fallback);
75
- };
76
-
77
- const pv = v('pie');
78
-
79
- export const text = () => pv('text', defaults.TEXT);
80
- export const disabled = () => pv('disabled', defaults.DISABLED);
81
- export const disabledSecondary = () => pv('disabled-secondary', defaults.DISABLED_SECONDARY);
82
- export const correct = () => pv('correct', defaults.CORRECT);
83
- export const correctSecondary = () => pv('correct-secondary', defaults.CORRECT_SECONDARY);
84
- export const correctTertiary = () => pv('correct-tertiary', defaults.CORRECT_TERTIARY);
85
- export const correctWithIcon = () => pv('correct-icon', defaults.CORRECT_WITH_ICON);
86
- export const incorrect = () => pv('incorrect', defaults.INCORRECT);
87
- export const incorrectWithIcon = () => pv('incorrect-icon', defaults.INCORRECT_WITH_ICON);
88
- export const incorrectSecondary = () => pv('incorrect-secondary', defaults.INCORRECT_SECONDARY);
89
- export const missing = () => pv('missing', defaults.MISSING);
90
- export const missingWithIcon = () => pv('missing-icon', defaults.MISSING_WITH_ICON);
91
-
92
- export const primary = () => pv('primary', defaults.PRIMARY);
93
- export const primaryLight = () => pv('primary-light', defaults.PRIMARY_LIGHT);
94
- export const primaryDark = () => pv('primary-dark', defaults.PRIMARY_DARK);
95
- export const primaryText = () => pv('primary-text', 'text', defaults.TEXT);
96
- export const fadedPrimary = () => pv('faded-primary', defaults.FADED_PRIMARY);
97
-
98
- export const secondary = () => pv('secondary', defaults.SECONDARY);
99
- export const secondaryLight = () => pv('secondary-light', defaults.SECONDARY_LIGHT);
100
- export const secondaryDark = () => pv('secondary-dark', defaults.SECONDARY_DARK);
101
-
102
- export const secondaryText = () => pv('secondary-text', 'text', defaults.TEXT);
103
- export const background = () => pv('background', defaults.BACKGROUND);
104
- export const backgroundDark = () => pv('background-dark', defaults.BACKGROUND_DARK);
105
- export const secondaryBackground = () => pv('secondary-background', defaults.SECONDARY_BACKGROUND);
106
- export const dropdownBackground = () => pv('dropdown-background', defaults.DROPDOWN_BACKGROUND);
107
-
108
- export const tertiary = () => pv('tertiary', defaults.TERTIARY);
109
- export const tertiaryLight = () => pv('tertiary-light', defaults.TERTIARY_LIGHT);
110
-
111
- export const border = () => pv('border', defaults.BORDER);
112
- export const borderLight = () => pv('border-light', defaults.BORDER_LIGHT);
113
- export const borderDark = () => pv('border-dark', defaults.BORDER_DARK);
114
- export const borderGray = () => pv('border-gray', defaults.BORDER_GRAY);
115
-
116
- export const tableGrid = () => pv('table-grid', 'text', defaults.TABLE_GRID);
117
- export const tableGridLight = () => pv('table-grid-light', 'border-light', defaults.TABLE_GRID_LIGHT);
118
- export const tableStripe = () => pv('table-stripe', 'background-dark', defaults.TABLE_STRIPE);
119
-
120
- export const black = () => pv('black', defaults.BLACK);
121
- export const white = () => pv('white', defaults.WHITE);
122
- export const transparent = () => defaults.TRANSPARENT;
123
-
124
- export const focusChecked = () => pv('focus-checked', defaults.FOCUS_CHECKED);
125
- export const focusCheckedBorder = () => pv('focus-checked-border', defaults.FOCUS_CHECKED_BORDER);
126
- export const focusUnchecked = () => pv('focus-unchecked', defaults.FOCUS_UNCHECKED);
127
- export const focusUncheckedBorder = () => pv('focus-unchecked-border', defaults.FOCUS_UNCHECKED_BORDER);
128
- export const buttonFocusOutline = () => pv('button-focus-outline', defaults.BUTTON_FOCUS_OUTLINE);
129
-
130
- export const blueGrey100 = () => pv('blue-grey-100', defaults.BLUE_GREY100);
131
- export const blueGrey300 = () => pv('blue-grey-300', defaults.BLUE_GREY300);
132
- export const blueGrey600 = () => pv('blue-grey-600', defaults.BLUE_GREY600);
133
- export const blueGrey900 = () => pv('blue-grey-900', defaults.BLUE_GREY900);
134
-
135
- export const keypadButton = () => pv('keypad-button', defaults.KEYPAD_BUTTON);
136
- export const keypadButtonOperator = () => pv('keypad-button-operator', defaults.KEYPAD_BUTTON_OPERATOR);
137
- export const keypadEmptyPlaceholder = () => pv('keypad-empty-placeholder', defaults.KEYPAD_EMPTY_PLACEHOLDER);
138
- export const keypadButtonHover = () => pv('keypad-button-hover', defaults.KEYPAD_BUTTON_HOVER);
139
- export const keypadButtonOperatorHover = () =>
140
- pv('keypad-button-operator-hover', defaults.KEYPAD_BUTTON_OPERATOR_HOVER);
141
- export const keyBoardFocusIndicator = () => pv('keyboard-focus-indicator', defaults.KEY_BOARD_FOCUS_INDICATOR);
142
- export const buttonBorder = () => pv('button-border', defaults.BUTTON_BORDER);
143
- export const buttonHoverBg = () => pv('button-hover-bg', defaults.BUTTON_HOVER_BG);
144
-
145
- export const visualElementsColors = {
146
- AXIS_LINE_COLOR: '#5A53C9',
147
- ROLLOVER_FILL_BAR_COLOR: '#050F2D',
148
- GRIDLINES_COLOR: '#8E88EA',
149
- PLOT_FILL_COLOR: '#1463B3',
150
- SHAPES_FILL_COLOR: '#7986cb',
151
- };
package/src/feedback.jsx DELETED
@@ -1,84 +0,0 @@
1
- import React from 'react';
2
- import PropTypes from 'prop-types';
3
- import { styled } from '@mui/material/styles';
4
- import { CSSTransition, TransitionGroup } from 'react-transition-group';
5
- import * as color from './color';
6
-
7
- const FeedbackContainer = styled('div')({
8
- transformOrigin: '0% 0px 0px',
9
- width: '100%',
10
- display: 'block',
11
- overflow: 'hidden',
12
- '&.incorrect': {
13
- color: '#946202',
14
- },
15
- });
16
-
17
- const FeedbackContent = styled('div')({
18
- WebkitFontSmoothing: 'antialiased',
19
- backgroundColor: `var(--feedback-bg-color, ${color.disabled()})`,
20
- borderRadius: '4px',
21
- lineHeight: '25px',
22
- margin: '0px',
23
- padding: '10px',
24
- verticalAlign: 'middle',
25
- color: 'var(--feedback-color, white)',
26
- '&.correct': {
27
- backgroundColor: `var(--feedback-correct-bg-color, ${color.correct()})`,
28
- },
29
- '&.incorrect': {
30
- backgroundColor: `var(--feedback-incorrect-bg-color, ${color.incorrect()})`,
31
- },
32
- });
33
-
34
- const TransitionWrapper = styled('div')({
35
- '&.feedback-enter': {
36
- height: '1px',
37
- },
38
- '&.feedback-enter-active': {
39
- height: '45px',
40
- transition: 'height 500ms',
41
- },
42
- '&.feedback-exit': {
43
- height: '45px',
44
- },
45
- '&.feedback-exit-active': {
46
- height: '1px',
47
- transition: 'height 200ms',
48
- },
49
- });
50
-
51
- export class Feedback extends React.Component {
52
- static propTypes = {
53
- correctness: PropTypes.string,
54
- feedback: PropTypes.string,
55
- };
56
-
57
- nodeRef = React.createRef();
58
-
59
- renderFeedback() {
60
- const { correctness, feedback } = this.props;
61
-
62
- if (!correctness || !feedback) return null;
63
-
64
- return (
65
- <CSSTransition key="hasFeedback" nodeRef={this.nodeRef} timeout={{ enter: 500, exit: 200 }} classNames="feedback">
66
- <TransitionWrapper ref={this.nodeRef}>
67
- <FeedbackContainer>
68
- <FeedbackContent className={correctness} dangerouslySetInnerHTML={{ __html: feedback }} />
69
- </FeedbackContainer>
70
- </TransitionWrapper>
71
- </CSSTransition>
72
- );
73
- }
74
-
75
- render() {
76
- return (
77
- <div>
78
- <TransitionGroup>{this.renderFeedback()}</TransitionGroup>
79
- </div>
80
- );
81
- }
82
- }
83
-
84
- export default Feedback;
package/src/has-media.js DELETED
@@ -1,16 +0,0 @@
1
- let parser;
2
-
3
- if (typeof window !== 'undefined') {
4
- parser = new DOMParser();
5
- }
6
-
7
- /*
8
- * Check if the string contains at least one media element.
9
- */
10
- export const hasMedia = (s) => {
11
- if (!s) {
12
- return false;
13
- }
14
- const root = parser.parseFromString(s, 'text/html');
15
- return !!root.body.querySelector('img') || !!root.body.querySelector('video') || !!root.body.querySelector('audio');
16
- };
package/src/has-text.js DELETED
@@ -1,18 +0,0 @@
1
- let parser;
2
-
3
- if (typeof window !== 'undefined') {
4
- parser = new DOMParser();
5
- }
6
-
7
- const markupToText = (s) => {
8
- const root = parser.parseFromString(s, 'text/html');
9
- return root.body.textContent;
10
- };
11
-
12
- export const hasText = (s) => {
13
- if (!s) {
14
- return false;
15
- }
16
- const tc = markupToText(s);
17
- return !!(tc && tc.trim());
18
- };
@@ -1,21 +0,0 @@
1
- import React from 'react';
2
- import PropTypes from 'prop-types';
3
-
4
- export default class HtmlAndMath extends React.Component {
5
- static propTypes = {
6
- tag: PropTypes.string,
7
- className: PropTypes.string,
8
- html: PropTypes.string,
9
- };
10
-
11
- static defaultProps = {
12
- tag: 'div',
13
- html: '',
14
- };
15
-
16
- render() {
17
- const { tag, className, html } = this.props;
18
- const Tag = tag || 'div';
19
- return <Tag ref={(r) => (this.node = r)} className={className} dangerouslySetInnerHTML={{ __html: html }} />;
20
- }
21
- }
package/src/index.js DELETED
@@ -1,35 +0,0 @@
1
- import * as indicators from './response-indicators';
2
- import Feedback from './feedback';
3
- import Collapsible from './collapsible';
4
- import withUndoReset from './withUndoReset';
5
- import PreviewLayout from './preview-layout';
6
- import UiLayout from './ui-layout';
7
- import HtmlAndMath from './html-and-math';
8
- import InputContainer from './input-container';
9
- import PreviewPrompt from './preview-prompt';
10
- import Readable from './readable';
11
- import Purpose from './purpose';
12
- import * as color from './color';
13
- import { hasText } from './has-text';
14
- import { hasMedia } from './has-media';
15
- import EnableAudioAutoplayImage from './assets/enableAudioAutoplayImage';
16
- import { transformDataHeadings } from './transform-headings';
17
-
18
- export {
19
- HtmlAndMath,
20
- indicators,
21
- withUndoReset,
22
- Feedback,
23
- UiLayout,
24
- PreviewLayout,
25
- Collapsible,
26
- InputContainer,
27
- PreviewPrompt,
28
- color,
29
- Readable,
30
- Purpose,
31
- hasText,
32
- hasMedia,
33
- EnableAudioAutoplayImage,
34
- transformDataHeadings,
35
- };
@@ -1,47 +0,0 @@
1
- import InputLabel from '@mui/material/InputLabel';
2
- import PropTypes from 'prop-types';
3
- import React from 'react';
4
- import { styled } from '@mui/material/styles';
5
- import FormControl from '@mui/material/FormControl';
6
-
7
- const StyledFormControl = styled(FormControl)(({ theme }) => ({
8
- margin: 0,
9
- padding: 0,
10
- flex: '1 0 auto',
11
- minWidth: theme.spacing(4),
12
- }));
13
-
14
- const StyledInputLabel = styled(InputLabel)(() => ({
15
- fontSize: 'inherit',
16
- whiteSpace: 'nowrap',
17
- margin: 0,
18
- padding: 0,
19
- alignSelf: 'flex-start',
20
- position: 'absolute',
21
- top: 0,
22
- left: 0,
23
- transformOrigin: 'top left',
24
- pointerEvents: 'none',
25
- // override MUI's default transform styles
26
- '&.MuiInputLabel-shrink': {
27
- transform: 'scale(0.75) translate(0, -0.75em)',
28
- },
29
- '&:not(.MuiInputLabel-shrink)': {
30
- transform: 'translate(0, 0)',
31
- },
32
- }));
33
-
34
- const InputContainer = ({ label, className, children }) => (
35
- <StyledFormControl className={className}>
36
- <StyledInputLabel shrink>{label}</StyledInputLabel>
37
- {children}
38
- </StyledFormControl>
39
- );
40
-
41
- InputContainer.propTypes = {
42
- label: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,
43
- className: PropTypes.string,
44
- children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,
45
- };
46
-
47
- export default InputContainer;
@@ -1,41 +0,0 @@
1
- import React from 'react';
2
- import { styled } from '@mui/material/styles';
3
- import PropTypes from 'prop-types';
4
- import UiLayout from './ui-layout';
5
-
6
- const StyledUiLayout = styled(UiLayout)({
7
- display: 'flex',
8
- flexDirection: 'column',
9
- position: 'relative',
10
- });
11
-
12
- class PreviewLayout extends React.Component {
13
- static propTypes = {
14
- ariaLabel: PropTypes.string,
15
- children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,
16
- role: PropTypes.string,
17
- extraCSSRules: PropTypes.shape({
18
- names: PropTypes.arrayOf(PropTypes.string),
19
- rules: PropTypes.string,
20
- }),
21
- fontSizeFactor: PropTypes.number,
22
- };
23
-
24
- render() {
25
- const { children, ariaLabel, role, extraCSSRules, fontSizeFactor, classes } = this.props;
26
- const accessibility = ariaLabel ? { 'aria-label': ariaLabel, role } : {};
27
-
28
- return (
29
- <StyledUiLayout
30
- {...accessibility}
31
- extraCSSRules={extraCSSRules}
32
- fontSizeFactor={fontSizeFactor}
33
- classes={classes}
34
- >
35
- {children}
36
- </StyledUiLayout>
37
- );
38
- }
39
- }
40
-
41
- export default PreviewLayout;