react-led-digit 0.0.16 → 0.0.18

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.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Switches intrnal state periodically (visible), calling subscribers each time.
2
+ * Switches internal state periodically (visible), calling subscribers each time.
3
3
  */
4
4
  type BlinkerSubscriber = (state: BlinkerState['visible']) => void;
5
5
  type BlinkerState = {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /**
3
- * Switches intrnal state periodically (visible), calling subscribers each time.
3
+ * Switches internal state periodically (visible), calling subscribers each time.
4
4
  */
5
5
  var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
6
6
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
@@ -81,7 +81,7 @@ class Blinker {
81
81
  }
82
82
  start(visible = __classPrivateFieldGet(this, _Blinker_state, "f").visible) {
83
83
  if (__classPrivateFieldGet(this, _Blinker_state, "f").timeout)
84
- return; // already runnning
84
+ this.stop(); // restart with new params
85
85
  visible ? __classPrivateFieldGet(this, _Blinker_instances, "m", _Blinker_on).call(this) : __classPrivateFieldGet(this, _Blinker_instances, "m", _Blinker_off).call(this); // start blinking
86
86
  }
87
87
  stop() {
@@ -67,7 +67,7 @@ exports.BlinkingDigit = react_1.default.memo((_a) => {
67
67
  }, [blinkOptions === null || blinkOptions === void 0 ? void 0 : blinkOptions.period, blinkOptions === null || blinkOptions === void 0 ? void 0 : blinkOptions.ratio, blinkOptions === null || blinkOptions === void 0 ? void 0 : blinkOptions.sync]);
68
68
  if ((blinkOptions === null || blinkOptions === void 0 ? void 0 : blinkOptions.period) === 0 ||
69
69
  (blinkOptions === null || blinkOptions === void 0 ? void 0 : blinkOptions.ratio) === 0 ||
70
- typeof (rest === null || rest === void 0 ? void 0 : rest.off) === 'boolean')
70
+ typeof rest.off === 'boolean')
71
71
  return (0, jsx_runtime_1.jsx)(Digit_1.Digit, Object.assign({}, rest, { className: (0, clsx_1.default)('blinking', className) })); // no blinker required
72
72
  return ((0, jsx_runtime_1.jsx)(Digit_1.Digit, Object.assign({}, rest, { className: (0, clsx_1.default)('blinking', className), off: rest.off || !visible })));
73
73
  });
@@ -24,7 +24,7 @@ const Digit = (_a) => {
24
24
  const scopeAttribute = (0, useStyleInjector_1.default)(digit_css_generated_js_1.default.content, [], {
25
25
  scopeID: digit_css_generated_js_1.default.hash,
26
26
  });
27
- if (Object.entries(scopeAttribute)[0].includes(true))
27
+ if (Object.values(scopeAttribute).some(v => v === true))
28
28
  return ((0, jsx_runtime_1.jsx)("div", Object.assign({}, scopeAttribute, { style: { display: 'contents' }, children: (0, jsx_runtime_1.jsx)(UnstyledDigit_1.Digit, Object.assign({}, rest)) })));
29
29
  return (0, jsx_runtime_1.jsx)(UnstyledDigit_1.Digit, Object.assign({}, rest));
30
30
  };
@@ -17,6 +17,7 @@ export default meta;
17
17
  type Story = StoryObj<typeof meta>;
18
18
  export type DisplayProps = React.HTMLAttributes<HTMLDivElement> & {
19
19
  scale?: number;
20
+ shape?: Digit['shape'];
20
21
  segmentStyle?: Digit['segmentStyle'];
21
22
  value: string;
22
23
  };
@@ -58,25 +58,26 @@ const DigitTest = () => {
58
58
  } })] })] }));
59
59
  };
60
60
  const charset = new Set(Object.keys(_1.charToSevenSegments));
