sigpro-ui 1.0.6

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 (43) hide show
  1. package/Readme.md +146 -0
  2. package/dist/sigpro-ui.cjs +1677 -0
  3. package/dist/sigpro-ui.esm.js +1621 -0
  4. package/dist/sigpro-ui.umd.js +1680 -0
  5. package/dist/sigpro-ui.umd.min.js +1 -0
  6. package/index.js +40 -0
  7. package/package.json +52 -0
  8. package/src/components/Accordion.js +24 -0
  9. package/src/components/Alert.js +50 -0
  10. package/src/components/Autocomplete.js +95 -0
  11. package/src/components/Badge.js +6 -0
  12. package/src/components/Button.js +39 -0
  13. package/src/components/Checkbox.js +21 -0
  14. package/src/components/Colorpicker.js +81 -0
  15. package/src/components/Datepicker.js +252 -0
  16. package/src/components/Drawer.js +18 -0
  17. package/src/components/Dropdown.js +37 -0
  18. package/src/components/Fab.js +51 -0
  19. package/src/components/Fieldset.js +19 -0
  20. package/src/components/Fileinput.js +113 -0
  21. package/src/components/Indicator.js +9 -0
  22. package/src/components/Input.js +77 -0
  23. package/src/components/List.js +18 -0
  24. package/src/components/Loading.js +13 -0
  25. package/src/components/Menu.js +25 -0
  26. package/src/components/Modal.js +31 -0
  27. package/src/components/Navbar.js +6 -0
  28. package/src/components/Radio.js +25 -0
  29. package/src/components/Range.js +24 -0
  30. package/src/components/Rating.js +34 -0
  31. package/src/components/Select.js +36 -0
  32. package/src/components/Stack.js +6 -0
  33. package/src/components/Stat.js +11 -0
  34. package/src/components/Swap.js +13 -0
  35. package/src/components/Table.js +60 -0
  36. package/src/components/Tabs.js +46 -0
  37. package/src/components/Timeline.js +52 -0
  38. package/src/components/Toast.js +63 -0
  39. package/src/components/Tooltip.js +6 -0
  40. package/src/components/index.js +110 -0
  41. package/src/core/i18n.js +26 -0
  42. package/src/core/icons.js +17 -0
  43. package/src/core/utils.js +5 -0
