persian-data-grid 0.5.0 → 0.6.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-J5Z2LRC5.cjs +131 -0
  4. package/dist/ERPTableGroupRow-J5Z2LRC5.cjs.map +1 -0
  5. package/dist/ERPTableGroupRow-PSAPAHGL.js +125 -0
  6. package/dist/ERPTableGroupRow-PSAPAHGL.js.map +1 -0
  7. package/dist/GridPlugin-CJCaYnlw.d.ts +57 -0
  8. package/dist/GridPlugin-oxhq8AsM.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-B-9lLcoB.d.cts +2492 -0
  14. package/dist/GridSession-Bc7UIawO.d.ts +2492 -0
  15. package/dist/GridSyncService-KTLB4KP3.js +3 -0
  16. package/dist/GridSyncService-KTLB4KP3.js.map +1 -0
  17. package/dist/GridSyncService-TAPAHABV.cjs +12 -0
  18. package/dist/GridSyncService-TAPAHABV.cjs.map +1 -0
  19. package/dist/PdfRenderer-1HFh6UeR.d.ts +22 -0
  20. package/dist/PdfRenderer-CBg7hWNS.d.cts +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-Cuwq481K.d.cts +632 -0
  28. package/dist/UITableController-DU8RopUM.d.ts +632 -0
  29. package/dist/VazirmatnPdfRenderer-BCMpC1zy.d.cts +96 -0
  30. package/dist/VazirmatnPdfRenderer-Dz_G-m3c.d.ts +96 -0
  31. package/dist/adapters/arian-erp.cjs +77 -0
  32. package/dist/adapters/arian-erp.cjs.map +1 -0
  33. package/dist/adapters/arian-erp.d.cts +60 -0
  34. package/dist/adapters/arian-erp.d.ts +60 -0
  35. package/dist/adapters/arian-erp.js +71 -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-BO6yxoAN.d.cts +135 -0
  42. package/dist/applyImportedRows-D4zVY8uD.d.ts +135 -0
  43. package/dist/applyRowVisibilityHandler-KS6TMCBN.js +83 -0
  44. package/dist/applyRowVisibilityHandler-KS6TMCBN.js.map +1 -0
  45. package/dist/applyRowVisibilityHandler-LXCOGESZ.cjs +85 -0
  46. package/dist/applyRowVisibilityHandler-LXCOGESZ.cjs.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-BlXO5NJz.d.ts +30 -0
  52. package/dist/callbackRemoteApi-DgnXH-i0.d.cts +30 -0
  53. package/dist/cellRenderContext-DB7V_mlu.d.ts +42 -0
  54. package/dist/cellRenderContext-DG5BOlxK.d.cts +42 -0
  55. package/dist/chunk-2BJCRYOS.cjs +936 -0
  56. package/dist/chunk-2BJCRYOS.cjs.map +1 -0
  57. package/dist/chunk-3Y3KKGEC.js +3 -0
  58. package/dist/chunk-3Y3KKGEC.js.map +1 -0
  59. package/dist/chunk-5ALMNLUR.cjs +1408 -0
  60. package/dist/chunk-5ALMNLUR.cjs.map +1 -0
  61. package/dist/chunk-5HKVMPBD.js +937 -0
  62. package/dist/chunk-5HKVMPBD.js.map +1 -0
  63. package/dist/chunk-633KP74Z.js +189 -0
  64. package/dist/chunk-633KP74Z.js.map +1 -0
  65. package/dist/chunk-6XBXZPBW.js +298 -0
  66. package/dist/chunk-6XBXZPBW.js.map +1 -0
  67. package/dist/chunk-77UXAJII.js +112 -0
  68. package/dist/chunk-77UXAJII.js.map +1 -0
  69. package/dist/chunk-ASPTRYRD.cjs +21 -0
  70. package/dist/chunk-ASPTRYRD.cjs.map +1 -0
  71. package/dist/chunk-AU3RDJYQ.js +243 -0
  72. package/dist/chunk-AU3RDJYQ.js.map +1 -0
  73. package/dist/chunk-BHDRUZH5.cjs +33 -0
  74. package/dist/chunk-BHDRUZH5.cjs.map +1 -0
  75. package/dist/chunk-BLYVOV3G.cjs +191 -0
  76. package/dist/chunk-BLYVOV3G.cjs.map +1 -0
  77. package/dist/chunk-CILNIWYW.cjs +100 -0
  78. package/dist/chunk-CILNIWYW.cjs.map +1 -0
  79. package/dist/chunk-DFFP7SJ6.cjs +257 -0
  80. package/dist/chunk-DFFP7SJ6.cjs.map +1 -0
  81. package/dist/chunk-DXRCYW42.cjs +568 -0
  82. package/dist/chunk-DXRCYW42.cjs.map +1 -0
  83. package/dist/chunk-EBV6HGZB.cjs +33 -0
  84. package/dist/chunk-EBV6HGZB.cjs.map +1 -0
  85. package/dist/chunk-EHHHC5JV.js +832 -0
  86. package/dist/chunk-EHHHC5JV.js.map +1 -0
  87. package/dist/chunk-F4PYOYHR.js +112 -0
  88. package/dist/chunk-F4PYOYHR.js.map +1 -0
  89. package/dist/chunk-GQEDLUMB.js +168 -0
  90. package/dist/chunk-GQEDLUMB.js.map +1 -0
  91. package/dist/chunk-H2LESGMX.cjs +319 -0
  92. package/dist/chunk-H2LESGMX.cjs.map +1 -0
  93. package/dist/chunk-HTNJT2QU.js +11674 -0
  94. package/dist/chunk-HTNJT2QU.js.map +1 -0
  95. package/dist/chunk-IIISFUW4.cjs +11786 -0
  96. package/dist/chunk-IIISFUW4.cjs.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-KHMG6EI2.js +13 -0
  108. package/dist/chunk-KHMG6EI2.js.map +1 -0
  109. package/dist/chunk-KMRURD5J.cjs +15 -0
  110. package/dist/chunk-KMRURD5J.cjs.map +1 -0
  111. package/dist/chunk-KRJG3KMP.cjs +174 -0
  112. package/dist/chunk-KRJG3KMP.cjs.map +1 -0
  113. package/dist/chunk-KUBVDIF7.cjs +653 -0
  114. package/dist/chunk-KUBVDIF7.cjs.map +1 -0
  115. package/dist/chunk-KYAOSBQN.js +31 -0
  116. package/dist/chunk-KYAOSBQN.js.map +1 -0
  117. package/dist/chunk-LJ7LMEXO.js +36 -0
  118. package/dist/chunk-LJ7LMEXO.js.map +1 -0
  119. package/dist/chunk-MT3KLB2Q.cjs +944 -0
  120. package/dist/chunk-MT3KLB2Q.cjs.map +1 -0
  121. package/dist/chunk-MU3RY46O.js +932 -0
  122. package/dist/chunk-MU3RY46O.js.map +1 -0
  123. package/dist/chunk-MUQQKPWR.js +84 -0
  124. package/dist/chunk-MUQQKPWR.js.map +1 -0
  125. package/dist/chunk-N7SJTINL.cjs +4 -0
  126. package/dist/chunk-N7SJTINL.cjs.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-PXCHPZTP.cjs +839 -0
  134. package/dist/chunk-PXCHPZTP.cjs.map +1 -0
  135. package/dist/chunk-Q7TBBUTX.cjs +110 -0
  136. package/dist/chunk-Q7TBBUTX.cjs.map +1 -0
  137. package/dist/chunk-QQMU44KJ.js +612 -0
  138. package/dist/chunk-QQMU44KJ.js.map +1 -0
  139. package/dist/chunk-QZN7R2WP.cjs +114 -0
  140. package/dist/chunk-QZN7R2WP.cjs.map +1 -0
  141. package/dist/chunk-RKVSJU46.js +35 -0
  142. package/dist/chunk-RKVSJU46.js.map +1 -0
  143. package/dist/chunk-RM6ZWNT3.js +561 -0
  144. package/dist/chunk-RM6ZWNT3.js.map +1 -0
  145. package/dist/chunk-SX4VQXAA.cjs +114 -0
  146. package/dist/chunk-SX4VQXAA.cjs.map +1 -0
  147. package/dist/chunk-SZ7BLAY3.js +92 -0
  148. package/dist/chunk-SZ7BLAY3.js.map +1 -0
  149. package/dist/chunk-TN4MG6FY.js +112 -0
  150. package/dist/chunk-TN4MG6FY.js.map +1 -0
  151. package/dist/chunk-UC7PHDM6.cjs +331 -0
  152. package/dist/chunk-UC7PHDM6.cjs.map +1 -0
  153. package/dist/chunk-UXVLYUUW.js +108 -0
  154. package/dist/chunk-UXVLYUUW.js.map +1 -0
  155. package/dist/chunk-VVGYRZ7S.cjs +38 -0
  156. package/dist/chunk-VVGYRZ7S.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-WUMOSOEK.cjs +62 -0
  160. package/dist/chunk-WUMOSOEK.cjs.map +1 -0
  161. package/dist/chunk-XLRE2J25.js +140 -0
  162. package/dist/chunk-XLRE2J25.js.map +1 -0
  163. package/dist/chunk-Y6W5V2CI.js +19 -0
  164. package/dist/chunk-Y6W5V2CI.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-Dmq3i5v3.d.cts +884 -0
  168. package/dist/createEngineGridQuery-Mt1hc33m.d.ts +884 -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 +504 -0
  188. package/dist/headless.d.ts +504 -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 +8002 -11409
  194. package/dist/index.cjs.map +1 -1
  195. package/dist/index.d.cts +437 -2305
  196. package/dist/index.d.ts +437 -2305
  197. package/dist/index.js +7244 -11083
  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 +184 -28