61
- function setCharAt(str, index, chr) {
62
- if (index > str.length - 1)
61
+ function removeCharAt(str, index) {
62
+ if (index < 0 || index >= str.length)
63
63
  return str;
64
- return str.substr(0, index) + chr + str.substr(index + 1);
64
+ return str.substring(0, index) + str.substring(index + 1);
65
65
  }
66
66
  const BlinkingDigitTest = () => {
67
67
  const input = (0, react_1.useRef)(null);
68
68
  const [dgts, setDgts] = (0, react_1.useState)('');
69
69
  const addDigit = () => {
70
- if (input.current.value) {
70
+ var _a;
71
+ if ((_a = input.current) === null || _a === void 0 ? void 0 : _a.value) {
71
72
  setDgts(prev => prev + input.current.value);
72
73
  }
73
74
  };
74
75
  const removeDigit = (idx) => {
75
- const next = setCharAt(dgts, idx, '');
76
+ const next = removeCharAt(dgts, idx);
76
77
  setDgts(next);
77
78
  };
78
79
  const handleChange = () => {
79
- if (!charset.has(input.current.value)) {
80
+ if (input.current && !charset.has(input.current.value)) {
80
81
  input.current.value = '';
81
82
  }
82
83
  };
@@ -118,11 +119,12 @@ const getDigits = (str) => {
118
119
  return result;
119
120
  };
120
121
  const Display = (_a) => {
121
- var { scale = 1, value } = _a, rest = __rest(_a, ["scale", "value"]);
122
+ var { scale = 1, shape, value } = _a, rest = __rest(_a, ["scale", "shape", "value"]);
122
123
  const digits = getDigits(value);
123
124
  return ((0, jsx_runtime_1.jsx)("div", Object.assign({}, rest, { children: digits.map((digit, idx) => {
124
125
  const props = {
125
126
  value: digit,
127
+ shape,
126
128
  style: {
127
129
  fontSize: `${scale * 100}%`,
128
130
  },
@@ -140,17 +142,17 @@ const Display = (_a) => {
140
142
  }) })));
141
143
  };
142
144
  const getTime = () => new Date().toLocaleTimeString();
143
- const SimpleClock = () => {
145
+ const SimpleClock = (args) => {
144
146
  const [time, setTime] = (0, react_1.useState)(getTime());
145
- const blinker = new __1.Blinker();
146
- blinker.period = 2000;
147
- blinker.ratio = 1;
148
- const handleBlinkerChange = () => setTime(getTime());
149
147
  (0, react_1.useEffect)(() => {
148
+ const blinker = new __1.Blinker();
149
+ blinker.period = 2000;
150
+ blinker.ratio = 1;
151
+ const handleBlinkerChange = () => setTime(getTime());
150
152
  blinker.subscribe(handleBlinkerChange);
151
153
  return () => blinker.unsubscribe(handleBlinkerChange);
152
154
  }, []);
153
- return (0, jsx_runtime_1.jsx)(Display, { scale: 2, style: grid, value: time });
155
+ return ((0, jsx_runtime_1.jsx)(Display, { scale: 2, shape: args.shape, style: Object.assign(Object.assign({}, grid), { fontSize: `${args.fontSize}px` }), value: time }));
154
156
  };
155
157
  const FirefoxSubpixelTest = () => {
156
158
  const DigitFF = (props) => ((0, jsx_runtime_1.jsx)(__1.Digit, { value: props.v || 8, segmentStyle: {
@@ -161,19 +163,28 @@ const FirefoxSubpixelTest = () => {
161
163
  } }));
162
164
  return ((0, jsx_runtime_1.jsxs)("div", { style: Object.assign({}, grid), children: [(0, jsx_runtime_1.jsx)(DigitFF, { v: 2 }), (0, jsx_runtime_1.jsx)(DigitFF, {}), (0, jsx_runtime_1.jsx)(DigitFF, { v: ":" }), (0, jsx_runtime_1.jsx)(DigitFF, {}), (0, jsx_runtime_1.jsx)(DigitFF, {})] }));
163
165
  };
164
- const SegmentShapeTest = () => {
166
+ const SegmentShapeTest = (args) => {
165
167
  const Dgt = ({ shape }) => ((0, jsx_runtime_1.jsx)(__1.Digit, { value: 'F', shape: shape, segmentStyle: {
166
168
  color: 'green',
167
- thickness: '2em',
168
- length: '5em',
169
- spacing: '0.1em',
170
- cornerShift: '0.5em',
169
+ length: `${args.length}em`,
170
+ thickness: `${args.thickness}em`,
171
+ spacing: `${args.spacing}em`,
172
+ shiftAD: `${args.shiftAD}em`,
173
+ cornerShift: `${args.cornerShift}em`,
171
174
  } }));
172
175
  return ((0, jsx_runtime_1.jsxs)("div", { style: Object.assign({}, grid), children: [(0, jsx_runtime_1.jsx)(Dgt, { shape: 'default' }), (0, jsx_runtime_1.jsx)(Dgt, { shape: 'rect' }), (0, jsx_runtime_1.jsx)(Dgt, { shape: 'round' }), (0, jsx_runtime_1.jsx)(Dgt, { shape: 'pill' }), (0, jsx_runtime_1.jsx)(Dgt, { shape: 'calculator' })] }));
173
176
  };
174
177
  exports.Clock = {
175
178
  args: {
176
- value: '0',
179
+ shape: 'default',
180
+ fontSize: 16,
181
+ },
182
+ argTypes: {
183
+ shape: {
184
+ control: 'radio',
185
+ options: ['default', 'rect', 'round', 'pill', 'calculator'],
186
+ },
187
+ fontSize: { control: { type: 'range', min: 8, max: 64, step: 1 } },
177
188
  },
178
189
  render: SimpleClock,
179
190
  };
@@ -197,7 +208,19 @@ exports.Firefox = {
197
208
  };
198
209
  exports.Shape = {
199
210
  args: {
200
- value: '0',
211
+ value: 'F',
212
+ length: 5,
213
+ thickness: 2,
214
+ spacing: 0.1,
215
+ shiftAD: 0,
216
+ cornerShift: 0,
217
+ },
218
+ argTypes: {
219
+ length: { control: { type: 'range', min: 1, max: 20, step: 0.5 } },
220
+ thickness: { control: { type: 'range', min: 0.5, max: 10, step: 0.25 } },
221
+ spacing: { control: { type: 'range', min: -0.5, max: 2, step: 0.05 } },
222
+ shiftAD: { control: { type: 'range', min: -1, max: 1, step: 0.05 } },
223
+ cornerShift: { control: { type: 'range', min: -5, max: 5, step: 0.1 } },
201
224
  },
202
225
  render: SegmentShapeTest,
203
226
  };
@@ -1,4 +1,4 @@
1
- import React, { CSSProperties } from 'react';
1
+ import { CSSProperties } from 'react';
2
2
  import { SevenSegmentsValue } from './charToSevenSegments';
3
3
  type NumValue = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
4
4
  type DigitValue = NumValue | SevenSegmentsValue | 'am' | 'pm' | ':' | '.';
@@ -33,7 +33,7 @@ const Digit = (_a) => {
33
33
  return (0, jsx_runtime_1.jsx)(components_1.AmpmSegments, Object.assign({ "aria-label": v }, rest, segments, { style: sx }));
34
34
  if (type === 'dot')
35
35
  return (0, jsx_runtime_1.jsx)(components_1.DotSegments, Object.assign({ "aria-label": v }, rest, segments, { style: sx }));
36
- console.warn(`(at Digit.tsx) incompatible value: ${value.toString()}`);
36
+ console.warn(`(at UnstyledDigit.tsx) incompatible value: ${value.toString()}`);
37
37
  return ((0, jsx_runtime_1.jsx)("div", Object.assign({ "aria-label": v }, rest, { className: (0, clsx_1.default)('digit unknown', rest.className) })));
38
38
  };
39
39
  exports.Digit = Digit;
@@ -51,7 +51,8 @@ function valueToType(v) {
51
51
  return undefined;
52
52
  }
53
53
  function valueToSegments(v) {
54
- const str = v === null || v === void 0 ? void 0 : v.toString();
54
+ var _a;
55
+ const str = (_a = v === null || v === void 0 ? void 0 : v.toString()) !== null && _a !== void 0 ? _a : '';
55
56
  if (str.toLowerCase() === 'am')
56
57
  return { AM: true };
57
58
  if (str.toLowerCase() === 'pm')
@@ -14,7 +14,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
14
14
  exports.UnstyledDigits = void 0;
15
15
  const jsx_runtime_1 = require("react/jsx-runtime");
16
16
  const __1 = require("..");
17
- //import './digit.css';
18
17
  const meta = {
19
18
  title: 'Example/UnstyledDigit',
20
19
  component: __1.UnstyledDigit,
@@ -20,6 +20,6 @@ const clsx_1 = __importDefault(require("clsx"));
20
20
  const utils_1 = require("./utils");
21
21
  const AmpmSegments = (_a) => {
22
22
  var { className, off, shape = 'default', AM, PM } = _a, rest = __rest(_a, ["className", "off", "shape", "AM", "PM"]);
23
- return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ className: (0, clsx_1.default)('digit ampm', (0, utils_1.shapeCx)(shape), className) }, rest, { children: [(0, jsx_runtime_1.jsx)("code", { className: "aria-label", children: rest['aria-label'] }), (0, jsx_runtime_1.jsxs)("div", { className: "opacity-wrapper off", children: [(0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment AM', (0, utils_1.onOffCx)(AM, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment PM', (0, utils_1.onOffCx)(PM, off)) })] }), (0, jsx_runtime_1.jsxs)("div", { className: (0, clsx_1.default)('opacity-wrapper on', off && 'off'), children: [(0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment AM', (0, utils_1.onOffCx)(AM, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment PM', (0, utils_1.onOffCx)(PM, off)) })] })] })));
23
+ return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ className: (0, clsx_1.default)('digit ampm', (0, utils_1.shapeCx)(shape), className) }, rest, { children: [(0, jsx_runtime_1.jsx)("code", { className: "aria-label", "aria-hidden": "true", children: rest['aria-label'] }), (0, jsx_runtime_1.jsxs)("div", { className: "opacity-wrapper off", children: [(0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment AM', (0, utils_1.onOffCx)(AM, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment PM', (0, utils_1.onOffCx)(PM, off)) })] }), (0, jsx_runtime_1.jsxs)("div", { className: (0, clsx_1.default)('opacity-wrapper on', off && 'off'), children: [(0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment AM', (0, utils_1.onOffCx)(AM, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment PM', (0, utils_1.onOffCx)(PM, off)) })] })] })));
24
24
  };
