@rubin-epo/epo-widget-lib 0.5.1-alpha.0 → 0.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.
Files changed (98) hide show
  1. package/dist/CameraFilter.d.ts +3 -0
  2. package/dist/ColorTool.cjs +1 -1
  3. package/dist/ColorTool.d.ts +3 -0
  4. package/dist/ColorTool.js +115 -79
  5. package/dist/FilterTool.d.ts +3 -0
  6. package/dist/SourceSelector.d.ts +3 -0
  7. package/dist/atomic/Blinker/Blinker.d.ts +14 -0
  8. package/dist/atomic/Blinker/Controls/Controls.d.ts +11 -0
  9. package/dist/atomic/Blinker/Controls/styles.d.ts +272 -0
  10. package/dist/atomic/Blinker/Image/Image.d.ts +9 -0
  11. package/dist/atomic/Blinker/Image/styles.d.ts +283 -0
  12. package/dist/atomic/Blinker/Images/Images.d.ts +8 -0
  13. package/dist/atomic/Blinker/Images/styles.d.ts +544 -0
  14. package/dist/atomic/Blinker/_mocks/index.d.ts +2 -0
  15. package/dist/atomic/Blinker/index.d.ts +1 -0
  16. package/dist/atomic/ElapsedTime/ElapsedTime.d.ts +10 -0
  17. package/dist/atomic/ElapsedTime/index.d.ts +1 -0
  18. package/dist/atomic/ElapsedTime/styles.d.ts +1633 -0
  19. package/dist/atomic/PlaybackControl/PlaybackControl.d.ts +9 -0
  20. package/dist/atomic/PlaybackControl/index.d.ts +1 -0
  21. package/dist/atomic/PlaybackControl/styles.d.ts +554 -0
  22. package/dist/hooks/useImage.cjs +1 -0
  23. package/dist/hooks/useImage.d.ts +10 -0
  24. package/dist/hooks/useImage.js +30 -0
  25. package/dist/hooks/useInterval.d.ts +1 -0
  26. package/dist/lib/reimg.cjs +1 -0
  27. package/dist/lib/reimg.d.ts +7 -0
  28. package/dist/lib/reimg.js +60 -0
  29. package/dist/lib/utils.d.ts +13 -0
  30. package/dist/lib/utils.test.d.ts +1 -0
  31. package/dist/styles/svg.d.ts +272 -0
  32. package/dist/{types → widgets/CameraFilter}/CameraFilter.d.ts +3 -6
  33. package/dist/widgets/CameraFilter/CondensedFilterRanges/CondensedFilterRanges.d.ts +9 -0
  34. package/dist/widgets/CameraFilter/CondensedFilterRanges/index.d.ts +1 -0
  35. package/dist/widgets/CameraFilter/SpectrumDisplay/ColorLabels/ColorLabels.d.ts +10 -0
  36. package/dist/widgets/CameraFilter/SpectrumDisplay/ColorLabels/index.d.ts +1 -0
  37. package/dist/widgets/CameraFilter/SpectrumDisplay/SpectrumDisplay.d.ts +11 -0
  38. package/dist/widgets/CameraFilter/SpectrumDisplay/SpectrumLabels/SpectrumLabels.d.ts +14 -0
  39. package/dist/widgets/CameraFilter/SpectrumDisplay/SpectrumLabels/index.d.ts +1 -0
  40. package/dist/widgets/CameraFilter/SpectrumDisplay/index.d.ts +1 -0
  41. package/dist/widgets/CameraFilter/data.d.ts +39 -0
  42. package/dist/widgets/CameraFilter/index.d.ts +1 -0
  43. package/dist/widgets/CameraFilter/styles.d.ts +4398 -0
  44. package/dist/widgets/ColorTool/Actions/Export/index.cjs +1 -0
  45. package/dist/widgets/ColorTool/Actions/Export/index.d.ts +12 -0
  46. package/dist/widgets/ColorTool/Actions/Export/index.js +36 -0
  47. package/dist/widgets/ColorTool/Actions/Reset/index.cjs +1 -0
  48. package/dist/widgets/ColorTool/Actions/Reset/index.d.ts +9 -0
  49. package/dist/widgets/ColorTool/Actions/Reset/index.js +39 -0
  50. package/dist/widgets/ColorTool/Actions/index.cjs +1 -0
  51. package/dist/widgets/ColorTool/Actions/index.d.ts +13 -0
  52. package/dist/widgets/ColorTool/Actions/index.js +55 -0
  53. package/dist/widgets/ColorTool/Actions/styles.cjs +5 -0
  54. package/dist/widgets/ColorTool/Actions/styles.d.ts +272 -0
  55. package/dist/widgets/ColorTool/Actions/styles.js +9 -0
  56. package/dist/{types → widgets/ColorTool}/ColorTool.d.ts +44 -45
  57. package/dist/widgets/ColorTool/FilterControls/FilterControls.cjs +1 -1
  58. package/dist/widgets/ColorTool/FilterControls/FilterControls.d.ts +14 -0
  59. package/dist/widgets/ColorTool/FilterControls/FilterControls.js +43 -41
  60. package/dist/widgets/ColorTool/FilterControls/index.d.ts +1 -0
  61. package/dist/widgets/ColorTool/FilterControls/styles.cjs +58 -0
  62. package/dist/widgets/ColorTool/FilterControls/styles.d.ts +956 -0
  63. package/dist/widgets/ColorTool/FilterControls/styles.js +67 -0
  64. package/dist/widgets/ColorTool/FilterImage/FilterImage.cjs +1 -1
  65. package/dist/widgets/ColorTool/FilterImage/FilterImage.d.ts +16 -0
  66. package/dist/widgets/ColorTool/FilterImage/FilterImage.js +40 -31
  67. package/dist/widgets/ColorTool/FilterImage/index.d.ts +1 -0
  68. package/dist/widgets/ColorTool/ImageComposite/ImageComposite.cjs +1 -1
  69. package/dist/widgets/ColorTool/ImageComposite/ImageComposite.d.ts +12 -0
  70. package/dist/widgets/ColorTool/ImageComposite/ImageComposite.js +54 -29
  71. package/dist/widgets/ColorTool/ImageComposite/index.d.ts +1 -0
  72. package/dist/widgets/ColorTool/ImageComposite/styles.cjs +19 -0
  73. package/dist/widgets/ColorTool/ImageComposite/styles.d.ts +544 -0
  74. package/dist/widgets/ColorTool/ImageComposite/styles.js +24 -0
  75. package/dist/widgets/ColorTool/index.d.ts +1 -0
  76. package/dist/widgets/ColorTool/styles.cjs +21 -77
  77. package/dist/widgets/ColorTool/styles.d.ts +1906 -0
  78. package/dist/widgets/ColorTool/styles.js +29 -96
  79. package/dist/widgets/ColorTool/utilities.cjs +1 -1
  80. package/dist/widgets/ColorTool/utilities.d.ts +22 -0
  81. package/dist/widgets/ColorTool/utilities.js +30 -29
  82. package/dist/{types → widgets/FilterTool}/FilterTool.d.ts +11 -16
  83. package/dist/widgets/FilterTool/index.d.ts +1 -0
  84. package/dist/widgets/FilterTool/styles.d.ts +3710 -0
  85. package/dist/widgets/SourceSelector/Message/Message.d.ts +10 -0
  86. package/dist/widgets/SourceSelector/Message/index.d.ts +1 -0
  87. package/dist/widgets/SourceSelector/Message/styles.d.ts +5 -0
  88. package/dist/widgets/SourceSelector/Point/Point.d.ts +15 -0
  89. package/dist/widgets/SourceSelector/Point/index.d.ts +1 -0
  90. package/dist/widgets/SourceSelector/Point/styles.d.ts +4 -0
  91. package/dist/widgets/SourceSelector/Points/Points.d.ts +13 -0
  92. package/dist/widgets/SourceSelector/Points/index.d.ts +1 -0
  93. package/dist/{types → widgets/SourceSelector}/SourceSelector.d.ts +22 -28
  94. package/dist/widgets/SourceSelector/index.d.ts +1 -0
  95. package/dist/widgets/SourceSelector/mocks/index.d.ts +7 -0
  96. package/dist/widgets/SourceSelector/utilities.d.ts +1 -0
  97. package/dist/widgets/SourceSelector/utilities.test.d.ts +1 -0
  98. package/package.json +7 -23
