@kashi-ui/elements 0.26.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +9 -0
  2. package/dist/appointment.js +13 -12
  3. package/dist/base.d.ts +408 -0
  4. package/dist/base.js +29 -0
  5. package/dist/basic.js +8 -9
  6. package/dist/calendar.js +21 -20
  7. package/dist/cdn/appointment-CrIZi8Bp.js +1 -0
  8. package/dist/cdn/base-DTQ50VdG.js +1 -0
  9. package/dist/cdn/basic-CrEW2RKF.js +1 -0
  10. package/dist/cdn/calendar-CYRrdGIf.js +16 -0
  11. package/dist/cdn/charts-D6KM26Vp.js +1 -0
  12. package/dist/cdn/combobox-6EFI2qqN.js +1 -0
  13. package/dist/cdn/controls-BwebEIlf.js +1 -0
  14. package/dist/cdn/display-DFuMkcj5.js +1 -0
  15. package/dist/cdn/fields-DhLIhHQ8.js +1 -0
  16. package/dist/cdn/forms-BHivKDdC.js +1 -0
  17. package/dist/cdn/holidays-DgbIAdlt.js +1 -0
  18. package/dist/cdn/inputs-R7nEHfbV.js +1 -0
  19. package/dist/cdn/kashi-elements.js +1 -1
  20. package/dist/cdn/map-H3xiZd8Y.js +12 -0
  21. package/dist/cdn/{menu-Cga7QOfs.js → menu-BAUSubXk.js} +1 -1
  22. package/dist/cdn/nav-NK-v48B5.js +1 -0
  23. package/dist/cdn/overlay-CBv8grz3.js +1 -0
  24. package/dist/cdn/pickers-BHzNt_X8.js +1 -0
  25. package/dist/cdn/table-Bt9WVLoo.js +1 -0
  26. package/dist/cdn/text-D4a_hlwL.js +1 -0
  27. package/dist/cdn/time-DJ3p1wvd.js +1 -0
  28. package/dist/cdn/words-BdADG_9U.js +1 -0
  29. package/dist/cdn.d.ts +1 -0
  30. package/dist/cdn.js +2 -0
  31. package/dist/charts.js +27 -24
  32. package/dist/combobox.d.ts +6 -5
  33. package/dist/combobox.js +29 -20
  34. package/dist/controls.js +15 -15
  35. package/dist/display.js +17 -14
  36. package/dist/fields.js +3 -3
  37. package/dist/forms.d.ts +3 -3
  38. package/dist/forms.js +54 -47
  39. package/dist/index.d.ts +4 -0
  40. package/dist/index.js +3 -0
  41. package/dist/inputs.d.ts +3 -3
  42. package/dist/inputs.js +31 -30
  43. package/dist/map.js +16 -13
  44. package/dist/nav.js +18 -16
  45. package/dist/overlay.js +5 -5
  46. package/dist/pickers.d.ts +1 -1
  47. package/dist/pickers.js +39 -38
  48. package/dist/table.js +7 -7
  49. package/dist/toast.js +3 -3
  50. package/package.json +4 -4
  51. package/dist/cdn/appointment-DkMxtSWi.js +0 -1
  52. package/dist/cdn/base-DfzNTdQk.js +0 -1
  53. package/dist/cdn/basic-B5n1okZO.js +0 -1
  54. package/dist/cdn/calendar-oMlnK1_D.js +0 -16
  55. package/dist/cdn/charts-SHKq2S4I.js +0 -1
  56. package/dist/cdn/combobox-DiGy7lAB.js +0 -1
  57. package/dist/cdn/controls-C6zwNYWs.js +0 -1
  58. package/dist/cdn/digits-DE1YGT94.js +0 -1
  59. package/dist/cdn/display-DZFW9EEX.js +0 -1
  60. package/dist/cdn/fields-D2hmrvVR.js +0 -1
  61. package/dist/cdn/forms-CeItYHFx.js +0 -1
  62. package/dist/cdn/holidays-BwsAEOI1.js +0 -1
  63. package/dist/cdn/inputs-DuP7P3ka.js +0 -1
  64. package/dist/cdn/jalali-BiM5Kfep.js +0 -1
  65. package/dist/cdn/map-w5X2fTQI.js +0 -12
  66. package/dist/cdn/nav-CwPZ20z-.js +0 -1
  67. package/dist/cdn/overlay-BDzwsBN5.js +0 -1
  68. package/dist/cdn/pickers-BOpaZ-7q.js +0 -1
  69. package/dist/cdn/table-BdF43L5q.js +0 -1
  70. package/dist/cdn/text-D1U32D6K.js +0 -1
  71. package/dist/cdn/time-DXw4vOne.js +0 -1
  72. package/dist/cdn/words-9OdzG7y6.js +0 -1
package/dist/calendar.js CHANGED
@@ -1,5 +1,5 @@
1
- import { JALALI_MONTHS, WEEKDAYS, WEEKDAYS_SHORT, formatJalali, fromISODate, getIranHoliday, jalaliMonthLength, jalaliWeekday, parseJalali, toFaDigits, toGregorian, toISODate, toJalali, } from "@kashi-ui/persian";
2
- import { HTMLBase, ICONS, bool, define, emit, esc, fieldHTML, setMessages, syncHidden, uid } from "./base.js";
1
+ import { formatJalali, fromISODate, getIranHoliday, jalaliMonthLength, jalaliWeekday, parseJalali, toFaDigits, toGregorian, toISODate, toJalali, } from "@kashi-ui/persian";
2
+ import { bool, calendarNames, define, digitsOf, emit, esc, fieldHTML, HTMLBase, ICONS, lang, msg, setMessages, syncHidden, uid } from "./base.js";
3
3
  const sameDay = (a, b) => !!a && !!b && a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();
4
4
  const startOfDay = (d) => new Date(d.getFullYear(), d.getMonth(), d.getDate());
5
5
  const addDays = (d, n) => new Date(d.getFullYear(), d.getMonth(), d.getDate() + n);
@@ -166,7 +166,7 @@ export class KashiCalendar extends HTMLBase {
166
166
  holiday(d) {
167
167
  if (this.holidayOf)
168
168
  return this.holidayOf(d) || null;
169
- return bool(this, "holidays") ? getIranHoliday(d) : null;
169
+ return bool(this, "holidays") ? getIranHoliday(d, { locale: lang() }) : null;
170
170
  }
171
171
  go(d, focus = true) {
172
172
  this.focused = this.clamp(d);
@@ -204,8 +204,9 @@ export class KashiCalendar extends HTMLBase {
204
204
  });
205
205
  }
