persian-data-grid 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/OFL.txt +93 -0
  2. package/README.md +179 -22
  3. package/dist/ERPTableGroupRow-E5Q6FYDS.js +125 -0
  4. package/dist/ERPTableGroupRow-E5Q6FYDS.js.map +1 -0
  5. package/dist/ERPTableGroupRow-F2IPDYL5.cjs +131 -0
  6. package/dist/ERPTableGroupRow-F2IPDYL5.cjs.map +1 -0
  7. package/dist/GridPlugin-Bewn0X51.d.ts +57 -0
  8. package/dist/GridPlugin-DewWufGZ.d.cts +57 -0
  9. package/dist/GridPresenceService-GEH6535Q.js +3 -0
  10. package/dist/GridPresenceService-GEH6535Q.js.map +1 -0
  11. package/dist/GridPresenceService-RDN5FXHQ.cjs +12 -0
  12. package/dist/GridPresenceService-RDN5FXHQ.cjs.map +1 -0
  13. package/dist/GridSession-CeIfVFck.d.ts +2625 -0
  14. package/dist/GridSession-CmQn2RnL.d.cts +2625 -0
  15. package/dist/GridSyncService-3JQLEY65.cjs +12 -0
  16. package/dist/GridSyncService-3JQLEY65.cjs.map +1 -0
  17. package/dist/GridSyncService-GECXGEKL.js +3 -0
  18. package/dist/GridSyncService-GECXGEKL.js.map +1 -0
  19. package/dist/PdfRenderer-B9FJaCo_.d.cts +22 -0
  20. package/dist/PdfRenderer-bN7ca_Aj.d.ts +22 -0
  21. package/dist/RemoteApi-CCQxiSf1.d.cts +28 -0
  22. package/dist/RemoteApi-CCQxiSf1.d.ts +28 -0
  23. package/dist/SelectImpl-NM4O4IGW.js +447 -0
  24. package/dist/SelectImpl-NM4O4IGW.js.map +1 -0
  25. package/dist/SelectImpl-W2EI4T7O.cjs +453 -0
  26. package/dist/SelectImpl-W2EI4T7O.cjs.map +1 -0
  27. package/dist/UITableController-C71LXBiX.d.ts +678 -0
  28. package/dist/UITableController-CIwnHIw8.d.cts +678 -0
  29. package/dist/VazirmatnPdfRenderer-CpCqA-Wh.d.cts +96 -0
  30. package/dist/VazirmatnPdfRenderer-D46smncn.d.ts +96 -0
  31. package/dist/adapters/arian-erp.cjs +89 -0
  32. package/dist/adapters/arian-erp.cjs.map +1 -0
  33. package/dist/adapters/arian-erp.d.cts +62 -0
  34. package/dist/adapters/arian-erp.d.ts +62 -0
  35. package/dist/adapters/arian-erp.js +79 -0
  36. package/dist/adapters/arian-erp.js.map +1 -0
  37. package/dist/appendAtEnd-RHIQRG2W.cjs +35 -0
  38. package/dist/appendAtEnd-RHIQRG2W.cjs.map +1 -0
  39. package/dist/appendAtEnd-TJEABLGD.js +33 -0
  40. package/dist/appendAtEnd-TJEABLGD.js.map +1 -0
  41. package/dist/applyImportedRows-C2fWYoPy.d.cts +135 -0
  42. package/dist/applyImportedRows-Cqh_N_0k.d.ts +135 -0
  43. package/dist/applyRowVisibilityHandler-Q64ZFC7A.cjs +86 -0
  44. package/dist/applyRowVisibilityHandler-Q64ZFC7A.cjs.map +1 -0
  45. package/dist/applyRowVisibilityHandler-ZLZXQEGY.js +84 -0
  46. package/dist/applyRowVisibilityHandler-ZLZXQEGY.js.map +1 -0
  47. package/dist/broadcastChannelTransport-FHUMV76O.cjs +12 -0
  48. package/dist/broadcastChannelTransport-FHUMV76O.cjs.map +1 -0
  49. package/dist/broadcastChannelTransport-MIH53VNZ.js +3 -0
  50. package/dist/broadcastChannelTransport-MIH53VNZ.js.map +1 -0
  51. package/dist/callbackRemoteApi-BYLjmSI6.d.ts +51 -0
  52. package/dist/callbackRemoteApi-Cv26MmSD.d.cts +51 -0
  53. package/dist/cellRenderContext-BaNh4qn_.d.ts +42 -0
  54. package/dist/cellRenderContext-DvngkptV.d.cts +42 -0
  55. package/dist/chunk-27ALJSZP.js +12187 -0
  56. package/dist/chunk-27ALJSZP.js.map +1 -0
  57. package/dist/chunk-3HP3HQCW.cjs +688 -0
  58. package/dist/chunk-3HP3HQCW.cjs.map +1 -0
  59. package/dist/chunk-3Y3KKGEC.js +3 -0
  60. package/dist/chunk-3Y3KKGEC.js.map +1 -0
  61. package/dist/chunk-52LFOPXD.cjs +588 -0
  62. package/dist/chunk-52LFOPXD.cjs.map +1 -0
  63. package/dist/chunk-5ALMNLUR.cjs +1408 -0
  64. package/dist/chunk-5ALMNLUR.cjs.map +1 -0
  65. package/dist/chunk-5HKVMPBD.js +937 -0
  66. package/dist/chunk-5HKVMPBD.js.map +1 -0
  67. package/dist/chunk-72IVAOTK.cjs +38 -0
  68. package/dist/chunk-72IVAOTK.cjs.map +1 -0
  69. package/dist/chunk-77UXAJII.js +112 -0
  70. package/dist/chunk-77UXAJII.js.map +1 -0
  71. package/dist/chunk-7GWV5HGO.js +36 -0
  72. package/dist/chunk-7GWV5HGO.js.map +1 -0
  73. package/dist/chunk-7T6AWRPU.js +581 -0
  74. package/dist/chunk-7T6AWRPU.js.map +1 -0
  75. package/dist/chunk-AU3RDJYQ.js +243 -0
  76. package/dist/chunk-AU3RDJYQ.js.map +1 -0
  77. package/dist/chunk-CILNIWYW.cjs +100 -0
  78. package/dist/chunk-CILNIWYW.cjs.map +1 -0
  79. package/dist/chunk-CMQ4VLCW.cjs +840 -0
  80. package/dist/chunk-CMQ4VLCW.cjs.map +1 -0
  81. package/dist/chunk-DFFP7SJ6.cjs +257 -0
  82. package/dist/chunk-DFFP7SJ6.cjs.map +1 -0
  83. package/dist/chunk-E2J533UH.cjs +53 -0
  84. package/dist/chunk-E2J533UH.cjs.map +1 -0
  85. package/dist/chunk-EBV6HGZB.cjs +33 -0
  86. package/dist/chunk-EBV6HGZB.cjs.map +1 -0
  87. package/dist/chunk-F4PYOYHR.js +112 -0
  88. package/dist/chunk-F4PYOYHR.js.map +1 -0
  89. package/dist/chunk-F6EMC75A.cjs +34 -0
  90. package/dist/chunk-F6EMC75A.cjs.map +1 -0
  91. package/dist/chunk-GKE33FOJ.js +32 -0
  92. package/dist/chunk-GKE33FOJ.js.map +1 -0
  93. package/dist/chunk-GQEDLUMB.js +168 -0
  94. package/dist/chunk-GQEDLUMB.js.map +1 -0
  95. package/dist/chunk-HLOHWFOA.js +645 -0
  96. package/dist/chunk-HLOHWFOA.js.map +1 -0
  97. package/dist/chunk-IMPCRWYP.cjs +251 -0
  98. package/dist/chunk-IMPCRWYP.cjs.map +1 -0
  99. package/dist/chunk-IPPIXOVQ.js +317 -0
  100. package/dist/chunk-IPPIXOVQ.js.map +1 -0
  101. package/dist/chunk-J4XJ4UBC.js +1404 -0
  102. package/dist/chunk-J4XJ4UBC.js.map +1 -0
  103. package/dist/chunk-J7CPPFXT.cjs +89 -0
  104. package/dist/chunk-J7CPPFXT.cjs.map +1 -0
  105. package/dist/chunk-JOICD47Q.cjs +41 -0
  106. package/dist/chunk-JOICD47Q.cjs.map +1 -0
  107. package/dist/chunk-KCNTKYUY.js +206 -0
  108. package/dist/chunk-KCNTKYUY.js.map +1 -0
  109. package/dist/chunk-KHMG6EI2.js +13 -0
  110. package/dist/chunk-KHMG6EI2.js.map +1 -0
  111. package/dist/chunk-KMRURD5J.cjs +15 -0
  112. package/dist/chunk-KMRURD5J.cjs.map +1 -0
  113. package/dist/chunk-KRJG3KMP.cjs +174 -0
  114. package/dist/chunk-KRJG3KMP.cjs.map +1 -0
  115. package/dist/chunk-LY27YAXE.cjs +208 -0
  116. package/dist/chunk-LY27YAXE.cjs.map +1 -0
  117. package/dist/chunk-MT3KLB2Q.cjs +944 -0
  118. package/dist/chunk-MT3KLB2Q.cjs.map +1 -0
  119. package/dist/chunk-MUQQKPWR.js +84 -0
  120. package/dist/chunk-MUQQKPWR.js.map +1 -0
  121. package/dist/chunk-N7SJTINL.cjs +4 -0
  122. package/dist/chunk-N7SJTINL.cjs.map +1 -0
  123. package/dist/chunk-NB5GCGHL.js +833 -0
  124. package/dist/chunk-NB5GCGHL.js.map +1 -0
  125. package/dist/chunk-NQUVAJQA.js +298 -0
  126. package/dist/chunk-NQUVAJQA.js.map +1 -0
  127. package/dist/chunk-NTV2UUAJ.cjs +149 -0
  128. package/dist/chunk-NTV2UUAJ.cjs.map +1 -0
  129. package/dist/chunk-PJQWHF6T.js +31 -0
  130. package/dist/chunk-PJQWHF6T.js.map +1 -0
  131. package/dist/chunk-PQY54EL5.js +248 -0
  132. package/dist/chunk-PQY54EL5.js.map +1 -0
  133. package/dist/chunk-Q7TBBUTX.cjs +110 -0
  134. package/dist/chunk-Q7TBBUTX.cjs.map +1 -0
  135. package/dist/chunk-QZN7R2WP.cjs +114 -0
  136. package/dist/chunk-QZN7R2WP.cjs.map +1 -0
  137. package/dist/chunk-RKVSJU46.js +35 -0
  138. package/dist/chunk-RKVSJU46.js.map +1 -0
  139. package/dist/chunk-SVO62ZV2.js +50 -0
  140. package/dist/chunk-SVO62ZV2.js.map +1 -0
  141. package/dist/chunk-SX4VQXAA.cjs +114 -0
  142. package/dist/chunk-SX4VQXAA.cjs.map +1 -0
  143. package/dist/chunk-SZ7BLAY3.js +92 -0
  144. package/dist/chunk-SZ7BLAY3.js.map +1 -0
  145. package/dist/chunk-TN4MG6FY.js +112 -0
  146. package/dist/chunk-TN4MG6FY.js.map +1 -0
  147. package/dist/chunk-UC7PHDM6.cjs +331 -0
  148. package/dist/chunk-UC7PHDM6.cjs.map +1 -0
  149. package/dist/chunk-UXVLYUUW.js +108 -0
  150. package/dist/chunk-UXVLYUUW.js.map +1 -0
  151. package/dist/chunk-VBAZ77Q4.js +932 -0
  152. package/dist/chunk-VBAZ77Q4.js.map +1 -0
  153. package/dist/chunk-VSAFQTW5.cjs +319 -0
  154. package/dist/chunk-VSAFQTW5.cjs.map +1 -0
  155. package/dist/chunk-VYJQ2HTA.cjs +936 -0
  156. package/dist/chunk-VYJQ2HTA.cjs.map +1 -0
  157. package/dist/chunk-W5256BJ4.js +56 -0
  158. package/dist/chunk-W5256BJ4.js.map +1 -0
  159. package/dist/chunk-WTHTVKVI.cjs +12299 -0
  160. package/dist/chunk-WTHTVKVI.cjs.map +1 -0
  161. package/dist/chunk-WUMOSOEK.cjs +62 -0
  162. package/dist/chunk-WUMOSOEK.cjs.map +1 -0
  163. package/dist/chunk-XLRE2J25.js +140 -0
  164. package/dist/chunk-XLRE2J25.js.map +1 -0
  165. package/dist/chunk-Z4QPZ3Z3.cjs +114 -0
  166. package/dist/chunk-Z4QPZ3Z3.cjs.map +1 -0
  167. package/dist/createEngineGridQuery-BBkud5oE.d.ts +939 -0
  168. package/dist/createEngineGridQuery-D-fgO_jg.d.cts +939 -0
  169. package/dist/date-picker-jalali.cjs +263 -0
  170. package/dist/date-picker-jalali.cjs.map +1 -0
  171. package/dist/date-picker-jalali.d.cts +62 -0
  172. package/dist/date-picker-jalali.d.ts +62 -0
  173. package/dist/date-picker-jalali.js +256 -0
  174. package/dist/date-picker-jalali.js.map +1 -0
  175. package/dist/finance.cjs +205 -0
  176. package/dist/finance.cjs.map +1 -0
  177. package/dist/finance.d.cts +90 -0
  178. package/dist/finance.d.ts +90 -0
  179. package/dist/finance.js +157 -0
  180. package/dist/finance.js.map +1 -0
  181. package/dist/foldedColumn-IHDT4ARZ.cjs +66 -0
  182. package/dist/foldedColumn-IHDT4ARZ.cjs.map +1 -0
  183. package/dist/foldedColumn-TFURUKFG.js +64 -0
  184. package/dist/foldedColumn-TFURUKFG.js.map +1 -0
  185. package/dist/headless.cjs +729 -0
  186. package/dist/headless.cjs.map +1 -0
  187. package/dist/headless.d.cts +508 -0
  188. package/dist/headless.d.ts +508 -0
  189. package/dist/headless.js +226 -0
  190. package/dist/headless.js.map +1 -0
  191. package/dist/index-DN8M8Jkq.d.cts +14 -0
  192. package/dist/index-DmzL-F_o.d.ts +14 -0
  193. package/dist/index.cjs +8060 -11409
  194. package/dist/index.cjs.map +1 -1
  195. package/dist/index.d.cts +457 -2305
  196. package/dist/index.d.ts +457 -2305
  197. package/dist/index.js +7302 -11084
  198. package/dist/index.js.map +1 -1
  199. package/dist/locales/ar.cjs +12 -0
  200. package/dist/locales/ar.cjs.map +1 -0
  201. package/dist/locales/ar.d.cts +6 -0
  202. package/dist/locales/ar.d.ts +6 -0
  203. package/dist/locales/ar.js +3 -0
  204. package/dist/locales/ar.js.map +1 -0
  205. package/dist/locales/en.cjs +12 -0
  206. package/dist/locales/en.cjs.map +1 -0
  207. package/dist/locales/en.d.cts +6 -0
  208. package/dist/locales/en.d.ts +6 -0
  209. package/dist/locales/en.js +3 -0
  210. package/dist/locales/en.js.map +1 -0
  211. package/dist/locales/fa.cjs +12 -0
  212. package/dist/locales/fa.cjs.map +1 -0
  213. package/dist/locales/fa.d.cts +6 -0
  214. package/dist/locales/fa.d.ts +6 -0
  215. package/dist/locales/fa.js +3 -0
  216. package/dist/locales/fa.js.map +1 -0
  217. package/dist/locales/index.cjs +51 -0
  218. package/dist/locales/index.cjs.map +1 -0
  219. package/dist/locales/index.d.cts +5 -0
  220. package/dist/locales/index.d.ts +5 -0
  221. package/dist/locales/index.js +6 -0
  222. package/dist/locales/index.js.map +1 -0
  223. package/dist/memoryRecords-AWDKUJ2F.cjs +50 -0
  224. package/dist/memoryRecords-AWDKUJ2F.cjs.map +1 -0
  225. package/dist/memoryRecords-OJTGXLRH.js +47 -0
  226. package/dist/memoryRecords-OJTGXLRH.js.map +1 -0
  227. package/dist/pagedFooterTotals-DXCGDO6F.cjs +27 -0
  228. package/dist/pagedFooterTotals-DXCGDO6F.cjs.map +1 -0
  229. package/dist/pagedFooterTotals-ORWKUNE7.js +25 -0
  230. package/dist/pagedFooterTotals-ORWKUNE7.js.map +1 -0
  231. package/dist/pagedKit-MFGAJFSK.cjs +134 -0
  232. package/dist/pagedKit-MFGAJFSK.cjs.map +1 -0
  233. package/dist/pagedKit-WYWY4LRV.js +127 -0
  234. package/dist/pagedKit-WYWY4LRV.js.map +1 -0
  235. package/dist/pagedSearch-HCPJW7VM.js +38 -0
  236. package/dist/pagedSearch-HCPJW7VM.js.map +1 -0
  237. package/dist/pagedSearch-U3WCG4GN.cjs +42 -0
  238. package/dist/pagedSearch-U3WCG4GN.cjs.map +1 -0
  239. package/dist/plugins/csv.cjs +124 -0
  240. package/dist/plugins/csv.cjs.map +1 -0
  241. package/dist/plugins/csv.d.cts +44 -0
  242. package/dist/plugins/csv.d.ts +44 -0
  243. package/dist/plugins/csv.js +120 -0
  244. package/dist/plugins/csv.js.map +1 -0
  245. package/dist/plugins/excel.cjs +52 -0
  246. package/dist/plugins/excel.cjs.map +1 -0
  247. package/dist/plugins/excel.d.cts +14 -0
  248. package/dist/plugins/excel.d.ts +14 -0
  249. package/dist/plugins/excel.js +7 -0
  250. package/dist/plugins/excel.js.map +1 -0
  251. package/dist/plugins/pdf/fonts/vazirmatn.cjs +50 -0
  252. package/dist/plugins/pdf/fonts/vazirmatn.cjs.map +1 -0
  253. package/dist/plugins/pdf/fonts/vazirmatn.d.cts +24 -0
  254. package/dist/plugins/pdf/fonts/vazirmatn.d.ts +24 -0
  255. package/dist/plugins/pdf/fonts/vazirmatn.js +39 -0
  256. package/dist/plugins/pdf/fonts/vazirmatn.js.map +1 -0
  257. package/dist/plugins/pdf.cjs +24 -0
  258. package/dist/plugins/pdf.cjs.map +1 -0
  259. package/dist/plugins/pdf.d.cts +21 -0
  260. package/dist/plugins/pdf.d.ts +21 -0
  261. package/dist/plugins/pdf.js +7 -0
  262. package/dist/plugins/pdf.js.map +1 -0
  263. package/dist/presence.cjs +56 -0
  264. package/dist/presence.cjs.map +1 -0
  265. package/dist/presence.d.cts +17 -0
  266. package/dist/presence.d.ts +17 -0
  267. package/dist/presence.js +54 -0
  268. package/dist/presence.js.map +1 -0
  269. package/dist/rebuildRowVisibility-66EAZ356.cjs +21 -0
  270. package/dist/rebuildRowVisibility-66EAZ356.cjs.map +1 -0
  271. package/dist/rebuildRowVisibility-6TYM5BP2.js +19 -0
  272. package/dist/rebuildRowVisibility-6TYM5BP2.js.map +1 -0
  273. package/dist/styles.css +1440 -0
  274. package/dist/sync.cjs +148 -0
  275. package/dist/sync.cjs.map +1 -0
  276. package/dist/sync.d.cts +17 -0
  277. package/dist/sync.d.ts +17 -0
  278. package/dist/sync.js +146 -0
  279. package/dist/sync.js.map +1 -0
  280. package/dist/types-D__47BKv.d.cts +23 -0
  281. package/dist/types-D__47BKv.d.ts +23 -0
  282. package/package.json +185 -29
