meticulous-ui 2.2.8 → 2.3.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.
Files changed (50) hide show
  1. package/README.md +15 -14
  2. package/components/Dropdown/Dropdown.js +83 -82
  3. package/components/Dropdown/styles.js +4 -4
  4. package/components/Glass/Glass.js +6 -0
  5. package/components/Glass/index.js +4 -0
  6. package/components/Glass/styles.js +73 -0
  7. package/components/Icons/Add/index.js +4 -0
  8. package/components/Icons/Link/index.js +4 -0
  9. package/components/Icons/MediaPauseFilled/index.js +4 -0
  10. package/components/Icons/MediaPlayFilled/index.js +4 -0
  11. package/components/Icons/MediaStopFilled/index.js +4 -0
  12. package/components/Input/Checkbox/Checkbox.js +39 -0
  13. package/components/Input/Checkbox/helpers.js +28 -0
  14. package/components/Input/Checkbox/index.js +4 -0
  15. package/components/Input/Checkbox/styles.js +30 -0
  16. package/components/Input/FileUploader/FileUploader.js +76 -0
  17. package/components/Input/FileUploader/constants.js +29 -0
  18. package/components/Input/FileUploader/index.js +4 -0
  19. package/components/Input/FileUploader/styles.js +83 -0
  20. package/components/Input/Radio/Radio.js +26 -0
  21. package/components/Input/Radio/styles.js +45 -0
  22. package/components/Input/RadioGroup/RadioGroup.js +27 -0
  23. package/components/Input/RadioGroup/index.js +4 -0
  24. package/components/Input/RadioGroup/styles.js +18 -0
  25. package/components/Input/Textarea/styles.js +4 -4
  26. package/components/MenuItem/styles.js +4 -4
  27. package/components/OtpInput/OtpInput.js +30 -29
  28. package/components/Pagination/styles.js +6 -6
  29. package/components/Spinner/Spinner.js +11 -10
  30. package/components/Timer/Timer.js +64 -0
  31. package/components/Timer/components/TimerRing/TimerRing.js +42 -0
  32. package/components/Timer/components/TimerRing/styles.js +7 -0
  33. package/components/Timer/constants.js +25 -0
  34. package/components/Timer/index.js +4 -0
  35. package/components/Timer/styles.js +164 -0
  36. package/components/Typography/Headings/H1.js +9 -0
  37. package/components/Typography/Headings/H2.js +9 -0
  38. package/components/Typography/Headings/H3.js +9 -0
  39. package/components/Typography/Headings/H4.js +9 -0
  40. package/components/Typography/Headings/H5.js +9 -0
  41. package/components/Typography/Headings/H6.js +9 -0
  42. package/components/VideoPlayer/VideoPlayer.js +34 -0
  43. package/components/VideoPlayer/components/Volumebar/Volumebar.js +13 -0
  44. package/components/VideoPlayer/components/Volumebar/styles.js +38 -0
  45. package/components/VideoPlayer/index.js +4 -0
  46. package/components/VideoPlayer/styles.js +34 -0
  47. package/components/VideoPlayer/useSpacebarToggle.js +37 -0
  48. package/components/VideoPlayer/useVolumeOverlay.js +10 -0
  49. package/index.js +40 -16
  50. package/package.json +12 -6
