@rubin-epo/epo-widget-lib 0.4.2 → 0.5.1-alpha.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 (91) hide show
  1. package/dist/CameraFilter.cjs +1 -1
  2. package/dist/CameraFilter.js +27 -27
  3. package/dist/ColorTool.cjs +1 -1
  4. package/dist/ColorTool.js +70 -78
  5. package/dist/SourceSelector.cjs +1 -1
  6. package/dist/SourceSelector.js +70 -69
  7. package/dist/atomic/Blinker/Blinker.cjs +1 -1
  8. package/dist/atomic/Blinker/Blinker.js +44 -50
  9. package/dist/atomic/Blinker/Image/Image.cjs +1 -1
  10. package/dist/atomic/Blinker/Image/Image.js +15 -15
  11. package/dist/atomic/Blinker/Image/styles.cjs +3 -8
  12. package/dist/atomic/Blinker/Image/styles.js +4 -9
  13. package/dist/atomic/Blinker/Images/Images.cjs +1 -1
  14. package/dist/atomic/Blinker/Images/Images.js +38 -31
  15. package/dist/atomic/Blinker/Images/styles.cjs +3 -8
  16. package/dist/atomic/Blinker/Images/styles.js +6 -11
  17. package/dist/atomic/Blinker/styles.cjs +14 -15
  18. package/dist/atomic/Blinker/styles.js +20 -20
  19. package/dist/favicon/apple-touch-icon.png +0 -0
  20. package/dist/favicon/favicon-16x16.png +0 -0
  21. package/dist/favicon/favicon-32x32.png +0 -0
  22. package/dist/{widgets/CameraFilter → types}/CameraFilter.d.ts +6 -3
  23. package/dist/{widgets/ColorTool → types}/ColorTool.d.ts +45 -37
  24. package/dist/{widgets/FilterTool → types}/FilterTool.d.ts +16 -11
  25. package/dist/{widgets/SourceSelector → types}/SourceSelector.d.ts +28 -22
  26. package/dist/widgets/ColorTool/styles.cjs +26 -33
  27. package/dist/widgets/ColorTool/styles.js +36 -41
  28. package/dist/widgets/ColorTool/utilities.cjs +1 -1
  29. package/dist/widgets/ColorTool/utilities.js +23 -27
  30. package/dist/widgets/SourceSelector/utilities.cjs +1 -1
  31. package/dist/widgets/SourceSelector/utilities.js +7 -4
  32. package/package.json +26 -10
  33. package/dist/CameraFilter.d.ts +0 -3
  34. package/dist/ColorTool.d.ts +0 -3
  35. package/dist/FilterTool.d.ts +0 -3
  36. package/dist/SourceSelector.d.ts +0 -3
  37. package/dist/atomic/Blinker/Blinker.d.ts +0 -14
  38. package/dist/atomic/Blinker/Controls/Controls.d.ts +0 -11
  39. package/dist/atomic/Blinker/Controls/styles.d.ts +0 -2
  40. package/dist/atomic/Blinker/Image/Image.d.ts +0 -9
  41. package/dist/atomic/Blinker/Image/styles.d.ts +0 -4
  42. package/dist/atomic/Blinker/Images/Images.d.ts +0 -8
  43. package/dist/atomic/Blinker/Images/styles.d.ts +0 -5
  44. package/dist/atomic/Blinker/_mocks/index.d.ts +0 -2
  45. package/dist/atomic/Blinker/index.d.ts +0 -1
  46. package/dist/atomic/Blinker/styles.d.ts +0 -8
  47. package/dist/atomic/ElapsedTime/ElapsedTime.d.ts +0 -10
  48. package/dist/atomic/ElapsedTime/index.d.ts +0 -1
  49. package/dist/atomic/ElapsedTime/styles.d.ts +0 -7
  50. package/dist/atomic/PlaybackControl/PlaybackControl.d.ts +0 -9
  51. package/dist/atomic/PlaybackControl/index.d.ts +0 -1
  52. package/dist/atomic/PlaybackControl/styles.d.ts +0 -3
  53. package/dist/hooks/useInterval.d.ts +0 -1
  54. package/dist/lib/utils.d.ts +0 -13
  55. package/dist/lib/utils.test.d.ts +0 -1
  56. package/dist/styles/svg.d.ts +0 -2
  57. package/dist/widgets/CameraFilter/CondensedFilterRanges/CondensedFilterRanges.d.ts +0 -9
  58. package/dist/widgets/CameraFilter/CondensedFilterRanges/index.d.ts +0 -1
  59. package/dist/widgets/CameraFilter/SpectrumDisplay/ColorLabels/ColorLabels.d.ts +0 -10
  60. package/dist/widgets/CameraFilter/SpectrumDisplay/ColorLabels/index.d.ts +0 -1
  61. package/dist/widgets/CameraFilter/SpectrumDisplay/SpectrumDisplay.d.ts +0 -11
  62. package/dist/widgets/CameraFilter/SpectrumDisplay/SpectrumLabels/SpectrumLabels.d.ts +0 -14
  63. package/dist/widgets/CameraFilter/SpectrumDisplay/SpectrumLabels/index.d.ts +0 -1
  64. package/dist/widgets/CameraFilter/SpectrumDisplay/index.d.ts +0 -1
  65. package/dist/widgets/CameraFilter/data.d.ts +0 -39
  66. package/dist/widgets/CameraFilter/index.d.ts +0 -1
  67. package/dist/widgets/CameraFilter/styles.d.ts +0 -23
  68. package/dist/widgets/ColorTool/FilterControls/FilterControls.d.ts +0 -14
  69. package/dist/widgets/ColorTool/FilterControls/index.d.ts +0 -1
  70. package/dist/widgets/ColorTool/FilterImage/FilterImage.d.ts +0 -11
  71. package/dist/widgets/ColorTool/FilterImage/index.d.ts +0 -1
  72. package/dist/widgets/ColorTool/ImageComposite/ImageComposite.d.ts +0 -7
  73. package/dist/widgets/ColorTool/ImageComposite/index.d.ts +0 -1
  74. package/dist/widgets/ColorTool/index.d.ts +0 -1
  75. package/dist/widgets/ColorTool/styles.d.ts +0 -23
  76. package/dist/widgets/ColorTool/utilities.d.ts +0 -21
  77. package/dist/widgets/FilterTool/index.d.ts +0 -1
  78. package/dist/widgets/FilterTool/styles.d.ts +0 -10
  79. package/dist/widgets/SourceSelector/Message/Message.d.ts +0 -10
  80. package/dist/widgets/SourceSelector/Message/index.d.ts +0 -1
  81. package/dist/widgets/SourceSelector/Message/styles.d.ts +0 -5
  82. package/dist/widgets/SourceSelector/Point/Point.d.ts +0 -15
  83. package/dist/widgets/SourceSelector/Point/index.d.ts +0 -1
  84. package/dist/widgets/SourceSelector/Point/styles.d.ts +0 -4
  85. package/dist/widgets/SourceSelector/Points/Points.d.ts +0 -13
  86. package/dist/widgets/SourceSelector/Points/index.d.ts +0 -1
  87. package/dist/widgets/SourceSelector/index.d.ts +0 -1
  88. package/dist/widgets/SourceSelector/mocks/index.d.ts +0 -7
  89. package/dist/widgets/SourceSelector/styles.d.ts +0 -12
  90. package/dist/widgets/SourceSelector/utilities.d.ts +0 -1
  91. package/dist/widgets/SourceSelector/utilities.test.d.ts +0 -1
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("react/jsx-runtime"),v=require("react"),q=require("@rubin-epo/epo-react-lib/SelectListbox"),C=require("@rubin-epo/epo-react-lib/styles"),S=require("react-i18next"),R=require("use-resize-observer"),s=require("./widgets/CameraFilter/data.cjs"),r=require("./widgets/CameraFilter/styles.cjs"),y=require("./widgets/CameraFilter/CondensedFilterRanges/CondensedFilterRanges.cjs"),L=require("./widgets/CameraFilter/SpectrumDisplay/SpectrumDisplay.cjs"),x=l=>l&&l.__esModule?l:{default:l},M=x(q),O=x(R),h=()=>{const{t:l}=S.useTranslation(),{ref:j,width:m=1}=O.default(),[c,p]=v.useState(null),{BREAK_TABLET:g}=C.tokens,i=m<parseInt(g),{[i?"condensed":"default"]:{min:a,max:_,range:n}}=s.rangeConfig,o=s.filters[0].range[0],d=s.filters[s.filters.length-1].range[1]-o,u=s.filters.filter(({band:e})=>e),F=[{value:"none",label:l("camera_filter.labels.option",{context:"none"})}].concat(u.map(({band:e})=>({value:e,label:l("camera_filter.labels.option",{band:e})}))),b=s.filters.find(({band:e})=>e===c);return t.jsxs(r.FilterContainer,{ref:j,children:[t.jsx("h1",{children:l("camera_filter.title")}),i&&t.jsx(y.default,{filters:u,min:a,spectrumRange:n}),t.jsxs(r.FilterTable,{"aria-hidden":i,range:d/n*100,offset:(o-a)/n*100,"data-testid":"expanded-filters",children:[t.jsx("colgroup",{children:s.filters.map(({range:e})=>t.jsx("col",{style:{width:`${(e[1]-e[0])/d*100}%`}},e.join("")))}),t.jsx(r.FilterNames,{children:t.jsx("tr",{children:s.filters.map(({band:e})=>t.jsx(r.FilterName,{id:`${e}-name`,band:e,scope:"col","aria-hidden":!e,$isCondensed:i,children:e},e))})}),!i&&t.jsx(r.FilterRanges,{children:t.jsx("tr",{children:s.filters.map(({band:e,range:f})=>t.jsx(r.FilterRange,{"aria-hidden":!e,children:e&&t.jsxs(t.Fragment,{children:[f.join("–"),t.jsx("br",{}),t.jsx(r.Wavelength,{children:"nm"})]})},f.join()))})})]}),t.jsx(L.default,{min:a,max:_,range:n,isCondensed:i,activeFilter:b}),t.jsxs(r.SelectContainer,{children:[t.jsx(r.SelectLabel,{id:"filterSelectLabel",children:l("camera_filter.labels.select")}),t.jsx(M.default,{options:F,value:c,onChangeCallback:e=>p(e),width:"100%",maxWidth:"100%",labelledById:"filterSelectLabel"})]})]})};h.displayName="Widgets.CameraFilter";exports.default=h;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("react/jsx-runtime"),v=require("react"),q=require("@rubin-epo/epo-react-lib/SelectListbox"),C=require("@rubin-epo/epo-react-lib/styles"),S=require("react-i18next"),R=require("use-resize-observer"),s=require("./widgets/CameraFilter/data.cjs"),r=require("./widgets/CameraFilter/styles.cjs"),y=require("./widgets/CameraFilter/CondensedFilterRanges/CondensedFilterRanges.cjs"),L=require("./widgets/CameraFilter/SpectrumDisplay/SpectrumDisplay.cjs"),x=l=>l&&l.__esModule?l:{default:l},M=x(q),O=x(R),h=()=>{const{t:l}=S.useTranslation(),{ref:j,width:m=1}=O.default(),[o,p]=v.useState(null),{BREAK_TABLET:g}=C.tokens,i=m<parseInt(g),{[i?"condensed":"default"]:{min:c,max:_,range:n}}=s.rangeConfig,d=s.filters[0].range[0],u=s.filters[s.filters.length-1].range[1]-d,f=s.filters.filter(({band:e})=>e),b=[{value:"none",label:l("camera_filter.labels.option",{context:"none"})}].concat(f.map(({band:e})=>({value:e,label:l("camera_filter.labels.option",{band:e})}))),F=s.filters.find(({band:e})=>e===o);return t.jsxs(r.FilterContainer,{ref:j,children:[t.jsx("h1",{children:l("camera_filter.title")}),i&&t.jsx(y.default,{filters:f,min:c,spectrumRange:n}),t.jsxs(r.FilterTable,{"aria-hidden":i,range:u/n*100,offset:(d-c)/n*100,"data-testid":"expanded-filters",children:[t.jsx("colgroup",{children:s.filters.map(({range:e})=>t.jsx("col",{style:{width:`${(e[1]-e[0])/u*100}%`}},e.join("")))}),t.jsx(r.FilterNames,{children:t.jsx("tr",{children:s.filters.map(({band:e},a)=>t.jsx(r.FilterName,{id:`${e}-name`,band:e,scope:"col","aria-hidden":!e,$isCondensed:i,children:e},a))})}),!i&&t.jsx(r.FilterRanges,{children:t.jsx("tr",{children:s.filters.map(({band:e,range:a})=>t.jsx(r.FilterRange,{"aria-hidden":!e,children:e&&t.jsxs(t.Fragment,{children:[a.join("–"),t.jsx("br",{}),t.jsx(r.Wavelength,{children:"nm"})]})},a.join()))})})]}),t.jsx(L.default,{min:c,max:_,range:n,isCondensed:i,activeFilter:F}),t.jsxs(r.SelectContainer,{children:[t.jsx(r.SelectLabel,{id:"filterSelectLabel",children:l("camera_filter.labels.select")}),t.jsx(M.default,{options:b,value:o,onChangeCallback:e=>p(e),width:"100%",maxWidth:"100%",labelledById:"filterSelectLabel"})]})]})};h.displayName="Widgets.CameraFilter";exports.default=h;
@@ -1,4 +1,4 @@
1
- import { jsxs as a, jsx as t, Fragment as b } from "react/jsx-runtime";
1
+ import { jsxs as o, jsx as t, Fragment as b } from "react/jsx-runtime";
2
2
  import { useState as v } from "react";
