@kashi-ui/elements 0.0.0-stage → 0.25.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.
- package/README.md +45 -2
- package/dist/base.d.ts +47 -0
- package/dist/base.js +148 -0
- package/dist/calendar.d.ts +86 -0
- package/dist/calendar.js +439 -0
- package/dist/cdn/base-Cmq7zeIG.js +1 -0
- package/dist/cdn/calendar-Dm3fq2bs.js +16 -0
- package/dist/cdn/charts-DNOWi4sJ.js +1 -0
- package/dist/cdn/combobox-ZGrZ5okg.js +1 -0
- package/dist/cdn/controls-K-OZcjg4.js +1 -0
- package/dist/cdn/digits-DE1YGT94.js +1 -0
- package/dist/cdn/display-C975tS7j.js +1 -0
- package/dist/cdn/dist-D670Gw0K.js +1 -0
- package/dist/cdn/fields-BUTaSN8m.js +1 -0
- package/dist/cdn/forms-C-effPKn.js +1 -0
- package/dist/cdn/inputs-BjOddAM7.js +1 -0
- package/dist/cdn/jalali-BiM5Kfep.js +1 -0
- package/dist/cdn/kashi-elements.js +1 -0
- package/dist/cdn/map-BHuusa4t.js +12 -0
- package/dist/cdn/menu-DhrqyLgy.js +1 -0
- package/dist/cdn/nav-D_w5BV_K.js +1 -0
- package/dist/cdn/overlay-DX9un2xm.js +1 -0
- package/dist/cdn/pickers-BFLpUruK.js +1 -0
- package/dist/cdn/table-DPQfDMs-.js +1 -0
- package/dist/cdn/text-D1U32D6K.js +1 -0
- package/dist/cdn/words-9OdzG7y6.js +1 -0
- package/dist/cdn.d.ts +3 -0
- package/dist/cdn.js +44 -0
- package/dist/charts.d.ts +106 -0
- package/dist/charts.js +436 -0
- package/dist/combobox.d.ts +106 -0
- package/dist/combobox.js +439 -0
- package/dist/controls.d.ts +82 -0
- package/dist/controls.js +425 -0
- package/dist/display.d.ts +41 -0
- package/dist/display.js +144 -0
- package/dist/fields.d.ts +24 -0
- package/dist/fields.js +103 -0
- package/dist/forms.d.ts +186 -0
- package/dist/forms.js +902 -0
- package/dist/index.d.ts +86 -0
- package/dist/index.js +32 -0
- package/dist/inputs.d.ts +107 -0
- package/dist/inputs.js +371 -0
- package/dist/iranMapData.d.ts +6 -0
- package/dist/iranMapData.js +37 -0
- package/dist/map.d.ts +64 -0
- package/dist/map.js +416 -0
- package/dist/menu.d.ts +45 -0
- package/dist/menu.js +281 -0
- package/dist/nav.d.ts +163 -0
- package/dist/nav.js +918 -0
- package/dist/overlay.d.ts +79 -0
- package/dist/overlay.js +420 -0
- package/dist/pickers.d.ts +108 -0
- package/dist/pickers.js +655 -0
- package/dist/table.d.ts +53 -0
- package/dist/table.js +267 -0
- package/dist/toast.d.ts +45 -0
- package/dist/toast.js +141 -0
- package/package.json +63 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e,c as t,d as n,i as r,l as i,o as a,s as o,t as s,u as c}from"./base-Cmq7zeIG.js";import{i as l,n as u,r as d,t as f}from"./digits-DE1YGT94.js";import{t as p}from"./words-9OdzG7y6.js";function m(e){let t=u(e);if(!/^\d{10}$/.test(t)||/^(\d)\1{9}$/.test(t))return!1;let n=Number(t[9]),r=0;for(let e=0;e<9;e++)r+=Number(t[e])*(10-e);let i=r%11;return i<2?n===i:n===11-i}const h={603799:{name:`بانک ملی`,slug:`melli`},589210:{name:`بانک سپه`,slug:`sepah`},627648:{name:`بانک توسعه صادرات`,slug:`edbi`},627961:{name:`بانک صنعت و معدن`,slug:`bim`},603770:{name:`بانک کشاورزی`,slug:`keshavarzi`},639217:{name:`بانک کشاورزی`,slug:`keshavarzi`},628023:{name:`بانک مسکن`,slug:`maskan`},627760:{name:`پست بانک`,slug:`postbank`},502908:{name:`بانک توسعه تعاون`,slug:`tosee-taavon`},627412:{name:`بانک اقتصاد نوین`,slug:`eghtesad-novin`},622106:{name:`بانک پارسیان`,slug:`parsian`},639194:{name:`بانک پارسیان`,slug:`parsian`},627884:{name:`بانک پارسیان`,slug:`parsian`},502229:{name:`بانک پاسارگاد`,slug:`pasargad`},639347:{name:`بانک پاسارگاد`,slug:`pasargad`},627488:{name:`بانک کارآفرین`,slug:`karafarin`},502910:{name:`بانک کارآفرین`,slug:`karafarin`},621986:{name:`بانک سامان`,slug:`saman`},639346:{name:`بانک سینا`,slug:`sina`},639607:{name:`بانک سرمایه`,slug:`sarmayeh`},636214:{name:`بانک آینده`,slug:`ayandeh`},502806:{name:`بانک شهر`,slug:`shahr`},504706:{name:`بانک شهر`,slug:`shahr`},502938:{name:`بانک دی`,slug:`dey`},603769:{name:`بانک صادرات`,slug:`saderat`},610433:{name:`بانک ملت`,slug:`mellat`},991975:{name:`بانک ملت`,slug:`mellat`},627353:{name:`بانک تجارت`,slug:`tejarat`},585983:{name:`بانک تجارت`,slug:`tejarat`},589463:{name:`بانک رفاه`,slug:`refah`},505785:{name:`بانک ایران زمین`,slug:`iran-zamin`},606373:{name:`بانک قرضالحسنه مهر ایران`,slug:`mehr-iran`},505416:{name:`بانک گردشگری`,slug:`gardeshgari`},636795:{name:`بانک مرکزی`,slug:`markazi`},585947:{name:`بانک خاورمیانه`,slug:`khavarmianeh`},505809:{name:`بانک خاورمیانه`,slug:`khavarmianeh`},507677:{name:`موسسه اعتباری نور`,slug:`noor`},606256:{name:`موسسه اعتباری ملل`,slug:`melal`},628157:{name:`موسسه اعتباری توسعه`,slug:`tosee`},504172:{name:`بانک قرضالحسنه رسالت`,slug:`resalat`},627381:{name:`بانک انصار`,slug:`ansar`},639599:{name:`بانک قوامین`,slug:`ghavamin`},636949:{name:`بانک حکمت ایرانیان`,slug:`hekmat`},505801:{name:`موسسه اعتباری کوثر`,slug:`kosar`},639370:{name:`بانک مهر اقتصاد`,slug:`mehr-eghtesad`}};function g(e){let t=0;for(let n=0;n<e.length;n++){let r=Number(e[e.length-1-n]);n%2==1&&(r*=2,r>9&&(r-=9)),t+=r}return t%10==0}function _(e){let t=u(e);return/^\d{16}$/.test(t)&&g(t)}function v(e){let t=u(e);return t.length>=6?h[t.slice(0,6)]??null:null}function y(e){return u(e).slice(0,16).replace(/(\d{4})(?=\d)/g,`$1 `)}const b={"010":{name:`بانک مرکزی`,slug:`markazi`},"011":{name:`بانک صنعت و معدن`,slug:`bim`},"012":{name:`بانک ملت`,slug:`mellat`},"013":{name:`بانک رفاه`,slug:`refah`},"014":{name:`بانک مسکن`,slug:`maskan`},"015":{name:`بانک سپه`,slug:`sepah`},"016":{name:`بانک کشاورزی`,slug:`keshavarzi`},"017":{name:`بانک ملی`,slug:`melli`},"018":{name:`بانک تجارت`,slug:`tejarat`},"019":{name:`بانک صادرات`,slug:`saderat`},"020":{name:`بانک توسعه صادرات`,slug:`edbi`},"021":{name:`پست بانک`,slug:`postbank`},"022":{name:`بانک توسعه تعاون`,slug:`tosee-taavon`},"053":{name:`بانک کارآفرین`,slug:`karafarin`},"054":{name:`بانک پارسیان`,slug:`parsian`},"055":{name:`بانک اقتصاد نوین`,slug:`eghtesad-novin`},"056":{name:`بانک سامان`,slug:`saman`},"057":{name:`بانک پاسارگاد`,slug:`pasargad`},"058":{name:`بانک سرمایه`,slug:`sarmayeh`},"059":{name:`بانک سینا`,slug:`sina`},"060":{name:`بانک قرضالحسنه مهر ایران`,slug:`mehr-iran`},"061":{name:`بانک شهر`,slug:`shahr`},"062":{name:`بانک آینده`,slug:`ayandeh`},"064":{name:`بانک گردشگری`,slug:`gardeshgari`},"066":{name:`بانک دی`,slug:`dey`},"069":{name:`بانک ایران زمین`,slug:`iran-zamin`},"070":{name:`بانک قرضالحسنه رسالت`,slug:`resalat`},"078":{name:`بانک خاورمیانه`,slug:`khavarmianeh`}};function x(e){return d(e).toUpperCase().replace(/^\s*IR/,``).replace(/\D/g,``).slice(0,24)}function S(e){let t=0;for(let n=0;n<e.length;n+=7)t=Number(String(t)+e.slice(n,n+7))%97;return t}function C(e){let t=d(e).toUpperCase().replace(/[\s-]/g,``),n=t.startsWith(`IR`)?t.slice(2):t;return/^\d{24}$/.test(n)?S(n.slice(2)+`1827`+n.slice(0,2))===1:!1}function w(e){let t=x(e);return t.length>=5?b[t.slice(2,5)]??null:null}function T(e){let t=x(e);return t?`IR${t}`.replace(/(.{4})(?=.)/g,`$1 `):``}const E={name:`همراه اول`,slug:`mci`},D={name:`ایرانسل`,slug:`irancell`},O={name:`رایتل`,slug:`rightel`},k={...Object.fromEntries([`10`,`11`,`12`,`13`,`14`,`15`,`16`,`17`,`18`,`19`,`90`,`91`,`92`,`93`,`94`].map(e=>[e,E])),...Object.fromEntries([`01`,`02`,`03`,`04`,`05`,`30`,`33`,`35`,`36`,`37`,`38`,`39`,`41`].map(e=>[e,D])),...Object.fromEntries([`20`,`21`,`22`].map(e=>[e,O]))};function A(e){let t=u(e);return t.startsWith(`0098`)?t=`0`+t.slice(4):t.startsWith(`98`)&&t.length===12?t=`0`+t.slice(2):t.startsWith(`9`)&&t.length===10&&(t=`0`+t),t}function j(e){return/^09\d{9}$/.test(A(e))}function M(e){let t=A(e);return t.length>=4&&t.startsWith(`09`)?k[t.slice(2,4)]??null:null}function N(e){let t=A(e).slice(0,11);return[t.slice(0,4),t.slice(4,7),t.slice(7,11)].filter(Boolean).join(` `)}function P(e){let t=u(e);return/^(?!(\d)\1{3})[13-9]{4}[1346-9][013-9]{5}$/.test(t)}function F(e){let t=u(e).slice(0,10);return t.length>5?`${t.slice(0,5)}-${t.slice(5)}`:t}const I={11:`مازندران`,13:`گیلان`,17:`گلستان`,21:`تهران`,23:`سمنان`,24:`زنجان`,25:`قم`,26:`البرز`,28:`قزوین`,31:`اصفهان`,34:`کرمان`,35:`یزد`,38:`چهارمحال و بختیاری`,41:`آذربایجان شرقی`,44:`آذربایجان غربی`,45:`اردبیل`,51:`خراسان رضوی`,54:`سیستان و بلوچستان`,56:`خراسان جنوبی`,58:`خراسان شمالی`,61:`خوزستان`,66:`لرستان`,71:`فارس`,74:`کهگیلویه و بویراحمد`,76:`هرمزگان`,77:`بوشهر`,81:`همدان`,83:`کرمانشاه`,84:`ایلام`,86:`مرکزی`,87:`کردستان`};function L(e){let t=u(e);return t.startsWith(`0098`)?t=`0`+t.slice(4):t.startsWith(`98`)&&t.length===12?t=`0`+t.slice(2):/^[1-8]/.test(t)&&t.length===10&&(t=`0`+t),t}function R(e){let t=L(e);return t.length>=3&&t[0]===`0`?I[t.slice(1,3)]??null:null}function z(e){let t=L(e);return/^0\d{2}[2-9]\d{7}$/.test(t)&&R(t)!==null}function B(e){let t=L(e).slice(0,11);return[t.slice(0,3),t.slice(3,7),t.slice(7,11)].filter(Boolean).join(` `)}const V=[29,27,23,19,17,29,27,23,19,17];function H(e){let t=u(e);if(!/^\d{11}$/.test(t)||/^0+$/.test(t.slice(3,9)))return!1;let n=[...t].map(Number),r=n[9]+2,i=0;for(let e=0;e<10;e++)i+=(n[e]+r)*V[e];let a=i%11;return(a===10?0:a)===n[10]}const U=e=>l(e);function W(e,t){if(t===0)return e.search(/[0-9۰-۹]/)===-1?e.length:e.search(/[0-9۰-۹]/);let n=0;for(let r=0;r<e.length;r++)if(/[0-9۰-۹]/.test(e[r])&&++n===t)return r+1;return e.length}var G=class extends s{constructor(){super(...arguments),this.raw=``,this.touched=!1,this.valueSet=!1,this.rendered=!1,this.key=n(`kashi-in`),this.logoSlug=null}connectedCallback(){if(!this.rendered&&!this.valueSet&&(this.raw=this.clean(this.getAttribute(`value`)??``)),Object.prototype.hasOwnProperty.call(this,`value`)){let e=this.value;delete this.value,this.raw=this.clean(String(e??``))}this.render()}attributeChangedCallback(e,t,n){this.rendered&&t!==n&&(e===`value`?this.setRaw(this.clean(n??``),!1):this.render())}get value(){return this.kind.submit?this.kind.submit(this.raw):this.raw}set value(e){this.valueSet=!0,this.setRaw(this.clean(String(e??``)),!1)}get valid(){return this.isValid()}isValid(){return this.kind.valid(this.raw)}focus(e){this.input?.focus(e)}clean(e){let t=this.kind;return(t.normalize??(e=>e))(u(e)).slice(0,t.maxDigits)}get digits(){let e=this.getAttribute(`digits`);return e===`fa`||e===`latin`?e:this.kind.digits}shown(){let e=this.kind.format(this.raw);return this.digits===`fa`?U(e):e}render(){let e=this.kind,n=this.key,r=this.getAttribute(`aria-label`),i=this.hasAttribute(`label`)?this.getAttribute(`label`):r?null:e.label,a=this.getAttribute(`size`),s=this.hasAttribute(`required`),c=this.hasAttribute(`disabled`),l=this.getAttribute(`placeholder`)??e.placeholder[this.digits],u=`<div class="k-input${a===`sm`||a===`lg`?` k-input--${a}`:``}" data-size="${a??`md`}"${c?` data-state="disabled"`:``}><input id="${n}" class="k-input__control" type="${e.type??`text`}" inputmode="${e.inputMode??`numeric`}" autocomplete="${e.autocomplete??`off`}" dir="ltr" spellcheck="false" placeholder="${o(l)}"${s?` required`:``}${c?` disabled`:``}${this.hasAttribute(`readonly`)?` readonly`:``}${!i&&r?` aria-label="${o(r)}"`:``}></div>`;this.querySelector(`:scope > .k-field`)?.remove(),this.insertAdjacentHTML(`afterbegin`,t({id:n,label:i,required:s,control:u})),this.input=this.querySelector(`input.k-input__control`),this.input.addEventListener(`input`,()=>this.onInput()),this.input.addEventListener(`blur`,()=>{this.touched=!0,this.paint()}),this.rendered=!0,this.paint()}onInput(){let e=this.input,t=e.value.slice(0,e.selectionStart??e.value.length),n=this.clean(e.value),r=Math.min(u(t).length,n.length);if(this.setRaw(n,!0),e.ownerDocument.activeElement===e){let t=W(e.value,r);e.setSelectionRange(t,t)}}setRaw(e,t){let n=e!==this.raw;this.raw=e,this.rendered&&(this.paint(),t&&n&&a(this,`kashi-change`,{value:this.value,valid:this.isValid(),...this.kind.detail?.(this.raw)}))}invalidText(e){return this.raw.length>0&&(e||this.raw.length===this.kind.maxDigits)&&!this.isValid()?this.getAttribute(`invalid-message`)??this.kind.invalidMessage:null}hintText(){return this.getAttribute(`hint`)}paint(){let e=this.input,t=this.shown();e.value!==t&&(e.value=t);let n=e.parentElement;n.querySelector(`:scope > .k-input__addon`)?.remove();let a=r(this,`show-meta`,!0)?this.kind.meta?.(this.raw,this):null,s=`${this.key}-meta`;if(a){let e=document.createElement(`span`);e.className=`k-input__addon`,e.innerHTML=a.bank?`<span class="k-bank" id="${s}">${o(a.text)}</span>`:`<span class="k-input__meta" id="${s}">${o(a.text)}</span>`,n.append(e),a.bank&&r(this,`bank-logo`,!0)&&this.loadLogo(a.bank,e.firstElementChild)}let l=this.getAttribute(`error`)||this.invalidText(this.touched);e.setCustomValidity(this.raw&&!this.isValid()?this.invalidText(!0)??``:``),i(this.querySelector(`:scope > .k-field`),e,this.key,l,this.hintText(),a?s:null),c(this,this.getAttribute(`name`),this.raw?this.value:``)}loadLogo(e,t){this.logoSlug=e.slug,import(`./dist-D670Gw0K.js`).then(n=>{let r=n.bankLogoDataUri(e.slug);if(!r||this.logoSlug!==e.slug||!t.isConnected)return;let i=document.createElement(`img`);i.className=`k-bank__logo`,i.src=r,i.alt=``,i.width=i.height=24,t.prepend(i)}).catch(()=>{})}};G.observedAttributes=[`label`,`hint`,`error`,`placeholder`,`required`,`disabled`,`readonly`,`digits`,`invalid-message`,`name`,`value`,`size`,`aria-label`,`show-meta`,`bank-logo`];var K=class extends G{constructor(){super(...arguments),this.kind={label:`کد ملی`,maxDigits:10,format:e=>e,valid:e=>m(e),invalidMessage:`کد ملی معتبر نیست.`,placeholder:{fa:`۰۰۰۰۰۰۰۰۰۰`,latin:`0000000000`},digits:`fa`}}},q=class extends G{constructor(){super(...arguments),this.kind={label:`شناسهٔ ملی شرکت`,maxDigits:11,format:e=>e,valid:e=>H(e),invalidMessage:`شناسهٔ ملی معتبر نیست.`,placeholder:{fa:`۰۰۰۰۰۰۰۰۰۰۰`,latin:`00000000000`},digits:`fa`}}},J=class extends G{constructor(){super(...arguments),this.kind={label:`شمارهٔ موبایل`,maxDigits:11,normalize:A,format:N,valid:e=>j(e),invalidMessage:`شماره موبایل معتبر نیست.`,placeholder:{fa:`۰۹۱۲ ۳۴۵ ۶۷۸۹`,latin:`0912 345 6789`},digits:`fa`,type:`tel`,inputMode:`tel`,autocomplete:`tel-national`,meta:e=>{let t=M(e);return t?{text:t.name}:null},detail:e=>({operator:M(e)?.name??null})}}},Y=class extends G{constructor(){super(...arguments),this.kind={label:`تلفن ثابت`,maxDigits:11,normalize:L,format:B,valid:e=>z(e),invalidMessage:`شمارهٔ تلفن ثابت معتبر نیست.`,placeholder:{fa:`۰۲۱ ۸۸۷۷ ۶۶۵۵`,latin:`021 8877 6655`},digits:`fa`,type:`tel`,inputMode:`tel`,autocomplete:`tel-national`,meta:e=>{let t=R(e);return t?{text:t}:null},detail:e=>({province:R(e)})}}},X=class extends G{constructor(){super(...arguments),this.kind={label:`شمارهٔ کارت`,maxDigits:16,format:y,valid:e=>_(e),invalidMessage:`شماره کارت معتبر نیست.`,placeholder:{fa:`۰۰۰۰ ۰۰۰۰ ۰۰۰۰ ۰۰۰۰`,latin:`0000 0000 0000 0000`},digits:`fa`,autocomplete:`cc-number`,meta:e=>{let t=v(e);return t?{text:t.name,bank:t}:null},detail:e=>({bank:v(e)?.name??null})}}},Z=class extends G{constructor(){super(...arguments),this.kind={label:`شمارهٔ شبا`,maxDigits:24,format:e=>T(e),valid:e=>C(e),invalidMessage:`شماره شبا معتبر نیست.`,placeholder:{fa:`IR00 0000 0000 0000 0000 0000 00`,latin:`IR00 0000 0000 0000 0000 0000 00`},digits:`latin`,meta:e=>{let t=w(e);return t?{text:t.name,bank:t}:null},submit:e=>e?`IR${e}`:``,detail:e=>({bank:w(e)?.name??null})}}clean(e){return super.clean(e.replace(/^\s*IR/i,``))}},Q=class extends G{constructor(){super(...arguments),this.kind={label:`کد پستی`,maxDigits:10,format:F,valid:e=>P(e),invalidMessage:`کد پستی معتبر نیست.`,placeholder:{fa:`۱۲۳۴۵-۶۷۸۹۰`,latin:`12345-67890`},digits:`fa`,autocomplete:`postal-code`}}},$=class extends G{constructor(){super(...arguments),this.kind={label:`مبلغ`,maxDigits:15,normalize:e=>e.replace(/^0+(?=\d)/,``),format:e=>e?f(e,{digits:`latin`}).replace(/,/g,`٬`):``,valid:()=>this.inRange(),invalidMessage:``,placeholder:{fa:`۰`,latin:`0`},digits:`fa`,meta:(e,t)=>{let n=t.getAttribute(`unit`)??`تومان`;return n?{text:n}:null},detail:e=>({value:e?Number(e):null})}}get valueAsNumber(){return this.raw?Number(this.raw):null}num(e){let t=this.getAttribute(e);return t===null||t===``||Number.isNaN(Number(t))?void 0:Number(t)}inRange(){if(!this.raw)return!0;let e=Number(this.raw),t=this.num(`min`),n=this.num(`max`);return!(t!==void 0&&e<t||n!==void 0&&e>n)}invalidText(e){if(!e||this.inRange())return null;let t=this.getAttribute(`invalid-message`);if(t)return t;let n=this.num(`min`),r=this.num(`max`),i=e=>U(f(e));return`مبلغ باید ${n===void 0?``:`حداقل ${i(n)}`}${n!==void 0&&r!==void 0?` و `:``}${r===void 0?``:`حداکثر ${i(r)}`} باشد.`}hintText(){if(this.raw&&r(this,`show-words`,!0)){let e=this.getAttribute(`unit`)??`تومان`;return`${p(Number(this.raw))}${e?` ${e}`:``}`}return this.getAttribute(`hint`)}};$.observedAttributes=[...G.observedAttributes,`unit`,`min`,`max`,`show-words`],e(`kashi-national-id`,K,`block`),e(`kashi-legal-id`,q,`block`),e(`kashi-mobile`,J,`block`),e(`kashi-landline`,Y,`block`),e(`kashi-card-number`,X,`block`),e(`kashi-iban`,Z,`block`),e(`kashi-postal-code`,Q,`block`),e(`kashi-price`,$,`block`);export{X as KashiCardNumber,G as KashiDigitsInput,Z as KashiIban,Y as KashiLandline,q as KashiLegalId,J as KashiMobile,K as KashiNationalId,Q as KashiPostalCode,$ as KashiPrice};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e,r as t}from"./digits-DE1YGT94.js";const n=[`فروردین`,`اردیبهشت`,`خرداد`,`تیر`,`مرداد`,`شهریور`,`مهر`,`آبان`,`آذر`,`دی`,`بهمن`,`اسفند`],r=[`شنبه`,`یکشنبه`,`دوشنبه`,`سهشنبه`,`چهارشنبه`,`پنجشنبه`,`جمعه`],i=[`ش`,`ی`,`د`,`س`,`چ`,`پ`,`ج`],a=[-61,9,38,199,426,686,756,818,1111,1181,1210,1635,2060,2097,2192,2262,2324,2394,2456,3178],o=(e,t)=>~~(e/t),s=(e,t)=>e-~~(e/t)*t;function c(e){let t=e+621,n=-14,r=a[0],i=0;if(e<r||e>=a[a.length-1])throw RangeError(`سال شمسی خارج از محدوده: ${e}`);for(let t=1;t<a.length;t++){let c=a[t];if(i=c-r,e<c)break;n+=o(i,33)*8+o(s(i,33),4),r=c}let c=e-r;n+=o(c,33)*8+o(s(c,33)+3,4),s(i,33)===4&&i-c===4&&(n+=1);let l=o(t,4)-o((o(t,100)+1)*3,4)-150,u=20+n-l;i-c<6&&(c=c-i+o(i+4,33)*33);let d=s(s(c+1,33)-1,4);return d===-1&&(d=4),{leap:d,gy:t,march:u}}function l(e,t,n){let r=o((e+o(t-8,6)+100100)*1461,4)+o(153*s(t+9,12)+2,5)+n-34840408;return r=r-o(o(e+100100+o(t-8,6),100)*3,4)+752,r}function u(e){let t=4*e+139361631;t=t+o(o(4*e+183187720,146097)*3,4)*4-3908;let n=o(s(t,1461),4)*5+308,r=o(s(n,153),5)+1,i=s(o(n,153),12)+1;return{gy:o(t,1461)-100100+o(8-i,6),gm:i,gd:r}}function d(e,t,n){let r=c(e);return l(r.gy,3,r.march)+(t-1)*31-o(t,7)*(t-7)+n-1}function f(e){let{gy:t}=u(e),n=t-621,r=c(n),i=e-l(t,3,r.march);if(i>=0){if(i<=185)return{jy:n,jm:1+o(i,31),jd:s(i,31)+1};i-=186}else--n,i+=179,r.leap===1&&(i+=1);return{jy:n,jm:7+o(i,30),jd:s(i,30)+1}}function p(e){return c(e).leap===0}function m(e,t){return t<=6?31:t<=11||p(e)?30:29}function h(e,t,n){return Number.isInteger(e)&&Number.isInteger(t)&&Number.isInteger(n)&&e>=-61&&e<=3177&&t>=1&&t<=12&&n>=1&&n<=m(e,t)}function g(e){return f(l(e.getFullYear(),e.getMonth()+1,e.getDate()))}function _(e,t,n){let{gy:r,gm:i,gd:a}=u(d(e,t,n));return new Date(r,i-1,a)}function v(e){return(e.getDay()+1)%7}function y(t,{style:i=`numeric`,digits:a=`fa`}={}){let{jy:o,jm:s,jd:c}=g(t),l=e=>String(e).padStart(2,`0`),u;return i===`numeric`?u=`${o}/${l(s)}/${l(c)}`:(u=`${c} ${n[s-1]} ${o}`,i===`full`&&(u=`${r[v(t)]} ${u}`)),a===`fa`?e(u):u}function b(e){let t=e=>String(e).padStart(2,`0`);return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}`}function x(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 S(e){let n=t(e.trim()).match(/^(\d{4})\s*[/\-.\s]\s*(\d{1,2})\s*[/\-.\s]\s*(\d{1,2})$/);if(!n)return null;let[r,i,a]=[Number(n[1]),Number(n[2]),Number(n[3])];return h(r,i,a)?_(r,i,a):null}export{x as a,S as c,g as d,y as i,_ as l,r as n,m as o,i as r,v as s,n as t,b as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e,n as t,s as n,t as r}from"./base-Cmq7zeIG.js";let i=1;function a(){let e=document.querySelectorAll(`kashi-toaster`);if(e.length)return e[e.length-1];let t=document.createElement(`kashi-toaster`);return document.body.append(t),t}function o(e){let t=e.id??i++;return a().upsert({...e,id:t}),t}function s(e){return o(typeof e==`string`?{title:e}:e)}s.success=(e,t={})=>s({...t,title:e,tone:`success`}),s.error=(e,t={})=>s({...t,title:e,tone:`error`}),s.warning=(e,t={})=>s({...t,title:e,tone:`warning`}),s.info=(e,t={})=>s({...t,title:e,tone:`info`}),s.dismiss=e=>document.querySelectorAll(`kashi-toaster`).forEach(t=>t.dismiss(e)),s.promise=(e,t)=>{let n=o({title:t.loading,tone:`info`,duration:1/0,loading:!0});return e.then(e=>o({id:n,title:typeof t.success==`function`?t.success(e):t.success,tone:`success`}),e=>o({id:n,title:typeof t.error==`function`?t.error(e):t.error,tone:`error`})),e};var c=class extends r{constructor(){super(...arguments),this.list=null}connectedCallback(){this.list||=(this.innerHTML=`<section><ol class="k-toaster" aria-live="polite"></ol></section>`,this.querySelector(`ol`)),this.decorate()}attributeChangedCallback(){this.list&&this.decorate()}decorate(){let e=this.getAttribute(`placement`)??`bottom-end`;this.list.className=`k-toaster k-toaster--${e}`,this.list.dataset.placement=e,this.querySelector(`section`).setAttribute(`aria-label`,this.getAttribute(`label`)??`اعلانها`)}upsert(e){this.list||this.connectedCallback();let t=[...this.list.children].find(t=>t.toastId===e.id),n=l(e,this.getAttribute(`close-label`)??`بستن اعلان`,()=>this.dismiss(e.id));t?(t.stop?.(),t.replaceWith(n)):this.list.append(n);let r=Number(this.getAttribute(`max`))||5;for(;this.list.children.length>r;)this.list.firstElementChild.stop?.(),this.list.firstElementChild.remove()}dismiss(e){let t=[...this.list?.children??[]].find(t=>t.toastId===e);t&&t.dataset.state!==`closing`&&(t.stop?.(),t.dataset.state=`closing`,setTimeout(()=>t.remove(),200))}};c.observedAttributes=[`placement`,`label`];function l(e,r,i){let a=e.duration??(e.action?1/0:5e3),o=e.tone??`neutral`,s=document.createElement(`li`);s.toastId=e.id,s.className=`k-toast${o===`neutral`?``:` k-toast--${o}`}`,s.dataset.state=`open`,s.setAttribute(`role`,o===`error`?`alert`:`status`),s.innerHTML=`<span class="k-toast__icon" aria-hidden="true">${e.loading?`<span class="k-spinner k-spinner--sm" style="color: inherit"></span>`:t[o===`neutral`?`info`:o]}</span><div class="k-toast__content"><p class="k-toast__title">${n(e.title)}</p>${e.description?`<p class="k-toast__description">${n(e.description)}</p>`:``}${e.action?`<button type="button" class="k-btn k-btn--link k-toast__action">${n(e.action.label)}</button>`:``}</div><button type="button" class="k-btn k-btn--tertiary k-btn--icon k-btn--sm k-toast__close" aria-label="${n(r)}">${t.close}</button>${Number.isFinite(a)?`<span class="k-toast__progress" aria-hidden="true" style="animation-duration: ${a}ms"></span>`:``}`,s.querySelector(`.k-toast__close`).addEventListener(`click`,i),s.querySelector(`.k-toast__action`)?.addEventListener(`click`,()=>{e.action.onClick(),i()}),s.addEventListener(`keydown`,e=>e.key===`Escape`&&i());let c=a,l=0,u,d=()=>{u===void 0&&Number.isFinite(c)&&(l=Date.now(),u=setTimeout(i,c))},f=()=>{u!==void 0&&(clearTimeout(u),u=void 0,c-=Date.now()-l)};return s.addEventListener(`mouseenter`,f),s.addEventListener(`focusin`,f),s.addEventListener(`mouseleave`,d),s.addEventListener(`focusout`,d),s.stop=()=>{clearTimeout(u),c=1/0},d(),s}e(`kashi-toaster`,c),typeof document<`u`&&document.addEventListener(`click`,e=>{let t=e.target?.closest?.(`[data-kashi-toast]`);t&&s({title:t.dataset.kashiToast,description:t.dataset.description,tone:t.dataset.tone??`neutral`})});const u=/* @__PURE__ */ new Set([[[`kashi-national-id`,`kashi-legal-id`,`kashi-mobile`,`kashi-landline`,`kashi-card-number`,`kashi-iban`,`kashi-postal-code`,`kashi-price`],()=>import(`./inputs-BjOddAM7.js`)],[[`kashi-otp`],()=>import(`./fields-BUTaSN8m.js`)],[[`kashi-combobox`,`kashi-province-select`,`kashi-city-select`],()=>import(`./combobox-ZGrZ5okg.js`)],[[`kashi-iran-map`,`kashi-address-form`],()=>import(`./map-BHuusa4t.js`)],[[`kashi-calendar`,`kashi-date-picker`],()=>import(`./calendar-Dm3fq2bs.js`)],[[`kashi-money`,`kashi-date`,`kashi-relative-time`,`kashi-countdown`],()=>import(`./display-C975tS7j.js`)],[[`kashi-dialog`,`kashi-tabs`,`kashi-tooltip`,`kashi-copy-button`],()=>import(`./overlay-DX9un2xm.js`)],[[`kashi-dropdown-menu`,`kashi-popover`],()=>import(`./menu-DhrqyLgy.js`)],[[`kashi-tag-input`,`kashi-number-input`,`kashi-rating`,`kashi-pagination`],()=>import(`./controls-K-OZcjg4.js`)],[[`kashi-data-table`],()=>import(`./table-DPQfDMs-.js`)],[[`kashi-multi-select`,`kashi-slider`,`kashi-chip-group`,`kashi-password-strength`,`kashi-persian-textarea`,`kashi-keyboard-fix`,`kashi-time-input`,`kashi-plate-input`,`kashi-inline-edit`],()=>import(`./forms-C-effPKn.js`)],[[`kashi-date-range-picker`,`kashi-month-picker`,`kashi-file-upload`,`kashi-color-picker`],()=>import(`./pickers-BFLpUruK.js`)],[[`kashi-bar-chart`,`kashi-line-chart`,`kashi-pie-chart`,`kashi-bar-list`,`kashi-proportion-bar`,`kashi-sparkline`,`kashi-activity-heatmap`],()=>import(`./charts-DNOWi4sJ.js`)],[[`kashi-command-palette`,`kashi-context-menu`,`kashi-carousel`,`kashi-tree-view`,`kashi-tour`,`kashi-splitter`,`kashi-side-nav`],()=>import(`./nav-D_w5BV_K.js`)]]);function d(){for(let e of u)document.querySelector(e[0].join(`,`))&&(u.delete(e),e[1]().catch(e=>console.error(`[kashi] بارگذاری نشد:`,e)));u.size||p?.disconnect()}function f(){let e=[...u].map(([,e])=>e());return u.clear(),p?.disconnect(),Promise.all(e)}let p=null;typeof document<`u`&&(d(),p=new MutationObserver(d),p.observe(document.documentElement,{childList:!0,subtree:!0}));export{f as loadAll,s as toast};
|
|
@@ -0,0 +1,12 @@
|
|
|
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-Cmq7zeIG.js";import{t as s}from"./digits-DE1YGT94.js";import{n as c,r as l,t as u}from"./combobox-ZGrZ5okg.js";import"./inputs-BjOddAM7.js";const d=`0 0 1000 907`,f={"آذربایجان شرقی":{x:123,y:128,d:`M163 199l1-7l10-12l11-8l17-2l20 2l7-4l-13-8l-2-7l-12-7l-1-7l2-10l-8-10l-5-17l-15 0l-10-6l10-13l7 0l2-16l-6-22l-13 8l-12 19l-8-2l-10 4l-5-5l5-9l5 1l12-6l6-7l-4-9l-8 1l-15 18l-10-1l-13 4l-33-8l-6 6l-3 10l0 14l-9 9l-3 10l5 7l4 34l4 7l2 15l16 10l12 1l8 8l11 7l5-7l13-5l8 5l2 13l7 3z`},"آذربایجان غربی":{x:39,y:59,d:`M75 53l-8-13l-9-3l-6-11l-5-4l-4-11l-17-11l-5 5l-3 17l-7 4l-11-1l1 13l6 4l-3 10l7 10l-1 8l2 7l0 15l7 1l-5 18l-6 9l0 6l8 1l4 6l8 3l-2 18l13 10l-3 12l7 5l-3 16l9 3l2 6l-3 7l7 9l6 0l6 20l1 7l7-2l12-15l8-3l4-8l4-2l13 2l27-3l6 6l11 2l10-11l-7-16l-12 1l-7-3l-2-13l-8-5l-13 5l-5 7l-11-7l-8-8l-12-1l-16-10l-2-15l-4-7l-4-34l-5-7l3-10l9-9l0-14l3-10z`},اردبیل:{x:202,y:87,d:`M229 168l7 5l3-4l12 1l-1-10l-8-8l-8-13l-5-13l3-13l12-14l-7-7l-9-12l-7-2l-5-9l-10-6l2-8l10-2l3-5l-8-9l-1-8l11-5l-15-18l-11-3l-29 21l-10 5l-4 8l4 9l-6 7l-12 6l-5-1l-5 9l5 5l10-4l8 2l12-19l13-8l6 22l-2 16l-7 0l-10 13l10 6l15 0l5 17l8 10l-2 10l1 7l12 7l2 7z`},اصفهان:{x:414,y:418,d:`M296 467l10-6l9-1l6 4l10 0l6-4l15-2l6 10l1 10l15 12l4 11l-4 7l-1 18l5 16l0 7l3 11l14 12l5-1l0-11l7-21l-9-7l6-6l17-11l4 10l16 2l18-5l-3-9l5-25l-2-19l15-11l9-2l16 4l55-19l9-6l6-19l3-4l12-5l6-12l-1-42l-4-3l-125 4l-25-8l-23 0l-10-6l-17 5l-15 1l-8 6l-2 12l3 3l-7 19l-12 5l-22 6l-13 8l-1 9l-7 14l-8 2l-4 11l-8 7l2 6l13 3z`},البرز:{x:353,y:249,d:`M351 227l-12-1l-8 2l11 9l-5 13l-12 7l-3 7l2 5l16 1l11 3l13-13l4-11l12-3l0-6l-3-4l-14-6z`},ایلام:{x:143,y:429,d:`M87 397l8 0l8 16l6 7l1 6l-4 13l9 0l11 4l12 8l21 18l12 1l3 7l9 14l9-7l-1-7l9-16l-10-20l-13-15l-11-5l-22-20l7-9l18-5l6-6l-2-9l-11 1l1 12l-24 1l-13-4l-7-5l-16-5l-11 1z`},بوشهر:{x:387,y:698,d:`M312 606l4 5l1 11l5 5l8 12l13 12l0 19l10 0l4 4l-5 9l3 5l9 6l1 10l4 10l6 7l0 7l6 10l11 8l7 1l15 0l12 9l9 2l8 6l2 11l4 2l2-3l13-1l-10-7l-14-15l-7-16l-9-8l-9-27l-24-44l-8-6l-14-19l-21-5l-6-9l-1-7l-9-4l-11-2z`},تهران:{x:384,y:274,d:`M380 240l0 6l-12 3l-4 11l-13 13l4 10l-5 14l15 1l13 3l29 18l5-16l-8-12l2-15l6 1l13 8l24 5l11-5l8-7l2-6l-3-14l-11-2l-22-7l-11 12l-12-1l-10-13l-15-4z`},"چهارمحال و بختیاری":{x:346,y:499,d:`M323 529l12 6l5 0l19 17l8 1l11-4l0-7l-5-16l1-18l4-7l-4-11l-15-12l-1-10l-6-10l-15 2l-6 4l-10 0l-6-4l-9 1l-10 6l1 5l9 17l6 4l6 14l8 9l1 6z`},"خراسان جنوبی":{x:802,y:473,d:`M734 452l-3 11l7 13l-3 13l-7 9l-11 22l59 27l8 5l21 30l40-12l18 10l12 15l10-4l-3-12l1-20l6-17l0-11l-16-2l-3-33l3-14l-13-45l0-10l13-16l3-9l-12 0l-7-5l0-13l-2-15l-36 1l-7-3l-8-10l-10 4l-16 3l-2 2l-14-2l-3 22l-2 6l4 8l8 6l-7 11l-16 11l-7 11z`},"خراسان رضوی":{x:784,y:272,d:`M657 206l6 6l-4 10l0 19l4 12l15 14l0 4l-13 22l-11 4l-13 10l-8 10l21-5l21-10l13-4l6 2l15 12l1 8l-5 5l-21 14l-3 6l-7 20l0 11l3 18l2 4l11 1l13-3l4 7l4 26l3 7l14 8l6 8l5-13l7-11l16-11l7-11l-8-6l-4-8l2-6l3-22l14 2l2-2l16-3l10-4l8 10l7 3l36-1l2-7l7-7l12-1l-9-14l12-6l6-11l3-16l0-13l9-18l-3-7l1-14l-4-8l3-7l-4-19l2-11l-6-4l-38 1l-17-26l-27-10l-7-9l-1-11l-7-2l-9-6l-9-4l-8 2l-10-3l-8 4l-8-3l-2-7l-23-8l-8 6l0 9l24 1l7 11l-1 9l-7 21l11 9l-4 5l1 9l-5 3l-15-2l-34-20l-9 0l-12 10z`},"خراسان شمالی":{x:674,y:152,d:`M712 124l-20-4l0-8l-7-12l-9 5l-16-5l-8 2l-8-1l-14 11l0 21l7 5l-2 8l-15 6l-5 8l12 16l-2 15l13 14l11 3l8-2l3-11l12-10l9 0l34 20l15 2l5-3l-1-9l4-5l-11-9l7-21l1-9l-7-11l-24-1l0-9z`},خوزستان:{x:253,y:524,d:`M183 491l13 21l-8 22l0 25l18 1l0 31l7 2l13 12l3 14l8 2l1-5l13 1l3-3l-1-10l-3-6l6-10l10 0l-9 12l13 9l12 0l6 8l17-11l7 0l9-2l11 2l-4-19l2-10l-8-5l-6-7l-9 2l0-9l-2-9l2-7l6-3l10-10l4-7l-1-6l-8-9l-6-14l-6-4l-9-17l-1-5l0-10l-13-3l-2-6l-11 0l-12-8l-12-1l-11-5l-22 2l-3 2l-10 23l-9 16l1 7z`},زنجان:{x:228,y:211,d:`M170 215l2 1l26 6l4 7l1 15l-3 11l14 8l3 4l4 5l11 0l9 4l6-5l-11-12l10-5l13-3l9-6l9-3l0-8l-4-11l-8-3l-6-11l1-9l10-5l-3-11l-8-9l-8-5l-12-1l-3 4l-7-5l-7 4l-20-2l-17 2l-11 8l-10 12l-1 7z`},سمنان:{x:554,y:286,d:`M615 160l-12 17l-10 22l-18-3l-14 6l-12 11l-7 3l-18 0l-10 4l-6 8l-2 9l-10 12l-6 4l-8 1l-15 4l3 14l-2 6l-8 7l-11 5l-24-5l-13-8l-6-1l-2 15l8 12l-5 16l1 8l-6 13l10 6l23 0l25 8l125-4l4 3l19-1l6-3l19-32l8-10l13-10l11-4l13-22l0-4l-15-14l-4-12l0-19l4-10l-6-6l-8 2l-11-3l-13-14l2-15z`},"سیستان و بلوچستان":{x:863,y:770,d:`M805 582l-11 50l0 5l5 8l2 12l-2 11l-4 7l0 13l2 7l-16 11l-9 3l8 10l-7 13l-1 27l-6 23l3 21l6 10l-3 7l0 9l3 8l-4 16l-2 4l13 11l9 14l0 4l11-2l4 4l12 0l7 4l9-2l7 2l8 0l3-5l7-2l4 10l21 4l8 5l12 3l4-8l6-5l2-27l6-4l2-19l3-5l20-6l2-9l7-3l9-1l8-4l21 1l2-12l4-3l-2-10l1-9l-4-3l-13 3l-6-1l-2-7l3-8l-2-20l-3-10l2-12l-10-1l-11-12l-16-3l-8-4l-13-12l-4-7l-5-13l-7-10l-3-9l-23-27l49-58l2-13l-4-16l-5-5l-27-4l0 11l-6 17l-1 20l3 12l-10 4l-12-15l-18-10z`},فارس:{x:473,y:666,d:`M464 773l5 7l12 1l8 5l5-1l16 2l5-2l3-13l8-5l27-2l14 2l9-5l4-8l17-6l2-5l-7-8l2-14l0-10l-16-15l1-6l-3-9l-10-26l-17-4l-9-20l-19-11l-3-17l-11-14l-8-16l-12-30l-15-16l-13-5l-18 5l-16-2l-4-10l-17 11l-6 6l9 7l-7 21l0 11l-5 1l0 13l-6 2l-16-7l-5-1l4 16l-1 6l-14 8l-16 1l1 7l6 9l21 5l14 19l8 6l24 44l9 27l9 8l7 16l14 15z`},قزوین:{x:304,y:239,d:`M270 195l-10 5l-1 9l6 11l8 3l4 11l0 8l-9 3l-9 6l-13 3l-10 5l11 12l8-1l8 10l17 3l9 0l4-5l31-9l-2-5l3-7l12-7l5-13l-11-9l8-2l12 1l-1-3l-25-20l-11 1l-15 6l-17-4z`},قم:{x:368,y:323,d:`M407 319l-29-18l-13-3l-15-1l-3 7l-2 13l-28 8l1 7l-6 6l13 9l1 7l6 6l14 1l17 6l-3-3l2-12l8-6l15-1l17-5l6-13z`},کردستان:{x:152,y:265,d:`M75 247l16 13l13-3l9 9l-10 1l-4 13l8 13l12 8l12 17l5 9l14-1l4-8l12-5l1-5l7-1l1-5l11 3l8 9l3 0l13-1l3-8l-1-6l-8-7l-9-18l8 1l14-8l-3-4l-14-8l3-11l-1-15l-4-7l-26-6l-2-1l-10 11l-11-2l-6-6l-27 3l-13-2l-4 2l-4 8l-8 3z`},کرمان:{x:697,y:622,d:`M717 520l-56-24l-6-1l-4 4l-14 10l-28 15l-2 4l-2 24l-9 4l-9 1l-11-1l-30 5l-7 10l-1 7l11 23l-1 19l2 8l-10 3l9 20l17 4l10 26l14 3l7 7l7 2l11-8l9-1l1 33l4 6l10 7l6 1l10-4l10-9l8 3l2 16l6 4l8 11l-2 6l5 10l3 25l21 11l9-5l11 9l-3 3l-4 30l16-1l7 2l5 8l7-2l7 5l4-16l-3-8l0-9l3-7l-6-10l-3-21l6-23l1-27l7-13l-8-10l9-3l16-11l-2-7l0-13l4-7l2-11l-2-12l-5-8l0-5l11-50l-21-30l-8-5z`},کرمانشاه:{x:139,y:357,d:`M107 293l3 6l-9 8l-7 3l-2 8l-8 5l-2 6l3 11l-10-3l-3 14l6 4l-1 11l-6 8l12 20l4 3l5-24l11-1l16 5l7 5l13 4l24-1l-1-12l11-1l1-8l9-3l0-8l6-1l3-4l13-1l0-7l-19-6l11-20l-3 0l-8-9l-11-3l-1 5l-7 1l-1 5l-12 5l-4 8l-14 1l-5-9l-12-17z`},"کهگیلویه و بویراحمد":{x:348,y:570,d:`M332 606l9 4l16-1l14-8l1-6l-4-16l5 1l16 7l6-2l0-13l-14-12l-3-11l-11 4l-8-1l-19-17l-5 0l-12-6l-10 10l-6 3l-2 7l2 9l0 9l9-2l6 7l8 5l-2 10z`},گلستان:{x:577,y:168,d:`M630 112l-9 1l-14-3l-15 3l-16 8l-14 12l-3 8l-1 8l-8 6l-23 7l-14-1l6 25l-1 9l-16 0l3 6l11 6l8 9l18 0l7-3l12-11l14-6l18 3l10-22l12-17l5-8l15-6l2-8l-7-5z`},گیلان:{x:295,y:181,d:`M251 170l8 5l8 9l3 11l12 12l17 4l15-6l11-1l7-12l7-8l-13-11l-9-16l-11-4l-26-2l-16-9l-6-7l-6-23l-1-23l-14 3l7 7l-12 14l-3 13l5 13l8 13l8 8z`},لرستان:{x:221,y:403,d:`M173 372l2 9l-6 6l-18 5l-7 9l22 20l11 5l13 15l10 20l10-23l3-2l22-2l11 5l12 1l12 8l11 0l8-7l4-11l8-2l7-14l1-9l-9-10l-4 6l-9-8l1-6l-7-6l-7 4l-7 9l-14-4l3-15l-15-6l-10 3l-15-2l-27-18l-6 1l0 8l-9 3z`},مازندران:{x:467,y:227,d:`M325 204l25 20l1 3l12 3l14 6l3 4l6 3l15 4l10 13l12 1l11-12l22 7l11 2l15-4l8-1l6-4l10-12l2-9l6-8l10-4l-8-9l-11-6l-3-6l-2-4l-9-1l-20 5l-17 5l-45 10l-43-10l-27-16l-7 8z`},مرکزی:{x:294,y:357,d:`M280 283l2 8l-8 0l4 11l-7 7l11 4l5 13l-8-2l-1-7l-14 0l-2 10l0 9l-7 2l1 11l4 7l2 11l-6 8l-3 15l14 4l7-9l7-4l7 6l-1 6l9 8l4-6l9 10l13-8l22-6l12-5l7-19l-17-6l-14-1l-6-6l-1-7l-13-9l6-6l-1-7l28-8l2-13l3-7l5-14l-4-10l-11-3l-16-1l-31 9l-4 5z`},هرمزگان:{x:651,y:758,d:`M771 853l-7-5l-7 2l-5-8l-7-2l-16 1l4-30l3-3l-11-9l-9 5l-21-11l-3-25l-5-10l2-6l-8-11l-6-4l-2-16l-8-3l-10 9l-10 4l-6-1l-10-7l-4-6l-1-33l-9 1l-11 8l-7-2l-7-7l-14-3l3 9l-1 6l16 15l0 10l-2 14l7 8l-2 5l-17 6l-4 8l-9 5l-14-2l-27 2l-8 5l-3 13l-5 2l-16-2l-5 1l-8-5l-12-1l-5-7l-13 1l-2 3l20 13l18 6l4 8l12 8l14-2l17 2l4 6l9 2l3 4l9 1l25-17l6 1l8-2l3-9l4-3l14-1l9-8l12-2l12 3l12 0l8 10l6 21l0 10l3 10l4 6l-3 4l9 18l23 3l1 5l9-3l6 7l24-1l14 1l10 9l6 1l7-2l0-4l-9-14l-13-11zM633 795l-9 2l-13 8l-3 3l-20 8l8 3l10-6l9-3l4 3l7-5z`},همدان:{x:235,y:319,d:`M197 314l-11 20l19 6l0 7l-13 1l-3 4l27 18l15 2l10-3l15 6l6-8l-2-11l-4-7l-1-11l7-2l0-9l2-10l14 0l1 7l8 2l-5-13l-11-4l7-7l-4-11l8 0l-2-8l-17-3l-8-10l-8 1l-6 5l-9-4l-11 0l-4-5l-14 8l-8-1l9 18l8 7l1 6l-3 8z`},یزد:{x:615,y:452,d:`M633 317l-19 32l-6 3l-19 1l1 42l-6 12l-12 5l-3 4l-6 19l-9 6l-55 19l-16-4l-9 2l-15 11l2 19l-5 25l3 9l13 5l15 16l12 30l8 16l11 14l3 17l19 11l10-3l-2-8l1-19l-11-23l1-7l7-10l30-5l11 1l9-1l9-4l2-24l2-4l28-15l14-10l4-4l6 1l56 24l11-22l7-9l3-13l-7-13l3-11l-6-8l-14-8l-3-7l-4-26l-4-7l-13 3l-11-1l-2-4l-3-18l0-11l7-20l3-6l21-14l5-5l-1-8l-15-12l-6-2l-13 4l-21 10z`}},p=l.map(e=>e.name),m=Object.fromEntries(l.map(e=>[e.name,e.capital])),[,,h,g]=d.split(` `).map(Number);var _=class extends o{constructor(){super(...arguments),this.values=null,this.selected=[],this.active=0,this.rendered=!1,this.valueSet=!1,this.key=t(`kashi-map`)}connectedCallback(){this.rendered||(this.valueSet||(this.selected=(this.getAttribute(`value`)??``).split(/[,،]/).map(e=>e.trim()).filter(e=>p.includes(e))),this.values===null&&(this.values=this.parseData(this.getAttribute(`data`)))),this.render()}attributeChangedCallback(e,t,n){this.rendered&&t!==n&&(e===`data`&&(this.values=this.parseData(n)),e===`value`?this.value=n??``:this.render())}parseData(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}get data(){return this.values}set data(e){this.values=e,this.rendered&&this.render()}get value(){return this.selected.join(`,`)}set value(e){this.valueSet=!0,this.selected=String(e??``).split(/[,،]/).map(e=>e.trim()).filter(e=>p.includes(e)),this.multiple||(this.selected=this.selected.slice(0,1)),this.rendered&&this.paint()}get selectedProvinces(){return[...this.selected]}get multiple(){return n(this,`multiple`)}get selectable(){return this.multiple||n(this,`selectable`)||this.hasAttribute(`value`)||this.hasAttribute(`name`)}fmt(e){return s(e)}level(e){let t=this.values,n=t?.[e];if(typeof n!=`number`||!t)return;let r=this.steps,i=p.map(e=>t[e]).filter(e=>typeof e==`number`),a=Math.min(...i),o=Math.max(...i);if(o===a)return r;if(this.getAttribute(`scale`)!==`linear`){let e=[...i].sort((e,t)=>e-t);return 1+Math.round(e.indexOf(n)*(r-1)/(e.length-1))}return Math.min(r,1+Math.floor((n-a)/(o-a)*r))}get steps(){return Number(this.getAttribute(`steps`))||5}shade(e){return`${Math.round(12+88*e/this.steps)}%`}describe(e){let t=this.values?.[e],n=this.getAttribute(`unit`);return typeof t==`number`?`${e}: ${this.fmt(t)}${n?` ${n}`:``}`:e}render(){let e=this.getAttribute(`label`)??`نقشهٔ استانهای ایران`,t=this.selectable,r=this.multiple,i=this.values,o=this.getAttribute(`unit`),s=p.map((e,n)=>{let i=this.level(e);return`<path d="${f[e].d}" class="k-iran-map__province" data-i="${n}"${i?` data-l="${i}" style="--_p: ${this.shade(i)}"`:``}${t?` role="${r?`checkbox`:`radio`}" aria-label="${a(this.describe(e))}"`:``}></path>`}).join(``),c=i?p.map(e=>i[e]).filter(e=>typeof e==`number`):[],l=(this.hasAttribute(`legend`)?n(this,`legend`):i)&&c.length?`<figcaption class="k-iran-map__legend"><span>${this.fmt(Math.min(...c))}</span><span class="k-iran-map__scale" aria-hidden="true">${Array.from({length:this.steps},(e,t)=>`<i style="--_p: ${this.shade(t+1)}"></i>`).join(``)}</span><span>${this.fmt(Math.max(...c))}${o?` ${a(o)}`:``}</span></figcaption>`:``,u=i?`<table class="k-sr-only"><caption>${a(e)}</caption><tbody>${p.filter(e=>typeof i[e]==`number`).sort((e,t)=>i[t]-i[e]).map(e=>`<tr><th scope="row">${a(e)}</th><td>${this.fmt(i[e])}${o?` ${a(o)}`:``}</td></tr>`).join(``)}</tbody></table>`:``;this.innerHTML=`<figure class="k-iran-map${t?` k-iran-map--selectable`:``}"><div class="k-iran-map__canvas" style="block-size: auto; aspect-ratio: ${h} / ${g}"><svg viewBox="${d}" class="k-iran-map__svg" role="${t?r?`group`:`radiogroup`:`img`}" aria-label="${a(t?e:`${e}${i?`؛ جدول داده در ادامه`:``}`)}">${s}</svg><div class="k-chart__tip" aria-hidden="true" style="display: none"></div></div>${l}${u}</figure>`;let m=this.querySelector(`svg`),_=this.querySelector(`figure`);m.addEventListener(`pointerover`,e=>{let t=e.target.getAttribute?.(`data-i`);t!=null&&this.tip(Number(t))}),_.addEventListener(`pointerleave`,()=>this.tip(null)),t&&(m.addEventListener(`click`,e=>{let t=e.target.getAttribute?.(`data-i`);t!=null&&(this.active=Number(t),this.toggle(p[this.active]))}),m.addEventListener(`keydown`,e=>this.onKey(e)),m.addEventListener(`focusin`,e=>{let t=e.target.getAttribute?.(`data-i`);t!=null&&(this.active=Number(t),this.tip(this.active))}),m.addEventListener(`focusout`,()=>this.tip(null))),this.rendered=!0,this.paint()}paint(){let e=this.selectable,t=p.findIndex(e=>this.selected.includes(e)),n=this.contains(document.activeElement)||t<0?this.active:t;this.querySelectorAll(`.k-iran-map__province`).forEach((t,r)=>{let i=this.selected.includes(p[r]);t.toggleAttribute(`data-selected`,i),e&&(t.setAttribute(`aria-checked`,String(i)),t.setAttribute(`tabindex`,r===n?`0`:`-1`))});let r=this.getAttribute(`name`);if(this.querySelectorAll(`:scope > input[type=hidden]`).forEach(e=>e.remove()),r)for(let e of this.multiple?this.selected:[this.selected[0]??``]){let t=document.createElement(`input`);t.type=`hidden`,t.name=r,t.value=e,this.append(t)}}toggle(e){this.selected=this.multiple?this.selected.includes(e)?this.selected.filter(t=>t!==e):[...this.selected,e]:this.selected[0]===e?[]:[e],this.paint(),r(this,`kashi-change`,{value:this.multiple?[...this.selected]:this.selected[0]??null})}onKey(e){let t=this.active,n={ArrowLeft:1,ArrowDown:1,ArrowRight:-1,ArrowUp:-1}[e.key],r=t;if(n)r=(t+n+p.length)%p.length;else if(e.key===`Home`)r=0;else if(e.key===`End`)r=p.length-1;else if(e.key===`Enter`||e.key===` `){e.preventDefault(),this.toggle(p[t]);return}else return;e.preventDefault(),this.active=r,this.paint(),this.querySelector(`[data-i="${r}"]`)?.focus()}tip(e){let t=this.querySelector(`.k-chart__tip`);if(!t)return;if(this.querySelector(`.k-iran-map__province[data-active]`)?.removeAttribute(`data-active`),e===null){t.style.display=`none`;return}let n=p[e];this.querySelector(`[data-i="${e}"]`)?.setAttribute(`data-active`,``);let r=f[n],i=this.querySelector(`figure`).clientWidth||h,o=this.values?.[n],s=this.getAttribute(`unit`),c=typeof o==`number`?`${this.fmt(o)}${s?` ${s}`:``}`:`مرکز: ${m[n]}`;t.innerHTML=`<span class="k-chart__tip-title">${a(n)}</span><span class="k-chart__tip-row"><strong>${a(c)}</strong></span>`,t.style.left=`${Math.min(Math.max(r.x/h*i,80),i-80)}px`,t.style.top=`${Math.max(64,r.y/g*(g/h*i)-6)}px`,t.style.display=``}};_.observedAttributes=[`data`,`value`,`label`,`unit`,`steps`,`scale`,`legend`,`selectable`,`multiple`,`name`];const v={province:`استان`,city:`شهر`,street:`نشانی`,plaque:`پلاک`,unit:`واحد`,postalCode:`کد پستی`};var y=class extends o{constructor(){super(...arguments),this.address={...u},this.built=!1,this.key=t(`kashi-address`)}connectedCallback(){i(()=>{if(this.isConnected){if(!this.built){let e=Object.prototype.hasOwnProperty.call(this,`value`)?this.value:null;delete this.value;let t=this.getAttribute(`value`),n=e??{};if(!e&&t)try{n=JSON.parse(t)}catch{}this.address={...u,...n}}this.render()}})}attributeChangedCallback(e,t,n){this.built&&t!==n&&this.render()}get value(){return{...this.address}}set value(e){this.address={...u,...e},this.built&&this.render()}set errors(e){for(let t of Object.keys(v)){let n=this.querySelector(`[data-field="${t}"]`);n&&(n.matches(`kashi-province-select, kashi-city-select, kashi-postal-code`)?e[t]?n.setAttribute(`error`,e[t]):n.removeAttribute(`error`):this.fieldError(n,e[t]??null))}}label(e){return this.getAttribute(`label-${e===`postalCode`?`postal-code`:e}`)??v[e]}render(){let e=this.address,t=this.getAttribute(`name`),r=e=>t?` name="${a(`${t}[${e}]`)}"`:``,i=n(this,`required`,!0),o=i?` required`:``,s=n(this,`map`),l=this.key,u=i?`<span class="k-label__required" aria-hidden="true">*</span>`:``,d=this.getAttribute(`legend`)??`نشانی`;this.innerHTML=`<fieldset class="k-address${s?` k-address--map`:``}"${this.hasAttribute(`disabled`)?` disabled`:``}>
|
|
2
|
+
${d?`<legend class="k-address__legend">${a(d)}</legend>`:``}
|
|
3
|
+
<div class="k-address__fields">
|
|
4
|
+
<kashi-province-select class="k-address__province" data-field="province" label="${a(this.label(`province`))}" show-capital="false" placeholder="جستجوی استان"${r(`province`)}${o}></kashi-province-select>
|
|
5
|
+
<kashi-city-select class="k-address__city" data-field="city" label="${a(this.label(`city`))}"${r(`city`)}${o}></kashi-city-select>
|
|
6
|
+
<div class="k-field k-address__street" data-field="street"><div class="k-field__label-row"><label class="k-label" for="${l}-street">${a(this.label(`street`))}${u}</label></div><div class="k-input k-input--textarea k-input--autoresize"><textarea id="${l}-street" class="k-input__control" rows="2" autocomplete="street-address" placeholder="خیابان، کوچه، نام ساختمان"${r(`street`)}${o}></textarea></div></div>
|
|
7
|
+
<div class="k-field k-address__plaque" data-field="plaque"><div class="k-field__label-row"><label class="k-label" for="${l}-plaque">${a(this.label(`plaque`))}${u}</label></div><div class="k-input"><input id="${l}-plaque" class="k-input__control" inputmode="numeric" autocomplete="address-line2"${r(`plaque`)}${o}></div></div>
|
|
8
|
+
<div class="k-field k-address__unit" data-field="unit"><div class="k-field__label-row"><label class="k-label" for="${l}-unit">${a(this.label(`unit`))}${i?`<span class="k-label__optional">اختیاری</span>`:``}</label></div><div class="k-input"><input id="${l}-unit" class="k-input__control" inputmode="numeric" autocomplete="address-line3"${r(`unit`)}></div></div>
|
|
9
|
+
<kashi-postal-code class="k-address__postal" data-field="postalCode" label="${a(this.label(`postalCode`))}"${r(`postalCode`)}${o}></kashi-postal-code>
|
|
10
|
+
</div>
|
|
11
|
+
${s?`<kashi-iran-map class="k-address__map" selectable label="${a(`${this.label(`province`)} روی نقشه`)}"></kashi-iran-map>`:``}
|
|
12
|
+
</fieldset>`,this.built=!0;let f=this.querySelector(`kashi-province-select`),p=this.querySelector(`kashi-city-select`),m=this.querySelector(`kashi-postal-code`),h=this.querySelector(`kashi-iran-map`),g=this.querySelector(`textarea`),_=this.querySelector(`#${l}-plaque`),v=this.querySelector(`#${l}-unit`);e.province&&(f.value=e.province),e.province&&p.setAttribute(`province`,e.province),e.city&&(p.value=e.city),m.value=e.postalCode,g.value=e.street,_.value=e.plaque,v.value=e.unit,h&&e.province&&(h.value=e.province);let y=e=>{let t=e&&this.address.city&&c(e).includes(this.address.city);this.address={...this.address,province:e,city:t?this.address.city:null},f.value!==(e??``)&&(f.value=e??``),p.province=e,t||(p.value=``),h&&(h.value=e??``),this.changed()},b=e=>e.stopPropagation();f.addEventListener(`kashi-change`,e=>{b(e),y(e.detail.value||null)}),h?.addEventListener(`kashi-change`,e=>{b(e),y(e.detail.value)}),p.addEventListener(`kashi-change`,e=>{b(e);let{value:t,province:n}=e.detail;this.address={...this.address,city:t||null},n&&!this.address.province?y(n):this.changed()}),m.addEventListener(`kashi-change`,e=>{b(e),this.address={...this.address,postalCode:e.detail.value},this.changed()});for(let[e,t]of[[g,`street`],[_,`plaque`],[v,`unit`]])e.addEventListener(`input`,()=>{this.address={...this.address,[t]:e.value},this.changed()})}changed(){r(this,`kashi-change`,{value:this.value})}fieldError(e,t){e.querySelector(`.k-field__hint-row`)?.remove();let n=e.querySelector(`.k-input__control`);e.toggleAttribute(`data-invalid`,!!t),t?(e.insertAdjacentHTML(`beforeend`,`<div class="k-field__hint-row"><div class="k-field__hints"><p class="k-hint k-hint--error" id="${n.id}-error">${a(t)}</p></div></div>`),n.setAttribute(`aria-invalid`,`true`),n.setAttribute(`aria-describedby`,`${n.id}-error`)):(n.removeAttribute(`aria-invalid`),n.removeAttribute(`aria-describedby`))}};y.observedAttributes=[`legend`,`name`,`map`,`required`,`disabled`],e(`kashi-iran-map`,_,`block`),e(`kashi-address-form`,y,`block`);export{y as KashiAddressForm,_ as KashiIranMap};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e,d as t,o as n,r,s as i,t as a}from"./base-Cmq7zeIG.js";const o=e=>[...e.querySelectorAll(`[role^="menuitem"]:not([aria-disabled="true"])`)];var s=class extends a{constructor(){super(...arguments),this.menu=null,this.trigger=null,this.key=t(`kashi-menu`),this.onOutside=e=>{this.contains(e.target)||this.close(!1)}}connectedCallback(){r(()=>this.isConnected&&!this.menu&&this.build())}disconnectedCallback(){document.removeEventListener(`pointerdown`,this.onOutside)}attributeChangedCallback(){this.menu&&this.decorate()}get open(){return!!this.menu&&!this.menu.hidden}build(){let[e,...t]=[...this.children];if(!e)return;this.classList.add(`k-menu-anchor`),this.trigger=e,e.id||=`${this.key}-trigger`,e.setAttribute(`aria-haspopup`,`menu`),e.setAttribute(`aria-expanded`,`false`);let r=document.createElement(`ul`);r.id=`${this.key}-menu`,r.setAttribute(`role`,`menu`),r.hidden=!0;for(let e of t){let t=document.createElement(`li`);if(e.tagName===`HR`)t.setAttribute(`role`,`separator`),t.className=`k-menu__separator`,e.remove();else if(e.hasAttribute(`data-label`))t.setAttribute(`role`,`presentation`),t.className=`k-menu__label`,t.textContent=e.textContent,e.remove();else{t.setAttribute(`role`,`none`);let n=e.hasAttribute(`data-checked`);e.setAttribute(`role`,n?`menuitemcheckbox`:`menuitem`),e.tabIndex=-1,e.classList.add(`k-menu__item`),e.dataset.tone===`danger`&&e.classList.add(`k-menu__item--danger`),e instanceof HTMLButtonElement&&(e.type=`button`,e.disabled&&(e.disabled=!1,e.setAttribute(`aria-disabled`,`true`)));let r=e.innerHTML;e.innerHTML=`${n?`<span class="k-menu__check" aria-hidden="true"></span>`:``}<span>${r}</span>${e.dataset.shortcut?`<span class="k-menu__shortcut" aria-hidden="true">${i(e.dataset.shortcut)}</span>`:``}`,n&&this.paintCheck(e),t.append(e)}r.append(t)}this.append(r),this.menu=r,this.decorate(),e.addEventListener(`click`,()=>this.open?this.close(!1):this.show(`first`)),e.addEventListener(`keydown`,e=>{(e.key===`ArrowDown`||e.key===`ArrowUp`)&&(e.preventDefault(),this.show(e.key===`ArrowUp`?`last`:`first`))}),r.addEventListener(`keydown`,e=>this.onKey(e)),r.addEventListener(`click`,e=>{let t=e.target.closest(`[role^="menuitem"]`);t&&t.getAttribute(`aria-disabled`)!==`true`&&(t.getAttribute(`role`)===`menuitemcheckbox`&&(t.dataset.checked=String(t.dataset.checked!==`true`),this.paintCheck(t)),n(this,`kashi-select`,{value:t.dataset.value??t.textContent?.trim()??``,checked:t.dataset.checked===void 0?void 0:t.dataset.checked===`true`}),t.getAttribute(`role`)===`menuitem`&&this.close(t.tagName!==`A`))})}paintCheck(e){let t=e.dataset.checked===`true`;e.setAttribute(`aria-checked`,String(t)),e.querySelector(`.k-menu__check`).innerHTML=t?`<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m5 10.5 3.2 3L15 7"/></svg>`:``}decorate(){let e=this.getAttribute(`label`);this.menu.className=`k-menu${this.getAttribute(`align`)===`end`?` k-menu--end`:``}`,e?(this.menu.setAttribute(`aria-label`,e),this.menu.removeAttribute(`aria-labelledby`)):(this.menu.setAttribute(`aria-labelledby`,this.trigger.id),this.menu.removeAttribute(`aria-label`))}show(e=`first`){if(!this.menu)return;this.menu.hidden=!1,this.trigger.setAttribute(`aria-expanded`,`true`),this.trigger.setAttribute(`aria-controls`,this.menu.id);let t=o(this.menu);(e===`last`?t.at(-1):t[0])?.focus(),document.addEventListener(`pointerdown`,this.onOutside)}close(e=!0){this.menu&&!this.menu.hidden&&(this.menu.hidden=!0,this.trigger.setAttribute(`aria-expanded`,`false`),this.trigger.removeAttribute(`aria-controls`),document.removeEventListener(`pointerdown`,this.onOutside),e&&this.trigger.focus())}onKey(e){let t=o(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 if(e.key.length===1&&/\S/.test(e.key)){let r=e.key.toLowerCase();[...t.slice(n+1),...t.slice(0,n+1)].find(e=>e.textContent?.trim().toLowerCase().startsWith(r))?.focus()}else return;e.preventDefault()}};s.observedAttributes=[`label`,`align`];var c=class extends a{constructor(){super(...arguments),this.panel=null,this.trigger=null,this.key=t(`kashi-pop`),this.onOutside=e=>{this.contains(e.target)||this.close(!1)}}connectedCallback(){r(()=>this.isConnected&&!this.panel&&this.build())}disconnectedCallback(){document.removeEventListener(`pointerdown`,this.onOutside)}attributeChangedCallback(){this.panel&&this.decorate()}get open(){return!!this.panel&&!this.panel.hidden}set open(e){e?this.show():this.close(!1)}build(){let[e,...t]=[...this.childNodes].filter(e=>e.nodeType===1||e.textContent?.trim());if(!e)return;this.classList.add(`k-popover-anchor`),this.trigger=e,e.setAttribute(`aria-haspopup`,`dialog`),e.setAttribute(`aria-expanded`,`false`);let n=document.createElement(`div`);n.id=`${this.key}-panel`,n.setAttribute(`role`,`dialog`),n.tabIndex=-1,n.hidden=!0,n.innerHTML=`<p class="k-popover__title" id="${this.key}-title"></p><div class="k-popover__body"></div>`,n.querySelector(`.k-popover__body`).append(...t),this.append(n),this.panel=n,this.decorate(),e.addEventListener(`click`,()=>this.open?this.close(!1):this.show()),n.addEventListener(`keydown`,e=>{e.key===`Escape`&&(e.stopPropagation(),this.close(!0))}),n.addEventListener(`focusout`,e=>{let t=e.relatedTarget;t&&!this.contains(t)&&this.close(!1)})}decorate(){let e=this.panel,[t,n]=(this.getAttribute(`placement`)??`bottom-start`).split(`-`);e.className=[`k-popover`,t===`top`&&`k-popover--top`,n===`end`&&`k-popover--end`].filter(Boolean).join(` `);let r=this.getAttribute(`heading`),i=e.querySelector(`.k-popover__title`);i.textContent=r??``,i.hidden=!r,r?(e.setAttribute(`aria-labelledby`,i.id),e.removeAttribute(`aria-label`)):(e.removeAttribute(`aria-labelledby`),e.setAttribute(`aria-label`,this.getAttribute(`label`)??``))}show(){this.panel&&!this.open&&(this.panel.hidden=!1,this.trigger.setAttribute(`aria-expanded`,`true`),this.trigger.setAttribute(`aria-controls`,this.panel.id),(this.panel.querySelector(`.k-popover__body :is(a[href], button:not([disabled]), input:not([disabled]), select, textarea, [tabindex]:not([tabindex="-1"]))`)??this.panel).focus(),document.addEventListener(`pointerdown`,this.onOutside),n(this,`kashi-open`,{}))}close(e=!0){this.panel&&!this.panel.hidden&&(this.panel.hidden=!0,this.trigger.setAttribute(`aria-expanded`,`false`),this.trigger.removeAttribute(`aria-controls`),document.removeEventListener(`pointerdown`,this.onOutside),e&&this.trigger.focus(),n(this,`kashi-close`,{}))}};c.observedAttributes=[`heading`,`placement`,`label`],e(`kashi-dropdown-menu`,s),e(`kashi-popover`,c);export{s as KashiDropdownMenu,c as KashiPopover};
|
|
@@ -0,0 +1 @@
|
|
|
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-Cmq7zeIG.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};
|
|
@@ -0,0 +1 @@
|
|
|
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-Cmq7zeIG.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};
|
|
@@ -0,0 +1 @@
|
|
|
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-Cmq7zeIG.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-Dm3fq2bs.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};
|
|
@@ -0,0 +1 @@
|
|
|
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-Cmq7zeIG.js";import{i as s}from"./digits-DE1YGT94.js";import{n as c}from"./text-D1U32D6K.js";import{cellNumber as l}from"./controls-K-OZcjg4.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};
|
|
@@ -0,0 +1 @@
|
|
|
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};
|
|
@@ -0,0 +1 @@
|
|
|
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};
|
package/dist/cdn.d.ts
ADDED
package/dist/cdn.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// نسخهٔ CDN با بارگذاری تنبل: هر بخش فقط وقتی یکی از تگهایش در صفحه پیدا شود دانلود میشود.
|
|
2
|
+
// صفحهای که فقط فیلد کد ملی دارد، نقشه و نمودارها را دانلود نمیکند.
|
|
3
|
+
export { toast } from "./toast.js";
|
|
4
|
+
const MODULES = [
|
|
5
|
+
[["kashi-national-id", "kashi-legal-id", "kashi-mobile", "kashi-landline", "kashi-card-number", "kashi-iban", "kashi-postal-code", "kashi-price"], () => import("./inputs.js")],
|
|
6
|
+
[["kashi-otp"], () => import("./fields.js")],
|
|
7
|
+
[["kashi-combobox", "kashi-province-select", "kashi-city-select"], () => import("./combobox.js")],
|
|
8
|
+
[["kashi-iran-map", "kashi-address-form"], () => import("./map.js")],
|
|
9
|
+
[["kashi-calendar", "kashi-date-picker"], () => import("./calendar.js")],
|
|
10
|
+
[["kashi-money", "kashi-date", "kashi-relative-time", "kashi-countdown"], () => import("./display.js")],
|
|
11
|
+
[["kashi-dialog", "kashi-tabs", "kashi-tooltip", "kashi-copy-button"], () => import("./overlay.js")],
|
|
12
|
+
[["kashi-dropdown-menu", "kashi-popover"], () => import("./menu.js")],
|
|
13
|
+
[["kashi-tag-input", "kashi-number-input", "kashi-rating", "kashi-pagination"], () => import("./controls.js")],
|
|
14
|
+
[["kashi-data-table"], () => import("./table.js")],
|
|
15
|
+
[["kashi-multi-select", "kashi-slider", "kashi-chip-group", "kashi-password-strength", "kashi-persian-textarea", "kashi-keyboard-fix", "kashi-time-input", "kashi-plate-input", "kashi-inline-edit"], () => import("./forms.js")],
|
|
16
|
+
[["kashi-date-range-picker", "kashi-month-picker", "kashi-file-upload", "kashi-color-picker"], () => import("./pickers.js")],
|
|
17
|
+
[["kashi-bar-chart", "kashi-line-chart", "kashi-pie-chart", "kashi-bar-list", "kashi-proportion-bar", "kashi-sparkline", "kashi-activity-heatmap"], () => import("./charts.js")],
|
|
18
|
+
[["kashi-command-palette", "kashi-context-menu", "kashi-carousel", "kashi-tree-view", "kashi-tour", "kashi-splitter", "kashi-side-nav"], () => import("./nav.js")],
|
|
19
|
+
];
|
|
20
|
+
const pending = new Set(MODULES);
|
|
21
|
+
/** بخشهایی را که تگشان در صفحه است بارگذاری میکند */
|
|
22
|
+
function scan() {
|
|
23
|
+
for (const entry of pending) {
|
|
24
|
+
if (!document.querySelector(entry[0].join(",")))
|
|
25
|
+
continue;
|
|
26
|
+
pending.delete(entry);
|
|
27
|
+
entry[1]().catch((e) => console.error("[kashi] بارگذاری نشد:", e));
|
|
28
|
+
}
|
|
29
|
+
if (!pending.size)
|
|
30
|
+
observer?.disconnect();
|
|
31
|
+
}
|
|
32
|
+
/** همهٔ عنصرها را همین حالا بارگذاری میکند؛ مثلاً پیش از ساختن عنصرها با JavaScript */
|
|
33
|
+
export function loadAll() {
|
|
34
|
+
const all = [...pending].map(([, load]) => load());
|
|
35
|
+
pending.clear();
|
|
36
|
+
observer?.disconnect();
|
|
37
|
+
return Promise.all(all);
|
|
38
|
+
}
|
|
39
|
+
let observer = null;
|
|
40
|
+
if (typeof document !== "undefined") {
|
|
41
|
+
scan();
|
|
42
|
+
observer = new MutationObserver(scan);
|
|
43
|
+
observer.observe(document.documentElement, { childList: true, subtree: true });
|
|
44
|
+
}
|
package/dist/charts.d.ts
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { HTMLBase } from "./base.js";
|
|
2
|
+
type Series = {
|
|
3
|
+
name: string;
|
|
4
|
+
values: number[];
|
|
5
|
+
};
|
|
6
|
+
type Point = {
|
|
7
|
+
label: string;
|
|
8
|
+
value: number;
|
|
9
|
+
href?: string;
|
|
10
|
+
};
|
|
11
|
+
type Row = {
|
|
12
|
+
name?: string;
|
|
13
|
+
value: string;
|
|
14
|
+
color?: string;
|
|
15
|
+
};
|
|
16
|
+
/** پایهٔ نمودارها: داده از ویژگیهای JSON یا JavaScript، با هر تغییر دوباره رسم میشود */
|
|
17
|
+
declare abstract class Chart extends HTMLBase {
|
|
18
|
+
protected key: string;
|
|
19
|
+
private fmt?;
|
|
20
|
+
protected props: Record<string, unknown>;
|
|
21
|
+
protected abstract draw(): void;
|
|
22
|
+
connectedCallback(): void;
|
|
23
|
+
attributeChangedCallback(): void;
|
|
24
|
+
/** قالب عدد در راهنما و برچسبها */
|
|
25
|
+
get format(): (n: number) => string;
|
|
26
|
+
set format(f: (n: number) => string);
|
|
27
|
+
/** مقدار دادهشده با JavaScript، وگرنه ویژگی JSON */
|
|
28
|
+
protected read<T>(name: string, fallback: T): T;
|
|
29
|
+
protected write(name: string, v: unknown): void;
|
|
30
|
+
/** عنوان نمودار با ویژگی label (نه title، که راهنمای پیشفرض مرورگر را روی کل نمودار نشان میدهد) */
|
|
31
|
+
protected get heading(): string;
|
|
32
|
+
/** راهنمای شناور داخل box در نقطهٔ (x, y)؛ داخل ظرف میماند */
|
|
33
|
+
protected tip(box: HTMLElement, x: number | null, y?: number, title?: string, rows?: Row[]): void;
|
|
34
|
+
/** موقعیت بالای یک عنصر نسبت به ظرف */
|
|
35
|
+
protected at(el: Element, box: Element): {
|
|
36
|
+
x: number;
|
|
37
|
+
y: number;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/** نمودار ستونی: data='[{"label":"…","value":…}]'، یا انباشته با labels و series (تا چهار سری) */
|
|
41
|
+
export declare class KashiBarChart extends Chart {
|
|
42
|
+
static observedAttributes: string[];
|
|
43
|
+
get data(): Point[];
|
|
44
|
+
set data(v: Point[]);
|
|
45
|
+
get series(): Series[];
|
|
46
|
+
set series(v: Series[]);
|
|
47
|
+
get labels(): string[];
|
|
48
|
+
set labels(v: string[]);
|
|
49
|
+
protected draw(): void;
|
|
50
|
+
}
|
|
51
|
+
/** میلههای افقی برای رتبهبندی: data='[{"label":"…","value":…,"href":"…"}]' */
|
|
52
|
+
export declare class KashiBarList extends Chart {
|
|
53
|
+
static observedAttributes: string[];
|
|
54
|
+
get data(): Point[];
|
|
55
|
+
set data(v: Point[]);
|
|
56
|
+
protected draw(): void;
|
|
57
|
+
}
|
|
58
|
+
/** سهم هر بخش از کل در یک میلهٔ افقی (تا چهار بخش): data='[{"label":"…","value":…}]' */
|
|
59
|
+
export declare class KashiProportionBar extends Chart {
|
|
60
|
+
static observedAttributes: string[];
|
|
61
|
+
get data(): Point[];
|
|
62
|
+
set data(v: Point[]);
|
|
63
|
+
protected draw(): void;
|
|
64
|
+
}
|
|
65
|
+
/** نمودار دایرهای یا دونات تا پنج بخش (بقیه در «سایر»): data='[{"label":"…","value":…}]'، variant="pie" */
|
|
66
|
+
export declare class KashiPieChart extends Chart {
|
|
67
|
+
static observedAttributes: string[];
|
|
68
|
+
get data(): Point[];
|
|
69
|
+
set data(v: Point[]);
|
|
70
|
+
protected draw(): void;
|
|
71
|
+
}
|
|
72
|
+
/** خط روند کوچک برای کارت آمار و جدول: values="12, 18, 15, 22" */
|
|
73
|
+
export declare class KashiSparkline extends Chart {
|
|
74
|
+
static observedAttributes: string[];
|
|
75
|
+
get values(): number[];
|
|
76
|
+
set values(v: number[]);
|
|
77
|
+
protected draw(): void;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* نمودار خطی تا چهار سری: labels='["فروردین", …]' و series='[{"name":"…","values":[…]}]'.
|
|
81
|
+
* راهنمای عمودی با موس و ←→ روی کیبورد؛ محور زمان در RTL از راست شروع میشود.
|
|
82
|
+
*/
|
|
83
|
+
export declare class KashiLineChart extends Chart {
|
|
84
|
+
static observedAttributes: string[];
|
|
85
|
+
private ro;
|
|
86
|
+
private active;
|
|
87
|
+
get labels(): string[];
|
|
88
|
+
set labels(v: string[]);
|
|
89
|
+
get series(): Series[];
|
|
90
|
+
set series(v: Series[]);
|
|
91
|
+
connectedCallback(): void;
|
|
92
|
+
disconnectedCallback(): void;
|
|
93
|
+
protected draw(): void;
|
|
94
|
+
private geometry;
|
|
95
|
+
private paintSvg;
|
|
96
|
+
private pick;
|
|
97
|
+
private setActive;
|
|
98
|
+
}
|
|
99
|
+
/** نقشهٔ فعالیت سالانه با ماههای شمسی: data='{"2026-03-21": 3, …}'، year="1405"، unit="فعالیت" */
|
|
100
|
+
export declare class KashiActivityHeatmap extends Chart {
|
|
101
|
+
static observedAttributes: string[];
|
|
102
|
+
get data(): Record<string, number>;
|
|
103
|
+
set data(v: Record<string, number>);
|
|
104
|
+
protected draw(): void;
|
|
105
|
+
}
|
|
106
|
+
export {};
|