@@ -0,0 +1,263 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var chunkWUMOSOEK_cjs = require('./chunk-WUMOSOEK.cjs');
6
+ var chunk3HP3HQCW_cjs = require('./chunk-3HP3HQCW.cjs');
7
+ require('./chunk-CILNIWYW.cjs');
8
+ require('./chunk-SX4VQXAA.cjs');
9
+ require('./chunk-QZN7R2WP.cjs');
10
+ require('./chunk-Z4QPZ3Z3.cjs');
11
+ var chunkKRJG3KMP_cjs = require('./chunk-KRJG3KMP.cjs');
12
+ require('./chunk-J7CPPFXT.cjs');
13
+ require('./chunk-DFFP7SJ6.cjs');
14
+ var react = require('react');
15
+ var jsxRuntime = require('react/jsx-runtime');
16
+
17
+ function JalaliCalendar({
18
+ mode = "single",
19
+ value = null,
20
+ range,
21
+ onSelect,
22
+ onRangeChange,
23
+ showHolidays = true,
24
+ className
25
+ }) {
26
+ const theme = chunk3HP3HQCW_cjs.useERPTableTheme();
27
+ const t = chunk3HP3HQCW_cjs.useTranslations();
28
+ const seed = value ?? range?.start ?? range?.end ?? /* @__PURE__ */ new Date();
29
+ const seedYmd = chunk3HP3HQCW_cjs.toJalaliYmd(seed);
30
+ const [view, setView] = react.useState({ jy: seedYmd.jy, jm: seedYmd.jm });
31
+ const [draftStart, setDraftStart] = react.useState(
32
+ range?.start ?? null
33
+ );
34
+ const cells = react.useMemo(
35
+ () => chunk3HP3HQCW_cjs.buildJalaliMonthGrid(view.jy, view.jm),
36
+ [view.jy, view.jm]
37
+ );
38
+ const effectiveRange = mode === "range" ? {
39
+ start: range?.start ?? draftStart,
40
+ end: range?.end ?? null
41
+ } : { start: value, end: value };
42
+ const go = (delta) => {
43
+ setView((v) => chunk3HP3HQCW_cjs.addJalaliMonths(v.jy, v.jm, delta));
44
+ };
45
+ const handleDayClick = (date) => {
46
+ if (mode === "single") {
47
+ onSelect?.(date);
48
+ return;
49
+ }
50
+ if (!draftStart || range?.start && range?.end) {
51
+ setDraftStart(date);
52
+ onRangeChange?.({ start: date, end: null });
53
+ return;
54
+ }
55
+ const start = draftStart;
56
+ const ordered = chunk3HP3HQCW_cjs.compareJalaliDay(start, date) <= 0 ? { start, end: date } : { start: date, end: start };
57
+ setDraftStart(null);
58
+ onRangeChange?.(ordered);
59
+ };
60
+ return /* @__PURE__ */ jsxRuntime.jsxs(
61
+ "div",
62
+ {
63
+ className: `pdg-jalali-cal ${className ?? ""}`,
64
+ dir: "rtl",
65
+ role: "group",
66
+ "aria-label": t("date.calendar"),
67
+ children: [
68
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pdg-jalali-cal__header", children: [
69
+ /* @__PURE__ */ jsxRuntime.jsx(
70
+ "button",
71
+ {
72
+ type: "button",
73
+ className: "pdg-jalali-cal__nav",
74
+ "aria-label": t("date.nextMonth"),
75
+ onClick: () => go(1),
76
+ children: "\u2039"
77
+ }
78
+ ),
79
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "pdg-jalali-cal__title", children: [
80
+ chunk3HP3HQCW_cjs.jalaliMonthName(view.jm),
81
+ " ",
82
+ view.jy
83
+ ] }),
84
+ /* @__PURE__ */ jsxRuntime.jsx(
85
+ "button",
86
+ {
87
+ type: "button",
88
+ className: "pdg-jalali-cal__nav",
89
+ "aria-label": t("date.prevMonth"),
90
+ onClick: () => go(-1),
91
+ children: "\u203A"
92
+ }
93
+ )
94
+ ] }),
95
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pdg-jalali-cal__weekdays", "aria-hidden": true, children: chunk3HP3HQCW_cjs.JALALI_WEEKDAY_LABELS_FA.map((d) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "pdg-jalali-cal__wd", children: d }, d)) }),
96
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pdg-jalali-cal__grid", role: "grid", children: cells.map((cell) => {
97
+ const selected = mode === "single" ? value != null && chunk3HP3HQCW_cjs.sameJalaliDay(cell.date, value) : Boolean(
98
+ effectiveRange.start && chunk3HP3HQCW_cjs.sameJalaliDay(cell.date, effectiveRange.start)
99
+ ) || Boolean(
100
+ effectiveRange.end && chunk3HP3HQCW_cjs.sameJalaliDay(cell.date, effectiveRange.end)
101
+ );
102
+ const inRange = mode === "range" && chunk3HP3HQCW_cjs.isDateInRange(cell.date, effectiveRange);
103
+ const holiday = showHolidays && chunkWUMOSOEK_cjs.isIranHoliday(cell.date);
104
+ const today = chunk3HP3HQCW_cjs.sameJalaliDay(cell.date, /* @__PURE__ */ new Date());
105
+ return /* @__PURE__ */ jsxRuntime.jsx(
106
+ "button",
107
+ {
108
+ type: "button",
109
+ role: "gridcell",
110
+ className: [
111
+ "pdg-jalali-cal__day",
112
+ cell.inCurrentMonth ? "" : "is-outside",
113
+ selected ? "is-selected" : "",
114
+ inRange ? "is-in-range" : "",
115
+ holiday ? "is-holiday" : "",
116
+ today ? "is-today" : ""
117
+ ].filter(Boolean).join(" "),
118
+ onClick: () => handleDayClick(cell.date),
119
+ style: selected ? {
120
+ background: theme.params.accentColor,
121
+ color: "var(--pdg-bg)"
122
+ } : inRange ? { background: theme.params.rowStripeColor } : void 0,
123
+ children: cell.ymd.jd
124
+ },
125
+ `${cell.ymd.jy}-${cell.ymd.jm}-${cell.ymd.jd}`
126
+ );
127
+ }) })
128
+ ]
129
+ }
130
+ );
131
+ }
132
+ function parseValue(value, adapter) {
133
+ return adapter.parse(value);
134
+ }
135
+ function PersianRangeDatePicker(props) {
136
+ const theme = chunk3HP3HQCW_cjs.useERPTableTheme();
137
+ const t = chunk3HP3HQCW_cjs.useTranslations();
138
+ const hostAdapter = chunk3HP3HQCW_cjs.useDateAdapter();
139
+ const adapter = hostAdapter.id === "jalali" ? hostAdapter : chunkKRJG3KMP_cjs.jalaliAdapter;
140
+ const panelId = react.useId();
141
+ const rootRef = react.useRef(null);
142
+ const [open, setOpen] = react.useState(false);
143
+ const isRange = props.mode === "range";
144
+ react.useEffect(() => {
145
+ if (!open) return;
146
+ const onDoc = (e) => {
147
+ if (!rootRef.current?.contains(e.target)) setOpen(false);
148
+ };
149
+ document.addEventListener("mousedown", onDoc);
150
+ return () => document.removeEventListener("mousedown", onDoc);
151
+ }, [open]);
152
+ if (isRange) {
153
+ const range = props.range ?? { start: null, end: null };
154
+ const label = range.start && range.end ? `${adapter.format(range.start)} \u2013 ${adapter.format(range.end)}` : range.start ? `${adapter.format(range.start)} \u2013 \u2026` : t("date.pickRange");
155
+ return /* @__PURE__ */ jsxRuntime.jsxs(
156
+ "div",
157
+ {
158
+ ref: rootRef,
159
+ className: `erp-table-date pdg-date-range ${props.className ?? ""}`,
160
+ children: [
161
+ /* @__PURE__ */ jsxRuntime.jsx(
162
+ "button",
163
+ {
164
+ type: "button",
165
+ className: "pdg-cell-editor pdg-date-range__trigger",
166
+ disabled: props.disabled,
167
+ "aria-expanded": open,
168
+ "aria-controls": panelId,
169
+ onClick: () => setOpen((v) => !v),
170
+ style: { accentColor: theme.params.accentColor },
171
+ children: label
172
+ }
173
+ ),
174
+ open && !props.disabled ? /* @__PURE__ */ jsxRuntime.jsx("div", { id: panelId, className: "pdg-date-range__popover", role: "dialog", children: /* @__PURE__ */ jsxRuntime.jsx(
175
+ JalaliCalendar,
176
+ {
177
+ mode: "range",
178
+ range,
179
+ showHolidays: props.showHolidays !== false,
180
+ onRangeChange: (next) => {
181
+ props.onRangeChange?.(next);
182
+ if (next.start && next.end) setOpen(false);
183
+ }
184
+ }
185
+ ) }) : null
186
+ ]
187
+ }
188
+ );
189
+ }
190
+ const value = props.value;
191
+ const onChange = props.onChange;
192
+ const disabled = props.disabled;
193
+ const parsed = parseValue(value, adapter);
194
+ const text = parsed ? adapter.format(parsed) : "";
195
+ return /* @__PURE__ */ jsxRuntime.jsxs(
196
+ "div",
197
+ {
198
+ ref: rootRef,
199
+ className: `erp-table-date pdg-date-range ${props.className ?? ""}`,
200
+ children: [
201
+ /* @__PURE__ */ jsxRuntime.jsx(
202
+ "button",
203
+ {
204
+ type: "button",
205
+ className: "pdg-cell-editor pdg-date-range__trigger",
206
+ disabled,
207
+ "aria-expanded": open,
208
+ "aria-controls": panelId,
209
+ onClick: () => setOpen((v) => !v),
210
+ style: { accentColor: theme.params.accentColor },
211
+ children: text || t("date.pickDate")
212
+ }
213
+ ),
214
+ open && !disabled ? /* @__PURE__ */ jsxRuntime.jsxs("div", { id: panelId, className: "pdg-date-range__popover", role: "dialog", children: [
215
+ /* @__PURE__ */ jsxRuntime.jsx(
216
+ JalaliCalendar,
217
+ {
218
+ mode: "single",
219
+ value: parsed,
220
+ showHolidays: props.showHolidays !== false,
221
+ onSelect: (date) => {
222
+ onChange?.(date.getTime());
223
+ setOpen(false);
224
+ }
225
+ }
226
+ ),
227
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pdg-date-range__actions", children: /* @__PURE__ */ jsxRuntime.jsx(
228
+ "button",
229
+ {
230
+ type: "button",
231
+ className: "pdg-date-range__clear",
232
+ onClick: () => {
233
+ onChange?.("");
234
+ setOpen(false);
235
+ },
236
+ children: t("date.clear")
237
+ }
238
+ ) })
239
+ ] }) : null
240
+ ]
241
+ }
242
+ );
243
+ }
244
+ function PersianRangeDateCell(ctx) {
245
+ const raw = ctx.value;
246
+ const value = raw == null || raw === "" ? void 0 : typeof raw === "number" ? raw : new Date(raw).valueOf();
247
+ return /* @__PURE__ */ jsxRuntime.jsx(
248
+ PersianRangeDatePicker,
249
+ {
250
+ className: ctx.meta.className,
251
+ disabled: ctx.isDeleted || !ctx.isEditable,
252
+ value,
253
+ onChange: (v) => ctx.dispatchChangeValue(v)
254
+ }
255
+ );
256
+ }
257
+
258
+ exports.JalaliCalendar = JalaliCalendar;
259
+ exports.PersianRangeDateCell = PersianRangeDateCell;
260
+ exports.PersianRangeDatePicker = PersianRangeDatePicker;
261
+ exports.default = PersianRangeDatePicker;
262
+ //# sourceMappingURL=date-picker-jalali.cjs.map
263
+ //# sourceMappingURL=date-picker-jalali.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../ui/date/JalaliCalendar.tsx","../ui/date/PersianRangeDatePicker.tsx"],"names":["useERPTableTheme","useTranslations","toJalaliYmd","useState","useMemo","buildJalaliMonthGrid","addJalaliMonths","compareJalaliDay","jsxs","jsx","jalaliMonthName","JALALI_WEEKDAY_LABELS_FA","sameJalaliDay","isDateInRange","isIranHoliday","useDateAdapter","jalaliAdapter","useId","useRef","useEffect"],"mappings":"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","file":"date-picker-jalali.cjs","sourcesContent":["\"use client\";\r\n\r\nimport React, { useMemo, useState } from 'react';\r\n\r\nimport {\r\n JALALI_WEEKDAY_LABELS_FA,\r\n addJalaliMonths,\r\n buildJalaliMonthGrid,\r\n compareJalaliDay,\r\n isDateInRange,\r\n jalaliMonthName,\r\n sameJalaliDay,\r\n toJalaliYmd,\r\n type DateRangeValue,\r\n} from '../../infrastructure/date/jalaliCalendarModel';\r\nimport { isIranHoliday } from '../../infrastructure/finance/holidays';\r\nimport { useERPTableTheme, useTranslations } from '../host';\r\n\r\nexport type JalaliCalendarProps = {\r\n mode?: 'single' | 'range';\r\n value?: Date | null;\r\n range?: DateRangeValue;\r\n onSelect?: (date: Date) => void;\r\n onRangeChange?: (range: DateRangeValue) => void;\r\n showHolidays?: boolean;\r\n className?: string;\r\n};\r\n\r\n/**\r\n * Internal Jalali month calendar — no external peer (PR-140).\r\n */\r\nexport function JalaliCalendar({\r\n mode = 'single',\r\n value = null,\r\n range,\r\n onSelect,\r\n onRangeChange,\r\n showHolidays = true,\r\n className,\r\n}: JalaliCalendarProps) {\r\n const theme = useERPTableTheme();\r\n const t = useTranslations();\r\n const seed = value ?? range?.start ?? range?.end ?? new Date();\r\n const seedYmd = toJalaliYmd(seed);\r\n const [view, setView] = useState({ jy: seedYmd.jy, jm: seedYmd.jm });\r\n const [draftStart, setDraftStart] = useState<Date | null>(\r\n range?.start ?? null,\r\n );\r\n\r\n const cells = useMemo(\r\n () => buildJalaliMonthGrid(view.jy, view.jm),\r\n [view.jy, view.jm],\r\n );\r\n\r\n const effectiveRange: DateRangeValue =\r\n mode === 'range'\r\n ? {\r\n start: range?.start ?? draftStart,\r\n end: range?.end ?? null,\r\n }\r\n : { start: value, end: value };\r\n\r\n const go = (delta: number) => {\r\n setView((v) => addJalaliMonths(v.jy, v.jm, delta));\r\n };\r\n\r\n const handleDayClick = (date: Date) => {\r\n if (mode === 'single') {\r\n onSelect?.(date);\r\n return;\r\n }\r\n if (!draftStart || (range?.start && range?.end)) {\r\n setDraftStart(date);\r\n onRangeChange?.({ start: date, end: null });\r\n return;\r\n }\r\n const start = draftStart;\r\n const ordered =\r\n compareJalaliDay(start, date) <= 0\r\n ? { start, end: date }\r\n : { start: date, end: start };\r\n setDraftStart(null);\r\n onRangeChange?.(ordered);\r\n };\r\n\r\n return (\r\n <div\r\n className={`pdg-jalali-cal ${className ?? ''}`}\r\n dir=\"rtl\"\r\n role=\"group\"\r\n aria-label={t('date.calendar')}\r\n >\r\n <div className=\"pdg-jalali-cal__header\">\r\n <button\r\n type=\"button\"\r\n className=\"pdg-jalali-cal__nav\"\r\n aria-label={t('date.nextMonth')}\r\n onClick={() => go(1)}\r\n >\r\n ‹\r\n </button>\r\n <span className=\"pdg-jalali-cal__title\">\r\n {jalaliMonthName(view.jm)} {view.jy}\r\n </span>\r\n <button\r\n type=\"button\"\r\n className=\"pdg-jalali-cal__nav\"\r\n aria-label={t('date.prevMonth')}\r\n onClick={() => go(-1)}\r\n >\r\n ›\r\n </button>\r\n </div>\r\n <div className=\"pdg-jalali-cal__weekdays\" aria-hidden>\r\n {JALALI_WEEKDAY_LABELS_FA.map((d) => (\r\n <span key={d} className=\"pdg-jalali-cal__wd\">\r\n {d}\r\n </span>\r\n ))}\r\n </div>\r\n <div className=\"pdg-jalali-cal__grid\" role=\"grid\">\r\n {cells.map((cell) => {\r\n const selected =\r\n mode === 'single'\r\n ? value != null && sameJalaliDay(cell.date, value)\r\n : Boolean(\r\n effectiveRange.start &&\r\n sameJalaliDay(cell.date, effectiveRange.start),\r\n ) ||\r\n Boolean(\r\n effectiveRange.end &&\r\n sameJalaliDay(cell.date, effectiveRange.end),\r\n );\r\n const inRange =\r\n mode === 'range' && isDateInRange(cell.date, effectiveRange);\r\n const holiday = showHolidays && isIranHoliday(cell.date);\r\n const today = sameJalaliDay(cell.date, new Date());\r\n\r\n return (\r\n <button\r\n key={`${cell.ymd.jy}-${cell.ymd.jm}-${cell.ymd.jd}`}\r\n type=\"button\"\r\n role=\"gridcell\"\r\n className={[\r\n 'pdg-jalali-cal__day',\r\n cell.inCurrentMonth ? '' : 'is-outside',\r\n selected ? 'is-selected' : '',\r\n inRange ? 'is-in-range' : '',\r\n holiday ? 'is-holiday' : '',\r\n today ? 'is-today' : '',\r\n ]\r\n .filter(Boolean)\r\n .join(' ')}\r\n onClick={() => handleDayClick(cell.date)}\r\n style={\r\n selected\r\n ? {\r\n background: theme.params.accentColor,\r\n color: 'var(--pdg-bg)',\r\n }\r\n : inRange\r\n ? { background: theme.params.rowStripeColor }\r\n : undefined\r\n }\r\n >\r\n {cell.ymd.jd}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default JalaliCalendar;\r\n","/**\r\n * Internal Jalali date / range picker (PR-140).\r\n * Zero external calendar dependencies — uses `infrastructure/date` math.\r\n *\r\n * @example\r\n * ```tsx\r\n * import { PersianRangeDateCell } from 'persian-data-grid/date-picker-jalali';\r\n * <DataGrid components={{ date: PersianRangeDateCell }} />\r\n * ```\r\n */\r\n\r\n\"use client\";\r\n\r\nimport React, { useEffect, useId, useRef, useState } from 'react';\r\n\r\nimport { jalaliAdapter } from '../../infrastructure/date/jalaliAdapter';\r\nimport type { DateRangeValue } from '../../infrastructure/date/jalaliCalendarModel';\r\nimport type { CellRenderContext } from '../cellRenderer/cellRenderContext';\r\nimport { useDateAdapter, useERPTableTheme, useTranslations } from '../host';\r\nimport { JalaliCalendar } from './JalaliCalendar';\r\n\r\ntype SingleProps = {\r\n mode?: 'single';\r\n value?: unknown;\r\n onChange?: (value: unknown) => void;\r\n disabled?: boolean;\r\n className?: string;\r\n showMask?: boolean;\r\n showHolidays?: boolean;\r\n};\r\n\r\ntype RangeProps = {\r\n mode: 'range';\r\n range?: DateRangeValue;\r\n onRangeChange?: (range: DateRangeValue) => void;\r\n disabled?: boolean;\r\n className?: string;\r\n showHolidays?: boolean;\r\n};\r\n\r\nexport type PersianRangeDatePickerProps = SingleProps | RangeProps;\r\n\r\nfunction parseValue(\r\n value: unknown,\r\n adapter: typeof jalaliAdapter,\r\n): Date | null {\r\n return adapter.parse(value);\r\n}\r\n\r\n/**\r\n * Cell editor (single) or standalone range picker.\r\n */\r\nexport function PersianRangeDatePicker(props: PersianRangeDatePickerProps) {\r\n const theme = useERPTableTheme();\r\n const t = useTranslations();\r\n const hostAdapter = useDateAdapter();\r\n const adapter =\r\n hostAdapter.id === 'jalali' ? hostAdapter : jalaliAdapter;\r\n const panelId = useId();\r\n const rootRef = useRef<HTMLDivElement>(null);\r\n const [open, setOpen] = useState(false);\r\n\r\n const isRange = props.mode === 'range';\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n const onDoc = (e: MouseEvent) => {\r\n if (!rootRef.current?.contains(e.target as Node)) setOpen(false);\r\n };\r\n document.addEventListener('mousedown', onDoc);\r\n return () => document.removeEventListener('mousedown', onDoc);\r\n }, [open]);\r\n\r\n if (isRange) {\r\n const range = props.range ?? { start: null, end: null };\r\n const label =\r\n range.start && range.end\r\n ? `${adapter.format(range.start)} – ${adapter.format(range.end)}`\r\n : range.start\r\n ? `${adapter.format(range.start)} – …`\r\n : t('date.pickRange');\r\n\r\n return (\r\n <div\r\n ref={rootRef}\r\n className={`erp-table-date pdg-date-range ${props.className ?? ''}`}\r\n >\r\n <button\r\n type=\"button\"\r\n className=\"pdg-cell-editor pdg-date-range__trigger\"\r\n disabled={props.disabled}\r\n aria-expanded={open}\r\n aria-controls={panelId}\r\n onClick={() => setOpen((v) => !v)}\r\n style={{ accentColor: theme.params.accentColor }}\r\n >\r\n {label}\r\n </button>\r\n {open && !props.disabled ? (\r\n <div id={panelId} className=\"pdg-date-range__popover\" role=\"dialog\">\r\n <JalaliCalendar\r\n mode=\"range\"\r\n range={range}\r\n showHolidays={props.showHolidays !== false}\r\n onRangeChange={(next) => {\r\n props.onRangeChange?.(next);\r\n if (next.start && next.end) setOpen(false);\r\n }}\r\n />\r\n </div>\r\n ) : null}\r\n </div>\r\n );\r\n }\r\n\r\n const value = props.value;\r\n const onChange = props.onChange;\r\n const disabled = props.disabled;\r\n const parsed = parseValue(value, adapter);\r\n const text = parsed ? adapter.format(parsed) : '';\r\n\r\n return (\r\n <div\r\n ref={rootRef}\r\n className={`erp-table-date pdg-date-range ${props.className ?? ''}`}\r\n >\r\n <button\r\n type=\"button\"\r\n className=\"pdg-cell-editor pdg-date-range__trigger\"\r\n disabled={disabled}\r\n aria-expanded={open}\r\n aria-controls={panelId}\r\n onClick={() => setOpen((v) => !v)}\r\n style={{ accentColor: theme.params.accentColor }}\r\n >\r\n {text || t('date.pickDate')}\r\n </button>\r\n {open && !disabled ? (\r\n <div id={panelId} className=\"pdg-date-range__popover\" role=\"dialog\">\r\n <JalaliCalendar\r\n mode=\"single\"\r\n value={parsed}\r\n showHolidays={props.showHolidays !== false}\r\n onSelect={(date) => {\r\n onChange?.(date.getTime());\r\n setOpen(false);\r\n }}\r\n />\r\n <div className=\"pdg-date-range__actions\">\r\n <button\r\n type=\"button\"\r\n className=\"pdg-date-range__clear\"\r\n onClick={() => {\r\n onChange?.('');\r\n setOpen(false);\r\n }}\r\n >\r\n {t('date.clear')}\r\n </button>\r\n </div>\r\n </div>\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n\r\n/** `components.date` adapter — receives {@link CellRenderContext}. */\r\nexport function PersianRangeDateCell(ctx: CellRenderContext) {\r\n const raw = ctx.value;\r\n const value =\r\n raw == null || raw === ''\r\n ? undefined\r\n : typeof raw === 'number'\r\n ? raw\r\n : new Date(raw as string).valueOf();\r\n\r\n return (\r\n <PersianRangeDatePicker\r\n className={ctx.meta.className}\r\n disabled={ctx.isDeleted || !ctx.isEditable}\r\n value={value}\r\n onChange={(v) => ctx.dispatchChangeValue(v)}\r\n />\r\n );\r\n}\r\n\r\nexport { JalaliCalendar } from './JalaliCalendar';\r\nexport type { JalaliCalendarProps } from './JalaliCalendar';\r\nexport type { DateRangeValue } from '../../infrastructure/date/jalaliCalendarModel';\r\n\r\nexport default PersianRangeDatePicker;\r\n"]}
@@ -0,0 +1,62 @@
1
+ import React__default from 'react';
2
+ import { C as CellRenderContext } from './cellRenderContext-DvngkptV.cjs';
3
+ import './GridSession-CmQn2RnL.cjs';
4
+ import './RemoteApi-CCQxiSf1.cjs';
5
+ import './UITableController-CIwnHIw8.cjs';
6
+
7
+ type DateRangeValue = {
8
+ start: Date | null;
9
+ end: Date | null;
10
+ };
11
+
12
+ type JalaliCalendarProps = {
13
+ mode?: 'single' | 'range';
14
+ value?: Date | null;
15
+ range?: DateRangeValue;
16
+ onSelect?: (date: Date) => void;
17
+ onRangeChange?: (range: DateRangeValue) => void;
18
+ showHolidays?: boolean;
19
+ className?: string;
20
+ };
21
+ /**
22
+ * Internal Jalali month calendar — no external peer (PR-140).
23
+ */
24
+ declare function JalaliCalendar({ mode, value, range, onSelect, onRangeChange, showHolidays, className, }: JalaliCalendarProps): React__default.JSX.Element;
25
+
26
+ /**
27
+ * Internal Jalali date / range picker (PR-140).
28
+ * Zero external calendar dependencies — uses `infrastructure/date` math.
29
+ *
30
+ * @example
31
+ * ```tsx
32
+ * import { PersianRangeDateCell } from 'persian-data-grid/date-picker-jalali';
33
+ * <DataGrid components={{ date: PersianRangeDateCell }} />
34
+ * ```
35
+ */
36
+
37
+ type SingleProps = {
38
+ mode?: 'single';
39
+ value?: unknown;
40
+ onChange?: (value: unknown) => void;
41
+ disabled?: boolean;
42
+ className?: string;
43
+ showMask?: boolean;
44
+ showHolidays?: boolean;
45
+ };
46
+ type RangeProps = {
47
+ mode: 'range';
48
+ range?: DateRangeValue;
49
+ onRangeChange?: (range: DateRangeValue) => void;
50
+ disabled?: boolean;
51
+ className?: string;
52
+ showHolidays?: boolean;
53
+ };
54
+ type PersianRangeDatePickerProps = SingleProps | RangeProps;
55
+ /**
56
+ * Cell editor (single) or standalone range picker.
57
+ */
58
+ declare function PersianRangeDatePicker(props: PersianRangeDatePickerProps): React__default.JSX.Element;
59
+ /** `components.date` adapter — receives {@link CellRenderContext}. */
60
+ declare function PersianRangeDateCell(ctx: CellRenderContext): React__default.JSX.Element;
61
+
62
+ export { type DateRangeValue, JalaliCalendar, type JalaliCalendarProps, PersianRangeDateCell, PersianRangeDatePicker, type PersianRangeDatePickerProps, PersianRangeDatePicker as default };
@@ -0,0 +1,62 @@
1
+ import React__default from 'react';
2
+ import { C as CellRenderContext } from './cellRenderContext-BaNh4qn_.js';
3
+ import './GridSession-CeIfVFck.js';
4
+ import './RemoteApi-CCQxiSf1.js';
5
+ import './UITableController-C71LXBiX.js';
6
+
7
+ type DateRangeValue = {
8
+ start: Date | null;
9
+ end: Date | null;
10
+ };
11
+
12
+ type JalaliCalendarProps = {
13
+ mode?: 'single' | 'range';
14
+ value?: Date | null;
15
+ range?: DateRangeValue;
16
+ onSelect?: (date: Date) => void;
17
+ onRangeChange?: (range: DateRangeValue) => void;
18
+ showHolidays?: boolean;
19
+ className?: string;
20
+ };
21
+ /**
22
+ * Internal Jalali month calendar — no external peer (PR-140).
23
+ */
24
+ declare function JalaliCalendar({ mode, value, range, onSelect, onRangeChange, showHolidays, className, }: JalaliCalendarProps): React__default.JSX.Element;
25
+
26
+ /**
27
+ * Internal Jalali date / range picker (PR-140).
28
+ * Zero external calendar dependencies — uses `infrastructure/date` math.
29
+ *
30
+ * @example
31
+ * ```tsx
32
+ * import { PersianRangeDateCell } from 'persian-data-grid/date-picker-jalali';
33
+ * <DataGrid components={{ date: PersianRangeDateCell }} />
34
+ * ```
35
+ */
36
+
37
+ type SingleProps = {
38
+ mode?: 'single';
39
+ value?: unknown;
40
+ onChange?: (value: unknown) => void;
41
+ disabled?: boolean;
42
+ className?: string;
43
+ showMask?: boolean;
44
+ showHolidays?: boolean;
45
+ };
46
+ type RangeProps = {
47
+ mode: 'range';
48
+ range?: DateRangeValue;
49
+ onRangeChange?: (range: DateRangeValue) => void;
50
+ disabled?: boolean;
51
+ className?: string;
52
+ showHolidays?: boolean;
53
+ };
54
+ type PersianRangeDatePickerProps = SingleProps | RangeProps;
55
+ /**
56
+ * Cell editor (single) or standalone range picker.
57
+ */
58
+ declare function PersianRangeDatePicker(props: PersianRangeDatePickerProps): React__default.JSX.Element;
59
+ /** `components.date` adapter — receives {@link CellRenderContext}. */
60
+ declare function PersianRangeDateCell(ctx: CellRenderContext): React__default.JSX.Element;
61
+
62
+ export { type DateRangeValue, JalaliCalendar, type JalaliCalendarProps, PersianRangeDateCell, PersianRangeDatePicker, type PersianRangeDatePickerProps, PersianRangeDatePicker as default };