selectyc 0.0.10 → 0.0.12

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.
package/dist/selectyc.css CHANGED
@@ -1 +1 @@
1
- .custom-multiselect{position:relative;width:100%}.selected-items{display:flex;gap:5px;padding:8px;border:1px solid;cursor:default;align-items:center;@apply bg-gray-50 border-gray-300 text-gray-900 text-sm focus:ring-blue-500 focus:border-[2px] focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500;}.horizontal-overflow{flex-wrap:nowrap;height:42px;white-space:nowrap;overflow-x:auto;overflow-y:hidden}.vertical-overflow{flex-wrap:wrap;min-height:42px;height:auto;max-height:120px;white-space:nowrap;overflow-x:auto;overflow-y:auto}.round{@apply rounded-lg;}.roundt{@apply rounded-t-lg;}.round-l{@apply rounded-l-lg;}.round-r{@apply rounded-r-lg;}.round-lt{@apply rounded-tl-lg;}.round-rt{@apply rounded-tr-lg;}.selected-items::-webkit-scrollbar{height:6px;width:8px}.selected-items::-webkit-scrollbar-thumb{border-radius:1rem;@apply bg-cyan-400 dark:bg-cyan-700;}.selected-items::-webkit-scrollbar-thumb:hover{@apply bg-cyan-500 dark:bg-cyan-600;}.custom-single-select{width:97%;padding-left:.2rem;border:0px solid;background:transparent;cursor:default}.custom-single-select:focus{border:0px solid transparent;outline:none;box-shadow:none}.selected-tag{background-color:#007bff;color:#fff;padding:4px 8px;border-radius:12px;display:inline-flex;align-items:center;gap:5px;font-size:14px;white-space:nowrap;flex:0 0 auto}.remove-tag{cursor:pointer;font-weight:700;border:solid 0px;border-radius:.5rem;padding:1px 6px;@apply hover:bg-blue-400 dark:hover:bg-sky-800;}.global-dropdown{position:absolute;background-color:#374151;max-height:200px;overflow-y:auto;display:none;z-index:999;box-shadow:0 2px 8px #0003;border-bottom-left-radius:.6rem;border-bottom-right-radius:.6rem;@apply bg-gray-50 dark:bg-gray-700;}.global-dropdown::-webkit-scrollbar{width:10px;border-radius:.6rem;@apply bg-gray-200 dark:bg-gray-400;}.global-dropdown::-webkit-scrollbar-thumb{border-radius:.6rem;@apply bg-gray-400 dark:bg-gray-600;}.search-input{position:absolute;width:100%;padding:3px 10px;border:1px solid;display:none;z-index:999;outline:none;color:#000;font-size:.9rem;@apply bg-white dark:bg-gray-600 dark:border-gray-500 dark:text-white border-blue-500;}.search-input:focus{@apply dark:border-gray-500 border-blue-500;}.search-input::placeholder{@apply text-gray-700 dark:text-gray-400;}.select-option{padding:3px 10px;cursor:pointer;font-size:.9rem}.select-option:hover{background-color:#3777de;color:#fff}
1
+ .custom-multiselect{position:relative;width:100%}.selected-items{display:flex;gap:5px;padding:8px;border:1px solid;cursor:pointer;align-items:center;@apply bg-gray-50 border-gray-300 text-gray-900 text-sm focus:ring-blue-500 focus:border-[2px] focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500;}.horizontal-overflow{flex-wrap:nowrap;height:42px;white-space:nowrap;overflow-x:auto;overflow-y:hidden}.vertical-overflow{flex-wrap:wrap;min-height:42px;height:auto;max-height:120px;white-space:nowrap;overflow-x:auto;overflow-y:auto}.round{@apply rounded-lg;}.roundt{@apply rounded-t-lg;}.round-l{@apply rounded-l-lg;}.round-r{@apply rounded-r-lg;}.round-lt{@apply rounded-tl-lg;}.round-rt{@apply rounded-tr-lg;}.selected-items::-webkit-scrollbar{height:6px;width:8px}.selected-items::-webkit-scrollbar-thumb{border-radius:1rem;@apply bg-cyan-400 dark:bg-cyan-700;}.selected-items::-webkit-scrollbar-thumb:hover{@apply bg-cyan-500 dark:bg-cyan-600;}.custom-single-select{width:97%;padding-left:.2rem;border:0px solid;background:transparent;font-size:.9rem;cursor:pointer}.custom-single-select:focus{border:0px solid transparent;outline:none;box-shadow:none}.custom-single-select::placeholder{opacity:.7;font-style:italic;font-size:14px}.selected-tag{background-color:#007bff;color:#fff;padding:4px 8px;border-radius:12px;display:inline-flex;align-items:center;gap:5px;font-size:14px;white-space:nowrap;flex:0 0 auto}.remove-tag{cursor:pointer;font-weight:700;border:solid 0px;border-radius:.5rem;padding:1px 6px;@apply hover:bg-blue-400 dark:hover:bg-sky-800;}.global-dropdown{position:absolute;background-color:#374151;max-height:200px;overflow-y:auto;display:none;z-index:999;box-shadow:0 2px 8px #0003;border-bottom-left-radius:.6rem;border-bottom-right-radius:.6rem;@apply bg-gray-50 dark:bg-gray-700;}.global-dropdown::-webkit-scrollbar{width:10px;border-radius:.6rem;@apply bg-gray-200 dark:bg-gray-400;}.global-dropdown::-webkit-scrollbar-thumb{border-radius:.6rem;@apply bg-gray-400 dark:bg-gray-600;}.search-input{position:absolute;width:100%;padding:3px 10px;border:1px solid;display:none;z-index:999;outline:none;color:#000;font-size:.9rem;@apply bg-white dark:bg-gray-600 dark:border-gray-500 dark:text-white border-blue-500;}.search-input:focus{@apply dark:border-gray-500 border-blue-500;}.search-input::placeholder{@apply text-gray-700 dark:text-gray-400;}.select-option{padding:3px 10px;cursor:pointer;font-size:.9rem}.select-option:hover{background-color:#3777de;color:#fff}
package/dist/selectyc.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import './selectyc.css';
2
- class h {
2
+ class l {
3
3
  constructor(t) {
4
4
  this.route = t;
5
5
  }
6
6
  static make(t) {
7
- return new h(t);
7
+ return new l(t);
8
8
  }
9
9
  setMethod(t) {
10
10
  return this.method = t, this;
@@ -46,20 +46,21 @@ class h {
46
46
  }
47
47
  }
48
48
  }
49
- class l {
49
+ class h {
50
50
  #t = [];
51
51
  #c;
52
- #p = [];
53
- #l;
54
- #y;
52
+ #m = [];
53
+ #d;
54
+ #g;
55
55
  #s;
56
56
  #e;
57
57
  #i;
58
- #r;
58
+ #a;
59
+ #u;
59
60
  #n = !1;
61
+ #p = !1;
60
62
  #f = !1;
61
- #u = !1;
62
- #C = "";
63
+ #b = "";
63
64
  #S = '<svg class="w-5 h-5 text-gray-900 dark:text-gray-400" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/></svg>';
64
65
  constructor(t) {
65
66
  if (window.selects === void 0 && (window.selects = []), window.selects[t] !== void 0)
@@ -67,7 +68,7 @@ class l {
67
68
  this.id = t, this.name, this.data = [], this.isMultiple = !1, this.clearButton = !1, this.singleLabel = " ", this.records = 10, this.filter = null, this.bodyRound = "", this.width = "100%", this.searchInputActive = !0, this.bodyData = null, this.boxOverflow = "horizontal", window.selects[t] = this;
68
69
  }
69
70
  static set(t) {
70
- return new l(t);
71
+ return new h(t);
71
72
  }
72
73
  setData(t) {
73
74
  return this.data = t, this;
@@ -79,7 +80,7 @@ class l {
79
80
  return this.clearButton = !0, this;
80
81
  }
81
82
  setSelectedOptions(t) {
82
- this.#t = t, this.#d(t);
83
+ this.#t = t, this.#r(t);
83
84
  }
84
85
  getSelectedOptions() {
85
86
  return this.#t;
@@ -122,42 +123,46 @@ class l {
122
123
  }
123
124
  cleanSelection() {
124
125
  const t = this.#t;
125
- this.#t = [], this.#d(t);
126
+ this.#t = [], this.#r(t);
126
127
  }
127
- #b() {
128
- this.#x(), this.#s.addEventListener("click", (t) => {
128
+ #x() {
129
+ this.#E(), this.#s.addEventListener("click", (t) => {
129
130
  if (t.target.classList.contains("remove-tag")) {
130
- this.#T(t.target.getAttribute("data-value")), this.onUnselect !== void 0 && this.onUnselect(t.target.getAttribute("data-value")), this.#n && this.#h(), this.#m();
131
+ this.#A(t.target.getAttribute("data-value")), this.onUnselect !== void 0 && this.onUnselect(t.target.getAttribute("data-value"), this), this.#n && this.#h(), this.#v();
131
132
  return;
132
133
  }
133
- this.#n ? this.#h() : this.#m();
134
+ this.#n ? this.#h() : this.#v();
134
135
  }), document.addEventListener("click", (t) => {
135
- !this.#l.contains(t.target) && !this.#e.contains(t.target) && !t.target.classList.contains("remove-tag") && this.#h();
136
+ !this.#d.contains(t.target) && !this.#e.contains(t.target) && !t.target.classList.contains("remove-tag") && this.#h();
136
137
  }), window.onresize = () => {
137
138
  this.#h();
138
- }, this.isMultiple && this.#v();
139
+ }, this.isMultiple && this.#C();
139
140
  }
140
141
  // Draw functions
141
- #x() {
142
- this.#D();
142
+ #E() {
143
+ this.#I();
143
144
  const t = document.createElement("div");
144
- t.className = "main-div-selectyc", t.style.width = this.width;
145
+ t.className = "main-div-selectyc", t.style.width = this.width, t.id = `selectyc_main_div_${this.id}`;
145
146
  const e = document.createElement("div");
146
147
  e.className = "custom-multiselect";
147
148
  let s = document.createElement("div");
148
- s.className = "selected-items round" + this.bodyRound, s.tabIndex = 0, s.classList.add(this.boxOverflow === "horizontal" ? "horizontal-overflow" : "vertical-overflow"), this.isMultiple || (s = this.#E(s)), e.appendChild(s), e.appendChild(this.#L()), t.appendChild(e);
149
+ s.className = "selected-items round" + this.bodyRound, s.tabIndex = 0, s.classList.add(this.boxOverflow === "horizontal" ? "horizontal-overflow" : "vertical-overflow"), this.isMultiple || (s = this.#D(s)), e.appendChild(s), e.appendChild(this.#N()), t.appendChild(e);
149
150
  const i = document.getElementById(this.id), a = document.createElement("input");
150
- a.name = i.name, a.style.display = "none";
151
+ a.name = i.name, a.id = i.id, this.rootClassName !== "" && (a.className = i.className), a.style.display = "none";
151
152
  let n = i.parentNode;
152
- t.appendChild(a), n.replaceChild(t, i), this.#c = a, this.#y = s, this.#l = e, this.#s = this.#l.querySelector(".selected-items"), !this.isMultiple && this.#t.length > 0 && (this.#c.value = this.#t[0].value);
153
+ t.appendChild(a), n.replaceChild(t, i), this.#c = a, this.#g = s, this.#d = e, this.#s = this.#d.querySelector(".selected-items"), !this.isMultiple && this.#t.length > 0 && (this.#c.value = this.#t[0].value);
153
154
  }
154
- #E(t) {
155
+ #D(t) {
155
156
  const e = document.createElement("input");
156
- e.className = "custom-single-select", e.value = this.#t.length === 0 ? this.singleLabel : this.#t[0].text, e.required = this.#f, e.readOnly = !0;
157
+ e.className = "custom-single-select", e.id = `selectyc_text_box_${this.id}`, e.placeholder = this.singleLabel, e.value = this.#t.length === 0 ? null : this.#t[0].text, e.readOnly = !0;
157
158
  const s = document.createElement("div");
158
- return s.innerHTML = this.#S, t.appendChild(e), t.appendChild(s), this.#r = e, t;
159
+ return s.innerHTML = this.#S, this.#p && t.appendChild(this.#L()), t.appendChild(e), t.appendChild(s), this.#a = e, t;
159
160
  }
160
161
  #L() {
162
+ const t = document.createElement("input");
163
+ return t.type = "text", t.required = this.#p, t.tabIndex = -1, t.style.position = "absolute", t.style.opacity = "0", t.style.pointerEvents = "none", t.style.height = "0", t.style.width = "0", t.style.left = "50%", t.value = this.#t.length === 0 ? "" : this.#t[0].text, this.#u = t, t;
164
+ }
165
+ #N() {
161
166
  const t = document.createElement("div");
162
167
  t.setAttribute("style", "position:fixed; z-index:999;");
163
168
  const e = document.createElement("div");
@@ -165,90 +170,93 @@ class l {
165
170
  let s;
166
171
  return e.addEventListener("scroll", (i) => {
167
172
  s && clearTimeout(s), s = setTimeout(() => {
168
- this.#A(i);
173
+ this.#B(i);
169
174
  }, 70);
170
175
  }), t.appendChild(e), this.#e = e, t;
171
176
  }
172
177
  #O() {
173
178
  const t = document.createElement("input");
174
179
  return t.type = "text", t.id = "selectyc_search_input", t.className = "search-input", t.placeholder = "Buscar...", t.addEventListener("input", () => {
175
- this.filter = t.value, this.#e.innerHTML = "", this.filter = t.value, this.#w();
180
+ this.filter = t.value, this.#e.innerHTML = "", this.filter = t.value, this.#y();
176
181
  }), this.#i = t, t;
177
182
  }
178
- #a(t) {
183
+ #l(t) {
179
184
  const e = document.createElement("div");
180
185
  e.className = "select-option", e.setAttribute("data-value", t.id), e.textContent = t.text, this.#e.appendChild(e), e.addEventListener("click", () => {
181
- t.id !== "sin_resultados" && (this.#N(t.text, t.id), this.onSelect !== void 0 && this.onSelect(t.id), this.#h());
186
+ t.id !== "sin_resultados" && (this.#T(t.text, t.id), this.onSelect !== void 0 && this.onSelect(t.id, this), this.#h());
182
187
  });
183
188
  }
184
189
  // Functions
185
- #D() {
190
+ #I() {
186
191
  const t = document.getElementById(this.id);
187
- this.name = t.name, this.#f = t.required, Array.from(t.options).forEach((e) => {
192
+ this.name = t.name, this.#p = t.required, this.rootClassName = t.className, Array.from(t.options).forEach((e) => {
188
193
  if (e.outerHTML.includes("selected")) {
189
194
  const s = e.text, i = this.#o(e.value);
190
195
  this.isMultiple ? this.#t.push({ value: i, text: s }) : this.#t[0] = { value: i, text: s };
191
196
  }
192
- this.#p.push({ id: this.#o(e.value), text: e.text });
197
+ this.#m.push({ id: this.#o(e.value), text: e.text });
193
198
  });
