@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
@@ -1 +0,0 @@
1
- import{a as e,d as t,i as n,o as r,r as i,s as a,t as o}from"./base-DfzNTdQk.js";import{i as s}from"./digits-DE1YGT94.js";import{n as c}from"./text-D1U32D6K.js";const l=e=>c(e,{digits:`latin`}).toLowerCase(),u=e=>[...e.querySelectorAll(`[role^="menuitem"]:not([aria-disabled="true"])`)];var d=class extends o{constructor(){super(...arguments),this.list=null,this.dialog=null,this.query=``,this.active=0,this.opener=null,this.key=t(`kashi-cmd`),this.onShortcut=e=>{this.getAttribute(`shortcut`)!==`false`&&(e.ctrlKey||e.metaKey)&&(e.key===`k`||e.key===`K`||e.code===`KeyK`)&&(e.preventDefault(),this.dialog?.open?this.close():this.show())}}connectedCallback(){i(()=>{this.isConnected&&(this.list===null&&(this.list=this.readItems()),this.dialog||this.build(),document.addEventListener(`keydown`,this.onShortcut))})}disconnectedCallback(){document.removeEventListener(`keydown`,this.onShortcut)}get items(){return this.list??[]}set items(e){this.list=[...e],this.dialog?.open&&this.paint()}readItems(){let e=[...this.querySelectorAll(`:scope > a, :scope > button`)].map((e,t)=>({id:e.dataset.value??`${t}`,label:e.textContent?.trim()??``,group:e.dataset.group,description:e.dataset.description,shortcut:e.dataset.shortcut,keywords:e.dataset.keywords?.split(/[,،]\s*/),href:e instanceof HTMLAnchorElement?e.getAttribute(`href`)??void 0:void 0}));return this.querySelectorAll(`:scope > a, :scope > button`).forEach(e=>e.remove()),e}build(){let e=document.createElement(`dialog`);e.className=`k-dialog k-command`;let t=this.getAttribute(`label`)??`پالت فرمان`;e.setAttribute(`aria-label`,t),e.innerHTML=`<div class="k-input"><span class="k-input__addon"><svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" aria-hidden="true"><circle cx="9" cy="9" r="5.5"/><path d="m13.5 13.5 3 3"/></svg></span><input class="k-input__control" type="text" role="combobox" aria-expanded="true" aria-controls="${this.key}-list" aria-autocomplete="list" aria-label="${a(t)}" placeholder="${a(this.getAttribute(`placeholder`)??`جستجوی دستور یا صفحه…`)}" autocomplete="off"></div><ul id="${this.key}-list" role="listbox" aria-label="${a(t)}" class="k-listbox k-listbox--inline k-command__list"></ul><div class="k-command__footer" aria-hidden="true"><span><kbd class="k-kbd">↑</kbd><kbd class="k-kbd">↓</kbd>حرکت</span><span><kbd class="k-kbd">Enter</kbd>انتخاب</span><span><kbd class="k-kbd">Esc</kbd>بستن</span></div><span class="k-sr-only" aria-live="polite"></span>`,this.append(e),this.dialog=e;let n=e.querySelector(`input`);n.addEventListener(`input`,()=>{this.query=n.value,this.active=0,this.paint()}),n.addEventListener(`keydown`,e=>{let t=this.filtered().length;if(t){if(e.key===`ArrowDown`)this.active=(this.active+1)%t;else if(e.key===`ArrowUp`)this.active=(this.active-1+t)%t;else if(e.key===`Home`)this.active=0;else if(e.key===`End`)this.active=t-1;else if(e.key===`Enter`)return this.run(this.filtered()[this.active]);else return;e.preventDefault(),this.paint()}});let r=e.querySelector(`ul`);r.addEventListener(`pointerdown`,e=>e.preventDefault()),r.addEventListener(`click`,e=>{let t=e.target.closest(`[role="option"]`);t&&this.run(this.filtered()[Number(t.dataset.i)])}),e.addEventListener(`click`,t=>t.target===e&&this.close()),e.addEventListener(`close`,()=>this.opener?.focus?.())}filtered(){let e=l(this.query.trim());return this.items.filter(t=>!e||[t.label,t.description??``,...t.keywords??[]].some(t=>l(t).includes(e)))}show(){this.dialog&&(this.opener=document.activeElement,this.query=``,this.active=0,this.dialog.querySelector(`input`).value=``,this.dialog.showModal?.(),this.paint(),this.dialog.querySelector(`input`).focus())}close(){this.dialog?.open&&this.dialog.close()}run(e){e&&(this.close(),e.href?location.href=e.href:r(this,`kashi-select`,{value:e.id,item:e}))}paint(){let e=this.dialog,t=this.filtered(),n=l(this.query.trim()),r=e=>{let t=n?l(e).indexOf(n):-1;return t<0?a(e):`${a(e.slice(0,t))}<mark>${a(e.slice(t,t+n.length))}</mark>${a(e.slice(t+n.length))}`},i;e.querySelector(`ul`).innerHTML=t.length?t.map((e,t)=>{let n=e.group&&e.group!==i?`<li role="presentation" class="k-listbox__group">${a(e.group)}</li>`:``;return i=e.group,`${n}<li id="${this.key}-list-${t}" data-i="${t}" role="option" aria-selected="${t===this.active}"${t===this.active?` data-active`:``} class="k-option"><span class="k-option__body"><span>${r(e.label)}</span>${e.description?`<span class="k-option__desc">${a(e.description)}</span>`:``}</span>${e.shortcut?`<span class="k-menu__shortcut" aria-hidden="true">${a(e.shortcut)}</span>`:``}</li>`}).join(``):`<li role="presentation" class="k-listbox__empty">دستوری پیدا نشد.</li>`;let o=e.querySelector(`input`);t.length?o.setAttribute(`aria-activedescendant`,`${this.key}-list-${this.active}`):o.removeAttribute(`aria-activedescendant`),e.querySelector(`#${this.key}-list-${this.active}`)?.scrollIntoView?.({block:`nearest`}),e.querySelector(`:scope > .k-sr-only`).textContent=this.query?`${s(t.length)} نتیجه`:``}};d.observedAttributes=[`placeholder`,`label`,`shortcut`];var f=class extends o{constructor(){super(...arguments),this.menu=null,this.returnTo=null,this.key=t(`kashi-ctx`),this.onOutside=e=>{this.menu?.contains(e.target)||this.close(!1)},this.onScroll=()=>this.close(!1)}connectedCallback(){i(()=>this.isConnected&&!this.menu&&this.build())}disconnectedCallback(){document.removeEventListener(`pointerdown`,this.onOutside)}build(){let e=this.querySelector(`:scope > [data-menu]`);this.classList.add(`k-context-area`),this.setAttribute(`aria-haspopup`,`menu`),this.setAttribute(`aria-describedby`,`${this.key}-hint`);let t=document.createElement(`ul`);t.setAttribute(`role`,`menu`),t.setAttribute(`aria-label`,this.getAttribute(`label`)??`گزینه‌ها`),t.className=`k-menu k-menu--context`,t.hidden=!0;for(let n of[...e?.children??[]]){let e=document.createElement(`li`);n.tagName===`HR`?(e.setAttribute(`role`,`separator`),e.className=`k-menu__separator`):n.hasAttribute(`data-label`)?(e.setAttribute(`role`,`presentation`),e.className=`k-menu__label`,e.textContent=n.textContent):(e.setAttribute(`role`,`none`),n.setAttribute(`role`,`menuitem`),n.tabIndex=-1,n.classList.add(`k-menu__item`),n.dataset.tone===`danger`&&n.classList.add(`k-menu__item--danger`),n instanceof HTMLButtonElement&&(n.type=`button`),n.innerHTML=`<span>${n.innerHTML}</span>${n.dataset.shortcut?`<span class="k-menu__shortcut" aria-hidden="true">${a(n.dataset.shortcut)}</span>`:``}`,e.append(n)),t.append(e)}e?.remove(),this.insertAdjacentHTML(`beforeend`,`<span id="${this.key}-hint" class="k-sr-only">برای گزینه‌ها راست‌کلیک کنید یا Shift+F10 را بزنید.</span>`),this.append(t),this.menu=t,this.addEventListener(`contextmenu`,e=>{t.contains(e.target)||(e.preventDefault(),this.openAt(e.clientX,e.clientY))}),this.addEventListener(`keydown`,e=>{if(t.contains(e.target))return this.onMenuKey(e);if(e.key===`ContextMenu`||e.shiftKey&&e.key===`F10`){e.preventDefault();let t=document.activeElement.getBoundingClientRect();this.openAt(t.left+t.width/2,t.top+t.height/2)}}),t.addEventListener(`click`,e=>{let t=e.target.closest(`[role="menuitem"]`);t&&(r(this,`kashi-select`,{value:t.dataset.value??t.textContent?.trim()??``}),this.close(t.tagName!==`A`))})}openAt(e,t){let n=this.menu;this.returnTo=document.activeElement??this,n.hidden=!1;let r=n;r.showPopover&&(n.hasAttribute(`popover`)||n.setAttribute(`popover`,`manual`),n.matches(`:popover-open`)||r.showPopover());let i=n.getBoundingClientRect(),a=getComputedStyle(this).direction===`rtl`,o=a?e-i.width:e;o<8&&(o=a?e:8),o=Math.max(8,Math.min(o,innerWidth-i.width-8));let s=Math.max(8,Math.min(t+i.height>innerHeight-8?t-i.height:t,innerHeight-i.height-8));n.style.setProperty(`--_x`,`${o}px`),n.style.setProperty(`--_y`,`${s}px`),u(n)[0]?.focus({preventScroll:!0}),document.addEventListener(`pointerdown`,this.onOutside),setTimeout(()=>addEventListener(`scroll`,this.onScroll,{passive:!0,once:!0}),150)}close(e=!0){let t=this.menu;if(!t||t.hidden)return;let n=t;t.matches?.(`:popover-open`)&&n.hidePopover?.(),t.hidden=!0,document.removeEventListener(`pointerdown`,this.onOutside),removeEventListener(`scroll`,this.onScroll),e&&this.returnTo?.focus()}onMenuKey(e){let t=u(this.menu),n=t.indexOf(document.activeElement),r=e=>t[(e+t.length)%t.length]?.focus();if(e.key===`ArrowDown`)r(n+1);else if(e.key===`ArrowUp`)r(n-1);else if(e.key===`Home`)r(0);else if(e.key===`End`)r(t.length-1);else if(e.key===`Escape`)this.close();else if(e.key===`Tab`)return this.close(!1);else return;e.preventDefault()}};f.observedAttributes=[`label`];const p=e=>`<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-k-mirror=""><path d="${e?`m8 5 5 5-5 5`:`m12 5-5 5 5 5`}"/></svg>`;var m=class extends o{constructor(){super(...arguments),this.track=null,this.index=0,this.io=null,this.key=t(`kashi-carousel`)}connectedCallback(){i(()=>this.isConnected&&!this.track&&this.build())}disconnectedCallback(){this.io?.disconnect()}get perView(){return Math.max(1,Number(this.getAttribute(`per-view`))||1)}get slides(){return[...this.track?.children??[]]}get pages(){return Math.max(1,this.slides.length-this.perView+1)}build(){let e=this.getAttribute(`label`)??`اسلایدر`,t=[...this.children],n=document.createElement(`section`);n.className=`k-carousel`,n.setAttribute(`aria-roledescription`,`اسلایدر`),n.setAttribute(`aria-label`,e),n.style.setProperty(`--k-carousel-per-view`,String(this.perView));let r=document.createElement(`div`);if(r.className=`k-carousel__track`,r.tabIndex=0,r.setAttribute(`aria-live`,`polite`),t.forEach((e,n)=>{let i=document.createElement(`div`);i.className=`k-carousel__slide`,i.setAttribute(`role`,`group`),i.setAttribute(`aria-roledescription`,`اسلاید`),i.setAttribute(`aria-label`,`${s(n+1)} از ${s(t.length)}`),i.id=`${this.key}-s${n}`,i.append(e),r.append(i)}),n.append(r),this.replaceChildren(n),this.track=r,this.pages>1){let t=this.getAttribute(`dots`)!==`false`;n.insertAdjacentHTML(`beforeend`,`<div class="k-carousel__bar">${t?`<ul class="k-carousel__dots" aria-label="اسلایدهای ${a(e)}">${Array.from({length:this.pages},(e,t)=>`<li><button type="button" class="k-carousel__dot" data-go="${t}" aria-label="${s(t+1)} از ${s(this.pages)}" aria-controls="${this.key}-s${t}"></button></li>`).join(``)}</ul>`:`<span></span>`}<div class="k-carousel__nav"><button type="button" class="k-btn k-btn--secondary k-btn--icon k-btn--sm" data-step="-1" aria-label="قبلی">${p(!1)}</button><button type="button" class="k-btn k-btn--secondary k-btn--icon k-btn--sm" data-step="1" aria-label="بعدی">${p(!0)}</button></div></div>`),n.querySelector(`.k-carousel__bar`).addEventListener(`click`,e=>{let t=e.target.closest(`button`);t&&this.go(t.dataset.go===void 0?this.index+Number(t.dataset.step):Number(t.dataset.go))})}r.addEventListener(`keydown`,e=>{let t=getComputedStyle(r).direction===`rtl`,n={ArrowLeft:t?1:-1,ArrowRight:t?-1:1}[e.key];n?(e.preventDefault(),this.go(this.index+n)):e.key===`Home`?this.go(0):e.key===`End`&&this.go(this.pages-1)}),typeof IntersectionObserver<`u`&&(this.io=new IntersectionObserver(e=>{let t=e.filter(e=>e.isIntersecting&&e.intersectionRatio>.6).map(e=>this.slides.indexOf(e.target));t.length&&this.setIndex(Math.min(...t))},{root:r,threshold:[.6,1]}),this.slides.forEach(e=>this.io.observe(e))),this.setIndex(0)}go(e){let t=Math.max(0,Math.min(this.pages-1,e)),n=this.slides[t],r=this.track;if(!n||!r)return;let i=getComputedStyle(r).direction===`rtl`?-(r.getBoundingClientRect().right-n.getBoundingClientRect().right)+r.scrollLeft:n.getBoundingClientRect().left-r.getBoundingClientRect().left+r.scrollLeft;r.scrollTo?.({left:i}),this.setIndex(t)}setIndex(e){let t=e!==this.index;this.index=e,this.querySelectorAll(`.k-carousel__dot`).forEach((t,n)=>t.setAttribute(`aria-current`,String(n===e)));let[n,i]=this.querySelectorAll(`[data-step]`);n&&(n.disabled=e===0),i&&(i.disabled=e>=this.pages-1),t&&r(this,`kashi-change`,{index:e})}};m.observedAttributes=[`label`,`per-view`,`dots`];var h=class extends o{constructor(){super(...arguments),this.nodes=null,this.open=/* @__PURE__ */ new Set,this.sel=null,this.focusId=null,this.built=!1}connectedCallback(){i(()=>{if(this.isConnected){if(this.nodes===null){let e=this.querySelector(`:scope > ul`);this.nodes=e?this.parse(e):[]}if(!this.built){this.sel=this.getAttribute(`selected`);for(let e of(this.getAttribute(`expanded`)??``).split(/[,،]/).map(e=>e.trim()).filter(Boolean))this.open.add(e);this.built=!0}this.render()}})}attributeChangedCallback(e,t,n){this.built&&t!==n&&(e===`selected`&&(this.sel=n),this.render())}get items(){return this.nodes??[]}set items(e){this.nodes=e,this.built&&this.render()}get value(){return this.sel??``}parse(e){return[...e.children].filter(e=>e.tagName===`LI`).map((e,t)=>{let n=e.querySelector(`:scope > ul`),r=[...e.childNodes].filter(e=>e!==n).map(e=>e.textContent).join(``).trim(),i=e;return{id:i.dataset.id??`${r}-${t}`,label:r,meta:i.dataset.meta,disabled:i.hasAttribute(`data-disabled`),children:n?this.parse(n):void 0}})}visible(){let e=[],t=(n,r)=>{for(let i of n)e.push({node:i,parent:r}),i.children?.length&&this.open.has(i.id)&&t(i.children,i.id)};return t(this.items,null),e}render(e=!1){let t=this.visible(),n=this.focusId&&t.some(e=>e.node.id===this.focusId)?this.focusId:this.sel&&t.some(e=>e.node.id===this.sel)?this.sel:t[0]?.node.id,r=(e,t)=>e.map(e=>{let i=!!e.children?.length,o=this.open.has(e.id);return`<li role="treeitem" data-id="${a(e.id)}" class="k-tree__item" aria-level="${t}"${i?` aria-expanded="${o}"`:``} aria-selected="${this.sel===e.id}"${e.disabled?` aria-disabled="true"`:``} tabindex="${n===e.id?0:-1}"><div class="k-tree__row">${i?`<span class="k-tree__toggle" aria-hidden="true"><svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m8 5 5 5-5 5"/></svg></span>`:`<span class="k-tree__spacer"></span>`}<span class="k-tree__label">${a(e.label)}</span>${e.meta?`<span class="k-tree__meta">${a(e.meta)}</span>`:``}</div>${i&&o?`<ul role="group">${r(e.children,t+1)}</ul>`:``}</li>`}).join(``);this.innerHTML=`<ul role="tree" class="k-tree"${this.getAttribute(`label`)?` aria-label="${a(this.getAttribute(`label`))}"`:``}>${r(this.items,1)}</ul>`;let i=this.querySelector(`ul`);i.addEventListener(`click`,e=>{let t=e.target.closest(`[role="treeitem"]`);if(!t||!e.target.closest(`.k-tree__row`))return;let n=this.find(t.dataset.id);n&&(n.children?.length&&this.toggle(n.id),this.focusId=n.id,this.choose(n))}),i.addEventListener(`keydown`,e=>this.onKey(e)),e&&n&&[...this.querySelectorAll(`[data-id]`)].find(e=>e.dataset.id===n)?.focus()}find(e,t=this.items){for(let n of t){if(n.id===e)return n;let t=n.children&&this.find(e,n.children);if(t)return t}return null}toggle(e,t=!this.open.has(e)){t?this.open.add(e):this.open.delete(e),r(this,`kashi-expand`,{expanded:[...this.open]})}choose(e){e.disabled||(this.sel=e.id,r(this,`kashi-change`,{value:e.id,node:e})),this.render(!0)}onKey(e){let t=this.visible(),n=document.activeElement?.dataset?.id,r=t.findIndex(e=>e.node.id===n),i=t[r];if(!i)return;let a=getComputedStyle(this).direction===`rtl`,o=!!i.node.children?.length,s=this.open.has(i.node.id),c=e=>{this.focusId=e,this.render(!0)};if(e.key===`ArrowDown`)t[r+1]&&c(t[r+1].node.id);else if(e.key===`ArrowUp`)t[r-1]&&c(t[r-1].node.id);else if(e.key===`Home`)c(t[0].node.id);else if(e.key===`End`)c(t[t.length-1].node.id);else if(e.key===(a?`ArrowLeft`:`ArrowRight`))o&&!s?(this.toggle(i.node.id,!0),c(i.node.id)):o&&c(i.node.children[0].id);else if(e.key===(a?`ArrowRight`:`ArrowLeft`))o&&s?(this.toggle(i.node.id,!1),c(i.node.id)):i.parent&&c(i.parent);else if(e.key===`Enter`||e.key===` `)this.focusId=i.node.id,this.choose(i.node);else return;e.preventDefault()}};h.observedAttributes=[`label`,`selected`,`expanded`];var g=class extends o{constructor(){super(...arguments),this.list=null,this.i=0,this.spot=null,this.card=null,this.returnTo=null,this.key=t(`kashi-tour`),this.place=()=>{let e=this.card;if(!e)return;let t=document.querySelector(this.steps[this.i].target)?.getBoundingClientRect()??null;t?(this.spot||(this.spot=document.createElement(`div`),this.spot.className=`k-tour__spot`,this.spot.setAttribute(`aria-hidden`,`true`),document.body.append(this.spot)),Object.assign(this.spot.style,{top:`${t.top-6}px`,left:`${t.left-6}px`,inlineSize:`${t.width+12}px`,blockSize:`${t.height+12}px`})):(this.spot?.remove(),this.spot=null);let n=e.getBoundingClientRect();if(!t){Object.assign(e.style,{top:`${innerHeight/2-n.height/2}px`,left:`${innerWidth/2-n.width/2}px`});return}let r=t.bottom+12+n.height<innerHeight?t.bottom+12:Math.max(12,t.top-12-n.height),i=Math.min(innerWidth-n.width-12,Math.max(12,t.left+t.width/2-n.width/2));Object.assign(e.style,{top:`${r}px`,left:`${i}px`})}}connectedCallback(){i(()=>{this.isConnected&&this.list===null&&(this.list=[...this.querySelectorAll(`:scope > [data-target]`)].map(e=>({target:e.dataset.target,title:e.dataset.title??``,content:e.textContent?.trim()??``})),this.replaceChildren())})}disconnectedCallback(){this.stop(!1)}get steps(){return this.list??[]}set steps(e){this.list=[...e]}start(){this.steps.length&&(this.returnTo=document.activeElement,this.i=0,addEventListener(`scroll`,this.place,{passive:!0}),addEventListener(`resize`,this.place),this.show())}stop(e=!0){this.spot?.remove(),this.card?.remove(),this.spot=this.card=null,removeEventListener(`scroll`,this.place),removeEventListener(`resize`,this.place),e&&this.returnTo?.focus?.()}show(){let e=this.steps[this.i],t=this.steps.length,n=this.i===t-1;this.card||(this.card=document.createElement(`div`),this.card.className=`k-tour__card`,this.card.setAttribute(`role`,`dialog`),this.card.setAttribute(`aria-modal`,`false`),this.card.setAttribute(`aria-labelledby`,`${this.key}-t`),this.card.setAttribute(`aria-describedby`,`${this.key}-b`),this.card.tabIndex=-1,this.card.addEventListener(`click`,e=>{let t=e.target.closest(`[data-act]`);if(!t)return;let n=t.dataset.act;n===`skip`?this.stop():n===`prev`?this.step(-1):n===`next`?this.step(1):n===`done`&&(this.stop(),r(this,`kashi-finish`,{}))}),this.card.addEventListener(`keydown`,e=>{let t=getComputedStyle(this.card).direction===`rtl`;e.key===`Escape`?this.stop():e.key===(t?`ArrowLeft`:`ArrowRight`)&&this.i<this.steps.length-1?this.step(1):e.key===(t?`ArrowRight`:`ArrowLeft`)&&this.i>0&&this.step(-1)}),document.body.append(this.card)),this.card.innerHTML=`<span class="k-tour__step">مرحلهٔ ${s(this.i+1)} از ${s(t)}</span><p class="k-tour__title" id="${this.key}-t">${a(e.title)}</p><p class="k-tour__body" id="${this.key}-b">${a(e.content)}</p><div class="k-tour__actions"><button type="button" class="k-btn k-btn--link k-tour__skip" data-act="skip">رد کردن</button><span class="k-tour__progress" aria-hidden="true">${this.steps.map((e,t)=>`<span${t<=this.i?` data-on=""`:``}></span>`).join(``)}</span>${this.i>0?`<button type="button" class="k-btn k-btn--secondary k-btn--sm" data-act="prev">قبلی</button>`:``}<button type="button" class="k-btn k-btn--primary k-btn--sm" data-act="${n?`done`:`next`}">${n?`تمام`:`بعدی`}</button></div>`;let i=document.querySelector(e.target),o=typeof matchMedia==`function`&&matchMedia(`(prefers-reduced-motion: reduce)`).matches;i?.scrollIntoView?.({block:`center`,behavior:o?`auto`:`smooth`}),this.place(),setTimeout(this.place,400),this.card.focus({preventScroll:!0})}step(e){this.i=Math.max(0,Math.min(this.steps.length-1,this.i+e)),this.show()}},_=class extends o{constructor(){super(...arguments),this.current=40,this.built=!1,this.dragging=!1}connectedCallback(){i(()=>{this.isConnected&&!this.built&&(this.current=this.num(`size`,40),this.build())})}attributeChangedCallback(e,t,n){this.built&&t!==n&&(e===`size`?this.set(Number(n)||40,!1):this.decorate())}get value(){return this.current}set value(e){this.set(e,!1)}num(e,t){let n=Number(this.getAttribute(e));return Number.isFinite(n)&&this.getAttribute(e)!==null?n:t}get vertical(){return this.getAttribute(`orientation`)===`vertical`}build(){let[e,t]=[...this.children],n=document.createElement(`div`),r=document.createElement(`div`);r.className=`k-splitter__pane`,e&&r.append(e);let i=document.createElement(`div`);i.className=`k-splitter__handle`,i.setAttribute(`role`,`separator`),i.tabIndex=0;let a=document.createElement(`div`);a.className=`k-splitter__pane`,t&&a.append(t),n.append(r,i,a),this.replaceChildren(n),this.built=!0,i.addEventListener(`pointerdown`,e=>{i.setPointerCapture?.(e.pointerId),this.dragging=!0,n.toggleAttribute(`data-dragging`,!0),i.toggleAttribute(`data-dragging`,!0)}),i.addEventListener(`pointermove`,e=>{if(!this.dragging)return;let t=n.getBoundingClientRect();if(this.vertical)return this.set((e.clientY-t.top)/t.height*100);let r=getComputedStyle(n).direction===`rtl`;this.set((r?t.right-e.clientX:e.clientX-t.left)/t.width*100)});let o=()=>{this.dragging=!1,n.removeAttribute(`data-dragging`),i.removeAttribute(`data-dragging`)};i.addEventListener(`pointerup`,o),i.addEventListener(`pointercancel`,o),i.addEventListener(`dblclick`,()=>this.set(this.num(`size`,40))),i.addEventListener(`keydown`,e=>{let t=getComputedStyle(i).direction===`rtl`,n=this.vertical?{ArrowUp:-5,ArrowDown:5}:{ArrowLeft:t?5:-5,ArrowRight:t?-5:5};if(e.key in n)this.set(this.current+n[e.key]);else if(e.key===`Home`)this.set(this.num(`min`,15));else if(e.key===`End`)this.set(this.num(`max`,85));else return;e.preventDefault()}),this.decorate()}decorate(){let e=this.firstElementChild;e.className=`k-splitter${this.vertical?` k-splitter--vertical`:``}`;let t=this.getAttribute(`height`);e.style.blockSize=t??``;let n=e.querySelector(`.k-splitter__handle`);n.setAttribute(`aria-orientation`,this.vertical?`horizontal`:`vertical`),n.setAttribute(`aria-valuemin`,String(this.num(`min`,15))),n.setAttribute(`aria-valuemax`,String(this.num(`max`,85))),n.setAttribute(`aria-label`,this.getAttribute(`label`)??`تغییر اندازهٔ پنل‌ها`),this.paint()}set(e,t=!0){let n=Math.round(Math.min(this.num(`max`,85),Math.max(this.num(`min`,15),e))*10)/10,i=n!==this.current;this.current=n,this.built&&this.paint(),t&&i&&r(this,`kashi-change`,{value:n})}paint(){let e=this.firstElementChild,t=e.querySelector(`.k-splitter__pane`);t.style.inlineSize=this.vertical?``:`${this.current}%`,t.style.blockSize=this.vertical?`${this.current}%`:``;let n=e.querySelector(`.k-splitter__handle`);n.setAttribute(`aria-valuenow`,String(this.current)),n.setAttribute(`aria-valuetext`,`${s(Math.round(this.current))}٪`)}};_.observedAttributes=[`size`,`min`,`max`,`orientation`,`label`,`height`];var v=class extends o{constructor(){super(...arguments),this.built=!1}connectedCallback(){i(()=>{this.isConnected&&!this.built&&(this.built=!0,this.addEventListener(`click`,e=>{let t=e.target.closest(`button[aria-controls][aria-expanded]`);if(!t||!this.contains(t))return;let n=document.getElementById(t.getAttribute(`aria-controls`)),i=t.getAttribute(`aria-expanded`)!==`true`;t.setAttribute(`aria-expanded`,String(i)),n&&(n.hidden=!i),r(this,`kashi-toggle`,{id:n?.id??``,open:i})}),this.decorate())})}attributeChangedCallback(){this.built&&this.decorate()}decorate(){let e=this.querySelector(`.k-sidenav`),t=n(this,`collapsed`);e?.classList.toggle(`k-sidenav--collapsed`,t),this.querySelectorAll(`.k-sidenav__item`).forEach(e=>{let n=e.querySelector(`.k-sidenav__text`)?.textContent?.trim();n&&(t?(e.setAttribute(`aria-label`,n),e.setAttribute(`title`,n)):(e.removeAttribute(`aria-label`),e.removeAttribute(`title`)))})}};v.observedAttributes=[`collapsed`],typeof document<`u`&&document.addEventListener(`click`,e=>{let t=e.target,n=t?.closest?.(`[data-kashi-tour]`),r=n?document.getElementById(n.getAttribute(`data-kashi-tour`)):null;r?.start&&r.start();let i=t?.closest?.(`[data-kashi-command]`),a=i?document.getElementById(i.getAttribute(`data-kashi-command`)):null;a?.show&&a.show()}),e(`kashi-command-palette`,d,`contents`),e(`kashi-context-menu`,f,`block`),e(`kashi-carousel`,m,`block`),e(`kashi-tree-view`,h,`block`),e(`kashi-tour`,g,`contents`),e(`kashi-splitter`,_,`block`),e(`kashi-side-nav`,v,`block`);export{m as KashiCarousel,d as KashiCommandPalette,f as KashiContextMenu,v as KashiSideNav,_ as KashiSplitter,g as KashiTour,h as KashiTreeView};
@@ -1 +0,0 @@
1
- import{a as e,d as t,i as n,n as r,o as i,r as a,s as o,t as s}from"./base-DfzNTdQk.js";var c=class extends s{constructor(){super(...arguments),this.dialog=null,this.opener=null,this.key=t(`kashi-dialog`)}connectedCallback(){a(()=>{this.isConnected&&(this.dialog||this.build(),this.sync())})}attributeChangedCallback(e,t,n){this.dialog&&t!==n&&(e===`open`?this.sync():this.decorate())}get open(){return this.hasAttribute(`open`)}set open(e){this.toggleAttribute(`open`,!!e)}show(){this.open=!0}close(e){this.dialog?.open?this.dialog.close(e):this.open=!1}build(){let e=[...this.children].filter(e=>e.getAttribute(`slot`)===`footer`),t=[...this.childNodes].filter(t=>!e.includes(t)),a=document.createElement(`dialog`);if(a.setAttribute(`aria-labelledby`,`${this.key}-title`),a.innerHTML=`<div class="k-dialog__header"><div class="k-dialog__heading"><h2 class="k-dialog__title" id="${this.key}-title"></h2><p class="k-dialog__description" id="${this.key}-desc"></p></div><button type="button" class="k-btn k-btn--tertiary k-btn--icon k-btn--sm k-dialog__close">${r.close}</button></div>`,t.some(e=>e.nodeType===1||e.textContent?.trim())){let e=document.createElement(`div`);e.className=`k-dialog__body`,e.append(...t),a.append(e)}if(e.length){let t=document.createElement(`div`);t.className=`k-dialog__footer`;for(let n of e)n.removeAttribute(`slot`),t.append(n);a.append(t)}this.replaceChildren(a),this.dialog=a,a.querySelector(`.k-dialog__close`).addEventListener(`click`,()=>this.close()),a.addEventListener(`click`,e=>{e.target===a&&n(this,`dismissible`,!0)&&this.close();let t=e.target.closest(`[data-kashi-close]`);t&&a.contains(t)&&this.close(t.getAttribute(`data-kashi-close`)||void 0)}),a.addEventListener(`close`,()=>{this.removeAttribute(`open`),this.opener?.focus?.(),i(this,`kashi-close`,{returnValue:a.returnValue})}),this.decorate()}decorate(){let e=this.dialog,t=this.getAttribute(`size`)??`md`,n=this.getAttribute(`placement`)??`center`;e.className=[`k-dialog`,t!==`md`&&`k-dialog--${t}`,n!==`center`&&`k-dialog--${n}`,this.getAttribute(`tone`)===`danger`&&`k-dialog--danger`].filter(Boolean).join(` `),e.dataset.placement=n,e.querySelector(`.k-dialog__title`).textContent=this.getAttribute(`heading`)??``;let r=e.querySelector(`.k-dialog__description`),i=this.getAttribute(`description`);r.textContent=i??``,r.hidden=!i,i?e.setAttribute(`aria-describedby`,r.id):e.removeAttribute(`aria-describedby`),e.querySelector(`.k-dialog__close`).setAttribute(`aria-label`,this.getAttribute(`close-label`)??`بستن`)}sync(){let e=this.dialog;e&&this.isConnected&&(this.open&&!e.open?(this.opener=document.activeElement,e.showModal?.(),i(this,`kashi-open`,{})):!this.open&&e.open&&e.close())}};c.observedAttributes=[`open`,`heading`,`description`,`tone`,`size`,`placement`,`close-label`];var l=class extends s{constructor(){super(...arguments),this.list=null,this.key=t(`kashi-tabs`),this.ro=null}connectedCallback(){a(()=>this.isConnected&&this.setup())}setup(){this.list||this.build(),this.decorate(),this.select(this.getAttribute(`value`)??this.panels[0]?.dataset.value??``,!1),typeof ResizeObserver<`u`&&!this.ro&&(this.ro=new ResizeObserver(()=>this.measure()),this.ro.observe(this.list))}disconnectedCallback(){this.ro?.disconnect(),this.ro=null}attributeChangedCallback(e,t,n){this.list&&t!==n&&(e===`value`?this.select(n??``,!1):this.decorate())}get value(){return this.getAttribute(`value`)??``}set value(e){this.setAttribute(`value`,e)}get panels(){return[...this.children].filter(e=>e instanceof HTMLElement&&e.hasAttribute(`data-tab`))}build(){let e=document.createElement(`div`);e.setAttribute(`role`,`tablist`),e.className=`k-tabs__list`,this.panels.forEach((t,n)=>{let r=t.dataset.value||String(n+1);t.dataset.value=r;let i=document.createElement(`button`);i.type=`button`,i.setAttribute(`role`,`tab`),i.className=`k-tabs__tab`,i.id=`${this.key}-tab-${n}`,i.dataset.value=r,i.textContent=t.dataset.tab??``,t.hasAttribute(`data-disabled`)&&(i.disabled=!0),t.id||=`${this.key}-panel-${n}`,i.setAttribute(`aria-controls`,t.id),t.setAttribute(`role`,`tabpanel`),t.setAttribute(`aria-labelledby`,i.id),t.tabIndex=0,t.classList.add(`k-tabs__panel`),e.append(i)});let t=document.createElement(`span`);t.className=`k-tabs__indicator`,t.setAttribute(`aria-hidden`,`true`),e.append(t),e.addEventListener(`click`,e=>{let t=e.target.closest(`[role="tab"]`);t&&!t.disabled&&this.select(t.dataset.value,!0)}),e.addEventListener(`keydown`,e=>this.onKey(e)),this.prepend(e),this.list=e}decorate(){let e=this.getAttribute(`variant`)??`line`,t=this.getAttribute(`orientation`)===`vertical`;for(let e of[...this.classList])e.startsWith(`k-tabs`)&&this.classList.remove(e);this.classList.add(`k-tabs`,`k-tabs--${e}`),n(this,`block`)&&this.classList.add(`k-tabs--block`),t&&this.classList.add(`k-tabs--vertical`),this.getAttribute(`size`)===`sm`&&this.classList.add(`k-tabs--sm`),this.dataset.orientation=t?`vertical`:`horizontal`,this.list.setAttribute(`aria-orientation`,t?`vertical`:`horizontal`);let r=this.getAttribute(`label`);r&&this.list.setAttribute(`aria-label`,r),this.measure()}select(e,t){let n=[...this.list.querySelectorAll(`[role="tab"]`)];n.some(t=>t.dataset.value===e)||(e=n[0]?.dataset.value??``);for(let t of n){let n=t.dataset.value===e;t.setAttribute(`aria-selected`,String(n)),t.tabIndex=n?0:-1}for(let t of this.panels)t.hidden=t.dataset.value!==e;this.getAttribute(`value`)!==e&&this.setAttribute(`value`,e),this.measure(),t&&i(this,`kashi-change`,{value:e})}measure(){let e=this.list,t=e?.querySelector(`[role="tab"][aria-selected="true"]`);!e||!t||!t.offsetWidth?e?.removeAttribute(`data-indicator`):(e.setAttribute(`data-indicator`,``),e.style.setProperty(`--_ix`,`${t.offsetLeft}px`),e.style.setProperty(`--_iy`,`${t.offsetTop}px`),e.style.setProperty(`--_iw`,`${t.offsetWidth}px`),e.style.setProperty(`--_ih`,`${t.offsetHeight}px`))}onKey(e){let t=[...this.list.querySelectorAll(`[role="tab"]:not(:disabled)`)],n=t.indexOf(document.activeElement);if(n<0)return;let r=getComputedStyle(this.list).direction===`rtl`,i=this.getAttribute(`orientation`)===`vertical`?{ArrowDown:n+1,ArrowUp:n-1,Home:0,End:t.length-1}:{ArrowLeft:r?n+1:n-1,ArrowRight:r?n-1:n+1,Home:0,End:t.length-1};if(!(e.key in i))return;e.preventDefault();let a=t[(i[e.key]+t.length)%t.length];a.focus(),this.select(a.dataset.value,!0)}};l.observedAttributes=[`value`,`variant`,`block`,`orientation`,`size`,`label`];var u=class extends s{constructor(){super(...arguments),this.tip=null,this.key=t(`kashi-tip`),this.onKey=e=>{e.key===`Escape`&&(clearTimeout(this.timer),this.tip.hidden=!0)}}connectedCallback(){a(()=>this.isConnected&&this.setup())}setup(){if(!this.tip){this.classList.add(`k-tooltip-anchor`);let e=document.createElement(`span`);e.setAttribute(`role`,`tooltip`),e.id=this.key,e.hidden=!0,this.append(e),this.tip=e;let t=this.firstElementChild===e?null:this.firstElementChild;t&&t.setAttribute(`aria-describedby`,[t.getAttribute(`aria-describedby`),this.key].filter(Boolean).join(` `)),this.addEventListener(`mouseenter`,()=>this.show(Number(this.getAttribute(`delay`)??300))),this.addEventListener(`mouseleave`,()=>this.hide()),this.addEventListener(`focusin`,()=>this.show(0)),this.addEventListener(`focusout`,()=>this.hide())}this.decorate()}disconnectedCallback(){clearTimeout(this.timer),document.removeEventListener(`keydown`,this.onKey)}attributeChangedCallback(){this.tip&&this.decorate()}decorate(){let e=this.getAttribute(`placement`);this.tip.className=`k-tooltip${e&&e!==`top`?` k-tooltip--${e}`:``}`,this.tip.textContent=this.getAttribute(`content`)??``}show(e){clearTimeout(this.timer),this.timer=setTimeout(()=>{this.tip.hidden=!1,document.addEventListener(`keydown`,this.onKey)},e)}hide(){clearTimeout(this.timer),this.timer=setTimeout(()=>{this.tip.hidden=!0,document.removeEventListener(`keydown`,this.onKey)},100)}};u.observedAttributes=[`content`,`placement`];var d=class extends s{constructor(){super(...arguments),this.state=`idle`,this.built=!1}connectedCallback(){this.built||(this.built=!0,this.addEventListener(`click`,e=>{e.target.closest(`button`)&&this.copy()})),this.render()}disconnectedCallback(){clearTimeout(this.timer)}attributeChangedCallback(){this.built&&this.render()}get text(){let e=this.getAttribute(`value`);if(e!==null)return e;let t=this.getAttribute(`target`),n=t?document.querySelector(t):null;return n?typeof n.value==`string`?n.value:(n.textContent??``).trim():``}async copy(){try{await navigator.clipboard.writeText(this.text),this.state=`copied`,i(this,`kashi-copy`,{value:this.text})}catch{this.state=`failed`}this.render(),clearTimeout(this.timer),this.timer=setTimeout(()=>{this.state=`idle`,this.render()},Number(this.getAttribute(`timeout`))||2e3)}render(){let e=this.getAttribute(`label`)??`کپی`,t=this.getAttribute(`copied-label`)??`کپی شد`,i=this.state===`copied`?t:this.state===`failed`?`کپی نشد`:e,a=n(this,`icon-only`),s=this.state===`copied`?r.check:r.copy,c=this.getAttribute(`variant`)??`secondary`,l=this.getAttribute(`size`)??`sm`,u=this.contains(document.activeElement);this.innerHTML=`<button type="button" class="k-btn k-btn--${o(c)}${l===`md`?``:` k-btn--${o(l)}`}${a?` k-btn--icon`:``}" data-variant="${o(c)}" data-size="${o(l)}"${a?` aria-label="${o(i)}"`:``}${this.state===`copied`?` data-copied=""`:``}>${s}${a?``:o(i)}</button><span class="k-sr-only" aria-live="polite">${this.state===`idle`?``:o(i)}</span>`,u&&this.querySelector(`button`).focus()}};d.observedAttributes=[`value`,`target`,`label`,`copied-label`,`icon-only`,`variant`,`size`],e(`kashi-dialog`,c,`contents`),e(`kashi-tabs`,l,`block`),e(`kashi-tooltip`,u),e(`kashi-copy-button`,d),typeof document<`u`&&document.addEventListener(`click`,e=>{let t=e.target?.closest?.(`[data-kashi-open]`);if(t){let n=document.getElementById(t.getAttribute(`data-kashi-open`));n?.show&&(e.preventDefault(),n.show())}});export{d as KashiCopyButton,c as KashiDialog,l as KashiTabs,u as KashiTooltip};
@@ -1 +0,0 @@
1
- import{a as e,c as t,d as n,i as r,l as i,n as a,o,s,t as c}from"./base-DfzNTdQk.js";import{i as l}from"./digits-DE1YGT94.js";import{a as u,c as d,d as f,i as p,l as m,t as h,u as g}from"./jalali-BiM5Kfep.js";import"./calendar-oMlnK1_D.js";const _=e=>e?u(e.trim())??d(e):null,v=(e,t=0)=>new Date(e.getFullYear(),e.getMonth(),e.getDate()+t),y=(e,t)=>!e&&!t||!!e&&!!t&&e.getTime()===t.getTime(),b=[[`۷ روز اخیر`,e=>({start:v(e,-6),end:e})],[`۳۰ روز اخیر`,e=>({start:v(e,-29),end:e})],[`این ماه`,e=>{let{jy:t,jm:n}=f(e);return{start:m(t,n,1),end:e}}],[`ماه قبل`,e=>{let{jy:t,jm:n}=f(e),[r,i]=n===1?[t-1,12]:[t,n-1];return{start:m(r,i,1),end:v(m(t,n,1),-1)}}]];var x=class extends c{constructor(){super(...arguments),this.current={start:null,end:null},this.draft={start:null,end:null},this.valueSet=!1,this.rendered=!1,this.key=n(`kashi-range`),this.pop=null,this.onOutside=e=>{this.contains(e.target)||this.close(!1)}}connectedCallback(){!this.rendered&&!this.valueSet&&(this.current={start:_(this.getAttribute(`start`)),end:_(this.getAttribute(`end`))}),this.render()}disconnectedCallback(){this.close(!1)}attributeChangedCallback(e,t,n){this.rendered&&t!==n&&((e===`start`||e===`end`)&&(this.current={...this.current,[e]:_(n)}),this.render())}get value(){return{...this.current}}set value(e){this.valueSet=!0,this.current={start:e?.start??null,end:e?.end??null},this.rendered&&this.render()}fmt(e){return p(e,{digits:this.getAttribute(`digits`)===`latin`?`latin`:`fa`})}text(e){return e.start&&e.end?`${this.fmt(e.start)} تا ${this.fmt(e.end)}`:null}render(){this.close(!1);let e=this.key,n=this.getAttribute(`label`)??`بازهٔ تاریخ`,r=this.text(this.current),o=`<div class="k-datepicker k-daterange"><div class="k-select"><button id="${e}" type="button" class="k-select__control k-daterange__trigger" aria-haspopup="dialog" aria-expanded="false"${r?``:` data-placeholder=""`}${this.hasAttribute(`disabled`)?` disabled`:``}>${a.calendar}<span>${s(r??this.getAttribute(`placeholder`)??`انتخاب بازهٔ تاریخ`)}</span></button></div></div>`;this.querySelector(`:scope > .k-field`)?.remove(),this.insertAdjacentHTML(`afterbegin`,t({id:e,label:n,control:o})),this.trigger=this.querySelector(`.k-daterange__trigger`),this.trigger.addEventListener(`click`,()=>this.pop?this.close():this.open()),this.rendered=!0,i(this.querySelector(`:scope > .k-field`),this.trigger,e,this.getAttribute(`error`),this.getAttribute(`hint`));let c=this.getAttribute(`name`);if(this.querySelectorAll(`:scope > input[type=hidden]`).forEach(e=>e.remove()),c)for(let[e,t]of[[`start`,this.current.start],[`end`,this.current.end]])this.insertAdjacentHTML(`beforeend`,`<input type="hidden" name="${s(`${c}_${e}`)}" value="${t?g(t):``}">`)}open(){if(this.pop||this.hasAttribute(`disabled`))return;this.draft={...this.current};let e=this.querySelector(`.k-daterange`),t=document.createElement(`div`);t.id=`${this.key}-popover`,t.className=`k-datepicker__popover k-daterange__popover`,t.setAttribute(`role`,`dialog`),t.setAttribute(`aria-label`,this.getAttribute(`label`)??`انتخاب بازهٔ تاریخ`);let n=this.getAttribute(`presets`)===`false`?[]:b;t.innerHTML=`${n.length?`<ul class="k-daterange__presets" role="list" aria-label="میان‌برها">${n.map(([e],t)=>`<li><button type="button" class="k-daterange__preset" data-preset="${t}" aria-pressed="false">${e}</button></li>`).join(``)}</ul>`:``}<div class="k-daterange__main"><div class="k-daterange__footer"><span class="k-daterange__summary" aria-live="polite"></span><button type="button" class="k-btn k-btn--secondary k-btn--sm" data-cancel>انصراف</button><button type="button" class="k-btn k-btn--primary k-btn--sm" data-apply>تأیید</button></div></div>`;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)}r.range=this.draft,t.querySelector(`.k-daterange__main`).prepend(r),r.addEventListener(`kashi-change`,e=>{e.stopPropagation();let t=e.detail.date,n=this.draft;this.draft=!n.start||n.end?{start:t,end:null}:t<n.start?{start:t,end:n.start}:{start:n.start,end:t},r.range=this.draft,this.paintDraft()}),t.addEventListener(`click`,e=>{let t=e.target,i=t.closest(`[data-preset]`);if(i)this.draft=n[Number(i.dataset.preset)][1](v(/* @__PURE__ */ new Date)),r.range=this.draft,this.paintDraft();else if(t.closest(`[data-cancel]`))this.close();else if(t.closest(`[data-apply]`)&&this.draft.start&&this.draft.end){let e=!y(this.draft.start,this.current.start)||!y(this.draft.end,this.current.end);this.current={...this.draft},this.close(),this.render(),this.trigger.focus(),e&&o(this,`kashi-change`,{start:this.current.start,end:this.current.end,value:{start:g(this.current.start),end:g(this.current.end)}})}}),t.addEventListener(`keydown`,e=>{e.key===`Escape`&&(e.stopPropagation(),this.close())}),e.append(t),this.pop=t,this.trigger.setAttribute(`aria-expanded`,`true`),this.trigger.setAttribute(`aria-controls`,t.id),document.addEventListener(`pointerdown`,this.onOutside),this.paintDraft(),r.focus()}paintDraft(){let e=this.pop,t=this.draft;e.querySelector(`.k-daterange__summary`).textContent=this.text(t)??(t.start?`حالا تاریخ پایان را انتخاب کنید.`:``),e.querySelector(`[data-apply]`).disabled=!t.start||!t.end;let n=v(/* @__PURE__ */ new Date);e.querySelectorAll(`[data-preset]`).forEach((e,r)=>{let i=b[r][1](n);e.setAttribute(`aria-pressed`,String(y(t.start,i.start)&&y(t.end,i.end)))})}close(e=!0){this.pop&&(this.pop.remove(),this.pop=null,document.removeEventListener(`pointerdown`,this.onOutside),this.trigger.setAttribute(`aria-expanded`,`false`),this.trigger.removeAttribute(`aria-controls`),e&&this.trigger.focus())}};x.observedAttributes=[`label`,`hint`,`error`,`start`,`end`,`min`,`max`,`holidays`,`digits`,`name`,`disabled`,`presets`,`placeholder`];const S=e=>`<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-k-mirror=""><path d="${e?`m8 5 5 5-5 5`:`m12 5-5 5 5 5`}"/></svg>`;var C=class extends c{constructor(){super(...arguments),this.selected=null,this.year=f(/* @__PURE__ */ new Date).jy,this.focusMonth=1,this.valueSet=!1,this.rendered=!1}connectedCallback(){if(!this.rendered){this.valueSet||(this.selected=this.parse(this.getAttribute(`value`)));let e=f(/* @__PURE__ */ new Date);this.year=this.selected?.year??e.jy,this.focusMonth=this.selected?.month??(this.year===e.jy?e.jm:1)}this.render()}attributeChangedCallback(e,t,n){this.rendered&&t!==n&&(e===`value`?this.value=n??``:this.render())}parse(e){let t=(e??``).trim().match(/^(\d{4})[-/](\d{1,2})$/);return t?{year:Number(t[1]),month:Number(t[2])}:null}get value(){return this.selected?`${this.selected.year}-${String(this.selected.month).padStart(2,`0`)}`:``}set value(e){this.valueSet=!0,this.selected=this.parse(e),this.selected&&([this.year,this.focusMonth]=[this.selected.year,this.selected.month]),this.rendered&&this.render()}out(e,t){let n=e*12+t,r=this.parse(this.getAttribute(`min`)),i=this.parse(this.getAttribute(`max`));return!!r&&n<r.year*12+r.month||!!i&&n>i.year*12+i.month}render(e=!1){let t=e=>this.getAttribute(`digits`)===`latin`?String(e):l(String(e)),n=f(/* @__PURE__ */ new Date),r=this.parse(this.getAttribute(`min`)),i=this.parse(this.getAttribute(`max`)),a=this.year;this.innerHTML=`<div class="k-monthpicker" role="group" aria-label="${s(this.getAttribute(`label`)??`انتخاب ماه`)}"><div class="k-monthpicker__header"><button type="button" class="k-btn k-btn--tertiary k-btn--icon k-btn--sm" data-year="-1" aria-label="سال قبل"${r&&a<=r.year?` disabled`:``}>${S(!1)}</button><span class="k-monthpicker__year" aria-live="polite">${t(a)}</span><button type="button" class="k-btn k-btn--tertiary k-btn--icon k-btn--sm" data-year="1" aria-label="سال بعد"${i&&a>=i.year?` disabled`:``}>${S(!0)}</button></div><div class="k-monthpicker__grid">${h.map((e,r)=>`<button type="button" data-month="${r+1}" class="k-monthpicker__month" tabindex="${this.focusMonth===r+1?0:-1}" aria-pressed="${this.selected?.year===a&&this.selected.month===r+1}" aria-label="${e} ${t(a)}"${n.jy===a&&n.jm===r+1?` aria-current="date"`:``}${this.out(a,r+1)?` disabled`:``}>${e}</button>`).join(``)}</div></div>`;let c=this.getAttribute(`name`);c&&this.insertAdjacentHTML(`beforeend`,`<input type="hidden" name="${s(c)}" value="${this.value}">`),this.rendered=!0,this.querySelectorAll(`[data-year]`).forEach(e=>e.addEventListener(`click`,()=>{this.year+=Number(e.dataset.year),this.render()}));let u=this.querySelector(`.k-monthpicker__grid`);u.addEventListener(`click`,e=>{let t=e.target.closest(`[data-month]`);t&&!t.disabled&&(this.selected={year:this.year,month:Number(t.dataset.month)},this.focusMonth=this.selected.month,this.render(!0),o(this,`kashi-change`,{value:this.value,year:this.selected.year,month:this.selected.month}))}),u.addEventListener(`keydown`,e=>{let t=getComputedStyle(u).direction===`rtl`,n={ArrowRight:t?-1:1,ArrowLeft:t?1:-1,ArrowDown:3,ArrowUp:-3,PageUp:-12,PageDown:12},r=this.year*12+this.focusMonth-1;if(e.key in n)r+=n[e.key];else if(e.key===`Home`)r=this.year*12;else if(e.key===`End`)r=this.year*12+11;else return;e.preventDefault(),this.year=Math.floor(r/12),this.focusMonth=r%12+1,this.render(!0)}),e&&this.querySelector(`[data-month="${this.focusMonth}"]`)?.focus()}};C.observedAttributes=[`value`,`min`,`max`,`digits`,`label`,`name`];function w(e){let t=[`بایت`,`کیلوبایت`,`مگابایت`,`گیگابایت`],n=e,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r++;let i=r===0?String(n):n.toFixed(+(n<10)).replace(/\.0$/,``);return`${l(i).replace(`.`,`٫`)} ${t[r]}`}var T=class extends c{constructor(){super(...arguments),this.items=[],this.rendered=!1,this.key=n(`kashi-upload`)}connectedCallback(){this.rendered||this.render()}attributeChangedCallback(e,t,n){this.rendered&&t!==n&&this.render()}get files(){return this.items.filter(e=>e.status!==`error`).map(e=>e.file)}get multiple(){return r(this,`multiple`,!0)}render(){let e=this.key,t=this.getAttribute(`hint`),n=this.hasAttribute(`disabled`),r=this.getAttribute(`name`),i=this.getAttribute(`accept`);this.innerHTML=`<div class="k-dropzone"${n?` data-disabled=""`:``}><span class="k-dropzone__icon" aria-hidden="true"><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="M10 13V3.5m-4 4 4-4 4 4M4 13v2.5A1.5 1.5 0 0 0 5.5 17h9a1.5 1.5 0 0 0 1.5-1.5V13"/></svg></span><p class="k-dropzone__title" style="margin: 0"><button type="button" class="k-dropzone__browse"${n?` disabled`:``}${t?` aria-describedby="${e}-hint"`:``}>${s(this.getAttribute(`label`)??`انتخاب فایل`)}</button> <span>یا فایل را اینجا رها کنید</span></p>${t?`<p class="k-dropzone__hint" id="${e}-hint" style="margin: 0">${s(t)}</p>`:``}<input type="file" tabindex="-1" aria-hidden="true"${i?` accept="${s(i)}"`:``}${this.multiple?` multiple`:``}${r?` name="${s(r)}"`:``}></div><ul class="k-file-list" role="list" hidden></ul><span class="k-sr-only" aria-live="polite"></span>`,this.rendered=!0,this.input=this.querySelector(`input[type=file]`);let a=this.querySelector(`.k-dropzone`);this.querySelector(`.k-dropzone__browse`).addEventListener(`click`,()=>this.input.click()),this.input.addEventListener(`change`,()=>{this.input.files?.length&&this.add([...this.input.files])}),a.addEventListener(`dragover`,e=>{e.preventDefault(),n||a.setAttribute(`data-dragging`,``)}),a.addEventListener(`dragleave`,e=>{a.contains(e.relatedTarget)||a.removeAttribute(`data-dragging`)}),a.addEventListener(`drop`,e=>{e.preventDefault(),a.removeAttribute(`data-dragging`),!n&&e.dataTransfer?.files.length&&this.add([...e.dataTransfer.files])}),this.querySelector(`.k-file-list`).addEventListener(`click`,e=>{let t=e.target.closest(`[data-remove]`);if(!t)return;let n=this.items.find(e=>e.id===t.dataset.remove);this.items=this.items.filter(e=>e.id!==t.dataset.remove),this.announce(`${n?.file.name??``} حذف شد`),this.changed()}),this.paint()}accepts(e){let t=this.getAttribute(`accept`);return!t||t.split(`,`).map(e=>e.trim().toLowerCase()).some(t=>t.startsWith(`.`)?e.name.toLowerCase().endsWith(t):t.endsWith(`/*`)?e.type.startsWith(t.slice(0,-1)):e.type===t)}add(e){let t=this.multiple?e:e.slice(0,1),r=Number(this.getAttribute(`max-size`))||0,i=Number(this.getAttribute(`max-files`))||0,a=this.multiple?this.items.filter(e=>e.status!==`error`).length:0,o=t.map((e,t)=>{let o;this.accepts(e)?r&&e.size>r?o=`حجم فایل بیشتر از ${w(r)} است.`:i&&a+t>=i&&(o=`حداکثر ${l(i)} فایل.`):o=`این نوع فایل پذیرفته نیست.`;let s=!o&&!!this.uploader;return{id:n(`f`),file:e,status:o?`error`:s?`uploading`:`done`,progress:o||s?0:100,error:o}});this.items=this.multiple?[...this.items,...o]:o,this.announce(o.map(e=>`${e.file.name}: ${e.error??(this.uploader?`در حال بارگذاری`:`بارگذاری شد`)}`).join(`، `)),this.changed();for(let e of o)e.status===`uploading`&&this.uploader&&this.uploader(e.file,t=>{e.progress=t,this.paint()}).then(()=>{e.status=`done`,e.progress=100,this.announce(`${e.file.name}: بارگذاری شد`),this.changed()},t=>{e.status=`error`,e.error=t instanceof Error?t.message:`خطا در بارگذاری`,this.announce(`${e.file.name}: ${e.error}`),this.changed()})}announce(e){this.querySelector(`:scope > .k-sr-only`).textContent=e}changed(){try{let e=new DataTransfer;for(let t of this.files)e.items.add(t);this.input.files=e.files}catch{}this.paint(),o(this,`kashi-change`,{files:this.files})}paint(){let e=this.querySelector(`.k-file-list`);e.hidden=!this.items.length;let t=e=>(e.split(`.`).pop()??``).slice(0,4).toUpperCase();e.innerHTML=this.items.map(e=>`<li class="k-file" data-status="${e.status}"><span class="k-file__icon" aria-hidden="true">${s(t(e.file.name))}</span><span class="k-file__name" title="${s(e.file.name)}">${s(e.file.name)}</span><button type="button" class="k-btn k-btn--tertiary k-btn--icon k-btn--sm k-file__remove" data-remove="${e.id}" aria-label="حذف ${s(e.file.name)}"><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="M3.5 5.5h13M8 5.5V4h4v1.5M5 5.5l.8 10.2a1.5 1.5 0 0 0 1.5 1.3h5.4a1.5 1.5 0 0 0 1.5-1.3L15 5.5"/></svg></button><span class="k-file__meta">${s(e.error??`${w(e.file.size)}${e.status===`uploading`?` · ${l(Math.round(e.progress))}٪`:e.status===`done`?` · بارگذاری شد`:``}`)}</span>${e.status===`uploading`?`<div role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="${Math.round(e.progress)}" aria-label="در حال بارگذاری ${s(e.file.name)}" class="k-progress k-progress--sm"><div class="k-progress__bar" style="--k-value: ${e.progress}%"></div></div>`:``}</li>`).join(``)}};T.observedAttributes=[`accept`,`multiple`,`max-size`,`max-files`,`hint`,`name`,`disabled`,`label`];const E=/^#?([0-9a-f]{3}|[0-9a-f]{6})$/i,D=e=>{let t=e.trim().match(E);return t?`#${(t[1].length===3?[...t[1]].map(e=>e+e).join(``):t[1]).toLowerCase()}`:null},O=e=>[1,3,5].map(t=>parseInt(e.slice(t,t+2),16)),k=(e,t,n)=>`#${[e,t,n].map(e=>Math.round(Math.min(255,Math.max(0,e))).toString(16).padStart(2,`0`)).join(``)}`,A=e=>{let[t,n,r]=O(e).map(e=>e/255).map(e=>e<=.03928?e/12.92:((e+.055)/1.055)**2.4);return .2126*t+.7152*n+.0722*r},j=(e,t)=>{let[n,r]=[A(D(e)??e),A(D(t)??t)].sort((e,t)=>t-e);return(n+.05)/(r+.05)};function M(e){let[t,n,r]=O(e).map(e=>e/255),i=Math.max(t,n,r),a=i-Math.min(t,n,r),o=0;return a&&(o=i===t?(n-r)/a%6:i===n?(r-t)/a+2:(t-n)/a+4),{h:(o*60+360)%360,s:i?a/i:0,v:i}}function N({h:e,s:t,v:n}){let r=r=>{let i=(r+e/60)%6;return(n-n*t*Math.max(0,Math.min(i,4-i,1)))*255};return k(r(5),r(3),r(1))}const P=[[`فیروزه‌ای`,`#0b8077`],[`لاجوردی`,`#2740ed`],[`بنفش`,`#7c3aed`],[`اناری`,`#e51d2a`],[`زعفرانی`,`#dd5e02`],[`پسته‌ای`,`#518b25`],[`شب`,`#2a2f3d`]];var F=class extends c{constructor(){super(...arguments),this.current=`#0b8077`,this.hsv=M(`#0b8077`),this.valueSet=!1,this.rendered=!1,this.key=n(`kashi-color`),this.panel=null,this.onOutside=e=>{this.querySelector(`.k-color__anchor`)?.contains(e.target)||this.closePanel(!1)}}connectedCallback(){!this.rendered&&!this.valueSet&&this.setColor(D(this.getAttribute(`value`)??``)??`#0b8077`,!1),this.render()}disconnectedCallback(){document.removeEventListener(`pointerdown`,this.onOutside)}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;let t=D(e??``);t&&this.setColor(t,!1),this.rendered&&this.paint()}setColor(e,t){if(this.current=e,!t){let t=M(e);this.hsv=t.s===0?{...t,h:this.hsv.h}:t}}swatches(){let e=this.getAttribute(`swatches`);return e===null?P:e.split(`,`).map(e=>e.trim().split(/\s+/)).filter(([e])=>D(e)).map(([e,...t])=>[t.join(` `)||e,D(e)])}render(){let e=this.key,n=this.swatches(),r=`<div class="k-color">${n.length?`<div class="k-color__swatches" role="radiogroup" aria-label="رنگ‌های پیشنهادی">${n.map(([t,n])=>`<label class="k-color__swatch" style="--_sw: ${n}; --_ink: ${j(n,`#ffffff`)>=3?`#fff`:`#000`}" title="${s(t)}"><input type="radio" class="k-sr-only" name="${e}-sw" value="${n}" aria-label="${s(t)}"><svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m5 10.5 3.2 3L15 7"/></svg></label>`).join(``)}</div>`:``}<div class="k-color__row"><span class="k-color__anchor"><button type="button" class="k-color__preview" aria-label="انتخاب رنگ دلخواه" aria-haspopup="dialog" aria-expanded="false"></button></span><div class="k-input"><input id="${e}-hex" class="k-input__control" dir="ltr" spellcheck="false" autocomplete="off"></div></div>${this.getAttribute(`show-contrast`)===`false`?``:`<p class="k-color__contrast" aria-live="polite"><span class="k-color__sample">متن نمونه</span><span></span></p>`}</div>`;this.querySelector(`:scope > .k-field`)?.remove(),this.insertAdjacentHTML(`afterbegin`,t({id:`${e}-hex`,label:this.getAttribute(`label`)??`رنگ`,control:r})),this.rendered=!0,this.querySelector(`.k-color__swatches`)?.addEventListener(`change`,e=>this.pick(e.target.value));let i=this.querySelector(`#${e}-hex`);i.addEventListener(`input`,()=>{let e=D(i.value);this.paintMessages(!e),e&&this.pick(e,!1)}),i.addEventListener(`blur`,()=>{D(i.value)&&(i.value=this.current)}),this.querySelector(`.k-color__preview`).addEventListener(`click`,()=>this.panel?this.closePanel():this.openPanel()),this.paint()}pick(e,t=!0,n=!1){let r=e!==this.current;this.setColor(e,n),this.paint(t),r&&o(this,`kashi-change`,{value:e})}paint(e=!0){let t=this.current,n=j(t,`#ffffff`),r=j(t,`#000000`),i=n>=r?`#ffffff`:`#000000`,a=this.querySelector(`.k-color`);a.style.setProperty(`--_sw`,t),a.style.setProperty(`--_ink`,i),this.querySelectorAll(`.k-color__swatch input`).forEach(e=>e.checked=e.value===t);let o=this.querySelector(`#${this.key}-hex`);e&&(o.value=t);let c=Math.max(n,r),u=this.querySelector(`.k-color__contrast span:last-child`);u&&(u.textContent=`کنتراست با متن ${i===`#ffffff`?`سفید`:`مشکی`}: ${l((Math.round(c*10)/10).toFixed(1)).replace(`.`,`٫`)} به ۱ ${c>=4.5?`(AA)`:`(کمتر از AA)`}`);let d=this.getAttribute(`name`);this.querySelectorAll(`:scope > input[type=hidden]`).forEach(e=>e.remove()),d&&this.insertAdjacentHTML(`beforeend`,`<input type="hidden" name="${s(d)}" value="${t}">`),this.panel&&this.paintPanel(),this.paintMessages(!1)}paintMessages(e){let t=this.querySelector(`#${this.key}-hex`);i(this.querySelector(`:scope > .k-field`),t,`${this.key}-hex`,e?`کد رنگ معتبر نیست؛ مثل ‎#0fa89b‎ وارد کنید.`:null,this.getAttribute(`hint`))}openPanel(){let e=this.querySelector(`.k-color__anchor`),t=document.createElement(`div`);t.className=`k-color__panel`,t.setAttribute(`role`,`dialog`),t.setAttribute(`aria-label`,`انتخاب رنگ دلخواه`),t.innerHTML=`<div class="k-color__area" role="slider" tabindex="0" aria-label="اشباع و روشنایی"><span class="k-color__thumb"></span></div><div class="k-color__tools"><span class="k-color__current" aria-hidden="true"></span><input type="range" class="k-color__hue" min="0" max="359" aria-label="رنگ‌مایه"></div><div class="k-color__codes" dir="ltr">${[`R`,`G`,`B`].map((e,t)=>`<label class="k-color__code"><input class="k-color__num" inputmode="numeric" data-ch="${t}" aria-label="${[`قرمز`,`سبز`,`آبی`][t]}"><span aria-hidden="true">${e}</span></label>`).join(``)}</div>`,e.append(t),this.panel=t;let n=t.querySelector(`.k-color__area`),r=e=>{this.hsv=e,this.pick(N(e),!0,!0)},i=e=>{let t=n.getBoundingClientRect();r({...this.hsv,s:Math.min(1,Math.max(0,(e.clientX-t.left)/t.width)),v:1-Math.min(1,Math.max(0,(e.clientY-t.top)/t.height))})};n.addEventListener(`pointerdown`,e=>{n.setPointerCapture?.(e.pointerId),i(e)}),n.addEventListener(`pointermove`,e=>e.buttons===1&&i(e)),n.addEventListener(`keydown`,e=>{let t=e.shiftKey?.1:.01,n=this.hsv,i={ArrowLeft:{s:Math.max(0,n.s-t)},ArrowRight:{s:Math.min(1,n.s+t)},ArrowUp:{v:Math.min(1,n.v+t)},ArrowDown:{v:Math.max(0,n.v-t)}};i[e.key]&&(e.preventDefault(),r({...n,...i[e.key]}))}),t.querySelector(`.k-color__hue`).addEventListener(`input`,e=>r({...this.hsv,h:Number(e.target.value)})),t.querySelectorAll(`.k-color__num`).forEach(e=>e.addEventListener(`input`,()=>{let t=O(this.current);t[Number(e.dataset.ch)]=Math.min(255,Math.max(0,Number(e.value.replace(/\D/g,``))||0)),this.pick(k(...t))})),t.addEventListener(`keydown`,e=>{e.key===`Escape`&&(e.stopPropagation(),this.closePanel())}),this.querySelector(`.k-color__preview`).setAttribute(`aria-expanded`,`true`),document.addEventListener(`pointerdown`,this.onOutside),this.paintPanel(),n.focus({preventScroll:!0})}paintPanel(){let e=this.panel,{h:t,s:n,v:r}=this.hsv,i=e=>`${l(Math.round(e*100))}٪`,a=e.querySelector(`.k-color__area`);a.style.setProperty(`--_hue`,`hsl(${t} 100% 50%)`),a.setAttribute(`aria-valuenow`,String(Math.round(n*100))),a.setAttribute(`aria-valuetext`,`اشباع ${i(n)}، روشنایی ${i(r)}`);let o=e.querySelector(`.k-color__thumb`);o.style.left=`${n*100}%`,o.style.top=`${(1-r)*100}%`;let s=e.querySelector(`.k-color__hue`);s.value=String(Math.round(t)),s.setAttribute(`aria-valuetext`,`${l(Math.round(t))} درجه`);let c=O(this.current);e.querySelectorAll(`.k-color__num`).forEach((e,t)=>{document.activeElement!==e&&(e.value=String(c[t]))})}closePanel(e=!0){if(!this.panel)return;this.panel.remove(),this.panel=null,document.removeEventListener(`pointerdown`,this.onOutside);let t=this.querySelector(`.k-color__preview`);t.setAttribute(`aria-expanded`,`false`),e&&t.focus()}};F.observedAttributes=[`label`,`hint`,`value`,`name`,`swatches`,`show-contrast`],e(`kashi-date-range-picker`,x,`block`),e(`kashi-month-picker`,C,`block`),e(`kashi-file-upload`,T,`block`),e(`kashi-color-picker`,F,`block`);export{F as KashiColorPicker,x as KashiDateRangePicker,T as KashiFileUpload,C as KashiMonthPicker,j as contrastRatio,w as formatBytes};
@@ -1 +0,0 @@
1
- import{a as e,d as t,i as n,o as r,r as i,s as a,t as o}from"./base-DfzNTdQk.js";import{i as s}from"./digits-DE1YGT94.js";import{n as c}from"./text-D1U32D6K.js";import{cellNumber as l}from"./controls-C6zwNYWs.js";const u=e=>c(e,{digits:`latin`}).toLowerCase();var d=class extends o{constructor(){super(...arguments),this.cols=null,this.data=null,this.table=null,this.sort=null,this.query=``,this.key=t(`kashi-table`),this.getRowId=e=>String(e.id??``)}connectedCallback(){i(()=>this.isConnected&&this.setup())}attributeChangedCallback(e,t,n){this.table&&t!==n&&this.setup()}get columns(){return this.cols??[]}set columns(e){this.cols=e,this.isConnected&&this.data&&this.setup()}get rows(){return this.data??[]}set rows(e){this.data=e,this.isConnected&&this.cols&&this.setup()}get selected(){return[...this.querySelectorAll(`tbody tr[aria-selected="true"]`)].map(e=>e.dataset.id??``)}setup(){this.cols&&this.data&&this.buildFromData();let e=this.querySelector(`:scope table`);if(!e)return;let t=e.closest(`.k-table-wrap`)??this.wrap(e);t.className=`k-table-wrap${n(this,`sticky-header`)?` k-table-wrap--sticky`:``}`,e.classList.add(`k-table`),e.classList.toggle(`k-table--compact`,n(this,`compact`)),e.classList.toggle(`k-table--striped`,n(this,`striped`));let r=e.querySelector(`caption`);r&&(r.id||=`${this.key}-caption`,t.setAttribute(`aria-labelledby`,r.id)),this.table=e,this.decorateHeader(),this.decorateRows(),this.searchBox(),this.apply()}wrap(e){let t=document.createElement(`div`);return t.setAttribute(`role`,`region`),t.tabIndex=0,e.before(t),t.append(e),t}buildFromData(){let e=this.cols,t=this.getAttribute(`caption`)??``,n=(e,t)=>e.format?e.format(t[e.key],t):String(t[e.key]??``),r=`<table>${t?`<caption><span class="k-table__caption-title">${a(t)}</span></caption>`:``}<thead><tr>${e.map(e=>`<th scope="col"${e.sortable?` data-sort`:``}${e.numeric?` data-numeric`:``}>${a(e.header)}</th>`).join(``)}</tr></thead><tbody>${this.data.map(t=>`<tr data-id="${a(this.getRowId(t))}">${e.map(e=>`<td>${a(n(e,t))}</td>`).join(``)}</tr>`).join(``)}</tbody></table>`;this.querySelector(`:scope > .k-table-wrap, :scope > table`)?.remove(),this.insertAdjacentHTML(`beforeend`,r)}decorateHeader(){this.table;let e=this.headCells();e.forEach((e,t)=>{if(e.classList.contains(`k-table__check`)||(e.scope||=`col`,e.hasAttribute(`data-numeric`)&&e.classList.add(`k-table__num`),!e.hasAttribute(`data-sort`)||e.querySelector(`.k-table__sort`)))return;e.setAttribute(`aria-sort`,`none`);let n=document.createElement(`button`);n.type=`button`,n.className=`k-table__sort`,n.append(...e.childNodes),e.append(n);let i=this.dataIndex(t);n.addEventListener(`click`,()=>{this.sort=this.sort?.index===i&&this.sort.dir===`ascending`?{index:i,dir:`descending`}:{index:i,dir:`ascending`},this.apply(),r(this,`kashi-sort`,{column:i,direction:this.sort.dir})})});let t=e.map(e=>e.hasAttribute(`data-numeric`));for(let e of this.bodyRows())[...e.children].forEach((e,n)=>t[n]&&e.classList.add(`k-table__num`));let i=n(this,`selectable`),a=this.headRow(),o=a?.querySelector(`.k-table__check`);if(i&&a&&!o){let e=document.createElement(`th`);e.scope=`col`,e.className=`k-table__check`,e.innerHTML=`<input type="checkbox" class="k-checkbox" aria-label="انتخاب همهٔ ردیف‌ها">`,a.prepend(e),e.querySelector(`input`).addEventListener(`change`,e=>{let t=e.target.checked;this.visibleRows().forEach(e=>this.setRow(e,t)),this.selectionChanged()})}else!i&&o&&o.remove()}headRow(){return this.table.querySelector(`:scope > thead > tr`)}headCells(){return[...this.headRow()?.children??[]]}bodyRows(){return[...this.table.querySelectorAll(`:scope > tbody > tr`)]}dataIndex(e){return this.headRow()?.querySelector(`.k-table__check`)?e-1:e}offset(){return+!!this.headRow()?.querySelector(`.k-table__check`)}decorateRows(){let e=n(this,`selectable`);this.bodyRows().forEach((t,n)=>{var r,i;(r=t.dataset).id||(r.id=String(n+1)),(i=t.dataset).order||(i.order=String(n));let o=t.querySelector(`.k-table__check`);if(e&&!o){let e=document.createElement(`td`);e.className=`k-table__check`;let n=t.children[0]?.textContent?.trim();e.innerHTML=`<input type="checkbox" class="k-checkbox" aria-label="${a(n?`انتخاب ${n}`:`انتخاب ردیف`)}">`,t.prepend(e),t.setAttribute(`aria-selected`,`false`),e.querySelector(`input`).addEventListener(`change`,e=>{this.setRow(t,e.target.checked),this.selectionChanged()})}else!e&&o&&(o.remove(),t.removeAttribute(`aria-selected`))}),this.selectionChanged(!1)}setRow(e,t){e.setAttribute(`aria-selected`,String(t));let n=e.querySelector(`.k-table__check input`);n&&(n.checked=t)}selectionChanged(e=!0){let t=this.headRow()?.querySelector(`.k-table__check input`),n=this.visibleRows(),i=n.filter(e=>e.getAttribute(`aria-selected`)===`true`).length;t&&(t.checked=n.length>0&&i===n.length,t.indeterminate=i>0&&i<n.length);let o=this.getAttribute(`name`);if(this.querySelectorAll(`:scope > input[type=hidden]`).forEach(e=>e.remove()),o)for(let e of this.selected)this.insertAdjacentHTML(`beforeend`,`<input type="hidden" name="${a(o)}" value="${a(e)}">`);e&&r(this,`kashi-change`,{selected:this.selected})}visibleRows(){return this.bodyRows().filter(e=>!e.hidden&&!e.classList.contains(`k-table__empty`))}searchBox(){let e=this.querySelector(`:scope > .k-table-search`);if(!n(this,`searchable`))return e?.remove();if(e)return;let t=`${this.key}-search`,r=document.createElement(`div`);r.className=`k-table-search k-field`,r.style.marginBlockEnd=`var(--k-space-3)`,r.innerHTML=`<div class="k-input k-input--sm"><input id="${t}" class="k-input__control" type="search" placeholder="جستجو در جدول" aria-label="جستجو در جدول"></div><span class="k-sr-only" aria-live="polite"></span>`,this.prepend(r);let i=r.querySelector(`input`);i.addEventListener(`input`,()=>{this.query=i.value,this.apply(),r.querySelector(`.k-sr-only`).textContent=`${s(this.visibleRows().length)} ردیف`})}apply(){let e=this.table.querySelector(`:scope > tbody`);if(!e)return;let t=this.offset(),n=this.bodyRows().filter(e=>!e.classList.contains(`k-table__empty`)),r=this.headCells();r.forEach((e,n)=>{e.hasAttribute(`aria-sort`)&&e.setAttribute(`aria-sort`,this.sort&&this.sort.index===n-t?this.sort.dir:`none`)});let i=n.sort((e,t)=>Number(e.dataset.order)-Number(t.dataset.order));if(this.sort){let{index:e,dir:n}=this.sort,a=r[e+t]?.hasAttribute(`data-numeric`),o=n=>{let r=n.children[e+t],i=r?.dataset.value??r?.textContent?.trim()??``;return a?l(i):i},s=n===`ascending`?1:-1;i=[...i].sort((e,t)=>{let n=o(e),r=o(t);return(typeof n==`number`&&typeof r==`number`?n-r:String(n).localeCompare(String(r),`fa`))*s})}let a=u(this.query.trim());for(let t of i)t.hidden=!!a&&!u(t.textContent??``).includes(a),e.append(t);if(e.querySelector(`.k-table__empty`)?.remove(),a&&!this.visibleRows().length){let t=r.length;e.insertAdjacentHTML(`beforeend`,`<tr class="k-table__empty"><td colspan="${t}"><p style="padding: 2rem; margin: 0; text-align: center">نتیجه‌ای پیدا نشد.</p></td></tr>`)}this.selectionChanged(!1)}};d.observedAttributes=[`selectable`,`searchable`,`compact`,`striped`,`sticky-header`,`caption`,`name`],e(`kashi-data-table`,d,`block`);export{d as KashiDataTable};
@@ -1 +0,0 @@
1
- import{i as e,r as t}from"./digits-DE1YGT94.js";function n(n,{digits:r}={}){let i=n.replace(/[يى]/g,`ی`).replace(/ك/g,`ک`).replace(/ة/g,`ه`).replace(/[ً-ٰٟ]/g,``).replace(/ـ/g,``).replace(/‌{2,}/g,`‌`).replace(/ *‌ */g,`‌`).replace(/[ \t]{2,}/g,` `).trim();return r===`fa`&&(i=e(t(i))),r===`latin`&&(i=t(i)),i}function r(t,{digits:n=!0}={}){let r={arabic:0,zwnj:0,punctuation:0,digits:0,spacing:0},i=(e,t,n,i)=>e.replace(t,(...e)=>(r[i]++,typeof n==`string`?n.replace(/\$(\d)/g,(t,n)=>e[Number(n)]??``):n(...e))),a=`[\\u0621-\\u063A\\u0641-\\u064A\\u067E\\u0686\\u0698\\u06A9\\u06AF\\u06CC]`,o=t;o=i(o,/[يى]/g,`ی`,`arabic`),o=i(o,/ك/g,`ک`,`arabic`),o=i(o,RegExp(`(^|[\\s(«])(ن?می) (?=${a})`,`g`),`$1$2‌`,`zwnj`),o=i(o,RegExp(`(${a}) (ها|های|هایی|هایم|هایت|هایش|تر|ترین)(?=$|[\\s.،؛؟!»)])`,`g`),`$1‌$2`,`zwnj`),o=i(o,RegExp(`(${a}\\s*),(?=\\s)`,`g`),`$1،`,`punctuation`),o=i(o,RegExp(`(${a}\\s*)\\?`,`g`),`$1؟`,`punctuation`),o=i(o,RegExp(`(${a}\\s*);`,`g`),`$1؛`,`punctuation`),o=i(o,/ +([،؛؟!.:])(?=\s|$)/g,`$1`,`spacing`),o=i(o,/ {2,}/g,` `,`spacing`),n&&(o=i(o,RegExp(`(${a}[\\s\\u200c]*)(\\d+)|(\\d+)(?=[\\s\\u200c]*${a})`,`g`),(t,n,r,i)=>n?n+e(r):e(i),`digits`));let s=Object.values(r).reduce((e,t)=>e+t,0);return{text:o,fixes:r,count:s}}export{n,r as t};
@@ -1 +0,0 @@
1
- import{n as e}from"./digits-DE1YGT94.js";function t(t){let n=t.trim();if(!n)return null;let r=n.split(/[:٫.،,\s]/).map(e).filter(Boolean),i,a;if(r.length>=2)[i,a]=[Number(r[0]),Number(r[1])];else{let t=e(n);t.length<=2?[i,a]=[Number(t),0]:[i,a]=[Number(t.slice(0,-2)),Number(t.slice(-2))]}return i>=0&&i<24&&a>=0&&a<60?{hours:i,minutes:a}:null}function n({hours:e,minutes:t}){return`${String(e).padStart(2,`0`)}:${String(t).padStart(2,`0`)}`}export{t as n,n as t};
@@ -1 +0,0 @@
1
- const e=[``,`یک`,`دو`,`سه`,`چهار`,`پنج`,`شش`,`هفت`,`هشت`,`نه`],t=[`ده`,`یازده`,`دوازده`,`سیزده`,`چهارده`,`پانزده`,`شانزده`,`هفده`,`هجده`,`نوزده`],n=[``,``,`بیست`,`سی`,`چهل`,`پنجاه`,`شصت`,`هفتاد`,`هشتاد`,`نود`],r=[``,`صد`,`دویست`,`سیصد`,`چهارصد`,`پانصد`,`ششصد`,`هفتصد`,`هشتصد`,`نهصد`],i=[``,`هزار`,`میلیون`,`میلیارد`,`تریلیون`];function a(i){let a=[],o=Math.floor(i/100),s=i%100;return o&&a.push(r[o]),s>=10&&s<20?a.push(t[s-10]):(s>=20&&a.push(n[Math.floor(s/10)]),s%10&&a.push(e[s%10])),a.join(` و `)}function o(e){let t=typeof e==`bigint`?e:BigInt(Math.trunc(e));if(t===0n)return`صفر`;let n=t<0n;if(n&&(t=-t),t>=10n**15n)throw RangeError(`عدد بزرگ‌تر از حد پشتیبانی‌شده است`);let r=[];for(let e=0;t>0n;e++,t/=1000n){let n=Number(t%1000n);if(!n)continue;let o=e===1&&n===1?``:a(n);r.unshift([o,i[e]].filter(Boolean).join(` `))}return(n?`منفی `:``)+r.join(` و `)}export{o as t};