studiokit-scaffolding-js 7.0.12-next.1.5 → 7.0.12-next.1.6
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/lib/components/ActionList.js +1 -5
- package/lib/components/Dropdowns/UserDropdown.js +1 -3
- package/lib/components/Groups/CreateEditCopySaveButtons.js +1 -5
- package/lib/components/Groups/ExternalGroups/Attach.js +1 -3
- package/lib/components/Groups/RosterSyncInfo.js +1 -7
- package/lib/components/HOC/SearchPersistorComponent.js +2 -2
- package/lib/components/Notifications.d.ts +1 -1
- package/lib/components/Notifications.js +2 -2
- package/lib/components/Quill/ImageDropModule.js +1 -1
- package/lib/hooks/usePrevious.d.ts +14 -1
- package/lib/hooks/usePrevious.js +23 -1
- package/lib/utils/url.d.ts +2 -2
- package/package.json +1 -1
|
@@ -27,11 +27,7 @@ const ActionList = ({ actions = [], model = null, className, alwaysShowKebab })
|
|
|
27
27
|
if (defaultAction) {
|
|
28
28
|
allowedActions = allowedActions.filter(a => a !== defaultAction);
|
|
29
29
|
}
|
|
30
|
-
return ((0, jsx_runtime_1.jsxs)("div", { className: !!defaultAction && !!model && (actionCount > 1 || alwaysShowKebab) ? 'inline-flex' : 'di', children: [!!defaultAction && ((0, jsx_runtime_1.jsxs)(core_1.Button, { color: "primary", onClick: defaultAction.action, id: defaultAction.id, className: defaultAction.className || '', disabled: defaultAction.disabled, children: [defaultAction.icon, defaultAction.name] })), !!model && (actionCount > 1 || alwaysShowKebab) && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)(core_1.Button, { ref: anchorRef, onClick: event => {
|
|
31
|
-
setInfoMenuAnchorElement(event.currentTarget);
|
|
32
|
-
}, "aria-label": "Actions", "aria-haspopup": "true", "aria-controls": infoMenuAnchorElement ? `info-menu-${model.id}` : undefined, className: `action-list-text-button${defaultAction ? ' with-default-action' : ''}`, color: "primary", children: ["Actions", (0, jsx_runtime_1.jsx)(MoreVert_1.default, { color: "primary" })] }), (0, jsx_runtime_1.jsx)(core_1.IconButton, { ref: anchorRef, onClick: event => {
|
|
33
|
-
setInfoMenuAnchorElement(event.currentTarget);
|
|
34
|
-
}, "aria-label": "Actions", "aria-haspopup": "true", "aria-controls": infoMenuAnchorElement ? `info-menu-${model.id}` : undefined, className: `action-list-icon-button${defaultAction ? ' with-default-action' : ''}`, children: (0, jsx_runtime_1.jsx)(MoreVert_1.default, { color: "primary" }) }), (0, jsx_runtime_1.jsx)(core_1.Popper, { open: !!infoMenuAnchorElement, anchorEl: infoMenuAnchorElement, placement: "bottom-end", className: `z-1${className ? ` ${className}` : ''}`, transition: true, children: ({ TransitionProps, placement }) => ((0, jsx_runtime_1.jsx)(core_1.Grow, Object.assign({}, TransitionProps, { style: { transformOrigin: placement === 'bottom-end' ? 'top right' : 'bottom right' }, children: (0, jsx_runtime_1.jsx)(core_1.Paper, { children: (0, jsx_runtime_1.jsx)(core_1.ClickAwayListener, { onClickAway: onActionItemClick(), children: (0, jsx_runtime_1.jsx)(core_1.MenuList, { id: `info-menu-${model.id}`, autoFocusItem: !!infoMenuAnchorElement, onKeyDown: handleListKeyDown, className: "action-list shadow-large", children: allowedActions.map((a, index) => a.predicate
|
|
30
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: !!defaultAction && !!model && (actionCount > 1 || alwaysShowKebab) ? 'inline-flex' : 'di', children: [!!defaultAction && ((0, jsx_runtime_1.jsxs)(core_1.Button, { color: "primary", onClick: defaultAction.action, id: defaultAction.id, className: defaultAction.className || '', disabled: defaultAction.disabled, children: [defaultAction.icon, defaultAction.name] })), !!model && (actionCount > 1 || alwaysShowKebab) && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)(core_1.Button, { ref: anchorRef, onClick: event => setInfoMenuAnchorElement(event.currentTarget), "aria-label": "Actions", "aria-haspopup": "true", "aria-controls": infoMenuAnchorElement ? `info-menu-${model.id}` : undefined, className: `action-list-text-button${defaultAction ? ' with-default-action' : ''}`, color: "primary", children: ["Actions", (0, jsx_runtime_1.jsx)(MoreVert_1.default, { color: "primary" })] }), (0, jsx_runtime_1.jsx)(core_1.IconButton, { ref: anchorRef, onClick: event => setInfoMenuAnchorElement(event.currentTarget), "aria-label": "Actions", "aria-haspopup": "true", "aria-controls": infoMenuAnchorElement ? `info-menu-${model.id}` : undefined, className: `action-list-icon-button${defaultAction ? ' with-default-action' : ''}`, children: (0, jsx_runtime_1.jsx)(MoreVert_1.default, { color: "primary" }) }), (0, jsx_runtime_1.jsx)(core_1.Popper, { open: !!infoMenuAnchorElement, anchorEl: infoMenuAnchorElement, placement: "bottom-end", className: `z-1${className ? ` ${className}` : ''}`, transition: true, children: ({ TransitionProps, placement }) => ((0, jsx_runtime_1.jsx)(core_1.Grow, Object.assign({}, TransitionProps, { style: { transformOrigin: placement === 'bottom-end' ? 'top right' : 'bottom right' }, children: (0, jsx_runtime_1.jsx)(core_1.Paper, { children: (0, jsx_runtime_1.jsx)(core_1.ClickAwayListener, { onClickAway: onActionItemClick(), children: (0, jsx_runtime_1.jsx)(core_1.MenuList, { id: `info-menu-${model.id}`, autoFocusItem: !!infoMenuAnchorElement, onKeyDown: handleListKeyDown, className: "action-list shadow-large", children: allowedActions.map((a, index) => a.predicate
|
|
35
31
|
? [
|
|
36
32
|
...(index > 0 ? [(0, jsx_runtime_1.jsx)(core_1.Divider, {})] : []),
|
|
37
33
|
(0, jsx_runtime_1.jsxs)(core_1.MenuItem, { className: `action-list-menu mv1 pv2 ${a.className}`, onClick: onActionItemClick(a.action), color: "primary", disabled: a.disabled, children: [a.icon, a.name] }, a.id)
|
|
@@ -20,8 +20,6 @@ const UserDropdown = (_a) => {
|
|
|
20
20
|
var { userInfo, children } = _a, props = tslib_1.__rest(_a, ["userInfo", "children"]);
|
|
21
21
|
const [guid] = (0, react_1.useState)((0, uuid_1.v4)());
|
|
22
22
|
const dropdownTitle = userInfo.isImpersonated ? ((0, jsx_runtime_1.jsx)(UserDetail_1.ImpersonationUserDetail, Object.assign({ userInfo: userInfo }, props))) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Hi, ", (0, user_1.displayFirstName)(userInfo)] }));
|
|
23
|
-
return ((0, jsx_runtime_1.jsxs)(ManagedNavDropdown_1.ManagedNavDropdown, { id: "user-menu", className: `user-menu${userInfo.isImpersonated ? ' user-menu-impersonated' : ''}`, title: dropdownTitle, children: [children, userInfo.isImpersonated && ((0, jsx_runtime_1.jsxs)(react_bootstrap_1.NavDropdown.Item, { onSelect: () => {
|
|
24
|
-
(0, user_1.stopImpersonation)(guid);
|
|
25
|
-
}, children: [(0, jsx_runtime_1.jsx)(IconStopImpersonating_1.IconStopImpersonating, { className: "menu-icon" }), "Stop Impersonating"] })), (0, jsx_runtime_1.jsxs)(react_bootstrap_1.NavDropdown.Item, { onSelect: doLogOut, children: [(0, jsx_runtime_1.jsx)(Lock_1.default, { className: "menu-icon" }), "Log Out"] })] }));
|
|
23
|
+
return ((0, jsx_runtime_1.jsxs)(ManagedNavDropdown_1.ManagedNavDropdown, { id: "user-menu", className: `user-menu${userInfo.isImpersonated ? ' user-menu-impersonated' : ''}`, title: dropdownTitle, children: [children, userInfo.isImpersonated && ((0, jsx_runtime_1.jsxs)(react_bootstrap_1.NavDropdown.Item, { onSelect: () => (0, user_1.stopImpersonation)(guid), children: [(0, jsx_runtime_1.jsx)(IconStopImpersonating_1.IconStopImpersonating, { className: "menu-icon" }), "Stop Impersonating"] })), (0, jsx_runtime_1.jsxs)(react_bootstrap_1.NavDropdown.Item, { onSelect: doLogOut, children: [(0, jsx_runtime_1.jsx)(Lock_1.default, { className: "menu-icon" }), "Log Out"] })] }));
|
|
26
24
|
};
|
|
27
25
|
exports.UserDropdown = UserDropdown;
|
|
@@ -6,10 +6,6 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
6
6
|
const Button_1 = tslib_1.__importDefault(require("@material-ui/core/Button"));
|
|
7
7
|
const CircularProgress_1 = tslib_1.__importDefault(require("@material-ui/core/CircularProgress"));
|
|
8
8
|
const GroupCreateEditCopySaveButtons = ({ disabled, cannotSave, cannotSaveAndAddOwners, canAddInstructors, save, cancel }) => {
|
|
9
|
-
return ((0, jsx_runtime_1.jsxs)("div", { children: [!!disabled && (0, jsx_runtime_1.jsx)(CircularProgress_1.default, { size: 30, className: "fr" }), (0, jsx_runtime_1.jsx)(Button_1.default, { onClick: () => {
|
|
10
|
-
save();
|
|
11
|
-
}, color: "primary", className: `fr btn-primary${disabled ? ' visually-hidden' : ''}`, disabled: cannotSave(), children: "Save" }), canAddInstructors && ((0, jsx_runtime_1.jsx)(Button_1.default, { onClick: () => {
|
|
12
|
-
save(true);
|
|
13
|
-
}, color: "primary", className: `fr btn-primary mr1${disabled ? ' visually-hidden' : ''}`, disabled: cannotSaveAndAddOwners(), children: "Save and Add Instructors" })), (0, jsx_runtime_1.jsx)(Button_1.default, { onClick: cancel, color: "primary", className: `fr btn-text mr1${disabled ? ' visually-hidden' : ''}`, children: "Cancel" })] }));
|
|
9
|
+
return ((0, jsx_runtime_1.jsxs)("div", { children: [!!disabled && (0, jsx_runtime_1.jsx)(CircularProgress_1.default, { size: 30, className: "fr" }), (0, jsx_runtime_1.jsx)(Button_1.default, { onClick: () => save(), color: "primary", className: `fr btn-primary${disabled ? ' visually-hidden' : ''}`, disabled: cannotSave(), children: "Save" }), canAddInstructors && ((0, jsx_runtime_1.jsx)(Button_1.default, { onClick: () => save(true), color: "primary", className: `fr btn-primary mr1${disabled ? ' visually-hidden' : ''}`, disabled: cannotSaveAndAddOwners(), children: "Save and Add Instructors" })), (0, jsx_runtime_1.jsx)(Button_1.default, { onClick: cancel, color: "primary", className: `fr btn-text mr1${disabled ? ' visually-hidden' : ''}`, children: "Cancel" })] }));
|
|
14
10
|
};
|
|
15
11
|
exports.GroupCreateEditCopySaveButtons = GroupCreateEditCopySaveButtons;
|
|
@@ -131,9 +131,7 @@ class ExternalGroupsAttach extends react_1.Component {
|
|
|
131
131
|
}
|
|
132
132
|
componentWillUnmount() {
|
|
133
133
|
const { ownerSchedules } = this.state;
|
|
134
|
-
(0, lodash_1.forEach)(ownerSchedules, os =>
|
|
135
|
-
(0, noStoreSaga_1.unregisterNoStoreActionHook)(os.hookId);
|
|
136
|
-
});
|
|
134
|
+
(0, lodash_1.forEach)(ownerSchedules, os => (0, noStoreSaga_1.unregisterNoStoreActionHook)(os.hookId));
|
|
137
135
|
}
|
|
138
136
|
componentDidUpdate(prevProps) {
|
|
139
137
|
const { externalTermId: prevExternalTermId, groupUserRoles: prevGroupUserRoles } = prevProps;
|
|
@@ -13,12 +13,6 @@ const RosterSyncInfo = ({ hasLtiRosterSync }) => {
|
|
|
13
13
|
const [isModalOpen, setIsModalOpen] = (0, react_1.useState)(false);
|
|
14
14
|
const lmsName = (0, configuration_1.getAppConfig)().LMS_NAME;
|
|
15
15
|
const title = `${hasLtiRosterSync ? `${lmsName} ` : ''}Roster Sync`;
|
|
16
|
-
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)(Button_1.default, { color: "primary", className: "mb0 mr1-ns pv2 ph2 fr-ns btn-text", onClick: () => {
|
|
17
|
-
setIsModalOpen(true);
|
|
18
|
-
}, children: [(0, jsx_runtime_1.jsx)(Highlight_1.default, { className: "v-mid mr1" }), (0, jsx_runtime_1.jsx)("span", { className: "mb0 b", children: title })] }), (0, jsx_runtime_1.jsxs)(ConnectedModal_1.default, { show: isModalOpen, onHide: () => {
|
|
19
|
-
setIsModalOpen(false);
|
|
20
|
-
}, children: [(0, jsx_runtime_1.jsx)(react_bootstrap_1.Modal.Header, { closeButton: true, children: (0, jsx_runtime_1.jsx)(react_bootstrap_1.Modal.Title, { className: "f4", children: title }) }), (0, jsx_runtime_1.jsxs)(react_bootstrap_1.Modal.Body, { children: [(0, jsx_runtime_1.jsx)("h3", { children: "When is the roster synced?" }), (0, jsx_runtime_1.jsxs)("p", { children: ["The roster is synced nightly throughout the duration of the course. People are added and removed automatically as the", ' ', hasLtiRosterSync ? `roster changes in ${lmsName}` : 'external roster changes', "."] })] }), (0, jsx_runtime_1.jsx)(react_bootstrap_1.Modal.Footer, { children: (0, jsx_runtime_1.jsx)(Button_1.default, { color: "primary", className: "ma0 btn-primary", onClick: () => {
|
|
21
|
-
setIsModalOpen(false);
|
|
22
|
-
}, children: "Close" }) })] })] }));
|
|
16
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)(Button_1.default, { color: "primary", className: "mb0 mr1-ns pv2 ph2 fr-ns btn-text", onClick: () => setIsModalOpen(true), children: [(0, jsx_runtime_1.jsx)(Highlight_1.default, { className: "v-mid mr1" }), (0, jsx_runtime_1.jsx)("span", { className: "mb0 b", children: title })] }), (0, jsx_runtime_1.jsxs)(ConnectedModal_1.default, { show: isModalOpen, onHide: () => setIsModalOpen(false), children: [(0, jsx_runtime_1.jsx)(react_bootstrap_1.Modal.Header, { closeButton: true, children: (0, jsx_runtime_1.jsx)(react_bootstrap_1.Modal.Title, { className: "f4", children: title }) }), (0, jsx_runtime_1.jsxs)(react_bootstrap_1.Modal.Body, { children: [(0, jsx_runtime_1.jsx)("h3", { children: "When is the roster synced?" }), (0, jsx_runtime_1.jsxs)("p", { children: ["The roster is synced nightly throughout the duration of the course. People are added and removed automatically as the", ' ', hasLtiRosterSync ? `roster changes in ${lmsName}` : 'external roster changes', "."] })] }), (0, jsx_runtime_1.jsx)(react_bootstrap_1.Modal.Footer, { children: (0, jsx_runtime_1.jsx)(Button_1.default, { color: "primary", className: "ma0 btn-primary", onClick: () => setIsModalOpen(false), children: "Close" }) })] })] }));
|
|
23
17
|
};
|
|
24
18
|
exports.RosterSyncInfo = RosterSyncInfo;
|
|
@@ -162,9 +162,9 @@ const configureMapDispatchToProps = (key) => (dispatch) => {
|
|
|
162
162
|
};
|
|
163
163
|
const persistSearchDebounce = (search) => {
|
|
164
164
|
if (searchDebounce) {
|
|
165
|
-
clearTimeout(searchDebounce);
|
|
165
|
+
window.clearTimeout(searchDebounce);
|
|
166
166
|
}
|
|
167
|
-
searchDebounce = setTimeout(() => dispatchPersistSearch(search), 1000);
|
|
167
|
+
searchDebounce = window.setTimeout(() => dispatchPersistSearch(search), 1000);
|
|
168
168
|
};
|
|
169
169
|
return {
|
|
170
170
|
persistSearch: persistSearchDebounce
|
|
@@ -16,7 +16,7 @@ interface NotificationsState {
|
|
|
16
16
|
isOpen: boolean;
|
|
17
17
|
}
|
|
18
18
|
export declare class Notifications extends Component<NotificationsProps, NotificationsState> {
|
|
19
|
-
afterCloseTimeout:
|
|
19
|
+
afterCloseTimeout: number | undefined;
|
|
20
20
|
constructor(props: NotificationsProps);
|
|
21
21
|
componentDidMount(): void;
|
|
22
22
|
componentDidUpdate(): void;
|
|
@@ -17,7 +17,7 @@ class Notifications extends react_1.Component {
|
|
|
17
17
|
this.afterCloseTimeout = undefined;
|
|
18
18
|
this.clearAfterCloseTimeout = () => {
|
|
19
19
|
if (this.afterCloseTimeout) {
|
|
20
|
-
clearTimeout(this.afterCloseTimeout);
|
|
20
|
+
window.clearTimeout(this.afterCloseTimeout);
|
|
21
21
|
this.afterCloseTimeout = undefined;
|
|
22
22
|
}
|
|
23
23
|
};
|
|
@@ -60,7 +60,7 @@ class Notifications extends react_1.Component {
|
|
|
60
60
|
isOpen: false
|
|
61
61
|
}, () => {
|
|
62
62
|
// wait until after Snackbar hide animation to clear the UI
|
|
63
|
-
this.afterCloseTimeout = setTimeout(() => {
|
|
63
|
+
this.afterCloseTimeout = window.setTimeout(() => {
|
|
64
64
|
this.removeNotification();
|
|
65
65
|
this.clearAfterCloseTimeout();
|
|
66
66
|
// removing the last notification, clear state
|
|
@@ -54,7 +54,7 @@ class ImageDropModule {
|
|
|
54
54
|
if (evt.clipboardData && evt.clipboardData.items && evt.clipboardData.items.length) {
|
|
55
55
|
this.readFiles(evt.clipboardData.items, base64DataUrl => {
|
|
56
56
|
// wait until after the default paste action finishes
|
|
57
|
-
setTimeout(() => this.insert(base64DataUrl, alt), 50);
|
|
57
|
+
window.setTimeout(() => this.insert(base64DataUrl, alt), 50);
|
|
58
58
|
});
|
|
59
59
|
}
|
|
60
60
|
};
|
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Persists a previous `value` when the `value` changes. This change will not cause a re-render, causing it to 'lag' one
|
|
3
|
+
* render behind the current value.
|
|
4
|
+
*
|
|
3
5
|
* @param value A value, e.g. a prop or a value from `useState`.
|
|
6
|
+
* @deprecated Reading ref values in render is not recommended. If you want to use the previous value to make a one-time
|
|
7
|
+
* calculation based on a change, you probably want to use `usePreviousState` instead. If you want to persist the
|
|
8
|
+
* previous value across renders, you probably want to just use `useState` instead.
|
|
4
9
|
*/
|
|
5
10
|
export declare function usePrevious<T>(value: T): T;
|
|
11
|
+
/**
|
|
12
|
+
* Returns the value from the previous render. This will update to the new value on the next render (and immediately
|
|
13
|
+
* re-render your component), making it helpful to make one-time changes based on the difference between an object and
|
|
14
|
+
* its previous value.
|
|
15
|
+
*
|
|
16
|
+
* @param currentValue The variable you want to track the value of in the previous render.
|
|
17
|
+
*/
|
|
18
|
+
export declare function usePreviousState<T>(currentValue: T): T;
|
package/lib/hooks/usePrevious.js
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.usePrevious = usePrevious;
|
|
4
|
+
exports.usePreviousState = usePreviousState;
|
|
4
5
|
const react_1 = require("react");
|
|
5
6
|
/**
|
|
6
|
-
*
|
|
7
|
+
* Persists a previous `value` when the `value` changes. This change will not cause a re-render, causing it to 'lag' one
|
|
8
|
+
* render behind the current value.
|
|
9
|
+
*
|
|
7
10
|
* @param value A value, e.g. a prop or a value from `useState`.
|
|
11
|
+
* @deprecated Reading ref values in render is not recommended. If you want to use the previous value to make a one-time
|
|
12
|
+
* calculation based on a change, you probably want to use `usePreviousState` instead. If you want to persist the
|
|
13
|
+
* previous value across renders, you probably want to just use `useState` instead.
|
|
8
14
|
*/
|
|
9
15
|
function usePrevious(value) {
|
|
10
16
|
const ref = (0, react_1.useRef)(value); // uses value as the initial value
|
|
@@ -16,3 +22,19 @@ function usePrevious(value) {
|
|
|
16
22
|
// eslint-disable-next-line react-hooks/refs
|
|
17
23
|
return ref.current;
|
|
18
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Returns the value from the previous render. This will update to the new value on the next render (and immediately
|
|
27
|
+
* re-render your component), making it helpful to make one-time changes based on the difference between an object and
|
|
28
|
+
* its previous value.
|
|
29
|
+
*
|
|
30
|
+
* @param currentValue The variable you want to track the value of in the previous render.
|
|
31
|
+
*/
|
|
32
|
+
function usePreviousState(currentValue) {
|
|
33
|
+
// uses currentValue as the initial value
|
|
34
|
+
const [value, setValue] = (0, react_1.useState)(currentValue);
|
|
35
|
+
if (!Object.is(currentValue, value)) {
|
|
36
|
+
setValue(currentValue);
|
|
37
|
+
}
|
|
38
|
+
// Returns the previous value (happens before the state changes from calling setValue above)
|
|
39
|
+
return value;
|
|
40
|
+
}
|
package/lib/utils/url.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type http from 'node:http';
|
|
2
1
|
import { LocationDescriptor } from 'history';
|
|
2
|
+
import { Dictionary } from 'lodash';
|
|
3
3
|
import { TIER } from '../constants/tier';
|
|
4
4
|
import { AppConfiguration } from '../types';
|
|
5
5
|
export declare function getApiBaseUrl(tier: TIER, apiUrlString: string): string;
|
|
@@ -21,7 +21,7 @@ export interface ParsedHeadersResponse {
|
|
|
21
21
|
* @param headers An array of request headers.
|
|
22
22
|
* @returns The parsed result
|
|
23
23
|
*/
|
|
24
|
-
export declare const parseHeadersResponse: (headers?:
|
|
24
|
+
export declare const parseHeadersResponse: (headers?: Dictionary<string | string[] | undefined>) => ParsedHeadersResponse;
|
|
25
25
|
/**
|
|
26
26
|
* Parse a path string into a location with separate pathname, search, and hash components.
|
|
27
27
|
* @param path A path string
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "studiokit-scaffolding-js",
|
|
3
|
-
"version": "7.0.12-next.1.
|
|
3
|
+
"version": "7.0.12-next.1.6",
|
|
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",
|