206
206
  render() {
207
- const digits = this.getAttribute("digits") === "latin" ? "latin" : "fa";
207
+ const digits = digitsOf(this);
208
208
  const n = (v) => (digits === "fa" ? toFaDigits(v) : String(v));
209
+ const M = msg(), C = M.calendar, { months, weekdays, weekdaysShort, friday } = calendarNames();
209
210
  const today = startOfDay(new Date());
210
211
  const { jy, jm } = toJalali(this.focused);
211
212
  const monthStart = toGregorian(jy, jm, 1);
@@ -228,23 +229,23 @@ export class KashiCalendar extends HTMLBase {
228
229
  if (!d)
229
230
  return '<td role="gridcell"></td>';
230
231
  const h = this.holiday(d);
231
- const label = formatJalali(d, { style: "full", digits }) + (h ? `، تعطیل${h === "جمعه" ? "" : `: ${h}`}` : "");
232
- return `<td role="gridcell" data-date="${dayKey(d)}" aria-selected="${sameDay(d, this.selected)}"><button type="button" class="k-calendar__day" data-day="${dayKey(d)}" tabindex="${sameDay(d, this.focused) ? 0 : -1}" aria-label="${esc(label)}"${h && h !== "جمعه" ? ` title="${esc(h)}"` : ""}${h ? ' data-holiday=""' : ""}${sameDay(d, today) ? ' aria-current="date"' : ""}${this.disabled(d) ? ' aria-disabled="true"' : ""}>${n(toJalali(d).jd)}</button></td>`;
232
+ const label = formatJalali(d, { style: "full", digits, locale: lang() }) + (h ? `${M.common.list}${C.holiday}${h === friday ? "" : `: ${h}`}` : "");
233
+ return `<td role="gridcell" data-date="${dayKey(d)}" aria-selected="${sameDay(d, this.selected)}"><button type="button" class="k-calendar__day" data-day="${dayKey(d)}" tabindex="${sameDay(d, this.focused) ? 0 : -1}" aria-label="${esc(label)}"${h && h !== friday ? ` title="${esc(h)}"` : ""}${h ? ' data-holiday=""' : ""}${sameDay(d, today) ? ' aria-current="date"' : ""}${this.disabled(d) ? ' aria-disabled="true"' : ""}>${n(toJalali(d).jd)}</button></td>`;
233
234
  }).join("")}</tr>`);
234
235
  }
235
236
  const todayLabel = this.getAttribute("today-label");
236
- this.innerHTML = `<div class="k-calendar" role="group" aria-label="${esc(this.getAttribute("label") ?? "تقویم")}">
237
+ this.innerHTML = `<div class="k-calendar" role="group" aria-label="${esc(this.getAttribute("label") ?? C.label)}">
237
238
  <div class="k-calendar__header">
238
- <button type="button" class="k-btn k-btn--tertiary k-btn--icon k-btn--sm" data-nav="prev" aria-label="ماه قبل"${prevOff ? " disabled" : ""}>${ICONS.prev}</button>
239
+ <button type="button" class="k-btn k-btn--tertiary k-btn--icon k-btn--sm" data-nav="prev" aria-label="${esc(C.prevMonth)}"${prevOff ? " disabled" : ""}>${ICONS.prev}</button>
239
240
  <div class="k-calendar__selects">
240
- <select class="k-calendar__select" data-part="month" aria-label="ماه">${JALALI_MONTHS.map((m, i) => `<option value="${i + 1}"${i + 1 === jm ? " selected" : ""}>${m}</option>`).join("")}</select>
241
- <select class="k-calendar__select" data-part="year" aria-label="سال">${years.map((y) => `<option value="${y}"${y === jy ? " selected" : ""}>${n(y)}</option>`).join("")}</select>
241
+ <select class="k-calendar__select" data-part="month" aria-label="${esc(C.month)}">${months.map((m, i) => `<option value="${i + 1}"${i + 1 === jm ? " selected" : ""}>${m}</option>`).join("")}</select>
242
+ <select class="k-calendar__select" data-part="year" aria-label="${esc(C.year)}">${years.map((y) => `<option value="${y}"${y === jy ? " selected" : ""}>${n(y)}</option>`).join("")}</select>
242
243
  </div>
243
- <button type="button" class="k-btn k-btn--tertiary k-btn--icon k-btn--sm" data-nav="next" aria-label="ماه بعد"${nextOff ? " disabled" : ""}>${ICONS.next}</button>
244
+ <button type="button" class="k-btn k-btn--tertiary k-btn--icon k-btn--sm" data-nav="next" aria-label="${esc(C.nextMonth)}"${nextOff ? " disabled" : ""}>${ICONS.next}</button>
244
245
  </div>
245
- <h2 class="k-sr-only" id="${this.key}-title" aria-live="polite">${JALALI_MONTHS[jm - 1]} ${n(jy)}</h2>
246
+ <h2 class="k-sr-only" id="${this.key}-title" aria-live="polite">${months[jm - 1]} ${n(jy)}</h2>
246
247
  <table class="k-calendar__grid" role="grid" aria-labelledby="${this.key}-title">
247
- <thead><tr>${WEEKDAYS_SHORT.map((s, i) => `<th scope="col" abbr="${WEEKDAYS[i]}">${s}</th>`).join("")}</tr></thead>
248
+ <thead><tr>${weekdaysShort.map((s, i) => `<th scope="col" abbr="${weekdays[i]}">${s}</th>`).join("")}</tr></thead>
248
249
  <tbody>${rows.join("")}</tbody>
249
250
  </table>
250
251
  ${todayLabel ? `<div class="k-calendar__footer"><button type="button" class="k-btn k-btn--link" data-today>${esc(todayLabel)}</button></div>` : ""}
@@ -315,7 +316,7 @@ export class KashiDatePicker extends HTMLBase {
315
316
  this.input?.focus(options);
316
317
  }
317
318
  get digits() {
318
- return this.getAttribute("digits") === "latin" ? "latin" : "fa";
319
+ return digitsOf(this);
319
320
  }
320
321
  fmt(d) {
321
322
  return d ? formatJalali(d, { digits: this.digits }) : "";
@@ -323,7 +324,7 @@ export class KashiDatePicker extends HTMLBase {
323
324
  render() {
324
325
  const id = this.key;
325
326
  const ariaLabel = this.getAttribute("aria-label");
326
- const label = this.hasAttribute("label") ? this.getAttribute("label") : ariaLabel ? null : "تاریخ";
327
+ const label = this.hasAttribute("label") ? this.getAttribute("label") : ariaLabel ? null : msg().datePicker.label;
327
328
  const required = this.hasAttribute("required");
328
329
  const disabled = this.hasAttribute("disabled");
329
330
  const placeholder = this.getAttribute("placeholder") ?? (this.digits === "fa" ? "۱۴۰۳/۰۱/۰۱" : "1403/01/01");
@@ -346,9 +347,9 @@ export class KashiDatePicker extends HTMLBase {
346
347
  const text = this.fmt(this.selected);
347
348
  if (!this.invalid && this.input.value !== text)
348
349
  this.input.value = text;
349
- const open = this.getAttribute("open-label") ?? "انتخاب تاریخ از تقویم";
350
- this.toggle.setAttribute("aria-label", this.selected ? `${open}، ${formatJalali(this.selected, { style: "full", digits: this.digits })}` : open);
351
- const message = this.getAttribute("invalid-message") ?? "این تاریخ معتبر نیست؛ آن را به شکل ۱۴۰۳/۰۵/۱۲ وارد کنید.";
350
+ const open = this.getAttribute("open-label") ?? msg().datePicker.open;
351
+ this.toggle.setAttribute("aria-label", this.selected ? `${open}${msg().common.list}${formatJalali(this.selected, { style: "full", digits: this.digits, locale: lang() })}` : open);
352
+ const message = this.getAttribute("invalid-message") ?? msg().datePicker.invalid;
352
353
  this.input.setCustomValidity(this.invalid ? message : "");
353
354
  setMessages(this.querySelector(".k-field"), this.input, this.key, this.getAttribute("error") || (this.invalid ? message : null), this.getAttribute("hint"));
354
355
  syncHidden(this, this.getAttribute("name"), this.value);
@@ -385,7 +386,7 @@ export class KashiDatePicker extends HTMLBase {
385
386
  pop.className = "k-datepicker__popover";
386
387
  pop.id = `${this.key}-calendar`;
387
388
  pop.setAttribute("role", "dialog");
388
- pop.setAttribute("aria-label", this.getAttribute("open-label") ?? "انتخاب تاریخ از تقویم");
389
+ pop.setAttribute("aria-label", this.getAttribute("open-label") ?? msg().datePicker.open);
389
390
  pop.style.insetBlockStart = `${box.offsetTop + box.offsetHeight + 6}px`;
390
391
  const cal = document.createElement("kashi-calendar");
391
392
  for (const a of ["min", "max", "digits", "holidays"]) {
@@ -395,7 +396,7 @@ export class KashiDatePicker extends HTMLBase {
395
396
  }
396
397
  if (this.selected)
397
398
  cal.setAttribute("value", toISODate(this.selected));
398
- cal.setAttribute("today-label", this.getAttribute("today-label") ?? "امروز");
399
+ cal.setAttribute("today-label", this.getAttribute("today-label") ?? msg().common.today);
399
400
  cal.isDateDisabled = this.isDateDisabled;
400
401
  cal.addEventListener("kashi-change", (e) => {
401
402
  e.stopPropagation();
@@ -0,0 +1 @@
1
+ import{A as e,E as t,T as n,a as r,b as i,c as a,d as o,l as s,o as c,p as l,s as u,t as d,v as f,y as p}from"./base-DTQ50VdG.js";import{n as m,t as h}from"./time-DJ3p1wvd.js";import{t as g}from"./holidays-DgbIAdlt.js";const _=[[`morning`,12],[`afternoon`,17],[`evening`,24]],v=(e,t=0)=>new Date(e.getFullYear(),e.getMonth(),e.getDate()+t),y=(e,t)=>e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate(),b=e=>{let t=m(e);return t?t.hours*60+t.minutes:0};var x=class extends d{constructor(){super(...arguments),this.selected=null,this.active=-1,this.valueSet=!1,this.rendered=!1,this.key=f(`kashi-appt`)}connectedCallback(){!this.rendered&&!this.valueSet&&(this.selected=this.parse(this.getAttribute(`value`))),this.render(),clearInterval(this.timer),this.timer=setInterval(()=>!this.contains(document.activeElement)&&this.render(),6e4)}disconnectedCallback(){clearInterval(this.timer)}attributeChangedCallback(e,t,n){this.rendered&&t!==n&&(e===`value`&&(this.selected=this.parse(n)),this.render())}parse(e){let t=(e??``).trim().match(/^(\d{4}-\d{2}-\d{2})[ T](\d{1,2}:\d{2})$/),n=t?i(t[1]):null;return n&&t?{date:n,time:h(m(t[2]))}:null}get value(){return this.selected?{...this.selected}:null}set value(e){this.valueSet=!0,this.selected=e?{date:v(e.date),time:e.time}:null,this.rendered&&this.render()}list(){let e=/* @__PURE__ */ new Date,t=i(this.getAttribute(`start`)??``)??e,r=Math.max(1,Number(this.getAttribute(`days`))||7),a={};try{a=JSON.parse(this.getAttribute(`booked`)??`{}`)}catch{}let s=this.getAttribute(`from`)??`09:00`,c=this.getAttribute(`to`)??`17:00`,l=Number(this.getAttribute(`step`))||30,u=this.getAttribute(`closed`)!==`false`;return Array.from({length:r},(r,i)=>{let d=v(t,i),f=this.isClosed?this.isClosed(d):u&&!!g(d,{locale:o()}),p=[];if(!f){if(this.getSlots)p=this.getSlots(d).map(e=>typeof e==`string`?{time:e,available:!0}:{time:e.time,available:e.available??!0});else{let e=new Set(a[n(d)]??[]);for(let t=b(s);t+l<=b(c);t+=l){let n=h({hours:Math.floor(t/60),minutes:t%60});p.push({time:n,available:!e.has(n)})}}if(y(d,e)){let t=e.getHours()*60+e.getMinutes();p=p.map(e=>b(e.time)<=t?{...e,available:!1}:e)}}return{date:d,closed:f,slots:p,free:p.filter(e=>e.available).length}})}render(i=null){let c=/* @__PURE__ */ new Date,d=u(this)===`fa`,f=t=>d?e(String(t)):String(t),m=d?`fa`:`latin`,h=this.list();if(this.active<0||this.active>=h.length){let e=this.selected?h.findIndex(e=>y(e.date,this.selected.date)):-1;this.active=e>=0?e:Math.max(0,h.findIndex(e=>e.free>0))}let g=h[this.active],x=l(),S=x.appointment,{months:C,weekdays:w}=r(),T=o(),E=this.getAttribute(`label`)??S.label,D=e=>y(e,c)?x.common.today:y(e,v(c,1))?x.common.tomorrow:w[(e.getDay()+1)%7],O=h.map((e,n)=>{let{jm:r,jd:i}=t(e.date),a=e.closed?S.closed:e.free?S.freeLong(f(e.free)):S.none;return`<button type="button" role="radio" data-i="${n}" class="k-appt__day" aria-checked="${n===this.active}" tabindex="${n===this.active?0:-1}"${e.closed?` disabled`:``} aria-label="${s(`${p(e.date,{style:`full`,digits:m,locale:T})}${x.common.list}${a}`)}"><span class="k-appt__weekday" aria-hidden="true">${D(e.date)}</span><span class="k-appt__date" aria-hidden="true">${f(i)}</span><span class="k-appt__month" aria-hidden="true">${C[r-1]}</span><span class="k-appt__free" aria-hidden="true">${e.closed?S.closed:e.free?S.free(f(e.free)):S.full}</span></button>`}).join(``),k=!!this.selected&&y(this.selected.date,g.date),A=k?this.selected.time:g.slots.find(e=>e.available)?.time,j=g.closed||!g.free?`<p class="k-appt__empty">${g.closed?S.closedDay:S.noSlots}</p>`:_.map(([e,t],n)=>{let r=g.slots.filter(e=>b(e.time)/60<t&&b(e.time)/60>=(n?_[n-1][1]:0));if(!r.length)return``;let i=`${this.key}-p${n}`;return`<div class="k-appt__group"><p class="k-appt__period" id="${i}">${S[e]}</p><div class="k-appt__times" role="radiogroup" aria-labelledby="${i}">${r.map(e=>`<button type="button" role="radio" class="k-appt__time" data-time="${e.time}" aria-checked="${k&&this.selected.time===e.time}" tabindex="${e.time===A?0:-1}"${e.available?``:` disabled`} aria-label="${s(S.time(f(e.time)))}${e.available?``:s(S.booked)}">${f(e.time)}</button>`).join(``)}</div></div>`}).join(``),M=this.getAttribute(`name`),N=this.selected;this.innerHTML=`<div class="k-appt" role="group" aria-labelledby="${this.key}-label"><p class="k-label" id="${this.key}-label" style="margin: 0">${s(E)}</p><div class="k-appt__days" role="radiogroup" aria-label="${s(S.day)}">${O}</div><div class="k-appt__slots">${j}</div><p class="k-appt__summary" aria-live="polite">${N?`<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="10" cy="10" r="7"/><path d="M10 6v4l2.5 2"/></svg><span>${s(S.yours)} <strong>${s(S.at(p(N.date,{style:`full`,digits:m,locale:T}),f(N.time)))}</strong></span>`:``}</p>${M?`<input type="hidden" name="${s(`${M}_date`)}" value="${N?n(N.date):``}"><input type="hidden" name="${s(`${M}_time`)}" value="${N?.time??``}">`:``}</div>`,this.rendered=!0;let P=this.querySelector(`.k-appt__days`),F=this.querySelector(`.k-appt__slots`);P.addEventListener(`click`,e=>{let t=e.target.closest(`.k-appt__day`);t&&!t.disabled&&(this.active=Number(t.dataset.i),this.render(`day`))}),F.addEventListener(`click`,e=>{let t=e.target.closest(`.k-appt__time`);t&&!t.disabled&&(this.selected={date:g.date,time:t.dataset.time},this.render(`time`),a(this,`kashi-change`,{date:n(g.date),time:this.selected.time,value:this.value}))}),P.addEventListener(`keydown`,e=>this.roving(e,P,e=>{this.active=Number(e.dataset.i),this.render(`day`)})),F.addEventListener(`keydown`,e=>this.roving(e,F)),i===`day`&&P.querySelector(`[tabindex="0"]`)?.focus(),i===`time`&&F.querySelector(`[aria-checked="true"]`)?.focus(),i===`day`&&P.querySelector(`[tabindex="0"]`)?.scrollIntoView?.({block:`nearest`,inline:`nearest`})}roving(e,t,n){let r=[...t.querySelectorAll(`[role="radio"]:not(:disabled)`)],i=r.indexOf(document.activeElement);if(i<0)return;let a=getComputedStyle(t).direction===`rtl`,o={ArrowLeft:a?1:-1,ArrowRight:a?-1:1,ArrowDown:1,ArrowUp:-1}[e.key],s=o?(i+o+r.length)%r.length:e.key===`Home`?0:e.key===`End`?r.length-1:-1;s<0||(e.preventDefault(),n?n(r[s]):r[s].focus())}};x.observedAttributes=[`start`,`days`,`from`,`to`,`step`,`booked`,`closed`,`label`,`name`,`digits`,`value`],c(`kashi-appointment-picker`,x,`block`);export{x as KashiAppointmentPicker};
@@ -0,0 +1 @@
1
+ const e=`۰۱۲۳۴۵۶۷۸۹`;function t(t){return String(t).replace(/\d/g,t=>e[Number(t)])}function n(t){return t.replace(/[۰-۹٠-٩]/g,t=>{let n=e.indexOf(t);return String(n>=0?n:`٠١٢٣٤٥٦٧٨٩`.indexOf(t))})}function r(e){return n(e).replace(/\D/g,``)}function i(e,{digits:n=`fa`}={}){let i=typeof e==`number`?e:Number(r(e));if(!Number.isFinite(i))return``;let a=new Intl.NumberFormat(`en-US`).format(i);return n===`fa`?t(a).replace(/,/g,`٬`):a}const a=[`فروردین`,`اردیبهشت`,`خرداد`,`تیر`,`مرداد`,`شهریور`,`مهر`,`آبان`,`آذر`,`دی`,`بهمن`,`اسفند`],o=[`شنبه`,`یکشنبه`,`دوشنبه`,`سه‌شنبه`,`چهارشنبه`,`پنجشنبه`,`جمعه`],s=[`ش`,`ی`,`د`,`س`,`چ`,`پ`,`ج`],c=[`Farvardin`,`Ordibehesht`,`Khordad`,`Tir`,`Mordad`,`Shahrivar`,`Mehr`,`Aban`,`Azar`,`Dey`,`Bahman`,`Esfand`],l=[`Saturday`,`Sunday`,`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`],u=[`Sa`,`Su`,`Mo`,`Tu`,`We`,`Th`,`Fr`],d=[-61,9,38,199,426,686,756,818,1111,1181,1210,1635,2060,2097,2192,2262,2324,2394,2456,3178],f=(e,t)=>~~(e/t),p=(e,t)=>e-~~(e/t)*t;function m(e){let t=e+621,n=-14,r=d[0],i=0;if(e<r||e>=d[d.length-1])throw RangeError(`سال شمسی خارج از محدوده: ${e}`);for(let t=1;t<d.length;t++){let a=d[t];if(i=a-r,e<a)break;n+=f(i,33)*8+f(p(i,33),4),r=a}let a=e-r;n+=f(a,33)*8+f(p(a,33)+3,4),p(i,33)===4&&i-a===4&&(n+=1);let o=f(t,4)-f((f(t,100)+1)*3,4)-150,s=20+n-o;i-a<6&&(a=a-i+f(i+4,33)*33);let c=p(p(a+1,33)-1,4);return c===-1&&(c=4),{leap:c,gy:t,march:s}}function h(e,t,n){let r=f((e+f(t-8,6)+100100)*1461,4)+f(153*p(t+9,12)+2,5)+n-34840408;return r=r-f(f(e+100100+f(t-8,6),100)*3,4)+752,r}function g(e){let t=4*e+139361631;t=t+f(f(4*e+183187720,146097)*3,4)*4-3908;let n=f(p(t,1461),4)*5+308,r=f(p(n,153),5)+1,i=p(f(n,153),12)+1;return{gy:f(t,1461)-100100+f(8-i,6),gm:i,gd:r}}function _(e,t,n){let r=m(e);return h(r.gy,3,r.march)+(t-1)*31-f(t,7)*(t-7)+n-1}function ee(e){let{gy:t}=g(e),n=t-621,r=m(n),i=e-h(t,3,r.march);if(i>=0){if(i<=185)return{jy:n,jm:1+f(i,31),jd:p(i,31)+1};i-=186}else--n,i+=179,r.leap===1&&(i+=1);return{jy:n,jm:7+f(i,30),jd:p(i,30)+1}}function v(e){return m(e).leap===0}function y(e,t){return t<=6?31:t<=11||v(e)?30:29}function b(e,t,n){return Number.isInteger(e)&&Number.isInteger(t)&&Number.isInteger(n)&&e>=-61&&e<=3177&&t>=1&&t<=12&&n>=1&&n<=y(e,t)}function x(e){return ee(h(e.getFullYear(),e.getMonth()+1,e.getDate()))}function S(e,t,n){let{gy:r,gm:i,gd:a}=g(_(e,t,n));return new Date(r,i-1,a)}function C(e){return(e.getDay()+1)%7}function w(e,{style:n=`numeric`,locale:r=`fa`,digits:i=r===`en`?`latin`:`fa`}={}){let{jy:s,jm:u,jd:d}=x(e),f=e=>String(e).padStart(2,`0`),p=r===`en`,m;return n===`numeric`?m=`${s}/${f(u)}/${f(d)}`:(m=`${d} ${(p?c:a)[u-1]} ${s}`,n===`full`&&(m=p?`${l[C(e)]}, ${m}`:`${o[C(e)]} ${m}`)),i===`fa`?t(m):m}function T(e){let t=e=>String(e).padStart(2,`0`);return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}`}function E(e){let t=e.match(/^(\d{4})-(\d{2})-(\d{2})$/);if(!t)return null;let n=new Date(Number(t[1]),Number(t[2])-1,Number(t[3]));return n.getMonth()===Number(t[2])-1?n:null}function D(e){let t=n(e.trim()).match(/^(\d{4})\s*[/\-.\s]\s*(\d{1,2})\s*[/\-.\s]\s*(\d{1,2})$/);if(!t)return null;let[r,i,a]=[Number(t[1]),Number(t[2]),Number(t[3])];return b(r,i,a)?S(r,i,a):null}const O={common:{close:`بستن`,loading:`در حال بارگذاری`,optional:`اختیاری`,remove:e=>`حذف ${e}`,removeShort:`حذف`,clear:`پاک کردن`,clearAll:`پاک کردن همه`,cancel:`انصراف`,confirm:`تأیید`,save:`ثبت`,edit:`ویرایش`,prev:`قبلی`,next:`بعدی`,today:`امروز`,tomorrow:`فردا`,noResults:`نتیجه‌ای پیدا نشد.`,searching:`در حال جستجو…`,results:e=>`${e} نتیجه`,added:e=>`${e} اضافه شد`,removed:e=>`${e} حذف شد`,selected:e=>`${e} انتخاب شد`,max:e=>`حداکثر ${e} مورد`,total:`جمع`,other:`سایر`,of:(e,t)=>`${e} از ${t}`,and:` و `,list:`، `,range:` تا `,percent:e=>`${e}٪`,decimal:`٫`},money:{toman:`تومان`,rial:`ریال`,positive:`مثبت `},alert:{close:`بستن`},banner:{label:`اطلاعیه`,close:`بستن اطلاعیه`},avatar:{online:`آنلاین`,offline:`آفلاین`,busy:`مشغول`,away:`غایب`,more:e=>`${e} نفر دیگر`},bankCard:{card:`کارت بانکی`,cardOf:e=>`کارت ${e}`,bank:`بانکی`,endingIn:e=>`مختوم به ${e}`,expiry:`انقضا`},breadcrumb:{label:`مسیر`,expand:`نمایش مسیر کامل`},calendar:{label:`تقویم`,prevMonth:`ماه قبل`,nextMonth:`ماه بعد`,month:`ماه`,year:`سال`,holiday:`تعطیل`},carousel:{slider:`اسلایدر`,slide:`اسلاید`,slideOf:(e,t)=>`${e} از ${t}`,slides:e=>`اسلایدهای ${e}`},chart:{period:`دوره`,value:`مقدار`,share:`سهم از کل`,count:`تعداد`,keyboard:e=>`${e}. با کلیدهای جهت بین نقطه‌ها حرکت کنید.`,thousand:` هزار`,million:` م`,billion:` میلیارد`},city:{label:`شهر`,outside:`خارج از فهرست`,custom:`شهر دیگر؛ همین نام ثبت شود`,search:`جستجوی شهر`,hint:`نام شهر، مثلاً کاشان`},province:{label:`استان`,search:`جستجوی استان یا شهر`,capital:e=>`مرکز: ${e}`},colorPicker:{label:`رنگ`,custom:`انتخاب رنگ دلخواه`,area:`اشباع و روشنایی`,areaValue:(e,t)=>`اشباع ${e}، روشنایی ${t}`,eyedropper:`برداشتن رنگ از صفحه`,hue:`رنگ‌مایه`,degrees:e=>`${e} درجه`,red:`قرمز`,green:`سبز`,blue:`آبی`,invalid:`کد رنگ معتبر نیست؛ مثل ‎#0fa89b‎ وارد کنید.`,swatches:`رنگ‌های پیشنهادی`,sample:`متن نمونه`,contrast:(e,t,n)=>`کنتراست با متن ${e===`white`?`سفید`:`مشکی`}: ${t} به ۱ ${n?`(AA)`:`(کمتر از AA)`}`,names:{firoozeh:`فیروزه‌ای`,lajvard:`لاجوردی`,violet:`بنفش`,anar:`اناری`,zafaran:`زعفرانی`,peste:`پسته‌ای`,shab:`شب`}},combobox:{toggle:`نمایش گزینه‌ها`,more:e=>`${e} گزینهٔ دیگر؛ برای پیدا کردن تایپ کنید.`},otp:{label:`کد تأیید`},command:{placeholder:`جستجوی دستور یا صفحه…`,empty:`دستوری پیدا نشد.`,title:`پالت فرمان`,navigate:`حرکت`,select:`انتخاب`},contextMenu:{label:`گزینه‌ها`,hint:`برای گزینه‌ها راست‌کلیک کنید یا Shift+F10 را بزنید.`},copy:{copy:`کپی`,copied:`کپی شد`,failed:`کپی نشد`},countdown:{days:`روز`,hours:`ساعت`,minutes:`دقیقه`,seconds:`ثانیه`,left:`مانده`},table:{selectAll:`انتخاب همهٔ ردیف‌ها`,selectRow:`انتخاب ردیف`,selectNamed:e=>`انتخاب ${e}`,empty:`داده‌ای وجود ندارد.`,sort:e=>`مرتب‌سازی بر اساس ${e}`,search:`جستجو در جدول`,rows:e=>`${e} ردیف`},datePicker:{label:`تاریخ`,invalid:`این تاریخ معتبر نیست؛ آن را به شکل ۱۴۰۳/۰۵/۱۲ وارد کنید.`,open:`انتخاب تاریخ از تقویم`},dateRange:{label:`بازهٔ تاریخ`,placeholder:`انتخاب بازهٔ تاریخ`,presets:`میان‌برها`,pickEnd:`حالا تاریخ پایان را انتخاب کنید.`,last7:e=>`${e} روز اخیر`,last30:e=>`${e} روز اخیر`,thisMonth:`این ماه`,lastMonth:`ماه قبل`},monthPicker:{label:`انتخاب ماه`,prevYear:`سال قبل`,nextYear:`سال بعد`},fileUpload:{units:[`بایت`,`کیلوبایت`,`مگابایت`,`گیگابایت`],browse:`انتخاب فایل`,drop:`یا فایل را اینجا رها کنید`,tooBig:e=>`حجم فایل بیشتر از ${e} است.`,wrongType:`این نوع فایل پذیرفته نیست.`,tooMany:e=>`حداکثر ${e} فایل.`,done:`بارگذاری شد`,uploading:`در حال بارگذاری`,uploadingFile:e=>`در حال بارگذاری ${e}`,error:`خطا در بارگذاری`},input:{clear:`پاک کردن`,show:`نمایش رمز`,hide:`پنهان کردن رمز`,checking:`در حال بررسی`},invalid:{card:`شماره کارت معتبر نیست.`,iban:`شماره شبا معتبر نیست.`,nationalId:`کد ملی معتبر نیست.`,legalId:`شناسهٔ ملی معتبر نیست.`,mobile:`شماره موبایل معتبر نیست.`,landline:`شمارهٔ تلفن ثابت معتبر نیست.`,postal:`کد پستی معتبر نیست.`,plate:`پلاک خودرو معتبر نیست.`,time:`ساعت معتبر نیست؛ آن را به شکل ۰۹:۳۰ وارد کنید.`,timeRange:(e,t)=>`ساعت باید بین ${e} و ${t} باشد.`,priceMin:e=>`مبلغ باید حداقل ${e} باشد.`,priceMax:e=>`مبلغ باید حداکثر ${e} باشد.`,priceRange:(e,t)=>`مبلغ باید حداقل ${e} و حداکثر ${t} باشد.`},inlineEdit:{empty:`خالی`,failed:`ذخیره نشد؛ دوباره امتحان کنید.`},iranMap:{label:`نقشهٔ استان‌های ایران`,tableNote:`؛ جدول داده در ادامه`,onMap:e=>`${e} روی نقشه`},keyboardFix:{before:`منظورتان`,after:`بود؟`},meter:{ok:`در محدودهٔ مجاز`,warning:`نزدیک به سقف`,critical:`سقف تقریباً پر شده`},multiSelect:{label:`انتخاب`,selected:e=>`${e} مورد انتخاب شده`,clearedAll:`همه حذف شد`},numberInput:{label:`تعداد`,increment:`افزایش`,decrement:`کاهش`},pagination:{nav:`صفحه‌بندی`,page:e=>`صفحهٔ ${e}`,perPage:`در هر صفحه`,jump:`برو به صفحه`,jumpRange:(e,t,n)=>`${e}، از ${t} تا ${n}`},password:{title:`قدرت رمز`,strength:e=>`قدرت رمز: ${e}`,levels:[`ضعیف`,`متوسط`,`خوب`,`قوی`],persian:`رمز حروف فارسی دارد؛ شاید صفحه‌کلید روی فارسی مانده است.`,length:e=>`حداقل ${e} نویسه`,cases:`حروف بزرگ و کوچک انگلیسی`,digit:`دست‌کم یک عدد`,symbol:`دست‌کم یک نماد، مثل ! یا @`,met:`، رعایت شده`,unmet:`، رعایت نشده`},receipt:{success:`پرداخت موفق`,failed:`پرداخت ناموفق`,pending:`در انتظار تأیید بانک`,merchant:`پذیرنده`,tracking:`کد پیگیری`,copyTracking:`کپی کد پیگیری`,reference:`شمارهٔ مرجع`,card:`کارت`,date:`تاریخ`,at:e=>`ساعت ${e}`},persianInput:{text:`متن`,"national-id":`کد ملی`,"legal-id":`شناسهٔ ملی شرکت`,mobile:`شمارهٔ موبایل`,landline:`تلفن ثابت`,card:`شمارهٔ کارت`,iban:`شمارهٔ شبا`,price:`مبلغ`,postal:`کد پستی`,time:`ساعت`,plate:`پلاک خودرو`},textFix:{fix:`اصلاح نگارش`,clean:`نگارش متن درست است.`,count:(e,t)=>`${e} مورد قابل اصلاح: ${t}`,arabic:`حرف عربی`,zwnj:`نیم‌فاصله`,punctuation:`علامت`,digits:`رقم`,spacing:`فاصله`},plate:{label:`پلاک خودرو`,first:`دو رقم اول پلاک`,letter:`حرف پلاک`,middle:`سه رقم پلاک`,region:`کد استان`,iran:`ایران`},rating:{label:`امتیاز`},sideNav:{label:`اصلی`},slider:{from:`حداقل`,to:`حداکثر`},splitter:{label:`تغییر اندازهٔ پنل‌ها`},stat:{up:`افزایش`,down:`کاهش`,flat:`بدون تغییر`},stepper:{label:`مراحل`,complete:`انجام شده`,current:`مرحلهٔ فعلی`},tagInput:{label:`برچسب‌ها`,duplicate:`این مورد قبلاً اضافه شده است.`},toast:{region:`اعلان‌ها`,close:`بستن اعلان`},tour:{done:`تمام`,skip:`رد کردن`,step:(e,t)=>`مرحلهٔ ${e} از ${t}`},heatmap:{unit:`فعالیت`,weekdays:[`ش`,``,`د`,``,`چ`,``,`ج`],inYear:(e,t)=>`${e} در سال ${t}`,total:(e,t,n)=>`${e} ${t} در ${n}`,less:`کمتر`,more:`بیشتر`,byMonth:e=>`${e}، به تفکیک ماه`},appointment:{label:`انتخاب نوبت`,day:`روز`,morning:`صبح`,afternoon:`بعدازظهر`,evening:`عصر`,closed:`تعطیل`,full:`پر`,free:e=>`${e} نوبت`,freeLong:e=>`${e} نوبت خالی`,none:`نوبت خالی ندارد`,closedDay:`این روز تعطیل است.`,noSlots:`نوبت خالی برای این روز نمانده است؛ روز دیگری را انتخاب کنید.`,time:e=>`ساعت ${e}`,booked:`، پر`,yours:`نوبت شما:`,at:(e,t)=>`${e}، ساعت ${t}`},address:{legend:`نشانی`,province:`استان`,city:`شهر`,street:`نشانی`,plaque:`پلاک`,unit:`واحد`,postalCode:`کد پستی`,provinceSearch:`جستجوی استان`,streetHint:`خیابان، کوچه، نام ساختمان`}},k={common:{close:`Close`,loading:`Loading`,optional:`Optional`,remove:e=>`Remove ${e}`,removeShort:`Remove`,clear:`Clear`,clearAll:`Clear all`,cancel:`Cancel`,confirm:`Apply`,save:`Save`,edit:`Edit`,prev:`Previous`,next:`Next`,today:`Today`,tomorrow:`Tomorrow`,noResults:`No results found.`,searching:`Searching…`,results:e=>`${e} ${e===`1`?`result`:`results`}`,added:e=>`${e} added`,removed:e=>`${e} removed`,selected:e=>`${e} selected`,max:e=>`Up to ${e} items`,total:`Total`,other:`Other`,of:(e,t)=>`${e} of ${t}`,and:` and `,list:`, `,range:` – `,percent:e=>`${e}%`,decimal:`.`},money:{toman:`Toman`,rial:`Rial`,positive:`plus `},alert:{close:`Close`},banner:{label:`Announcement`,close:`Dismiss announcement`},avatar:{online:`Online`,offline:`Offline`,busy:`Busy`,away:`Away`,more:e=>`${e} more`},bankCard:{card:`Bank card`,cardOf:e=>`${e} card`,bank:`Bank`,endingIn:e=>`ending in ${e}`,expiry:`Expires`},breadcrumb:{label:`Breadcrumb`,expand:`Show full path`},calendar:{label:`Calendar`,prevMonth:`Previous month`,nextMonth:`Next month`,month:`Month`,year:`Year`,holiday:`Holiday`},carousel:{slider:`carousel`,slide:`slide`,slideOf:(e,t)=>`${e} of ${t}`,slides:e=>`${e} slides`},chart:{period:`Period`,value:`Value`,share:`Share of total`,count:`Count`,keyboard:e=>`${e}. Use the arrow keys to move between points.`,thousand:`K`,million:`M`,billion:`B`},city:{label:`City`,outside:`Not in the list`,custom:`Other city; use this name`,search:`Search cities`,hint:`City name, e.g. Kashan`},province:{label:`Province`,search:`Search provinces or cities`,capital:e=>`Capital: ${e}`},colorPicker:{label:`Color`,custom:`Pick a custom color`,area:`Saturation and brightness`,areaValue:(e,t)=>`Saturation ${e}, brightness ${t}`,eyedropper:`Pick a color from the screen`,hue:`Hue`,degrees:e=>`${e} degrees`,red:`Red`,green:`Green`,blue:`Blue`,invalid:`Invalid color code; enter one like #0fa89b.`,swatches:`Suggested colors`,sample:`Sample text`,contrast:(e,t,n)=>`Contrast with ${e} text: ${t}:1 ${n?`(AA)`:`(below AA)`}`,names:{firoozeh:`Turquoise`,lajvard:`Lapis`,violet:`Violet`,anar:`Pomegranate`,zafaran:`Saffron`,peste:`Pistachio`,shab:`Night`}},combobox:{toggle:`Show options`,more:e=>`${e} more; type to find them.`},otp:{label:`Verification code`},command:{placeholder:`Search commands or pages…`,empty:`No commands found.`,title:`Command palette`,navigate:`Navigate`,select:`Select`},contextMenu:{label:`Options`,hint:`Right-click or press Shift+F10 for options.`},copy:{copy:`Copy`,copied:`Copied`,failed:`Copy failed`},countdown:{days:`days`,hours:`hours`,minutes:`minutes`,seconds:`seconds`,left:`left`},table:{selectAll:`Select all rows`,selectRow:`Select row`,selectNamed:e=>`Select ${e}`,empty:`No data.`,sort:e=>`Sort by ${e}`,search:`Search the table`,rows:e=>`${e} ${e===`1`?`row`:`rows`}`},datePicker:{label:`Date`,invalid:`Invalid date; enter it like 1403/05/12.`,open:`Choose a date from the calendar`},dateRange:{label:`Date range`,placeholder:`Select a date range`,presets:`Shortcuts`,pickEnd:`Now choose the end date.`,last7:e=>`Last ${e} days`,last30:e=>`Last ${e} days`,thisMonth:`This month`,lastMonth:`Last month`},monthPicker:{label:`Choose a month`,prevYear:`Previous year`,nextYear:`Next year`},fileUpload:{units:[`B`,`KB`,`MB`,`GB`],browse:`Choose file`,drop:`or drop a file here`,tooBig:e=>`File is larger than ${e}.`,wrongType:`This file type isn't accepted.`,tooMany:e=>`Up to ${e} files.`,done:`Uploaded`,uploading:`Uploading`,uploadingFile:e=>`Uploading ${e}`,error:`Upload failed`},input:{clear:`Clear`,show:`Show password`,hide:`Hide password`,checking:`Checking`},invalid:{card:`Invalid card number.`,iban:`Invalid IBAN.`,nationalId:`Invalid national ID.`,legalId:`Invalid company ID.`,mobile:`Invalid mobile number.`,landline:`Invalid phone number.`,postal:`Invalid postal code.`,plate:`Invalid license plate.`,time:`Invalid time; enter it like 09:30.`,timeRange:(e,t)=>`Time must be between ${e} and ${t}.`,priceMin:e=>`Amount must be at least ${e}.`,priceMax:e=>`Amount must be at most ${e}.`,priceRange:(e,t)=>`Amount must be between ${e} and ${t}.`},inlineEdit:{empty:`Empty`,failed:`Couldn't save; try again.`},iranMap:{label:`Map of Iran's provinces`,tableNote:`; data table follows`,onMap:e=>`${e} on the map`},keyboardFix:{before:`Did you mean`,after:`?`},meter:{ok:`Within limit`,warning:`Close to the limit`,critical:`Almost full`},multiSelect:{label:`Select`,selected:e=>`${e} selected`,clearedAll:`All removed`},numberInput:{label:`Quantity`,increment:`Increase`,decrement:`Decrease`},pagination:{nav:`Pagination`,page:e=>`Page ${e}`,perPage:`Per page`,jump:`Go to page`,jumpRange:(e,t,n)=>`${e}, ${t} to ${n}`},password:{title:`Password strength`,strength:e=>`Password strength: ${e}`,levels:[`Weak`,`Fair`,`Good`,`Strong`],persian:`Your password has Persian letters; the keyboard may still be on Persian.`,length:e=>`At least ${e} characters`,cases:`Upper and lower case letters`,digit:`At least one number`,symbol:`At least one symbol, like ! or @`,met:`, met`,unmet:`, not met`},receipt:{success:`Payment successful`,failed:`Payment failed`,pending:`Awaiting bank confirmation`,merchant:`Merchant`,tracking:`Tracking code`,copyTracking:`Copy tracking code`,reference:`Reference number`,card:`Card`,date:`Date`,at:e=>`at ${e}`},persianInput:{text:`Text`,"national-id":`National ID`,"legal-id":`Company ID`,mobile:`Mobile number`,landline:`Phone number`,card:`Card number`,iban:`IBAN`,price:`Amount`,postal:`Postal code`,time:`Time`,plate:`License plate`},textFix:{fix:`Fix writing`,clean:`The text looks right.`,count:(e,t)=>`${e} fixable: ${t}`,arabic:`Arabic letters`,zwnj:`half-spaces`,punctuation:`punctuation`,digits:`digits`,spacing:`spacing`},plate:{label:`License plate`,first:`First two digits`,letter:`Plate letter`,middle:`Three digits`,region:`Region code`,iran:`ایران`},rating:{label:`Rating`},sideNav:{label:`Main`},slider:{from:`Minimum`,to:`Maximum`},splitter:{label:`Resize panels`},stat:{up:`Up`,down:`Down`,flat:`No change`},stepper:{label:`Steps`,complete:`completed`,current:`current step`},tagInput:{label:`Tags`,duplicate:`This item has already been added.`},toast:{region:`Notifications`,close:`Dismiss notification`},tour:{done:`Done`,skip:`Skip`,step:(e,t)=>`Step ${e} of ${t}`},heatmap:{unit:`activities`,weekdays:[`Sa`,``,`Mo`,``,`We`,``,`Fr`],inYear:(e,t)=>`${e} in ${t}`,total:(e,t,n)=>`${e} ${t} in ${n}`,less:`Less`,more:`More`,byMonth:e=>`${e}, by month`},appointment:{label:`Book an appointment`,day:`Day`,morning:`Morning`,afternoon:`Afternoon`,evening:`Evening`,closed:`Closed`,full:`Full`,free:e=>`${e} open`,freeLong:e=>`${e} open slots`,none:`No open slots`,closedDay:`Closed on this day.`,noSlots:`No open slots left for this day; choose another day.`,time:e=>`${e}`,booked:`, booked`,yours:`Your appointment:`,at:(e,t)=>`${e} at ${t}`},address:{legend:`Address`,province:`Province`,city:`City`,street:`Street address`,plaque:`No.`,unit:`Unit`,postalCode:`Postal code`,provinceSearch:`Search provinces`,streetHint:`Street, alley, building name`}};function A(e=`fa`,t){let n=e===`en`?k:O;return t?M(n,t):n}const j=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function M(e,t){let n={...e};for(let[r,i]of Object.entries(t))i!==void 0&&(n[r]=j(i)&&j(e[r])?M(e[r],i):i);return n}const N=typeof HTMLElement>`u`?class{}:HTMLElement,P=[],F=[];let I=null;function L(e,t,n=`inline`){if(typeof customElements>`u`||customElements.get(e)||(n===`block`&&P.push(e),n===`contents`&&F.push(e),R(t),customElements.define(e,t),typeof document>`u`))return;I||(I=document.createElement(`style`),I.dataset.kashiElements=``,document.head.prepend(I));let r=[P.length&&`:where(${P.join(`,`)}) { display: block; }`,F.length&&`:where(${F.join(`,`)}) { display: contents; }`,`:where(${[...P,...F].join(`,`)})[hidden] { display: none; }`].filter(Boolean);I.textContent=`@layer kashi.elements { ${r.join(` `)} }`}function R(e){let t=/* @__PURE__ */ new Set;for(let n=e.prototype;n&&n!==N.prototype;n=Object.getPrototypeOf(n))for(let[e,r]of Object.entries(Object.getOwnPropertyDescriptors(n)))r.set&&t.add(e);let n=e.prototype.connectedCallback;e.prototype.connectedCallback=function(){for(let e of t){if(!Object.prototype.hasOwnProperty.call(this,e))continue;let t=this[e];delete this[e],this[e]=t}n?.call(this)}}function z(e){typeof document<`u`&&document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,e,{once:!0}):e()}const B={locale:`fa`,messages:O,digits:`fa`};function V(e,{messages:t,digits:n}={}){B.locale=e,B.messages=A(e,t),B.digits=n??(e===`en`?`latin`:`fa`)}const H=()=>B.digits,U=()=>B.messages,W=()=>B.locale,G=e=>{let t=e.getAttribute(`digits`);return t===`latin`||t===`fa`?t:B.digits},K=(e,n)=>G(e)===`fa`?t(String(n)):String(n),q=()=>{let e=B.locale===`en`;return{months:e?c:a,weekdays:e?l:o,weekdaysShort:e?u:s,friday:e?`Friday`:`جمعه`}};let J=0;const Y=e=>`${e}-${(++J).toString(36)}`,X={"&":`&amp;`,"<":`&lt;`,">":`&gt;`,'"':`&quot;`,"'":`&#39;`},Z=e=>String(e??``).replace(/[&<>"']/g,e=>X[e]),Q=(e,t,n=!1)=>{let r=e.getAttribute(t);return r===null?n:r!==`false`};function te(e,t,n){e.dispatchEvent(new CustomEvent(t,{detail:n,bubbles:!0,composed:!0}))}const $=(e,t=1.7,n=!1)=>`<svg${n?` data-k-mirror=""`:``} viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="${t}" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${e}</svg>`,ne={close:$(`<path d="m5 5 10 10M15 5 5 15"/>`),info:$(`<circle cx="10" cy="10" r="7.5"/><path d="M10 13.5V9.5M10 6.5h.01"/>`),success:$(`<circle cx="10" cy="10" r="7.5"/><path d="m6.75 10 2.25 2.25 4.25-4.5"/>`),warning:$(`<path d="M8.6 3.4 2.4 14a1.6 1.6 0 0 0 1.4 2.4h12.4a1.6 1.6 0 0 0 1.4-2.4L11.4 3.4a1.6 1.6 0 0 0-2.8 0Z"/><path d="M10 7.5v3.25M10 13.5h.01"/>`),error:$(`<circle cx="10" cy="10" r="7.5"/><path d="M10 6.5v4M10 13.5h.01"/>`),copy:$(`<rect x="7" y="7" width="10" height="10" rx="2"/><path d="M13 7V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2"/>`),check:$(`<path d="m5 10.5 3.2 3L15 7"/>`,2),calendar:$(`<rect x="3" y="4.5" width="14" height="12.5" rx="2"/><path d="M3 8.5h14M7 3v3M13 3v3"/>`),prev:$(`<path d="m12 5-5 5 5 5"/>`,1.7,!0),next:$(`<path d="m8 5 5 5-5 5"/>`,1.7,!0)};function re({id:e,label:t,required:n,optional:r,control:i}){return`<div class="k-field">${t?`<div class="k-field__label-row"><label class="k-label" for="${e}">${Z(t)}${n?`<span class="k-label__required" aria-hidden="true">*</span>`:``}${r?`<span class="k-label__optional">${Z(r)}</span>`:``}</label></div>`:``}${i}</div>`}function ie(e,t,n,r,i,a){if(e.querySelector(`:scope > .k-field__hint-row`)?.remove(),r?e.setAttribute(`data-invalid`,``):e.removeAttribute(`data-invalid`),r||i){let t=document.createElement(`div`);t.className=`k-field__hint-row`,t.innerHTML=`<div class="k-field__hints">${r?`<p class="k-hint k-hint--error" id="${n}-error">${Z(r)}</p>`:``}${i?`<p class="k-hint" id="${n}-hint">${Z(i)}</p>`:``}</div>`,e.append(t)}let o=[a,r?`${n}-error`:null,i?`${n}-hint`:null].filter(Boolean).join(` `);o?t.setAttribute(`aria-describedby`,o):t.removeAttribute(`aria-describedby`),r?t.setAttribute(`aria-invalid`,`true`):t.removeAttribute(`aria-invalid`);let s=t.closest(`.k-input, .k-select, .k-otp`);s?.classList.contains(`k-input`)&&(r?s.setAttribute(`data-state`,`invalid`):s.getAttribute(`data-state`)===`invalid`&&s.removeAttribute(`data-state`))}function ae(e,t,n){let r=e.querySelector(`:scope > input[type=hidden][data-kashi-value]`);t?(r||(r=document.createElement(`input`),r.type=`hidden`,r.dataset.kashiValue=``,e.append(r)),r.name=t,r.value=n):r?.remove()}export{t as A,D as C,i as D,x as E,r as O,C as S,T,ae as _,q as a,E as b,te as c,W as d,H as f,ie as g,V as h,Q as i,n as k,Z as l,K as m,ne as n,L as o,U as p,z as r,G as s,N as t,re as u,Y as v,S as w,y as x,w as y};
@@ -0,0 +1 @@
1
+ import{c as e,g as t,i as n,l as r,m as i,n as a,o,p as s,r as c,t as l,u,v as d}from"./base-DTQ50VdG.js";const f=e=>`<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M1.8 10S4.8 4.5 10 4.5 18.2 10 18.2 10 15.2 15.5 10 15.5 1.8 10 1.8 10Z"/><circle cx="10" cy="10" r="2.5"/>${e?`<path d="m3 3 14 14"/>`:``}</svg>`,p=[`name`,`placeholder`,`autocomplete`,`inputmode`,`maxlength`,`minlength`,`pattern`,`min`,`max`,`step`,`dir`,`spellcheck`];var m=class extends l{constructor(){super(...arguments),this.multiline=!1,this.key=d(`kashi-input`),this.text=``,this.revealed=!1,this.rendered=!1,this.valueSet=!1}connectedCallback(){!this.rendered&&!this.valueSet&&(this.text=this.getAttribute(`value`)??``),this.render()}attributeChangedCallback(e,t,n){this.rendered&&t!==n&&(e===`value`?this.value=n??``:(this.text=this.control.value,this.render()))}get value(){return this.rendered?this.control.value:this.text}set value(e){this.valueSet=!0,this.text=String(e??``),this.rendered&&(this.control.value=this.text,this.paint())}focus(e){this.control?.focus(e)}render(){let t=this.key,i=this.getAttribute(`aria-label`),a=this.getAttribute(`label`),o=this.getAttribute(`type`)??`text`,c=this.getAttribute(`size`),l=this.hasAttribute(`disabled`),d=p.map(e=>this.hasAttribute(e)?` ${e}="${r(this.getAttribute(e))}"`:``).join(``),f=`${this.hasAttribute(`required`)?` required`:``}${l?` disabled`:``}${this.hasAttribute(`readonly`)?` readonly`:``}${!a&&i?` aria-label="${r(i)}"`:``}`,m=this.multiline?`<textarea id="${t}" class="k-input__control" rows="${Number(this.getAttribute(`rows`))||4}"${d}${f}></textarea>`:`<input id="${t}" class="k-input__control" type="${r(o===`password`&&this.revealed?`text`:o)}"${d}${f}>`,h=`<div class="k-input${this.multiline?` k-input--textarea`:``}${n(this,`autoresize`)?` k-input--autoresize`:``}${c===`sm`||c===`lg`?` k-input--${c}`:``}" data-size="${c??`md`}"${l?` data-state="disabled"`:``}>${m}<span class="k-input__end"></span></div>`,g=this.getAttribute(`optional`);this.querySelector(`:scope > .k-field`)?.remove(),this.insertAdjacentHTML(`afterbegin`,u({id:t,label:a,required:this.hasAttribute(`required`),optional:g===null?null:g||s().common.optional,control:h})),this.control=this.querySelector(`.k-input__control`),this.control.value=this.text,this.control.addEventListener(`input`,()=>{this.paint(),e(this,`kashi-change`,{value:this.control.value})}),this.querySelector(`.k-input__end`).addEventListener(`click`,t=>{let n=t.target.closest(`button`);n&&(n.dataset.act===`clear`?(this.control.value=``,this.control.dispatchEvent(new Event(`input`,{bubbles:!0})),this.control.focus(),e(this,`kashi-clear`,{})):n.dataset.act===`reveal`&&(this.revealed=!this.revealed,this.control.type=this.revealed?`text`:`password`,this.paint(),n.focus()))}),this.rendered=!0,this.paint()}paint(){let e=this.control,a=e.value.length,o=this.hasAttribute(`disabled`)||this.hasAttribute(`readonly`),c=this.querySelector(`.k-input__end`),l=!this.multiline&&this.getAttribute(`type`)===`password`&&this.getAttribute(`revealable`)!==`false`;c.innerHTML=[n(this,`loading`)?'<span class="k-input__addon"><span class="k-spinner k-spinner--sm" role="status" aria-label="${esc(msg().input.checking)}"></span></span>':``,n(this,`clearable`)&&a>0&&!o?`<button type="button" class="k-input__action" data-act="clear" aria-label="${r(s().input.clear)}"><svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" aria-hidden="true"><path d="m6 6 8 8M14 6l-8 8"/></svg></button>`:``,l?`<button type="button" class="k-input__action" data-act="reveal" aria-label="${r(this.revealed?s().input.hide:s().input.show)}" aria-pressed="${this.revealed}">${f(this.revealed)}</button>`:``].join(``),c.style.display=c.innerHTML?`contents`:`none`;let u=this.querySelector(`:scope > .k-field`),d=`${this.key}-count`;if(t(u,e,this.key,this.getAttribute(`error`),this.getAttribute(`hint`),n(this,`show-count`)?d:null),n(this,`show-count`)){let e=Number(this.getAttribute(`maxlength`))||0,t=u.querySelector(`:scope > .k-field__hint-row`);t||(t=document.createElement(`div`),t.className=`k-field__hint-row`,t.innerHTML=`<div class="k-field__hints"></div>`,u.append(t)),t.insertAdjacentHTML(`beforeend`,`<span class="k-counter" id="${d}"${e&&a>e?` data-over=""`:``}>${e?`${i(this,a)} / ${i(this,e)}`:i(this,a)}</span>`)}}};m.observedAttributes=[`label`,`hint`,`error`,`type`,`required`,`disabled`,`readonly`,`clearable`,`revealable`,`show-count`,`loading`,`size`,`optional`,`aria-label`,`value`,...p];var h=class extends m{constructor(){super(...arguments),this.multiline=!0}};h.observedAttributes=[...m.observedAttributes,`rows`,`autoresize`];var g=class extends l{constructor(){super(...arguments),this.box=null}connectedCallback(){c(()=>{if(!this.isConnected||this.box)return;let e=this.getAttribute(`remember`);e&&this.read(e)?this.hidden=!0:this.build()})}attributeChangedCallback(){this.box&&this.decorate()}read(e){try{return localStorage.getItem(`kashi-banner:${e}`)===`closed`}catch{return!1}}build(){let e=this.querySelector(`:scope > [slot='icon']`),t=[...this.querySelectorAll(`:scope > [slot='actions']`)],n=[...this.childNodes].filter(n=>n!==e&&!t.includes(n)),r=document.createElement(`div`);if(r.setAttribute(`role`,`region`),e){e.removeAttribute(`slot`);let t=document.createElement(`span`);t.className=`k-banner__icon`,t.setAttribute(`aria-hidden`,`true`),t.append(e),r.append(t)}let i=document.createElement(`p`);if(i.className=`k-banner__text`,i.append(...n),r.append(i),t.length){let e=document.createElement(`div`);e.className=`k-banner__actions`;for(let n of t)n.removeAttribute(`slot`),e.append(n);r.append(e)}this.replaceChildren(r),this.box=r,this.decorate()}decorate(){let e=this.box,t=this.getAttribute(`tone`);e.className=`k-banner${t&&t!==`neutral`?` k-banner--${t}`:``}${n(this,`flush`)?` k-banner--flush`:``}`,e.setAttribute(`aria-label`,this.getAttribute(`label`)??s().banner.label),e.querySelector(`.k-banner__close`)?.remove(),n(this,`dismissible`)&&(e.insertAdjacentHTML(`beforeend`,`<button type="button" class="k-btn k-btn--tertiary k-btn--icon k-btn--sm k-banner__close" aria-label="${r(this.getAttribute(`close-label`)??s().banner.close)}">${a.close}</button>`),e.querySelector(`.k-banner__close`).addEventListener(`click`,()=>this.close()))}close(){let e=new CustomEvent(`kashi-close`,{bubbles:!0,cancelable:!0,detail:{}});if(!this.dispatchEvent(e))return;this.hidden=!0;let t=this.getAttribute(`remember`);if(t)try{localStorage.setItem(`kashi-banner:${t}`,`closed`)}catch{}}};g.observedAttributes=[`tone`,`flush`,`label`,`dismissible`,`close-label`],o(`kashi-input`,m,`block`),o(`kashi-textarea`,h,`block`),o(`kashi-banner`,g,`block`);export{g as KashiBanner,m as KashiInput,h as KashiTextarea};
@@ -0,0 +1,16 @@
1
+ import{A as e,C as t,E as n,S as r,T as i,_ as a,a as o,b as s,c,d as l,g as u,i as d,l as f,n as p,o as m,p as h,s as g,t as _,u as v,v as y,w as b,x,y as S}from"./base-DTQ50VdG.js";import{t as C}from"./holidays-DgbIAdlt.js";const w=(e,t)=>!!e&&!!t&&e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate(),T=e=>new Date(e.getFullYear(),e.getMonth(),e.getDate()),E=(e,t)=>new Date(e.getFullYear(),e.getMonth(),e.getDate()+t),D=e=>`${e.getFullYear()}-${e.getMonth()+1}-${e.getDate()}`;function O(e,t){let{jy:r,jm:i,jd:a}=n(e),o=r*12+(i-1)+t,s=Math.floor(o/12),c=o-s*12+1;return b(s,c,Math.min(a,x(s,c)))}const k=e=>e?s(e.trim())??t(e):null;var A=class extends _{constructor(){super(...arguments),this.rangeValue=null,this.hover=null,this.selected=null,this.valueSet=!1,this.focused=T(/* @__PURE__ */ new Date),this.refocus=!1,this.rendered=!1,this.key=y(`kashi-cal`),this.onClick=e=>{let t=e.target.closest(`button`);if(!t||!this.contains(t))return;let n=t.dataset.nav;if(n)this.go(O(this.focused,n===`prev`?-1:1),!1);else if(t.dataset.today!==void 0){let e=/* @__PURE__ */ new Date;this.pick(new Date(e.getFullYear(),e.getMonth(),e.getDate()))}else if(t.dataset.day){let[e,n,r]=t.dataset.day.split(`-`).map(Number);this.pick(new Date(e,n-1,r))}},this.onSelect=e=>{let t=e.target;if(!t.matches?.(`.k-calendar__select`))return;e.stopPropagation();let{jy:r,jm:i,jd:a}=n(this.focused),o=t.dataset.part===`year`?Number(t.value):r,s=t.dataset.part===`month`?Number(t.value):i;this.go(b(o,s,Math.min(a,x(o,s))),!1),this.querySelector(`.k-calendar__select[data-part="${t.dataset.part}"]`)?.focus()},this.onKey=e=>{if(!e.target.classList?.contains(`k-calendar__day`))return;let t=getComputedStyle(this).direction===`rtl`,n=this.focused,i=r(n),a={ArrowLeft:()=>E(n,t?1:-1),ArrowRight:()=>E(n,t?-1:1),ArrowUp:()=>E(n,-7),ArrowDown:()=>E(n,7),Home:()=>E(n,-i),End:()=>E(n,6-i),PageUp:()=>O(n,e.shiftKey?-12:-1),PageDown:()=>O(n,e.shiftKey?12:1)};a[e.key]&&(e.preventDefault(),this.go(a[e.key]()))}}get range(){return this.rangeValue}set range(e){this.rangeValue=e,e?.start&&(this.focused=this.clamp(T(e.start))),this.rendered&&this.render()}connectedCallback(){if(!this.rendered){this.valueSet||(this.selected=k(this.getAttribute(`value`))),this.focused=this.clamp(T(this.selected??/* @__PURE__ */ new Date)),this.addEventListener(`click`,this.onClick),this.addEventListener(`keydown`,this.onKey),this.addEventListener(`change`,this.onSelect);let e=e=>{let t=e.target.closest?.(`.k-calendar__day`)?.dataset.day;if(!this.rangeValue?.start||this.rangeValue.end||!t)return;let[n,r,i]=t.split(`-`).map(Number);this.hover=new Date(n,r-1,i),this.paintRange()};this.addEventListener(`pointerover`,e),this.addEventListener(`focusin`,e)}this.rendered=!0,this.render()}attributeChangedCallback(e,t,n){this.rendered&&t!==n&&(e===`value`&&(this.selected=k(n),this.selected&&(this.focused=T(this.selected))),this.render())}get value(){return this.selected?i(this.selected):``}set value(e){this.valueSet=!0,this.selected=k(e??``),this.selected&&(this.focused=T(this.selected)),this.rendered&&this.render()}get date(){return this.selected}set date(e){this.value=e?i(e):``}focus(){this.querySelector(`.k-calendar__day[tabindex="0"]`)?.focus()}get min(){return k(this.getAttribute(`min`))}get max(){return k(this.getAttribute(`max`))}clamp(e){let t=this.min,n=this.max;return t&&e<t?T(t):n&&e>n?T(n):e}disabled(e){let t=this.min,n=this.max;return!!t&&e<t||!!n&&e>n||!!this.isDateDisabled?.(e)}holiday(e){return this.holidayOf?this.holidayOf(e)||null:d(this,`holidays`)?C(e,{locale:l()}):null}go(e,t=!0){this.focused=this.clamp(e),this.refocus=t,this.render()}pick(e){this.disabled(e)||(this.selected=e,this.focused=e,this.refocus=!0,this.render(),a(this,this.getAttribute(`name`),this.value),c(this,`kashi-change`,{value:this.value,date:e}))}paintRange(){let e=this.rangeValue;if(!e)return;let t=e.start?T(e.start):null,n=e.end?T(e.end):null,r=t&&!n&&this.hover?this.hover:null,[i,a]=t&&(n||r)?[t,n??r].sort((e,t)=>+e-t):[t,t];this.querySelectorAll(`td[data-date]`).forEach(e=>{let[t,r,o]=e.dataset.date.split(`-`).map(Number),s=new Date(t,r-1,o),c=!!i&&!!a&&s>=i&&s<=a;e.setAttribute(`aria-selected`,String(c)),e.toggleAttribute(`data-in-range`,c&&!!n),e.toggleAttribute(`data-preview`,c&&!n),e.toggleAttribute(`data-range-start`,!!i&&w(s,i)),e.toggleAttribute(`data-range-end`,!!a&&w(s,a))})}render(){let t=g(this),i=n=>t===`fa`?e(n):String(n),s=h(),c=s.calendar,{months:u,weekdays:d,weekdaysShort:m,friday:_}=o(),v=T(/* @__PURE__ */ new Date),{jy:y,jm:C}=n(this.focused),O=b(y,C,1),k=x(y,C),A=[...Array(r(O)).fill(null),...Array.from({length:k},(e,t)=>E(O,t))];for(;A.length%7;)A.push(null);let j=this.min,M=this.max,N=j?n(j).jy:n(v).jy-100,P=M?n(M).jy:n(v).jy+20,F=Array.from({length:Math.max(0,P-N+1)},(e,t)=>N+t);F.includes(y)||F.push(y),F.sort((e,t)=>e-t);let I=!!j&&O<=T(j),L=!!M&&b(y,C,k)>=T(M),R=[];for(let e=0;e<A.length;e+=7)R.push(`<tr>${A.slice(e,e+7).map(e=>{if(!e)return`<td role="gridcell"></td>`;let r=this.holiday(e),a=S(e,{style:`full`,digits:t,locale:l()})+(r?`${s.common.list}${c.holiday}${r===_?``:`: ${r}`}`:``);return`<td role="gridcell" data-date="${D(e)}" aria-selected="${w(e,this.selected)}"><button type="button" class="k-calendar__day" data-day="${D(e)}" tabindex="${w(e,this.focused)?0:-1}" aria-label="${f(a)}"${r&&r!==_?` title="${f(r)}"`:``}${r?` data-holiday=""`:``}${w(e,v)?` aria-current="date"`:``}${this.disabled(e)?` aria-disabled="true"`:``}>${i(n(e).jd)}</button></td>`}).join(``)}</tr>`);let z=this.getAttribute(`today-label`);this.innerHTML=`<div class="k-calendar" role="group" aria-label="${f(this.getAttribute(`label`)??c.label)}">
2
+ <div class="k-calendar__header">
3
+ <button type="button" class="k-btn k-btn--tertiary k-btn--icon k-btn--sm" data-nav="prev" aria-label="${f(c.prevMonth)}"${I?` disabled`:``}>${p.prev}</button>
4
+ <div class="k-calendar__selects">
5
+ <select class="k-calendar__select" data-part="month" aria-label="${f(c.month)}">${u.map((e,t)=>`<option value="${t+1}"${t+1===C?` selected`:``}>${e}</option>`).join(``)}</select>
6
+ <select class="k-calendar__select" data-part="year" aria-label="${f(c.year)}">${F.map(e=>`<option value="${e}"${e===y?` selected`:``}>${i(e)}</option>`).join(``)}</select>
7
+ </div>
8
+ <button type="button" class="k-btn k-btn--tertiary k-btn--icon k-btn--sm" data-nav="next" aria-label="${f(c.nextMonth)}"${L?` disabled`:``}>${p.next}</button>
9
+ </div>
10
+ <h2 class="k-sr-only" id="${this.key}-title" aria-live="polite">${u[C-1]} ${i(y)}</h2>
11
+ <table class="k-calendar__grid" role="grid" aria-labelledby="${this.key}-title">
12
+ <thead><tr>${m.map((e,t)=>`<th scope="col" abbr="${d[t]}">${e}</th>`).join(``)}</tr></thead>
13
+ <tbody>${R.join(``)}</tbody>
14
+ </table>
15
+ ${z?`<div class="k-calendar__footer"><button type="button" class="k-btn k-btn--link" data-today>${f(z)}</button></div>`:``}
16
+ </div>`,a(this,this.getAttribute(`name`),this.value),this.paintRange(),this.refocus&&(this.refocus=!1,this.querySelector(`[data-day="${D(this.focused)}"]`)?.focus())}};A.observedAttributes=[`value`,`min`,`max`,`digits`,`holidays`,`label`,`today-label`,`name`];var j=class extends _{constructor(){super(...arguments),this.selected=null,this.valueSet=!1,this.invalid=!1,this.rendered=!1,this.key=y(`kashi-date`),this.pop=null,this.onOutside=e=>{this.contains(e.target)||this.close(!1)}}connectedCallback(){!this.rendered&&!this.valueSet&&(this.selected=k(this.getAttribute(`value`))),this.render()}disconnectedCallback(){this.close(!1)}attributeChangedCallback(e,t,n){this.rendered&&t!==n&&(e===`value`?(this.selected=k(n),this.invalid=!1,this.paint()):this.render())}get value(){return this.selected?i(this.selected):``}set value(e){this.valueSet=!0,this.selected=k(e??``),this.invalid=!1,this.rendered&&this.paint()}get date(){return this.selected}set date(e){this.value=e?i(e):``}focus(e){this.input?.focus(e)}get digits(){return g(this)}fmt(e){return e?S(e,{digits:this.digits}):``}render(){let e=this.key,t=this.getAttribute(`aria-label`),n=this.hasAttribute(`label`)?this.getAttribute(`label`):t?null:h().datePicker.label,r=this.hasAttribute(`required`),i=this.hasAttribute(`disabled`),a=this.getAttribute(`placeholder`)??(this.digits===`fa`?`۱۴۰۳/۰۱/۰۱`:`1403/01/01`);this.close(!1),this.querySelector(`:scope > .k-datepicker`)?.remove();let o=`<div class="k-input"${i?` data-state="disabled"`:``}><input id="${e}" class="k-input__control" type="text" dir="ltr" autocomplete="off" placeholder="${f(a)}"${r?` required`:``}${i?` disabled`:``}${!n&&t?` aria-label="${f(t)}"`:``}><span class="k-input__addon"><button type="button" class="k-btn k-btn--tertiary k-btn--icon k-btn--sm k-datepicker__toggle" aria-haspopup="dialog" aria-expanded="false"${i?` disabled`:``}>${p.calendar}</button></span></div>`;this.insertAdjacentHTML(`afterbegin`,`<div class="k-datepicker">${v({id:e,label:n,required:r,control:o})}</div>`),this.input=this.querySelector(`input.k-input__control`),this.toggle=this.querySelector(`.k-datepicker__toggle`),this.input.addEventListener(`blur`,()=>this.commitText()),this.input.addEventListener(`keydown`,e=>{e.key===`Enter`&&this.commitText()}),this.toggle.addEventListener(`click`,()=>this.pop?this.close():this.open()),this.rendered=!0,this.paint()}paint(){let e=this.fmt(this.selected);!this.invalid&&this.input.value!==e&&(this.input.value=e);let t=this.getAttribute(`open-label`)??h().datePicker.open;this.toggle.setAttribute(`aria-label`,this.selected?`${t}${h().common.list}${S(this.selected,{style:`full`,digits:this.digits,locale:l()})}`:t);let n=this.getAttribute(`invalid-message`)??h().datePicker.invalid;this.input.setCustomValidity(this.invalid?n:``),u(this.querySelector(`.k-field`),this.input,this.key,this.getAttribute(`error`)||(this.invalid?n:null),this.getAttribute(`hint`)),a(this,this.getAttribute(`name`),this.value)}commitText(){let e=this.input.value.trim();if(!e)return this.commit(null);let n=t(e),r=k(this.getAttribute(`min`)),i=k(this.getAttribute(`max`));n&&!(r&&n<r)&&!(i&&n>i)&&!this.isDateDisabled?.(n)?this.commit(n):(this.invalid=!0,this.paint())}commit(e){let t=!w(e,this.selected)||e===null!=(this.selected===null);this.selected=e,this.invalid=!1,this.input.value=this.fmt(e),this.paint(),t&&c(this,`kashi-change`,{value:this.value,date:e})}open(){if(this.pop||this.hasAttribute(`disabled`))return;let e=this.querySelector(`.k-datepicker`),t=this.querySelector(`.k-input`),n=document.createElement(`div`);n.className=`k-datepicker__popover`,n.id=`${this.key}-calendar`,n.setAttribute(`role`,`dialog`),n.setAttribute(`aria-label`,this.getAttribute(`open-label`)??h().datePicker.open),n.style.insetBlockStart=`${t.offsetTop+t.offsetHeight+6}px`;let r=document.createElement(`kashi-calendar`);for(let e of[`min`,`max`,`digits`,`holidays`]){let t=this.getAttribute(e);t!==null&&r.setAttribute(e,t)}this.selected&&r.setAttribute(`value`,i(this.selected)),r.setAttribute(`today-label`,this.getAttribute(`today-label`)??h().common.today),r.isDateDisabled=this.isDateDisabled,r.addEventListener(`kashi-change`,e=>{e.stopPropagation(),this.commit(e.detail.date),this.close()}),n.addEventListener(`keydown`,e=>{e.key===`Escape`&&(e.stopPropagation(),this.close())}),n.addEventListener(`focusout`,e=>{let t=e.relatedTarget;t&&!this.contains(t)&&this.close(!1)}),n.append(r),e.append(n),this.pop=n,this.toggle.setAttribute(`aria-expanded`,`true`),this.toggle.setAttribute(`aria-controls`,n.id),document.addEventListener(`pointerdown`,this.onOutside),r.focus()}close(e=!0){this.pop&&(this.pop.remove(),this.pop=null,document.removeEventListener(`pointerdown`,this.onOutside),this.toggle.setAttribute(`aria-expanded`,`false`),this.toggle.removeAttribute(`aria-controls`),e&&this.toggle.focus())}};j.observedAttributes=[`label`,`hint`,`error`,`required`,`disabled`,`value`,`min`,`max`,`digits`,`holidays`,`name`,`placeholder`,`invalid-message`,`aria-label`],m(`kashi-calendar`,A,`block`),m(`kashi-date-picker`,j,`block`);export{A as KashiCalendar,j as KashiDatePicker};
@@ -0,0 +1 @@
1
+ import{D as e,E as t,T as n,a as r,d as i,f as a,l as o,o as s,p as c,t as l,v as u,w as d,x as f,y as p}from"./base-DTQ50VdG.js";const m=t=>e(t,{digits:a()}),h=e=>m(Math.round(e*10)/10).replace(`.`,c().common.decimal),g=e=>{let t=Math.abs(e),n=c().chart;return t>=1e9?h(e/1e9)+n.billion:t>=1e6?h(e/1e6)+n.million:t>=1e3?h(e/1e3)+n.thousand:m(e)};function _(e,t=4){if(e<=0)return[0];let n=e/t,r=10**Math.floor(Math.log10(n)),i=[1,2,2.5,5,10].map(e=>e*r).find(e=>e>=n);return Array.from({length:Math.ceil(e/i)+1},(e,t)=>t*i)}const v=(e,t)=>c().common.percent(h(e/(t||1)*100)),y=e=>`var(--k-chart-${e+1})`,b=(e,t)=>{if(!e)return t;try{return JSON.parse(e)}catch{return t}};var x=class extends l{constructor(){super(...arguments),this.key=u(`kashi-chart`),this.props={}}connectedCallback(){this.draw()}attributeChangedCallback(){this.isConnected&&this.draw()}get format(){let e=this.getAttribute(`unit`);return this.fmt??(t=>`${m(Math.round(t))}${e?` ${e}`:``}`)}set format(e){this.fmt=e,this.isConnected&&this.draw()}read(e,t){return this.props[e]??b(this.getAttribute(e),t)}write(e,t){this.props[e]=t,this.isConnected&&this.draw()}get heading(){return this.getAttribute(`label`)??``}tip(e,t,n=0,r,i=[]){let a=e.querySelector(`:scope > .k-chart__tip`);if(t===null){a?.remove();return}a||(a=document.createElement(`div`),a.className=`k-chart__tip`,a.setAttribute(`aria-hidden`,`true`),e.append(a));let s=e.clientWidth;a.style.left=`${s?Math.min(Math.max(t,80),s-80):t}px`,a.style.top=`${n}px`,a.innerHTML=`${r?`<span class="k-chart__tip-title">${o(r)}</span>`:``}${i.map(e=>`<span class="k-chart__tip-row"${e.color?` style="--_c: ${e.color}"`:``}>${e.name===void 0?``:`<span>${e.color?`<i></i>`:``}${o(e.name)}</span>`}<strong>${o(e.value)}</strong></span>`).join(``)}`}at(e,t){let n=t.getBoundingClientRect(),r=e.getBoundingClientRect();return{x:r.left+r.width/2-n.left,y:r.top-n.top}}},S=class extends x{get data(){return this.read(`data`,[])}set data(e){this.write(`data`,e)}get series(){return this.read(`series`,[])}set series(e){this.write(`series`,e)}get labels(){return this.read(`labels`,[])}set labels(e){this.write(`labels`,e)}draw(){let e=this.format,t=this.series.length?this.series.slice(0,4):null,n=this.data,r=t?this.labels:n.map(e=>e.label),i=r.map((e,r)=>t?t.reduce((e,t)=>e+(t.values[r]??0),0):n[r].value),a=Math.max(0,...i),s=_(a),l=s.at(-1)||1,u=i.indexOf(a),d=this.getAttribute(`label-max`)!==`false`,f=n=>t?`${r[n]}: ${t.map(t=>`${t.name} ${e(t.values[n]??0)}`).join(c().common.list)}${c().common.list}${c().common.total} ${e(i[n])}`:`${r[n]}: ${e(i[n])}`,p=this.getAttribute(`height`);this.innerHTML=`<figure class="k-chart k-chart--bar" aria-labelledby="${this.key}-t" style="margin: 0${p?`; --k-chart-height: ${o(p)}`:``}"><figcaption class="k-chart__head"><p class="k-chart__title" id="${this.key}-t">${o(this.heading)}</p>${t&&t.length>1?`<ul class="k-chart__legend" aria-hidden="true">${t.map((e,t)=>`<li style="--_c: ${y(t)}"><span class="k-chart__key k-chart__key--box"></span>${o(e.name)}</li>`).join(``)}</ul>`:``}</figcaption><div class="k-chart__plot"><div class="k-bars__grid" aria-hidden="true">${s.map(e=>`<span data-v="${o(g(e))}"></span>`).join(``)}</div><div class="k-bars" role="list" aria-label="${o(this.heading)}">${r.map((n,r)=>`<div class="k-bars__col" role="listitem" tabindex="0" data-i="${r}" aria-label="${o(f(r))}" style="--_d: ${r*40}ms">${d&&r===u?`<span class="k-bars__value" aria-hidden="true">${o(e(i[r]))}</span>`:``}${t?`<span class="k-bars__stack" style="block-size: ${i[r]/l*100}%" aria-hidden="true">${t.map((e,t)=>`<span class="k-bars__seg" style="--_c: ${y(t)}; flex-grow: ${e.values[r]??0}"></span>`).join(``)}</span>`:`<span class="k-bars__bar" style="block-size: ${i[r]/l*100}%" aria-hidden="true"></span>`}<span class="k-bars__label" aria-hidden="true">${o(n)}</span></div>`).join(``)}</div></div></figure>`;let m=this.querySelector(`.k-chart__plot`),h=n=>{let a=Number(n.dataset.i);m.querySelector(`[data-active]`)?.removeAttribute(`data-active`),n.setAttribute(`data-active`,``);let o=this.at(n.querySelector(`.k-bars__bar, .k-bars__stack`)??n,m);this.tip(m,o.x,o.y,r[a],t?[...t.map((t,n)=>({name:t.name,value:e(t.values[a]??0),color:y(n)})),{name:c().common.total,value:e(i[a])}]:[{value:e(i[a])}])},v=()=>{m.querySelector(`[data-active]`)?.removeAttribute(`data-active`),this.tip(m,null)};m.querySelectorAll(`.k-bars__col`).forEach(e=>{e.addEventListener(`pointerenter`,()=>h(e)),e.addEventListener(`focus`,()=>h(e)),e.addEventListener(`pointerleave`,v),e.addEventListener(`blur`,v)})}};S.observedAttributes=[`label`,`data`,`labels`,`series`,`unit`,`label-max`,`height`];var C=class extends x{get data(){return this.read(`data`,[])}set data(e){this.write(`data`,e)}draw(){let e=this.format,t=this.data,n=Math.max(1,...t.map(e=>e.value)),r=t.reduce((e,t)=>e+t.value,0);this.innerHTML=`<figure class="k-chart" aria-labelledby="${this.key}-t" style="margin: 0"><figcaption class="k-chart__head"><p class="k-chart__title" id="${this.key}-t">${o(this.heading)}</p></figcaption><ol class="k-barlist" style="position: relative">${t.map((t,i)=>`<li class="k-barlist__row" data-i="${i}" style="--_d: ${i*60}ms"><span class="k-barlist__track"><span class="k-barlist__fill" style="inline-size: ${t.value/n*100}%" aria-hidden="true"></span>${t.href?`<a class="k-barlist__label" href="${o(t.href)}">${o(t.label)}</a>`:`<span class="k-barlist__label">${o(t.label)}</span>`}</span><span class="k-barlist__value">${o(e(t.value))} <span class="k-barlist__share">${v(t.value,r)}</span></span></li>`).join(``)}</ol></figure>`;let i=this.querySelector(`.k-barlist`);i.querySelectorAll(`.k-barlist__row`).forEach(n=>{n.addEventListener(`pointerenter`,()=>{let a=t[Number(n.dataset.i)];n.setAttribute(`data-active`,``);let o=this.at(n.querySelector(`.k-barlist__fill`),i);this.tip(i,o.x,o.y,a.label,[{name:c().chart.value,value:e(a.value)},{name:c().chart.share,value:v(a.value,r)}])}),n.addEventListener(`pointerleave`,()=>{n.removeAttribute(`data-active`),this.tip(i,null)})})}};C.observedAttributes=[`label`,`data`,`unit`];var w=class extends x{get data(){return this.read(`data`,[])}set data(e){this.write(`data`,e)}draw(){let e=this.format,t=this.data.slice(0,4),n=t.reduce((e,t)=>e+t.value,0),r=this.getAttribute(`percent`)!==`false`;this.innerHTML=`<figure class="k-chart" aria-labelledby="${this.key}-t" style="margin: 0"><figcaption class="k-chart__head"><p class="k-chart__title" id="${this.key}-t">${o(this.heading)}</p></figcaption><div class="k-proportion__wrap"><div class="k-proportion" aria-hidden="true">${t.map((e,t)=>`<span class="k-proportion__seg" data-i="${t}" style="--_c: ${y(t)}; flex-grow: ${e.value}"></span>`).join(``)}</div></div><ul class="k-proportion__legend">${t.map((t,i)=>`<li data-i="${i}" style="--_c: ${y(i)}"><span class="k-chart__key k-chart__key--box" aria-hidden="true"></span><span>${o(t.label)}</span><strong>${o(r?v(t.value,n):e(t.value))}</strong>${r?`<span class="k-proportion__abs">${o(e(t.value))}</span>`:``}</li>`).join(``)}</ul></figure>`;let i=this.querySelector(`.k-proportion__wrap`),a=e=>this.querySelectorAll(`[data-i]`).forEach(t=>t.toggleAttribute(`data-active`,Number(t.dataset.i)===e));i.querySelectorAll(`.k-proportion__seg`).forEach(r=>{r.addEventListener(`pointerenter`,()=>{let o=Number(r.dataset.i);a(o);let s=this.at(r,i);this.tip(i,s.x,s.y,void 0,[{name:t[o].label,value:v(t[o].value,n),color:y(o)},{name:c().chart.count,value:e(t[o].value)}])}),r.addEventListener(`pointerleave`,()=>{a(null),this.tip(i,null)})})}};w.observedAttributes=[`label`,`data`,`unit`,`percent`];var T=class extends x{get data(){return this.read(`data`,[])}set data(e){this.write(`data`,e)}draw(){let e=this.format,t=[...this.data].sort((e,t)=>t.value-e.value),n=t.length>5?[...t.slice(0,4),{label:c().common.other,value:t.slice(4).reduce((e,t)=>e+t.value,0)}]:t,r=n.reduce((e,t)=>e+t.value,0)||1,i=e=>e<4?y(e):`var(--k-text-quaternary)`,a=this.getAttribute(`variant`)!==`pie`,s=Number(this.getAttribute(`size`))||176,l=this.getAttribute(`total-label`)??c().common.total,u=a?40:25,d=a?16:50,f=2*Math.PI*u,p=n.length>1?a?1.6:.8:0,m=0,h=n.map(e=>{let t=e.value/r*f,n={start:m,len:t};return m+=t,n});this.innerHTML=`<figure class="k-chart k-pie" aria-labelledby="${this.key}-t" style="margin: 0"><figcaption class="k-chart__head"><p class="k-chart__title" id="${this.key}-t">${o(this.heading)}</p></figcaption><div class="k-pie__body"><div class="k-pie__plot" style="inline-size: ${s}px; block-size: ${s}px"><svg viewBox="0 0 100 100" class="k-pie__svg" aria-hidden="true">${a?`<circle cx="50" cy="50" r="${u}" fill="none" stroke="var(--k-bg-tertiary)" stroke-width="${d}"></circle>`:``}${n.map((e,t)=>`<circle class="k-pie__slice" data-i="${t}" cx="50" cy="50" r="${u}" fill="none" stroke="${i(t)}" stroke-width="${d}" stroke-dasharray="${Math.max(0,h[t].len-p)} ${f}" stroke-dashoffset="${-h[t].start}" transform="rotate(-90 50 50)" style="--_d: ${t*80}ms"></circle>`).join(``)}</svg>${a?`<div class="k-pie__center" aria-hidden="true"><strong>${o(e(r))}</strong><span>${o(l)}</span></div>`:``}</div><ul class="k-pie__legend">${n.map((t,n)=>`<li data-i="${n}" style="--_c: ${i(n)}"><span class="k-chart__key k-chart__key--box" aria-hidden="true"></span><span class="k-pie__name">${o(t.label)}</span><strong>${v(t.value,r)}</strong><span class="k-pie__abs">${o(e(t.value))}</span></li>`).join(``)}</ul></div></figure>`;let g=this.querySelector(`.k-pie__plot`),_=this.querySelector(`.k-pie__center`),b=e=>{let t=(h[e].start+h[e].len/2)/f*2*Math.PI-Math.PI/2,n=a?u:u*1.3;return{x:(50+n*Math.cos(t))/100*s,y:(50+n*Math.sin(t))/100*s-8}},x=t=>{this.querySelectorAll(`[data-i]`).forEach(e=>e.toggleAttribute(`data-active`,Number(e.dataset.i)===t)),_&&(_.innerHTML=t===null?`<strong>${o(e(r))}</strong><span>${o(l)}</span>`:`<strong>${v(n[t].value,r)}</strong><span>${o(n[t].label)}</span>`),a||(t===null?this.tip(g,null):this.tip(g,b(t).x,b(t).y,void 0,[{name:n[t].label,value:v(n[t].value,r),color:i(t)},{name:c().chart.count,value:e(n[t].value)}]))};this.querySelectorAll(`.k-pie__slice, .k-pie__legend li`).forEach(e=>e.addEventListener(`pointerenter`,()=>x(Number(e.dataset.i)))),g.addEventListener(`pointerleave`,()=>x(null)),this.querySelector(`.k-pie__legend`).addEventListener(`pointerleave`,()=>x(null))}};T.observedAttributes=[`label`,`data`,`unit`,`variant`,`total-label`,`size`];var E=class extends x{get values(){return this.props.values??(this.getAttribute(`values`)??``).split(/[,،\s]+/).filter(Boolean).map(Number).filter(e=>!Number.isNaN(e))}set values(e){this.write(`values`,e)}draw(){let e=this.values;if(!e.length){this.innerHTML=``;return}let t=Math.max(...e),n=Math.min(...e),r=Math.max(t-n,Math.abs(t)*.25)||1,i=(t+n)/2-r/2,a=e.map((t,n)=>`${n?`L`:`M`}${n/Math.max(1,e.length-1)*100},${28-(t-i)/r*24}`).join(` `),s=this.getAttribute(`tone`)??`brand`,c=s===`neutral`?`var(--k-text-tertiary)`:s===`brand`?`var(--k-text-brand)`:`var(--k-text-${s})`,l=this.getAttribute(`label`);this.innerHTML=`<svg class="k-sparkline" viewBox="0 0 100 30" preserveAspectRatio="none"${l?` role="img" aria-label="${o(l)}"`:` aria-hidden="true"`} style="color: ${c}">${this.getAttribute(`area`)===`false`?``:`<path d="${a} L100,30 L0,30 Z" fill="currentColor" opacity="0.1"></path>`}<path d="${a}" fill="none" stroke="currentColor" stroke-width="2" vector-effect="non-scaling-stroke" stroke-linejoin="round" stroke-linecap="round"></path></svg>`}};E.observedAttributes=[`values`,`tone`,`area`,`label`];var D=class extends x{constructor(){super(...arguments),this.ro=null,this.active=null}get labels(){return this.read(`labels`,[])}set labels(e){this.write(`labels`,e)}get series(){return this.read(`series`,[])}set series(e){this.write(`series`,e)}connectedCallback(){if(super.connectedCallback(),typeof ResizeObserver<`u`&&!this.ro){let e=0;this.ro=new ResizeObserver(()=>{let t=this.clientWidth;t&&t!==e&&(e=t,this.paintSvg())}),this.ro.observe(this)}}disconnectedCallback(){this.ro?.disconnect(),this.ro=null}draw(){let e=this.series.slice(0,4),t=this.format,n=this.labels,r=this.getAttribute(`height`);this.innerHTML=`<figure class="k-chart" aria-labelledby="${this.key}-t" style="margin: 0${r?`; --k-chart-height: ${o(r)}`:``}"><figcaption class="k-chart__head"><p class="k-chart__title" id="${this.key}-t">${o(this.heading)}</p>${e.length>1?`<ul class="k-chart__legend" aria-hidden="true">${e.map((e,t)=>`<li style="--_c: ${y(t)}"><span class="k-chart__key"></span>${o(e.name)}</li>`).join(``)}</ul>`:``}</figcaption><div class="k-chart__plot" tabindex="0" role="img" aria-label="${o(c().chart.keyboard(this.heading))}" aria-describedby="${this.key}-live"><svg class="k-chart__svg" aria-hidden="true" direction="ltr"></svg></div><span class="k-sr-only" aria-live="polite" id="${this.key}-live"></span><table class="k-sr-only"><caption>${o(this.heading)}</caption><thead><tr><th scope="col">${o(c().chart.period)}</th>${e.map(e=>`<th scope="col">${o(e.name)}</th>`).join(``)}</tr></thead><tbody>${n.map((n,r)=>`<tr><th scope="row">${o(n)}</th>${e.map(e=>`<td>${o(t(e.values[r]))}</td>`).join(``)}</tr>`).join(``)}</tbody></table></figure>`;let i=this.querySelector(`.k-chart__plot`);i.addEventListener(`pointermove`,e=>this.pick(e.clientX)),i.addEventListener(`pointerleave`,()=>this.setActive(null)),i.addEventListener(`blur`,()=>this.setActive(null)),i.addEventListener(`keydown`,e=>{let t=getComputedStyle(i).direction===`rtl`,r=n.length,a={ArrowLeft:t?1:-1,ArrowRight:t?-1:1}[e.key];a?(e.preventDefault(),this.setActive(Math.min(r-1,Math.max(0,(this.active??(a>0?-1:r))+a)))):e.key===`Home`?this.setActive(0):e.key===`End`?this.setActive(r-1):e.key===`Escape`&&this.setActive(null)}),this.active=null,this.paintSvg()}geometry(){let e=this.querySelector(`.k-chart__plot`),t=this.series.slice(0,4),n=this.labels,r=e.clientWidth||600,i=e.clientHeight||220,a=getComputedStyle(e).direction===`rtl`,o={top:12,bottom:24,start:52,end:t.length>1?64:16},s=_(Math.max(0,...t.flatMap(e=>e.values))),c=s.at(-1)||1,l=Math.max(1,r-o.start-o.end),u=Math.max(1,i-o.top-o.bottom);return{plot:e,shown:t,labels:n,w:r,h:i,rtl:a,pad:o,ticks:s,innerW:l,innerH:u,x:e=>{let t=n.length>1?e/(n.length-1):.5;return a?r-o.start-t*l:o.start+t*l},y:e=>o.top+u-e/c*u}}paintSvg(){if(!this.querySelector(`.k-chart__plot`))return;let{plot:e,shown:t,labels:n,w:r,h:i,rtl:a,pad:s,ticks:l,innerW:u,innerH:d,x:f,y:p}=this.geometry(),m=e.querySelector(`svg`),h=a?r-s.start+8:s.start-8,_=a?`start`:`end`,v=n.length-1,b=t.map((e,t)=>({i:t,y:p(e.values[v])})).sort((e,t)=>e.y-t.y);for(let e=1;e<b.length;e++)b[e].y-b[e-1].y<14&&(b[e].y=b[e-1].y+14);let x=Object.fromEntries(b.map(e=>[e.i,e.y])),S=Math.max(1,Math.ceil(n.length/Math.max(2,Math.floor(u/64)))),C=`${this.key}-fade`,w=this.active;m.innerHTML=`<g class="k-chart__grid">${l.map(e=>`<line x1="${s.start}" x2="${r-s.end}" y1="${p(e)}" y2="${p(e)}"${a?` transform="translate(${s.end-s.start} 0)"`:``}></line>`).join(``)}</g>${l.map(e=>`<text class="k-chart__tick" x="${h}" y="${p(e)+4}" text-anchor="${_}">${o(g(e))}</text>`).join(``)}${n.map((e,t)=>t%S===0||t===v?`<text class="k-chart__tick" x="${f(t)}" y="${i-6}" text-anchor="middle">${o(e)}</text>`:``).join(``)}<defs><linearGradient id="${C}" x1="0" y1="0" x2="0" y2="1"><stop offset="0" style="stop-color: var(--k-chart-1); stop-opacity: 0.28"></stop><stop offset="1" style="stop-color: var(--k-chart-1); stop-opacity: 0"></stop></linearGradient></defs>${t.length===1&&this.getAttribute(`area`)!==`false`?`<path class="k-chart__area" fill="url(#${C})" d="M${f(0)},${p(0)} ${t[0].values.map((e,t)=>`L${f(t)},${p(e)}`).join(` `)} L${f(v)},${p(0)} Z"></path>`:``}${w===null?``:`<line class="k-chart__cross" x1="${f(w)}" x2="${f(w)}" y1="${s.top}" y2="${s.top+d}"></line>`}${t.map((e,n)=>`<g style="--_c: ${y(n)}"><path class="k-chart__line" pathLength="1" d="${e.values.map((e,t)=>`${t?`L`:`M`}${f(t)},${p(e)}`).join(` `)}"></path><circle class="k-chart__dot" cx="${f(e.values.length-1)}" cy="${p(e.values.at(-1)??0)}" r="4"></circle>${t.length>1?`<text class="k-chart__end" x="${f(v)+(a?-8:8)}" y="${x[n]+4}" text-anchor="${a?`end`:`start`}">${o(e.name)}</text>`:``}${w===null?``:`<circle class="k-chart__dot" cx="${f(w)}" cy="${p(e.values[w])}" r="4.5"></circle>`}</g>`).join(``)}`;let T=this.format;w===null?this.tip(e,null):this.tip(e,f(w),Math.min(...t.map(e=>p(e.values[w])))-6,n[w],t.map((e,t)=>({name:e.name,value:T(e.values[w]),color:y(t)}))),this.querySelector(`#${this.key}-live`).textContent=w===null?``:`${n[w]}: ${t.map(e=>`${e.name} ${T(e.values[w])}`).join(c().common.list)}`}pick(e){let{plot:t,labels:n,x:r}=this.geometry(),i=e-t.getBoundingClientRect().left,a=0;n.forEach((e,t)=>{Math.abs(r(t)-i)<Math.abs(r(a)-i)&&(a=t)}),a!==this.active&&this.setActive(a)}setActive(e){this.active=e,this.paintSvg()}};D.observedAttributes=[`label`,`labels`,`series`,`unit`,`area`,`height`];var O=class extends x{get data(){return this.read(`data`,{})}set data(e){this.write(`data`,e)}draw(){let e=this.data,s=Number(this.getAttribute(`year`))||t(/* @__PURE__ */ new Date).jy,l=c().heatmap,u=this.getAttribute(`unit`)??l.unit,h=[];for(let t=1;t<=12;t++)for(let r=1;r<=f(s,t);r++){let i=d(s,t,r);h.push({date:i,value:e[n(i)]??0})}let g=Math.max(0,...h.map(e=>e.value)),_=e=>e<=0||g===0?0:Math.max(1,Math.ceil(e/g*4)),v=(h[0].date.getDay()+1)%7,y=e=>Math.floor((e+v)/7),b=r().months.map((e,n)=>({name:e,col:y(h.findIndex(e=>t(e.date).jm===n+1))})),x=h.reduce((e,t)=>e+t.value,0),S=r().months.map((e,n)=>({name:e,sum:h.filter(e=>t(e.date).jm===n+1).reduce((e,t)=>e+t.value,0)})),C=m(s).replace(/[٬,]/g,``),w=this.getAttribute(`label`)??l.inYear(u,C);this.innerHTML=`<figure class="k-heatmap" style="margin: 0"><div class="k-heatmap__scroll"><div role="img" aria-label="${o(`${w}: ${m(x)} ${u}`)}"><div class="k-heatmap__months" aria-hidden="true">${b.map(e=>`<span style="grid-column: ${e.col+1}">${e.name}</span>`).join(``)}</div><div class="k-heatmap__body" aria-hidden="true"><div class="k-heatmap__days">${l.weekdays.map(e=>`<span>${e}</span>`).join(``)}</div><div class="k-heatmap__grid">${`<span class="k-heatmap__cell" data-empty=""></span>`.repeat(v)}${h.map((e,t)=>`<span class="k-heatmap__cell" data-l="${_(e.value)}" data-i="${t}"></span>`).join(``)}</div></div></div></div><figcaption class="k-heatmap__foot"><span>${o(l.total(m(x),u,C))}</span><span class="k-heatmap__scale" aria-hidden="true">${o(l.less)} ${[0,1,2,3,4].map(e=>`<span class="k-heatmap__cell" data-l="${e}"></span>`).join(``)} ${o(l.more)}</span></figcaption><table class="k-sr-only"><caption>${o(l.byMonth(w))}</caption><tbody>${S.map(e=>`<tr><th scope="row">${e.name}</th><td>${m(e.sum)}</td></tr>`).join(``)}</tbody></table></figure>`;let T=this.querySelector(`figure`);this.querySelector(`.k-heatmap__grid`).addEventListener(`pointerover`,e=>{let t=e.target.closest(`[data-i]`);if(T.querySelector(`.k-heatmap__cell[data-active]`)?.removeAttribute(`data-active`),!t)return this.tip(T,null);t.setAttribute(`data-active`,``);let n=this.at(t,T),r=h[Number(t.dataset.i)];this.tip(T,n.x,n.y-2,p(r.date,{style:`full`,digits:a(),locale:i()}),[{value:`${m(r.value)} ${u}`}])}),T.addEventListener(`pointerleave`,()=>this.tip(T,null))}};O.observedAttributes=[`data`,`year`,`unit`,`label`],s(`kashi-bar-chart`,S,`block`),s(`kashi-line-chart`,D,`block`),s(`kashi-pie-chart`,T,`block`),s(`kashi-bar-list`,C,`block`),s(`kashi-proportion-bar`,w,`block`),s(`kashi-sparkline`,E),s(`kashi-activity-heatmap`,O,`block`);export{O as KashiActivityHeatmap,S as KashiBarChart,C as KashiBarList,D as KashiLineChart,T as KashiPieChart,w as KashiProportionBar,E as KashiSparkline};
@@ -0,0 +1 @@
1
+ import{_ as e,c as t,g as n,l as r,m as i,o as a,p as o,r as s,t as c,u as l,v as u}from"./base-DTQ50VdG.js";import{n as d}from"./text-D4a_hlwL.js";const f=[{name:`آذربایجان شرقی`,capital:`تبریز`,areaCode:`41`},{name:`آذربایجان غربی`,capital:`ارومیه`,areaCode:`44`},{name:`اردبیل`,capital:`اردبیل`,areaCode:`45`},{name:`اصفهان`,capital:`اصفهان`,areaCode:`31`},{name:`البرز`,capital:`کرج`,areaCode:`26`},{name:`ایلام`,capital:`ایلام`,areaCode:`84`},{name:`بوشهر`,capital:`بوشهر`,areaCode:`77`},{name:`تهران`,capital:`تهران`,areaCode:`21`},{name:`چهارمحال و بختیاری`,capital:`شهرکرد`,areaCode:`38`},{name:`خراسان جنوبی`,capital:`بیرجند`,areaCode:`56`},{name:`خراسان رضوی`,capital:`مشهد`,areaCode:`51`},{name:`خراسان شمالی`,capital:`بجنورد`,areaCode:`58`},{name:`خوزستان`,capital:`اهواز`,areaCode:`61`},{name:`زنجان`,capital:`زنجان`,areaCode:`24`},{name:`سمنان`,capital:`سمنان`,areaCode:`23`},{name:`سیستان و بلوچستان`,capital:`زاهدان`,areaCode:`54`},{name:`فارس`,capital:`شیراز`,areaCode:`71`},{name:`قزوین`,capital:`قزوین`,areaCode:`28`},{name:`قم`,capital:`قم`,areaCode:`25`},{name:`کردستان`,capital:`سنندج`,areaCode:`87`},{name:`کرمان`,capital:`کرمان`,areaCode:`34`},{name:`کرمانشاه`,capital:`کرمانشاه`,areaCode:`83`},{name:`کهگیلویه و بویراحمد`,capital:`یاسوج`,areaCode:`74`},{name:`گلستان`,capital:`گرگان`,areaCode:`17`},{name:`گیلان`,capital:`رشت`,areaCode:`13`},{name:`لرستان`,capital:`خرم‌آباد`,areaCode:`66`},{name:`مازندران`,capital:`ساری`,areaCode:`11`},{name:`مرکزی`,capital:`اراک`,areaCode:`86`},{name:`هرمزگان`,capital:`بندرعباس`,areaCode:`76`},{name:`همدان`,capital:`همدان`,areaCode:`81`},{name:`یزد`,capital:`یزد`,areaCode:`35`}],p={"آذربایجان شرقی":/* @__PURE__ */ `آبشاحمد.آچاچی.آذرشهر.آقکند.اسکو.اهر.ایلخچی.باسمنج.بخشایش.بستان‌آباد.بناب.بناب مرند.تبریز.ترک.ترکمانچای.تسوج.تیکمهداش.تیمورلو.جلفا.جوانقلعه.خاروانا.خامنه.خداجو.خسروشاه.خمارلو.خواجه.دریان.دوزدوزان.زرنق.زنوز.سراب.سردرود.سهند.سیس.سیهرود.شبستر.شربیان.شرفخانه.شندآباد.شهریار.صوفیان.عجبشیر.قرهآغاج.کشکسرای.کلوانق.کلیبر.کوزهکنان.گوگان.لیلان.مبارک آباد.مراغه.مرند.ملکان.ملککیان.ممقان.مهربان.میانه.نظرکهریزی.وایقان.ورزقان.هادی‌شهر.هریس.هشترود.هوراند.یامچی`.split(`.`),"آذربایجان غربی":/* @__PURE__ */ `آواجیق.ارومیه.اشنویه.ایواوغلی.باروق.بازرگان.بوکان.پلدشت.پیرانشهر.تازه‌شهر.تکاب.چهاربرج.خلیفان.خوی.دیزج دیز.ربط.زرآباد.سردشت.سرو.سلماس.سیلوانه.سیمینه.سیهچشمه.شاهیندژ.شوط.فیرورق.قرهضیاءالدین.قطور.قوشچی.کشاورز.گردکشانه.ماکو.محمدیار.محمودآباد.مرگنلر.مهاباد.میاندوآب.میرآباد.نازک علیا.نالوس.نقده.نوشینشهر`.split(`.`),اردبیل:[`آبیبیگلو`,`اردبیل`,`اسلام‌آباد قدیم`,`اصلاندوز`,`انگوت`,`بیلهسوار`,`پارس‌آباد`,`جعفرآباد`,`خلخال`,`رضی`,`سرعین`,`عنبران`,`قصابه`,`کلور`,`کوراییم`,`گرمی`,`گیوی`,`لاهرود`,`مرادلو`,`مشگینشهر`,`نمین`,`نیر`,`هشجین`,`هیر`],اصفهان:/* @__PURE__ */ `آران و بیدگل.ابریشم.ابوزیدآباد.اردستان.اژیه.اشترجان.اصغرآباد.اصفهان.افوس.انارک.بادرود.باغ بهادران.باغشاد.بافران.برزک.برفانبار.بوئین و میاندشت.بهارانشهر.بهارستان.پیربکران.تودشک.تیران.جندق.جوزدان.جوشقان قالی.جوشقان و کامو.چادگان.چرمهین.چمگردان.حبیب آباد برخوار.حسن‌آباد.حنا.خالدآباد.خمینی‌شهر.خوانسار.خور.خوراسگان.خورزوق.داران.دامنه.درچهپیاز.دستگرد.دولت‌آباد.دهاقان.دهق.دیزیچه.رزوه.رضوانشهر.زازران.زایندهرود.زرینشهر.زواره.زیار.زیباشهر.سده لنجان.سفیدشهر.سگزی.سمیرم.سین.شاپورآباد.شاهینشهر.شهر جدید مجلسی.شهرضا.طالخونچه.طرق.عسگران.علویجه.فرخی.فریدونشهر.فلاورجان.فولادشهر.قمصر.قهجاورستان.قهدریجان.کاشان.کرکوند.کلیشاد و سودرجان.کمشجه.کمه.کوشک.کوهپایه.کهریزسنگ.گرگاب.گز.گلپایگان.گلدشت.گلشن.گلشهر.گوگد.لای بید.مبارکه.محمدآباد.مشکات.منظریه.مهاباد.میمه.نائین.نجف‌آباد.نصرآباد.نطنز.نوش‌آباد.نیاسر.نیک‌آباد.ورزنه.ورنامخواست.وزوان.ونک.هرند.یزدانشهر نجف آباد`.split(`.`),البرز:[`آسارا`,`اشتهارد`,`تنکمان`,`چهارباغ`,`طالقان`,`فردیس`,`کرج`,`کمالشهر`,`کوهسار`,`گرمدره`,`گلسار`,`ماهدشت`,`محمدشهر`,`مشکیندشت`,`مهستان`,`نظرآباد`],ایلام:/* @__PURE__ */ `آبدانان.آسمان‌آباد.ارکواز.ایلام.ایوان.بدره.بلاوه تره سفلی.پهله.توحید.جعفرآباد.چشمه شیرین.چوار.دره‌شهر.دلگشا.دهلران.زرنه.سرابباغ.سرابله.شباب.صالح‌آباد.لومار.ماژین.مورموری.موسیان.مهر.مهران.میمه`.split(`.`),بوشهر:/* @__PURE__ */ `آباد.آبپخش.آبدان.امام حسن.انارستان.اهرم.بادوله.برازجان.بردخون.بردستان.بندر دیر.بندر دیلم.بندر ریگ.بندر سیراف.بندر کنگان.بندر گناوه.بندو.بنک.بوشکان.بوشهر.تنگ ارم.جم.چغادک.خارگ.خورموج.دالکی.دلوار.دوراهک.ریز.سعدآباد.شبانکاره.شنبه.عالی‌شهر.عسلویه.کاکی.کلمه.نخل تقی.وحدتیه`.split(`.`),تهران:/* @__PURE__ */ `آبسرد.آبعلی.احمدآباد مستوفی.ارجمند.اسلامشهر.اندیشه.باغستان.باقرشهر.بومهن.پاکدشت.پردیس.پرند.پیشوا.تهران.جلیل‌آباد.جوادآباد.چهاردانگه.حسن‌آباد.خاورشهر.دماوند.رباطکریم.رودهن.شاهدشهر.شریف‌آباد.شمشک.شهر ری.شهریار.صالحیه.صباشهر.صفادشت.فردوسیه.فرون‌آباد.فشم.فیروزکوه.قدس.قرچک.کرشته.کهریزک.کیلان.گلستان.لواسان.ملارد.نسیم‌شهر.نصیرشهر.وحیدیه.ورامین`.split(`.`),"چهارمحال و بختیاری":/* @__PURE__ */ `آلونی.اردل.باباحیدر.بروجن.بلداجی.بن.پردنجان.تلورد.جونقان.چالشتر.چلگرد.چلیچه.دستنا.دشتک.سامان.سرخون.سردشت.سفیددشت.سودجان.سورشجان.شلمزار.شهرکرد.صمصامی.طاقانک.فارسان.فرادنبه.فرخشهر.کاج.کیان.گندمان.گوجان.گهرو.لردگان.مالخلیفه.منج نسا.ناغان.نافچ.وردنجان.هارونی.هرچگان.هفشجان.یانچشمه`.split(`.`),"خراسان جنوبی":/* @__PURE__ */ `آرینشهر.آیسک.ارسک.اسدیه.اسفدن.اسلامیه.باغستان علیا.بشرویه.بیرجند.حاجی‌آباد.خضری دشتبیاض.خوسف.درح.دیهوک.زهان.سرایان.سربیشه.سهقلعه.شوسف.طبس.طبس مسینا.عشق‌آباد.فردوس.قائن.قهستان.گزیک.محمدشهر.مود.نهبندان.نیمبلوک`.split(`.`),"خراسان رضوی":/* @__PURE__ */ `احمدآباد.انابد.باجگیران.باخرز.بار.بایگ.بجستان.بردسکن.بیدخت.بینالود.تایباد.تربت جام.تربت حیدریه.جغتای.جنگل.چاپشلو.چکنه.چناران.خرو.خلیل‌آباد.خواف.داورزن.دررود.درگز.دولت‌آباد.رادکان.رباط سنگ.رشتخوار.رضویه.رودآب.ریوش.سبزوار.سرخس.سفیدسنگ.سلامی.سلطان‌آباد.سنگان.سیدآباد.شادمهر.شاندیز.ششتمد.شهرآباد.شهرزو.شهرکهنه.صالح‌آباد.طرقبه.عشق‌آباد.فرگ قلعه.فرهادگرد.فریمان.فیروزه.فیض‌آباد.قاسم‌آباد.قدمگاه.قلندرآباد.قوچان.کاخک.کاریز.کاشمر.کدکن.کلات.کندر.گلبهار.گلمکان.گناباد.لطف‌آباد.مزداوند.مشهد.مشهد ریزه.ملک‌آباد.نسر.نشتیفان.نصرآباد.نقاب.نوخندان.نیشابور.نیلشهر.همت‌آباد.یونسی`.split(`.`),"خراسان شمالی":[`آشخانه`,`آوا`,`اسفراین`,`ایور`,`بجنورد`,`پیشقلعه`,`تیتکانلو`,`جاجرم`,`چنارانشهر`,`حصار گرمخان`,`درق`,`راز`,`زیارت`,`سنخواست`,`شوقان`,`شیروان`,`صفی‌آباد`,`فاروج`,`فیروزه`,`قاضی`,`گرمه`,`لوجلی`],خوزستان:/* @__PURE__ */ `آبادان.آبژدان.آغاجاری.ابوحمیظه.اروندکنار.الوان.الهایی.امیدیه.اندیمشک.اهواز.ایذه.باغملک.بستان.بندر امام خمینی.بندر ماهشهر.بهبهان.بیدروبهمرکزی.ترکالکی.تشان.جایزان.جنتمکان.چغامیش.چم گلک.چمران.چویبده.حر ریاحی.حسینیه.حمیدیه.خرمشهر.دارخوین.دزآب.دزفول.دهدز.رامشیر.رامهرمز.رفیع.زهره.سالند.سردشت.سماله.سوسنگرد.سیاهمنصور.شادگان.شمس‌آباد.شوش.شوشتر.شهرک حمزه.شیبان.صالح شهر.صفی‌آباد.صیدون.فتح‌المبین.قلعه خواجه.قلعهتل.کوت سیدنعیم طالقانی.کوت عبدالله.گتوند.گوریه.لالی.مسجدسلیمان.مشراگه.مقاومت.ملاثانی.منصوریه.میانرود.میانکوه.میداود.مینوشهر.ویس.هفتکل.هندیجان.هویزه`.split(`.`),زنجان:[`آببر`,`ابهر`,`ارمغانخانه`,`چورزق`,`حلب`,`خرمدره`,`دندی`,`زرین‌آباد`,`زرینرود`,`زنجان`,`سجاس`,`سلطانیه`,`سهرورد`,`صایینقلعه`,`قیدار`,`کرسف`,`گرماب`,`ماهنشان`,`نیکپی`,`هیدج`],سمنان:[`آرادان`,`امیریه`,`ایوانکی`,`بسطام`,`بیارجمند`,`دامغان`,`درجزین`,`دیباج`,`رودیان`,`سرخه`,`سمنان`,`شاهرود`,`شهمیرزاد`,`کلاته خیج`,`کلاته رودبار`,`کهن‌آباد`,`گرمسار`,`مجن`,`مهدی‌شهر`,`میامی`],"سیستان و بلوچستان":/* @__PURE__ */ `آسپیچ محمدی.ادیمی.اسپکه.ایرانشهر.بریس.بزمان.بمپور.بنت.بنجار.پیشین.جالق.چابهار.خاش.دوستمحمد.راسک.رامشار.زابل.زاهدان.زرآباد.زهک.سراوان.سرباز.سوران.سیب.سیرکان.شهرک علیاکبر.فنوج.قصرقند.کنارک.گشت.گلمورتی.محمدآباد.مهرستان.میرجاوه.نصرت‌آباد.نگور.نوک‌آباد.نیکشهر.هیدوچ`.split(`.`),فارس:/* @__PURE__ */ `آباده.آباده طشک.ارد.اردکان.ارسنجان.استهبان.اسیر.اشکنان.افزر.اقلید.اوز.اهل.ایج.ایزدخواست.باب انار.بابامنیر.بایگان.بنارویه.بوانات.بهمن.بیرم.بیضا.جنتشهر.جویم.جهرم.حاجی‌آباد.حسامی.حسن‌آباد.خانه زنیان.خانیمن.خاوران.خرامه.خشت.خنج.خور.خوزی.خومهزار.داراب.داریان.دبیران.دژکرد.دوبرجی.دوزه.دهرم.رامجرد.رونیز.زاهدشهر.زرقان.سده.سروستان.سعادتشهر.سلطانشهر.سورمق.سیدان.ششده.شهر جدید صدرا.شهرپیر.شهرک امام.شیراز.صغاد.صفاشهر.علامرودشت.عمادشهر.فاروق.فتح آباد.فدامی.فراشبند.فسا.فیروزآباد.فیشور.قائمیه.قادرآباد.قرهبلاغ.قطب‌آباد.قطرویه.قیر.کازرون.کامفیروز.کرهای.کنارتخته.کوار.کوپن.کوهنجان.گراش.گلهدار.گویم.لار.لامرد.لپوئی.لطیفی.مادرسلیمان.مرودشت.مزایجان.مشکان.مصیری.مهر.میانشهر.میمند.نوبندگان.نوجین.نودان.نورآباد.نیریز.والاشهر.وراوی.هماشهر`.split(`.`),قزوین:[`آبگرم`,`آبیک`,`آوج`,`ارداق`,`اسفرورین`,`اقبالیه`,`الوند`,`بوئینزهرا`,`بیدستان`,`تاکستان`,`خاکعلی`,`خرمدشت`,`دانسفهان`,`رازمیان`,`سگزآباد`,`سیردان`,`شال`,`ضیاءآباد`,`قزوین`,`کوهین`,`محمدیه`,`محمودآباد نمونه`,`معلمکلایه`,`نرجه`],قم:[`جعفریه`,`دستجرد`,`سلفچگان`,`قاهان`,`قم`,`قنوات`,`کهک`],کردستان:/* @__PURE__ */ `آرمرده.اورامان.بابارشانی.بانه.برده رشه.بلبان‌آباد.بویین سفلی.بیجار.پیرتاج.توپآغاج.چناره.حسن‌آباد یاسوکند.دزج.دلبران.دهگلان.دیواندره.زرینه.سروآباد.سریش‌آباد.سقز.سنندج.شویشه.صاحب.قروه.کامیاران.کانیدینار.کانیسور.مریوان.موچش`.split(`.`),کرمان:/* @__PURE__ */ `اختیارآباد.ارزوئیه.امینشهر.انار.اندوهجرد.باغین.بافت.بردسیر.بروات.بزنجان.بلورد.بلوک.بم.بهرمان.پاریز.جبالبارز.جوپار.جوزم.جیرفت.چترود.خاتون‌آباد.خانوک.خرسند.خواجو شهر.درب بهشت.دشتکار.دوساری.دهج.دهستان بزنجان.رابر.راور.راین.رفسنجان.ریحانشهر.زرند.زنگی‌آباد.زهکلوت.زیدآباد.سیرجان.سیریز.شهداد.شهربابک.صفائیه.عنبرآباد.فاریاب.فهرج.قلعهگنج.کاظم‌آباد.کرمان.کشکوئیه.کوهبنان.کهنوج.کیانشهر.گلباف.گلزار.لاله زار.ماهان.محمدآباد.محمدآباد گنبکی.محی‌آباد.مردهک.مس سرچشمه.منوجان.نجفشهر.نرماشیر.نظامشهر.نگار.نودژ.هجدک.هماشهر.هنزا.یزدانشهر`.split(`.`),کرمانشاه:/* @__PURE__ */ `ازگله.اسلام‌آباد غرب.بانهوره.باینگان.بیستون.پاوه.تازه‌آباد.جوانرود.حمیل.روانسر.ریژاو.سرپل ذهاب.سرمست.سطر.سنقر.سومار.شروینه.صحنه.قصر شیرین.قلعه.کرمانشاه.کرند غرب.کنگاور.کوزران.گودین.گهواره.گیلانغرب.ماهیدشت.میانراهان.نودشه.نوسود.هرسین.هلشی`.split(`.`),"کهگیلویه و بویراحمد":[`باشت`,`پاتاوه`,`چرام`,`چیتاب`,`دوگنبدان`,`دهدشت`,`دیشموک`,`سوق`,`سیسخت`,`قلعه رئیسی`,`گراب سفلی`,`لنده`,`لیکک`,`مادوان علیا`,`مارگون`,`محله چینیها`,`یاسوج`],گلستان:/* @__PURE__ */ `آزادشهر.آققلا.انبارآلوم.اینچهبرون.بندر ترکمن.بندر گز.تاتار علیا.خانببین.دلند.رامیان.سرخنکلاته.سنگدوین.سیمینشهر.علی‌آباد کتول.فاضل‌آباد.فراغی.قرق.کردکوی.کلاله.گالیکش.گرگان.گمیشان.گنبد کاووس.مراوهتپه.مزرعه.مینودشت.نگینشهر.نوده خاندوز.نوکنده`.split(`.`),گیلان:/* @__PURE__ */ `آستارا.آستانه اشرفیه.احمدسرگوراب.اسالم.اطاقور.املش.بازارجمعه.برهسر.بندر انزلی.بندر کیاشهر.پرهسر.توتکابن.جیرنده.چابکسر.چاف و چمخاله.چوبر.حویق.خشکبیجار.خمام.دیلمان.رانکوه.رحیم‌آباد.رستم‌آباد.رشت.رضوانشهر.رودبار.رودبنه.رودسر.سنگر.سیاهکل.شفت.شلمان.صومعهسرا.فومن.کلاچای.کوچصفهان.کومله.گوراب زرمیخ.لاهیجان.لشت نشا.لنگرود.لوشان.لولمان.لوندویل.لیسار.ماسال.ماسوله.ماکلوان.مرجغل.منجیل.واجارگاه.هشتپر`.split(`.`),لرستان:[`ازنا`,`اشترینان`,`الشتر`,`الیگودرز`,`بروجرد`,`بیرانشهر`,`پل دختر`,`چالانچولان`,`چقابل`,`خرم‌آباد`,`درب گنبد`,`دورود`,`زاغه`,`سپیددشت`,`سرابدوره`,`شول‌آباد`,`فیروزآباد`,`کونانی`,`کوهدشت`,`گراب لکستان`,`معمولان`,`مومن‌آباد`,`نورآباد`,`ویسیان`,`هفتچشمه`],مازندران:/* @__PURE__ */ `آلاشت.آمل.ارطه.اکند.امامزاده عبدالله.امیرکلا.ایزدشهر.بابل.بابلسر.بلده.بهشهر.بهنمیر.پایین هولار.پل سفید.پول.تنکابن.جویبار.چالوس.چمستان.خرم‌آباد.خلیلشهر.خوشرودپی.دابودشت.رامسر.رستمکلا.رویان.رینه.زرگرمحله.زیرآب.ساری.سرخرود.سلمانشهر.سورک.شیرگاه.شیرود.طبقده.عباس‌آباد.فرح‌آباد.فریدونکنار.فریم.قائمشهر.کتالم و ساداتشهر.کجور.کلارآباد.کلاردشت.کلهبست.کوهیخیل.کیاسر.کیاکلا.گتاب.گزنک.گلوگاه.محمودآباد.مرزن‌آباد.مرزیکلا.نشتارود.نکا.نمکآبرود.نور.نوشهر.هچیرود`.split(`.`),مرکزی:/* @__PURE__ */ `آستانه.آشتیان.آوه.اراک.پرندک.تفرش.توره.جاورسیان.خشکرود.خمین.خنجین.خنداب.داوودآباد.دلیجان.رازقان.زاویه.ساروق.ساوه.سنجان.شازند.شهباز.شهر جدید امیرکبیر.غرق‌آباد.فرمهین.قورچیباشی.کارچان.کرهرود.کمیجان.مأمونیه.محلات.مهاجران.میلاجرد.نراق.نوبران.نیمور.هندودر`.split(`.`),هرمزگان:/* @__PURE__ */ `ابوموسی.بستک.بندر چارک.بندر خمیر.بندر کنگ.بندر لافت.بندر لنگه.بندرعباس.بیکا.پارسیان.تازیان پایین.تخت.تنب بزرگ.تیرور.جاسک.جناح.حاجی‌آباد.درگهان.دشتی.دهبارز.رویدر.زیارتعلی.سردشت.سرگز احمدی.سندرک.سوزا.سیریک.طبل.فارغان.فین.قشم.قلعه قاضی.کوخردهرنگ.کوهستک.کوهیج.کیش.گروک.گوهران.لمزان.میناب.هرمز.هشتبندی`.split(`.`),همدان:/* @__PURE__ */ `آجین.ازندریان.اسدآباد.برزول.بهار.تویسرکان.جورقان.جوکار.داقداق‌آباد.دمق.دهستان سلگی.رزن.زنگنه.سامن.سرکان.شیرینسو.صالح‌آباد.فامنین.فرسفج.فیروزان.قروه درجزین.قهاوند.کبودرآهنگ.گلتپه.گیان.لالجین.مریانج.ملایر.مهاجران.نهاوند.همدان`.split(`.`),یزد:[`ابرکوه`,`احمدآباد`,`اردکان`,`اشکذر`,`بافق`,`بخ`,`بفروییه`,`بهاباد`,`تفت`,`حمیدیا`,`خضرآباد`,`رضوانشهر`,`زارچ`,`شاهدیه`,`عقدا`,`مروست`,`مهردشت`,`مهریز`,`میبد`,`ندوشن`,`نیر`,`هرات`,`یزد`]};function m(e){return e&&p[e]||[]}const h={province:null,city:null,street:``,plaque:``,unit:``,postalCode:``},g=e=>d(e,{digits:`latin`}).toLowerCase();var _=class extends c{constructor(){super(...arguments),this.selected=null,this.query=``,this.list=null,this.filtered=[],this.typing=!1,this.isOpen=!1,this.active=-1,this.rendered=!1,this.valueSet=!1,this.key=u(`kashi-combo`),this.onOutside=e=>{this.contains(e.target)||this.close()}}get defaultLabel(){return null}get defaultPlaceholder(){return``}connectedCallback(){s(()=>{if(this.isConnected){if(!this.rendered){if(this.list===null&&(this.list=this.readOptions()),Object.prototype.hasOwnProperty.call(this,`value`)){let e=this.value;delete this.value,this.value=e??``}else if(!this.valueSet){let e=this.getAttribute(`value`);this.selected=e?this.find(e):null,this.query=this.selected?.label??``}}this.render()}})}disconnectedCallback(){document.removeEventListener(`pointerdown`,this.onOutside)}attributeChangedCallback(e,t,n){this.rendered&&t!==n&&(e===`value`?this.value=n??``:this.render())}get options(){return this.list??[]}set options(e){this.list=[...e],this.selected&&=this.find(this.selected.value),this.rendered&&this.sync()}get value(){return this.selected?.value??``}set value(e){this.valueSet=!0,this.selected=e?this.find(e):null,this.query=this.selected?.label??``,this.typing=!1,this.rendered&&this.sync()}get selectedOption(){return this.selected}focus(e){this.input?.focus(e)}readOptions(){let e=[];for(let t of[...this.querySelectorAll(`:scope > option, :scope > optgroup > option`)]){let n=t.parentElement?.tagName===`OPTGROUP`?t.parentElement.getAttribute(`label`)??void 0:void 0;e.push({value:t.value,label:t.textContent?.trim()??t.value,description:t.dataset.description,keywords:t.dataset.keywords?.split(/[,،]\s*/),disabled:t.disabled,group:n})}for(let e of[...this.querySelectorAll(`:scope > option, :scope > optgroup`)])e.remove();return e}source(e){return this.options}accepts(e,t){let n=g(t.trim());return!n||[e.label,e.description??``,...e.keywords??[]].some(e=>g(e).includes(n))}find(e){return this.source(``).find(t=>t.value===e)??null}detail(){return{value:this.value,option:this.selected}}render(){let e=this.key,n=this.getAttribute(`aria-label`),i=this.hasAttribute(`label`)?this.getAttribute(`label`):n?null:this.defaultLabel,a=this.hasAttribute(`required`),s=this.hasAttribute(`disabled`),c=`${e}-list`,u=`<div class="k-combobox"><div class="k-input"${s?` data-state="disabled"`:``}><input id="${e}" class="k-input__control" type="text" role="combobox" aria-autocomplete="list" aria-expanded="false" aria-controls="${c}" autocomplete="off" placeholder="${r(this.getAttribute(`placeholder`)??this.defaultPlaceholder)}"${a?` required`:``}${s?` disabled`:``}${!i&&n?` aria-label="${r(n)}"`:``}><button type="button" tabindex="-1" class="k-input__action k-combobox__toggle" aria-label="${r(o().combobox.toggle)}"${s?` disabled`:``}><svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 8 4 4 4-4"/></svg></button></div><ul id="${c}" role="listbox" class="k-listbox" hidden style="inset-block-start: calc(100% + 6px)"${i?` aria-label="${r(i)}"`:` aria-labelledby="${e}"`}></ul><span class="k-sr-only" aria-live="polite"></span></div>`;this.querySelector(`:scope > .k-field`)?.remove(),this.insertAdjacentHTML(`afterbegin`,l({id:e,label:i,required:a,control:u})),this.input=this.querySelector(`input.k-input__control`),this.listbox=this.querySelector(`.k-listbox`),this.live=this.querySelector(`.k-combobox > .k-sr-only`),this.isOpen=!1,this.input.addEventListener(`input`,()=>{this.query=this.input.value,this.typing=!0,this.active=-1,this.open(!1),t(this,`kashi-input`,{query:this.query})}),this.input.addEventListener(`keydown`,e=>this.onKey(e)),this.input.addEventListener(`click`,()=>!this.isOpen&&this.open()),this.input.addEventListener(`blur`,e=>{this.contains(e.relatedTarget)||this.close()}),this.querySelector(`.k-combobox__toggle`).addEventListener(`click`,()=>{this.isOpen?this.close():(this.typing=!1,this.open(),this.input.focus())}),this.listbox.addEventListener(`pointerdown`,e=>e.preventDefault()),this.listbox.addEventListener(`click`,e=>{let t=e.target.closest(`[role="option"]`);t&&t.getAttribute(`aria-disabled`)!==`true`&&this.commit(this.filtered[Number(t.dataset.i)])}),this.listbox.addEventListener(`pointermove`,e=>{let t=e.target.closest(`[role="option"]`);t&&t.getAttribute(`aria-disabled`)!==`true`&&Number(t.dataset.i)!==this.active&&this.setActive(Number(t.dataset.i))}),this.rendered=!0,this.sync()}sync(){!this.typing&&this.input.value!==this.query&&(this.input.value=this.query),n(this.querySelector(`:scope > .k-field`),this.input,this.key,this.getAttribute(`error`),this.getAttribute(`hint`)),this.syncHidden(),this.isOpen&&this.renderList()}syncHidden(){e(this,this.getAttribute(`name`),this.value)}enabled(){return this.filtered.map((e,t)=>e.disabled?-1:t).filter(e=>e>=0)}open(e=!0,t=`selected`){if(!this.hasAttribute(`disabled`)){if(this.isOpen=!0,this.input.setAttribute(`aria-expanded`,`true`),this.listbox.hidden=!1,this.toggleAttribute(`data-open`,!0),this.querySelector(`.k-combobox`).setAttribute(`data-open`,``),this.filter(),e){let e=this.enabled(),n=this.filtered.findIndex(e=>e.value===this.selected?.value);this.active=t===`last`?e.at(-1)??-1:t===`first`||n<0?e[0]??-1:n}this.renderList(),document.addEventListener(`pointerdown`,this.onOutside)}}close(){this.rendered&&(this.isOpen=!1,this.input.setAttribute(`aria-expanded`,`false`),this.input.removeAttribute(`aria-activedescendant`),this.listbox.hidden=!0,this.querySelector(`.k-combobox`).removeAttribute(`data-open`),this.live.textContent=``,document.removeEventListener(`pointerdown`,this.onOutside),this.typing&&(this.typing=!1,this.query=this.selected?.label??``,this.input.value=this.query))}filter(){let e=this.source(this.typing?this.query:``);this.filtered=this.typing?e.filter(e=>this.accepts(e,this.query)):e}renderList(){let e=this.typing?g(this.query.trim()):``,t=t=>{let n=e?g(t).indexOf(e):-1;return n<0?r(t):`${r(t.slice(0,n))}<mark>${r(t.slice(n,n+e.length))}</mark>${r(t.slice(n+e.length))}`},n=`${this.key}-list`,a,s=this.filtered.slice(0,300).map((e,i)=>{let o=e.group&&e.group!==a?`<li role="presentation" class="k-listbox__group">${r(e.group)}</li>`:``;a=e.group;let s=e.value===this.selected?.value;return`${o}<li id="${n}-${i}" data-i="${i}" role="option" aria-selected="${s}"${e.disabled?` aria-disabled="true"`:``}${i===this.active?` data-active`:``} class="k-option"><span class="k-option__body"><span>${t(e.label)}</span>${e.description?`<span class="k-option__desc">${r(e.description)}</span>`:``}</span>${s?`<span class="k-option__check"><svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m5 10.5 3.2 3L15 7"/></svg></span>`:``}</li>`});this.filtered.length||s.push(`<li class="k-listbox__empty" role="presentation">${r(this.getAttribute(`empty-message`)??o().common.noResults)}</li>`),this.filtered.length>300&&s.push(`<li class="k-listbox__empty" role="presentation">${r(o().combobox.more(i(this,this.filtered.length-300)))}</li>`),this.listbox.innerHTML=s.join(``),this.live.textContent=this.typing?o().common.results(i(this,this.filtered.length)):``,this.setActive(this.active)}setActive(e){this.active=e,this.listbox.querySelector(`[data-active]`)?.removeAttribute(`data-active`);let t=e>=0?this.listbox.querySelector(`[data-i="${e}"]`):null;t?(t.setAttribute(`data-active`,``),t.scrollIntoView?.({block:`nearest`}),this.input.setAttribute(`aria-activedescendant`,t.id)):this.input.removeAttribute(`aria-activedescendant`)}move(e){let t=this.enabled().filter(e=>e<300);if(!t.length)return;let n=t.indexOf(this.active);this.setActive(t[(n+e+t.length)%t.length])}onKey(e){if(e.key===`ArrowDown`)e.preventDefault(),this.isOpen?this.move(1):this.open(!0,e.altKey?`selected`:`first`);else if(e.key===`ArrowUp`)e.preventDefault(),this.isOpen?this.move(-1):this.open(!0,`last`);else if(e.key===`Enter`&&this.isOpen&&this.active>=0)e.preventDefault(),this.commit(this.filtered[this.active]);else if(e.key===`Escape`)this.isOpen?(e.preventDefault(),this.close()):this.input.value&&(e.preventDefault(),this.commit(null));else if((e.key===`Home`||e.key===`End`)&&this.isOpen){e.preventDefault();let t=this.enabled();this.setActive((e.key===`Home`?t[0]:t.at(-1))??-1)}}commit(e){let n=(e?.value??null)!==(this.selected?.value??null);this.selected=e,this.query=e?.label??``,this.typing=!1,this.input.value=this.query,this.close(),this.sync(),n&&t(this,`kashi-change`,this.detail())}};_.observedAttributes=[`label`,`hint`,`error`,`placeholder`,`required`,`disabled`,`name`,`value`,`empty-message`,`aria-label`];var v=class extends _{get defaultLabel(){return o().province.label}get defaultPlaceholder(){return o().province.search}source(){let e=this.getAttribute(`show-capital`)!==`false`;return f.map(t=>({value:t.name,label:t.name,description:e?o().province.capital(t.capital):void 0,keywords:[t.capital]}))}detail(){return{value:this.value,province:f.find(e=>e.name===this.value)??null}}};v.observedAttributes=[..._.observedAttributes,`show-capital`];const y=e=>g(e).replace(/[\s‌]/g,``);var b=class extends _{constructor(){super(...arguments),this.custom=null}get defaultLabel(){return o().city.label}get defaultPlaceholder(){return this.placeholderText()}get province(){return this.getAttribute(`province`)||null}set province(e){e?this.setAttribute(`province`,e):this.removeAttribute(`province`)}get value(){return this.selected?this.selected.value.split(`|`)[1]:``}set value(e){this.valueSet=!0,this.custom=null;let t=this.source(``),n=this.province,r=e?t.find(t=>t.label===e&&(!n||t.value.startsWith(`${n}|`)))??null:null;e&&!r&&(this.custom=e,r={value:`custom|${e}`,label:e,description:o().city.outside}),this.selected=r,this.query=r?.label??``,this.isConnected&&this.querySelector(`.k-combobox`)&&this.sync()}find(e){return this.value=e,this.selected}attributeChangedCallback(e,t,n){if(e!==`province`)return super.attributeChangedCallback(e,t,n);if(t!==n){if(this.selected){let e=this.value;!n||!m(n).includes(e)?(this.selected=null,this.query=``,this.custom=null):this.selected={value:`${n}|${e}`,label:e}}this.querySelector(`.k-combobox`)&&(this.input.placeholder=this.getAttribute(`placeholder`)??this.placeholderText(),this.input.value=this.query,this.sync())}}connectedCallback(){super.connectedCallback()}placeholderText(){return this.province?o().city.search:o().city.hint}source(e){let t=this.province,n=t?m(t).map(e=>({value:`${t}|${e}`,label:e})):Object.entries(p).flatMap(([e,t])=>t.map(t=>({value:`${e}|${t}`,label:t,description:e})));this.custom&&n.unshift({value:`custom|${this.custom}`,label:this.custom,description:o().city.outside});let r=e.trim();return this.getAttribute(`allow-custom`)!==`false`&&r&&r!==this.custom&&!n.some(e=>y(e.label)===y(r))&&n.push({value:`custom|${r}`,label:r,description:o().city.custom}),n}accepts(e,t){return e.value.startsWith(`custom|`)||[e.label,e.description??``].some(e=>y(e).includes(y(t)))}commit(e){this.custom=e?.value.startsWith(`custom|`)?e.label:null,super.commit(e)}detail(){let[e]=this.selected?this.selected.value.split(`|`):[null];return{value:this.value,province:e===`custom`?null:e}}};b.observedAttributes=[..._.observedAttributes,`province`,`allow-custom`],a(`kashi-combobox`,_,`block`),a(`kashi-province-select`,v,`block`),a(`kashi-city-select`,b,`block`);export{b as KashiCitySelect,_ as KashiCombobox,v as KashiProvinceSelect,m as n,f as r,g as searchText,h as t};
@@ -0,0 +1 @@
1
+ import{A as e,D as t,O as n,c as r,g as i,i as a,k as o,l as s,m as c,o as l,p as u,s as d,t as f,u as p,v as m}from"./base-DTQ50VdG.js";import{n as h}from"./text-D4a_hlwL.js";function g(e,t,n){if(e.querySelectorAll(`:scope > input[type=hidden][data-kashi-value]`).forEach(e=>e.remove()),t)for(let r of n){let n=document.createElement(`input`);n.type=`hidden`,n.name=t,n.value=r,n.dataset.kashiValue=``,e.append(n)}}var _=class extends f{constructor(){super(...arguments),this.tags=[],this.localError=null,this.rendered=!1,this.valueSet=!1,this.key=m(`kashi-tags`)}connectedCallback(){!this.rendered&&!this.valueSet&&(this.tags=this.parse(this.getAttribute(`value`))),this.render()}attributeChangedCallback(e,t,n){this.rendered&&t!==n&&(e===`value`?this.value=this.parse(n):this.render())}parse(e){return(e??``).split(/[,،]/).map(e=>e.trim()).filter(Boolean)}get value(){return[...this.tags]}set value(e){this.valueSet=!0,this.tags=Array.isArray(e)?[...e]:this.parse(e),this.rendered&&this.paint()}focus(e){this.input?.focus(e)}render(){let e=this.key,t=this.getAttribute(`aria-label`),n=this.hasAttribute(`label`)?this.getAttribute(`label`):t?null:u().tagInput.label,r=`<div class="k-tag-input"><input id="${e}" class="k-tag-input__control"${this.hasAttribute(`disabled`)?` disabled`:``}${!n&&t?` aria-label="${s(t)}"`:``}></div><span class="k-sr-only" aria-live="polite"></span>`;this.querySelector(`:scope > .k-field`)?.remove(),this.insertAdjacentHTML(`afterbegin`,p({id:e,label:n,control:r})),this.input=this.querySelector(`.k-tag-input__control`),this.querySelector(`.k-tag-input`).addEventListener(`click`,e=>{let t=e.target.closest(`.k-badge__remove`);t?this.removeAt(Number(t.dataset.i)):this.input.focus()}),this.input.addEventListener(`keydown`,e=>{(e.key===`Enter`||e.key===`,`||e.key===`،`)&&this.input.value.trim()?(e.preventDefault(),this.add([this.input.value])):e.key===`Backspace`&&!this.input.value&&this.tags.length&&this.removeAt(this.tags.length-1)}),this.input.addEventListener(`input`,()=>{this.localError=null;let e=this.input.value.split(/[,،\n\t]/);if(e.length>1){let t=e.pop()??``;this.add(e),t&&!this.localError&&(this.input.value=t)}else this.paintMessages()}),this.input.addEventListener(`blur`,()=>this.input.value.trim()&&this.add([this.input.value])),this.rendered=!0,this.paint()}add(e){let t=Number(this.getAttribute(`max`))||1/0,n=a(this,`allow-duplicates`),r=[...this.tags],i=``;for(let a of e){let e=h(a).trim();if(!e)continue;let o=r.length>=t?u().common.max(c(this,t)):!n&&r.includes(e)?u().tagInput.duplicate:this.validate?.(e);if(o){this.localError=o,this.commit(r,i),this.input.value=e;return}r=[...r,e],i=u().common.added(e)}this.localError=null,this.input.value=``,this.commit(r,i)}removeAt(e){let t=this.tags[e];this.commit(this.tags.filter((t,n)=>n!==e),u().common.removed(t)),this.input.focus()}commit(e,t){let n=e.join(`\0`)!==this.tags.join(`\0`);this.tags=e,this.paint(),t&&(this.querySelector(`.k-field > .k-sr-only`).textContent=t),n&&r(this,`kashi-change`,{value:[...e]})}paint(){this.querySelector(`.k-tag-input`).querySelectorAll(`.k-badge`).forEach(e=>e.remove());let e=this.getAttribute(`tone`)??`brand`,t=this.hasAttribute(`disabled`),n=this.tags.map((n,r)=>`<span class="k-badge${e===`neutral`?``:` k-badge--${s(e)}`}${t?``:` k-badge--removable`}">${s(n)}${t?``:`<button type="button" class="k-badge__remove" data-i="${r}" aria-label="${s(u().common.remove(n))}"><svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="m6 6 8 8M14 6l-8 8"/></svg></button>`}</span>`).join(``);this.input.insertAdjacentHTML(`beforebegin`,n),this.input.placeholder=this.tags.length?``:this.getAttribute(`placeholder`)??``,this.paintMessages(),g(this,this.getAttribute(`name`),this.tags)}paintMessages(){let e=this.getAttribute(`error`)||this.localError;this.querySelector(`.k-tag-input`).toggleAttribute(`data-invalid`,!!e),i(this.querySelector(`:scope > .k-field`),this.input,this.key,e,this.getAttribute(`hint`))}};_.observedAttributes=[`label`,`hint`,`error`,`placeholder`,`disabled`,`name`,`value`,`max`,`tone`,`allow-duplicates`,`aria-label`];var v=class extends f{constructor(){super(...arguments),this.current=null,this.rendered=!1,this.valueSet=!1,this.key=m(`kashi-num`)}connectedCallback(){!this.rendered&&!this.valueSet&&(this.current=this.num(this.getAttribute(`value`))??null),this.render()}attributeChangedCallback(e,t,n){this.rendered&&t!==n&&(e===`value`?this.value=n===null||n===``?null:Number(n):this.render())}get value(){return this.current}set value(e){this.valueSet=!0,this.current=e==null||Number.isNaN(Number(e))?null:Number(e),this.rendered&&this.paint()}focus(e){this.input?.focus(e)}num(e){return e===null||e===``||Number.isNaN(Number(e))?void 0:Number(e)}get min(){return this.num(this.getAttribute(`min`))}get max(){return this.num(this.getAttribute(`max`))}clamp(e){return Math.min(this.max??1/0,Math.max(this.min??-1/0,e))}show(n){if(n===null)return``;let r=this.hasAttribute(`thousands`)?t(n,{digits:`latin`}):String(n);return d(this)===`latin`?r:e(r).replace(/,/g,`٬`)}render(){let e=this.key,t=this.getAttribute(`aria-label`),r=this.hasAttribute(`label`)?this.getAttribute(`label`):t?null:u().numberInput.label,i=this.hasAttribute(`disabled`),a=this.getAttribute(`unit`),o=`<div class="k-number"><div class="k-input"${i?` data-state="disabled"`:``}><button type="button" class="k-number__step" data-step="-1" tabindex="-1" aria-label="${s(u().numberInput.decrement)}"${i?` disabled`:``}><svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" aria-hidden="true"><path d="M5 10h10"/></svg></button><input id="${e}" class="k-input__control" type="text" inputmode="decimal" role="spinbutton" dir="ltr"${i?` disabled`:``}${!r&&t?` aria-label="${s(t)}"`:``}>${a?`<span class="k-input__addon">${s(a)}</span>`:``}<button type="button" class="k-number__step" data-step="1" tabindex="-1" aria-label="${s(u().numberInput.increment)}"${i?` disabled`:``}><svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" aria-hidden="true"><path d="M10 5v10M5 10h10"/></svg></button></div></div>`;this.querySelector(`:scope > .k-field`)?.remove(),this.insertAdjacentHTML(`afterbegin`,p({id:e,label:r,control:o})),this.input=this.querySelector(`input.k-input__control`),this.querySelectorAll(`.k-number__step`).forEach(e=>e.addEventListener(`click`,()=>this.bump(Number(e.dataset.step)))),this.input.addEventListener(`input`,()=>{let e=this.input.value,t=n(e);this.set(t?(/^\s*[-−]/.test(e)?-1:1)*Number(t):null,!1)}),this.input.addEventListener(`blur`,()=>{this.current!==null&&this.current!==this.clamp(this.current)?this.set(this.clamp(this.current)):this.paint()}),this.input.addEventListener(`keydown`,e=>{let t={ArrowUp:()=>this.bump(1),ArrowDown:()=>this.bump(-1),PageUp:()=>this.bump(10),PageDown:()=>this.bump(-10),Home:()=>this.min!==void 0&&this.set(this.min),End:()=>this.max!==void 0&&this.set(this.max)};t[e.key]&&(e.preventDefault(),t[e.key]())}),this.rendered=!0,this.paint()}bump(e){let t=this.num(this.getAttribute(`step`))??1;this.set(this.clamp((this.current??this.min??0)+e*t))}set(e,t=!0){let n=e!==this.current;this.current=e,t?this.paint():this.paintState(),n&&r(this,`kashi-change`,{value:e})}paint(){let e=this.show(this.current);this.input.value!==e&&(this.input.value=e),this.paintState()}paintState(){let e=this.input,t=this.current;for(let[n,r]of[[`aria-valuenow`,t],[`aria-valuemin`,this.min],[`aria-valuemax`,this.max]])r==null?e.removeAttribute(n):e.setAttribute(n,String(r));t===null?e.removeAttribute(`aria-valuetext`):e.setAttribute(`aria-valuetext`,this.show(t));let n=this.hasAttribute(`disabled`),[r,a]=this.querySelectorAll(`.k-number__step`);r.disabled=n||this.min!==void 0&&(t??0)<=this.min,a.disabled=n||this.max!==void 0&&(t??0)>=this.max,i(this.querySelector(`:scope > .k-field`),e,this.key,this.getAttribute(`error`),this.getAttribute(`hint`)),g(this,this.getAttribute(`name`),[t===null?``:String(t)])}};v.observedAttributes=[`label`,`hint`,`error`,`value`,`min`,`max`,`step`,`thousands`,`digits`,`unit`,`disabled`,`name`,`aria-label`];const y=`<svg viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M12 2.8l2.8 5.9 6.4.8-4.7 4.4 1.2 6.3L12 17.1l-5.7 3.1 1.2-6.3L2.8 9.5l6.4-.8z"/><path class="k-rating__half" fill="none" d="M12 2.8v14.3l-5.7 3.1 1.2-6.3L2.8 9.5l6.4-.8z"/></svg>`;var b=class extends f{constructor(){super(...arguments),this.current=0,this.valueSet=!1,this.key=m(`kashi-rate`)}connectedCallback(){this.valueSet||(this.current=Number(this.getAttribute(`value`))||0),this.render()}attributeChangedCallback(e,t,n){t!==n&&this.isConnected&&(e===`value`&&(this.current=Number(n)||0),this.render())}get value(){return this.current}set value(e){this.valueSet=!0,this.current=Number(e)||0,this.isConnected&&this.render()}render(){let e=Number(this.getAttribute(`max`))||5,t=this.getAttribute(`label`)??u().rating.label,n=e=>c(this,e).replace(`.`,u().common.decimal),i=this.getAttribute(`size`),a=`k-rating${i===`sm`||i===`lg`?` k-rating--${i}`:``}`,o=this.current,l=Array.from({length:e},(e,t)=>t+1),d=this.hasAttribute(`show-value`)?`<span class="k-rating__value" aria-hidden="true">${n(o)}</span>`:``;if(this.hasAttribute(`readonly`)){this.innerHTML=`<span class="${a}" data-readonly="" role="img" aria-label="${s(`${t}: ${u().common.of(n(o),n(e))}`)}">${l.map(e=>`<span class="k-rating__star"${e<=Math.floor(o)?` data-filled=""`:``}${e===Math.ceil(o)&&o%1>=.25?` data-half=""`:``}>${y}</span>`).join(``)}${d}</span>`;return}let f=this.getAttribute(`name`)??this.key,p=this.hasAttribute(`disabled`);this.innerHTML=`<fieldset class="${a}"><legend class="k-sr-only">${s(t)}</legend>${l.map(t=>`<label class="k-rating__star"${t<=o?` data-filled=""`:``}><input type="radio" class="k-sr-only" name="${s(f)}" value="${t}"${o===t?` checked`:``}${p?` disabled`:``} aria-label="${s(u().common.of(n(t),n(e)))}">${y}</label>`).join(``)}${d}</fieldset>`;let m=this.querySelector(`fieldset`),h=e=>m.querySelectorAll(`.k-rating__star`).forEach((t,n)=>t.toggleAttribute(`data-filled`,n+1<=e));m.addEventListener(`change`,e=>{this.current=Number(e.target.value),h(this.current),r(this,`kashi-change`,{value:this.current})}),m.addEventListener(`pointerover`,e=>{let t=e.target.closest(`.k-rating__star`);t&&!p&&h([...m.querySelectorAll(`.k-rating__star`)].indexOf(t)+1)}),m.addEventListener(`pointerleave`,()=>h(this.current))}};b.observedAttributes=[`value`,`max`,`readonly`,`show-value`,`size`,`label`,`name`,`disabled`];function x(e,t,n=1){let r=[1],i=Math.max(2,e-n),a=Math.min(t-1,e+n);i>2&&r.push(i===3?2:null);for(let e=i;e<=a;e++)r.push(e);return a<t-1&&r.push(a===t-2?t-1:null),t>1&&r.push(t),r}const S=e=>`<svg data-k-mirror="" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="${e}"/></svg>`;var C=class extends f{connectedCallback(){this.render()}attributeChangedCallback(e,t,n){t!==n&&this.isConnected&&this.render()}get page(){return Math.max(1,Number(this.getAttribute(`page`))||1)}set page(e){this.setAttribute(`page`,String(e))}get total(){return Math.max(1,Number(this.getAttribute(`total`))||1)}render(){let t=Math.min(this.page,this.total),n=this.total,i=t=>d(this)===`latin`?String(t):e(t),a=this.getAttribute(`href`),o=this.contains(document.activeElement)?document.activeElement.dataset.to:null,c=(e,t,n,{current:r=!1,disabled:i=!1,aria:o=``}={})=>a&&!i?`<a class="${n}" href="${s(a.replace(`{page}`,String(e)))}" data-to="${e}"${r?` aria-current="page"`:``}${o?` aria-label="${s(o)}"`:``}>${t}</a>`:`<button type="button" class="${n}" data-to="${e}"${i?` disabled`:``}${r?` aria-current="page"`:``}${o?` aria-label="${s(o)}"`:``}>${t}</button>`,l=this.getAttribute(`summary`);this.innerHTML=`<nav class="k-pagination" aria-label="${s(this.getAttribute(`label`)??u().pagination.nav)}">${c(t-1,`${S(`m12 5-5 5 5 5`)}${s(u().common.prev)}`,`k-btn k-btn--secondary k-btn--sm`,{disabled:t<=1})}${l?`<span class="k-pagination__summary">${s(l)}</span>`:``}<ul class="k-pagination__pages" role="list">${x(t,n,Number(this.getAttribute(`siblings`)??1)).map(e=>`<li>${e===null?`<span class="k-pagination__ellipsis" aria-hidden="true">…</span>`:c(e,i(e),`k-pagination__page`,{current:e===t,aria:u().pagination.page(i(e))})}</li>`).join(``)}</ul>${c(t+1,`${s(u().common.next)}${S(`m8 5 5 5-5 5`)}`,`k-btn k-btn--secondary k-btn--sm`,{disabled:t>=n})}</nav>`,this.querySelector(`nav`).addEventListener(`click`,e=>{let t=e.target.closest(`button[data-to]`);if(!t||t.disabled)return;let n=Number(t.dataset.to);this.setAttribute(`page`,String(n)),r(this,`kashi-change`,{page:n}),this.querySelector(`.k-pagination__page[data-to="${n}"]`)?.focus()}),o&&this.querySelector(`[data-to="${o}"]`)?.focus()}};C.observedAttributes=[`page`,`total`,`siblings`,`href`,`digits`,`label`,`summary`];const w=e=>{let t=o(e).replace(/[٬,\s]/g,``).replace(`٫`,`.`).replace(`−`,`-`).match(/-?\d+(\.\d+)?/);return t?Number(t[0]):NaN};l(`kashi-tag-input`,_,`block`),l(`kashi-number-input`,v,`block`),l(`kashi-rating`,b),l(`kashi-pagination`,C,`block`);export{v as KashiNumberInput,C as KashiPagination,b as KashiRating,_ as KashiTagInput,w as cellNumber,x as pageRange};
@@ -0,0 +1 @@
1
+ import{A as e,D as t,b as n,c as r,d as i,l as a,o,p as s,s as c,t as l,y as u}from"./base-DTQ50VdG.js";import{t as d}from"./words-BdADG_9U.js";const f={دقیقه:`minute`,ساعت:`hour`,روز:`day`,هفته:`week`,ماه:`month`,سال:`year`},p=6e4,m=60*p,h=e=>new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime();function g(t,{now:n=/* @__PURE__ */ new Date,locale:r=`fa`,digits:i=r===`en`?`latin`:`fa`}={}){let a=r===`en`,o=t.getTime()-n.getTime(),s=o<0,c=Math.abs(o),l=t=>i===`fa`?e(t):String(t),u=(e,t)=>{if(!a)return`${l(e)} ${t} ${s?`پیش`:`دیگر`}`;let n=`${f[t]}${e===1?``:`s`}`;return s?`${l(e)} ${n} ago`:`in ${l(e)} ${n}`};if(c<45e3)return a?`just now`:`همین الان`;if(c<m)return u(Math.max(1,Math.round(c/p)),`دقیقه`);let d=Math.round((h(t)-h(n))/864e5);if(c<6*m||d===0)return u(Math.round(c/m),`ساعت`);if(d===-1)return a?`yesterday`:`دیروز`;if(d===1)return a?`tomorrow`:`فردا`;let g=Math.abs(d);return g<7?u(g,`روز`):g<30?u(Math.round(g/7),`هفته`):g<365?u(Math.max(1,Math.round(g/30.44)),`ماه`):u(Math.round(g/365.25),`سال`)}const _={همت:`trillion`,میلیارد:`billion`,میلیون:`million`,هزار:`thousand`},v=[[0xe8d4a51000,`همت`],[1e9,`میلیارد`],[1e6,`میلیون`],[1e3,`هزار`]],y=e=>Math.round(e/10),b=e=>e*10;function x(n,{unit:r=`toman`,from:i=`toman`,compact:a=!1,showUnit:o=!0,locale:s=`fa`,digits:c=s===`en`?`latin`:`fa`}={}){let l=s===`en`,u=i===r?n:i===`rial`?y(n):b(n),d=u<0?`−`:``;u=Math.abs(u);let f=t(Math.round(u),{digits:c}),p=l?r===`toman`?`Toman`:`Rial`:r===`toman`?`تومان`:`ریال`;if(a){let t=v.find(([e,t])=>u>=e&&(t!==`همت`||r===`toman`&&!l));if(t){let n=Math.round(u/t[0]*100)/100,r=String(n).replace(`.`,c===`fa`?`٫`:`.`);f=`${c===`fa`?e(r):r} ${l?_[t[1]]:t[1]}`,t[1]===`همت`&&(p=``)}}return`${d}${f}${o&&p?` ${p}`:``}`}const S=e=>{if(!e)return null;let t=n(e.trim())??new Date(e);return Number.isNaN(t.getTime())?null:t};var C=class extends l{connectedCallback(){this.render()}attributeChangedCallback(){this.isConnected&&this.render()}},w=class extends C{render(){let e=Number(this.getAttribute(`value`)??0),t=this.getAttribute(`unit`)===`rial`?`rial`:`toman`,n=this.getAttribute(`from`)===`rial`?`rial`:this.getAttribute(`from`)===`toman`?`toman`:t,r=this.hasAttribute(`compact`),o=c(this),l=this.hasAttribute(`signed`),u=this.getAttribute(`size`)??`md`,f=n===t?e:n===`rial`?y(e):b(e),p=i(),m=s(),h=x(f,{unit:t,compact:r,digits:o,locale:p,showUnit:!1}),g=x(f,{unit:t,compact:r,locale:p}),_=t===`toman`?m.money.toman:m.money.rial,v=g.endsWith(`همت`)?null:_,S=this.getAttribute(`words`)!==`false`&&Number.isSafeInteger(Math.round(f))?`${d(Math.round(f),{locale:p})} ${_}`:null,C=l?f>0?`positive`:f<0?`negative`:null:null,w=S?` aria-hidden="true"`:``;this.innerHTML=`<data value="${f}" class="k-money k-money--${a(u)}"${C?` data-tone="${C}"`:``}${S?` title="${a(S)}"`:``}><span class="k-money__amount"${w}>${l&&f>0?`+`:``}${a(h)}</span>${v?`<span class="k-money__unit"${w}>${v}</span>`:``}${S?`<span class="k-sr-only">${f<0?``:l&&f>0?m.money.positive:``}${a(S)}</span>`:``}</data>`}};w.observedAttributes=[`value`,`unit`,`from`,`compact`,`digits`,`signed`,`words`,`size`];var T=class extends C{render(){let e=S(this.getAttribute(`datetime`));if(!e){this.textContent=``;return}let t=this.getAttribute(`format`),n=t===`numeric`||t===`full`?t:`long`,r=c(this);this.innerHTML=`<time datetime="${a(this.getAttribute(`datetime`))}">${a(u(e,{style:n,digits:r,locale:i()}))}</time>`}};T.observedAttributes=[`datetime`,`format`,`digits`];var E=class extends C{connectedCallback(){super.connectedCallback(),clearInterval(this.timer),this.timer=setInterval(()=>this.render(),Number(this.getAttribute(`refresh`))||6e4)}disconnectedCallback(){clearInterval(this.timer)}render(){let e=S(this.getAttribute(`datetime`));if(!e){this.textContent=``;return}let t=c(this);this.innerHTML=`<time datetime="${e.toISOString()}" title="${a(u(e,{style:`full`,digits:t,locale:i()}))}">${a(g(e,{digits:t,locale:i()}))}</time>`}};E.observedAttributes=[`datetime`,`digits`,`refresh`];const D=e=>String(e).padStart(2,`0`);var O=class extends l{constructor(){super(...arguments),this.end=0,this.done=!1}connectedCallback(){this.restart()}disconnectedCallback(){clearInterval(this.timer)}attributeChangedCallback(e,t,n){this.isConnected&&t!==n&&(e===`to`||e===`seconds`?this.restart():this.render())}restart(){let e=S(this.getAttribute(`to`));this.end=e?e.getTime():Date.now()+(Number(this.getAttribute(`seconds`))||0)*1e3,this.done=!1,clearInterval(this.timer),this.render(),this.timer=setInterval(()=>this.render(),1e3)}get remaining(){return Math.max(0,Math.ceil((this.end-Date.now())/1e3))}render(){let t=this.remaining,n=Math.floor(t/86400),i=Math.floor(t%86400/3600),o=Math.floor(t%3600/60),l=t%60,u=c(this)===`fa`,d=t=>u?e(String(t)):String(t),f=s().countdown,p=[n&&`${d(n)} ${f.days}`,i&&`${d(i)} ${f.hours}`,o&&`${d(o)} ${f.minutes}`,`${d(l)} ${f.seconds}`].filter(Boolean).join(s().common.and),m=this.getAttribute(`label`),h=a(m?`${m}: ${p}`:p),g=t===0?` data-done=""`:``;if(this.getAttribute(`variant`)===`blocks`){let e=[...n?[[n,f.days]]:[],[i,f.hours],[o,f.minutes],[l,f.seconds]];this.innerHTML=`<div role="timer" aria-label="${h}" class="k-countdown k-countdown--blocks"${g}>${e.map(([e,t])=>`<span class="k-countdown__unit" aria-hidden="true"><span class="k-countdown__num">${d(D(e))}</span><span class="k-countdown__name">${t}</span></span>`).join(``)}</div>`}else{let e=(n?`${n}:`:``)+(i||n?`${D(i)}:`:``)+`${D(o)}:${D(l)}`;this.innerHTML=`<span role="timer" aria-label="${h}" class="k-countdown"${g} dir="ltr"><span aria-hidden="true">${d(e)}</span></span>`}t===0&&(clearInterval(this.timer),this.done||(this.done=!0,r(this,`kashi-complete`,{})))}};O.observedAttributes=[`to`,`seconds`,`variant`,`digits`,`label`],o(`kashi-money`,w),o(`kashi-date`,T),o(`kashi-relative-time`,E),o(`kashi-countdown`,O);export{O as KashiCountdown,T as KashiDate,w as KashiMoney,E as KashiRelativeTime};
@@ -0,0 +1 @@
1
+ import{A as e,O as t,_ as n,c as r,g as i,l as a,o,p as s,s as c,t as l,u,v as d}from"./base-DTQ50VdG.js";var f=class extends l{constructor(){super(...arguments),this.code=``,this.caret=0,this.valueSet=!1,this.rendered=!1,this.key=d(`kashi-otp`)}connectedCallback(){!this.rendered&&!this.valueSet&&(this.code=t(this.getAttribute(`value`)??``).slice(0,this.length)),this.render()}attributeChangedCallback(e,n,r){this.rendered&&n!==r&&(e===`value`?(this.code=t(r??``).slice(0,this.length),this.paint()):this.render())}get value(){return this.code}set value(e){this.valueSet=!0,this.code=t(String(e??``)).slice(0,this.length),this.rendered&&this.paint()}focus(e){this.input?.focus(e)}get length(){let e=Number(this.getAttribute(`length`));return Number.isInteger(e)&&e>0?e:6}render(){let e=this.key,n=this.length,i=Number(this.getAttribute(`group-after`))||0,o=this.getAttribute(`aria-label`),c=this.hasAttribute(`label`)?this.getAttribute(`label`):o?null:s().otp.label,l=Array.from({length:n},(e,t)=>`${i&&t===i?`<span class="k-otp__sep" aria-hidden="true"></span>`:``}<span class="k-otp__slot" aria-hidden="true"></span>`).join(``),d=`<div class="k-otp${this.getAttribute(`size`)===`sm`?` k-otp--sm`:``}"><input id="${e}" class="k-otp__input" type="text" inputmode="numeric" autocomplete="one-time-code" pattern="\\d*" maxlength="${n*2}"${this.hasAttribute(`disabled`)?` disabled`:``}${!c&&o?` aria-label="${a(o)}"`:``}>${l}</div>`;this.querySelector(`:scope > .k-field`)?.remove(),this.insertAdjacentHTML(`afterbegin`,u({id:e,label:c,control:d})),this.input=this.querySelector(`.k-otp__input`),this.querySelector(`.k-otp`).addEventListener(`click`,()=>this.input.focus()),this.input.addEventListener(`input`,()=>{let e=t(this.input.value).slice(0,this.length),n=this.code;this.code=e,this.caret=e.length,this.paint(),e!==n&&r(this,`kashi-change`,{value:e}),e.length===this.length&&e!==n&&r(this,`kashi-complete`,{value:e})});let f=()=>{this.caret=Math.min(this.input.selectionStart??this.code.length,this.length),this.paintSlots()};for(let e of[`select`,`keyup`,`focus`])this.input.addEventListener(e,f);this.input.addEventListener(`blur`,()=>this.paintSlots()),this.rendered=!0,this.paint()}paint(){this.input.value!==this.code&&(this.input.value=this.code),this.paintSlots();let e=this.getAttribute(`error`);this.querySelector(`.k-otp`).classList.toggle(`k-otp--invalid`,!!e),i(this.querySelector(`:scope > .k-field`),this.input,this.key,e,this.getAttribute(`hint`)),n(this,this.getAttribute(`name`),this.code)}paintSlots(){let t=c(this)===`fa`,n=this.ownerDocument.activeElement===this.input,r=Math.min(this.caret,this.length-1);this.querySelectorAll(`.k-otp__slot`).forEach((i,a)=>{let o=this.code[a]??``;i.textContent=t?e(o):o,i.toggleAttribute(`data-filled`,!!o),i.toggleAttribute(`data-active`,n&&a===r)})}};f.observedAttributes=[`label`,`hint`,`error`,`length`,`digits`,`group-after`,`size`,`disabled`,`name`,`value`,`aria-label`],o(`kashi-otp`,f,`block`);export{f as KashiOtp};
@@ -0,0 +1 @@
1
+ import{A as e,D as t,O as n,_ as r,c as i,d as a,f as o,g as s,i as c,l,m as u,o as d,p as f,r as p,s as m,t as h,u as g,v as _}from"./base-DTQ50VdG.js";import{t as v}from"./text-D4a_hlwL.js";import{n as y,t as b}from"./time-DJ3p1wvd.js";import{searchText as x}from"./combobox-6EFI2qqN.js";const S=[`الف`,`ب`,`پ`,`ت`,`ث`,`ج`,`د`,`ز`,`س`,`ش`,`ص`,`ط`,`ع`,`ف`,`ق`,`ک`,`گ`,`ل`,`م`,`ن`,`و`,`ه`,`ی`,`ژ`],C={الف:`government`,پ:`police`,ث:`police`,ت:`taxi`,ع:`public`,ک:`agricultural`,ش:`army`,ز:`defense`,ف:`defense`,ژ:`disabled`};function w(e){return C[e]??`private`}function T(e){let t=n(e.first??``),r=n(e.middle??``),i=n(e.region??``);return/^[1-9]\d$/.test(t)&&/^[1-9]\d{2}$/.test(r)&&/^[1-9]\d$/.test(i)&&S.includes(e.letter??``)}function E(t,{digits:r=`fa`}={}){let i=t=>r===`fa`?e(n(t)):n(t);return`${i(t.first)} ${t.letter} ${i(t.middle)} ایران ${i(t.region)}`}const D=`ضصثقفغعهخحجچپشسیبلاتنمکگظطزرذدپوژ؟آ`,O=/* @__PURE__ */ new Map,k=/* @__PURE__ */ new Map;[...`qwertyuiop[]\\asdfghjkl;'zxcvbnm,C?H`].forEach((e,t)=>{O.set(e,D[t]),k.has(D[t])||k.set(D[t],e)});function A(e,t=`fa`){let n=t===`fa`?O:k;return[...e].map(e=>n.get(t===`fa`&&e!==`C`&&e!==`H`?e.toLowerCase():e)??e).join(``)}function j(e){let t=e.trim();if(!t||/[\u0600-\u06FF]/.test(t)||!/[a-z]/i.test(t))return!1;let n=t.split(/\s+/).filter(e=>/[a-z]/i.test(e)),r=n.filter(e=>/[a-z][;'[\],\\]|[;'[\],\\][a-z]/i.test(e)||e.length>=3&&!/[aeiouy]/i.test(e));return r.length>0&&r.length*2>=n.length}const M=`<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m5 10.5 3.2 3L15 7"/></svg>`,N=`<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="m6 6 8 8M14 6l-8 8"/></svg>`;function P(e,t,n){if(e.querySelectorAll(`:scope > input[type=hidden][data-kashi-value]`).forEach(e=>e.remove()),t)for(let r of n)e.insertAdjacentHTML(`beforeend`,`<input type="hidden" data-kashi-value name="${l(t)}" value="${l(r)}">`)}function F(e){let t=[...e.querySelectorAll(`:scope > option`)].map(e=>({value:e.value,label:e.textContent?.trim()??e.value,description:e.dataset.description,disabled:e.disabled,selected:e.hasAttribute(`selected`)}));return e.querySelectorAll(`:scope > option`).forEach(e=>e.remove()),t}var I=class extends h{constructor(){super(...arguments),this.list=null,this.chosen=[],this.query=``,this.active=-1,this.isOpen=!1,this.valueSet=!1,this.key=_(`kashi-multi`),this.onOutside=e=>{this.contains(e.target)||this.close()}}connectedCallback(){p(()=>{if(this.isConnected){if(this.list===null){let e=F(this);this.list=e,this.valueSet||(this.chosen=e.filter(e=>e.selected).map(e=>e.value))}this.render()}})}disconnectedCallback(){document.removeEventListener(`pointerdown`,this.onOutside)}attributeChangedCallback(e,t,n){this.box&&t!==n&&this.render()}get options(){return this.list??[]}set options(e){this.list=[...e],this.box&&this.paint()}get value(){return[...this.chosen]}set value(e){this.valueSet=!0,this.chosen=[...e],this.box&&this.paint()}render(){let e=this.key,t=this.getAttribute(`aria-label`),n=this.hasAttribute(`label`)?this.getAttribute(`label`):t?null:f().multiSelect.label,r=`<div class="k-combobox k-multiselect"><div class="k-tag-input"><input id="${e}" class="k-tag-input__control" role="combobox" aria-autocomplete="list" aria-expanded="false" aria-controls="${e}-list" autocomplete="off"${this.hasAttribute(`disabled`)?` disabled`:``}${!n&&t?` aria-label="${l(t)}"`:``}></div><ul id="${e}-list" role="listbox" aria-multiselectable="true" class="k-listbox" hidden style="inset-block-start: calc(100% + 6px)"${n?` aria-label="${l(n)}"`:``}></ul><span id="${e}-count" class="k-sr-only"></span><span class="k-sr-only" aria-live="polite"></span></div>`;this.querySelector(`:scope > .k-field`)?.remove(),this.insertAdjacentHTML(`afterbegin`,g({id:e,label:n,control:r})),this.input=this.querySelector(`.k-tag-input__control`),this.box=this.querySelector(`.k-tag-input`),this.listbox=this.querySelector(`.k-listbox`),this.box.addEventListener(`click`,e=>{let t=e.target.closest(`[data-remove]`);t?this.set(this.chosen.filter(e=>e!==t.dataset.remove),f().common.removed(this.labelOf(t.dataset.remove))):e.target.closest(`[data-clear]`)&&this.set([],f().multiSelect.clearedAll),this.input.focus()}),this.input.addEventListener(`input`,()=>{this.query=this.input.value,this.active=0,this.open()}),this.input.addEventListener(`focus`,()=>this.open()),this.input.addEventListener(`keydown`,e=>this.onKey(e)),this.listbox.addEventListener(`pointerdown`,e=>e.preventDefault()),this.listbox.addEventListener(`click`,e=>{let t=e.target.closest(`[role="option"]`);t&&this.toggle(this.filtered()[Number(t.dataset.i)])}),this.paint()}labelOf(e){return this.options.find(t=>t.value===e)?.label??e}filtered(){let e=x(this.query.trim());return this.options.filter(t=>!e||[t.label,t.description??``].some(t=>x(t).includes(e)))}get full(){let e=Number(this.getAttribute(`max`));return!!e&&this.chosen.length>=e}toggle(e){if(!e||e.disabled)return;let t=this.chosen.includes(e.value);if(!t&&this.full)return this.announce(f().common.max(u(this,Number(this.getAttribute(`max`)))));this.query=``,this.input.value=``,this.set(t?this.chosen.filter(t=>t!==e.value):[...this.chosen,e.value],t?f().common.removed(e.label):f().common.selected(e.label))}set(e,t){this.chosen=e,this.paint(),this.announce(t),i(this,`kashi-change`,{value:[...e]})}announce(e){this.querySelector(`.k-multiselect > .k-sr-only[aria-live]`).textContent=e}open(){this.hasAttribute(`disabled`)||(this.isOpen=!0,this.listbox.hidden=!1,this.input.setAttribute(`aria-expanded`,`true`),this.querySelector(`.k-combobox`).setAttribute(`data-open`,``),document.addEventListener(`pointerdown`,this.onOutside),this.paintList())}close(){this.isOpen=!1,this.listbox.hidden=!0,this.input.setAttribute(`aria-expanded`,`false`),this.input.removeAttribute(`aria-activedescendant`),this.querySelector(`.k-combobox`).removeAttribute(`data-open`),document.removeEventListener(`pointerdown`,this.onOutside)}onKey(e){let t=this.filtered(),n=t.map((e,t)=>e.disabled?-1:t).filter(e=>e>=0),r=e=>{n.length&&(this.active=n[(n.indexOf(this.active)+e+n.length)%n.length],this.paintList())};if(e.key===`ArrowDown`)e.preventDefault(),this.isOpen?r(1):this.open();else if(e.key===`ArrowUp`)e.preventDefault(),this.isOpen?r(-1):this.open();else if(e.key===`Enter`&&this.isOpen&&t[this.active])e.preventDefault(),this.toggle(t[this.active]);else if(e.key===`Escape`&&this.isOpen)e.preventDefault(),this.close();else if(e.key===`Backspace`&&!this.input.value&&this.chosen.length){let e=this.chosen.at(-1);this.set(this.chosen.slice(0,-1),f().common.removed(this.labelOf(e)))}}paint(){let e=this.hasAttribute(`disabled`);this.box.querySelectorAll(`.k-badge, [data-clear]`).forEach(e=>e.remove());let t=this.chosen.map(t=>`<span class="k-badge k-badge--brand${e?``:` k-badge--removable`}">${l(this.labelOf(t))}${e?``:`<button type="button" class="k-badge__remove" data-remove="${l(t)}" aria-label="${l(f().common.remove(this.labelOf(t)))}">${N}</button>`}</span>`).join(``);this.input.insertAdjacentHTML(`beforebegin`,t),this.chosen.length>1&&!e&&this.box.insertAdjacentHTML(`beforeend`,`<button type="button" class="k-input__action" data-clear aria-label="${l(f().common.clearAll)}">${N}</button>`),this.input.placeholder=this.chosen.length?``:this.getAttribute(`placeholder`)??``,this.querySelector(`#${this.key}-count`).textContent=f().multiSelect.selected(u(this,this.chosen.length));let n=this.getAttribute(`error`);this.box.toggleAttribute(`data-invalid`,!!n),s(this.querySelector(`:scope > .k-field`),this.input,this.key,n,this.getAttribute(`hint`),`${this.key}-count`),P(this,this.getAttribute(`name`),this.chosen),this.isOpen&&this.paintList()}paintList(){let e=this.filtered(),t=x(this.query.trim()),n=this.full,r=e=>{let n=t?x(e).indexOf(t):-1;return n<0?l(e):`${l(e.slice(0,n))}<mark>${l(e.slice(n,n+t.length))}</mark>${l(e.slice(n+t.length))}`};this.listbox.innerHTML=e.length?e.map((e,t)=>{let i=this.chosen.includes(e.value);return`<li id="${this.key}-list-${t}" data-i="${t}" role="option" aria-selected="${i}"${e.disabled||!i&&n?` aria-disabled="true"`:``}${t===this.active?` data-active`:``} class="k-option k-option--check"><span class="k-multiselect__box" aria-hidden="true">${i?M:``}</span><span class="k-option__body"><span>${r(e.label)}</span>${e.description?`<span class="k-option__desc">${l(e.description)}</span>`:``}</span></li>`}).join(``):`<li class="k-listbox__empty" role="presentation">${l(f().common.noResults)}</li>`;let i=this.active>=0?this.listbox.querySelector(`[data-i="${this.active}"]`):null;i?(this.input.setAttribute(`aria-activedescendant`,i.id),i.scrollIntoView?.({block:`nearest`})):this.input.removeAttribute(`aria-activedescendant`)}};I.observedAttributes=[`label`,`hint`,`error`,`placeholder`,`max`,`disabled`,`name`,`aria-label`];var L=class extends h{constructor(){super(...arguments),this.lo=0,this.hi=0,this.valueSet=!1,this.rendered=!1,this.key=_(`kashi-slider`)}connectedCallback(){!this.rendered&&!this.valueSet&&this.readValue(this.getAttribute(`value`)),this.render()}attributeChangedCallback(e,t,n){this.rendered&&t!==n&&(e===`value`&&this.readValue(n),this.render())}num(e,t){let n=this.getAttribute(e);return n===null||n===``||Number.isNaN(Number(n))?t:Number(n)}get min(){return this.num(`min`,0)}get max(){return this.num(`max`,100)}get isRange(){return this.hasAttribute(`range`)}readValue(e){let t=(e??``).split(/[,،]/).map(e=>Number(e.trim())).filter(e=>!Number.isNaN(e)&&String(e)!==``);this.isRange?[this.lo,this.hi]=[t[0]??this.min,t[1]??this.max]:[this.lo,this.hi]=[this.min,t[0]??this.min]}get value(){return this.isRange?[this.lo,this.hi]:this.hi}set value(e){this.valueSet=!0,this.readValue(Array.isArray(e)?e.join(`,`):String(e)),this.rendered&&this.render()}fmt(e){let n=this.getAttribute(`unit`);return`${t(e,{digits:m(this)})}${n?` ${n}`:``}`}render(){let e=this.getAttribute(`label`),t=this.isRange,n=this.getAttribute(`name`),r=this.hasAttribute(`disabled`),a=e=>`${(e-this.min)/(this.max-this.min)*100}%`,o=i=>{let a=i===`lo`?this.lo:this.hi,o=n?t?`${n}_${i===`lo`?`min`:`max`}`:n:``;return`<input type="range" class="k-slider__input" data-which="${i}" min="${this.min}" max="${this.max}" step="${this.num(`step`,1)}" value="${a}"${r?` disabled`:``}${o?` name="${l(o)}"`:``}${t?` aria-label="${l(i===`lo`?f().slider.from:f().slider.to)}${e?` ${l(e)}`:``}"`:e?` aria-labelledby="${this.key}-label"`:``} aria-valuetext="${l(this.fmt(a))}">`},s=(this.getAttribute(`marks`)??``).split(/[,،]/).map(e=>e.trim()).filter(Boolean).map(Number),c=this.getAttribute(`show-value`)!==`false`;this.innerHTML=`<div class="k-slider"${t?` data-range=""`:``}>${e||c?`<div class="k-slider__head">${e?`<span class="k-label" id="${this.key}-label">${l(e)}</span>`:``}${c?`<span class="k-slider__value" aria-hidden="true">${l(t?`${this.fmt(this.lo)}${f().common.range}${this.fmt(this.hi)}`:this.fmt(this.hi))}</span>`:``}</div>`:``}<div class="k-slider__track" style="--_from: ${t?a(this.lo):`0%`}; --_to: ${a(this.hi)}"><span class="k-slider__fill" aria-hidden="true"></span>${t?o(`lo`):``}${o(`hi`)}</div>${s.length?`<div class="k-slider__marks" aria-hidden="true">${s.map(e=>`<span>${l(this.fmt(e))}</span>`).join(``)}</div>`:``}</div>`,this.rendered=!0,this.querySelectorAll(`.k-slider__input`).forEach(e=>e.addEventListener(`input`,()=>{let n=Number(e.value);t?e.dataset.which===`lo`?this.lo=Math.min(n,this.hi):this.hi=Math.max(n,this.lo):this.hi=n,e.value=String(e.dataset.which===`lo`?this.lo:this.hi),e.setAttribute(`aria-valuetext`,this.fmt(Number(e.value)));let r=this.querySelector(`.k-slider__track`);r.style.setProperty(`--_from`,t?a(this.lo):`0%`),r.style.setProperty(`--_to`,a(this.hi));let o=this.querySelector(`.k-slider__value`);o&&(o.textContent=t?`${this.fmt(this.lo)}${f().common.range}${this.fmt(this.hi)}`:this.fmt(this.hi)),i(this,`kashi-change`,{value:this.value})}))}};L.observedAttributes=[`label`,`min`,`max`,`step`,`value`,`range`,`show-value`,`marks`,`unit`,`disabled`,`name`];var R=class extends h{constructor(){super(...arguments),this.built=!1}connectedCallback(){p(()=>this.isConnected&&!this.built&&this.build())}attributeChangedCallback(){if(!this.built)return;let e=this.getAttribute(`label`);e&&this.setAttribute(`aria-label`,e),this.sync(!1)}get value(){return[...this.querySelectorAll(`.k-chip[aria-pressed="true"]`)].map(e=>e.dataset.value??``)}set value(e){this.querySelectorAll(`.k-chip`).forEach(t=>t.setAttribute(`aria-pressed`,String(e.includes(t.dataset.value??``)))),this.sync(!1)}build(){this.built=!0,this.classList.add(`k-chips`),this.setAttribute(`role`,`group`);let e=this.getAttribute(`label`);e&&this.setAttribute(`aria-label`,e),this.querySelectorAll(`:scope > button`).forEach(e=>{var t;e.type=`button`,e.classList.add(`k-chip`),(t=e.dataset).value||(t.value=e.textContent?.trim()??``),e.setAttribute(`aria-pressed`,String(e.hasAttribute(`data-pressed`)||e.getAttribute(`aria-pressed`)===`true`)),e.insertAdjacentHTML(`afterbegin`,`<svg class="k-chip__check" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m5 10.5 3.2 3L15 7"/></svg>`),e.dataset.count&&e.insertAdjacentHTML(`beforeend`,`<span class="k-chip__count">${u(this,e.dataset.count??``)}</span>`)}),this.addEventListener(`click`,e=>{let t=e.target.closest(`.k-chip`);if(!t||t.disabled)return;let n=t.getAttribute(`aria-pressed`)!==`true`;c(this,`single`)&&this.querySelectorAll(`.k-chip`).forEach(e=>e.setAttribute(`aria-pressed`,`false`)),t.setAttribute(`aria-pressed`,String(n)),this.sync(!0)}),this.sync(!1)}sync(e){P(this,this.getAttribute(`name`),this.value),e&&i(this,`kashi-change`,{value:this.value})}};R.observedAttributes=[`label`,`single`,`name`];const z=[[t=>t.length(o()===`fa`?e(8):`8`),e=>e.length>=8],[e=>e.cases,e=>/[a-z]/.test(e)&&/[A-Z]/.test(e)],[e=>e.digit,e=>/\d/.test(e)],[e=>e.symbol,e=>/[^A-Za-z0-9\s؀-ۿ]/.test(e)]];var B=class extends h{constructor(){super(...arguments),this.target=null,this.onInput=()=>this.render(this.target?.value??``)}connectedCallback(){p(()=>{this.isConnected&&(this.attach(),this.render(``))})}disconnectedCallback(){this.target?.removeEventListener(`input`,this.onInput)}attributeChangedCallback(){this.isConnected&&(this.attach(),this.render(this.target?.value??``))}attach(){this.target?.removeEventListener(`input`,this.onInput);let e=this.getAttribute(`for`),t=e?document.getElementById(e):null;if(this.target=t instanceof HTMLInputElement?t:t?.querySelector(`input`)??null,this.target?.addEventListener(`input`,this.onInput),this.target){this.id||=_(`kashi-strength`);let e=(this.target.getAttribute(`aria-describedby`)??``).split(` `).filter(Boolean);e.includes(this.id)||this.target.setAttribute(`aria-describedby`,[...e,this.id].join(` `))}}score(e){let t=z.filter(([,t])=>t(e)).length;return e?Math.max(1,Math.round(t/z.length*4)):0}render(e){let t=this.score(e),n=f().password,r=n.levels,i=/[؀-ۿ]/.test(e);this.innerHTML=`<div class="k-strength" data-score="${t}"><div class="k-strength__bars" aria-hidden="true">${`<span class="k-strength__bar"></span>`.repeat(4)}</div><p class="k-strength__label" aria-live="polite" style="margin: 0">${t?l(n.strength(`\0`)).replace(`\0`,`<strong>${l(r[t-1])}</strong>`):``}</p>${i?`<p class="k-hint k-hint--error" role="alert">${l(n.persian)}</p>`:``}${this.getAttribute(`show-rules`)===`false`?``:`<ul class="k-strength__rules">${z.map(([t,r])=>{let i=r(e);return`<li class="k-strength__rule"${i?` data-met=""`:``}>${i?M:`<svg viewBox="0 0 20 20" aria-hidden="true"><circle cx="10" cy="10" r="2.5" fill="currentColor"/></svg>`}<span>${l(t(n))}<span class="k-sr-only">${i?n.met:n.unmet}</span></span></li>`}).join(``)}</ul>`}</div>`}};B.observedAttributes=[`for`,`show-rules`];var V=class extends h{constructor(){super(...arguments),this.key=_(`kashi-text`),this.rendered=!1,this.valueSet=!1,this.text=``}connectedCallback(){!this.rendered&&!this.valueSet&&(this.text=this.getAttribute(`value`)??``),this.render()}attributeChangedCallback(e,t,n){this.rendered&&t!==n&&(e===`value`?this.value=n??``:this.render())}get value(){return this.text}set value(e){this.valueSet=!0,this.text=String(e??``),this.rendered&&(this.control.value=this.text,this.paint())}focus(e){this.control?.focus(e)}render(){let e=this.key,t=this.getAttribute(`aria-label`),n=this.hasAttribute(`label`)?this.getAttribute(`label`):t?null:this.defaultLabel,r=this.getAttribute(`name`),a=`id="${e}" class="k-input__control" dir="auto"${r?` name="${l(r)}"`:``}${this.hasAttribute(`required`)?` required`:``}${this.hasAttribute(`disabled`)?` disabled`:``} placeholder="${l(this.getAttribute(`placeholder`)??``)}"${!n&&t?` aria-label="${l(t)}"`:``}`,o=this.multiline?`<div class="k-input k-input--textarea"><textarea ${a} rows="${Number(this.getAttribute(`rows`))||4}"></textarea></div>`:`<div class="k-input"><input ${a}></div>`;this.querySelector(`:scope > .k-field`)?.remove(),this.insertAdjacentHTML(`afterbegin`,g({id:e,label:n,required:this.hasAttribute(`required`),control:o})),this.control=this.querySelector(`.k-input__control`),this.control.value=this.text,this.control.addEventListener(`input`,()=>{this.text=this.control.value,this.paint(),i(this,`kashi-change`,{value:this.text})}),this.rendered=!0,this.paint()}paint(){let e=this.querySelector(`:scope > .k-field`);s(e,this.control,this.key,this.getAttribute(`error`),null);let t=this.hint();if(e.querySelector(`.k-field__hint-row[data-extra]`)?.remove(),t){e.insertAdjacentHTML(`beforeend`,`<div class="k-field__hint-row" data-extra><div class="k-field__hints"><p class="k-hint" id="${this.key}-hint">${t}</p></div></div>`);let n=(this.control.getAttribute(`aria-describedby`)??``).split(` `).filter(Boolean);this.control.setAttribute(`aria-describedby`,[...n,`${this.key}-hint`].join(` `))}}replace(e){this.text=e,this.control.value=e,this.paint(),this.control.focus(),i(this,`kashi-change`,{value:e})}};const H=[`arabic`,`zwnj`,`punctuation`,`digits`,`spacing`];var U=class extends V{constructor(){super(...arguments),this.multiline=!0}get defaultLabel(){return f().persianInput.text}render(){super.render(),this.control.addEventListener(`blur`,()=>{let e=this.result();c(this,`fix-on-blur`)&&e.count&&this.replace(e.text)}),this.addEventListener(`click`,e=>{e.target.closest(`[data-fix]`)&&this.replace(this.result().text)})}result(){return v(this.text,{digits:this.getAttribute(`fix-digits`)!==`false`})}hint(){if(!this.text.trim())return this.getAttribute(`hint`)?l(this.getAttribute(`hint`)):null;let e=this.result();if(!e.count)return`<span class="k-textfix" data-state="clean"><span class="k-textfix__text">${l(f().textFix.clean)}</span></span>`;let t=f().textFix,n=H.filter(t=>e.fixes[t]).map(n=>`${u(this,e.fixes[n])} ${t[n]}`).join(f().common.list);return`<span class="k-textfix" data-state="fix"><span class="k-textfix__text">${l(t.count(u(this,e.count),n))}</span><button type="button" class="k-btn k-btn--tertiary k-btn--xs" data-fix>${l(t.fix)}</button></span>`}};U.observedAttributes=[`label`,`hint`,`error`,`placeholder`,`required`,`disabled`,`name`,`value`,`rows`,`fix-on-blur`,`fix-digits`,`aria-label`];var W=class extends V{constructor(){super(...arguments),this.multiline=!1}get defaultLabel(){return f().persianInput.text}render(){super.render(),this.addEventListener(`click`,e=>{e.target.closest(`[data-fix]`)&&this.replace(A(this.text))})}hint(){let e=this.text,t=/[a-z]/i.test(e)&&!/[؀-ۿ]/.test(e);return(this.getAttribute(`suggest`)===`always`?t:j(e))?`<span class="k-kbfix" role="status">${l(f().keyboardFix.before)} <button type="button" class="k-kbfix__btn" data-fix>«${l(A(e))}»</button>${a()===`en`?``:` `}${l(f().keyboardFix.after)}</span>`:this.getAttribute(`hint`)?l(this.getAttribute(`hint`)):null}};W.observedAttributes=[`label`,`hint`,`error`,`placeholder`,`required`,`disabled`,`name`,`value`,`suggest`,`aria-label`];const G=e=>e.hours*60+e.minutes,K=e=>({hours:Math.floor(e/60),minutes:e%60});var q=class extends h{constructor(){super(...arguments),this.current=null,this.invalid=!1,this.valueSet=!1,this.rendered=!1,this.key=_(`kashi-time`)}connectedCallback(){!this.rendered&&!this.valueSet&&(this.current=this.normal(this.getAttribute(`value`))),this.render()}attributeChangedCallback(e,t,n){this.rendered&&t!==n&&(e===`value`?this.value=n??``:this.render())}get value(){return this.current??``}set value(e){this.valueSet=!0,this.current=this.normal(e),this.invalid=!1,this.rendered&&this.paint()}normal(e){let t=e?y(e):null;return t?b(t):null}show(t){return t?m(this)===`latin`?t:e(t):``}get lo(){let e=y(this.getAttribute(`min`)??``);return e?G(e):0}get hi(){let e=y(this.getAttribute(`max`)??``);return e?G(e):1439}render(){let e=this.key,t=this.getAttribute(`aria-label`),n=this.hasAttribute(`label`)?this.getAttribute(`label`):t?null:f().persianInput.time,r=m(this)===`fa`,i=`<div class="k-input"><input id="${e}" class="k-input__control" type="text" inputmode="numeric" dir="ltr" autocomplete="off" placeholder="${l(this.getAttribute(`placeholder`)??(r?`۰۹:۳۰`:`09:30`))}"${this.hasAttribute(`required`)?` required`:``}${this.hasAttribute(`disabled`)?` disabled`:``}${!n&&t?` aria-label="${l(t)}"`:``}><span class="k-input__addon"><svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="10" cy="10" r="7"/><path d="M10 6v4l2.5 2"/></svg></span></div>`;this.querySelector(`:scope > .k-field`)?.remove(),this.insertAdjacentHTML(`afterbegin`,g({id:e,label:n,required:this.hasAttribute(`required`),control:i})),this.input=this.querySelector(`input.k-input__control`),this.input.addEventListener(`blur`,()=>this.commitText()),this.input.addEventListener(`keydown`,e=>{if(e.key===`Enter`&&this.commitText(),e.key!==`ArrowUp`&&e.key!==`ArrowDown`)return;e.preventDefault();let t=Number(this.getAttribute(`step`))||15,n=y(this.input.value)??y(this.current??``)??K(this.lo),r=G(n),i=e.key===`ArrowUp`?Math.floor(r/t)*t+t:Math.ceil(r/t)*t-t;this.commit(K(Math.min(this.hi,Math.max(this.lo,i))))}),this.rendered=!0,this.paint()}commitText(){let e=this.input.value.trim();if(!e)return this.commit(null);let t=y(e);if(!t)this.invalid=`format`;else if(G(t)<this.lo||G(t)>this.hi)this.invalid=`range`;else return this.commit(t);this.paint(!1)}commit(e){let t=e?b(e):null,n=t!==this.current;this.current=t,this.invalid=!1,this.paint(),n&&i(this,`kashi-change`,{value:t??``})}paint(e=!0){e&&(this.input.value=this.show(this.current));let t=this.invalid===`range`?f().invalid.timeRange(this.show(b(K(this.lo))),this.show(b(K(this.hi)))):this.invalid?f().invalid.time:null;this.input.setCustomValidity(t??``),s(this.querySelector(`:scope > .k-field`),this.input,this.key,this.getAttribute(`error`)||t,this.getAttribute(`hint`)),r(this,this.getAttribute(`name`),this.current??``)}};q.observedAttributes=[`label`,`hint`,`error`,`value`,`min`,`max`,`step`,`digits`,`required`,`disabled`,`name`,`placeholder`,`aria-label`];const J={first:``,letter:``,middle:``,region:``};var Y=class extends h{constructor(){super(...arguments),this.plate={...J},this.touched=!1,this.valueSet=!1,this.rendered=!1,this.key=_(`kashi-plate`)}connectedCallback(){!this.rendered&&!this.valueSet&&(this.plate=this.parse(this.getAttribute(`value`))),this.render()}attributeChangedCallback(e,t,n){this.rendered&&t!==n&&(e===`value`?this.value=this.parse(n):this.render())}parse(e){let[t=``,r=``,i=``,a=``]=(e??``).split(`-`);return{first:n(t),letter:r,middle:n(i),region:n(a)}}get value(){return{...this.plate}}set value(e){this.valueSet=!0,this.plate={...J,...e},this.rendered&&this.render()}get valid(){return T(this.plate)}render(){let t=this.key,r=this.plate,a=this.hasAttribute(`disabled`)?` disabled`:``,o=(n,i,o,s=``,c=!1)=>`<input${c?` id="${t}-first"`:``} class="k-plate__seg ${s}" data-key="${n}" data-len="${i}" inputmode="numeric" autocomplete="off" aria-label="${o}" placeholder="${e(`0`.repeat(i))}" value="${e(r[n])}"${a}>`,s=f().plate,c=this.getAttribute(`label`)??s.label,u=`<div class="k-plate" role="group" aria-label="${l(c)}" data-type="${w(r.letter)}"><span class="k-plate__flag" aria-hidden="true"><span class="k-plate__flag-colors"></span>I.R.<br>IRAN</span>${o(`first`,2,s.first,``,!0)}<select class="k-plate__letter" data-key="letter" aria-label="${l(s.letter)}"${a}><option value="">–</option>${S.map(e=>`<option value="${e}"${e===r.letter?` selected`:``}>${e===`ه`?`هـ`:e}</option>`).join(``)}</select>${o(`middle`,3,s.middle,`k-plate__seg--3`)}<span class="k-plate__region"><span class="k-plate__region-label" aria-hidden="true">ایران</span>${o(`region`,2,s.region)}</span></div><span class="k-sr-only" aria-live="polite"></span>`;this.querySelector(`:scope > .k-field`)?.remove(),this.insertAdjacentHTML(`afterbegin`,g({id:`${t}-first`,label:c,control:u}));let d=[...this.querySelectorAll(`[data-key]`)];d.forEach((t,r)=>{t.addEventListener(t instanceof HTMLSelectElement?`change`:`input`,()=>{let a=t.dataset.key;if(t instanceof HTMLSelectElement)this.plate.letter=t.value,t.value&&d[r+1]?.focus();else{let i=Number(t.dataset.len),o=n(t.value);a===`middle`&&o.length>i&&(this.plate.region=(this.plate.region+o.slice(i)).slice(0,2)),this.plate[a]=o.slice(0,i),t.value=e(this.plate[a]),this.plate[a].length===i&&d[r+1]?.focus()}this.paint(),i(this,`kashi-change`,{value:this.value,valid:this.valid})}),t.addEventListener(`keydown`,e=>{e.key===`Backspace`&&!t.value&&d[r-1]?.focus()})});let p=this.querySelector(`.k-plate`);p.addEventListener(`focusout`,e=>{p.contains(e.relatedTarget)||(this.touched=!0,this.paint())}),this.rendered=!0,this.paint()}paint(){let t=this.plate,n=this.querySelector(`.k-plate`),r=this.querySelector(`[data-key="region"]`);r.value!==e(t.region)&&(r.value=e(t.region)),n.dataset.type=w(t.letter);let i=t.first.length===2&&!!t.letter&&t.middle.length===3&&t.region.length===2,a=(this.touched||i)&&Object.values(t).some(Boolean)&&!this.valid,o=this.getAttribute(`error`)||(a?f().invalid.plate:null);n.toggleAttribute(`data-invalid`,!!o),s(this.querySelector(`:scope > .k-field`),n,this.key,o,this.getAttribute(`hint`)),this.querySelector(`.k-field > .k-sr-only`).textContent=this.valid?E(t):``;let c=this.getAttribute(`name`);if(this.querySelectorAll(`:scope > input[type=hidden]`).forEach(e=>e.remove()),c)for(let e of[`first`,`letter`,`middle`,`region`])this.insertAdjacentHTML(`beforeend`,`<input type="hidden" name="${l(`${c}_${e}`)}" value="${l(t[e])}">`)}};Y.observedAttributes=[`label`,`hint`,`error`,`name`,`disabled`,`value`];var X=class extends h{constructor(){super(...arguments),this.text=``,this.editing=!1,this.valueSet=!1,this.rendered=!1}connectedCallback(){!this.rendered&&!this.valueSet&&(this.text=this.getAttribute(`value`)??this.textContent?.trim()??``),this.render()}attributeChangedCallback(e,t,n){this.rendered&&t!==n&&(e===`value`&&(this.text=n??``),this.editing||this.render())}get value(){return this.text}set value(e){this.valueSet=!0,this.text=String(e??``),this.rendered&&!this.editing&&this.render()}render(e=!1){let t=this.getAttribute(`label`)??f().persianInput.text;this.rendered=!0,this.editing=!1,this.innerHTML=`<span class="k-inline-edit"><button type="button" class="k-inline-edit__view" aria-label="${l(`${t}: ${this.text||f().inlineEdit.empty}${f().common.list}${f().common.edit}`)}">${this.text?l(this.text):`<span class="k-inline-edit__placeholder">${l(this.getAttribute(`placeholder`)??f().inlineEdit.empty)}</span>`}<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m13.5 3.5 3 3L7 16H4v-3Z"/></svg></button></span>`;let n=this.querySelector(`button`);n.addEventListener(`click`,()=>this.edit()),e&&n.focus()}edit(e,t=this.text){this.editing=!0;let n=this.getAttribute(`label`)??f().persianInput.text,r=_(`kashi-ie-err`);this.innerHTML=`<span class="k-inline-edit"><span class="k-field" style="gap: 4px"><span class="k-input"${e?` data-state="invalid"`:``}><input class="k-input__control" aria-label="${l(n)}" placeholder="${l(this.getAttribute(`placeholder`)??``)}"${e?` aria-invalid="true" aria-describedby="${r}"`:``}></span>${e?`<span class="k-hint k-hint--error" id="${r}">${l(e)}</span>`:``}</span><span class="k-inline-edit__actions"><button type="button" class="k-btn k-btn--primary k-btn--icon k-btn--sm" data-save aria-label="${l(f().common.save)}">${M}</button><button type="button" class="k-btn k-btn--secondary k-btn--icon k-btn--sm" data-cancel aria-label="${l(f().common.cancel)}">${N}</button></span></span>`;let i=this.querySelector(`input`);i.value=t,i.focus(),i.select(),i.addEventListener(`keydown`,e=>{e.key===`Enter`?(e.preventDefault(),this.commit(i.value)):e.key===`Escape`&&(e.preventDefault(),this.render(!0))}),this.querySelector(`[data-save]`).addEventListener(`click`,()=>this.commit(i.value)),this.querySelector(`[data-cancel]`).addEventListener(`click`,()=>this.render(!0))}async commit(e){let t=e.trim(),n=this.validate?.(t);if(n)return this.edit(n,e);if(t===this.text)return this.render(!0);let r=this.text,a=null;if(i(this,`kashi-save`,{value:t,wait:e=>a=e}),this.text=t,a){this.querySelector(`[data-save]`)?.setAttribute(`aria-busy`,`true`);try{await a}catch{return this.text=r,this.edit(f().inlineEdit.failed,e)}}this.render(!0),i(this,`kashi-change`,{value:t})}};X.observedAttributes=[`value`,`label`,`placeholder`],d(`kashi-multi-select`,I,`block`),d(`kashi-slider`,L,`block`),d(`kashi-chip-group`,R),d(`kashi-password-strength`,B,`block`),d(`kashi-persian-textarea`,U,`block`),d(`kashi-keyboard-fix`,W,`block`),d(`kashi-time-input`,q,`block`),d(`kashi-plate-input`,Y,`block`),d(`kashi-inline-edit`,X);export{R as KashiChipGroup,X as KashiInlineEdit,W as KashiKeyboardFix,I as KashiMultiSelect,B as KashiPasswordStrength,U as KashiPersianTextarea,Y as KashiPlateInput,L as KashiSlider,q as KashiTimeInput};
@@ -0,0 +1 @@
1
+ import{E as e}from"./base-DTQ50VdG.js";const t={"1-1":`عید نوروز`,"1-2":`عید نوروز`,"1-3":`عید نوروز`,"1-4":`عید نوروز`,"1-12":`روز جمهوری اسلامی`,"1-13":`روز طبیعت`,"3-14":`رحلت امام خمینی`,"3-15":`قیام ۱۵ خرداد`,"11-22":`پیروزی انقلاب اسلامی`,"12-29":`ملی شدن صنعت نفت`},n={"1-1":`Nowruz`,"1-2":`Nowruz`,"1-3":`Nowruz`,"1-4":`Nowruz`,"1-12":`Islamic Republic Day`,"1-13":`Nature Day`,"3-14":`Death of Imam Khomeini`,"3-15":`15 Khordad Uprising`,"11-22":`Islamic Revolution Victory Day`,"12-29":`Oil Nationalization Day`};function r(r,{extra:i={},friday:a=!0,locale:o=`fa`}={}){let{jm:s,jd:c}=e(r),l=`${r.getFullYear()}-${String(r.getMonth()+1).padStart(2,`0`)}-${String(r.getDate()).padStart(2,`0`)}`,u=(o===`en`?n:t)[`${s}-${c}`];return i[l]??i[`${s}-${c}`]??u??(a&&r.getDay()===5?o===`en`?`Friday`:`جمعه`:null)}export{r as t};