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/SKILL.md CHANGED
@@ -1,307 +1,307 @@
1
- ---
2
- name: namirasoft-site-react
3
- description: Use the namirasoft-site-react component library (NS* prefixed React components) when building UIs in projects that import "namirasoft-site-react". Covers form inputs (NSBoxString, NSBoxEmail, NSBoxPhone, NSBoxDate, NSBoxMoney, etc.), buttons (NSButton, NSButtonBlue/Green/Red), cards, dialogs, layouts, tables, charts, formatters, and routing. Trigger when the user adds or modifies UI in a project whose package.json depends on namirasoft-site-react, asks how to render a form field/button/dialog/table with NS components, or imports anything from "namirasoft-site-react".
4
- ---
5
-
6
- # namirasoft-site-react
7
-
8
- A React component library published as `namirasoft-site-react` on npm. All components are prefixed `NS`. This skill teaches you how to pick the right component and wire its props correctly.
9
-
10
- ## When this skill applies
11
-
12
- Trigger when the project's `package.json` lists `namirasoft-site-react` as a dependency, or when the user imports anything from `"namirasoft-site-react"`. Skip otherwise — do not push these components on projects that use a different design system (MUI, Chakra, shadcn, etc.).
13
-
14
- ## Cardinal rules
15
-
16
- 1. **Prefer `NS*` components over raw HTML.** When designing or modifying a page, do not reach for `<div>`, `<span>`, `<a>`, `<button>`, `<input>`, `<table>`, `<form>`, `<h1..h6>`, `<ul>`/`<li>`, `<img>`, `<section>`, etc. The whole point of this library is reuse — every visible element should map to an `NS*` component. Specifically:
17
- - layout: `NSLayout` / `NSSection` / `NSRow` / `NSColumn` / `NSSpace` / `NSPanel` instead of `<div>` + flex CSS
18
- - text: `NSTitle` / `NSLabel` / `NSLineText` instead of `<h1>` / `<span>` / `<p>`
19
- - links: `NSLink` (or `NSLinkBlue` / `NSLinkGreen` / `NSLinkRed`) instead of `<a>`
20
- - actions: `NSButton` (or color variants) instead of `<button>`
21
- - inputs: an `NSBox*` matching the data type instead of `<input>` / `<select>` / `<textarea>`
22
- - lists: `NSListGrouped` / `NSRepeater` / `NSTable` instead of `<ul>` / `<table>`
23
- - cards/tiles: `NSCard` / `NSTile` instead of bespoke `<div>` containers
24
- - dialogs: `NSDialog` (or its variants) instead of a hand-rolled modal
25
-
26
- Raw HTML is only acceptable when (a) no `NS*` equivalent exists, (b) you're rendering inside a component that explicitly takes `children: ReactNode` and a wrapper element is unavoidable, or (c) you're working with a third-party integration that requires it. When you do fall back to HTML, leave a one-line comment explaining why no `NS*` fit.
27
-
28
- 2. **Always import from the package root**: `import { NSBoxString, NSButton } from "namirasoft-site-react";` — never deep-import from `dist/...`.
29
- 3. **Every component accepts `IBaseComponentProps`**: `id?`, `name?`, `classList?: string[]`, `style?: React.CSSProperties`. Use `classList` (string array), not `className`.
30
- 4. **NSBox\* inputs are class components with a ref-based imperative API**: hold a `React.createRef<NSBoxString>()` and call `ref.current?.getValue()` / `setValue(v)` / `setDisabled(b)`. They are not controlled inputs — pass `defaultValue`, read via ref.
31
- 5. **Validation is built in**: every `NSBox*` requires `title: string` and `required: boolean`. `getValue()` throws if validation fails (call `getValue(false)` to skip the check).
32
- 6. **Buttons take an `onClick` *object*, not a function**: `<NSButton onClick={{ action: (done) => { ...; done(); }, showLoading: true }} />`. The `done` callback hides the spinner.
33
- 7. **CSS is bundled** — the package ships `.module.css` files alongside components. No separate stylesheet import is needed beyond what the package does internally.
34
-
35
- ## Picking the right component
36
-
37
- ### Form inputs (NSBox*)
38
-
39
- All take `title` (label) and `required`. Choose by data type:
40
-
41
- | Data | Component |
42
- |---|---|
43
- | Free text | `NSBoxString` |
44
- | Long text | `NSBoxTextArea` |
45
- | Email | `NSBoxEmail` |
46
- | URL | `NSBoxURL` |
47
- | Phone | `NSBoxPhone` (uses `react-phone-number-input`) |
48
- | Password / secret | `NSBoxSensitive` |
49
- | Whole number | `NSBoxInteger` |
50
- | Decimal | `NSBoxDouble` |
51
- | Currency | `NSBoxMoney` |
52
- | Boolean (checkbox) | `NSBoxBoolean` |
53
- | Multiple booleans | `NSBoxBooleans` |
54
- | Radio group | `NSBoxRadio` |
55
- | Enum / select | `NSBoxEnum` |
56
- | Combo (select with search) | `NSBoxCombo` |
57
- | Date only | `NSBoxDate` |
58
- | Date + time | `NSBoxDateTime` |
59
- | Time only | `NSBoxTime` |
60
- | Time zone | `NSBoxTimeZone` |
61
- | Duration | `NSBoxDuration` |
62
- | File upload | `NSBoxFile` |
63
- | IPv4 / IPv6 | `NSBoxIPV4`, `NSBoxIPV6` |
64
- | Semver | `NSBoxVersion` |
65
- | Search bar | `NSBoxSearch` |
66
- | Entity reference (FK) | `NSBoxEntity` |
67
- | Schema-driven dynamic field | `NSBoxDynamic`, `NSBoxDynamics`, `NSBoxSchemaBase`, `NSBoxSchemaVariable` |
68
-
69
- If you need to reach for a field type not in this table, prefer composing from `NSBoxString` over inventing a new component.
70
-
71
- ### Buttons & links
72
-
73
- - `NSButton` — base button, takes `title`, optional `icon`, and the `onClick` object (see rule 5).
74
- - `NSButtonBlue` / `NSButtonGreen` / `NSButtonRed` — semantic color variants (primary / success / destructive).
75
- - `NSLink` — base link.
76
- - `NSLinkBlue` / `NSLinkGreen` / `NSLinkRed` — semantic link variants.
77
- - `NSMenuButton` — button that opens a menu.
78
- - `NSMenuAction` — action menu item.
79
-
80
- ### Layout & structure
81
-
82
- - `NSLayout` — top-level page shell (header + footer + alerts + notifications + main). Requires `scope`, `logo`, `header.right`, `notifications`, `isLoggedIn`, and `notifier` (from `NSRouterMaker`). Use this once at the app root.
83
- - `NSHeader`, `NSFooter`, `NSMegaMenu` — pieces of `NSLayout`. You usually don't render these directly; let `NSLayout` compose them.
84
- - `NSSection`, `NSSectionTitle`, `NSSectionCards`, `NSSectionTiles` — vertical content blocks.
85
- - `NSRow`, `NSColumn` — flex row/column.
86
- - `NSSpace` — vertical/horizontal spacer (`size: NSSpaceSizeType.MINI | SMALL | ...`).
87
- - `NSSplitter` — resizable split pane.
88
- - `NSPanel`, `NSPanelAccordion` — bordered panels.
89
- - `NSTabPage` — tabbed pages.
90
- - `NSCard`, `NSCardScreenshot` — content cards with link.
91
- - `NSTile` — clickable tile.
92
-
93
- ### Data display
94
-
95
- - `NSTable` — full-featured table with pagination, sorts, column visibility, xlsx export. Driven by `columns: TableColumnInfo[]` (formatter-based) and `getRows: (page, size, sorts) => Promise<{rows, count}>`.
96
- - `NSPagination` — paginator.
97
- - `NSListGrouped`, `NSListProduct` — list layouts.
98
- - `NSRepeater`, `NSRepeaterNSTag`, `NSRepeaterNSBoxSchemaVariable` — render arrays of items.
99
- - `NSTag` — chip/tag.
100
- - `NSLabel`, `NSLabelErrorNotifier`, `NSLabelSensitive` — text labels.
101
- - `NSID` — formatted ID display.
102
- - `NSCopy`, `NSCopyBox` — copy-to-clipboard widgets.
103
- - `NSElectronicCard` — credit-card-style display card.
104
- - `NSEntityCardBackground` — backgrounded entity card.
105
-
106
- ### Charts & gauges
107
-
108
- - `NSChartBar`, `NSChartDoughnut`, `NSChartPie`, `NSChartRange`, `NSTableChart` — chart.js / antd-charts wrappers.
109
- - `NSGauge`, `NSGaugeNumber`, `NSGaugeDate` — single-metric gauges.
110
- - `NSProgressBar`, `NSRange` — progress / range bars.
111
- - `NSTimelineMonthly` — monthly timeline.
112
-
113
- ### Dialogs
114
-
115
- - `NSDialog` — base dialog. Takes `onClose: () => void` and `children`. Render conditionally based on local state.
116
- - `NSDialogDelete` — confirm-delete dialog.
117
- - `NSDialogInfo` — info/alert dialog.
118
- - `NSDialogPageSelection` — page-selection picker.
119
- - `NSDialogBox`, `NSDialogBoxString`, `NSDialogBoxDate`, `NSDialogBoxDateTime`, `NSDialogBoxPhone` — single-field edit dialogs.
120
- - `NSInfo` — inline info popover (smaller than a dialog).
121
-
122
- ### Bars & banners
123
-
124
- - `NSBanner` — page-top banner.
125
- - `NSBarTitle` — page title bar.
126
- - `NSBarAction` — action bar.
127
- - `NSBarAlert` — alert strip (driven by `isVisible()` predicate).
128
- - `NSBarNotification` — notification toast strip (managed by the `NSNotifier`).
129
-
130
- ### Filters
131
-
132
- - `NSFilterBox`, `NSFilterBoxItems`, `NSFilterItem` — query/filter UI for tables and lists.
133
-
134
- ### Misc / state
135
-
136
- - `NSLoading` — spinner. Takes `small`, `hideTitle`, `hideDescription`.
137
- - `NSNoData` — empty-state placeholder.
138
- - `NSDownTimer` — countdown.
139
- - `NSDownload` — download button/link.
140
- - `NSProductSearch` — product search dropdown (uses `ProductCacheService`).
141
- - `NSLine`, `NSLineText` — separators.
142
- - `NSTitle` — heading.
143
-
144
- ### Pages
145
-
146
- - `NSImplementing` — "this feature is being implemented" page.
147
- - `NSUpdating` — "this feature is updating" page.
148
- - `NSNotFoundPage` — 404 page. Use as the catch-all route.
149
-
150
- ## Formatters (for NSTable columns)
151
-
152
- Import and instantiate a `BaseColumnFormatter` subclass per column. Pick by data type:
153
-
154
- `StringFormatter`, `IntegerFormatter`, `FloatFormatter`, `MoneyFormatter`, `PercentFormatter`, `BooleanFormatter`, `EnumFormatter`, `DateFormatter`, `DateTimeFormatter`, `TimeFormatter`, `DurationFormatter`, `EmailFormatter`, `PhoneFormatter`, `URLFormatter`, `IPFormatter`, `IDFormatter`, `JsonFormatter`, `BytesFormatter`, `SensitiveFormatter`, `BackColorFormatter`, `ForeColorFormatter`, `BaseURLImageFormatter`, `UnknowFormatter` (fallback).
155
-
156
- ## Routing
157
-
158
- - `NSRouterMaker` — wraps a `NSRouterMakerComponent` with a `setState` callback and storage. Produces an `onRender()` that returns the routed JSX and provides a `NSNotifier` to children.
159
- - `NSNotifier` — lives on the `notifier` prop passed through `NSLayout` and friends. Methods: `addNotification`, `delNotification`, `onChangeState`.
160
- - `NSRouterMakerProps` — interface that exposes `notifier: NSNotifier` to a component.
161
-
162
- The `NSBaseMetaDatabase.getServerBaseURL` resolver is set up at module load so `Namirasoft<X>` package names map to `REACT_APP_BASE_URL_<X>` env vars (snake-uppercased). Define those env vars in `.env`.
163
-
164
- ## Utilities (named exports from the root)
165
-
166
- - `Validator` — static methods: `getError(title, value, props)`, `getErrorString(title, value, props)`. Used internally by NSBox\* but exposed for custom validation.
167
- - `NSBoxBuilder` — schema-driven NSBox factory.
168
- - `ProductCacheService` — async cache for product lookups (used by `NSProductSearch`).
169
- - `CopyToClipboard` — programmatic copy.
170
- - `EncryptionOperation` — client-side encryption helpers.
171
- - `Color` — color palette / utilities.
172
-
173
- ## Canonical examples
174
-
175
- ### Form with three fields and a submit
176
-
177
- ```tsx
178
- import React, { createRef } from "react";
179
- import { NSBoxString, NSBoxEmail, NSBoxPhone, NSButtonBlue } from "namirasoft-site-react";
180
-
181
- export function ContactForm() {
182
- const nameRef = createRef<NSBoxString>();
183
- const emailRef = createRef<NSBoxEmail>();
184
- const phoneRef = createRef<NSBoxPhone>();
185
-
186
- return (
187
- <>
188
- <NSBoxString ref={nameRef} title="Full Name" required min_length={2} max_length={120} />
189
- <NSBoxEmail ref={emailRef} title="Email" required />
190
- <NSBoxPhone ref={phoneRef} title="Phone" required={false} />
191
- <NSButtonBlue
192
- title="Submit"
193
- onClick={{
194
- action: (done) => {
195
- try {
196
- const payload = {
197
- name: nameRef.current?.getValue(),
198
- email: emailRef.current?.getValue(),
199
- phone: phoneRef.current?.getValue(false),
200
- };
201
- // ... submit payload
202
- } finally {
203
- done();
204
- }
205
- },
206
- showLoading: true,
207
- }}
208
- />
209
- </>
210
- );
211
- }
212
- ```
213
-
214
- Notes:
215
- - `getValue()` throws on validation failure and surfaces the error inline; that's intentional — wrap in try/finally so the spinner clears.
216
- - Use `getValue(false)` only for optional fields where you want the raw value without validation.
217
- - Don't try to read NSBox\* values via `useState` + `onChange` — the imperative ref API is the supported path.
218
-
219
- ### Confirm-delete dialog
220
-
221
- `NSDialogDelete` extends `NSDialogInfoProps` and takes `onYes` / `onNo` — each a `NSButtonOnClickProps` object (`{ action, showLoading? }`), not a plain function. `show_as_code` is required (set `false` for plain text).
222
-
223
- ```tsx
224
- import React, { useState } from "react";
225
- import { NSButtonRed, NSDialogDelete } from "namirasoft-site-react";
226
-
227
- export function DeleteRow({ onDelete }: { onDelete: () => Promise<void> }) {
228
- const [open, setOpen] = useState(false);
229
- return (
230
- <>
231
- <NSButtonRed title="Delete" onClick={{ action: (d) => { setOpen(true); d(); } }} />
232
- {open && (
233
- <NSDialogDelete
234
- title="Delete record?"
235
- description="This cannot be undone."
236
- show_as_code={false}
237
- onClose={() => setOpen(false)}
238
- onYes={{
239
- action: async (done) => {
240
- try { await onDelete(); setOpen(false); }
241
- finally { done(); }
242
- },
243
- showLoading: true,
244
- }}
245
- onNo={{ action: (done) => { setOpen(false); done(); } }}
246
- />
247
- )}
248
- </>
249
- );
250
- }
251
- ```
252
-
253
- ### Table with formatted columns
254
-
255
- ```tsx
256
- import { NSTable, IntegerFormatter, StringFormatter, DateTimeFormatter, TableColumnInfo } from "namirasoft-site-react";
257
-
258
- const table = { name: "user", text: "User" };
259
- const columns: TableColumnInfo[] = [
260
- { table, index: 0, name: "id", text: "ID", formatter: new IntegerFormatter() },
261
- { table, index: 1, name: "name", text: "Name", formatter: new StringFormatter() },
262
- { table, index: 2, name: "created_at", text: "Created", formatter: new DateTimeFormatter() },
263
- ];
264
-
265
- <NSTable
266
- name="users"
267
- checkbox={false}
268
- columns={columns}
269
- getRows={async (page, size, sorts) => {
270
- const res = await api.users.list({ page, size, sorts });
271
- return { rows: res.items, count: res.total };
272
- }}
273
- getRowKey={(row) => String(row.value.id)}
274
- />
275
- ```
276
-
277
- ### App shell
278
-
279
- ```tsx
280
- <NSLayout
281
- scope="MyApp"
282
- logo="/logo.png"
283
- notifier={notifier}
284
- isLoggedIn={() => !!session}
285
- header={{ right: { /* IHeaderRightProps */ }, left: { title: "Dashboard" } }}
286
- notifications={notifications}
287
- >
288
- {pageContent}
289
- </NSLayout>
290
- ```
291
-
292
- ## Common mistakes to avoid
293
-
294
- - ❌ Reaching for raw HTML (`<div>`, `<a>`, `<button>`, `<input>`, `<table>`, etc.) when an `NS*` equivalent exists — see Cardinal rule #1.
295
- - ❌ Passing `className="foo"` — use `classList={["foo"]}`.
296
- - ❌ Treating NSBox\* as controlled (`value`/`onChange`) — use refs + `defaultValue`.
297
- - ❌ Passing a function to `NSButton.onClick` — must be `{ action, showLoading? }`.
298
- - ❌ Forgetting to call `done()` in the button action — the spinner will hang forever.
299
- - ❌ Importing from `"namirasoft-site-react/dist/..."` — only the root path is supported.
300
- - ❌ Mixing this library with another design system on the same screen — visual conventions clash.
301
- - ❌ Inventing a new `NSBox<Type>` when an existing one fits — check the data-type table first.
302
-
303
- ## Peer expectations
304
-
305
- The package depends on (and re-exports types from) `namirasoft-core`, `namirasoft-schema`, `namirasoft-site`, `namirasoft-site-map`, `namirasoft-api-link`, `namirasoft-api-product`. If you import a type like `BaseMetaTable`, `SortItem`, `IStorage`, or `NamingConvention`, it lives in `namirasoft-core` — import it from there, not from `namirasoft-site-react`.
306
-
307
- React 18 and `react-router-dom` 7 are required peers. The library uses `react-app-rewired` for its own dev/test scripts, but consumers don't need it.
1
+ ---
2
+ name: namirasoft-site-react
3
+ description: Use the namirasoft-site-react component library (NS* prefixed React components) when building UIs in projects that import "namirasoft-site-react". Covers form inputs (NSBoxString, NSBoxEmail, NSBoxPhone, NSBoxDate, NSBoxMoney, etc.), buttons (NSButton, NSButtonBlue/Green/Red), cards, dialogs, layouts, tables, charts, formatters, and routing. Trigger when the user adds or modifies UI in a project whose package.json depends on namirasoft-site-react, asks how to render a form field/button/dialog/table with NS components, or imports anything from "namirasoft-site-react".
4
+ ---
5
+
6
+ # namirasoft-site-react
7
+
8
+ A React component library published as `namirasoft-site-react` on npm. All components are prefixed `NS`. This skill teaches you how to pick the right component and wire its props correctly.
9
+
10
+ ## When this skill applies
11
+
12
+ Trigger when the project's `package.json` lists `namirasoft-site-react` as a dependency, or when the user imports anything from `"namirasoft-site-react"`. Skip otherwise — do not push these components on projects that use a different design system (MUI, Chakra, shadcn, etc.).
13
+
14
+ ## Cardinal rules
15
+
16
+ 1. **Prefer `NS*` components over raw HTML.** When designing or modifying a page, do not reach for `<div>`, `<span>`, `<a>`, `<button>`, `<input>`, `<table>`, `<form>`, `<h1..h6>`, `<ul>`/`<li>`, `<img>`, `<section>`, etc. The whole point of this library is reuse — every visible element should map to an `NS*` component. Specifically:
17
+ - layout: `NSLayout` / `NSSection` / `NSRow` / `NSColumn` / `NSSpace` / `NSPanel` instead of `<div>` + flex CSS
18
+ - text: `NSTitle` / `NSLabel` / `NSLineText` instead of `<h1>` / `<span>` / `<p>`
19
+ - links: `NSLink` (or `NSLinkBlue` / `NSLinkGreen` / `NSLinkRed`) instead of `<a>`
20
+ - actions: `NSButton` (or color variants) instead of `<button>`
21
+ - inputs: an `NSBox*` matching the data type instead of `<input>` / `<select>` / `<textarea>`
22
+ - lists: `NSListGrouped` / `NSRepeater` / `NSTable` instead of `<ul>` / `<table>`
23
+ - cards/tiles: `NSCard` / `NSTile` instead of bespoke `<div>` containers
24
+ - dialogs: `NSDialog` (or its variants) instead of a hand-rolled modal
25
+
26
+ Raw HTML is only acceptable when (a) no `NS*` equivalent exists, (b) you're rendering inside a component that explicitly takes `children: ReactNode` and a wrapper element is unavoidable, or (c) you're working with a third-party integration that requires it. When you do fall back to HTML, leave a one-line comment explaining why no `NS*` fit.
27
+
28
+ 2. **Always import from the package root**: `import { NSBoxString, NSButton } from "namirasoft-site-react";` — never deep-import from `dist/...`.
29
+ 3. **Every component accepts `IBaseComponentProps`**: `id?`, `name?`, `classList?: string[]`, `style?: React.CSSProperties`. Use `classList` (string array), not `className`.
30
+ 4. **NSBox\* inputs are class components with a ref-based imperative API**: hold a `React.createRef<NSBoxString>()` and call `ref.current?.getValue()` / `setValue(v)` / `setDisabled(b)`. They are not controlled inputs — pass `defaultValue`, read via ref.
31
+ 5. **Validation is built in**: every `NSBox*` requires `title: string` and `required: boolean`. `getValue()` throws if validation fails (call `getValue(false)` to skip the check).
32
+ 6. **Buttons take an `onClick` *object*, not a function**: `<NSButton onClick={{ action: (done) => { ...; done(); }, showLoading: true }} />`. The `done` callback hides the spinner.
33
+ 7. **CSS is bundled** — the package ships `.module.css` files alongside components. No separate stylesheet import is needed beyond what the package does internally.
34
+
35
+ ## Picking the right component
36
+
37
+ ### Form inputs (NSBox*)
38
+
39
+ All take `title` (label) and `required`. Choose by data type:
40
+
41
+ | Data | Component |
42
+ |---|---|
43
+ | Free text | `NSBoxString` |
44
+ | Long text | `NSBoxTextArea` |
45
+ | Email | `NSBoxEmail` |
46
+ | URL | `NSBoxURL` |
47
+ | Phone | `NSBoxPhone` (uses `react-phone-number-input`) |
48
+ | Password / secret | `NSBoxSensitive` |
49
+ | Whole number | `NSBoxInteger` |
50
+ | Decimal | `NSBoxDouble` |
51
+ | Currency | `NSBoxMoney` |
52
+ | Boolean (checkbox) | `NSBoxBoolean` |
53
+ | Multiple booleans | `NSBoxBooleans` |
54
+ | Radio group | `NSBoxRadio` |
55
+ | Enum / select | `NSBoxEnum` |
56
+ | Combo (select with search) | `NSBoxCombo` |
57
+ | Date only | `NSBoxDate` |
58
+ | Date + time | `NSBoxDateTime` |
59
+ | Time only | `NSBoxTime` |
60
+ | Time zone | `NSBoxTimeZone` |
61
+ | Duration | `NSBoxDuration` |
62
+ | File upload | `NSBoxFile` |
63
+ | IPv4 / IPv6 | `NSBoxIPV4`, `NSBoxIPV6` |
64
+ | Semver | `NSBoxVersion` |
65
+ | Search bar | `NSBoxSearch` |
66
+ | Entity reference (FK) | `NSBoxEntity` |
67
+ | Schema-driven dynamic field | `NSBoxDynamic`, `NSBoxDynamics`, `NSBoxSchemaBase`, `NSBoxSchemaVariable` |
68
+
69
+ If you need to reach for a field type not in this table, prefer composing from `NSBoxString` over inventing a new component.
70
+
71
+ ### Buttons & links
72
+
73
+ - `NSButton` — base button, takes `title`, optional `icon`, and the `onClick` object (see rule 5).
74
+ - `NSButtonBlue` / `NSButtonGreen` / `NSButtonRed` — semantic color variants (primary / success / destructive).
75
+ - `NSLink` — base link.
76
+ - `NSLinkBlue` / `NSLinkGreen` / `NSLinkRed` — semantic link variants.
77
+ - `NSMenuButton` — button that opens a menu.
78
+ - `NSMenuAction` — action menu item.
79
+
80
+ ### Layout & structure
81
+
82
+ - `NSLayout` — top-level page shell (header + footer + alerts + notifications + main). Requires `scope`, `logo`, `header.right`, `notifications`, `isLoggedIn`, and `notifier` (from `NSRouterMaker`). Use this once at the app root.
83
+ - `NSHeader`, `NSFooter`, `NSMegaMenu` — pieces of `NSLayout`. You usually don't render these directly; let `NSLayout` compose them.
84
+ - `NSSection`, `NSSectionTitle`, `NSSectionCards`, `NSSectionTiles` — vertical content blocks.
85
+ - `NSRow`, `NSColumn` — flex row/column.
86
+ - `NSSpace` — vertical/horizontal spacer (`size: NSSpaceSizeType.MINI | SMALL | ...`).
87
+ - `NSSplitter` — resizable split pane.
88
+ - `NSPanel`, `NSPanelAccordion` — bordered panels.
89
+ - `NSTabPage` — tabbed pages.
90
+ - `NSCard`, `NSCardScreenshot` — content cards with link.
91
+ - `NSTile` — clickable tile.
92
+
93
+ ### Data display
94
+
95
+ - `NSTable` — full-featured table with pagination, sorts, column visibility, xlsx export. Driven by `columns: TableColumnInfo[]` (formatter-based) and `getRows: (page, size, sorts) => Promise<{rows, count}>`.
96
+ - `NSPagination` — paginator.
97
+ - `NSListGrouped`, `NSListProduct` — list layouts.
98
+ - `NSRepeater`, `NSRepeaterNSTag`, `NSRepeaterNSBoxSchemaVariable` — render arrays of items.
99
+ - `NSTag` — chip/tag.
100
+ - `NSLabel`, `NSLabelErrorNotifier`, `NSLabelSensitive` — text labels.
101
+ - `NSID` — formatted ID display.
102
+ - `NSCopy`, `NSCopyBox` — copy-to-clipboard widgets.
103
+ - `NSElectronicCard` — credit-card-style display card.
104
+ - `NSEntityCardBackground` — backgrounded entity card.
105
+
106
+ ### Charts & gauges
107
+
108
+ - `NSChartBar`, `NSChartDoughnut`, `NSChartPie`, `NSChartRange`, `NSTableChart` — chart.js / antd-charts wrappers.
109
+ - `NSGauge`, `NSGaugeNumber`, `NSGaugeDate` — single-metric gauges.
110
+ - `NSProgressBar`, `NSRange` — progress / range bars.
111
+ - `NSTimelineMonthly` — monthly timeline.
112
+
113
+ ### Dialogs
114
+
115
+ - `NSDialog` — base dialog. Takes `onClose: () => void` and `children`. Render conditionally based on local state.
116
+ - `NSDialogDelete` — confirm-delete dialog.
117
+ - `NSDialogInfo` — info/alert dialog.
118
+ - `NSDialogPageSelection` — page-selection picker.
119
+ - `NSDialogBox`, `NSDialogBoxString`, `NSDialogBoxDate`, `NSDialogBoxDateTime`, `NSDialogBoxPhone` — single-field edit dialogs.
120
+ - `NSInfo` — inline info popover (smaller than a dialog).
121
+
122
+ ### Bars & banners
123
+
124
+ - `NSBanner` — page-top banner.
125
+ - `NSBarTitle` — page title bar.
126
+ - `NSBarAction` — action bar.
127
+ - `NSBarAlert` — alert strip (driven by `isVisible()` predicate).
128
+ - `NSBarNotification` — notification toast strip (managed by the `NSNotifier`).
129
+
130
+ ### Filters
131
+
132
+ - `NSFilterBox`, `NSFilterBoxItems`, `NSFilterItem` — query/filter UI for tables and lists.
133
+
134
+ ### Misc / state
135
+
136
+ - `NSLoading` — spinner. Takes `small`, `hideTitle`, `hideDescription`.
137
+ - `NSNoData` — empty-state placeholder.
138
+ - `NSDownTimer` — countdown.
139
+ - `NSDownload` — download button/link.
140
+ - `NSProductSearch` — product search dropdown (uses `ProductCacheService`).
141
+ - `NSLine`, `NSLineText` — separators.
142
+ - `NSTitle` — heading.
143
+
144
+ ### Pages
145
+
146
+ - `NSImplementing` — "this feature is being implemented" page.
147
+ - `NSUpdating` — "this feature is updating" page.
148
+ - `NSNotFoundPage` — 404 page. Use as the catch-all route.
149
+
150
+ ## Formatters (for NSTable columns)
151
+
152
+ Import and instantiate a `BaseColumnFormatter` subclass per column. Pick by data type:
153
+
154
+ `StringFormatter`, `IntegerFormatter`, `FloatFormatter`, `MoneyFormatter`, `PercentFormatter`, `BooleanFormatter`, `EnumFormatter`, `DateFormatter`, `DateTimeFormatter`, `TimeFormatter`, `DurationFormatter`, `EmailFormatter`, `PhoneFormatter`, `URLFormatter`, `IPFormatter`, `IDFormatter`, `JsonFormatter`, `BytesFormatter`, `SensitiveFormatter`, `BackColorFormatter`, `ForeColorFormatter`, `BaseURLImageFormatter`, `UnknowFormatter` (fallback).
155
+
156
+ ## Routing
157
+
158
+ - `NSRouterMaker` — wraps a `NSRouterMakerComponent` with a `setState` callback and storage. Produces an `onRender()` that returns the routed JSX and provides a `NSNotifier` to children.
159
+ - `NSNotifier` — lives on the `notifier` prop passed through `NSLayout` and friends. Methods: `addNotification`, `delNotification`, `onChangeState`.
160
+ - `NSRouterMakerProps` — interface that exposes `notifier: NSNotifier` to a component.
161
+
162
+ The `NSBaseMetaDatabase.getServerBaseURL` resolver is set up at module load so `Namirasoft<X>` package names map to `REACT_APP_BASE_URL_<X>` env vars (snake-uppercased). Define those env vars in `.env`.
163
+
164
+ ## Utilities (named exports from the root)
165
+
166
+ - `Validator` — static methods: `getError(title, value, props)`, `getErrorString(title, value, props)`. Used internally by NSBox\* but exposed for custom validation.
167
+ - `NSBoxBuilder` — schema-driven NSBox factory.
168
+ - `ProductCacheService` — async cache for product lookups (used by `NSProductSearch`).
169
+ - `CopyToClipboard` — programmatic copy.
170
+ - `EncryptionOperation` — client-side encryption helpers.
171
+ - `Color` — color palette / utilities.
172
+
173
+ ## Canonical examples
174
+
175
+ ### Form with three fields and a submit
176
+
177
+ ```tsx
178
+ import React, { createRef } from "react";
179
+ import { NSBoxString, NSBoxEmail, NSBoxPhone, NSButtonBlue } from "namirasoft-site-react";
180
+
181
+ export function ContactForm() {
182
+ const nameRef = createRef<NSBoxString>();
183
+ const emailRef = createRef<NSBoxEmail>();
184
+ const phoneRef = createRef<NSBoxPhone>();
185
+
186
+ return (
187
+ <>
188
+ <NSBoxString ref={nameRef} title="Full Name" required min_length={2} max_length={120} />
189
+ <NSBoxEmail ref={emailRef} title="Email" required />
190
+ <NSBoxPhone ref={phoneRef} title="Phone" required={false} />
191
+ <NSButtonBlue
192
+ title="Submit"
193
+ onClick={{
194
+ action: (done) => {
195
+ try {
196
+ const payload = {
197
+ name: nameRef.current?.getValue(),
198
+ email: emailRef.current?.getValue(),
199
+ phone: phoneRef.current?.getValue(false),
200
+ };
201
+ // ... submit payload
202
+ } finally {
203
+ done();
204
+ }
205
+ },
206
+ showLoading: true,
207
+ }}
208
+ />
209
+ </>
210
+ );
211
+ }
212
+ ```
213
+
214
+ Notes:
215
+ - `getValue()` throws on validation failure and surfaces the error inline; that's intentional — wrap in try/finally so the spinner clears.
216
+ - Use `getValue(false)` only for optional fields where you want the raw value without validation.
217
+ - Don't try to read NSBox\* values via `useState` + `onChange` — the imperative ref API is the supported path.
218
+
219
+ ### Confirm-delete dialog
220
+
221
+ `NSDialogDelete` extends `NSDialogInfoProps` and takes `onYes` / `onNo` — each a `NSButtonOnClickProps` object (`{ action, showLoading? }`), not a plain function. `show_as_code` is required (set `false` for plain text).
222
+
223
+ ```tsx
224
+ import React, { useState } from "react";
225
+ import { NSButtonRed, NSDialogDelete } from "namirasoft-site-react";
226
+
227
+ export function DeleteRow({ onDelete }: { onDelete: () => Promise<void> }) {
228
+ const [open, setOpen] = useState(false);
229
+ return (
230
+ <>
231
+ <NSButtonRed title="Delete" onClick={{ action: (d) => { setOpen(true); d(); } }} />
232
+ {open && (
233
+ <NSDialogDelete
234
+ title="Delete record?"
235
+ description="This cannot be undone."
236
+ show_as_code={false}
237
+ onClose={() => setOpen(false)}
238
+ onYes={{
239
+ action: async (done) => {
240
+ try { await onDelete(); setOpen(false); }
241
+ finally { done(); }
242
+ },
243
+ showLoading: true,
244
+ }}
245
+ onNo={{ action: (done) => { setOpen(false); done(); } }}
246
+ />
247
+ )}
248
+ </>
249
+ );
250
+ }
251
+ ```
252
+
253
+ ### Table with formatted columns
254
+
255
+ ```tsx
256
+ import { NSTable, IntegerFormatter, StringFormatter, DateTimeFormatter, TableColumnInfo } from "namirasoft-site-react";
257
+
258
+ const table = { name: "user", text: "User" };
259
+ const columns: TableColumnInfo[] = [
260
+ { table, index: 0, name: "id", text: "ID", formatter: new IntegerFormatter() },
261
+ { table, index: 1, name: "name", text: "Name", formatter: new StringFormatter() },
262
+ { table, index: 2, name: "created_at", text: "Created", formatter: new DateTimeFormatter() },
263
+ ];
264
+
265
+ <NSTable
266
+ name="users"
267
+ checkbox={false}
268
+ columns={columns}
269
+ getRows={async (page, size, sorts) => {
270
+ const res = await api.users.list({ page, size, sorts });
271
+ return { rows: res.items, count: res.total };
272
+ }}
273
+ getRowKey={(row) => String(row.value.id)}
274
+ />
275
+ ```
276
+
277
+ ### App shell
278
+
279
+ ```tsx
280
+ <NSLayout
281
+ scope="MyApp"
282
+ logo="/logo.png"
283
+ notifier={notifier}
284
+ isLoggedIn={() => !!session}
285
+ header={{ right: { /* IHeaderRightProps */ }, left: { title: "Dashboard" } }}
286
+ notifications={notifications}
287
+ >
288
+ {pageContent}
289
+ </NSLayout>
290
+ ```
291
+
292
+ ## Common mistakes to avoid
293
+
294
+ - ❌ Reaching for raw HTML (`<div>`, `<a>`, `<button>`, `<input>`, `<table>`, etc.) when an `NS*` equivalent exists — see Cardinal rule #1.
295
+ - ❌ Passing `className="foo"` — use `classList={["foo"]}`.
296
+ - ❌ Treating NSBox\* as controlled (`value`/`onChange`) — use refs + `defaultValue`.
297
+ - ❌ Passing a function to `NSButton.onClick` — must be `{ action, showLoading? }`.
298
+ - ❌ Forgetting to call `done()` in the button action — the spinner will hang forever.
299
+ - ❌ Importing from `"namirasoft-site-react/dist/..."` — only the root path is supported.
300
+ - ❌ Mixing this library with another design system on the same screen — visual conventions clash.
301
+ - ❌ Inventing a new `NSBox<Type>` when an existing one fits — check the data-type table first.
302
+
303
+ ## Peer expectations
304
+
305
+ The package depends on (and re-exports types from) `namirasoft-core`, `namirasoft-schema`, `namirasoft-site`, `namirasoft-site-map`, `namirasoft-api-link`, `namirasoft-api-product`. If you import a type like `BaseMetaTable`, `SortItem`, `IStorage`, or `NamingConvention`, it lives in `namirasoft-core` — import it from there, not from `namirasoft-site-react`.
306
+
307
+ React 18 and `react-router-dom` 7 are required peers. The library uses `react-app-rewired` for its own dev/test scripts, but consumers don't need it.