194
199
  }
195
- #m() {
200
+ #v() {
196
201
  if (this.#n)
197
202
  return;
198
203
  this.#s.classList.remove(`round${this.bodyRound}`), this.#s.classList.add(`round${this.bodyRound}t`);
199
- const t = this.#l.getBoundingClientRect();
204
+ const t = this.#d.getBoundingClientRect();
200
205
  if (this.searchInputActive) {
201
206
  this.#i.style.display = "block", this.#i.style.width = t.width + "px";
202
207
  const e = this.#i.offsetHeight;
203
208
  this.#e.style.top = e + "px";
204
209
  }
205
- this.#e.style.width = t.width + "px", this.#e.innerHTML = "", this.#e.style.display = "block", this.searchInputActive && this.#i.focus(), this.#w(), this.#n = !0;
210
+ this.#e.style.width = t.width + "px", this.#e.innerHTML = "", this.#e.style.display = "block", this.searchInputActive && this.#i.focus(), this.#y(), this.#n = !0;
206
211
  }
207
212
  #h() {
208
213
  this.#n && (this.#e.innerHTML = "", this.#e.style.display = "none", this.searchInputActive && (this.#i.style.display = "none"), this.#s.classList.add(`round${this.bodyRound}`), this.#n = !1);
209
214
  }
