@helpdice/ui 2.6.0-beta.9 → 2.6.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.
@@ -5,7 +5,6 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var React = require('react');
6
6
  var theme = require('@helpdice/theme');
7
7
  var jsxRuntime = require('react/jsx-runtime');
8
- var Button = require('components/button');
9
8
 
10
9
  function _arrayLikeToArray(r, a) {
11
10
  (null == a || a > r.length) && (a = r.length);
@@ -82,7 +81,10 @@ function _iterableToArrayLimit(r, l) {
82
81
  f = true,
83
82
  o = false;
84
83
  try {
85
- if (i = (t = t.call(r)).next, 0 === l) ; else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
84
+ if (i = (t = t.call(r)).next, 0 === l) {
85
+ if (Object(t) !== t) return;
86
+ f = !1;
87
+ } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
86
88
  } catch (r) {
87
89
  o = true, n = r;
88
90
  } finally {
@@ -713,7 +715,7 @@ var ScalePropKeys = ['width', 'height', 'padding', 'margin', 'w', 'h', 'paddingL
713
715
  var defaultDynamicLayoutPipe = function defaultDynamicLayoutPipe(scale1x) {
714
716
  return "".concat(scale1x);
715
717
  };
716
- var defaultContext = {
718
+ var defaultContext$1 = {
717
719
  getScaleProps: function getScaleProps() {
718
720
  return undefined;
719
721
  },
@@ -739,7 +741,7 @@ var defaultContext = {
739
741
  },
740
742
  unit: '16px'
741
743
  };
742
- var ScaleContext = /*#__PURE__*/React.createContext(defaultContext);
744
+ var ScaleContext = /*#__PURE__*/React.createContext(defaultContext$1);
743
745
  var useScale = function useScale() {
744
746
  return React.useContext(ScaleContext);
745
747
  };
@@ -796,7 +798,7 @@ var generateGetAllScaleProps = function generateGetAllScaleProps(props) {
796
798
  return getAllScaleProps;
797
799
  };
798
800
 
799
- var _excluded$2 = ["children"];
801
+ var _excluded$5 = ["children"];
800
802
  var reduceScaleCoefficient = function reduceScaleCoefficient(scale) {
801
803
  if (scale === 1) return scale;
802
804
  var diff = Math.abs((scale - 1) / 2);
@@ -806,7 +808,7 @@ var withScale = function withScale(Render) {
806
808
  var ScaleFC = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
807
809
  var _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9, _ref0, _ref1, _ref10, _ref11, _ref12, _ref13, _ref14, _ref15, _ref16, _ref17, _ref18, _ref19, _ref20, _ref21, _ref22, _ref23, _ref24, _ref25, _ref26, _ref27, _ref28, _ref29, _ref30, _ref31;
808
810
  var children = _ref.children,
809
- props = _objectWithoutProperties(_ref, _excluded$2);
811
+ props = _objectWithoutProperties(_ref, _excluded$5);
810
812
  var _useTheme = theme.useTheme(),
811
813
  layout = _useTheme.layout;
812
814
  var paddingLeft = props.paddingLeft,
@@ -891,7 +893,7 @@ var withScale = function withScale(Render) {
891
893
  return ScaleFC;
892
894
  };
893
895
 
894
- var _excluded$1 = ["xs", "sm", "md", "lg", "xl", "justify", "direction", "alignItems", "alignContent", "children", "className"];
896
+ var _excluded$4 = ["xs", "sm", "md", "lg", "xl", "justify", "direction", "alignItems", "alignContent", "children", "className"];
895
897
  var getItemLayout = function getItemLayout(val) {
896
898
  var display = val === 0 ? 'display: none;' : 'display: inherit;';
897
899
  if (typeof val === 'number') {
@@ -929,7 +931,7 @@ var GridBasicItem = function GridBasicItem(_ref) {
929
931
  children = _ref.children,
930
932
  _ref$className = _ref.className,
931
933
  className = _ref$className === void 0 ? '' : _ref$className,
932
- props = _objectWithoutProperties(_ref, _excluded$1);
934
+ props = _objectWithoutProperties(_ref, _excluded$4);
933
935
  var theme$1 = theme.useTheme();
934
936
  var _useScale = useScale(),
935
937
  SCALES = _useScale.SCALES;
@@ -986,6 +988,651 @@ tuple('hover', 'click');
986
988
  tuple('top', 'topStart', 'topEnd', 'left', 'leftStart', 'leftEnd', 'bottom', 'bottomStart', 'bottomEnd', 'right', 'rightStart', 'rightEnd');
987
989
  tuple('start', 'center', 'end', 'left', 'right');
988
990
 
991
+ var ButtonDrip = function ButtonDrip(_ref) {
992
+ var _ref$x = _ref.x,
993
+ x = _ref$x === void 0 ? 0 : _ref$x,
994
+ _ref$y = _ref.y,
995
+ y = _ref$y === void 0 ? 0 : _ref$y,
996
+ color = _ref.color,
997
+ onCompleted = _ref.onCompleted;
998
+ var dripRef = React.useRef(null);
999
+ /* istanbul ignore next */
1000
+ var top = Number.isNaN(+y) ? 0 : y - 10;
1001
+ /* istanbul ignore next */
1002
+ var left = Number.isNaN(+x) ? 0 : x - 10;
1003
+ React.useEffect(function () {
1004
+ /* istanbul ignore next */
1005
+ if (!dripRef.current) return;
1006
+ dripRef.current.addEventListener('animationend', onCompleted);
1007
+ return function () {
1008
+ /* istanbul ignore next */
1009
+ if (!dripRef.current) return;
1010
+ dripRef.current.removeEventListener('animationend', onCompleted);
1011
+ };
1012
+ });
1013
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
1014
+ ref: dripRef,
1015
+ className: "jsx-3424889537" + " " + "drip",
1016
+ children: [/*#__PURE__*/jsxRuntime.jsx("svg", {
1017
+ width: "20",
1018
+ height: "20",
1019
+ viewBox: "0 0 20 20",
1020
+ style: {
1021
+ top: top,
1022
+ left: left
1023
+ },
1024
+ className: "jsx-3424889537",
1025
+ children: /*#__PURE__*/jsxRuntime.jsx("g", {
1026
+ stroke: "none",
1027
+ strokeWidth: "1",
1028
+ fill: "none",
1029
+ fillRule: "evenodd",
1030
+ className: "jsx-3424889537",
1031
+ children: /*#__PURE__*/jsxRuntime.jsx("g", {
1032
+ fill: color,
1033
+ className: "jsx-3424889537",
1034
+ children: /*#__PURE__*/jsxRuntime.jsx("rect", {
1035
+ width: "100%",
1036
+ height: "100%",
1037
+ rx: "10",
1038
+ className: "jsx-3424889537"
1039
+ })
1040
+ })
1041
+ })
1042
+ }), /*#__PURE__*/jsxRuntime.jsx(_JSXStyle, {
1043
+ id: "3424889537",
1044
+ children: ".drip.jsx-3424889537{position:absolute;left:0;right:0;top:0;bottom:0;}svg.jsx-3424889537{position:absolute;-webkit-animation:350ms ease-in expand-jsx-3424889537;animation:350ms ease-in expand-jsx-3424889537;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;width:1rem;height:1rem;}@-webkit-keyframes expand-jsx-3424889537{0%{opacity:0;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);}30%{opacity:1;}80%{opacity:0.5;}100%{-webkit-transform:scale(28);-ms-transform:scale(28);transform:scale(28);opacity:0;}}@keyframes expand-jsx-3424889537{0%{opacity:0;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);}30%{opacity:1;}80%{opacity:0.5;}100%{-webkit-transform:scale(28);-ms-transform:scale(28);transform:scale(28);opacity:0;}}"
1045
+ })]
1046
+ });
1047
+ };
1048
+ ButtonDrip.displayName = 'ButtonDrip';
1049
+
1050
+ var _excluded$3 = ["children", "type", "color", "className", "spaceRatio"];
1051
+ var getIconBgColor = function getIconBgColor(type, palette, color) {
1052
+ var colors = {
1053
+ "default": palette.accents_6,
1054
+ secondary: palette.secondary,
1055
+ success: palette.success,
1056
+ warning: palette.warning,
1057
+ error: palette.error
1058
+ };
1059
+ return color ? color : colors[type];
1060
+ };
1061
+ var LoadingComponent = function LoadingComponent(_ref) {
1062
+ var children = _ref.children,
1063
+ _ref$type = _ref.type,
1064
+ type = _ref$type === void 0 ? 'default' : _ref$type,
1065
+ color = _ref.color,
1066
+ _ref$className = _ref.className,
1067
+ className = _ref$className === void 0 ? '' : _ref$className,
1068
+ _ref$spaceRatio = _ref.spaceRatio,
1069
+ spaceRatio = _ref$spaceRatio === void 0 ? 1 : _ref$spaceRatio,
1070
+ props = _objectWithoutProperties(_ref, _excluded$3);
1071
+ var theme$1 = theme.useTheme();
1072
+ var _useScale = useScale(),
1073
+ SCALES = _useScale.SCALES;
1074
+ var classes = theme.useClasses('loading-container', className);
1075
+ var bgColor = React.useMemo(function () {
1076
+ return getIconBgColor(type, theme$1.palette, color);
1077
+ }, [type, theme$1.palette, color]);
1078
+ return /*#__PURE__*/jsxRuntime.jsxs("div", _objectSpread2(_objectSpread2({}, props), {}, {
1079
+ className: _JSXStyle.dynamic([["2201634259", [SCALES.font(1), SCALES.width(1, '100%'), SCALES.height(1, '100%'), SCALES.pt(0), SCALES.pr(0), SCALES.pb(0), SCALES.pl(0), SCALES.mt(0), SCALES.mr(0), SCALES.mb(0), SCALES.ml(0), theme$1.palette.accents_5, bgColor, spaceRatio]]]) + " " + (props && props.className != null && props.className || classes || ""),
1080
+ children: [/*#__PURE__*/jsxRuntime.jsxs("span", {
1081
+ className: _JSXStyle.dynamic([["2201634259", [SCALES.font(1), SCALES.width(1, '100%'), SCALES.height(1, '100%'), SCALES.pt(0), SCALES.pr(0), SCALES.pb(0), SCALES.pl(0), SCALES.mt(0), SCALES.mr(0), SCALES.mb(0), SCALES.ml(0), theme$1.palette.accents_5, bgColor, spaceRatio]]]) + " " + "loading",
1082
+ children: [children && /*#__PURE__*/jsxRuntime.jsx("label", {
1083
+ className: _JSXStyle.dynamic([["2201634259", [SCALES.font(1), SCALES.width(1, '100%'), SCALES.height(1, '100%'), SCALES.pt(0), SCALES.pr(0), SCALES.pb(0), SCALES.pl(0), SCALES.mt(0), SCALES.mr(0), SCALES.mb(0), SCALES.ml(0), theme$1.palette.accents_5, bgColor, spaceRatio]]]),
1084
+ children: children
1085
+ }), /*#__PURE__*/jsxRuntime.jsx("i", {
1086
+ className: _JSXStyle.dynamic([["2201634259", [SCALES.font(1), SCALES.width(1, '100%'), SCALES.height(1, '100%'), SCALES.pt(0), SCALES.pr(0), SCALES.pb(0), SCALES.pl(0), SCALES.mt(0), SCALES.mr(0), SCALES.mb(0), SCALES.ml(0), theme$1.palette.accents_5, bgColor, spaceRatio]]])
1087
+ }), /*#__PURE__*/jsxRuntime.jsx("i", {
1088
+ className: _JSXStyle.dynamic([["2201634259", [SCALES.font(1), SCALES.width(1, '100%'), SCALES.height(1, '100%'), SCALES.pt(0), SCALES.pr(0), SCALES.pb(0), SCALES.pl(0), SCALES.mt(0), SCALES.mr(0), SCALES.mb(0), SCALES.ml(0), theme$1.palette.accents_5, bgColor, spaceRatio]]])
1089
+ }), /*#__PURE__*/jsxRuntime.jsx("i", {
1090
+ className: _JSXStyle.dynamic([["2201634259", [SCALES.font(1), SCALES.width(1, '100%'), SCALES.height(1, '100%'), SCALES.pt(0), SCALES.pr(0), SCALES.pb(0), SCALES.pl(0), SCALES.mt(0), SCALES.mr(0), SCALES.mb(0), SCALES.ml(0), theme$1.palette.accents_5, bgColor, spaceRatio]]])
1091
+ })]
1092
+ }), /*#__PURE__*/jsxRuntime.jsx(_JSXStyle, {
1093
+ id: "2201634259",
1094
+ dynamic: [SCALES.font(1), SCALES.width(1, '100%'), SCALES.height(1, '100%'), SCALES.pt(0), SCALES.pr(0), SCALES.pb(0), SCALES.pl(0), SCALES.mt(0), SCALES.mr(0), SCALES.mb(0), SCALES.ml(0), theme$1.palette.accents_5, bgColor, spaceRatio],
1095
+ children: ".loading-container.__jsx-style-dynamic-selector{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;font-size:".concat(SCALES.font(1), ";width:").concat(SCALES.width(1, '100%'), ";height:").concat(SCALES.height(1, '100%'), ";min-height:1em;padding:").concat(SCALES.pt(0), " ").concat(SCALES.pr(0), " ").concat(SCALES.pb(0), " ").concat(SCALES.pl(0), ";margin:").concat(SCALES.mt(0), " ").concat(SCALES.mr(0), " ").concat(SCALES.mb(0), " ").concat(SCALES.ml(0), ";}label.__jsx-style-dynamic-selector{margin-right:0.5em;color:").concat(theme$1.palette.accents_5, ";line-height:1;}label.__jsx-style-dynamic-selector *{margin:0;}.loading.__jsx-style-dynamic-selector{position:absolute;top:50%;left:50%;width:100%;height:100%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:transparent;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}i.__jsx-style-dynamic-selector{width:0.25em;height:0.25em;border-radius:50%;background-color:").concat(bgColor, ";margin:0 calc(0.25em / 2 * ").concat(spaceRatio, ");display:inline-block;-webkit-animation:loading-blink-__jsx-style-dynamic-selector 1.4s infinite both;animation:loading-blink-__jsx-style-dynamic-selector 1.4s infinite both;}i.__jsx-style-dynamic-selector:nth-child(2){-webkit-animation-delay:0.2s;animation-delay:0.2s;}i.__jsx-style-dynamic-selector:nth-child(3){-webkit-animation-delay:0.4s;animation-delay:0.4s;}@-webkit-keyframes loading-blink-__jsx-style-dynamic-selector{0%{opacity:0.2;}20%{opacity:1;}100%{opacity:0.2;}}@keyframes loading-blink-__jsx-style-dynamic-selector{0%{opacity:0.2;}20%{opacity:1;}100%{opacity:0.2;}}")
1096
+ })]
1097
+ }));
1098
+ };
1099
+ LoadingComponent.displayName = 'Loading';
1100
+ var Loading = withScale(LoadingComponent);
1101
+
1102
+ var ButtonLoading = function ButtonLoading(_ref) {
1103
+ var color = _ref.color;
1104
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
1105
+ className: "jsx-212623367" + " " + "btn-loading",
1106
+ children: [/*#__PURE__*/jsxRuntime.jsx(Loading, {
1107
+ color: color
1108
+ }), /*#__PURE__*/jsxRuntime.jsx(_JSXStyle, {
1109
+ id: "212623367",
1110
+ children: ".btn-loading.jsx-212623367{position:absolute;top:0;left:0;right:0;bottom:0;z-index:2;background-color:var(--helpdice-ui-button-bg);}"
1111
+ })]
1112
+ });
1113
+ };
1114
+ ButtonLoading.displayName = 'ButtonLoading';
1115
+
1116
+ var _excluded$2 = ["isRight", "isSingle", "children", "className"];
1117
+ var ButtonIcon = function ButtonIcon(_ref) {
1118
+ var _ref$isRight = _ref.isRight,
1119
+ isRight = _ref$isRight === void 0 ? false : _ref$isRight,
1120
+ isSingle = _ref.isSingle,
1121
+ children = _ref.children,
1122
+ _ref$className = _ref.className,
1123
+ className = _ref$className === void 0 ? '' : _ref$className,
1124
+ props = _objectWithoutProperties(_ref, _excluded$2);
1125
+ var classes = theme.useClasses('icon', {
1126
+ right: isRight,
1127
+ single: isSingle
1128
+ }, className);
1129
+ return /*#__PURE__*/jsxRuntime.jsxs("span", _objectSpread2(_objectSpread2({}, props), {}, {
1130
+ className: "jsx-2467502931" + " " + (props && props.className != null && props.className || classes || ""),
1131
+ children: [children, /*#__PURE__*/jsxRuntime.jsx(_JSXStyle, {
1132
+ id: "2467502931",
1133
+ children: ".icon.jsx-2467502931{position:absolute;left:var(--helpdice-ui-button-icon-padding);right:auto;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:var(--helpdice-ui-button-color);z-index:1;}.right.jsx-2467502931{right:var(--helpdice-ui-button-icon-padding);left:auto;}.icon.jsx-2467502931 svg{background:transparent;height:calc(var(--helpdice-ui-button-height) / 2.35);width:calc(var(--helpdice-ui-button-height) / 2.35);}.single.jsx-2467502931{position:static;-webkit-transform:none;-ms-transform:none;transform:none;}"
1134
+ })]
1135
+ }));
1136
+ };
1137
+ ButtonIcon.displayName = 'ButtonIcon';
1138
+
1139
+ var getButtonChildrenWithIcon = function getButtonChildrenWithIcon(auto, children, icons) {
1140
+ var icon = icons.icon,
1141
+ iconRight = icons.iconRight;
1142
+ var hasIcon = icon || iconRight;
1143
+ var isRight = Boolean(iconRight);
1144
+ var paddingForAutoMode = auto ? "calc(var(--helpdice-ui-button-height) / 2 + var(--helpdice-ui-button-icon-padding) * .5)" : 0;
1145
+ var classes = theme.useClasses('text', isRight ? 'right' : 'left');
1146
+ if (!hasIcon) return /*#__PURE__*/jsxRuntime.jsx("div", {
1147
+ className: "text",
1148
+ children: children
1149
+ });
1150
+ if (React.Children.count(children) === 0) {
1151
+ return /*#__PURE__*/jsxRuntime.jsx(ButtonIcon, {
1152
+ isRight: isRight,
1153
+ isSingle: true,
1154
+ children: hasIcon
1155
+ });
1156
+ }
1157
+ return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
1158
+ children: [/*#__PURE__*/jsxRuntime.jsx(ButtonIcon, {
1159
+ isRight: isRight,
1160
+ children: hasIcon
1161
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
1162
+ className: _JSXStyle.dynamic([["3568181479", [paddingForAutoMode, paddingForAutoMode]]]) + " " + (classes || ""),
1163
+ children: [children, /*#__PURE__*/jsxRuntime.jsx(_JSXStyle, {
1164
+ id: "3568181479",
1165
+ dynamic: [paddingForAutoMode, paddingForAutoMode],
1166
+ children: ".left.__jsx-style-dynamic-selector{padding-left:".concat(paddingForAutoMode, ";}.right.__jsx-style-dynamic-selector{padding-right:").concat(paddingForAutoMode, ";}")
1167
+ })]
1168
+ })]
1169
+ });
1170
+ };
1171
+ var filterPropsWithGroup = function filterPropsWithGroup(props, config) {
1172
+ if (!config.isButtonGroup) return props;
1173
+ return _objectSpread2(_objectSpread2({}, props), {}, {
1174
+ auto: true,
1175
+ shadow: false,
1176
+ ghost: config.ghost || props.ghost,
1177
+ type: config.type || props.type,
1178
+ disabled: config.disabled || props.disabled
1179
+ });
1180
+ };
1181
+
1182
+ /* "use client" */
1183
+
1184
+ var defaultContext = {
1185
+ isButtonGroup: false,
1186
+ disabled: false
1187
+ };
1188
+ var ButtonGroupContext = /*#__PURE__*/React.createContext(defaultContext);
1189
+ var useButtonGroupContext = function useButtonGroupContext() {
1190
+ return React.useContext(ButtonGroupContext);
1191
+ };
1192
+
1193
+ var hexToRgb = function hexToRgb(color) {
1194
+ var fullReg = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
1195
+ var full = color.replace(fullReg, function (_, r, g, b) {
1196
+ return "".concat(r).concat(r).concat(g).concat(g).concat(b).concat(b);
1197
+ });
1198
+ var values = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(full);
1199
+ if (!values) {
1200
+ throw new Error("Helpdice UI: Unsupported ".concat(color, " color."));
1201
+ }
1202
+ return [Number.parseInt(values[1], 16), Number.parseInt(values[2], 16), Number.parseInt(values[3], 16)];
1203
+ };
1204
+ var colorToRgbValues = function colorToRgbValues(color) {
1205
+ if (color.charAt(0) === '#') return hexToRgb(color);
1206
+ var safeColor = color.replace(/ /g, '');
1207
+ var colorType = color.substr(0, 4);
1208
+ var regArray = safeColor.match(/\((.+)\)/);
1209
+ if (!colorType.startsWith('rgb') || !regArray) {
1210
+ console.log(color);
1211
+ throw new Error("Helpdice UI: Only support [\"RGB\", \"RGBA\", \"HEX\"] color.");
1212
+ }
1213
+ return regArray[1].split(',').map(function (str) {
1214
+ return Number.parseFloat(str);
1215
+ });
1216
+ };
1217
+ var addColorAlpha = function addColorAlpha(color, alpha) {
1218
+ if (!/^#|rgb|RGB/.test(color)) return color;
1219
+ var _colorToRgbValues = colorToRgbValues(color),
1220
+ _colorToRgbValues2 = _slicedToArray(_colorToRgbValues, 3),
1221
+ r = _colorToRgbValues2[0],
1222
+ g = _colorToRgbValues2[1],
1223
+ b = _colorToRgbValues2[2];
1224
+ var safeAlpha = alpha > 1 ? 1 : alpha < 0 ? 0 : alpha;
1225
+ return "rgba(".concat(r, ", ").concat(g, ", ").concat(b, ", ").concat(safeAlpha, ")");
1226
+ };
1227
+
1228
+ var getButtonGhostColors = function getButtonGhostColors(palette, _color) {
1229
+ var colors = {
1230
+ secondary: {
1231
+ bg: palette.background,
1232
+ border: palette.foreground,
1233
+ color: palette.foreground,
1234
+ ripple: ''
1235
+ },
1236
+ success: {
1237
+ bg: palette.background,
1238
+ border: palette.success,
1239
+ color: palette.success,
1240
+ ripple: ''
1241
+ },
1242
+ warning: {
1243
+ bg: palette.background,
1244
+ border: palette.warning,
1245
+ color: palette.warning,
1246
+ ripple: ''
1247
+ },
1248
+ error: {
1249
+ bg: palette.background,
1250
+ border: palette.error,
1251
+ color: palette.error,
1252
+ ripple: ''
1253
+ }
1254
+ };
1255
+ return colors[_color] || null;
1256
+ };
1257
+ var getButtonColors = function getButtonColors(palette, props) {
1258
+ var color = props.color,
1259
+ disabled = props.disabled,
1260
+ ghost = props.ghost;
1261
+ var colors = {
1262
+ "default": {
1263
+ bg: palette.background,
1264
+ border: palette.border,
1265
+ color: palette.accents_5,
1266
+ ripple: palette.accents_1
1267
+ },
1268
+ secondary: {
1269
+ bg: palette.foreground,
1270
+ border: palette.foreground,
1271
+ color: palette.background,
1272
+ ripple: palette.accents_1
1273
+ },
1274
+ success: {
1275
+ bg: palette.success,
1276
+ border: palette.success,
1277
+ color: '#fff',
1278
+ ripple: '#1f93ffff'
1279
+ },
1280
+ warning: {
1281
+ bg: palette.warning,
1282
+ border: palette.warning,
1283
+ color: '#fff',
1284
+ ripple: '#ffca29ff'
1285
+ },
1286
+ error: {
1287
+ bg: palette.error,
1288
+ border: palette.error,
1289
+ color: '#fff',
1290
+ ripple: '#ff5a55ff'
1291
+ },
1292
+ abort: {
1293
+ bg: 'transparent',
1294
+ border: 'transparent',
1295
+ color: palette.accents_5,
1296
+ ripple: palette.accents_1
1297
+ }
1298
+ };
1299
+ if (disabled) return {
1300
+ bg: palette.accents_1,
1301
+ border: palette.accents_2,
1302
+ color: '#ccc',
1303
+ ripple: ''
1304
+ };
1305
+
1306
+ /**
1307
+ * The '-light' type is the same color as the common type,
1308
+ * only hover's color is different.
1309
+ * e.g.
1310
+ * Color['success'] === Color['success-light']
1311
+ * Color['warning'] === Color['warning-light']
1312
+ */
1313
+ var withoutLightType = color === null || color === void 0 ? void 0 : color.replace('-light', '');
1314
+ var defaultColor = colors["default"];
1315
+ if (ghost) return getButtonGhostColors(palette, withoutLightType) || defaultColor;
1316
+ return colors[withoutLightType] || defaultColor;
1317
+ };
1318
+ var getButtonGhostHoverColors = function getButtonGhostHoverColors(palette, _color) {
1319
+ var colors = {
1320
+ secondary: {
1321
+ bg: palette.foreground,
1322
+ border: palette.background,
1323
+ color: palette.background
1324
+ },
1325
+ success: {
1326
+ bg: palette.success,
1327
+ border: palette.background,
1328
+ color: 'white'
1329
+ },
1330
+ warning: {
1331
+ bg: palette.warning,
1332
+ border: palette.background,
1333
+ color: 'white'
1334
+ },
1335
+ error: {
1336
+ bg: palette.error,
1337
+ border: palette.background,
1338
+ color: 'white'
1339
+ }
1340
+ };
1341
+ var withoutLightType = _color === null || _color === void 0 ? void 0 : _color.replace('-light', '');
1342
+ return colors[withoutLightType] || null;
1343
+ };
1344
+ var getButtonHoverColors = function getButtonHoverColors(palette, props) {
1345
+ var color = props.color,
1346
+ disabled = props.disabled,
1347
+ loading = props.loading,
1348
+ shadow = props.shadow,
1349
+ ghost = props.ghost;
1350
+ var defaultColor = getButtonColors(palette, props);
1351
+ var alphaBackground = addColorAlpha(defaultColor.bg, 0.85);
1352
+ var colors = {
1353
+ "default": {
1354
+ bg: palette.background,
1355
+ border: palette.foreground
1356
+ },
1357
+ secondary: {
1358
+ bg: palette.background,
1359
+ border: palette.foreground
1360
+ },
1361
+ success: {
1362
+ bg: palette.background,
1363
+ border: palette.success
1364
+ },
1365
+ warning: {
1366
+ bg: palette.background,
1367
+ border: palette.warning
1368
+ },
1369
+ error: {
1370
+ bg: palette.background,
1371
+ border: palette.error
1372
+ },
1373
+ abort: {
1374
+ bg: 'transparent',
1375
+ border: 'transparent',
1376
+ color: palette.accents_5
1377
+ },
1378
+ 'secondary-light': _objectSpread2(_objectSpread2({}, defaultColor), {}, {
1379
+ bg: alphaBackground
1380
+ }),
1381
+ 'success-light': _objectSpread2(_objectSpread2({}, defaultColor), {}, {
1382
+ bg: alphaBackground
1383
+ }),
1384
+ 'warning-light': _objectSpread2(_objectSpread2({}, defaultColor), {}, {
1385
+ bg: alphaBackground
1386
+ }),
1387
+ 'error-light': _objectSpread2(_objectSpread2({}, defaultColor), {}, {
1388
+ bg: alphaBackground
1389
+ })
1390
+ };
1391
+ if (disabled) return {
1392
+ bg: palette.accents_1,
1393
+ border: palette.accents_2,
1394
+ color: '#ccc'
1395
+ };
1396
+ if (loading) return _objectSpread2(_objectSpread2({}, defaultColor), {}, {
1397
+ color: 'transparent'
1398
+ });
1399
+ if (shadow) return defaultColor;
1400
+ var hoverColor = (ghost ? getButtonGhostHoverColors(palette, color) : colors[color]) || colors["default"];
1401
+ return _objectSpread2(_objectSpread2({}, hoverColor), {}, {
1402
+ color: hoverColor.color || hoverColor.border
1403
+ });
1404
+ };
1405
+ var getButtonCursor = function getButtonCursor(disabled, loading) {
1406
+ if (disabled) return {
1407
+ cursor: 'not-allowed',
1408
+ events: 'auto'
1409
+ };
1410
+ if (loading) return {
1411
+ cursor: 'default',
1412
+ events: 'none'
1413
+ };
1414
+ return {
1415
+ cursor: 'pointer',
1416
+ events: 'auto'
1417
+ };
1418
+ };
1419
+ var getButtonDripColor = function getButtonDripColor(palette, props) {
1420
+ var type = props.type;
1421
+ var isLightHover = type ? type.endsWith('light') : false;
1422
+ var hoverColors = getButtonHoverColors(palette, props);
1423
+ return isLightHover ? addColorAlpha(hoverColors.bg, 0.65) : addColorAlpha(palette.accents_2, 0.65);
1424
+ };
1425
+
1426
+ var _excluded$1 = ["children", "disabled", "color", "loading", "shadow", "ghost", "effect", "round", "relative", "replace", "a", "to", "onClick", "auto", "icon", "type", "iconRight", "className", "crossOrigin"];
1427
+ var ButtonComponent = /*#__PURE__*/React.forwardRef(function (btnProps, ref) {
1428
+ var theme$1 = theme.useTheme();
1429
+ // const navigate = useNavigate();
1430
+ var _useScale = useScale(),
1431
+ SCALES = _useScale.SCALES;
1432
+ var buttonRef = React.useRef(null);
1433
+ React.useImperativeHandle(ref, function () {
1434
+ return buttonRef.current;
1435
+ }); // Changed with !
1436
+
1437
+ var _useState = React.useState(false),
1438
+ _useState2 = _slicedToArray(_useState, 2),
1439
+ dripShow = _useState2[0],
1440
+ setDripShow = _useState2[1];
1441
+ var _useState3 = React.useState(0),
1442
+ _useState4 = _slicedToArray(_useState3, 2),
1443
+ dripX = _useState4[0],
1444
+ setDripX = _useState4[1];
1445
+ var _useState5 = React.useState(0),
1446
+ _useState6 = _slicedToArray(_useState5, 2),
1447
+ dripY = _useState6[0],
1448
+ setDripY = _useState6[1];
1449
+ var groupConfig = useButtonGroupContext();
1450
+ var filteredProps = filterPropsWithGroup(btnProps, groupConfig);
1451
+ /* eslint-disable @typescript-eslint/no-unused-vars */
1452
+ var children = filteredProps.children,
1453
+ _filteredProps$disabl = filteredProps.disabled,
1454
+ disabled = _filteredProps$disabl === void 0 ? false : _filteredProps$disabl;
1455
+ filteredProps.color;
1456
+ var _filteredProps$loadin = filteredProps.loading,
1457
+ loading = _filteredProps$loadin === void 0 ? false : _filteredProps$loadin,
1458
+ _filteredProps$shadow = filteredProps.shadow,
1459
+ shadow = _filteredProps$shadow === void 0 ? false : _filteredProps$shadow,
1460
+ _filteredProps$ghost = filteredProps.ghost,
1461
+ ghost = _filteredProps$ghost === void 0 ? false : _filteredProps$ghost,
1462
+ _filteredProps$effect = filteredProps.effect,
1463
+ effect = _filteredProps$effect === void 0 ? true : _filteredProps$effect,
1464
+ _filteredProps$round = filteredProps.round,
1465
+ round = _filteredProps$round === void 0 ? false : _filteredProps$round;
1466
+ filteredProps.relative;
1467
+ filteredProps.replace;
1468
+ filteredProps.a;
1469
+ var to = filteredProps.to,
1470
+ onClick = filteredProps.onClick,
1471
+ _filteredProps$auto = filteredProps.auto,
1472
+ auto = _filteredProps$auto === void 0 ? false : _filteredProps$auto,
1473
+ icon = filteredProps.icon,
1474
+ _filteredProps$type = filteredProps.type,
1475
+ type = _filteredProps$type === void 0 ? 'button' : _filteredProps$type,
1476
+ iconRight = filteredProps.iconRight,
1477
+ _filteredProps$classN = filteredProps.className,
1478
+ className = _filteredProps$classN === void 0 ? '' : _filteredProps$classN;
1479
+ filteredProps.crossOrigin;
1480
+ var props = _objectWithoutProperties(filteredProps, _excluded$1);
1481
+ /* eslint-enable @typescript-eslint/no-unused-vars */
1482
+
1483
+ var _useMemo = React.useMemo(function () {
1484
+ return getButtonColors(theme$1.palette, filteredProps);
1485
+ }, [theme$1.palette, filteredProps]),
1486
+ bg = _useMemo.bg,
1487
+ border = _useMemo.border,
1488
+ color = _useMemo.color,
1489
+ rippleColor = _useMemo.ripple;
1490
+ var hover = React.useMemo(function () {
1491
+ return getButtonHoverColors(theme$1.palette, filteredProps);
1492
+ }, [theme$1.palette, filteredProps]);
1493
+ var _useMemo2 = React.useMemo(function () {
1494
+ return getButtonCursor(disabled, loading);
1495
+ }, [disabled, loading]),
1496
+ cursor = _useMemo2.cursor,
1497
+ events = _useMemo2.events;
1498
+ var dripColor = React.useMemo(function () {
1499
+ return getButtonDripColor(theme$1.palette, filteredProps);
1500
+ }, [theme$1.palette, filteredProps]);
1501
+
1502
+ /* istanbul ignore next */
1503
+ var dripCompletedHandle = function dripCompletedHandle() {
1504
+ setDripShow(false);
1505
+ setDripX(0);
1506
+ setDripY(0);
1507
+ };
1508
+ var createRipple = function createRipple(event) {
1509
+ var button = buttonRef.current;
1510
+ if (!button) return;
1511
+ var rect = button.getBoundingClientRect();
1512
+ var size = Math.max(rect.width, rect.height);
1513
+ var x = event.clientX - rect.left - size / 2;
1514
+ var y = event.clientY - rect.top - size / 2;
1515
+ var rippleCount = 1; // number of rings
1516
+ var rippleDelay = 500; // ms between each ripple
1517
+ var _loop = function _loop() {
1518
+ var ripple = document.createElement('span');
1519
+ Object.assign(ripple.style, {
1520
+ position: 'absolute',
1521
+ borderRadius: '50%',
1522
+ backgroundColor: rippleColor,
1523
+ width: "".concat(size, "px"),
1524
+ height: "".concat(size, "px"),
1525
+ left: "".concat(x, "px"),
1526
+ top: "".concat(y, "px"),
1527
+ pointerEvents: 'none',
1528
+ transform: 'scale(0)',
1529
+ opacity: '1',
1530
+ transition: "transform 600ms ease-out ".concat(i * rippleDelay, "ms, opacity 600ms ease-out ").concat(i * rippleDelay, "ms"),
1531
+ zIndex: 1
1532
+ });
1533
+ button.appendChild(ripple);
1534
+
1535
+ // Force reflow to start transition
1536
+ window.getComputedStyle(ripple).opacity;
1537
+ ripple.style.transform = 'scale(2.5)';
1538
+ ripple.style.opacity = '0';
1539
+ ripple.addEventListener('transitionend', function () {
1540
+ ripple.remove();
1541
+ });
1542
+ };
1543
+ for (var i = 0; i < rippleCount; i++) {
1544
+ _loop();
1545
+ }
1546
+ };
1547
+ var clickHandler = function clickHandler(event) {
1548
+ if (disabled || loading) return;
1549
+ var showDrip = !shadow && !ghost && effect;
1550
+ /* istanbul ignore next */
1551
+ if (showDrip && buttonRef.current) {
1552
+ var rect = buttonRef.current.getBoundingClientRect();
1553
+ setDripShow(true);
1554
+ setDripX(event.clientX - rect.left);
1555
+ setDripY(event.clientY - rect.top);
1556
+ }
1557
+ if (shadow) {
1558
+ createRipple(event);
1559
+ }
1560
+ onClick && onClick(event);
1561
+ };
1562
+ var childrenWithIcon = React.useMemo(function () {
1563
+ return getButtonChildrenWithIcon(auto, children, {
1564
+ icon: icon,
1565
+ iconRight: iconRight
1566
+ });
1567
+ }, [auto, children, icon, iconRight]);
1568
+ var paddingLeft = auto ? SCALES.pl(1.15) : SCALES.pl(1.375),
1569
+ paddingRight = auto ? SCALES.pr(1.15) : SCALES.pr(1.375);
1570
+
1571
+ // If shadow provided is string then value other default
1572
+ var btnShadow = typeof shadow === 'string' ? shadow : shadow ? theme$1.shadows.level.z2 : 'none';
1573
+ return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
1574
+ children: [to ? /*#__PURE__*/jsxRuntime.jsxs("a", _objectSpread2(_objectSpread2({
1575
+ href: to
1576
+ }, props), {}, {
1577
+ className: _JSXStyle.dynamic([["612376042", [SCALES.height(2.5), round ? '50%' : theme$1.layout.radius, SCALES.font(0.875), color, bg, shadow ? 'transparent' : border, cursor !== null && cursor !== void 0 ? cursor : 'pointer', events, shadow ? btnShadow : 'none', SCALES.pl(0.727), SCALES.height(2.5), color, bg, auto ? 'min-content' : SCALES.width(10.5), auto ? 'auto' : 'initial', SCALES.height(2.5), SCALES.pt(0), paddingRight, SCALES.pb(0), paddingLeft, SCALES.mt(0), SCALES.mr(0), SCALES.mb(0), SCALES.ml(0), hover.color, hover.color, hover.bg, hover.border, cursor, events, btnShadow, shadow ? '-1px' : '0px']]]) + " " + (props && props.className != null && props.className || theme.useClasses('btn', 'btn-link', className) || ""),
1578
+ children: [loading && /*#__PURE__*/jsxRuntime.jsx(ButtonLoading, {
1579
+ color: color
1580
+ }), childrenWithIcon]
1581
+ })) : /*#__PURE__*/jsxRuntime.jsxs("button", _objectSpread2(_objectSpread2({
1582
+ ref: buttonRef,
1583
+ type: type,
1584
+ disabled: disabled,
1585
+ onClick: clickHandler
1586
+ }, props), {}, {
1587
+ className: _JSXStyle.dynamic([["612376042", [SCALES.height(2.5), round ? '50%' : theme$1.layout.radius, SCALES.font(0.875), color, bg, shadow ? 'transparent' : border, cursor !== null && cursor !== void 0 ? cursor : 'pointer', events, shadow ? btnShadow : 'none', SCALES.pl(0.727), SCALES.height(2.5), color, bg, auto ? 'min-content' : SCALES.width(10.5), auto ? 'auto' : 'initial', SCALES.height(2.5), SCALES.pt(0), paddingRight, SCALES.pb(0), paddingLeft, SCALES.mt(0), SCALES.mr(0), SCALES.mb(0), SCALES.ml(0), hover.color, hover.color, hover.bg, hover.border, cursor, events, btnShadow, shadow ? '-1px' : '0px']]]) + " " + (props && props.className != null && props.className || theme.useClasses('btn', className) || ""),
1588
+ children: [loading && /*#__PURE__*/jsxRuntime.jsx(ButtonLoading, {
1589
+ color: color
1590
+ }), childrenWithIcon, dripShow && /*#__PURE__*/jsxRuntime.jsx(ButtonDrip, {
1591
+ x: dripX,
1592
+ y: dripY,
1593
+ color: dripColor,
1594
+ onCompleted: dripCompletedHandle
1595
+ })]
1596
+ })), /*#__PURE__*/jsxRuntime.jsx(_JSXStyle, {
1597
+ id: "612376042",
1598
+ dynamic: [SCALES.height(2.5), round ? '50%' : theme$1.layout.radius, SCALES.font(0.875), color, bg, shadow ? 'transparent' : border, cursor !== null && cursor !== void 0 ? cursor : 'pointer', events, shadow ? btnShadow : 'none', SCALES.pl(0.727), SCALES.height(2.5), color, bg, auto ? 'min-content' : SCALES.width(10.5), auto ? 'auto' : 'initial', SCALES.height(2.5), SCALES.pt(0), paddingRight, SCALES.pb(0), paddingLeft, SCALES.mt(0), SCALES.mr(0), SCALES.mb(0), SCALES.ml(0), hover.color, hover.color, hover.bg, hover.border, cursor, events, btnShadow, shadow ? '-1px' : '0px'],
1599
+ children: ".btn.__jsx-style-dynamic-selector{box-sizing:border-box;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;line-height:".concat(SCALES.height(2.5), ";border-radius:").concat(round ? '50%' : theme$1.layout.radius, ";font-weight:400;font-size:").concat(SCALES.font(0.875), ";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:none;text-transform:capitalize;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center;white-space:nowrap;-webkit-transition:background-color 200ms ease 0ms,box-shadow 200ms ease 0ms, border 200ms ease 0ms,color 200ms ease 0ms;transition:background-color 200ms ease 0ms,box-shadow 200ms ease 0ms, border 200ms ease 0ms,color 200ms ease 0ms;position:relative;overflow:hidden;color:").concat(color, ";background-color:").concat(bg, ";border:1px solid ").concat(shadow ? 'transparent' : border, ";cursor:").concat(cursor !== null && cursor !== void 0 ? cursor : 'pointer', ";pointer-events:").concat(events, ";box-shadow:").concat(shadow ? btnShadow : 'none', ";--helpdice-ui-button-icon-padding:").concat(SCALES.pl(0.727), ";--helpdice-ui-button-height:").concat(SCALES.height(2.5), ";--helpdice-ui-button-color:").concat(color, ";--helpdice-ui-button-bg:").concat(bg, ";min-width:").concat(auto ? 'min-content' : SCALES.width(10.5), ";width:").concat(auto ? 'auto' : 'initial', ";height:").concat(SCALES.height(2.5), ";padding:").concat(SCALES.pt(0), " ").concat(paddingRight, " ").concat(SCALES.pb(0), " ").concat(paddingLeft, ";margin:").concat(SCALES.mt(0), " ").concat(SCALES.mr(0), " ").concat(SCALES.mb(0), " ").concat(SCALES.ml(0), ";}.btn.__jsx-style-dynamic-selector:hover,.btn.__jsx-style-dynamic-selector:focus{color:").concat(hover.color, ";--helpdice-ui-button-color:").concat(hover.color, ";background-color:").concat(hover.bg, ";border-color:").concat(hover.border, ";cursor:").concat(cursor, ";pointer-events:").concat(events, ";box-shadow:").concat(btnShadow, ";}.btn-link.__jsx-style-dynamic-selector{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.btn.__jsx-style-dynamic-selector .text{position:relative;z-index:1;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;text-align:center;line-height:inherit;top:-1px;}.btn.__jsx-style-dynamic-selector .text p,.btn.__jsx-style-dynamic-selector .text pre,.btn.__jsx-style-dynamic-selector .text div{margin:0;}.ripple.__jsx-style-dynamic-selector{position:absolute;border-radius:50%;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-animation:ripple-animation-__jsx-style-dynamic-selector 600ms ease-out;animation:ripple-animation-__jsx-style-dynamic-selector 600ms ease-out;background-color:rgba(0,0,0,0.3);pointer-events:none;z-index:1;}@-webkit-keyframes ripple-animation-__jsx-style-dynamic-selector{to{-webkit-transform:scale(2.5);-ms-transform:scale(2.5);transform:scale(2.5);opacity:0;}}@keyframes ripple-animation-__jsx-style-dynamic-selector{to{-webkit-transform:scale(2.5);-ms-transform:scale(2.5);transform:scale(2.5);opacity:0;}}")
1600
+ })]
1601
+ });
1602
+ });
1603
+ ButtonComponent.displayName = 'Button';
1604
+ var Button = withScale(ButtonComponent);
1605
+
1606
+ var CompactButton = function CompactButton(props) {
1607
+ // const theme = useTheme();
1608
+ return /*#__PURE__*/jsxRuntime.jsx(Button, _objectSpread2(_objectSpread2({
1609
+ scale: 2 / 3,
1610
+ px: 0.6
1611
+ }, _objectSpread2({
1612
+ auto: true
1613
+ }, props)), {}, {
1614
+ children: props.children
1615
+ }));
1616
+ };
1617
+ var IconButton = /*#__PURE__*/React.memo(CompactButton);
1618
+
1619
+ var SmallButton = function SmallButton(props) {
1620
+ // const theme = useTheme();
1621
+ return /*#__PURE__*/jsxRuntime.jsx(Button, _objectSpread2(_objectSpread2({
1622
+ auto: true,
1623
+ scale: 2 / 3,
1624
+ px: 0.6
1625
+ }, props), {}, {
1626
+ children: props.children
1627
+ }));
1628
+ };
1629
+ var SmallButton$1 = /*#__PURE__*/React.memo(SmallButton);
1630
+
1631
+ /* "use client" */
1632
+
1633
+ Button.Icon = IconButton;
1634
+ Button.Small = SmallButton$1;
1635
+
989
1636
  var Expandable = function Expandable(_ref) {
990
1637
  var children = _ref.children,
991
1638
  _ref$collapsedHeight = _ref.collapsedHeight,