@@ -0,0 +1,67 @@
1
+ import e from "styled-components";
2
+ import o from "@rubin-epo/epo-react-lib/HorizontalSlider";
3
+ import t from "@rubin-epo/epo-react-lib/Button";
4
+ const r = e.input`
5
+ position: absolute;
6
+ left: -999px;
7
+ width: 1px;
8
+ height: 1px;
9
+ top: auto;
10
+ overflow: hidden;
11
+ `, s = e(t)`
12
+ background-color: var(--filter-toggle-background, #f7f7f7);
13
+ border: 1px solid;
14
+ color: var(--filter-toggle-color, #6c6e6e);
15
+ display: flex;
16
+ justify-content: center;
17
+ border-radius: 50%;
18
+ font-weight: var(--FONT_WEIGHT_MEDIUM, 500);
19
+ font-size: 22px;
20
+ text-transform: lowercase;
21
+ width: 38px;
22
+ height: 38px;
23
+ padding: 0;
24
+ user-select: none;
25
+ `, d = e.label`
26
+ overflow: hidden;
27
+
28
+ input:not(:disabled) + span {
29
+ cursor: pointer;
30
+
31
+ &:hover {
32
+ outline: 2px solid #6c6e6e;
33
+ outline-offset: -2px;
34
+ }
35
+ }
36
+
37
+ input:not(:disabled):focus + span,
38
+ input:not(:disabled):focus-visible + span {
39
+ outline: 2px solid #6c6e6e;
40
+ outline-offset: -2px;
41
+ }
42
+
43
+ input:not(:disabled):checked + span {
44
+ --filter-toggle-background: var(--turquoise85, #12726c);
45
+ --filter-toggle-color: var(--white, #fff);
46
+
47
+ &:hover {
48
+ outline: 1px solid var(--white, #fff);
49
+ outline-offset: -3px;
50
+ }
51
+ }
52
+
53
+ input:not(:disabled):checked:focus + span,
54
+ input:not(:disabled):checked:focus-visible + span {
55
+ outline: 1px solid var(--white, #fff);
56
+ outline-offset: -3px;
57
+ }
58
+ `, f = e(o)`
59
+ padding: 0;
60
+ width: 100%;
61
+ `;
62
+ export {
63
+ d as FilterLabel,
64
+ s as FilterToggle,
65
+ r as HiddenCheckbox,
66
+ f as Slider
67
+ };
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const b=require("react/jsx-runtime"),u=require("react"),d=({width:g=600,height:p=600,className:f,image:l,color:c="transparent",brightness:m=1})=>{const i=u.useRef(null),r=new Image,v=(t,s,e,a)=>{t.fillStyle=s,t.fillRect(0,0,e,a)},C=(t,s)=>{var a;const e=(a=i.current)==null?void 0:a.getContext("2d");if(e){const S=CSS.supports&&CSS.supports("background-color",s)?s:"transparent",{width:n,height:o}=e.canvas;e.clearRect(0,0,n,o),e.globalCompositeOperation="multiply",r.onload=()=>{e==null||e.drawImage(r,0,0,n,o),v(e,S,n,o)},r.src=t}};return u.useEffect(()=>{C(l,c)},[c,l]),b.jsx("canvas",{ref:i,style:{filter:`brightness(${m}) contrast(1.3)`},role:"img",className:f,width:g,height:p})};d.displayName="Widgets.ColorTool.FilterImage";const h=d;exports.default=h;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const q=require("react/jsx-runtime"),C=require("react"),R=require("../../../hooks/useImage.cjs"),S=require("../utilities.cjs"),j=require("../styles.cjs"),c=({width:u=600,height:g=600,className:d,url:m,color:p="transparent",filters:f={brightness:1},active:o,onLoadCallback:y})=>{var l;const[a,b]=R.default({url:m,crossOrigin:"anonymous",onLoadCallback:y}),n=C.useRef(null),s=(l=n.current)==null?void 0:l.getContext("2d"),h=(e,t,r,i)=>{const I=S.isStyleSupported("color",t)?t:"transparent";e.fillStyle=I,e.fillRect(0,0,r,i)},v=e=>Object.keys(e).reduce((t,r,i)=>t+=`${i>0?" ":""}${r}(${e[r]})`,"");if(s&&a&&b==="loaded"){const{width:e,height:t}=s.canvas;s.clearRect(0,0,e,t),s.globalCompositeOperation="multiply",s.filter=v(f),s.drawImage(a,0,0,e,t),h(s,p,e,t)}return q.jsx(j.Image,{ref:n,role:"img",style:{"--image-visibility":o?"visible":"hidden","--image-opacity":o?1:0},className:d,width:u,height:g})};c.displayName="Widgets.ColorTool.FilterImage";const F=c;exports.default=F;
@@ -0,0 +1,16 @@
1
+ import { FunctionComponent, HTMLAttributes } from "react";
2
+ export interface FilterImageProps extends HTMLAttributes<HTMLCanvasElement> {
3
+ className?: string;
4
+ height?: number;
5
+ width?: number;
6
+ url: string;
7
+ color?: string;
8
+ brightness?: number;
9
+ active: boolean;
10
+ filters?: {
11
+ [key: string]: number | undefined;
12
+ };
13
+ onLoadCallback?: () => void;
14
+ }
15
+ declare const FilterImage: FunctionComponent<FilterImageProps>;
16
+ export default FilterImage;
@@ -1,41 +1,50 @@
1
- import { jsx as v } from "react/jsx-runtime";
2
- import { useRef as I, useEffect as S } from "react";
3
- const p = ({
4
- width: f = 600,
1
+ import { jsx as C } from "react/jsx-runtime";
2
+ import { useRef as F } from "react";
3
+ import R from "../../../hooks/useImage.js";
4
+ import { isStyleSupported as $ } from "../utilities.js";
5
+ import { Image as x } from "../styles.js";
6
+ const m = ({
7
+ width: c = 600,
5
8
  height: g = 600,
6
- className: u,
7
- image: l,
8
- color: c = "transparent",
9
- brightness: d = 1
9
+ className: p,
10
+ url: d,
11
+ color: u = "transparent",
12
+ filters: f = {
13
+ brightness: 1
14
+ },
15
+ active: s,
16
+ onLoadCallback: y
10
17
  }) => {
11
- const i = I(null), o = new Image(), m = (e, a, t, s) => {
12
- e.fillStyle = a, e.fillRect(0, 0, t, s);
13
- }, C = (e, a) => {
14
- var s;
15
- const t = (s = i.current) == null ? void 0 : s.getContext("2d");
16
- if (t) {
17
- const h = CSS.supports && CSS.supports("background-color", a) ? a : "transparent", { width: r, height: n } = t.canvas;
18
- t.clearRect(0, 0, r, n), t.globalCompositeOperation = "multiply", o.onload = () => {
19
- t == null || t.drawImage(o, 0, 0, r, n), m(t, h, r, n);
20
- }, o.src = e;
21
- }
22
- };
23
- return S(() => {
24
- C(l, c);
25
- }, [c, l]), /* @__PURE__ */ v(
26
- "canvas",
18
+ var l;
19
+ const [a, h] = R({
20
+ url: d,
21
+ crossOrigin: "anonymous",
22
+ onLoadCallback: y
23
+ }), n = F(null), o = (l = n.current) == null ? void 0 : l.getContext("2d"), I = (t, e, r, i) => {
24
+ const v = $("color", e) ? e : "transparent";
25
+ t.fillStyle = v, t.fillRect(0, 0, r, i);
26
+ }, b = (t) => Object.keys(t).reduce((e, r, i) => e += `${i > 0 ? " " : ""}${r}(${t[r]})`, "");
27
+ if (o && a && h === "loaded") {
28
+ const { width: t, height: e } = o.canvas;
29
+ o.clearRect(0, 0, t, e), o.globalCompositeOperation = "multiply", o.filter = b(f), o.drawImage(a, 0, 0, t, e), I(o, u, t, e);
30
+ }
31
+ return /* @__PURE__ */ C(
32
+ x,
27
33
  {
28
- ref: i,
29
- style: { filter: `brightness(${d}) contrast(1.3)` },
34
+ ref: n,
30
35
  role: "img",
31
- className: u,
32
- width: f,
36
+ style: {
37
+ "--image-visibility": s ? "visible" : "hidden",
38
+ "--image-opacity": s ? 1 : 0
39
+ },
40
+ className: p,
41
+ width: c,
33
42
  height: g
34
43
  }
35
44
  );
36
45
  };
37
- p.displayName = "Widgets.ColorTool.FilterImage";
38
- const R = p;
46
+ m.displayName = "Widgets.ColorTool.FilterImage";
47
+ const H = m;
39
48
  export {
40
- R as default
49
+ H as default
41
50
  };
@@ -0,0 +1 @@
1
+ export { default } from "./FilterImage";
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("react/jsx-runtime"),c=require("../utilities.cjs"),i=require("../styles.cjs"),s=({filters:e})=>t.jsxs(i.ImageContainer,{children:[t.jsx(i.BackgroundImage,{alt:"",src:"data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=",$filtersActive:c.isFilterActive(e)}),e&&e.map(o=>{const{label:A,image:r,color:a,brightness:l,active:n}=o;return t.jsx(i.FilteredImage,{image:r,color:a,brightness:l,active:n},`filter-${A}`)})]});s.displayName="Widgets.ColorTool.ImageComposite";const m=s;exports.default=m;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const a=require("react/jsx-runtime"),r=require("react"),q=require("@rubin-epo/epo-react-lib/CircularLoader"),c=require("./styles.cjs"),I=require("../utilities.cjs"),S=require("../FilterImage/FilterImage.cjs"),$=e=>e&&e.__esModule?e:{default:e},A=$(q),d=r.forwardRef(({filters:e,width:o,height:s,selectedObjectName:i,children:m},g)=>{const[p,b]=r.useState(i),[n,l]=r.useState(0),f=I.isFilterActive(e),C=e.filter(t=>!t.isDisabled).length,u=n!==C;i!==p&&(b(i),l(0));const y=r.useCallback(()=>l(t=>t+1),[n,e]);return a.jsxs(c.ImageContainer,{ref:g,style:{"--image-width":typeof o=="number"?`${o}px`:o,"--image-height":typeof s=="number"?`${s}px`:s},children:[!n&&f&&a.jsx(A.default,{isVisible:u}),a.jsx(c.LoadingContainer,{style:{"--loading-opacity":u?0:1},children:e&&e.map(t=>{const{label:v,image:x,color:L,brightness:_,active:j}=t;return a.jsx(S.default,{url:x,color:L,active:j,width:o,height:s,filters:{brightness:_,contrast:1.3},onLoadCallback:y},`filter-${v}`)})}),m]})});d.displayName="Widgets.ColorTool.ImageComposite";const F=d;exports.default=F;
@@ -0,0 +1,12 @@
1
+ /// <reference types="react" />
2
+ import { ImageFilter } from "../ColorTool";
3
+ interface ImageCompositeProps {
4
+ filters: ImageFilter[];
5
+ width: number;
6
+ height: number;
7
+ selectedObjectName: string;
8
+ }
9
+ declare const ImageComposite: import("react").ForwardRefExoticComponent<ImageCompositeProps & {
10
+ children?: import("react").ReactNode;
11
+ } & import("react").RefAttributes<HTMLDivElement>>;
12
+ export default ImageComposite;
@@ -1,33 +1,58 @@
1
- import { jsxs as l, jsx as A } from "react/jsx-runtime";
2
- import { isFilterActive as g } from "../utilities.js";
3
- import { ImageContainer as c, BackgroundImage as n, FilteredImage as p } from "../styles.js";
4
- const o = ({
5
- filters: e
6
- }) => /* @__PURE__ */ l(c, { children: [
7
- /* @__PURE__ */ A(
8
- n,
1
+ import { jsxs as $, jsx as s } from "react/jsx-runtime";
2
+ import { forwardRef as A, useState as l, useCallback as F } from "react";
3
+ import j from "@rubin-epo/epo-react-lib/CircularLoader";
4
+ import { ImageContainer as k, LoadingContainer as D } from "./styles.js";
5
+ import { isFilterActive as P } from "../utilities.js";
6
+ import R from "../FilterImage/FilterImage.js";
7
+ const c = A(({ filters: o, width: r, height: t, selectedObjectName: a, children: p }, g) => {
8
+ const [d, f] = l(a), [i, n] = l(0), b = P(o), u = o.filter((e) => !e.isDisabled).length, m = i !== u;
9
+ a !== d && (f(a), n(0));
10
+ const C = F(
11
+ () => n((e) => e + 1),
12
+ [i, o]
13
+ );
14
+ return /* @__PURE__ */ $(
15
+ k,
9
16
  {
10
- alt: "",
11
- src: "data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=",
12
- $filtersActive: g(e)
13
- }
14
- ),
15
- e && e.map((t) => {
16
- const { label: a, image: i, color: r, brightness: m, active: s } = t;
17
- return /* @__PURE__ */ A(
18
- p,
19
- {
20
- image: i,
21
- color: r,
22
- brightness: m,
23
- active: s
17
+ ref: g,
18
+ style: {
19
+ "--image-width": typeof r == "number" ? `${r}px` : r,
20
+ "--image-height": typeof t == "number" ? `${t}px` : t
24
21
  },
25
- `filter-${a}`
26
- );
27
- })
28
- ] });
29
- o.displayName = "Widgets.ColorTool.ImageComposite";
30
- const f = o;
22
+ children: [
23
+ !i && b && /* @__PURE__ */ s(j, { isVisible: m }),
24
+ /* @__PURE__ */ s(
25
+ D,
26
+ {
27
+ style: { "--loading-opacity": m ? 0 : 1 },
28
+ children: o && o.map((e) => {
29
+ const { label: y, image: I, color: L, brightness: v, active: x } = e;
30
+ return /* @__PURE__ */ s(
31
+ R,
32
+ {
33
+ url: I,
34
+ color: L,
35
+ active: x,
36
+ width: r,
37
+ height: t,
38
+ filters: {
39
+ brightness: v,
40
+ contrast: 1.3
41
+ },
42
+ onLoadCallback: C
43
+ },
44
+ `filter-${y}`
45
+ );
46
+ })
47
+ }
48
+ ),
49
+ p
50
+ ]
51
+ }
52
+ );
53
+ });
54
+ c.displayName = "Widgets.ColorTool.ImageComposite";
55
+ const B = c;
31
56
  export {
32
- f as default
57
+ B as default
33
58
  };
@@ -0,0 +1 @@
1
+ export { default } from "./ImageComposite";
@@ -0,0 +1,19 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("styled-components"),i=t=>t&&t.__esModule?t:{default:t},e=i(a),o=e.default.div`
2
+ display: flex;
3
+ justify-content: center;
4
+ align-items: center;
5
+ position: relative;
6
+ aspect-ratio: 1 / 1;
7
+ grid-area: image;
8
+ background-color: rgba(0, 0, 0, 0.1);
9
+ max-width: var(--image-width);
10
+ max-height: var(--image-height);
11
+ `,n=e.default.div`
12
+ width: 100%;
13
+ height: 100%;
14
+ opacity: var(--loading-opacity, 0);
15
+ transition: opacity ease var(--DURATION_SLOW, 0.4s);
16
+ position: absolute;
17
+ top: 0;
18
+ left: 0;
19
+ `;exports.ImageContainer=o;exports.LoadingContainer=n;