210
- async #g() {
215
+ async #w() {
211
216
  if (this.RS === void 0)
212
217
  return this.data;
213
218
  let t = { records: this.records, filter: this.filter };
214
- t !== null && (t = { ...t, ...this.bodyData });
215
- const e = await h.make(this.RS).addData(t).setMethod("POST").go(), s = Array.isArray(e) ? e : e.data;
216
- return this.data = Array.from(new Map([...this.#p, ...s].map((i) => [i.id, i])).values()), this.data;
217
- }
218
- async #w() {
219
- this.#a({ id: "loading", text: "cargando ..." }), this.records = 10 + this.#t.length, this.#u = !1;
220
- let t = await this.#g();
219
+ if (typeof this.bodyData == "function") {
220
+ const i = this.bodyData();
221
+ t = { ...t, ...i };
222
+ } else this.bodyData !== null && (t = { ...t, ...this.bodyData });
223
+ const e = await l.make(this.RS).addData(t).setMethod("POST").go(), s = Array.isArray(e) ? e : e.data;
224
+ return this.data = Array.from(new Map([...this.#m, ...s].map((i) => [i.id, i])).values()), this.data;
225
+ }
226
+ async #y() {
227
+ this.#l({ id: "loading", text: "cargando ..." }), this.records = 10 + this.#t.length, this.#f = !1;
228
+ let t = await this.#w();
221
229
  const e = this.#t.map((s) => s.value);
222
230
  this.#e.lastChild.dataset.value === "loading" && this.#e.removeChild(this.#e.lastChild), t.forEach((s) => {
223
- s.text.toLowerCase().includes(this.#C.toLowerCase()) && !e.includes(s.id) && this.#a(s);
224
- }), this.#e.hasChildNodes() || this.#a({ id: "sin_resultados", text: "sin resultados ..." });
231
+ s.text.toLowerCase().includes(this.#b.toLowerCase()) && !e.includes(s.id) && this.#l(s);
232
+ }), this.#e.hasChildNodes() || this.#l({ id: "sin_resultados", text: "sin resultados ..." });
225
233
  }
226
234
  async #M() {
227
235
  const t = this.#t.map((n) => n.value);
228
236
  let e = this.filter === null ? "" : this.filter, s = this.data.map((n) => n.id);
229
237
  this.records = this.records + 10 + this.#t.length;
230
- let i = await this.#g();
238
+ let i = await this.#w();
231
239
  this.#e.lastChild.dataset.value === "loading" && this.#e.removeChild(this.#e.lastChild);
232
240
  const a = this.#e.lastChild.dataset.value;
233
241
  i.forEach((n) => {
234
- n.text.toLowerCase().includes(e.toLowerCase()) && !t.includes(n.id) && !s.includes(n.id) && this.#a(n);
235
- }), this.#u = a === this.#e.lastChild.dataset.value;
242
+ n.text.toLowerCase().includes(e.toLowerCase()) && !t.includes(n.id) && !s.includes(n.id) && this.#l(n);
243
+ }), this.#f = a === this.#e.lastChild.dataset.value;
236
244
  }