@@ -0,0 +1,1680 @@
1
+ var SigProUI = (function (exports, sigpro) {
2
+ 'use strict';
3
+
4
+ const val = t => typeof t === "function" ? t() : t;
5
+
6
+ const joinClass = (t, l) => typeof l === "function"
7
+ ? () => `${t} ${l() || ""}`.trim()
8
+ : `${t} ${l || ""}`.trim();
9
+
10
+ var Utils = /*#__PURE__*/Object.freeze({
11
+ __proto__: null,
12
+ joinClass: joinClass,
13
+ val: val
14
+ });
15
+
16
+ /** ACCORDION */
17
+ const Accordion = (props, children) => {
18
+ const { title, name, open, ...rest } = props;
19
+
20
+ return sigpro.$html(
21
+ "div",
22
+ {
23
+ ...rest,
24
+ class: joinClass("collapse collapse-arrow bg-base-200 mb-2", props.class),
25
+ },
26
+ [
27
+ sigpro.$html("input", {
28
+ type: name ? "radio" : "checkbox",
29
+ name: name,
30
+ checked: open
31
+ }),
32
+ sigpro.$html("div", { class: "collapse-title text-xl font-medium" }, title),
33
+ sigpro.$html("div", { class: "collapse-content" }, children),
34
+ ],
35
+ );
36
+ };
37
+
38
+ var AccordionModule = /*#__PURE__*/Object.freeze({
39
+ __proto__: null,
40
+ Accordion: Accordion
41
+ });
42
+
43
+ const iconShow = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAdgAAAHYBTnsmCAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAADjSURBVDiN3dJNSgNBEAXgz4DZeAAVJ9tko2St3kaIFxAVt4KZeAD1GKKi7vQSydI/yHgALxAXU02GxniAFBR0v1ev+3V1sZSxjxtM8BM5wTX2/hNu4gFvOMI21iJ3cIwP3GMjF/dQ4RyraOMS34GPAmvjIrBeEnfwjoPGgSM8ooh8QtngB6Ep4BWnmaMqkY1LqqzmDC8tzNDK3/RHzLL9SloUYWfQIMuw3Yl8xrDBH6qbvZWALqbqBqVmlWF7GuKEDwPr5hbXcYdPnKBv/o39wL5wG7ULY1c9NGPzQRrjKrhli1/02zEjWyWMBwAAAABJRU5ErkJggg==";
44
+ const iconHide = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAdgAAAHYBTnsmCAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAEDSURBVDiN1dK/K8VhFAbwD+VLGSxKcu9guSQ/Zils/gNkuaX4BxRZDTdklYU/QAaDlEVGGwu2Kz/uVbKJzWDwfuv1+jHz1Km3c85znuf0Hv4jxnD2W8MItnCJ5xAX2MQcHsOQL+jEAapYQD9aQwxiDy+B3JKSe1DHCpqQYQ0PeMJOpDyAmyAAirjGbDRwFYcoYCZSzjGP+8B1gqXEUT2QxyPlqaRnGceNeENzUswwil1MBocbSU9DCAXUUI6K25HtIo5QSVaooitP9OEO65iIbE+HXSvBVRbeNZQSR9pxGil3o83HNw5hEbfYR0dKFki5ci+u8OrzIQ1/R8xx7ocL+9t4B0HPOVXjoptxAAAAAElFTkSuQmCC";
45
+ const iconClose = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAdgAAAHYBTnsmCAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABcSURBVDiN3dIxDoAwCIXhL563g3bSm+hlq4O6GFNbO+k/EV54QIDfsSBk9IA5ZxCQEG+0eGi5BqDHivEhV2xSXXwy2EdOR3xLV+ta0/26wvSm+KTYpPmMzY/0QTZeZR2f+FxhRQAAAABJRU5ErkJggg==";
46
+ const iconCalendar = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAdgAAAHYBTnsmCAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAACLSURBVDiN7dO9CQJBFEXhb38K0FwQrMNEVpuwB0NjrcYabECsQk0sQ1mTF4zIjrgmBh54MMx998AEwzOrmC5e8gJjbDHCJO7PHYI0v2JT4Ig9DljGwq5DkOZTLOCOMoIhBpknpHmFWx3ldaaUo6oTc2/ab7rl+508f8GvCC5oenTn4tM1cWg/nBNmD4fBH/Kfvt2TAAAAAElFTkSuQmCC";
47
+ const iconLock = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAWQAAAFkBqp2phgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAACQSURBVDiN7dKxDcJQDATQJ0YgXQQ1bAgDEIZBETPQwjakIjRQ8CMSyR8SiZKTrvHZd/r+JsYSNZrEI1ZR4ywzfElcJ55xwiITOECNTVDf4jDGoEEZ1Etcxxg8pmjRDiahb7BH20uKKPVUkVmL+YjQArdI+PT2bO9Pd/A34O71Rd9QeN/LAFUSckfUscWuG3oCgP8nrDH6T5AAAAAASUVORK5CYII=";
48
+ const iconAbc = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAdgAAAHYBTnsmCAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAADFSURBVDiN7dCxSoIBFAXgr1BbgmgSB5ubxKAHaAkcgnBpySVaDET3WhzcpQfoHZojawgX0ZZcfAWDSDdBoeUKP/8ojZ7tnnPv4dzDFv+KZzwl5jf84B354C4wwjdeUV4vl7DCEsXgxmhigDpOMcMVjoKr7cTyI/ZxiE90wmCB4zi+RRatZOxd7OEavxHtBmvjIV5wH2a59N8ZXIZQisMCzkL/wgGq6EYffXzgHHNo4y5h+oBGlLjEBJVUiVP0cJJOtMUG+APtfyYzbH7eVgAAAABJRU5ErkJggg==";
49
+ const icon123 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAB2AAAAdgFOeyYIAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAMxJREFUOI3t0bFKwlEUBvBfmmBEr1APIDZJ9AJJQyAIvkGP0C4uQruza+DUmuIc9AC9gBG4Nmpkw/8IB3Vw1w8u95zvnvPde77LEeUUV9HAF67QRA2nmMf5A+o4x3cWOsMYy8j7WMX6jaYbLBL/mAWe8RcHm1ihs8G94gVKQQzwlAouMcQo8p/Y28HdYpYFZmsi0MVdxD1MdrxsC500wijdvgtbI1AYtDbxMwkuFAZmE1uYwkkSqOIaHyHcxEU0vUXNPSqKr37fZ6xDwD9DPS0OyHjQHQAAAABJRU5ErkJggg==";
50
+ const iconMail = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAdgAAAHYBTnsmCAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAC4SURBVDiNxdIxagJRFIXhLzLFBNJYaJslSEylWOhq3IorMGQ16SyjYCFiZWU5pTaDFvOUyTAZ8RHID69555577oXLf/OEGaY4R3g/4IhORHg3eOXYYvSAeRQ8OWQYYoNPvDQYnxUr7zBB1grCAv3QbIlxjXmAb7Txhq+rkFUKq9NUU8vcJiizwDtOWGEdmvTKqT+61H0GXsP7jSxpEGF/R1e3wkO0FBeVRnhTSBTneBB3yvOI4D/mAnvrIwKM5s4AAAAAAElFTkSuQmCC";
51
+ const iconInfo = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAnXAAAJ1wGxbhe3AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAASVJREFUOI190r0uhFEQBuBnVxaF2PUTCkFchV0SV6BQi0rEbShFlCqNktJP0Iqf3i3YVSlXVEQozojP8e2+ySSTed+ZMzNnKnpjCFPhv+C9j/YPlnCBV3TCujhHq19iFftoYxOjBa4esTb2QvsP+7jFWJ9HxnEXRf5gGU9Z8gKucBl+sUgHTahE8AJnOCoIT/AcmhmsF7gtrGINBqWFFWcmLXMUhzjIuEbk1GA+2i/DNh4wUsK1MVfFV2GUHJO4xlsPHr8j1Eu44bAcDek2agP4lDZaxWMm3MEKbrL4hjT/8U+gJc00nglnw4qYkL5xMW9rTzqSvEiefI/dMrIaRTrSPzcKXCNinUguPeUfNKWj6kqH9Bz+aVnbvb6PtKTp8F/wUSb6Bu5YN5n7ff0kAAAAAElFTkSuQmCC";
52
+ const iconSuccess = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAnXAAAJ1wGxbhe3AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAQtJREFUOI2F0jFOAlEQBuAPImoFqyTa6TEEbfUihruYDYfwCAg3UDsTY20na0VjgqUWWuxgHsuy/skk82bmn/fPm9eyHXs4Cn+Br4baNZxjhk8UYUtMMWwitjHGHNfoJrlexObIo3YDY9zjoOGSQzxEkzVc4O0fctqkwCANzkJiE9LmI9ytDrvKB+tWGQnylIAsOB04VcrfdluO55CeYo6THfygVUne4jX8S1zho1LTDu7fCL2KxCe8oF8zUqb8G51VYGrzEffD6jDCJA0MY6bqnHXoK9d4Vk3kyk/S1KSPR9zUJdvRpAiJWZLLIlYEufYrrzBQ7nyJ97ClcuYN2dX1pejgOPwFvuuKfgHXiDR+HL1j1AAAAABJRU5ErkJggg==";
53
+ const iconError = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAnXAAAJ1wGxbhe3AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAARZJREFUOI2V0j1KQ1EQBeDPp4lWRiMoKVyAK9AoiLgJGytxD9oJNhKyDyvBnw2IugC3YGKVRk1KRbR48yC5vjzwwIHL3DPnzp2ZGdMxj9U4D/BZoZ3ANu4wQj84xC3aVYkZuujhCItjd42I9dAJ7R908YDlikeaeAyTCezgpST5IJia9LFVlA0nOMd7It4IjuMttKeFQR17uKooPcUV9lHL0ArX0T8MPqLa1hx+MDNFWDX7LHLV4/VGiWghmGJJvhu1WXzLO5rhORGeYRf3SfwQNVwWgbZ8SZqJcD04jhX5GDfTsjryJUlN0uQnXJRdZmHSx7H8nwWWItaP5NJVLrCFG3mTXoNDXJeVPW185E1ai/MAX2WiX9S3NSPYbj+uAAAAAElFTkSuQmCC";
54
+ const iconWarning = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAnXAAAJ1wGxbhe3AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAARJJREFUOI2l0r8uRFEQBvAfu9glwUYiUaxHUEl0VDpKeq+wpZBINAqFRHgTKg0tCSqVhmKDEM1u/Esodm725rq7iC+ZzMnM982ZmXP4JwpdchWsYBrXeMkj9XQQV3GEi+BMYR63v+mqiDPUUrEaTiP3I1ZxEOcySnE+jFxXVPEQPimWiCYzOdCbKbCFPe1Z+8PgBvvBycVMCIdSsY2wBEPBmcnrYBtraKRib2EJGljHjswLLuI8Z6SS9hLTl15iIR08wZLv2AzLYjk0YATP8n9lVWbrgUJohosYxCdG8Zghdvp5ldCUi6hrPd0VjvGEVzTxEYLkogGMYQ67uEtvcgKzGA8y9IV/D9/Evdb89Q7d/Q1fB8U0mpUmzV0AAAAASUVORK5CYII=";
55
+ const iconLeft = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAdgAAAHYBTnsmCAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABfSURBVDiNY2AY8oCZSHWxDAwMEgwMDHfJsaSAgYHhH9QQsjT/Z2BgKKe75gQGiLMLCSlkwiHOSI6t6ADmhYoBN6SIARIeidgkiUlIxxkYGB4xMDB8YmBguE6JSwYpAACvLRHTKwPjZgAAAABJRU5ErkJggg==";
56
+ const iconRight = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAdgAAAHYBTnsmCAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABNSURBVDiN3dAxCoAwFATRh3fU2oAHiDbi5Y1F2jT+gKLbzyy7/DYjUo8g4cTWI8koOF6XrOqc5ifDDVGJthfsj8OLujtHYJgwR+GP5QKMxA9/SolDQgAAAABJRU5ErkJggg==";
57
+ const iconLLeft = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAdgAAAHYBTnsmCAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABlSURBVDiN3ZLBDUBAEEUfmtCchA5woUMlOO1FCQrAwbqwf8eFhHd7mfzJn2Tg82TGvABywAmPUgOLD4XcDK9AJ/y5cOlrNsIvpCdPDL/FUbkX/t6Slv3+SjgQf6QBmIAZGAP+FzZJViOd89x8pAAAAABJRU5ErkJggg==";
58
+ const iconRRight = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAdgAAAHYBTnsmCAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABmSURBVDiN3dGxCoAgEMbxfz1dL1BTREJzmUv08trgDYcg6VCD3/YD7zvkoLmMgFEegLmmwAAecOJVvNeUWCAAt7IHjt9LThkyiRf9qC8oCom70u0BuDL+bngj/tNm/JqJePucW8wDvGYdzT0nMUkAAAAASUVORK5CYII=";
59
+ const iconUpload = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAdgAAAHYBTnsmCAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAADNSURBVDiNndOxTgJRFIThz41ZDMFKqH0DLSRSq4lQ0RifUcMzUJlYQKjtLcHVSimBggPRNSzs/sk0kzPnTHEvxZyHKnGJD3yhXSWcYRnKwvvH0Y7wEG/4wQI1XOEek6LLF3FtiDoGoXp4WcxsSXILHjFCH/Nf/jy8ER6KGuTZNNhJvkFpEpygUyHbRi1BFy8VFryilyANlSVFerxn6N36IRVyG0PNEtdbkbmBU8zwdOCSJp4xRWNj3sWS5YGaRvM/f6GBa5ztafCJMb5hBQQ/MMwXLnnZAAAAAElFTkSuQmCC";
60
+
61
+ var Icons = /*#__PURE__*/Object.freeze({
62
+ __proto__: null,
63
+ icon123: icon123,
64
+ iconAbc: iconAbc,
65
+ iconCalendar: iconCalendar,
66
+ iconClose: iconClose,
67
+ iconError: iconError,
68
+ iconHide: iconHide,
69
+ iconInfo: iconInfo,
70
+ iconLLeft: iconLLeft,
71
+ iconLeft: iconLeft,
72
+ iconLock: iconLock,
73
+ iconMail: iconMail,
74
+ iconRRight: iconRRight,
75
+ iconRight: iconRight,
76
+ iconShow: iconShow,
77
+ iconSuccess: iconSuccess,
78
+ iconUpload: iconUpload,
79
+ iconWarning: iconWarning
80
+ });
81
+
82
+ /** ALERT */
83
+ const Alert = (props, children) => {
84
+ const { type = "info", soft = true, ...rest } = props;
85
+
86
+ const icons = {
87
+ info: iconInfo,
88
+ success: iconSuccess,
89
+ warning: iconWarning,
90
+ error: iconError,
91
+ };
92
+
93
+ const typeClass = () => {
94
+ const t = val(type);
95
+ const map = {
96
+ info: "alert-info",
97
+ success: "alert-success",
98
+ warning: "alert-warning",
99
+ error: "alert-error",
100
+ };
101
+ return map[t] || t;
102
+ };
103
+
104
+ const content = children || props.message;
105
+
106
+ return sigpro.$html(
107
+ "div",
108
+ {
109
+ ...rest,
110
+ role: "alert",
111
+ class: () => `alert ${typeClass()} ${val(soft) ? "alert-soft" : ""} ${props.class || ""}`,
112
+ },
113
+ [
114
+ sigpro.$html("img", {
115
+ src: icons[val(type)] || icons.info,
116
+ class: "w-4 h-4 object-contain",
117
+ alt: val(type),
118
+ }),
119
+ sigpro.$html("div", { class: "flex-1" }, [
120
+ sigpro.$html("span", {}, [typeof content === "function" ? content() : content])
121
+ ]),
122
+ props.actions ? sigpro.$html("div", { class: "flex-none" }, [
123
+ typeof props.actions === "function" ? props.actions() : props.actions
124
+ ]) : null,
125
+ ],
126
+ );
127
+ };
128
+
129
+ var AlertModule = /*#__PURE__*/Object.freeze({
130
+ __proto__: null,
131
+ Alert: Alert
132
+ });
133
+
134
+ const i18n = {
135
+ es: {
136
+ close: "Cerrar",
137
+ confirm: "Confirmar",
138
+ cancel: "Cancelar",
139
+ search: "Buscar...",
140
+ loading: "Cargando...",
141
+ nodata: "Sin datos"
142
+ },
143
+ en: {
144
+ close: "Close",
145
+ confirm: "Confirm",
146
+ cancel: "Cancel",
147
+ search: "Search...",
148
+ loading: "Loading...",
149
+ nodata: "No data"
150
+ }
151
+ };
152
+
153
+ const currentLocale = sigpro.$("es");
154
+
155
+ const tt = t => () => i18n[currentLocale()][t] || t;
156
+
157
+ /** INPUT */
158
+ const Input = (props) => {
159
+ const { label, tip, value, error, isSearch, icon, type = "text", ...rest } = props;
160
+ const isPassword = type === "password";
161
+ const visible = sigpro.$(false);
162
+
163
+ const iconsByType = {
164
+ text: iconAbc,
165
+ password: iconLock,
166
+ date: iconCalendar,
167
+ number: icon123,
168
+ email: iconMail,
169
+ };
170
+
171
+ const inputEl = sigpro.$html("input", {
172
+ ...rest,
173
+ type: () => (isPassword ? (visible() ? "text" : "password") : type),
174
+ placeholder: props.placeholder || label || (isSearch ? tt("search")() : " "),
175
+ class: joinClass("grow order-2 focus:outline-none", props.class),
176
+ value: value,
177
+ oninput: (e) => props.oninput?.(e),
178
+ disabled: () => val(props.disabled),
179
+ });
180
+
181
+ const leftIcon = icon ? icon : iconsByType[type] ? sigpro.$html("img", { src: iconsByType[type], class: "opacity-50", alt: type }) : null;
182
+
183
+ return sigpro.$html(
184
+ "label",
185
+ {
186
+ class: () => joinClass("input input-bordered floating-label flex items-center gap-2 w-full relative", val(error) ? "input-error" : ""),
187
+ },
188
+ [
189
+ leftIcon ? sigpro.$html("div", { class: "order-1 shrink-0" }, leftIcon) : null,
190
+ label ? sigpro.$html("span", { class: "text-base-content/60 order-0" }, label) : null,
191
+ inputEl,
192
+ isPassword
193
+ ? sigpro.$html(
194
+ "button",
195
+ {
196
+ type: "button",
197
+ class: "order-3 btn btn-ghost btn-xs btn-circle opacity-50 hover:opacity-100",
198
+ onclick: (e) => {
199
+ e.preventDefault();
200
+ visible(!visible());
201
+ },
202
+ },
203
+ () =>
204
+ sigpro.$html("img", {
205
+ class: "w-5 h-5",
206
+ src: visible() ? iconShow : iconHide,
207
+ }),
208
+ )
209
+ : null,
210
+ tip
211
+ ? sigpro.$html(
212
+ "div",
213
+ { class: "tooltip tooltip-left order-4", "data-tip": tip },
214
+ sigpro.$html("span", { class: "badge badge-ghost badge-xs cursor-help" }, "?"),
215
+ )
216
+ : null,
217
+ () => (val(error) ? sigpro.$html("span", { class: "text-error text-[10px] absolute -bottom-5 left-2" }, val(error)) : null),
218
+ ],
219
+ );
220
+ };
221
+
222
+ var InputModule = /*#__PURE__*/Object.freeze({
223
+ __proto__: null,
224
+ Input: Input
225
+ });
226
+
227
+ /** AUTOCOMPLETE */
228
+ const Autocomplete = (props) => {
229
+ const { options = [], value, onSelect, label, placeholder, ...rest } = props;
230
+
231
+ const query = sigpro.$(val(value) || "");
232
+ const isOpen = sigpro.$(false);
233
+ const cursor = sigpro.$(-1);
234
+
235
+ const list = sigpro.$(() => {
236
+ const q = query().toLowerCase();
237
+ const data = val(options) || [];
238
+ return q
239
+ ? data.filter((o) => (typeof o === "string" ? o : o.label).toLowerCase().includes(q))
240
+ : data;
241
+ });
242
+
243
+ const pick = (opt) => {
244
+ const valStr = typeof opt === "string" ? opt : opt.value;
245
+ const labelStr = typeof opt === "string" ? opt : opt.label;
246
+
247
+ query(labelStr);
248
+ if (typeof value === "function") value(valStr);
249
+ onSelect?.(opt);
250
+
251
+ isOpen(false);
252
+ cursor(-1);
253
+ };
254
+
255
+ const nav = (e) => {
256
+ const items = list();
257
+ if (e.key === "ArrowDown") {
258
+ e.preventDefault();
259
+ isOpen(true);
260
+ cursor(Math.min(cursor() + 1, items.length - 1));
261
+ } else if (e.key === "ArrowUp") {
262
+ e.preventDefault();
263
+ cursor(Math.max(cursor() - 1, 0));
264
+ } else if (e.key === "Enter" && cursor() >= 0) {
265
+ e.preventDefault();
266
+ pick(items[cursor()]);
267
+ } else if (e.key === "Escape") {
268
+ isOpen(false);
269
+ }
270
+ };
271
+
272
+ return sigpro.$html("div", { class: "relative w-full" }, [
273
+ Input({
274
+ label,
275
+ placeholder: placeholder || tt("search")(),
276
+ value: query,
277
+ onfocus: () => isOpen(true),
278
+ onblur: () => setTimeout(() => isOpen(false), 150),
279
+ onkeydown: nav,
280
+ oninput: (e) => {
281
+ const v = e.target.value;
282
+ query(v);
283
+ if (typeof value === "function") value(v);
284
+ isOpen(true);
285
+ cursor(-1);
286
+ },
287
+ ...rest,
288
+ }),
289
+ sigpro.$html(
290
+ "ul",
291
+ {
292
+ class: "absolute left-0 w-full menu bg-base-100 rounded-box mt-1 p-2 shadow-xl max-h-60 overflow-y-auto border border-base-300 z-50",
293
+ style: () => (isOpen() && list().length ? "display:block" : "display:none"),
294
+ },
295
+ [
296
+ sigpro.$for(
297
+ list,
298
+ (opt, i) =>
299
+ sigpro.$html("li", {}, [
300
+ sigpro.$html(
301
+ "a",
302
+ {
303
+ class: () => `block w-full ${cursor() === i ? "active bg-primary text-primary-content" : ""}`,
304
+ onclick: () => pick(opt),
305
+ onmouseenter: () => cursor(i),
306
+ },
307
+ typeof opt === "string" ? opt : opt.label,
308
+ ),
309
+ ]),
310
+ (opt, i) => (typeof opt === "string" ? opt : opt.value) + i,
311
+ ),
312
+ () => (list().length ? null : sigpro.$html("li", { class: "p-2 text-center opacity-50" }, "No results")),
313
+ ],
314
+ ),
315
+ ]);
316
+ };
317
+
318
+ var AutocompleteModule = /*#__PURE__*/Object.freeze({
319
+ __proto__: null,
320
+ Autocomplete: Autocomplete
321
+ });
322
+
323
+ /** BADGE */
324
+ const Badge = (props, children) =>
325
+ sigpro.$html("span", { ...props, class: joinClass("badge", props.class) }, children);
326
+
327
+ var BadgeModule = /*#__PURE__*/Object.freeze({
328
+ __proto__: null,
329
+ Badge: Badge
330
+ });
331
+
332
+ /** BUTTON */
333
+ const Button = (props, children) => {
334
+ const { badge, badgeClass, tooltip, icon, loading, ...rest } = props;
335
+
336
+ const btn = sigpro.$html(
337
+ "button",
338
+ {
339
+ ...rest,
340
+ // Usamos props.class directamente
341
+ class: joinClass("btn", props.class),
342
+ disabled: () => val(loading) || val(props.disabled),
343
+ },
344
+ [
345
+ () => (val(loading) ? sigpro.$html("span", { class: "loading loading-spinner" }) : null),
346
+ icon ? sigpro.$html("span", { class: "mr-1" }, icon) : null,
347
+ children,
348
+ ]
349
+ );
350
+
351
+ let out = btn;
352
+
353
+ if (badge) {
354
+ out = sigpro.$html("div", { class: "indicator" }, [
355
+ sigpro.$html(
356
+ "span",
357
+ { class: joinClass("indicator-item badge", badgeClass || "badge-secondary") },
358
+ badge
359
+ ),
360
+ out,
361
+ ]);
362
+ }
363
+
364
+ return tooltip
365
+ ? sigpro.$html("div", { class: "tooltip", "data-tip": tooltip }, out)
366
+ : out;
367
+ };
368
+
369
+ var ButtonModule = /*#__PURE__*/Object.freeze({
370
+ __proto__: null,
371
+ Button: Button
372
+ });
373
+
374
+ /** CHECKBOX */
375
+ const Checkbox = (props) => {
376
+ const { value, tooltip, toggle, label, ...rest } = props;
377
+
378
+ const checkEl = sigpro.$html("input", {
379
+ ...rest,
380
+ type: "checkbox",
381
+ class: () => (val(toggle) ? "toggle" : "checkbox"),
382
+ checked: value
383
+ });
384
+
385
+ const layout = sigpro.$html("label", { class: "label cursor-pointer justify-start gap-3" }, [
386
+ checkEl,
387
+ label ? sigpro.$html("span", { class: "label-text" }, label) : null,
388
+ ]);
389
+
390
+ return tooltip ? sigpro.$html("div", { class: "tooltip", "data-tip": tooltip }, layout) : layout;
391
+ };
392
+
393
+ var CheckboxModule = /*#__PURE__*/Object.freeze({
394
+ __proto__: null,
395
+ Checkbox: Checkbox
396
+ });
397
+
398
+ /** COLORPICKER */
399
+ const Colorpicker = (props) => {
400
+ const { value, label, ...rest } = props;
401
+ const isOpen = sigpro.$(false);
402
+
403
+ const palette = [
404
+ ...["#000", "#1A1A1A", "#333", "#4D4D4D", "#666", "#808080", "#B3B3B3", "#FFF"],
405
+ ...["#450a0a", "#7f1d1d", "#991b1b", "#b91c1c", "#dc2626", "#ef4444", "#f87171", "#fca5a5"],
406
+ ...["#431407", "#7c2d12", "#9a3412", "#c2410c", "#ea580c", "#f97316", "#fb923c", "#ffedd5"],
407
+ ...["#713f12", "#a16207", "#ca8a04", "#eab308", "#facc15", "#fde047", "#fef08a", "#fff9c4"],
408
+ ...["#064e3b", "#065f46", "#059669", "#10b981", "#34d399", "#4ade80", "#84cc16", "#d9f99d"],
409
+ ...["#082f49", "#075985", "#0284c7", "#0ea5e9", "#38bdf8", "#7dd3fc", "#22d3ee", "#cffafe"],
410
+ ...["#1e1b4b", "#312e81", "#4338ca", "#4f46e5", "#6366f1", "#818cf8", "#a5b4fc", "#e0e7ff"],
411
+ ...["#2e1065", "#4c1d95", "#6d28d9", "#7c3aed", "#8b5cf6", "#a855f7", "#d946ef", "#fae8ff"],
412
+ ];
413
+
414
+ const getColor = () => val(value) || "#000000";
415
+
416
+ return sigpro.$html("div", { class: "relative w-fit" }, [
417
+ sigpro.$html(
418
+ "button",
419
+ {
420
+ type: "button",
421
+ class: "btn px-3 bg-base-100 border-base-300 hover:border-primary/50 flex items-center gap-2 shadow-sm font-normal normal-case",
422
+ onclick: (e) => {
423
+ e.stopPropagation();
424
+ isOpen(!isOpen());
425
+ },
426
+ ...rest,
427
+ },
428
+ [
429
+ sigpro.$html("div", {
430
+ class: "size-5 rounded-sm shadow-inner border border-black/10 shrink-0",
431
+ style: () => `background-color: ${getColor()}`,
432
+ }),
433
+ label ? sigpro.$html("span", { class: "opacity-80" }, label) : null,
434
+ ],
435
+ ),
436
+
437
+ sigpro.$if(isOpen, () =>
438
+ sigpro.$html(
439
+ "div",
440
+ {
441
+ class: "absolute left-0 mt-2 p-3 bg-base-100 border border-base-300 shadow-2xl rounded-box z-[110] w-64 select-none",
442
+ onclick: (e) => e.stopPropagation(),
443
+ },
444
+ [
445
+ sigpro.$html(
446
+ "div",
447
+ { class: "grid grid-cols-8 gap-1" },
448
+ palette.map((c) =>
449
+ sigpro.$html("button", {
450
+ type: "button",
451
+ style: `background-color: ${c}`,
452
+ class: () => {
453
+ const active = getColor().toLowerCase() === c.toLowerCase();
454
+ return `size-6 rounded-sm cursor-pointer transition-all hover:scale-125 hover:z-10 active:scale-95 outline-none border border-black/5
455
+ ${active ? "ring-2 ring-offset-1 ring-primary z-10 scale-110" : ""}`;
456
+ },
457
+ onclick: () => {
458
+ if (typeof value === "function") value(c);
459
+ isOpen(false);
460
+ },
461
+ }),
462
+ ),
463
+ ),
464
+ ],
465
+ ),
466
+ ),
467
+
468
+ sigpro.$if(isOpen, () =>
469
+ sigpro.$html("div", {
470
+ class: "fixed inset-0 z-[100]",
471
+ onclick: () => isOpen(false),
472
+ }),
473
+ ),
474
+ ]);
475
+ };
476
+
477
+ var ColorpickerModule = /*#__PURE__*/Object.freeze({
478
+ __proto__: null,
479
+ Colorpicker: Colorpicker
480
+ });
481
+
482
+ /** DATEPICKER */
483
+ const Datepicker = (props) => {
484
+ const { value, range, label, placeholder, hour = false, ...rest } = props;
485
+
486
+ const isOpen = sigpro.$(false);
487
+ const internalDate = sigpro.$(new Date());
488
+ const hoverDate = sigpro.$(null);
489
+ const startHour = sigpro.$(0);
490
+ const endHour = sigpro.$(0);
491
+ const isRangeMode = () => val(range) === true;
492
+
493
+ const now = new Date();
494
+ const todayStr = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, "0")}-${String(now.getDate()).padStart(2, "0")}`;
495
+
496
+ const formatDate = (d) => {
497
+ const year = d.getFullYear();
498
+ const month = String(d.getMonth() + 1).padStart(2, "0");
499
+ const day = String(d.getDate()).padStart(2, "0");
500
+ return `${year}-${month}-${day}`;
501
+ };
502
+
503
+ const selectDate = (date) => {
504
+ const dateStr = formatDate(date);
505
+ const current = val(value);
506
+
507
+ if (isRangeMode()) {
508
+ if (!current?.start || (current.start && current.end)) {
509
+ if (typeof value === "function") {
510
+ value({
511
+ start: dateStr,
512
+ end: null,
513
+ ...(hour && { startHour: startHour() }),
514
+ });
515
+ }
516
+ } else {
517
+ const start = current.start;
518
+ if (typeof value === "function") {
519
+ const newValue = dateStr < start ? { start: dateStr, end: start } : { start, end: dateStr };
520
+ if (hour) {
521
+ newValue.startHour = current.startHour || startHour();
522
+ newValue.endHour = current.endHour || endHour();
523
+ }
524
+ value(newValue);
525
+ }
526
+ isOpen(false);
527
+ }
528
+ } else {
529
+ if (typeof value === "function") {
530
+ value(hour ? `${dateStr}T${String(startHour()).padStart(2, "0")}:00:00` : dateStr);
531
+ }
532
+ isOpen(false);
533
+ }
534
+ };
535
+
536
+ const displayValue = sigpro.$(() => {
537
+ const v = val(value);
538
+ if (!v) return "";
539
+ if (typeof v === "string") {
540
+ if (hour && v.includes("T")) return v.replace("T", " ");
541
+ return v;
542
+ }
543
+ if (v.start && v.end) {
544
+ const startStr = hour && v.startHour ? `${v.start} ${String(v.startHour).padStart(2, "0")}:00` : v.start;
545
+ const endStr = hour && v.endHour ? `${v.end} ${String(v.endHour).padStart(2, "0")}:00` : v.end;
546
+ return `${startStr} - ${endStr}`;
547
+ }
548
+ if (v.start) {
549
+ const startStr = hour && v.startHour ? `${v.start} ${String(v.startHour).padStart(2, "0")}:00` : v.start;
550
+ return `${startStr}...`;
551
+ }
552
+ return "";
553
+ });
554
+
555
+ const move = (m) => {
556
+ const d = internalDate();
557
+ internalDate(new Date(d.getFullYear(), d.getMonth() + m, 1));
558
+ };
559
+
560
+ const moveYear = (y) => {
561
+ const d = internalDate();
562
+ internalDate(new Date(d.getFullYear() + y, d.getMonth(), 1));
563
+ };
564
+
565
+ const HourSlider = ({ value: hVal, onChange }) => {
566
+ return sigpro.$html("div", { class: "flex-1" }, [
567
+ sigpro.$html("div", { class: "flex gap-2 items-center" }, [
568
+ sigpro.$html("input", {
569
+ type: "range",
570
+ min: 0,
571
+ max: 23,
572
+ value: hVal,
573
+ class: "range range-xs flex-1",
574
+ oninput: (e) => {
575
+ const newHour = parseInt(e.target.value);
576
+ onChange(newHour);
577
+ },
578
+ }),
579
+ sigpro.$html("span", { class: "text-sm font-mono min-w-[48px] text-center" },
580
+ () => String(val(hVal)).padStart(2, "0") + ":00"
581
+ ),
582
+ ]),
583
+ ]);
584
+ };
585
+
586
+ return sigpro.$html("div", { class: "relative w-full" }, [
587
+ Input({
588
+ label,
589
+ placeholder: placeholder || (isRangeMode() ? "Seleccionar rango..." : "Seleccionar fecha..."),
590
+ value: displayValue,
591
+ readonly: true,
592
+ icon: sigpro.$html("img", { src: iconCalendar, class: "opacity-40" }),
593
+ onclick: (e) => {
594
+ e.stopPropagation();
595
+ isOpen(!isOpen());
596
+ },
597
+ ...rest,
598
+ }),
599
+
600
+ sigpro.$if(isOpen, () =>
601
+ sigpro.$html(
602
+ "div",
603
+ {
604
+ class: "absolute left-0 mt-2 p-4 bg-base-100 border border-base-300 shadow-2xl rounded-box z-[100] w-80 select-none",
605
+ onclick: (e) => e.stopPropagation(),
606
+ },
607
+ [
608
+ sigpro.$html("div", { class: "flex justify-between items-center mb-4 gap-1" }, [
609
+ sigpro.$html("div", { class: "flex gap-0.5" }, [
610
+ sigpro.$html("button", { type: "button", class: "btn btn-ghost btn-xs px-1", onclick: () => moveYear(-1) },
611
+ sigpro.$html("img", { src: iconLLeft, class: "opacity-40" })
612
+ ),
613
+ sigpro.$html("button", { type: "button", class: "btn btn-ghost btn-xs px-1", onclick: () => move(-1) },
614
+ sigpro.$html("img", { src: iconLeft, class: "opacity-40" })
615
+ ),
616
+ ]),
617
+ sigpro.$html("span", { class: "font-bold uppercase flex-1 text-center" }, [
618
+ () => internalDate().toLocaleString("es-ES", { month: "short", year: "numeric" }),
619
+ ]),
620
+ sigpro.$html("div", { class: "flex gap-0.5" }, [
621
+ sigpro.$html("button", { type: "button", class: "btn btn-ghost btn-xs px-1", onclick: () => move(1) },
622
+ sigpro.$html("img", { src: iconRight, class: "opacity-40" })
623
+ ),
624
+ sigpro.$html("button", { type: "button", class: "btn btn-ghost btn-xs px-1", onclick: () => moveYear(1) },
625
+ sigpro.$html("img", { src: iconRRight, class: "opacity-40" })
626
+ ),
627
+ ]),
628
+ ]),
629
+
630
+ sigpro.$html("div", { class: "grid grid-cols-7 gap-1", onmouseleave: () => hoverDate(null) }, [
631
+ ...["L", "M", "X", "J", "V", "S", "D"].map((d) => sigpro.$html("div", { class: "text-[10px] opacity-40 font-bold text-center" }, d)),
632
+ () => {
633
+ const d = internalDate();
634
+ const year = d.getFullYear();
635
+ const month = d.getMonth();
636
+ const firstDay = new Date(year, month, 1).getDay();
637
+ const offset = firstDay === 0 ? 6 : firstDay - 1;
638
+ const daysInMonth = new Date(year, month + 1, 0).getDate();
639
+
640
+ const nodes = [];
641
+ for (let i = 0; i < offset; i++) nodes.push(sigpro.$html("div"));
642
+
643
+ for (let i = 1; i <= daysInMonth; i++) {
644
+ const date = new Date(year, month, i);
645
+ const dStr = formatDate(date);
646
+
647
+ nodes.push(
648
+ sigpro.$html(
649
+ "button",
650
+ {
651
+ type: "button",
652
+ class: () => {
653
+ const v = val(value);
654
+ const h = hoverDate();
655
+ const isStart = typeof v === "string" ? v.split("T")[0] === dStr : v?.start === dStr;
656
+ const isEnd = v?.end === dStr;
657
+ let inRange = false;
658
+
659
+ if (isRangeMode() && v?.start) {
660
+ const start = v.start;
661
+ if (!v.end && h) {
662
+ inRange = (dStr > start && dStr <= h) || (dStr < start && dStr >= h);
663
+ } else if (v.end) {
664
+ inRange = dStr > start && dStr < v.end;
665
+ }
666
+ }
667
+
668
+ const base = "btn btn-xs p-0 aspect-square min-h-0 h-auto font-normal relative";
669
+ const state = isStart || isEnd ? "btn-primary z-10" : inRange ? "bg-primary/20 border-none rounded-none" : "btn-ghost";
670
+ const today = dStr === todayStr ? "ring-1 ring-primary ring-inset font-black text-primary" : "";
671
+
672
+ return `${base} ${state} ${today}`;
673
+ },
674
+ onmouseenter: () => { if (isRangeMode()) hoverDate(dStr); },
675
+ onclick: () => selectDate(date),
676
+ },
677
+ [i.toString()],
678
+ ),
679
+ );
680
+ }
681
+ return nodes;
682
+ },
683
+ ]),
684
+
685
+ hour ? sigpro.$html("div", { class: "mt-3 pt-2 border-t border-base-300" }, [
686
+ isRangeMode()
687
+ ? sigpro.$html("div", { class: "flex gap-4" }, [
688
+ HourSlider({
689
+ value: startHour,
690
+ onChange: (newHour) => {
691
+ startHour(newHour);
692
+ const currentVal = val(value);
693
+ if (currentVal?.start) value({ ...currentVal, startHour: newHour });
694
+ },
695
+ }),
696
+ HourSlider({
697
+ value: endHour,
698
+ onChange: (newHour) => {
699
+ endHour(newHour);
700
+ const currentVal = val(value);
701
+ if (currentVal?.end) value({ ...currentVal, endHour: newHour });
702
+ },
703
+ }),
704
+ ])
705
+ : HourSlider({
706
+ value: startHour,
707
+ onChange: (newHour) => {
708
+ startHour(newHour);
709
+ const currentVal = val(value);
710
+ if (currentVal && typeof currentVal === "string" && currentVal.includes("-")) {
711
+ value(currentVal.split("T")[0] + "T" + String(newHour).padStart(2, "0") + ":00:00");
712
+ }
713
+ },
714
+ }),
715
+ ]) : null,
716
+ ],
717
+ ),
718
+ ),
719
+
720
+ sigpro.$if(isOpen, () => sigpro.$html("div", { class: "fixed inset-0 z-[90]", onclick: () => isOpen(false) })),
721
+ ]);
722
+ };
723
+
724
+ var DatepickerModule = /*#__PURE__*/Object.freeze({
725
+ __proto__: null,
726
+ Datepicker: Datepicker
727
+ });
728
+
729
+ /** DRAWER */
730
+ const Drawer = (props) =>
731
+ sigpro.$html("div", { class: joinClass("drawer", props.class) }, [
732
+ sigpro.$html("input", {
733
+ id: props.id,
734
+ type: "checkbox",
735
+ class: "drawer-toggle",
736
+ checked: props.open,
737
+ }),
738
+ sigpro.$html("div", { class: "drawer-content" }, props.content),
739
+ sigpro.$html("div", { class: "drawer-side" }, [
740
+ sigpro.$html("label", { for: props.id, class: "drawer-overlay", onclick: () => props.open?.(false) }),
741
+ sigpro.$html("div", { class: "min-h-full bg-base-200 w-80" }, props.side),
742
+ ]),
743
+ ]);
744
+
745
+ var DrawerModule = /*#__PURE__*/Object.freeze({
746
+ __proto__: null,
747
+ Drawer: Drawer
748
+ });
749
+
750
+ /** DROPDOWN */
751
+ const Dropdown = (props, children) => {
752
+ const { label, icon, ...rest } = props;
753
+
754
+ return sigpro.$html(
755
+ "div",
756
+ {
757
+ ...rest,
758
+ class: () => `dropdown ${val(props.class) || props.class || ""}`,
759
+ },
760
+ [
761
+ sigpro.$html(
762
+ "div",
763
+ {
764
+ tabindex: 0,
765
+ role: "button",
766
+ class: "btn m-1 flex items-center gap-2",
767
+ },
768
+ [
769
+ icon ? (typeof icon === "function" ? icon() : icon) : null,
770
+ label ? (typeof label === "function" ? label() : label) : null
771
+ ],
772
+ ),
773
+ sigpro.$html(
774
+ "ul",
775
+ {
776
+ tabindex: 0,
777
+ class: "dropdown-content z-[50] menu p-2 shadow bg-base-100 rounded-box min-w-max border border-base-300",
778
+ },
779
+ [typeof children === "function" ? children() : children],
780
+ ),
781
+ ],
782
+ );
783
+ };
784
+
785
+ var DropdownModule = /*#__PURE__*/Object.freeze({
786
+ __proto__: null,
787
+ Dropdown: Dropdown
788
+ });
789
+
790
+ /** FAB (Floating Action Button) */
791
+ const Fab = (props) => {
792
+ const { icon, label, actions = [], position = "bottom-6 right-6", ...rest } = props;
793
+
794
+ return sigpro.$html(
795
+ "div",
796
+ {
797
+ ...rest,
798
+ class: () => `fab fixed ${val(position)} flex flex-col-reverse items-end gap-3 z-[100] ${
799
+ props.class || ""
800
+ }`,
801
+ },
802
+ [
803
+ // Botón principal
804
+ sigpro.$html(
805
+ "div",
806
+ {
807
+ tabindex: 0,
808
+ role: "button",
809
+ class: "btn btn-lg btn-circle btn-primary shadow-2xl",
810
+ },
811
+ [
812
+ icon ? (typeof icon === "function" ? icon() : icon) : null,
813
+ !icon && label ? label : null
814
+ ],
815
+ ),
816
+
817
+ // Acciones secundarias (se despliegan hacia arriba)
818
+ ...val(actions).map((act) =>
819
+ sigpro.$html("div", { class: "flex items-center gap-3 transition-all duration-300" }, [
820
+ act.label ? sigpro.$html("span", { class: "badge badge-ghost shadow-sm whitespace-nowrap" }, act.label) : null,
821
+ sigpro.$html(
822
+ "button",
823
+ {
824
+ type: "button",
825
+ class: `btn btn-circle shadow-lg ${act.class || ""}`,
826
+ onclick: (e) => {
827
+ e.stopPropagation();
828
+ act.onclick?.(e);
829
+ },
830
+ },
831
+ [act.icon ? (typeof act.icon === "function" ? act.icon() : act.icon) : act.text || ""],
832
+ ),
833
+ ]),
834
+ ),
835
+ ],
836
+ );
837
+ };
838
+
839
+ var FabModule = /*#__PURE__*/Object.freeze({
840
+ __proto__: null,
841
+ Fab: Fab
842
+ });
843
+
844
+ /** FIELDSET */
845
+ const Fieldset = (props, children) =>
846
+ sigpro.$html(
847
+ "fieldset",
848
+ {
849
+ ...props,
850
+ class: joinClass("fieldset bg-base-200 border border-base-300 p-4 rounded-lg", props.class),
851
+ },
852
+ [
853
+ () => {
854
+ const legendText = val(props.legend);
855
+ return legendText ? sigpro.$html("legend", { class: "fieldset-legend font-bold" }, [legendText]) : null;
856
+ },
857
+ children,
858
+ ],
859
+ );
860
+
861
+ var FieldsetModule = /*#__PURE__*/Object.freeze({
862
+ __proto__: null,
863
+ Fieldset: Fieldset
864
+ });
865
+
866
+ /** FILEINPUT */
867
+ const Fileinput = (props) => {
868
+ const { tooltip, max = 2, accept = "*", onSelect } = props;
869
+
870
+ const selectedFiles = sigpro.$([]);
871
+ const isDragging = sigpro.$(false);
872
+ const error = sigpro.$(null);
873
+ const MAX_BYTES = max * 1024 * 1024;
874
+
875
+ const handleFiles = (files) => {
876
+ const fileList = Array.from(files);
877
+ error(null);
878
+ const oversized = fileList.find((f) => f.size > MAX_BYTES);
879
+
880
+ if (oversized) {
881
+ error(`Máx ${max}MB`);
882
+ return;
883
+ }
884
+
885
+ selectedFiles([...selectedFiles(), ...fileList]);
886
+ onSelect?.(selectedFiles());
887
+ };
888
+
889
+ const removeFile = (index) => {
890
+ const updated = selectedFiles().filter((_, i) => i !== index);
891
+ selectedFiles(updated);
892
+ onSelect?.(updated);
893
+ };
894
+
895
+ return sigpro.$html("fieldset", { class: "fieldset w-full p-0" }, [
896
+ sigpro.$html(
897
+ "div",
898
+ {
899
+ class: () => `w-full ${tooltip ? "tooltip tooltip-top before:z-50 after:z-50" : ""}`,
900
+ "data-tip": tooltip,
901
+ },
902
+ [
903
+ sigpro.$html(
904
+ "label",
905
+ {
906
+ class: () => `
907
+ relative flex items-center justify-between w-full h-12 px-4
908
+ border-2 border-dashed rounded-lg cursor-pointer
909
+ transition-all duration-200
910
+ ${isDragging() ? "border-primary bg-primary/10" : "border-base-content/20 bg-base-100 hover:bg-base-200"}
911
+ `,
912
+ ondragover: (e) => {
913
+ e.preventDefault();
914
+ isDragging(true);
915
+ },
916
+ ondragleave: () => isDragging(false),
917
+ ondrop: (e) => {
918
+ e.preventDefault();
919
+ isDragging(false);
920
+ handleFiles(e.dataTransfer.files);
921
+ },
922
+ },
923
+ [
924
+ sigpro.$html("div", { class: "flex items-center gap-3 w-full" }, [
925
+ sigpro.$html("img", { src: iconUpload, class: "w-5 h-5 opacity-50 shrink-0" }),
926
+ sigpro.$html("span", { class: "text-sm opacity-70 truncate grow text-left" }, "Arrastra o selecciona archivos..."),
927
+ sigpro.$html("span", { class: "text-[10px] opacity-40 shrink-0" }, `Máx ${max}MB`),
928
+ ]),
929
+ sigpro.$html("input", {
930
+ type: "file",
931
+ multiple: true,
932
+ accept: accept,
933
+ class: "hidden",
934
+ onchange: (e) => handleFiles(e.target.files),
935
+ }),
936
+ ],
937
+ ),
938
+ ],
939
+ ),
940
+
941
+ () => (error() ? sigpro.$html("span", { class: "text-[10px] text-error mt-1 px-1 font-medium" }, error()) : null),
942
+
943
+ sigpro.$if(
944
+ () => selectedFiles().length > 0,
945
+ () =>
946
+ sigpro.$html("ul", { class: "mt-2 space-y-1" }, [
947
+ sigpro.$for(
948
+ selectedFiles,
949
+ (file, index) =>
950
+ sigpro.$html("li", { class: "flex items-center justify-between p-1.5 pl-3 text-xs bg-base-200/50 rounded-md border border-base-300" }, [
951
+ sigpro.$html("div", { class: "flex items-center gap-2 truncate" }, [
952
+ sigpro.$html("span", { class: "opacity-50" }, "📄"),
953
+ sigpro.$html("span", { class: "truncate font-medium max-w-[200px]" }, file.name),
954
+ sigpro.$html("span", { class: "text-[9px] opacity-40" }, `(${(file.size / 1024).toFixed(0)} KB)`),
955
+ ]),
956
+ sigpro.$html(
957
+ "button",
958
+ {
959
+ type: "button",
960
+ class: "btn btn-ghost btn-xs btn-circle",
961
+ onclick: (e) => {
962
+ e.preventDefault();
963
+ e.stopPropagation();
964
+ removeFile(index);
965
+ },
966
+ },
967
+ [sigpro.$html("img", { src: iconClose, class: "w-3 h-3 opacity-70" })],
968
+ ),
969
+ ]),
970
+ (file) => file.name + file.lastModified,
971
+ ),
972
+ ]),
973
+ ),
974
+ ]);
975
+ };
976
+
977
+ var FileinputModule = /*#__PURE__*/Object.freeze({
978
+ __proto__: null,
979
+ Fileinput: Fileinput
980
+ });
981
+
982
+ /** INDICATOR */
983
+ const Indicator = (props, children) =>
984
+ sigpro.$html("div", { class: joinClass("indicator", props.class) }, [
985
+ children,
986
+ sigpro.$html("span", { class: joinClass("indicator-item badge", props.badgeClass) }, props.badge),
987
+ ]);
988
+
989
+ var IndicatorModule = /*#__PURE__*/Object.freeze({
990
+ __proto__: null,
991
+ Indicator: Indicator
992
+ });
993
+
994
+ /** LIST */
995
+ const List = (props) => {
996
+ const { items, header, render, keyFn, class: className } = props;
997
+
998
+ return sigpro.$html(
999
+ "ul",
1000
+ {
1001
+ class: joinClass("list bg-base-100 rounded-box shadow-md", className),
1002
+ },
1003
+ [
1004
+ sigpro.$if(header, () => sigpro.$html("li", { class: "p-4 pb-2 text-xs opacity-60 tracking-wide" }, [val(header)])),
1005
+ sigpro.$for(items, (item, index) => sigpro.$html("li", { class: "list-row" }, [render(item, index)]), keyFn),
1006
+ ],
1007
+ );
1008
+ };
1009
+
1010
+ var ListModule = /*#__PURE__*/Object.freeze({
1011
+ __proto__: null,
1012
+ List: List
1013
+ });
1014
+
1015
+ /** LOADING (Overlay Component) */
1016
+ const Loading = (props) => {
1017
+ // Se espera un signal props.$show para controlar la visibilidad
1018
+ return sigpro.$if(props.$show, () =>
1019
+ sigpro.$html("div", {
1020
+ class: "fixed inset-0 z-[100] flex items-center justify-center backdrop-blur-sm bg-base-100/30"
1021
+ }, [
1022
+ sigpro.$html("span", { class: "loading loading-spinner loading-lg text-primary" }),
1023
+ ]),
1024
+ );
1025
+ };
1026
+
1027
+ var LoadingModule = /*#__PURE__*/Object.freeze({
1028
+ __proto__: null,
1029
+ Loading: Loading
1030
+ });
1031
+
1032
+ /** MENU */
1033
+ const Menu = (props) => {
1034
+ const renderItems = (items) =>
1035
+ sigpro.$for(
1036
+ () => items || [],
1037
+ (it) =>
1038
+ sigpro.$html("li", {}, [
1039
+ it.children
1040
+ ? sigpro.$html("details", { open: it.open }, [
1041
+ sigpro.$html("summary", {}, [it.icon && sigpro.$html("span", { class: "mr-2" }, it.icon), it.label]),
1042
+ sigpro.$html("ul", {}, renderItems(it.children)),
1043
+ ])
1044
+ : sigpro.$html("a", { class: () => (val(it.active) ? "active" : ""), onclick: it.onclick }, [
1045
+ it.icon && sigpro.$html("span", { class: "mr-2" }, it.icon),
1046
+ it.label,
1047
+ ]),
1048
+ ]),
1049
+ (it, i) => it.label || i,
1050
+ );
1051
+
1052
+ return sigpro.$html("ul", { ...props, class: joinClass("menu bg-base-200 rounded-box", props.class) }, renderItems(props.items));
1053
+ };
1054
+
1055
+ var MenuModule = /*#__PURE__*/Object.freeze({
1056
+ __proto__: null,
1057
+ Menu: Menu
1058
+ });
1059
+
1060
+ /** MODAL */
1061
+ const Modal = (props, children) => {
1062
+ const { title, buttons, open, ...rest } = props;
1063
+ const close = () => open(false);
1064
+
1065
+ return sigpro.$if(open, () =>
1066
+ sigpro.$html("dialog", { ...rest, class: "modal modal-open" }, [
1067
+ sigpro.$html("div", { class: "modal-box" }, [
1068
+ title ? sigpro.$html("h3", { class: "text-lg font-bold mb-4" }, title) : null,
1069
+ typeof children === "function" ? children() : children,
1070
+ sigpro.$html("div", { class: "modal-action flex gap-2" }, [
1071
+ ...(Array.isArray(buttons) ? buttons : [buttons]).filter(Boolean),
1072
+ Button({ onclick: close }, tt("close")()),
1073
+ ]),
1074
+ ]),
1075
+ sigpro.$html(
1076
+ "form",
1077
+ {
1078
+ method: "dialog",
1079
+ class: "modal-backdrop",
1080
+ onclick: (e) => (e.preventDefault(), close()),
1081
+ },
1082
+ [sigpro.$html("button", {}, "close")],
1083
+ ),
1084
+ ]),
1085
+ );
1086
+ };
1087
+
1088
+ var ModalModule = /*#__PURE__*/Object.freeze({
1089
+ __proto__: null,
1090
+ Modal: Modal
1091
+ });
1092
+
1093
+ /** NAVBAR */
1094
+ const Navbar = (props, children) =>
1095
+ sigpro.$html("div", { ...props, class: joinClass("navbar bg-base-100 shadow-sm px-4", props.class) }, children);
1096
+
1097
+ var NavbarModule = /*#__PURE__*/Object.freeze({
1098
+ __proto__: null,
1099
+ Navbar: Navbar
1100
+ });
1101
+
1102
+ /** RADIO */
1103
+ const Radio = (props) => {
1104
+ const { label, tooltip, value, ...rest } = props;
1105
+
1106
+ const radioEl = sigpro.$html("input", {
1107
+ ...rest,
1108
+ type: "radio",
1109
+ class: joinClass("radio", props.class),
1110
+ checked: () => val(value) === props.value,
1111
+ disabled: () => val(props.disabled),
1112
+ onclick: () => typeof value === "function" && value(props.value),
1113
+ });
1114
+
1115
+ if (!label && !tooltip) return radioEl;
1116
+
1117
+ const layout = sigpro.$html("label", { class: "label cursor-pointer justify-start gap-3" }, [
1118
+ radioEl,
1119
+ label ? sigpro.$html("span", { class: "label-text" }, label) : null,
1120
+ ]);
1121
+
1122
+ return tooltip ? sigpro.$html("div", { class: "tooltip", "data-tip": tooltip }, layout) : layout;
1123
+ };
1124
+
1125
+ var RadioModule = /*#__PURE__*/Object.freeze({
1126
+ __proto__: null,
1127
+ Radio: Radio
1128
+ });
1129
+
1130
+ /** RANGE */
1131
+ const Range = (props) => {
1132
+ const { label, tooltip, value, ...rest } = props;
1133
+
1134
+ const rangeEl = sigpro.$html("input", {
1135
+ ...rest,
1136
+ type: "range",
1137
+ class: joinClass("range", props.class),
1138
+ value: value,
1139
+ disabled: () => val(props.disabled)
1140
+ });
1141
+
1142
+ if (!label && !tooltip) return rangeEl;
1143
+
1144
+ const layout = sigpro.$html("div", { class: "flex flex-col gap-2" }, [
1145
+ label ? sigpro.$html("span", { class: "label-text" }, label) : null,
1146
+ rangeEl
1147
+ ]);
1148
+
1149
+ return tooltip ? sigpro.$html("div", { class: "tooltip", "data-tip": tooltip }, layout) : layout;
1150
+ };
1151
+
1152
+ var RangeModule = /*#__PURE__*/Object.freeze({
1153
+ __proto__: null,
1154
+ Range: Range
1155
+ });
1156
+
1157
+ /** RATING */
1158
+ const Rating = (props) => {
1159
+ const { value, count = 5, mask = "mask-star", readonly = false, ...rest } = props;
1160
+
1161
+ // Generamos un ID único para el grupo de radio buttons
1162
+ const ratingGroup = `rating-${Math.random().toString(36).slice(2, 7)}`;
1163
+
1164
+ return sigpro.$html(
1165
+ "div",
1166
+ {
1167
+ ...rest,
1168
+ class: () => `rating ${val(readonly) ? "pointer-events-none" : ""} ${props.class || ""}`,
1169
+ },
1170
+ Array.from({ length: val(count) }, (_, i) => {
1171
+ const starValue = i + 1;
1172
+
1173
+ return sigpro.$html("input", {
1174
+ type: "radio",
1175
+ name: ratingGroup,
1176
+ class: `mask ${mask}`,
1177
+ "aria-label": `${starValue} star`,
1178
+ checked: () => Math.round(val(value)) === starValue,
1179
+ onchange: () => {
1180
+ if (!val(readonly) && typeof value === "function") {
1181
+ value(starValue);
1182
+ }
1183
+ },
1184
+ });
1185
+ })
1186
+ );
1187
+ };
1188
+
1189
+ var RatingModule = /*#__PURE__*/Object.freeze({
1190
+ __proto__: null,
1191
+ Rating: Rating
1192
+ });
1193
+
1194
+ /** SELECT */
1195
+ const Select = (props) => {
1196
+ const { label, options, value, ...rest } = props;
1197
+
1198
+ const selectEl = sigpro.$html(
1199
+ "select",
1200
+ {
1201
+ ...rest,
1202
+ class: joinClass("select select-bordered w-full", props.class),
1203
+ value: value
1204
+ },
1205
+ sigpro.$for(
1206
+ () => val(options) || [],
1207
+ (opt) =>
1208
+ sigpro.$html(
1209
+ "option",
1210
+ {
1211
+ value: opt.value,
1212
+ $selected: () => String(val(value)) === String(opt.value),
1213
+ },
1214
+ opt.label,
1215
+ ),
1216
+ (opt) => opt.value,
1217
+ ),
1218
+ );
1219
+
1220
+ if (!label) return selectEl;
1221
+
1222
+ return sigpro.$html("label", { class: "fieldset-label flex flex-col gap-1" }, [
1223
+ sigpro.$html("span", {}, label),
1224
+ selectEl
1225
+ ]);
1226
+ };
1227
+
1228
+ var SelectModule = /*#__PURE__*/Object.freeze({
1229
+ __proto__: null,
1230
+ Select: Select
1231
+ });
1232
+
1233
+ /** STACK */
1234
+ const Stack = (props, children) =>
1235
+ sigpro.$html("div", { ...props, class: joinClass("stack", props.class) }, children);
1236
+
1237
+ var StackModule = /*#__PURE__*/Object.freeze({
1238
+ __proto__: null,
1239
+ Stack: Stack
1240
+ });
1241
+
1242
+ /** STAT */
1243
+ const Stat = (props) =>
1244
+ sigpro.$html("div", { ...props, class: joinClass("stat", props.class) }, [
1245
+ props.icon && sigpro.$html("div", { class: "stat-figure text-secondary" }, props.icon),
1246
+ props.label && sigpro.$html("div", { class: "stat-title" }, props.label),
1247
+ sigpro.$html("div", { class: "stat-value" }, () => val(props.value) ?? props.value),
1248
+ props.desc && sigpro.$html("div", { class: "stat-desc" }, props.desc),
1249
+ ]);
1250
+
1251
+ var StatModule = /*#__PURE__*/Object.freeze({
1252
+ __proto__: null,
1253
+ Stat: Stat
1254
+ });
1255
+
1256
+ /** SWAP */
1257
+ const Swap = (props) =>
1258
+ sigpro.$html("label", { class: joinClass("swap", props.class) }, [
1259
+ sigpro.$html("input", {
1260
+ type: "checkbox",
1261
+ checked: props.value
1262
+ }),
1263
+ sigpro.$html("div", { class: "swap-on" }, props.on),
1264
+ sigpro.$html("div", { class: "swap-off" }, props.off),
1265
+ ]);
1266
+
1267
+ var SwapModule = /*#__PURE__*/Object.freeze({
1268
+ __proto__: null,
1269
+ Swap: Swap
1270
+ });
1271
+
1272
+ /** TABLE */
1273
+ const Table = (props) => {
1274
+ const {
1275
+ items = [],
1276
+ columns = [],
1277
+ keyFn,
1278
+ zebra = false,
1279
+ pinRows = false,
1280
+ empty = tt("nodata")(),
1281
+ ...rest
1282
+ } = props;
1283
+
1284
+ const tableClass = () => joinClass(
1285
+ "table",
1286
+ `${val(zebra) ? "table-zebra" : ""} ${val(pinRows) ? "table-pin-rows" : ""} ${props.class || ""}`
1287
+ );
1288
+
1289
+ return sigpro.$html("div", { class: "overflow-x-auto w-full bg-base-100 rounded-box border border-base-300" }, [
1290
+ sigpro.$html("table", { ...rest, class: tableClass }, [
1291
+ sigpro.$html("thead", {}, [
1292
+ sigpro.$html("tr", {},
1293
+ columns.map(col => sigpro.$html("th", { class: col.class || "" }, col.label))
1294
+ )
1295
+ ]),
1296
+ sigpro.$html("tbody", {}, [
1297
+ sigpro.$for(items, (item, index) => {
1298
+ return sigpro.$html("tr", { class: "hover" },
1299
+ columns.map(col => {
1300
+ const cellContent = () => {
1301
+ if (col.render) return col.render(item, index);
1302
+ const value = item[col.key];
1303
+ return val(value);
1304
+ };
1305
+ return sigpro.$html("td", { class: col.class || "" }, [cellContent]);
1306
+ })
1307
+ );
1308
+ }, keyFn || ((item, idx) => item.id || idx)),
1309
+
1310
+ sigpro.$if(() => val(items).length === 0, () =>
1311
+ sigpro.$html("tr", {}, [
1312
+ sigpro.$html("td", { colspan: columns.length, class: "text-center p-10 opacity-50" }, [
1313
+ val(empty)
1314
+ ])
1315
+ ])
1316
+ )
1317
+ ]),
1318
+ sigpro.$if(() => columns.some(c => c.footer), () =>
1319
+ sigpro.$html("tfoot", {}, [
1320
+ sigpro.$html("tr", {},
1321
+ columns.map(col => sigpro.$html("th", {}, col.footer || ""))
1322
+ )
1323
+ ])
1324
+ )
1325
+ ])
1326
+ ]);
1327
+ };
1328
+
1329
+ var TableModule = /*#__PURE__*/Object.freeze({
1330
+ __proto__: null,
1331
+ Table: Table
1332
+ });
1333
+
1334
+ /** TABS */
1335
+ const Tabs = (props) => {
1336
+ const { items, ...rest } = props;
1337
+ const itemsSignal = typeof items === "function" ? items : () => items || [];
1338
+
1339
+ return sigpro.$html("div", { ...rest, class: "flex flex-col gap-4 w-full" }, [
1340
+ sigpro.$html(
1341
+ "div",
1342
+ {
1343
+ role: "tablist",
1344
+ class: joinClass("tabs tabs-box", props.class),
1345
+ },
1346
+ sigpro.$for(
1347
+ itemsSignal,
1348
+ (it) =>
1349
+ sigpro.$html(
1350
+ "a",
1351
+ {
1352
+ role: "tab",
1353
+ class: () => joinClass(
1354
+ "tab",
1355
+ val(it.active) && "tab-active",
1356
+ val(it.disabled) && "tab-disabled",
1357
+ it.tip && "tooltip"
1358
+ ),
1359
+ "data-tip": it.tip,
1360
+ onclick: (e) => !val(it.disabled) && it.onclick?.(e),
1361
+ },
1362
+ it.label,
1363
+ ),
1364
+ (t) => t.label,
1365
+ ),
1366
+ ),
1367
+ () => {
1368
+ const active = itemsSignal().find((it) => val(it.active));
1369
+ if (!active) return null;
1370
+ const content = val(active.content);
1371
+ return sigpro.$html("div", { class: "p-4" }, [
1372
+ typeof content === "function" ? content() : content
1373
+ ]);
1374
+ },
1375
+ ]);
1376
+ };
1377
+
1378
+ var TabsModule = /*#__PURE__*/Object.freeze({
1379
+ __proto__: null,
1380
+ Tabs: Tabs
1381
+ });
1382
+
1383
+ /** TIMELINE */
1384
+ const Timeline = (props) => {
1385
+ const { items = [], vertical = true, compact = false, ...rest } = props;
1386
+
1387
+ const icons = {
1388
+ info: iconInfo,
1389
+ success: iconSuccess,
1390
+ warning: iconWarning,
1391
+ error: iconError,
1392
+ };
1393
+
1394
+ return sigpro.$html(
1395
+ "ul",
1396
+ {
1397
+ ...rest,
1398
+ class: () =>
1399
+ `timeline ${val(vertical) ? "timeline-vertical" : "timeline-horizontal"} ${
1400
+ val(compact) ? "timeline-compact" : ""
1401
+ } ${props.class || ""}`,
1402
+ },
1403
+ [
1404
+ sigpro.$for(
1405
+ items,
1406
+ (item, i) => {
1407
+ const isFirst = i === 0;
1408
+ const isLast = i === val(items).length - 1;
1409
+ const itemType = item.type || "success";
1410
+ const renderSlot = (content) => (typeof content === "function" ? content() : content);
1411
+
1412
+ return sigpro.$html("li", { class: "flex-1" }, [
1413
+ !isFirst ? sigpro.$html("hr", { class: item.completed ? "bg-primary" : "" }) : null,
1414
+ sigpro.$html("div", { class: "timeline-start" }, [renderSlot(item.title)]),
1415
+ sigpro.$html("div", { class: "timeline-middle" }, [
1416
+ sigpro.$html("img", {
1417
+ src: icons[itemType] || item.icon || icons.success,
1418
+ class: "w-4 h-4 object-contain mx-1",
1419
+ alt: itemType,
1420
+ }),
1421
+ ]),
1422
+ sigpro.$html("div", { class: "timeline-end timeline-box shadow-sm" }, [renderSlot(item.detail)]),
1423
+ !isLast ? sigpro.$html("hr", { class: item.completed ? "bg-primary" : "" }) : null,
1424
+ ]);
1425
+ },
1426
+ (item, i) => item.id || i,
1427
+ ),
1428
+ ],
1429
+ );
1430
+ };
1431
+
1432
+ var TimelineModule = /*#__PURE__*/Object.freeze({
1433
+ __proto__: null,
1434
+ Timeline: Timeline
1435
+ });
1436
+
1437
+ /** TOAST (Imperative Function) */
1438
+ const Toast = (message, type = "alert-success", duration = 3500) => {
1439
+ let container = document.getElementById("sigpro-toast-container");
1440
+
1441
+ // Crear el contenedor global si no existe
1442
+ if (!container) {
1443
+ container = sigpro.$html("div", {
1444
+ id: "sigpro-toast-container",
1445
+ class: "fixed top-0 right-0 z-[9999] p-4 flex flex-col gap-2 pointer-events-none",
1446
+ });
1447
+ document.body.appendChild(container);
1448
+ }
1449
+
1450
+ const toastHost = sigpro.$html("div", { style: "display: contents" });
1451
+ container.appendChild(toastHost);
1452
+
1453
+ let timeoutId;
1454
+
1455
+ const close = () => {
1456
+ clearTimeout(timeoutId);
1457
+ const el = toastHost.firstElementChild;
1458
+ if (el && !el.classList.contains("opacity-0")) {
1459
+ el.classList.add("translate-x-full", "opacity-0");
1460
+ setTimeout(() => {
1461
+ instance.destroy();
1462
+ toastHost.remove();
1463
+ // Limpiar el contenedor si ya no hay más toasts
1464
+ if (!container.hasChildNodes()) container.remove();
1465
+ }, 300);
1466
+ } else {
1467
+ instance.destroy();
1468
+ toastHost.remove();
1469
+ }
1470
+ };
1471
+
1472
+ const ToastComponent = () => {
1473
+ const el = sigpro.$html(
1474
+ "div",
1475
+ {
1476
+ class: `alert alert-soft ${type} shadow-lg transition-all duration-300 translate-x-10 opacity-0 pointer-events-auto`,
1477
+ },
1478
+ [
1479
+ sigpro.$html("span", {}, [typeof message === "function" ? message() : message]),
1480
+ Button({ class: "btn-xs btn-circle btn-ghost", onclick: close }, "✕")
1481
+ ],
1482
+ );
1483
+
1484
+ // Animación de entrada
1485
+ requestAnimationFrame(() => el.classList.remove("translate-x-10", "opacity-0"));
1486
+ return el;
1487
+ };
1488
+
1489
+ const instance = sigpro.$mount(ToastComponent, toastHost);
1490
+
1491
+ if (duration > 0) {
1492
+ timeoutId = setTimeout(close, duration);
1493
+ }
1494
+
1495
+ return close;
1496
+ };
1497
+
1498
+ var ToastModule = /*#__PURE__*/Object.freeze({
1499
+ __proto__: null,
1500
+ Toast: Toast
1501
+ });
1502
+
1503
+ /** TOOLTIP */
1504
+ const Tooltip = (props, children) =>
1505
+ sigpro.$html("div", { ...props, class: joinClass("tooltip", props.class), "data-tip": props.tip }, children);
1506
+
1507
+ var TooltipModule = /*#__PURE__*/Object.freeze({
1508
+ __proto__: null,
1509
+ Tooltip: Tooltip
1510
+ });
1511
+
1512
+ const Components = {
1513
+ ...AccordionModule,
1514
+ ...AlertModule,
1515
+ ...AutocompleteModule,
1516
+ ...BadgeModule,
1517
+ ...ButtonModule,
1518
+ ...CheckboxModule,
1519
+ ...ColorpickerModule,
1520
+ ...DatepickerModule,
1521
+ ...DrawerModule,
1522
+ ...DropdownModule,
1523
+ ...FabModule,
1524
+ ...FieldsetModule,
1525
+ ...FileinputModule,
1526
+ ...IndicatorModule,
1527
+ ...InputModule,
1528
+ ...ListModule,
1529
+ ...LoadingModule,
1530
+ ...MenuModule,
1531
+ ...ModalModule,
1532
+ ...NavbarModule,
1533
+ ...RadioModule,
1534
+ ...RangeModule,
1535
+ ...RatingModule,
1536
+ ...SelectModule,
1537
+ ...StackModule,
1538
+ ...StatModule,
1539
+ ...SwapModule,
1540
+ ...TableModule,
1541
+ ...TabsModule,
1542
+ ...TimelineModule,
1543
+ ...ToastModule,
1544
+ ...TooltipModule
1545
+ };
1546
+
1547
+ var index = {
1548
+ ...Components,
1549
+ install: (target = window) => {
1550
+ Object.entries(Components).forEach(([name, component]) => {
1551
+ target[name] = component;
1552
+ });
1553
+ console.log("🚀 SigproUI");
1554
+ }
1555
+ };
1556
+
1557
+ var Components$1 = /*#__PURE__*/Object.freeze({
1558
+ __proto__: null,
1559
+ Accordion: Accordion,
1560
+ Alert: Alert,
1561
+ Autocomplete: Autocomplete,
1562
+ Badge: Badge,
1563
+ Button: Button,
1564
+ Checkbox: Checkbox,
1565
+ Colorpicker: Colorpicker,
1566
+ Datepicker: Datepicker,
1567
+ Drawer: Drawer,
1568
+ Dropdown: Dropdown,
1569
+ Fab: Fab,
1570
+ Fieldset: Fieldset,
1571
+ Fileinput: Fileinput,
1572
+ Indicator: Indicator,
1573
+ Input: Input,
1574
+ List: List,
1575
+ Loading: Loading,
1576
+ Menu: Menu,
1577
+ Modal: Modal,
1578
+ Navbar: Navbar,
1579
+ Radio: Radio,
1580
+ Range: Range,
1581
+ Rating: Rating,
1582
+ Select: Select,
1583
+ Stack: Stack,
1584
+ Stat: Stat,
1585
+ Swap: Swap,
1586
+ Table: Table,
1587
+ Tabs: Tabs,
1588
+ Timeline: Timeline,
1589
+ Toast: Toast,
1590
+ Tooltip: Tooltip,
1591
+ default: index
1592
+ });
1593
+
1594
+ /**
1595
+ * SigproUI - Entry Point
1596
+ */
1597
+
1598
+
1599
+ const SigproUI = {
1600
+ ...Components$1,
1601
+ Icons,
1602
+ Utils,
1603
+ tt,
1604
+
1605
+ install: (target = (typeof window !== 'undefined' ? window : {})) => {
1606
+ Object.entries(Components$1).forEach(([name, component]) => {
1607
+ target[name] = component;
1608
+ });
1609
+
1610
+ target.Icons = Icons;
1611
+ target.Utils = Utils;
1612
+ target.tt = tt;
1613
+
1614
+ console.log("🌟 SigproUI");
1615
+ }
1616
+ };
1617
+
1618
+ if (typeof window !== 'undefined') {
1619
+ SigproUI.install(window);
1620
+ }
1621
+
1622
+ exports.Accordion = Accordion;
1623
+ exports.Alert = Alert;
1624
+ exports.Autocomplete = Autocomplete;
1625
+ exports.Badge = Badge;
1626
+ exports.Button = Button;
1627
+ exports.Checkbox = Checkbox;
1628
+ exports.Colorpicker = Colorpicker;
1629
+ exports.Datepicker = Datepicker;
1630
+ exports.Drawer = Drawer;
1631
+ exports.Dropdown = Dropdown;
1632
+ exports.Fab = Fab;
1633
+ exports.Fieldset = Fieldset;
1634
+ exports.Fileinput = Fileinput;
1635
+ exports.Indicator = Indicator;
1636
+ exports.Input = Input;
1637
+ exports.List = List;
1638
+ exports.Loading = Loading;
1639
+ exports.Menu = Menu;
1640
+ exports.Modal = Modal;
1641
+ exports.Navbar = Navbar;
1642
+ exports.Radio = Radio;
1643
+ exports.Range = Range;
1644
+ exports.Rating = Rating;
1645
+ exports.Select = Select;
1646
+ exports.Stack = Stack;
1647
+ exports.Stat = Stat;
1648
+ exports.Swap = Swap;
1649
+ exports.Table = Table;
1650
+ exports.Tabs = Tabs;
1651
+ exports.Timeline = Timeline;
1652
+ exports.Toast = Toast;
1653
+ exports.Tooltip = Tooltip;
1654
+ exports.default = SigproUI;
1655
+ exports.icon123 = icon123;
1656
+ exports.iconAbc = iconAbc;
1657
+ exports.iconCalendar = iconCalendar;
1658
+ exports.iconClose = iconClose;
1659
+ exports.iconError = iconError;
1660
+ exports.iconHide = iconHide;
1661
+ exports.iconInfo = iconInfo;
1662
+ exports.iconLLeft = iconLLeft;
1663
+ exports.iconLeft = iconLeft;
1664
+ exports.iconLock = iconLock;
1665
+ exports.iconMail = iconMail;
1666
+ exports.iconRRight = iconRRight;
1667
+ exports.iconRight = iconRight;
1668
+ exports.iconShow = iconShow;
1669
+ exports.iconSuccess = iconSuccess;
1670
+ exports.iconUpload = iconUpload;
1671
+ exports.iconWarning = iconWarning;
1672
+ exports.joinClass = joinClass;
1673
+ exports.tt = tt;
1674
+ exports.val = val;
1675
+
1676
+ Object.defineProperty(exports, '__esModule', { value: true });
1677
+
1678
+ return exports;
1679
+
1680
+ })({}, SigPro);