@@ -0,0 +1,164 @@
1
+ import t, { css as e } from "../../node_modules/styled-components/dist/styled-components.browser.esm.js";
2
+ import n from "../Icons/Add/Add.js";
3
+ import a from "../Icons/MediaStopFilled/MediaStopFilled.js";
4
+ import s from "../Icons/MediaPauseFilled/MediaPauseFilled.js";
5
+ import d from "../Icons/MediaPlayFilled/MediaPlayFilled.js";
6
+ import i from "../../colors/white.js";
7
+ import p from "../../colors/black.js";
8
+ import l from "../../colors/red.js";
9
+ import { COLOR_MAPPING as c } from "./constants.js";
10
+ const m = ({ $color: o }) => c[o], r = e`
11
+ position: absolute;
12
+ bottom: 50%;
13
+ transform-origin: bottom;
14
+ border-radius: 4px;
15
+ `, $ = t.div`
16
+ position: relative;
17
+ height: 20rem;
18
+ width: 20rem;
19
+ border-radius: 1.2rem;
20
+ background-color: ${m};
21
+ `, A = t.div`
22
+ position: absolute;
23
+ left: 50%;
24
+ top: 48%;
25
+ width: 12rem;
26
+ height: 12rem;
27
+ transform: translate(-50%, -50%);
28
+ border-radius: 50%;
29
+ background-color: rgba(0, 0, 0, 0.16);
30
+ pointer-events: none;
31
+ `, M = t.div`
32
+ position: absolute;
33
+ left: 50%;
34
+ top: 48%;
35
+ transform: translate(-50%, -50%);
36
+ `, F = t.div`
37
+ color: ${i};
38
+ font-size: 1.5rem;
39
+ font-weight: 600;
40
+ text-align: center;
41
+ opacity: 0.8;
42
+ `, P = t.span`
43
+ position: absolute;
44
+ width: 2.4px;
45
+ height: 2.4px;
46
+ background: rgba(255, 255, 255, 0.4);
47
+ transform-origin: 94px;
48
+ border-radius: 2px;
49
+
50
+ &:nth-child(5n) {
51
+ width: 3px;
52
+ height: 3px;
53
+ background: rgba(255, 255, 255, 0.7);
54
+ }
55
+
56
+ &:nth-child(15n) {
57
+ width: 6px;
58
+ height: 2px;
59
+ background: rgba(255, 255, 255);
60
+ }
61
+ `, y = t.div`
62
+ position: absolute;
63
+ left: 21%;
64
+ top: 44.3%;
65
+ transform: translate(-50%, -50%) rotate(6.7deg);
66
+ `, H = t.div`
67
+ ${r};
68
+ width: 6px;
69
+ height: 60px;
70
+ background: ${i};
71
+ `, S = t.div`
72
+ ${r};
73
+ width: 4px;
74
+ height: 80px;
75
+ background: ${p.m200};
76
+ `, W = t.div`
77
+ ${r};
78
+ width: 2px;
79
+ height: 90px;
80
+ background: ${l.m800};
81
+ `, D = t.div`
82
+ position: absolute;
83
+ left: 16%;
84
+ top: 14%;
85
+ `, R = t.div`
86
+ position: absolute;
87
+ bottom: 6%;
88
+ left: 8%;
89
+ display: flex;
90
+ align-items: center;
91
+ gap: 4px;
92
+
93
+ ${({ $noActions: o }) => o && e`
94
+ pointer-events: none;
95
+ opacity: 0.5;
96
+ `}
97
+ `, B = t.div`
98
+ position: absolute;
99
+ bottom: 6%;
100
+ right: 8%;
101
+ border-radius: 0.4rem;
102
+ `, C = t.div`
103
+ position: relative;
104
+ width: 100%;
105
+ height: 100%;
106
+ height: 2.4rem;
107
+ width: 2.4rem;
108
+ cursor: pointer;
109
+ background-color: rgba(0, 0, 0, 0.4);
110
+ `, T = t(n)`
111
+ position: absolute;
112
+ left: 50%;
113
+ top: 50%;
114
+ transform: translate(-50%, -50%);
115
+ `, L = t(a)`
116
+ position: absolute;
117
+ left: 50%;
118
+ top: 50%;
119
+ transform: translate(-50%, -50%);
120
+ `, N = t(s)`
121
+ position: absolute;
122
+ left: 50%;
123
+ top: 50%;
124
+ transform: translate(-50%, -50%);
125
+ `, O = t(d)`
126
+ position: absolute;
127
+ left: 50%;
128
+ top: 50%;
129
+ transform: translate(-50%, -50%);
130
+ `, _ = t.div`
131
+ width: 9px;
132
+ height: 9px;
133
+ border-radius: 50%;
134
+ background-color: ${i};
135
+ `, z = t.div`
136
+ position: absolute;
137
+ left: 26%;
138
+ top: 24%;
139
+ rotate: ${({ $angle: o }) => 45 + o}deg;
140
+ height: 157.5px;
141
+ width: 157.5px;
142
+ transform-origin: center;
143
+ `;
144
+ export {
145
+ C as ActionBtn,
146
+ T as AddWrapper,
147
+ D as AlarmRing,
148
+ y as AllDots,
149
+ _ as Bullet,
150
+ z as BulletRing,
151
+ A as Dimmer,
152
+ P as Dots,
153
+ H as HourHand,
154
+ R as LeftActions,
155
+ N as MediaPauseFilledWrapper,
156
+ O as MediaPlayFilledWrapper,
157
+ L as MediaStopFilledWrapper,
158
+ S as MinuteHand,
159
+ B as RightActions,
160
+ W as SecondHand,
161
+ M as Time,
162
+ F as TimeTxt,
163
+ $ as Wrapper
164
+ };
@@ -0,0 +1,9 @@
1
+ import { j as t } from "../../../_virtual/jsx-runtime.js";
2
+ import s from "../../../node_modules/styled-components/dist/styled-components.browser.esm.js";
3
+ const e = s.h1`
4
+ color: ${({ $color: o }) => o};
5
+ font-size: 3.6rem;
6
+ `, n = ({ color: o, children: r }) => /* @__PURE__ */ t.jsx(e, { $color: o, children: r });
7
+ export {
8
+ n as default
9
+ };
@@ -0,0 +1,9 @@
1
+ import { j as t } from "../../../_virtual/jsx-runtime.js";
2
+ import s from "../../../node_modules/styled-components/dist/styled-components.browser.esm.js";
3
+ const e = s.h2`
4
+ color: ${({ $color: o }) => o};
5
+ font-size: 3rem;
6
+ `, n = ({ color: o, children: r }) => /* @__PURE__ */ t.jsx(e, { $color: o, children: r });
7
+ export {
8
+ n as default
9
+ };
@@ -0,0 +1,9 @@
1
+ import { j as t } from "../../../_virtual/jsx-runtime.js";
2
+ import s from "../../../node_modules/styled-components/dist/styled-components.browser.esm.js";
3
+ const e = s.h3`
4
+ color: ${({ $color: o }) => o};
5
+ font-size: 2.4rem;
6
+ `, n = ({ color: o, children: r }) => /* @__PURE__ */ t.jsx(e, { $color: o, children: r });
7
+ export {
8
+ n as default
9
+ };
@@ -0,0 +1,9 @@
1
+ import { j as t } from "../../../_virtual/jsx-runtime.js";
2
+ import s from "../../../node_modules/styled-components/dist/styled-components.browser.esm.js";
3
+ const e = s.h4`
4
+ color: ${({ $color: o }) => o};
5
+ font-size: 1.8rem;
6
+ `, n = ({ color: o, children: r }) => /* @__PURE__ */ t.jsx(e, { $color: o, children: r });
7
+ export {
8
+ n as default
9
+ };
@@ -0,0 +1,9 @@
1
+ import { j as t } from "../../../_virtual/jsx-runtime.js";
2
+ import s from "../../../node_modules/styled-components/dist/styled-components.browser.esm.js";
3
+ const e = s.h5`
4
+ color: ${({ $color: o }) => o};
5
+ font-size: 1.4rem;
6
+ `, n = ({ color: o, children: r }) => /* @__PURE__ */ t.jsx(e, { $color: o, children: r });
7
+ export {
8
+ n as default
9
+ };
@@ -0,0 +1,9 @@
1
+ import { j as t } from "../../../_virtual/jsx-runtime.js";
2
+ import s from "../../../node_modules/styled-components/dist/styled-components.browser.esm.js";
3
+ const e = s.h6`
4
+ color: ${({ $color: o }) => o};
5
+ font-size: 1.2rem;
6
+ `, n = ({ color: o, children: r }) => /* @__PURE__ */ t.jsx(e, { $color: o, children: r });
7
+ export {
8
+ n as default
9
+ };
@@ -0,0 +1,34 @@
1
+ import { j as r } from "../../_virtual/jsx-runtime.js";
2
+ import { useRef as n } from "react";
3
+ import { VideoContainer as p, Video as V } from "./styles.js";
4
+ import { useSpacebarToggle as h } from "./useSpacebarToggle.js";
5
+ import x from "./components/Volumebar/Volumebar.js";
6
+ import { useVolumeOverlay as j } from "./useVolumeOverlay.js";
7
+ const C = ({ link: s, thumbnail: i, width: u = "600", borderRadius: c = 8, height: l = "auto" }) => {
8
+ const e = n(null), t = n(null), { volume: m, showVolume: a } = j(), d = () => {
9
+ var o;
10
+ (o = e.current) == null || o.focus();
11
+ }, f = (o) => {
12
+ o.code === "Space" && o.preventDefault();
13
+ };
14
+ return h(e, t, a), /* @__PURE__ */ r.jsxs(p, { ref: t, $width: u, $height: l, children: [
15
+ /* @__PURE__ */ r.jsx(
16
+ V,
17
+ {
18
+ $borderRadius: c,
19
+ ref: e,
20
+ src: s,
21
+ poster: i,
22
+ controls: !0,
23
+ tabIndex: 0,
24
+ onClick: d,
25
+ onKeyDown: f,
26
+ children: "Your browser does not support the video tag."
27
+ }
28
+ ),
29
+ /* @__PURE__ */ r.jsx(x, { volume: m })
30
+ ] });
31
+ };
32
+ export {
33
+ C as default
34
+ };
@@ -0,0 +1,13 @@
1
+ import { j as r } from "../../../../_virtual/jsx-runtime.js";
2
+ import { Wrapper as n, Track as s, Fill as e, Label as o } from "./styles.js";
3
+ const i = ({ volume: t }) => {
4
+ if (t === null) return null;
5
+ const l = Math.round(t);
6
+ return /* @__PURE__ */ r.jsxs(n, { children: [
7
+ /* @__PURE__ */ r.jsx(s, { children: /* @__PURE__ */ r.jsx(e, { $pct: l }) }),
8
+ /* @__PURE__ */ r.jsx(o, { children: l })
9
+ ] });
10
+ };
11
+ export {
12
+ i as default
13
+ };
@@ -0,0 +1,38 @@
1
+ import e from "../../../../node_modules/styled-components/dist/styled-components.browser.esm.js";
2
+ const i = e.div`
3
+ position: absolute;
4
+ right: 0.8rem;
5
+ top: 1.6rem;
6
+ display: flex;
7
+ flex-direction: column;
8
+ align-items: center;
9
+ gap: 0.6rem;
10
+ pointer-events: none;
11
+ user-select: none;
12
+ `, n = e.div`
13
+ width: 0.4rem;
14
+ height: 8rem;
15
+ background: rgba(255, 255, 255, 0.25);
16
+ border-radius: 0.2rem;
17
+ overflow: hidden;
18
+ display: flex;
19
+ align-items: flex-end;
20
+ `, o = e.div`
21
+ width: 100%;
22
+ height: ${({ $pct: r }) => r}%;
23
+ background: #fff;
24
+ border-radius: 0.2rem;
25
+ transition: height 0.1s ease;
26
+ `, s = e.span`
27
+ font-size: 1.1rem;
28
+ color: rgba(255, 255, 255, 0.85);
29
+ font-weight: 500;
30
+ width: 3.5rem;
31
+ text-align: center;
32
+ `;
33
+ export {
34
+ o as Fill,
35
+ s as Label,
36
+ n as Track,
37
+ i as Wrapper
38
+ };
@@ -0,0 +1,4 @@
1
+ import o from "./VideoPlayer.js";
2
+ export {
3
+ o as default
4
+ };
@@ -0,0 +1,34 @@
1
+ import t from "../../node_modules/styled-components/dist/styled-components.browser.esm.js";
2
+ import o from "../../colors/black.js";
3
+ const c = t.div`
4
+ position: relative;
5
+ display: inline-block;
6
+ width: ${({ $width: i }) => i}px;
7
+ height: ${({ $height: i }) => i}px;
8
+
9
+ &:fullscreen video {
10
+ width: 100vw;
11
+ height: 100vh;
12
+ object-fit: contain;
13
+ background: ${o.m900};
14
+ }
15
+ `, r = t.video`
16
+ border-radius: ${({ $borderRadius: i }) => i}px;
17
+ outline: none;
18
+ width: 100%;
19
+ height: 100%;
20
+ max-width: ${({ width: i }) => i}px;
21
+ aspect-ratio: 16 / 9;
22
+ background-color: #000;
23
+ object-fit: contain;
24
+
25
+ &:fullscreen {
26
+ width: 100vw;
27
+ height: 100vh;
28
+ object-fit: contain;
29
+ }
30
+ `;
31
+ export {
32
+ r as Video,
33
+ c as VideoContainer
34
+ };
@@ -0,0 +1,37 @@
1
+ import { useEffect as f } from "react";
2
+ const l = (c, a, r) => {
3
+ f(() => {
4
+ const u = (t) => {
5
+ var d;
6
+ if (![
7
+ "Space",
8
+ "KeyF",
9
+ "Escape",
10
+ "ArrowUp",
11
+ "ArrowDown",
12
+ "ArrowLeft",
13
+ "ArrowRight",
14
+ "KeyM"
15
+ ].includes(t.code))
16
+ return;
17
+ const n = t.target;
18
+ if (n && (n.tagName === "INPUT" || n.tagName === "TEXTAREA" || n.isContentEditable))
19
+ return;
20
+ t.preventDefault();
21
+ const e = c.current;
22
+ if (e)
23
+ if (t.code === "Space")
24
+ if (e.paused) {
25
+ const i = e.play();
26
+ i && i.catch && i.catch(() => {
27
+ });
28
+ } else
29
+ e.pause();
30
+ else t.code === "KeyF" ? document.fullscreenElement ? document.exitFullscreen() : (d = a.current) == null || d.requestFullscreen() : t.code === "ArrowUp" ? (e.volume = Math.min(1, e.volume + 0.05), r == null || r(e.volume)) : t.code === "ArrowDown" ? (e.volume = Math.max(0, e.volume - 0.05), r == null || r(e.volume)) : t.code === "KeyM" ? (e.volume = e.volume > 0 ? 0 : 1, r == null || r(e.volume)) : t.code === "ArrowLeft" ? e.currentTime > 5 ? e.currentTime -= 5 : e.currentTime > 0 && (e.currentTime = 0) : t.code === "ArrowRight" && (e.currentTime < e.duration - 5 ? e.currentTime += 5 : e.currentTime < e.duration && (e.currentTime = e.duration));
31
+ };
32
+ return window.addEventListener("keydown", u, !0), () => window.removeEventListener("keydown", u, !0);
33
+ }, [c, a, r]);
34
+ };
35
+ export {
36
+ l as useSpacebarToggle
37
+ };
@@ -0,0 +1,10 @@
1
+ import { useState as r, useRef as n, useCallback as s } from "react";
2
+ const c = () => {
3
+ const [u, e] = r(null), t = n(null), o = s((l) => {
4
+ e(Math.round(l * 100)), clearTimeout(t.current), t.current = setTimeout(() => e(null), 1500);
5
+ }, []);
6
+ return { volume: u, showVolume: o };
7
+ };
8
+ export {
9
+ c as useVolumeOverlay
10
+ };
package/index.js CHANGED
@@ -1,24 +1,48 @@
1
- import { default as a } from "./components/Pagination/Pagination.js";
2
- import { default as e } from "./components/Toast/Toast.js";
1
+ import { default as t } from "./components/Pagination/Pagination.js";
2
+ import { default as r } from "./components/Toast/Toast.js";
3
3
  import { default as p } from "./components/Spinner/Spinner.js";
