namirasoft-site-react 1.5.21 → 1.5.23

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 (498) hide show
  1. package/.dockerignore +86 -86
  2. package/.env.template +10 -10
  3. package/Dockerfile +18 -18
  4. package/SKILL.md +307 -307
  5. package/config-overrides.js +72 -72
  6. package/dist/App.css +33 -33
  7. package/dist/App.d.ts +4 -19
  8. package/dist/App.js +68 -65
  9. package/dist/App.js.map +1 -1
  10. package/dist/NSBoxBuilder.d.ts +25 -25
  11. package/dist/ProductCacheService.d.ts +1 -0
  12. package/dist/ProductCacheService.js +12 -1
  13. package/dist/ProductCacheService.js.map +1 -1
  14. package/dist/components/NSBanner.d.ts +1 -1
  15. package/dist/components/NSBanner.module.css +47 -47
  16. package/dist/components/NSBarAction.d.ts +1 -1
  17. package/dist/components/NSBarAction.module.css +91 -91
  18. package/dist/components/NSBarAlert.d.ts +1 -1
  19. package/dist/components/NSBarAlert.module.css +79 -79
  20. package/dist/components/NSBarNotification.d.ts +1 -1
  21. package/dist/components/NSBarNotification.module.css +34 -34
  22. package/dist/components/NSBarTitle.d.ts +1 -1
  23. package/dist/components/NSBarTitle.module.css +9 -9
  24. package/dist/components/NSBox.module.css +87 -87
  25. package/dist/components/NSBoxBaseCombo.d.ts +1 -1
  26. package/dist/components/NSBoxBaseCombo.module.css +24 -24
  27. package/dist/components/NSBoxBaseLayout.d.ts +1 -1
  28. package/dist/components/NSBoxBaseLayoutRecursive.d.ts +1 -1
  29. package/dist/components/NSBoxBoolean.d.ts +1 -1
  30. package/dist/components/NSBoxBoolean.module.css +73 -73
  31. package/dist/components/NSBoxBooleans.d.ts +1 -1
  32. package/dist/components/NSBoxColor.d.ts +1 -1
  33. package/dist/components/NSBoxCombo.d.ts +1 -1
  34. package/dist/components/NSBoxDate.d.ts +1 -1
  35. package/dist/components/NSBoxDate.module.css +4 -4
  36. package/dist/components/NSBoxDateRange.d.ts +1 -1
  37. package/dist/components/NSBoxDateRangeBase.d.ts +1 -1
  38. package/dist/components/NSBoxDateRangeBase.module.css +73 -73
  39. package/dist/components/NSBoxDateTime.d.ts +1 -1
  40. package/dist/components/NSBoxDateTime.module.css +4 -4
  41. package/dist/components/NSBoxDateTimeRange.d.ts +1 -1
  42. package/dist/components/NSBoxDouble.d.ts +1 -1
  43. package/dist/components/NSBoxDuration.d.ts +1 -1
  44. package/dist/components/NSBoxDuration.module.css +4 -4
  45. package/dist/components/NSBoxDynamic.d.ts +1 -1
  46. package/dist/components/NSBoxDynamics.d.ts +1 -1
  47. package/dist/components/NSBoxEmail.d.ts +1 -1
  48. package/dist/components/NSBoxEntity.d.ts +1 -1
  49. package/dist/components/NSBoxEnum.d.ts +1 -1
  50. package/dist/components/NSBoxFile.d.ts +1 -1
  51. package/dist/components/NSBoxFile.module.css +10 -10
  52. package/dist/components/NSBoxFilePath.d.ts +1 -1
  53. package/dist/components/NSBoxFont.d.ts +1 -1
  54. package/dist/components/NSBoxIPV4.d.ts +1 -1
  55. package/dist/components/NSBoxIPV4Range.d.ts +1 -1
  56. package/dist/components/NSBoxIPV6.d.ts +1 -1
  57. package/dist/components/NSBoxIPV6Range.d.ts +1 -1
  58. package/dist/components/NSBoxInteger.d.ts +1 -1
  59. package/dist/components/NSBoxInteger.module.css +16 -16
  60. package/dist/components/NSBoxMoney.d.ts +1 -1
  61. package/dist/components/NSBoxOptions.d.ts +1 -1
  62. package/dist/components/NSBoxOptions.module.css +53 -53
  63. package/dist/components/NSBoxPhone.d.ts +1 -1
  64. package/dist/components/NSBoxPhone.module.css +35 -35
  65. package/dist/components/NSBoxRadio.d.ts +1 -1
  66. package/dist/components/NSBoxRadio.module.css +33 -33
  67. package/dist/components/NSBoxSchemaBase.d.ts +1 -1
  68. package/dist/components/NSBoxSchemaBase.js +2 -2
  69. package/dist/components/NSBoxSchemaBase.js.map +1 -1
  70. package/dist/components/NSBoxSchemaBase.module.css +17 -17
  71. package/dist/components/NSBoxSchemaVariable.d.ts +1 -1
  72. package/dist/components/NSBoxSchemaVariable.js.map +1 -1
  73. package/dist/components/NSBoxSchemaVariable.module.css +16 -16
  74. package/dist/components/NSBoxSearch.d.ts +1 -1
  75. package/dist/components/NSBoxSensitive.d.ts +1 -1
  76. package/dist/components/NSBoxString.d.ts +1 -1
  77. package/dist/components/NSBoxTextArea.d.ts +1 -1
  78. package/dist/components/NSBoxTextArea.module.css +12 -12
  79. package/dist/components/NSBoxTime.d.ts +1 -1
  80. package/dist/components/NSBoxTime.module.css +4 -4
  81. package/dist/components/NSBoxTimeRange.d.ts +1 -1
  82. package/dist/components/NSBoxTimeZone.d.ts +1 -1
  83. package/dist/components/NSBoxURL.d.ts +1 -1
  84. package/dist/components/NSBoxVersion.d.ts +1 -1
  85. package/dist/components/NSButton.module.css +57 -57
  86. package/dist/components/NSButtonBlue.d.ts +1 -1
  87. package/dist/components/NSButtonBlue.module.css +4 -4
  88. package/dist/components/NSButtonGreen.d.ts +1 -1
  89. package/dist/components/NSButtonGreen.module.css +4 -4
  90. package/dist/components/NSButtonRed.d.ts +1 -1
  91. package/dist/components/NSButtonRed.module.css +4 -4
  92. package/dist/components/NSCard.d.ts +1 -1
  93. package/dist/components/NSCard.module.css +113 -113
  94. package/dist/components/NSCardScreenshot.d.ts +1 -1
  95. package/dist/components/NSCardScreenshot.module.css +41 -41
  96. package/dist/components/NSChartBar.d.ts +1 -1
  97. package/dist/components/NSChartDoughnut.d.ts +1 -1
  98. package/dist/components/NSChartLine.d.ts +1 -1
  99. package/dist/components/NSChartPie.d.ts +1 -1
  100. package/dist/components/NSChartRange.d.ts +1 -1
  101. package/dist/components/NSColumn.d.ts +1 -1
  102. package/dist/components/NSColumn.module.css +16 -16
  103. package/dist/components/NSCopy.d.ts +1 -1
  104. package/dist/components/NSCopyBox.d.ts +1 -1
  105. package/dist/components/NSCopyBox.module.css +39 -39
  106. package/dist/components/NSDialog.d.ts +1 -1
  107. package/dist/components/NSDialog.module.css +105 -105
  108. package/dist/components/NSDialogBox.d.ts +1 -1
  109. package/dist/components/NSDialogBoxDate.d.ts +1 -1
  110. package/dist/components/NSDialogBoxDateTime.d.ts +1 -1
  111. package/dist/components/NSDialogBoxPhone.d.ts +1 -1
  112. package/dist/components/NSDialogBoxString.d.ts +1 -1
  113. package/dist/components/NSDialogDelete.d.ts +1 -1
  114. package/dist/components/NSDialogInfo.d.ts +1 -1
  115. package/dist/components/NSDialogPageSelection.d.ts +2 -2
  116. package/dist/components/NSDialogPageSelection.module.css +103 -103
  117. package/dist/components/NSDownTimer.d.ts +1 -1
  118. package/dist/components/NSDownTimer.module.css +55 -55
  119. package/dist/components/NSDownload.d.ts +1 -1
  120. package/dist/components/NSDownload.module.css +46 -46
  121. package/dist/components/NSElectronicCard.d.ts +1 -1
  122. package/dist/components/NSElectronicCard.module.css +60 -60
  123. package/dist/components/NSEntityCardBackground.d.ts +1 -1
  124. package/dist/components/NSEntityCardBackground.module.css +27 -27
  125. package/dist/components/NSFilterBox.d.ts +2 -2
  126. package/dist/components/NSFilterBox.module.css +27 -27
  127. package/dist/components/NSFilterBoxItems.d.ts +1 -1
  128. package/dist/components/NSFilterBoxItems.module.css +15 -15
  129. package/dist/components/NSFilterItem.d.ts +1 -1
  130. package/dist/components/NSFilterItem.module.css +24 -24
  131. package/dist/components/NSFooter.d.ts +1 -1
  132. package/dist/components/NSFooter.module.css +140 -140
  133. package/dist/components/NSGauge.d.ts +1 -1
  134. package/dist/components/NSGauge.module.css +67 -67
  135. package/dist/components/NSGaugeDate.d.ts +1 -1
  136. package/dist/components/NSGaugeDate.module.css +57 -57
  137. package/dist/components/NSGaugeNumber.d.ts +1 -1
  138. package/dist/components/NSGaugeNumber.module.css +66 -66
  139. package/dist/components/NSHeader.d.ts +1 -1
  140. package/dist/components/NSHeader.module.css +316 -316
  141. package/dist/components/NSHeaderScreenshot.d.ts +1 -1
  142. package/dist/components/NSHeaderScreenshot.module.css +35 -35
  143. package/dist/components/NSID.d.ts +1 -1
  144. package/dist/components/NSInfo.d.ts +1 -1
  145. package/dist/components/NSLabel.d.ts +1 -1
  146. package/dist/components/NSLabel.module.css +25 -25
  147. package/dist/components/NSLabelErrorNotifier.d.ts +1 -1
  148. package/dist/components/NSLabelErrorNotifier.module.css +2 -2
  149. package/dist/components/NSLabelSensitive.d.ts +1 -1
  150. package/dist/components/NSLabelSensitive.module.css +9 -9
  151. package/dist/components/NSLayout.d.ts +1 -1
  152. package/dist/components/NSLayout.module.css +22 -22
  153. package/dist/components/NSLine.d.ts +1 -1
  154. package/dist/components/NSLine.module.css +15 -15
  155. package/dist/components/NSLineText.d.ts +1 -1
  156. package/dist/components/NSLineText.module.css +38 -38
  157. package/dist/components/NSLink.d.ts +1 -1
  158. package/dist/components/NSLink.module.css +36 -36
  159. package/dist/components/NSLinkBlue.d.ts +1 -1
  160. package/dist/components/NSLinkGreen.d.ts +1 -1
  161. package/dist/components/NSLinkRed.d.ts +1 -1
  162. package/dist/components/NSListGrouped.d.ts +1 -1
  163. package/dist/components/NSListGrouped.module.css +69 -69
  164. package/dist/components/NSListMenu.d.ts +9 -0
  165. package/dist/components/NSListMenu.js +135 -0
  166. package/dist/components/NSListMenu.js.map +1 -0
  167. package/dist/components/NSListProduct.d.ts +1 -1
  168. package/dist/components/NSLoading.d.ts +1 -1
  169. package/dist/components/NSLoading.module.css +10 -10
  170. package/dist/components/NSMegaMenu.d.ts +1 -1
  171. package/dist/components/NSMegaMenu.module.css +133 -133
  172. package/dist/components/NSMenuAction.d.ts +1 -1
  173. package/dist/components/NSMenuAction.module.css +88 -88
  174. package/dist/components/NSMenuButton.d.ts +1 -1
  175. package/dist/components/NSMenuButton.module.css +44 -44
  176. package/dist/components/NSNoData.d.ts +1 -1
  177. package/dist/components/NSNoData.module.css +11 -11
  178. package/dist/components/NSPagination.d.ts +1 -1
  179. package/dist/components/NSPagination.module.css +87 -87
  180. package/dist/components/NSPanel.d.ts +1 -1
  181. package/dist/components/NSPanel.module.css +28 -28
  182. package/dist/components/NSPanelAccordion.d.ts +1 -1
  183. package/dist/components/NSPanelAccordion.module.css +4 -4
  184. package/dist/components/NSProductSearch.d.ts +1 -1
  185. package/dist/components/NSProductSearch.module.css +73 -73
  186. package/dist/components/NSProgressBar.d.ts +1 -1
  187. package/dist/components/NSProgressBar.module.css +38 -38
  188. package/dist/components/NSRange.d.ts +1 -1
  189. package/dist/components/NSRange.module.css +66 -66
  190. package/dist/components/NSReorderDialog.d.ts +1 -1
  191. package/dist/components/NSReorderDialog.module.css +49 -49
  192. package/dist/components/NSRepeater.d.ts +1 -1
  193. package/dist/components/NSRepeater.js.map +1 -1
  194. package/dist/components/NSRepeaterNSBoxSchemaVariable.d.ts +1 -1
  195. package/dist/components/NSRepeaterNSBoxSchemaVariable.js +2 -2
  196. package/dist/components/NSRepeaterNSBoxSchemaVariable.js.map +1 -1
  197. package/dist/components/NSRepeaterNSTag.d.ts +1 -1
  198. package/dist/components/NSRow.d.ts +1 -1
  199. package/dist/components/NSRow.module.css +17 -17
  200. package/dist/components/NSSection.d.ts +1 -1
  201. package/dist/components/NSSection.module.css +4 -4
  202. package/dist/components/NSSectionCards.d.ts +1 -1
  203. package/dist/components/NSSectionCards.module.css +38 -38
  204. package/dist/components/NSSectionTiles.d.ts +1 -1
  205. package/dist/components/NSSectionTiles.module.css +10 -10
  206. package/dist/components/NSSectionTitle.d.ts +1 -1
  207. package/dist/components/NSSortDialog.d.ts +1 -1
  208. package/dist/components/NSSpace.d.ts +1 -1
  209. package/dist/components/NSSplitter.d.ts +1 -1
  210. package/dist/components/NSSplitter.module.css +59 -59
  211. package/dist/components/NSTabPage.d.ts +1 -1
  212. package/dist/components/NSTabPage.module.css +59 -59
  213. package/dist/components/NSTable.d.ts +2 -1
  214. package/dist/components/NSTable.js +26 -26
  215. package/dist/components/NSTable.js.map +1 -1
  216. package/dist/components/NSTable.module.css +368 -368
  217. package/dist/components/NSTableChart.d.ts +1 -1
  218. package/dist/components/NSTableChart.module.css +119 -119
  219. package/dist/components/NSTag.d.ts +1 -1
  220. package/dist/components/NSTile.d.ts +1 -1
  221. package/dist/components/NSTile.module.css +76 -76
  222. package/dist/components/NSTimelineMonthly.d.ts +1 -1
  223. package/dist/components/NSTimelineMonthly.module.css +71 -71
  224. package/dist/components/NSTitle.d.ts +1 -1
  225. package/dist/components/NSTitle.module.css +15 -15
  226. package/dist/formatter/IDFormatter.js +1 -1
  227. package/dist/formatter/IDFormatter.js.map +1 -1
  228. package/dist/pages/NSImplementing.d.ts +1 -1
  229. package/dist/pages/NSImplementing.module.css +35 -35
  230. package/dist/pages/NSNotFoundPage.d.ts +1 -1
  231. package/dist/pages/NSNotFoundPage.module.css +18 -18
  232. package/dist/pages/NSUpdating.d.ts +1 -1
  233. package/dist/pages/NSUpdating.module.css +35 -35
  234. package/package.json +86 -86
  235. package/public/index.html +38 -38
  236. package/src/App.css +33 -33
  237. package/src/App.tsx +176 -167
  238. package/src/BrowserDetector.ts +109 -109
  239. package/src/Color.tsx +10 -10
  240. package/src/CopyToClipboard.ts +6 -6
  241. package/src/EncryptionOperation.ts +98 -98
  242. package/src/KeyOperation.ts +109 -109
  243. package/src/LinkOperation.ts +101 -101
  244. package/src/NSBoxBuilder.tsx +922 -922
  245. package/src/ProductCacheService.ts +36 -15
  246. package/src/Validator.ts +199 -199
  247. package/src/components/INSBox.tsx +7 -7
  248. package/src/components/NSBanner.module.css +47 -47
  249. package/src/components/NSBanner.tsx +80 -80
  250. package/src/components/NSBarAction.module.css +91 -91
  251. package/src/components/NSBarAction.tsx +95 -95
  252. package/src/components/NSBarAlert.module.css +79 -79
  253. package/src/components/NSBarAlert.tsx +35 -35
  254. package/src/components/NSBarNotification.module.css +34 -34
  255. package/src/components/NSBarNotification.tsx +89 -89
  256. package/src/components/NSBarTitle.module.css +9 -9
  257. package/src/components/NSBarTitle.tsx +23 -23
  258. package/src/components/NSBox.module.css +87 -87
  259. package/src/components/NSBox.tsx +19 -19
  260. package/src/components/NSBoxBaseCombo.module.css +24 -24
  261. package/src/components/NSBoxBaseCombo.tsx +487 -487
  262. package/src/components/NSBoxBaseLayout.tsx +163 -163
  263. package/src/components/NSBoxBaseLayoutRecursive.tsx +59 -59
  264. package/src/components/NSBoxBoolean.module.css +73 -73
  265. package/src/components/NSBoxBoolean.tsx +152 -152
  266. package/src/components/NSBoxBooleans.tsx +181 -181
  267. package/src/components/NSBoxColor.tsx +107 -107
  268. package/src/components/NSBoxCombo.tsx +95 -95
  269. package/src/components/NSBoxDate.module.css +4 -4
  270. package/src/components/NSBoxDate.tsx +144 -144
  271. package/src/components/NSBoxDateRange.tsx +88 -88
  272. package/src/components/NSBoxDateRangeBase.module.css +73 -73
  273. package/src/components/NSBoxDateRangeBase.tsx +236 -236
  274. package/src/components/NSBoxDateTime.module.css +4 -4
  275. package/src/components/NSBoxDateTime.tsx +136 -136
  276. package/src/components/NSBoxDateTimeRange.tsx +66 -66
  277. package/src/components/NSBoxDouble.tsx +110 -110
  278. package/src/components/NSBoxDuration.module.css +4 -4
  279. package/src/components/NSBoxDuration.tsx +107 -107
  280. package/src/components/NSBoxDynamic.tsx +73 -73
  281. package/src/components/NSBoxDynamics.tsx +68 -68
  282. package/src/components/NSBoxEmail.tsx +117 -117
  283. package/src/components/NSBoxEntity.tsx +180 -180
  284. package/src/components/NSBoxEnum.tsx +113 -113
  285. package/src/components/NSBoxFile.module.css +10 -10
  286. package/src/components/NSBoxFile.tsx +106 -106
  287. package/src/components/NSBoxFilePath.tsx +106 -106
  288. package/src/components/NSBoxFont.tsx +107 -107
  289. package/src/components/NSBoxIPV4.tsx +107 -107
  290. package/src/components/NSBoxIPV4Range.tsx +107 -107
  291. package/src/components/NSBoxIPV6.tsx +104 -104
  292. package/src/components/NSBoxIPV6Range.tsx +107 -107
  293. package/src/components/NSBoxInteger.module.css +16 -16
  294. package/src/components/NSBoxInteger.tsx +126 -126
  295. package/src/components/NSBoxMoney.tsx +115 -115
  296. package/src/components/NSBoxOptions.module.css +53 -53
  297. package/src/components/NSBoxOptions.tsx +182 -182
  298. package/src/components/NSBoxPhone.module.css +35 -35
  299. package/src/components/NSBoxPhone.tsx +120 -120
  300. package/src/components/NSBoxRadio.module.css +33 -33
  301. package/src/components/NSBoxRadio.tsx +104 -104
  302. package/src/components/NSBoxSchemaBase.module.css +17 -17
  303. package/src/components/NSBoxSchemaBase.tsx +561 -562
  304. package/src/components/NSBoxSchemaVariable.module.css +16 -16
  305. package/src/components/NSBoxSchemaVariable.tsx +262 -263
  306. package/src/components/NSBoxSearch.tsx +112 -112
  307. package/src/components/NSBoxSensitive.tsx +133 -133
  308. package/src/components/NSBoxString.tsx +106 -106
  309. package/src/components/NSBoxTextArea.module.css +12 -12
  310. package/src/components/NSBoxTextArea.tsx +136 -136
  311. package/src/components/NSBoxTime.module.css +4 -4
  312. package/src/components/NSBoxTime.tsx +106 -106
  313. package/src/components/NSBoxTimeRange.tsx +220 -220
  314. package/src/components/NSBoxTimeZone.tsx +122 -122
  315. package/src/components/NSBoxURL.tsx +117 -117
  316. package/src/components/NSBoxVersion.tsx +107 -107
  317. package/src/components/NSButton.module.css +57 -57
  318. package/src/components/NSButton.tsx +74 -74
  319. package/src/components/NSButtonBlue.module.css +4 -4
  320. package/src/components/NSButtonBlue.tsx +29 -29
  321. package/src/components/NSButtonGreen.module.css +4 -4
  322. package/src/components/NSButtonGreen.tsx +29 -29
  323. package/src/components/NSButtonRed.module.css +4 -4
  324. package/src/components/NSButtonRed.tsx +29 -29
  325. package/src/components/NSCard.module.css +113 -113
  326. package/src/components/NSCard.tsx +67 -67
  327. package/src/components/NSCardScreenshot.module.css +41 -41
  328. package/src/components/NSCardScreenshot.tsx +31 -31
  329. package/src/components/NSChartBar.tsx +134 -134
  330. package/src/components/NSChartDoughnut.tsx +114 -114
  331. package/src/components/NSChartLine.tsx +110 -110
  332. package/src/components/NSChartPie.tsx +105 -105
  333. package/src/components/NSChartRange.tsx +14 -14
  334. package/src/components/NSColumn.module.css +16 -16
  335. package/src/components/NSColumn.tsx +24 -24
  336. package/src/components/NSCopy.tsx +95 -95
  337. package/src/components/NSCopyBox.module.css +39 -39
  338. package/src/components/NSCopyBox.tsx +53 -53
  339. package/src/components/NSDialog.module.css +105 -105
  340. package/src/components/NSDialog.tsx +72 -72
  341. package/src/components/NSDialogBox.tsx +38 -38
  342. package/src/components/NSDialogBoxDate.tsx +28 -28
  343. package/src/components/NSDialogBoxDateTime.tsx +28 -28
  344. package/src/components/NSDialogBoxPhone.tsx +28 -28
  345. package/src/components/NSDialogBoxString.tsx +28 -28
  346. package/src/components/NSDialogDelete.tsx +36 -36
  347. package/src/components/NSDialogInfo.tsx +49 -49
  348. package/src/components/NSDialogPageSelection.module.css +103 -103
  349. package/src/components/NSDialogPageSelection.tsx +233 -233
  350. package/src/components/NSDownTimer.module.css +55 -55
  351. package/src/components/NSDownTimer.tsx +91 -91
  352. package/src/components/NSDownload.module.css +46 -46
  353. package/src/components/NSDownload.tsx +69 -69
  354. package/src/components/NSElectronicCard.module.css +60 -60
  355. package/src/components/NSElectronicCard.tsx +46 -46
  356. package/src/components/NSEntityCardBackground.module.css +27 -27
  357. package/src/components/NSEntityCardBackground.tsx +36 -36
  358. package/src/components/NSFilterBox.module.css +27 -27
  359. package/src/components/NSFilterBox.tsx +477 -477
  360. package/src/components/NSFilterBoxItems.module.css +15 -15
  361. package/src/components/NSFilterBoxItems.tsx +52 -52
  362. package/src/components/NSFilterItem.module.css +24 -24
  363. package/src/components/NSFilterItem.tsx +27 -27
  364. package/src/components/NSFooter.module.css +140 -140
  365. package/src/components/NSFooter.tsx +321 -321
  366. package/src/components/NSGauge.module.css +67 -67
  367. package/src/components/NSGauge.tsx +52 -52
  368. package/src/components/NSGaugeDate.module.css +57 -57
  369. package/src/components/NSGaugeDate.tsx +125 -125
  370. package/src/components/NSGaugeNumber.module.css +66 -66
  371. package/src/components/NSGaugeNumber.tsx +93 -93
  372. package/src/components/NSHeader.module.css +316 -316
  373. package/src/components/NSHeader.tsx +337 -337
  374. package/src/components/NSHeaderScreenshot.module.css +35 -35
  375. package/src/components/NSHeaderScreenshot.tsx +39 -39
  376. package/src/components/NSID.tsx +190 -190
  377. package/src/components/NSInfo.tsx +50 -50
  378. package/src/components/NSLabel.module.css +25 -25
  379. package/src/components/NSLabel.tsx +47 -47
  380. package/src/components/NSLabelErrorNotifier.module.css +2 -2
  381. package/src/components/NSLabelErrorNotifier.tsx +35 -35
  382. package/src/components/NSLabelSensitive.module.css +9 -9
  383. package/src/components/NSLabelSensitive.tsx +101 -101
  384. package/src/components/NSLayout.module.css +22 -22
  385. package/src/components/NSLayout.tsx +143 -143
  386. package/src/components/NSLine.module.css +15 -15
  387. package/src/components/NSLine.tsx +13 -13
  388. package/src/components/NSLineText.module.css +38 -38
  389. package/src/components/NSLineText.tsx +17 -17
  390. package/src/components/NSLink.module.css +36 -36
  391. package/src/components/NSLink.tsx +26 -26
  392. package/src/components/NSLinkBlue.tsx +22 -22
  393. package/src/components/NSLinkGreen.tsx +13 -13
  394. package/src/components/NSLinkRed.tsx +13 -13
  395. package/src/components/NSListGrouped.module.css +69 -69
  396. package/src/components/NSListGrouped.tsx +106 -106
  397. package/src/components/NSListProduct.tsx +78 -78
  398. package/src/components/NSLoading.module.css +10 -10
  399. package/src/components/NSLoading.tsx +43 -43
  400. package/src/components/NSMegaMenu.module.css +133 -133
  401. package/src/components/NSMegaMenu.tsx +188 -188
  402. package/src/components/NSMenuAction.module.css +88 -88
  403. package/src/components/NSMenuAction.tsx +106 -106
  404. package/src/components/NSMenuButton.module.css +44 -44
  405. package/src/components/NSMenuButton.tsx +198 -198
  406. package/src/components/NSNoData.module.css +11 -11
  407. package/src/components/NSNoData.tsx +24 -24
  408. package/src/components/NSPagination.module.css +87 -87
  409. package/src/components/NSPagination.tsx +183 -183
  410. package/src/components/NSPanel.module.css +28 -28
  411. package/src/components/NSPanel.tsx +26 -26
  412. package/src/components/NSPanelAccordion.module.css +4 -4
  413. package/src/components/NSPanelAccordion.tsx +51 -51
  414. package/src/components/NSProductSearch.module.css +73 -73
  415. package/src/components/NSProductSearch.tsx +193 -193
  416. package/src/components/NSProgressBar.module.css +38 -38
  417. package/src/components/NSProgressBar.tsx +29 -29
  418. package/src/components/NSRange.module.css +66 -66
  419. package/src/components/NSRange.tsx +83 -83
  420. package/src/components/NSReorderDialog.module.css +49 -49
  421. package/src/components/NSReorderDialog.tsx +184 -184
  422. package/src/components/NSRepeater.tsx +327 -328
  423. package/src/components/NSRepeaterNSBoxSchemaVariable.tsx +96 -94
  424. package/src/components/NSRepeaterNSTag.tsx +86 -86
  425. package/src/components/NSRow.module.css +17 -17
  426. package/src/components/NSRow.tsx +24 -24
  427. package/src/components/NSSection.module.css +4 -4
  428. package/src/components/NSSection.tsx +26 -26
  429. package/src/components/NSSectionCards.module.css +38 -38
  430. package/src/components/NSSectionCards.tsx +51 -51
  431. package/src/components/NSSectionTiles.module.css +10 -10
  432. package/src/components/NSSectionTiles.tsx +25 -25
  433. package/src/components/NSSectionTitle.tsx +19 -19
  434. package/src/components/NSSortDialog.tsx +124 -124
  435. package/src/components/NSSpace.tsx +28 -28
  436. package/src/components/NSSplitter.module.css +59 -59
  437. package/src/components/NSSplitter.tsx +211 -211
  438. package/src/components/NSTabPage.module.css +59 -59
  439. package/src/components/NSTabPage.tsx +122 -122
  440. package/src/components/NSTable.module.css +368 -368
  441. package/src/components/NSTable.tsx +1445 -1443
  442. package/src/components/NSTableChart.module.css +119 -119
  443. package/src/components/NSTableChart.tsx +732 -732
  444. package/src/components/NSTag.tsx +74 -74
  445. package/src/components/NSTile.module.css +76 -76
  446. package/src/components/NSTile.tsx +27 -27
  447. package/src/components/NSTimelineMonthly.module.css +71 -71
  448. package/src/components/NSTimelineMonthly.tsx +44 -44
  449. package/src/components/NSTitle.module.css +15 -15
  450. package/src/components/NSTitle.tsx +19 -19
  451. package/src/css.d.ts +13 -13
  452. package/src/formatter/BackColorFormatter.tsx +23 -23
  453. package/src/formatter/BaseColumnFormatter.ts +86 -86
  454. package/src/formatter/BaseURLImageFormatter.tsx +37 -37
  455. package/src/formatter/BooleanFormatter.ts +26 -26
  456. package/src/formatter/BytesFormatter.tsx +19 -19
  457. package/src/formatter/DateFormatter.ts +26 -26
  458. package/src/formatter/DateTimeFormatter.ts +26 -26
  459. package/src/formatter/DurationFormatter.ts +17 -17
  460. package/src/formatter/EmailFormatter.tsx +25 -25
  461. package/src/formatter/EnumFormatter.ts +17 -17
  462. package/src/formatter/FloatFormatter.ts +27 -27
  463. package/src/formatter/ForeColorFormatter.tsx +24 -24
  464. package/src/formatter/IDFormatter.tsx +58 -57
  465. package/src/formatter/IPFormatter.ts +39 -39
  466. package/src/formatter/IntegerFormatter.ts +27 -27
  467. package/src/formatter/JsonFormatter.tsx +75 -75
  468. package/src/formatter/MoneyFormatter.ts +39 -39
  469. package/src/formatter/PercentFormatter.tsx +43 -43
  470. package/src/formatter/PhoneFormatter.tsx +25 -25
  471. package/src/formatter/SensitiveFormatter.tsx +40 -40
  472. package/src/formatter/StringFormatter.tsx +49 -49
  473. package/src/formatter/TimeFormatter.ts +25 -25
  474. package/src/formatter/URLFormatter.tsx +28 -28
  475. package/src/formatter/UnknowFormatter.ts +22 -22
  476. package/src/index.tsx +7 -7
  477. package/src/main.ts +263 -263
  478. package/src/pages/NSImplementing.module.css +35 -35
  479. package/src/pages/NSImplementing.tsx +32 -32
  480. package/src/pages/NSNotFoundPage.module.css +18 -18
  481. package/src/pages/NSNotFoundPage.tsx +14 -14
  482. package/src/pages/NSUpdating.module.css +35 -35
  483. package/src/pages/NSUpdating.tsx +32 -32
  484. package/src/props/IBackgroundProps.ts +5 -5
  485. package/src/props/IBaseComponentProps.ts +8 -8
  486. package/src/props/IHeaderIconProps.ts +10 -10
  487. package/src/props/IHeaderLeftProps.ts +6 -6
  488. package/src/props/IHeaderRightProps.ts +8 -8
  489. package/src/props/IImageProps.ts +4 -4
  490. package/src/props/ILinkProps.ts +4 -4
  491. package/src/props/IValidationNumberProps.ts +4 -4
  492. package/src/props/IValidationPrecisionProps.ts +3 -3
  493. package/src/props/IValidationProps.ts +9 -9
  494. package/src/props/IValidationRegexProps.ts +4 -4
  495. package/src/props/IValidationStringProps.ts +4 -4
  496. package/src/routing/NSNotifier.ts +114 -114
  497. package/src/routing/NSRouterMaker.tsx +28 -28
  498. package/tsconfig.json +43 -43
