@pie-lib/render-ui 4.31.1-next.0 → 4.32.1

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/esm/index.js ADDED
@@ -0,0 +1,1159 @@
1
+ import * as React from 'react';
2
+ import React__default, { Component } from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import * as icons from '@pie-lib/icons';
5
+ import Popover from '@material-ui/core/Popover';
6
+ import { withStyles, createMuiTheme, MuiThemeProvider } from '@material-ui/core/styles';
7
+ import { TransitionGroup, CSSTransition } from 'react-transition-group';
8
+ import classNames from 'classnames';
9
+ import green from '@material-ui/core/colors/green';
10
+ import orange from '@material-ui/core/colors/orange';
11
+ import pink from '@material-ui/core/colors/pink';
12
+ import indigo from '@material-ui/core/colors/indigo';
13
+ import red from '@material-ui/core/colors/red';
14
+ import debug from 'debug';
15
+ import { withStyles as withStyles$1 } from '@material-ui/core/styles/index';
16
+ import Collapse from '@material-ui/core/Collapse/index';
17
+ import { renderMath } from '@pie-lib/math-rendering';
18
+ import Button from '@material-ui/core/Button';
19
+ import Restore from '@material-ui/icons/Restore';
20
+ import Undo from '@material-ui/icons/Undo';
21
+ import isEmpty from 'lodash/isEmpty';
22
+ import InputLabel from '@material-ui/core/InputLabel';
23
+ import FormControl from '@material-ui/core/FormControl';
24
+
25
+ const defaults = {
26
+ TEXT: 'black',
27
+ DISABLED: 'grey',
28
+ DISABLED_SECONDARY: '#ABABAB',
29
+ CORRECT: green[500],
30
+ CORRECT_SECONDARY: green[50],
31
+ CORRECT_TERTIARY: '#0EA449',
32
+ CORRECT_WITH_ICON: '#087D38',
33
+ INCORRECT: orange[500],
34
+ INCORRECT_SECONDARY: red[50],
35
+ INCORRECT_WITH_ICON: '#BF0D00',
36
+ MISSING: red[700],
37
+ MISSING_WITH_ICON: '#6A78A1',
38
+ PRIMARY: indigo[500],
39
+ PRIMARY_LIGHT: indigo[200],
40
+ PRIMARY_DARK: indigo[800],
41
+ SECONDARY: pink.A400,
42
+ SECONDARY_LIGHT: pink[200],
43
+ SECONDARY_DARK: pink[900],
44
+ TERTIARY: '#146EB3',
45
+ TERTIARY_LIGHT: '#D0E2F0',
46
+ BACKGROUND: 'rgba(255,255,255,0)',
47
+ BACKGROUND_DARK: '#ECEDF1',
48
+ DROPDOWN_BACKGROUND: '#E0E1E6',
49
+ // this is used for inline-dropdown
50
+ // this is only used for multi-trait-rubric, we might want to use BACKGROUND_DARK instead
51
+ SECONDARY_BACKGROUND: 'rgba(241,241,241,1)',
52
+ BORDER: '#9A9A9A',
53
+ BORDER_LIGHT: '#D1D1D1',
54
+ BORDER_DARK: '#646464',
55
+ BORDER_GRAY: '#7E8494',
56
+ BLACK: '#000000',
57
+ WHITE: '#ffffff',
58
+ TRANSPARENT: 'transparent',
59
+ // this is used for multiple-choice accessibility
60
+ FOCUS_CHECKED: '#BBDEFB',
61
+ FOCUS_CHECKED_BORDER: '#1565C0',
62
+ FOCUS_UNCHECKED: '#E0E0E0',
63
+ FOCUS_UNCHECKED_BORDER: '#757575',
64
+ // this is used for select text tokens
65
+ BLUE_GREY100: '#F3F5F7',
66
+ BLUE_GREY300: '#C0C3CF',
67
+ BLUE_GREY600: '#7E8494',
68
+ BLUE_GREY900: '#152452',
69
+ // this is used for charting
70
+ FADED_PRIMARY: '#DCDAFB'
71
+ };
72
+ Object.freeze(defaults);
73
+ const v = prefix => (...args) => {
74
+ const fallback = args.pop();
75
+ return args.reduceRight((acc, v) => {
76
+ return `var(--${prefix}-${v}, ${acc})`;
77
+ }, fallback);
78
+ };
79
+ const pv = v('pie');
80
+ const text = () => pv('text', defaults.TEXT);
81
+ const disabled = () => pv('disabled', defaults.DISABLED);
82
+ const disabledSecondary = () => pv('disabled-secondary', defaults.DISABLED_SECONDARY);
83
+ const correct = () => pv('correct', defaults.CORRECT);
84
+ const correctSecondary = () => pv('correct-secondary', defaults.CORRECT_SECONDARY);
85
+ const correctTertiary = () => pv('correct-tertiary', defaults.CORRECT_TERTIARY);
86
+ const correctWithIcon = () => pv('correct-icon', defaults.CORRECT_WITH_ICON);
87
+ const incorrect = () => pv('incorrect', defaults.INCORRECT);
88
+ const incorrectWithIcon = () => pv('incorrect-icon', defaults.INCORRECT_WITH_ICON);
89
+ const incorrectSecondary = () => pv('incorrect-secondary', defaults.INCORRECT_SECONDARY);
90
+ const missing = () => pv('missing', defaults.MISSING);
91
+ const missingWithIcon = () => pv('missing-icon', defaults.MISSING_WITH_ICON);
92
+ const primary = () => pv('primary', defaults.PRIMARY);
93
+ const primaryLight = () => pv('primary-light', defaults.PRIMARY_LIGHT);
94
+ const primaryDark = () => pv('primary-dark', defaults.PRIMARY_DARK);
95
+ const primaryText = () => pv('primary-text', 'text', defaults.TEXT);
96
+ const fadedPrimary = () => pv('faded-primary', defaults.FADED_PRIMARY);
97
+ const secondary = () => pv('secondary', defaults.SECONDARY);
98
+ const secondaryLight = () => pv('secondary-light', defaults.SECONDARY_LIGHT);
99
+ const secondaryDark = () => pv('secondary-dark', defaults.SECONDARY_DARK);
100
+ const secondaryText = () => pv('secondary-text', 'text', defaults.TEXT);
101
+ const background = () => pv('background', defaults.BACKGROUND);
102
+ const backgroundDark = () => pv('background-dark', defaults.BACKGROUND_DARK);
103
+ const secondaryBackground = () => pv('secondary-background', defaults.SECONDARY_BACKGROUND);
104
+ const dropdownBackground = () => pv('dropdown-background', defaults.DROPDOWN_BACKGROUND);
105
+ const tertiary = () => pv('tertiary', defaults.TERTIARY);
106
+ const tertiaryLight = () => pv('tertiary-light', defaults.TERTIARY_LIGHT);
107
+ const border = () => pv('border', defaults.BORDER);
108
+ const borderLight = () => pv('border-light', defaults.BORDER_LIGHT);
109
+ const borderDark = () => pv('border-dark', defaults.BORDER_DARK);
110
+ const borderGray = () => pv('border-gray', defaults.BORDER_GRAY);
111
+ const black = () => pv('black', defaults.BLACK);
112
+ const white = () => pv('white', defaults.WHITE);
113
+ const transparent = () => defaults.TRANSPARENT;
114
+ const focusChecked = () => pv('focus-checked', defaults.FOCUS_CHECKED);
115
+ const focusCheckedBorder = () => pv('focus-checked-border', defaults.FOCUS_CHECKED_BORDER);
116
+ const focusUnchecked = () => pv('focus-unchecked', defaults.FOCUS_UNCHECKED);
117
+ const focusUncheckedBorder = () => pv('focus-unchecked-border', defaults.FOCUS_UNCHECKED_BORDER);
118
+ const blueGrey100 = () => pv('blue-grey-100', defaults.BLUE_GREY100);
119
+ const blueGrey300 = () => pv('blue-grey-300', defaults.BLUE_GREY300);
120
+ const blueGrey600 = () => pv('blue-grey-600', defaults.BLUE_GREY600);
121
+ const blueGrey900 = () => pv('blue-grey-900', defaults.BLUE_GREY900);
122
+ const visualElementsColors = {
123
+ AXIS_LINE_COLOR: '#5A53C9',
124
+ ROLLOVER_FILL_BAR_COLOR: '#050F2D',
125
+ GRIDLINES_COLOR: '#8E88EA',
126
+ PLOT_FILL_COLOR: '#1463B3'
127
+ };
128
+
129
+ var color = /*#__PURE__*/Object.freeze({
130
+ __proto__: null,
131
+ background: background,
132
+ backgroundDark: backgroundDark,
133
+ black: black,
134
+ blueGrey100: blueGrey100,
135
+ blueGrey300: blueGrey300,
136
+ blueGrey600: blueGrey600,
137
+ blueGrey900: blueGrey900,
138
+ border: border,
139
+ borderDark: borderDark,
140
+ borderGray: borderGray,
141
+ borderLight: borderLight,
142
+ correct: correct,
143
+ correctSecondary: correctSecondary,
144
+ correctTertiary: correctTertiary,
145
+ correctWithIcon: correctWithIcon,
146
+ defaults: defaults,
147
+ disabled: disabled,
148
+ disabledSecondary: disabledSecondary,
149
+ dropdownBackground: dropdownBackground,
150
+ fadedPrimary: fadedPrimary,
151
+ focusChecked: focusChecked,
152
+ focusCheckedBorder: focusCheckedBorder,
153
+ focusUnchecked: focusUnchecked,
154
+ focusUncheckedBorder: focusUncheckedBorder,
155
+ incorrect: incorrect,
156
+ incorrectSecondary: incorrectSecondary,
157
+ incorrectWithIcon: incorrectWithIcon,
158
+ missing: missing,
159
+ missingWithIcon: missingWithIcon,
160
+ primary: primary,
161
+ primaryDark: primaryDark,
162
+ primaryLight: primaryLight,
163
+ primaryText: primaryText,
164
+ secondary: secondary,
165
+ secondaryBackground: secondaryBackground,
166
+ secondaryDark: secondaryDark,
167
+ secondaryLight: secondaryLight,
168
+ secondaryText: secondaryText,
169
+ tertiary: tertiary,
170
+ tertiaryLight: tertiaryLight,
171
+ text: text,
172
+ transparent: transparent,
173
+ v: v,
174
+ visualElementsColors: visualElementsColors,
175
+ white: white
176
+ });
177
+
178
+ /**
179
+ * Lifted from multiple-choice - TODO: create a shared package for it.
180
+ */
181
+ const styleSheet = {
182
+ corespringFeedback: {
183
+ transformOrigin: '0% 0px 0px',
184
+ width: '100%',
185
+ display: 'block',
186
+ overflow: 'hidden',
187
+ '&:.incorrect': {
188
+ color: '#946202'
189
+ }
190
+ },
191
+ content: {
192
+ '-webkit-font-smoothing': 'antialiased',
193
+ backgroundColor: `var(--feedback-bg-color, ${disabled()})`,
194
+ borderRadius: '4px',
195
+ fontFamily: '"Roboto", "Noto", sans-serif',
196
+ lineHeight: '25px',
197
+ margin: '0px',
198
+ padding: '10px',
199
+ verticalAlign: 'middle',
200
+ color: 'var(--feedback-color, white)'
201
+ },
202
+ correct: {
203
+ backgroundColor: `var(--feedback-correct-bg-color, ${correct()})`
204
+ },
205
+ incorrect: {
206
+ backgroundColor: `var(--feedback-incorrect-bg-color, ${incorrect()})`
207
+ },
208
+ feedbackEnter: {
209
+ height: '1px'
210
+ },
211
+ feedbackEnterActive: {
212
+ height: '45px',
213
+ transition: 'height 500ms'
214
+ },
215
+ feedbackLeave: {
216
+ height: '45px'
217
+ },
218
+ feedbackLeaveActive: {
219
+ height: '1px',
220
+ transition: 'height 200ms'
221
+ }
222
+ };
223
+ class Feedback extends React__default.Component {
224
+ render() {
225
+ const {
226
+ correctness,
227
+ feedback,
228
+ classes
229
+ } = this.props;
230
+
231
+ function chooseFeedback(correctness) {
232
+ if (correctness && feedback) {
233
+ return /*#__PURE__*/React__default.createElement(CSSTransition, {
234
+ classNames: {
235
+ enter: classes.feedbackEnter,
236
+ enterActive: classes.feedbackEnterActive,
237
+ leave: classes.feedbackLeave,
238
+ leaveActive: classes.feedbackLeaveActive
239
+ },
240
+ key: "hasFeedback",
241
+ timeout: {
242
+ enter: 500,
243
+ exit: 300
244
+ }
245
+ }, /*#__PURE__*/React__default.createElement("div", {
246
+ className: classes.corespringFeedback
247
+ }, /*#__PURE__*/React__default.createElement("div", {
248
+ className: classNames(classes.content, classes[correctness]),
249
+ dangerouslySetInnerHTML: {
250
+ __html: feedback
251
+ }
252
+ })));
253
+ } else {
254
+ return null;
255
+ }
256
+ }
257
+
258
+ return /*#__PURE__*/React__default.createElement("div", null, /*#__PURE__*/React__default.createElement(TransitionGroup, null, chooseFeedback(correctness)));
259
+ }
260
+
261
+ }
262
+ Feedback.propTypes = {
263
+ correctness: PropTypes.string,
264
+ feedback: PropTypes.string,
265
+ classes: PropTypes.object.isRequired
266
+ };
267
+ var Feedback$1 = withStyles(styleSheet, {
268
+ name: 'Feedback'
269
+ })(Feedback);
270
+
271
+ const log = debug('pie-libs:render-ui:response-indicators');
272
+
273
+ const styles$4 = () => ({
274
+ responseIndicator: {
275
+ cursor: 'pointer'
276
+ },
277
+ paper: {
278
+ padding: '0',
279
+ borderRadius: '4px'
280
+ },
281
+ popover: {
282
+ cursor: 'pointer'
283
+ },
284
+ popperClose: {
285
+ cursor: 'pointer'
286
+ }
287
+ });
288
+
289
+ const BuildIndicator = (Icon, correctness) => {
290
+ class RawIndicator extends React__default.Component {
291
+ constructor(props) {
292
+ super(props);
293
+
294
+ this.handlePopoverOpen = event => {
295
+ log('[handlePopoverOpen]', event.target);
296
+ this.setState({
297
+ anchorEl: event.target
298
+ });
299
+ };
300
+
301
+ this.handlePopoverClose = () => {
302
+ this.setState({
303
+ anchorEl: null
304
+ });
305
+ };
306
+
307
+ this.state = {};
308
+ }
309
+
310
+ render() {
311
+ const {
312
+ feedback,
313
+ classes
314
+ } = this.props;
315
+ const {
316
+ anchorEl
317
+ } = this.state;
318
+ return /*#__PURE__*/React__default.createElement("div", {
319
+ className: feedback && classes.responseIndicator
320
+ }, /*#__PURE__*/React__default.createElement("span", {
321
+ ref: r => this.icon = r,
322
+ onClick: this.handlePopoverOpen
323
+ }, /*#__PURE__*/React__default.createElement(Icon, null)), feedback && /*#__PURE__*/React__default.createElement(Popover, {
324
+ className: classes.popover,
325
+ classes: {
326
+ paper: classes.paper
327
+ },
328
+ open: !!anchorEl,
329
+ anchorEl: anchorEl,
330
+ anchorOrigin: {
331
+ vertical: 'bottom',
332
+ horizontal: 'left'
333
+ },
334
+ transformOrigin: {
335
+ vertical: 'top',
336
+ horizontal: 'left'
337
+ },
338
+ onClose: this.handlePopoverClose
339
+ }, /*#__PURE__*/React__default.createElement(Feedback$1, {
340
+ feedback: feedback,
341
+ correctness: correctness
342
+ })));
343
+ }
344
+
345
+ }
346
+
347
+ RawIndicator.propTypes = {
348
+ feedback: PropTypes.string,
349
+ classes: PropTypes.object.isRequired
350
+ };
351
+ return withStyles(styles$4)(RawIndicator);
352
+ };
353
+
354
+ const Correct = BuildIndicator(icons.Correct, 'correct');
355
+ const Incorrect = BuildIndicator(icons.Incorrect, 'incorrect');
356
+ const PartiallyCorrect = BuildIndicator(icons.PartiallyCorrect, 'partially-correct');
357
+ const NothingSubmitted = BuildIndicator(icons.NothingSubmitted, 'nothing-submitted');
358
+
359
+ var responseIndicators = /*#__PURE__*/Object.freeze({
360
+ __proto__: null,
361
+ Correct: Correct,
362
+ Incorrect: Incorrect,
363
+ NothingSubmitted: NothingSubmitted,
364
+ PartiallyCorrect: PartiallyCorrect
365
+ });
366
+
367
+ class Collapsible extends React__default.Component {
368
+ constructor(...args) {
369
+ super(...args);
370
+ this.state = {
371
+ expanded: false
372
+ };
373
+
374
+ this.toggleExpanded = () => {
375
+ this.setState(state => ({
376
+ expanded: !state.expanded
377
+ }));
378
+ };
379
+ }
380
+
381
+ componentDidMount() {
382
+ renderMath(this.root);
383
+ }
384
+
385
+ componentDidUpdate() {
386
+ renderMath(this.root);
387
+ }
388
+
389
+ render() {
390
+ const {
391
+ classes,
392
+ labels,
393
+ children,
394
+ className
395
+ } = this.props;
396
+ const title = this.state.expanded ? labels.visible || 'Hide' : labels.hidden || 'Show';
397
+ return /*#__PURE__*/React__default.createElement("div", {
398
+ className: className,
399
+ ref: r => this.root = r
400
+ }, /*#__PURE__*/React__default.createElement("div", {
401
+ onClick: this.toggleExpanded
402
+ }, /*#__PURE__*/React__default.createElement("span", {
403
+ className: classes.title
404
+ }, title)), /*#__PURE__*/React__default.createElement(Collapse, {
405
+ in: this.state.expanded,
406
+ timeout: "auto",
407
+ unmountOnExit: true,
408
+ className: classes.collapsible
409
+ }, children));
410
+ }
411
+
412
+ }
413
+ Collapsible.propTypes = {
414
+ classes: PropTypes.object.isRequired,
415
+ className: PropTypes.string,
416
+ children: PropTypes.object,
417
+ labels: PropTypes.shape({
418
+ visible: PropTypes.string,
419
+ hidden: PropTypes.string
420
+ })
421
+ };
422
+ Collapsible.defaultProps = {
423
+ labels: {}
424
+ };
425
+ var index = withStyles$1(theme => ({
426
+ title: {
427
+ color: theme.palette.primary.light,
428
+ borderBottom: `1px dotted ${theme.palette.primary.light}`,
429
+ cursor: 'pointer'
430
+ },
431
+ collapsible: {
432
+ paddingTop: theme.spacing.unit * 2
433
+ }
434
+ }))(Collapsible);
435
+
436
+ function _extends() {
437
+ _extends = Object.assign || function (target) {
438
+ for (var i = 1; i < arguments.length; i++) {
439
+ var source = arguments[i];
440
+
441
+ for (var key in source) {
442
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
443
+ target[key] = source[key];
444
+ }
445
+ }
446
+ }
447
+
448
+ return target;
449
+ };
450
+
451
+ return _extends.apply(this, arguments);
452
+ }
453
+
454
+ function _objectWithoutPropertiesLoose(source, excluded) {
455
+ if (source == null) return {};
456
+ var target = {};
457
+ var sourceKeys = Object.keys(source);
458
+ var key, i;
459
+
460
+ for (i = 0; i < sourceKeys.length; i++) {
461
+ key = sourceKeys[i];
462
+ if (excluded.indexOf(key) >= 0) continue;
463
+ target[key] = source[key];
464
+ }
465
+
466
+ return target;
467
+ }
468
+
469
+ const _excluded$1 = ["classes"];
470
+
471
+ const styles$3 = theme => ({
472
+ wrapper: {
473
+ display: 'flex',
474
+ flexDirection: 'column'
475
+ },
476
+ resetUndoContainer: {
477
+ display: 'flex',
478
+ alignItems: 'center',
479
+ justifyContent: 'center'
480
+ },
481
+ icon: {
482
+ width: '24px',
483
+ height: '24px',
484
+ color: 'gray',
485
+ marginRight: theme.spacing.unit
486
+ },
487
+ buttonContainer: {
488
+ display: 'flex',
489
+ alignItems: 'center',
490
+ marginLeft: theme.spacing.unit * 3,
491
+ marginRight: theme.spacing.unit * 3
492
+ }
493
+ });
494
+ /**
495
+ * HOC that adds undo and reset functionality for session values
496
+ */
497
+
498
+
499
+ const withUndoReset = WrappedComponent => {
500
+ class WithUndoReset extends React.Component {
501
+ constructor(props) {
502
+ super(props);
503
+
504
+ this.onSessionChange = session => {
505
+ this.setState(state => ({
506
+ session,
507
+ changes: [...state.changes, session]
508
+ }), () => this.props.onSessionChange(session));
509
+ };
510
+
511
+ this.onUndo = () => {
512
+ this.setState(state => {
513
+ const newChanges = [...state.changes];
514
+ newChanges.pop();
515
+ return {
516
+ changes: newChanges,
517
+ session: newChanges.length ? newChanges[newChanges.length - 1] : state.sessionInitialValues
518
+ };
519
+ }, () => this.props.onSessionChange(this.state.session));
520
+ };
521
+
522
+ this.onReset = () => {
523
+ this.setState(state => ({
524
+ session: state.sessionInitialValues,
525
+ changes: []
526
+ }), () => this.props.onSessionChange(this.state.sessionInitialValues));
527
+ };
528
+
529
+ this.state = {
530
+ sessionInitialValues: JSON.parse(JSON.stringify(props.session)),
531
+ session: props.session,
532
+ changes: []
533
+ };
534
+ }
535
+
536
+ render() {
537
+ const _this$props = this.props,
538
+ {
539
+ classes
540
+ } = _this$props,
541
+ rest = _objectWithoutPropertiesLoose(_this$props, _excluded$1);
542
+
543
+ const {
544
+ changes,
545
+ session
546
+ } = this.state;
547
+ return /*#__PURE__*/React.createElement("div", {
548
+ className: classes.wrapper
549
+ }, /*#__PURE__*/React.createElement("div", {
550
+ className: classes.resetUndoContainer
551
+ }, /*#__PURE__*/React.createElement(Button, {
552
+ className: classes.buttonContainer,
553
+ color: "primary",
554
+ disabled: changes.length === 0,
555
+ onClick: this.onUndo
556
+ }, /*#__PURE__*/React.createElement(Undo, {
557
+ className: classes.icon
558
+ }), " Undo"), /*#__PURE__*/React.createElement(Button, {
559
+ className: classes.buttonContainer,
560
+ color: "primary",
561
+ disabled: changes.length === 0,
562
+ onClick: this.onReset
563
+ }, /*#__PURE__*/React.createElement(Restore, {
564
+ className: classes.icon
565
+ }), " Start Over")), /*#__PURE__*/React.createElement(WrappedComponent, _extends({}, rest, {
566
+ session: session,
567
+ onSessionChange: this.onSessionChange
568
+ })));
569
+ }
570
+
571
+ }
572
+
573
+ WithUndoReset.propTypes = {
574
+ classes: PropTypes.object,
575
+ session: PropTypes.object,
576
+ onSessionChange: PropTypes.func
577
+ };
578
+ return withStyles(styles$3)(WithUndoReset);
579
+ };
580
+
581
+ class ExtraCSSRulesMixin extends React__default.Component {
582
+ constructor(props) {
583
+ super(props);
584
+
585
+ this.appendExtraStyles = () => {
586
+ if (isEmpty(this.props.extraCSSRules) || !this.classesSheet) {
587
+ return;
588
+ }
589
+
590
+ const headElement = document.head || document.getElementsByTagName('head')[0];
591
+
592
+ if (!headElement) {
593
+ return;
594
+ }
595
+
596
+ if (!this.classesSheet.parentElement) {
597
+ headElement.appendChild(this.classesSheet);
598
+ }
599
+
600
+ const {
601
+ extraCSSRules,
602
+ classes
603
+ } = this.props;
604
+ this.classesSheet.innerHTML = `
605
+ .${classes.extraCSSRules} {
606
+ ${extraCSSRules.rules}
607
+ }
608
+ `;
609
+ };
610
+
611
+ this.classesSheet = document.createElement('style');
612
+ }
613
+
614
+ componentDidMount() {
615
+ this.appendExtraStyles();
616
+ }
617
+
618
+ }
619
+
620
+ ExtraCSSRulesMixin.propTypes = {
621
+ extraCSSRules: PropTypes.shape({
622
+ names: PropTypes.arrayOf(PropTypes.string),
623
+ rules: PropTypes.string
624
+ })
625
+ };
626
+ ExtraCSSRulesMixin.defaultProps = {
627
+ extraCSSRules: {}
628
+ };
629
+
630
+ const _excluded = ["children", "className", "classes", "fontSizeFactor"],
631
+ _excluded2 = ["extraCSSRules"];
632
+
633
+ class UiLayout extends ExtraCSSRulesMixin {
634
+ constructor(props) {
635
+ super(props);
636
+ this.classesSheet = document.createElement('style');
637
+ }
638
+
639
+ computeStyle(fontSizeFactor) {
640
+ const getFontSize = element => parseFloat(getComputedStyle(element).fontSize);
641
+
642
+ const rootFontSize = getFontSize(document.documentElement);
643
+ const bodyFontSize = getFontSize(document.body);
644
+ const effectiveFontSize = Math.max(rootFontSize, bodyFontSize);
645
+ return fontSizeFactor !== 1 ? {
646
+ fontSize: `${effectiveFontSize * fontSizeFactor}px`
647
+ } : null;
648
+ }
649
+
650
+ render() {
651
+ const _this$props = this.props,
652
+ {
653
+ children,
654
+ className,
655
+ classes,
656
+ fontSizeFactor
657
+ } = _this$props,
658
+ rest = _objectWithoutPropertiesLoose(_this$props, _excluded);
659
+
660
+ const finalClass = classNames(className, classes.extraCSSRules, classes.uiLayoutContainer);
661
+
662
+ const restProps = _objectWithoutPropertiesLoose(rest, _excluded2);
663
+
664
+ const style = this.computeStyle(fontSizeFactor);
665
+ return /*#__PURE__*/React__default.createElement("div", _extends({
666
+ className: finalClass
667
+ }, restProps, style && {
668
+ style
669
+ }), children);
670
+ }
671
+
672
+ }
673
+
674
+ UiLayout.propTypes = {
675
+ classes: PropTypes.object,
676
+ className: PropTypes.string,
677
+ children: PropTypes.array,
678
+ extraCSSRules: PropTypes.shape({
679
+ names: PropTypes.arrayOf(PropTypes.string),
680
+ rules: PropTypes.string
681
+ }),
682
+ fontSizeFactor: PropTypes.number
683
+ };
684
+ UiLayout.defaultProps = {
685
+ extraCSSRules: {},
686
+ fontSizeFactor: 1
687
+ };
688
+ const styles$2 = {
689
+ extraCSSRules: {},
690
+ // need this because some browsers set their own style on table
691
+ uiLayoutContainer: {
692
+ '& table, th, td': {
693
+ fontSize: 'inherit'
694
+ /* Ensure table elements inherit font size */
695
+
696
+ }
697
+ }
698
+ };
699
+ const Styled$1 = withStyles(styles$2)(UiLayout);
700
+
701
+ class PreviewLayout extends React__default.Component {
702
+ render() {
703
+ const {
704
+ children,
705
+ classes,
706
+ ariaLabel,
707
+ role,
708
+ extraCSSRules,
709
+ fontSizeFactor
710
+ } = this.props;
711
+ const accessibility = ariaLabel ? {
712
+ 'aria-label': ariaLabel,
713
+ role
714
+ } : {};
715
+ return /*#__PURE__*/React__default.createElement(Styled$1, _extends({
716
+ className: classes.container
717
+ }, accessibility, {
718
+ extraCSSRules: extraCSSRules,
719
+ fontSizeFactor: fontSizeFactor
720
+ }), children);
721
+ }
722
+
723
+ }
724
+
725
+ PreviewLayout.propTypes = {
726
+ ariaLabel: PropTypes.string,
727
+ children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,
728
+ classes: PropTypes.object,
729
+ role: PropTypes.string,
730
+ extraCSSRules: PropTypes.shape({
731
+ names: PropTypes.arrayOf(PropTypes.string),
732
+ rules: PropTypes.string
733
+ }),
734
+ fontSizeFactor: PropTypes.number
735
+ };
736
+
737
+ const styles$1 = () => ({
738
+ container: {
739
+ display: 'flex',
740
+ flexDirection: 'column',
741
+ position: 'relative'
742
+ }
743
+ });
744
+
745
+ const theme = createMuiTheme({
746
+ typography: {
747
+ useNextVariants: true
748
+ },
749
+ palette: {
750
+ action: {
751
+ disabled: 'rgba(0, 0, 0, 0.54);'
752
+ }
753
+ },
754
+ overrides: {
755
+ MuiRadio: {
756
+ root: {
757
+ '&$checked': {
758
+ color: '#3f51b5 !important'
759
+ }
760
+ }
761
+ },
762
+ MuiCheckbox: {
763
+ root: {
764
+ '&$checked': {
765
+ color: '#3f51b5 !important'
766
+ }
767
+ }
768
+ },
769
+ MuiTabs: {
770
+ root: {
771
+ borderBottom: '1px solid #eee'
772
+ }
773
+ },
774
+ MuiSwitch: {
775
+ root: {
776
+ '&$checked': {
777
+ color: '#3f51b5 !important',
778
+ '& + $bar': {
779
+ backgroundColor: '#3f51b5 !important',
780
+ opacity: 0.5
781
+ }
782
+ }
783
+ }
784
+ }
785
+ }
786
+ });
787
+ const Styled = withStyles(styles$1)(PreviewLayout);
788
+
789
+ const RootElem = props => /*#__PURE__*/React__default.createElement(MuiThemeProvider, {
790
+ theme: theme
791
+ }, /*#__PURE__*/React__default.createElement(Styled, props));
792
+
793
+ class HtmlAndMath extends React__default.Component {
794
+ render() {
795
+ const {
796
+ tag,
797
+ className,
798
+ html
799
+ } = this.props;
800
+ const Tag = tag || 'div';
801
+ return /*#__PURE__*/React__default.createElement(Tag, {
802
+ ref: r => this.node = r,
803
+ className: className,
804
+ dangerouslySetInnerHTML: {
805
+ __html: html
806
+ }
807
+ });
808
+ }
809
+
810
+ }
811
+ HtmlAndMath.propTypes = {
812
+ tag: PropTypes.string,
813
+ className: PropTypes.string,
814
+ html: PropTypes.string
815
+ };
816
+ HtmlAndMath.defaultProps = {
817
+ tag: 'div',
818
+ html: ''
819
+ };
820
+
821
+ const RawInputContainer = props => {
822
+ const {
823
+ label,
824
+ className,
825
+ children,
826
+ classes
827
+ } = props;
828
+ const names = classNames(classes.formControl, className);
829
+ return /*#__PURE__*/React__default.createElement(FormControl, {
830
+ className: names
831
+ }, /*#__PURE__*/React__default.createElement(InputLabel, {
832
+ className: classes.label,
833
+ shrink: true
834
+ }, label), children);
835
+ };
836
+
837
+ RawInputContainer.propTypes = {
838
+ label: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,
839
+ className: PropTypes.string,
840
+ children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,
841
+ classes: PropTypes.object.isRequired
842
+ };
843
+ var inputContainer = withStyles(theme => ({
844
+ formControl: {
845
+ marginLeft: 0,
846
+ marginRight: 0,
847
+ paddingBottom: theme.spacing.unit,
848
+ flex: '1 0 auto',
849
+ minWidth: theme.spacing.unit * 4
850
+ },
851
+ label: {
852
+ fontSize: 'inherit',
853
+ whiteSpace: 'nowrap'
854
+ }
855
+ }))(RawInputContainer);
856
+
857
+ const NEWLINE_BLOCK_REGEX = /\\embed\{newLine\}\[\]/g;
858
+ const NEWLINE_LATEX = '\\newline ';
859
+ class PreviewPrompt extends Component {
860
+ constructor(...args) {
861
+ super(...args);
862
+
863
+ this.parsedText = text => {
864
+ const {
865
+ customAudioButton
866
+ } = this.props;
867
+ const div = document.createElement('div');
868
+ div.innerHTML = text;
869
+ const audio = div.querySelector('audio');
870
+
871
+ if (audio) {
872
+ const source = document.createElement('source');
873
+ source.setAttribute('type', 'audio/mp3');
874
+ source.setAttribute('src', audio.getAttribute('src'));
875
+ audio.removeAttribute('src');
876
+ audio.setAttribute('id', 'pie-prompt-audio-player');
877
+ audio.appendChild(source);
878
+
879
+ if (customAudioButton) {
880
+ audio.style.display = 'none';
881
+ const playButton = document.createElement('div');
882
+ playButton.id = 'play-audio-button';
883
+ Object.assign(playButton.style, {
884
+ cursor: 'pointer',
885
+ display: 'block',
886
+ width: '128px',
887
+ height: '128px',
888
+ backgroundImage: `url(${customAudioButton.pauseImage})`,
889
+ backgroundSize: 'cover',
890
+ borderRadius: '50%',
891
+ border: '1px solid #326295'
892
+ });
893
+ audio.parentNode.insertBefore(playButton, audio);
894
+ }
895
+ }
896
+
897
+ return div.innerHTML;
898
+ };
899
+ }
900
+
901
+ addCustomAudioButtonControls() {
902
+ const {
903
+ autoplayAudioEnabled,
904
+ customAudioButton
905
+ } = this.props;
906
+ const playButton = document.getElementById('play-audio-button');
907
+ const audio = document.getElementById('pie-prompt-audio-player');
908
+
909
+ if (autoplayAudioEnabled && audio) {
910
+ audio.play().then(() => {
911
+ if (playButton && customAudioButton) {
912
+ audio.addEventListener('ended', handleAudioEnded);
913
+ }
914
+ }).catch(error => {
915
+ console.error('Error playing audio', error);
916
+ });
917
+ }
918
+
919
+ if (!playButton || !audio || !customAudioButton) return;
920
+
921
+ const handlePlayClick = () => {
922
+ // if already playing, don't play again
923
+ if (!audio.paused) return;
924
+ if (playButton.style.backgroundImage.includes(customAudioButton.pauseImage)) return;
925
+ audio.play();
926
+ };
927
+
928
+ const handleAudioEnded = () => {
929
+ playButton.style.backgroundImage = `url(${customAudioButton.playImage})`;
930
+ };
931
+
932
+ const handleAudioPlay = () => {
933
+ Object.assign(playButton.style, {
934
+ backgroundImage: `url(${customAudioButton.pauseImage})`,
935
+ border: '1px solid #ccc'
936
+ });
937
+ };
938
+
939
+ const handleAudioPause = () => {
940
+ Object.assign(playButton.style, {
941
+ backgroundImage: `url(${customAudioButton.playImage})`,
942
+ border: '1px solid #326295'
943
+ });
944
+ };
945
+
946
+ playButton.addEventListener('click', handlePlayClick);
947
+ audio.addEventListener('play', handleAudioPlay);
948
+ audio.addEventListener('pause', handleAudioPause);
949
+ audio.addEventListener('ended', handleAudioEnded); // store event handler references so they can be removed later
950
+
951
+ this._handlePlayClick = handlePlayClick;
952
+ this._handleAudioPlay = handleAudioPlay;
953
+ this._handleAudioPause = handleAudioPause;
954
+ this._handleAudioEnded = handleAudioEnded;
955
+ }
956
+
957
+ removeCustomAudioButtonListeners() {
958
+ const playButton = document.getElementById('play-audio-button');
959
+ const audio = document.querySelector('audio');
960
+ if (!playButton || !audio) return; // remove event listeners using stored references
961
+
962
+ playButton.removeEventListener('click', this._handlePlayClick);
963
+ audio.removeEventListener('play', this._handleAudioPlay);
964
+ audio.removeEventListener('pause', this._handleAudioPause);
965
+ audio.removeEventListener('ended', this._handleAudioEnded);
966
+ }
967
+
968
+ componentDidMount() {
969
+ this.alignImages();
970
+ this.addCustomAudioButtonControls();
971
+ }
972
+
973
+ componentDidUpdate() {
974
+ this.alignImages();
975
+ }
976
+
977
+ componentWillUnmount() {
978
+ this.removeCustomAudioButtonListeners();
979
+ }
980
+
981
+ alignImages() {
982
+ const previewPrompts = document.querySelectorAll('#preview-prompt');
983
+ previewPrompts.forEach(previewPrompt => {
984
+ const images = previewPrompt.getElementsByTagName('img');
985
+
986
+ if (images && images.length) {
987
+ for (let image of images) {
988
+ // check if alignment property was set
989
+ if (image.attributes && image.attributes.alignment && image.attributes.alignment.value) {
990
+ const parentNode = image.parentElement; // check if div is not already added to dom and replace current image with wrapped image
991
+
992
+ if (!(parentNode.tagName === 'DIV' && parentNode.style.display === 'flex' && parentNode.style.width === '100%')) {
993
+ const div = document.createElement('div');
994
+ div.style.display = 'flex';
995
+ div.style.width = '100%';
996
+ const copyImage = image.cloneNode(true);
997
+ div.appendChild(copyImage);
998
+ parentNode.replaceChild(div, image);
999
+ }
1000
+ }
1001
+ }
1002
+ }
1003
+ });
1004
+ }
1005
+
1006
+ render() {
1007
+ const {
1008
+ prompt,
1009
+ classes,
1010
+ tagName,
1011
+ className,
1012
+ onClick,
1013
+ defaultClassName
1014
+ } = this.props;
1015
+ const CustomTag = tagName || 'div'; // legend tag was added once with accessibility tasks, wee need extra style to make it work with images alignment
1016
+
1017
+ const legendClass = tagName === 'legend' ? 'legend' : '';
1018
+ const customClasses = `${classes.promptTable} ${classes[className] || ''} ${defaultClassName || ''} ${classes[legendClass] || ''}`;
1019
+ return /*#__PURE__*/React__default.createElement(CustomTag, {
1020
+ id: 'preview-prompt',
1021
+ onClick: onClick,
1022
+ className: customClasses,
1023
+ dangerouslySetInnerHTML: {
1024
+ __html: this.parsedText(prompt || '').replace(NEWLINE_BLOCK_REGEX, NEWLINE_LATEX)
1025
+ }
1026
+ });
1027
+ }
1028
+
1029
+ }
1030
+ PreviewPrompt.propTypes = {
1031
+ classes: PropTypes.object,
1032
+ prompt: PropTypes.string,
1033
+ tagName: PropTypes.string,
1034
+ className: PropTypes.string,
1035
+ onClick: PropTypes.func,
1036
+ defaultClassName: PropTypes.string,
1037
+ autoplayAudioEnabled: PropTypes.bool,
1038
+ customAudioButton: {
1039
+ playImage: PropTypes.string,
1040
+ pauseImage: PropTypes.string
1041
+ }
1042
+ };
1043
+ PreviewPrompt.defaultProps = {
1044
+ onClick: () => {}
1045
+ };
1046
+
1047
+ const styles = theme => ({
1048
+ prompt: {
1049
+ verticalAlign: 'middle',
1050
+ color: text()
1051
+ },
1052
+ legend: {
1053
+ width: '100%',
1054
+ fontSize: 'inherit !important'
1055
+ },
1056
+ rationale: {
1057
+ paddingLeft: theme.spacing.unit * 4,
1058
+ paddingBottom: theme.spacing.unit
1059
+ },
1060
+ label: {
1061
+ color: `${text()} !important`,
1062
+ //'var(--choice-input-color, black)',
1063
+ display: 'flex',
1064
+ flexDirection: 'column',
1065
+ verticalAlign: 'middle',
1066
+ cursor: 'pointer',
1067
+ '& > p': {
1068
+ margin: '0 0 0 0 !important'
1069
+ }
1070
+ },
1071
+ promptTable: {
1072
+ '&:not(.MathJax) > table': {
1073
+ borderCollapse: 'collapse'
1074
+ },
1075
+ '&:not(.MathJax) > table tr': {
1076
+ '&:nth-child(2n)': {
1077
+ backgroundColor: '#f6f8fa',
1078
+ color: theme.palette.common.black
1079
+ }
1080
+ },
1081
+ // align table content to left as per STAR requirement PD-3687
1082
+ '&:not(.MathJax) table td, &:not(.MathJax) table th': {
1083
+ padding: '.6em 1em',
1084
+ textAlign: 'left'
1085
+ },
1086
+ // added this to fix alignment of text in prompt imported from studio (PD-3423)
1087
+ '&:not(.MathJax) > table td > p.kds-indent': {
1088
+ textAlign: 'initial'
1089
+ }
1090
+ }
1091
+ });
1092
+
1093
+ var previewPrompt = withStyles(styles)(PreviewPrompt);
1094
+
1095
+ const Readable = props => {
1096
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, React__default.Children.map(props.children, child => /*#__PURE__*/React__default.cloneElement(child, {
1097
+ 'data-pie-readable': props.false === undefined
1098
+ })));
1099
+ };
1100
+
1101
+ Readable.propTypes = {
1102
+ children: PropTypes.node,
1103
+ false: PropTypes.bool
1104
+ };
1105
+
1106
+ const Purpose = props => {
1107
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, React__default.Children.map(props.children, child => /*#__PURE__*/React__default.cloneElement(child, {
1108
+ 'data-pie-purpose': props.purpose
1109
+ })));
1110
+ };
1111
+
1112
+ Purpose.propTypes = {
1113
+ children: PropTypes.node,
1114
+ purpose: PropTypes.string
1115
+ };
1116
+
1117
+ let parser$1;
1118
+
1119
+ if (typeof window !== 'undefined') {
1120
+ parser$1 = new DOMParser();
1121
+ }
1122
+
1123
+ const markupToText = s => {
1124
+ const root = parser$1.parseFromString(s, 'text/html');
1125
+ return root.body.textContent;
1126
+ };
1127
+
1128
+ const hasText = s => {
1129
+ if (!s) {
1130
+ return false;
1131
+ }
1132
+
1133
+ const tc = markupToText(s);
1134
+ return !!(tc && tc.trim());
1135
+ };
1136
+
1137
+ let parser;
1138
+
1139
+ if (typeof window !== 'undefined') {
1140
+ parser = new DOMParser();
1141
+ }
1142
+ /*
1143
+ * Check if the string contains at least one media element.
1144
+ */
1145
+
1146
+
1147
+ const hasMedia = s => {
1148
+ if (!s) {
1149
+ return false;
1150
+ }
1151
+
1152
+ const root = parser.parseFromString(s, 'text/html');
1153
+ return !!root.body.querySelector('img') || !!root.body.querySelector('video') || !!root.body.querySelector('audio');
1154
+ };
1155
+
1156
+ var enableAudioAutoplayImage = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAJYAyADAREAAhEBAxEB/8QAHgABAQABBQEBAQAAAAAAAAAAAAEIAgMGBwkEBQr/xABiEAACAQIDBAMKCAYMCgYLAQAAAQIDEQQFIQYSMUEHCFETFRYiUmFxkdHhCRRjgaGisfAXMjRTcsEjJDY4QmJ1dpKztMQYMzdEVIKyw9PxQ1hmc3SWJzVFRlZXhJOUldJk/8QAGwEBAQADAQEBAAAAAAAAAAAAAAcEBQYCAQP/xABBEQEAAQIDAgkJBgUFAQEBAAAAAQIDBAYRBSESMUFEYXGCscITNDVRcoGRocEUIjJS0eEVI2KSsjNCU6LwFtLx/9oADAMBAAIRAxEAPwD1TAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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';
1157
+
1158
+ export { ExtraCSSRulesMixin as AppendCSSRules, index as Collapsible, enableAudioAutoplayImage as EnableAudioAutoplayImage, Feedback$1 as Feedback, HtmlAndMath, inputContainer as InputContainer, RootElem as PreviewLayout, previewPrompt as PreviewPrompt, Purpose, Readable, Styled$1 as UiLayout, color, hasMedia, hasText, responseIndicators as indicators, withUndoReset };
1159
+ //# sourceMappingURL=index.js.map