@pie-lib/render-ui 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/_rolldown/runtime.js +11 -0
- package/dist/assets/enableAudioAutoplayImage.d.ts +11 -0
- package/dist/assets/enableAudioAutoplayImage.d.ts.map +1 -0
- package/dist/assets/enableAudioAutoplayImage.js +4 -0
- package/dist/collapsible/index.d.ts +32 -0
- package/dist/collapsible/index.d.ts.map +1 -0
- package/dist/collapsible/index.js +53 -0
- package/dist/color.d.ts +115 -0
- package/dist/color.d.ts.map +1 -0
- package/dist/color.js +118 -0
- package/dist/feedback.d.ts +21 -0
- package/dist/feedback.d.ts.map +1 -0
- package/dist/feedback.js +65 -0
- package/dist/has-media.d.ts +10 -0
- package/dist/has-media.d.ts.map +1 -0
- package/dist/has-media.js +10 -0
- package/dist/has-text.d.ts +10 -0
- package/dist/has-text.d.ts.map +1 -0
- package/dist/has-text.js +10 -0
- package/dist/html-and-math.d.ts +23 -0
- package/dist/html-and-math.d.ts.map +1 -0
- package/dist/html-and-math.js +25 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/inline-menu.d.ts +34 -0
- package/dist/inline-menu.d.ts.map +1 -0
- package/dist/inline-menu.js +29 -0
- package/dist/input-container.d.ts +23 -0
- package/dist/input-container.d.ts.map +1 -0
- package/dist/input-container.js +39 -0
- package/dist/preview-layout.d.ts +25 -0
- package/dist/preview-layout.d.ts.map +1 -0
- package/dist/preview-layout.js +37 -0
- package/dist/preview-prompt.d.ts +39 -0
- package/dist/preview-prompt.d.ts.map +1 -0
- package/dist/preview-prompt.js +153 -0
- package/dist/purpose.d.ts +18 -0
- package/dist/purpose.d.ts.map +1 -0
- package/dist/purpose.js +11 -0
- package/dist/readable.d.ts +18 -0
- package/dist/readable.d.ts.map +1 -0
- package/dist/readable.js +11 -0
- package/dist/response-indicators.d.ts +37 -0
- package/dist/response-indicators.d.ts.map +1 -0
- package/dist/response-indicators.js +62 -0
- package/dist/ui-layout.d.ts +32 -0
- package/dist/ui-layout.d.ts.map +1 -0
- package/dist/ui-layout.js +55 -0
- package/dist/withUndoReset.d.ts +26 -0
- package/dist/withUndoReset.d.ts.map +1 -0
- package/dist/withUndoReset.js +84 -0
- package/package.json +39 -0
- package/src/assets/enableAudioAutoplayImage.ts +11 -0
- package/src/collapsible/index.tsx +74 -0
- package/src/color.ts +147 -0
- package/src/feedback.tsx +94 -0
- package/src/has-media.ts +26 -0
- package/src/has-text.ts +28 -0
- package/src/html-and-math.tsx +31 -0
- package/src/index.ts +45 -0
- package/src/inline-menu.tsx +62 -0
- package/src/input-container.tsx +57 -0
- package/src/preview-layout.tsx +51 -0
- package/src/preview-prompt.tsx +286 -0
- package/src/purpose.tsx +27 -0
- package/src/readable.tsx +29 -0
- package/src/response-indicators.tsx +92 -0
- package/src/ui-layout.tsx +106 -0
- package/src/withUndoReset.tsx +124 -0
package/src/color.ts
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* @synced-from pie-lib/packages/render-ui/src/color.js
|
|
4
|
+
* @auto-generated
|
|
5
|
+
*
|
|
6
|
+
* This file is automatically synced from pie-elements and converted to TypeScript.
|
|
7
|
+
* Manual edits will be overwritten on next sync.
|
|
8
|
+
* To make changes, edit the upstream JavaScript file and run sync again.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { green, indigo, orange, pink, red } from '@mui/material/colors';
|
|
12
|
+
|
|
13
|
+
export const defaults = {
|
|
14
|
+
TEXT: 'black',
|
|
15
|
+
DISABLED: 'grey',
|
|
16
|
+
DISABLED_SECONDARY: '#ABABAB',
|
|
17
|
+
CORRECT: green[500],
|
|
18
|
+
CORRECT_SECONDARY: green[50],
|
|
19
|
+
CORRECT_TERTIARY: '#0EA449',
|
|
20
|
+
CORRECT_WITH_ICON: '#087D38',
|
|
21
|
+
INCORRECT: orange[500],
|
|
22
|
+
INCORRECT_SECONDARY: red[50],
|
|
23
|
+
INCORRECT_WITH_ICON: '#BF0D00',
|
|
24
|
+
MISSING: red[700],
|
|
25
|
+
MISSING_WITH_ICON: '#6A78A1',
|
|
26
|
+
PRIMARY: indigo[500],
|
|
27
|
+
PRIMARY_LIGHT: indigo[200],
|
|
28
|
+
PRIMARY_DARK: indigo[800],
|
|
29
|
+
SECONDARY: pink.A400,
|
|
30
|
+
SECONDARY_LIGHT: pink[200],
|
|
31
|
+
SECONDARY_DARK: pink[900],
|
|
32
|
+
TERTIARY: '#146EB3',
|
|
33
|
+
TERTIARY_LIGHT: '#D0E2F0',
|
|
34
|
+
BACKGROUND: 'rgba(255,255,255,0)',
|
|
35
|
+
BACKGROUND_DARK: '#ECEDF1',
|
|
36
|
+
DROPDOWN_BACKGROUND: '#E0E1E6', // this is used for inline-dropdown
|
|
37
|
+
// this is only used for multi-trait-rubric, we might want to use BACKGROUND_DARK instead
|
|
38
|
+
SECONDARY_BACKGROUND: 'rgba(241,241,241,1)',
|
|
39
|
+
BORDER: '#9A9A9A',
|
|
40
|
+
BORDER_LIGHT: '#D1D1D1',
|
|
41
|
+
BORDER_DARK: '#646464',
|
|
42
|
+
BORDER_GRAY: '#7E8494',
|
|
43
|
+
BLACK: '#000000',
|
|
44
|
+
WHITE: '#ffffff',
|
|
45
|
+
TRANSPARENT: 'transparent',
|
|
46
|
+
// this is used for multiple-choice accessibility
|
|
47
|
+
FOCUS_CHECKED: '#BBDEFB',
|
|
48
|
+
FOCUS_CHECKED_BORDER: '#1565C0',
|
|
49
|
+
FOCUS_UNCHECKED: '#E0E0E0',
|
|
50
|
+
FOCUS_UNCHECKED_BORDER: '#757575',
|
|
51
|
+
// this is used for select text tokens
|
|
52
|
+
BLUE_GREY100: '#F3F5F7',
|
|
53
|
+
BLUE_GREY300: '#C0C3CF',
|
|
54
|
+
BLUE_GREY600: '#7E8494',
|
|
55
|
+
BLUE_GREY900: '#152452',
|
|
56
|
+
// this is used for charting
|
|
57
|
+
FADED_PRIMARY: '#DCDAFB',
|
|
58
|
+
// these are used for the math keypad buttons
|
|
59
|
+
KEYPAD_BUTTON: 'rgb(188, 194, 229)',
|
|
60
|
+
KEYPAD_BUTTON_OPERATOR: 'rgb(255, 159, 192)',
|
|
61
|
+
KEYPAD_EMPTY_PLACEHOLDER: 'rgba(245, 0, 87, 0.4)',
|
|
62
|
+
KEYPAD_BUTTON_HOVER: 'rgb(214, 218, 239)',
|
|
63
|
+
KEYPAD_BUTTON_OPERATOR_HOVER: 'rgb(255, 197, 217)',
|
|
64
|
+
// these are used for graphing UI elements
|
|
65
|
+
BUTTON_BORDER: 'rgba(0, 0, 0, 0.23)',
|
|
66
|
+
BUTTON_HOVER_BG: 'rgba(0, 0, 0, 0.08)',
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
Object.freeze(defaults);
|
|
70
|
+
|
|
71
|
+
export const v =
|
|
72
|
+
(prefix) =>
|
|
73
|
+
(...args) => {
|
|
74
|
+
const fallback = args.pop();
|
|
75
|
+
return args.reduceRight((acc, v) => {
|
|
76
|
+
return `var(--${prefix}-${v}, ${acc})`;
|
|
77
|
+
}, fallback);
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
const pv = v('pie');
|
|
81
|
+
|
|
82
|
+
export const text = () => pv('text', defaults.TEXT);
|
|
83
|
+
export const disabled = () => pv('disabled', defaults.DISABLED);
|
|
84
|
+
export const disabledSecondary = () => pv('disabled-secondary', defaults.DISABLED_SECONDARY);
|
|
85
|
+
export const correct = () => pv('correct', defaults.CORRECT);
|
|
86
|
+
export const correctSecondary = () => pv('correct-secondary', defaults.CORRECT_SECONDARY);
|
|
87
|
+
export const correctTertiary = () => pv('correct-tertiary', defaults.CORRECT_TERTIARY);
|
|
88
|
+
export const correctWithIcon = () => pv('correct-icon', defaults.CORRECT_WITH_ICON);
|
|
89
|
+
export const incorrect = () => pv('incorrect', defaults.INCORRECT);
|
|
90
|
+
export const incorrectWithIcon = () => pv('incorrect-icon', defaults.INCORRECT_WITH_ICON);
|
|
91
|
+
export const incorrectSecondary = () => pv('incorrect-secondary', defaults.INCORRECT_SECONDARY);
|
|
92
|
+
export const missing = () => pv('missing', defaults.MISSING);
|
|
93
|
+
export const missingWithIcon = () => pv('missing-icon', defaults.MISSING_WITH_ICON);
|
|
94
|
+
|
|
95
|
+
export const primary = () => pv('primary', defaults.PRIMARY);
|
|
96
|
+
export const primaryLight = () => pv('primary-light', defaults.PRIMARY_LIGHT);
|
|
97
|
+
export const primaryDark = () => pv('primary-dark', defaults.PRIMARY_DARK);
|
|
98
|
+
export const primaryText = () => pv('primary-text', 'text', defaults.TEXT);
|
|
99
|
+
export const fadedPrimary = () => pv('faded-primary', defaults.FADED_PRIMARY);
|
|
100
|
+
|
|
101
|
+
export const secondary = () => pv('secondary', defaults.SECONDARY);
|
|
102
|
+
export const secondaryLight = () => pv('secondary-light', defaults.SECONDARY_LIGHT);
|
|
103
|
+
export const secondaryDark = () => pv('secondary-dark', defaults.SECONDARY_DARK);
|
|
104
|
+
|
|
105
|
+
export const secondaryText = () => pv('secondary-text', 'text', defaults.TEXT);
|
|
106
|
+
export const background = () => pv('background', defaults.BACKGROUND);
|
|
107
|
+
export const backgroundDark = () => pv('background-dark', defaults.BACKGROUND_DARK);
|
|
108
|
+
export const secondaryBackground = () => pv('secondary-background', defaults.SECONDARY_BACKGROUND);
|
|
109
|
+
export const dropdownBackground = () => pv('dropdown-background', defaults.DROPDOWN_BACKGROUND);
|
|
110
|
+
|
|
111
|
+
export const tertiary = () => pv('tertiary', defaults.TERTIARY);
|
|
112
|
+
export const tertiaryLight = () => pv('tertiary-light', defaults.TERTIARY_LIGHT);
|
|
113
|
+
|
|
114
|
+
export const border = () => pv('border', defaults.BORDER);
|
|
115
|
+
export const borderLight = () => pv('border-light', defaults.BORDER_LIGHT);
|
|
116
|
+
export const borderDark = () => pv('border-dark', defaults.BORDER_DARK);
|
|
117
|
+
export const borderGray = () => pv('border-gray', defaults.BORDER_GRAY);
|
|
118
|
+
|
|
119
|
+
export const black = () => pv('black', defaults.BLACK);
|
|
120
|
+
export const white = () => pv('white', defaults.WHITE);
|
|
121
|
+
export const transparent = () => defaults.TRANSPARENT;
|
|
122
|
+
|
|
123
|
+
export const focusChecked = () => pv('focus-checked', defaults.FOCUS_CHECKED);
|
|
124
|
+
export const focusCheckedBorder = () => pv('focus-checked-border', defaults.FOCUS_CHECKED_BORDER);
|
|
125
|
+
export const focusUnchecked = () => pv('focus-unchecked', defaults.FOCUS_UNCHECKED);
|
|
126
|
+
export const focusUncheckedBorder = () => pv('focus-unchecked-border', defaults.FOCUS_UNCHECKED_BORDER);
|
|
127
|
+
|
|
128
|
+
export const blueGrey100 = () => pv('blue-grey-100', defaults.BLUE_GREY100);
|
|
129
|
+
export const blueGrey300 = () => pv('blue-grey-300', defaults.BLUE_GREY300);
|
|
130
|
+
export const blueGrey600 = () => pv('blue-grey-600', defaults.BLUE_GREY600);
|
|
131
|
+
export const blueGrey900 = () => pv('blue-grey-900', defaults.BLUE_GREY900);
|
|
132
|
+
|
|
133
|
+
export const keypadButton = () => pv('keypad-button', defaults.KEYPAD_BUTTON);
|
|
134
|
+
export const keypadButtonOperator = () => pv('keypad-button-operator', defaults.KEYPAD_BUTTON_OPERATOR);
|
|
135
|
+
export const keypadEmptyPlaceholder = () => pv('keypad-empty-placeholder', defaults.KEYPAD_EMPTY_PLACEHOLDER);
|
|
136
|
+
export const keypadButtonHover = () => pv('keypad-button-hover', defaults.KEYPAD_BUTTON_HOVER);
|
|
137
|
+
export const keypadButtonOperatorHover = () => pv('keypad-button-operator-hover', defaults.KEYPAD_BUTTON_OPERATOR_HOVER);
|
|
138
|
+
export const buttonBorder = () => pv('button-border', defaults.BUTTON_BORDER);
|
|
139
|
+
export const buttonHoverBg = () => pv('button-hover-bg', defaults.BUTTON_HOVER_BG);
|
|
140
|
+
|
|
141
|
+
export const visualElementsColors = {
|
|
142
|
+
AXIS_LINE_COLOR: '#5A53C9',
|
|
143
|
+
ROLLOVER_FILL_BAR_COLOR: '#050F2D',
|
|
144
|
+
GRIDLINES_COLOR: '#8E88EA',
|
|
145
|
+
PLOT_FILL_COLOR: '#1463B3',
|
|
146
|
+
SHAPES_FILL_COLOR: '#7986cb',
|
|
147
|
+
};
|
package/src/feedback.tsx
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* @synced-from pie-lib/packages/render-ui/src/feedback.jsx
|
|
4
|
+
* @auto-generated
|
|
5
|
+
*
|
|
6
|
+
* This file is automatically synced from pie-elements and converted to TypeScript.
|
|
7
|
+
* Manual edits will be overwritten on next sync.
|
|
8
|
+
* To make changes, edit the upstream JavaScript file and run sync again.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import React from 'react';
|
|
12
|
+
import PropTypes from 'prop-types';
|
|
13
|
+
import { styled } from '@mui/material/styles';
|
|
14
|
+
import { CSSTransition, TransitionGroup } from 'react-transition-group';
|
|
15
|
+
import * as color from './color.js';
|
|
16
|
+
|
|
17
|
+
const FeedbackContainer: any = styled('div')({
|
|
18
|
+
transformOrigin: '0% 0px 0px',
|
|
19
|
+
width: '100%',
|
|
20
|
+
display: 'block',
|
|
21
|
+
overflow: 'hidden',
|
|
22
|
+
'&.incorrect': {
|
|
23
|
+
color: '#946202',
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const FeedbackContent: any = styled('div')({
|
|
28
|
+
WebkitFontSmoothing: 'antialiased',
|
|
29
|
+
backgroundColor: `var(--feedback-bg-color, ${color.disabled()})`,
|
|
30
|
+
borderRadius: '4px',
|
|
31
|
+
lineHeight: '25px',
|
|
32
|
+
margin: '0px',
|
|
33
|
+
padding: '10px',
|
|
34
|
+
verticalAlign: 'middle',
|
|
35
|
+
color: 'var(--feedback-color, white)',
|
|
36
|
+
'&.correct': {
|
|
37
|
+
backgroundColor: `var(--feedback-correct-bg-color, ${color.correct()})`,
|
|
38
|
+
},
|
|
39
|
+
'&.incorrect': {
|
|
40
|
+
backgroundColor: `var(--feedback-incorrect-bg-color, ${color.incorrect()})`,
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
const TransitionWrapper: any = styled('div')({
|
|
45
|
+
'&.feedback-enter': {
|
|
46
|
+
height: '1px',
|
|
47
|
+
},
|
|
48
|
+
'&.feedback-enter-active': {
|
|
49
|
+
height: '45px',
|
|
50
|
+
transition: 'height 500ms',
|
|
51
|
+
},
|
|
52
|
+
'&.feedback-exit': {
|
|
53
|
+
height: '45px',
|
|
54
|
+
},
|
|
55
|
+
'&.feedback-exit-active': {
|
|
56
|
+
height: '1px',
|
|
57
|
+
transition: 'height 200ms',
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
export class Feedback extends React.Component {
|
|
62
|
+
static propTypes = {
|
|
63
|
+
correctness: PropTypes.string,
|
|
64
|
+
feedback: PropTypes.string,
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
nodeRef = React.createRef();
|
|
68
|
+
|
|
69
|
+
renderFeedback() {
|
|
70
|
+
const { correctness, feedback } = this.props;
|
|
71
|
+
|
|
72
|
+
if (!correctness || !feedback) return null;
|
|
73
|
+
|
|
74
|
+
return (
|
|
75
|
+
<CSSTransition key="hasFeedback" nodeRef={this.nodeRef} timeout={{ enter: 500, exit: 200 }} classNames="feedback">
|
|
76
|
+
<TransitionWrapper ref={this.nodeRef}>
|
|
77
|
+
<FeedbackContainer>
|
|
78
|
+
<FeedbackContent className={correctness} dangerouslySetInnerHTML={{ __html: feedback }} />
|
|
79
|
+
</FeedbackContainer>
|
|
80
|
+
</TransitionWrapper>
|
|
81
|
+
</CSSTransition>
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
render() {
|
|
86
|
+
return (
|
|
87
|
+
<div>
|
|
88
|
+
<TransitionGroup>{this.renderFeedback()}</TransitionGroup>
|
|
89
|
+
</div>
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export default Feedback;
|
package/src/has-media.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* @synced-from pie-lib/packages/render-ui/src/has-media.js
|
|
4
|
+
* @auto-generated
|
|
5
|
+
*
|
|
6
|
+
* This file is automatically synced from pie-elements and converted to TypeScript.
|
|
7
|
+
* Manual edits will be overwritten on next sync.
|
|
8
|
+
* To make changes, edit the upstream JavaScript file and run sync again.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
let parser;
|
|
12
|
+
|
|
13
|
+
if (typeof window !== 'undefined') {
|
|
14
|
+
parser = new DOMParser();
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/*
|
|
18
|
+
* Check if the string contains at least one media element.
|
|
19
|
+
*/
|
|
20
|
+
export const hasMedia = (s) => {
|
|
21
|
+
if (!s) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
const root = parser.parseFromString(s, 'text/html');
|
|
25
|
+
return !!root.body.querySelector('img') || !!root.body.querySelector('video') || !!root.body.querySelector('audio');
|
|
26
|
+
};
|
package/src/has-text.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* @synced-from pie-lib/packages/render-ui/src/has-text.js
|
|
4
|
+
* @auto-generated
|
|
5
|
+
*
|
|
6
|
+
* This file is automatically synced from pie-elements and converted to TypeScript.
|
|
7
|
+
* Manual edits will be overwritten on next sync.
|
|
8
|
+
* To make changes, edit the upstream JavaScript file and run sync again.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
let parser;
|
|
12
|
+
|
|
13
|
+
if (typeof window !== 'undefined') {
|
|
14
|
+
parser = new DOMParser();
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const markupToText = (s) => {
|
|
18
|
+
const root = parser.parseFromString(s, 'text/html');
|
|
19
|
+
return root.body.textContent;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export const hasText = (s) => {
|
|
23
|
+
if (!s) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
const tc = markupToText(s);
|
|
27
|
+
return !!(tc && tc.trim());
|
|
28
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* @synced-from pie-lib/packages/render-ui/src/html-and-math.js
|
|
4
|
+
* @auto-generated
|
|
5
|
+
*
|
|
6
|
+
* This file is automatically synced from pie-elements and converted to TypeScript.
|
|
7
|
+
* Manual edits will be overwritten on next sync.
|
|
8
|
+
* To make changes, edit the upstream JavaScript file and run sync again.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import React from 'react';
|
|
12
|
+
import PropTypes from 'prop-types';
|
|
13
|
+
|
|
14
|
+
export default class HtmlAndMath extends React.Component {
|
|
15
|
+
static propTypes = {
|
|
16
|
+
tag: PropTypes.string,
|
|
17
|
+
className: PropTypes.string,
|
|
18
|
+
html: PropTypes.string,
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
static defaultProps = {
|
|
22
|
+
tag: 'div',
|
|
23
|
+
html: '',
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
render() {
|
|
27
|
+
const { tag, className, html } = this.props;
|
|
28
|
+
const Tag = tag || 'div';
|
|
29
|
+
return <Tag ref={(r) => (this.node = r)} className={className} dangerouslySetInnerHTML={{ __html: html }} />;
|
|
30
|
+
}
|
|
31
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* @synced-from pie-lib/packages/render-ui/src/index.js
|
|
4
|
+
* @auto-generated
|
|
5
|
+
*
|
|
6
|
+
* This file is automatically synced from pie-elements and converted to TypeScript.
|
|
7
|
+
* Manual edits will be overwritten on next sync.
|
|
8
|
+
* To make changes, edit the upstream JavaScript file and run sync again.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import * as indicators from './response-indicators.js';
|
|
12
|
+
import Feedback from './feedback.js';
|
|
13
|
+
import Collapsible from './collapsible/index.js';
|
|
14
|
+
import withUndoReset from './withUndoReset.js';
|
|
15
|
+
import PreviewLayout from './preview-layout.js';
|
|
16
|
+
import UiLayout from './ui-layout.js';
|
|
17
|
+
import HtmlAndMath from './html-and-math.js';
|
|
18
|
+
import InputContainer from './input-container.js';
|
|
19
|
+
import PreviewPrompt from './preview-prompt.js';
|
|
20
|
+
import Readable from './readable.js';
|
|
21
|
+
import Purpose from './purpose.js';
|
|
22
|
+
import * as color from './color.js';
|
|
23
|
+
import { hasText } from './has-text.js';
|
|
24
|
+
import { hasMedia } from './has-media.js';
|
|
25
|
+
import EnableAudioAutoplayImage from './assets/enableAudioAutoplayImage.js';
|
|
26
|
+
|
|
27
|
+
export {
|
|
28
|
+
HtmlAndMath,
|
|
29
|
+
indicators,
|
|
30
|
+
withUndoReset,
|
|
31
|
+
Feedback,
|
|
32
|
+
UiLayout,
|
|
33
|
+
PreviewLayout,
|
|
34
|
+
Collapsible,
|
|
35
|
+
InputContainer,
|
|
36
|
+
PreviewPrompt,
|
|
37
|
+
color,
|
|
38
|
+
Readable,
|
|
39
|
+
Purpose,
|
|
40
|
+
hasText,
|
|
41
|
+
hasMedia,
|
|
42
|
+
EnableAudioAutoplayImage,
|
|
43
|
+
};
|
|
44
|
+
// Non-synced pie-elements-ng exports
|
|
45
|
+
export { InlineMenu } from './inline-menu.js';
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* InlineMenu - A wrapper around MUI's Menu component for inline contexts
|
|
4
|
+
*
|
|
5
|
+
* This component fixes the issue where MUI's Menu creates a modal overlay
|
|
6
|
+
* that covers the entire screen with a white background. It's designed for
|
|
7
|
+
* use in inline contexts like dropdowns within text or other UI elements.
|
|
8
|
+
*
|
|
9
|
+
* Key differences from standard MUI Menu:
|
|
10
|
+
* - No backdrop (hideBackdrop)
|
|
11
|
+
* - Transparent modal root (doesn't block UI)
|
|
12
|
+
* - No scroll locking (disableScrollLock)
|
|
13
|
+
* - Menu itself remains interactive
|
|
14
|
+
*
|
|
15
|
+
* This file is NOT synced from upstream - it's specific to pie-elements-ng.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import React from 'react';
|
|
19
|
+
import Menu, { MenuProps } from '@mui/material/Menu';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* InlineMenu component that wraps MUI Menu without the blocking backdrop
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```tsx
|
|
26
|
+
* <InlineMenu
|
|
27
|
+
* anchorEl={anchorEl}
|
|
28
|
+
* open={Boolean(anchorEl)}
|
|
29
|
+
* onClose={handleClose}
|
|
30
|
+
* >
|
|
31
|
+
* <MenuItem onClick={handleOption1}>Option 1</MenuItem>
|
|
32
|
+
* <MenuItem onClick={handleOption2}>Option 2</MenuItem>
|
|
33
|
+
* </InlineMenu>
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export const InlineMenu: React.FC<MenuProps> = ({ slotProps, ...props }) => {
|
|
37
|
+
return (
|
|
38
|
+
<Menu
|
|
39
|
+
{...props}
|
|
40
|
+
disableScrollLock
|
|
41
|
+
hideBackdrop
|
|
42
|
+
slotProps={{
|
|
43
|
+
...slotProps,
|
|
44
|
+
root: {
|
|
45
|
+
...slotProps?.root,
|
|
46
|
+
style: {
|
|
47
|
+
backgroundColor: 'transparent',
|
|
48
|
+
pointerEvents: 'none',
|
|
49
|
+
...slotProps?.root?.style,
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
paper: {
|
|
53
|
+
...slotProps?.paper,
|
|
54
|
+
style: {
|
|
55
|
+
pointerEvents: 'auto',
|
|
56
|
+
...slotProps?.paper?.style,
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
}}
|
|
60
|
+
/>
|
|
61
|
+
);
|
|
62
|
+
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* @synced-from pie-lib/packages/render-ui/src/input-container.jsx
|
|
4
|
+
* @auto-generated
|
|
5
|
+
*
|
|
6
|
+
* This file is automatically synced from pie-elements and converted to TypeScript.
|
|
7
|
+
* Manual edits will be overwritten on next sync.
|
|
8
|
+
* To make changes, edit the upstream JavaScript file and run sync again.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import InputLabel from '@mui/material/InputLabel';
|
|
12
|
+
import PropTypes from 'prop-types';
|
|
13
|
+
import React from 'react';
|
|
14
|
+
import { styled } from '@mui/material/styles';
|
|
15
|
+
import FormControl from '@mui/material/FormControl';
|
|
16
|
+
|
|
17
|
+
const StyledFormControl: any = styled(FormControl)(({ theme }) => ({
|
|
18
|
+
margin: 0,
|
|
19
|
+
padding: 0,
|
|
20
|
+
flex: '1 0 auto',
|
|
21
|
+
minWidth: theme.spacing(4),
|
|
22
|
+
}));
|
|
23
|
+
|
|
24
|
+
const StyledInputLabel: any = styled(InputLabel)(() => ({
|
|
25
|
+
fontSize: 'inherit',
|
|
26
|
+
whiteSpace: 'nowrap',
|
|
27
|
+
margin: 0,
|
|
28
|
+
padding: 0,
|
|
29
|
+
alignSelf: 'flex-start',
|
|
30
|
+
position: 'absolute',
|
|
31
|
+
top: 0,
|
|
32
|
+
left: 0,
|
|
33
|
+
transformOrigin: 'top left',
|
|
34
|
+
pointerEvents: 'none',
|
|
35
|
+
// override MUI's default transform styles
|
|
36
|
+
'&.MuiInputLabel-shrink': {
|
|
37
|
+
transform: 'scale(0.75) translate(0, -0.75em)',
|
|
38
|
+
},
|
|
39
|
+
'&:not(.MuiInputLabel-shrink)': {
|
|
40
|
+
transform: 'translate(0, 0)',
|
|
41
|
+
},
|
|
42
|
+
}));
|
|
43
|
+
|
|
44
|
+
const InputContainer = ({ label, className, children }) => (
|
|
45
|
+
<StyledFormControl className={className}>
|
|
46
|
+
<StyledInputLabel shrink>{label}</StyledInputLabel>
|
|
47
|
+
{children}
|
|
48
|
+
</StyledFormControl>
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
InputContainer.propTypes = {
|
|
52
|
+
label: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,
|
|
53
|
+
className: PropTypes.string,
|
|
54
|
+
children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export default InputContainer;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* @synced-from pie-lib/packages/render-ui/src/preview-layout.jsx
|
|
4
|
+
* @auto-generated
|
|
5
|
+
*
|
|
6
|
+
* This file is automatically synced from pie-elements and converted to TypeScript.
|
|
7
|
+
* Manual edits will be overwritten on next sync.
|
|
8
|
+
* To make changes, edit the upstream JavaScript file and run sync again.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import React from 'react';
|
|
12
|
+
import { styled } from '@mui/material/styles';
|
|
13
|
+
import PropTypes from 'prop-types';
|
|
14
|
+
import UiLayout from './ui-layout.js';
|
|
15
|
+
|
|
16
|
+
const StyledUiLayout: any = styled(UiLayout)({
|
|
17
|
+
display: 'flex',
|
|
18
|
+
flexDirection: 'column',
|
|
19
|
+
position: 'relative',
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
class PreviewLayout extends React.Component {
|
|
23
|
+
static propTypes = {
|
|
24
|
+
ariaLabel: PropTypes.string,
|
|
25
|
+
children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,
|
|
26
|
+
role: PropTypes.string,
|
|
27
|
+
extraCSSRules: PropTypes.shape({
|
|
28
|
+
names: PropTypes.arrayOf(PropTypes.string),
|
|
29
|
+
rules: PropTypes.string,
|
|
30
|
+
}),
|
|
31
|
+
fontSizeFactor: PropTypes.number,
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
render() {
|
|
35
|
+
const { children, ariaLabel, role, extraCSSRules, fontSizeFactor, classes } = this.props;
|
|
36
|
+
const accessibility = ariaLabel ? { 'aria-label': ariaLabel, role } : {};
|
|
37
|
+
|
|
38
|
+
return (
|
|
39
|
+
<StyledUiLayout
|
|
40
|
+
{...accessibility}
|
|
41
|
+
extraCSSRules={extraCSSRules}
|
|
42
|
+
fontSizeFactor={fontSizeFactor}
|
|
43
|
+
classes={classes}
|
|
44
|
+
>
|
|
45
|
+
{children}
|
|
46
|
+
</StyledUiLayout>
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export default PreviewLayout;
|