studiokit-scaffolding-js 4.9.0-next.1.2 → 4.9.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.
@@ -13,7 +13,6 @@ export * from './Notification';
13
13
  export * from './OptionalRecord';
14
14
  export * from './OwnerSchedule';
15
15
  export * from './PropertyOfType';
16
- export * from './Quill';
17
16
  export * from './RoleDescription';
18
17
  export * from './Search';
19
18
  export * from './SimpleLocation';
@@ -25,7 +25,6 @@ __exportStar(require("./Notification"), exports);
25
25
  __exportStar(require("./OptionalRecord"), exports);
26
26
  __exportStar(require("./OwnerSchedule"), exports);
27
27
  __exportStar(require("./PropertyOfType"), exports);
28
- __exportStar(require("./Quill"), exports);
29
28
  __exportStar(require("./RoleDescription"), exports);
30
29
  __exportStar(require("./Search"), exports);
31
30
  __exportStar(require("./SimpleLocation"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "studiokit-scaffolding-js",
3
- "version": "4.9.0-next.1.2",
3
+ "version": "4.9.0",
4
4
  "description": "Common scaffolding for Studio apps at Purdue",
5
5
  "repository": "https://gitlab.com/purdue-informatics/studiokit/studiokit-scaffolding-js",
6
6
  "license": "MIT",
@@ -136,7 +136,7 @@
136
136
  "react-ga": "^3.3.0",
137
137
  "react-helmet": "^6.1.0",
138
138
  "react-modal": "^3.12.1",
139
- "react-quill": "purdue-tlt/react-quill#fix/auto-focus",
139
+ "react-quill": "^1.3.5",
140
140
  "react-redux": "^7.2.2",
141
141
  "react-router": "^5.2.0",
142
142
  "react-router-bootstrap": "^0.25.0",
@@ -1,6 +0,0 @@
1
- import { FunctionComponent } from 'react';
2
- export interface ErrorMessageProps {
3
- message: string | JSX.Element | undefined;
4
- hideIcon?: boolean;
5
- }
6
- export declare const ErrorMessage: FunctionComponent<ErrorMessageProps>;
@@ -1,18 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ErrorMessage = void 0;
7
- var ErrorOutline_1 = __importDefault(require("@material-ui/icons/ErrorOutline"));
8
- var react_1 = __importDefault(require("react"));
9
- var ErrorMessage = function (_a) {
10
- var message = _a.message, hideIcon = _a.hideIcon;
11
- if (!message) {
12
- return null;
13
- }
14
- return (react_1.default.createElement("span", { className: "color-red b" + (!hideIcon ? ' flex items-center' : '') },
15
- !hideIcon && react_1.default.createElement(ErrorOutline_1.default, { className: "mr1" }),
16
- message));
17
- };
18
- exports.ErrorMessage = ErrorMessage;
@@ -1,3 +0,0 @@
1
- import { SvgIconProps } from '@material-ui/core/SvgIcon';
2
- import { FunctionComponent } from 'react';
3
- export declare const IconAlphaList: FunctionComponent<SvgIconProps>;
@@ -1,24 +0,0 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- var __importDefault = (this && this.__importDefault) || function (mod) {
14
- return (mod && mod.__esModule) ? mod : { "default": mod };
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.IconAlphaList = void 0;
18
- var SvgIcon_1 = __importDefault(require("@material-ui/core/SvgIcon"));
19
- var react_1 = __importDefault(require("react"));
20
- /** Copied from `@mdi/js` */
21
- var mdiOrderAlphabeticalAscending = 'M12 5H22V7H12M12 19V17H22V19M12 11H22V13H12M9 13V15L5.67 19H9V21H3V19L6.33 15H3V13M7 3H5C3.9 3 3 3.9 3 5V11H5V9H7V11H9V5C9 3.9 8.11 3 7 3M7 7H5V5H7Z';
22
- var IconAlphaList = function (props) { return (react_1.default.createElement(SvgIcon_1.default, __assign({}, props),
23
- react_1.default.createElement("path", { d: mdiOrderAlphabeticalAscending }))); };
24
- exports.IconAlphaList = IconAlphaList;
@@ -1,5 +0,0 @@
1
- import { SvgIconProps } from '@material-ui/core/SvgIcon';
2
- import { FunctionComponent } from 'react';
3
- /** Copied from `@mdi/js` */
4
- export declare const mdiTable = "M5,4H19A2,2 0 0,1 21,6V18A2,2 0 0,1 19,20H5A2,2 0 0,1 3,18V6A2,2 0 0,1 5,4M5,8V12H11V8H5M13,8V12H19V8H13M5,14V18H11V14H5M13,14V18H19V14H13Z";
5
- export declare const IconTable: FunctionComponent<SvgIconProps>;
@@ -1,24 +0,0 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- var __importDefault = (this && this.__importDefault) || function (mod) {
14
- return (mod && mod.__esModule) ? mod : { "default": mod };
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.IconTable = exports.mdiTable = void 0;
18
- var SvgIcon_1 = __importDefault(require("@material-ui/core/SvgIcon"));
19
- var react_1 = __importDefault(require("react"));
20
- /** Copied from `@mdi/js` */
21
- exports.mdiTable = 'M5,4H19A2,2 0 0,1 21,6V18A2,2 0 0,1 19,20H5A2,2 0 0,1 3,18V6A2,2 0 0,1 5,4M5,8V12H11V8H5M13,8V12H19V8H13M5,14V18H11V14H5M13,14V18H19V14H13Z';
22
- var IconTable = function (props) { return (react_1.default.createElement(SvgIcon_1.default, __assign({}, props),
23
- react_1.default.createElement("path", { d: exports.mdiTable }))); };
24
- exports.IconTable = IconTable;
@@ -1,3 +0,0 @@
1
- import { SvgIconProps } from '@material-ui/core/SvgIcon';
2
- import { FunctionComponent } from 'react';
3
- export declare const IconTableDeleteCol: FunctionComponent<SvgIconProps>;
@@ -1,24 +0,0 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- var __importDefault = (this && this.__importDefault) || function (mod) {
14
- return (mod && mod.__esModule) ? mod : { "default": mod };
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.IconTableDeleteCol = void 0;
18
- var SvgIcon_1 = __importDefault(require("@material-ui/core/SvgIcon"));
19
- var react_1 = __importDefault(require("react"));
20
- /** Copied from `@mdi/js` */
21
- var mdiTableColumnRemove = 'M4,2H11A2,2 0 0,1 13,4V20A2,2 0 0,1 11,22H4A2,2 0 0,1 2,20V4A2,2 0 0,1 4,2M4,10V14H11V10H4M4,16V20H11V16H4M4,4V8H11V4H4M17.59,12L15,9.41L16.41,8L19,10.59L21.59,8L23,9.41L20.41,12L23,14.59L21.59,16L19,13.41L16.41,16L15,14.59L17.59,12Z';
22
- var IconTableDeleteCol = function (props) { return (react_1.default.createElement(SvgIcon_1.default, __assign({}, props),
23
- react_1.default.createElement("path", { d: mdiTableColumnRemove }))); };
24
- exports.IconTableDeleteCol = IconTableDeleteCol;
@@ -1,3 +0,0 @@
1
- import { SvgIconProps } from '@material-ui/core/SvgIcon';
2
- import { FunctionComponent } from 'react';
3
- export declare const IconTableDeleteRow: FunctionComponent<SvgIconProps>;
@@ -1,24 +0,0 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- var __importDefault = (this && this.__importDefault) || function (mod) {
14
- return (mod && mod.__esModule) ? mod : { "default": mod };
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.IconTableDeleteRow = void 0;
18
- var SvgIcon_1 = __importDefault(require("@material-ui/core/SvgIcon"));
19
- var react_1 = __importDefault(require("react"));
20
- /** Copied from `@mdi/js` */
21
- var mdiTableRowRemove = 'M9.41,13L12,15.59L14.59,13L16,14.41L13.41,17L16,19.59L14.59,21L12,18.41L9.41,21L8,19.59L10.59,17L8,14.41L9.41,13M22,9A2,2 0 0,1 20,11H4A2,2 0 0,1 2,9V6A2,2 0 0,1 4,4H20A2,2 0 0,1 22,6V9M4,9H8V6H4V9M10,9H14V6H10V9M16,9H20V6H16V9Z';
22
- var IconTableDeleteRow = function (props) { return (react_1.default.createElement(SvgIcon_1.default, __assign({}, props),
23
- react_1.default.createElement("path", { d: mdiTableRowRemove }))); };
24
- exports.IconTableDeleteRow = IconTableDeleteRow;
@@ -1,3 +0,0 @@
1
- import { SvgIconProps } from '@material-ui/core/SvgIcon';
2
- import { FunctionComponent } from 'react';
3
- export declare const IconTableInsertCol: FunctionComponent<SvgIconProps>;
@@ -1,24 +0,0 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- var __importDefault = (this && this.__importDefault) || function (mod) {
14
- return (mod && mod.__esModule) ? mod : { "default": mod };
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.IconTableInsertCol = void 0;
18
- var SvgIcon_1 = __importDefault(require("@material-ui/core/SvgIcon"));
19
- var react_1 = __importDefault(require("react"));
20
- /** Copied from `@mdi/js` */
21
- var mdiTableColumnPlusAfter = 'M11,2A2,2 0 0,1 13,4V20A2,2 0 0,1 11,22H2V2H11M4,10V14H11V10H4M4,16V20H11V16H4M4,4V8H11V4H4M15,11H18V8H20V11H23V13H20V16H18V13H15V11Z';
22
- var IconTableInsertCol = function (props) { return (react_1.default.createElement(SvgIcon_1.default, __assign({}, props),
23
- react_1.default.createElement("path", { d: mdiTableColumnPlusAfter }))); };
24
- exports.IconTableInsertCol = IconTableInsertCol;
@@ -1,3 +0,0 @@
1
- import { SvgIconProps } from '@material-ui/core/SvgIcon';
2
- import { FunctionComponent } from 'react';
3
- export declare const IconTableInsertRow: FunctionComponent<SvgIconProps>;
@@ -1,24 +0,0 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- var __importDefault = (this && this.__importDefault) || function (mod) {
14
- return (mod && mod.__esModule) ? mod : { "default": mod };
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.IconTableInsertRow = void 0;
18
- var SvgIcon_1 = __importDefault(require("@material-ui/core/SvgIcon"));
19
- var react_1 = __importDefault(require("react"));
20
- /** Copied from `@mdi/js` */
21
- var mdiTableRowPlusAfter = 'M22,10A2,2 0 0,1 20,12H4A2,2 0 0,1 2,10V3H4V5H8V3H10V5H14V3H16V5H20V3H22V10M4,10H8V7H4V10M10,10H14V7H10V10M20,10V7H16V10H20M11,14H13V17H16V19H13V22H11V19H8V17H11V14Z';
22
- var IconTableInsertRow = function (props) { return (react_1.default.createElement(SvgIcon_1.default, __assign({}, props),
23
- react_1.default.createElement("path", { d: mdiTableRowPlusAfter }))); };
24
- exports.IconTableInsertRow = IconTableInsertRow;
@@ -1,29 +0,0 @@
1
- import { FunctionComponent } from 'react';
2
- import ReactQuill from 'react-quill';
3
- export declare const defaultFormats: string[];
4
- export declare const defaultMinimumFormats: string[];
5
- export declare type FormatSection = (disabled?: boolean) => JSX.Element;
6
- export declare const fontSizeSection: FormatSection;
7
- export declare const textFormatSection: FormatSection;
8
- export declare const alignmentSection: FormatSection;
9
- export declare const tableSection: FormatSection;
10
- export declare const embedSection: FormatSection;
11
- export declare const minimumEmbedSection: FormatSection;
12
- export declare const additionalEmbedSection: FormatSection;
13
- export declare const defaultFeatures: FormatSection[];
14
- export declare const defaultMinimumFeatures: FormatSection[];
15
- export declare const defaultMinimumAdditionalFeatures: FormatSection[];
16
- export interface CustomToolbarProps {
17
- guid: string;
18
- className?: string;
19
- disabled?: boolean;
20
- formats?: string[];
21
- features?: FormatSection[];
22
- useMinimumFeatures?: boolean;
23
- minimumFormats?: string[];
24
- minimumFeatures?: FormatSection[];
25
- minimumAdditionalFeatures?: FormatSection[];
26
- reactQuillRef: ReactQuill | null;
27
- isVisibleWhenDisabled?: boolean;
28
- }
29
- export declare const CustomToolbar: FunctionComponent<CustomToolbarProps>;
@@ -1,192 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
- var __importDefault = (this && this.__importDefault) || function (mod) {
22
- return (mod && mod.__esModule) ? mod : { "default": mod };
23
- };
24
- Object.defineProperty(exports, "__esModule", { value: true });
25
- exports.CustomToolbar = exports.defaultMinimumAdditionalFeatures = exports.defaultMinimumFeatures = exports.defaultFeatures = exports.additionalEmbedSection = exports.minimumEmbedSection = exports.embedSection = exports.tableSection = exports.alignmentSection = exports.textFormatSection = exports.fontSizeSection = exports.defaultMinimumFormats = exports.defaultFormats = void 0;
26
- var MoreHoriz_1 = __importDefault(require("@material-ui/icons/MoreHoriz"));
27
- var react_1 = __importStar(require("react"));
28
- var IconAlphaList_1 = require("../Icons/IconAlphaList");
29
- var IconTable_1 = require("../Icons/IconTable");
30
- var IconTableDeleteCol_1 = require("../Icons/IconTableDeleteCol");
31
- var IconTableDeleteRow_1 = require("../Icons/IconTableDeleteRow");
32
- var IconTableInsertCol_1 = require("../Icons/IconTableInsertCol");
33
- var IconTableInsertRow_1 = require("../Icons/IconTableInsertRow");
34
- var accessibilityFix_1 = require("./accessibilityFix");
35
- var constants_1 = require("./TableModule/constants");
36
- exports.defaultFormats = [
37
- 'header',
38
- 'font',
39
- 'size',
40
- 'bold',
41
- 'italic',
42
- 'underline',
43
- 'script',
44
- 'align',
45
- 'list',
46
- 'bullet',
47
- 'indent',
48
- 'link',
49
- 'image',
50
- 'video',
51
- 'formula',
52
- 'alt',
53
- 'width',
54
- 'table-container',
55
- 'table',
56
- 'tbody',
57
- 'tr',
58
- 'td'
59
- ];
60
- exports.defaultMinimumFormats = [
61
- 'bold',
62
- 'italic',
63
- 'underline',
64
- 'script',
65
- 'image',
66
- 'formula',
67
- 'alt',
68
- 'size',
69
- 'align',
70
- 'list',
71
- 'bullet',
72
- 'indent',
73
- 'link',
74
- 'video'
75
- ];
76
- var fontSizeSection = function () {
77
- return react_1.default.createElement("select", { className: "ql-size" });
78
- };
79
- exports.fontSizeSection = fontSizeSection;
80
- var textFormatSection = function (disabled) {
81
- return (react_1.default.createElement(react_1.default.Fragment, null,
82
- react_1.default.createElement("button", { className: "ql-bold", disabled: disabled }),
83
- react_1.default.createElement("button", { className: "ql-italic", disabled: disabled }),
84
- react_1.default.createElement("button", { className: "ql-underline", disabled: disabled }),
85
- react_1.default.createElement("button", { className: "ql-script", value: "sub", disabled: disabled }),
86
- react_1.default.createElement("button", { className: "ql-script", value: "super", disabled: disabled })));
87
- };
88
- exports.textFormatSection = textFormatSection;
89
- var alignmentSection = function (disabled) {
90
- return (react_1.default.createElement(react_1.default.Fragment, null,
91
- react_1.default.createElement("button", { className: "ql-list", value: "ordered", disabled: disabled }),
92
- react_1.default.createElement("button", { className: "ql-list", value: "bullet", disabled: disabled }),
93
- react_1.default.createElement("button", { className: "ql-list", value: "alpha", disabled: disabled, title: "Toggle alpha list", "aria-label": "Toggle alpha list" },
94
- react_1.default.createElement(IconAlphaList_1.IconAlphaList, { style: { width: 'auto' } })),
95
- react_1.default.createElement("button", { className: "ql-indent", value: "-1", disabled: disabled }),
96
- react_1.default.createElement("button", { className: "ql-indent", value: "+1", disabled: disabled })));
97
- };
98
- exports.alignmentSection = alignmentSection;
99
- var tableSection = function (disabled) {
100
- return (react_1.default.createElement(react_1.default.Fragment, null,
101
- react_1.default.createElement("select", { className: "ql-table" }, Array.from(Array(5).keys()).flatMap(function (row) {
102
- return Array.from(Array(5).keys()).map(function (col) {
103
- return react_1.default.createElement("option", { key: row + "-" + col, value: "" + constants_1.TABLE_ACTION.NEW_TABLE + (row + 1) + "_" + (col + 1) });
104
- });
105
- })),
106
- react_1.default.createElement("button", { className: "ql-table", value: "insert-row" },
107
- react_1.default.createElement(IconTableInsertRow_1.IconTableInsertRow, { style: { width: 'auto' } })),
108
- react_1.default.createElement("button", { className: "ql-table", value: "delete-row" },
109
- react_1.default.createElement(IconTableDeleteRow_1.IconTableDeleteRow, { style: { width: 'auto' } })),
110
- react_1.default.createElement("button", { className: "ql-table", value: "insert-col" },
111
- react_1.default.createElement(IconTableInsertCol_1.IconTableInsertCol, { style: { width: 'auto' } })),
112
- react_1.default.createElement("button", { className: "ql-table", value: "delete-col" },
113
- react_1.default.createElement(IconTableDeleteCol_1.IconTableDeleteCol, { style: { width: 'auto' } }))));
114
- };
115
- exports.tableSection = tableSection;
116
- var embedSection = function (disabled) {
117
- return (react_1.default.createElement(react_1.default.Fragment, null,
118
- react_1.default.createElement("button", { className: "ql-link", disabled: disabled }),
119
- react_1.default.createElement("button", { className: "ql-image", disabled: disabled }),
120
- react_1.default.createElement("button", { className: "ql-video", disabled: disabled }),
121
- react_1.default.createElement("button", { className: "ql-formula", disabled: disabled })));
122
- };
123
- exports.embedSection = embedSection;
124
- var minimumEmbedSection = function (disabled) {
125
- return (react_1.default.createElement(react_1.default.Fragment, null,
126
- react_1.default.createElement("button", { className: "ql-image", disabled: disabled }),
127
- react_1.default.createElement("button", { className: "ql-formula", disabled: disabled })));
128
- };
129
- exports.minimumEmbedSection = minimumEmbedSection;
130
- var additionalEmbedSection = function (disabled) {
131
- return (react_1.default.createElement(react_1.default.Fragment, null,
132
- react_1.default.createElement("button", { className: "ql-link", disabled: disabled }),
133
- react_1.default.createElement("button", { className: "ql-video", disabled: disabled })));
134
- };
135
- exports.additionalEmbedSection = additionalEmbedSection;
136
- exports.defaultFeatures = [
137
- exports.fontSizeSection,
138
- exports.textFormatSection,
139
- exports.alignmentSection,
140
- exports.tableSection,
141
- exports.embedSection
142
- ];
143
- exports.defaultMinimumFeatures = [exports.textFormatSection, exports.minimumEmbedSection];
144
- exports.defaultMinimumAdditionalFeatures = [
145
- exports.fontSizeSection,
146
- exports.alignmentSection,
147
- exports.additionalEmbedSection
148
- ];
149
- // Following this example: https://codepen.io/alexkrolick/pen/gmroPj?editors=0010
150
- // All the options available here: https://github.com/quilljs/quill/blob/develop/docs/_includes/standalone/full.html
151
- var CustomToolbar = function (props) {
152
- var guid = props.guid, className = props.className, disabled = props.disabled, features = props.features, useMinimumFeatures = props.useMinimumFeatures, minimumFeatures = props.minimumFeatures, minimumAdditionalFeatures = props.minimumAdditionalFeatures, reactQuillRef = props.reactQuillRef, isVisibleWhenDisabled = props.isVisibleWhenDisabled;
153
- var _a = react_1.useState(false), isInitialized = _a[0], setIsInitialized = _a[1];
154
- var _b = react_1.useState(false), isShowingMoreOptions = _b[0], setIsShowingMoreOptions = _b[1];
155
- var ref = react_1.default.createRef();
156
- var getFeatures = react_1.useCallback(function () {
157
- return useMinimumFeatures ? minimumFeatures !== null && minimumFeatures !== void 0 ? minimumFeatures : exports.defaultMinimumFeatures : features !== null && features !== void 0 ? features : exports.defaultFeatures;
158
- }, [features, minimumFeatures, useMinimumFeatures]);
159
- react_1.useEffect(function () {
160
- var _a;
161
- // initialize the toolbar after reactQuill exists and the buttons are displayed (not disabled)
162
- if (!isInitialized && reactQuillRef && !disabled) {
163
- accessibilityFix_1.applyAccessibilityHacks(ref, reactQuillRef.getEditor());
164
- // manually modify the table picker select svg icon
165
- var label = (_a = ref.current) === null || _a === void 0 ? void 0 : _a.querySelector('.ql-table .ql-picker-label');
166
- if (label) {
167
- var svg = label.childNodes[0];
168
- var polygons = svg.querySelectorAll('polygon');
169
- polygons.forEach(function (polygon) {
170
- polygon.remove();
171
- });
172
- svg.setAttribute('viewBox', '0 0 24 24');
173
- svg.classList.add('ql-fill');
174
- var path = svg.querySelector('path');
175
- if (!path) {
176
- var path_1 = document.createElementNS('http://www.w3.org/2000/svg', 'path');
177
- path_1.setAttribute('d', IconTable_1.mdiTable);
178
- svg.appendChild(path_1);
179
- }
180
- }
181
- setIsInitialized(true);
182
- }
183
- }, [disabled, isInitialized, reactQuillRef, ref]);
184
- return (react_1.default.createElement("div", { id: "quill-toolbar-" + guid, className: "br--top" + (className ? " " + className : '') + (disabled ? ' disabled' : '') + (!isVisibleWhenDisabled && disabled ? ' disabled-invisible' : ''), ref: ref }, (!disabled || (isVisibleWhenDisabled && isInitialized)) && (react_1.default.createElement(react_1.default.Fragment, null,
185
- getFeatures().map(function (section, i) { return (react_1.default.createElement("span", { className: "ql-formats", key: i }, section(disabled))); }),
186
- useMinimumFeatures && (react_1.default.createElement("button", { className: "more-options f6 fw5" + (isShowingMoreOptions ? ' expanded color-purple' : ''), type: "button", title: "More options", "aria-expanded": isShowingMoreOptions, onClick: function () { return setIsShowingMoreOptions(!isShowingMoreOptions); } },
187
- react_1.default.createElement(MoreHoriz_1.default, { className: "ma0" }))),
188
- // This is a sub-div so it's contained in the div with the id/guid for the forward ref.
189
- // CSS handles appearance so it renders as if it were a sibling div.
190
- useMinimumFeatures && (react_1.default.createElement("div", { className: "more-options-toolbar ql-snow" + (isShowingMoreOptions ? ' expanded' : ' invisible'), "aria-hidden": !isShowingMoreOptions }, (minimumAdditionalFeatures !== null && minimumAdditionalFeatures !== void 0 ? minimumAdditionalFeatures : exports.defaultMinimumAdditionalFeatures).map(function (section, i) { return (react_1.default.createElement("span", { className: "ql-formats", key: i }, section(disabled))); })))))));
191
- };
192
- exports.CustomToolbar = CustomToolbar;
@@ -1,6 +0,0 @@
1
- import { FunctionComponent } from 'react';
2
- export interface ImageMissingAltTextWarningProps {
3
- someImagesMissingAltText?: boolean;
4
- }
5
- declare const ImageMissingAltTextWarning: FunctionComponent<ImageMissingAltTextWarningProps>;
6
- export default ImageMissingAltTextWarning;
@@ -1,17 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- var Warning_1 = __importDefault(require("@material-ui/icons/Warning"));
7
- var react_1 = __importDefault(require("react"));
8
- var ImageMissingAltTextWarning = function (_a) {
9
- var someImagesMissingAltText = _a.someImagesMissingAltText;
10
- if (someImagesMissingAltText) {
11
- return (react_1.default.createElement("p", { className: "small pv1 mv1" },
12
- react_1.default.createElement(Warning_1.default, { className: "fill-orange nt1 mr1" }),
13
- "One or more images are missing alt text. Use right-click to set alt text on images."));
14
- }
15
- return null;
16
- };
17
- exports.default = ImageMissingAltTextWarning;
@@ -1,16 +0,0 @@
1
- import { RangeStatic } from 'quill';
2
- import { FunctionComponent } from 'react';
3
- import ReactQuill from 'react-quill';
4
- import { ImageValue } from './Formats/Image';
5
- interface ImageWithAltTextProps {
6
- isOpen: boolean;
7
- imageToEdit?: ImageValue;
8
- supportedImageExtensions: string[];
9
- onClose: () => void;
10
- fileSelector: HTMLInputElement;
11
- reactQuillRef: ReactQuill | null;
12
- range: RangeStatic | undefined;
13
- cancelButtonClassName?: string;
14
- }
15
- export declare const ImageWithAltTextModal: FunctionComponent<ImageWithAltTextProps>;
16
- export {};
@@ -1,139 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
- var __importDefault = (this && this.__importDefault) || function (mod) {
22
- return (mod && mod.__esModule) ? mod : { "default": mod };
23
- };
24
- Object.defineProperty(exports, "__esModule", { value: true });
25
- exports.ImageWithAltTextModal = void 0;
26
- var core_1 = require("@material-ui/core");
27
- var Help_1 = __importDefault(require("@material-ui/icons/Help"));
28
- var SwapVert_1 = __importDefault(require("@material-ui/icons/SwapVert"));
29
- var lodash_1 = require("lodash");
30
- var react_1 = __importStar(require("react"));
31
- var react_bootstrap_1 = require("react-bootstrap");
32
- var react_quill_1 = require("react-quill");
33
- var ConnectedModal_1 = __importDefault(require("../ConnectedModal"));
34
- var ErrorMessage_1 = require("../ErrorMessage");
35
- var Delta = react_quill_1.Quill.import('delta');
36
- var mdiUpload = 'M9,16V10H5L12,3L19,10H15V16H9M5,20V18H19V20H5Z';
37
- var IconUpload = (react_1.default.createElement(core_1.SvgIcon, { role: "presentation" },
38
- react_1.default.createElement("path", { d: mdiUpload })));
39
- var ImageWithAltTextModal = function (_a) {
40
- var isOpen = _a.isOpen, onClose = _a.onClose, imageToEdit = _a.imageToEdit, supportedImageExtensions = _a.supportedImageExtensions, fileSelector = _a.fileSelector, reactQuillRef = _a.reactQuillRef, range = _a.range, cancelButtonClassName = _a.cancelButtonClassName;
41
- // setup state that is editable in the modal, based on the targeted image, if any
42
- var _b = react_1.useState(imageToEdit === null || imageToEdit === void 0 ? void 0 : imageToEdit.alt), alt = _b[0], setAlt = _b[1];
43
- var _c = react_1.useState(imageToEdit === null || imageToEdit === void 0 ? void 0 : imageToEdit.src), src = _c[0], setSrc = _c[1];
44
- var _d = react_1.useState(false), isSelectedFileInvalid = _d[0], setIsSelectedFileInvalid = _d[1];
45
- // update local state based on the targeted image, if any
46
- react_1.useEffect(function () {
47
- if (imageToEdit) {
48
- setAlt(imageToEdit.alt);
49
- setSrc(imageToEdit.src);
50
- }
51
- }, [imageToEdit]);
52
- var onTryClose = function () {
53
- setAlt(undefined);
54
- setSrc(undefined);
55
- // programmatically reset file selector
56
- fileSelector.value = '';
57
- onClose();
58
- };
59
- /** Use file selector to get an image */
60
- var onClickImageUpload = function () {
61
- // programmatically click to open the file upload dialog
62
- fileSelector.click();
63
- // when a file is selected
64
- fileSelector.onchange = function () {
65
- var _a;
66
- if (fileSelector.files && ((_a = fileSelector.files) === null || _a === void 0 ? void 0 : _a.length) > 0) {
67
- var file_1 = fileSelector.files[0];
68
- // convert filename to lowercase to make file extension check not case sensitive
69
- setIsSelectedFileInvalid(!supportedImageExtensions.some(function (e) { return file_1.name.toLocaleLowerCase().endsWith(e); }));
70
- var reader = new FileReader();
71
- reader.onload = function (e) {
72
- var _a;
73
- if ((_a = e.target) === null || _a === void 0 ? void 0 : _a.DONE) {
74
- // result is image in base64
75
- setSrc(e.target.result);
76
- if (!alt)
77
- setAlt(file_1.name);
78
- }
79
- };
80
- // get the file as a dataURI in base64
81
- reader.readAsDataURL(file_1);
82
- }
83
- };
84
- };
85
- /** insert Image into quill */
86
- var insertImage = function () {
87
- if (reactQuillRef) {
88
- var quill = reactQuillRef.getEditor();
89
- var imageToInsert = { src: src, alt: alt };
90
- if (imageToEdit) {
91
- imageToInsert.height = imageToEdit.height;
92
- imageToInsert.width = imageToEdit.width;
93
- }
94
- var index = range ? range.index : 0;
95
- var diff = new Delta();
96
- // retain up until the selected range
97
- diff.retain(index);
98
- // remove the existing image, if any
99
- if (imageToEdit) {
100
- diff.delete(1);
101
- }
102
- // insert the new image
103
- diff.insert({ image: imageToInsert });
104
- quill.updateContents(diff, 'user');
105
- }
106
- onTryClose();
107
- };
108
- return (react_1.default.createElement(ConnectedModal_1.default, { show: isOpen, onHide: onTryClose },
109
- react_1.default.createElement(react_bootstrap_1.Modal.Header, { closeButton: true },
110
- react_1.default.createElement(react_bootstrap_1.Modal.Title, { className: "f4" }, imageToEdit ? "Edit Alt Text" : "Image Upload")),
111
- react_1.default.createElement(react_bootstrap_1.Modal.Body, null,
112
- react_1.default.createElement("p", { className: "mb2 f7" }, "* Indicates required field"),
113
- src && !isSelectedFileInvalid && (react_1.default.createElement(react_bootstrap_1.Row, null,
114
- react_1.default.createElement("img", { className: "mb2 h5", src: src, alt: alt }))),
115
- react_1.default.createElement("div", { "aria-live": "polite", className: "f7 mb2" }, isSelectedFileInvalid && (react_1.default.createElement(ErrorMessage_1.ErrorMessage, { message: "The chosen file type is not supported. Please use one of the image formats listed below." }))),
116
- !imageToEdit && (react_1.default.createElement(react_1.default.Fragment, null,
117
- react_1.default.createElement(core_1.Button, { className: "w-100-lt-xs pa2 mv1 btn-primary", onClick: onClickImageUpload },
118
- src ? react_1.default.createElement(SwapVert_1.default, null) : IconUpload,
119
- react_1.default.createElement("span", { className: "ml1" },
120
- src ? 'Change' : 'Upload',
121
- " Image")),
122
- react_1.default.createElement("p", { className: "f7 mb3" }, "Supported formats: .jpg, .png, .gif, .bmp"))),
123
- react_1.default.createElement(react_bootstrap_1.FormGroup, null,
124
- react_1.default.createElement(react_bootstrap_1.Row, { className: "mb2" },
125
- react_1.default.createElement("h3", { className: "mv0" },
126
- react_1.default.createElement(react_bootstrap_1.FormLabel, { htmlFor: "img-alt-text", className: "mb0" },
127
- "Alt Text *",
128
- react_1.default.createElement(react_bootstrap_1.OverlayTrigger, { placement: "top", trigger: ['hover', 'focus'], overlay: react_1.default.createElement(react_bootstrap_1.Popover, { id: "alt-text-explanation" },
129
- react_1.default.createElement("p", { className: "mb0" }, "Used by screen readers to describe the content of an image.")) },
130
- react_1.default.createElement("button", { type: "button", className: "dib help-button bg-transparent" },
131
- react_1.default.createElement(Help_1.default, { color: "primary", titleAccess: "Alt text explanation" })))))),
132
- react_1.default.createElement(react_bootstrap_1.FormControl, { id: "img-alt-text", "aria-label": "Image Alt Text", as: "textarea", onChange: function (event) {
133
- setAlt(event.target.value);
134
- }, value: alt, spellCheck: false, autoComplete: "off", autoCorrect: "off" }))),
135
- react_1.default.createElement(react_bootstrap_1.Modal.Footer, null,
136
- react_1.default.createElement(core_1.Button, { className: "mr1 btn-text" + (cancelButtonClassName ? " " + cancelButtonClassName : ''), onClick: onTryClose }, "Cancel"),
137
- react_1.default.createElement(core_1.Button, { className: "btn-primary mb1", id: "save-image-button", onClick: insertImage, disabled: lodash_1.isEmpty(alt === null || alt === void 0 ? void 0 : alt.trim()) || lodash_1.isEmpty(src) || isSelectedFileInvalid }, "Save"))));
138
- };
139
- exports.ImageWithAltTextModal = ImageWithAltTextModal;
@@ -1,9 +0,0 @@
1
- import { BoundsStatic, DeltaStatic, RangeStatic } from 'quill';
2
- export interface UnprivilegedEditor {
3
- getLength(): number;
4
- getText(index?: number, length?: number): string;
5
- getHTML(): string;
6
- getBounds(index: number, length?: number): BoundsStatic;
7
- getSelection(focus?: boolean): RangeStatic;
8
- getContents(index?: number, length?: number): DeltaStatic;
9
- }
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,9 +0,0 @@
1
- import { DeltaStatic } from 'quill';
2
- /**
3
- * Find whether there are any image operations without alt text in the provided quill contents.
4
- *
5
- * @param contents The contents of quill.
6
- *
7
- * @returns True if there are any images without alt text
8
- */
9
- export declare const hasSomeMissingAltText: (contents: DeltaStatic) => boolean;
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hasSomeMissingAltText = void 0;
4
- /**
5
- * Find whether there are any image operations without alt text in the provided quill contents.
6
- *
7
- * @param contents The contents of quill.
8
- *
9
- * @returns True if there are any images without alt text
10
- */
11
- var hasSomeMissingAltText = function (contents) { var _a; return ((_a = contents.ops) === null || _a === void 0 ? void 0 : _a.some(function (op) { var _a, _b, _c; return ((_a = op.insert) === null || _a === void 0 ? void 0 : _a.image) && !((_c = (_b = op.insert) === null || _b === void 0 ? void 0 : _b.image.alt) === null || _c === void 0 ? void 0 : _c.trim()); })) || false; };
12
- exports.hasSomeMissingAltText = hasSomeMissingAltText;