237
- #N(t, e) {
238
- this.#t.find((i) => i.value === e) || (this.isMultiple || (this.#t = []), this.#t.push({ text: t, value: e })), this.#d(e);
245
+ #T(t, e) {
246
+ this.#t.find((i) => i.value === e) || (this.isMultiple || (this.#t = []), this.#t.push({ text: t, value: e })), this.#r(e);
239
247
  }
240
- #d(t) {
241
- this.onChange !== void 0 && this.onChange(t), this.isMultiple ? this.#v() : this.#I();
248
+ #r(t) {
249
+ this.onChange !== void 0 && this.onChange(t, this), this.isMultiple ? this.#C() : this.#R();
242
250
  }
243
- #I() {
244
- this.#r.value = null, this.#r.value = this.#t.length > 0 ? this.#t[0].text : this.singleLabel, this.#c.value = this.#t.length > 0 ? this.#t[0].value : null;
245
- const t = this.#r.parentNode, e = t.firstChild;
251
+ #R() {
252
+ this.#a.value = null, this.#u.value = null, this.#a.value = this.#t.length > 0 ? this.#t[0].text : null, this.#u.value = this.#t.length > 0 ? this.#t[0].text : null, this.#a.placeholder = this.singleLabel, this.#c.value = this.#t.length > 0 ? this.#t[0].value : null;
253
+ const t = this.#a.parentNode, e = t.firstChild;
246
254
  if (e.className === "remove-tag" && e.remove(), !this.clearButton || this.#t.length <= 0)
247
255
  return;
248
256
  const s = document.createElement("span");
249
257
  s.dataset.value = this.#t[0].value, s.innerHTML = "x", s.className = "remove-tag", t.insertBefore(s, t.firstChild);
250
258
  }
251
- #v() {
259
+ #C() {
252
260
  if (this.#s.innerHTML = "", this.#t.length <= 0) {
253
261
  this.#s.appendChild(document.createElement("div"));
254
262
  return;
@@ -258,20 +266,21 @@ class l {
258
266
  s.className = "selected-tag", s.innerHTML = `${t} <span class="remove-tag" data-value="${e}">x</span>`, this.#s.appendChild(s);
259
267
  });
260
268
  }
261
- #T(t) {
262
- this.#t = this.#t.filter((e) => this.#o(e.value) !== this.#o(t)), this.#d(t);
263
- }
264
269
  #A(t) {
270
+ this.#t = this.#t.filter((e) => this.#o(e.value) !== this.#o(t)), this.#r(t);
271
+ }
272
+ #B(t) {
265
273
  const { scrollTop: e, scrollHeight: s, clientHeight: i } = this.#e;
