dce-reactkit 3.11.4 → 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/dist/cjs/index.js +67 -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/esm/index.js +67 -10
- 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/index.d.ts +2 -0
- package/package.json +1 -1
- package/src/components/ItemPicker/index.tsx +96 -0
- package/src/components/TabBox.tsx +27 -9
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
|
};
|