25
25
  exports.AmpmSegments = AmpmSegments;
@@ -20,6 +20,6 @@ const clsx_1 = __importDefault(require("clsx"));
20
20
  const utils_1 = require("./utils");
21
21
  const ColonSegments = (_a) => {
22
22
  var { className, off, shape = 'default', D1, D2 } = _a, rest = __rest(_a, ["className", "off", "shape", "D1", "D2"]);
23
- return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ className: (0, clsx_1.default)('digit colon', (0, utils_1.shapeCx)(shape), className) }, rest, { children: [(0, jsx_runtime_1.jsx)("code", { className: "aria-label", children: rest['aria-label'] }), (0, jsx_runtime_1.jsxs)("div", { className: "opacity-wrapper off", children: [(0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment D1', (0, utils_1.onOffCx)(D1, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment D2', (0, utils_1.onOffCx)(D2, off)) })] }), (0, jsx_runtime_1.jsxs)("div", { className: (0, clsx_1.default)('opacity-wrapper on', off && 'off'), children: [(0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment D1', (0, utils_1.onOffCx)(D1, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment D2', (0, utils_1.onOffCx)(D2, off)) })] })] })));
23
+ return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ className: (0, clsx_1.default)('digit colon', (0, utils_1.shapeCx)(shape), className) }, rest, { children: [(0, jsx_runtime_1.jsx)("code", { className: "aria-label", "aria-hidden": "true", children: rest['aria-label'] }), (0, jsx_runtime_1.jsxs)("div", { className: "opacity-wrapper off", children: [(0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment D1', (0, utils_1.onOffCx)(D1, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment D2', (0, utils_1.onOffCx)(D2, off)) })] }), (0, jsx_runtime_1.jsxs)("div", { className: (0, clsx_1.default)('opacity-wrapper on', off && 'off'), children: [(0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment D1', (0, utils_1.onOffCx)(D1, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment D2', (0, utils_1.onOffCx)(D2, off)) })] })] })));
24
24
  };