@@ -0,0 +1,612 @@
1
+ import { getLocalePack, resolveDirection } from './chunk-SZ7BLAY3.js';
2
+ import { jalaliAdapter, pad2, gregorianDateToJalali, jalaliToGregorianDate, jalaliMonthLength } from './chunk-GQEDLUMB.js';
3
+ import { subscribeCatalogHostEvents } from './chunk-MUQQKPWR.js';
4
+ import { normalizeDigits } from './chunk-AU3RDJYQ.js';
5
+ import { createContext, useMemo, useEffect, useContext, useState, useCallback, useRef } from 'react';
6
+ import { jsx } from 'react/jsx-runtime';
7
+
8
+ // infrastructure/date/gregorianAdapter.ts
9
+ var ISO_RE = /^(\d{4})-(\d{2})-(\d{2})$/;
10
+ var SLASH_RE = /^(\d{4})[/\-.](\d{1,2})[/\-.](\d{1,2})$/;
11
+ function utcDay(y, m, d) {
12
+ return new Date(Date.UTC(y, m - 1, d, 12, 0, 0));
13
+ }
14
+ function asUtcDay(date) {
15
+ return utcDay(date.getUTCFullYear(), date.getUTCMonth() + 1, date.getUTCDate());
16
+ }
17
+ var gregorianAdapter = {
18
+ id: "gregory",
19
+ parse(input) {
20
+ if (input == null || input === "") return null;
21
+ if (input instanceof Date && !Number.isNaN(input.getTime())) {
22
+ return asUtcDay(input);
23
+ }
24
+ if (typeof input === "number" && Number.isFinite(input)) {
25
+ const d = new Date(input);
26
+ return Number.isNaN(d.getTime()) ? null : asUtcDay(d);
27
+ }
28
+ const text = normalizeDigits(String(input).trim());
29
+ const iso = ISO_RE.exec(text);
30
+ if (iso) {
31
+ return utcDay(Number(iso[1]), Number(iso[2]), Number(iso[3]));
32
+ }
33
+ const slash = SLASH_RE.exec(text);
34
+ if (slash) {
35
+ return utcDay(Number(slash[1]), Number(slash[2]), Number(slash[3]));
36
+ }
37
+ const fallback = new Date(text);
38
+ return Number.isNaN(fallback.getTime()) ? null : asUtcDay(fallback);
39
+ },
40
+ format(date) {
41
+ const d = asUtcDay(date);
42
+ return `${d.getUTCFullYear()}-${pad2(d.getUTCMonth() + 1)}-${pad2(d.getUTCDate())}`;
43
+ },
44
+ addDays(date, days) {
45
+ const next = asUtcDay(date);
46
+ next.setUTCDate(next.getUTCDate() + days);
47
+ return next;
48
+ },
49
+ startOfMonth(date) {
50
+ const d = asUtcDay(date);
51
+ return utcDay(d.getUTCFullYear(), d.getUTCMonth() + 1, 1);
52
+ },
53
+ compare(a, b) {
54
+ return asUtcDay(a).getTime() - asUtcDay(b).getTime();
55
+ }
56
+ };
57
+
58
+ // infrastructure/date/jalaliCalendarModel.ts
59
+ var MONTH_NAMES_FA = [
60
+ "\u0641\u0631\u0648\u0631\u062F\u06CC\u0646",
61
+ "\u0627\u0631\u062F\u06CC\u0628\u0647\u0634\u062A",
62
+ "\u062E\u0631\u062F\u0627\u062F",
63
+ "\u062A\u06CC\u0631",
64
+ "\u0645\u0631\u062F\u0627\u062F",
65
+ "\u0634\u0647\u0631\u06CC\u0648\u0631",
66
+ "\u0645\u0647\u0631",
67
+ "\u0622\u0628\u0627\u0646",
68
+ "\u0622\u0630\u0631",
69
+ "\u062F\u06CC",
70
+ "\u0628\u0647\u0645\u0646",
71
+ "\u0627\u0633\u0641\u0646\u062F"
72
+ ];
73
+ var JALALI_WEEKDAY_LABELS_FA = [
74
+ "\u0634",
75
+ "\u06CC",
76
+ "\u062F",
77
+ "\u0633",
78
+ "\u0686",
79
+ "\u067E",
80
+ "\u062C"
81
+ ];
82
+ function jalaliMonthName(jm) {
83
+ return MONTH_NAMES_FA[jm - 1] ?? String(jm);
84
+ }
85
+ function toJalaliYmd(date) {
86
+ return gregorianDateToJalali(utcNoon(date));
87
+ }
88
+ function sameJalaliDay(a, b) {
89
+ const x = toJalaliYmd(a);
90
+ const y = toJalaliYmd(b);
91
+ return x.jy === y.jy && x.jm === y.jm && x.jd === y.jd;
92
+ }
93
+ function compareJalaliDay(a, b) {
94
+ return utcNoon(a).getTime() - utcNoon(b).getTime();
95
+ }
96
+ function addJalaliMonths(jy, jm, delta) {
97
+ const idx = jy * 12 + (jm - 1) + delta;
98
+ return {
99
+ jy: Math.floor(idx / 12),
100
+ jm: idx % 12 + 1
101
+ };
102
+ }
103
+ function buildJalaliMonthGrid(jy, jm) {
104
+ const first = jalaliToGregorianDate(jy, jm, 1);
105
+ const jsDow = first.getUTCDay();
106
+ const jalaliWeekStart = (jsDow + 1) % 7;
107
+ const daysInMonth = jalaliMonthLength(jy, jm);
108
+ const cells = [];
109
+ for (let i = 0; i < 42; i += 1) {
110
+ const offset = i - jalaliWeekStart;
111
+ let cellJy = jy;
112
+ let cellJm = jm;
113
+ let cellJd;
114
+ let inCurrentMonth = true;
115
+ if (offset < 0) {
116
+ const prev = addJalaliMonths(jy, jm, -1);
117
+ cellJy = prev.jy;
118
+ cellJm = prev.jm;
119
+ cellJd = jalaliMonthLength(cellJy, cellJm) + offset + 1;
120
+ inCurrentMonth = false;
121
+ } else if (offset >= daysInMonth) {
122
+ const next = addJalaliMonths(jy, jm, 1);
123
+ cellJy = next.jy;
124
+ cellJm = next.jm;
125
+ cellJd = offset - daysInMonth + 1;
126
+ inCurrentMonth = false;
127
+ } else {
128
+ cellJd = offset + 1;
129
+ }
130
+ const date = jalaliToGregorianDate(cellJy, cellJm, cellJd);
131
+ cells.push({
132
+ ymd: { jy: cellJy, jm: cellJm, jd: cellJd },
133
+ date,
134
+ inCurrentMonth,
135
+ weekday: i % 7
136
+ });
137
+ }
138
+ return cells;
139
+ }
140
+ function isDateInRange(date, range) {
141
+ if (!range.start) return false;
142
+ if (!range.end) return sameJalaliDay(date, range.start);
143
+ const t = utcNoon(date).getTime();
144
+ const a = utcNoon(range.start).getTime();
145
+ const b = utcNoon(range.end).getTime();
146
+ return t >= Math.min(a, b) && t <= Math.max(a, b);
147
+ }
148
+ function utcNoon(date) {
149
+ return new Date(
150
+ Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 12)
151
+ );
152
+ }
153
+
154
+ // ui/theme/GridTheme.ts
155
+ function aliasErpTokens(vars) {
156
+ const out = {};
157
+ for (const [key, value] of Object.entries(vars)) {
158
+ if (key.startsWith("--pdg-")) {
159
+ out[`--erp-${key.slice("--pdg-".length)}`] = value;
160
+ }
161
+ }
162
+ return out;
163
+ }
164
+ var GridTheme = class _GridTheme {
165
+ constructor(params, extraCssVars = {}) {
166
+ this.params = params;
167
+ this.extraCssVars = extraCssVars;
168
+ }
169
+ withParams(partial) {
170
+ return new _GridTheme({ ...this.params, ...partial }, this.extraCssVars);
171
+ }
172
+ withExtraCssVars(extra) {
173
+ return new _GridTheme(this.params, { ...this.extraCssVars, ...extra });
174
+ }
175
+ toCssVars() {
176
+ const p = this.params;
177
+ const roles = {
178
+ "--pdg-bg": p.backgroundColor,
179
+ "--pdg-fg": p.foregroundColor,
180
+ "--pdg-accent": p.accentColor,
181
+ "--pdg-header-bg": p.headerBackgroundColor,
182
+ "--pdg-row-stripe": p.rowStripeColor,
183
+ "--pdg-row-selected": p.rowSelectedColor,
184
+ "--pdg-border": p.borderColor,
185
+ "--pdg-danger": p.dangerColor,
186
+ "--pdg-search-match": p.searchMatchColor,
187
+ "--pdg-font": p.fontFamily,
188
+ "--pdg-row-height": `${p.rowHeight}px`,
189
+ "--pdg-font-size": `${p.cellFontSize}px`,
190
+ "--pdg-radius": p.borderRadius
191
+ };
192
+ return {
193
+ ...roles,
194
+ ...aliasErpTokens(roles),
195
+ ...this.extraCssVars,
196
+ ...aliasErpTokens(this.extraCssVars)
197
+ };
198
+ }
199
+ };
200
+ var themeDefault = new GridTheme({
201
+ backgroundColor: "#fff",
202
+ foregroundColor: "#292929",
203
+ accentColor: "#0658b0",
204
+ headerBackgroundColor: "#f4f4f4",
205
+ rowStripeColor: "#ddecfd",
206
+ rowSelectedColor: "#dbeafe",
207
+ borderColor: "#ececec",
208
+ dangerColor: "#dc2626",
209
+ searchMatchColor: "#facc15",
210
+ fontFamily: "IRANSans, Tahoma, sans-serif",
211
+ rowHeight: 40,
212
+ cellFontSize: 12,
213
+ borderRadius: "0.25rem"
214
+ });
215
+ var themeErp = themeDefault;
216
+ var DARK_PALETTE_VARS = {
217
+ "--pdg-main-white": "#171717",
218
+ "--pdg-main-black": "#f4f4f4",
219
+ "--pdg-gray-3": "#262626",
220
+ "--pdg-gray-5": "#404040",
221
+ "--pdg-gray-6": "#525252",
222
+ "--pdg-gray-7": "#a3a3a3",
223
+ "--pdg-gray-8": "#d4d4d4",
224
+ "--pdg-gray-85": "#d4d4d4",
225
+ "--pdg-gray-9": "#e5e5e5",
226
+ "--pdg-gray-10": "#f5f5f5",
227
+ "--pdg-gray-11": "#fafafa",
228
+ "--pdg-black-6": "#f4f4f4",
229
+ "--pdg-blue-6": "#60a5fa",
230
+ "--pdg-blue-11": "#1e3a5f",
231
+ "--pdg-blue-100": "#1e3a8a",
232
+ "--pdg-red-100": "#7f1d1d",
233
+ "--pdg-red-300": "#fca5a5",
234
+ "--pdg-red-600": "#f87171",
235
+ "--pdg-yellow-200": "#854d0e",
236
+ "--pdg-yellow-400": "#eab308",
237
+ "--pdg-zinc-200": "#3f3f46",
238
+ "--pdg-neutral-500": "#a3a3a3",
239
+ "--pdg-gray-100": "#27272a",
240
+ "--pdg-scrollbar": "#525252",
241
+ "--pdg-overlay": "rgba(0, 0, 0, 0.55)"
242
+ };
243
+ var themeDark = themeDefault.withParams({
244
+ backgroundColor: "#171717",
245
+ foregroundColor: "#f4f4f4",
246
+ accentColor: "#60a5fa",
247
+ headerBackgroundColor: "#262626",
248
+ rowStripeColor: "#1e3a5f",
249
+ rowSelectedColor: "#1e3a8a",
250
+ borderColor: "#404040",
251
+ dangerColor: "#f87171",
252
+ searchMatchColor: "#eab308"
253
+ }).withExtraCssVars(DARK_PALETTE_VARS);
254
+ var themeErpDark = themeDark;
255
+
256
+ // ui/theme/resolveActiveTheme.ts
257
+ function themeParamsEqual(a, b) {
258
+ return a.backgroundColor === b.backgroundColor && a.foregroundColor === b.foregroundColor && a.accentColor === b.accentColor && a.headerBackgroundColor === b.headerBackgroundColor && a.rowStripeColor === b.rowStripeColor && a.rowSelectedColor === b.rowSelectedColor && a.borderColor === b.borderColor && a.dangerColor === b.dangerColor && a.searchMatchColor === b.searchMatchColor && a.fontFamily === b.fontFamily && a.rowHeight === b.rowHeight && a.cellFontSize === b.cellFontSize && a.borderRadius === b.borderRadius;
259
+ }
260
+ function isStockLightTheme(theme) {
261
+ return themeParamsEqual(theme.params, themeErp.params);
262
+ }
263
+ function isStockDarkTheme(theme) {
264
+ return themeParamsEqual(theme.params, themeErpDark.params);
265
+ }
266
+ function isStockTheme(theme) {
267
+ return isStockLightTheme(theme) || isStockDarkTheme(theme);
268
+ }
269
+ function resolveActiveTheme(input) {
270
+ const requested = input.requested ?? themeErp;
271
+ const locked = !isStockTheme(requested);
272
+ if (locked) return { theme: requested, locked: true };
273
+ return {
274
+ theme: input.preferDark ? themeErpDark : themeErp,
275
+ locked: false
276
+ };
277
+ }
278
+
279
+ // ui/theme/applyCssVars.ts
280
+ var lastVars = themeErp.toCssVars();
281
+ function rememberThemeVars(vars) {
282
+ lastVars = vars;
283
+ }
284
+ function themeToStyle(theme, extra) {
285
+ return { ...theme.toCssVars(), ...extra };
286
+ }
287
+ function assignThemeVars(el, vars = lastVars) {
288
+ for (const [key, value] of Object.entries(vars)) {
289
+ el.style.setProperty(key, value);
290
+ }
291
+ }
292
+
293
+ // ui/host/messages.ts
294
+ var FA_MESSAGES = getLocalePack("fa");
295
+ var EN_MESSAGES = getLocalePack("en");
296
+ var AR_MESSAGES = getLocalePack("ar");
297
+ function translate(key, locale, overrides) {
298
+ const pack = getLocalePack(locale);
299
+ return overrides?.[key] ?? pack[key] ?? key;
300
+ }
301
+ function formatMessage(template, vars) {
302
+ return template.replace(/\{(\w+)\}/g, (_, name) => {
303
+ const value = vars[name];
304
+ return value == null ? `{${name}}` : String(value);
305
+ });
306
+ }
307
+ function defaultDateAdapter(locale) {
308
+ return locale === "fa" ? jalaliAdapter : gregorianAdapter;
309
+ }
310
+ var ERPTableHostContext = createContext({
311
+ locale: "fa",
312
+ direction: "rtl",
313
+ dateAdapter: jalaliAdapter,
314
+ theme: themeErp,
315
+ themeToggle: true,
316
+ themeLocked: false
317
+ });
318
+ function ERPTableHostProvider({
319
+ children,
320
+ locale = "fa",
321
+ direction,
322
+ numberingSystem,
323
+ dateAdapter,
324
+ remoteApi,
325
+ messages,
326
+ onToast,
327
+ theme = themeErp,
328
+ themeToggle = true,
329
+ themeLocked = false,
330
+ onToggleTheme,
331
+ components,
332
+ filterComponents,
333
+ columnMenuItems,
334
+ onColumnMenuAction,
335
+ useDependOn
336
+ }) {
337
+ const value = useMemo(
338
+ () => ({
339
+ locale,
340
+ direction: resolveDirection(locale, direction),
341
+ numberingSystem,
342
+ dateAdapter: dateAdapter ?? defaultDateAdapter(locale),
343
+ remoteApi,
344
+ messages,
345
+ onToast,
346
+ theme,
347
+ themeToggle,
348
+ themeLocked,
349
+ onToggleTheme,
350
+ components,
351
+ filterComponents,
352
+ columnMenuItems,
353
+ onColumnMenuAction,
354
+ useDependOn
355
+ }),
356
+ [
357
+ locale,
358
+ direction,
359
+ numberingSystem,
360
+ dateAdapter,
361
+ remoteApi,
362
+ messages,
363
+ onToast,
364
+ theme,
365
+ themeToggle,
366
+ themeLocked,
367
+ onToggleTheme,
368
+ components,
369
+ filterComponents,
370
+ columnMenuItems,
371
+ onColumnMenuAction,
372
+ useDependOn
373
+ ]
374
+ );
375
+ useEffect(() => {
376
+ rememberThemeVars(theme.toCssVars());
377
+ }, [theme]);
378
+ return /* @__PURE__ */ jsx(ERPTableHostContext.Provider, { value, children });
379
+ }
380
+ function useERPTableHost() {
381
+ return useContext(ERPTableHostContext);
382
+ }
383
+ function useERPTableTheme() {
384
+ return useERPTableHost().theme ?? themeErp;
385
+ }
386
+ function useThemePortalStyle(extra) {
387
+ const theme = useERPTableTheme();
388
+ return themeToStyle(theme, extra);
389
+ }
390
+ function useTranslations() {
391
+ const { locale, messages } = useERPTableHost();
392
+ return (key, vars) => {
393
+ const raw = translate(key, locale, messages);
394
+ return vars ? formatMessage(raw, vars) : raw;
395
+ };
396
+ }
397
+ function useLocale() {
398
+ return useERPTableHost().locale;
399
+ }
400
+ function useNumberingSystem() {
401
+ return useERPTableHost().numberingSystem;
402
+ }
403
+ function useDateAdapter() {
404
+ return useERPTableHost().dateAdapter ?? jalaliAdapter;
405
+ }
406
+ function useDirection() {
407
+ return useERPTableHost().direction;
408
+ }
409
+
410
+ // ui/host/dependOn.ts
411
+ var toList = (dependOn) => !dependOn ? [] : Array.isArray(dependOn) ? dependOn : [dependOn];
412
+ var getDependFieldName = (item) => typeof item === "string" ? item : item.fieldName;
413
+ var getStaticDependValue = (item) => typeof item === "object" ? item.value : void 0;
414
+ var hasDependValue = (dependOn, resolve = getStaticDependValue) => toList(dependOn).every((item) => resolve(item) != null);
415
+ var buildDependencyBody = (dependOn, resolve = getStaticDependValue) => Object.fromEntries(
416
+ toList(dependOn).map((item) => [getDependFieldName(item), resolve(item)])
417
+ );
418
+ var useStaticDependOn = (dependOn, options) => {
419
+ const unwrap = (value) => options?.unwrapObjectValue && value !== null && typeof value === "object" && !Array.isArray(value) && "value" in value ? value.value : value;
420
+ const resolve = (item) => unwrap(getStaticDependValue(item));
421
+ return {
422
+ isReady: hasDependValue(dependOn, resolve),
423
+ dependencyBody: buildDependencyBody(dependOn, resolve),
424
+ dependencyKey: JSON.stringify(dependOn ?? null)
425
+ };
426
+ };
427
+ var useHostDependOn = (dependOn, options) => {
428
+ const host = useERPTableHost();
429
+ const hook = host.useDependOn ?? useStaticDependOn;
430
+ return hook(dependOn, options);
431
+ };
432
+
433
+ // ui/host/bindGridHostEvents.ts
434
+ function selectedKeysEqual(a, b) {
435
+ const left = Object.keys(a ?? {});
436
+ const right = Object.keys(b ?? {});
437
+ if (left.length !== right.length) return false;
438
+ return left.every((key) => {
439
+ const id = Number(key);
440
+ return Boolean(a?.[id]) === Boolean(b?.[id]);
441
+ });
442
+ }
443
+ function activeCellEqual(a, b) {
444
+ return a?.rowId === b?.rowId && a?.columnId === b?.columnId;
445
+ }
446
+ function selectedRowIds(selected) {
447
+ return Object.keys(selected ?? {}).map(Number).filter((id) => Number.isFinite(id) && Boolean(selected?.[id]));
448
+ }
449
+ function bindGridHostEvents(input) {
450
+ const { eventStore, controller, tableKey, handlers } = input;
451
+ const unsubCatalog = subscribeCatalogHostEvents(
452
+ eventStore,
453
+ {
454
+ tableId: tableKey,
455
+ getRowData: (rowId) => controller.getAllRows()?.find((row) => row.id.value === rowId)?.data,
456
+ getAllRowData: () => (controller.getAllRows() ?? []).map((row) => row.data).filter((data) => data !== void 0)
457
+ },
458
+ handlers
459
+ );
460
+ const unsubSelection = controller.subscribeSelected(
461
+ () => controller.getSelectedRows(),
462
+ (selected) => {
463
+ const ids = selectedRowIds(selected);
464
+ const rows = controller.getAllRows() ?? [];
465
+ const selectedRows = ids.map((id) => rows.find((row) => row.id.value === id)?.data).filter((data) => data !== void 0);
466
+ handlers.onSelectionChanged?.({
467
+ selectedRowIds: ids,
468
+ selectedRows
469
+ });
470
+ },
471
+ selectedKeysEqual
472
+ );
473
+ const unsubFocus = controller.subscribeSelected(
474
+ () => controller.getActiveCell(),
475
+ (cell) => {
476
+ handlers.onCellFocused?.({
477
+ rowId: cell?.rowId ?? null,
478
+ colId: cell?.columnId ?? null
479
+ });
480
+ },
481
+ activeCellEqual
482
+ );
483
+ return () => {
484
+ unsubCatalog();
485
+ unsubSelection();
486
+ unsubFocus();
487
+ };
488
+ }
489
+ var QUERIES = {
490
+ XLUP: "(min-width: 1024px)",
491
+ XXLUP: "(min-width: 1366px)"
492
+ };
493
+ function useMediaQuery(query) {
494
+ const media = QUERIES[query] ?? query;
495
+ const [match, setMatch] = useState(() => {
496
+ if (typeof window === "undefined") return null;
497
+ return window.matchMedia(media).matches;
498
+ });
499
+ useEffect(() => {
500
+ const mql = window.matchMedia(media);
501
+ const onChange = () => setMatch(mql.matches);
502
+ onChange();
503
+ mql.addEventListener("change", onChange);
504
+ return () => mql.removeEventListener("change", onChange);
505
+ }, [media]);
506
+ return { match };
507
+ }
508
+ function useRemoteQuery(args) {
509
+ const { remoteApi } = useERPTableHost();
510
+ const [data, setData] = useState(null);
511
+ const [isFetching, setIsFetching] = useState(false);
512
+ const refetch = useCallback(async () => {
513
+ if (!args.url || args.skip || !remoteApi) {
514
+ setData(null);
515
+ return;
516
+ }
517
+ setIsFetching(true);
518
+ try {
519
+ const response = await remoteApi.request({
520
+ endpoint: args.url,
521
+ params: args.body,
522
+ method: "POST"
523
+ });
524
+ setData(response ?? null);
525
+ } finally {
526
+ setIsFetching(false);
527
+ }
528
+ }, [args.url, args.skip, args.noCache, JSON.stringify(args.body ?? {}), remoteApi]);
529
+ useEffect(() => {
530
+ void refetch();
531
+ }, [refetch]);
532
+ return { data, isFetching, refetch };
533
+ }
534
+ function useLazyRemote() {
535
+ const { remoteApi } = useERPTableHost();
536
+ const [data, setData] = useState(null);
537
+ const [isFetching, setIsFetching] = useState(false);
538
+ const trigger = useCallback(
539
+ async (args) => {
540
+ if (!args.url || !remoteApi) {
541
+ setData(null);
542
+ return;
543
+ }
544
+ setIsFetching(true);
545
+ try {
546
+ const response = await remoteApi.request({ endpoint: args.url, params: args.body, method: "POST" });
547
+ setData(response ?? null);
548
+ } finally {
549
+ setIsFetching(false);
550
+ }
551
+ },
552
+ [remoteApi]
553
+ );
554
+ return [trigger, { data, isFetching }];
555
+ }
556
+
557
+ // ui/host/toast.ts
558
+ function showSuccessToast(message, _detail) {
559
+ const text = String(message ?? "");
560
+ emitToast("success", text);
561
+ }
562
+ function showErrorToast(message, _detail) {
563
+ const text = String(message ?? "");
564
+ emitToast("error", text);
565
+ }
566
+ function emitToast(kind, message) {
567
+ if (typeof document === "undefined") return;
568
+ const existing = document.querySelector(".erp-table-toast");
569
+ existing?.remove();
570
+ const el = document.createElement("div");
571
+ el.className = `erp-table-toast is-${kind}`;
572
+ el.textContent = message;
573
+ assignThemeVars(el);
574
+ document.body.appendChild(el);
575
+ window.setTimeout(() => el.remove(), 2800);
576
+ }
577
+ function useHostToast() {
578
+ const host = useERPTableHost();
579
+ return {
580
+ success: (message, detail) => {
581
+ if (host.onToast) host.onToast("success", message, detail);
582
+ else showSuccessToast(message);
583
+ },
584
+ error: (message, detail) => {
585
+ if (host.onToast) host.onToast("error", message, detail);
586
+ else showErrorToast(message);
587
+ }
588
+ };
589
+ }
590
+ function useGridHostEvents(input) {
591
+ const handlersRef = useRef(input);
592
+ handlersRef.current = input;
593
+ useEffect(() => {
594
+ if (!input.ready || !input.controller || !input.eventStore) return;
595
+ return bindGridHostEvents({
596
+ eventStore: input.eventStore,
597
+ controller: input.controller,
598
+ tableKey: input.tableKey,
599
+ handlers: {
600
+ onCellValueChanged: (event) => handlersRef.current.onCellValueChanged?.(event),
601
+ onRowValueChanged: (event) => handlersRef.current.onRowValueChanged?.(event),
602
+ onRowDataUpdated: (event) => handlersRef.current.onRowDataUpdated?.(event),
603
+ onSelectionChanged: (event) => handlersRef.current.onSelectionChanged?.(event),
604
+ onCellFocused: (event) => handlersRef.current.onCellFocused?.(event)
605
+ }
606
+ });
607
+ }, [input.ready, input.controller, input.eventStore, input.tableKey]);
608
+ }
609
+
610
+ export { AR_MESSAGES, EN_MESSAGES, ERPTableHostProvider, FA_MESSAGES, GridTheme, JALALI_WEEKDAY_LABELS_FA, addJalaliMonths, bindGridHostEvents, buildDependencyBody, buildJalaliMonthGrid, compareJalaliDay, gregorianAdapter, hasDependValue, isDateInRange, isStockDarkTheme, jalaliMonthName, resolveActiveTheme, sameJalaliDay, themeDark, themeDefault, themeErp, themeErpDark, themeToStyle, toJalaliYmd, translate, useDateAdapter, useDirection, useERPTableHost, useERPTableTheme, useGridHostEvents, useHostDependOn, useHostToast, useLazyRemote, useLocale, useMediaQuery, useNumberingSystem, useRemoteQuery, useStaticDependOn, useThemePortalStyle, useTranslations };
611
+ //# sourceMappingURL=chunk-QQMU44KJ.js.map
612
+ //# sourceMappingURL=chunk-QQMU44KJ.js.map