266
- t.target.lastChild !== null && (t.target.lastChild.dataset.value === "loading" || this.#u || e + (i + 1) >= s && (this.#a({ id: "loading", text: "cargando ..." }), this.#M()));
274
+ t.target.lastChild !== null && (t.target.lastChild.dataset.value === "loading" || this.#f || e + (i + 1) >= s && (this.#l({ id: "loading", text: "cargando ..." }), this.#M()));
267
275
  }
268
276
  #o(t) {
269
277
  return !isNaN(t) && !isNaN(parseFloat(t)) ? parseInt(t) : t;
270
278
  }
271
279
  async render() {
272
- this.#b();
280
+ const t = document.getElementById(this.id), e = t === null ? !1 : t.outerHTML.includes("<select");
281
+ this.#g === void 0 || e ? this.#x() : this.#r();
273
282
  }
274
283
  }
275
284
  export {
276
- l as selectyc
285
+ h as selectyc
277
286
  };
@@ -1 +1 @@
1
- (function(h,a){typeof exports=="object"&&typeof module<"u"?a(exports):typeof define=="function"&&define.amd?define(["exports"],a):(h=typeof globalThis<"u"?globalThis:h||self,a(h.selectyc={}))})(this,function(h){"use strict";class a{constructor(t){this.route=t}static make(t){return new a(t)}setMethod(t){return this.method=t,this}getMethod(){return this.method===void 0?"POST":this.method}setData(t){return this.data=t,this}addData(t){if(this.data===void 0)return this.setData(t);for(const e in t)this.data[e]=t[e];return this}setFun(t){return this.fun=t,this}async go(){try{const t={method:this.getMethod(),headers:{"X-CSRF-TOKEN":window.CSRF_TOKEN,Accept:"application/json"}};this.data!==void 0&&(t.body=this.data,Object.prototype.toString.call(this.data)!=="[object FormData]"&&(t.body=JSON.stringify(this.data),t.headers["Content-Type"]="application/json"));const e=await fetch(this.route,t);if(!e.ok){const s=await e.json();throw new Error(s.message)}return this.fun===void 0?await e.json():await this.fun(e)}catch(t){window.toastNotification.setType(!1).show(t.message)}}}class r{#t=[];#c;#f=[];#l;#y;#s;#e;#i;#r;#n=!1;#p=!1;#u=!1;#S="";#C='<svg class="w-5 h-5 text-gray-900 dark:text-gray-400" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/></svg>';constructor(t){if(window.selects===void 0&&(window.selects=[]),window.selects[t]!==void 0)return window.selects[t];this.id=t,this.name,this.data=[],this.isMultiple=!1,this.clearButton=!1,this.singleLabel=" ",this.records=10,this.filter=null,this.bodyRound="",this.width="100%",this.searchInputActive=!0,this.bodyData=null,this.boxOverflow="horizontal",window.selects[t]=this}static set(t){return new r(t)}setData(t){return this.data=t,this}setMultiple(t="horizontal"){return this.isMultiple=!0,this.boxOverflow=t,this}setClearButton(){return this.clearButton=!0,this}setSelectedOptions(t){this.#t=t,this.#d(t)}getSelectedOptions(){return this.#t}getSelectedOption(){return this.#t[0]}getOptions(){return this.data}setSingleLabel(t){return this.singleLabel=t,this}setBodyRound(t){return this.bodyRound=`-${t}`,this}setRS(t){return this.RS=t,this}setBodyData(t){return this.bodyData=t,this}desactiveSearchInput(){return this.searchInputActive=!1,this}addOption(t){this.data.push(t)}setWidth(t){return this.width=t,this}setOnSelect(t){return this.onSelect=t,this}setOnUnselect(t){return this.onUnselect=t,this}setOnChange(t){return this.onChange=t,this}cleanSelection(){const t=this.#t;this.#t=[],this.#d(t)}#b(){this.#x(),this.#s.addEventListener("click",t=>{if(t.target.classList.contains("remove-tag")){this.#T(t.target.getAttribute("data-value")),this.onUnselect!==void 0&&this.onUnselect(t.target.getAttribute("data-value")),this.#n&&this.#h(),this.#m();return}this.#n?this.#h():this.#m()}),document.addEventListener("click",t=>{!this.#l.contains(t.target)&&!this.#e.contains(t.target)&&!t.target.classList.contains("remove-tag")&&this.#h()}),window.onresize=()=>{this.#h()},this.isMultiple&&this.#v()}#x(){this.#D();const t=document.createElement("div");t.className="main-div-selectyc",t.style.width=this.width;const e=document.createElement("div");e.className="custom-multiselect";let s=document.createElement("div");s.className="selected-items round"+this.bodyRound,s.tabIndex=0,s.classList.add(this.boxOverflow==="horizontal"?"horizontal-overflow":"vertical-overflow"),this.isMultiple||(s=this.#O(s)),e.appendChild(s),e.appendChild(this.#E()),t.appendChild(e);const i=document.getElementById(this.id),l=document.createElement("input");l.name=i.name,l.style.display="none";let n=i.parentNode;t.appendChild(l),n.replaceChild(t,i),this.#c=l,this.#y=s,this.#l=e,this.#s=this.#l.querySelector(".selected-items"),!this.isMultiple&&this.#t.length>0&&(this.#c.value=this.#t[0].value)}#O(t){const e=document.createElement("input");e.className="custom-single-select",e.value=this.#t.length===0?this.singleLabel:this.#t[0].text,e.required=this.#p,e.readOnly=!0;const s=document.createElement("div");return s.innerHTML=this.#C,t.appendChild(e),t.appendChild(s),this.#r=e,t}#E(){const t=document.createElement("div");t.setAttribute("style","position:fixed; z-index:999;");const e=document.createElement("div");e.className="global-dropdown",this.searchInputActive&&t.appendChild(this.#L());let s;return e.addEventListener("scroll",i=>{s&&clearTimeout(s),s=setTimeout(()=>{this.#A(i)},70)}),t.appendChild(e),this.#e=e,t}#L(){const t=document.createElement("input");return t.type="text",t.id="selectyc_search_input",t.className="search-input",t.placeholder="Buscar...",t.addEventListener("input",()=>{this.filter=t.value,this.#e.innerHTML="",this.filter=t.value,this.#w()}),this.#i=t,t}#a(t){const e=document.createElement("div");e.className="select-option",e.setAttribute("data-value",t.id),e.textContent=t.text,this.#e.appendChild(e),e.addEventListener("click",()=>{t.id!=="sin_resultados"&&(this.#N(t.text,t.id),this.onSelect!==void 0&&this.onSelect(t.id),this.#h())})}#D(){const t=document.getElementById(this.id);this.name=t.name,this.#p=t.required,Array.from(t.options).forEach(e=>{if(e.outerHTML.includes("selected")){const s=e.text,i=this.#o(e.value);this.isMultiple?this.#t.push({value:i,text:s}):this.#t[0]={value:i,text:s}}this.#f.push({id:this.#o(e.value),text:e.text})})}#m(){if(this.#n)return;this.#s.classList.remove(`round${this.bodyRound}`),this.#s.classList.add(`round${this.bodyRound}t`);const t=this.#l.getBoundingClientRect();if(this.searchInputActive){this.#i.style.display="block",this.#i.style.width=t.width+"px";const e=this.#i.offsetHeight;this.#e.style.top=e+"px"}this.#e.style.width=t.width+"px",this.#e.innerHTML="",this.#e.style.display="block",this.searchInputActive&&this.#i.focus(),this.#w(),this.#n=!0}#h(){this.#n&&(this.#e.innerHTML="",this.#e.style.display="none",this.searchInputActive&&(this.#i.style.display="none"),this.#s.classList.add(`round${this.bodyRound}`),this.#n=!1)}async#g(){if(this.RS===void 0)return this.data;let t={records:this.records,filter:this.filter};t!==null&&(t={...t,...this.bodyData});const e=await a.make(this.RS).addData(t).setMethod("POST").go(),s=Array.isArray(e)?e:e.data;return this.data=Array.from(new Map([...this.#f,...s].map(i=>[i.id,i])).values()),this.data}async#w(){this.#a({id:"loading",text:"cargando ..."}),this.records=10+this.#t.length,this.#u=!1;let t=await this.#g();const e=this.#t.map(s=>s.value);this.#e.lastChild.dataset.value==="loading"&&this.#e.removeChild(this.#e.lastChild),t.forEach(s=>{s.text.toLowerCase().includes(this.#S.toLowerCase())&&!e.includes(s.id)&&this.#a(s)}),this.#e.hasChildNodes()||this.#a({id:"sin_resultados",text:"sin resultados ..."})}async#M(){const t=this.#t.map(n=>n.value);let e=this.filter===null?"":this.filter,s=this.data.map(n=>n.id);this.records=this.records+10+this.#t.length;let i=await this.#g();this.#e.lastChild.dataset.value==="loading"&&this.#e.removeChild(this.#e.lastChild);const l=this.#e.lastChild.dataset.value;i.forEach(n=>{n.text.toLowerCase().includes(e.toLowerCase())&&!t.includes(n.id)&&!s.includes(n.id)&&this.#a(n)}),this.#u=l===this.#e.lastChild.dataset.value}#N(t,e){this.#t.find(i=>i.value===e)||(this.isMultiple||(this.#t=[]),this.#t.push({text:t,value:e})),this.#d(e)}#d(t){this.onChange!==void 0&&this.onChange(t),this.isMultiple?this.#v():this.#I()}#I(){this.#r.value=null,this.#r.value=this.#t.length>0?this.#t[0].text:this.singleLabel,this.#c.value=this.#t.length>0?this.#t[0].value:null;const t=this.#r.parentNode,e=t.firstChild;if(e.className==="remove-tag"&&e.remove(),!this.clearButton||this.#t.length<=0)return;const s=document.createElement("span");s.dataset.value=this.#t[0].value,s.innerHTML="x",s.className="remove-tag",t.insertBefore(s,t.firstChild)}#v(){if(this.#s.innerHTML="",this.#t.length<=0){this.#s.appendChild(document.createElement("div"));return}this.#t.forEach(({text:t,value:e})=>{const s=document.createElement("div");s.className="selected-tag",s.innerHTML=`${t} <span class="remove-tag" data-value="${e}">x</span>`,this.#s.appendChild(s)})}#T(t){this.#t=this.#t.filter(e=>this.#o(e.value)!==this.#o(t)),this.#d(t)}#A(t){const{scrollTop:e,scrollHeight:s,clientHeight:i}=this.#e;t.target.lastChild!==null&&(t.target.lastChild.dataset.value==="loading"||this.#u||e+(i+1)>=s&&(this.#a({id:"loading",text:"cargando ..."}),this.#M()))}#o(t){return!isNaN(t)&&!isNaN(parseFloat(t))?parseInt(t):t}async render(){this.#b()}}h.selectyc=r,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"})});
1
+ (function(h,l){typeof exports=="object"&&typeof module<"u"?l(exports):typeof define=="function"&&define.amd?define(["exports"],l):(h=typeof globalThis<"u"?globalThis:h||self,l(h.selectyc={}))})(this,function(h){"use strict";class l{constructor(t){this.route=t}static make(t){return new l(t)}setMethod(t){return this.method=t,this}getMethod(){return this.method===void 0?"POST":this.method}setData(t){return this.data=t,this}addData(t){if(this.data===void 0)return this.setData(t);for(const e in t)this.data[e]=t[e];return this}setFun(t){return this.fun=t,this}async go(){try{const t={method:this.getMethod(),headers:{"X-CSRF-TOKEN":window.CSRF_TOKEN,Accept:"application/json"}};this.data!==void 0&&(t.body=this.data,Object.prototype.toString.call(this.data)!=="[object FormData]"&&(t.body=JSON.stringify(this.data),t.headers["Content-Type"]="application/json"));const e=await fetch(this.route,t);if(!e.ok){const s=await e.json();throw new Error(s.message)}return this.fun===void 0?await e.json():await this.fun(e)}catch(t){window.toastNotification.setType(!1).show(t.message)}}}class d{#t=[];#c;#m=[];#r;#g;#s;#e;#i;#a;#u;#n=!1;#p=!1;#f=!1;#C="";#S='<svg class="w-5 h-5 text-gray-900 dark:text-gray-400" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/></svg>';constructor(t){if(window.selects===void 0&&(window.selects=[]),window.selects[t]!==void 0)return window.selects[t];this.id=t,this.name,this.data=[],this.isMultiple=!1,this.clearButton=!1,this.singleLabel=" ",this.records=10,this.filter=null,this.bodyRound="",this.width="100%",this.searchInputActive=!0,this.bodyData=null,this.boxOverflow="horizontal",window.selects[t]=this}static set(t){return new d(t)}setData(t){return this.data=t,this}setMultiple(t="horizontal"){return this.isMultiple=!0,this.boxOverflow=t,this}setClearButton(){return this.clearButton=!0,this}setSelectedOptions(t){this.#t=t,this.#d(t)}getSelectedOptions(){return this.#t}getSelectedOption(){return this.#t[0]}getOptions(){return this.data}setSingleLabel(t){return this.singleLabel=t,this}setBodyRound(t){return this.bodyRound=`-${t}`,this}setRS(t){return this.RS=t,this}setBodyData(t){return this.bodyData=t,this}desactiveSearchInput(){return this.searchInputActive=!1,this}addOption(t){this.data.push(t)}setWidth(t){return this.width=t,this}setOnSelect(t){return this.onSelect=t,this}setOnUnselect(t){return this.onUnselect=t,this}setOnChange(t){return this.onChange=t,this}cleanSelection(){const t=this.#t;this.#t=[],this.#d(t)}#x(){this.#E(),this.#s.addEventListener("click",t=>{if(t.target.classList.contains("remove-tag")){this.#A(t.target.getAttribute("data-value")),this.onUnselect!==void 0&&this.onUnselect(t.target.getAttribute("data-value"),this),this.#n&&this.#h(),this.#y();return}this.#n?this.#h():this.#y()}),document.addEventListener("click",t=>{!this.#r.contains(t.target)&&!this.#e.contains(t.target)&&!t.target.classList.contains("remove-tag")&&this.#h()}),window.onresize=()=>{this.#h()},this.isMultiple&&this.#b()}#E(){this.#I();const t=document.createElement("div");t.className="main-div-selectyc",t.style.width=this.width,t.id=`selectyc_main_div_${this.id}`;const e=document.createElement("div");e.className="custom-multiselect";let s=document.createElement("div");s.className="selected-items round"+this.bodyRound,s.tabIndex=0,s.classList.add(this.boxOverflow==="horizontal"?"horizontal-overflow":"vertical-overflow"),this.isMultiple||(s=this.#D(s)),e.appendChild(s),e.appendChild(this.#N()),t.appendChild(e);const i=document.getElementById(this.id),a=document.createElement("input");a.name=i.name,a.id=i.id,this.rootClassName!==""&&(a.className=i.className),a.style.display="none";let n=i.parentNode;t.appendChild(a),n.replaceChild(t,i),this.#c=a,this.#g=s,this.#r=e,this.#s=this.#r.querySelector(".selected-items"),!this.isMultiple&&this.#t.length>0&&(this.#c.value=this.#t[0].value)}#D(t){const e=document.createElement("input");e.className="custom-single-select",e.id=`selectyc_text_box_${this.id}`,e.placeholder=this.singleLabel,e.value=this.#t.length===0?null:this.#t[0].text,e.readOnly=!0;const s=document.createElement("div");return s.innerHTML=this.#S,this.#p&&t.appendChild(this.#L()),t.appendChild(e),t.appendChild(s),this.#a=e,t}#L(){const t=document.createElement("input");return t.type="text",t.required=this.#p,t.tabIndex=-1,t.style.position="absolute",t.style.opacity="0",t.style.pointerEvents="none",t.style.height="0",t.style.width="0",t.style.left="50%",t.value=this.#t.length===0?"":this.#t[0].text,this.#u=t,t}#N(){const t=document.createElement("div");t.setAttribute("style","position:fixed; z-index:999;");const e=document.createElement("div");e.className="global-dropdown",this.searchInputActive&&t.appendChild(this.#O());let s;return e.addEventListener("scroll",i=>{s&&clearTimeout(s),s=setTimeout(()=>{this.#B(i)},70)}),t.appendChild(e),this.#e=e,t}#O(){const t=document.createElement("input");return t.type="text",t.id="selectyc_search_input",t.className="search-input",t.placeholder="Buscar...",t.addEventListener("input",()=>{this.filter=t.value,this.#e.innerHTML="",this.filter=t.value,this.#w()}),this.#i=t,t}#l(t){const e=document.createElement("div");e.className="select-option",e.setAttribute("data-value",t.id),e.textContent=t.text,this.#e.appendChild(e),e.addEventListener("click",()=>{t.id!=="sin_resultados"&&(this.#T(t.text,t.id),this.onSelect!==void 0&&this.onSelect(t.id,this),this.#h())})}#I(){const t=document.getElementById(this.id);this.name=t.name,this.#p=t.required,this.rootClassName=t.className,Array.from(t.options).forEach(e=>{if(e.outerHTML.includes("selected")){const s=e.text,i=this.#o(e.value);this.isMultiple?this.#t.push({value:i,text:s}):this.#t[0]={value:i,text:s}}this.#m.push({id:this.#o(e.value),text:e.text})})}#y(){if(this.#n)return;this.#s.classList.remove(`round${this.bodyRound}`),this.#s.classList.add(`round${this.bodyRound}t`);const t=this.#r.getBoundingClientRect();if(this.searchInputActive){this.#i.style.display="block",this.#i.style.width=t.width+"px";const e=this.#i.offsetHeight;this.#e.style.top=e+"px"}this.#e.style.width=t.width+"px",this.#e.innerHTML="",this.#e.style.display="block",this.searchInputActive&&this.#i.focus(),this.#w(),this.#n=!0}#h(){this.#n&&(this.#e.innerHTML="",this.#e.style.display="none",this.searchInputActive&&(this.#i.style.display="none"),this.#s.classList.add(`round${this.bodyRound}`),this.#n=!1)}async#v(){if(this.RS===void 0)return this.data;let t={records:this.records,filter:this.filter};if(typeof this.bodyData=="function"){const i=this.bodyData();t={...t,...i}}else this.bodyData!==null&&(t={...t,...this.bodyData});const e=await l.make(this.RS).addData(t).setMethod("POST").go(),s=Array.isArray(e)?e:e.data;return this.data=Array.from(new Map([...this.#m,...s].map(i=>[i.id,i])).values()),this.data}async#w(){this.#l({id:"loading",text:"cargando ..."}),this.records=10+this.#t.length,this.#f=!1;let t=await this.#v();const e=this.#t.map(s=>s.value);this.#e.lastChild.dataset.value==="loading"&&this.#e.removeChild(this.#e.lastChild),t.forEach(s=>{s.text.toLowerCase().includes(this.#C.toLowerCase())&&!e.includes(s.id)&&this.#l(s)}),this.#e.hasChildNodes()||this.#l({id:"sin_resultados",text:"sin resultados ..."})}async#M(){const t=this.#t.map(n=>n.value);let e=this.filter===null?"":this.filter,s=this.data.map(n=>n.id);this.records=this.records+10+this.#t.length;let i=await this.#v();this.#e.lastChild.dataset.value==="loading"&&this.#e.removeChild(this.#e.lastChild);const a=this.#e.lastChild.dataset.value;i.forEach(n=>{n.text.toLowerCase().includes(e.toLowerCase())&&!t.includes(n.id)&&!s.includes(n.id)&&this.#l(n)}),this.#f=a===this.#e.lastChild.dataset.value}#T(t,e){this.#t.find(i=>i.value===e)||(this.isMultiple||(this.#t=[]),this.#t.push({text:t,value:e})),this.#d(e)}#d(t){this.onChange!==void 0&&this.onChange(t,this),this.isMultiple?this.#b():this.#R()}#R(){this.#a.value=null,this.#u.value=null,this.#a.value=this.#t.length>0?this.#t[0].text:null,this.#u.value=this.#t.length>0?this.#t[0].text:null,this.#a.placeholder=this.singleLabel,this.#c.value=this.#t.length>0?this.#t[0].value:null;const t=this.#a.parentNode,e=t.firstChild;if(e.className==="remove-tag"&&e.remove(),!this.clearButton||this.#t.length<=0)return;const s=document.createElement("span");s.dataset.value=this.#t[0].value,s.innerHTML="x",s.className="remove-tag",t.insertBefore(s,t.firstChild)}#b(){if(this.#s.innerHTML="",this.#t.length<=0){this.#s.appendChild(document.createElement("div"));return}this.#t.forEach(({text:t,value:e})=>{const s=document.createElement("div");s.className="selected-tag",s.innerHTML=`${t} <span class="remove-tag" data-value="${e}">x</span>`,this.#s.appendChild(s)})}#A(t){this.#t=this.#t.filter(e=>this.#o(e.value)!==this.#o(t)),this.#d(t)}#B(t){const{scrollTop:e,scrollHeight:s,clientHeight:i}=this.#e;t.target.lastChild!==null&&(t.target.lastChild.dataset.value==="loading"||this.#f||e+(i+1)>=s&&(this.#l({id:"loading",text:"cargando ..."}),this.#M()))}#o(t){return!isNaN(t)&&!isNaN(parseFloat(t))?parseInt(t):t}async render(){const t=document.getElementById(this.id),e=t===null?!1:t.outerHTML.includes("<select");this.#g===void 0||e?this.#x():this.#d()}}h.selectyc=d,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "selectyc",
3
3
  "description": "select multiple and simple",
4
- "version": "0.0.10",
4
+ "version": "0.0.12",
5
5
  "main": "./dist/selectyc.umd.js",
6
6
  "module": "./dist/selectyc.js",
7
7
  "type": "module",