siam-ui-utils 2.2.25 → 2.2.27

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 (137) hide show
  1. package/dist/CustomBootstrap.js +9 -0
  2. package/dist/CustomBootstrap.js.map +1 -0
  3. package/dist/CustomSelectInput.js +12 -0
  4. package/dist/CustomSelectInput.js.map +1 -0
  5. package/dist/IntlMessages.js +10 -0
  6. package/dist/IntlMessages.js.map +1 -0
  7. package/dist/assets/img/copiar.png.js +5 -0
  8. package/dist/assets/img/copiar.png.js.map +1 -0
  9. package/dist/assets/img/take-photo.png.js +5 -0
  10. package/dist/assets/img/take-photo.png.js.map +1 -0
  11. package/dist/bridges/with-router-bridge.js +14 -0
  12. package/dist/bridges/with-router-bridge.js.map +1 -0
  13. package/dist/constants.js +9 -0
  14. package/dist/constants.js.map +1 -0
  15. package/dist/copy-link/index.js +60 -0
  16. package/dist/copy-link/index.js.map +1 -0
  17. package/dist/custom-input/CustomInputCheckbox.js +36 -0
  18. package/dist/custom-input/CustomInputCheckbox.js.map +1 -0
  19. package/dist/custom-input/CustomInputRadio.js +43 -0
  20. package/dist/custom-input/CustomInputRadio.js.map +1 -0
  21. package/dist/dropzone/Dropzone.js +513 -0
  22. package/dist/dropzone/Dropzone.js.map +1 -0
  23. package/{src/dropzone/Input.tsx → dist/dropzone/Input.js} +77 -76
  24. package/dist/dropzone/Input.js.map +1 -0
  25. package/{src/dropzone/Layout.tsx → dist/dropzone/Layout.js} +50 -57
  26. package/dist/dropzone/Layout.js.map +1 -0
  27. package/dist/dropzone/Preview.js +117 -0
  28. package/dist/dropzone/Preview.js.map +1 -0
  29. package/dist/dropzone/SubmitButton.js +34 -0
  30. package/dist/dropzone/SubmitButton.js.map +1 -0
  31. package/dist/dropzone/assets/cancel.svg.js +5 -0
  32. package/dist/dropzone/assets/cancel.svg.js.map +1 -0
  33. package/dist/dropzone/assets/remove.svg.js +5 -0
  34. package/dist/dropzone/assets/remove.svg.js.map +1 -0
  35. package/dist/dropzone/assets/restart.svg.js +5 -0
  36. package/dist/dropzone/assets/restart.svg.js.map +1 -0
  37. package/dist/dropzone/utils.js +85 -0
  38. package/dist/dropzone/utils.js.map +1 -0
  39. package/dist/dropzone-uploader/dropzone-uploader-dni-digital/index.js +150 -0
  40. package/dist/dropzone-uploader/dropzone-uploader-dni-digital/index.js.map +1 -0
  41. package/dist/dropzone-uploader/index.js +136 -0
  42. package/dist/dropzone-uploader/index.js.map +1 -0
  43. package/dist/iconos/constants-svg.js +41 -0
  44. package/dist/iconos/constants-svg.js.map +1 -0
  45. package/dist/iconos/icon-button-svg.js +50 -0
  46. package/dist/iconos/icon-button-svg.js.map +1 -0
  47. package/dist/iconos/styled-icon.js +26 -0
  48. package/dist/iconos/styled-icon.js.map +1 -0
  49. package/dist/index.js +33 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/select/constants.js +8 -0
  52. package/dist/select/constants.js.map +1 -0
  53. package/dist/select/index.js +90 -0
  54. package/dist/select/index.js.map +1 -0
  55. package/dist/timer/index.js +60 -0
  56. package/dist/timer/index.js.map +1 -0
  57. package/dist/tomar-foto/index.js +62 -0
  58. package/dist/tomar-foto/index.js.map +1 -0
  59. package/dist/view-layout/button-editor.js +14 -0
  60. package/dist/view-layout/button-editor.js.map +1 -0
  61. package/dist/view-layout/constants.js +11 -0
  62. package/dist/view-layout/constants.js.map +1 -0
  63. package/dist/view-layout/editor-layer.js +28 -0
  64. package/dist/view-layout/editor-layer.js.map +1 -0
  65. package/dist/view-layout/index.js +53 -0
  66. package/dist/view-layout/index.js.map +1 -0
  67. package/dist/view-layout/slot-wrapper.js +39 -0
  68. package/dist/view-layout/slot-wrapper.js.map +1 -0
  69. package/dist/where-by-room/index.js +20 -0
  70. package/dist/where-by-room/index.js.map +1 -0
  71. package/dist/where-by-room/room.js +78 -0
  72. package/dist/where-by-room/room.js.map +1 -0
  73. package/package.json +69 -18
  74. package/eslint.config.mjs +0 -45
  75. package/index.html +0 -17
  76. package/src/App.css +0 -47
  77. package/src/App.jsx +0 -66
  78. package/src/CustomBootstrap.jsx +0 -10
  79. package/src/CustomSelectInput.jsx +0 -8
  80. package/src/IntlMessages.jsx +0 -7
  81. package/src/assets/css/sass/_gogo.style.scss +0 -8967
  82. package/src/assets/css/sass/_mixins.scss +0 -125
  83. package/src/assets/css/sass/_plugins.scss +0 -1
  84. package/src/assets/css/sass/ampf_style.scss +0 -185
  85. package/src/assets/css/sass/main.scss +0 -11
  86. package/src/assets/css/sass/plugins/react-table.scss +0 -314
  87. package/src/assets/css/sass/themes/gogo.light.redruby.scss +0 -41
  88. package/src/assets/css/sass/themes/variables.scss +0 -86
  89. package/src/assets/css/vendor/bootstrap.min.css +0 -6
  90. package/src/assets/css/vendor/bootstrap.rtl.only.min.css +0 -1428
  91. package/src/assets/img/copiar.png +0 -0
  92. package/src/assets/img/take-photo.png +0 -0
  93. package/src/bridges/index.js +0 -1
  94. package/src/bridges/with-router-bridge.jsx +0 -11
  95. package/src/constants.js +0 -7
  96. package/src/copy-link/index.jsx +0 -58
  97. package/src/copy-link/styles.scss +0 -39
  98. package/src/custom-input/CustomInputCheckbox.jsx +0 -33
  99. package/src/custom-input/CustomInputRadio.jsx +0 -37
  100. package/src/custom-input/index.css +0 -168
  101. package/src/custom-input/index.js +0 -2
  102. package/src/dropzone/Dropzone.tsx +0 -816
  103. package/src/dropzone/Preview.tsx +0 -139
  104. package/src/dropzone/SubmitButton.tsx +0 -47
  105. package/src/dropzone/assets/cancel.svg +0 -1
  106. package/src/dropzone/assets/remove.svg +0 -1
  107. package/src/dropzone/assets/restart.svg +0 -1
  108. package/src/dropzone/styles.css +0 -140
  109. package/src/dropzone/utils.ts +0 -113
  110. package/src/dropzone-uploader/dropzone-uploader-dni-digital/index.jsx +0 -151
  111. package/src/dropzone-uploader/dropzone-uploader.css +0 -66
  112. package/src/dropzone-uploader/index.jsx +0 -138
  113. package/src/iconos/constants-svg.js +0 -659
  114. package/src/iconos/icon-button-svg.jsx +0 -50
  115. package/src/iconos/index.js +0 -2
  116. package/src/iconos/styled-icon.jsx +0 -25
  117. package/src/index.css +0 -74
  118. package/src/index.js +0 -13
  119. package/src/main.jsx +0 -7
  120. package/src/select/constants.js +0 -4
  121. package/src/select/index.tsx +0 -147
  122. package/src/test-resources.jsx +0 -145
  123. package/src/timer/index.jsx +0 -62
  124. package/src/timer/styles.scss +0 -54
  125. package/src/tomar-foto/index.jsx +0 -69
  126. package/src/view-layout/button-editor.jsx +0 -18
  127. package/src/view-layout/constants.js +0 -7
  128. package/src/view-layout/editor-layer.jsx +0 -27
  129. package/src/view-layout/index.tsx +0 -62
  130. package/src/view-layout/item-slot.tsx +0 -20
  131. package/src/view-layout/slot-wrapper.tsx +0 -44
  132. package/src/view-layout/styles.scss +0 -143
  133. package/src/where-by-room/constants.js +0 -2
  134. package/src/where-by-room/index.jsx +0 -17
  135. package/src/where-by-room/room.jsx +0 -79
  136. package/tsconfig.json +0 -19
  137. package/vite.config.ts +0 -22