@@ -1,99 +1,99 @@
1
- export class EncryptionOperation
2
- {
3
- private static async encrypt<T>(algorithm: string, secret: string, message: T): Promise<string>
4
- {
5
- // if (secret.length != 32)
6
- // throw new Error("Secret length must be exactly 32");
7
- const enc = new TextEncoder();
8
-
9
- // Derive a key from the password using PBKDF2
10
- const salt = crypto.getRandomValues(new Uint8Array(16));
11
- const keyMaterial = await crypto.subtle.importKey(
12
- "raw",
13
- enc.encode(secret),
14
- { name: "PBKDF2" },
15
- false,
16
- ["deriveKey"]
17
- );
18
-
19
- const key = await crypto.subtle.deriveKey(
20
- {
21
- name: "PBKDF2",
22
- salt,
23
- iterations: 100000,
24
- hash: "SHA-256",
25
- },
26
- keyMaterial,
27
- { name: algorithm, length: 256 },
28
- true,
29
- ["encrypt"]
30
- );
31
-
32
- // Generate random IV
33
- const iv = crypto.getRandomValues(new Uint8Array(12));
34
-
35
- const cipherText = await crypto.subtle.encrypt(
36
- {
37
- name: algorithm,
38
- iv,
39
- },
40
- key,
41
- enc.encode(JSON.stringify(message))
42
- );
43
-
44
- // Combine salt, iv, and cipherText for storage
45
- const combined = new Uint8Array([...salt, ...iv, ...new Uint8Array(cipherText)]);
46
- return btoa(String.fromCharCode(...combined));
47
- }
48
- private static async decrypt<T>(algorithm: string, secret: string, message: string): Promise<T>
49
- {
50
- const data = Uint8Array.from(atob(message), c => c.charCodeAt(0));
51
-
52
- const salt = data.slice(0, 16);
53
- const iv = data.slice(16, 28);
54
- const cipherText = data.slice(28);
55
-
56
- const enc = new TextEncoder();
57
- const dec = new TextDecoder();
58
-
59
- const keyMaterial = await crypto.subtle.importKey(
60
- "raw",
61
- enc.encode(secret),
62
- { name: "PBKDF2" },
63
- false,
64
- ["deriveKey"]
65
- );
66
-
67
- const key = await crypto.subtle.deriveKey(
68
- {
69
- name: "PBKDF2",
70
- salt,
71
- iterations: 100000,
72
- hash: "SHA-256",
73
- },
74
- keyMaterial,
75
- { name: algorithm, length: 256 },
76
- true,
77
- ["decrypt"]
78
- );
79
-
80
- const decrypted = await crypto.subtle.decrypt(
81
- {
82
- name: algorithm,
83
- iv,
84
- },
85
- key,
86
- cipherText
87
- );
88
-
89
- return JSON.parse(dec.decode(decrypted));
90
- }
91
- static async AES256GCMEncrypt<T>(secret: string, message: T): Promise<string>
92
- {
93
- return EncryptionOperation.encrypt("AES-GCM", secret, message);
94
- }
95
- static async AES256GCMDecrypt<T>(secret: string, message: string): Promise<T>
96
- {
97
- return EncryptionOperation.decrypt("AES-GCM", secret, message);
98
- }
1
+ export class EncryptionOperation
2
+ {
3
+ private static async encrypt<T>(algorithm: string, secret: string, message: T): Promise<string>
4
+ {
5
+ // if (secret.length != 32)
6
+ // throw new Error("Secret length must be exactly 32");
7
+ const enc = new TextEncoder();
8
+
9
+ // Derive a key from the password using PBKDF2
10
+ const salt = crypto.getRandomValues(new Uint8Array(16));
11
+ const keyMaterial = await crypto.subtle.importKey(
12
+ "raw",
13
+ enc.encode(secret),
14
+ { name: "PBKDF2" },
15
+ false,
16
+ ["deriveKey"]
17
+ );
18
+
19
+ const key = await crypto.subtle.deriveKey(
20
+ {
21
+ name: "PBKDF2",
22
+ salt,
23
+ iterations: 100000,
24
+ hash: "SHA-256",
25
+ },
26
+ keyMaterial,
27
+ { name: algorithm, length: 256 },
28
+ true,
29
+ ["encrypt"]
30
+ );
31
+
32
+ // Generate random IV
33
+ const iv = crypto.getRandomValues(new Uint8Array(12));
34
+
35
+ const cipherText = await crypto.subtle.encrypt(
36
+ {
37
+ name: algorithm,
38
+ iv,
39
+ },
40
+ key,
41
+ enc.encode(JSON.stringify(message))
42
+ );
43
+
44
+ // Combine salt, iv, and cipherText for storage
45
+ const combined = new Uint8Array([...salt, ...iv, ...new Uint8Array(cipherText)]);
46
+ return btoa(String.fromCharCode(...combined));
47
+ }
48
+ private static async decrypt<T>(algorithm: string, secret: string, message: string): Promise<T>
49
+ {
50
+ const data = Uint8Array.from(atob(message), c => c.charCodeAt(0));
51
+
52
+ const salt = data.slice(0, 16);
53
+ const iv = data.slice(16, 28);
54
+ const cipherText = data.slice(28);
55
+
56
+ const enc = new TextEncoder();
57
+ const dec = new TextDecoder();
58
+
59
+ const keyMaterial = await crypto.subtle.importKey(
60
+ "raw",
61
+ enc.encode(secret),
62
+ { name: "PBKDF2" },
63
+ false,
64
+ ["deriveKey"]
65
+ );
66
+
67
+ const key = await crypto.subtle.deriveKey(
68
+ {
69
+ name: "PBKDF2",
70
+ salt,
71
+ iterations: 100000,
72
+ hash: "SHA-256",
73
+ },
74
+ keyMaterial,
75
+ { name: algorithm, length: 256 },
76
+ true,
77
+ ["decrypt"]
78
+ );
79
+
80
+ const decrypted = await crypto.subtle.decrypt(
81
+ {
82
+ name: algorithm,
83
+ iv,
84
+ },
85
+ key,
86
+ cipherText
87
+ );
88
+
89
+ return JSON.parse(dec.decode(decrypted));
90
+ }
91
+ static async AES256GCMEncrypt<T>(secret: string, message: T): Promise<string>
92
+ {
93
+ return EncryptionOperation.encrypt("AES-GCM", secret, message);
94
+ }
95
+ static async AES256GCMDecrypt<T>(secret: string, message: string): Promise<T>
96
+ {
97
+ return EncryptionOperation.decrypt("AES-GCM", secret, message);
98
+ }
99
99
  }
@@ -1,110 +1,110 @@
1
- export class KeyOperation
2
- {
3
- private static started: boolean = false;
4
- private static readonly pressedCodes: Set<string> = new Set<string>();
5
- private static readonly pressedKeys: Set<string> = new Set<string>();
6
-
7
- private static readonly onKeyDown = (event: KeyboardEvent): void =>
8
- {
9
- KeyOperation.pressedCodes.add(event.code);
10
- KeyOperation.pressedKeys.add(event.key.toLowerCase());
11
- };
12
-
13
- private static readonly onKeyUp = (event: KeyboardEvent): void =>
14
- {
15
- KeyOperation.pressedCodes.delete(event.code);
16
- KeyOperation.pressedKeys.delete(event.key.toLowerCase());
17
- };
18
-
19
- private static readonly onBlur = (): void =>
20
- {
21
- KeyOperation.pressedCodes.clear();
22
- KeyOperation.pressedKeys.clear();
23
- };
24
-
25
- static start(): void
26
- {
27
- if (KeyOperation.started)
28
- return;
29
- if (typeof window === "undefined")
30
- return;
31
- window.addEventListener("keydown", KeyOperation.onKeyDown);
32
- window.addEventListener("keyup", KeyOperation.onKeyUp);
33
- window.addEventListener("blur", KeyOperation.onBlur);
34
- KeyOperation.started = true;
35
- }
36
-
37
- static stop(): void
38
- {
39
- if (!KeyOperation.started)
40
- return;
41
- if (typeof window === "undefined")
42
- return;
43
- window.removeEventListener("keydown", KeyOperation.onKeyDown);
44
- window.removeEventListener("keyup", KeyOperation.onKeyUp);
45
- window.removeEventListener("blur", KeyOperation.onBlur);
46
- KeyOperation.pressedCodes.clear();
47
- KeyOperation.pressedKeys.clear();
48
- KeyOperation.started = false;
49
- }
50
-
51
- static isCodePressed(code: string): boolean
52
- {
53
- return KeyOperation.pressedCodes.has(code);
54
- }
55
-
56
- static isKeyPressed(key: string): boolean
57
- {
58
- return KeyOperation.pressedKeys.has(key.toLowerCase());
59
- }
60
-
61
- static isAnyCodePressed(...codes: string[]): boolean
62
- {
63
- return codes.some(code => KeyOperation.pressedCodes.has(code));
64
- }
65
-
66
- static areAllCodesPressed(...codes: string[]): boolean
67
- {
68
- return codes.every(code => KeyOperation.pressedCodes.has(code));
69
- }
70
-
71
- static isShiftPressed(): boolean
72
- {
73
- return KeyOperation.isAnyCodePressed("ShiftLeft", "ShiftRight");
74
- }
75
-
76
- static isControlPressed(): boolean
77
- {
78
- return KeyOperation.isAnyCodePressed("ControlLeft", "ControlRight");
79
- }
80
-
81
- static isAltPressed(): boolean
82
- {
83
- return KeyOperation.isAnyCodePressed("AltLeft", "AltRight");
84
- }
85
-
86
- static isMetaPressed(): boolean
87
- {
88
- return KeyOperation.isAnyCodePressed("MetaLeft", "MetaRight");
89
- }
90
-
91
- static isEnterPressed(): boolean
92
- {
93
- return KeyOperation.isAnyCodePressed("Enter", "NumpadEnter");
94
- }
95
-
96
- static isEscapePressed(): boolean
97
- {
98
- return KeyOperation.isCodePressed("Escape");
99
- }
100
-
101
- static isSpacePressed(): boolean
102
- {
103
- return KeyOperation.isCodePressed("Space");
104
- }
105
-
106
- static getPressedCodes(): string[]
107
- {
108
- return Array.from(KeyOperation.pressedCodes);
109
- }
1
+ export class KeyOperation
2
+ {
3
+ private static started: boolean = false;
4
+ private static readonly pressedCodes: Set<string> = new Set<string>();
5
+ private static readonly pressedKeys: Set<string> = new Set<string>();
6
+
7
+ private static readonly onKeyDown = (event: KeyboardEvent): void =>
8
+ {
9
+ KeyOperation.pressedCodes.add(event.code);
10
+ KeyOperation.pressedKeys.add(event.key.toLowerCase());
11
+ };
12
+
13
+ private static readonly onKeyUp = (event: KeyboardEvent): void =>
14
+ {
15
+ KeyOperation.pressedCodes.delete(event.code);
16
+ KeyOperation.pressedKeys.delete(event.key.toLowerCase());
17
+ };
18
+
19
+ private static readonly onBlur = (): void =>
20
+ {
21
+ KeyOperation.pressedCodes.clear();
22
+ KeyOperation.pressedKeys.clear();
23
+ };
24
+
25
+ static start(): void
26
+ {
27
+ if (KeyOperation.started)
28
+ return;
29
+ if (typeof window === "undefined")
30
+ return;
31
+ window.addEventListener("keydown", KeyOperation.onKeyDown);
32
+ window.addEventListener("keyup", KeyOperation.onKeyUp);
33
+ window.addEventListener("blur", KeyOperation.onBlur);
34
+ KeyOperation.started = true;
35
+ }
36
+
37
+ static stop(): void
38
+ {
39
+ if (!KeyOperation.started)
40
+ return;
41
+ if (typeof window === "undefined")
42
+ return;
43
+ window.removeEventListener("keydown", KeyOperation.onKeyDown);
44
+ window.removeEventListener("keyup", KeyOperation.onKeyUp);
45
+ window.removeEventListener("blur", KeyOperation.onBlur);
46
+ KeyOperation.pressedCodes.clear();
47
+ KeyOperation.pressedKeys.clear();
48
+ KeyOperation.started = false;
49
+ }
50
+
51
+ static isCodePressed(code: string): boolean
52
+ {
53
+ return KeyOperation.pressedCodes.has(code);
54
+ }
55
+
56
+ static isKeyPressed(key: string): boolean
57
+ {
58
+ return KeyOperation.pressedKeys.has(key.toLowerCase());
59
+ }
60
+
61
+ static isAnyCodePressed(...codes: string[]): boolean
62
+ {
63
+ return codes.some(code => KeyOperation.pressedCodes.has(code));
64
+ }
65
+
66
+ static areAllCodesPressed(...codes: string[]): boolean
67
+ {
68
+ return codes.every(code => KeyOperation.pressedCodes.has(code));
69
+ }
70
+
71
+ static isShiftPressed(): boolean
72
+ {
73
+ return KeyOperation.isAnyCodePressed("ShiftLeft", "ShiftRight");
74
+ }
75
+
76
+ static isControlPressed(): boolean
77
+ {
78
+ return KeyOperation.isAnyCodePressed("ControlLeft", "ControlRight");
79
+ }
80
+
81
+ static isAltPressed(): boolean
82
+ {
83
+ return KeyOperation.isAnyCodePressed("AltLeft", "AltRight");
84
+ }
85
+
86
+ static isMetaPressed(): boolean
87
+ {
88
+ return KeyOperation.isAnyCodePressed("MetaLeft", "MetaRight");
89
+ }
90
+
91
+ static isEnterPressed(): boolean
92
+ {
93
+ return KeyOperation.isAnyCodePressed("Enter", "NumpadEnter");
94
+ }
95
+
96
+ static isEscapePressed(): boolean
97
+ {
98
+ return KeyOperation.isCodePressed("Escape");
99
+ }
100
+
101
+ static isSpacePressed(): boolean
102
+ {
103
+ return KeyOperation.isCodePressed("Space");
104
+ }
105
+
106
+ static getPressedCodes(): string[]
107
+ {
108
+ return Array.from(KeyOperation.pressedCodes);
109
+ }
110
110
  }
@@ -1,102 +1,102 @@
1
- import { NavigateFunction, NavigateOptions } from "react-router-dom";
2
- import { KeyOperation } from "./KeyOperation";
3
-
4
- export enum LinkTarget
5
- {
6
- Self = "_self",
7
- Blank = "_blank",
8
- Window = "_window",
9
- }
10
-
11
- export class LinkOperation
12
- {
13
- private static navigate?: NavigateFunction;
14
-
15
- static setNavigate(navigate: NavigateFunction): void
16
- {
17
- LinkOperation.navigate = navigate;
18
- }
19
-
20
- private static resolveTarget(target?: LinkTarget): LinkTarget
21
- {
22
- if (target)
23
- return target;
24
- if (KeyOperation.isShiftPressed())
25
- return LinkTarget.Window;
26
- if (KeyOperation.isControlPressed() || KeyOperation.isMetaPressed())
27
- return LinkTarget.Blank;
28
- return LinkTarget.Self;
29
- }
30
-
31
- private static isExternal(url: string): boolean
32
- {
33
- return /^[a-z][a-z0-9+.-]*:/i.test(url) || url.startsWith("//");
34
- }
35
-
36
- static open(url: string, target?: LinkTarget, options?: NavigateOptions): void
37
- {
38
- const resolved = LinkOperation.resolveTarget(target);
39
- if (resolved === LinkTarget.Blank)
40
- {
41
- LinkOperation.openBlank(url);
42
- return;
43
- }
44
- if (resolved === LinkTarget.Window)
45
- {
46
- LinkOperation.openWindow(url);
47
- return;
48
- }
49
- if (LinkOperation.isExternal(url) || !LinkOperation.navigate)
50
- {
51
- window.location.href = url;
52
- return;
53
- }
54
- LinkOperation.navigate(url, options);
55
- }
56
-
57
- static openBlank(url: string): void
58
- {
59
- if (typeof window === "undefined")
60
- return;
61
- window.open(url, "_blank", "noopener,noreferrer");
62
- }
63
-
64
- static openWindow(url: string): void
65
- {
66
- if (typeof window === "undefined")
67
- return;
68
- window.open(url, "_blank", "noopener,noreferrer,popup");
69
- }
70
-
71
- static openSelf(url: string, options?: NavigateOptions): void
72
- {
73
- LinkOperation.open(url, LinkTarget.Self, options);
74
- }
75
-
76
- static replace(url: string, options?: NavigateOptions): void
77
- {
78
- LinkOperation.open(url, LinkTarget.Self, { ...options, replace: true });
79
- }
80
-
81
- static back(): void
82
- {
83
- if (LinkOperation.navigate)
84
- LinkOperation.navigate(-1);
85
- else if (typeof window !== "undefined")
86
- window.history.back();
87
- }
88
-
89
- static forward(): void
90
- {
91
- if (LinkOperation.navigate)
92
- LinkOperation.navigate(1);
93
- else if (typeof window !== "undefined")
94
- window.history.forward();
95
- }
96
-
97
- static reload(): void
98
- {
99
- if (typeof window !== "undefined")
100
- window.location.reload();
101
- }
1
+ import { NavigateFunction, NavigateOptions } from "react-router-dom";
2
+ import { KeyOperation } from "./KeyOperation";
3
+
4
+ export enum LinkTarget
5
+ {
6
+ Self = "_self",
7
+ Blank = "_blank",
8
+ Window = "_window",
9
+ }
10
+
11
+ export class LinkOperation
12
+ {
13
+ private static navigate?: NavigateFunction;
14
+
15
+ static setNavigate(navigate: NavigateFunction): void
16
+ {
17
+ LinkOperation.navigate = navigate;
18
+ }
19
+
20
+ private static resolveTarget(target?: LinkTarget): LinkTarget
21
+ {
22
+ if (target)
23
+ return target;
24
+ if (KeyOperation.isShiftPressed())
25
+ return LinkTarget.Window;
26
+ if (KeyOperation.isControlPressed() || KeyOperation.isMetaPressed())
27
+ return LinkTarget.Blank;
28
+ return LinkTarget.Self;
29
+ }
30
+
31
+ private static isExternal(url: string): boolean
32
+ {
33
+ return /^[a-z][a-z0-9+.-]*:/i.test(url) || url.startsWith("//");
34
+ }
35
+
36
+ static open(url: string, target?: LinkTarget, options?: NavigateOptions): void
37
+ {
38
+ const resolved = LinkOperation.resolveTarget(target);
39
+ if (resolved === LinkTarget.Blank)
40
+ {
41
+ LinkOperation.openBlank(url);
42
+ return;
43
+ }
44
+ if (resolved === LinkTarget.Window)
45
+ {
46
+ LinkOperation.openWindow(url);
47
+ return;
48
+ }
49
+ if (LinkOperation.isExternal(url) || !LinkOperation.navigate)
50
+ {
51
+ window.location.href = url;
52
+ return;
53
+ }
54
+ LinkOperation.navigate(url, options);
55
+ }
56
+
57
+ static openBlank(url: string): void
58
+ {
59
+ if (typeof window === "undefined")
60
+ return;
61
+ window.open(url, "_blank", "noopener,noreferrer");
62
+ }
63
+
64
+ static openWindow(url: string): void
65
+ {
66
+ if (typeof window === "undefined")
67
+ return;
68
+ window.open(url, "_blank", "noopener,noreferrer,popup");
69
+ }
70
+
71
+ static openSelf(url: string, options?: NavigateOptions): void
72
+ {
73
+ LinkOperation.open(url, LinkTarget.Self, options);
74
+ }
75
+
76
+ static replace(url: string, options?: NavigateOptions): void
77
+ {
78
+ LinkOperation.open(url, LinkTarget.Self, { ...options, replace: true });
79
+ }
80
+
81
+ static back(): void
82
+ {
83
+ if (LinkOperation.navigate)
84
+ LinkOperation.navigate(-1);
85
+ else if (typeof window !== "undefined")
86
+ window.history.back();
87
+ }
88
+
89
+ static forward(): void
90
+ {
91
+ if (LinkOperation.navigate)
92
+ LinkOperation.navigate(1);
93
+ else if (typeof window !== "undefined")
94
+ window.history.forward();
95
+ }
96
+
97
+ static reload(): void
98
+ {
99
+ if (typeof window !== "undefined")
100
+ window.location.reload();
101
+ }
102
102
  }