namirasoft-site-react 1.5.13 → 1.5.15

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 (492) 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 +1 -1
  8. package/dist/NSBoxBuilder.d.ts +25 -25
  9. package/dist/components/NSBanner.d.ts +1 -1
  10. package/dist/components/NSBanner.module.css +47 -47
  11. package/dist/components/NSBarAction.d.ts +1 -1
  12. package/dist/components/NSBarAction.module.css +91 -91
  13. package/dist/components/NSBarAlert.d.ts +1 -1
  14. package/dist/components/NSBarAlert.module.css +79 -79
  15. package/dist/components/NSBarNotification.d.ts +1 -1
  16. package/dist/components/NSBarNotification.module.css +34 -34
  17. package/dist/components/NSBarTitle.d.ts +1 -1
  18. package/dist/components/NSBarTitle.module.css +9 -9
  19. package/dist/components/NSBox.module.css +87 -87
  20. package/dist/components/NSBoxBaseCombo.d.ts +2 -2
  21. package/dist/components/NSBoxBaseCombo.js +3 -3
  22. package/dist/components/NSBoxBaseCombo.js.map +1 -1
  23. package/dist/components/NSBoxBaseCombo.module.css +6 -6
  24. package/dist/components/NSBoxBaseLayout.d.ts +1 -1
  25. package/dist/components/NSBoxBaseLayoutRecursive.d.ts +1 -1
  26. package/dist/components/NSBoxBoolean.d.ts +1 -1
  27. package/dist/components/NSBoxBoolean.module.css +73 -73
  28. package/dist/components/NSBoxBooleans.d.ts +1 -1
  29. package/dist/components/NSBoxColor.d.ts +1 -1
  30. package/dist/components/NSBoxCombo.d.ts +1 -1
  31. package/dist/components/NSBoxDate.d.ts +1 -1
  32. package/dist/components/NSBoxDate.module.css +4 -4
  33. package/dist/components/NSBoxDateRange.d.ts +1 -1
  34. package/dist/components/NSBoxDateRangeBase.d.ts +1 -1
  35. package/dist/components/NSBoxDateRangeBase.module.css +73 -73
  36. package/dist/components/NSBoxDateTime.d.ts +1 -1
  37. package/dist/components/NSBoxDateTime.module.css +4 -4
  38. package/dist/components/NSBoxDateTimeRange.d.ts +1 -1
  39. package/dist/components/NSBoxDouble.d.ts +1 -1
  40. package/dist/components/NSBoxDuration.d.ts +1 -1
  41. package/dist/components/NSBoxDuration.module.css +4 -4
  42. package/dist/components/NSBoxDynamic.d.ts +1 -1
  43. package/dist/components/NSBoxDynamics.d.ts +1 -1
  44. package/dist/components/NSBoxEmail.d.ts +1 -1
  45. package/dist/components/NSBoxEntity.d.ts +6 -6
  46. package/dist/components/NSBoxEntity.js +4 -4
  47. package/dist/components/NSBoxEntity.js.map +1 -1
  48. package/dist/components/NSBoxEnum.d.ts +1 -1
  49. package/dist/components/NSBoxFile.d.ts +1 -1
  50. package/dist/components/NSBoxFile.module.css +10 -10
  51. package/dist/components/NSBoxFilePath.d.ts +1 -1
  52. package/dist/components/NSBoxFont.d.ts +1 -1
  53. package/dist/components/NSBoxIPV4.d.ts +1 -1
  54. package/dist/components/NSBoxIPV4Range.d.ts +1 -1
  55. package/dist/components/NSBoxIPV6.d.ts +1 -1
  56. package/dist/components/NSBoxIPV6Range.d.ts +1 -1
  57. package/dist/components/NSBoxInteger.d.ts +1 -1
  58. package/dist/components/NSBoxInteger.module.css +16 -16
  59. package/dist/components/NSBoxMoney.d.ts +1 -1
  60. package/dist/components/NSBoxOptions.d.ts +1 -1
  61. package/dist/components/NSBoxOptions.module.css +53 -53
  62. package/dist/components/NSBoxPhone.d.ts +1 -1
  63. package/dist/components/NSBoxPhone.module.css +35 -35
  64. package/dist/components/NSBoxRadio.d.ts +1 -1
  65. package/dist/components/NSBoxRadio.module.css +33 -33
  66. package/dist/components/NSBoxSchemaBase.d.ts +1 -1
  67. package/dist/components/NSBoxSchemaBase.module.css +17 -17
  68. package/dist/components/NSBoxSchemaVariable.d.ts +1 -1
  69. package/dist/components/NSBoxSchemaVariable.module.css +16 -16
  70. package/dist/components/NSBoxSearch.d.ts +1 -1
  71. package/dist/components/NSBoxSensitive.d.ts +1 -1
  72. package/dist/components/NSBoxString.d.ts +1 -1
  73. package/dist/components/NSBoxTextArea.d.ts +1 -1
  74. package/dist/components/NSBoxTextArea.module.css +12 -12
  75. package/dist/components/NSBoxTime.d.ts +1 -1
  76. package/dist/components/NSBoxTime.module.css +4 -4
  77. package/dist/components/NSBoxTimeRange.d.ts +1 -1
  78. package/dist/components/NSBoxTimeZone.d.ts +1 -1
  79. package/dist/components/NSBoxURL.d.ts +1 -1
  80. package/dist/components/NSBoxVersion.d.ts +1 -1
  81. package/dist/components/NSButton.module.css +57 -57
  82. package/dist/components/NSButtonBlue.d.ts +1 -1
  83. package/dist/components/NSButtonBlue.module.css +4 -4
  84. package/dist/components/NSButtonGreen.d.ts +1 -1
  85. package/dist/components/NSButtonGreen.module.css +4 -4
  86. package/dist/components/NSButtonRed.d.ts +1 -1
  87. package/dist/components/NSButtonRed.module.css +4 -4
  88. package/dist/components/NSCard.d.ts +1 -1
  89. package/dist/components/NSCard.module.css +113 -113
  90. package/dist/components/NSCardScreenshot.d.ts +1 -1
  91. package/dist/components/NSCardScreenshot.module.css +41 -41
  92. package/dist/components/NSChartBar.d.ts +1 -1
  93. package/dist/components/NSChartDoughnut.d.ts +1 -1
  94. package/dist/components/NSChartLine.d.ts +1 -1
  95. package/dist/components/NSChartPie.d.ts +1 -1
  96. package/dist/components/NSChartRange.d.ts +1 -1
  97. package/dist/components/NSColumn.d.ts +1 -1
  98. package/dist/components/NSColumn.module.css +16 -16
  99. package/dist/components/NSCopy.d.ts +1 -1
  100. package/dist/components/NSCopyBox.d.ts +1 -1
  101. package/dist/components/NSCopyBox.module.css +39 -39
  102. package/dist/components/NSDialog.d.ts +1 -1
  103. package/dist/components/NSDialog.module.css +105 -105
  104. package/dist/components/NSDialogBox.d.ts +1 -1
  105. package/dist/components/NSDialogBoxDate.d.ts +1 -1
  106. package/dist/components/NSDialogBoxDateTime.d.ts +1 -1
  107. package/dist/components/NSDialogBoxPhone.d.ts +1 -1
  108. package/dist/components/NSDialogBoxString.d.ts +1 -1
  109. package/dist/components/NSDialogDelete.d.ts +1 -1
  110. package/dist/components/NSDialogInfo.d.ts +1 -1
  111. package/dist/components/NSDialogPageSelection.d.ts +2 -2
  112. package/dist/components/NSDialogPageSelection.module.css +103 -103
  113. package/dist/components/NSDownTimer.d.ts +1 -1
  114. package/dist/components/NSDownTimer.module.css +55 -55
  115. package/dist/components/NSDownload.d.ts +1 -1
  116. package/dist/components/NSDownload.module.css +46 -46
  117. package/dist/components/NSElectronicCard.d.ts +1 -1
  118. package/dist/components/NSElectronicCard.module.css +60 -60
  119. package/dist/components/NSEntityCardBackground.d.ts +1 -1
  120. package/dist/components/NSEntityCardBackground.module.css +27 -27
  121. package/dist/components/NSFilterBox.d.ts +2 -2
  122. package/dist/components/NSFilterBox.module.css +27 -27
  123. package/dist/components/NSFilterBoxItems.d.ts +1 -1
  124. package/dist/components/NSFilterBoxItems.module.css +15 -15
  125. package/dist/components/NSFilterItem.d.ts +1 -1
  126. package/dist/components/NSFilterItem.module.css +24 -24
  127. package/dist/components/NSFooter.d.ts +1 -1
  128. package/dist/components/NSFooter.module.css +140 -140
  129. package/dist/components/NSGauge.d.ts +1 -1
  130. package/dist/components/NSGauge.module.css +67 -67
  131. package/dist/components/NSGaugeDate.d.ts +1 -1
  132. package/dist/components/NSGaugeDate.module.css +57 -57
  133. package/dist/components/NSGaugeNumber.d.ts +1 -1
  134. package/dist/components/NSGaugeNumber.js.map +1 -1
  135. package/dist/components/NSGaugeNumber.module.css +66 -66
  136. package/dist/components/NSHeader.d.ts +1 -1
  137. package/dist/components/NSHeader.module.css +316 -316
  138. package/dist/components/NSHeaderScreenshot.d.ts +1 -1
  139. package/dist/components/NSHeaderScreenshot.module.css +35 -35
  140. package/dist/components/NSID.d.ts +1 -1
  141. package/dist/components/NSInfo.d.ts +1 -1
  142. package/dist/components/NSLabel.d.ts +1 -1
  143. package/dist/components/NSLabel.module.css +25 -25
  144. package/dist/components/NSLabelErrorNotifier.d.ts +1 -1
  145. package/dist/components/NSLabelErrorNotifier.module.css +2 -2
  146. package/dist/components/NSLabelSensitive.d.ts +1 -1
  147. package/dist/components/NSLabelSensitive.module.css +9 -9
  148. package/dist/components/NSLayout.d.ts +1 -1
  149. package/dist/components/NSLayout.module.css +22 -22
  150. package/dist/components/NSLine.d.ts +1 -1
  151. package/dist/components/NSLine.module.css +15 -15
  152. package/dist/components/NSLineText.d.ts +1 -1
  153. package/dist/components/NSLineText.module.css +38 -38
  154. package/dist/components/NSLink.d.ts +1 -1
  155. package/dist/components/NSLink.module.css +36 -36
  156. package/dist/components/NSLinkBlue.d.ts +1 -1
  157. package/dist/components/NSLinkGreen.d.ts +1 -1
  158. package/dist/components/NSLinkRed.d.ts +1 -1
  159. package/dist/components/NSListGrouped.d.ts +1 -1
  160. package/dist/components/NSListGrouped.js +1 -1
  161. package/dist/components/NSListGrouped.js.map +1 -1
  162. package/dist/components/NSListGrouped.module.css +69 -69
  163. package/dist/components/NSListMenu.d.ts +1 -1
  164. package/dist/components/NSListProduct.d.ts +1 -1
  165. package/dist/components/NSLoading.d.ts +1 -1
  166. package/dist/components/NSLoading.module.css +10 -10
  167. package/dist/components/NSMegaMenu.d.ts +1 -1
  168. package/dist/components/NSMegaMenu.module.css +133 -133
  169. package/dist/components/NSMenuAction.d.ts +1 -1
  170. package/dist/components/NSMenuAction.module.css +88 -88
  171. package/dist/components/NSMenuButton.d.ts +1 -1
  172. package/dist/components/NSMenuButton.module.css +44 -44
  173. package/dist/components/NSNoData.d.ts +1 -1
  174. package/dist/components/NSNoData.module.css +11 -11
  175. package/dist/components/NSPagination.d.ts +1 -1
  176. package/dist/components/NSPagination.module.css +87 -87
  177. package/dist/components/NSPanel.d.ts +1 -1
  178. package/dist/components/NSPanel.module.css +28 -28
  179. package/dist/components/NSPanelAccordion.d.ts +1 -1
  180. package/dist/components/NSPanelAccordion.module.css +4 -4
  181. package/dist/components/NSProductSearch.d.ts +1 -1
  182. package/dist/components/NSProductSearch.module.css +73 -73
  183. package/dist/components/NSProgressBar.d.ts +1 -1
  184. package/dist/components/NSProgressBar.module.css +38 -38
  185. package/dist/components/NSRange.d.ts +1 -1
  186. package/dist/components/NSRange.module.css +66 -66
  187. package/dist/components/NSReorderDialog.d.ts +1 -1
  188. package/dist/components/NSReorderDialog.module.css +49 -49
  189. package/dist/components/NSRepeater.d.ts +1 -1
  190. package/dist/components/NSRepeaterNSBoxSchemaVariable.d.ts +1 -1
  191. package/dist/components/NSRepeaterNSTag.d.ts +1 -1
  192. package/dist/components/NSRow.d.ts +1 -1
  193. package/dist/components/NSRow.module.css +17 -17
  194. package/dist/components/NSSection.d.ts +1 -1
  195. package/dist/components/NSSection.module.css +4 -4
  196. package/dist/components/NSSectionCards.d.ts +1 -1
  197. package/dist/components/NSSectionCards.module.css +38 -38
  198. package/dist/components/NSSectionTiles.d.ts +1 -1
  199. package/dist/components/NSSectionTiles.module.css +10 -10
  200. package/dist/components/NSSectionTitle.d.ts +1 -1
  201. package/dist/components/NSSortDialog.d.ts +1 -1
  202. package/dist/components/NSSpace.d.ts +1 -1
  203. package/dist/components/NSSplitter.d.ts +1 -1
  204. package/dist/components/NSSplitter.module.css +59 -59
  205. package/dist/components/NSTabPage.d.ts +1 -1
  206. package/dist/components/NSTabPage.module.css +59 -59
  207. package/dist/components/NSTable.d.ts +1 -1
  208. package/dist/components/NSTable.js +1 -1
  209. package/dist/components/NSTable.js.map +1 -1
  210. package/dist/components/NSTable.module.css +372 -372
  211. package/dist/components/NSTableChart.d.ts +1 -1
  212. package/dist/components/NSTableChart.module.css +119 -119
  213. package/dist/components/NSTag.d.ts +1 -1
  214. package/dist/components/NSTile.d.ts +1 -1
  215. package/dist/components/NSTile.module.css +76 -76
  216. package/dist/components/NSTimelineMonthly.d.ts +1 -1
  217. package/dist/components/NSTimelineMonthly.module.css +71 -71
  218. package/dist/components/NSTitle.d.ts +1 -1
  219. package/dist/components/NSTitle.module.css +15 -15
  220. package/dist/formatter/StringFormatter.d.ts +1 -1
  221. package/dist/pages/NSImplementing.d.ts +1 -1
  222. package/dist/pages/NSImplementing.module.css +35 -35
  223. package/dist/pages/NSNotFoundPage.d.ts +1 -1
  224. package/dist/pages/NSNotFoundPage.module.css +18 -18
  225. package/dist/pages/NSUpdating.d.ts +1 -1
  226. package/dist/pages/NSUpdating.module.css +35 -35
  227. package/package.json +86 -86
  228. package/public/index.html +38 -38
  229. package/src/App.css +33 -33
  230. package/src/App.tsx +167 -167
  231. package/src/BrowserDetector.ts +109 -109
  232. package/src/Color.tsx +10 -10
  233. package/src/CopyToClipboard.ts +6 -6
  234. package/src/EncryptionOperation.ts +98 -98
  235. package/src/KeyOperation.ts +109 -109
  236. package/src/LinkOperation.ts +101 -101
  237. package/src/NSBoxBuilder.tsx +922 -922
  238. package/src/ProductCacheService.ts +15 -15
  239. package/src/Validator.ts +199 -199
  240. package/src/components/INSBox.tsx +7 -7
  241. package/src/components/NSBanner.module.css +47 -47
  242. package/src/components/NSBanner.tsx +80 -80
  243. package/src/components/NSBarAction.module.css +91 -91
  244. package/src/components/NSBarAction.tsx +95 -95
  245. package/src/components/NSBarAlert.module.css +79 -79
  246. package/src/components/NSBarAlert.tsx +35 -35
  247. package/src/components/NSBarNotification.module.css +34 -34
  248. package/src/components/NSBarNotification.tsx +89 -89
  249. package/src/components/NSBarTitle.module.css +9 -9
  250. package/src/components/NSBarTitle.tsx +23 -23
  251. package/src/components/NSBox.module.css +87 -87
  252. package/src/components/NSBox.tsx +19 -19
  253. package/src/components/NSBoxBaseCombo.module.css +6 -6
  254. package/src/components/NSBoxBaseCombo.tsx +488 -488
  255. package/src/components/NSBoxBaseLayout.tsx +163 -163
  256. package/src/components/NSBoxBaseLayoutRecursive.tsx +59 -59
  257. package/src/components/NSBoxBoolean.module.css +73 -73
  258. package/src/components/NSBoxBoolean.tsx +152 -152
  259. package/src/components/NSBoxBooleans.tsx +181 -181
  260. package/src/components/NSBoxColor.tsx +107 -107
  261. package/src/components/NSBoxCombo.tsx +95 -95
  262. package/src/components/NSBoxDate.module.css +4 -4
  263. package/src/components/NSBoxDate.tsx +144 -144
  264. package/src/components/NSBoxDateRange.tsx +88 -88
  265. package/src/components/NSBoxDateRangeBase.module.css +73 -73
  266. package/src/components/NSBoxDateRangeBase.tsx +236 -236
  267. package/src/components/NSBoxDateTime.module.css +4 -4
  268. package/src/components/NSBoxDateTime.tsx +136 -136
  269. package/src/components/NSBoxDateTimeRange.tsx +66 -66
  270. package/src/components/NSBoxDouble.tsx +110 -110
  271. package/src/components/NSBoxDuration.module.css +4 -4
  272. package/src/components/NSBoxDuration.tsx +107 -107
  273. package/src/components/NSBoxDynamic.tsx +73 -73
  274. package/src/components/NSBoxDynamics.tsx +68 -68
  275. package/src/components/NSBoxEmail.tsx +117 -117
  276. package/src/components/NSBoxEntity.tsx +181 -181
  277. package/src/components/NSBoxEnum.tsx +113 -113
  278. package/src/components/NSBoxFile.module.css +10 -10
  279. package/src/components/NSBoxFile.tsx +106 -106
  280. package/src/components/NSBoxFilePath.tsx +106 -106
  281. package/src/components/NSBoxFont.tsx +107 -107
  282. package/src/components/NSBoxIPV4.tsx +107 -107
  283. package/src/components/NSBoxIPV4Range.tsx +107 -107
  284. package/src/components/NSBoxIPV6.tsx +104 -104
  285. package/src/components/NSBoxIPV6Range.tsx +107 -107
  286. package/src/components/NSBoxInteger.module.css +16 -16
  287. package/src/components/NSBoxInteger.tsx +126 -126
  288. package/src/components/NSBoxMoney.tsx +115 -115
  289. package/src/components/NSBoxOptions.module.css +53 -53
  290. package/src/components/NSBoxOptions.tsx +182 -182
  291. package/src/components/NSBoxPhone.module.css +35 -35
  292. package/src/components/NSBoxPhone.tsx +120 -120
  293. package/src/components/NSBoxRadio.module.css +33 -33
  294. package/src/components/NSBoxRadio.tsx +104 -104
  295. package/src/components/NSBoxSchemaBase.module.css +17 -17
  296. package/src/components/NSBoxSchemaBase.tsx +562 -562
  297. package/src/components/NSBoxSchemaVariable.module.css +16 -16
  298. package/src/components/NSBoxSchemaVariable.tsx +263 -263
  299. package/src/components/NSBoxSearch.tsx +112 -112
  300. package/src/components/NSBoxSensitive.tsx +133 -133
  301. package/src/components/NSBoxString.tsx +106 -106
  302. package/src/components/NSBoxTextArea.module.css +12 -12
  303. package/src/components/NSBoxTextArea.tsx +136 -136
  304. package/src/components/NSBoxTime.module.css +4 -4
  305. package/src/components/NSBoxTime.tsx +106 -106
  306. package/src/components/NSBoxTimeRange.tsx +220 -220
  307. package/src/components/NSBoxTimeZone.tsx +122 -122
  308. package/src/components/NSBoxURL.tsx +117 -117
  309. package/src/components/NSBoxVersion.tsx +107 -107
  310. package/src/components/NSButton.module.css +57 -57
  311. package/src/components/NSButton.tsx +74 -74
  312. package/src/components/NSButtonBlue.module.css +4 -4
  313. package/src/components/NSButtonBlue.tsx +29 -29
  314. package/src/components/NSButtonGreen.module.css +4 -4
  315. package/src/components/NSButtonGreen.tsx +29 -29
  316. package/src/components/NSButtonRed.module.css +4 -4
  317. package/src/components/NSButtonRed.tsx +29 -29
  318. package/src/components/NSCard.module.css +113 -113
  319. package/src/components/NSCard.tsx +67 -67
  320. package/src/components/NSCardScreenshot.module.css +41 -41
  321. package/src/components/NSCardScreenshot.tsx +31 -31
  322. package/src/components/NSChartBar.tsx +134 -134
  323. package/src/components/NSChartDoughnut.tsx +114 -114
  324. package/src/components/NSChartLine.tsx +110 -110
  325. package/src/components/NSChartPie.tsx +105 -105
  326. package/src/components/NSChartRange.tsx +14 -14
  327. package/src/components/NSColumn.module.css +16 -16
  328. package/src/components/NSColumn.tsx +24 -24
  329. package/src/components/NSCopy.tsx +95 -95
  330. package/src/components/NSCopyBox.module.css +39 -39
  331. package/src/components/NSCopyBox.tsx +53 -53
  332. package/src/components/NSDialog.module.css +105 -105
  333. package/src/components/NSDialog.tsx +72 -72
  334. package/src/components/NSDialogBox.tsx +38 -38
  335. package/src/components/NSDialogBoxDate.tsx +28 -28
  336. package/src/components/NSDialogBoxDateTime.tsx +28 -28
  337. package/src/components/NSDialogBoxPhone.tsx +28 -28
  338. package/src/components/NSDialogBoxString.tsx +28 -28
  339. package/src/components/NSDialogDelete.tsx +36 -36
  340. package/src/components/NSDialogInfo.tsx +49 -49
  341. package/src/components/NSDialogPageSelection.module.css +103 -103
  342. package/src/components/NSDialogPageSelection.tsx +219 -219
  343. package/src/components/NSDownTimer.module.css +55 -55
  344. package/src/components/NSDownTimer.tsx +91 -91
  345. package/src/components/NSDownload.module.css +46 -46
  346. package/src/components/NSDownload.tsx +69 -69
  347. package/src/components/NSElectronicCard.module.css +60 -60
  348. package/src/components/NSElectronicCard.tsx +46 -46
  349. package/src/components/NSEntityCardBackground.module.css +27 -27
  350. package/src/components/NSEntityCardBackground.tsx +36 -36
  351. package/src/components/NSFilterBox.module.css +27 -27
  352. package/src/components/NSFilterBox.tsx +477 -477
  353. package/src/components/NSFilterBoxItems.module.css +15 -15
  354. package/src/components/NSFilterBoxItems.tsx +52 -52
  355. package/src/components/NSFilterItem.module.css +24 -24
  356. package/src/components/NSFilterItem.tsx +27 -27
  357. package/src/components/NSFooter.module.css +140 -140
  358. package/src/components/NSFooter.tsx +321 -321
  359. package/src/components/NSGauge.module.css +67 -67
  360. package/src/components/NSGauge.tsx +52 -52
  361. package/src/components/NSGaugeDate.module.css +57 -57
  362. package/src/components/NSGaugeDate.tsx +125 -125
  363. package/src/components/NSGaugeNumber.module.css +66 -66
  364. package/src/components/NSGaugeNumber.tsx +93 -90
  365. package/src/components/NSHeader.module.css +316 -316
  366. package/src/components/NSHeader.tsx +337 -337
  367. package/src/components/NSHeaderScreenshot.module.css +35 -35
  368. package/src/components/NSHeaderScreenshot.tsx +39 -39
  369. package/src/components/NSID.tsx +188 -188
  370. package/src/components/NSInfo.tsx +50 -50
  371. package/src/components/NSLabel.module.css +25 -25
  372. package/src/components/NSLabel.tsx +47 -47
  373. package/src/components/NSLabelErrorNotifier.module.css +2 -2
  374. package/src/components/NSLabelErrorNotifier.tsx +35 -35
  375. package/src/components/NSLabelSensitive.module.css +9 -9
  376. package/src/components/NSLabelSensitive.tsx +101 -101
  377. package/src/components/NSLayout.module.css +22 -22
  378. package/src/components/NSLayout.tsx +143 -143
  379. package/src/components/NSLine.module.css +15 -15
  380. package/src/components/NSLine.tsx +13 -13
  381. package/src/components/NSLineText.module.css +38 -38
  382. package/src/components/NSLineText.tsx +17 -17
  383. package/src/components/NSLink.module.css +36 -36
  384. package/src/components/NSLink.tsx +26 -26
  385. package/src/components/NSLinkBlue.tsx +22 -22
  386. package/src/components/NSLinkGreen.tsx +13 -13
  387. package/src/components/NSLinkRed.tsx +13 -13
  388. package/src/components/NSListGrouped.module.css +69 -69
  389. package/src/components/NSListGrouped.tsx +106 -106
  390. package/src/components/NSListMenu.tsx +184 -184
  391. package/src/components/NSListProduct.tsx +78 -78
  392. package/src/components/NSLoading.module.css +10 -10
  393. package/src/components/NSLoading.tsx +43 -43
  394. package/src/components/NSMegaMenu.module.css +133 -133
  395. package/src/components/NSMegaMenu.tsx +188 -188
  396. package/src/components/NSMenuAction.module.css +88 -88
  397. package/src/components/NSMenuAction.tsx +106 -106
  398. package/src/components/NSMenuButton.module.css +44 -44
  399. package/src/components/NSMenuButton.tsx +198 -198
  400. package/src/components/NSNoData.module.css +11 -11
  401. package/src/components/NSNoData.tsx +24 -24
  402. package/src/components/NSPagination.module.css +87 -87
  403. package/src/components/NSPagination.tsx +183 -183
  404. package/src/components/NSPanel.module.css +28 -28
  405. package/src/components/NSPanel.tsx +26 -26
  406. package/src/components/NSPanelAccordion.module.css +4 -4
  407. package/src/components/NSPanelAccordion.tsx +51 -51
  408. package/src/components/NSProductSearch.module.css +73 -73
  409. package/src/components/NSProductSearch.tsx +193 -193
  410. package/src/components/NSProgressBar.module.css +38 -38
  411. package/src/components/NSProgressBar.tsx +29 -29
  412. package/src/components/NSRange.module.css +66 -66
  413. package/src/components/NSRange.tsx +83 -83
  414. package/src/components/NSReorderDialog.module.css +49 -49
  415. package/src/components/NSReorderDialog.tsx +154 -154
  416. package/src/components/NSRepeater.tsx +328 -328
  417. package/src/components/NSRepeaterNSBoxSchemaVariable.tsx +94 -94
  418. package/src/components/NSRepeaterNSTag.tsx +86 -86
  419. package/src/components/NSRow.module.css +17 -17
  420. package/src/components/NSRow.tsx +24 -24
  421. package/src/components/NSSection.module.css +4 -4
  422. package/src/components/NSSection.tsx +26 -26
  423. package/src/components/NSSectionCards.module.css +38 -38
  424. package/src/components/NSSectionCards.tsx +51 -51
  425. package/src/components/NSSectionTiles.module.css +10 -10
  426. package/src/components/NSSectionTiles.tsx +25 -25
  427. package/src/components/NSSectionTitle.tsx +19 -19
  428. package/src/components/NSSortDialog.tsx +124 -124
  429. package/src/components/NSSpace.tsx +28 -28
  430. package/src/components/NSSplitter.module.css +59 -59
  431. package/src/components/NSSplitter.tsx +211 -211
  432. package/src/components/NSTabPage.module.css +59 -59
  433. package/src/components/NSTabPage.tsx +122 -122
  434. package/src/components/NSTable.module.css +372 -372
  435. package/src/components/NSTable.tsx +1250 -1248
  436. package/src/components/NSTableChart.module.css +119 -119
  437. package/src/components/NSTableChart.tsx +732 -732
  438. package/src/components/NSTag.tsx +74 -74
  439. package/src/components/NSTile.module.css +76 -76
  440. package/src/components/NSTile.tsx +27 -27
  441. package/src/components/NSTimelineMonthly.module.css +71 -71
  442. package/src/components/NSTimelineMonthly.tsx +44 -44
  443. package/src/components/NSTitle.module.css +15 -15
  444. package/src/components/NSTitle.tsx +19 -19
  445. package/src/css.d.ts +13 -13
  446. package/src/formatter/BackColorFormatter.tsx +23 -23
  447. package/src/formatter/BaseColumnFormatter.ts +86 -86
  448. package/src/formatter/BaseURLImageFormatter.tsx +37 -37
  449. package/src/formatter/BooleanFormatter.ts +26 -26
  450. package/src/formatter/BytesFormatter.tsx +19 -19
  451. package/src/formatter/DateFormatter.ts +26 -26
  452. package/src/formatter/DateTimeFormatter.ts +26 -26
  453. package/src/formatter/DurationFormatter.ts +17 -17
  454. package/src/formatter/EmailFormatter.tsx +25 -25
  455. package/src/formatter/EnumFormatter.ts +17 -17
  456. package/src/formatter/FloatFormatter.ts +27 -27
  457. package/src/formatter/ForeColorFormatter.tsx +24 -24
  458. package/src/formatter/IDFormatter.tsx +57 -57
  459. package/src/formatter/IPFormatter.ts +39 -39
  460. package/src/formatter/IntegerFormatter.ts +27 -27
  461. package/src/formatter/JsonFormatter.tsx +77 -77
  462. package/src/formatter/MoneyFormatter.ts +39 -39
  463. package/src/formatter/PercentFormatter.tsx +43 -43
  464. package/src/formatter/PhoneFormatter.tsx +25 -25
  465. package/src/formatter/SensitiveFormatter.tsx +40 -40
  466. package/src/formatter/StringFormatter.tsx +47 -47
  467. package/src/formatter/TimeFormatter.ts +25 -25
  468. package/src/formatter/URLFormatter.tsx +28 -28
  469. package/src/formatter/UnknowFormatter.ts +22 -22
  470. package/src/index.tsx +7 -7
  471. package/src/main.ts +264 -264
  472. package/src/pages/NSImplementing.module.css +35 -35
  473. package/src/pages/NSImplementing.tsx +32 -32
  474. package/src/pages/NSNotFoundPage.module.css +18 -18
  475. package/src/pages/NSNotFoundPage.tsx +14 -14
  476. package/src/pages/NSUpdating.module.css +35 -35
  477. package/src/pages/NSUpdating.tsx +32 -32
  478. package/src/props/IBackgroundProps.ts +5 -5
  479. package/src/props/IBaseComponentProps.ts +8 -8
  480. package/src/props/IHeaderIconProps.ts +10 -10
  481. package/src/props/IHeaderLeftProps.ts +6 -6
  482. package/src/props/IHeaderRightProps.ts +8 -8
  483. package/src/props/IImageProps.ts +4 -4
  484. package/src/props/ILinkProps.ts +4 -4
  485. package/src/props/IValidationNumberProps.ts +4 -4
  486. package/src/props/IValidationPrecisionProps.ts +3 -3
  487. package/src/props/IValidationProps.ts +9 -9
  488. package/src/props/IValidationRegexProps.ts +4 -4
  489. package/src/props/IValidationStringProps.ts +4 -4
  490. package/src/routing/NSNotifier.ts +114 -114
  491. package/src/routing/NSRouterMaker.tsx +28 -28
  492. package/tsconfig.json +43 -43
package/src/App.tsx CHANGED
@@ -1,168 +1,168 @@
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 { 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
+ }
168
168
  }
@@ -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
  };