package/dist/index.js ADDED
@@ -0,0 +1,33 @@
1
+ import { CustomSelect } from "./select/index.js";
2
+ import { Colxx, Separator } from "./CustomBootstrap.js";
3
+ import { CustomSelectInput } from "./CustomSelectInput.js";
4
+ import { DropzoneUploader } from "./dropzone-uploader/index.js";
5
+ import { DropzoneUploaderDniDigital } from "./dropzone-uploader/dropzone-uploader-dni-digital/index.js";
6
+ import { TomarFoto } from "./tomar-foto/index.js";
7
+ import { CopyLink } from "./copy-link/index.js";
8
+ import { Timer, formatTiempo } from "./timer/index.js";
9
+ import { ViewLayout } from "./view-layout/index.js";
10
+ import { WhereByRoom } from "./where-by-room/index.js";
11
+ import * as IntlMessages from "./IntlMessages.js";
12
+ import { withRouter } from "./bridges/with-router-bridge.js";
13
+ import { CustomInputCheckbox } from "./custom-input/CustomInputCheckbox.js";
14
+ import { CustomInputRadio } from "./custom-input/CustomInputRadio.js";
15
+ export {
16
+ Colxx,
17
+ CopyLink,
18
+ CustomInputCheckbox,
19
+ CustomInputRadio,
20
+ CustomSelect,
21
+ CustomSelectInput,
22
+ DropzoneUploader,
23
+ DropzoneUploaderDniDigital,
24
+ IntlMessages,
25
+ Separator,
26
+ Timer,
27
+ TomarFoto,
28
+ ViewLayout,
29
+ WhereByRoom,
30
+ formatTiempo,
31
+ withRouter
32
+ };
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;"}
@@ -0,0 +1,8 @@
1
+ const LABELS = {
2
+ SIN_DATOS: "SIN DATOS",
3
+ SELECCIONE: "SELECCIONE..."
4
+ };
5
+ export {
6
+ LABELS
7
+ };
8
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sources":["../../src/select/constants.js"],"sourcesContent":["export const LABELS = {\r\n SIN_DATOS: \"SIN DATOS\",\r\n SELECCIONE: \"SELECCIONE...\",\r\n};\r\n"],"names":[],"mappings":"AAAY,MAAC,SAAS;AAAA,EACpB,WAAW;AAAA,EACX,YAAY;AACd;"}
@@ -0,0 +1,90 @@
1
+ import { jsxs, Fragment, jsx } from "react/jsx-runtime";
2
+ import { useState, useEffect } from "react";
3
+ import Select from "react-select";
4
+ import { Label } from "reactstrap";
5
+ import { CustomSelectInput } from "../CustomSelectInput.js";
6
+ import { LABELS } from "./constants.js";
7
+ import "react-tagsinput/react-tagsinput.css";
8
+ const { SIN_DATOS, SELECCIONE } = LABELS;
9
+ const CustomSelect = (props) => {
10
+ const [firstElement] = useState(props.firstElement);
11
+ const [newItem] = useState(props.newItem);
12
+ const [selectedIoption, setIoption] = useState({});
13
+ const [customStylesOption] = useState(props.customStylesOption);
14
+ const [customStyles, setCustomStyles] = useState({});
15
+ useEffect(() => {
16
+ if (newItem) {
17
+ props.options.push(newItem);
18
+ }
19
+ }, [newItem, props.options]);
20
+ useEffect(() => {
21
+ const { options = [] } = props;
22
+ if (firstElement && Number(options?.length) > 1) {
23
+ const propIOption = options.filter((item) => item === firstElement);
24
+ if (propIOption?.length === 0) {
25
+ props.options.unshift(firstElement);
26
+ }
27
+ }
28
+ }, [firstElement, props.options]);
29
+ useEffect(() => {
30
+ const { selectedValue } = props;
31
+ const errorProp = { value: null };
32
+ if (selectedValue || firstElement && firstElement.value === selectedValue) {
33
+ const propIOption = props.options.filter(({ value }) => {
34
+ return JSON.stringify(value) === JSON.stringify(selectedValue);
35
+ });
36
+ if (propIOption[0]) {
37
+ setIoption(propIOption[0]);
38
+ if (!Object.getOwnPropertyDescriptor(selectedIoption, "label")) {
39
+ props.onChange(propIOption[0]);
40
+ }
41
+ } else {
42
+ setIoption(errorProp);
43
+ props.onChange(errorProp);
44
+ }
45
+ } else if (props.options.length > 0) {
46
+ setIoption(errorProp);
47
+ props.onChange(errorProp);
48
+ }
49
+ }, [props.selectedValue, props.options, firstElement]);
50
+ useEffect(() => {
51
+ if (customStylesOption) {
52
+ const stylesOption = {
53
+ option: (base, { data }) => {
54
+ return {
55
+ ...base,
56
+ color: data.fields && data.fields[customStylesOption.fieldMatch] === customStylesOption.valueMatch ? "blue !important" : "",
57
+ fontWeight: data.fields && data.fields[customStylesOption.fieldMatch] === customStylesOption.valueMatch ? "bold" : ""
58
+ };
59
+ }
60
+ };
61
+ setCustomStyles(stylesOption);
62
+ }
63
+ }, [customStylesOption]);
64
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
65
+ props.label && props.label !== "" && /* @__PURE__ */ jsxs(Label, { className: "mb-0", children: [
66
+ props.label,
67
+ ":"
68
+ ] }),
69
+ /* @__PURE__ */ jsx(
70
+ Select,
71
+ {
72
+ ...props,
73
+ components: { Input: CustomSelectInput },
74
+ className: "react-select",
75
+ classNamePrefix: "react-select",
76
+ name: "form-field-name",
77
+ value: Object.getOwnPropertyDescriptor(selectedIoption, "label") ? selectedIoption : "",
78
+ onChange: props.onChange,
79
+ options: props.options,
80
+ placeholder: Number(props.options.length) === 0 ? SIN_DATOS : props.placeholder || SELECCIONE,
81
+ isDisabled: props.disabled,
82
+ styles: customStyles
83
+ }
84
+ )
85
+ ] });
86
+ };
87
+ export {
88
+ CustomSelect
89
+ };
90
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/select/index.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\r\nimport Select from 'react-select';\r\nimport { Label } from 'reactstrap';\r\nimport {CustomSelectInput} from '../CustomSelectInput';\r\nimport { LABELS } from './constants';\r\nimport 'react-tagsinput/react-tagsinput.css';\r\n\r\ninterface ICustomStylesOption {\r\n fieldMatch: string;\r\n valueMatch: any;\r\n}\r\ninterface IOption {\r\n label: string;\r\n value: any;\r\n fields?: any;\r\n}\r\ninterface IOption {\r\n label: string;\r\n value: any;\r\n fields?: any;\r\n}\r\ninterface Props {\r\n label: string;\r\n tabIndex: number;\r\n options: [IOption];\r\n onChange: any;\r\n selectedValue: any;\r\n firstElement?: IOption; // no ingresar null como VALUE del elemento, setear '' ya que lo toma como que no se selecciono nada\r\n newItem?: IOption;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n customStylesOption?: ICustomStylesOption;\r\n}\r\n\r\nconst {SIN_DATOS, SELECCIONE}=LABELS\r\n\r\nexport const CustomSelect: React.FC<Props> = (props: Props) => {\r\n const [firstElement] = useState(props.firstElement);\r\n const [newItem] = useState(props.newItem);\r\n const [selectedIoption, setIoption] = useState({});\r\n const [customStylesOption] = useState(props.customStylesOption);\r\n const [customStyles, setCustomStyles] = useState({});\r\n\r\n // agrega items\r\n useEffect(() => {\r\n if (newItem) {\r\n props.options.push(newItem);\r\n }\r\n }, [newItem, props.options]);\r\n\r\n // Seleccion del 1er item.\r\n useEffect(() => {\r\n const { options = [] } = props;\r\n if (firstElement && Number(options?.length) > 1) {\r\n const propIOption = options.filter((item) => item === firstElement);\r\n\r\n if (propIOption?.length === 0) {\r\n props.options.unshift(firstElement);\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [firstElement, props.options]);\r\n\r\n // selecciona un valor seteado dentro de la coleccion\r\n useEffect(() => {\r\n const { selectedValue } = props;\r\n const errorProp = { value: null };\r\n\r\n if (\r\n selectedValue ||\r\n (firstElement && firstElement.value === selectedValue)\r\n ) {\r\n const propIOption = props.options.filter(({ value }) => {\r\n return JSON.stringify(value) === JSON.stringify(selectedValue);\r\n });\r\n\r\n if (propIOption[0]) {\r\n setIoption(propIOption[0]);\r\n if (!Object.getOwnPropertyDescriptor(selectedIoption, 'label')) {\r\n props.onChange(propIOption[0]);\r\n }\r\n } else {\r\n setIoption(errorProp);\r\n props.onChange(errorProp);\r\n }\r\n } else if (props.options.length > 0) {\r\n setIoption(errorProp);\r\n props.onChange(errorProp);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [props.selectedValue, props.options, firstElement]);\r\n\r\n useEffect(() => {\r\n if (customStylesOption) {\r\n const stylesOption = {\r\n option: (base: any, { data }: any) => {\r\n return {\r\n ...base,\r\n color:\r\n data.fields &&\r\n data.fields[customStylesOption.fieldMatch] ===\r\n customStylesOption.valueMatch\r\n ? 'blue !important'\r\n : '',\r\n fontWeight:\r\n data.fields &&\r\n data.fields[customStylesOption.fieldMatch] ===\r\n customStylesOption.valueMatch\r\n ? 'bold'\r\n : '',\r\n };\r\n },\r\n };\r\n setCustomStyles(stylesOption);\r\n }\r\n }, [customStylesOption]);\r\n\r\n return (\r\n <>\r\n {props.label && props.label !== '' && (\r\n <Label className=\"mb-0\">{props.label}:</Label>\r\n )}\r\n <Select\r\n {...props}\r\n components={{ Input: CustomSelectInput }}\r\n className=\"react-select\"\r\n classNamePrefix=\"react-select\"\r\n name=\"form-field-name\"\r\n value={\r\n Object.getOwnPropertyDescriptor(selectedIoption, 'label')\r\n ? selectedIoption\r\n : ''\r\n }\r\n onChange={props.onChange}\r\n options={props.options}\r\n placeholder={\r\n Number(props.options.length) === 0\r\n ? SIN_DATOS\r\n : props.placeholder || SELECCIONE\r\n }\r\n isDisabled={props.disabled}\r\n styles={customStyles}\r\n />\r\n </>\r\n );\r\n};\r\n\r\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useState, useRef, useEffect } from "react";
3
+ import "./styles.scss";
4
+ const formatTiempo = (ms) => {
5
+ if (ms == null) return "--:--";
6
+ const absMs = Math.abs(ms);
7
+ const totalSec = Math.floor(absMs / 1e3);
8
+ const min = Math.floor(totalSec / 60);
9
+ const sec = totalSec % 60;
10
+ const formatted = `${min.toString().padStart(2, "0")}:${sec.toString().padStart(2, "0")}`;
11
+ return ms < 0 ? `-${formatted}` : formatted;
12
+ };
13
+ const getTimerColorClass = (ms, maxTime) => {
14
+ if (!maxTime) return "";
15
+ const percent = ms / maxTime;
16
+ if (percent > 0.33) return "timer-green";
17
+ if (percent > 0.15) return "timer-yellow";
18
+ if (percent > 0) return "timer-red";
19
+ if (ms === 0) return "timer-out";
20
+ if (ms < 0) return "timer-over";
21
+ return "";
22
+ };
23
+ const Timer = ({
24
+ initialMinutes = 0,
25
+ icon = true,
26
+ className = "",
27
+ active = true,
28
+ style = {}
29
+ }) => {
30
+ const initialMs = initialMinutes * 60 * 1e3;
31
+ const [ms, setMs] = useState(initialMs);
32
+ const intervalRef = useRef();
33
+ useEffect(() => {
34
+ if (!active) return;
35
+ intervalRef.current = setInterval(() => {
36
+ setMs((prev) => prev - 1e3);
37
+ }, 1e3);
38
+ return () => clearInterval(intervalRef.current);
39
+ }, [active]);
40
+ useEffect(() => {
41
+ setMs(initialMs);
42
+ }, [initialMs]);
43
+ const timerColorClass = getTimerColorClass(ms, initialMs);
44
+ return /* @__PURE__ */ jsxs(
45
+ "span",
46
+ {
47
+ className: `av-video-timer timer ${timerColorClass} ${className}`,
48
+ style,
49
+ children: [
50
+ icon && /* @__PURE__ */ jsx("i", { className: "icon-clock timer" }),
51
+ formatTiempo(ms)
52
+ ]
53
+ }
54
+ );
55
+ };
56
+ export {
57
+ Timer,
58
+ formatTiempo
59
+ };
60
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/timer/index.jsx"],"sourcesContent":["import { useEffect, useState, useRef } from 'react';\r\nimport './styles.scss';\r\n\r\nexport const formatTiempo = (ms) => {\r\n if (ms == null) return '--:--';\r\n const absMs = Math.abs(ms);\r\n const totalSec = Math.floor(absMs / 1000);\r\n const min = Math.floor(totalSec / 60);\r\n const sec = totalSec % 60;\r\n const formatted = `${min.toString().padStart(2, '0')}:${sec\r\n .toString()\r\n .padStart(2, '0')}`;\r\n return ms < 0 ? `-${formatted}` : formatted;\r\n};\r\n\r\nconst getTimerColorClass = (ms, maxTime) => {\r\n if (!maxTime) return '';\r\n const percent = ms / maxTime;\r\n if (percent > 0.33) return 'timer-green';\r\n if (percent > 0.15) return 'timer-yellow';\r\n if (percent > 0) return 'timer-red';\r\n if (ms === 0) return 'timer-out';\r\n if (ms < 0) return 'timer-over';\r\n return '';\r\n};\r\n\r\nconst Timer = ({\r\n initialMinutes = 0,\r\n icon = true,\r\n className = '',\r\n active = true,\r\n style = {},\r\n}) => {\r\n const initialMs = initialMinutes * 60 * 1000;\r\n const [ms, setMs] = useState(initialMs);\r\n const intervalRef = useRef();\r\n\r\n useEffect(() => {\r\n if (!active) return;\r\n intervalRef.current = setInterval(() => {\r\n setMs((prev) => prev - 1000);\r\n }, 1000);\r\n return () => clearInterval(intervalRef.current);\r\n }, [active]);\r\n\r\n useEffect(() => {\r\n setMs(initialMs);\r\n }, [initialMs]);\r\n\r\n const timerColorClass = getTimerColorClass(ms, initialMs);\r\n\r\n return (\r\n <span\r\n className={`av-video-timer timer ${timerColorClass} ${className}`}\r\n style={style}\r\n >\r\n {icon && <i className=\"icon-clock timer\" />}\r\n {formatTiempo(ms)}\r\n </span>\r\n );\r\n};\r\nexport { Timer };\r\n"],"names":[],"mappings":";;;AAGO,MAAM,eAAe,CAAC,OAAO;AAClC,MAAI,MAAM,KAAM,QAAO;AACvB,QAAM,QAAQ,KAAK,IAAI,EAAE;AACzB,QAAM,WAAW,KAAK,MAAM,QAAQ,GAAI;AACxC,QAAM,MAAM,KAAK,MAAM,WAAW,EAAE;AACpC,QAAM,MAAM,WAAW;AACvB,QAAM,YAAY,GAAG,IAAI,SAAA,EAAW,SAAS,GAAG,GAAG,CAAC,IAAI,IACrD,SAAA,EACA,SAAS,GAAG,GAAG,CAAC;AACnB,SAAO,KAAK,IAAI,IAAI,SAAS,KAAK;AACpC;AAEA,MAAM,qBAAqB,CAAC,IAAI,YAAY;AAC1C,MAAI,CAAC,QAAS,QAAO;AACrB,QAAM,UAAU,KAAK;AACrB,MAAI,UAAU,KAAM,QAAO;AAC3B,MAAI,UAAU,KAAM,QAAO;AAC3B,MAAI,UAAU,EAAG,QAAO;AACxB,MAAI,OAAO,EAAG,QAAO;AACrB,MAAI,KAAK,EAAG,QAAO;AACnB,SAAO;AACT;AAEA,MAAM,QAAQ,CAAC;AAAA,EACb,iBAAiB;AAAA,EACjB,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,QAAQ,CAAA;AACV,MAAM;AACJ,QAAM,YAAY,iBAAiB,KAAK;AACxC,QAAM,CAAC,IAAI,KAAK,IAAI,SAAS,SAAS;AACtC,QAAM,cAAc,OAAA;AAEpB,YAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AACb,gBAAY,UAAU,YAAY,MAAM;AACtC,YAAM,CAAC,SAAS,OAAO,GAAI;AAAA,IAC7B,GAAG,GAAI;AACP,WAAO,MAAM,cAAc,YAAY,OAAO;AAAA,EAChD,GAAG,CAAC,MAAM,CAAC;AAEX,YAAU,MAAM;AACd,UAAM,SAAS;AAAA,EACjB,GAAG,CAAC,SAAS,CAAC;AAEd,QAAM,kBAAkB,mBAAmB,IAAI,SAAS;AAExD,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,wBAAwB,eAAe,IAAI,SAAS;AAAA,MAC/D;AAAA,MAEC,UAAA;AAAA,QAAA,QAAQ,oBAAC,KAAA,EAAE,WAAU,mBAAA,CAAmB;AAAA,QACxC,aAAa,EAAE;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGtB;"}
@@ -0,0 +1,62 @@
1
+ import { jsxs, Fragment, jsx } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { Row } from "reactstrap";
4
+ import { TAKE_PHOTO } from "../constants.js";
5
+ import imgHacerFoto from "../assets/img/take-photo.png.js";
6
+ import { Colxx } from "../CustomBootstrap.js";
7
+ import { DropzoneUploader } from "../dropzone-uploader/index.js";
8
+ const TomarFoto = ({
9
+ onFilesSelectedSelfie = () => {
10
+ },
11
+ isMobile = false
12
+ }) => {
13
+ const [filesTotalSelectedSelfie, setTotalFilesSelectedSelfie] = useState(0);
14
+ const {
15
+ LOAD_SELFIE_WITH_IDENTITY_CARD_MESSAGE,
16
+ MESSAGE_SELFIE_ONLY_CAN_TAKE_FROM_CELLPHONE,
17
+ TAKE_PHOTO_MESSAGE
18
+ } = TAKE_PHOTO;
19
+ const handleFilesSelectedSelfie = (files) => {
20
+ setTotalFilesSelectedSelfie(files.length);
21
+ onFilesSelectedSelfie(files);
22
+ };
23
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
24
+ /* @__PURE__ */ jsx(Row, { className: "pt-2 ml-4", children: /* @__PURE__ */ jsx(Colxx, { xxs: "11", md: "5", children: LOAD_SELFIE_WITH_IDENTITY_CARD_MESSAGE }) }),
25
+ /* @__PURE__ */ jsx(Row, { className: "pt-2 ml-2", children: /* @__PURE__ */ jsx(Colxx, { xxs: "12", md: "9", children: isMobile ? /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(Colxx, { xxs: "12", className: "text-center", children: [
26
+ filesTotalSelectedSelfie === 0 && /* @__PURE__ */ jsx(
27
+ "img",
28
+ {
29
+ style: { width: "97%" },
30
+ alt: "hacerFotoDNI",
31
+ src: imgHacerFoto
32
+ }
33
+ ),
34
+ /* @__PURE__ */ jsx(
35
+ DropzoneUploader,
36
+ {
37
+ className: "pt-2 ml-2",
38
+ maxFiles: 1,
39
+ onChangeFiles: handleFilesSelectedSelfie,
40
+ totalFiles: filesTotalSelectedSelfie,
41
+ accept: "image/jpg,image/jpeg",
42
+ capture: "environment",
43
+ nameFileLabel: TAKE_PHOTO_MESSAGE
44
+ }
45
+ )
46
+ ] }) }) : /* @__PURE__ */ jsx(
47
+ "h2",
48
+ {
49
+ className: "view-icon iconsminds-smartphone-4 ml-2 mr-2",
50
+ style: {
51
+ color: "red",
52
+ margin: "10px 10px 0px 10px"
53
+ },
54
+ children: MESSAGE_SELFIE_ONLY_CAN_TAKE_FROM_CELLPHONE
55
+ }
56
+ ) }) })
57
+ ] });
58
+ };
59
+ export {
60
+ TomarFoto
61
+ };
62
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/tomar-foto/index.jsx"],"sourcesContent":["import { useState } from 'react';\r\nimport { Row } from 'reactstrap';\r\nimport { DropzoneUploader, Colxx } from '../';\r\nimport { TAKE_PHOTO } from '../constants';\r\nimport imgHacerFoto from '../assets/img/take-photo.png';\r\n\r\n \r\nexport const TomarFoto = ({\r\n onFilesSelectedSelfie = () => {},\r\n isMobile = false,\r\n}) => {\r\n const [filesTotalSelectedSelfie, setTotalFilesSelectedSelfie] = useState(0);\r\n const {\r\n LOAD_SELFIE_WITH_IDENTITY_CARD_MESSAGE,\r\n MESSAGE_SELFIE_ONLY_CAN_TAKE_FROM_CELLPHONE,\r\n TAKE_PHOTO_MESSAGE,\r\n } = TAKE_PHOTO;\r\n\r\n const handleFilesSelectedSelfie = (files) => {\r\n setTotalFilesSelectedSelfie(files.length);\r\n onFilesSelectedSelfie(files);\r\n };\r\n\r\n return (\r\n <>\r\n <Row className=\"pt-2 ml-4\">\r\n <Colxx xxs=\"11\" md=\"5\">\r\n {LOAD_SELFIE_WITH_IDENTITY_CARD_MESSAGE}\r\n </Colxx>\r\n </Row>\r\n <Row className=\"pt-2 ml-2\">\r\n <Colxx xxs=\"12\" md=\"9\">\r\n {isMobile ? (\r\n <>\r\n <Colxx xxs=\"12\" className=\"text-center\">\r\n {filesTotalSelectedSelfie === 0 && (\r\n <img\r\n style={{ width: '97%' }}\r\n alt=\"hacerFotoDNI\"\r\n src={imgHacerFoto}\r\n />\r\n )}\r\n <DropzoneUploader\r\n className=\"pt-2 ml-2\"\r\n maxFiles={1}\r\n onChangeFiles={handleFilesSelectedSelfie}\r\n totalFiles={filesTotalSelectedSelfie}\r\n accept=\"image/jpg,image/jpeg\"\r\n capture=\"environment\"\r\n nameFileLabel={TAKE_PHOTO_MESSAGE}\r\n />\r\n </Colxx>\r\n </>\r\n ) : (\r\n <h2\r\n className={'view-icon iconsminds-smartphone-4 ml-2 mr-2'}\r\n style={{\r\n color: 'red',\r\n margin: '10px 10px 0px 10px',\r\n }}\r\n >\r\n {MESSAGE_SELFIE_ONLY_CAN_TAKE_FROM_CELLPHONE}\r\n </h2>\r\n )}\r\n </Colxx>\r\n </Row>\r\n </>\r\n );\r\n};\r\n"],"names":[],"mappings":";;;;;;;AAOO,MAAM,YAAY,CAAC;AAAA,EACxB,wBAAwB,MAAM;AAAA,EAAC;AAAA,EAC/B,WAAW;AACb,MAAM;AACJ,QAAM,CAAC,0BAA0B,2BAA2B,IAAI,SAAS,CAAC;AAC1E,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AAEJ,QAAM,4BAA4B,CAAC,UAAU;AAC3C,gCAA4B,MAAM,MAAM;AACxC,0BAAsB,KAAK;AAAA,EAC7B;AAEA,SACE,qBAAA,UAAA,EACE,UAAA;AAAA,IAAA,oBAAC,KAAA,EAAI,WAAU,aACb,UAAA,oBAAC,OAAA,EAAM,KAAI,MAAK,IAAG,KAChB,UAAA,uCAAA,CACH,GACF;AAAA,wBACC,KAAA,EAAI,WAAU,aACb,UAAA,oBAAC,SAAM,KAAI,MAAK,IAAG,KAChB,qBACC,oBAAA,UAAA,EACE,UAAA,qBAAC,SAAM,KAAI,MAAK,WAAU,eACvB,UAAA;AAAA,MAAA,6BAA6B,KAC5B;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO,EAAE,OAAO,MAAA;AAAA,UAChB,KAAI;AAAA,UACJ,KAAK;AAAA,QAAA;AAAA,MAAA;AAAA,MAGT;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,UAAU;AAAA,UACV,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,QAAO;AAAA,UACP,SAAQ;AAAA,UACR,eAAe;AAAA,QAAA;AAAA,MAAA;AAAA,IACjB,EAAA,CACF,GACF,IAEA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,QACX,OAAO;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,QAAA;AAAA,QAGT,UAAA;AAAA,MAAA;AAAA,IAAA,GAGP,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}
@@ -0,0 +1,14 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import "./styles.scss";
3
+ const ButtonEditor = ({ activo, onClick }) => /* @__PURE__ */ jsx(
4
+ "button",
5
+ {
6
+ className: `visualizador-editor-btn ${activo ? "visualizador-editor-btn--activo" : "visualizador-editor-btn--inactivo"}`,
7
+ onClick,
8
+ children: /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx("i", { className: "icon-eye simple-icon-eye" }) })
9
+ }
10
+ );
11
+ export {
12
+ ButtonEditor as default
13
+ };
14
+ //# sourceMappingURL=button-editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button-editor.js","sources":["../../src/view-layout/button-editor.jsx"],"sourcesContent":["import './styles.scss';\r\n\r\nconst ButtonEditor = ({ activo, onClick }) => (\r\n <button\r\n className={`visualizador-editor-btn ${\r\n activo\r\n ? 'visualizador-editor-btn--activo'\r\n : 'visualizador-editor-btn--inactivo'\r\n }`}\r\n onClick={onClick}\r\n >\r\n <span>\r\n <i className=\"icon-eye simple-icon-eye\" />\r\n </span>\r\n </button>\r\n);\r\n\r\nexport default ButtonEditor;\r\n"],"names":[],"mappings":";;AAEA,MAAM,eAAe,CAAC,EAAE,QAAQ,cAC9B;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAW,2BACT,SACI,oCACA,mCACN;AAAA,IACA;AAAA,IAEA,8BAAC,QAAA,EACC,UAAA,oBAAC,KAAA,EAAE,WAAU,4BAA2B,EAAA,CAC1C;AAAA,EAAA;AACF;"}
@@ -0,0 +1,11 @@
1
+ const GRID_SIZES = {
2
+ sm: { cols: 18, rows: 18 },
3
+ md: { cols: 12, rows: 12 },
4
+ lg: { cols: 6, rows: 6 }
5
+ };
6
+ const LOCALHOST = ["localhost", "127.0.0.1"];
7
+ export {
8
+ GRID_SIZES,
9
+ LOCALHOST
10
+ };
11
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sources":["../../src/view-layout/constants.js"],"sourcesContent":["export const GRID_SIZES = {\r\n sm: { cols: 18, rows: 18 },\r\n md: { cols: 12, rows: 12 },\r\n lg: { cols: 6, rows: 6 },\r\n};\r\n\r\nexport const LOCALHOST = ['localhost', '127.0.0.1'];\r\n"],"names":[],"mappings":"AAAY,MAAC,aAAa;AAAA,EACxB,IAAI,EAAE,MAAM,IAAI,MAAM,GAAE;AAAA,EACxB,IAAI,EAAE,MAAM,IAAI,MAAM,GAAE;AAAA,EACxB,IAAI,EAAE,MAAM,GAAG,MAAM,EAAC;AACxB;AAEY,MAAC,YAAY,CAAC,aAAa,WAAW;"}
@@ -0,0 +1,28 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import "./styles.scss";
3
+ const EditorLayer = ({ gridCols, gridRows }) => {
4
+ return /* @__PURE__ */ jsx(
5
+ "div",
6
+ {
7
+ className: "editor-layer",
8
+ style: {
9
+ gridTemplateColumns: `repeat(${gridCols}, 1fr)`,
10
+ gridTemplateRows: `repeat(${gridRows}, 1fr)`
11
+ },
12
+ children: Array.from({ length: gridRows * gridCols }).map((_, idx) => {
13
+ const x = idx % gridCols;
14
+ const y = Math.floor(idx / gridCols);
15
+ return /* @__PURE__ */ jsx("div", { className: "editor-layer-cell", children: /* @__PURE__ */ jsxs("div", { className: "editor-layer-cell-coord", children: [
16
+ "x:",
17
+ x,
18
+ ";y:",
19
+ y
20
+ ] }) }, `cell-${x}-${y}`);
21
+ })
22
+ }
23
+ );
24
+ };
25
+ export {
26
+ EditorLayer as default
27
+ };
28
+ //# sourceMappingURL=editor-layer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-layer.js","sources":["../../src/view-layout/editor-layer.jsx"],"sourcesContent":["import './styles.scss';\r\n\r\nconst EditorLayer = ({ gridCols, gridRows }) => {\r\n return (\r\n <div\r\n className=\"editor-layer\"\r\n style={{\r\n gridTemplateColumns: `repeat(${gridCols}, 1fr)`,\r\n gridTemplateRows: `repeat(${gridRows}, 1fr)`,\r\n }}\r\n >\r\n {Array.from({ length: gridRows * gridCols }).map((_, idx) => {\r\n const x = idx % gridCols;\r\n const y = Math.floor(idx / gridCols);\r\n return (\r\n <div key={`cell-${x}-${y}`} className=\"editor-layer-cell\">\r\n <div className=\"editor-layer-cell-coord\">\r\n x:{x};y:{y}\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n};\r\n\r\nexport default EditorLayer;\r\n"],"names":[],"mappings":";;AAEA,MAAM,cAAc,CAAC,EAAE,UAAU,eAAe;AAC9C,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO;AAAA,QACL,qBAAqB,UAAU,QAAQ;AAAA,QACvC,kBAAkB,UAAU,QAAQ;AAAA,MAAA;AAAA,MAGrC,UAAA,MAAM,KAAK,EAAE,QAAQ,WAAW,SAAA,CAAU,EAAE,IAAI,CAAC,GAAG,QAAQ;AAC3D,cAAM,IAAI,MAAM;AAChB,cAAM,IAAI,KAAK,MAAM,MAAM,QAAQ;AACnC,mCACG,OAAA,EAA2B,WAAU,qBACpC,UAAA,qBAAC,OAAA,EAAI,WAAU,2BAA0B,UAAA;AAAA,UAAA;AAAA,UACpC;AAAA,UAAE;AAAA,UAAI;AAAA,QAAA,EAAA,CACX,EAAA,GAHQ,QAAQ,CAAC,IAAI,CAAC,EAIxB;AAAA,MAEJ,CAAC;AAAA,IAAA;AAAA,EAAA;AAGP;"}
@@ -0,0 +1,53 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useState, createElement } from "react";
3
+ import SlotWrapper from "./slot-wrapper.js";
4
+ import EditorLayer from "./editor-layer.js";
5
+ import { GRID_SIZES, LOCALHOST } from "./constants.js";
6
+ import ButtonEditor from "./button-editor.js";
7
+ import "./styles.scss";
8
+ const ViewLayout = ({
9
+ slots = [],
10
+ size = "md",
11
+ alto = 80,
12
+ ancho = 90,
13
+ server = window?.location?.hostname,
14
+ ...props
15
+ }) => {
16
+ const isLocalhost = LOCALHOST.includes(server);
17
+ const [isEditorActivo, setEditorActivo] = useState(false);
18
+ const gridCols = GRID_SIZES[size].cols;
19
+ const gridRows = GRID_SIZES[size].rows;
20
+ return /* @__PURE__ */ jsxs("div", { className: "visualizador-container", children: [
21
+ isLocalhost && /* @__PURE__ */ jsx(
22
+ ButtonEditor,
23
+ {
24
+ activo: isEditorActivo,
25
+ onClick: () => setEditorActivo((prev) => !prev)
26
+ }
27
+ ),
28
+ /* @__PURE__ */ jsxs(
29
+ "div",
30
+ {
31
+ className: "visualizador-grid-css",
32
+ style: {
33
+ maxWidth: `${ancho}vw`,
34
+ height: `${alto}vh`,
35
+ gridTemplateColumns: `repeat(${gridCols}, 1fr)`,
36
+ gridTemplateRows: `repeat(${gridRows}, 1fr)`
37
+ },
38
+ ...props,
39
+ children: [
40
+ isEditorActivo && /* @__PURE__ */ jsx(EditorLayer, { gridCols, gridRows }),
41
+ slots.map((slot) => {
42
+ const { x, y, w, h, legend } = slot;
43
+ return /* @__PURE__ */ createElement(SlotWrapper, { ...slot, legend, key: slot.slot });
44
+ })
45
+ ]
46
+ }
47
+ )
48
+ ] });
49
+ };
50
+ export {
51
+ ViewLayout
52
+ };
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/view-layout/index.tsx"],"sourcesContent":["import React, { FC, useState } from 'react';\r\nimport SlotWrapper from './slot-wrapper';\r\nimport { ItemSlot } from './item-slot';\r\nimport EditorLayer from './editor-layer.jsx';\r\nimport { GRID_SIZES, LOCALHOST } from './constants';\r\nimport ButtonEditor from './button-editor.jsx';\r\nimport './styles.scss';\r\n\r\ninterface LayoutProps {\r\n slots: ItemSlot[];\r\n alto?: number;\r\n ancho?: number;\r\n size?: 'sm' | 'md' | 'lg';\r\n [key: string]: any;\r\n}\r\n\r\nconst ViewLayout: FC<LayoutProps> = ({\r\n slots = [],\r\n size = 'md',\r\n alto = 80,\r\n ancho = 90,\r\n server = window?.location?.hostname,\r\n ...props\r\n}) => {\r\n \r\n const isLocalhost=LOCALHOST.includes(server);\r\n\r\n const [isEditorActivo, setEditorActivo] = useState(false);\r\n const gridCols = GRID_SIZES[size].cols;\r\n const gridRows = GRID_SIZES[size].rows;\r\n return (\r\n <div className=\"visualizador-container\">\r\n {isLocalhost && (\r\n <ButtonEditor\r\n activo={isEditorActivo}\r\n onClick={() => setEditorActivo((prev) => !prev)}\r\n />\r\n )}\r\n\r\n <div\r\n className=\"visualizador-grid-css\"\r\n style={{\r\n maxWidth: `${ancho}vw`,\r\n height: `${alto}vh`,\r\n gridTemplateColumns: `repeat(${gridCols}, 1fr)`,\r\n gridTemplateRows: `repeat(${gridRows}, 1fr)`,\r\n }}\r\n {...props}\r\n >\r\n {isEditorActivo && (\r\n <EditorLayer gridCols={gridCols} gridRows={gridRows} />\r\n )}\r\n {slots.map((slot) => {\r\n const { x, y, w, h, legend } = slot;\r\n return <SlotWrapper {...slot} legend={legend} key={slot.slot} />;\r\n })}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport { ViewLayout };\r\n"],"names":[],"mappings":";;;;;;;AAgBA,MAAM,aAA8B,CAAC;AAAA,EACnC,QAAQ,CAAA;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS,QAAQ,UAAU;AAAA,EAC3B,GAAG;AACL,MAAM;AAEJ,QAAM,cAAY,UAAU,SAAS,MAAM;AAE3C,QAAM,CAAC,gBAAgB,eAAe,IAAI,SAAS,KAAK;AACxD,QAAM,WAAW,WAAW,IAAI,EAAE;AAClC,QAAM,WAAW,WAAW,IAAI,EAAE;AAClC,SACE,qBAAC,OAAA,EAAI,WAAU,0BACZ,UAAA;AAAA,IAAA,eACC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,QAAQ;AAAA,QACR,SAAS,MAAM,gBAAgB,CAAC,SAAS,CAAC,IAAI;AAAA,MAAA;AAAA,IAAA;AAAA,IAIlD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO;AAAA,UACL,UAAU,GAAG,KAAK;AAAA,UAClB,QAAQ,GAAG,IAAI;AAAA,UACf,qBAAqB,UAAU,QAAQ;AAAA,UACvC,kBAAkB,UAAU,QAAQ;AAAA,QAAA;AAAA,QAErC,GAAG;AAAA,QAEH,UAAA;AAAA,UAAA,kBACC,oBAAC,aAAA,EAAY,UAAoB,SAAA,CAAoB;AAAA,UAEtD,MAAM,IAAI,CAAC,SAAS;AACnB,kBAAM,EAAE,GAAG,GAAG,GAAG,GAAG,WAAW;AAC/B,iDAAQ,aAAA,EAAa,GAAG,MAAM,QAAgB,KAAK,KAAK,MAAM;AAAA,UAChE,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GACF;AAEJ;"}
@@ -0,0 +1,39 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ const SlotWrapper = ({
3
+ slot = 1,
4
+ component = null,
5
+ x = 0,
6
+ y = 0,
7
+ w = 2,
8
+ h = 2,
9
+ align = "stretch",
10
+ contentSize = "medium",
11
+ direction = "column",
12
+ justify = "flex-start",
13
+ legend,
14
+ showBorder = false
15
+ }) => {
16
+ return /* @__PURE__ */ jsxs(
17
+ "fieldset",
18
+ {
19
+ className: `visualizador-slot visualizador-slot-content--${contentSize} visualizador-slot--${direction} visualizador-slot-align--${align} visualizador-slot-justify--${justify} ` + (!showBorder ? "visualizador-slot--no-border" : ""),
20
+ style: {
21
+ position: "relative",
22
+ gridColumn: `${x + 1} / span ${w}`,
23
+ gridRow: `${y + 1} / span ${h}`,
24
+ display: "flex",
25
+ overflow: "hidden",
26
+ border: showBorder ? void 0 : "none"
27
+ },
28
+ children: [
29
+ /* @__PURE__ */ jsx("legend", { className: "slot-legend", children: legend }),
30
+ /* @__PURE__ */ jsx("div", { className: "slot-content", children: component })
31
+ ]
32
+ },
33
+ slot
34
+ );
35
+ };
36
+ export {
37
+ SlotWrapper as default
38
+ };
39
+ //# sourceMappingURL=slot-wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slot-wrapper.js","sources":["../../src/view-layout/slot-wrapper.tsx"],"sourcesContent":["import React, { FC } from 'react';\r\nimport { ItemSlot } from './item-slot';\r\n\r\nconst SlotWrapper: FC<ItemSlot> = ({\r\n slot = 1,\r\n component = null,\r\n x = 0,\r\n y = 0,\r\n w = 2,\r\n h = 2,\r\n align = 'stretch',\r\n contentSize = 'medium',\r\n direction = 'column',\r\n justify = 'flex-start',\r\n legend,\r\n showBorder = false,\r\n}) => {\r\n return (\r\n <fieldset\r\n key={slot}\r\n className={\r\n `visualizador-slot ` +\r\n `visualizador-slot-content--${contentSize} ` +\r\n `visualizador-slot--${direction} ` +\r\n `visualizador-slot-align--${align} ` +\r\n `visualizador-slot-justify--${justify} ` +\r\n (!showBorder ? 'visualizador-slot--no-border' : '')\r\n }\r\n style={{\r\n position: 'relative',\r\n gridColumn: `${x + 1} / span ${w}`,\r\n gridRow: `${y + 1} / span ${h}`,\r\n display: 'flex',\r\n overflow: 'hidden',\r\n border: showBorder ? undefined : 'none',\r\n }}\r\n >\r\n <legend className=\"slot-legend\">{legend}</legend>\r\n <div className=\"slot-content\">{component}</div>\r\n </fieldset>\r\n );\r\n};\r\n\r\nexport default SlotWrapper;\r\n"],"names":[],"mappings":";AAGA,MAAM,cAA4B,CAAC;AAAA,EACjC,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,UAAU;AAAA,EACV;AAAA,EACA,aAAa;AACf,MAAM;AACJ,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,WACE,gDAC8B,WAAW,uBACnB,SAAS,6BACH,KAAK,+BACH,OAAO,OACpC,CAAC,aAAa,iCAAiC;AAAA,MAElD,OAAO;AAAA,QACL,UAAU;AAAA,QACV,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC;AAAA,QAChC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC;AAAA,QAC7B,SAAS;AAAA,QACT,UAAU;AAAA,QACV,QAAQ,aAAa,SAAY;AAAA,MAAA;AAAA,MAGnC,UAAA;AAAA,QAAA,oBAAC,UAAA,EAAO,WAAU,eAAe,UAAA,QAAO;AAAA,QACxC,oBAAC,OAAA,EAAI,WAAU,gBAAgB,UAAA,UAAA,CAAU;AAAA,MAAA;AAAA,IAAA;AAAA,IAnBpC;AAAA,EAAA;AAsBX;"}
@@ -0,0 +1,20 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { WherebyProvider } from "@whereby.com/browser-sdk/react";
3
+ import "@whereby.com/browser-sdk/embed";
4
+ import { Room } from "./room.js";
5
+ const WhereByRoom = ({ src, onEvent, onActions, iframeClass }) => {
6
+ return /* @__PURE__ */ jsx(WherebyProvider, { children: /* @__PURE__ */ jsx(
7
+ Room,
8
+ {
9
+ src,
10
+ onEvent,
11
+ onActions,
12
+ iframeClass
13
+ }
14
+ ) });
15
+ };
16
+ export {
17
+ WhereByRoom,
18
+ WhereByRoom as default
19
+ };
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/where-by-room/index.jsx"],"sourcesContent":["import { WherebyProvider } from '@whereby.com/browser-sdk/react';\r\nimport '@whereby.com/browser-sdk/embed';\r\nimport Room from './room';\r\n\r\nexport const WhereByRoom = ({ src, onEvent, onActions, iframeClass }) => {\r\n return (\r\n <WherebyProvider>\r\n <Room\r\n src={src}\r\n onEvent={onEvent}\r\n onActions={onActions}\r\n iframeClass={iframeClass}\r\n />\r\n </WherebyProvider>\r\n );\r\n};\r\nexport default WhereByRoom;\r\n"],"names":[],"mappings":";;;;AAIO,MAAM,cAAc,CAAC,EAAE,KAAK,SAAS,WAAW,kBAAkB;AACvE,6BACG,iBAAA,EACC,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;"}
@@ -0,0 +1,78 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { useRef, useEffect } from "react";
3
+ import "@whereby.com/browser-sdk/embed";
4
+ const Room = ({ src, onEvent, onActions, iframeClass }) => {
5
+ const wherebyRef = useRef(null);
6
+ useEffect(() => {
7
+ const elm = wherebyRef.current;
8
+ if (!elm) return;
9
+ if (onActions) {
10
+ onActions({
11
+ endMeeting: () => elm.endMeeting(),
12
+ knock: () => elm.knock(),
13
+ cancelKnock: () => elm.cancelKnock(),
14
+ leaveRoom: () => elm.leaveRoom(),
15
+ startRecording: () => elm.startRecording(),
16
+ stopRecording: () => elm.stopRecording(),
17
+ startStreaming: () => elm.startStreaming(),
18
+ stopStreaming: () => elm.stopStreaming(),
19
+ startLiveTranscription: () => elm.startLiveTranscription(),
20
+ stopLiveTranscription: () => elm.stopLiveTranscription(),
21
+ toggleCamera: (enabled) => elm.toggleCamera(enabled),
22
+ toggleMicrophone: (enabled) => elm.toggleMicrophone(enabled),
23
+ toggleScreenshare: (enabled) => elm.toggleScreenshare(enabled),
24
+ toggleChat: (enabled) => elm.toggleChat(enabled)
25
+ });
26
+ }
27
+ const events = [
28
+ "ready",
29
+ "grant_device_permission",
30
+ "deny_device_permission",
31
+ "precall_check_completed",
32
+ "precall_check_skipped",
33
+ "knock",
34
+ "cancel_knock",
35
+ "join",
36
+ "leave",
37
+ "meeting_end",
38
+ "participantupdate",
39
+ "participant_join",
40
+ "participant_leave",
41
+ "microphone_toggle",
42
+ "camera_toggle",
43
+ "screenshare_toggle",
44
+ "chat_toggle",
45
+ "people_toggle",
46
+ "pip_toggle",
47
+ "streaming_status_change",
48
+ "recording_status_change",
49
+ "transcription_status_change",
50
+ "connection_status_change"
51
+ ];
52
+ function handleEvent(e) {
53
+ if (onEvent) onEvent(e.type, e.detail);
54
+ }
55
+ events.forEach((ev) => elm.addEventListener(ev, handleEvent));
56
+ return () => {
57
+ events.forEach((ev) => elm.removeEventListener(ev, handleEvent));
58
+ };
59
+ }, [onEvent, onActions]);
60
+ return /* @__PURE__ */ jsx("div", { className: iframeClass, children: /* @__PURE__ */ jsx(
61
+ "whereby-embed",
62
+ {
63
+ ref: wherebyRef,
64
+ class: iframeClass,
65
+ room: src,
66
+ chat: "on",
67
+ screenshare: "on",
68
+ audio: "on",
69
+ video: "on",
70
+ allow: "camera; microphone; fullscreen"
71
+ }
72
+ ) });
73
+ };
74
+ export {
75
+ Room,
76
+ Room as default
77
+ };
78
+ //# sourceMappingURL=room.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room.js","sources":["../../src/where-by-room/room.jsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\r\nimport '@whereby.com/browser-sdk/embed';\r\n\r\nexport const Room = ({ src, onEvent, onActions, iframeClass }) => {\r\n const wherebyRef = useRef(null);\r\n\r\n useEffect(() => {\r\n const elm = wherebyRef.current;\r\n if (!elm) return;\r\n\r\n if (onActions) {\r\n onActions({\r\n endMeeting: () => elm.endMeeting(),\r\n knock: () => elm.knock(),\r\n cancelKnock: () => elm.cancelKnock(),\r\n leaveRoom: () => elm.leaveRoom(),\r\n startRecording: () => elm.startRecording(),\r\n stopRecording: () => elm.stopRecording(),\r\n startStreaming: () => elm.startStreaming(),\r\n stopStreaming: () => elm.stopStreaming(),\r\n startLiveTranscription: () => elm.startLiveTranscription(),\r\n stopLiveTranscription: () => elm.stopLiveTranscription(),\r\n toggleCamera: (enabled) => elm.toggleCamera(enabled),\r\n toggleMicrophone: (enabled) => elm.toggleMicrophone(enabled),\r\n toggleScreenshare: (enabled) => elm.toggleScreenshare(enabled),\r\n toggleChat: (enabled) => elm.toggleChat(enabled),\r\n });\r\n }\r\n\r\n const events = [\r\n 'ready',\r\n 'grant_device_permission',\r\n 'deny_device_permission',\r\n 'precall_check_completed',\r\n 'precall_check_skipped',\r\n 'knock',\r\n 'cancel_knock',\r\n 'join',\r\n 'leave',\r\n 'meeting_end',\r\n 'participantupdate',\r\n 'participant_join',\r\n 'participant_leave',\r\n 'microphone_toggle',\r\n 'camera_toggle',\r\n 'screenshare_toggle',\r\n 'chat_toggle',\r\n 'people_toggle',\r\n 'pip_toggle',\r\n 'streaming_status_change',\r\n 'recording_status_change',\r\n 'transcription_status_change',\r\n 'connection_status_change',\r\n ];\r\n function handleEvent(e) {\r\n if (onEvent) onEvent(e.type, e.detail);\r\n }\r\n events.forEach((ev) => elm.addEventListener(ev, handleEvent));\r\n return () => {\r\n events.forEach((ev) => elm.removeEventListener(ev, handleEvent));\r\n };\r\n }, [onEvent, onActions]);\r\n\r\n return (\r\n <div className={iframeClass}>\r\n <whereby-embed\r\n ref={wherebyRef}\r\n class={iframeClass}\r\n room={src}\r\n chat=\"on\"\r\n screenshare=\"on\"\r\n audio=\"on\"\r\n video=\"on\"\r\n allow=\"camera; microphone; fullscreen\"\r\n />\r\n </div>\r\n );\r\n};\r\nexport default Room;\r\n"],"names":[],"mappings":";;;AAGO,MAAM,OAAO,CAAC,EAAE,KAAK,SAAS,WAAW,kBAAkB;AAChE,QAAM,aAAa,OAAO,IAAI;AAE9B,YAAU,MAAM;AACd,UAAM,MAAM,WAAW;AACvB,QAAI,CAAC,IAAK;AAEV,QAAI,WAAW;AACb,gBAAU;AAAA,QACR,YAAY,MAAM,IAAI,WAAA;AAAA,QACtB,OAAO,MAAM,IAAI,MAAA;AAAA,QACjB,aAAa,MAAM,IAAI,YAAA;AAAA,QACvB,WAAW,MAAM,IAAI,UAAA;AAAA,QACrB,gBAAgB,MAAM,IAAI,eAAA;AAAA,QAC1B,eAAe,MAAM,IAAI,cAAA;AAAA,QACzB,gBAAgB,MAAM,IAAI,eAAA;AAAA,QAC1B,eAAe,MAAM,IAAI,cAAA;AAAA,QACzB,wBAAwB,MAAM,IAAI,uBAAA;AAAA,QAClC,uBAAuB,MAAM,IAAI,sBAAA;AAAA,QACjC,cAAc,CAAC,YAAY,IAAI,aAAa,OAAO;AAAA,QACnD,kBAAkB,CAAC,YAAY,IAAI,iBAAiB,OAAO;AAAA,QAC3D,mBAAmB,CAAC,YAAY,IAAI,kBAAkB,OAAO;AAAA,QAC7D,YAAY,CAAC,YAAY,IAAI,WAAW,OAAO;AAAA,MAAA,CAChD;AAAA,IACH;AAEA,UAAM,SAAS;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAEF,aAAS,YAAY,GAAG;AACtB,UAAI,QAAS,SAAQ,EAAE,MAAM,EAAE,MAAM;AAAA,IACvC;AACA,WAAO,QAAQ,CAAC,OAAO,IAAI,iBAAiB,IAAI,WAAW,CAAC;AAC5D,WAAO,MAAM;AACX,aAAO,QAAQ,CAAC,OAAO,IAAI,oBAAoB,IAAI,WAAW,CAAC;AAAA,IACjE;AAAA,EACF,GAAG,CAAC,SAAS,SAAS,CAAC;AAEvB,SACE,oBAAC,OAAA,EAAI,WAAW,aACd,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,MAAK;AAAA,MACL,aAAY;AAAA,MACZ,OAAM;AAAA,MACN,OAAM;AAAA,MACN,OAAM;AAAA,IAAA;AAAA,EAAA,GAEV;AAEJ;"}