3
3
  import R from "@rubin-epo/epo-react-lib/SelectListbox";
4
4
  import { tokens as S } from "@rubin-epo/epo-react-lib/styles";
@@ -9,45 +9,45 @@ import { FilterContainer as L, FilterTable as _, FilterNames as O, FilterName as
9
9
  import $ from "./widgets/CameraFilter/CondensedFilterRanges/CondensedFilterRanges.js";
10
10
  import k from "./widgets/CameraFilter/SpectrumDisplay/SpectrumDisplay.js";
11
11
  const E = () => {
12
- const { t: l } = j(), { ref: p, width: h = 1 } = y(), [s, g] = v(null), { BREAK_TABLET: u } = S, r = h < parseInt(u), {
13
- [r ? "condensed" : "default"]: { min: o, max: F, range: n }
14
- } = B, c = i[0].range[0], d = i[i.length - 1].range[1] - c, m = i.filter(({ band: e }) => e), x = [{
12
+ const { t: n } = j(), { ref: p, width: h = 1 } = y(), [c, g] = v(null), { BREAK_TABLET: u } = S, r = h < parseInt(u), {
13
+ [r ? "condensed" : "default"]: { min: s, max: F, range: l }
14
+ } = B, d = i[0].range[0], m = i[i.length - 1].range[1] - d, f = i.filter(({ band: e }) => e), x = [{
15
15
  value: "none",
16
- label: l("camera_filter.labels.option", { context: "none" })
16
+ label: n("camera_filter.labels.option", { context: "none" })
17
17
  }].concat(
18
- m.map(({ band: e }) => ({
18
+ f.map(({ band: e }) => ({
19
19
  value: e,
20
- label: l("camera_filter.labels.option", { band: e })
20
+ label: n("camera_filter.labels.option", { band: e })
21
21
  }))
22
- ), C = i.find(({ band: e }) => e === s);
23
- return /* @__PURE__ */ a(L, { ref: p, children: [
24
- /* @__PURE__ */ t("h1", { children: l("camera_filter.title") }),
22
+ ), C = i.find(({ band: e }) => e === c);
23
+ return /* @__PURE__ */ o(L, { ref: p, children: [
24
+ /* @__PURE__ */ t("h1", { children: n("camera_filter.title") }),
25
25
  r && /* @__PURE__ */ t(
26
26
  $,
27
27
  {
28
- filters: m,
29
- min: o,
30
- spectrumRange: n
28
+ filters: f,
29
+ min: s,
30
+ spectrumRange: l
31
31
  }
32
32
  ),
33
- /* @__PURE__ */ a(
33
+ /* @__PURE__ */ o(
34
34
  _,
35
35
  {
36
36
  "aria-hidden": r,
37
- range: d / n * 100,
38
- offset: (c - o) / n * 100,
37
+ range: m / l * 100,
38
+ offset: (d - s) / l * 100,
39
39
  "data-testid": "expanded-filters",
40
40
  children: [
41
41
  /* @__PURE__ */ t("colgroup", { children: i.map(({ range: e }) => /* @__PURE__ */ t(
42
42
  "col",
43
43
  {
44
44
  style: {
45
- width: `${(e[1] - e[0]) / d * 100}%`
45
+ width: `${(e[1] - e[0]) / m * 100}%`
46
46
  }
47
47
  },
48
48
  e.join("")
49
49
  )) }),
50
- /* @__PURE__ */ t(O, { children: /* @__PURE__ */ t("tr", { children: i.map(({ band: e }) => /* @__PURE__ */ t(
50
+ /* @__PURE__ */ t(O, { children: /* @__PURE__ */ t("tr", { children: i.map(({ band: e }, a) => /* @__PURE__ */ t(
51
51
  T,
52
52
  {
53
53
  id: `${e}-name`,
@@ -57,33 +57,33 @@ const E = () => {
57
57
  $isCondensed: r,
58
58
  children: e
59
59
  },
60
- e
60
+ a
61
61
  )) }) }),
62
- !r && /* @__PURE__ */ t(w, { children: /* @__PURE__ */ t("tr", { children: i.map(({ band: e, range: f }) => /* @__PURE__ */ t(A, { "aria-hidden": !e, children: e && /* @__PURE__ */ a(b, { children: [
63
- f.join("–"),
62
+ !r && /* @__PURE__ */ t(w, { children: /* @__PURE__ */ t("tr", { children: i.map(({ band: e, range: a }) => /* @__PURE__ */ t(A, { "aria-hidden": !e, children: e && /* @__PURE__ */ o(b, { children: [
63
+ a.join("–"),
64
64
  /* @__PURE__ */ t("br", {}),
65
65
  /* @__PURE__ */ t(M, { children: "nm" })
66
- ] }) }, f.join())) }) })
66
+ ] }) }, a.join())) }) })
67
67
  ]
68
68
  }
69
69
  ),
70
70
  /* @__PURE__ */ t(
71
71
  k,
72
72
  {
73
- min: o,
73
+ min: s,
74
74
  max: F,
75
- range: n,
75
+ range: l,
76
76
  isCondensed: r,
77
77
  activeFilter: C
78
78
  }
79
79
  ),
80
- /* @__PURE__ */ a(N, { children: [
81
- /* @__PURE__ */ t(W, { id: "filterSelectLabel", children: l("camera_filter.labels.select") }),
80
+ /* @__PURE__ */ o(N, { children: [
81
+ /* @__PURE__ */ t(W, { id: "filterSelectLabel", children: n("camera_filter.labels.select") }),
82
82
  /* @__PURE__ */ t(
83
83
  R,
84
84
  {
85
85
  options: x,
86
- value: s,
86
+ value: c,
87
87
  onChangeCallback: (e) => g(e),
88
88
  width: "100%",
89
89
  maxWidth: "100%",
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),g=require("react"),N=require("use-resize-observer"),M=require("react-i18next"),c=require("./widgets/ColorTool/utilities.cjs"),t=require("./widgets/ColorTool/styles.cjs"),H=require("@rubin-epo/epo-react-lib"),W=require("./widgets/ColorTool/FilterControls/FilterControls.cjs"),$=require("./widgets/ColorTool/ImageComposite/ImageComposite.cjs"),z=l=>l&&l.__esModule?l:{default:l},O=z(N),m=({data:l,objectOptions:T=[],selectedData:p,colorOptions:L=[],selectionCallback:j,isDisabled:b=!1,isDisplayOnly:i=!1,hideImage:_=!1,hideSubtitle:q=!1})=>{const{ref:S,width:y=1}=O.default(),[s,h]=g.useState(c.prepareData(p));g.useEffect(()=>{j&&j(s)},[s]);const F=r=>{const{label:n}=r,{filters:f}=s,I=f.map(C=>C.label===n?r:C);return h({...s,filters:I})},R=r=>{const{value:n}=r.target;return h({name:n,filters:c.getDataFiltersByName(l,n)})},v=()=>h({...s,filters:c.resetFilters(s.filters)}),d=l.length>1,{t:o}=M.useTranslation(),B=o("colorTool.actions.select_an_object"),{filters:u,name:a,caption:x}=s,D=c.getCategoryName(l,a);return e.jsxs(t.WidgetContainer,{ref:S,$isCondensed:y<1e3,$hideControls:i,children:[a&&(i||d)&&e.jsxs(t.Subtitle,{children:[d&&e.jsxs(e.Fragment,{children:[e.jsx("dt",{children:o("colorTool.labels.object_type")}),e.jsx("dd",{children:D})]}),!q&&e.jsxs(e.Fragment,{children:[e.jsx("dt",{children:o("colorTool.labels.object",{context:d?"selected":!1})}),e.jsx("dd",{children:a})]})]}),!i&&e.jsxs(t.ControlsContainer,{children:[d&&e.jsx(t.SelectionContainer,{children:e.jsx(H.Select,{id:"astroObjectSelector",placeholder:B,options:T,onChange:R,value:a,disabled:b})}),u&&e.jsxs(e.Fragment,{children:[e.jsx(t.ToolsHeader,{id:"filterLabel",children:o("colorTool.labels.filter")}),e.jsx(t.ToolsHeader,{id:"colorLabel",children:o("colorTool.labels.color")}),e.jsx(t.ToolsHeader,{id:"intensityLabel",children:o("colorTool.labels.color_intensity")})]}),u&&u.map(r=>{const{label:n,isDisabled:f}=r;return e.jsx(W.default,{filter:r,isDisabled:b||f,colorOptions:L,onChangeFilterCallback:F,buttonLabelledById:"filterLabel",selectLabelledById:"colorLabel",sliderLabelledById:"intensityLabel"},`filter-${n}`)})]}),!_&&e.jsx($.default,{filters:u}),a&&!i&&e.jsx(t.ResetButton,{disabled:b||!c.isResetButtonActive(s),onClick:v,icon:"RotateLeftWithCenter",children:o("colorTool.actions.reset")}),x&&e.jsx(t.Caption,{children:x})]})};m.displayName="Widgets.ColorTool";exports.default=m;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),v=require("react-i18next"),h=require("./widgets/ColorTool/utilities.cjs"),t=require("./widgets/ColorTool/styles.cjs"),B=require("@rubin-epo/epo-react-lib/Select"),I=require("./widgets/ColorTool/FilterControls/FilterControls.cjs"),N=require("./widgets/ColorTool/ImageComposite/ImageComposite.cjs"),R=l=>l&&l.__esModule?l:{default:l},M=R(B),g=({data:l,objectOptions:m=[],selectedData:s,colorOptions:T=[],selectionCallback:n,isDisabled:j=!1,isDisplayOnly:a=!1,hideImage:C=!1,hideSubtitle:L=!1})=>{const _=r=>{const{label:i}=r,{filters:b}=s,q=b.map(x=>x.label===i?r:x);return n&&n({...s,filters:q})},y=r=>{const{value:i}=r.target;return n&&n({name:i,filters:h.getDataFiltersByName(l,i)})},p=()=>n&&n({...s,filters:h.resetFilters(s.filters)}),d=l.length>1,{t:o}=v.useTranslation(),F=o("colorTool.actions.select_an_object"),{filters:u,name:c,caption:f}=s,S=h.getCategoryName(l,c);return e.jsx(t.WidgetContainer,{children:e.jsxs(t.WidgetLayout,{style:{"--controls-row":a?"'image image'":void 0},children:[c&&(a||d)&&e.jsxs(t.Subtitle,{children:[d&&e.jsxs(e.Fragment,{children:[e.jsx("dt",{children:o("colorTool.labels.object_type")}),e.jsx("dd",{children:S})]}),!L&&e.jsxs(e.Fragment,{children:[e.jsx("dt",{children:o("colorTool.labels.object",{context:d?"selected":!1})}),e.jsx("dd",{children:c})]})]}),!a&&e.jsxs(t.ControlsContainer,{children:[d&&e.jsx(t.SelectionContainer,{children:e.jsx(M.default,{id:"astroObjectSelector",placeholder:F,options:m,onChange:y,value:c,disabled:j})}),u&&e.jsxs(e.Fragment,{children:[e.jsx(t.ToolsHeader,{id:"filterLabel",children:o("colorTool.labels.filter")}),e.jsx(t.ToolsHeader,{id:"colorLabel",children:o("colorTool.labels.color")}),e.jsx(t.ToolsHeader,{id:"intensityLabel",children:o("colorTool.labels.color_intensity")})]}),u&&u.map(r=>{const{label:i,isDisabled:b}=r;return e.jsx(I.default,{filter:r,isDisabled:j||b,colorOptions:T,onChangeFilterCallback:_,buttonLabelledById:"filterLabel",selectLabelledById:"colorLabel",sliderLabelledById:"intensityLabel"},`filter-${i}`)})]}),!C&&e.jsx(N.default,{filters:u}),c&&!a&&e.jsx(t.ResetButton,{disabled:j||!h.isResetButtonActive(s),onClick:p,icon:"RotateLeftWithCenter",children:o("colorTool.actions.reset")}),f&&e.jsx(t.Caption,{children:f})]})})};g.displayName="Widgets.ColorTool";exports.default=g;
package/dist/ColorTool.js CHANGED
@@ -1,116 +1,108 @@
1
- import { jsxs as s, Fragment as b, jsx as e } from "react/jsx-runtime";
2
- import { useState as _, useEffect as W } from "react";
3
- import $ from "use-resize-observer";
4
- import { useTranslation as k } from "react-i18next";
5
- import { prepareData as w, getCategoryName as z, isResetButtonActive as A, getDataFiltersByName as E, resetFilters as H } from "./widgets/ColorTool/utilities.js";
6
- import { WidgetContainer as M, Subtitle as P, ControlsContainer as q, SelectionContainer as G, ToolsHeader as p, ResetButton as J, Caption as K } from "./widgets/ColorTool/styles.js";
7
- import { Select as O } from "@rubin-epo/epo-react-lib";
8
- import Q from "./widgets/ColorTool/FilterControls/FilterControls.js";
9
- import U from "./widgets/ColorTool/ImageComposite/ImageComposite.js";
10
- const V = ({
11
- data: d,
12
- objectOptions: T = [],
13
- selectedData: L,
14
- colorOptions: j = [],
15
- selectionCallback: C,
16
- isDisabled: f = !1,
17
- isDisplayOnly: i = !1,
18
- hideImage: S = !1,
1
+ import { jsx as e, jsxs as i, Fragment as b } from "react/jsx-runtime";
2
+ import { useTranslation as x } from "react-i18next";
3
+ import { getCategoryName as I, isResetButtonActive as R, getDataFiltersByName as W, resetFilters as _ } from "./widgets/ColorTool/utilities.js";
4
+ import { WidgetContainer as w, WidgetLayout as A, Subtitle as H, ControlsContainer as M, SelectionContainer as P, ToolsHeader as g, ResetButton as $, Caption as q } from "./widgets/ColorTool/styles.js";
5
+ import z from "@rubin-epo/epo-react-lib/Select";
6
+ import E from "./widgets/ColorTool/FilterControls/FilterControls.js";
7
+ import G from "./widgets/ColorTool/ImageComposite/ImageComposite.js";
8
+ const J = ({
9
+ data: h,
10
+ objectOptions: C = [],
11
+ selectedData: l,
12
+ colorOptions: L = [],
13
+ selectionCallback: r,
14
+ isDisabled: m = !1,
15
+ isDisplayOnly: c = !1,
16
+ hideImage: T = !1,
19
17
  hideSubtitle: y = !1
20
18
  }) => {
21
- const { ref: B, width: F = 1 } = $(), [t, h] = _(
22
- w(L)
23
- );
24
- W(() => {
25
- C && C(t);
26
- }, [t]);
27
- const N = (l) => {
28
- const { label: r } = l, { filters: m } = t, I = m.map(
29
- (g) => g.label === r ? l : g
19
+ const j = (t) => {
20
+ const { label: n } = t, { filters: f } = l, v = f.map(
21
+ (u) => u.label === n ? t : u
30
22
  );
31
- return h({
32
- ...t,
33
- filters: I
23
+ return r && r({
24
+ ...l,
25
+ filters: v
34
26
  });
35
- }, R = (l) => {
36
- const { value: r } = l.target;
37
- return h({
38
- name: r,
39
- filters: E(d, r)
27
+ }, B = (t) => {
28
+ const { value: n } = t.target;
29
+ return r && r({
30
+ name: n,
31
+ filters: W(h, n)
40
32
  });
41
- }, v = () => h({
42
- ...t,
43
- filters: H(t.filters)
44
- }), a = d.length > 1, { t: o } = k(), x = o("colorTool.actions.select_an_object"), { filters: c, name: n, caption: u } = t, D = z(d, n);
45
- return /* @__PURE__ */ s(
46
- M,
33
+ }, F = () => r && r({
34
+ ...l,
35
+ filters: _(l.filters)
36
+ }), a = h.length > 1, { t: o } = x(), N = o("colorTool.actions.select_an_object"), { filters: d, name: s, caption: p } = l, S = I(h, s);
37
+ return /* @__PURE__ */ e(w, { children: /* @__PURE__ */ i(
38
+ A,
47
39
  {
48
- ref: B,
49
- $isCondensed: F < 1e3,
50
- $hideControls: i,
40
+ style: {
41
+ "--controls-row": c ? "'image image'" : void 0
42
+ },
51
43
  children: [
52
- n && (i || a) && /* @__PURE__ */ s(P, { children: [
53
- a && /* @__PURE__ */ s(b, { children: [
44
+ s && (c || a) && /* @__PURE__ */ i(H, { children: [
45
+ a && /* @__PURE__ */ i(b, { children: [
54
46
  /* @__PURE__ */ e("dt", { children: o("colorTool.labels.object_type") }),
55
- /* @__PURE__ */ e("dd", { children: D })
47
+ /* @__PURE__ */ e("dd", { children: S })
56
48
  ] }),
57
- !y && /* @__PURE__ */ s(b, { children: [
49
+ !y && /* @__PURE__ */ i(b, { children: [
58
50
  /* @__PURE__ */ e("dt", { children: o("colorTool.labels.object", {
59
51
  context: a ? "selected" : !1
60
52
  }) }),
61
- /* @__PURE__ */ e("dd", { children: n })
53
+ /* @__PURE__ */ e("dd", { children: s })
62
54
  ] })
63
55
  ] }),
64
- !i && /* @__PURE__ */ s(q, { children: [
65
- a && /* @__PURE__ */ e(G, { children: /* @__PURE__ */ e(
66
- O,
56
+ !c && /* @__PURE__ */ i(M, { children: [
57
+ a && /* @__PURE__ */ e(P, { children: /* @__PURE__ */ e(
58
+ z,
67
59
  {
68
60
  id: "astroObjectSelector",
69
- placeholder: x,
70
- options: T,
71
- onChange: R,
72
- value: n,
73
- disabled: f
61
+ placeholder: N,
62
+ options: C,
63
+ onChange: B,
64
+ value: s,
65
+ disabled: m
74
66
  }
75
67
  ) }),
76
- c && /* @__PURE__ */ s(b, { children: [
77
- /* @__PURE__ */ e(p, { id: "filterLabel", children: o("colorTool.labels.filter") }),
78
- /* @__PURE__ */ e(p, { id: "colorLabel", children: o("colorTool.labels.color") }),
79
- /* @__PURE__ */ e(p, { id: "intensityLabel", children: o("colorTool.labels.color_intensity") })
68
+ d && /* @__PURE__ */ i(b, { children: [
69
+ /* @__PURE__ */ e(g, { id: "filterLabel", children: o("colorTool.labels.filter") }),
70
+ /* @__PURE__ */ e(g, { id: "colorLabel", children: o("colorTool.labels.color") }),
71
+ /* @__PURE__ */ e(g, { id: "intensityLabel", children: o("colorTool.labels.color_intensity") })
80
72
  ] }),
81
- c && c.map((l) => {
82
- const { label: r, isDisabled: m } = l;
73
+ d && d.map((t) => {
74
+ const { label: n, isDisabled: f } = t;
83
75
  return /* @__PURE__ */ e(
84
- Q,
76
+ E,
85
77
  {
86
- filter: l,
87
- isDisabled: f || m,
88
- colorOptions: j,
89
- onChangeFilterCallback: N,
78
+ filter: t,
79
+ isDisabled: m || f,
80
+ colorOptions: L,
81
+ onChangeFilterCallback: j,
90
82
  buttonLabelledById: "filterLabel",
91
83
  selectLabelledById: "colorLabel",
92
84
  sliderLabelledById: "intensityLabel"
93
85
  },
94
- `filter-${r}`
86
+ `filter-${n}`
95
87
  );
96
88
  })
97
89
  ] }),
98
- !S && /* @__PURE__ */ e(U, { filters: c }),
99
- n && !i && /* @__PURE__ */ e(
100
- J,
90
+ !T && /* @__PURE__ */ e(G, { filters: d }),
91
+ s && !c && /* @__PURE__ */ e(
92
+ $,
101
93
  {
102
- disabled: f || !A(t),
103
- onClick: v,
94
+ disabled: m || !R(l),
95
+ onClick: F,
104
96
  icon: "RotateLeftWithCenter",
105
97
  children: o("colorTool.actions.reset")
106
98
  }
107
99
  ),
108
- u && /* @__PURE__ */ e(K, { children: u })
100
+ p && /* @__PURE__ */ e(q, { children: p })
109
101
  ]
110
102
  }
111
- );
103
+ ) });
112
104
  };
113
- V.displayName = "Widgets.ColorTool";
105
+ J.displayName = "Widgets.ColorTool";
114
106
  export {
115
- V as default
107
+ J as default
116
108
  };
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("react/jsx-runtime"),a=require("react"),R=require("react-i18next"),T=require("@rubin-epo/epo-react-lib/IconComposer"),u=require("./widgets/SourceSelector/styles.cjs"),k=require("./widgets/SourceSelector/utilities.cjs"),W=require("./widgets/SourceSelector/Message/Message.cjs"),F=require("./widgets/SourceSelector/Points/Points.cjs"),G=e=>e&&e.__esModule?e:{default:e},N=G(T),C=({width:e=600,height:r=600,selectedSource:_=[],sources:f,alerts:n,images:b,selectionCallback:g,blinkConfig:q,color:y,isDisplayOnly:d=!1})=>{const[l,h]=a.useState(_),[v,A]=a.useState(!1),[I,x]=a.useState(),[B,S]=a.useState(!1),[M,L]=a.useState(null),{t:p}=R.useTranslation(),m="sourceSelectorWidget";a.useEffect(()=>{g&&g(l)},[l]);const j=(o,i,t)=>o.filter(c=>c.id===i&&c.type===t),V=o=>{if(v&&!d){const{target:i}=o,{id:t,type:c}=i.dataset;if(t&&c){if(!(j(l,t,c).length>0)){const D=j(f,t,c);h(P=>P.concat(D)),x(s.jsxs(s.Fragment,{children:[s.jsx(N.default,{icon:"checkmark"}),p("source_selector.messages.success")]})),S(!0)}}else x(p("source_selector.messages.failure")),S(!0)}},E=()=>{S(!1)},$=o=>{if(n&&n.length>1){const t=n[o].date-n[0].date;L({day:Math.round(t),hour:Math.round(24/t%24)||0})}};return s.jsxs(u.SourceSelectorContainer,{width:e,height:r,children:[!d&&s.jsx(W.default,{onMessageChangeCallback:E,isVisible:B,forIds:[m],children:I}),s.jsx(u.BackgroundBlinker,{images:b,blinkCallback:$,loadedCallback:()=>A(!0),...q}),M&&s.jsx(u.ElapsedDisplay,{...M}),s.jsx(u.SVG,{preserveAspectRatio:"xMidYMid meet",viewBox:`0 0 ${e} ${r}`,onClick:V,id:m,$isDisplayOnly:d,children:s.jsx(F.default,{xScale:k.getLinearScale([0,e],[0,e]),yScale:k.getLinearScale([0,r],[r,0]),color:y,sources:f,selectedSource:l})})]})};C.displayName="Widgets.SourceSelector";exports.default=C;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("react/jsx-runtime"),o=require("react"),P=require("react-i18next"),R=require("@rubin-epo/epo-react-lib/IconComposer"),i=require("./widgets/SourceSelector/styles.cjs"),k=require("./widgets/SourceSelector/utilities.cjs"),T=require("./widgets/SourceSelector/Message/Message.cjs"),W=require("./widgets/SourceSelector/Points/Points.cjs"),F=e=>e&&e.__esModule?e:{default:e},G=F(R),C=({width:e=600,height:c=600,selectedSource:d=[],sources:f,alerts:r,images:_,selectionCallback:S,blinkConfig:b,color:h,isDisplayOnly:u=!1})=>{const[q,y]=o.useState(!1),[I,x]=o.useState(),[v,g]=o.useState(!1),[M,A]=o.useState(null),[B,L]=o.useState(0),{t:m}=P.useTranslation(),p="sourceSelectorWidget",j=(a,l,t)=>a.filter(n=>n.id===l&&n.type===t),V=a=>{if(q&&!u){const{target:l}=a,{id:t,type:n}=l.dataset;if(t&&n){if(!(j(d,t,n).length>0)){const E=j(f,t,n);S&&S(d.concat(E)),x(s.jsxs(s.Fragment,{children:[s.jsx(G.default,{icon:"checkmark"}),m("source_selector.messages.success")]})),g(!0)}}else x(m("source_selector.messages.failure")),g(!0)}},$=()=>{g(!1)},D=a=>{if(L(a),r&&r.length>1){const t=r[a].date-r[0].date;A({day:Math.round(t),hour:Math.round(24/t%24)||0})}};return s.jsxs(i.SourceSelectorContainer,{width:e,height:c,children:[!u&&s.jsx(T.default,{onMessageChangeCallback:$,isVisible:v,forIds:[p],children:I}),s.jsxs(i.BackgroundBlinker,{images:_,activeIndex:B,blinkCallback:D,loadedCallback:()=>{console.log("loaded"),y(!0)},...b,children:[M&&s.jsx(i.ElapsedDisplay,{...M}),s.jsx(i.SVG,{preserveAspectRatio:"xMidYMid meet",viewBox:`0 0 ${e} ${c}`,onClick:V,id:p,$isDisplayOnly:u,children:s.jsx(W.default,{xScale:k.getLinearScale([0,e],[0,e]),yScale:k.getLinearScale([0,c],[c,0]),color:h,sources:f,selectedSource:d})})]})]})};C.displayName="Widgets.SourceSelector";exports.default=C;
@@ -1,97 +1,98 @@
1
- import { jsxs as C, jsx as t, Fragment as _ } from "react/jsx-runtime";
2
- import { useState as r, useEffect as D } from "react";
3
- import { useTranslation as F } from "react-i18next";
4
- import G from "@rubin-epo/epo-react-lib/IconComposer";
5
- import { SourceSelectorContainer as N, BackgroundBlinker as P, ElapsedDisplay as R, SVG as T } from "./widgets/SourceSelector/styles.js";
1
+ import { jsxs as f, jsx as t, Fragment as W } from "react/jsx-runtime";
2
+ import { useState as a } from "react";
3
+ import { useTranslation as _ } from "react-i18next";
4
+ import D from "@rubin-epo/epo-react-lib/IconComposer";
5
+ import { SourceSelectorContainer as F, BackgroundBlinker as G, ElapsedDisplay as N, SVG as P } from "./widgets/SourceSelector/styles.js";
6
6
  import { getLinearScale as M } from "./widgets/SourceSelector/utilities.js";
7
- import Y from "./widgets/SourceSelector/Message/Message.js";
8
- import q from "./widgets/SourceSelector/Points/Points.js";
9
- const z = ({
10
- width: a = 600,
11
- height: c = 600,
12
- selectedSource: b = [],
13
- sources: u,
14
- alerts: n,
7
+ import R from "./widgets/SourceSelector/Message/Message.js";
8
+ import T from "./widgets/SourceSelector/Points/Points.js";
9
+ const Y = ({
10
+ width: n = 600,
11
+ height: r = 600,
12
+ selectedSource: i = [],
13
+ sources: g,
14
+ alerts: c,
15
15
  images: x,
16
- selectionCallback: m,
17
- blinkConfig: y,
18
- color: A,
16
+ selectionCallback: u,
17
+ blinkConfig: b,
18
+ color: y,
19
19
  isDisplayOnly: d = !1
20
20
  }) => {
21
- const [l, B] = r(b), [V, v] = r(!1), [E, g] = r(), [I, f] = r(!1), [S, L] = r(null), { t: p } = F(), h = "sourceSelectorWidget";
22
- D(() => {
23
- m && m(l);
24
- }, [l]);
25
- const k = (o, i, e) => o.filter((s) => s.id === i && s.type === e), $ = (o) => {
26
- if (V && !d) {
27
- const { target: i } = o, { id: e, type: s } = i.dataset;
28
- if (e && s) {
29
- if (!(k(l, e, s).length > 0)) {
30
- const j = k(u, e, s);
31
- B((W) => W.concat(j)), g(
32
- /* @__PURE__ */ C(_, { children: [
33
- /* @__PURE__ */ t(G, { icon: "checkmark" }),
34
- p("source_selector.messages.success")
21
+ const [I, A] = a(!1), [B, p] = a(), [v, m] = a(!1), [S, V] = a(null), [L, $] = a(0), { t: h } = _(), k = "sourceSelectorWidget", C = (s, l, e) => s.filter((o) => o.id === l && o.type === e), j = (s) => {
22
+ if (I && !d) {
23
+ const { target: l } = s, { id: e, type: o } = l.dataset;
24
+ if (e && o) {
25
+ if (!(C(i, e, o).length > 0)) {
26
+ const E = C(g, e, o);
27
+ u && u(i.concat(E)), p(
28
+ /* @__PURE__ */ f(W, { children: [
29
+ /* @__PURE__ */ t(D, { icon: "checkmark" }),
30
+ h("source_selector.messages.success")
35
31
  ] })
36
- ), f(!0);
32
+ ), m(!0);
37
33
  }
38
34
  } else
39
- g(p("source_selector.messages.failure")), f(!0);
35
+ p(h("source_selector.messages.failure")), m(!0);
40
36
  }
41
37
  };
42
- return /* @__PURE__ */ C(N, { width: a, height: c, children: [
38
+ return /* @__PURE__ */ f(F, { width: n, height: r, children: [
43
39
  !d && /* @__PURE__ */ t(
44
- Y,
40
+ R,
45
41
  {
46
42
  onMessageChangeCallback: () => {
47
- f(!1);
43
+ m(!1);
48
44
  },
49
- isVisible: I,
50
- forIds: [h],
51
- children: E
45
+ isVisible: v,
46
+ forIds: [k],
47
+ children: B
52
48
  }
53
49
  ),
54
- /* @__PURE__ */ t(
55
- P,
50
+ /* @__PURE__ */ f(
51
+ G,
56
52
  {
57
53
  images: x,
58
- blinkCallback: (o) => {
59
- if (n && n.length > 1) {
60
- const e = n[o].date - n[0].date;
61
- L({
54
+ activeIndex: L,
55
+ blinkCallback: (s) => {
56
+ if ($(s), c && c.length > 1) {
57
+ const e = c[s].date - c[0].date;
58
+ V({
62
59
  day: Math.round(e),
63
60
  hour: Math.round(24 / e % 24) || 0
64
61
  });
65
62
  }
66
63
  },
67
- loadedCallback: () => v(!0),
68
- ...y
69
- }
70
- ),
71
- S && /* @__PURE__ */ t(R, { ...S }),
72
- /* @__PURE__ */ t(
73
- T,
74
- {
75
- preserveAspectRatio: "xMidYMid meet",
76
- viewBox: `0 0 ${a} ${c}`,
77
- onClick: $,
78
- id: h,
79
- $isDisplayOnly: d,
80
- children: /* @__PURE__ */ t(
81
- q,
82
- {
83
- xScale: M([0, a], [0, a]),
84
- yScale: M([0, c], [c, 0]),
85
- color: A,
86
- sources: u,
87
- selectedSource: l
88
- }
89
- )
64
+ loadedCallback: () => {
65
+ console.log("loaded"), A(!0);
66
+ },
67
+ ...b,
68
+ children: [
69
+ S && /* @__PURE__ */ t(N, { ...S }),
70
+ /* @__PURE__ */ t(
71
+ P,
72
+ {
73
+ preserveAspectRatio: "xMidYMid meet",
74
+ viewBox: `0 0 ${n} ${r}`,
75
+ onClick: j,
76
+ id: k,
77
+ $isDisplayOnly: d,
78
+ children: /* @__PURE__ */ t(
79
+ T,
80
+ {
81
+ xScale: M([0, n], [0, n]),
82
+ yScale: M([0, r], [r, 0]),
83
+ color: y,
84
+ sources: g,
85
+ selectedSource: i
86
+ }
87
+ )
88
+ }
89
+ )
90
+ ]
90
91
  }
91
92
  )
92
93
  ] });
93
94
  };
94
- z.displayName = "Widgets.SourceSelector";
95
+ Y.displayName = "Widgets.SourceSelector";
95
96
  export {
96
- z as default
97
+ Y as default
97
98
  };
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=require("react/jsx-runtime"),n=require("react"),R=require("@rubin-epo/epo-react-lib/styles"),$=require("../../hooks/useInterval.cjs"),b=require("use-resize-observer"),u=require("./styles.cjs"),m=require("../../lib/utils.cjs"),P=e=>e&&e.__esModule?e:{default:e},z=P(b),v=({images:e=[],activeIndex:h=0,autoplay:p=!0,loop:_=!0,interval:g=200,blinkCallback:c,loadedCallback:d,className:q})=>{const{ref:y,width:S=1}=z.default(),[a,f]=n.useState(p),[s,x]=n.useState(h),[r,j]=n.useState(!1),{BREAK_MOBILE:C}=R.tokens,o=e.length>1,B=S<parseInt(C);n.useEffect(()=>{c&&c(s)},[s]),n.useEffect(()=>{r&&d&&d()},[r]);const I=(t=0)=>{const O=e.length-1;return m.getClampedArrayIndex(s+t,O)},k=()=>{if(o){const t=I(1);_===!1&&t===e.length-1&&l(),x(t)}},l=()=>{f(!1)},A=()=>{f(t=>!t)},E=()=>{l(),k()},M=()=>{l(),x(I(-1))};return $.default(k,o&&r&&a?g:null),i.jsxs(u.BlinkerContainer,{className:q,ref:y,children:[i.jsx(u.BlinkerImages,{loadedCallback:()=>j(!0),images:e,activeIndex:s,$isCondensed:B}),o&&i.jsx(u.BlinkerControls,{isDisabled:!r,playing:a,handleStartStop:A,handleNext:E,handlePrevious:M,$isCondensed:B})]})};v.displayName="Atomic.Blinker";const D=v;exports.default=D;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("react/jsx-runtime"),f=require("react"),P=require("../../hooks/useInterval.cjs"),l=require("./styles.cjs"),A=require("../../lib/utils.cjs"),g=({images:t=[],activeIndex:i=0,autoplay:h=!0,loop:p=!0,interval:y=200,blinkCallback:n,loadedCallback:u,className:S,children:j})=>{const[c,a]=f.useState(h),[d,q]=f.useState(!1),s=t.length>1,B=(e=0)=>{const v=t.length-1;return A.getClampedArrayIndex(i+e,v)},x=()=>{if(s){const e=B(1);p===!1&&e===t.length-1&&r(),n&&n(e)}},r=()=>{a(!1)},k=()=>{a(e=>!e)},I=()=>{r(),x()},m=()=>{r(),n&&n(B(-1))};return P.default(x,s&&d&&c?y:null),o.jsxs(l.BlinkerContainer,{className:S,children:[o.jsx(l.BlinkerImages,{loadedCallback:()=>{q(!0),u&&u()},images:t,activeIndex:i}),j,s&&o.jsx(l.BlinkerControls,{isDisabled:!d,playing:c,handleStartStop:k,handleNext:I,handlePrevious:m})]})};g.displayName="Atomic.Blinker";const M=g;exports.default=M;