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
package/src/App.tsx CHANGED
@@ -1,168 +1,177 @@
1
- import 'bootstrap/dist/css/bootstrap.min.css';
2
- import { Component, createRef } from 'react';
3
- import './App.css';
4
- import { NSLayout } from './components/NSLayout';
5
- import { PercentFormatter } from './formatter/PercentFormatter';
6
- import { DateTimeFormatter, EmailFormatter, IntegerFormatter, KeyOperation, NSButtonBlue, NSTable, PhoneFormatter, StringFormatter } from './main';
7
-
8
- type TestRow = {
9
- id: string,
10
- name: string,
11
- city: string,
12
- department: string,
13
- age: number,
14
- salary: number,
15
- score: number,
16
- experience: number,
17
- percentage: number,
18
- phone: string,
19
- email: string,
20
- created_at: string,
21
- };
22
-
23
- const FIRST_NAMES = ["Amin", "Negar", "Milad", "Sara", "Reza", "Maryam", "Ali", "Fatemeh", "Hossein", "Zahra", "Mohammad", "Narges", "Saeed", "Leila", "Hamed"];
24
- const LAST_NAMES = ["Pasban", "Sharifpour", "Nazirzadeh", "Ahmadi", "Karimi", "Hosseini", "Rezaei", "Moradi", "Jafari", "Bagheri", "Salehi", "Ghasemi", "Akbari", "Mousavi", "Tavakoli"];
25
- const CITIES = ["Tehran", "Shiraz", "Tabriz", "Isfahan", "Mashhad"];
26
- const DEPARTMENTS = ["Engineering", "Sales", "Marketing", "Support", "Finance"];
27
-
28
- const ALL_ROWS: TestRow[] = Array.from({ length: 45 }, (_, i) =>
29
- {
30
- const n = i + 1;
31
- return {
32
- id: n.toString(),
33
- name: `${FIRST_NAMES[i % FIRST_NAMES.length]} ${LAST_NAMES[(i * 7) % LAST_NAMES.length]}`,
34
- city: CITIES[i % CITIES.length],
35
- department: DEPARTMENTS[(i * 3) % DEPARTMENTS.length],
36
- age: 22 + (i * 5) % 35,
37
- salary: 30000 + (i * 1700) % 90000,
38
- score: 40 + (i * 11) % 60,
39
- experience: (i * 2) % 20,
40
- percentage: 10 + (i * 13) % 80,
41
- phone: "0912" + (1000000 + i).toString(),
42
- email: `${FIRST_NAMES[i % FIRST_NAMES.length].toLowerCase()}.${n}@example.com`,
43
- created_at: new Date(Date.now() - i * 86400000 - i * 3600000).toISOString()
44
- };
45
- });
46
-
47
- interface AppProps { }
48
- interface AppState { }
49
-
50
- export class App extends Component<AppProps, AppState>
51
- {
52
- NSTableRef = createRef<NSTable<TestRow>>();
53
-
54
- constructor(props: AppProps)
55
- {
56
- super(props);
57
- this.state = {}
58
- };
59
-
60
- override componentDidMount(): void
61
- {
62
- KeyOperation.start();
63
- }
64
-
65
- override componentWillUnmount(): void
66
- {
67
- KeyOperation.stop();
68
- }
69
-
70
- override render()
71
- {
72
- return (
73
- <NSLayout
74
- header={{
75
- right: {
76
- icons: [
77
- {
78
- onClicked: () => { },
79
- src: "https://static.namirasoft.com/image/namirasoft/access/logo/base.png",
80
- count: 2
81
- }
82
- ],
83
- },
84
- mega_menu: true,
85
- onCollapse: () => { },
86
- }}
87
- isLoggedIn={() => true}
88
- logo='https://static.namirasoft.com/image/namirasoft/access/logo/base.png'
89
- background={{ image: "https://static.namirasoft.com/image/namirasoft/access/background/base.svg" }}
90
- notifications={[]}
91
- notifier={{} as any}
92
- scope=''
93
- >
94
- <NSTable<TestRow>
95
- ref={this.NSTableRef}
96
- name={"test_table"}
97
- checkbox
98
- columns={[
99
- {
100
- table: { name: "test_table", text: "Test Table" },
101
- index: 0, type: "String", name: "name", text: "Name", formatter: new StringFormatter()
102
- },
103
- {
104
- table: { name: "test_table", text: "Test Table" },
105
- index: 1, type: "String", name: "city", text: "City", formatter: new StringFormatter()
106
- },
107
- {
108
- table: { name: "test_table", text: "Test Table" },
109
- index: 2, type: "String", name: "department", text: "Department", formatter: new StringFormatter()
110
- },
111
- {
112
- table: { name: "test_table", text: "Test Table" },
113
- index: 3, type: "Number", name: "age", text: "Age", formatter: new IntegerFormatter()
114
- },
115
- {
116
- table: { name: "test_table", text: "Test Table" },
117
- index: 4, type: "Number", name: "salary", text: "Salary", formatter: new IntegerFormatter()
118
- },
119
- {
120
- table: { name: "test_table", text: "Test Table" },
121
- index: 5, type: "Number", name: "score", text: "Score", formatter: new IntegerFormatter()
122
- },
123
- {
124
- table: { name: "test_table", text: "Test Table" },
125
- index: 6, type: "Number", name: "experience", text: "Experience", formatter: new IntegerFormatter()
126
- },
127
- {
128
- table: { name: "test_table", text: "Test Table" },
129
- index: 7, type: "Number", name: "percentage", text: "Percentage", formatter: new PercentFormatter()
130
- },
131
- {
132
- table: { name: "test_table", text: "Test Table" },
133
- index: 8, type: "String", name: "phone", text: "Phone", formatter: new PhoneFormatter()
134
- },
135
- {
136
- table: { name: "test_table", text: "Test Table" },
137
- index: 9, type: "String", name: "email", text: "Email", formatter: new EmailFormatter()
138
- },
139
- {
140
- table: { name: "test_table", text: "Test Table" },
141
- index: 10, type: "DateTime", name: "created_at", text: "Created At", formatter: new DateTimeFormatter()
142
- },
143
- ]}
144
- getRowKey={(item) => item.value.id}
145
- getRows={async (page, size) =>
146
- {
147
- const start = (page - 1) * size;
148
- return {
149
- count: ALL_ROWS.length,
150
- rows: ALL_ROWS.slice(start, start + size)
151
- };
152
- }}
153
- getRowCheckboxDisabled={row => row.value.percentage < 20}
154
- />
155
- <NSButtonBlue
156
- title={"Log"}
157
- onClick={{
158
- showLoading: false,
159
- action: () =>
160
- {
161
- console.log(KeyOperation.isControlPressed());
162
- }
163
- }}
164
- />
165
- </NSLayout>
166
- );
167
- }
1
+ import 'bootstrap/dist/css/bootstrap.min.css';
2
+ import { TimeOperation } from 'namirasoft-core';
3
+ import { Component, createRef } from 'react';
4
+ import './App.css';
5
+ import { NSLayout } from './components/NSLayout';
6
+ import { DateTimeFormatter, IntegerFormatter, JsonFormatter, NSBoxCombo, NSBoxDate, NSBoxDateTime, NSButtonBlue, NSColumn, NSTable, PhoneFormatter, SensitiveFormatter, StringFormatter } from './main';
7
+
8
+ type TableRow = {
9
+ id: string,
10
+ parent_id?: string,
11
+ name: string,
12
+ age: number,
13
+ experience: number,
14
+ salary: number,
15
+ city: string,
16
+ phone: string,
17
+ json?: string,
18
+ national_code: string,
19
+ created_at: string,
20
+ };
21
+
22
+ interface AppProps { }
23
+ interface AppState { }
24
+
25
+ export class App extends Component<AppProps, AppState>
26
+ {
27
+ private NSTableRef = createRef<NSTable<TableRow>>();
28
+ private NSBoxDateRef = createRef<NSBoxDate>();
29
+ private NSBoxDateTimeRef = createRef<NSBoxDateTime>();
30
+
31
+ constructor(props: AppProps)
32
+ {
33
+ super(props);
34
+ this.state = {}
35
+ };
36
+
37
+ override render()
38
+ {
39
+ return (
40
+ <NSLayout
41
+ header={{
42
+ right: {
43
+ icons: [
44
+ {
45
+ onClicked: () => { },
46
+ src: "https://static.namirasoft.com/image/namirasoft/access/logo/base.png",
47
+ count: 2
48
+ }
49
+ ],
50
+ },
51
+ mega_menu: true,
52
+ onCollapse: () => { },
53
+ }}
54
+ isLoggedIn={() => true}
55
+ logo='https://static.namirasoft.com/image/namirasoft/access/logo/base.png'
56
+ background={{ image: "https://static.namirasoft.com/image/namirasoft/access/background/base.svg" }}
57
+ notifications={[]}
58
+ notifier={{} as any}
59
+ scope=''
60
+ >
61
+ <NSTable<TableRow>
62
+ ref={this.NSTableRef}
63
+ name={"table"}
64
+ checkbox
65
+ columns={[
66
+ {
67
+ table: { name: "table", text: "Table" },
68
+ index: 0, type: "String", name: "id", text: "ID", formatter: new StringFormatter()
69
+ },
70
+ {
71
+ table: { name: "table", text: "Table" },
72
+ index: 1, type: "String", name: "name", text: "Name", formatter: new StringFormatter()
73
+ },
74
+ {
75
+ table: { name: "table", text: "Table" },
76
+ index: 2, type: "Number", name: "age", text: "Age", formatter: new IntegerFormatter()
77
+ },
78
+ {
79
+ table: { name: "table", text: "Table" },
80
+ index: 3, type: "Number", name: "experience", text: "Experience", formatter: new IntegerFormatter()
81
+ },
82
+ {
83
+ table: { name: "table", text: "Table" },
84
+ index: 4, type: "Number", name: "salary", text: "Salary", formatter: new IntegerFormatter()
85
+ },
86
+ {
87
+ table: { name: "table", text: "Table" },
88
+ index: 5, type: "String", name: "city", text: "City", formatter: new StringFormatter()
89
+ },
90
+ {
91
+ table: { name: "table", text: "Table" },
92
+ index: 6, type: "String", name: "phone", text: "Phone", formatter: new PhoneFormatter()
93
+ },
94
+ {
95
+ table: { name: "table", text: "Table" },
96
+ index: 7, type: "String", name: "national_code", text: "National Code", formatter: new SensitiveFormatter<TableRow>(
97
+ async (value) =>
98
+ {
99
+ await new Promise(resolve => setTimeout(resolve, 1000));
100
+ return value;
101
+ },
102
+ () => true
103
+ )
104
+ },
105
+ {
106
+ table: { name: "table", text: "Table" },
107
+ index: 8, type: "DateTime", name: "created_at", text: "Created At", formatter: new DateTimeFormatter()
108
+ },
109
+ {
110
+ table: { name: "table", text: "Table" },
111
+ index: 9, type: "String", name: "json", text: "Json", formatter: new JsonFormatter()
112
+ },
113
+ ]}
114
+ getRowKey={(item) => item.value.id}
115
+ getRows={async () => ({
116
+ count: 5,
117
+ rows: [
118
+ { id: "a1", name: "Amin Pasban", age: 28, experience: 6, salary: 12000, city: "Rasht", phone: "09117579093", national_code: "2670000001", json: JSON.stringify({ role: "Developer", skills: ["React", "TypeScript"], active: true, projects: { count: 3, latest: "Site Package" } }), created_at: TimeOperation.daysAgo(1, new Date()).toDateString() },
119
+ { id: "c3", name: "Negar Sharifpour", age: 28, experience: 2, salary: 9000, city: "Rasht", phone: "09117579092", national_code: "2670000002", created_at: TimeOperation.daysAgo(2, new Date()).toDateString() },
120
+ { id: "b2", name: "Milad Nazirzadeh", age: 28, experience: 6, salary: 18000, city: "Tehran", phone: "09127576063", national_code: "0070000003", created_at: TimeOperation.daysAgo(10, new Date()).toDateString() },
121
+ { id: "d4", name: "Mohammad Nazirzadeh", age: 29, experience: 4, salary: 8000, city: "Tehran", phone: "09127576063", national_code: "0070000004", created_at: TimeOperation.daysAgo(20, new Date()).toDateString() },
122
+ { id: "e5", name: "Hadiseh Pasban", age: 22, experience: 3, salary: 9500, city: "Rasht", phone: "09116463032", national_code: "2670000005", created_at: TimeOperation.daysAgo(100, new Date()).toDateString() },
123
+ ]
124
+ })}
125
+ ui={{
126
+ pagination: false,
127
+ }}
128
+ />
129
+ <NSColumn style={{ marginTop: "1.5rem", alignItems: "center" }}>
130
+ <NSBoxCombo
131
+ title='Combo'
132
+ required={true}
133
+ multiple={false}
134
+ getOptions={() => [
135
+ { title: "Option 9 Option 9 Option 9 Option 9 Option 9 Option 9", value: "options9" },
136
+ { title: "Option 8", value: "options8" },
137
+ { title: "Option 7", value: "options7" },
138
+ { title: "Option 6", value: "options6" },
139
+ { title: "Option 5", value: "options5" },
140
+ { title: "Option 4", value: "options4" },
141
+ { title: "Option 3", value: "options3" },
142
+ { title: "Option 2", value: "options2" },
143
+ { title: "Option 1", value: "options1" },
144
+ ]}
145
+ />
146
+ <NSBoxCombo
147
+ title='Combo'
148
+ required={true}
149
+ multiple={true}
150
+ getOptions={() => [
151
+ { title: "Option 9", value: "options9" },
152
+ { title: "Option 8", value: "options8" },
153
+ { title: "Option 7", value: "options7" },
154
+ { title: "Option 6", value: "options6" },
155
+ { title: "Option 5", value: "options5" },
156
+ { title: "Option 4", value: "options4" },
157
+ { title: "Option 3", value: "options3" },
158
+ { title: "Option 2", value: "options2" },
159
+ { title: "Option 1", value: "options1" },
160
+ ]}
161
+ />
162
+ <NSButtonBlue
163
+ title={"Log"}
164
+ onClick={{
165
+ showLoading: false,
166
+ action: () =>
167
+ {
168
+ console.log("Date:", this.NSBoxDateRef.current?.getValueString(false));
169
+ console.log("DateTime:", this.NSBoxDateTimeRef.current?.getValueString(false));
170
+ }
171
+ }}
172
+ />
173
+ </NSColumn>
174
+ </NSLayout>
175
+ );
176
+ }
168
177
  }
@@ -1,110 +1,110 @@
1
- export enum Browser
2
- {
3
- Chrome = "Chrome",
4
- Edge = "Edge",
5
- Brave = "Brave",
6
- Opera = "Opera",
7
- Samsung = "Samsung",
8
- Firefox = "Firefox",
9
- Safari = "Safari",
10
- Unknown = "Unknown",
11
- }
12
-
13
- interface UserAgentBrand
14
- {
15
- brand: string;
16
- version: string;
17
- }
18
-
19
- interface UserAgentData
20
- {
21
- brands: UserAgentBrand[];
22
- mobile: boolean;
23
- platform: string;
24
- }
25
-
26
- export class BrowserDetector
27
- {
28
- private static cached?: Browser;
29
-
30
- private static get userAgentData(): UserAgentData | undefined
31
- {
32
- if (typeof navigator === "undefined")
33
- return undefined;
34
- return (navigator as any).userAgentData as UserAgentData | undefined;
35
- }
36
-
37
- private static getUserAgent(): string
38
- {
39
- if (typeof navigator === "undefined")
40
- return "";
41
- return navigator.userAgent;
42
- }
43
-
44
- private static isBrave(): boolean
45
- {
46
- return typeof navigator !== "undefined" && (navigator as any).brave !== undefined;
47
- }
48
-
49
- private static detectFromBrands(brands: UserAgentBrand[]): Browser | undefined
50
- {
51
- const names = brands.map(entry => entry.brand.toLowerCase());
52
- const has = (value: string): boolean => names.some(name => name.includes(value));
53
-
54
- if (BrowserDetector.isBrave())
55
- return Browser.Brave;
56
- if (has("microsoft edge"))
57
- return Browser.Edge;
58
- if (has("opera"))
59
- return Browser.Opera;
60
- if (has("samsung"))
61
- return Browser.Samsung;
62
- if (has("google chrome") || has("chromium"))
63
- return Browser.Chrome;
64
-
65
- return undefined;
66
- }
67
-
68
- private static detectFromUserAgent(): Browser
69
- {
70
- const ua = BrowserDetector.getUserAgent();
71
-
72
- if (BrowserDetector.isBrave())
73
- return Browser.Brave;
74
- if (ua.includes("Edg/"))
75
- return Browser.Edge;
76
- if (ua.includes("OPR/") || ua.includes("Opera/"))
77
- return Browser.Opera;
78
- if (ua.includes("SamsungBrowser/"))
79
- return Browser.Samsung;
80
- if (ua.includes("Firefox/"))
81
- return Browser.Firefox;
82
- if (ua.includes("Chrome/"))
83
- return Browser.Chrome;
84
- if (ua.includes("Safari/"))
85
- return Browser.Safari;
86
-
87
- return Browser.Unknown;
88
- }
89
-
90
- static detect(): Browser
91
- {
92
- if (BrowserDetector.cached)
93
- return BrowserDetector.cached;
94
-
95
- const data = BrowserDetector.userAgentData;
96
- const detected = data ? BrowserDetector.detectFromBrands(data.brands) : undefined;
97
- BrowserDetector.cached = detected ?? BrowserDetector.detectFromUserAgent();
98
- return BrowserDetector.cached;
99
- }
100
-
101
- static is(browser: Browser): boolean
102
- {
103
- return BrowserDetector.detect() === browser;
104
- }
105
-
106
- static reset(): void
107
- {
108
- BrowserDetector.cached = undefined;
109
- }
1
+ export enum Browser
2
+ {
3
+ Chrome = "Chrome",
4
+ Edge = "Edge",
5
+ Brave = "Brave",
6
+ Opera = "Opera",
7
+ Samsung = "Samsung",
8
+ Firefox = "Firefox",
9
+ Safari = "Safari",
10
+ Unknown = "Unknown",
11
+ }
12
+
13
+ interface UserAgentBrand
14
+ {
15
+ brand: string;
16
+ version: string;
17
+ }
18
+
19
+ interface UserAgentData
20
+ {
21
+ brands: UserAgentBrand[];
22
+ mobile: boolean;
23
+ platform: string;
24
+ }
25
+
26
+ export class BrowserDetector
27
+ {
28
+ private static cached?: Browser;
29
+
30
+ private static get userAgentData(): UserAgentData | undefined
31
+ {
32
+ if (typeof navigator === "undefined")
33
+ return undefined;
34
+ return (navigator as any).userAgentData as UserAgentData | undefined;
35
+ }
36
+
37
+ private static getUserAgent(): string
38
+ {
39
+ if (typeof navigator === "undefined")
40
+ return "";
41
+ return navigator.userAgent;
42
+ }
43
+
44
+ private static isBrave(): boolean
45
+ {
46
+ return typeof navigator !== "undefined" && (navigator as any).brave !== undefined;
47
+ }
48
+
49
+ private static detectFromBrands(brands: UserAgentBrand[]): Browser | undefined
50
+ {
51
+ const names = brands.map(entry => entry.brand.toLowerCase());
52
+ const has = (value: string): boolean => names.some(name => name.includes(value));
53
+
54
+ if (BrowserDetector.isBrave())
55
+ return Browser.Brave;
56
+ if (has("microsoft edge"))
57
+ return Browser.Edge;
58
+ if (has("opera"))
59
+ return Browser.Opera;
60
+ if (has("samsung"))
61
+ return Browser.Samsung;
62
+ if (has("google chrome") || has("chromium"))
63
+ return Browser.Chrome;
64
+
65
+ return undefined;
66
+ }
67
+
68
+ private static detectFromUserAgent(): Browser
69
+ {
70
+ const ua = BrowserDetector.getUserAgent();
71
+
72
+ if (BrowserDetector.isBrave())
73
+ return Browser.Brave;
74
+ if (ua.includes("Edg/"))
75
+ return Browser.Edge;
76
+ if (ua.includes("OPR/") || ua.includes("Opera/"))
77
+ return Browser.Opera;
78
+ if (ua.includes("SamsungBrowser/"))
79
+ return Browser.Samsung;
80
+ if (ua.includes("Firefox/"))
81
+ return Browser.Firefox;
82
+ if (ua.includes("Chrome/"))
83
+ return Browser.Chrome;
84
+ if (ua.includes("Safari/"))
85
+ return Browser.Safari;
86
+
87
+ return Browser.Unknown;
88
+ }
89
+
90
+ static detect(): Browser
91
+ {
92
+ if (BrowserDetector.cached)
93
+ return BrowserDetector.cached;
94
+
95
+ const data = BrowserDetector.userAgentData;
96
+ const detected = data ? BrowserDetector.detectFromBrands(data.brands) : undefined;
97
+ BrowserDetector.cached = detected ?? BrowserDetector.detectFromUserAgent();
98
+ return BrowserDetector.cached;
99
+ }
100
+
101
+ static is(browser: Browser): boolean
102
+ {
103
+ return BrowserDetector.detect() === browser;
104
+ }
105
+
106
+ static reset(): void
107
+ {
108
+ BrowserDetector.cached = undefined;
109
+ }
110
110
  }
package/src/Color.tsx CHANGED
@@ -1,11 +1,11 @@
1
- export class Color
2
- {
3
- static getColor(percentage: number): string
4
- {
5
- if (percentage >= 75) return '#368F01';
6
- if (percentage >= 60) return ' #44B400';
7
- if (percentage >= 50) return '#56E500';
8
- if (percentage >= 25) return '#FAFF00';
9
- return 'red';
10
- }
1
+ export class Color
2
+ {
3
+ static getColor(percentage: number): string
4
+ {
5
+ if (percentage >= 75) return '#368F01';
6
+ if (percentage >= 60) return ' #44B400';
7
+ if (percentage >= 50) return '#56E500';
8
+ if (percentage >= 25) return '#FAFF00';
9
+ return 'red';
10
+ }
11
11
  }
@@ -1,7 +1,7 @@
1
- export class CopyToClipboard
2
- {
3
- static copyToClipboard(value: string): void
4
- {
5
- navigator.clipboard.writeText(value);
6
- }
1
+ export class CopyToClipboard
2
+ {
3
+ static copyToClipboard(value: string): void
4
+ {
5
+ navigator.clipboard.writeText(value);
6
+ }
7
7
  };