25
25
  exports.ColonSegments = ColonSegments;
@@ -20,6 +20,6 @@ const clsx_1 = __importDefault(require("clsx"));
20
20
  const utils_1 = require("./utils");
21
21
  const DigitSegments = (_a) => {
22
22
  var { className, off, shape = 'default', A, B, C, D, E, F, G } = _a, rest = __rest(_a, ["className", "off", "shape", "A", "B", "C", "D", "E", "F", "G"]);
23
- return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ className: (0, clsx_1.default)('digit', (0, utils_1.shapeCx)(shape), className) }, rest, { children: [(0, jsx_runtime_1.jsx)("code", { className: "aria-label", children: rest['aria-label'] }), (0, jsx_runtime_1.jsxs)("div", { className: "opacity-wrapper off", children: [(0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment A horizontal', (0, utils_1.onOffCx)(A, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment B vertical', (0, utils_1.onOffCx)(B, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment C vertical', (0, utils_1.onOffCx)(C, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment D horizontal', (0, utils_1.onOffCx)(D, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment E vertical', (0, utils_1.onOffCx)(E, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment F vertical', (0, utils_1.onOffCx)(F, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment G horizontal', (0, utils_1.onOffCx)(G, off)) })] }), (0, jsx_runtime_1.jsxs)("div", { className: (0, clsx_1.default)('opacity-wrapper on', off && 'off'), children: [(0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment A horizontal', (0, utils_1.onOffCx)(A, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment B vertical', (0, utils_1.onOffCx)(B, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment C vertical', (0, utils_1.onOffCx)(C, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment D horizontal', (0, utils_1.onOffCx)(D, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment E vertical', (0, utils_1.onOffCx)(E, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment F vertical', (0, utils_1.onOffCx)(F, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment G horizontal', (0, utils_1.onOffCx)(G, off)) })] })] })));
23
+ return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ className: (0, clsx_1.default)('digit', (0, utils_1.shapeCx)(shape), className) }, rest, { children: [(0, jsx_runtime_1.jsx)("code", { className: "aria-label", "aria-hidden": "true", children: rest['aria-label'] }), (0, jsx_runtime_1.jsxs)("div", { className: "opacity-wrapper off", children: [(0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment A horizontal', (0, utils_1.onOffCx)(A, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment B vertical', (0, utils_1.onOffCx)(B, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment C vertical', (0, utils_1.onOffCx)(C, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment D horizontal', (0, utils_1.onOffCx)(D, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment E vertical', (0, utils_1.onOffCx)(E, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment F vertical', (0, utils_1.onOffCx)(F, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment G horizontal', (0, utils_1.onOffCx)(G, off)) })] }), (0, jsx_runtime_1.jsxs)("div", { className: (0, clsx_1.default)('opacity-wrapper on', off && 'off'), children: [(0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment A horizontal', (0, utils_1.onOffCx)(A, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment B vertical', (0, utils_1.onOffCx)(B, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment C vertical', (0, utils_1.onOffCx)(C, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment D horizontal', (0, utils_1.onOffCx)(D, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment E vertical', (0, utils_1.onOffCx)(E, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment F vertical', (0, utils_1.onOffCx)(F, off)) }), (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment G horizontal', (0, utils_1.onOffCx)(G, off)) })] })] })));
24
24
  };