4
4
  import { default as u } from "./components/OtpInput/OtpInput.js";
5
- import { default as d } from "./components/Dropdown/Dropdown.js";
5
+ import { default as s } from "./components/Dropdown/Dropdown.js";
6
6
  import { default as m } from "./components/Button/Button.js";
7
- import { default as i } from "./components/Input/Input/Input.js";
8
- import { default as I } from "./components/Input/Textarea/Textarea.js";
9
- import { default as g } from "./colors/index.js";
10
- import { default as B } from "./utils/index.js";
11
- import { default as O } from "./components/Icons/index.js";
7
+ import { default as n } from "./components/Timer/Timer.js";
8
+ import { default as c } from "./components/VideoPlayer/VideoPlayer.js";
9
+ import { default as T } from "./components/Typography/P/P.js";
10
+ import { default as b } from "./components/Input/Input/Input.js";
11
+ import { default as h } from "./components/Input/Textarea/Textarea.js";
12
+ import { default as w } from "./components/Input/Checkbox/Checkbox.js";
13
+ import { default as B } from "./components/Input/RadioGroup/RadioGroup.js";
14
+ import { default as D } from "./components/Input/FileUploader/FileUploader.js";
15
+ import { default as G } from "./colors/index.js";
16
+ import { default as R } from "./utils/index.js";
17
+ import { default as U } from "./components/Icons/index.js";
18
+ import { default as j } from "./components/Typography/Headings/H1.js";
19
+ import { default as v } from "./components/Typography/Headings/H2.js";
20
+ import { default as A } from "./components/Typography/Headings/H3.js";
21
+ import { default as J } from "./components/Typography/Headings/H4.js";
22
+ import { default as L } from "./components/Typography/Headings/H5.js";
23
+ import { default as N } from "./components/Typography/Headings/H6.js";
12
24
  export {
13
25
  m as Button,
14
- d as Dropdown,
15
- i as Input,
26
+ w as Checkbox,
27
+ s as Dropdown,
28
+ D as FileUploader,
29
+ j as H1,
30
+ v as H2,
31
+ A as H3,
32
+ J as H4,
33
+ L as H5,
34
+ N as H6,
35
+ b as Input,
16
36
  u as OtpInput,
17
- a as Pagination,
37
+ T as P,
38
+ t as Pagination,
39
+ B as RadioGroup,
18
40
  p as Spinner,
19
- I as Textarea,
20
- e as Toast,
21
- g as colors,
22
- O as icons,
23
- B as utils
41
+ h as Textarea,
42
+ n as Timer,
43
+ r as Toast,
44
+ c as VideoPlayer,
45
+ G as colors,
46
+ U as icons,
47
+ R as utils
24
48
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "meticulous-ui",
3
- "version": "2.2.8",
3
+ "version": "2.3.0",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.js",
6
6
  "repository": {
@@ -36,6 +36,9 @@
36
36
  "button",
37
37
  "input",
38
38
  "textarea",
39
+ "checkbox",
40
+ "radio",
41
+ "file-uploader",
39
42
  "notification",
40
43
  "dropdown",
41
44
  "spinner",
@@ -58,15 +61,18 @@
58
61
  "publish:dist": "npm publish dist/"
59
62
  },
60
63
  "devDependencies": {
61
- "@storybook/addon-docs": "^10.3.5",
64
+ "@storybook/addon-docs": "^9.1.13",
62
65
  "@storybook/mdx2-csf": "^1.1.0",
63
- "@storybook/react-vite": "^10.3.5",
66
+ "@storybook/react-vite": "^9.1.10",
64
67
  "@vitejs/plugin-react": "^5.0.4",
65
- "eslint-plugin-storybook": "^10.3.5",
68
+ "eslint-plugin-storybook": "^9.1.10",
66
69
  "gh-pages": "^6.3.0",
67
70
  "prop-types": "^15.8.1",
68
- "storybook": "^10.3.5",
71
+ "storybook": "^9.1.10",
69
72
  "svgo": "^4.0.0",
70
- "vite-plugin-svgr": "^4.5.0"
73
+ "vite": "^6.0.0",
74
+ "vite-plugin-svgr": "^4.5.0",
75
+ "styled-components": "^6.0.0",
76
+ "lodash-es": "^4.17.21"
71
77
  }
72
78
  }