dce-reactkit 3.11.3 → 3.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/settings.json +3 -1
- package/dist/cjs/index.js +89 -10
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/components/ItemPicker/index.d.ts +1 -0
- package/dist/cjs/types/components/TabBox.d.ts +1 -0
- package/dist/cjs/types/helpers/getWordCount.d.ts +10 -0
- package/dist/cjs/types/index.d.ts +2 -1
- package/dist/esm/index.js +89 -11
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/components/ItemPicker/index.d.ts +1 -0
- package/dist/esm/types/components/TabBox.d.ts +1 -0
- package/dist/esm/types/helpers/getWordCount.d.ts +10 -0
- package/dist/esm/types/index.d.ts +2 -1
- package/dist/index.d.ts +13 -1
- package/package.json +1 -1
- package/src/components/ItemPicker/index.tsx +96 -0
- package/src/components/TabBox.tsx +27 -9
- package/src/helpers/getWordCount.ts +26 -0
- package/src/index.ts +2 -0
package/.vscode/settings.json
CHANGED
package/dist/cjs/index.js
CHANGED
|
@@ -1627,7 +1627,9 @@ const style$7 = `
|
|
|
1627
1627
|
|
|
1628
1628
|
/* Container for Title */
|
|
1629
1629
|
.TabBox-title-container {
|
|
1630
|
-
|
|
1630
|
+
display: flex;
|
|
1631
|
+
justify-content: space-between;
|
|
1632
|
+
align-items: center;
|
|
1631
1633
|
position: relative;
|
|
1632
1634
|
left: 0;
|
|
1633
1635
|
text-align: left;
|
|
@@ -1660,6 +1662,19 @@ const style$7 = `
|
|
|
1660
1662
|
background: #fdfdfd;
|
|
1661
1663
|
}
|
|
1662
1664
|
|
|
1665
|
+
.TabBox-title-right-container {
|
|
1666
|
+
display: flex;
|
|
1667
|
+
flex-direction: row;
|
|
1668
|
+
align-items: bottom;
|
|
1669
|
+
height: 2.4rem;
|
|
1670
|
+
overflow: visible;
|
|
1671
|
+
}
|
|
1672
|
+
|
|
1673
|
+
.TabBox-title-right-contents {
|
|
1674
|
+
margin-right: 0.5rem;
|
|
1675
|
+
margin-bottom: 0.2rem;
|
|
1676
|
+
}
|
|
1677
|
+
|
|
1663
1678
|
/* Make the TabBox's Children Appear Above Title if Overlap Occurs */
|
|
1664
1679
|
.TabBox-children {
|
|
1665
1680
|
position: relative;
|
|
@@ -1673,19 +1688,16 @@ const TabBox = (props) => {
|
|
|
1673
1688
|
/*------------------------------------------------------------------------*/
|
|
1674
1689
|
/* -------------------------------- Setup ------------------------------- */
|
|
1675
1690
|
/*------------------------------------------------------------------------*/
|
|
1676
|
-
|
|
1677
|
-
const { title, children, noBottomPadding, noBottomMargin, } = props;
|
|
1691
|
+
const { title, children, topRightChildren, noBottomPadding, noBottomMargin, } = props;
|
|
1678
1692
|
/*------------------------------------------------------------------------*/
|
|
1679
1693
|
/* ------------------------------- Render ------------------------------- */
|
|
1680
1694
|
/*------------------------------------------------------------------------*/
|
|
1681
|
-
/*----------------------------------------*/
|
|
1682
|
-
/* --------------- Main UI -------------- */
|
|
1683
|
-
/*----------------------------------------*/
|
|
1684
|
-
// Full UI
|
|
1685
1695
|
return (React__default["default"].createElement("div", { className: `TabBox-container ${noBottomMargin ? '' : 'mb-2'}` },
|
|
1686
1696
|
React__default["default"].createElement("style", null, style$7),
|
|
1687
1697
|
React__default["default"].createElement("div", { className: "TabBox-title-container" },
|
|
1688
|
-
React__default["default"].createElement("div", { className: "TabBox-title" }, title)
|
|
1698
|
+
React__default["default"].createElement("div", { className: "TabBox-title" }, title),
|
|
1699
|
+
topRightChildren && (React__default["default"].createElement("div", { className: "TabBox-title-right-container" },
|
|
1700
|
+
React__default["default"].createElement("div", { className: "TabBox-title-right-contents" }, topRightChildren)))),
|
|
1689
1701
|
React__default["default"].createElement("div", { className: `TabBox-box ps-2 pt-2 pe-2 ${noBottomPadding ? '' : 'pb-2'}` },
|
|
1690
1702
|
React__default["default"].createElement("div", { className: "TabBox-children" }, children))));
|
|
1691
1703
|
};
|
|
@@ -2695,17 +2707,62 @@ const ItemPicker = (props) => {
|
|
|
2695
2707
|
/*------------------------------------------------------------------------*/
|
|
2696
2708
|
/* -------------- Props ------------- */
|
|
2697
2709
|
// Destructure all props
|
|
2698
|
-
const { title, items, onChanged, noBottomMargin, } = props;
|
|
2710
|
+
const { title, items, onChanged, noBottomMargin, hideSelectAllOrNoneButtons, } = props;
|
|
2699
2711
|
/*------------------------------------------------------------------------*/
|
|
2700
2712
|
/* ------------------------- Component Functions ------------------------ */
|
|
2701
2713
|
/*------------------------------------------------------------------------*/
|
|
2714
|
+
/**
|
|
2715
|
+
* Updates the checked state of an item (including all children)
|
|
2716
|
+
* @author Yuen Ler Chow
|
|
2717
|
+
* @param item the item to update
|
|
2718
|
+
* @param checked the new checked state
|
|
2719
|
+
* @returns the updated item
|
|
2720
|
+
*/
|
|
2721
|
+
const updateItemChecked = (item, checked) => {
|
|
2722
|
+
if (item.isGroup) {
|
|
2723
|
+
return Object.assign(Object.assign({}, item), { children: item.children.map((child) => {
|
|
2724
|
+
return updateItemChecked(child, checked);
|
|
2725
|
+
}) });
|
|
2726
|
+
}
|
|
2727
|
+
return Object.assign(Object.assign({}, item), { checked });
|
|
2728
|
+
};
|
|
2729
|
+
/**
|
|
2730
|
+
* Selects all items in the list
|
|
2731
|
+
* @author Yuen Ler Chow
|
|
2732
|
+
*/
|
|
2733
|
+
const handleSelectAll = () => {
|
|
2734
|
+
const updatedItems = items.map((item) => {
|
|
2735
|
+
return updateItemChecked(item, true);
|
|
2736
|
+
});
|
|
2737
|
+
onChanged(updatedItems);
|
|
2738
|
+
};
|
|
2739
|
+
/**
|
|
2740
|
+
* Deselects all items in the list
|
|
2741
|
+
* @author Yuen Ler Chow
|
|
2742
|
+
*/
|
|
2743
|
+
const handleDeselectAll = () => {
|
|
2744
|
+
const updatedItems = items.map((item) => {
|
|
2745
|
+
return updateItemChecked(item, false);
|
|
2746
|
+
});
|
|
2747
|
+
onChanged(updatedItems);
|
|
2748
|
+
};
|
|
2702
2749
|
/*------------------------------------------------------------------------*/
|
|
2703
2750
|
/* ------------------------------- Render ------------------------------- */
|
|
2704
2751
|
/*------------------------------------------------------------------------*/
|
|
2705
2752
|
/*----------------------------------------*/
|
|
2706
2753
|
/* --------------- Main UI -------------- */
|
|
2707
2754
|
/*----------------------------------------*/
|
|
2708
|
-
|
|
2755
|
+
// Select all/none
|
|
2756
|
+
const selectAllOrNone = (!hideSelectAllOrNoneButtons
|
|
2757
|
+
? (React__default["default"].createElement("div", { className: "d-flex h-100 align-items-end flex-row" },
|
|
2758
|
+
React__default["default"].createElement("div", { className: "d-flex justify-content-end" },
|
|
2759
|
+
React__default["default"].createElement("div", { className: "me-2", style: { fontSize: '1.2rem' } }, "Select"),
|
|
2760
|
+
React__default["default"].createElement("div", { className: "btn-group", role: "group" },
|
|
2761
|
+
React__default["default"].createElement("button", { type: "button", style: { borderRight: '0.1rem solid white' }, "aria-label": "Select all contexts", className: "btn btn-secondary py-0", onClick: handleSelectAll }, "All"),
|
|
2762
|
+
React__default["default"].createElement("button", { type: "button", "aria-label": "Deselect all contexts", className: "btn btn-secondary py-0", onClick: handleDeselectAll }, "None")))))
|
|
2763
|
+
: undefined);
|
|
2764
|
+
// Main UI
|
|
2765
|
+
return (React__default["default"].createElement(TabBox, { title: title, noBottomMargin: noBottomMargin, topRightChildren: selectAllOrNone },
|
|
2709
2766
|
React__default["default"].createElement("div", { style: { overflowX: 'auto' } },
|
|
2710
2767
|
React__default["default"].createElement(NestableItemList, { items: items, onChanged: onChanged }))));
|
|
2711
2768
|
};
|
|
@@ -16402,6 +16459,27 @@ const visitEndpointOnAnotherServer = (opts) => __awaiter(void 0, void 0, void 0,
|
|
|
16402
16459
|
return body;
|
|
16403
16460
|
});
|
|
16404
16461
|
|
|
16462
|
+
const punctuationRegex = /[!@#$%^&*(),.?\/;:'"\-\[\]]/g;
|
|
16463
|
+
/**
|
|
16464
|
+
* Get number of words in string
|
|
16465
|
+
* @author Gardenia Liu
|
|
16466
|
+
* @author Allison Zhang
|
|
16467
|
+
* @author Gabe Abrams
|
|
16468
|
+
* @param text the string to check
|
|
16469
|
+
* @returns number of words in the string
|
|
16470
|
+
*/
|
|
16471
|
+
const getWordCount = (text) => {
|
|
16472
|
+
const trimmedTextWithoutPunctuation = (text
|
|
16473
|
+
// Remove leading and trailing whitespace
|
|
16474
|
+
.trim()
|
|
16475
|
+
// Remove punctuation
|
|
16476
|
+
.replace(punctuationRegex, ''));
|
|
16477
|
+
if (trimmedTextWithoutPunctuation.length === 0) {
|
|
16478
|
+
return 0;
|
|
16479
|
+
}
|
|
16480
|
+
return trimmedTextWithoutPunctuation.split(/\s+/g).length;
|
|
16481
|
+
};
|
|
16482
|
+
|
|
16405
16483
|
/**
|
|
16406
16484
|
* Days of the week
|
|
16407
16485
|
* @author Gabe Abrams
|
|
@@ -16486,6 +16564,7 @@ exports.getMonthName = getMonthName;
|
|
|
16486
16564
|
exports.getOrdinal = getOrdinal;
|
|
16487
16565
|
exports.getPartOfDay = getPartOfDay;
|
|
16488
16566
|
exports.getTimeInfoInET = getTimeInfoInET;
|
|
16567
|
+
exports.getWordCount = getWordCount;
|
|
16489
16568
|
exports.handleError = handleError;
|
|
16490
16569
|
exports.handleSuccess = handleSuccess;
|
|
16491
16570
|
exports.idify = idify;
|