25
25
  exports.DigitSegments = DigitSegments;
@@ -20,6 +20,6 @@ const clsx_1 = __importDefault(require("clsx"));
20
20
  const utils_1 = require("./utils");
21
21
  const DotSegments = (_a) => {
22
22
  var { className, off, shape = 'default', DP } = _a, rest = __rest(_a, ["className", "off", "shape", "DP"]);
23
- return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ className: (0, clsx_1.default)('digit dot', (0, utils_1.shapeCx)(shape), className) }, rest, { children: [(0, jsx_runtime_1.jsx)("code", { className: "aria-label", children: rest['aria-label'] }), (0, jsx_runtime_1.jsx)("div", { className: "opacity-wrapper off", children: (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment DP', (0, utils_1.onOffCx)(DP, off)) }) }), (0, jsx_runtime_1.jsx)("div", { className: (0, clsx_1.default)('opacity-wrapper on', off && 'off'), children: (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment DP', (0, utils_1.onOffCx)(DP, off)) }) })] })));
23
+ return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ className: (0, clsx_1.default)('digit dot', (0, utils_1.shapeCx)(shape), className) }, rest, { children: [(0, jsx_runtime_1.jsx)("code", { className: "aria-label", "aria-hidden": "true", children: rest['aria-label'] }), (0, jsx_runtime_1.jsx)("div", { className: "opacity-wrapper off", children: (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment DP', (0, utils_1.onOffCx)(DP, off)) }) }), (0, jsx_runtime_1.jsx)("div", { className: (0, clsx_1.default)('opacity-wrapper on', off && 'off'), children: (0, jsx_runtime_1.jsx)("i", { className: (0, clsx_1.default)('segment DP', (0, utils_1.onOffCx)(DP, off)) }) })] })));
24
24
  };
25
25
  exports.DotSegments = DotSegments;
@@ -31,12 +31,9 @@
31
31
  /* computed values */
32
32
  --len: var(--length);
33
33
  --thk: var(--thickness);
34
- --thk-minus: calc(var(--thk) * -1);
35
34
  --thk-half: calc(var(--thk) / 2);
36
- --thk-half-minus: calc(var(--thk) / -2);
37
35
 
38
36
  --spc: calc(var(--spacing) / 1.4142); /* divided by sqrt(2) */
39
- --spc-minus: calc(var(--spc) * -1);
40
37
  --crn: var(--corner-shift);
41
38
 
42
39
  --radius-round: calc(var(--thk) * 0.33);
@@ -270,8 +267,37 @@
270
267
  border-radius: var(--radius-pill);
271
268
  }
272
269
  &.shape-calculator {
273
- border-radius: calc(var(--thk) * 1.2);
274
- overflow: hidden;
270
+ --r: calc(var(--thk) * 1.2);
271
+ }
272
+ & {
273
+ --r: calc(var(--thk) * 0);
274
+
275
+ clip-path: polygon(
276
+ /* top-left corner */ 0px var(--r),
277
+ calc(var(--r) * 0.0495) calc(var(--r) * 0.691),
278
+ calc(var(--r) * 0.191) calc(var(--r) * 0.4045),
279
+ calc(var(--r) * 0.4045) calc(var(--r) * 0.191),
280
+ calc(var(--r) * 0.691) calc(var(--r) * 0.0495),
281
+ var(--r) 0px,
282
+ /* top-right corner */ calc(var(--dw) - var(--r)) 0px,
283
+ calc(var(--dw) - var(--r) * 0.691) calc(var(--r) * 0.0495),
284
+ calc(var(--dw) - var(--r) * 0.4045) calc(var(--r) * 0.191),
285
+ calc(var(--dw) - var(--r) * 0.191) calc(var(--r) * 0.4045),
286
+ calc(var(--dw) - var(--r) * 0.0495) calc(var(--r) * 0.691),
287
+ var(--dw) var(--r),
288
+ /* bottom-right corner */ var(--dw) calc(var(--dh) - var(--r)),
289
+ calc(var(--dw) - var(--r) * 0.0495) calc(var(--dh) - var(--r) * 0.691),
290
+ calc(var(--dw) - var(--r) * 0.191) calc(var(--dh) - var(--r) * 0.4045),
291
+ calc(var(--dw) - var(--r) * 0.4045) calc(var(--dh) - var(--r) * 0.191),
292
+ calc(var(--dw) - var(--r) * 0.691) calc(var(--dh) - var(--r) * 0.0495),
293
+ calc(var(--dw) - var(--r)) var(--dh),
294
+ /* bottom-left corner */ var(--r) var(--dh),
295
+ calc(var(--r) * 0.691) calc(var(--dh) - var(--r) * 0.0495),
296
+ calc(var(--r) * 0.4045) calc(var(--dh) - var(--r) * 0.191),
297
+ calc(var(--r) * 0.191) calc(var(--dh) - var(--r) * 0.4045),
298
+ calc(var(--r) * 0.0495) calc(var(--dh) - var(--r) * 0.691),
299
+ 0px calc(var(--dh) - var(--r))
300
+ );
275
301
 
276
302
  .segment.segment {
277
303
  --crn: var(--thk);
@@ -2,7 +2,7 @@
2
2
 
3
3
  const css = {
4
4
  src: `src/Digit/digit.css`,
5
- hash: `4bpttscfgs`,
5
+ hash: `27bilryv8nf`,
6
6
  content: `
7
7
  /**
8
8
  * A
@@ -37,12 +37,9 @@ const css = {
37
37
  /* computed values */
38
38
  --len: var(--length);
39
39
  --thk: var(--thickness);
40
- --thk-minus: calc(var(--thk) * -1);
41
40
  --thk-half: calc(var(--thk) / 2);
42
- --thk-half-minus: calc(var(--thk) / -2);
43
41
 
44
42
  --spc: calc(var(--spacing) / 1.4142); /* divided by sqrt(2) */
45
- --spc-minus: calc(var(--spc) * -1);
46
43
  --crn: var(--corner-shift);
47
44
 
48
45
  --radius-round: calc(var(--thk) * 0.33);
@@ -276,8 +273,37 @@ const css = {
276
273
  border-radius: var(--radius-pill);
277
274
  }
278
275
  &.shape-calculator {
279
- border-radius: calc(var(--thk) * 1.2);
280
- overflow: hidden;
276
+ --r: calc(var(--thk) * 1.2);
277
+ }
278
+ & {
279
+ --r: calc(var(--thk) * 0);
280
+
281
+ clip-path: polygon(
282
+ /* top-left corner */ 0px var(--r),
283
+ calc(var(--r) * 0.0495) calc(var(--r) * 0.691),
284
+ calc(var(--r) * 0.191) calc(var(--r) * 0.4045),
285
+ calc(var(--r) * 0.4045) calc(var(--r) * 0.191),
286
+ calc(var(--r) * 0.691) calc(var(--r) * 0.0495),
287
+ var(--r) 0px,
288
+ /* top-right corner */ calc(var(--dw) - var(--r)) 0px,
289
+ calc(var(--dw) - var(--r) * 0.691) calc(var(--r) * 0.0495),
290
+ calc(var(--dw) - var(--r) * 0.4045) calc(var(--r) * 0.191),
291
+ calc(var(--dw) - var(--r) * 0.191) calc(var(--r) * 0.4045),
292
+ calc(var(--dw) - var(--r) * 0.0495) calc(var(--r) * 0.691),
293
+ var(--dw) var(--r),
294
+ /* bottom-right corner */ var(--dw) calc(var(--dh) - var(--r)),
295
+ calc(var(--dw) - var(--r) * 0.0495) calc(var(--dh) - var(--r) * 0.691),
296
+ calc(var(--dw) - var(--r) * 0.191) calc(var(--dh) - var(--r) * 0.4045),
297
+ calc(var(--dw) - var(--r) * 0.4045) calc(var(--dh) - var(--r) * 0.191),
298
+ calc(var(--dw) - var(--r) * 0.691) calc(var(--dh) - var(--r) * 0.0495),
299
+ calc(var(--dw) - var(--r)) var(--dh),
300
+ /* bottom-left corner */ var(--r) var(--dh),
301
+ calc(var(--r) * 0.691) calc(var(--dh) - var(--r) * 0.0495),
302
+ calc(var(--r) * 0.4045) calc(var(--dh) - var(--r) * 0.191),
303
+ calc(var(--r) * 0.191) calc(var(--dh) - var(--r) * 0.4045),
304
+ calc(var(--r) * 0.0495) calc(var(--dh) - var(--r) * 0.691),
305
+ 0px calc(var(--dh) - var(--r))
306
+ );
281
307
 
282
308
  .segment.segment {
283
309
  --crn: var(--thk);
@@ -41,7 +41,7 @@ class StyleInjector {
41
41
  return StyleInjector.instance; // singleton
42
42
  }
43
43
  increase(s) {
44
- if (this.count(s) === 0)
44
+ if (this.count(s) === 0 && typeof document !== 'undefined')
45
45
  document.head.appendChild(createStyleElement(s));
46
46
  if (this.count(s) >= 0)
47
47
  __classPrivateFieldGet(this, _StyleInjector_styles, "f").set(s.id, this.count(s) + 1);
@@ -50,7 +50,7 @@ class StyleInjector {
50
50
  var _a;
51
51
  if (this.count(s) > 0)
52
52
  __classPrivateFieldGet(this, _StyleInjector_styles, "f").set(s.id, this.count(s) - 1);
53
- if (this.count(s) === 0)
53
+ if (this.count(s) === 0 && typeof document !== 'undefined')
54
54
  (_a = document.head.querySelector(`#${s.id}`)) === null || _a === void 0 ? void 0 : _a.remove();
55
55
  }
56
56
  count(s) {
@@ -69,16 +69,10 @@ const createStyleElement = (style) => {
69
69
  return el;
70
70
  };
71
71
  const wrapWithScope = (css, scopeAttribute) => {
72
- const scoped = // unused bc @scope at-rule does not work in Firefox
73
- `@scope ([${scopeAttribute}]) {` +
74
- `:scope { display: contents; }` +
75
- `${css}` +
76
- `}`;
77
- const isolated = `[${scopeAttribute}] { display: contents; }` +
72
+ return (`[${scopeAttribute}] { display: contents; }` +
78
73
  `[${scopeAttribute}] {` +
79
74
  `${css}` +
80
- `}`;
81
- return isolated;
75
+ `}`);
82
76
  };
83
77
  // https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript
84
78
  const cyrb53string = (str, seed = 0) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-led-digit",
3
- "version": "0.0.16",
3
+ "version": "0.0.18",
4
4
  "description": "react component for 7-segment display (digit), includes dot, colon and am-pm digits",
5
5
  "main": "./lib/index.js",
6
6
  "files": [
@@ -36,6 +36,10 @@
36
36
  "engines": {
37
37
  "node": ">=12.0"
38
38
  },
39
+ "peerDependencies": {
40
+ "react": ">=16.8.0",
41
+ "react-dom": ">=16.8.0"
42
+ },
39
43
  "dependencies": {
40
44
  "clsx": "^2.1.1"
41
45
  },